@mindrian_os/cli 2.0.0-beta.3 → 2.0.0-beta.31
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 +14 -0
- package/CHANGELOG.md +467 -0
- package/agents/analogy-query-fetcher.md +119 -0
- package/agents/brain-query.md +91 -0
- package/agents/competitor-watch-fetcher.md +94 -0
- package/agents/framework-runner.md +258 -0
- package/agents/grading.md +216 -0
- package/agents/grant-reviewer.md +191 -0
- package/agents/investor.md +141 -0
- package/agents/larry-extended.md +215 -0
- package/agents/meeting-perspective-extractor.md +94 -0
- package/agents/opportunity-scanner.md +105 -0
- package/agents/persona-analyst.md +201 -0
- package/agents/research.md +103 -0
- package/agents/reverse-salient-agent.md +42 -0
- package/agents/vault-section-reviewer.md +107 -0
- package/assets/banner-showcase.html +537 -0
- package/assets/fonts/BebasNeue-Regular.ttf +0 -0
- package/assets/fonts/Inter-Bold.ttf +0 -0
- package/assets/fonts/Inter-Regular.ttf +0 -0
- package/assets/logo.svg +10 -0
- package/bin/local-chain-recommender.cjs +256 -0
- package/bin/mindrian-brain-mcp-client.cjs +319 -0
- package/bin/mindrian-mcp-server.cjs +445 -0
- package/bin/mindrian-mcp-shim.cjs +100 -0
- package/bin/mindrian-tools.cjs +784 -0
- package/commands/act.md +529 -0
- package/commands/admin.md +439 -0
- package/commands/agentshield.md +49 -0
- package/commands/analyze-needs.md +78 -0
- package/commands/analyze-systems.md +73 -0
- package/commands/analyze-timing.md +98 -0
- package/commands/auto-explore.md +85 -0
- package/commands/beautiful-question.md +76 -0
- package/commands/bono.md +152 -0
- package/commands/brain-derive.md +137 -0
- package/commands/build-knowledge.md +121 -0
- package/commands/build-thesis.md +94 -0
- package/commands/causal.md +269 -0
- package/commands/challenge-assumptions.md +78 -0
- package/commands/compare-ventures.md +117 -0
- package/commands/correct-reference-now.md +88 -0
- package/commands/dashboard.md +144 -0
- package/commands/deck.md +117 -0
- package/commands/deep-grade.md +214 -0
- package/commands/diagnose.md +131 -0
- package/commands/diagnostics.md +195 -0
- package/commands/dial-memory-refresh.md +113 -0
- package/commands/diffusion.md +129 -0
- package/commands/discover.md +221 -0
- package/commands/doctor.md +271 -0
- package/commands/dogfood-flush.md +130 -0
- package/commands/dominant-designs.md +76 -0
- package/commands/eureka.md +315 -0
- package/commands/explain-decision.md +135 -0
- package/commands/explore-domains.md +78 -0
- package/commands/explore-futures.md +67 -0
- package/commands/explore-opportunity.md +172 -0
- package/commands/explore-trends.md +78 -0
- package/commands/export.md +128 -0
- package/commands/feynman-timeline-refresh.md +102 -0
- package/commands/file-meeting.md +1195 -0
- package/commands/find-analogies.md +369 -0
- package/commands/find-bottlenecks.md +108 -0
- package/commands/find-connections.md +111 -0
- package/commands/funding.md +114 -0
- package/commands/futures.md +128 -0
- package/commands/grade-grant.md +297 -0
- package/commands/grade.md +257 -0
- package/commands/graph.md +218 -0
- package/commands/hat-briefing.md +163 -0
- package/commands/heal.md +72 -0
- package/commands/help.md +176 -0
- package/commands/hmi-status.md +75 -0
- package/commands/ignite.md +229 -0
- package/commands/ingest-methodology.md +128 -0
- package/commands/intel-pipeline.md +133 -0
- package/commands/jtbd.md +262 -0
- package/commands/leadership.md +113 -0
- package/commands/lean-canvas.md +74 -0
- package/commands/macro-trends.md +88 -0
- package/commands/map-unknowns.md +76 -0
- package/commands/memory-cortex-reach.md +79 -0
- package/commands/memory.md +213 -0
- package/commands/models.md +200 -0
- package/commands/mos-reason.md +489 -0
- package/commands/mos.md +162 -0
- package/commands/mullins.md +155 -0
- package/commands/mva-brief.md +86 -0
- package/commands/mva-option.md +119 -0
- package/commands/mva-report.md +76 -0
- package/commands/new-project.md +633 -0
- package/commands/new-surface.md +116 -0
- package/commands/onboard.md +489 -0
- package/commands/operator.md +168 -0
- package/commands/opportunities.md +177 -0
- package/commands/organize.md +74 -0
- package/commands/persona.md +276 -0
- package/commands/pipeline.md +167 -0
- package/commands/present.md +125 -0
- package/commands/publish.md +227 -0
- package/commands/pws-brain.md +154 -0
- package/commands/qualify-opportunity.md +113 -0
- package/commands/query.md +70 -0
- package/commands/radar.md +110 -0
- package/commands/reanalyze.md +124 -0
- package/commands/research.md +467 -0
- package/commands/room.md +385 -0
- package/commands/rooms.md +682 -0
- package/commands/root-cause.md +77 -0
- package/commands/rs-experts.md +153 -0
- package/commands/rs-explain.md +134 -0
- package/commands/rs-fetch.md +119 -0
- package/commands/rs-thesis.md +131 -0
- package/commands/scenario-plan.md +80 -0
- package/commands/scheduled-tasks.md +308 -0
- package/commands/score-innovation.md +78 -0
- package/commands/scout.md +379 -0
- package/commands/setup.md +658 -0
- package/commands/show.md +71 -0
- package/commands/skill.md +108 -0
- package/commands/snapshot.md +179 -0
- package/commands/speakers.md +118 -0
- package/commands/splash.md +55 -0
- package/commands/stance.md +91 -0
- package/commands/status.md +109 -0
- package/commands/structure-argument.md +82 -0
- package/commands/suggest-next.md +141 -0
- package/commands/systems-thinking.md +224 -0
- package/commands/think-hats.md +86 -0
- package/commands/trending-to-absurd.md +151 -0
- package/commands/update.md +256 -0
- package/commands/user-needs.md +77 -0
- package/commands/validate.md +77 -0
- package/commands/value-proposition.md +116 -0
- package/commands/vault.md +330 -0
- package/commands/visualize.md +71 -0
- package/commands/whitespace.md +541 -0
- package/commands/wiki.md +96 -0
- package/data/ROOM.md +47 -0
- package/data/brain-census.generated.json +2617 -0
- package/data/brain-orchestration-projection.json +4973 -0
- package/data/brain-packet-schema.json +545 -0
- package/data/brain-surface-contract.json +32 -0
- package/data/capability-ledger.json +391 -0
- package/data/capability-map-registry.json +23 -0
- package/data/command-registry.json +2433 -0
- package/data/connector-coverage-ledger.json +1618 -0
- package/data/connector-out-of-spine-allowlist.json +71 -0
- package/data/connector-registry.json +3637 -0
- package/data/corpus-stats-source.json +11 -0
- package/data/corpus-stats.generated.json +10 -0
- package/data/cross-domain-analogues.json +15 -0
- package/data/deck-aliases.json +6 -0
- package/data/deck-styles.json +85 -0
- package/data/deployment-surfaces.json +69 -0
- package/data/dispatch-framework-map.json +18 -0
- package/data/doctor-modules.json +206 -0
- package/data/dual-graph-health-baseline.json +12 -0
- package/data/eureka-critic-tags.json +32 -0
- package/data/first-reward-surfaces.json +66 -0
- package/data/first-touch-surfaces.json +60 -0
- package/data/flagship-floor-set.json +37 -0
- package/data/framework-names.json +121 -0
- package/data/grant-rubric-fixtures/early-stage-pre-seed.json +18 -0
- package/data/grant-rubric-fixtures/early-stage-round-a.json +18 -0
- package/data/grant-rubric-fixtures/early-stage-seed.json +18 -0
- package/data/grant-rubric-fixtures/hybrid-seed-incentive.json +18 -0
- package/data/grant-rubric-fixtures/rd-fund.json +18 -0
- package/data/grant-rubric-fixtures/regional-innovation-incubators.json +18 -0
- package/data/grant-rubric-fixtures/technology-incubators.json +18 -0
- package/data/grant-rubric-fixtures/tnufa.json +167 -0
- package/data/grant-rubric-schema.json +33 -0
- package/data/harness-fixtures/converged-room/.context/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/.intelligence/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/.snapshots/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/MINTO.md +19 -0
- package/data/harness-fixtures/converged-room/STATE.md +73 -0
- package/data/harness-fixtures/converged-room/USER.md +23 -0
- package/data/harness-fixtures/converged-room/assets/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/business-model/CONTEXT.md +32 -0
- package/data/harness-fixtures/converged-room/business-model/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/competitive-analysis/CONTEXT.md +33 -0
- package/data/harness-fixtures/converged-room/competitive-analysis/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/financial-model/CONTEXT.md +30 -0
- package/data/harness-fixtures/converged-room/financial-model/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/funding/CONTEXT.md +41 -0
- package/data/harness-fixtures/converged-room/funding/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/legal-ip/CONTEXT.md +30 -0
- package/data/harness-fixtures/converged-room/legal-ip/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/market-analysis/CONTEXT.md +32 -0
- package/data/harness-fixtures/converged-room/market-analysis/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/opportunity-bank/CONTEXT.md +39 -0
- package/data/harness-fixtures/converged-room/opportunity-bank/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/problem-definition/CONTEXT.md +32 -0
- package/data/harness-fixtures/converged-room/problem-definition/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/references/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/references/SECTION-SCHEMA.md +213 -0
- package/data/harness-fixtures/converged-room/references/SUB-SCHEMAS.md +91 -0
- package/data/harness-fixtures/converged-room/solution-design/CONTEXT.md +36 -0
- package/data/harness-fixtures/converged-room/solution-design/ROOM.md +36 -0
- package/data/harness-fixtures/converged-room/strategy/CONTEXT.md +35 -0
- package/data/harness-fixtures/converged-room/strategy/ROOM.md +35 -0
- package/data/harness-fixtures/converged-room/team/ROOM.md +13 -0
- package/data/harness-fixtures/converged-room/team-execution/CONTEXT.md +36 -0
- package/data/harness-fixtures/converged-room/team-execution/ROOM.md +35 -0
- package/data/harness-manifest.json +74 -0
- package/data/harness-policies/CONTEXT.md +55 -0
- package/data/harness-policies/_schema.json +42 -0
- package/data/harness-policies/contract-parity-larry.json +63 -0
- package/data/harness-policies/gate-card-fire.json +13 -0
- package/data/harness-policies/gate-graph-derive-health.json +13 -0
- package/data/harness-policies/gate-shape-declaration.json +13 -0
- package/data/harness-policies/gate-tool-honesty.json +13 -0
- package/data/harness-policies/gate-worktree-hygiene.json +13 -0
- package/data/harness-policies/memory-write-policy.json +28 -0
- package/data/harness-policies/registry-drift.json +13 -0
- package/data/harness-policies/release-payload-ceiling.json +13 -0
- package/data/harness-policies/voice-backend-noun-free.json +13 -0
- package/data/harness-policies/voice-fork-as-card.json +13 -0
- package/data/harness-policies/voice-glyph-present.json +13 -0
- package/data/harness-policies/voice-hyphens-only.json +13 -0
- package/data/help-groups.json +236 -0
- package/data/hitl-shape-backfill.json +777 -0
- package/data/hitl-shape-declaration-fixtures/invalid-bad-shape.json +5 -0
- package/data/hitl-shape-declaration-fixtures/invalid-missing-why.json +4 -0
- package/data/hitl-shape-declaration-fixtures/invalid-ranker-contradiction.json +6 -0
- package/data/hitl-shape-declaration-fixtures/invalid-skill-gap.json +3 -0
- package/data/hitl-shape-declaration-fixtures/valid-multi-stage.json +7 -0
- package/data/hitl-shape-declaration-fixtures/valid-single-shape.json +5 -0
- package/data/hitl-shape-declaration-fixtures/valid-skill-exempt.json +5 -0
- package/data/hitl-shape-declaration-schema.json +34 -0
- package/data/hitl-stages-fixtures/bono.json +10 -0
- package/data/hitl-stages-fixtures/pipeline-1.json +9 -0
- package/data/hitl-stages-fixtures/pipeline-2.json +9 -0
- package/data/hitl-stages-fixtures/pipeline-3.json +10 -0
- package/data/hitl-stages-fixtures/research.json +10 -0
- package/data/hitl-stages-fixtures/rs-convergence.json +10 -0
- package/data/hitl-stages-fixtures/rs-family.json +11 -0
- package/data/hitl-stages-fixtures/rs-reverse-salient.json +10 -0
- package/data/hitl-stages-fixtures/trending-to-absurd.json +11 -0
- package/data/hitl-stages-schema.json +26 -0
- package/data/mcp-tool-connectors.json +464 -0
- package/data/mva-agent-prompts.json +31 -0
- package/data/mva-deck-template.html +15 -0
- package/data/mva-heuristic-keywords.json +35 -0
- package/data/orchestration-command-ledger.json +576 -0
- package/data/orchestration-unwired-allowlist.json +6 -0
- package/data/portfolio-ahp-matrix.json +16 -0
- package/data/publish-needs.json +76 -0
- package/data/render-coverage-registry.json +1152 -0
- package/data/research-sources.json +58 -0
- package/data/roadmap-type-chains.json +28 -0
- package/data/room-blueprints.json +156 -0
- package/data/subagent-dispatch-grants.json +150 -0
- package/hooks/hooks.json +493 -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 +1163 -0
- package/lib/agents/mva/brain-classic-traps.cjs +55 -0
- package/lib/agents/mva/brain-cross-domain.cjs +79 -0
- package/lib/agents/mva/brain-similar-ventures.cjs +93 -0
- package/lib/agents/mva/dashboard-graph-neighborhood.cjs +72 -0
- package/lib/agents/mva/index.cjs +42 -0
- package/lib/agents/mva/six-hats-red-black.cjs +137 -0
- package/lib/agents/mva/tavily-funding-scan.cjs +147 -0
- package/lib/agents/mva/test-all-six-agents.cjs +467 -0
- package/lib/agents/reverse-salient-agent.cjs +757 -0
- package/lib/agents/tension-hook-agent.cjs +586 -0
- package/lib/brain/ROOM.md +44 -0
- package/lib/brain/chain-recommender.cjs +784 -0
- package/lib/brain/curation-batch.cjs +519 -0
- package/lib/brain/framework-chain-slice.cjs +252 -0
- package/lib/brain/hypergraph-event-schema.cjs +184 -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-epistemic-cap.test.cjs +156 -0
- package/lib/conversation/operator.cjs +492 -0
- package/lib/conversation/operator.test.cjs +160 -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_corpus_exclude.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/abstraction-gate.cjs +133 -0
- package/lib/core/act-jtbd-blurb.cjs +231 -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/behavioral/observation-schema.cjs +86 -0
- package/lib/core/bono/cell-fanout.cjs +305 -0
- package/lib/core/bono/debate-composition.cjs +495 -0
- package/lib/core/bono/hat-governance.cjs +367 -0
- package/lib/core/bono/persona-research.cjs +288 -0
- package/lib/core/bono/reviewer-governance.cjs +331 -0
- package/lib/core/brain-client.cjs +2365 -0
- package/lib/core/brain-derivation-prompts.cjs +331 -0
- package/lib/core/brain-derivation-queue.cjs +535 -0
- package/lib/core/brain-derivation.cjs +740 -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 +396 -0
- package/lib/core/breakthrough/canary.cjs +134 -0
- package/lib/core/breakthrough/canary.test.cjs +136 -0
- package/lib/core/breakthrough/detectors.cjs +359 -0
- package/lib/core/breakthrough/detectors.test.cjs +333 -0
- package/lib/core/breakthrough/ethics-fence.cjs +129 -0
- package/lib/core/breakthrough/ethics-fence.test.cjs +178 -0
- package/lib/core/breakthrough/resurfacing.cjs +150 -0
- package/lib/core/breakthrough/resurfacing.test.cjs +233 -0
- package/lib/core/breakthrough/review-queue.cjs +168 -0
- package/lib/core/breakthrough/review-queue.test.cjs +160 -0
- package/lib/core/breakthrough/scanner-d17-d18.test.cjs +229 -0
- package/lib/core/breakthrough/scanner.cjs +435 -0
- package/lib/core/breakthrough/scanner.test.cjs +267 -0
- package/lib/core/breakthrough/schema.cjs +180 -0
- package/lib/core/breakthrough/schema.test.cjs +256 -0
- package/lib/core/breakthrough/scoring.cjs +293 -0
- package/lib/core/breakthrough/scoring.test.cjs +423 -0
- package/lib/core/breakthrough/verb-dispatch.cjs +230 -0
- package/lib/core/breakthrough/verb-dispatch.test.cjs +185 -0
- package/lib/core/breakthrough/voice-scaffold.cjs +249 -0
- package/lib/core/breakthrough/voice-scaffold.test.cjs +251 -0
- package/lib/core/bridge-writer.cjs +477 -0
- package/lib/core/cache-prune.cjs +314 -0
- package/lib/core/card-fire-gate.cjs +107 -0
- package/lib/core/card-fire-sidechannel.cjs +518 -0
- package/lib/core/chain-executor.cjs +939 -0
- package/lib/core/chain-retry.cjs +214 -0
- package/lib/core/chain-step-dispatcher.cjs +397 -0
- package/lib/core/chat-context-builder.cjs +253 -0
- package/lib/core/check-plugin-enabled.cjs +145 -0
- package/lib/core/close-loop-writer.cjs +492 -0
- package/lib/core/command-registration-check.cjs +246 -0
- package/lib/core/correlation-label-index.cjs +230 -0
- package/lib/core/correlation.cjs +112 -0
- package/lib/core/coverage-monitor.cjs +183 -0
- package/lib/core/coverage-rollup.cjs +232 -0
- package/lib/core/cross-room-aggregator.cjs +1127 -0
- package/lib/core/cross-room-store.cjs +292 -0
- package/lib/core/cross-room-triggers.cjs +222 -0
- package/lib/core/daily-briefing.cjs +438 -0
- package/lib/core/decision-axes.cjs +178 -0
- package/lib/core/decision-capture.cjs +618 -0
- package/lib/core/deck-design-rules.cjs +211 -0
- package/lib/core/deep-links.cjs +82 -0
- package/lib/core/directive-envelope.cjs +217 -0
- package/lib/core/directive-envelope.test.cjs +225 -0
- package/lib/core/dispatch-optimizer.cjs +354 -0
- package/lib/core/doc-text-extractor.cjs +133 -0
- package/lib/core/doctor/capability-ledger-module.cjs +170 -0
- package/lib/core/doctor/card-fire-health-module.cjs +159 -0
- package/lib/core/doctor/cascade-rooms-active-module.cjs +127 -0
- package/lib/core/doctor/cascade-rooms-module.cjs +184 -0
- package/lib/core/doctor/class-m-brain-smoke.cjs +479 -0
- package/lib/core/doctor/class-m-brain-smoke.test.cjs +448 -0
- package/lib/core/doctor/class-s-eureka-smoke.cjs +380 -0
- package/lib/core/doctor/deployment-surfaces-module.cjs +408 -0
- package/lib/core/doctor/deprecated-usage-module.cjs +155 -0
- package/lib/core/doctor/eureka-fts-health-module.cjs +236 -0
- package/lib/core/doctor/graph-derive-heal-retrofit-module.cjs +148 -0
- package/lib/core/doctor/graph-derive-health-module.cjs +486 -0
- package/lib/core/doctor/install-incomplete-module.cjs +320 -0
- package/lib/core/doctor/install-state-module.cjs +503 -0
- package/lib/core/doctor/mcp-surface-module.cjs +369 -0
- package/lib/core/doctor/mode-select-checkpoint-module.cjs +113 -0
- package/lib/core/doctor/plugin-enabled-state-module.cjs +86 -0
- package/lib/core/doctor/room-graph-density-module.cjs +181 -0
- package/lib/core/doctor/room-md-module.cjs +198 -0
- package/lib/core/doctor/shared.cjs +555 -0
- package/lib/core/doctor/stale-first-touch-copy-module.cjs +83 -0
- package/lib/core/doctor/statusline-visibility-module.cjs +295 -0
- package/lib/core/doctor/ui-compliance-module.cjs +223 -0
- package/lib/core/doctor/umbilical-module.cjs +486 -0
- package/lib/core/doctor/verify-surface-module.cjs +82 -0
- package/lib/core/doctor/voice-style-log-module.cjs +146 -0
- package/lib/core/domain-insight-sweep.cjs +224 -0
- package/lib/core/drift-baseline.cjs +362 -0
- package/lib/core/drift-runtime-reachability.cjs +283 -0
- package/lib/core/dual-path-detector.cjs +84 -0
- package/lib/core/dual-path-detector.test.cjs +334 -0
- package/lib/core/enrichment-queue.cjs +636 -0
- package/lib/core/eureka/ahp-weights.cjs +232 -0
- package/lib/core/eureka/analogy-fitness.cjs +326 -0
- package/lib/core/eureka/compression-meter.cjs +165 -0
- package/lib/core/eureka/embedding-classifier.cjs +226 -0
- package/lib/core/eureka/embedding-spine.cjs +563 -0
- package/lib/core/eureka/entity-classifier.cjs +232 -0
- package/lib/core/eureka/entity-extractor.cjs +356 -0
- package/lib/core/eureka/eureka-enable.cjs +228 -0
- package/lib/core/eureka/eureka-offer.cjs +225 -0
- package/lib/core/eureka/eureka-reach-runner.cjs +430 -0
- package/lib/core/eureka/explore-chain.cjs +834 -0
- package/lib/core/eureka/explored-artifact.cjs +456 -0
- package/lib/core/eureka/fts-index-lifecycle.cjs +265 -0
- package/lib/core/eureka/grade-grant-examine.cjs +544 -0
- package/lib/core/eureka/grade-grant.cjs +596 -0
- package/lib/core/eureka/hybrid-retrieve.cjs +256 -0
- package/lib/core/eureka/lateral-engine-adapter.cjs +118 -0
- package/lib/core/eureka/lexical-overlap.cjs +98 -0
- package/lib/core/eureka/online-pattern-query.cjs +142 -0
- package/lib/core/eureka/opportunity-harvest.cjs +752 -0
- package/lib/core/eureka/opportunity-statement.cjs +519 -0
- package/lib/core/eureka/portfolio-dimensions.cjs +255 -0
- package/lib/core/eureka/qualify-opportunity.cjs +607 -0
- package/lib/core/eureka/reasoning-mode.cjs +481 -0
- package/lib/core/eureka/report-html.cjs +368 -0
- package/lib/core/eureka/research-filing.cjs +547 -0
- package/lib/core/eureka/room-native-substrate.cjs +343 -0
- package/lib/core/eureka/tail-quadrant.cjs +177 -0
- package/lib/core/eureka/tri-modal-index.cjs +564 -0
- package/lib/core/eureka/vector-store.cjs +414 -0
- package/lib/core/eureka-critic.cjs +733 -0
- package/lib/core/eureka-deps-resolver.cjs +179 -0
- package/lib/core/expert-genesis.cjs +437 -0
- package/lib/core/expert-library.cjs +303 -0
- package/lib/core/exports-log.cjs +79 -0
- package/lib/core/feynman/ROOM.md +25 -0
- package/lib/core/feynman/dial-memory-renderer.cjs +279 -0
- package/lib/core/feynman/dial-memory-runner.cjs +173 -0
- package/lib/core/feynman/feynman-seed-writer.cjs +187 -0
- package/lib/core/feynman/timeline-renderer.cjs +197 -0
- package/lib/core/feynman/timeline-runner.cjs +281 -0
- package/lib/core/feynman-minto-invariants.cjs +609 -0
- package/lib/core/findings-wirer.cjs +360 -0
- package/lib/core/first-touch-version-stamper.cjs +113 -0
- package/lib/core/folder-memory-async.cjs +424 -0
- package/lib/core/folder-memory-shared.cjs +890 -0
- package/lib/core/folder-memory.cjs +546 -0
- package/lib/core/framework-chain-composer.cjs +583 -0
- package/lib/core/frontmatter-schemas.cjs +468 -0
- package/lib/core/fusion-router.cjs +540 -0
- package/lib/core/futures/causal-cue.cjs +91 -0
- package/lib/core/futures/orchestrator.cjs +1391 -0
- package/lib/core/futures/subsystem-render.cjs +164 -0
- package/lib/core/gate-relevance.cjs +278 -0
- package/lib/core/git-ops.cjs +141 -0
- package/lib/core/graph-backfill.cjs +562 -0
- package/lib/core/graph-candidate-producer.cjs +235 -0
- package/lib/core/graph-derivation.cjs +546 -0
- package/lib/core/graph-derive-classifier.cjs +352 -0
- package/lib/core/graph-ops.cjs +274 -0
- package/lib/core/graph-refine-loop.cjs +194 -0
- package/lib/core/graph-self-heal.cjs +289 -0
- package/lib/core/greeting-intent-detector.cjs +201 -0
- package/lib/core/grill-engine.cjs +459 -0
- package/lib/core/hat-persistence.cjs +274 -0
- package/lib/core/hsi-engine.cjs +439 -0
- package/lib/core/hsi-lsa.cjs +246 -0
- package/lib/core/hsi-spectral.cjs +554 -0
- package/lib/core/hsi-to-graph.test.cjs +168 -0
- package/lib/core/icm-forest.cjs +703 -0
- package/lib/core/ignite-branch-gate.cjs +66 -0
- package/lib/core/index.cjs +60 -0
- package/lib/core/insight-sensors.cjs +1000 -0
- package/lib/core/install-state.cjs +242 -0
- package/lib/core/integration-registry.cjs +232 -0
- package/lib/core/intel-pipeline.cjs +545 -0
- package/lib/core/intelligence-cascade.cjs +852 -0
- package/lib/core/issue-tree.cjs +269 -0
- package/lib/core/larry-thinness-acknowledgment.cjs +64 -0
- package/lib/core/larry-thinness-acknowledgment.test.cjs +97 -0
- package/lib/core/lazygraph-ops.cjs +1453 -0
- package/lib/core/lens-engine.cjs +434 -0
- package/lib/core/leverage-scan.cjs +218 -0
- package/lib/core/llm-name-suggester.cjs +194 -0
- package/lib/core/llm-name-suggester.test.cjs +132 -0
- package/lib/core/lru-cache.cjs +139 -0
- package/lib/core/mcp-dep-heal.cjs +475 -0
- package/lib/core/mcp-dep-heal.test.cjs +253 -0
- package/lib/core/mcp-profiles.cjs +185 -0
- package/lib/core/meeting-ops.cjs +54 -0
- package/lib/core/memory/governance-candidate-raiser.cjs +205 -0
- package/lib/core/memory/governance-candidate.cjs +95 -0
- package/lib/core/memory/reconcile-memory-runner.cjs +653 -0
- package/lib/core/memory-ops.cjs +641 -0
- package/lib/core/meter/gate-density-reader.cjs +112 -0
- package/lib/core/meter/transfer-reader.cjs +276 -0
- package/lib/core/meter/two-gauge.cjs +245 -0
- package/lib/core/methodology-ingest.cjs +346 -0
- package/lib/core/metrics/larryreach-loop-health.cjs +142 -0
- package/lib/core/migration-snapshot.cjs +287 -0
- package/lib/core/migration-snapshot.test.cjs +174 -0
- package/lib/core/migrations/ROOM.md +33 -0
- package/lib/core/migrations/phase-109-nodes-provenance.cjs +400 -0
- package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
- package/lib/core/migrations/phase-160-nodes-bitemporal.cjs +168 -0
- package/lib/core/migrations/phase-160-nodes-bitemporal.test.cjs +140 -0
- package/lib/core/migrations/phase-162-section-nodes.cjs +156 -0
- package/lib/core/migrations/phase-222-ranker-weights.cjs +62 -0
- package/lib/core/migrations/phase-224-edge-review-status.cjs +87 -0
- package/lib/core/mindrian-brain-shim.test.cjs +221 -0
- package/lib/core/mode-select-sidechannel.cjs +259 -0
- package/lib/core/model-profiles.cjs +246 -0
- package/lib/core/mullins-scaffold.cjs +258 -0
- package/lib/core/mullins-scaffold.test.cjs +128 -0
- package/lib/core/mva-agent-contract.cjs +170 -0
- package/lib/core/mva-agent-contract.test.cjs +169 -0
- package/lib/core/mva-budget.cjs +75 -0
- package/lib/core/mva-budget.test.cjs +68 -0
- package/lib/core/mva-classifier.cjs +392 -0
- package/lib/core/mva-classifier.test.cjs +248 -0
- package/lib/core/mva-deck-builder.cjs +452 -0
- package/lib/core/mva-deck-builder.test.cjs +287 -0
- package/lib/core/mva-detect.smoke.test.cjs +209 -0
- package/lib/core/mva-dispatcher.cjs +110 -0
- package/lib/core/mva-dispatcher.test.cjs +216 -0
- package/lib/core/mva-option-router.cjs +414 -0
- package/lib/core/mva-option-router.test.cjs +483 -0
- package/lib/core/mva-orchestrator.cjs +365 -0
- package/lib/core/mva-orchestrator.test.cjs +916 -0
- package/lib/core/mva-progressive-renderer.cjs +194 -0
- package/lib/core/mva-progressive-renderer.test.cjs +157 -0
- package/lib/core/mva-rule-linter.cjs +458 -0
- package/lib/core/mva-rule-linter.test.cjs +484 -0
- package/lib/core/mva-state.cjs +159 -0
- package/lib/core/mva-telemetry.cjs +58 -0
- package/lib/core/mva-telemetry.test.cjs +196 -0
- package/lib/core/mva-vercel-deploy.cjs +168 -0
- package/lib/core/mva-vercel-deploy.test.cjs +239 -0
- package/lib/core/nav-dial.cjs +440 -0
- package/lib/core/navigation/ROOM.md +15 -0
- package/lib/core/navigation/abstraction-claim.cjs +185 -0
- package/lib/core/navigation/calibration-gate.cjs +284 -0
- package/lib/core/navigation/calibration-log.cjs +141 -0
- package/lib/core/navigation/confirm-node.cjs +73 -0
- package/lib/core/navigation/dashboard-helpers.cjs +145 -0
- package/lib/core/navigation/edges.cjs +1150 -0
- package/lib/core/navigation/evidence-claim.cjs +186 -0
- package/lib/core/navigation/explanation.cjs +48 -0
- package/lib/core/navigation/file-evidence-readback.cjs +242 -0
- package/lib/core/navigation/focus.cjs +155 -0
- package/lib/core/navigation/get-domains-for-trends.cjs +277 -0
- package/lib/core/navigation/governance.cjs +101 -0
- package/lib/core/navigation/grant-rubric.cjs +218 -0
- package/lib/core/navigation/graph-export.cjs +325 -0
- package/lib/core/navigation/ingestion.cjs +109 -0
- package/lib/core/navigation/insights-stale.test.cjs +127 -0
- package/lib/core/navigation/insights.cjs +574 -0
- package/lib/core/navigation/lens-nodes.cjs +315 -0
- package/lib/core/navigation/memory-artifacts.cjs +437 -0
- package/lib/core/navigation/memory-cortex-packet.cjs +274 -0
- package/lib/core/navigation/memory-events.cjs +811 -0
- package/lib/core/navigation/neighborhood.cjs +79 -0
- package/lib/core/navigation/packet.cjs +420 -0
- package/lib/core/navigation/planning-artifacts.cjs +219 -0
- package/lib/core/navigation/projections.cjs +295 -0
- package/lib/core/navigation/ranker-weights.cjs +133 -0
- package/lib/core/navigation/reasoning-write.cjs +211 -0
- package/lib/core/navigation/reconcile-guard.cjs +98 -0
- package/lib/core/navigation/reified-claim.cjs +287 -0
- package/lib/core/navigation/research-preflight.cjs +156 -0
- package/lib/core/navigation/room-birth.cjs +1213 -0
- package/lib/core/navigation/room-context.cjs +380 -0
- package/lib/core/navigation/room-home.cjs +142 -0
- package/lib/core/navigation/spine-events.cjs +548 -0
- package/lib/core/navigation/synthetic-expert.cjs +177 -0
- package/lib/core/navigation/transitions.cjs +253 -0
- package/lib/core/navigation/typed-claim.cjs +208 -0
- package/lib/core/navigation/typed-domain.cjs +249 -0
- package/lib/core/navigation/typed-entity.cjs +236 -0
- package/lib/core/navigation/typed-frame.cjs +257 -0
- package/lib/core/navigation/typed-open-question.cjs +130 -0
- package/lib/core/navigation/typed-opportunity.cjs +418 -0
- package/lib/core/navigation-engine-offer.cjs +776 -0
- package/lib/core/navigation-engine-shared.cjs +256 -0
- package/lib/core/navigation-engine.cjs +1696 -0
- package/lib/core/navigation.cjs +686 -0
- package/lib/core/nl-graph-queries.cjs +164 -0
- package/lib/core/node-insert-epistemic.test.cjs +212 -0
- package/lib/core/node-insert-overrides.test.cjs +273 -0
- package/lib/core/node-insert.cjs +274 -0
- package/lib/core/npm-cli-resolve.cjs +151 -0
- package/lib/core/npm-cli-resolve.test.cjs +153 -0
- package/lib/core/npm-install-lock.cjs +326 -0
- package/lib/core/npm-install-lock.test.cjs +379 -0
- package/lib/core/numeric/sklearn-stopwords-v1.json +325 -0
- package/lib/core/numeric/svd.cjs +377 -0
- package/lib/core/numeric/tfidf.cjs +241 -0
- package/lib/core/offer-presenter.cjs +406 -0
- package/lib/core/opportunity-extractor.cjs +183 -0
- package/lib/core/opportunity-ops.cjs +1423 -0
- package/lib/core/orchestration-candidate-lift.cjs +284 -0
- package/lib/core/part8-egress-guard.cjs +536 -0
- package/lib/core/part8-egress-guard.test.cjs +194 -0
- package/lib/core/part8-egress-ontology.cjs +174 -0
- package/lib/core/part8-egress-ontology.test.cjs +133 -0
- package/lib/core/persona-ops.cjs +692 -0
- package/lib/core/persona-override.cjs +327 -0
- package/lib/core/persona-taxonomy.cjs +328 -0
- package/lib/core/pinecone-inference.cjs +176 -0
- package/lib/core/pitch-feedback-schemas.cjs +303 -0
- package/lib/core/planning/artifact-brain-packet.cjs +212 -0
- package/lib/core/planning/reconcile-runner.cjs +347 -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/publish-needs-default-lane.cjs +110 -0
- package/lib/core/ralph-loop-gate.cjs +48 -0
- package/lib/core/reader/ab-harness.cjs +177 -0
- package/lib/core/reader/decide-projection-reader.cjs +358 -0
- package/lib/core/reasoning-ops.cjs +639 -0
- package/lib/core/recipe-maps.cjs +442 -0
- package/lib/core/recovery/case-file.cjs +358 -0
- package/lib/core/recovery/controller.cjs +1008 -0
- package/lib/core/recovery/dispatcher.cjs +533 -0
- package/lib/core/recovery/result-semantics.cjs +488 -0
- package/lib/core/recovery/stage-envelope.cjs +338 -0
- package/lib/core/refusal-messaging.cjs +569 -0
- package/lib/core/refusal-messaging.test.cjs +220 -0
- package/lib/core/repo-version.cjs +134 -0
- package/lib/core/research-cache.cjs +165 -0
- package/lib/core/research-cache.test.cjs +137 -0
- package/lib/core/research-context-extractor.cjs +283 -0
- package/lib/core/research-corpus.cjs +814 -0
- package/lib/core/research-corpus.test.cjs +280 -0
- package/lib/core/research-filing-selector.cjs +189 -0
- package/lib/core/resolve-active-room.cjs +602 -0
- package/lib/core/resolve-brain-key.cjs +273 -0
- package/lib/core/resolve-umbilical-target.cjs +288 -0
- package/lib/core/resolve-vercel-key.cjs +107 -0
- package/lib/core/resolve-vercel-key.test.cjs +137 -0
- package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
- package/lib/core/room-auto-create.cjs +318 -0
- package/lib/core/room-auto-create.test.cjs +198 -0
- package/lib/core/room-chooser.cjs +244 -0
- package/lib/core/room-classifier-strict-mode.cjs +235 -0
- package/lib/core/room-db.cjs +348 -0
- package/lib/core/room-discard-cascade.cjs +238 -0
- package/lib/core/room-discard-cascade.test.cjs +135 -0
- package/lib/core/room-name-validator.cjs +132 -0
- package/lib/core/room-name-validator.test.cjs +156 -0
- package/lib/core/room-naming-selector.cjs +357 -0
- package/lib/core/room-naming-selector.test.cjs +277 -0
- package/lib/core/room-open.cjs +259 -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-receipt-emit.cjs +63 -0
- package/lib/core/room-root.cjs +93 -0
- package/lib/core/room-skeleton-scaffold.cjs +669 -0
- package/lib/core/room-skeleton-scaffold.test.cjs +296 -0
- package/lib/core/room-type-detector.cjs +386 -0
- package/lib/core/rs-backend-dispatch.cjs +64 -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 +381 -0
- package/lib/core/rs-commercial-assessor.cjs +280 -0
- package/lib/core/rs-corpus-quality-gate.cjs +62 -0
- package/lib/core/rs-differential-scorer.cjs +629 -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-engine.cjs +597 -0
- package/lib/core/rs-expert-brain-projection.cjs +280 -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-math.cjs +458 -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 +435 -0
- package/lib/core/rs-pinecone-bridge.cjs +344 -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 +495 -0
- package/lib/core/rs-thesis-generator.cjs +188 -0
- package/lib/core/rs_cache.py +635 -0
- package/lib/core/rs_corpus.py +562 -0
- package/lib/core/rs_corpus_exclude.py +62 -0
- package/lib/core/rs_hybrid.py +589 -0
- package/lib/core/rs_math.py +287 -0
- package/lib/core/rs_rooms.py +196 -0
- package/lib/core/salient-governance.cjs +315 -0
- package/lib/core/scheduled-scanner.cjs +658 -0
- package/lib/core/scratchpad-ops.cjs +316 -0
- package/lib/core/seam-liveness.cjs +191 -0
- package/lib/core/seam-liveness.test.cjs +177 -0
- package/lib/core/section-8-trace-schema.cjs +138 -0
- package/lib/core/section-registry.cjs +167 -0
- package/lib/core/security/agentshield-adapters.test.cjs +104 -0
- package/lib/core/security/agentshield-run.cjs +343 -0
- package/lib/core/security/agentshield-scanner.cjs +314 -0
- package/lib/core/security/agentshield-scanner.test.cjs +259 -0
- package/lib/core/sensors/hat-scoping-table.cjs +103 -0
- package/lib/core/sensors/sensor-circularity.cjs +278 -0
- package/lib/core/sensors/sensor-content-relevance.cjs +407 -0
- package/lib/core/sensors/sensor-diffusion-adoption.cjs +230 -0
- package/lib/core/sensors/sensor-eureka.cjs +208 -0
- package/lib/core/sensors/sensor-expert-skill.cjs +293 -0
- package/lib/core/sensors/sensor-external-fact.cjs +184 -0
- package/lib/core/sensors/sensor-gate-approach.cjs +104 -0
- package/lib/core/sensors/sensor-jtbd-reweight.cjs +141 -0
- package/lib/core/sensors/sensor-lagging-component.cjs +115 -0
- package/lib/core/sensors/sensor-memory-cortex.cjs +111 -0
- package/lib/core/sensors/sensor-methodology-decision.cjs +131 -0
- package/lib/core/sensors/sensor-opportunity-harvest.cjs +195 -0
- package/lib/core/sensors/sensor-perspective-lock.cjs +174 -0
- package/lib/core/sensors/sensor-priority.cjs +183 -0
- package/lib/core/sensors/sensor-recency.cjs +151 -0
- package/lib/core/sensors/sensor-roadmap-type.cjs +421 -0
- package/lib/core/sensors/sensor-room-pick.cjs +238 -0
- package/lib/core/sensors/sensor-show-share.cjs +215 -0
- package/lib/core/sensors/sensor-temporal-blindness.cjs +123 -0
- package/lib/core/sensors/sensor-types.cjs +294 -0
- package/lib/core/sensors/sensor-url-ingest.cjs +234 -0
- package/lib/core/session-binding.cjs +208 -0
- package/lib/core/session-presence.cjs +404 -0
- package/lib/core/session-register.cjs +138 -0
- package/lib/core/session-state.cjs +144 -0
- package/lib/core/shallow-doc-parser.cjs +353 -0
- package/lib/core/shallow-doc-parser.test.cjs +226 -0
- package/lib/core/skill-activation-router.cjs +284 -0
- package/lib/core/skillopt-schemas.cjs +509 -0
- package/lib/core/stale-copy-scanner.cjs +190 -0
- package/lib/core/stance-state.cjs +153 -0
- package/lib/core/state-aware-router.cjs +78 -0
- package/lib/core/state-ops.cjs +80 -0
- package/lib/core/state-version.cjs +350 -0
- package/lib/core/statusline-cache.cjs +266 -0
- package/lib/core/statusline-liveness-gate.cjs +105 -0
- package/lib/core/surface-fence.cjs +127 -0
- package/lib/core/synthesizers/comparison-matrix.cjs +82 -0
- package/lib/core/synthesizers/convergence-map.cjs +107 -0
- package/lib/core/synthesizers/domain-hierarchy.cjs +138 -0
- package/lib/core/synthesizers/source-comparison.cjs +56 -0
- package/lib/core/synthesizers/tension-map.cjs +119 -0
- package/lib/core/synthetic-expert-behavior-gate.cjs +99 -0
- package/lib/core/synthetic-expert-construction-gate.cjs +170 -0
- package/lib/core/telemetry/schema.cjs +168 -0
- package/lib/core/telemetry/schema.test.cjs +124 -0
- package/lib/core/telemetry/validator.cjs +200 -0
- package/lib/core/telemetry/validator.test.cjs +188 -0
- package/lib/core/telemetry/writer.cjs +141 -0
- package/lib/core/telemetry/writer.test.cjs +331 -0
- package/lib/core/temporal/date-sync-gate.cjs +256 -0
- package/lib/core/temporal/date-sync-gate.test.cjs +191 -0
- package/lib/core/temporal/dual-stamp.cjs +172 -0
- package/lib/core/temporal/dual-stamp.test.cjs +172 -0
- package/lib/core/temporal/point-in-time.cjs +76 -0
- package/lib/core/temporal/point-in-time.test.cjs +169 -0
- package/lib/core/temporal/recency-decay.cjs +119 -0
- package/lib/core/temporal/recency-decay.test.cjs +140 -0
- package/lib/core/temporal/reference-now.cjs +281 -0
- package/lib/core/temporal/reference-now.test.cjs +225 -0
- package/lib/core/temporal/resolve-relative-time.cjs +116 -0
- package/lib/core/temporal/resolve-relative-time.test.cjs +138 -0
- package/lib/core/temporal/supersession.cjs +250 -0
- package/lib/core/temporal/supersession.test.cjs +103 -0
- package/lib/core/terminal-capability.cjs +88 -0
- package/lib/core/token-estimator.cjs +348 -0
- package/lib/core/tone-filter.cjs +147 -0
- package/lib/core/trending-to-absurd/orchestrator.cjs +341 -0
- package/lib/core/trending-to-absurd/stage7-roadmap.cjs +317 -0
- package/lib/core/trending-to-absurd/variance.cjs +169 -0
- package/lib/core/unknowns/bandit.cjs +332 -0
- package/lib/core/unknowns/corpus-adapter.cjs +327 -0
- package/lib/core/unknowns/dsp.cjs +356 -0
- package/lib/core/unknowns/edge-writer.cjs +211 -0
- package/lib/core/unknowns/iface.cjs +212 -0
- package/lib/core/unknowns/orchestrator.cjs +375 -0
- package/lib/core/unknowns/pattern-miner.cjs +214 -0
- package/lib/core/unknowns/rumsfeld-matrix.cjs +155 -0
- package/lib/core/unknowns/verdict.cjs +254 -0
- package/lib/core/update-path.cjs +57 -0
- package/lib/core/url-ingest.cjs +568 -0
- package/lib/core/user-archetype.cjs +284 -0
- package/lib/core/user-md-ops.cjs +578 -0
- package/lib/core/venture-shape-nudge.cjs +178 -0
- package/lib/core/venture-shape-nudge.test.cjs +266 -0
- package/lib/core/verb-reach-affinity.cjs +299 -0
- package/lib/core/visual-ops.cjs +692 -0
- package/lib/core/voice-transition-detector.cjs +125 -0
- package/lib/core/watched-sources.cjs +237 -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 +669 -0
- package/lib/hmi/agentshield-drift-gate.cjs +142 -0
- package/lib/hmi/brain-review-packet.cjs +221 -0
- package/lib/hmi/cortex-reach-adapter.cjs +271 -0
- package/lib/hmi/cross-room-memory.cjs +618 -0
- package/lib/hmi/decoy-tier.cjs +395 -0
- package/lib/hmi/depth-state.cjs +164 -0
- package/lib/hmi/dial-label-composer.cjs +410 -0
- package/lib/hmi/dial-presenter.cjs +508 -0
- package/lib/hmi/dial-reach-orchestrator.cjs +377 -0
- package/lib/hmi/dial-selector.cjs +239 -0
- package/lib/hmi/f1-pick-capture-cli.cjs +131 -0
- package/lib/hmi/f3-depth-capture-cli.cjs +77 -0
- package/lib/hmi/f4-scope-capture-cli.cjs +86 -0
- package/lib/hmi/f8-action-capture-cli.cjs +145 -0
- package/lib/hmi/f8-capture.test.cjs +77 -0
- package/lib/hmi/f9-ordered-capture-cli.cjs +138 -0
- package/lib/hmi/harvest-scope-state.cjs +202 -0
- package/lib/hmi/hats-persona-cache.cjs +142 -0
- package/lib/hmi/jtbd-classifier.cjs +219 -0
- package/lib/hmi/jtbd-state.cjs +263 -0
- package/lib/hmi/jtbd-taxonomy.json +402 -0
- package/lib/hmi/mindrian-ascii-logo.cjs +96 -0
- package/lib/hmi/part8-egress-gate.cjs +149 -0
- package/lib/hmi/reach-component-map.json +47 -0
- package/lib/hmi/reach-relevance-gate.cjs +147 -0
- package/lib/hmi/selector-dispatcher.cjs +1201 -0
- package/lib/hmi/selector-dispatcher.test.cjs +141 -0
- package/lib/hmi/selector-telemetry.cjs +269 -0
- package/lib/hmi/shape-f0-renderer.cjs +145 -0
- package/lib/hmi/shape-f1-fallback.cjs +80 -0
- package/lib/hmi/shape-f1-renderer.cjs +219 -0
- package/lib/hmi/shape-f2-renderer.cjs +132 -0
- package/lib/hmi/shape-f3-parity.test.cjs +64 -0
- package/lib/hmi/shape-f3-renderer.cjs +66 -0
- package/lib/hmi/shape-f4-parity.test.cjs +72 -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 +324 -0
- package/lib/hmi/shape-f6-renderer.cjs +144 -0
- package/lib/hmi/shape-f7-breakthrough-renderer.cjs +234 -0
- package/lib/hmi/shape-f7-breakthrough-renderer.test.cjs +233 -0
- package/lib/hmi/shape-f8-renderer.cjs +150 -0
- package/lib/hmi/shape-f8-renderer.test.cjs +70 -0
- package/lib/hmi/shape-f9-renderer.cjs +187 -0
- package/lib/hmi/shape-f9-renderer.test.cjs +80 -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/hmi/turn-text.cjs +268 -0
- package/lib/hmi/voice-color-mark.cjs +318 -0
- package/lib/hmi/voice-style-log.cjs +276 -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/undo.test.cjs +199 -0
- package/lib/import/vault-scanner.cjs +105 -0
- package/lib/import/vault-scanner.test.cjs +67 -0
- package/lib/lens-engine/correlation-resolver.cjs +174 -0
- package/lib/lens-engine/source-lens-driver.cjs +736 -0
- package/lib/mcp/adapter-client.cjs +103 -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-composition-census.cjs +184 -0
- package/lib/mcp/brain-router.cjs +530 -0
- package/lib/mcp/capability-registry.cjs +62 -0
- package/lib/mcp/contract-version.cjs +59 -0
- package/lib/mcp/daemon-lifecycle.cjs +324 -0
- package/lib/mcp/gate-dedup.cjs +120 -0
- package/lib/mcp/gate-ledger.cjs +145 -0
- package/lib/mcp/gate-render.cjs +483 -0
- package/lib/mcp/hook-adapter-audit.cjs +199 -0
- package/lib/mcp/larry-context.cjs +42 -0
- package/lib/mcp/mcp-first-flag.cjs +147 -0
- package/lib/mcp/no-instructions.test.cjs +270 -0
- package/lib/mcp/pipeline-state.cjs +424 -0
- package/lib/mcp/prompts.cjs +421 -0
- package/lib/mcp/register-core-tools.cjs +78 -0
- package/lib/mcp/resources.cjs +359 -0
- package/lib/mcp/runtime-instructions.cjs +38 -0
- package/lib/mcp/session-catchup.cjs +349 -0
- package/lib/mcp/session-registry.cjs +113 -0
- package/lib/mcp/session-room.cjs +124 -0
- package/lib/mcp/sse-event-bus.cjs +98 -0
- package/lib/mcp/stop-gate-handler.cjs +589 -0
- package/lib/mcp/surface-detect.cjs +186 -0
- package/lib/mcp/tool-router.cjs +2113 -0
- package/lib/mcp/tools/chain.cjs +674 -0
- package/lib/mcp/tools/claim.cjs +180 -0
- package/lib/mcp/tools/context.cjs +92 -0
- package/lib/mcp/tools/dual-path.cjs +79 -0
- package/lib/mcp/tools/gate.cjs +392 -0
- package/lib/mcp/tools/graph-reason.cjs +130 -0
- package/lib/mcp/tools/graph.cjs +321 -0
- package/lib/mcp/tools/identity.cjs +174 -0
- package/lib/mcp/tools/room.cjs +449 -0
- package/lib/mcp/tools/sensors.cjs +450 -0
- package/lib/mcp/tools/status.cjs +183 -0
- package/lib/mcp/tools/stop-gate.cjs +103 -0
- package/lib/mcp/tools/views.cjs +382 -0
- package/lib/mcp/tree-watcher.cjs +199 -0
- package/lib/memory/.mindrian/auto-explore-mat-test-001.json +11 -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/body-shape-coverage.test.cjs +268 -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-cypher-chain-slice.test.cjs +368 -0
- package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
- package/lib/memory/brain-derivation-queue.test.cjs +553 -0
- package/lib/memory/brain-derivation.test.cjs +639 -0
- package/lib/memory/brain-derive-command.test.cjs +534 -0
- package/lib/memory/brain-derive-curation.test.cjs +243 -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/brain-suggestion-template.test.cjs +200 -0
- package/lib/memory/chain-recommender-canonical.test.cjs +208 -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/connector-registry.test.cjs +94 -0
- package/lib/memory/correlation-label-index.test.cjs +119 -0
- package/lib/memory/correlation.test.cjs +253 -0
- package/lib/memory/cross-room-aggregator.test.cjs +909 -0
- package/lib/memory/curation-132-03-dedup-held-rename.test.cjs +251 -0
- package/lib/memory/curation-132-05-pseudonymize.test.cjs +205 -0
- package/lib/memory/curation-batch.test.cjs +213 -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/doctor-deprecation-surface.test.cjs +188 -0
- package/lib/memory/dual-graph-health.test.cjs +485 -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/f-selector-ranker.test.cjs +593 -0
- package/lib/memory/feynman-minto-guardian.test.cjs +863 -0
- package/lib/memory/feynman-minto-invariants.test.cjs +554 -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/first-touch-version.test.cjs +198 -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 +549 -0
- package/lib/memory/frontmatter-schema-validator.test.cjs +344 -0
- package/lib/memory/guardian-onstop-reaches-user.test.cjs +396 -0
- package/lib/memory/heal-command.test.cjs +604 -0
- package/lib/memory/help-coverage.test.cjs +108 -0
- package/lib/memory/help-renderer.test.cjs +145 -0
- package/lib/memory/huji-run-one-async-parity.test.cjs +242 -0
- package/lib/memory/hypergraph-event-schema.test.cjs +116 -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/local-chain-recommender.test.cjs +172 -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-debounce-consumer-census.test.cjs +567 -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 +712 -0
- package/lib/memory/navigation-engine-offer.test.cjs +404 -0
- package/lib/memory/navigation-hook-resolver.test.cjs +177 -0
- package/lib/memory/navigation-invariants.test.cjs +483 -0
- package/lib/memory/navigation-projections.test.cjs +241 -0
- package/lib/memory/navigation-write-edge.test.cjs +206 -0
- package/lib/memory/offer-closer.test.cjs +258 -0
- package/lib/memory/offer-presenter.test.cjs +554 -0
- package/lib/memory/on-stop-snapshot.test.cjs +404 -0
- package/lib/memory/orchestration-projection.test.cjs +706 -0
- package/lib/memory/packet-chain-hint.test.cjs +407 -0
- package/lib/memory/packet-schema-validation.test.cjs +317 -0
- package/lib/memory/palette-consistency.test.cjs +127 -0
- package/lib/memory/pending-tension-store.cjs +453 -0
- package/lib/memory/per-command-jtbd-derivation.test.cjs +130 -0
- package/lib/memory/per-command-teaching.test.cjs +110 -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/precommit-real-commit.test.cjs +301 -0
- package/lib/memory/problem-type-router.test.cjs +656 -0
- package/lib/memory/query-efficiency-telemetry.test.cjs +612 -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/render-v2-disposition.test.cjs +199 -0
- package/lib/memory/room-classifier-strict-mode.test.cjs +430 -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 +2101 -0
- package/lib/memory/security-trifecta.test.cjs +329 -0
- package/lib/memory/selector-alias-map.test.cjs +172 -0
- package/lib/memory/selector-decisions.test.cjs +417 -0
- package/lib/memory/selector-miss.test.cjs +290 -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-coordinator.test.cjs +446 -0
- package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
- package/lib/memory/skill-activation-router.test.cjs +465 -0
- package/lib/memory/skill-vs-code-drift.test.cjs +257 -0
- package/lib/memory/soft-alias.test.cjs +144 -0
- package/lib/memory/spine-events-correlation.test.cjs +198 -0
- package/lib/memory/stale-copy-scanner.test.cjs +294 -0
- package/lib/memory/stamp-artifact-write.test.cjs +304 -0
- package/lib/memory/state-aware-router.test.cjs +90 -0
- package/lib/memory/statusline-active-room-write.test.cjs +245 -0
- package/lib/memory/statusline-active-room.test.cjs +315 -0
- package/lib/memory/statusline-minto-segment.test.cjs +292 -0
- package/lib/memory/statusline-two-row.test.cjs +338 -0
- package/lib/memory/suggest-next-workflow.test.cjs +176 -0
- package/lib/memory/sync-async-entry-points.test.cjs +204 -0
- package/lib/memory/terminal-capability.test.cjs +155 -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 +648 -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 +282 -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 +787 -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/workflow-layer-e2e.test.cjs +262 -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 +111 -0
- package/lib/render/render-v2.cjs +532 -0
- package/lib/render/render-v2.test.cjs +267 -0
- package/lib/render/render.cjs +65 -0
- package/lib/sessionstart/budget-compressor.cjs +130 -0
- package/lib/sessionstart/contributor-interface.cjs +134 -0
- package/lib/sessionstart/contributor-isolator.cjs +128 -0
- package/lib/sessionstart/precedence-ladder.cjs +47 -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/cockpit-renderer.cjs +443 -0
- package/lib/statusline/cockpit-signals.cjs +312 -0
- package/lib/statusline/cockpit-telemetry.cjs +152 -0
- package/lib/statusline/ctx-window.cjs +135 -0
- package/lib/statusline/governing-thought-truncator.cjs +45 -0
- package/lib/statusline/next-move-cache.cjs +235 -0
- package/lib/statusline/ratification-next.cjs +164 -0
- package/lib/statusline/room-health-cache.cjs +200 -0
- package/lib/statusline/surface-detect.cjs +85 -0
- package/lib/statusline/two-row-renderer.cjs +207 -0
- package/lib/statusline/version-resolver.cjs +81 -0
- package/lib/ui/design-system.cjs +19 -0
- package/lib/update-bootstrap.sh.template +145 -0
- package/lib/vault/frontmatter-schema.cjs +297 -0
- package/lib/vault/room-scanner.cjs +365 -0
- package/lib/vault/wikilink-builder.cjs +231 -0
- package/lib/vault/wikilink-builder.test.cjs +182 -0
- package/lib/wiki/briefing.cjs +193 -0
- package/lib/wiki/editor-dist/wiki-editor.css +1 -0
- package/lib/wiki/editor-dist/wiki-editor.js +1327 -0
- package/lib/wiki/graph-links.cjs +281 -0
- package/lib/wiki/page-renderer.cjs +229 -0
- package/lib/wiki/room-home.cjs +353 -0
- package/lib/wiki/wiki-chat.cjs +81 -0
- package/lib/wiki/wiki-export.cjs +364 -0
- package/lib/wiki/wiki-layout.cjs +1143 -0
- package/lib/wiki/wiki-search.cjs +142 -0
- package/lib/wiki/wiki-server.cjs +748 -0
- package/lib/wiki/wiki-watcher.cjs +105 -0
- package/lib/workflow/ROOM.md +47 -0
- package/lib/workflow/chain-source.cjs +179 -0
- package/lib/workflow/command-resolver.cjs +155 -0
- package/lib/workflow/command-resolver.test.cjs +235 -0
- package/lib/workflow/cross-room-umbilical-closer.cjs +364 -0
- package/lib/workflow/dial-close-reach.cjs +405 -0
- package/lib/workflow/f-selector-ranker.cjs +1148 -0
- package/lib/workflow/f1-pick-consumer.cjs +232 -0
- package/lib/workflow/f3-depth-consumer.cjs +98 -0
- package/lib/workflow/f4-scope-consumer.cjs +112 -0
- package/lib/workflow/f8-consumer.test.cjs +82 -0
- package/lib/workflow/f8-fanout-consumer.cjs +208 -0
- package/lib/workflow/f9-consumer.test.cjs +71 -0
- package/lib/workflow/f9-ordered-consumer.cjs +199 -0
- package/lib/workflow/local-chain-recommender.cjs +330 -0
- package/lib/workflow/memory-cascade-f9-adapter.cjs +273 -0
- package/lib/workflow/memory-governance-closer.cjs +384 -0
- package/lib/workflow/offer-closer.cjs +407 -0
- package/lib/workflow/reach-hedge-ranker.cjs +809 -0
- package/lib/workflow/reach-reject-reader.cjs +372 -0
- package/lib/workflow/reconcile-f9-adapter.cjs +299 -0
- package/lib/workflow/selector-decisions.cjs +478 -0
- package/lib/workflow/session-binding-consumer.cjs +249 -0
- package/npm-shrinkwrap.json +1544 -0
- package/output-styles/destijl.md +67 -0
- package/package.json +22 -4
- package/pipelines/PWS_grading/01-deep-grade.md +48 -0
- package/pipelines/PWS_grading/02-mullins.md +50 -0
- package/pipelines/PWS_grading/03-build-thesis.md +60 -0
- package/pipelines/PWS_grading/04-structure-argument.md +77 -0
- package/pipelines/PWS_grading/CHAIN.md +79 -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 +73 -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 +48 -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 +48 -0
- package/references/brain/causal-directives.md +91 -0
- package/references/brain/causal-enrichment.cypher +165 -0
- package/references/brain/command-triggers-schema.md +15 -0
- package/references/brain/graph-architecture.md +317 -0
- package/references/brain/query-patterns.md +504 -0
- package/references/brain/room-hierarchy-schema.md +218 -0
- package/references/brain/schema.md +86 -0
- package/references/capability-radar/capabilities-index.md +269 -0
- package/references/capability-radar/changelog-cache.md +95 -0
- package/references/causal/causal-schema.md +103 -0
- package/references/design/email-template-standard.md +169 -0
- package/references/design/graph-visualization-standard.md +178 -0
- package/references/design/newsletter-email-template.html +307 -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/extraction-perspectives.md +225 -0
- package/references/meeting/filing-protocol.md +222 -0
- package/references/meeting/knowledge-typing.md +242 -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-scored.md +60 -0
- package/references/methodology/build-thesis.md +237 -0
- package/references/methodology/causal-loop-diagrams.md +65 -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/huji-stage-a-intake.md +246 -0
- package/references/methodology/index.md +34 -0
- package/references/methodology/leadership.md +200 -0
- package/references/methodology/lean-canvas.md +116 -0
- package/references/methodology/leverage-scan-signatures.md +83 -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/rubric-huji.md +160 -0
- package/references/methodology/sapphire-encoding.md +355 -0
- package/references/methodology/scenario-plan.md +190 -0
- package/references/methodology/score-innovation.md +154 -0
- package/references/methodology/skillopt-judge-rubric.md +48 -0
- package/references/methodology/skillopt-queries-rubric.md +60 -0
- package/references/methodology/skillopt-refute-rubric.md +59 -0
- package/references/methodology/skillopt-review-rubric.md +72 -0
- package/references/methodology/skillopt-revise-rubric.md +48 -0
- package/references/methodology/structure-argument.md +158 -0
- package/references/methodology/systems-thinking.md +231 -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/opportunities/tnufa-rubric.md +81 -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/security/agentshield-baseline.json +8 -0
- package/references/security/cve-db.json +220 -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/ROOM.md +55 -0
- package/references/visual/palette.json +54 -0
- package/references/visual/symbol-system.md +151 -0
- package/scripts/189-plurai-gate-check.cjs +88 -0
- package/scripts/198-plurai-gate-check.cjs +118 -0
- package/scripts/198-rollback-rehearsal.cjs +233 -0
- package/scripts/83-scope-injection.test.cjs +648 -0
- package/scripts/PYTHON_GATES.md +78 -0
- package/scripts/__pycache__/compute-hsi.cpython-312.pyc +0 -0
- package/scripts/__pycache__/detect-reverse-salients.cpython-312.pyc +0 -0
- package/scripts/__pycache__/rs-engine.cpython-312.pyc +0 -0
- package/scripts/act-command.cjs +518 -0
- package/scripts/admin-brain-write.cjs +442 -0
- package/scripts/admin-command-gate.cjs +178 -0
- package/scripts/agentshield-scan-cli.cjs +226 -0
- package/scripts/agentshield-sessionstart-scan.cjs +282 -0
- package/scripts/analogy-fitness-report.cjs +266 -0
- package/scripts/analyze-room +1079 -0
- package/scripts/apply-teaching-content.cjs +298 -0
- package/scripts/async-artifact-auto-commit.cjs +485 -0
- package/scripts/audit-active-phase-resolver.cjs +160 -0
- package/scripts/audit-body-shape-coverage.cjs +213 -0
- package/scripts/auto-explore-drain.cjs +274 -0
- package/scripts/auto-explore-fingerprint.cjs +354 -0
- package/scripts/auto-explore-fire.cjs +359 -0
- package/scripts/backfill-correlation-id.cjs +425 -0
- package/scripts/backfill-hitl-shape.cjs +276 -0
- package/scripts/backfill-hitl-shape.test.cjs +307 -0
- package/scripts/backup-modifications +68 -0
- package/scripts/banner +182 -0
- package/scripts/brain-derivation-drain.cjs +291 -0
- package/scripts/brain-derive-command.cjs +846 -0
- package/scripts/brain-normalize-books.cypher +505 -0
- package/scripts/brain-normalize-final.cypher +1355 -0
- package/scripts/brain-normalize-problemtype.cypher +475 -0
- package/scripts/brain-normalize-supplement.cypher +449 -0
- package/scripts/brain-normalize-targeted.cypher +344 -0
- package/scripts/brain-normalize-v194.cypher +61 -0
- package/scripts/brain-normalize.cypher +530 -0
- package/scripts/brain-response-sanitize-hook.cjs +165 -0
- package/scripts/build-brain-census.cjs +957 -0
- package/scripts/build-brain-packet-schema.cjs +225 -0
- package/scripts/build-command-registry.cjs +587 -0
- package/scripts/build-connector-registry.cjs +1331 -0
- package/scripts/build-corpus-stats.cjs +408 -0
- package/scripts/build-dist-bundles.cjs +495 -0
- package/scripts/build-ecosystem-graph.cjs +490 -0
- package/scripts/build-graph +1462 -0
- package/scripts/build-graph-from-sqlite.cjs +97 -0
- package/scripts/build-harness-manifest.cjs +1090 -0
- package/scripts/build-jtbd-nudges +205 -0
- package/scripts/build-new-surface.cjs +805 -0
- package/scripts/build-orchestration-projection.cjs +1221 -0
- package/scripts/build-render-coverage.cjs +637 -0
- package/scripts/build-skill-mirrors.cjs +681 -0
- package/scripts/cache-hitrate-report.cjs +216 -0
- package/scripts/causal-to-graph.cjs +163 -0
- package/scripts/check-abstraction-fixture-neutral.cjs +160 -0
- package/scripts/check-admin-identity.cjs +212 -0
- package/scripts/check-brain-tool-liveness.cjs +502 -0
- package/scripts/check-card-fire.cjs +1809 -0
- package/scripts/check-cirs-declaration.cjs +279 -0
- package/scripts/check-deck-design.cjs +104 -0
- package/scripts/check-dual-graph-health.cjs +645 -0
- package/scripts/check-first-touch-drift.cjs +220 -0
- package/scripts/check-flagship-floor.cjs +391 -0
- package/scripts/check-framework-vocabulary-drift.cjs +563 -0
- package/scripts/check-gate-seam.cjs +178 -0
- package/scripts/check-graph-derive-health.cjs +208 -0
- package/scripts/check-graph-export-typemap.cjs +118 -0
- package/scripts/check-help-coverage.cjs +290 -0
- package/scripts/check-hitl-stages.cjs +219 -0
- package/scripts/check-hook-schema-compatibility.cjs +231 -0
- package/scripts/check-hsi-deps +42 -0
- package/scripts/check-kuzu-reintroduction.cjs +251 -0
- package/scripts/check-onboard +43 -0
- package/scripts/check-onboard-statusline.cjs +363 -0
- package/scripts/check-palette-consistency.cjs +106 -0
- package/scripts/check-pending-ambiguous.cjs +244 -0
- package/scripts/check-pending-breakthrough.cjs +189 -0
- package/scripts/check-pending-breakthrough.test.cjs +166 -0
- package/scripts/check-pending-naming-decision.cjs +97 -0
- package/scripts/check-plugin-path-anchoring.cjs +830 -0
- package/scripts/check-publish-needs.cjs +126 -0
- package/scripts/check-registry-drift.cjs +206 -0
- package/scripts/check-release-payload-ceiling.cjs +269 -0
- package/scripts/check-render-coverage.cjs +558 -0
- package/scripts/check-research-isomorphism.cjs +446 -0
- package/scripts/check-reward-before-investment.cjs +261 -0
- package/scripts/check-room-blueprints.cjs +213 -0
- package/scripts/check-schema-aliases.cjs +532 -0
- package/scripts/check-shape-declaration.cjs +958 -0
- package/scripts/check-shape-declaration.test.cjs +185 -0
- package/scripts/check-skill-spec.cjs +312 -0
- package/scripts/check-skill-vs-code-drift.cjs +178 -0
- package/scripts/check-substrate.cjs +513 -0
- package/scripts/check-tool-honesty.cjs +1601 -0
- package/scripts/check-update +60 -0
- package/scripts/check-version-and-sha.cjs +366 -0
- package/scripts/check-voice-style.cjs +184 -0
- package/scripts/check-worktree-hygiene.cjs +530 -0
- package/scripts/classify-insight +59 -0
- package/scripts/coherence-smoke-test.cjs +489 -0
- package/scripts/compute-bayesian-surprise.py +175 -0
- package/scripts/compute-blindspot-mass.py +209 -0
- package/scripts/compute-disruption-index.py +211 -0
- package/scripts/compute-element-novelty.py +254 -0
- package/scripts/compute-external-whitespace.py +563 -0
- package/scripts/compute-hsi.py +947 -0
- package/scripts/compute-meetings-intelligence +716 -0
- package/scripts/compute-opportunity-state +17 -0
- package/scripts/compute-state +393 -0
- package/scripts/compute-team +1112 -0
- package/scripts/compute-whitespace-embeddings.py +464 -0
- package/scripts/compute-whitespace-gaps.py +562 -0
- package/scripts/compute_topic_forest.py +684 -0
- package/scripts/consolidate-pinecone.py +265 -0
- package/scripts/context-monitor +943 -0
- package/scripts/create-speaker-profile +311 -0
- package/scripts/cross-room-detect.cjs +195 -0
- package/scripts/csv-to-idea-graph.cjs +755 -0
- package/scripts/ctxl-eval.cjs +846 -0
- package/scripts/curation-132-03-dedup-held-rename.cjs +395 -0
- package/scripts/curation-132-05-pseudonymize.cjs +189 -0
- package/scripts/derive-verb-reach-affinity.cjs +507 -0
- package/scripts/detect-reverse-salients.py +242 -0
- package/scripts/diagnostics-command.cjs +345 -0
- package/scripts/dial-memory-refresh-command.cjs +147 -0
- package/scripts/discover-analogy-whitespace.py +433 -0
- package/scripts/discover-hsi-whitespace.py +352 -0
- package/scripts/discover-rs-whitespace.py +327 -0
- package/scripts/discovery-cycle.cjs +625 -0
- package/scripts/disposition-render-v2.cjs +229 -0
- package/scripts/doctor-preflight-format.cjs +101 -0
- package/scripts/doctor.cjs +4327 -0
- package/scripts/dogfood-bridge/append-to-queue.sh +59 -0
- package/scripts/dogfood-bridge/path-filter.cjs +86 -0
- package/scripts/dogfood-derive.cjs +158 -0
- package/scripts/dogfood-emit.cjs +126 -0
- package/scripts/empathy-observation-emit.cjs +108 -0
- package/scripts/enrichment-queue-append.cjs +157 -0
- package/scripts/ensure-brain-baseline.cjs +117 -0
- package/scripts/entity-extract.cjs +1135 -0
- package/scripts/eureka-command.cjs +687 -0
- package/scripts/eureka-critic-run.cjs +662 -0
- package/scripts/eureka-portfolio-report.cjs +2038 -0
- package/scripts/eureka-room-report.cjs +419 -0
- package/scripts/explain-decision-command.cjs +499 -0
- package/scripts/export-pinecone-embeddings.cjs +516 -0
- package/scripts/extract-room-intelligence.cjs +714 -0
- package/scripts/fetch-brain-baseline.cjs +190 -0
- package/scripts/fetch-brain-baseline.py +360 -0
- package/scripts/feynman-minto-guardian.cjs +672 -0
- package/scripts/feynman-timeline-refresh-command.cjs +270 -0
- package/scripts/file-asset +253 -0
- package/scripts/fire-sensor-event.cjs +83 -0
- package/scripts/first-install-router.cjs +968 -0
- package/scripts/frontmatter-schema-validator.cjs +339 -0
- package/scripts/fts-index-drain.cjs +221 -0
- package/scripts/generate-chat-embed.cjs +179 -0
- package/scripts/generate-deck.cjs +322 -0
- package/scripts/generate-export.cjs +474 -0
- package/scripts/generate-hub.cjs +2553 -0
- package/scripts/generate-lobby.cjs +718 -0
- package/scripts/generate-presentation.cjs +988 -0
- package/scripts/generate-presentation.test.cjs +405 -0
- package/scripts/generate-section-intelligence.cjs +330 -0
- package/scripts/generate-snapshot.cjs +1410 -0
- package/scripts/generate-standalone +159 -0
- package/scripts/git-ops +211 -0
- package/scripts/graph-heal-pipeline.cjs +321 -0
- package/scripts/gsd-artifact-graph-hook.cjs +219 -0
- package/scripts/gsd-graph-derive-drain.cjs +571 -0
- package/scripts/gsd-graph-derive-sweep.cjs +195 -0
- package/scripts/heal-command.cjs +1365 -0
- package/scripts/hedge-refit-pipeline.cjs +207 -0
- package/scripts/help-renderer.cjs +303 -0
- package/scripts/hmi-compliance-poll.cjs +451 -0
- package/scripts/hmi-status-command.cjs +510 -0
- package/scripts/hooked-rescore-117.cjs +224 -0
- package/scripts/hooks/pre-commit +533 -0
- package/scripts/hooks/pre-commit-room-minto-guard.cmd +43 -0
- package/scripts/hooks/pre-commit-room-minto-guard.sh +533 -0
- package/scripts/hsi-to-graph.cjs +194 -0
- package/scripts/huji-batch.cjs +821 -0
- package/scripts/huji-eval.cjs +1158 -0
- package/scripts/huji-intake.cjs +563 -0
- package/scripts/huji-pin-smoketest.cjs +454 -0
- package/scripts/huji-run-one-async.cjs +305 -0
- package/scripts/huji-run-one.cjs +671 -0
- package/scripts/install-pre-commit.sh +113 -0
- package/scripts/intent-classifier +106 -0
- package/scripts/intent-classifier.cjs +3620 -0
- package/scripts/interpret-whitespace.cjs +691 -0
- package/scripts/jtbd-command.cjs +810 -0
- package/scripts/jtbd-update.cjs +299 -0
- package/scripts/label-topic-forest.cjs +667 -0
- package/scripts/learn-from-usage +168 -0
- package/scripts/lib/__pycache__/ensure_ml_deps.cpython-312.pyc +0 -0
- package/scripts/lib/ensure_ml_deps.py +97 -0
- package/scripts/load-embeddings-into-neo4j.cjs +569 -0
- package/scripts/memory-artifact-graph-hook.cjs +191 -0
- package/scripts/memory-command.cjs +687 -0
- package/scripts/memory-completion-detector.cjs +217 -0
- package/scripts/memory-lifecycle.cjs +620 -0
- package/scripts/memory-resume-nudge.cjs +233 -0
- package/scripts/methodology-ingest-local.sh +36 -0
- package/scripts/migrate-brain-mcp-from-http-to-stdio.cjs +190 -0
- package/scripts/migrate-brain-mcp-from-http-to-stdio.test.cjs +242 -0
- package/scripts/migrate-hats-to-roomdb.cjs +217 -0
- package/scripts/migrate-lazygraph.cjs +250 -0
- package/scripts/migrate-minto-schema-v88.cjs +296 -0
- package/scripts/migrate-plugin-root-refs.cjs +168 -0
- package/scripts/migrate-room-sections-v275.cjs +556 -0
- package/scripts/migrate-rooms +417 -0
- package/scripts/migrate-skill-frontmatter.cjs +472 -0
- package/scripts/migrate-stale-user-settings.cjs +296 -0
- package/scripts/migrate-telemetry-v1.cjs +384 -0
- package/scripts/migrate-telemetry-v1.test.cjs +356 -0
- package/scripts/minto-debouncer.cjs +428 -0
- package/scripts/mos-status.cjs +622 -0
- package/scripts/mva-detect.cjs +229 -0
- package/scripts/mva-run.cjs +36 -0
- package/scripts/on-agent-complete +163 -0
- package/scripts/on-cwd-changed +149 -0
- package/scripts/on-file-changed +68 -0
- package/scripts/on-stop +617 -0
- package/scripts/on-task-complete +194 -0
- package/scripts/operator-command.cjs +858 -0
- package/scripts/operator-update.cjs +308 -0
- package/scripts/part8-egress-guard-hook.cjs +229 -0
- package/scripts/pipeline-command.cjs +271 -0
- package/scripts/post-compact +383 -0
- package/scripts/post-update-activation.cjs +339 -0
- package/scripts/post-write +283 -0
- package/scripts/power-demo-prompt.md +621 -0
- package/scripts/pre-compact +273 -0
- package/scripts/preflight-auto-explore.cjs +314 -0
- package/scripts/preflight-doctor.cjs +225 -0
- package/scripts/preflight-release-drift.cjs +168 -0
- package/scripts/preflight-tension-surface.cjs +414 -0
- package/scripts/probe-brain-contract.cjs +502 -0
- package/scripts/publish-ops +346 -0
- package/scripts/query-efficiency-telemetry.cjs +364 -0
- package/scripts/query-semantic-scholar.cjs +545 -0
- package/scripts/reapply-modifications +49 -0
- package/scripts/reassign-primary.cjs +125 -0
- package/scripts/recompile-room-references.cjs +601 -0
- package/scripts/release-beta-preflight.sh +69 -0
- package/scripts/render-pdf +588 -0
- package/scripts/render-viz +190 -0
- package/scripts/research-speaker +239 -0
- package/scripts/resolve-room +204 -0
- package/scripts/restore-post-compact-context.cjs +320 -0
- package/scripts/room-auto-create-nudge.cjs +136 -0
- package/scripts/room-naming-selector.cjs +201 -0
- package/scripts/room-registry +767 -0
- package/scripts/rs-discovery-engine.cjs +725 -0
- package/scripts/rs-engine.py +2073 -0
- package/scripts/rs-experts-command.cjs +300 -0
- package/scripts/rs-explain-command.cjs +323 -0
- package/scripts/rs-fetch-command.cjs +170 -0
- package/scripts/rs-thesis-command.cjs +203 -0
- package/scripts/rs-vector-bridge.cjs +410 -0
- package/scripts/run-harness.cjs +890 -0
- package/scripts/scout-cadence-guard.cjs +323 -0
- package/scripts/scout-cadence-runner.cjs +509 -0
- package/scripts/scout-telemetry-aggregator.cjs +268 -0
- package/scripts/sealed-walker.py +96 -0
- package/scripts/seed-brain-commands.cjs +324 -0
- package/scripts/self-update +105 -0
- package/scripts/sentinel-deadline-monitor +241 -0
- package/scripts/sentinel-health-check +198 -0
- package/scripts/sentinel-snapshot +42 -0
- package/scripts/serve-dashboard +103 -0
- package/scripts/serve-dashboard-live +932 -0
- package/scripts/serve-presentation +97 -0
- package/scripts/serve-wiki +90 -0
- package/scripts/session-end-presence.cjs +79 -0
- package/scripts/session-start +1942 -0
- package/scripts/sessionstart-coordinator.cjs +249 -0
- package/scripts/sessionstart-npm-reconcile.cjs +111 -0
- package/scripts/sessionstart-post-update-preflight.cjs +303 -0
- package/scripts/sessionstart-reference-now-seed.cjs +137 -0
- package/scripts/setup-hooks.sh +112 -0
- package/scripts/skillopt-codereview.cjs +830 -0
- package/scripts/skillopt-eval.cjs +519 -0
- package/scripts/skillopt-funnel.cjs +1076 -0
- package/scripts/skillopt-genqueries.cjs +571 -0
- package/scripts/skillopt-inventory.cjs +319 -0
- package/scripts/skillopt-merge.cjs +656 -0
- package/scripts/skillopt-triggerloop.cjs +1126 -0
- package/scripts/soft-alias-runner.cjs +116 -0
- package/scripts/stamp-artifact-write.cjs +276 -0
- package/scripts/stamp-firing-block.cjs +325 -0
- package/scripts/state-write.cjs +97 -0
- package/scripts/statusline-fallback-echo.cjs +297 -0
- package/scripts/statusline-mos +116 -0
- package/scripts/statusline-mos-dispatch +127 -0
- package/scripts/suggest-next-command.cjs +416 -0
- package/scripts/sweep-skill-descriptions.cjs +263 -0
- package/scripts/sync-rooms-brain +438 -0
- package/scripts/sync-rooms-graph +264 -0
- package/scripts/telemetry-command-invocation.cjs +120 -0
- package/scripts/test-doctor-recovery.cjs +242 -0
- package/scripts/test-fresh-install.md +140 -0
- package/scripts/track-analytics +156 -0
- package/scripts/transcribe-audio +148 -0
- package/scripts/transcript-ingest.cjs +225 -0
- package/scripts/update-icm-index +153 -0
- package/scripts/v182-brain-optimize.cypher +1191 -0
- package/scripts/validate-model-profiles +93 -0
- package/scripts/vault-content-reformatter.cjs +581 -0
- package/scripts/vault-export-orchestrator.cjs +400 -0
- package/scripts/vault-footer-injector.cjs +315 -0
- package/scripts/vault-import.cjs +839 -0
- package/scripts/vault-integration-test.cjs +318 -0
- package/scripts/vault-regenerate-all.cjs +216 -0
- package/scripts/vault-regenerate-all.test.cjs +138 -0
- package/scripts/vault-rules-generator.cjs +220 -0
- package/scripts/vault-section-minto-generator.cjs +1642 -0
- package/scripts/vault-section-minto-generator.integration.test.cjs +576 -0
- package/scripts/vault-section-minto-generator.test.cjs +291 -0
- package/scripts/vault-section-state-generator.cjs +385 -0
- package/scripts/vault-welcome-generator.cjs +403 -0
- package/scripts/vault-wikilink-injector.cjs +449 -0
- package/scripts/verify-phase-132.cjs +338 -0
- package/scripts/verify-release +744 -0
- package/scripts/whitespace-command.cjs +831 -0
- package/scripts/whitespace-to-brain.cjs +383 -0
- package/scripts/whitespace-to-graph.cjs +220 -0
- package/scripts/wikilink-batch.cjs +102 -0
- package/scripts/wikilink-file.cjs +139 -0
- package/scripts/write-bridge-artifacts.cjs +140 -0
- package/scripts/write-scope-check +12 -0
- package/scripts/write-scope-check.cjs +461 -0
- package/scripts/write-whitespace-sections.cjs +483 -0
- package/settings.json +7 -0
- package/skills/act/SKILL.md +523 -0
- package/skills/admin/SKILL.md +437 -0
- package/skills/agentshield/SKILL.md +50 -0
- package/skills/analyze-needs/SKILL.md +74 -0
- package/skills/analyze-systems/SKILL.md +69 -0
- package/skills/analyze-timing/SKILL.md +94 -0
- package/skills/auto-explore/SKILL.md +84 -0
- package/skills/beautiful-question/SKILL.md +72 -0
- package/skills/bono/SKILL.md +146 -0
- package/skills/brain-connector/SKILL.md +206 -0
- package/skills/brain-derive/SKILL.md +140 -0
- package/skills/build-knowledge/SKILL.md +118 -0
- package/skills/build-thesis/SKILL.md +90 -0
- package/skills/causal/SKILL.md +265 -0
- package/skills/challenge-assumptions/SKILL.md +74 -0
- package/skills/client-discovery-interview/SKILL.md +94 -0
- package/skills/client-discovery-interview/discovery-scaffold.json +41 -0
- package/skills/client-discovery-interview/question-bank.md +149 -0
- package/skills/compare-ventures/SKILL.md +113 -0
- package/skills/context-engine/SKILL.md +169 -0
- package/skills/conversation-mode/SKILL.md +189 -0
- package/skills/correct-reference-now/SKILL.md +86 -0
- package/skills/dashboard/SKILL.md +142 -0
- package/skills/deck/SKILL.md +113 -0
- package/skills/deep-grade/SKILL.md +210 -0
- package/skills/diagnose/SKILL.md +128 -0
- package/skills/diagnostics/SKILL.md +193 -0
- package/skills/dial-memory-refresh/SKILL.md +116 -0
- package/skills/diffusion/SKILL.md +125 -0
- package/skills/discover/SKILL.md +216 -0
- package/skills/doctor/SKILL.md +269 -0
- package/skills/dogfood-flush/SKILL.md +133 -0
- package/skills/dominant-designs/SKILL.md +72 -0
- package/skills/eureka/SKILL.md +313 -0
- package/skills/explain-decision/SKILL.md +138 -0
- package/skills/explore-domains/SKILL.md +74 -0
- package/skills/explore-futures/SKILL.md +64 -0
- package/skills/explore-opportunity/SKILL.md +168 -0
- package/skills/explore-trends/SKILL.md +74 -0
- package/skills/export/SKILL.md +126 -0
- package/skills/feynman-timeline-refresh/SKILL.md +105 -0
- package/skills/file-meeting/SKILL.md +1190 -0
- package/skills/find-analogies/SKILL.md +360 -0
- package/skills/find-bottlenecks/SKILL.md +104 -0
- package/skills/find-connections/SKILL.md +108 -0
- package/skills/funding/SKILL.md +110 -0
- package/skills/futures/SKILL.md +124 -0
- package/skills/grade/SKILL.md +252 -0
- package/skills/grade-grant/SKILL.md +293 -0
- package/skills/graph/SKILL.md +216 -0
- package/skills/hat-briefing/SKILL.md +160 -0
- package/skills/heal/SKILL.md +69 -0
- package/skills/help/SKILL.md +172 -0
- package/skills/hmi-status/SKILL.md +73 -0
- package/skills/ignite/SKILL.md +225 -0
- package/skills/ingest-methodology/SKILL.md +125 -0
- package/skills/intel-pipeline/SKILL.md +128 -0
- package/skills/intelligence-orchestrator/SKILL.md +262 -0
- package/skills/jtbd/SKILL.md +261 -0
- package/skills/larry-personality/SKILL.md +570 -0
- package/skills/larry-personality/framework-chains.md +92 -0
- package/skills/larry-personality/mode-engine.md +185 -0
- package/skills/leadership/SKILL.md +109 -0
- package/skills/lean-canvas/SKILL.md +70 -0
- package/skills/macro-trends/SKILL.md +84 -0
- package/skills/map-unknowns/SKILL.md +72 -0
- package/skills/memory/SKILL.md +212 -0
- package/skills/memory-cortex-reach/SKILL.md +80 -0
- package/skills/models/SKILL.md +197 -0
- package/skills/mos/SKILL.md +160 -0
- package/skills/mos-deck-engine/SKILL.md +329 -0
- package/skills/mos-reason/SKILL.md +484 -0
- package/skills/mullins/SKILL.md +151 -0
- package/skills/mullins-scaffold/SKILL.md +132 -0
- package/skills/mullins-scaffold/scaffold.json +223 -0
- package/skills/mva-brief/SKILL.md +87 -0
- package/skills/mva-option/SKILL.md +120 -0
- package/skills/mva-pipeline/SKILL.md +158 -0
- package/skills/mva-report/SKILL.md +79 -0
- package/skills/new-project/SKILL.md +629 -0
- package/skills/new-surface/SKILL.md +112 -0
- package/skills/onboard/SKILL.md +485 -0
- package/skills/operator/SKILL.md +167 -0
- package/skills/opportunities/SKILL.md +171 -0
- package/skills/organize/SKILL.md +69 -0
- package/skills/persona/SKILL.md +272 -0
- package/skills/pipeline/SKILL.md +164 -0
- package/skills/present/SKILL.md +123 -0
- package/skills/publish/SKILL.md +224 -0
- package/skills/pws-brain/SKILL.md +152 -0
- package/skills/pws-methodology/SKILL.md +92 -0
- package/skills/qualify-opportunity/SKILL.md +111 -0
- package/skills/query/SKILL.md +68 -0
- package/skills/radar/SKILL.md +106 -0
- package/skills/reanalyze/SKILL.md +122 -0
- package/skills/research/SKILL.md +462 -0
- package/skills/room/SKILL.md +381 -0
- package/skills/room-passive/SKILL.md +174 -0
- package/skills/room-proactive/SKILL.md +344 -0
- package/skills/rooms/SKILL.md +678 -0
- package/skills/root-cause/SKILL.md +73 -0
- package/skills/rs-experts/SKILL.md +151 -0
- package/skills/rs-explain/SKILL.md +130 -0
- package/skills/rs-fetch/SKILL.md +115 -0
- package/skills/rs-thesis/SKILL.md +129 -0
- package/skills/scenario-plan/SKILL.md +76 -0
- package/skills/scheduled-tasks/SKILL.md +301 -0
- package/skills/score-innovation/SKILL.md +74 -0
- package/skills/scout/SKILL.md +370 -0
- package/skills/setup/SKILL.md +654 -0
- package/skills/show/SKILL.md +68 -0
- package/skills/skill/SKILL.md +104 -0
- package/skills/snapshot/SKILL.md +178 -0
- package/skills/speakers/SKILL.md +116 -0
- package/skills/splash/SKILL.md +54 -0
- package/skills/stance/SKILL.md +89 -0
- package/skills/status/SKILL.md +107 -0
- package/skills/structure-argument/SKILL.md +78 -0
- package/skills/suggest-next/SKILL.md +137 -0
- package/skills/systems-thinking/SKILL.md +220 -0
- package/skills/think-hats/SKILL.md +82 -0
- package/skills/trending-to-absurd/SKILL.md +100 -0
- package/skills/ui-system/SKILL.md +474 -0
- package/skills/ui-system/design-system/M-OS-DESIGN-SYSTEM.md +273 -0
- package/skills/ui-system/design-system/SPEC.md +72 -0
- package/skills/ui-system/design-system/image-prompt-style.md +29 -0
- package/skills/ui-system/design-system/mos-design-system.css +240 -0
- package/skills/ui-system/rules/design-system.md +60 -0
- package/skills/ui-system/rules/dual-palette.md +156 -0
- package/skills/ui-system/rules/glyph-disambiguation.md +171 -0
- package/skills/ui-system/rules/shape-f-zero-and-six.md +169 -0
- package/skills/update/SKILL.md +254 -0
- package/skills/user-needs/SKILL.md +73 -0
- package/skills/validate/SKILL.md +73 -0
- package/skills/value-proposition/SKILL.md +141 -0
- package/skills/vault/SKILL.md +326 -0
- package/skills/visualize/SKILL.md +69 -0
- package/skills/whitespace/SKILL.md +539 -0
- package/skills/wiki/SKILL.md +94 -0
- package/templates/_base.html +20 -0
- package/templates/chat-panel.html +205 -0
- package/templates/constellation-chat-hooks.js +89 -0
- package/templates/constellation.html +1272 -0
- package/templates/destijl-base.css +268 -0
- package/templates/discovery/discovery-brief-template.md +97 -0
- package/templates/due-diligence.html +49 -0
- package/templates/executive-summary.html +40 -0
- package/templates/icm/CLAUDE.md +31 -0
- package/templates/icm/GROUP-CLAUDE.md +33 -0
- package/templates/icm/INDEX.md +26 -0
- package/templates/import/stage-contracts/01-ingest.md +34 -0
- package/templates/import/stage-contracts/02-classify.md +48 -0
- package/templates/import/stage-contracts/03-route.md +42 -0
- package/templates/import/stage-contracts/04-enrich.md +40 -0
- package/templates/investment-thesis.html +25 -0
- package/templates/meeting-report.html +361 -0
- package/templates/presentation/dashboard.html +1150 -0
- package/templates/presentation/deck.html +540 -0
- package/templates/presentation/diagrams.html +437 -0
- package/templates/presentation/graph.html +391 -0
- package/templates/presentation/insights.html +548 -0
- package/templates/presentation/wiki.html +533 -0
- package/templates/profile.html +136 -0
- package/templates/room-context/last-session.md +56 -0
- package/templates/room-context/methodology-history.md +28 -0
- package/templates/room-context/rejection-log.md +25 -0
- package/templates/room-context/weekly-digest.md +54 -0
- package/templates/room-skeleton/MINTO.md.tmpl +19 -0
- package/templates/room-skeleton/ROOM.md.identity.tmpl +13 -0
- package/templates/room-skeleton/ROOM.md.section.tmpl +33 -0
- package/templates/room-skeleton/STATE.md.tmpl +33 -0
- package/templates/room-skeleton/USER.md.tmpl +23 -0
- package/templates/room-skeleton/references/.gitkeep +0 -0
- package/templates/room-skeleton/references/SECTION-SCHEMA.md +213 -0
- package/templates/room-skeleton/references/SUB-SCHEMAS.md +91 -0
- package/templates/room-skeleton/section-contracts/.gitkeep +0 -0
- package/templates/room-skeleton/section-contracts/business-model.md +32 -0
- package/templates/room-skeleton/section-contracts/competitive-analysis.md +33 -0
- package/templates/room-skeleton/section-contracts/financial-model.md +30 -0
- package/templates/room-skeleton/section-contracts/funding.md +41 -0
- package/templates/room-skeleton/section-contracts/legal-ip.md +30 -0
- package/templates/room-skeleton/section-contracts/market-analysis.md +32 -0
- package/templates/room-skeleton/section-contracts/opportunity-bank.md +39 -0
- package/templates/room-skeleton/section-contracts/problem-definition.md +32 -0
- package/templates/room-skeleton/section-contracts/solution-design.md +36 -0
- package/templates/room-skeleton/section-contracts/strategy.md +35 -0
- package/templates/room-skeleton/section-contracts/team-execution.md +36 -0
- package/templates/shared.css +427 -0
- package/templates/showcase/blueprint.html +432 -0
- package/templates/showcase/library.html +571 -0
- package/templates/showcase/narrative.html +361 -0
- package/templates/showcase/overview.html +468 -0
- package/templates/showcase/synthesis.html +473 -0
- package/templates/signature-footer.html +34 -0
|
@@ -0,0 +1,1201 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
3
|
+
*
|
|
4
|
+
* Phase 101-04 + 101-05 + 88.2-04 -- single integration point for Shape F/G/H rendering.
|
|
5
|
+
*
|
|
6
|
+
* Phase 101-05 (Mode A/B/Tier 0 graceful degradation per Canon Part 3):
|
|
7
|
+
*
|
|
8
|
+
* Tier helper:
|
|
9
|
+
* - Resolved at: lib/hmi/tier-check.cjs (v1 stub; Phase 90 follow-on
|
|
10
|
+
* will replace with full Brain-ping + cache + BRAIN.md presence audit).
|
|
11
|
+
* - Expected return from getTier(): integer in {0, 1, 2, 3}.
|
|
12
|
+
* - Mode mapping (Canon Part 3 "Option generation tier-awareness"):
|
|
13
|
+
* tier >= 2 -> Mode A (Full Loop): Brain reachable, RECOMMENDED >= 0.7 marker rendered.
|
|
14
|
+
* tier 1 -> Mode B (Local Only): Navigation Engine; no RECOMMENDED marker; Zone 1 carries
|
|
15
|
+
* "Brain unreachable; running on local graph only." prefix line.
|
|
16
|
+
* tier 0 -> degraded; dispatcher refuses expensive shapes per Canon Part 3 Rule 2,
|
|
17
|
+
* returns { shape: 'error', rendered: { error: 'tier-0-refused', ... } }.
|
|
18
|
+
*
|
|
19
|
+
* Defense-in-depth: dispatcher computes mode from tier and propagates `mode` to every renderer.
|
|
20
|
+
* Renderers (F.6 + G + H) ALSO suppress RECOMMENDED markers internally when mode === 'B' so a
|
|
21
|
+
* buggy caller who forgets to pass mode still cannot leak a `▶` marker in Mode B.
|
|
22
|
+
*
|
|
23
|
+
* Phase 88.2-04 (Operator-aware F.1..F.5 sub-shape dispatch + telemetry + AskUserQuestion trailer):
|
|
24
|
+
*
|
|
25
|
+
* F.1..F.5 sub-shape dispatch:
|
|
26
|
+
* requestedShape ∈ {'F.1','F.2','F.3','F.4','F.5'} routes directly to the matching
|
|
27
|
+
* Phase 88.2 wave-1 renderer (lib/hmi/shape-fN-renderer.cjs). The umbrella 'F'
|
|
28
|
+
* branch is preserved byte-stable -- it still routes via JTBD state to F.6 (or
|
|
29
|
+
* F.1 fallback). Existing 9-test selector-dispatcher contract is preserved.
|
|
30
|
+
*
|
|
31
|
+
* JUST_TALK refuse (Canon Part 3 + render-v2 compaction gate):
|
|
32
|
+
* When `operator === 'JUST_TALK'` and ANY Shape F.* (umbrella or sub-shape) is
|
|
33
|
+
* requested, the dispatcher returns:
|
|
34
|
+
* { shape: 'error', rendered: { error: 'render_v2_compaction_violation', ... } }
|
|
35
|
+
* mirroring lib/render/render-v2.cjs#244 ("JUST_TALK suppresses ALL output").
|
|
36
|
+
* A Shape F selector cannot be presented while the conversation is in JUST_TALK
|
|
37
|
+
* prose-only mode without violating the compaction contract.
|
|
38
|
+
*
|
|
39
|
+
* Telemetry emission (Canon Part 8 LOCAL ONLY):
|
|
40
|
+
* Every successful Shape F.* presentation calls
|
|
41
|
+
* selector-telemetry.recordPresentation(roomDir, {sub_shape, mode, options_count,
|
|
42
|
+
* recommended_present, operator}). Wrapped in try/catch -- telemetry NEVER fails
|
|
43
|
+
* Larry's turn. The companion recordResponse() is exposed as a re-export for
|
|
44
|
+
* consumers that wire the AskUserQuestion answer back to the ledger.
|
|
45
|
+
*
|
|
46
|
+
* AskUserQuestion structural-marker trailer:
|
|
47
|
+
* Every successful Shape F.* return carries an
|
|
48
|
+
* `rendered.askuserquestion_marker = '[AskUserQuestion contract: shape=F.X verbs=N]'`
|
|
49
|
+
* scalar AND the marker is appended (preceded by a blank line) to
|
|
50
|
+
* `rendered.zones.footer`. Consumers that compose zones see the trailer
|
|
51
|
+
* in the rendered surface; consumers that introspect the contract can
|
|
52
|
+
* read the scalar directly.
|
|
53
|
+
*
|
|
54
|
+
* API:
|
|
55
|
+
* pickShape({ requestedShape, roomDir, operator, tier, payload })
|
|
56
|
+
* -> { shape, rendered } | { shape, passthrough: true }
|
|
57
|
+
*
|
|
58
|
+
* - requestedShape: 'F' | 'F.1' | 'F.2' | 'F.3' | 'F.4' | 'F.5' | 'G' | 'H' | 'A' | 'B' | 'C' | 'D' | 'E'
|
|
59
|
+
* - roomDir: absolute path; used to read JTBD state for F-shape dispatch.
|
|
60
|
+
* - operator: one of OPERATORS or null. JUST_TALK refuses Shape F.*.
|
|
61
|
+
* - tier: optional override; if omitted, dispatcher calls getTier().
|
|
62
|
+
* - payload: shape-specific input forwarded to the corresponding renderer.
|
|
63
|
+
*
|
|
64
|
+
* recordSelectorResponse(roomDir, record)
|
|
65
|
+
* Re-export of selector-telemetry.recordResponse for consumers wiring
|
|
66
|
+
* AskUserQuestion answers back to the local ledger.
|
|
67
|
+
*
|
|
68
|
+
* Pure CJS, node built-ins only, zero deps (Phase 87 invariant).
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
'use strict';
|
|
72
|
+
|
|
73
|
+
// Phase 121-02 D-04: unified-stream selector_pick emit chokepoint.
|
|
74
|
+
// require()-loaded lazily inside emitSelectorPickUnified() so a missing writer
|
|
75
|
+
// module (or a stripped-down install) cannot crash the dispatcher at load.
|
|
76
|
+
const crypto = require('node:crypto');
|
|
77
|
+
function _sha256(s) {
|
|
78
|
+
return crypto.createHash('sha256').update(String(s || '')).digest('hex');
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const FREE_TEXT = 'Free-Text';
|
|
82
|
+
const MODE_B_ZONE1_PREFIX = '⚠ Brain unreachable; running on local graph only.';
|
|
83
|
+
|
|
84
|
+
// Phase 148-03 (IRW-04, D-03): the reach -> toggleable-component-archetype map.
|
|
85
|
+
// Registry-is-the-table -- the dispatcher reads lib/hmi/reach-component-map.json
|
|
86
|
+
// and NEVER a hardcoded switch (mirrors the connector-registry / ORCH-01
|
|
87
|
+
// pattern). A new reach joins by adding a row to the JSON, not by editing this
|
|
88
|
+
// file. resolveArchetype() folds the three key namespaces (reaches /
|
|
89
|
+
// sub_modes / standing_options) into a single flat lookup; the default on a
|
|
90
|
+
// miss is 'select' (the Shape F.1 single-pick path). The archetype then drives
|
|
91
|
+
// which AskUserQuestion mode the dispatcher constructs (multiSelect / confirm /
|
|
92
|
+
// ordered follow-up / auto / select) -- the construction stays INSIDE this file
|
|
93
|
+
// per SEED-020 (no bespoke AskUserQuestion payload built anywhere else).
|
|
94
|
+
const ARCHETYPE_DEFAULT = 'select';
|
|
95
|
+
const VALID_ARCHETYPES = ['select', 'multiSelect', 'ordered', 'group', 'confirm', 'auto', 'text'];
|
|
96
|
+
|
|
97
|
+
let _reachComponentMapCache = null;
|
|
98
|
+
function _loadReachComponentMap() {
|
|
99
|
+
if (_reachComponentMapCache !== null) return _reachComponentMapCache;
|
|
100
|
+
let flat = {};
|
|
101
|
+
try {
|
|
102
|
+
const raw = require('./reach-component-map.json');
|
|
103
|
+
const namespaces = ['reaches', 'sub_modes', 'standing_options'];
|
|
104
|
+
for (const ns of namespaces) {
|
|
105
|
+
const group = raw && raw[ns];
|
|
106
|
+
if (group && typeof group === 'object') {
|
|
107
|
+
for (const key of Object.keys(group)) {
|
|
108
|
+
const entry = group[key];
|
|
109
|
+
const arch = entry && typeof entry.archetype === 'string' ? entry.archetype : null;
|
|
110
|
+
if (arch && VALID_ARCHETYPES.indexOf(arch) !== -1) {
|
|
111
|
+
flat[key] = arch;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} catch (_e) {
|
|
117
|
+
// Missing / malformed map (degraded install): every reach falls back to the
|
|
118
|
+
// default 'select' archetype -- the renderer still works, no crash.
|
|
119
|
+
flat = {};
|
|
120
|
+
}
|
|
121
|
+
_reachComponentMapCache = flat;
|
|
122
|
+
return _reachComponentMapCache;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Phase 150-06 (MEM-06, D-02): the archetype-escalation rank. The static
|
|
126
|
+
// reach-component-map is the FLOOR; the projected cortex can only ESCALATE a
|
|
127
|
+
// reach UP this rank, never lower it. A higher index is a higher-friction gate
|
|
128
|
+
// (a contradiction in the cortex warrants a confirm before a bare select acts).
|
|
129
|
+
// 'confirm' is the escalation ceiling for the contradiction signal; multiSelect /
|
|
130
|
+
// ordered / group / auto / text are orthogonal interaction modes and are never
|
|
131
|
+
// down-ranked by the escalation (escalate only lifts select -> confirm).
|
|
132
|
+
const _ESCALATION_RANK = { select: 0, confirm: 1 };
|
|
133
|
+
|
|
134
|
+
// Read the contradiction-presence signal off a cortexState WITHOUT importing the
|
|
135
|
+
// adapter at module load (lazy require so a degraded install that lacks the
|
|
136
|
+
// adapter still resolves the static floor). cortexState may carry either a
|
|
137
|
+
// pre-computed boolean (cortexState.hasContradiction) or the raw cortexNodes the
|
|
138
|
+
// adapter inspects. Presence-only; never reads prose (Canon Part 8).
|
|
139
|
+
function _cortexEscalatesToConfirm(cortexState) {
|
|
140
|
+
if (!cortexState || typeof cortexState !== 'object') return false;
|
|
141
|
+
if (cortexState.hasContradiction === true) return true;
|
|
142
|
+
const nodes = cortexState.cortexNodes;
|
|
143
|
+
if (!Array.isArray(nodes) || nodes.length === 0) return false;
|
|
144
|
+
try {
|
|
145
|
+
const adapter = require('./cortex-reach-adapter.cjs');
|
|
146
|
+
if (adapter && typeof adapter.hasContradiction === 'function') {
|
|
147
|
+
return adapter.hasContradiction(nodes) === true;
|
|
148
|
+
}
|
|
149
|
+
} catch (_e) {
|
|
150
|
+
// Degraded install: no adapter -> no escalation, the static floor stands.
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Phase 148-03 (IRW-04, D-03) + Phase 150-06 (MEM-06, D-02): resolve a reach_id /
|
|
157
|
+
* sub_mode / standing-option key to its toggleable-component archetype. Reads
|
|
158
|
+
* lib/hmi/reach-component-map.json (registry-is-the-table). Returns the default
|
|
159
|
+
* 'select' on any miss.
|
|
160
|
+
*
|
|
161
|
+
* The OPTIONAL second arg cortexState (Phase 150-06): when omitted (every
|
|
162
|
+
* existing caller) the static-map archetype is returned BYTE-STABLE -- the floor
|
|
163
|
+
* is unchanged. When provided and carrying projected node-type presence that
|
|
164
|
+
* warrants escalation (a contradiction decision node present), a 'select' reach
|
|
165
|
+
* ESCALATES to 'confirm'. The static map is the floor and is NEVER lowered
|
|
166
|
+
* (T-150-06-04): escalation only lifts.
|
|
167
|
+
*/
|
|
168
|
+
function resolveArchetype(reachIdOrSubMode, cortexState) {
|
|
169
|
+
if (typeof reachIdOrSubMode !== 'string' || reachIdOrSubMode.length === 0) {
|
|
170
|
+
return ARCHETYPE_DEFAULT;
|
|
171
|
+
}
|
|
172
|
+
const map = _loadReachComponentMap();
|
|
173
|
+
const hit = map[reachIdOrSubMode];
|
|
174
|
+
const staticArchetype = (typeof hit === 'string' && hit.length > 0) ? hit : ARCHETYPE_DEFAULT;
|
|
175
|
+
|
|
176
|
+
// No cortexState (every existing caller) -> byte-stable static floor.
|
|
177
|
+
if (cortexState === undefined || cortexState === null) {
|
|
178
|
+
return staticArchetype;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Cortex escalation: only lift select -> confirm; never lower the floor.
|
|
182
|
+
if (_cortexEscalatesToConfirm(cortexState)) {
|
|
183
|
+
const staticRank = (typeof _ESCALATION_RANK[staticArchetype] === 'number')
|
|
184
|
+
? _ESCALATION_RANK[staticArchetype] : null;
|
|
185
|
+
const confirmRank = _ESCALATION_RANK.confirm;
|
|
186
|
+
// Only escalate when the static archetype is on the select->confirm ladder
|
|
187
|
+
// AND below confirm. Orthogonal archetypes (multiSelect/ordered/group/auto/
|
|
188
|
+
// text) are left untouched -- the escalation never down-ranks them.
|
|
189
|
+
if (staticRank !== null && staticRank < confirmRank) {
|
|
190
|
+
return 'confirm';
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
return staticArchetype;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Phase 148-03: translate a resolved archetype into the AskUserQuestion-shape
|
|
199
|
+
* hints the dispatcher attaches to a Shape F.* rendered contract. This is the
|
|
200
|
+
* ONLY place the archetype becomes an interactivity mode (SEED-020 single
|
|
201
|
+
* door). The hints are scalars consumed by the render host when it composes
|
|
202
|
+
* the AskUserQuestion call -- no bespoke payload is built here or elsewhere.
|
|
203
|
+
*
|
|
204
|
+
* multiSelect -> { multiSelect: true }
|
|
205
|
+
* confirm -> { confirm: true } (a confirm follow-up gate)
|
|
206
|
+
* ordered -> { ordered: true } (an ordering follow-up prompt, D-02;
|
|
207
|
+
* NOT a live ordered widget)
|
|
208
|
+
* auto -> { auto: true } (no pick -- the host runs it, D-04)
|
|
209
|
+
* select -> { multiSelect: false } (the default single-pick path)
|
|
210
|
+
*/
|
|
211
|
+
function archetypeToContractHints(archetype) {
|
|
212
|
+
const arch = (typeof archetype === 'string' && VALID_ARCHETYPES.indexOf(archetype) !== -1)
|
|
213
|
+
? archetype : ARCHETYPE_DEFAULT;
|
|
214
|
+
const hints = { archetype: arch, multiSelect: false };
|
|
215
|
+
if (arch === 'multiSelect' || arch === 'group') {
|
|
216
|
+
hints.multiSelect = true;
|
|
217
|
+
} else if (arch === 'confirm') {
|
|
218
|
+
hints.confirm = true;
|
|
219
|
+
} else if (arch === 'ordered') {
|
|
220
|
+
hints.ordered = true;
|
|
221
|
+
} else if (arch === 'auto') {
|
|
222
|
+
hints.auto = true;
|
|
223
|
+
} else if (arch === 'text') {
|
|
224
|
+
hints.freeText = true;
|
|
225
|
+
}
|
|
226
|
+
return hints;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Phase 148-03: apply the archetype-driven AskUserQuestion-mode hints onto a
|
|
231
|
+
* rendered Shape F.* contract. The dispatcher resolves the archetype from the
|
|
232
|
+
* caller-supplied reachKey (reach_id / sub_mode / standing-option key) and folds
|
|
233
|
+
* the hints onto rendered.contract so the render host constructs the right
|
|
234
|
+
* AskUserQuestion mode. Construction stays inside the dispatcher (SEED-020).
|
|
235
|
+
*/
|
|
236
|
+
function applyArchetypeRouting(rendered, reachKey) {
|
|
237
|
+
if (!rendered || typeof rendered !== 'object') return rendered;
|
|
238
|
+
if (!rendered.contract || typeof rendered.contract !== 'object') return rendered;
|
|
239
|
+
const archetype = resolveArchetype(reachKey);
|
|
240
|
+
const hints = archetypeToContractHints(archetype);
|
|
241
|
+
rendered.contract.archetype = hints.archetype;
|
|
242
|
+
rendered.contract.multiSelect = hints.multiSelect;
|
|
243
|
+
if (hints.confirm) rendered.contract.confirm = true;
|
|
244
|
+
if (hints.ordered) rendered.contract.ordered = true;
|
|
245
|
+
if (hints.auto) rendered.contract.auto = true;
|
|
246
|
+
if (hints.freeText) rendered.contract.freeText = true;
|
|
247
|
+
return rendered;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Phase 121.5-10 Sub-plan K (LOCKED decisions 1 + Bundle A):
|
|
251
|
+
// Brain-suggestion content template constants. The locked chip / glyphs /
|
|
252
|
+
// footer values are non-negotiable per audit Section 5.2 -- consumers passing
|
|
253
|
+
// brain_suggestion_variant:true receive these literal values composed into
|
|
254
|
+
// rendered.zones.body and rendered.zones.footer. Alias map loaded once at
|
|
255
|
+
// module init from lib/hmi/jtbd-taxonomy.json alias_map.verb_aliases.
|
|
256
|
+
const BRAIN_CHIP = '[■ BRAIN]';
|
|
257
|
+
const BRAIN_GLYPH_RECOMMENDED = '▶';
|
|
258
|
+
const BRAIN_GLYPH_ALTERNATIVE = '▷';
|
|
259
|
+
|
|
260
|
+
// Load alias_map once. Safe-require: if jtbd-taxonomy.json is missing or
|
|
261
|
+
// malformed (degraded install), fall back to empty map -- consumers without
|
|
262
|
+
// alias_map get pass-through behavior (verb renders verbatim, no collapse).
|
|
263
|
+
let _aliasMapCache = null;
|
|
264
|
+
function _loadAliasMap() {
|
|
265
|
+
if (_aliasMapCache !== null) return _aliasMapCache;
|
|
266
|
+
try {
|
|
267
|
+
const tax = require('./jtbd-taxonomy.json');
|
|
268
|
+
if (tax && tax.alias_map && tax.alias_map.verb_aliases
|
|
269
|
+
&& typeof tax.alias_map.verb_aliases === 'object') {
|
|
270
|
+
_aliasMapCache = tax.alias_map.verb_aliases;
|
|
271
|
+
return _aliasMapCache;
|
|
272
|
+
}
|
|
273
|
+
} catch (_e) { /* graceful */ }
|
|
274
|
+
_aliasMapCache = {};
|
|
275
|
+
return _aliasMapCache;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Phase 121.5-10 Sub-plan K (LOCKED decision 1): collapse a user-facing verb
|
|
280
|
+
* alias to its canonical form for graph-edge persistence. Aliases live in
|
|
281
|
+
* lib/hmi/jtbd-taxonomy.json alias_map.verb_aliases; unknown verbs pass
|
|
282
|
+
* through unchanged (no-op for already-canonical verbs).
|
|
283
|
+
*
|
|
284
|
+
* Optional explicit aliasMap arg overrides the module-level cache (test seam
|
|
285
|
+
* + per-call override for surfaces with surface-specific aliases).
|
|
286
|
+
*/
|
|
287
|
+
function aliasToCanonical(verb, aliasMap) {
|
|
288
|
+
if (typeof verb !== 'string' || verb.length === 0) return verb;
|
|
289
|
+
const map = (aliasMap && typeof aliasMap === 'object') ? aliasMap : _loadAliasMap();
|
|
290
|
+
if (Object.prototype.hasOwnProperty.call(map, verb)) {
|
|
291
|
+
const canonical = map[verb];
|
|
292
|
+
if (typeof canonical === 'string' && canonical.length > 0) return canonical;
|
|
293
|
+
}
|
|
294
|
+
return verb;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Phase 121.5-10 Sub-plan K: compose the locked Brain-suggestion option-row
|
|
299
|
+
* block from a normalized optionRows array. Each row is two lines:
|
|
300
|
+
* Row 1: `<glyph> <N>. <verb>` left-padded, `<conf>%` right-aligned to 80c
|
|
301
|
+
* Row 2: 5-space indent, `<meta>`
|
|
302
|
+
* Per audit Section 5.2.1. Returns the composed string (one block).
|
|
303
|
+
*/
|
|
304
|
+
function composeBrainOptionRows(optionRows) {
|
|
305
|
+
if (!Array.isArray(optionRows) || optionRows.length === 0) return '';
|
|
306
|
+
const COL_WIDTH = 80;
|
|
307
|
+
const blocks = [];
|
|
308
|
+
for (let i = 0; i < optionRows.length; i += 1) {
|
|
309
|
+
const r = optionRows[i] || {};
|
|
310
|
+
const glyph = (r.glyph === BRAIN_GLYPH_RECOMMENDED || r.glyph === BRAIN_GLYPH_ALTERNATIVE)
|
|
311
|
+
? r.glyph : BRAIN_GLYPH_ALTERNATIVE;
|
|
312
|
+
const num = Number.isInteger(r.number) ? r.number : (i + 1);
|
|
313
|
+
const verb = (typeof r.verb === 'string' && r.verb.length > 0) ? r.verb : '';
|
|
314
|
+
const confPct = (Number.isInteger(r.confPct)) ? r.confPct : 0;
|
|
315
|
+
const meta = (typeof r.meta === 'string') ? r.meta : '';
|
|
316
|
+
const left = glyph + ' ' + String(num) + '. ' + verb;
|
|
317
|
+
const right = String(confPct) + '%';
|
|
318
|
+
const padCount = Math.max(1, COL_WIDTH - left.length - right.length);
|
|
319
|
+
const row1 = left + ' '.repeat(padCount) + right;
|
|
320
|
+
const row2 = ' ' + meta;
|
|
321
|
+
blocks.push(row1 + '\n' + row2);
|
|
322
|
+
}
|
|
323
|
+
return blocks.join('\n\n');
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Phase 88.2-04: F.* sub-shape registry and JUST_TALK refuse vocabulary.
|
|
327
|
+
// Phase 88.2-05: 'F.0' Mini Decision Gate prepended (closed-vocab; freeTextOffered:false carve-out).
|
|
328
|
+
// Phase 88.2-06: 'F.6' Plan Review Round appended (closed-vocab; routes to the
|
|
329
|
+
// collision-safe lib/hmi/shape-f6-plan-review-renderer.cjs path; the umbrella 'F'
|
|
330
|
+
// branch continues to route to Phase 101-01's lib/hmi/shape-f6-renderer.cjs via
|
|
331
|
+
// JTBD logic preserved byte-stable per R1 invariant).
|
|
332
|
+
// Phase 120-01: 'F.7' was the Breakthrough Surface (CONTEXT.md D-07..D-10 + D-20).
|
|
333
|
+
// SUPERSEDED by Phase 188-01 (SFS-06): bare 'F.7' is the CANONICAL DIAL now
|
|
334
|
+
// (renderDialShape, mirroring 'F.7-dial'); Breakthrough is no longer a shape (D-10
|
|
335
|
+
// canonical ten) but re-homes to an F.1 next-move. The shape-f7-breakthrough-renderer.cjs
|
|
336
|
+
// module stays live as the home of the frozen 5-verb set + the D-20 provenance HARD FLOOR;
|
|
337
|
+
// it is simply no longer reachable via the bare-F.7 single door.
|
|
338
|
+
// Phase 177-02: 'F.7-dial' appended -- the four-arrow register HUD branch
|
|
339
|
+
// (BCH-10/BCH-16). Routes to lib/hmi/dial-selector.cjs via the explicit
|
|
340
|
+
// requestedShape:'F.7-dial' branch in dispatchShapeFSubShape, mirroring the
|
|
341
|
+
// F.7 opt-in dispatch. The umbrella 'F' branch does NOT resolve to it.
|
|
342
|
+
// Phase 188-06 (SFS-01): 'F.8' appended -- the multiSelect Action Set. It joins by
|
|
343
|
+
// an F_SUBSHAPES row + a `requestedShape === 'F.8'` branch mirroring F.5 (SEED-020
|
|
344
|
+
// single door). The multiSelect hint is folded by archetypeToContractHints; render
|
|
345
|
+
// is a thin safeRequire of shape-f8-renderer.cjs. The umbrella 'F' branch does NOT
|
|
346
|
+
// resolve to it (opt-in dispatch only).
|
|
347
|
+
const F_SUBSHAPES = ['F.0', 'F.1', 'F.2', 'F.3', 'F.4', 'F.5', 'F.6', 'F.7', 'F.7-dial', 'F.8', 'F.9'];
|
|
348
|
+
const F_UMBRELLA = 'F';
|
|
349
|
+
const JUST_TALK = 'JUST_TALK';
|
|
350
|
+
const COMPACTION_VIOLATION_CODE = 'render_v2_compaction_violation';
|
|
351
|
+
|
|
352
|
+
function safeRequire(modPath) {
|
|
353
|
+
try {
|
|
354
|
+
return require(modPath);
|
|
355
|
+
} catch (e) {
|
|
356
|
+
if (e && e.code === 'MODULE_NOT_FOUND') return null;
|
|
357
|
+
throw e;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function resolveTier(explicitTier) {
|
|
362
|
+
if (typeof explicitTier === 'number' && Number.isFinite(explicitTier)) {
|
|
363
|
+
return explicitTier;
|
|
364
|
+
}
|
|
365
|
+
try {
|
|
366
|
+
const helper = require('./tier-check.cjs');
|
|
367
|
+
const t = helper.getTier();
|
|
368
|
+
return (typeof t === 'number' && Number.isFinite(t)) ? t : 1;
|
|
369
|
+
} catch (e) {
|
|
370
|
+
// tier-check absent or broken -> assume Local Only (Mode B), the safer default.
|
|
371
|
+
return 1;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
function modeFromTier(tier) {
|
|
376
|
+
if (tier >= 2) return 'A';
|
|
377
|
+
if (tier === 1) return 'B';
|
|
378
|
+
return '0';
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Defense-in-depth: ensure Free-Text is the last verb in any F-shape contract.
|
|
383
|
+
* Per Canon Part 3 Layer 2 + D-10. Mutates the rendered structure in place.
|
|
384
|
+
*
|
|
385
|
+
* Phase 88.2-04 carve-out: closed-vocabulary sub-shapes (F.3 Rabbit-Hole Depth,
|
|
386
|
+
* F.4 Insight Extraction) DO NOT offer Free-Text per skills/ui-system/SKILL.md
|
|
387
|
+
* Section 2 (depth/extraction are closed axes). Renderers signal this by
|
|
388
|
+
* setting `contract.freeTextOffered === false`. Respecting that flag preserves
|
|
389
|
+
* the closed-vocab invariant; injecting Free-Text would silently break the
|
|
390
|
+
* Wave-1 contract and the renderer's own 7-assertion test suite.
|
|
391
|
+
*/
|
|
392
|
+
function ensureFreeTextLast(rendered) {
|
|
393
|
+
if (!rendered || !rendered.contract || !Array.isArray(rendered.contract.verbs)) return rendered;
|
|
394
|
+
// Closed-vocab carve-out: F.3, F.4 explicitly opt out of Free-Text.
|
|
395
|
+
if (rendered.contract.freeTextOffered === false) return rendered;
|
|
396
|
+
const verbs = rendered.contract.verbs;
|
|
397
|
+
if (verbs.length === 0 || verbs[verbs.length - 1] !== FREE_TEXT) {
|
|
398
|
+
const filtered = verbs.filter(v => v !== FREE_TEXT);
|
|
399
|
+
filtered.push(FREE_TEXT);
|
|
400
|
+
rendered.contract.verbs = filtered;
|
|
401
|
+
}
|
|
402
|
+
return rendered;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Prepend the Mode B Zone 1 prefix to a renderer's zones.header. The prefix is
|
|
407
|
+
* a separate line BEFORE the renderer's own header (Task 2.3 contract).
|
|
408
|
+
*/
|
|
409
|
+
function applyModeBPrefix(rendered) {
|
|
410
|
+
if (!rendered || !rendered.zones) return rendered;
|
|
411
|
+
const existing = typeof rendered.zones.header === 'string' ? rendered.zones.header : '';
|
|
412
|
+
rendered.zones.header = MODE_B_ZONE1_PREFIX + '\n' + existing;
|
|
413
|
+
return rendered;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
function tier0Refuse() {
|
|
417
|
+
return {
|
|
418
|
+
shape: 'error',
|
|
419
|
+
rendered: {
|
|
420
|
+
error: 'tier-0-refused',
|
|
421
|
+
detail: '/mos:setup brain or graph required for selectors',
|
|
422
|
+
},
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Phase 88.2-04: refuse Shape F.* presentation while the conversation operator
|
|
428
|
+
* is JUST_TALK. JUST_TALK is the prose-only operator (Canon Part 3 + render-v2
|
|
429
|
+
* step 6); a selector block would violate the compaction contract.
|
|
430
|
+
*/
|
|
431
|
+
function justTalkRefuse(requestedShape) {
|
|
432
|
+
return {
|
|
433
|
+
shape: 'error',
|
|
434
|
+
rendered: {
|
|
435
|
+
error: COMPACTION_VIOLATION_CODE,
|
|
436
|
+
detail: 'Shape F selector refused: operator JUST_TALK suppresses all selector output (render-v2 step 6 / Canon Part 3).',
|
|
437
|
+
operator: JUST_TALK,
|
|
438
|
+
requested: requestedShape,
|
|
439
|
+
},
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* Phase 121-02 D-04: emit selector_pick event into the unified
|
|
445
|
+
* ~/.mindrian/telemetry/v1.13/events-YYYY-WNN.jsonl stream (Plan 121-00
|
|
446
|
+
* writer chokepoint). Wrapped in try/catch -- telemetry NEVER fails Larry's
|
|
447
|
+
* turn. Canon Part 8: room slug is sha256-hashed; payload fields are scalar
|
|
448
|
+
* enums / numbers / booleans only. The emit is gated by validateEventPayload
|
|
449
|
+
* inside writer.emit() so adversarial fixtures (Cypher in verb_chosen, etc.)
|
|
450
|
+
* cannot leak. Non-blocking: any thrown error is swallowed so the pickShape
|
|
451
|
+
* dispatch resolution still returns to the caller.
|
|
452
|
+
*/
|
|
453
|
+
function emitSelectorPickUnified(roomDir, subShape, rendered, payloadIn) {
|
|
454
|
+
try {
|
|
455
|
+
let writer;
|
|
456
|
+
try {
|
|
457
|
+
writer = require('../core/telemetry/writer.cjs');
|
|
458
|
+
} catch (_e) {
|
|
459
|
+
return; // missing writer module -- soft skip, do not crash dispatch
|
|
460
|
+
}
|
|
461
|
+
if (!writer || typeof writer.emit !== 'function') return;
|
|
462
|
+
const contract = (rendered && rendered.contract) ? rendered.contract : {};
|
|
463
|
+
const verbs = Array.isArray(contract.verbs) ? contract.verbs : [];
|
|
464
|
+
const mode = (typeof contract.mode === 'string') ? contract.mode : 'A';
|
|
465
|
+
const recommended = contract.recommended;
|
|
466
|
+
const payload = (payloadIn && typeof payloadIn === 'object') ? payloadIn : {};
|
|
467
|
+
const rankerConfidence = (typeof payload.rankerConfidence === 'number')
|
|
468
|
+
? payload.rankerConfidence
|
|
469
|
+
: 0;
|
|
470
|
+
const recommendedRendered = (recommended !== null && recommended !== undefined)
|
|
471
|
+
? true
|
|
472
|
+
: Boolean(payload.recommendedRendered);
|
|
473
|
+
const verbChosen = (typeof payload.verb_chosen === 'string' && payload.verb_chosen.length > 0)
|
|
474
|
+
? payload.verb_chosen
|
|
475
|
+
: (typeof contract.recommended === 'string' ? contract.recommended : '');
|
|
476
|
+
const slugSource = (typeof roomDir === 'string' && roomDir.length > 0)
|
|
477
|
+
? String(roomDir).split('/').filter(Boolean).pop() || roomDir
|
|
478
|
+
: (String(process.cwd()).split('/').filter(Boolean).pop() || 'default-room');
|
|
479
|
+
writer.emit('selector_pick', {
|
|
480
|
+
sub_shape: String(subShape || '').slice(0, 64),
|
|
481
|
+
mode: String(mode || 'A').slice(0, 64),
|
|
482
|
+
ranker_confidence: rankerConfidence,
|
|
483
|
+
recommended_rendered: Boolean(recommendedRendered),
|
|
484
|
+
options_count: Number.isInteger(verbs.length) ? verbs.length : 0,
|
|
485
|
+
room_slug_sha256: _sha256(slugSource),
|
|
486
|
+
verb_chosen: String(verbChosen || '').slice(0, 64),
|
|
487
|
+
});
|
|
488
|
+
} catch (_e) {
|
|
489
|
+
// Canon Part 8 validation failure or any other emit failure: swallow.
|
|
490
|
+
// The dispatch resolution must still return cleanly per non-blocking
|
|
491
|
+
// contract (selector-pick-capture test 3 verifies this).
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* Phase 88.2-04: emit selector presentation telemetry. Wrapped in try/catch --
|
|
497
|
+
* telemetry NEVER fails Larry's turn. Canon Part 8: LOCAL ledger only, room
|
|
498
|
+
* slug sha256-hashed, never crosses any network boundary.
|
|
499
|
+
*/
|
|
500
|
+
function emitPresentationTelemetry(roomDir, subShape, rendered, operator) {
|
|
501
|
+
try {
|
|
502
|
+
const tel = safeRequire('./selector-telemetry.cjs');
|
|
503
|
+
if (!tel || typeof tel.recordPresentation !== 'function') return;
|
|
504
|
+
const contract = (rendered && rendered.contract) ? rendered.contract : {};
|
|
505
|
+
const verbs = Array.isArray(contract.verbs) ? contract.verbs : [];
|
|
506
|
+
const mode = (typeof contract.mode === 'string') ? contract.mode : null;
|
|
507
|
+
const recommendedPresent = (contract.recommended !== null && contract.recommended !== undefined);
|
|
508
|
+
const record = {
|
|
509
|
+
sub_shape: subShape,
|
|
510
|
+
mode: mode,
|
|
511
|
+
options_count: verbs.length,
|
|
512
|
+
recommended_present: recommendedPresent,
|
|
513
|
+
};
|
|
514
|
+
if (typeof operator === 'string' && operator.length > 0) {
|
|
515
|
+
record.operator = operator;
|
|
516
|
+
}
|
|
517
|
+
tel.recordPresentation(roomDir, record);
|
|
518
|
+
} catch (_e) {
|
|
519
|
+
// Graceful: never fail Larry's turn on a telemetry I/O hiccup.
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Phase 88.2-04 / Phase 209 Wave-1 E1: append the AskUserQuestion trailer to a
|
|
525
|
+
* Shape F.* rendered envelope. The trailer is now SELF-DECODING -- it carries a
|
|
526
|
+
* binding imperative that TELLS the model to fire AskUserQuestion now, instead
|
|
527
|
+
* of shipping a bare structural marker the model may render as an ASCII box.
|
|
528
|
+
*
|
|
529
|
+
* Root cause it kills (research 2026-07-02, RC-2 / verdicts 2, 5, 21): the old
|
|
530
|
+
* trailer was "a scalar string for introspection" with zero imperative language,
|
|
531
|
+
* so a gate that reached Larry carried a trigger but no instruction to act on it.
|
|
532
|
+
* Fix pattern reused verbatim from scripts/room-naming-selector.cjs:158-160
|
|
533
|
+
* ("INSTRUCTION FOR LARRY ... dispatch ... via AskUserQuestion"), Canon Part 7.
|
|
534
|
+
*
|
|
535
|
+
* Three surfaces:
|
|
536
|
+
* 1. rendered.askuserquestion_marker -- the BYTE-FROZEN scalar marker
|
|
537
|
+
* `[AskUserQuestion contract: shape=F.X verbs=N]`. Introspection contract;
|
|
538
|
+
* unchanged (tests: trailer_format, post-filing-selector, 150.5 shape fence,
|
|
539
|
+
* 148 frozen-contracts). The engine-arm concatenation reads this scalar
|
|
540
|
+
* positionally; its self-decoding upgrade (E2) is Phase 209 Wave 2.
|
|
541
|
+
* 2. rendered.askuserquestion_binding -- the scalar FIRE-IF-FORK imperative
|
|
542
|
+
* line (Phase 210-05 softened the unconditional BINDING wording to
|
|
543
|
+
* fire-if-genuine-fork; the field NAME is kept, consumers read it).
|
|
544
|
+
* 3. rendered.zones.footer -- marker line + binding line, appended (preceded by
|
|
545
|
+
* a blank line if the footer is non-empty). Every composeZones() consumer
|
|
546
|
+
* (the pickShape door + renderRoomChooserCard -- the incident's actual
|
|
547
|
+
* conversational room-pick fork) now sees a self-decoding imperative, not a
|
|
548
|
+
* bare marker.
|
|
549
|
+
*
|
|
550
|
+
* Marker (frozen): [AskUserQuestion contract: shape=F.X verbs=N]
|
|
551
|
+
* Imperative (E1 + 210-E): [FIRE-IF-FORK: ... call the AskUserQuestion tool ... (SEED-021)]
|
|
552
|
+
*/
|
|
553
|
+
function appendAskUserQuestionTrailer(rendered, subShape) {
|
|
554
|
+
if (!rendered) return rendered;
|
|
555
|
+
const contract = rendered.contract || {};
|
|
556
|
+
const verbs = Array.isArray(contract.verbs) ? contract.verbs : [];
|
|
557
|
+
const shapeStr = (typeof contract.shape === 'string' && contract.shape.length > 0)
|
|
558
|
+
? contract.shape : subShape;
|
|
559
|
+
const marker = '[AskUserQuestion contract: shape=' + shapeStr + ' verbs=' + verbs.length + ']';
|
|
560
|
+
|
|
561
|
+
// Surface 1: byte-frozen scalar marker (introspection; do NOT alter shape).
|
|
562
|
+
rendered.askuserquestion_marker = marker;
|
|
563
|
+
|
|
564
|
+
// Surface 2: the imperative -- makes the trigger self-decoding. Phase 210-05
|
|
565
|
+
// (item 210-E-2) softened the unconditional BINDING wording to a conditional
|
|
566
|
+
// fire-if-genuine-fork directive with the stable machine-greppable prefix
|
|
567
|
+
// [FIRE-IF-FORK: (same bracket-prefix shape as the literal it replaced). It
|
|
568
|
+
// still instructs firing the AskUserQuestion tool on a genuine unanswered
|
|
569
|
+
// fork, explicitly licenses NOT firing when the navigator already answered
|
|
570
|
+
// in plain text or the gate is unrelated to the current conversation, and
|
|
571
|
+
// keeps the SEED-021 no-reproduce render-hygiene clause verbatim (render
|
|
572
|
+
// hygiene is not over-reach). The field NAME stays askuserquestion_binding
|
|
573
|
+
// (consumers read it); only its contents changed.
|
|
574
|
+
const binding = '[FIRE-IF-FORK: if this fork is genuinely unanswered and relevant to the '
|
|
575
|
+
+ 'current conversation, call the AskUserQuestion tool in THIS response with the '
|
|
576
|
+
+ verbs.length + ' options above; if the navigator already answered in plain text or '
|
|
577
|
+
+ 'the gate is unrelated to the current conversation, do NOT fire it - acknowledge '
|
|
578
|
+
+ 'and proceed instead; do not reproduce this block as text (SEED-021)]';
|
|
579
|
+
rendered.askuserquestion_binding = binding;
|
|
580
|
+
|
|
581
|
+
// Surface 3: the rendered footer carries BOTH lines, so a card-capable
|
|
582
|
+
// consumer that renders zones reads the imperative next to the marker.
|
|
583
|
+
const trailer = marker + '\n' + binding;
|
|
584
|
+
if (!rendered.zones || typeof rendered.zones !== 'object') return rendered;
|
|
585
|
+
const existing = rendered.zones.footer;
|
|
586
|
+
if (existing === null || existing === undefined || existing === '') {
|
|
587
|
+
rendered.zones.footer = trailer;
|
|
588
|
+
} else {
|
|
589
|
+
rendered.zones.footer = String(existing) + '\n\n' + trailer;
|
|
590
|
+
}
|
|
591
|
+
return rendered;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Phase 121.5-10 Sub-plan K: overlay the locked Brain-suggestion content
|
|
596
|
+
* template onto a rendered F.* envelope per audit Section 5.2. Mutates the
|
|
597
|
+
* rendered object in place. Locked slot values per LOCKED Bundle A decisions:
|
|
598
|
+
*
|
|
599
|
+
* - Header chip: [■ BRAIN] (payload.header overrides)
|
|
600
|
+
* - Question line: "Choose next move:" (payload.questionLine overrides;
|
|
601
|
+
* rendered as the first line of zones.body BEFORE the
|
|
602
|
+
* two-line option rows)
|
|
603
|
+
* - Option rows: Two-line dense per Section 5.2.1; composed from
|
|
604
|
+
* payload.optionRows via composeBrainOptionRows().
|
|
605
|
+
* - Footer: Stat-strip line `▶ Brain · top-K of N ranked · cyan
|
|
606
|
+
* = informing` (payload.footer overrides). Prepended
|
|
607
|
+
* to existing footer with a blank-line separator.
|
|
608
|
+
*
|
|
609
|
+
* alias_map: when payload.alias_map is set, contract.alias_map surfaces it
|
|
610
|
+
* for downstream consumers (the selection-time canonical-verb collapse runs
|
|
611
|
+
* in the consumer via aliasToCanonical(verb_chosen, contract.alias_map) per
|
|
612
|
+
* LOCKED decision 1).
|
|
613
|
+
*/
|
|
614
|
+
function applyBrainSuggestionVariant(rendered, payloadObj) {
|
|
615
|
+
if (!rendered || typeof rendered !== 'object') return rendered;
|
|
616
|
+
if (!rendered.zones || typeof rendered.zones !== 'object') return rendered;
|
|
617
|
+
|
|
618
|
+
// Header: enforce the locked chip (allow caller override).
|
|
619
|
+
const header = (typeof payloadObj.header === 'string' && payloadObj.header.length > 0)
|
|
620
|
+
? payloadObj.header : BRAIN_CHIP;
|
|
621
|
+
rendered.zones.header = header;
|
|
622
|
+
|
|
623
|
+
// Body: compose two-line dense option rows + optional question line on top.
|
|
624
|
+
// If optionRows missing, keep the renderer's body (graceful: a Mode B / no-
|
|
625
|
+
// packet caller may legitimately have no rows to render).
|
|
626
|
+
const questionLine = (typeof payloadObj.questionLine === 'string' && payloadObj.questionLine.length > 0)
|
|
627
|
+
? payloadObj.questionLine : 'Choose next move:';
|
|
628
|
+
if (Array.isArray(payloadObj.optionRows) && payloadObj.optionRows.length > 0) {
|
|
629
|
+
const rowsBlock = composeBrainOptionRows(payloadObj.optionRows);
|
|
630
|
+
rendered.zones.body = questionLine + '\n\n' + rowsBlock;
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
// Footer: prepend the stat-strip caption ahead of any existing footer (the
|
|
634
|
+
// AskUserQuestion trailer is appended AFTER this overlay; see pickShape).
|
|
635
|
+
const footer = (typeof payloadObj.footer === 'string' && payloadObj.footer.length > 0)
|
|
636
|
+
? payloadObj.footer : null;
|
|
637
|
+
if (footer !== null) {
|
|
638
|
+
const existing = rendered.zones.footer;
|
|
639
|
+
if (existing === null || existing === undefined || existing === '') {
|
|
640
|
+
rendered.zones.footer = footer;
|
|
641
|
+
} else {
|
|
642
|
+
rendered.zones.footer = footer + '\n\n' + String(existing);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// alias_map: surface on contract so downstream selection handlers can
|
|
647
|
+
// call aliasToCanonical(verb_chosen, contract.alias_map) per LOCKED
|
|
648
|
+
// decision 1 (aliases render to user, canonical persists to graph).
|
|
649
|
+
if (payloadObj.alias_map && typeof payloadObj.alias_map === 'object') {
|
|
650
|
+
if (!rendered.contract || typeof rendered.contract !== 'object') {
|
|
651
|
+
rendered.contract = {};
|
|
652
|
+
}
|
|
653
|
+
rendered.contract.alias_map = payloadObj.alias_map;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
// Surface the locked chip as a scalar for introspection without zone parsing.
|
|
657
|
+
rendered.brain_suggestion_chip = BRAIN_CHIP;
|
|
658
|
+
|
|
659
|
+
return rendered;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
function dispatchShapeF(args) {
|
|
663
|
+
const { roomDir, tier, mode, payload } = args;
|
|
664
|
+
const payloadObj = (payload && typeof payload === 'object') ? payload : {};
|
|
665
|
+
const recommendedVerb = (mode === 'A' && typeof payloadObj.recommendedVerb === 'string')
|
|
666
|
+
? payloadObj.recommendedVerb : null;
|
|
667
|
+
|
|
668
|
+
// Read JTBD state -- F.6 path requires non-null jtbd.
|
|
669
|
+
const jtbdState = safeRequire('./jtbd-state.cjs');
|
|
670
|
+
let jtbdId = null;
|
|
671
|
+
if (jtbdState && typeof jtbdState.getCurrent === 'function' && typeof roomDir === 'string') {
|
|
672
|
+
try {
|
|
673
|
+
const current = jtbdState.getCurrent(roomDir);
|
|
674
|
+
jtbdId = (current && typeof current.jtbd === 'string') ? current.jtbd : null;
|
|
675
|
+
} catch (e) {
|
|
676
|
+
jtbdId = null;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
if (jtbdId !== null) {
|
|
681
|
+
const f6 = safeRequire('./shape-f6-renderer.cjs');
|
|
682
|
+
if (f6 && typeof f6.renderShapeF6 === 'function') {
|
|
683
|
+
const result = f6.renderShapeF6({ jtbd: jtbdId, tier, recommendedVerb });
|
|
684
|
+
if (result && !result.error && !result.fallthrough) {
|
|
685
|
+
return { shape: 'F.6', rendered: ensureFreeTextLast(result) };
|
|
686
|
+
}
|
|
687
|
+
// fall through to F.1 path on degenerate / unknown JTBD
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
// F.1 path -- prefer Phase 88.2 module if shipped, else fall back to Phase 101's inline canonical-10.
|
|
692
|
+
const f1 = safeRequire('./shape-f1-renderer.cjs') || safeRequire('./shape-f1-fallback.cjs');
|
|
693
|
+
if (f1 && typeof f1.renderShapeF1 === 'function') {
|
|
694
|
+
const result = f1.renderShapeF1({ tier, recommendedVerb });
|
|
695
|
+
return { shape: 'F.1', rendered: ensureFreeTextLast(result) };
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
// Neither F.1 nor F.6 module available -- return error.
|
|
699
|
+
return {
|
|
700
|
+
shape: 'error',
|
|
701
|
+
rendered: { error: 'no-f-renderer', detail: 'shape-f1 and shape-f6 modules both missing' },
|
|
702
|
+
};
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
// Phase 188-04: resolve the per-room roomDir the caller threads on the payload
|
|
706
|
+
// (either payload.roomDir or payload.roomState.roomDir). Read-only; returns null
|
|
707
|
+
// when absent so the state read degrades to null (Part 3 graceful fallback).
|
|
708
|
+
function _resolveRoomDirFromPayload(payloadObj) {
|
|
709
|
+
if (!payloadObj || typeof payloadObj !== 'object') return null;
|
|
710
|
+
if (typeof payloadObj.roomDir === 'string' && payloadObj.roomDir.length > 0) return payloadObj.roomDir;
|
|
711
|
+
const rs = payloadObj.roomState;
|
|
712
|
+
if (rs && typeof rs === 'object' && typeof rs.roomDir === 'string' && rs.roomDir.length > 0) return rs.roomDir;
|
|
713
|
+
return null;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// Phase 188-04 (SFS-08): read-only current DEPTH state for the F.3 branch. Never
|
|
717
|
+
// writes; a cold / absent / unavailable state yields null (degrade-never-block).
|
|
718
|
+
function readCurrentDepthState(payloadObj) {
|
|
719
|
+
const roomDir = _resolveRoomDirFromPayload(payloadObj);
|
|
720
|
+
if (roomDir === null) return null;
|
|
721
|
+
const depthState = safeRequire('./depth-state.cjs');
|
|
722
|
+
if (!depthState || typeof depthState.getCurrent !== 'function') return null;
|
|
723
|
+
try {
|
|
724
|
+
const cur = depthState.getCurrent(roomDir);
|
|
725
|
+
return (cur && typeof cur.depth === 'string') ? cur.depth : null;
|
|
726
|
+
} catch (_e) {
|
|
727
|
+
return null;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// Phase 188-04 (SFS-09): read-only current accumulated SCOPE state for the F.4
|
|
732
|
+
// branch. Never writes; a cold / absent / unavailable state yields [] (graceful).
|
|
733
|
+
function readCurrentScopeState(payloadObj) {
|
|
734
|
+
const roomDir = _resolveRoomDirFromPayload(payloadObj);
|
|
735
|
+
if (roomDir === null) return [];
|
|
736
|
+
const scopeState = safeRequire('./harvest-scope-state.cjs');
|
|
737
|
+
if (!scopeState || typeof scopeState.getScope !== 'function') return [];
|
|
738
|
+
try {
|
|
739
|
+
const scope = scopeState.getScope(roomDir);
|
|
740
|
+
return Array.isArray(scope) ? scope : [];
|
|
741
|
+
} catch (_e) {
|
|
742
|
+
return [];
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/**
|
|
747
|
+
* Phase 88.2-04: direct sub-shape dispatch for F.1..F.5. Each renderer is the
|
|
748
|
+
* Wave-1 module shipped in 88.2-01..03 (open-vocab F.1/F.2/F.5 + closed-vocab
|
|
749
|
+
* F.3/F.4). Mode B Zone-1 prefix and AskUserQuestion trailer are applied at
|
|
750
|
+
* the dispatcher entry point (pickShape) so this helper returns a canonical
|
|
751
|
+
* { shape, rendered } envelope without those concerns.
|
|
752
|
+
*/
|
|
753
|
+
function dispatchShapeFSubShape(requestedShape, args) {
|
|
754
|
+
const { tier, mode, payload } = args;
|
|
755
|
+
const payloadObj = (payload && typeof payload === 'object') ? payload : {};
|
|
756
|
+
const recommendedVerb = (mode === 'A' && typeof payloadObj.recommendedVerb === 'string')
|
|
757
|
+
? payloadObj.recommendedVerb : null;
|
|
758
|
+
const callerVerbs = Array.isArray(payloadObj.verbs) ? payloadObj.verbs : undefined;
|
|
759
|
+
const callerHeader = (typeof payloadObj.header === 'string' && payloadObj.header.length > 0)
|
|
760
|
+
? payloadObj.header : undefined;
|
|
761
|
+
|
|
762
|
+
let mod = null;
|
|
763
|
+
let fnName = null;
|
|
764
|
+
let inputArgs = null;
|
|
765
|
+
if (requestedShape === 'F.0') {
|
|
766
|
+
// Phase 88.2-05: F.0 Mini Decision Gate. Closed-vocab (freeTextOffered:false);
|
|
767
|
+
// dispatcher passes only header + body + parent_decision_id pass-through. The
|
|
768
|
+
// renderer ignores any caller-supplied verbs[] or recommendedVerb (closed-vocab
|
|
769
|
+
// is non-negotiable per CONTEXT.md spec body 2026-04-29).
|
|
770
|
+
mod = safeRequire('./shape-f0-renderer.cjs');
|
|
771
|
+
fnName = 'renderShapeF0';
|
|
772
|
+
inputArgs = {
|
|
773
|
+
tier: tier,
|
|
774
|
+
header: callerHeader,
|
|
775
|
+
body: (typeof payloadObj.body === 'string' && payloadObj.body.length > 0) ? payloadObj.body : undefined,
|
|
776
|
+
parent_decision_id: (typeof payloadObj.parent_decision_id === 'string' && payloadObj.parent_decision_id.length > 0)
|
|
777
|
+
? payloadObj.parent_decision_id : undefined,
|
|
778
|
+
};
|
|
779
|
+
} else if (requestedShape === 'F.1') {
|
|
780
|
+
mod = safeRequire('./shape-f1-renderer.cjs') || safeRequire('./shape-f1-fallback.cjs');
|
|
781
|
+
fnName = 'renderShapeF1';
|
|
782
|
+
inputArgs = { tier: tier, recommendedVerb: recommendedVerb, verbs: callerVerbs, header: callerHeader };
|
|
783
|
+
} else if (requestedShape === 'F.2') {
|
|
784
|
+
mod = safeRequire('./shape-f2-renderer.cjs');
|
|
785
|
+
fnName = 'renderShapeF2';
|
|
786
|
+
inputArgs = { tier: tier, recommendedVerb: recommendedVerb, verbs: callerVerbs, header: callerHeader };
|
|
787
|
+
} else if (requestedShape === 'F.3') {
|
|
788
|
+
// Phase 188-04 (SFS-08): thread the current per-room DEPTH state into the F.3
|
|
789
|
+
// branch so the render can reflect it. The state is read-only here (the write
|
|
790
|
+
// half is the f3-depth-consumer over the caller-owned room). The renderer stays
|
|
791
|
+
// CLOSED-VOCAB: it ignores currentDepth for its option set (no marker, no
|
|
792
|
+
// Free-Text); currentDepth rides alongside {header} as informational context only.
|
|
793
|
+
mod = safeRequire('./shape-f3-renderer.cjs');
|
|
794
|
+
fnName = 'renderShapeF3';
|
|
795
|
+
inputArgs = { header: callerHeader, currentDepth: readCurrentDepthState(payloadObj) };
|
|
796
|
+
} else if (requestedShape === 'F.4') {
|
|
797
|
+
// Phase 188-04 (SFS-09): thread the current per-room accumulated SCOPE state into
|
|
798
|
+
// the F.4 branch (read-only; the write half is the f4-scope-consumer). Closed-vocab
|
|
799
|
+
// is preserved: the renderer ignores currentScope for its ladder (no marker, no
|
|
800
|
+
// Free-Text); currentScope rides alongside {header} as informational context only.
|
|
801
|
+
mod = safeRequire('./shape-f4-renderer.cjs');
|
|
802
|
+
fnName = 'renderShapeF4';
|
|
803
|
+
inputArgs = { header: callerHeader, currentScope: readCurrentScopeState(payloadObj) };
|
|
804
|
+
} else if (requestedShape === 'F.5') {
|
|
805
|
+
mod = safeRequire('./shape-f5-renderer.cjs');
|
|
806
|
+
fnName = 'renderShapeF5';
|
|
807
|
+
inputArgs = { tier: tier, recommendedVerb: recommendedVerb, verbs: callerVerbs, header: callerHeader };
|
|
808
|
+
} else if (requestedShape === 'F.6') {
|
|
809
|
+
// Phase 88.2-06: F.6 Plan Review Round. Closed-vocab parent shape (3 verbs
|
|
810
|
+
// Confirm / Reject / Discuss, freeTextOffered:false; reject reason is captured
|
|
811
|
+
// via a downstream prompt and lands as a property on the REVIEWED edge).
|
|
812
|
+
// Routes to the collision-safe path lib/hmi/shape-f6-plan-review-renderer.cjs;
|
|
813
|
+
// the umbrella 'F' branch above continues to route to Phase 101-01's
|
|
814
|
+
// lib/hmi/shape-f6-renderer.cjs via JTBD logic (R1 invariant preserved).
|
|
815
|
+
mod = safeRequire('./shape-f6-plan-review-renderer.cjs');
|
|
816
|
+
fnName = 'renderShapeF6PlanReview';
|
|
817
|
+
inputArgs = {
|
|
818
|
+
tier: tier,
|
|
819
|
+
header: callerHeader,
|
|
820
|
+
position: (Number.isInteger(payloadObj.position) ? payloadObj.position : undefined),
|
|
821
|
+
totalQuestions: (Number.isInteger(payloadObj.totalQuestions) ? payloadObj.totalQuestions : undefined),
|
|
822
|
+
claim: (typeof payloadObj.claim === 'string' && payloadObj.claim.length > 0)
|
|
823
|
+
? payloadObj.claim : undefined,
|
|
824
|
+
counts: (payloadObj.counts && typeof payloadObj.counts === 'object') ? payloadObj.counts : undefined,
|
|
825
|
+
round_id: (typeof payloadObj.round_id === 'string' && payloadObj.round_id.length > 0)
|
|
826
|
+
? payloadObj.round_id : undefined,
|
|
827
|
+
personaContext: (typeof payloadObj.personaContext === 'string' && payloadObj.personaContext.length > 0)
|
|
828
|
+
? payloadObj.personaContext : undefined,
|
|
829
|
+
};
|
|
830
|
+
} else if (requestedShape === 'F.7') {
|
|
831
|
+
// Phase 188-01 (SFS-06): the "Breakthrough Surface" collapse. Bare F.7 is the
|
|
832
|
+
// CANONICAL DIAL now, NOT the breakthrough renderer. Per canon D-10 the canon
|
|
833
|
+
// knows EXACTLY ten shapes; "Breakthrough" is no longer one of them -- it
|
|
834
|
+
// re-homes to an F.1 next-move (a MOVE, not a shape). The retired
|
|
835
|
+
// shape-f7-breakthrough-renderer.cjs module stays LIVE as the definitional
|
|
836
|
+
// home of the 5-verb set + the D-20 provenance HARD FLOOR, but it is no
|
|
837
|
+
// longer reachable through the bare-F.7 single door (SEED-020). This branch
|
|
838
|
+
// mirrors the F.7-dial branch below: same safeRequire of dial-selector.cjs,
|
|
839
|
+
// same renderDialShape envelope. (Historic route, retired here:
|
|
840
|
+
// shape-f7-breakthrough-renderer.cjs via requestedShape:'F.7'.)
|
|
841
|
+
mod = safeRequire('./dial-selector.cjs');
|
|
842
|
+
fnName = 'renderDialShape';
|
|
843
|
+
inputArgs = {
|
|
844
|
+
investment_level: (typeof payloadObj.investment_level === 'number') ? payloadObj.investment_level : 0.5,
|
|
845
|
+
posture: (typeof payloadObj.posture === 'string') ? payloadObj.posture : 'hold',
|
|
846
|
+
tty: payloadObj.tty === true,
|
|
847
|
+
};
|
|
848
|
+
} else if (requestedShape === 'F.7-dial') {
|
|
849
|
+
// Phase 177-02 (BCH-10 / BCH-16): the four-arrow register HUD branch.
|
|
850
|
+
// Mirrors the F.7 branch above (safeRequire of a renderer module, the
|
|
851
|
+
// inputArgs envelope, the { shape, rendered } return). The dial renderer
|
|
852
|
+
// is lib/hmi/dial-selector.cjs::renderDialHud -- a PURE module (no I/O, no
|
|
853
|
+
// Brain wire, Part 8 LOCAL). The HUD MOVES the two existing axes
|
|
854
|
+
// (investment_level up/down, posture left/right over the frozen 3); it
|
|
855
|
+
// mints NO reach and adds NO shape vocabulary outside this pickShape
|
|
856
|
+
// branch (Part 3 render contract frozen elsewhere). On a missing module
|
|
857
|
+
// this falls through to the no-subshape-renderer error envelope below.
|
|
858
|
+
mod = safeRequire('./dial-selector.cjs');
|
|
859
|
+
fnName = 'renderDialShape';
|
|
860
|
+
inputArgs = {
|
|
861
|
+
investment_level: (typeof payloadObj.investment_level === 'number') ? payloadObj.investment_level : 0.5,
|
|
862
|
+
posture: (typeof payloadObj.posture === 'string') ? payloadObj.posture : 'hold',
|
|
863
|
+
tty: payloadObj.tty === true,
|
|
864
|
+
};
|
|
865
|
+
} else if (requestedShape === 'F.8') {
|
|
866
|
+
// Phase 188-06 (SFS-01): the multiSelect Action Set. Mirrors the F.5 branch --
|
|
867
|
+
// a safeRequire of the renderer + the inputArgs envelope. The renderer emits a
|
|
868
|
+
// toggle basket (MAX_TOGGLE_N paged, NO single recommended marker; a candidate
|
|
869
|
+
// at Brain confidence >=0.70 renders PRE-CHECKED but never auto-applies). The
|
|
870
|
+
// candidate set arrives on payloadObj.options (falling back to payloadObj.verbs);
|
|
871
|
+
// each option is a string OR { label, confidence } so the >=0.70 pre-check map
|
|
872
|
+
// threads through. This is the ONLY dispatcher edit in this plan.
|
|
873
|
+
mod = safeRequire('./shape-f8-renderer.cjs');
|
|
874
|
+
fnName = 'renderShapeF8';
|
|
875
|
+
inputArgs = {
|
|
876
|
+
tier: tier,
|
|
877
|
+
options: Array.isArray(payloadObj.options)
|
|
878
|
+
? payloadObj.options
|
|
879
|
+
: (Array.isArray(payloadObj.verbs) ? payloadObj.verbs : []),
|
|
880
|
+
header: callerHeader,
|
|
881
|
+
personaContext: (typeof payloadObj.personaContext === 'string' && payloadObj.personaContext.length > 0)
|
|
882
|
+
? payloadObj.personaContext : undefined,
|
|
883
|
+
};
|
|
884
|
+
} else if (requestedShape === 'F.9') {
|
|
885
|
+
// Phase 188-07 (SFS-04): the ordered Cascade / Reconcile Gate. Mirrors the F.5
|
|
886
|
+
// branch -- a safeRequire of the renderer + the inputArgs envelope. The renderer
|
|
887
|
+
// emits ONE question per cascade item in ARRAY ORDER (order IS meaning), each
|
|
888
|
+
// carrying the closed ordered-outcome set APPROVE/REJECT/DEFER (no marker, no
|
|
889
|
+
// Free-Text; paged past the ceiling, never a live widget -- the TTY wall). The
|
|
890
|
+
// ordered cascade arrives on payloadObj.items; the header rides callerHeader.
|
|
891
|
+
// This is the F.9 registration branch (F.8 landed in 188-06, untouched).
|
|
892
|
+
mod = safeRequire('./shape-f9-renderer.cjs');
|
|
893
|
+
fnName = 'renderShapeF9';
|
|
894
|
+
inputArgs = {
|
|
895
|
+
tier: tier,
|
|
896
|
+
items: Array.isArray(payloadObj.items) ? payloadObj.items : [],
|
|
897
|
+
header: callerHeader,
|
|
898
|
+
personaContext: (typeof payloadObj.personaContext === 'string' && payloadObj.personaContext.length > 0)
|
|
899
|
+
? payloadObj.personaContext : undefined,
|
|
900
|
+
};
|
|
901
|
+
}
|
|
902
|
+
|
|
903
|
+
if (!mod || typeof mod[fnName] !== 'function') {
|
|
904
|
+
return {
|
|
905
|
+
shape: 'error',
|
|
906
|
+
rendered: {
|
|
907
|
+
error: 'no-subshape-renderer',
|
|
908
|
+
detail: requestedShape + ' renderer module missing',
|
|
909
|
+
},
|
|
910
|
+
};
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
let result;
|
|
914
|
+
try {
|
|
915
|
+
result = mod[fnName](inputArgs);
|
|
916
|
+
} catch (e) {
|
|
917
|
+
return {
|
|
918
|
+
shape: 'error',
|
|
919
|
+
rendered: {
|
|
920
|
+
error: 'subshape-render-failed',
|
|
921
|
+
detail: requestedShape + ': ' + (e && e.message ? String(e.message).slice(0, 80) : 'unknown'),
|
|
922
|
+
},
|
|
923
|
+
};
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
if (!result || result.error) {
|
|
927
|
+
return {
|
|
928
|
+
shape: 'error',
|
|
929
|
+
rendered: result || { error: 'subshape-empty', detail: requestedShape },
|
|
930
|
+
};
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
return { shape: requestedShape, rendered: ensureFreeTextLast(result) };
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
function dispatchShapeG(args) {
|
|
937
|
+
const { tier, mode, payload } = args;
|
|
938
|
+
const g = safeRequire('./shape-g-renderer.cjs');
|
|
939
|
+
if (!g || typeof g.renderShapeG !== 'function') {
|
|
940
|
+
return { shape: 'error', rendered: { error: 'no-g-renderer' } };
|
|
941
|
+
}
|
|
942
|
+
const inputPayload = Object.assign({}, (payload && typeof payload === 'object') ? payload : {}, {
|
|
943
|
+
tier: tier,
|
|
944
|
+
mode: mode,
|
|
945
|
+
});
|
|
946
|
+
const result = g.renderShapeG(inputPayload);
|
|
947
|
+
if (result && result.fallthrough === true) {
|
|
948
|
+
return { shape: 'E', passthrough: true, fallthroughFrom: 'G', rendered: result };
|
|
949
|
+
}
|
|
950
|
+
return { shape: 'G', rendered: result };
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
function dispatchShapeH(args) {
|
|
954
|
+
const { tier, mode, payload } = args;
|
|
955
|
+
const h = safeRequire('./shape-h-renderer.cjs');
|
|
956
|
+
if (!h || typeof h.renderShapeH !== 'function') {
|
|
957
|
+
return { shape: 'error', rendered: { error: 'no-h-renderer' } };
|
|
958
|
+
}
|
|
959
|
+
const inputPayload = Object.assign({}, (payload && typeof payload === 'object') ? payload : {}, {
|
|
960
|
+
tier: tier,
|
|
961
|
+
mode: mode,
|
|
962
|
+
});
|
|
963
|
+
const result = h.renderShapeH(inputPayload);
|
|
964
|
+
if (result && result.error) {
|
|
965
|
+
return { shape: 'error', rendered: result };
|
|
966
|
+
}
|
|
967
|
+
return { shape: 'H', rendered: result };
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/**
|
|
971
|
+
* Single entry point.
|
|
972
|
+
*/
|
|
973
|
+
function pickShape(args) {
|
|
974
|
+
try {
|
|
975
|
+
const opts = (args && typeof args === 'object') ? args : {};
|
|
976
|
+
const requestedShape = typeof opts.requestedShape === 'string' ? opts.requestedShape : '';
|
|
977
|
+
const operator = (typeof opts.operator === 'string' && opts.operator.length > 0) ? opts.operator : null;
|
|
978
|
+
const tier = resolveTier(opts.tier);
|
|
979
|
+
const mode = modeFromTier(tier);
|
|
980
|
+
|
|
981
|
+
// Tier 0 refuse path (Canon Part 3 Rule 2). Applies BEFORE operator gates
|
|
982
|
+
// because tier 0 cannot host any selector regardless of operator.
|
|
983
|
+
if (tier === 0) {
|
|
984
|
+
return tier0Refuse();
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
// Phase 88.2-04: JUST_TALK operator refuses ALL Shape F.* surfaces. This
|
|
988
|
+
// mirrors render-v2 step 6 (lib/render/render-v2.cjs#244) which suppresses
|
|
989
|
+
// entire output when operator === JUST_TALK. The dispatcher refuses earlier
|
|
990
|
+
// (before invoking renderers) to avoid wasted CPU on a payload that will be
|
|
991
|
+
// dropped downstream.
|
|
992
|
+
const isShapeF = (requestedShape === F_UMBRELLA || F_SUBSHAPES.indexOf(requestedShape) !== -1);
|
|
993
|
+
if (isShapeF && operator === JUST_TALK) {
|
|
994
|
+
return justTalkRefuse(requestedShape);
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
let result;
|
|
998
|
+
if (requestedShape === F_UMBRELLA) {
|
|
999
|
+
result = dispatchShapeF({ roomDir: opts.roomDir, tier, mode, payload: opts.payload });
|
|
1000
|
+
} else if (F_SUBSHAPES.indexOf(requestedShape) !== -1) {
|
|
1001
|
+
result = dispatchShapeFSubShape(requestedShape, { tier, mode, payload: opts.payload });
|
|
1002
|
+
} else if (requestedShape === 'G') {
|
|
1003
|
+
result = dispatchShapeG({ tier, mode, payload: opts.payload });
|
|
1004
|
+
} else if (requestedShape === 'H') {
|
|
1005
|
+
result = dispatchShapeH({ tier, mode, payload: opts.payload });
|
|
1006
|
+
} else if (
|
|
1007
|
+
requestedShape === 'A' || requestedShape === 'B' ||
|
|
1008
|
+
requestedShape === 'C' || requestedShape === 'D' ||
|
|
1009
|
+
requestedShape === 'E'
|
|
1010
|
+
) {
|
|
1011
|
+
return { shape: requestedShape, passthrough: true };
|
|
1012
|
+
} else {
|
|
1013
|
+
return {
|
|
1014
|
+
shape: 'error',
|
|
1015
|
+
rendered: { error: 'unknown-shape', detail: 'requestedShape: ' + JSON.stringify(requestedShape) },
|
|
1016
|
+
};
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
// Mode B Zone 1 prefix (defense-in-depth at dispatcher).
|
|
1020
|
+
if (mode === 'B' && result && result.rendered && result.shape !== 'error') {
|
|
1021
|
+
applyModeBPrefix(result.rendered);
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
// Phase 121.5-10 Sub-plan K: Brain-suggestion variant overlay. Applied
|
|
1025
|
+
// BEFORE the AskUserQuestion trailer so the trailer lands AFTER the
|
|
1026
|
+
// stat-strip footer per audit Section 5.2. Only fires when payload
|
|
1027
|
+
// carries brain_suggestion_variant === true; otherwise no-op (every
|
|
1028
|
+
// existing F.* consumer is preserved byte-for-byte).
|
|
1029
|
+
if (result && result.shape !== 'error' && !result.passthrough) {
|
|
1030
|
+
const payloadObj = (opts.payload && typeof opts.payload === 'object') ? opts.payload : {};
|
|
1031
|
+
if (payloadObj.brain_suggestion_variant === true && result.rendered) {
|
|
1032
|
+
applyBrainSuggestionVariant(result.rendered, payloadObj);
|
|
1033
|
+
}
|
|
1034
|
+
// Phase 148-03 (IRW-04, D-03): archetype routing. When the caller names the
|
|
1035
|
+
// reach (reach_id / sub_mode / standing-option key) via payload.reachKey,
|
|
1036
|
+
// resolve its toggleable-component archetype from reach-component-map.json
|
|
1037
|
+
// and fold the AskUserQuestion-mode hints onto the contract. The default
|
|
1038
|
+
// 'select' is applied even when reachKey is omitted so every F.* contract
|
|
1039
|
+
// carries an explicit archetype. SEED-020: this is the only construction site.
|
|
1040
|
+
if (result.rendered) {
|
|
1041
|
+
const reachKey = (typeof payloadObj.reachKey === 'string' && payloadObj.reachKey.length > 0)
|
|
1042
|
+
? payloadObj.reachKey : null;
|
|
1043
|
+
applyArchetypeRouting(result.rendered, reachKey);
|
|
1044
|
+
}
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
// Phase 88.2-04: AskUserQuestion structural-marker trailer + telemetry.
|
|
1048
|
+
// Both apply ONLY to successful Shape F.* presentations (umbrella resolves
|
|
1049
|
+
// to F.1/F.6; sub-shapes resolve to themselves). Error paths and G/H/A-E
|
|
1050
|
+
// are NOT touched -- they preserve the existing 9-test contract byte-for-byte.
|
|
1051
|
+
//
|
|
1052
|
+
// Telemetry is opt-in via `payload.emitTelemetry === true`. This protects
|
|
1053
|
+
// Canon Part 8 fs_scope (lib/render/render-v2.cjs invokes the dispatcher
|
|
1054
|
+
// for Zone 4 enrichment -- that call is NOT a presentation event and must
|
|
1055
|
+
// produce zero FS side-effects). The actual presentation surface (where a
|
|
1056
|
+
// human navigator answers an AskUserQuestion prompt) sets the flag to true.
|
|
1057
|
+
// The trailer is unconditionally attached: it is part of the rendered
|
|
1058
|
+
// surface, not a side-effect.
|
|
1059
|
+
if (result && result.shape !== 'error' && !result.passthrough) {
|
|
1060
|
+
const isFShape = (typeof result.shape === 'string' && result.shape.indexOf('F') === 0);
|
|
1061
|
+
if (isFShape) {
|
|
1062
|
+
appendAskUserQuestionTrailer(result.rendered, result.shape);
|
|
1063
|
+
const payloadObj = (opts.payload && typeof opts.payload === 'object') ? opts.payload : {};
|
|
1064
|
+
if (payloadObj.emitTelemetry === true) {
|
|
1065
|
+
emitPresentationTelemetry(opts.roomDir, result.shape, result.rendered, operator);
|
|
1066
|
+
// Phase 121-02 D-04: capture selector pick (88.2/125 ranker) into
|
|
1067
|
+
// the unified ~/.mindrian/telemetry/v1.13/events-YYYY-WNN.jsonl
|
|
1068
|
+
// stream (Plan 121-00 writer chokepoint). Non-blocking; never
|
|
1069
|
+
// throws back to caller.
|
|
1070
|
+
emitSelectorPickUnified(opts.roomDir, result.shape, result.rendered, payloadObj);
|
|
1071
|
+
// Phase 209-06 (H3): the PRIMARY side-channel producer. No
|
|
1072
|
+
// session_id reaches this seam (this call site never had one),
|
|
1073
|
+
// so the record files under NO_SESSION_KEY; the consumer unions
|
|
1074
|
+
// that bucket into every session-scoped read (documented in
|
|
1075
|
+
// lib/core/card-fire-sidechannel.cjs). Gated on the SAME
|
|
1076
|
+
// emitTelemetry flag as the two calls above (Canon Part 8
|
|
1077
|
+
// fs_scope: lib/render/render-v2.cjs's Zone-4 dispatcher call
|
|
1078
|
+
// must stay zero-FS). Lazy-required inside try/catch; a writer
|
|
1079
|
+
// fault never affects the presentation result.
|
|
1080
|
+
// Hoisted above the try below so the Phase 227-04 additive sibling
|
|
1081
|
+
// block can read the SAME computed value instead of recomputing
|
|
1082
|
+
// the header+body join a second time (D-03 site 1).
|
|
1083
|
+
let gateSubjectText = '';
|
|
1084
|
+
try {
|
|
1085
|
+
const sidechannel = require('../core/card-fire-sidechannel.cjs');
|
|
1086
|
+
// 2026-07-05 relevance-gate fix: capture the gate's OWN rendered
|
|
1087
|
+
// content (pre-trailer header+body, independent of what the
|
|
1088
|
+
// model later says) as the subject text signal.
|
|
1089
|
+
gateSubjectText = [
|
|
1090
|
+
result.rendered && result.rendered.zones && result.rendered.zones.header,
|
|
1091
|
+
result.rendered && result.rendered.zones && result.rendered.zones.body,
|
|
1092
|
+
].filter(function (s) { return typeof s === 'string' && s.length > 0; }).join(' ');
|
|
1093
|
+
sidechannel.recordReachedGate({
|
|
1094
|
+
surface: 'lib/hmi/selector-dispatcher.cjs',
|
|
1095
|
+
shape: result.shape,
|
|
1096
|
+
subjectText: gateSubjectText,
|
|
1097
|
+
});
|
|
1098
|
+
} catch (_e) {
|
|
1099
|
+
/* never let a side-channel fault affect the presentation result */
|
|
1100
|
+
}
|
|
1101
|
+
// Phase 227-04 (D-03 site 1, T-227-10/T-227-11): additive sibling to
|
|
1102
|
+
// the card-fire-sidechannel call above. This records specifically
|
|
1103
|
+
// the F.1 mode-select lane-picker card fire (skills/conversation-
|
|
1104
|
+
// mode/SKILL.md's "Are we just chatting, brainstorming, or building
|
|
1105
|
+
// something?" card), NOT every F.1 gate in the app -- F.1 is also
|
|
1106
|
+
// used by other Decision Gates (for example trending-to-absurd's
|
|
1107
|
+
// own trend-selection stage also renders as F.1). The subject-text
|
|
1108
|
+
// scoping check below (both "brainstorming" and "building
|
|
1109
|
+
// something" present, case-insensitive) is what narrows the
|
|
1110
|
+
// recording to the mode-select card specifically. Only 'lane:
|
|
1111
|
+
// card-fired' is knowable here (the trailer fires at render time,
|
|
1112
|
+
// before the navigator answers); sessionId is not in scope at this
|
|
1113
|
+
// call site either, matching the existing card-fire-sidechannel
|
|
1114
|
+
// producer's own NO_SESSION_KEY gap at this exact location --
|
|
1115
|
+
// mode-select-sidechannel.cjs's union-read already accounts for
|
|
1116
|
+
// this. Wrapped in its own try/catch (isolated from the block
|
|
1117
|
+
// above) so a fault here never affects the existing block or the
|
|
1118
|
+
// presentation result.
|
|
1119
|
+
try {
|
|
1120
|
+
if (result.shape === 'F.1') {
|
|
1121
|
+
const subjectLower = gateSubjectText.toLowerCase();
|
|
1122
|
+
if (
|
|
1123
|
+
subjectLower.indexOf('brainstorming') !== -1 &&
|
|
1124
|
+
subjectLower.indexOf('building something') !== -1
|
|
1125
|
+
) {
|
|
1126
|
+
require('../core/mode-select-sidechannel.cjs').recordLanePick({
|
|
1127
|
+
lane: 'card-fired',
|
|
1128
|
+
});
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
} catch (_e) {
|
|
1132
|
+
/* never let a side-channel fault affect the presentation result */
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
return result;
|
|
1139
|
+
} catch (e) {
|
|
1140
|
+
return {
|
|
1141
|
+
shape: 'error',
|
|
1142
|
+
rendered: {
|
|
1143
|
+
error: 'dispatch-failed',
|
|
1144
|
+
detail: (e && e.message ? String(e.message).slice(0, 80) : 'unknown'),
|
|
1145
|
+
},
|
|
1146
|
+
};
|
|
1147
|
+
}
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
/**
|
|
1151
|
+
* Phase 88.2-04: re-export of selector-telemetry.recordResponse so consumers
|
|
1152
|
+
* wiring AskUserQuestion answers back to the local ledger have a single
|
|
1153
|
+
* dispatcher-level entry point. Wrapped in try/catch -- never fails Larry's turn.
|
|
1154
|
+
*/
|
|
1155
|
+
function recordSelectorResponse(roomDir, record) {
|
|
1156
|
+
try {
|
|
1157
|
+
const tel = safeRequire('./selector-telemetry.cjs');
|
|
1158
|
+
if (!tel || typeof tel.recordResponse !== 'function') return;
|
|
1159
|
+
tel.recordResponse(roomDir, record);
|
|
1160
|
+
} catch (_e) {
|
|
1161
|
+
// Graceful.
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
module.exports = {
|
|
1166
|
+
pickShape: pickShape,
|
|
1167
|
+
recordSelectorResponse: recordSelectorResponse,
|
|
1168
|
+
// Phase 150.5-02 (DIAL-ATOM-01): the SEED-020 single construction door,
|
|
1169
|
+
// exported top-level so the engine render caller (intent-classifier.cjs
|
|
1170
|
+
// renderEngineDecisionWithDial) threads the dial contract through the
|
|
1171
|
+
// dispatcher instead of composing the trailer anywhere else.
|
|
1172
|
+
appendAskUserQuestionTrailer: appendAskUserQuestionTrailer,
|
|
1173
|
+
// Phase 121.5-10 Sub-plan K: alias-to-canonical helper for graph-edge
|
|
1174
|
+
// persistence per LOCKED decision 1 (aliases render to user; canonical
|
|
1175
|
+
// verbs persist via navigation.cjs).
|
|
1176
|
+
aliasToCanonical: aliasToCanonical,
|
|
1177
|
+
// Phase 148-03 (IRW-04, D-03): the reach -> toggleable-component-archetype
|
|
1178
|
+
// resolver. Reads lib/hmi/reach-component-map.json (registry-is-the-table).
|
|
1179
|
+
resolveArchetype: resolveArchetype,
|
|
1180
|
+
_internal: {
|
|
1181
|
+
resolveArchetype: resolveArchetype,
|
|
1182
|
+
archetypeToContractHints: archetypeToContractHints,
|
|
1183
|
+
applyArchetypeRouting: applyArchetypeRouting,
|
|
1184
|
+
resolveTier: resolveTier,
|
|
1185
|
+
modeFromTier: modeFromTier,
|
|
1186
|
+
ensureFreeTextLast: ensureFreeTextLast,
|
|
1187
|
+
applyModeBPrefix: applyModeBPrefix,
|
|
1188
|
+
appendAskUserQuestionTrailer: appendAskUserQuestionTrailer,
|
|
1189
|
+
emitPresentationTelemetry: emitPresentationTelemetry,
|
|
1190
|
+
justTalkRefuse: justTalkRefuse,
|
|
1191
|
+
applyBrainSuggestionVariant: applyBrainSuggestionVariant,
|
|
1192
|
+
composeBrainOptionRows: composeBrainOptionRows,
|
|
1193
|
+
MODE_B_ZONE1_PREFIX: MODE_B_ZONE1_PREFIX,
|
|
1194
|
+
F_SUBSHAPES: F_SUBSHAPES.slice(),
|
|
1195
|
+
JUST_TALK: JUST_TALK,
|
|
1196
|
+
COMPACTION_VIOLATION_CODE: COMPACTION_VIOLATION_CODE,
|
|
1197
|
+
BRAIN_CHIP: BRAIN_CHIP,
|
|
1198
|
+
BRAIN_GLYPH_RECOMMENDED: BRAIN_GLYPH_RECOMMENDED,
|
|
1199
|
+
BRAIN_GLYPH_ALTERNATIVE: BRAIN_GLYPH_ALTERNATIVE,
|
|
1200
|
+
},
|
|
1201
|
+
};
|