@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,59 @@
|
|
|
1
|
+
# lib/render/ -- Universal Renderer
|
|
2
|
+
|
|
3
|
+
> ICM Layer 0 identity for the renderer module.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
The universal renderer translates a 4-zone payload + render mode + conversation operator + tier into the actual on-screen output. Owns the `render(zones, mode, operator, tier)` contract.
|
|
8
|
+
|
|
9
|
+
## Phase status
|
|
10
|
+
|
|
11
|
+
- **Phase 99-03 (shipped):** contract surface + no-op pass-through stub. Callers can import `{ render }` today; envelope returns `rendered: false` + `_stub: 'phase-99-03'` provenance tag. Operator validation against the 5 canonical values (JUST_TALK / EXPLORE_CAPTURE / BUILD_ROOM / METHODOLOGY / DECISION_GATE) ships now so Phase 102 inherits the fence.
|
|
12
|
+
- **Phase 102 (planned):** replaces the stub internals with real rendering logic per Phase 99 CONTEXT.md D-16. Same import surface; no caller changes.
|
|
13
|
+
|
|
14
|
+
## Files
|
|
15
|
+
|
|
16
|
+
| File | Role |
|
|
17
|
+
|------|------|
|
|
18
|
+
| render-v2.cjs | Contract surface. Phase 99-03 stub today, Phase 102 implementation later. Exports `{ render, OPERATORS }`. |
|
|
19
|
+
| render-v2.test.cjs | Contract tests: 8 IIFE scenarios (5-operator round-trip, JUST_TALK default for undefined and null, invalid-operator throw, envelope shape stable, mode passthrough, tier passthrough, OPERATORS frozen). Registered in lib/memory/run-feynman-tests.cjs. |
|
|
20
|
+
| ROOM.md | This file -- ICM Layer 0 identity per CLAUDE.md Decision #15. |
|
|
21
|
+
|
|
22
|
+
## Render contract (Phase 99 CONTEXT.md D-16)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
render(zones, mode, operator, tier) -> envelope
|
|
26
|
+
|
|
27
|
+
operator == JUST_TALK -> emit prose only (Phase 102)
|
|
28
|
+
operator == EXPLORE_CAPTURE -> prose; Shape E only on crystallization (Phase 102)
|
|
29
|
+
operator == BUILD_ROOM -> full 4-zone anatomy (Phase 102)
|
|
30
|
+
operator == METHODOLOGY -> no shape mid-session; Shape E at gate (Phase 102)
|
|
31
|
+
operator == DECISION_GATE -> Shape F.x; keyboard only (Phase 102)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Phase 99-03 stub returns `{ zones, mode, operator, tier, rendered: false, _stub: 'phase-99-03' }` with operator validated and defaulted to JUST_TALK when null/undefined.
|
|
35
|
+
|
|
36
|
+
## Canon refs
|
|
37
|
+
|
|
38
|
+
- **Part 3 (Tri-Context Decision Gate):** DECISION_GATE locks Shape F.x; the renderer enforces this at output time (Phase 102).
|
|
39
|
+
- **Part 4 (Every Choice Is Graph Data):** operator transitions written by Phase 99-01 are read by this renderer to pick shape (Phase 102).
|
|
40
|
+
- **Part 7 (Reuse Before Build):** Phase 99-03 ships the seam, not the muscle. Phase 102 replaces the stub internals without touching callers.
|
|
41
|
+
|
|
42
|
+
## Downstream consumers
|
|
43
|
+
|
|
44
|
+
- **Phase 99-04 (hooks):** imports `{ render }` for SessionStart restore behavior and PostToolUse rendering.
|
|
45
|
+
- **Phase 99-05 (`/mos:operator` command):** imports `{ render }` for Shape E inspection output.
|
|
46
|
+
- **Phase 102:** owns the actual rendering implementation; the import surface is byte-stable.
|
|
47
|
+
|
|
48
|
+
## Constraints
|
|
49
|
+
|
|
50
|
+
- Zero new runtime dependencies (Phase 87 invariant).
|
|
51
|
+
- CJS only (Phase 87 invariant).
|
|
52
|
+
- `render()` import surface MUST remain byte-stable across the Phase 102 swap.
|
|
53
|
+
- Operator vocabulary frozen at 5 canonical values; any 6th operator requires a Gate 1 review per Phase 99 CONTEXT.md D-03.
|
|
54
|
+
|
|
55
|
+
## See also
|
|
56
|
+
|
|
57
|
+
- `.planning/phases/99-conversation-operator-state-machine/99-CONTEXT.md` -- canonical context (operator taxonomy, transition table, renderer signature contract D-16, graceful degradation D-17).
|
|
58
|
+
- `.planning/phases/99-conversation-operator-state-machine/99-03-PLAN.md` -- this plan.
|
|
59
|
+
- `docs/MINDRIAN-CANON.md` -- North Star, Part 3 (Tri-Context Decision Gate), Part 4 (Every Choice Is Graph Data), Part 7 (Reuse Before Build).
|
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
6
|
+
*
|
|
7
|
+
* Phase 102-01 -- universal renderer (extended signature).
|
|
8
|
+
*
|
|
9
|
+
* Replaces the Phase 99-03 stub at the same import surface. Phase 102
|
|
10
|
+
* evolves the signature to a single destructured object so we can carry
|
|
11
|
+
* the full context tuple (operator, tier, jtbd, tokenBudget, roomDir,
|
|
12
|
+
* provenance) without another signature break in 102-02..05.
|
|
13
|
+
*
|
|
14
|
+
* Phase 102-01 ships skeleton + zone composition only. Hooks:
|
|
15
|
+
* 1. Compaction -> 102-02 3. Color overlay -> 102-05
|
|
16
|
+
* 2. JTBD-aware Z4 -> 102-03 4. Provenance -> 102-04
|
|
17
|
+
* Numbered comment markers in render() are the insertion points.
|
|
18
|
+
*
|
|
19
|
+
* Per CONTEXT D-10, lib/render/render.cjs ships in the same wave as a
|
|
20
|
+
* thin shim around this v2 entry, preserving the legacy 4-arg
|
|
21
|
+
* positional signature for callers that have not yet migrated.
|
|
22
|
+
*
|
|
23
|
+
* Canon parts: 3 (Tri-Context Gate, output-side enforcement),
|
|
24
|
+
* 4 (operator transitions read here), 5 (evidence tier via Z3),
|
|
25
|
+
* 7 (single formatter for every /mos: command), 8 (D-09: this renderer
|
|
26
|
+
* NEVER calls Brain inline -- pure formatting layer; Canon Part 8
|
|
27
|
+
* compliant by construction).
|
|
28
|
+
*
|
|
29
|
+
* Constraints: zero new runtime deps, CJS only (Phase 87 invariant),
|
|
30
|
+
* defensive defaults so {} or undefined cannot crash the formatter.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The 5 canonical operators (Phase 99 CONTEXT.md D-03, frozen).
|
|
35
|
+
* Re-exported for downstream consumers that want to validate operator
|
|
36
|
+
* values without re-importing from lib/conversation/operator.cjs.
|
|
37
|
+
*
|
|
38
|
+
* @type {ReadonlyArray<string>}
|
|
39
|
+
*/
|
|
40
|
+
const OPERATORS = Object.freeze([
|
|
41
|
+
'JUST_TALK',
|
|
42
|
+
'EXPLORE_CAPTURE',
|
|
43
|
+
'BUILD_ROOM',
|
|
44
|
+
'METHODOLOGY',
|
|
45
|
+
'DECISION_GATE',
|
|
46
|
+
]);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* JTBD -> CLI semantic color map (Phase 102 D-06).
|
|
50
|
+
*
|
|
51
|
+
* Maps each of the 13 canonical Phase 100 JTBD handles to one of the 5
|
|
52
|
+
* SKILL.md §4 CLI colors (red / yellow / cyan / green / gray). NO new
|
|
53
|
+
* colors invented; the 5-color contract is the boundary.
|
|
54
|
+
*
|
|
55
|
+
* Color anchors:
|
|
56
|
+
* - red : commit / blocker / contradiction (high-stakes)
|
|
57
|
+
* - yellow : questioning / challenge / warning
|
|
58
|
+
* - cyan : informational / cross-reference / capture
|
|
59
|
+
* - green : forward action / commitment / success
|
|
60
|
+
* - gray : meta / no specific action (the canvas)
|
|
61
|
+
*
|
|
62
|
+
* @type {Readonly<Record<string,string>>}
|
|
63
|
+
*/
|
|
64
|
+
const JTBD_CLI_COLOR = Object.freeze({
|
|
65
|
+
'decide-pursue': 'red',
|
|
66
|
+
'find-problem': 'yellow',
|
|
67
|
+
'understand-market': 'cyan',
|
|
68
|
+
'find-bottleneck': 'red',
|
|
69
|
+
'prepare-pitch': 'green',
|
|
70
|
+
'validate-idea': 'yellow',
|
|
71
|
+
'compare-options': 'cyan',
|
|
72
|
+
'connect-domains': 'cyan',
|
|
73
|
+
'surface-contradiction': 'red',
|
|
74
|
+
'plan-execution': 'green',
|
|
75
|
+
'file-meeting': 'cyan',
|
|
76
|
+
'audit-room': 'yellow',
|
|
77
|
+
'explore': 'gray',
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* ANSI SGR escape sequences for the 5-color contract (SKILL.md §4).
|
|
82
|
+
* Used by Zone 1 left-rail accent (D-07). TTY-gated at render time so
|
|
83
|
+
* non-TTY captures (CI logs, JSON-mode emission) stay byte-clean.
|
|
84
|
+
*
|
|
85
|
+
* @type {Readonly<Record<string,string>>}
|
|
86
|
+
*/
|
|
87
|
+
const ANSI = Object.freeze({
|
|
88
|
+
red: '\x1b[31m',
|
|
89
|
+
yellow: '\x1b[33m',
|
|
90
|
+
cyan: '\x1b[36m',
|
|
91
|
+
green: '\x1b[32m',
|
|
92
|
+
gray: '\x1b[90m',
|
|
93
|
+
reset: '\x1b[0m',
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Render a 4-zone payload into a single output string + contract envelope.
|
|
98
|
+
*
|
|
99
|
+
* @param {object} args
|
|
100
|
+
* @param {object} [args.zones] - { header, body, signals?, footer? }
|
|
101
|
+
* @param {string} [args.mode] - 'A' | 'B' | 'tier-0' (default 'A')
|
|
102
|
+
* @param {string|null} [args.operator] - one of OPERATORS or null
|
|
103
|
+
* @param {number} [args.tier] - 0|1|2|3 (default 1)
|
|
104
|
+
* @param {string|null} [args.jtbd] - active JTBD or null (default null)
|
|
105
|
+
* @param {object} [args.tokenBudget] - { used, total } (default {0,1})
|
|
106
|
+
* @param {string} [args.roomDir] - absolute room path; used by
|
|
107
|
+
* downstream plans for selector-dispatcher
|
|
108
|
+
* access. Defaults to env or process.cwd().
|
|
109
|
+
* @param {object|null} [args.provenance] - optional Brain provenance object
|
|
110
|
+
* @returns {{ rendered: string, contract: object }}
|
|
111
|
+
*/
|
|
112
|
+
function render(args) {
|
|
113
|
+
args = args || {};
|
|
114
|
+
// Defensive defaults — every arg can be missing or null/undefined.
|
|
115
|
+
let zones = args.zones || {};
|
|
116
|
+
const mode = args.mode || 'A';
|
|
117
|
+
const operator = args.operator || null;
|
|
118
|
+
const tier = (args.tier === undefined || args.tier === null) ? 1 : args.tier;
|
|
119
|
+
const jtbd = args.jtbd || null;
|
|
120
|
+
const tokenBudget = args.tokenBudget || { used: 0, total: 1 };
|
|
121
|
+
const roomDir = args.roomDir || process.env.MINDRIAN_ROOM_DIR || process.cwd();
|
|
122
|
+
let provenance = args.provenance || null;
|
|
123
|
+
|
|
124
|
+
// -------------------------------------------------------------------------
|
|
125
|
+
// Algorithm steps 1-7: hooks for downstream plans (102-02..05).
|
|
126
|
+
// The numbered markers MUST stay so follow-on plans land at the right spot.
|
|
127
|
+
// -------------------------------------------------------------------------
|
|
128
|
+
|
|
129
|
+
// 1. Compaction decision (Phase 102-02 — single 80% threshold).
|
|
130
|
+
// Source priority: explicit env var (CLAUDE_CONTEXT_USED_PCT) >
|
|
131
|
+
// caller-supplied tokenBudget > memory heuristic. See isCompact() below.
|
|
132
|
+
// Adaptive granularity (50/70/80/90) is v1.15.x deferred (CONTEXT D-02).
|
|
133
|
+
const compact = isCompact(tokenBudget);
|
|
134
|
+
|
|
135
|
+
// 2. JTBD-aware Zone 4 (Phase 102-03) -- dispatch for both jtbd-set and
|
|
136
|
+
// jtbd-null+BUILD_ROOM (per CONTEXT D-04). Free-Text is forced last by
|
|
137
|
+
// the dispatcher's ensureFreeTextLast invariant. The operator gates in
|
|
138
|
+
// step 6 (JUST_TALK / METHODOLOGY) override this enrichment when needed
|
|
139
|
+
// -- order matters: we set zones.footer here, step 6 may strip it.
|
|
140
|
+
const shouldFireZone4 = (zones.footer === undefined)
|
|
141
|
+
&& operator !== 'JUST_TALK'
|
|
142
|
+
&& operator !== 'METHODOLOGY'
|
|
143
|
+
&& (jtbd || operator === 'BUILD_ROOM');
|
|
144
|
+
|
|
145
|
+
if (shouldFireZone4) {
|
|
146
|
+
try {
|
|
147
|
+
const dispatcher = require('../hmi/selector-dispatcher.cjs');
|
|
148
|
+
const result = dispatcher.pickShape({
|
|
149
|
+
requestedShape: 'F',
|
|
150
|
+
roomDir: roomDir,
|
|
151
|
+
operator: operator,
|
|
152
|
+
tier: tier,
|
|
153
|
+
payload: {},
|
|
154
|
+
});
|
|
155
|
+
// Dispatcher returns F.6 when jtbd set, F.1 (canonical 10) when jtbd null.
|
|
156
|
+
// Result envelope: { shape, rendered: { zones, contract } }. Pull verbs
|
|
157
|
+
// off contract.verbs and the pre-formatted body off zones.body so the
|
|
158
|
+
// composeZones B6 footer contract is satisfied (rendered string short
|
|
159
|
+
// path; verbs[] defense-in-depth fallback).
|
|
160
|
+
if (result && result.rendered && result.rendered.contract
|
|
161
|
+
&& Array.isArray(result.rendered.contract.verbs)) {
|
|
162
|
+
zones = Object.assign({}, zones, {
|
|
163
|
+
footer: {
|
|
164
|
+
verbs: result.rendered.contract.verbs.slice(),
|
|
165
|
+
shape: result.shape,
|
|
166
|
+
rendered: (result.rendered.zones && typeof result.rendered.zones.body === 'string')
|
|
167
|
+
? result.rendered.zones.body : null,
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
} catch (err) {
|
|
172
|
+
// Graceful fallback per Canon Part 3 Rule 2: dispatcher errors must
|
|
173
|
+
// never block the render. Surface debug info under MINDRIAN_DEBUG=1
|
|
174
|
+
// and leave zones.footer undefined for the caller / downstream default.
|
|
175
|
+
if (process.env.MINDRIAN_DEBUG === '1') {
|
|
176
|
+
process.stderr.write(
|
|
177
|
+
'[render-v2] zone4 dispatcher error: '
|
|
178
|
+
+ String((err && err.message) || err).slice(0, 80) + '\n'
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// 3. Zone 1 left-rail accent (Phase 102-05; D-06 + D-07).
|
|
185
|
+
// Subtle JTBD-aware accent: a single colored ■ glyph prepended to
|
|
186
|
+
// the existing Zone 1 header. ALL gates must hold:
|
|
187
|
+
// (a) jtbd is non-null and present in JTBD_CLI_COLOR (D-06);
|
|
188
|
+
// (b) compact mode is OFF (D-08; uses the unified `compact` flag
|
|
189
|
+
// from slot 1 above, so the local env+budget gate from the
|
|
190
|
+
// 102-05 worktree's standalone build collapses out -- single
|
|
191
|
+
// source of truth for compaction);
|
|
192
|
+
// (c) process.stdout.isTTY is true -- non-TTY captures (CI logs,
|
|
193
|
+
// piped output, JSON-mode emission) MUST stay byte-clean per
|
|
194
|
+
// the RENDER-102-05 strip-ANSI invariant.
|
|
195
|
+
// The ■ glyph itself is shape, not color -- emit it in BOTH TTY and
|
|
196
|
+
// non-TTY modes so the strip-ANSI(TTY) === non-TTY byte-identical
|
|
197
|
+
// invariant holds. Only the ANSI SGR bytes are gated on isTTY.
|
|
198
|
+
// Mutate a shallow copy so we never alter the caller's zones object.
|
|
199
|
+
if (!compact && jtbd && JTBD_CLI_COLOR[jtbd]) {
|
|
200
|
+
const useColor = process.stdout.isTTY === true;
|
|
201
|
+
const color = useColor ? ANSI[JTBD_CLI_COLOR[jtbd]] : '';
|
|
202
|
+
const reset = useColor ? ANSI.reset : '';
|
|
203
|
+
zones = Object.assign({}, zones);
|
|
204
|
+
zones.header = color + '■' + reset + ' ' + (zones.header || '');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// 4. Provenance enrichment (Phase 102-04 -- LOCAL-only audit envelope).
|
|
208
|
+
// Build the LOCAL-only _provenance envelope. Per RENDER-102-04 +
|
|
209
|
+
// Canon Part 8, every render result carries:
|
|
210
|
+
// { renderer:'render-v2', version:'102', operator, tier, mode, jtbd }
|
|
211
|
+
// Zero Brain queries, zero network IO, zero filesystem reads outside
|
|
212
|
+
// lib/render/JTBD-PALETTES.md. The fields are pure scalar passthroughs
|
|
213
|
+
// of args already destructured above; no user-content strings are
|
|
214
|
+
// embedded (operator + mode + tier + jtbd are framework-handle enums
|
|
215
|
+
// or null), so this envelope is Canon Part 8 compliant by construction.
|
|
216
|
+
// The 'provenance' caller arg (from upstream Brain-aware code paths)
|
|
217
|
+
// is intentionally NOT folded into _provenance to avoid leaking caller-
|
|
218
|
+
// supplied user content into the renderer's audit envelope; callers may
|
|
219
|
+
// place that payload into zones.signals themselves if they want it
|
|
220
|
+
// surfaced. Attached non-enumerably via attachProvenance() so the
|
|
221
|
+
// Phase 99-03 byte-stability fence (Object.keys === [contract,rendered])
|
|
222
|
+
// stays green.
|
|
223
|
+
const _provenance = Object.freeze({
|
|
224
|
+
renderer: 'render-v2',
|
|
225
|
+
version: '102',
|
|
226
|
+
operator: operator,
|
|
227
|
+
tier: tier,
|
|
228
|
+
mode: mode,
|
|
229
|
+
jtbd: jtbd,
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
// 5. Compact mode application (Phase 102-02). Apply AFTER any upstream
|
|
233
|
+
// enrichment hooks (Z4 dispatcher, color overlay, provenance) so
|
|
234
|
+
// compaction trims the final pre-compose payload. Sibling 102-05's
|
|
235
|
+
// color-overlay block (slot 3) self-gates against compact via its
|
|
236
|
+
// own local check; once that local gate is folded into this unified
|
|
237
|
+
// `compact` flag (future cleanup), the redundancy drops out without
|
|
238
|
+
// changing observable behavior.
|
|
239
|
+
if (compact) zones = applyCompaction(zones);
|
|
240
|
+
|
|
241
|
+
// 6. Operator-driven Zone 4 gates (102-01: ship this gate today).
|
|
242
|
+
// JUST_TALK suppresses ALL output (prose-only operator); METHODOLOGY
|
|
243
|
+
// mid-session strips Zone 4 (the methodology owns the screen).
|
|
244
|
+
if (operator === 'JUST_TALK') {
|
|
245
|
+
return attachProvenance(
|
|
246
|
+
{ rendered: '', contract: { suppressed: true, reason: 'just-talk' } },
|
|
247
|
+
_provenance
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
if (operator === 'METHODOLOGY' && (!zones.body || !zones.body.endingSignal)) {
|
|
251
|
+
// Mutate a shallow copy so we never alter the caller's object.
|
|
252
|
+
zones = Object.assign({}, zones);
|
|
253
|
+
delete zones.footer;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// 7. Mode B prefix (filled by 102-04)
|
|
257
|
+
// if (mode === 'B' && zones.header && !String(zones.header).startsWith('⚠')) {
|
|
258
|
+
// zones.header = '⚠ Brain unreachable; running on local graph only.\n' + zones.header;
|
|
259
|
+
// }
|
|
260
|
+
|
|
261
|
+
// -------------------------------------------------------------------------
|
|
262
|
+
// Step 8: compose 4 zones into a single string.
|
|
263
|
+
// -------------------------------------------------------------------------
|
|
264
|
+
const composed = composeZones(zones);
|
|
265
|
+
|
|
266
|
+
// Reference the not-yet-used vars so static analyzers do not warn before
|
|
267
|
+
// 102-05 wires them up. (102-03 consumed: tier, jtbd, roomDir via the Z4
|
|
268
|
+
// dispatcher. 102-04 consumed: mode + tier + jtbd into _provenance. The
|
|
269
|
+
// upstream caller-supplied `provenance` arg remains unused -- intentionally
|
|
270
|
+
// NOT folded into _provenance to avoid leaking user content per Canon
|
|
271
|
+
// Part 8; callers may put it in zones.signals themselves.)
|
|
272
|
+
void provenance;
|
|
273
|
+
|
|
274
|
+
// Surface `compact` on the contract so downstream plans can branch on it
|
|
275
|
+
// (102-05 reads it to drop the color overlay; tests inspect it to verify
|
|
276
|
+
// the compaction gate fired). The non-enumerable _provenance envelope is
|
|
277
|
+
// attached via attachProvenance() so Object.keys(env) stays
|
|
278
|
+
// ['contract','rendered'] (RENDER-102-06 byte-stability invariant).
|
|
279
|
+
return attachProvenance(
|
|
280
|
+
{ rendered: composed, contract: { compact: compact } },
|
|
281
|
+
_provenance
|
|
282
|
+
);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Attach a non-enumerable, frozen `_provenance` field to a render envelope.
|
|
287
|
+
*
|
|
288
|
+
* Non-enumerable so `Object.keys(env).sort()` still equals
|
|
289
|
+
* `['contract','rendered']` (per RENDER-102-06: the Phase 99-03 -> Phase 102
|
|
290
|
+
* import-surface byte-stability fence in `lib/render/render-v2.test.cjs`
|
|
291
|
+
* scenario 5). The field is still readable as `env._provenance` for any
|
|
292
|
+
* caller that asks for it explicitly (audit, telemetry, debug surface).
|
|
293
|
+
*
|
|
294
|
+
* Configurable: false; writable: false. The whole envelope is intended to
|
|
295
|
+
* be a single-pass write -- callers that mutate it are out of contract.
|
|
296
|
+
*
|
|
297
|
+
* @param {object} envelope - { rendered, contract } from the renderer.
|
|
298
|
+
* @param {object} provenance - frozen provenance descriptor.
|
|
299
|
+
* @returns {object} same envelope, with `_provenance` attached.
|
|
300
|
+
*/
|
|
301
|
+
function attachProvenance(envelope, provenance) {
|
|
302
|
+
Object.defineProperty(envelope, '_provenance', {
|
|
303
|
+
value: provenance,
|
|
304
|
+
enumerable: false,
|
|
305
|
+
configurable: false,
|
|
306
|
+
writable: false,
|
|
307
|
+
});
|
|
308
|
+
return envelope;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Compose a 4-zone payload into a single newline-delimited string.
|
|
313
|
+
*
|
|
314
|
+
* Footer shape contract (cross-plan with 102-03):
|
|
315
|
+
* - string: emit verbatim
|
|
316
|
+
* - { rendered: string }: emit rendered field (pre-formatted by dispatcher in 102-03)
|
|
317
|
+
* - { verbs: string[] }: emit verbs as `▷ <verb>` lines (defense-in-depth fallback)
|
|
318
|
+
*
|
|
319
|
+
* Signals shape:
|
|
320
|
+
* - array of strings; each prefixed with `▷ ` and joined by newlines.
|
|
321
|
+
*
|
|
322
|
+
* @param {object} zones
|
|
323
|
+
* @returns {string}
|
|
324
|
+
*/
|
|
325
|
+
function composeZones(zones) {
|
|
326
|
+
zones = zones || {};
|
|
327
|
+
const header = zones.header;
|
|
328
|
+
const body = zones.body;
|
|
329
|
+
const signals = zones.signals;
|
|
330
|
+
const footer = zones.footer;
|
|
331
|
+
|
|
332
|
+
const parts = [];
|
|
333
|
+
|
|
334
|
+
if (header) parts.push(String(header));
|
|
335
|
+
|
|
336
|
+
if (body) {
|
|
337
|
+
if (typeof body === 'string') {
|
|
338
|
+
parts.push(body);
|
|
339
|
+
} else if (body.text) {
|
|
340
|
+
parts.push(String(body.text));
|
|
341
|
+
} else {
|
|
342
|
+
parts.push(JSON.stringify(body));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (Array.isArray(signals) && signals.length) {
|
|
347
|
+
parts.push(signals.map(function (s) { return '▷ ' + s; }).join('\n'));
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
if (footer) {
|
|
351
|
+
if (typeof footer === 'string') {
|
|
352
|
+
parts.push(footer);
|
|
353
|
+
} else if (footer.rendered) {
|
|
354
|
+
parts.push(String(footer.rendered));
|
|
355
|
+
} else if (Array.isArray(footer.verbs)) {
|
|
356
|
+
parts.push(footer.verbs.map(function (v) { return '▷ ' + v; }).join('\n'));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return parts.filter(Boolean).join('\n\n');
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// ---------------------------------------------------------------------------
|
|
364
|
+
// Phase 102-02 — token-budget-aware compaction layer.
|
|
365
|
+
//
|
|
366
|
+
// Single 80% threshold (CONTEXT D-02 + D-03). Adaptive granularity
|
|
367
|
+
// (50% / 70% / 80% / 90%) is v1.15.x deferred. Compaction is a pure
|
|
368
|
+
// function of zones; callers see the trimmed payload via composeZones.
|
|
369
|
+
// ---------------------------------------------------------------------------
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Decide whether to compact based on token-budget signals.
|
|
373
|
+
*
|
|
374
|
+
* Source priority (CONTEXT D-02):
|
|
375
|
+
* 1. process.env.CLAUDE_CONTEXT_USED_PCT — explicit Claude Code signal.
|
|
376
|
+
* Treated as a percentage in 0..100. Returns true when > 80.
|
|
377
|
+
* 2. caller-supplied tokenBudget {used, total} — explicit numbers from
|
|
378
|
+
* the caller. Returns true when used/total > 0.80. Requires both
|
|
379
|
+
* total > 0 AND used > 0; the defensive default {used:0, total:1}
|
|
380
|
+
* falls through to the heuristic.
|
|
381
|
+
* 3. process.memoryUsage() heuristic — heapUsed/heapTotal > 0.95.
|
|
382
|
+
* Rough last-resort proxy that ONLY triggers under genuine heap
|
|
383
|
+
* pressure. Idle Node CLIs sit at ~0.70 routinely, so the original
|
|
384
|
+
* 0.60 threshold from RESEARCH §2 step 1 misfired against the 99-03
|
|
385
|
+
* regression fence + 102-01 signature suites (both call render()
|
|
386
|
+
* with no env var and no explicit budget; both expect non-compact
|
|
387
|
+
* output). Raised to 0.95 here as a Rule 1 deviation; documented in
|
|
388
|
+
* 102-02-SUMMARY.md "Deviations from Plan". The function still
|
|
389
|
+
* always returns a boolean per the plan's done-criteria 8.
|
|
390
|
+
*
|
|
391
|
+
* @param {object} tokenBudget - { used, total }
|
|
392
|
+
* @returns {boolean} true when the renderer should switch to compact mode.
|
|
393
|
+
*/
|
|
394
|
+
function isCompact(tokenBudget) {
|
|
395
|
+
// 1. Explicit env signal from Claude Code. Truthy + parseable wins.
|
|
396
|
+
if (process.env.CLAUDE_CONTEXT_USED_PCT) {
|
|
397
|
+
const pct = parseFloat(process.env.CLAUDE_CONTEXT_USED_PCT) / 100;
|
|
398
|
+
if (!isNaN(pct)) return pct > 0.80;
|
|
399
|
+
}
|
|
400
|
+
// 2. Caller-supplied {used, total}. Defensive: only trust positive
|
|
401
|
+
// totals AND a positive `used` so the {0,1} default falls through.
|
|
402
|
+
if (tokenBudget && tokenBudget.total > 0 && tokenBudget.used > 0) {
|
|
403
|
+
return (tokenBudget.used / tokenBudget.total) > 0.80;
|
|
404
|
+
}
|
|
405
|
+
// 3. Memory heuristic fallback. Threshold raised from 0.60 -> 0.95 so
|
|
406
|
+
// idle Node processes do not trip compaction. Always returns boolean.
|
|
407
|
+
const m = process.memoryUsage();
|
|
408
|
+
return (m.heapUsed / m.heapTotal) > 0.95;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* Apply Phase 102-02 compaction rules to a zones payload.
|
|
413
|
+
*
|
|
414
|
+
* Returns a new shallow-copied object; never mutates the caller's zones.
|
|
415
|
+
* Compaction rules (CONTEXT D-03):
|
|
416
|
+
* - Z1 header: single line; strip decorative dashes / box-drawing glyphs.
|
|
417
|
+
* The `-- ... --` envelope collapses to a leading `■ ` (canonical
|
|
418
|
+
* compact glyph from the `■ ✓ ⚠ →` allowlist).
|
|
419
|
+
* - Z2 body: cap at 30 lines. Lines 31..N replaced by a single
|
|
420
|
+
* `... <N more rows>` summary line. String body shape preserved.
|
|
421
|
+
* - Z3 signals: cap at 2 (down from 3).
|
|
422
|
+
* - Z4 footer (object form with verbs[]): cap at 2; if the verb list
|
|
423
|
+
* ends in `Free-Text`, preserve `Free-Text` as the LAST element
|
|
424
|
+
* (Phase 100 invariant — Free-Text is always the escape hatch).
|
|
425
|
+
*
|
|
426
|
+
* @param {object} zones
|
|
427
|
+
* @returns {object} compacted zones (shallow copy)
|
|
428
|
+
*/
|
|
429
|
+
function applyCompaction(zones) {
|
|
430
|
+
const out = Object.assign({}, zones || {});
|
|
431
|
+
|
|
432
|
+
// Z1: simplify header — single line, strip decorative dashes/box-drawing.
|
|
433
|
+
if (out.header) {
|
|
434
|
+
let h = String(out.header);
|
|
435
|
+
h = h.split('\n')[0]; // single line first
|
|
436
|
+
// Collapse leading "-- " into "■ " (canonical compact glyph) and drop
|
|
437
|
+
// any trailing " -- " envelope. Mid-string " -- " separators are kept
|
|
438
|
+
// (semantic between-segment dividers); only the outer envelope is
|
|
439
|
+
// decorative and strippable.
|
|
440
|
+
h = h.replace(/^-- /, '■ ').replace(/ -- $/, '');
|
|
441
|
+
// Strip box-drawing characters anywhere in the header.
|
|
442
|
+
h = h.replace(/[─━│┌┐└┘╭╮╰╯]/g, '');
|
|
443
|
+
out.header = h;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// Z2: cap body at 30 lines (string form only — object-shaped bodies are
|
|
447
|
+
// upstream's job to compact).
|
|
448
|
+
if (typeof out.body === 'string') {
|
|
449
|
+
const lines = out.body.split('\n');
|
|
450
|
+
if (lines.length > 30) {
|
|
451
|
+
const overflow = lines.length - 30;
|
|
452
|
+
out.body = lines.slice(0, 30).join('\n') + '\n... <' + overflow + ' more rows>';
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
// Z3: cap signals at 2.
|
|
457
|
+
if (Array.isArray(out.signals) && out.signals.length > 2) {
|
|
458
|
+
out.signals = out.signals.slice(0, 2);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// Z4: cap footer.verbs at 2; preserve Free-Text last when present.
|
|
462
|
+
if (out.footer && typeof out.footer === 'object' && Array.isArray(out.footer.verbs)) {
|
|
463
|
+
const verbs = out.footer.verbs;
|
|
464
|
+
if (verbs.length > 2) {
|
|
465
|
+
const hasFreeText = verbs[verbs.length - 1] === 'Free-Text';
|
|
466
|
+
const trimmed = hasFreeText
|
|
467
|
+
? [verbs[0], 'Free-Text']
|
|
468
|
+
: verbs.slice(0, 2);
|
|
469
|
+
out.footer = Object.assign({}, out.footer, { verbs: trimmed });
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
return out;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
module.exports = {
|
|
477
|
+
render,
|
|
478
|
+
OPERATORS,
|
|
479
|
+
composeZones,
|
|
480
|
+
// Phase 102-02 exports for test fences + downstream introspection.
|
|
481
|
+
isCompact,
|
|
482
|
+
applyCompaction,
|
|
483
|
+
// Phase 102-05 exports for test fences + downstream introspection.
|
|
484
|
+
JTBD_CLI_COLOR,
|
|
485
|
+
ANSI,
|
|
486
|
+
};
|