@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,1000 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
4
|
+
*
|
|
5
|
+
* Phase 143-01 -- insight-sensors: the 7-row trigger map as code.
|
|
6
|
+
*
|
|
7
|
+
* This module is the net-new spine of the Phase 143 sensor layer. It exposes a
|
|
8
|
+
* single pure dispatch chokepoint -- dispatchSensors(turn, tuple, ctx) -- that
|
|
9
|
+
* runs a SENSOR_REGISTRY of sensor functions in canonical order and collects the
|
|
10
|
+
* non-null candidate reaches they produce.
|
|
11
|
+
*
|
|
12
|
+
* Each sensor has the signature:
|
|
13
|
+
* sensorFn(turn, tuple, ctx) -> candidate-reach | null
|
|
14
|
+
* where:
|
|
15
|
+
* turn -- the conversational/state turn signal bag (e.g. { signals: [...] })
|
|
16
|
+
* tuple -- the /mos:diagnose classification { problem_type, complexity, stage }
|
|
17
|
+
* ctx -- LOCAL context (roomDir, ledger handles, graph state) -- never network
|
|
18
|
+
*
|
|
19
|
+
* HARD FENCES (Canon + downstream-phase boundaries):
|
|
20
|
+
* - Phase 144 fence: dispatchSensors NEVER mutates trace.routing_source and
|
|
21
|
+
* NEVER calls decide(). The sensors PRODUCE candidate reaches surfaced at the
|
|
22
|
+
* Decision Gate (Canon Part 3); decide() (lib/core/navigation-engine.cjs)
|
|
23
|
+
* CONSUMES them later (Phase 144). No 'engine' routing flip lives here.
|
|
24
|
+
* - Canon Part 8: the Brain-touching sensors (SENS-01) carry ONLY generic
|
|
25
|
+
* handles (framework names, problem-type enums, phase ids). No artifact bytes,
|
|
26
|
+
* meeting content, or user identifiers ever reach a Brain/web companion.
|
|
27
|
+
* The Part-8 5-tripwire sweep (tests/test-sensors-part8-sweep.cjs) gates this.
|
|
28
|
+
* - Phase 150.5 seam: dispatchSensors normalizes its input ONCE at entry via
|
|
29
|
+
* normalizeTurn (text aliased from userText; signals merged additively with
|
|
30
|
+
* deriveTurnSignals) on a COPY -- the caller's turn object is never mutated.
|
|
31
|
+
* The two derived signal fuels are the shipped LOCAL side-channels ONLY:
|
|
32
|
+
* <roomDir>/.mindrian/last-cascade.json -> 'artifact_filed' and the
|
|
33
|
+
* <roomDir>/.mindrian/auto-explore-*.json fire markers -> 'first_material'.
|
|
34
|
+
*
|
|
35
|
+
* Pure / sync / LOCAL-first. node built-ins + project libs only. No new deps.
|
|
36
|
+
* House rule: hyphens only, no em-dashes.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
const fs = require('node:fs');
|
|
40
|
+
const path = require('node:path');
|
|
41
|
+
|
|
42
|
+
const {
|
|
43
|
+
makeReach,
|
|
44
|
+
REACH_IDS,
|
|
45
|
+
POSTURE_IDS,
|
|
46
|
+
// Phase 172-07 (R3 / INV-07): the trigger-tier model -- context problem-state
|
|
47
|
+
// first, keyword fallback. classifyTriggerTier reads the LOCAL problem-state
|
|
48
|
+
// enum (stage / jtbd / graph_gap) off the tuple + ctx the navigation.cjs
|
|
49
|
+
// chokepoint populated; it adds NO filesystem or Brain read.
|
|
50
|
+
TRIGGER_TIERS,
|
|
51
|
+
classifyTriggerTier,
|
|
52
|
+
readProblemStateEnum,
|
|
53
|
+
isContextTier,
|
|
54
|
+
} = require('./sensors/sensor-types.cjs');
|
|
55
|
+
|
|
56
|
+
// Plan-02 detectors (net-new conversation/state-pattern sensors over shipped
|
|
57
|
+
// engines). Each lives in its own file under lib/core/sensors/ and is registered
|
|
58
|
+
// into the SENSOR_REGISTRY below; the routing fence + Part-8 sweep already span
|
|
59
|
+
// every lib/core/sensors/*.cjs so these files are automatically covered.
|
|
60
|
+
const { sensorLaggingComponent } = require('./sensors/sensor-lagging-component.cjs');
|
|
61
|
+
const { sensorMethodologyDecision } = require('./sensors/sensor-methodology-decision.cjs');
|
|
62
|
+
const { sensorGateApproach } = require('./sensors/sensor-gate-approach.cjs');
|
|
63
|
+
|
|
64
|
+
// Plan-03 (wave 3) detectors -- SENS-04 (external-fact -> hat-scoped WebSearch
|
|
65
|
+
// with the MCP-stack-ask gate) + SENS-05 (JTBD set/changed -> re-weight). Both
|
|
66
|
+
// live under lib/core/sensors/ so the routing fence + Part-8 sweep span them.
|
|
67
|
+
const { sensorExternalFact } = require('./sensors/sensor-external-fact.cjs');
|
|
68
|
+
const { sensorJtbdReweight } = require('./sensors/sensor-jtbd-reweight.cjs');
|
|
69
|
+
|
|
70
|
+
// Phase 150-05 (wave 3) detector -- SENS-08 memory-cortex. Fires the cross-room
|
|
71
|
+
// memory-cortex bridge reach when the projected cortex signals (a stale governing
|
|
72
|
+
// thought OR a fresh contradiction), reading the LOCAL cortex scalars threaded on
|
|
73
|
+
// ctx by the 150-04 producer. Lives under lib/core/sensors/ so the routing fence
|
|
74
|
+
// + Part-8 sweep span it.
|
|
75
|
+
const { sensorMemoryCortex } = require('./sensors/sensor-memory-cortex.cjs');
|
|
76
|
+
|
|
77
|
+
// Phase 160-03 (wave 2) detector -- SENS-RECENCY (R6). Makes recency a reach
|
|
78
|
+
// signal in Engine 1: when the projected cortex shows a recently-touched node
|
|
79
|
+
// (its 0.995^(delta-h) decay score inside the recent window), this sensor
|
|
80
|
+
// surfaces the context_block reach so a recently-touched node yields a higher
|
|
81
|
+
// reach score than an identical stale node. Reuses the SHIPPED recency-decay
|
|
82
|
+
// blend (recencyScore); mints NO new reach_id and NO new EVENT_TYPE. Lives under
|
|
83
|
+
// lib/core/sensors/ so the routing fence + Part-8 sweep span it.
|
|
84
|
+
const { sensorRecency } = require('./sensors/sensor-recency.cjs');
|
|
85
|
+
|
|
86
|
+
// Phase 170 (dual-use diffusion) detector -- SENS-09 diffusion-adoption. Fires
|
|
87
|
+
// the brain_consult reach for Adoption-Capacity Theory (ACE) when the LOCAL
|
|
88
|
+
// turn shows a dual-use diffusion/adoption shape (explicit signal OR keyword
|
|
89
|
+
// scan over the local turn text OR a fresh side-channel marker). Lives under
|
|
90
|
+
// lib/core/sensors/ so the routing fence + Part-8 sweep span it.
|
|
91
|
+
const { sensorDiffusionAdoption } = require('./sensors/sensor-diffusion-adoption.cjs');
|
|
92
|
+
|
|
93
|
+
// Phase 173 (show/share intent) detector -- SENS-SHOW. Surfaces the EXISTING
|
|
94
|
+
// context_block reach (no 7th reach minted, D-03) naming the /mos:show JTBD
|
|
95
|
+
// need-selector front door when the LOCAL turn shows a show/present/share intent
|
|
96
|
+
// (explicit signal OR a show/share problem-state OR a keyword scan over the local
|
|
97
|
+
// turn text). posture 'hold' -- a standing suggestion at the Decision Gate, never
|
|
98
|
+
// auto-opens UI. Lives under lib/core/sensors/ so the routing fence + Part-8
|
|
99
|
+
// sweep span it.
|
|
100
|
+
const { sensorShowShare } = require('./sensors/sensor-show-share.cjs');
|
|
101
|
+
|
|
102
|
+
// Phase 205 detector -- SENS-10 circularity. SENS-09 is taken by Phase 170
|
|
103
|
+
// dual-use diffusion. SENS-10 detects when a conversation CIRCLES (the Mordi +
|
|
104
|
+
// Eli tester failure) and routes each of four causes (answer-unheard,
|
|
105
|
+
// assertion-unvalidated, stuck-cannot-say-where, wrong-frame) to a FROZEN-six
|
|
106
|
+
// exit reach (TELL / GRILL / GRILL-via-find-bottlenecks / REFRAME), minting no
|
|
107
|
+
// new reach_id. Lives under lib/core/sensors/ so the routing fence + Part-8
|
|
108
|
+
// sweep span it.
|
|
109
|
+
const { sensorCircularity } = require('./sensors/sensor-circularity.cjs');
|
|
110
|
+
|
|
111
|
+
// Phase 203-03 detector -- SENS-11 expert-skill. Fires the EXISTING context_block
|
|
112
|
+
// reach (no 7th reach minted, Phase 148 lockstep) surfacing "save an expert as a
|
|
113
|
+
// project skill?" when the ctx carries the reusable-expert signal (a CONFIRMED
|
|
114
|
+
// SyntheticExpert clearing invocation_count >= N OR an Academic/Operational tier),
|
|
115
|
+
// threaded onto sensorCtx by the navigation-engine ctx-assembly producer that reads
|
|
116
|
+
// room.db (the db read is the producer's job; the sensor stays pure). Lives under
|
|
117
|
+
// lib/core/sensors/ so the routing fence + Part-8 sweep span it.
|
|
118
|
+
const { sensorExpertSkill } = require('./sensors/sensor-expert-skill.cjs');
|
|
119
|
+
|
|
120
|
+
// Phase 209-05 (E5) detector -- SENS-12 room-pick. Fires the EXISTING
|
|
121
|
+
// context_block reach (no 7th reach minted) when the LOCAL turn text carries
|
|
122
|
+
// a mid-dialogue room resume/switch signal (RC-1 verdict 23, the incident's
|
|
123
|
+
// actual transport-less fork) and at least one resumable room exists. Mints
|
|
124
|
+
// the injected card ONLY via lib/core/room-chooser.cjs::renderRoomChooserCard
|
|
125
|
+
// (the SEED-020 pickShape('F.1') door); a registry-read fault degrades to
|
|
126
|
+
// null. Lives under lib/core/sensors/ so the routing fence + Part-8 sweep
|
|
127
|
+
// span it.
|
|
128
|
+
const { sensorRoomPick } = require('./sensors/sensor-room-pick.cjs');
|
|
129
|
+
|
|
130
|
+
// Phase 213 detector -- SENS-13 eureka. Fires the EXISTING deep_research reach
|
|
131
|
+
// (no 7th reach minted, CIRS R3) when the LOCAL side-channel
|
|
132
|
+
// <roomDir>/.mindrian/last-eureka.json carries a FRESH, guard-cleared
|
|
133
|
+
// (POST-GuardGate: verdict transferable, no guard = no fire) bridge from the 211
|
|
134
|
+
// tri-modal substrate. posture 'hold' -- a standing suggestion at the Decision
|
|
135
|
+
// Gate; the Brain RECOMMENDS, never TRIGGERS (Phase 210 doctrine). Lives under
|
|
136
|
+
// lib/core/sensors/ so the routing fence + Part-8 sweep span it.
|
|
137
|
+
const { sensorEureka } = require('./sensors/sensor-eureka.cjs');
|
|
138
|
+
|
|
139
|
+
// Phase 219 detector -- SENS-14 opportunity-harvest. Fires the EXISTING
|
|
140
|
+
// context_block reach (no 7th reach minted, D-02; the SENS-11 precedent) when
|
|
141
|
+
// the LOCAL side-channel <roomDir>/.mindrian/last-opportunity-harvest.json
|
|
142
|
+
// carries FRESH scored candidates from the 219-03 graph-event producer with
|
|
143
|
+
// at least one candidate past the Q2 Connection hard gate. posture 'hold' --
|
|
144
|
+
// a standing qualification-card offer, never an auto-open; nothing files
|
|
145
|
+
// without the human verb (Part 9 role 5). Lives under lib/core/sensors/ so
|
|
146
|
+
// the routing fence + Part-8 sweep span it.
|
|
147
|
+
const { sensorOpportunityHarvest } = require('./sensors/sensor-opportunity-harvest.cjs');
|
|
148
|
+
|
|
149
|
+
// Phase 220 detector (SENS-15 -- pasted URL -> deep_research url-ingest
|
|
150
|
+
// offer). Fires the EXISTING deep_research reach (no 7th reach minted, CIRS
|
|
151
|
+
// R3) when the normalized turn TEXT carries a bare http(s) URL outside code
|
|
152
|
+
// fences / quotes, deduped against the Plan 02 url-ingest ledger
|
|
153
|
+
// (<roomDir>/.mindrian/url-ingest-ledger.json). posture 'hold' -- a standing
|
|
154
|
+
// F.1 card offer ([Ingest] [Ingest+Explore] [Skip]); nothing files without
|
|
155
|
+
// the navigator verb (Part 3). Lives under lib/core/sensors/ so the routing
|
|
156
|
+
// fence + Part-8 sweep span it.
|
|
157
|
+
const { sensorUrlIngest } = require('./sensors/sensor-url-ingest.cjs');
|
|
158
|
+
|
|
159
|
+
// Phase 244 Plan 05 detector (SENS-16 -- content-relevance -> context_block
|
|
160
|
+
// offer, TRIG-01). Fires the EXISTING context_block reach (no 7th reach
|
|
161
|
+
// minted, Phase 148 lockstep) when the ALREADY-SHIPPED
|
|
162
|
+
// tri-modal-index.lexicalSearch (bm25 FTS5) finds real lexical relevance
|
|
163
|
+
// between the turn text and the room's own curated corpus (never
|
|
164
|
+
// `fragments`), threaded onto sensorCtx by the navigation-engine ctx-assembly
|
|
165
|
+
// producer that reads room.db (the db read is the producer's job; the sensor
|
|
166
|
+
// stays pure). posture 'hold' -- a standing suggestion, never an auto-open.
|
|
167
|
+
// Lives under lib/core/sensors/ so the routing fence + Part-8 sweep span it.
|
|
168
|
+
const { sensorContentRelevance } = require('./sensors/sensor-content-relevance.cjs');
|
|
169
|
+
|
|
170
|
+
// Phase 245 Plan 06 detector (SENS-17 -- perspective-lock -> the hats reach,
|
|
171
|
+
// REQ-3). The FIRST sensor that can independently assign `hats`, one of the six
|
|
172
|
+
// frozen Phase-148 reach ids, which until now was reachable only by a manual
|
|
173
|
+
// navigator pick. Fires when the projected cortex carries >= 2 fresh
|
|
174
|
+
// contradictions (the D-14 threshold: SENS-08 already fires cross_room at > 0,
|
|
175
|
+
// so > 0 here would double-fire on every contradiction, and the higher bar is a
|
|
176
|
+
// Canon Part 12 invisibility restraint). Reads the SAME LOCAL ctx scalar the
|
|
177
|
+
// MED-01 cortex producer already threads for SENS-08, so it adds no new
|
|
178
|
+
// plumbing. posture 'hold' -- a perspective rotation HALTS the current line of
|
|
179
|
+
// reasoning. Lives under lib/core/sensors/ so the routing fence + Part-8 sweep
|
|
180
|
+
// span it.
|
|
181
|
+
const { sensorPerspectiveLock } = require('./sensors/sensor-perspective-lock.cjs');
|
|
182
|
+
|
|
183
|
+
// Phase 264 detector (SENS-18 -- roadmap-type -> context_block roadmap-type-selector offer, R1):
|
|
184
|
+
// classifies a stated research goal into one of six roadmap output-shapes via
|
|
185
|
+
// a signal/context/keyword cascade (Canon Part 11 R3, keyword demoted to
|
|
186
|
+
// fallback). posture 'hold' -- a standing suggestion, never an auto-open.
|
|
187
|
+
// Lives under lib/core/sensors/ so the routing fence + Part-8 sweep span it.
|
|
188
|
+
const { sensorRoadmapType } = require('./sensors/sensor-roadmap-type.cjs');
|
|
189
|
+
|
|
190
|
+
// ---------- LOCAL helpers (sync, soft-fail) ----------
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Read + parse a JSON file, returning null on any failure. LOCAL only -- the
|
|
194
|
+
* caller threads a room-local path; there is no network surface here.
|
|
195
|
+
*/
|
|
196
|
+
function readJsonSafe(filePath) {
|
|
197
|
+
try {
|
|
198
|
+
if (typeof filePath !== 'string' || !filePath) return null;
|
|
199
|
+
if (!fs.existsSync(filePath)) return null;
|
|
200
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
201
|
+
} catch (_e) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* True if `turn` carries the named signal. A turn is { signals: [...] } where
|
|
208
|
+
* each signal is either a string kind or an object { kind }. Defensive against
|
|
209
|
+
* malformed input -- returns false rather than throwing.
|
|
210
|
+
*/
|
|
211
|
+
function hasSignal(turn, kind) {
|
|
212
|
+
if (!turn || typeof turn !== 'object') return false;
|
|
213
|
+
const signals = Array.isArray(turn.signals) ? turn.signals : [];
|
|
214
|
+
for (const s of signals) {
|
|
215
|
+
if (typeof s === 'string' && s === kind) return true;
|
|
216
|
+
if (s && typeof s === 'object' && s.kind === kind) return true;
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Pull the problem_type enum off the diagnose tuple as a generic handle.
|
|
223
|
+
* Returns 'undefined' (the enum value) when absent -- never user content.
|
|
224
|
+
*/
|
|
225
|
+
function problemTypeOf(tuple) {
|
|
226
|
+
if (!tuple || typeof tuple !== 'object') return 'undefined';
|
|
227
|
+
const pt = tuple.problem_type;
|
|
228
|
+
return typeof pt === 'string' && pt ? pt : 'undefined';
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// ---------- Phase 150.5-01: the one-seam turn normalization ----------
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* The side-channel freshness window. A derived signal fires only when the
|
|
235
|
+
* source file's mtime is within this window -- a days-old cascade or
|
|
236
|
+
* auto-explore marker must NOT re-fire the engine arm on every turn of every
|
|
237
|
+
* later session (the stale-refire failure the firability suite's
|
|
238
|
+
* honest-negative arms assert, T-150.5-02).
|
|
239
|
+
*/
|
|
240
|
+
const SIGNAL_FRESHNESS_MS = 30 * 60 * 1000;
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* True when the file exists and its mtime is within SIGNAL_FRESHNESS_MS.
|
|
244
|
+
* stat-before-parse: the mtime gate runs before any JSON read so the whole
|
|
245
|
+
* derivation stays trivially inside the 1200ms NAV budget (T-150.5-04).
|
|
246
|
+
* Soft-fail to false on any fs fault; never throws.
|
|
247
|
+
* WR-01 (150.5 code review): a FUTURE-dated mtime (WSL2/Windows-mount clock
|
|
248
|
+
* skew, archive extraction, backup restore) must NOT read as fresh forever --
|
|
249
|
+
* age must be non-negative AND within the window.
|
|
250
|
+
*/
|
|
251
|
+
function isFreshFile(filePath) {
|
|
252
|
+
try {
|
|
253
|
+
const st = fs.statSync(filePath);
|
|
254
|
+
const age = Date.now() - st.mtimeMs;
|
|
255
|
+
return age >= 0 && age <= SIGNAL_FRESHNESS_MS;
|
|
256
|
+
} catch (_e) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* isMarkerOwnedByCaller -- REACH-03 fail-OPEN ownership filter (Phase 237-04,
|
|
263
|
+
* T-237-04-01 / T-237-04-02). Answers exactly one question: "may THIS marker
|
|
264
|
+
* fire for THIS caller?"
|
|
265
|
+
*
|
|
266
|
+
* This is a FILTER, not a GATE. A gate fails closed; a filter fails open.
|
|
267
|
+
* Suppress ONLY on a positive mismatch -- both the marker's session id and
|
|
268
|
+
* the caller's session id present AND different. Every other state fires:
|
|
269
|
+
*
|
|
270
|
+
* marker session id | caller session id | verdict
|
|
271
|
+
* ------------------------|-------------------------|--------
|
|
272
|
+
* present, differs | present | false (the ONLY suppression -- a positive mismatch)
|
|
273
|
+
* present, matches | present | true
|
|
274
|
+
* absent / not a string | any | true (a legacy or pre-fix marker in an existing room must keep firing; suppressing here would silently darken the reach layer in every room on upgrade until the next write)
|
|
275
|
+
* any | absent / not a string | true (an unknown caller cannot prove ownership either way; resolveEffectiveSessionId genuinely returns null on stdio in real installs, so suppressing here would kill the signal on a common surface)
|
|
276
|
+
*
|
|
277
|
+
* A fix that over-suppresses would be a second silent-failure bug of exactly
|
|
278
|
+
* the class this milestone (v1.16.0) exists to remove, and it would be much
|
|
279
|
+
* harder to notice than the bleed it replaces (T-237-04-02, Denial of
|
|
280
|
+
* Service via over-suppression). No force flag, no options object -- one
|
|
281
|
+
* boolean answer from two inputs, same no-weakening discipline
|
|
282
|
+
* lib/core/seam-liveness.cjs states for itself.
|
|
283
|
+
*
|
|
284
|
+
* @param {*} markerSessionId -- the session_id read off the marker's own
|
|
285
|
+
* JSON content (absent on a legacy / pre-fix marker)
|
|
286
|
+
* @param {*} callerSessionId -- the calling session's own id (null/undefined
|
|
287
|
+
* when it did not resolve upstream)
|
|
288
|
+
* @returns {boolean} true when the marker may fire for this caller
|
|
289
|
+
*/
|
|
290
|
+
function isMarkerOwnedByCaller(markerSessionId, callerSessionId) {
|
|
291
|
+
const markerOk = typeof markerSessionId === 'string' && markerSessionId.length > 0;
|
|
292
|
+
const callerOk = typeof callerSessionId === 'string' && callerSessionId.length > 0;
|
|
293
|
+
if (!markerOk || !callerOk) return true; // fail open: neither side can prove a mismatch
|
|
294
|
+
return markerSessionId === callerSessionId;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Derive turn signal KINDS from EXACTLY the two CONTEXT-named shipped LOCAL
|
|
299
|
+
* side-channels under ctx.roomDir (Phase 150.5 SENS-FIX-01):
|
|
300
|
+
*
|
|
301
|
+
* (a) 'artifact_filed' <- <roomDir>/.mindrian/last-cascade.json exists, is
|
|
302
|
+
* fresh per SIGNAL_FRESHNESS_MS, parses via readJsonSafe,
|
|
303
|
+
* proactive_intelligence.newFindings is a non-empty array (the same gate
|
|
304
|
+
* sensorArtifactFiled re-checks, so signal and sensor agree), AND the
|
|
305
|
+
* marker's own session_id passes isMarkerOwnedByCaller against the
|
|
306
|
+
* caller session id (Phase 237-04, REACH-03).
|
|
307
|
+
* (b) 'first_material' <- any <roomDir>/.mindrian/auto-explore-*.json fire
|
|
308
|
+
* marker (the Phase 117 substrate) exists, is fresh, AND passes the
|
|
309
|
+
* same ownership check.
|
|
310
|
+
*
|
|
311
|
+
* Returns signal KIND strings only -- closed enums, never file content, never
|
|
312
|
+
* prose (threat T1 / Canon Part 8). Pure-LOCAL, sync, soft-fail-to-[] on any
|
|
313
|
+
* fault; never throws. No third derivation exists: the 150.5 CONTEXT names
|
|
314
|
+
* exactly these two side-channel fuels.
|
|
315
|
+
*
|
|
316
|
+
* The sessionId parameter is OPTIONAL (Phase 237-04): deriveTurnSignals(ctx)
|
|
317
|
+
* with one argument behaves exactly as deriveTurnSignals(ctx, null) does,
|
|
318
|
+
* which by the isMarkerOwnedByCaller degrade rule means every marker still
|
|
319
|
+
* fires -- no existing single-argument caller breaks.
|
|
320
|
+
*
|
|
321
|
+
* @param {object} ctx -- LOCAL context ({ roomDir })
|
|
322
|
+
* @param {string|null} [sessionId] -- the CALLER's own session id, threaded
|
|
323
|
+
* in by the caller (normalizeTurn), never re-resolved here
|
|
324
|
+
* @returns {string[]} derived signal kinds (possibly empty)
|
|
325
|
+
*/
|
|
326
|
+
function deriveTurnSignals(ctx, sessionId) {
|
|
327
|
+
try {
|
|
328
|
+
const roomDir = (ctx && typeof ctx === 'object' && typeof ctx.roomDir === 'string') ? ctx.roomDir : '';
|
|
329
|
+
if (!roomDir) return [];
|
|
330
|
+
const sideDir = path.join(roomDir, '.mindrian');
|
|
331
|
+
const out = [];
|
|
332
|
+
const callerSessionId = (typeof sessionId === 'string' && sessionId) ? sessionId : null;
|
|
333
|
+
|
|
334
|
+
// (a) artifact_filed <- fresh last-cascade.json with non-empty
|
|
335
|
+
// newFindings, scoped to the caller (Phase 237-04, T-237-04-01).
|
|
336
|
+
const cascadePath = path.join(sideDir, 'last-cascade.json');
|
|
337
|
+
if (fs.existsSync(cascadePath) && isFreshFile(cascadePath)) {
|
|
338
|
+
const payload = readJsonSafe(cascadePath);
|
|
339
|
+
const pi = (payload && typeof payload === 'object') ? payload.proactive_intelligence : null;
|
|
340
|
+
const markerSessionId = (payload && typeof payload === 'object') ? payload.session_id : undefined;
|
|
341
|
+
if (pi && Array.isArray(pi.newFindings) && pi.newFindings.length > 0
|
|
342
|
+
&& isMarkerOwnedByCaller(markerSessionId, callerSessionId)) {
|
|
343
|
+
out.push('artifact_filed');
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// (b) first_material <- any fresh + owned auto-explore-*.json fire marker.
|
|
348
|
+
let entries = [];
|
|
349
|
+
try {
|
|
350
|
+
entries = fs.readdirSync(sideDir);
|
|
351
|
+
} catch (_e) {
|
|
352
|
+
entries = [];
|
|
353
|
+
}
|
|
354
|
+
for (const name of entries) {
|
|
355
|
+
if (name.indexOf('auto-explore-') === 0 && name.slice(-5) === '.json') {
|
|
356
|
+
const candidatePath = path.join(sideDir, name);
|
|
357
|
+
if (isFreshFile(candidatePath)) {
|
|
358
|
+
const candidatePayload = readJsonSafe(candidatePath);
|
|
359
|
+
const candidateSessionId = (candidatePayload && typeof candidatePayload === 'object') ? candidatePayload.session_id : undefined;
|
|
360
|
+
if (isMarkerOwnedByCaller(candidateSessionId, callerSessionId)) {
|
|
361
|
+
out.push('first_material');
|
|
362
|
+
break;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
return out;
|
|
369
|
+
} catch (_e) {
|
|
370
|
+
return []; // soft-fail: a derivation fault never poisons the dispatch
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Return a SHALLOW ENRICHED COPY of the turn (the D-03a structural guarantee:
|
|
376
|
+
* the enriched text/signals exist ONLY on the copy that lives inside the
|
|
377
|
+
* dispatch -- the caller's turn object, the one that flows around the
|
|
378
|
+
* classifier toward buildBrainPacket, is NEVER mutated and gains zero keys):
|
|
379
|
+
*
|
|
380
|
+
* text -- turn.text || turn.utterance || turn.userText || '' (existing
|
|
381
|
+
* text/utterance always win, so callers that already normalize
|
|
382
|
+
* are byte-stable).
|
|
383
|
+
* signals -- the deduplicated union of the caller's turn.signals array
|
|
384
|
+
* (preserved verbatim, object signals included) and
|
|
385
|
+
* deriveTurnSignals(ctx) (the additive merge lane).
|
|
386
|
+
* trigger_tier -- (Phase 172-07, R3/INV-07) the recorded TIER classification
|
|
387
|
+
* of this turn: 'signal'/'context' (problem-state, preferred) or
|
|
388
|
+
* 'keyword' (the fallback). An ENUM hint only -- it records that
|
|
389
|
+
* the dispatch path PREFERS the LOCAL problem-state over keyword;
|
|
390
|
+
* it does NOT itself fire or suppress any sensor. Member of
|
|
391
|
+
* sensor-types.TRIGGER_TIERS, or null when nothing is triggerable.
|
|
392
|
+
*
|
|
393
|
+
* @param {object} turn -- the caller's turn (never mutated)
|
|
394
|
+
* @param {object} ctx -- LOCAL context threaded to deriveTurnSignals
|
|
395
|
+
* @param {object} tuple -- the /mos:diagnose tuple (read enum/scalar for the tier)
|
|
396
|
+
* @returns {object} the enriched copy
|
|
397
|
+
*/
|
|
398
|
+
function normalizeTurn(turn, ctx, tuple) {
|
|
399
|
+
const base = (turn && typeof turn === 'object') ? turn : {};
|
|
400
|
+
const copy = Object.assign({}, base);
|
|
401
|
+
|
|
402
|
+
// text alias: existing text/utterance always win; userText is the
|
|
403
|
+
// production-hook fallback (scripts/intent-classifier.cjs ~:1351).
|
|
404
|
+
let text = '';
|
|
405
|
+
if (typeof base.text === 'string') text = base.text;
|
|
406
|
+
else if (typeof base.utterance === 'string') text = base.utterance;
|
|
407
|
+
else if (typeof base.userText === 'string') text = base.userText;
|
|
408
|
+
copy.text = text;
|
|
409
|
+
|
|
410
|
+
// REACH-03 (Phase 237-04, T-237-04-01): thread the CALLER-ASSERTED session
|
|
411
|
+
// id from what is already in scope here -- never re-resolved, never read
|
|
412
|
+
// from process.env.CLAUDE_CODE_SESSION_ID. The MCP path already resolves
|
|
413
|
+
// it upstream (lib/mcp/tools/sensors.cjs's session-id resolver) and hands
|
|
414
|
+
// it in on turn.sessionId; the CLI path carries it on decide()'s turn
|
|
415
|
+
// (lib/core/navigation-engine.cjs). Adding a resolver in THIS module would
|
|
416
|
+
// be a fourth guesser -- Canon Part 7 and the ONE session-id resolver
|
|
417
|
+
// (lib/core/session-binding.cjs) exist to prevent exactly that.
|
|
418
|
+
const callerSessionId = (typeof base.sessionId === 'string' && base.sessionId)
|
|
419
|
+
? base.sessionId
|
|
420
|
+
: ((ctx && typeof ctx === 'object' && typeof ctx.sessionId === 'string' && ctx.sessionId) ? ctx.sessionId : null);
|
|
421
|
+
|
|
422
|
+
// signals: caller-supplied preserved verbatim, derived kinds merged
|
|
423
|
+
// additively (deduplicated against both string and { kind } shapes).
|
|
424
|
+
const callerSignals = Array.isArray(base.signals) ? base.signals.slice() : [];
|
|
425
|
+
const merged = callerSignals.slice();
|
|
426
|
+
for (const kind of deriveTurnSignals(ctx, callerSessionId)) {
|
|
427
|
+
let present = false;
|
|
428
|
+
for (const s of callerSignals) {
|
|
429
|
+
if (s === kind || (s && typeof s === 'object' && s.kind === kind)) {
|
|
430
|
+
present = true;
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
if (!present) merged.push(kind);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Phase 177-04 (BCH-S4a): surface saturation as a DERIVED signal on the COPY
|
|
438
|
+
// only. When isSaturated fires on the turn-count + node-delta scalars carried
|
|
439
|
+
// on the turn/ctx ("turn 8+, no new nodes"), push a 'saturation' signal kind
|
|
440
|
+
// into the merged lane (deduplicated). This is a deterministic SIGNAL only --
|
|
441
|
+
// it does NOT fire a reach, compose a dial, or emit a model cue (the cue
|
|
442
|
+
// wiring is BCH-S4b, Wave 4). The caller's turn object is never mutated (the
|
|
443
|
+
// enrichment lives only on this copy -- the D-03a structural guarantee).
|
|
444
|
+
const satTurnCount = (typeof base.turn_count === 'number') ? base.turn_count
|
|
445
|
+
: (ctx && typeof ctx === 'object' && typeof ctx.turn_count === 'number') ? ctx.turn_count
|
|
446
|
+
: undefined;
|
|
447
|
+
const satNodeDelta = (typeof base.node_delta === 'number') ? base.node_delta
|
|
448
|
+
: (ctx && typeof ctx === 'object' && typeof ctx.node_delta === 'number') ? ctx.node_delta
|
|
449
|
+
: undefined;
|
|
450
|
+
if (isSaturated({ turn_count: satTurnCount, node_delta: satNodeDelta })) {
|
|
451
|
+
let present = false;
|
|
452
|
+
for (const s of merged) {
|
|
453
|
+
if (s === 'saturation' || (s && typeof s === 'object' && s.kind === 'saturation')) {
|
|
454
|
+
present = true;
|
|
455
|
+
break;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
if (!present) merged.push('saturation');
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
copy.signals = merged;
|
|
462
|
+
|
|
463
|
+
// Phase 172-07 (R3/INV-07): record the trigger TIER on the normalized copy.
|
|
464
|
+
// classifyTriggerTier reads the LOCAL problem-state enum (stage/jtbd/graph_gap)
|
|
465
|
+
// off tuple+ctx (navigation.cjs populated) and applies the context-first /
|
|
466
|
+
// keyword-fallback precedence. Soft-fail to null so a classifier fault never
|
|
467
|
+
// poisons the dispatch. ENUM only -- never user content (Part 8).
|
|
468
|
+
let tier = null;
|
|
469
|
+
try {
|
|
470
|
+
tier = classifyTriggerTier(copy, tuple, ctx);
|
|
471
|
+
} catch (_e) {
|
|
472
|
+
tier = null;
|
|
473
|
+
}
|
|
474
|
+
copy.trigger_tier = tier;
|
|
475
|
+
|
|
476
|
+
return copy;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// ---------- Phase 177-04: turn-stage reach-eligibility (BCH-S5) ----------
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* The two DEEP reaches suppressed in early turns (BCH-S5). These are members 4
|
|
483
|
+
* and 5 of the frozen REACH_IDS bank (brain_consult, deep_research) -- the deep
|
|
484
|
+
* tooling a fresh navigator should not be dropped into before the problem is
|
|
485
|
+
* framed. The OTHER four reaches (context_block, contradiction, cross_room,
|
|
486
|
+
* hats) are NEVER turn-stage-suppressed. This list does NOT mint a 7th reach --
|
|
487
|
+
* it names two existing members the gate suppresses in turns 1-2.
|
|
488
|
+
*/
|
|
489
|
+
const TURN_STAGE_GATED_REACHES = Object.freeze(['brain_consult', 'deep_research']);
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* The early-turn suppression boundary (BCH-S5). turn_count BELOW this value
|
|
493
|
+
* (turns 1-2, i.e. turn_count < 3) suppresses the two deep reaches; turn_count
|
|
494
|
+
* AT OR ABOVE it unlocks them. The 3-4 transition band is INTENTIONAL and
|
|
495
|
+
* documented: turns 1-2 are pure framing (deep reaches suppressed), turns 3-4
|
|
496
|
+
* are the early transition where the two deep reaches are already eligible (the
|
|
497
|
+
* inclusive lower boundary is 3), and turn 5 -- the SPEC's named unlock turn --
|
|
498
|
+
* is comfortably inside the eligible band. The CONTEXT line ("suppress in turns
|
|
499
|
+
* 1-2, unlock at turn 5") is honored: suppressed for 1-2, eligible by 5; the
|
|
500
|
+
* test pins the 3-4 boundary explicitly so the chosen inclusive edge cannot
|
|
501
|
+
* drift silently.
|
|
502
|
+
*/
|
|
503
|
+
const TURN_STAGE_UNLOCK_AT = 3;
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* BCH-S5 -- is the given reach eligible to fire at this turn stage?
|
|
507
|
+
*
|
|
508
|
+
* Deterministic engine math over the runtime turn_count BCH-S1 established
|
|
509
|
+
* (lib/core/navigation/projections.cjs computeInvestmentLevel reads the same
|
|
510
|
+
* roomState.turn_count). The gate suppresses ONLY brain_consult and deep_research
|
|
511
|
+
* in the early framing turns (turn_count < TURN_STAGE_UNLOCK_AT, i.e. turns 1-2);
|
|
512
|
+
* every other reach is always eligible. When turn_count is absent or non-number
|
|
513
|
+
* the gate is a NO-OP (returns true) so every legacy caller that threads no
|
|
514
|
+
* turn_count stays byte-stable.
|
|
515
|
+
*
|
|
516
|
+
* isReachEligibleForTurn('brain_consult', 1) === false (turn 1, suppressed)
|
|
517
|
+
* isReachEligibleForTurn('deep_research', 2) === false (turn 2, suppressed)
|
|
518
|
+
* isReachEligibleForTurn('brain_consult', 3) === true (transition band edge)
|
|
519
|
+
* isReachEligibleForTurn('deep_research', 5) === true (unlocked at turn 5)
|
|
520
|
+
* isReachEligibleForTurn('context_block', 1) === true (never suppressed)
|
|
521
|
+
* isReachEligibleForTurn('deep_research', undefined) === true (no-op)
|
|
522
|
+
*
|
|
523
|
+
* @param {string} reachId -- a member of REACH_IDS
|
|
524
|
+
* @param {number} turnCount -- the per-turn runtime counter (BCH-S1)
|
|
525
|
+
* @returns {boolean} true when the reach may fire this turn
|
|
526
|
+
*/
|
|
527
|
+
function isReachEligibleForTurn(reachId, turnCount) {
|
|
528
|
+
// Not one of the two gated deep reaches -> always eligible.
|
|
529
|
+
if (TURN_STAGE_GATED_REACHES.indexOf(reachId) === -1) return true;
|
|
530
|
+
// Absent / non-number / non-finite turn_count -> no-op (eligible). Mirrors the
|
|
531
|
+
// defensive read in computeInvestmentLevel: a missing counter never suppresses.
|
|
532
|
+
if (typeof turnCount !== 'number' || !Number.isFinite(turnCount)) return true;
|
|
533
|
+
// The deep reaches are suppressed only in the early framing band (turns 1-2).
|
|
534
|
+
return turnCount >= TURN_STAGE_UNLOCK_AT;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Read the runtime turn_count off the normalized turn / LOCAL ctx (the same
|
|
539
|
+
* counter BCH-S1 established on roomState). Prefers turn.turn_count, then
|
|
540
|
+
* ctx.turn_count. Returns undefined when neither is a finite number, so
|
|
541
|
+
* isReachEligibleForTurn treats it as a no-op. Pure; never throws.
|
|
542
|
+
*/
|
|
543
|
+
function turnCountOf(turn, ctx) {
|
|
544
|
+
if (turn && typeof turn === 'object' && typeof turn.turn_count === 'number' && Number.isFinite(turn.turn_count)) {
|
|
545
|
+
return turn.turn_count;
|
|
546
|
+
}
|
|
547
|
+
if (ctx && typeof ctx === 'object' && typeof ctx.turn_count === 'number' && Number.isFinite(ctx.turn_count)) {
|
|
548
|
+
return ctx.turn_count;
|
|
549
|
+
}
|
|
550
|
+
return undefined;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// ---------- Phase 177-04: saturation by turn-count + node-delta (BCH-S4a) ----------
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* The saturation turn-count floor (BCH-S4a). turn_count AT OR ABOVE this value
|
|
557
|
+
* is "deep into the conversation". Combined with node_delta === 0 ("no new
|
|
558
|
+
* nodes") this is the "turn 8+, no new nodes" condition.
|
|
559
|
+
*/
|
|
560
|
+
const SATURATION_TURN_FLOOR = 8;
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Pull a finite number off an object key, returning null when absent / non-number
|
|
564
|
+
* / non-finite. Pure; never throws.
|
|
565
|
+
*/
|
|
566
|
+
function _finiteNum(obj, key) {
|
|
567
|
+
if (!obj || typeof obj !== 'object') return null;
|
|
568
|
+
const v = obj[key];
|
|
569
|
+
return (typeof v === 'number' && Number.isFinite(v)) ? v : null;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* BCH-S4a -- is the conversation saturated? True when turn_count >= 8 AND
|
|
574
|
+
* node_delta === 0 (the "turn 8+, no new nodes" condition) -- pure deterministic
|
|
575
|
+
* engine math over the runtime turn_count BCH-S1 established and the node_delta
|
|
576
|
+
* scalar the navigation.cjs chokepoint computed (a created_at window count of
|
|
577
|
+
* nodes created since the prior turn).
|
|
578
|
+
*
|
|
579
|
+
* This helper does NOT itself open a db read -- node_delta is passed in as an
|
|
580
|
+
* already-computed scalar, keeping dispatchSensors pure per the :8 chokepoint
|
|
581
|
+
* contract. Defensive: absent / non-number turn_count or node_delta -> false; a
|
|
582
|
+
* negative node_delta (malformed) -> false; never throws.
|
|
583
|
+
*
|
|
584
|
+
* isSaturated({ turn_count: 8, node_delta: 0 }) === true
|
|
585
|
+
* isSaturated({ turn_count: 8, node_delta: 3 }) === false (new nodes)
|
|
586
|
+
* isSaturated({ turn_count: 5, node_delta: 0 }) === false (too early)
|
|
587
|
+
* isSaturated({}) === false (defensive)
|
|
588
|
+
*
|
|
589
|
+
* @param {object} opts -- { turn_count, node_delta }
|
|
590
|
+
* @returns {boolean}
|
|
591
|
+
*/
|
|
592
|
+
function isSaturated(opts) {
|
|
593
|
+
const turnCount = _finiteNum(opts, 'turn_count');
|
|
594
|
+
const nodeDelta = _finiteNum(opts, 'node_delta');
|
|
595
|
+
if (turnCount === null || nodeDelta === null) return false;
|
|
596
|
+
if (nodeDelta < 0) return false; // malformed count -> not saturated
|
|
597
|
+
return turnCount >= SATURATION_TURN_FLOOR && nodeDelta === 0;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
// ---------- SENS-01: first-material sensor (PARTIAL over Phase 117) ----------
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* SENS-01 -- first-material -> explore-domains + whitespace + brain_framework_chain.
|
|
604
|
+
*
|
|
605
|
+
* The first-material signal is the shipped Phase 117 auto-explore path
|
|
606
|
+
* (scripts/auto-explore-fire.cjs runs discovery-cycle + rs-engine and writes
|
|
607
|
+
* room/.mindrian/auto-explore-<material_id>.json). This sensor does NOT re-run
|
|
608
|
+
* that pipeline. It SURFACES the candidate reach the path represents and
|
|
609
|
+
* ATTACHES the brain_framework_chain companion carrying ONLY the problem_type
|
|
610
|
+
* enum (Canon Part 8: generic handle only -- never artifact bytes).
|
|
611
|
+
*
|
|
612
|
+
* Reach: context_block / push_forward. Dispatch names the shipped
|
|
613
|
+
* explore-domains + whitespace path. Soft-fail to null when the signal is
|
|
614
|
+
* absent; never throws.
|
|
615
|
+
*
|
|
616
|
+
* @returns {Readonly<object>|null}
|
|
617
|
+
*/
|
|
618
|
+
function sensorFirstMaterial(turn, tuple, _ctx) {
|
|
619
|
+
if (!hasSignal(turn, 'first_material')) return null;
|
|
620
|
+
|
|
621
|
+
// Generic-handle companion: problem_type enum ONLY. This is the Part-8 seam --
|
|
622
|
+
// problemTypeOf returns the enum value (or 'undefined'), never user content.
|
|
623
|
+
const pt = problemTypeOf(tuple);
|
|
624
|
+
const companions = [
|
|
625
|
+
// The explore-domains/whitespace reach already fires via Phase 117; the
|
|
626
|
+
// brain_framework_chain($problem_type) companion is the generic Brain handle
|
|
627
|
+
// SENS-01 attaches. Format: '<handle>:<enum>' -- enum is the ONLY payload.
|
|
628
|
+
'brain_framework_chain:' + pt,
|
|
629
|
+
'whitespace',
|
|
630
|
+
];
|
|
631
|
+
|
|
632
|
+
return makeReach({
|
|
633
|
+
reach_id: 'context_block',
|
|
634
|
+
posture: 'push_forward',
|
|
635
|
+
// Dispatch names the shipped Phase 117 surface (explore-domains + whitespace);
|
|
636
|
+
// it is a handle, not user content.
|
|
637
|
+
dispatch: 'explore-domains+whitespace',
|
|
638
|
+
companions: companions,
|
|
639
|
+
signal: 'first_material',
|
|
640
|
+
evidence: { problem_type: pt, source: 'auto-explore-117' },
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// ---------- SENS-06: artifact-filed sensor (VERIFY over CASC-01) ----------
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* SENS-06 -- artifact-filed -> the shipped CASC-01 cross-relationship cascade.
|
|
648
|
+
*
|
|
649
|
+
* VERIFY, not BUILD. This sensor reads the room-local side-channel
|
|
650
|
+
* (<roomDir>/.mindrian/last-cascade.json) that scripts/post-write writes, and
|
|
651
|
+
* surfaces the candidate reach when proactive_intelligence.newFindings is
|
|
652
|
+
* non-empty. It mirrors skills/room-proactive/SKILL.md's read contract exactly
|
|
653
|
+
* and does NOT re-implement the Phase 95/142 cascade. LOCAL only (Canon Part 8):
|
|
654
|
+
* no network, no Brain query -- the read is in-process fs only.
|
|
655
|
+
*
|
|
656
|
+
* The finding edge type chooses the reach: a CONTRADICT finding surfaces
|
|
657
|
+
* reach_id 'contradiction' with posture 'pull_back' (Part 5: a contradiction
|
|
658
|
+
* near a claim pulls back to re-set the stage); any other finding edge surfaces
|
|
659
|
+
* 'cross_room' with posture 'push_forward'.
|
|
660
|
+
*
|
|
661
|
+
* Soft-fail to null when the signal is absent, the side-channel is missing/
|
|
662
|
+
* unparseable, or newFindings is empty; never throws.
|
|
663
|
+
*
|
|
664
|
+
* REACH-03 (Phase 237-04, T-237-04-01/T-237-04-05): this is the SECOND
|
|
665
|
+
* independent reader of last-cascade.json (the module header at :31-33
|
|
666
|
+
* documents the duplication as deliberate, "so signal and sensor agree").
|
|
667
|
+
* It applies the SAME isMarkerOwnedByCaller check deriveTurnSignals uses --
|
|
668
|
+
* both readers must be scoped or neither is, or a foreign marker fires here
|
|
669
|
+
* even when the derived signal correctly suppressed it.
|
|
670
|
+
*
|
|
671
|
+
* @returns {Readonly<object>|null}
|
|
672
|
+
*/
|
|
673
|
+
function sensorArtifactFiled(turn, _tuple, ctx) {
|
|
674
|
+
if (!hasSignal(turn, 'artifact_filed')) return null;
|
|
675
|
+
|
|
676
|
+
const roomDir = (ctx && typeof ctx === 'object' && typeof ctx.roomDir === 'string') ? ctx.roomDir : '';
|
|
677
|
+
if (!roomDir) return null;
|
|
678
|
+
|
|
679
|
+
// The shipped CASC-01 side-channel path (mirrors room-proactive + post-write).
|
|
680
|
+
const sideChannel = path.join(roomDir, '.mindrian', 'last-cascade.json');
|
|
681
|
+
const payload = readJsonSafe(sideChannel);
|
|
682
|
+
if (!payload || typeof payload !== 'object') return null;
|
|
683
|
+
|
|
684
|
+
// The caller session id sourced from the NORMALIZED turn this sensor
|
|
685
|
+
// already receives -- never re-resolved, never a fourth guesser.
|
|
686
|
+
const callerSessionId = (turn && typeof turn === 'object' && typeof turn.sessionId === 'string' && turn.sessionId) ? turn.sessionId : null;
|
|
687
|
+
if (!isMarkerOwnedByCaller(payload.session_id, callerSessionId)) return null;
|
|
688
|
+
|
|
689
|
+
const pi = payload.proactive_intelligence;
|
|
690
|
+
const newFindings = (pi && Array.isArray(pi.newFindings)) ? pi.newFindings : [];
|
|
691
|
+
if (newFindings.length === 0) return null; // soft-fail: cascade ran, nothing new
|
|
692
|
+
|
|
693
|
+
// Pick the edge type off the first finding (highest-confidence first per the
|
|
694
|
+
// cascade producer). A CONTRADICT edge -> contradiction reach; else cross_room.
|
|
695
|
+
const first = newFindings[0] || {};
|
|
696
|
+
const findingType = typeof first.type === 'string' ? first.type.toUpperCase() : '';
|
|
697
|
+
const isContradiction = findingType.indexOf('CONTRADICT') !== -1;
|
|
698
|
+
|
|
699
|
+
const reach_id = isContradiction ? 'contradiction' : 'cross_room';
|
|
700
|
+
const posture = isContradiction ? 'pull_back' : 'push_forward';
|
|
701
|
+
|
|
702
|
+
return makeReach({
|
|
703
|
+
reach_id: reach_id,
|
|
704
|
+
posture: posture,
|
|
705
|
+
// Dispatch names the shipped cascade surface (the cross-relationship
|
|
706
|
+
// proactive-intelligence finding render). Handle, not user content.
|
|
707
|
+
dispatch: 'cascade-cross-relationship-surface',
|
|
708
|
+
companions: [],
|
|
709
|
+
signal: 'artifact_filed',
|
|
710
|
+
// LOCAL scalars only: the finding count + the edge-type enum. No message
|
|
711
|
+
// body, no section names that could carry user content beyond the enum.
|
|
712
|
+
evidence: { finding_count: newFindings.length, edge_type: findingType || 'unknown' },
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// ---------- The sensor registry (canonical order) ----------
|
|
717
|
+
//
|
|
718
|
+
// Canonical order: SENS-01 (first-material) then SENS-06 (artifact-filed).
|
|
719
|
+
// Tasks/plans 02-03 append their detectors here. dispatchSensors iterates this
|
|
720
|
+
// in order; each entry is a sensorFn(turn, tuple, ctx) -> candidate-reach|null.
|
|
721
|
+
const SENSOR_REGISTRY = [
|
|
722
|
+
sensorFirstMaterial,
|
|
723
|
+
sensorArtifactFiled,
|
|
724
|
+
// Plan 02 (wave 2) detectors:
|
|
725
|
+
sensorLaggingComponent,
|
|
726
|
+
sensorMethodologyDecision,
|
|
727
|
+
sensorGateApproach,
|
|
728
|
+
// Plan 03 (wave 3) detectors:
|
|
729
|
+
sensorExternalFact,
|
|
730
|
+
sensorJtbdReweight,
|
|
731
|
+
// Phase 150-05 detector:
|
|
732
|
+
sensorMemoryCortex,
|
|
733
|
+
// Phase 160-03 detector (R6 -- recency as a reach signal):
|
|
734
|
+
sensorRecency,
|
|
735
|
+
// Phase 170 detector (SENS-09 -- dual-use diffusion/adoption -> ACE):
|
|
736
|
+
sensorDiffusionAdoption,
|
|
737
|
+
// Phase 173 detector (SENS-SHOW -- show/share intent -> /mos:show selector):
|
|
738
|
+
sensorShowShare,
|
|
739
|
+
// Phase 205 detector (SENS-10 -- circularity -> four-cause/four-exit gear-shift):
|
|
740
|
+
sensorCircularity,
|
|
741
|
+
// Phase 203 detector (SENS-11 -- reusable-expert -> save-as-skill offer on context_block):
|
|
742
|
+
sensorExpertSkill,
|
|
743
|
+
// Phase 209-05 detector (SENS-12 -- room-pick fork -> room-chooser card on context_block):
|
|
744
|
+
sensorRoomPick,
|
|
745
|
+
// Phase 213 detector (SENS-13 -- eureka bridge -> deep_research offer):
|
|
746
|
+
sensorEureka,
|
|
747
|
+
// Phase 219 detector (SENS-14 -- opportunity-harvest -> qualification-card offer on context_block):
|
|
748
|
+
sensorOpportunityHarvest,
|
|
749
|
+
// Phase 220 detector (SENS-15 -- pasted URL -> deep_research url-ingest offer):
|
|
750
|
+
sensorUrlIngest,
|
|
751
|
+
// Phase 244 Plan 05 detector (SENS-16 -- content-relevance -> context_block offer, TRIG-01):
|
|
752
|
+
sensorContentRelevance,
|
|
753
|
+
// Phase 245 Plan 06 detector (SENS-17 -- perspective-lock -> the hats reach, REQ-3):
|
|
754
|
+
sensorPerspectiveLock,
|
|
755
|
+
// Phase 264 detector (SENS-18 -- roadmap-type -> context_block roadmap-type-selector offer, R1):
|
|
756
|
+
sensorRoadmapType,
|
|
757
|
+
];
|
|
758
|
+
|
|
759
|
+
// ---------- Phase 245-01 (D-21): the parallel sensor IDENTITY array ----------
|
|
760
|
+
//
|
|
761
|
+
// SENSOR_REGISTRY_IDS[i] is the self-declared sensor id of SENSOR_REGISTRY[i].
|
|
762
|
+
// The two arrays are INDEX-PARALLEL: element for element, same order, same
|
|
763
|
+
// length. Registering a new sensor means appending to BOTH arrays, in the same
|
|
764
|
+
// position, in the same commit.
|
|
765
|
+
//
|
|
766
|
+
// LOCKSTEP IS ENFORCED, NOT REQUESTED. Two independent gates fail closed the
|
|
767
|
+
// moment these arrays (or this array and the SENS_PRIORITY doctrine table)
|
|
768
|
+
// diverge:
|
|
769
|
+
// - `node scripts/build-connector-registry.cjs --check` (the build gate)
|
|
770
|
+
// - `node tests/test-245-priority-complete.cjs` (the test-time pin)
|
|
771
|
+
// So a sensor added to SENSOR_REGISTRY alone, or added here without a
|
|
772
|
+
// SENS_PRIORITY entry, reddens the build rather than silently degrading to
|
|
773
|
+
// file order (Canon Part 11 R1/R2: born wired or born excluded, never dark).
|
|
774
|
+
//
|
|
775
|
+
// NON-NUMERIC IDS ARE REAL: 'SENS-RECENCY' (sensor-recency.cjs, Phase 160-03)
|
|
776
|
+
// and 'SENS-SHOW' (sensor-show-share.cjs, Phase 173) are the ids those two
|
|
777
|
+
// sensors actually self-declare. They are not placeholders; do not renumber.
|
|
778
|
+
//
|
|
779
|
+
// Canon Part 8: every element is a literal in-repo constant. Nothing here is
|
|
780
|
+
// derived from turn text, room content, or any user-suppliable value.
|
|
781
|
+
const SENSOR_REGISTRY_IDS = Object.freeze([
|
|
782
|
+
'SENS-01', // sensorFirstMaterial
|
|
783
|
+
'SENS-06', // sensorArtifactFiled
|
|
784
|
+
'SENS-02', // sensorLaggingComponent
|
|
785
|
+
'SENS-03', // sensorMethodologyDecision
|
|
786
|
+
'SENS-07', // sensorGateApproach
|
|
787
|
+
'SENS-04', // sensorExternalFact
|
|
788
|
+
'SENS-05', // sensorJtbdReweight
|
|
789
|
+
'SENS-08', // sensorMemoryCortex
|
|
790
|
+
'SENS-RECENCY', // sensorRecency
|
|
791
|
+
'SENS-09', // sensorDiffusionAdoption
|
|
792
|
+
'SENS-SHOW', // sensorShowShare
|
|
793
|
+
'SENS-10', // sensorCircularity
|
|
794
|
+
'SENS-11', // sensorExpertSkill
|
|
795
|
+
'SENS-12', // sensorRoomPick
|
|
796
|
+
'SENS-13', // sensorEureka
|
|
797
|
+
'SENS-14', // sensorOpportunityHarvest
|
|
798
|
+
'SENS-15', // sensorUrlIngest
|
|
799
|
+
'SENS-16', // sensorContentRelevance
|
|
800
|
+
'SENS-17', // sensorPerspectiveLock
|
|
801
|
+
'SENS-18', // sensorRoadmapType
|
|
802
|
+
]);
|
|
803
|
+
|
|
804
|
+
// ---------- Phase 245-01 (D-21): the central sensor_id stamp ----------
|
|
805
|
+
|
|
806
|
+
/**
|
|
807
|
+
* Rebuild a fired reach with `evidence.sensor_id` set to the registry identity
|
|
808
|
+
* of the sensor that produced it. Returns the ORIGINAL reach unchanged on any
|
|
809
|
+
* fault (soft-fail discipline: a stamp failure must never drop a reach that
|
|
810
|
+
* already passed the membership and turn-stage gates).
|
|
811
|
+
*
|
|
812
|
+
* WHY ONE CENTRAL STAMP RATHER THAN 18 PER-SENSOR EDITS. D-21 describes the
|
|
813
|
+
* stamp as "a Part-8-safe one-line add per sensor". This delivers the identical
|
|
814
|
+
* OBSERVABLE outcome through a single seam, deliberately. This repo has already
|
|
815
|
+
* been bitten twice by hand-maintained parallel sensor declarations drifting
|
|
816
|
+
* out of sync with reality: D-15 found three commands falsely declaring SENS-05
|
|
817
|
+
* for the `hats` reach, and 245-RESEARCH.md F-3 found `sensor_index` missing
|
|
818
|
+
* four real sensors because it only ever read the command side. A per-sensor
|
|
819
|
+
* stamp is eighteen more places to forget. A central stamp makes it
|
|
820
|
+
* STRUCTURALLY IMPOSSIBLE for a newly registered sensor to ship unstamped,
|
|
821
|
+
* which is exactly the invariant the Task 3 fail-closed gate needs to be able
|
|
822
|
+
* to assume. Canon Part 7: one mechanism, not eighteen.
|
|
823
|
+
*
|
|
824
|
+
* Canon Part 8: the stamped value is read from the frozen in-repo
|
|
825
|
+
* SENSOR_REGISTRY_IDS literal only. It is never derived from turn text, room
|
|
826
|
+
* content, or any user-suppliable value. The rebuild goes through makeReach, so
|
|
827
|
+
* the result stays a deeply frozen flat scalar bag (makeReach drops
|
|
828
|
+
* non-primitives and re-freezes); the frozen input reach is never mutated.
|
|
829
|
+
*
|
|
830
|
+
* @param {object} reach -- a frozen candidate reach that already passed the gates
|
|
831
|
+
* @param {number} i -- its producing sensor's SENSOR_REGISTRY index
|
|
832
|
+
* @returns {object} the stamped reach, or the original on any fault
|
|
833
|
+
*/
|
|
834
|
+
function stampSensorId(reach, i) {
|
|
835
|
+
const sensorId = SENSOR_REGISTRY_IDS[i];
|
|
836
|
+
if (typeof sensorId !== 'string' || sensorId === '') return reach;
|
|
837
|
+
|
|
838
|
+
const evidence = {};
|
|
839
|
+
if (reach.evidence && typeof reach.evidence === 'object' && !Array.isArray(reach.evidence)) {
|
|
840
|
+
for (const k of Object.keys(reach.evidence)) evidence[k] = reach.evidence[k];
|
|
841
|
+
}
|
|
842
|
+
evidence.sensor_id = sensorId;
|
|
843
|
+
|
|
844
|
+
const stamped = makeReach({
|
|
845
|
+
reach_id: reach.reach_id,
|
|
846
|
+
posture: reach.posture,
|
|
847
|
+
dispatch: reach.dispatch,
|
|
848
|
+
companions: reach.companions,
|
|
849
|
+
signal: reach.signal,
|
|
850
|
+
evidence: evidence,
|
|
851
|
+
});
|
|
852
|
+
// A null rebuild (should be unreachable -- the reach already validated) must
|
|
853
|
+
// not cost us a reach that legitimately fired.
|
|
854
|
+
return stamped || reach;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
// ---------- dispatchSensors: the pure chokepoint ----------
|
|
858
|
+
|
|
859
|
+
/**
|
|
860
|
+
* Run every registered sensor in canonical order and collect the non-null
|
|
861
|
+
* candidate reaches. Pure / sync / LOCAL-first. Never throws on malformed
|
|
862
|
+
* input -- a sensor that throws is treated as "did not fire" (soft-fail to
|
|
863
|
+
* null), so one bad sensor cannot poison the dispatch.
|
|
864
|
+
*
|
|
865
|
+
* This function NEVER mutates routing_source and NEVER calls decide()
|
|
866
|
+
* (Phase 144 fence). It only PRODUCES candidate reaches.
|
|
867
|
+
*
|
|
868
|
+
* @param {object} turn -- the turn signal bag
|
|
869
|
+
* @param {object} tuple -- the /mos:diagnose { problem_type, complexity, stage }
|
|
870
|
+
* @param {object} ctx -- LOCAL context
|
|
871
|
+
* @returns {Array<object>} candidate reaches (possibly empty)
|
|
872
|
+
*/
|
|
873
|
+
function dispatchSensors(turn, tuple, ctx) {
|
|
874
|
+
// Phase 150.5 one-seam normalization: normalize ONCE at entry so EVERY
|
|
875
|
+
// sensor sees the production turn shape repaired (text aliased from
|
|
876
|
+
// userText; signals derived from the two shipped side-channels and merged
|
|
877
|
+
// additively). A normalization fault degrades to the raw turn (soft-fail
|
|
878
|
+
// discipline). normalizeTurn returns a copy -- the caller's turn is never
|
|
879
|
+
// mutated (the D-03a structural guarantee).
|
|
880
|
+
let normalized = turn;
|
|
881
|
+
try {
|
|
882
|
+
// Phase 172-07: tuple is threaded so normalizeTurn can record the trigger
|
|
883
|
+
// TIER (context problem-state first, keyword fallback) on the copy.
|
|
884
|
+
normalized = normalizeTurn(turn, ctx, tuple);
|
|
885
|
+
} catch (_e) {
|
|
886
|
+
normalized = turn; // soft-fail: degrade to the raw turn
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
// BCH-S5 turn-stage eligibility: read the runtime turn_count once (off the
|
|
890
|
+
// normalized turn / ctx -- the same counter BCH-S1 established). A reach whose
|
|
891
|
+
// id is turn-stage-ineligible this turn is FILTERED out of the dispatch result
|
|
892
|
+
// (the emitted reaches only -- trace.routing_source is NEVER mutated here, the
|
|
893
|
+
// Phase 144 fence at :20 holds). When turn_count is absent the gate is a no-op
|
|
894
|
+
// (isReachEligibleForTurn returns true), so legacy callers stay byte-stable.
|
|
895
|
+
const turnCount = turnCountOf(normalized, ctx);
|
|
896
|
+
|
|
897
|
+
const out = [];
|
|
898
|
+
for (let i = 0; i < SENSOR_REGISTRY.length; i++) {
|
|
899
|
+
const sensor = SENSOR_REGISTRY[i];
|
|
900
|
+
if (typeof sensor !== 'function') continue;
|
|
901
|
+
let reach = null;
|
|
902
|
+
try {
|
|
903
|
+
reach = sensor(normalized, tuple, ctx);
|
|
904
|
+
} catch (_e) {
|
|
905
|
+
reach = null; // soft-fail: a throwing sensor did not fire
|
|
906
|
+
}
|
|
907
|
+
if (reach && typeof reach === 'object' && REACH_IDS.indexOf(reach.reach_id) !== -1) {
|
|
908
|
+
// Drop a turn-stage-ineligible reach (brain_consult / deep_research in
|
|
909
|
+
// turns 1-2). Eligibility-gating over the frozen set -- NOT removing a
|
|
910
|
+
// reach from the bank.
|
|
911
|
+
if (!isReachEligibleForTurn(reach.reach_id, turnCount)) continue;
|
|
912
|
+
out.push(stampSensorId(reach, i));
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
return out;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
module.exports = {
|
|
919
|
+
dispatchSensors: dispatchSensors,
|
|
920
|
+
SENSOR_REGISTRY: SENSOR_REGISTRY,
|
|
921
|
+
// Phase 245-01 (D-21): the index-parallel sensor identity array. Exported so
|
|
922
|
+
// the fail-closed --check gate and the phase tests can enumerate the SENSOR
|
|
923
|
+
// side of the registry (245-RESEARCH.md F-3: sensor_index is built from
|
|
924
|
+
// command frontmatter and cannot stand in for this).
|
|
925
|
+
SENSOR_REGISTRY_IDS: SENSOR_REGISTRY_IDS,
|
|
926
|
+
REACH_IDS: REACH_IDS,
|
|
927
|
+
POSTURE_IDS: POSTURE_IDS,
|
|
928
|
+
// Sensor functions (the two shipped-substrate sensors; exported for the
|
|
929
|
+
// must_haves contract + downstream registration).
|
|
930
|
+
sensorFirstMaterial: sensorFirstMaterial,
|
|
931
|
+
sensorArtifactFiled: sensorArtifactFiled,
|
|
932
|
+
// Plan 02 detectors:
|
|
933
|
+
sensorLaggingComponent: sensorLaggingComponent,
|
|
934
|
+
sensorMethodologyDecision: sensorMethodologyDecision,
|
|
935
|
+
sensorGateApproach: sensorGateApproach,
|
|
936
|
+
// Plan 03 detectors:
|
|
937
|
+
sensorExternalFact: sensorExternalFact,
|
|
938
|
+
sensorJtbdReweight: sensorJtbdReweight,
|
|
939
|
+
// Phase 150-05 detector:
|
|
940
|
+
sensorMemoryCortex: sensorMemoryCortex,
|
|
941
|
+
// Phase 160-03 detector (R6):
|
|
942
|
+
sensorRecency: sensorRecency,
|
|
943
|
+
// Phase 170 detector (SENS-09 -- dual-use diffusion/adoption):
|
|
944
|
+
sensorDiffusionAdoption: sensorDiffusionAdoption,
|
|
945
|
+
// Phase 173 detector (SENS-SHOW -- show/share intent -> /mos:show selector):
|
|
946
|
+
sensorShowShare: sensorShowShare,
|
|
947
|
+
// Phase 205 detector (SENS-10 -- circularity -> four-cause/four-exit gear-shift):
|
|
948
|
+
sensorCircularity: sensorCircularity,
|
|
949
|
+
// Phase 203-03 detector (SENS-11 -- reusable-expert -> save-as-skill offer):
|
|
950
|
+
sensorExpertSkill: sensorExpertSkill,
|
|
951
|
+
// Phase 209-05 detector (SENS-12 -- room-pick fork -> room-chooser card).
|
|
952
|
+
// Phase 245-01: it was registered in SENSOR_REGISTRY but absent from this
|
|
953
|
+
// exports block, a pre-existing gap that made the registry harder to reason
|
|
954
|
+
// about from the outside. Exported now so every registry member is reachable
|
|
955
|
+
// by name, matching what the identity array above claims.
|
|
956
|
+
sensorRoomPick: sensorRoomPick,
|
|
957
|
+
// Phase 213 detector (SENS-13 -- eureka bridge -> deep_research offer):
|
|
958
|
+
sensorEureka: sensorEureka,
|
|
959
|
+
// Phase 219 detector (SENS-14 -- opportunity-harvest -> qualification-card offer on context_block):
|
|
960
|
+
sensorOpportunityHarvest: sensorOpportunityHarvest,
|
|
961
|
+
// Phase 220 detector (SENS-15 -- pasted URL -> deep_research url-ingest offer):
|
|
962
|
+
sensorUrlIngest: sensorUrlIngest,
|
|
963
|
+
// Phase 244 Plan 05 detector (SENS-16 -- content-relevance -> context_block offer, TRIG-01):
|
|
964
|
+
sensorContentRelevance: sensorContentRelevance,
|
|
965
|
+
// Phase 245 Plan 06 detector (SENS-17 -- perspective-lock -> the hats reach, REQ-3):
|
|
966
|
+
sensorPerspectiveLock: sensorPerspectiveLock,
|
|
967
|
+
// Phase 264 detector (SENS-18 -- roadmap-type -> context_block roadmap-type-selector offer, R1):
|
|
968
|
+
sensorRoadmapType: sensorRoadmapType,
|
|
969
|
+
// Shared LOCAL helpers (exposed for the Task-2 sensors + tests).
|
|
970
|
+
makeReach: makeReach,
|
|
971
|
+
readJsonSafe: readJsonSafe,
|
|
972
|
+
hasSignal: hasSignal,
|
|
973
|
+
problemTypeOf: problemTypeOf,
|
|
974
|
+
// Phase 150.5 one-seam normalization (SENS-FIX-01):
|
|
975
|
+
normalizeTurn: normalizeTurn,
|
|
976
|
+
deriveTurnSignals: deriveTurnSignals,
|
|
977
|
+
SIGNAL_FRESHNESS_MS: SIGNAL_FRESHNESS_MS,
|
|
978
|
+
// Phase 237-04 (REACH-03): the shared fail-open ownership filter both
|
|
979
|
+
// last-cascade.json readers (deriveTurnSignals + sensorArtifactFiled) use.
|
|
980
|
+
// Exported so the four known-unscoped markers (last-eureka.json,
|
|
981
|
+
// last-opportunity-harvest.json, url-ingest-ledger.json, the diffusion
|
|
982
|
+
// marker scan) can adopt it later without a second mechanism.
|
|
983
|
+
isMarkerOwnedByCaller: isMarkerOwnedByCaller,
|
|
984
|
+
// Phase 177-04 (BCH-S5): turn-stage reach-eligibility -- suppress
|
|
985
|
+
// brain_consult / deep_research in turns 1-2, unlock at turn 5. No 7th reach.
|
|
986
|
+
isReachEligibleForTurn: isReachEligibleForTurn,
|
|
987
|
+
TURN_STAGE_GATED_REACHES: TURN_STAGE_GATED_REACHES,
|
|
988
|
+
TURN_STAGE_UNLOCK_AT: TURN_STAGE_UNLOCK_AT,
|
|
989
|
+
// Phase 177-04 (BCH-S4a): saturation by turn-count + node-delta -- the
|
|
990
|
+
// "turn 8+, no new nodes" deterministic signal (no reach, no cue).
|
|
991
|
+
isSaturated: isSaturated,
|
|
992
|
+
SATURATION_TURN_FLOOR: SATURATION_TURN_FLOOR,
|
|
993
|
+
// Phase 172-07 (R3 / INV-07): the trigger-tier model -- context problem-state
|
|
994
|
+
// first, keyword fallback. Re-exported so the dispatch surface exposes the
|
|
995
|
+
// tiering classifiers + the closed ordered tier vocabulary.
|
|
996
|
+
TRIGGER_TIERS: TRIGGER_TIERS,
|
|
997
|
+
classifyTriggerTier: classifyTriggerTier,
|
|
998
|
+
readProblemStateEnum: readProblemStateEnum,
|
|
999
|
+
isContextTier: isContextTier,
|
|
1000
|
+
};
|