@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,968 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
4
|
+
*
|
|
5
|
+
* Phase 267.2 W1b/W1d -- scripts/first-install-router.cjs (HOOK-08)
|
|
6
|
+
*
|
|
7
|
+
* The deterministic UserPromptSubmit hook that owns the first-install
|
|
8
|
+
* first-contact moment. Repairs the 267.1 audit's central finding (the
|
|
9
|
+
* Reward and Investment legs were asserted in prose and never wired) by
|
|
10
|
+
* moving the ROUTING DECISION off prose and onto this hook. Only the verb
|
|
11
|
+
* that must be model-executed -- invoking /mos:ignite -- stays as prose,
|
|
12
|
+
* because no hook can invoke a slash command (see the `ignite` branch of
|
|
13
|
+
* _buildAdditionalContext below, and the Architectural Responsibility Map
|
|
14
|
+
* this plan's own research names).
|
|
15
|
+
*
|
|
16
|
+
* Cloned in SHAPE from scripts/mva-detect.cjs (the right hook-shape target
|
|
17
|
+
* per 267.2-PATTERNS.md A2) and scripts/check-pending-breakthrough.cjs (the
|
|
18
|
+
* cleanest in-repo emitContinue/emitContinueWithContext pair). Deliberately
|
|
19
|
+
* NOT cloned from scripts/intent-classifier.cjs: that file is 3400+ lines
|
|
20
|
+
* carrying seven unrelated concerns and is useful here only as corroboration
|
|
21
|
+
* that the additionalContext envelope works in production.
|
|
22
|
+
*
|
|
23
|
+
* NON-NEGOTIABLE INVARIANT, shared by all three exemplar hooks: THIS HOOK
|
|
24
|
+
* NEVER BLOCKS AND NEVER EXITS NON-ZERO. Every filesystem and spawn call is
|
|
25
|
+
* wrapped so any failure degrades to {continue:true} + exit 0, and the
|
|
26
|
+
* top-level uncaughtException handler below is the last-resort net.
|
|
27
|
+
*
|
|
28
|
+
* State machine (declared here, frozen, exported for the two plans that
|
|
29
|
+
* extend it -- this plan implements armed -> routed only):
|
|
30
|
+
* armed -> routed -> reward_pending -> reward_delivered -> investment_asked -> done
|
|
31
|
+
* 'reward_pending'/'reward_delivered' are written by plan 267.2-07.
|
|
32
|
+
* 'investment_asked'/'done' are written by plan 267.2-09.
|
|
33
|
+
*
|
|
34
|
+
* ONE-SHOT GATE (Pitfall 3 mitigation, research 267.2-RESEARCH.md): the
|
|
35
|
+
* onboarding marker (~/.mindrian-onboarded, read via scripts/check-onboard)
|
|
36
|
+
* is read EXACTLY ONCE, at arm time, and only when this router's own
|
|
37
|
+
* state.json does not yet exist. `check-onboard --write` is itself a prose
|
|
38
|
+
* instruction the model may run between turns -- reading the marker a
|
|
39
|
+
* second time would let that mid-flow write silently disarm the router.
|
|
40
|
+
* After arming, this router's own state.json is the sole authority.
|
|
41
|
+
*
|
|
42
|
+
* Tri-Polar gap (decision D-K, stated not hidden): this hook fires on Claude
|
|
43
|
+
* Code CLI only. Claude Desktop and Cowork do not run hooks/hooks.json, so
|
|
44
|
+
* on those two surfaces the router is model-invoked and carries the same
|
|
45
|
+
* model-compliance exposure the 267.1 audit scored -- a deliberate recorded
|
|
46
|
+
* call, not an oversight. The classifier this router calls lives in
|
|
47
|
+
* lib/core/ (not scripts/) precisely so one implementation can also serve a
|
|
48
|
+
* future MCP handler on Desktop/Cowork.
|
|
49
|
+
*
|
|
50
|
+
* Plan 267.2-07 (HOOK-07) extends the state machine with the reward legs:
|
|
51
|
+
* routed -> reward_pending -> reward_delivered. Decision D-D fixes the
|
|
52
|
+
* architecture: this hook NEVER calls the MVA orchestrator module's
|
|
53
|
+
* runPipeline inline -- runPipeline dispatches through a 45s global / 35s
|
|
54
|
+
* per-agent budget (lib/core/mva-dispatcher.cjs's binding decision B2),
|
|
55
|
+
* measured at up to 5337ms on the fresh-install no-key path (267.2-01),
|
|
56
|
+
* against a 3000ms hook ceiling. Instead this hook fires
|
|
57
|
+
* scripts/mva-run.cjs as a DETACHED, unref-ed child with its stdout
|
|
58
|
+
* captured to a file, exactly the shape scripts/brain-derivation-drain.cjs
|
|
59
|
+
* documents in its own header, and drains the captured render on a LATER
|
|
60
|
+
* turn. Honest residual, stated not hidden: the reward is delivered by
|
|
61
|
+
* machinery rather than by a prose promise (closing GAP R-1), but it lands
|
|
62
|
+
* one turn after the sentence that triggers it, not the same turn.
|
|
63
|
+
*
|
|
64
|
+
* Canon Part 8 discipline (copied verbatim in spirit from
|
|
65
|
+
* scripts/mva-detect.cjs:25-29): the raw prompt lives ONLY in the in-memory
|
|
66
|
+
* `prompt` variable for the classification call; it is never written to
|
|
67
|
+
* state.json, never written to telemetry, never logged. Telemetry carries
|
|
68
|
+
* sha256(prompt) as the largest string it ever writes.
|
|
69
|
+
*
|
|
70
|
+
* Absolutely forbidden in this file, per CONTEXT.md D-07: reading the
|
|
71
|
+
* Anthropic, Tavily, or Brain key env vars, or requiring the Brain client
|
|
72
|
+
* chokepoint (lib/core/brain-client.cjs) or its lower-level MCP client
|
|
73
|
+
* (bin/mindrian-brain-mcp-client.cjs). This router needs none of them --
|
|
74
|
+
* classification is local, and the only downstream verb (/mos:ignite) is
|
|
75
|
+
* left to the model, not called from here.
|
|
76
|
+
*
|
|
77
|
+
* Pure CJS, node built-ins only.
|
|
78
|
+
*/
|
|
79
|
+
'use strict';
|
|
80
|
+
|
|
81
|
+
const fs = require('node:fs');
|
|
82
|
+
const os = require('node:os');
|
|
83
|
+
const path = require('node:path');
|
|
84
|
+
const crypto = require('node:crypto');
|
|
85
|
+
const { spawnSync, spawn } = require('node:child_process');
|
|
86
|
+
|
|
87
|
+
const HOOK_EVENT_NAME = 'UserPromptSubmit';
|
|
88
|
+
const STDIN_TIMEOUT_MS = 200;
|
|
89
|
+
const CHECK_ONBOARD_TIMEOUT_MS = 400;
|
|
90
|
+
|
|
91
|
+
// The frozen phase sequence. Advanced in this order and never skipped. This
|
|
92
|
+
// plan writes 'armed' and 'routed' only; the remaining four phases are
|
|
93
|
+
// declared here so plans 267.2-07 and 267.2-09 extend this array's meaning
|
|
94
|
+
// rather than redefining it.
|
|
95
|
+
const PHASES = Object.freeze([
|
|
96
|
+
'armed',
|
|
97
|
+
'routed',
|
|
98
|
+
'reward_pending',
|
|
99
|
+
'reward_delivered',
|
|
100
|
+
'investment_asked',
|
|
101
|
+
'done',
|
|
102
|
+
]);
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Pure state-transition predicate: true only when `toPhase` is the single
|
|
106
|
+
* next phase after `fromPhase` in PHASES. No I/O. Exported so tests (this
|
|
107
|
+
* plan's and the two that follow it) can drive the machine without
|
|
108
|
+
* spawning the hook as a child process.
|
|
109
|
+
*
|
|
110
|
+
* WR-04 (267.2-REVIEW.md): this predicate is NOT called anywhere in main()'s
|
|
111
|
+
* dispatch chain below. The actual enforcement that a phase can only be
|
|
112
|
+
* reached from its one legal predecessor is provided by construction of
|
|
113
|
+
* main()'s own if/else chain (each branch reads one specific existing phase
|
|
114
|
+
* and writes one specific next phase), not by this function. Do not credit
|
|
115
|
+
* this function with an enforcement guarantee it does not provide; it is
|
|
116
|
+
* a test-driving convenience only, until (if ever) it is wired into main()
|
|
117
|
+
* as a defense-in-depth guard.
|
|
118
|
+
* @param {string} fromPhase
|
|
119
|
+
* @param {string} toPhase
|
|
120
|
+
* @returns {boolean}
|
|
121
|
+
*/
|
|
122
|
+
function isValidTransition(fromPhase, toPhase) {
|
|
123
|
+
const fromIdx = PHASES.indexOf(fromPhase);
|
|
124
|
+
const toIdx = PHASES.indexOf(toPhase);
|
|
125
|
+
if (fromIdx === -1 || toIdx === -1) return false;
|
|
126
|
+
return toIdx === fromIdx + 1;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ---------- Home resolution (called at CALL time, never module scope) ----------
|
|
130
|
+
// research Pitfall 6 / threat T-270-13: a module-scope constant would bind
|
|
131
|
+
// the real developer HOME for the rest of the process, breaking any
|
|
132
|
+
// isolated-HOME test fixture that overrides HOME after this file loads.
|
|
133
|
+
|
|
134
|
+
function homeDir() {
|
|
135
|
+
return process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function firstInstallDir() {
|
|
139
|
+
return path.join(homeDir(), '.mindrian', 'first-install');
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function stateFilePath() {
|
|
143
|
+
return path.join(firstInstallDir(), 'state.json');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function telemetryDir() {
|
|
147
|
+
return path.join(homeDir(), '.mindrian', 'telemetry', 'v1.13');
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function telemetryFilePath() {
|
|
151
|
+
return path.join(telemetryDir(), 'first-install-router.jsonl');
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ---------- Envelope helpers (mirrors mva-detect.cjs / check-pending-breakthrough.cjs) ----------
|
|
155
|
+
|
|
156
|
+
const ENVELOPE_ALLOWED = new Set([
|
|
157
|
+
'decision', 'reason', 'continue', 'stopReason',
|
|
158
|
+
'suppressOutput', 'systemMessage', 'hookSpecificOutput',
|
|
159
|
+
]);
|
|
160
|
+
|
|
161
|
+
function emitEnvelope(envelope) {
|
|
162
|
+
const filtered = {};
|
|
163
|
+
for (const k of Object.keys(envelope || {})) {
|
|
164
|
+
if (ENVELOPE_ALLOWED.has(k)) filtered[k] = envelope[k];
|
|
165
|
+
}
|
|
166
|
+
if (filtered.continue === undefined) filtered.continue = true;
|
|
167
|
+
try { process.stdout.write(JSON.stringify(filtered)); } catch (_e) { /* swallow */ }
|
|
168
|
+
process.exit(0);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function emitEmpty() {
|
|
172
|
+
emitEnvelope({ continue: true });
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function emitContinueWithContext(additionalContext) {
|
|
176
|
+
emitEnvelope({
|
|
177
|
+
continue: true,
|
|
178
|
+
hookSpecificOutput: {
|
|
179
|
+
hookEventName: HOOK_EVENT_NAME,
|
|
180
|
+
additionalContext: additionalContext,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
process.on('uncaughtException', () => {
|
|
186
|
+
try { emitEmpty(); } catch (_e) { process.exit(0); }
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
// ---------- Stdin read (200ms budget; mirrors mva-detect.cjs) ----------
|
|
190
|
+
|
|
191
|
+
function readStdinSync() {
|
|
192
|
+
try {
|
|
193
|
+
if (process.stdin.isTTY) return null;
|
|
194
|
+
const buf = fs.readFileSync(0);
|
|
195
|
+
const s = buf.toString('utf8');
|
|
196
|
+
return s.length > 0 ? s : null;
|
|
197
|
+
} catch (_e) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function safeParseJSON(raw) {
|
|
203
|
+
if (!raw) return null;
|
|
204
|
+
try {
|
|
205
|
+
return JSON.parse(raw);
|
|
206
|
+
} catch (_e) {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// ---------- State I/O (atomic write, mirrors lib/core/mva-state.cjs's pattern) ----------
|
|
212
|
+
|
|
213
|
+
function _readState() {
|
|
214
|
+
try {
|
|
215
|
+
const raw = fs.readFileSync(stateFilePath(), 'utf8');
|
|
216
|
+
return JSON.parse(raw);
|
|
217
|
+
} catch (_e) {
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function _atomicWriteState(obj) {
|
|
223
|
+
try {
|
|
224
|
+
fs.mkdirSync(firstInstallDir(), { recursive: true });
|
|
225
|
+
const target = stateFilePath();
|
|
226
|
+
const tmp = target + '.tmp.' + process.pid + '.' + Math.random().toString(36).slice(2, 10);
|
|
227
|
+
fs.writeFileSync(tmp, JSON.stringify(obj), 'utf8');
|
|
228
|
+
fs.renameSync(tmp, target);
|
|
229
|
+
return true;
|
|
230
|
+
} catch (_e) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// ---------- Telemetry (append-only, scalar-only; mirrors mva-detect.cjs) ----------
|
|
236
|
+
|
|
237
|
+
function _appendTelemetry(record) {
|
|
238
|
+
try {
|
|
239
|
+
fs.mkdirSync(telemetryDir(), { recursive: true });
|
|
240
|
+
} catch (_e) { /* best effort */ }
|
|
241
|
+
try {
|
|
242
|
+
fs.appendFileSync(telemetryFilePath(), JSON.stringify(record) + '\n', 'utf8');
|
|
243
|
+
} catch (_e) { /* best effort -- a telemetry failure never affects the envelope */ }
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// ---------- The one-shot marker read (exactly once, at arm time only) ----------
|
|
247
|
+
|
|
248
|
+
function _checkOnboardStatus() {
|
|
249
|
+
try {
|
|
250
|
+
const checkOnboardPath = path.join(__dirname, 'check-onboard');
|
|
251
|
+
const result = spawnSync('bash', [checkOnboardPath], {
|
|
252
|
+
timeout: CHECK_ONBOARD_TIMEOUT_MS,
|
|
253
|
+
encoding: 'utf8',
|
|
254
|
+
env: process.env,
|
|
255
|
+
});
|
|
256
|
+
if (!result || result.error || typeof result.stdout !== 'string') return null;
|
|
257
|
+
const firstLine = result.stdout.split('\n')[0].trim();
|
|
258
|
+
return firstLine;
|
|
259
|
+
} catch (_e) {
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// ---------- rooms_home_exists / active_room_bound proxies (mirrors mva-detect.cjs's resolveActiveRoomDir) ----------
|
|
265
|
+
|
|
266
|
+
function _resolveRoomsHome() {
|
|
267
|
+
try {
|
|
268
|
+
if (process.env.MINDRIAN_ROOMS_HOME && fs.existsSync(process.env.MINDRIAN_ROOMS_HOME)) {
|
|
269
|
+
return process.env.MINDRIAN_ROOMS_HOME;
|
|
270
|
+
}
|
|
271
|
+
const defaultHome = path.join(homeDir(), 'MindrianRooms');
|
|
272
|
+
if (fs.existsSync(defaultHome)) return defaultHome;
|
|
273
|
+
} catch (_e) { /* graceful */ }
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function _roomsHomeExists() {
|
|
278
|
+
return !!_resolveRoomsHome();
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function _activeRoomBound() {
|
|
282
|
+
try {
|
|
283
|
+
const roomsHome = _resolveRoomsHome();
|
|
284
|
+
if (!roomsHome) return false;
|
|
285
|
+
const regPath = path.join(roomsHome, '.rooms', 'registry.json');
|
|
286
|
+
if (!fs.existsSync(regPath)) return false;
|
|
287
|
+
const reg = JSON.parse(fs.readFileSync(regPath, 'utf8'));
|
|
288
|
+
if (reg && typeof reg.active === 'string' && reg.active.length > 0) {
|
|
289
|
+
return fs.existsSync(path.join(roomsHome, reg.active));
|
|
290
|
+
}
|
|
291
|
+
} catch (_e) { /* graceful */ }
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// ---------- additionalContext payloads (the ONLY leg that stays prose) ----------
|
|
296
|
+
|
|
297
|
+
function _buildAdditionalContext(bucket, outcome) {
|
|
298
|
+
if (outcome === 'ignite') {
|
|
299
|
+
// The one verb that must stay prose: no hook can invoke a slash command.
|
|
300
|
+
// Do not "fix" this by trying to spawn /mos:ignite from here -- see the
|
|
301
|
+
// Architectural Responsibility Map (267.2-RESEARCH.md).
|
|
302
|
+
return '[first-install-router] bucket=' + bucket + ' outcome=ignite. '
|
|
303
|
+
+ 'Open with a short Larry greeting carrying exactly one De Stijl glyph '
|
|
304
|
+
+ '(Canon Part 12), then invoke /mos:ignite. This is the one leg of the '
|
|
305
|
+
+ 'first-install flow that stays prose by design: no hook can invoke a '
|
|
306
|
+
+ 'slash command, so the model executes this verb while this router '
|
|
307
|
+
+ 'already made the decision that led here.';
|
|
308
|
+
}
|
|
309
|
+
if (outcome === 'clarify') {
|
|
310
|
+
// Phrased as a named-choice question, never yes/no: a yes/no-shaped gate
|
|
311
|
+
// falls into check-card-fire.cjs's isYesNoShapedGate exemption and is
|
|
312
|
+
// never force-fired (research Pitfall 4).
|
|
313
|
+
return '[first-install-router] bucket=' + bucket + ' outcome=clarify. '
|
|
314
|
+
+ 'The user referenced prior work. Ask exactly ONE clarifying exchange '
|
|
315
|
+
+ 'about what the prior work is and where it lives, phrased as a '
|
|
316
|
+
+ 'NAMED-CHOICE question, never a yes/no question -- a yes/no-shaped '
|
|
317
|
+
+ 'gate is exempt from force-fire and is never enforced. Do not proceed '
|
|
318
|
+
+ 'past this one clarifying exchange without the user\'s answer.';
|
|
319
|
+
}
|
|
320
|
+
// outcome === 'larry' (bucket is just_talk or ambiguous)
|
|
321
|
+
return '[first-install-router] bucket=' + bucket + ' outcome=larry. '
|
|
322
|
+
+ 'Continue as plain Larry conversation. Do NOT render a menu or a '
|
|
323
|
+
+ 'command list -- the reward-before-investment rule requires a real '
|
|
324
|
+
+ 'reward to land before any investment ask, and a menu this early is '
|
|
325
|
+
+ 'itself an investment ask.';
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// ---------- The armed turn: classify, route, transition to 'routed' ----------
|
|
329
|
+
|
|
330
|
+
function _classifyAndRoute(state, prompt, t0) {
|
|
331
|
+
let bucket = 'ambiguous';
|
|
332
|
+
let outcome = 'larry';
|
|
333
|
+
let classification = null;
|
|
334
|
+
try {
|
|
335
|
+
const detector = require('../lib/core/greeting-intent-detector.cjs');
|
|
336
|
+
classification = detector.classify(prompt);
|
|
337
|
+
bucket = classification.bucket;
|
|
338
|
+
outcome = detector.route(bucket);
|
|
339
|
+
} catch (_e) {
|
|
340
|
+
// degrade to the safe ambiguous/larry defaults already set above
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// WR-02 (267.2-REVIEW.md): computed here, before the state write, so it can be PERSISTED
|
|
344
|
+
// onto state.json (not just telemetry) -- _fireReward needs this to correlate against
|
|
345
|
+
// lib/core/mva-state.cjs's pending record at fire time, several turns later.
|
|
346
|
+
const sentenceSha = (typeof prompt === 'string' && prompt.length > 0)
|
|
347
|
+
? crypto.createHash('sha256').update(prompt, 'utf8').digest('hex')
|
|
348
|
+
: null;
|
|
349
|
+
|
|
350
|
+
const routedAtMs = Date.now();
|
|
351
|
+
const routedState = Object.assign({}, state, {
|
|
352
|
+
phase: 'routed',
|
|
353
|
+
routed_at_ms: routedAtMs,
|
|
354
|
+
bucket: bucket,
|
|
355
|
+
outcome: outcome,
|
|
356
|
+
sentence_sha256: sentenceSha,
|
|
357
|
+
});
|
|
358
|
+
_atomicWriteState(routedState);
|
|
359
|
+
|
|
360
|
+
try {
|
|
361
|
+
const features = (classification && classification.features) ? classification.features : {};
|
|
362
|
+
_appendTelemetry({
|
|
363
|
+
schema_version: 1,
|
|
364
|
+
event: 'routed',
|
|
365
|
+
ts_ms: routedAtMs,
|
|
366
|
+
sentence_sha256: sentenceSha,
|
|
367
|
+
bucket: bucket,
|
|
368
|
+
outcome: outcome,
|
|
369
|
+
margin: classification ? classification.margin : null,
|
|
370
|
+
confidence: classification ? classification.confidence : null,
|
|
371
|
+
word_count: typeof features.word_count === 'number' ? features.word_count : null,
|
|
372
|
+
char_count: typeof features.char_count === 'number' ? features.char_count : null,
|
|
373
|
+
features: features,
|
|
374
|
+
elapsed_ms: Date.now() - t0,
|
|
375
|
+
});
|
|
376
|
+
} catch (_e) { /* telemetry is best-effort */ }
|
|
377
|
+
|
|
378
|
+
const additionalContext = _buildAdditionalContext(bucket, outcome);
|
|
379
|
+
return emitContinueWithContext(additionalContext);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// ---------- The next turn after routing: measure the ignite outcome (research Pitfall 5) ----------
|
|
383
|
+
|
|
384
|
+
function _emitOutcomeObserved(state) {
|
|
385
|
+
const roomsHomeExists = _roomsHomeExists();
|
|
386
|
+
const activeRoomBound = _activeRoomBound();
|
|
387
|
+
try {
|
|
388
|
+
_appendTelemetry({
|
|
389
|
+
schema_version: 1,
|
|
390
|
+
event: 'outcome_observed',
|
|
391
|
+
ts_ms: Date.now(),
|
|
392
|
+
sentence_sha256: null,
|
|
393
|
+
bucket: state.bucket || null,
|
|
394
|
+
outcome: state.outcome || null,
|
|
395
|
+
routed_bucket: state.bucket || null,
|
|
396
|
+
routed_outcome: state.outcome || null,
|
|
397
|
+
margin: null,
|
|
398
|
+
confidence: null,
|
|
399
|
+
word_count: null,
|
|
400
|
+
char_count: null,
|
|
401
|
+
features: {},
|
|
402
|
+
elapsed_ms: 0,
|
|
403
|
+
rooms_home_exists: roomsHomeExists,
|
|
404
|
+
active_room_bound: activeRoomBound,
|
|
405
|
+
});
|
|
406
|
+
} catch (_e) { /* telemetry is best-effort */ }
|
|
407
|
+
|
|
408
|
+
// Do not attempt to detect the slash-command invocation itself; a proxy
|
|
409
|
+
// stated as a proxy (the two booleans above) is better than a claim this
|
|
410
|
+
// hook cannot support. This does not advance `phase` past 'routed' --
|
|
411
|
+
// that transition belongs to plan 267.2-07 (reward_pending).
|
|
412
|
+
const updated = Object.assign({}, state, { outcome_observed_at_ms: Date.now() });
|
|
413
|
+
_atomicWriteState(updated);
|
|
414
|
+
return emitEmpty();
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// ---------- The reward fire: detached, fire-and-forget, never inline (D-D) ----------
|
|
418
|
+
//
|
|
419
|
+
// Runs once the outcome has already been observed on an earlier turn (so
|
|
420
|
+
// `existingState.phase === 'routed' && existingState.outcome_observed_at_ms`
|
|
421
|
+
// is set -- see main()). Gated on the shipped MVA classifier's own verdict
|
|
422
|
+
// (lib/core/mva-state.cjs::readPending), never on this router's opinion, and
|
|
423
|
+
// never fabricates a pending record: mva-detect.cjs / mva-classifier.cjs own
|
|
424
|
+
// that write, including the length guards, English-only rule and Hebrew
|
|
425
|
+
// refusal path. A throw anywhere in this block degrades to an honest skip;
|
|
426
|
+
// the envelope still emits and the state machine still advances.
|
|
427
|
+
//
|
|
428
|
+
// WR-02 (267.2-REVIEW.md): `pending` is a SHARED, session-scoped record
|
|
429
|
+
// (lib/core/mva-state.cjs) written independently by scripts/mva-detect.cjs on EVERY
|
|
430
|
+
// UserPromptSubmit turn -- it runs immediately before this router in the hook chain
|
|
431
|
+
// (hooks/hooks.json's own ordering note) -- guarded only by isAlreadyRunning(), never by
|
|
432
|
+
// "already consumed" or "matches the sentence that drove THIS router's routing decision."
|
|
433
|
+
// This router's own state machine takes at least 2 additional user turns between the
|
|
434
|
+
// routing decision (which reads the triggering sentence) and this fire turn (which reads
|
|
435
|
+
// whatever `pending` currently holds). If the user's intervening turn is independently
|
|
436
|
+
// classified as venture-shaped by mva-detect.cjs's own classifier, `pending.sentence_sha256`
|
|
437
|
+
// is silently overwritten before this fire leg ever reads it, and the "Instant Brief"
|
|
438
|
+
// delivered later is rendered for the wrong (later, unrelated) sentence. Guard: compare
|
|
439
|
+
// `pending.sentence_sha256` against `state.sentence_sha256` (persisted by _classifyAndRoute
|
|
440
|
+
// at routing time) and skip, named, on a mismatch rather than silently firing for the
|
|
441
|
+
// wrong sentence. A missing state.sentence_sha256 (older state.json shape, or a null
|
|
442
|
+
// prompt at routing time) degrades to the pre-fix behavior -- no correlation to check.
|
|
443
|
+
|
|
444
|
+
const SKIP_REASONS = Object.freeze(['no_pending', 'hebrew_refusal', 'already_running', 'pending_sentence_mismatch']);
|
|
445
|
+
|
|
446
|
+
function _fireReward(state) {
|
|
447
|
+
const startMs = Date.now();
|
|
448
|
+
let sha8 = null;
|
|
449
|
+
let skipReason = null;
|
|
450
|
+
let capturePath = null;
|
|
451
|
+
let sentenceSha256 = null;
|
|
452
|
+
|
|
453
|
+
try {
|
|
454
|
+
const mvaState = require('../lib/core/mva-state.cjs');
|
|
455
|
+
const pending = mvaState.readPending();
|
|
456
|
+
const routedSentenceSha256 = (typeof state.sentence_sha256 === 'string' && state.sentence_sha256.length > 0)
|
|
457
|
+
? state.sentence_sha256 : null;
|
|
458
|
+
if (!pending || typeof pending.sentence_sha256 !== 'string' || pending.sentence_sha256.length < 8) {
|
|
459
|
+
skipReason = 'no_pending';
|
|
460
|
+
} else if (pending.hebrew_refusal === true) {
|
|
461
|
+
skipReason = 'hebrew_refusal';
|
|
462
|
+
} else if (mvaState.isAlreadyRunning()) {
|
|
463
|
+
skipReason = 'already_running';
|
|
464
|
+
} else if (routedSentenceSha256 && pending.sentence_sha256 !== routedSentenceSha256) {
|
|
465
|
+
skipReason = 'pending_sentence_mismatch';
|
|
466
|
+
} else {
|
|
467
|
+
sentenceSha256 = pending.sentence_sha256;
|
|
468
|
+
sha8 = sentenceSha256.slice(0, 8);
|
|
469
|
+
const dir = firstInstallDir();
|
|
470
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
471
|
+
capturePath = path.join(dir, 'brief-' + sha8 + '.md');
|
|
472
|
+
let fd = null;
|
|
473
|
+
try {
|
|
474
|
+
fd = fs.openSync(capturePath, 'w');
|
|
475
|
+
// Detached, unref-ed child (mirrors scripts/brain-derivation-drain.cjs
|
|
476
|
+
// and scripts/auto-explore-fingerprint.cjs). This process does NOT
|
|
477
|
+
// await the child and does NOT require the MVA orchestrator module
|
|
478
|
+
// directly -- the child (scripts/mva-run.cjs) is the only caller
|
|
479
|
+
// of runPipeline.
|
|
480
|
+
const child = spawn(process.execPath, [path.join(__dirname, 'mva-run.cjs')], {
|
|
481
|
+
detached: true,
|
|
482
|
+
stdio: ['ignore', fd, 'ignore'],
|
|
483
|
+
env: process.env,
|
|
484
|
+
});
|
|
485
|
+
child.unref();
|
|
486
|
+
} finally {
|
|
487
|
+
if (fd !== null) {
|
|
488
|
+
try { fs.closeSync(fd); } catch (_e) { /* parent's copy only; best-effort */ }
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
} catch (_e) {
|
|
493
|
+
// Any throw degrades to the skip path. An honest skip that is recorded
|
|
494
|
+
// is worth more than a fabricated reward.
|
|
495
|
+
sha8 = null;
|
|
496
|
+
capturePath = null;
|
|
497
|
+
if (!skipReason || SKIP_REASONS.indexOf(skipReason) === -1) skipReason = 'no_pending';
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
const firedAtMs = Date.now();
|
|
501
|
+
const rewardState = Object.assign({}, state, {
|
|
502
|
+
phase: 'reward_pending',
|
|
503
|
+
sha8: sha8,
|
|
504
|
+
fired_at_ms: firedAtMs,
|
|
505
|
+
capture_path: capturePath,
|
|
506
|
+
skip_reason: skipReason,
|
|
507
|
+
drain_retries: 0,
|
|
508
|
+
});
|
|
509
|
+
_atomicWriteState(rewardState);
|
|
510
|
+
|
|
511
|
+
try {
|
|
512
|
+
_appendTelemetry({
|
|
513
|
+
schema_version: 1,
|
|
514
|
+
event: 'reward_fired',
|
|
515
|
+
ts_ms: firedAtMs,
|
|
516
|
+
sentence_sha256: sentenceSha256,
|
|
517
|
+
sha8: sha8,
|
|
518
|
+
skip_reason: skipReason,
|
|
519
|
+
elapsed_ms: Date.now() - startMs,
|
|
520
|
+
});
|
|
521
|
+
} catch (_e) { /* telemetry is best-effort */ }
|
|
522
|
+
|
|
523
|
+
return emitEmpty();
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
// ---------- The reward drain: consumed on a later turn, never wedges ----------
|
|
527
|
+
//
|
|
528
|
+
// Runs on every turn where state.json reads phase 'reward_pending'. A
|
|
529
|
+
// skipped fire (sha8 null) advances straight through with its skip_reason
|
|
530
|
+
// carried forward, so the investment gate in plan 267.2-09 still opens on a
|
|
531
|
+
// session where no brief was ever eligible (decision D-L: the investment ask
|
|
532
|
+
// never precedes the reward ATTEMPT). Never throws, never exits non-zero: a
|
|
533
|
+
// missing, empty, unreadable or malformed capture file is a not-ready state
|
|
534
|
+
// or a bounded timeout, never an error.
|
|
535
|
+
|
|
536
|
+
const DRAIN_MAX_RETRIES = 5;
|
|
537
|
+
const MAX_INJECTED_CHARS = 6000;
|
|
538
|
+
|
|
539
|
+
function _advanceToRewardDelivered(state, extra) {
|
|
540
|
+
const deliveredAtMs = Date.now();
|
|
541
|
+
const deliveredState = Object.assign({}, state, {
|
|
542
|
+
phase: 'reward_delivered',
|
|
543
|
+
delivered_at_ms: deliveredAtMs,
|
|
544
|
+
}, extra || {});
|
|
545
|
+
_atomicWriteState(deliveredState);
|
|
546
|
+
return deliveredAtMs;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
function _drainReward(state) {
|
|
550
|
+
// The fire leg recorded a skip: advance straight through, reason carried.
|
|
551
|
+
if (!state.sha8) {
|
|
552
|
+
const deliveredAtMs = _advanceToRewardDelivered(state, {});
|
|
553
|
+
try {
|
|
554
|
+
_appendTelemetry({
|
|
555
|
+
schema_version: 1,
|
|
556
|
+
event: 'reward_delivered',
|
|
557
|
+
ts_ms: deliveredAtMs,
|
|
558
|
+
sha8: null,
|
|
559
|
+
brief_bytes: 0,
|
|
560
|
+
turns_waited: 0,
|
|
561
|
+
skip_reason: state.skip_reason || null,
|
|
562
|
+
});
|
|
563
|
+
} catch (_e) { /* best-effort */ }
|
|
564
|
+
return emitEmpty();
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
const retriesSoFar = typeof state.drain_retries === 'number' ? state.drain_retries : 0;
|
|
568
|
+
|
|
569
|
+
let ready = false;
|
|
570
|
+
let briefBytes = 0;
|
|
571
|
+
try {
|
|
572
|
+
if (state.capture_path && fs.existsSync(state.capture_path)) {
|
|
573
|
+
const st = fs.statSync(state.capture_path);
|
|
574
|
+
if (st.size > 0) {
|
|
575
|
+
briefBytes = st.size;
|
|
576
|
+
let mvaComplete = false;
|
|
577
|
+
try {
|
|
578
|
+
const mvaState = require('../lib/core/mva-state.cjs');
|
|
579
|
+
const pending = mvaState.readPending();
|
|
580
|
+
// The MVA orchestrator calls markComplete() on every terminating
|
|
581
|
+
// path, including all-agents-failed, so this is the primary
|
|
582
|
+
// readiness signal.
|
|
583
|
+
mvaComplete = !!(pending && pending.pipeline_status === 'complete');
|
|
584
|
+
} catch (_e) { mvaComplete = false; }
|
|
585
|
+
// Fallback: the capture file has already survived one full turn
|
|
586
|
+
// with non-zero size, since scripts/mva-run.cjs writes its whole
|
|
587
|
+
// rendered brief in a single stdout write at process exit.
|
|
588
|
+
const stableFallback = retriesSoFar >= 1;
|
|
589
|
+
ready = mvaComplete || stableFallback;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
} catch (_e) {
|
|
593
|
+
ready = false;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
if (ready) {
|
|
597
|
+
let briefText = null;
|
|
598
|
+
try {
|
|
599
|
+
briefText = fs.readFileSync(state.capture_path, 'utf8');
|
|
600
|
+
} catch (_e) {
|
|
601
|
+
briefText = null;
|
|
602
|
+
}
|
|
603
|
+
if (typeof briefText === 'string' && briefText.length > 0) {
|
|
604
|
+
let injected = briefText;
|
|
605
|
+
if (injected.length > MAX_INJECTED_CHARS) {
|
|
606
|
+
injected = injected.slice(0, MAX_INJECTED_CHARS) + '\n\n[truncated -- brief continues beyond this point]';
|
|
607
|
+
}
|
|
608
|
+
const framing = 'This is the user\'s Instant Brief: already rendered by the wired MVA '
|
|
609
|
+
+ 'pipeline, one turn ago. Hand it over to the user in your own voice, with exactly '
|
|
610
|
+
+ 'one De Stijl glyph (Canon Part 12). Do NOT re-run any command to produce it -- it '
|
|
611
|
+
+ 'is already complete.\n\n';
|
|
612
|
+
const deliveredAtMs = _advanceToRewardDelivered(state, {});
|
|
613
|
+
try {
|
|
614
|
+
_appendTelemetry({
|
|
615
|
+
schema_version: 1,
|
|
616
|
+
event: 'reward_delivered',
|
|
617
|
+
ts_ms: deliveredAtMs,
|
|
618
|
+
sha8: state.sha8,
|
|
619
|
+
brief_bytes: briefBytes,
|
|
620
|
+
turns_waited: retriesSoFar,
|
|
621
|
+
skip_reason: null,
|
|
622
|
+
});
|
|
623
|
+
} catch (_e) { /* best-effort */ }
|
|
624
|
+
return emitContinueWithContext(framing + injected);
|
|
625
|
+
}
|
|
626
|
+
// Read failed or came back empty despite a non-zero stat: fall through
|
|
627
|
+
// to the not-ready / retry path below rather than treating this as ready.
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
const nextRetries = retriesSoFar + 1;
|
|
631
|
+
if (nextRetries >= DRAIN_MAX_RETRIES) {
|
|
632
|
+
// The counter is what stops a failed pipeline from silently costing the
|
|
633
|
+
// user the rest of the flow: force reward_delivered so the investment
|
|
634
|
+
// gate can still open.
|
|
635
|
+
const deliveredAtMs = _advanceToRewardDelivered(state, { skip_reason: 'drain_timeout' });
|
|
636
|
+
try {
|
|
637
|
+
_appendTelemetry({
|
|
638
|
+
schema_version: 1,
|
|
639
|
+
event: 'reward_delivered',
|
|
640
|
+
ts_ms: deliveredAtMs,
|
|
641
|
+
sha8: state.sha8,
|
|
642
|
+
brief_bytes: briefBytes,
|
|
643
|
+
turns_waited: nextRetries,
|
|
644
|
+
skip_reason: 'drain_timeout',
|
|
645
|
+
});
|
|
646
|
+
} catch (_e) { /* best-effort */ }
|
|
647
|
+
return emitEmpty();
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
const retryState = Object.assign({}, state, { drain_retries: nextRetries });
|
|
651
|
+
_atomicWriteState(retryState);
|
|
652
|
+
return emitEmpty();
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
// ---------- The investment leg: seed the identity file, then ask (D-L: gated on reward_delivered) ----------
|
|
656
|
+
//
|
|
657
|
+
// Runs on the first turn where state.phase reads 'reward_delivered'. This leg is
|
|
658
|
+
// UNREACHABLE from any earlier phase -- main()'s dispatch below only calls this function
|
|
659
|
+
// when existingState.phase === 'reward_delivered', and that 'reward_delivered' can only be
|
|
660
|
+
// reached via the fire/drain legs plan 267.2-07 shipped is enforced by construction of
|
|
661
|
+
// main()'s own if/else dispatch chain below (each branch both reads AND writes one
|
|
662
|
+
// specific phase), NOT by isValidTransition (WR-04, 267.2-REVIEW.md: isValidTransition is
|
|
663
|
+
// exported for tests that want to drive the machine without spawning a child process, but
|
|
664
|
+
// main()'s dispatch never calls it -- do not credit it with an enforcement guarantee it
|
|
665
|
+
// does not actually provide). That is decision D-L: the investment ask can never precede
|
|
666
|
+
// the reward, on any path, because getting the order wrong reproduces the exact defect
|
|
667
|
+
// this phase exists to fix (research finding C-3).
|
|
668
|
+
//
|
|
669
|
+
// SEED THE FILE, deterministically (decision D-E). The path is resolved INSIDE this
|
|
670
|
+
// function, never at module scope -- lib/mcp/tools/identity.cjs:65-73 documents this as
|
|
671
|
+
// threat T-270-13 and research Pitfall 6 records a live incident where a module-load-time
|
|
672
|
+
// constant wrote into a real developer home. Read-modify-write: readUserMd() then
|
|
673
|
+
// writeUserMdAtomic() with the existing record spread under the delta, because
|
|
674
|
+
// buildFrontmatter (lib/core/user-md-ops.cjs) does Object.assign(emptyUser(), data) and
|
|
675
|
+
// does NOT merge with the existing file -- a bare write would clobber every field the
|
|
676
|
+
// caller does not re-supply (decision D-N item 1). The delta carries only what a local
|
|
677
|
+
// hook can derive without a model: journey_stage and last_detected_at. canonical_role,
|
|
678
|
+
// role_blend and problem_type are never guessed from the greeting bucket -- the bucket is
|
|
679
|
+
// an intent signal, not a role, and a fabricated role is worse than a null one.
|
|
680
|
+
//
|
|
681
|
+
// journey_stage value (deviation, Rule 1 bug fix during execution): 267.2-DECISIONS.md's
|
|
682
|
+
// D-E text names the literal string 'first_install', but readUserMd's journey_stage field
|
|
683
|
+
// is schema-tolerant against lib/core/persona-taxonomy.cjs's JOURNEY_STAGES enum (the
|
|
684
|
+
// Hero's Journey stages -- ordinary_world, call_to_adventure, ... return_with_elixir):
|
|
685
|
+
// an out-of-enum value silently coerces to null on read (readUserMd:318-323), which is
|
|
686
|
+
// exactly the class of write-read disagreement this plan's Task 1 (C-3) exists to fix,
|
|
687
|
+
// just recurring on a different field. 'ordinary_world' is the enum's own first stage --
|
|
688
|
+
// "the hero's normal life before the adventure begins" -- the correct semantic match for
|
|
689
|
+
// "a first-install session, before anything has happened", and it round-trips correctly.
|
|
690
|
+
//
|
|
691
|
+
// This is a second CALLER of writeUserMdAtomic, not a second implementation of it --
|
|
692
|
+
// exactly the distinction lib/mcp/tools/identity.cjs:25-31 draws in its own header, and
|
|
693
|
+
// what MEMOP-08 forbids is the latter, not the former (decision D-E).
|
|
694
|
+
//
|
|
695
|
+
// WR-03 (267.2-REVIEW.md): readUserMd() consults the persona-override seam BEFORE the
|
|
696
|
+
// real file (lib/core/persona-override.cjs), so a bare readUserMd() call here would
|
|
697
|
+
// merge this delta onto the OVERRIDE's synthetic struct while an override is active,
|
|
698
|
+
// then persist that merge back to the REAL file -- silently resetting every field the
|
|
699
|
+
// override does not carry. {ignoreOverride: true} (added by this same fix pass) makes
|
|
700
|
+
// this read-modify-write always operate on the real on-disk record, which is what a
|
|
701
|
+
// WRITE path needs; display-time readers still want the override and must not pass it.
|
|
702
|
+
//
|
|
703
|
+
// `extraDelta` (CR-02): an optional second delta merged in ALONGSIDE the deterministic
|
|
704
|
+
// journey_stage/last_detected_at pair, for a caller that already has additional,
|
|
705
|
+
// deterministically-known fields to seed (e.g. a role_blend /mos:ignite's own B1 gate
|
|
706
|
+
// already captured this session) without asking the model to re-derive them.
|
|
707
|
+
function _seedIdentityFile(extraDelta) {
|
|
708
|
+
const { readUserMd, writeUserMdAtomic } = require('../lib/core/user-md-ops.cjs');
|
|
709
|
+
const userMdPath = path.join(homeDir(), '.mindrian-user.md');
|
|
710
|
+
try {
|
|
711
|
+
const existing = readUserMd(userMdPath, { ignoreOverride: true });
|
|
712
|
+
const delta = Object.assign({
|
|
713
|
+
journey_stage: 'ordinary_world',
|
|
714
|
+
last_detected_at: new Date().toISOString(),
|
|
715
|
+
}, extraDelta || {});
|
|
716
|
+
const merged = existing ? Object.assign({}, existing, delta) : Object.assign({}, delta);
|
|
717
|
+
if (delta.role_blend && typeof delta.role_blend === 'object') {
|
|
718
|
+
const existingRoleBlend = (existing && existing.role_blend && typeof existing.role_blend === 'object')
|
|
719
|
+
? existing.role_blend : {};
|
|
720
|
+
merged.role_blend = Object.assign({}, existingRoleBlend, delta.role_blend);
|
|
721
|
+
}
|
|
722
|
+
writeUserMdAtomic(userMdPath, merged);
|
|
723
|
+
return { seedWritten: true, writeFailed: false };
|
|
724
|
+
} catch (_e) {
|
|
725
|
+
// Never echo the caught error's message: it can carry a filesystem path the caller
|
|
726
|
+
// did not supply (threat T-267.2-32, mirroring T-270-30).
|
|
727
|
+
return { seedWritten: false, writeFailed: true };
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// Honest residual, stated not hidden: the deterministic seed above proves the file
|
|
732
|
+
// exists after a first session, but canonical_role / role_blend / problem_type still
|
|
733
|
+
// depend on the model calling identity_write with whatever the user actually answers,
|
|
734
|
+
// because only a model can read meaning out of free text -- a local hook cannot.
|
|
735
|
+
function _buildInvestmentContext() {
|
|
736
|
+
return '[first-install-router] phase=investment_asked. '
|
|
737
|
+
+ 'The reward has already landed this session. Now make ONE investment ask, in your '
|
|
738
|
+
+ 'own Larry voice, carrying exactly one De Stijl glyph (Canon Part 12), framed as '
|
|
739
|
+
+ 'something that makes every future session better for the user, never as a '
|
|
740
|
+
+ 'bureaucratic form. Ask what best describes them and where they currently stand. '
|
|
741
|
+
+ 'Whatever they answer, call the identity_write MCP tool with it, using ONLY the '
|
|
742
|
+
+ 'fields that tool actually accepts: canonical_role, journey_stage, problem_type, '
|
|
743
|
+
+ 'venture_stage, larry_persona, brain_persona, user_id, role_blend. Do not ask for '
|
|
744
|
+
+ 'the eight fields the old session-start prose used to promise (name, role, domain, '
|
|
745
|
+
+ 'subdomain, technical level, current focus, goal, expertise areas) -- only role maps '
|
|
746
|
+
+ 'to a real schema field. Anything the user shares beyond that schema belongs in the '
|
|
747
|
+
+ 'prose body of ~/.mindrian-user.md, which writeUserMdAtomic preserves untouched. Do '
|
|
748
|
+
+ 'NOT invoke /mos:profile-user for this: it is referenced by USER.md stubs in '
|
|
749
|
+
+ 'production rooms and does not exist.';
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
// ---------- CR-02 (267.2-REVIEW.md): detect an in-flight /mos:ignite birth this session ----------
|
|
753
|
+
//
|
|
754
|
+
// /mos:ignite's own Gate B1 Door 1 is a multi-turn identity capture (a two-step
|
|
755
|
+
// AskUserQuestion persona pick), typically consuming 2+ further user turns before B2/B3
|
|
756
|
+
// follow. This router advances its own state machine on every turn independently, with
|
|
757
|
+
// no signal from /mos:ignite's own gate state -- so the investment ask can land on a turn
|
|
758
|
+
// where the user is still mid-way through /mos:ignite's own persona pick, injecting a
|
|
759
|
+
// second, competing "who are you" ask for information ignite already captured (or is
|
|
760
|
+
// actively capturing).
|
|
761
|
+
//
|
|
762
|
+
// PARTIAL FIX, stated honestly (see 267.2-CR-02-DEFERRED.md for the residual gap this
|
|
763
|
+
// does NOT close). The one genuinely reachable, low-risk signal a headless UserPromptSubmit
|
|
764
|
+
// hook can check without a room and without inventing a new cross-surface coordination
|
|
765
|
+
// primitive: lib/core/scratchpad-ops.cjs's birth_gate_answers journal. writeScratchpadBirthAnswer
|
|
766
|
+
// is called by commands/ignite.md's B1 gate the MOMENT the navigator completes the two-step
|
|
767
|
+
// persona pick (ignite.md:160), well before B2/B3. Filtering that journal for a 'B1' entry
|
|
768
|
+
// whose ts is at or after THIS first-install session's own armed_at_ms (this router's own
|
|
769
|
+
// state.json, set once at arm time) scopes the check to "did ignite's own B1 complete during
|
|
770
|
+
// THIS first-install conversation" -- no new marker, no new writer, no edit to commands/ignite.md.
|
|
771
|
+
//
|
|
772
|
+
// What this DOES close: once B1 has completed, ignite already holds role_blend for this
|
|
773
|
+
// session -- asking again is pure redundancy, so the investment ask is skipped and the
|
|
774
|
+
// already-known role_blend is folded into the deterministic identity seed instead (no model
|
|
775
|
+
// round-trip needed for it).
|
|
776
|
+
//
|
|
777
|
+
// What this does NOT close (the honest residual): while B1's own two-step card is still
|
|
778
|
+
// PENDING (no entry written yet), there is no artifact anywhere a hook can read to know an
|
|
779
|
+
// interactive card is mid-render -- Claude Code exposes no such state to hooks. That window
|
|
780
|
+
// stays open; 267.2-CR-02-DEFERRED.md names the follow-up needed to close it for real.
|
|
781
|
+
function _checkIgniteBirthCaptured(state) {
|
|
782
|
+
try {
|
|
783
|
+
const scratchpadOps = require('../lib/core/scratchpad-ops.cjs');
|
|
784
|
+
const pad = scratchpadOps.readScratchpad();
|
|
785
|
+
const answers = Array.isArray(pad.birth_gate_answers) ? pad.birth_gate_answers : [];
|
|
786
|
+
const armedAtMs = (state && typeof state.armed_at_ms === 'number') ? state.armed_at_ms : 0;
|
|
787
|
+
const b1 = answers.find(function (a) {
|
|
788
|
+
return a && a.gate_id === 'B1' && typeof a.ts === 'number' && a.ts >= armedAtMs;
|
|
789
|
+
});
|
|
790
|
+
if (!b1) return { captured: false, roleBlend: null };
|
|
791
|
+
const roleBlend = (b1.role_blend && typeof b1.role_blend === 'object' && !Array.isArray(b1.role_blend))
|
|
792
|
+
? b1.role_blend : null;
|
|
793
|
+
return { captured: true, roleBlend: roleBlend };
|
|
794
|
+
} catch (_e) {
|
|
795
|
+
// Any failure here degrades to "not captured" -- the ordinary ask path below is always
|
|
796
|
+
// a safe fallback, never a hard stop.
|
|
797
|
+
return { captured: false, roleBlend: null };
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
function _askInvestment(state) {
|
|
802
|
+
const igniteBirth = _checkIgniteBirthCaptured(state);
|
|
803
|
+
const askedAtMs = Date.now();
|
|
804
|
+
|
|
805
|
+
if (igniteBirth.captured) {
|
|
806
|
+
// /mos:ignite's own B1 already captured identity information this session. Seed the
|
|
807
|
+
// deterministic delta as usual, PLUS the role_blend B1 already resolved (no model needed
|
|
808
|
+
// for it -- it is already known), and skip the prose ask entirely rather than injecting a
|
|
809
|
+
// second, competing "who are you" prompt into whatever ignite gate the user is now on.
|
|
810
|
+
const extraDelta = igniteBirth.roleBlend ? { role_blend: igniteBirth.roleBlend } : undefined;
|
|
811
|
+
const seedResult = _seedIdentityFile(extraDelta);
|
|
812
|
+
const askedState = Object.assign({}, state, {
|
|
813
|
+
phase: 'investment_asked',
|
|
814
|
+
investment_asked_at_ms: askedAtMs,
|
|
815
|
+
seed_written: seedResult.seedWritten,
|
|
816
|
+
seed_write_failed: seedResult.writeFailed,
|
|
817
|
+
investment_ask_skipped: true,
|
|
818
|
+
investment_ask_skip_reason: 'ignite_birth_captured',
|
|
819
|
+
});
|
|
820
|
+
_atomicWriteState(askedState);
|
|
821
|
+
|
|
822
|
+
try {
|
|
823
|
+
_appendTelemetry({
|
|
824
|
+
schema_version: 1,
|
|
825
|
+
event: 'investment_asked',
|
|
826
|
+
ts_ms: askedAtMs,
|
|
827
|
+
seed_written: seedResult.seedWritten,
|
|
828
|
+
write_failed: seedResult.writeFailed,
|
|
829
|
+
turns_since_reward: 1,
|
|
830
|
+
skip_reason: 'ignite_birth_captured',
|
|
831
|
+
});
|
|
832
|
+
} catch (_e) { /* telemetry is best-effort */ }
|
|
833
|
+
|
|
834
|
+
// CR-02: no prose ask emitted -- ignite already asked, and the user may still be
|
|
835
|
+
// answering one of its own gates this very turn.
|
|
836
|
+
return emitEmpty();
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
const seedResult = _seedIdentityFile();
|
|
840
|
+
const askedState = Object.assign({}, state, {
|
|
841
|
+
phase: 'investment_asked',
|
|
842
|
+
investment_asked_at_ms: askedAtMs,
|
|
843
|
+
seed_written: seedResult.seedWritten,
|
|
844
|
+
seed_write_failed: seedResult.writeFailed,
|
|
845
|
+
});
|
|
846
|
+
_atomicWriteState(askedState);
|
|
847
|
+
|
|
848
|
+
try {
|
|
849
|
+
_appendTelemetry({
|
|
850
|
+
schema_version: 1,
|
|
851
|
+
event: 'investment_asked',
|
|
852
|
+
ts_ms: askedAtMs,
|
|
853
|
+
seed_written: seedResult.seedWritten,
|
|
854
|
+
write_failed: seedResult.writeFailed,
|
|
855
|
+
// This leg fires on the very next router turn after reward_delivered was
|
|
856
|
+
// recorded (main()'s dispatch below acts immediately, with no wait state of
|
|
857
|
+
// its own), so this is always 1 today. Carried as a real integer field, not a
|
|
858
|
+
// hardcoded constant baked into the telemetry consumer, in case a future turn
|
|
859
|
+
// model changes that.
|
|
860
|
+
turns_since_reward: 1,
|
|
861
|
+
skip_reason: null,
|
|
862
|
+
});
|
|
863
|
+
} catch (_e) { /* telemetry is best-effort */ }
|
|
864
|
+
|
|
865
|
+
return emitContinueWithContext(_buildInvestmentContext());
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
// ---------- The final leg: investment_asked -> done, one turn later ----------
|
|
869
|
+
|
|
870
|
+
function _advanceToDone(state) {
|
|
871
|
+
const doneAtMs = Date.now();
|
|
872
|
+
const doneState = Object.assign({}, state, {
|
|
873
|
+
phase: 'done',
|
|
874
|
+
done_at_ms: doneAtMs,
|
|
875
|
+
});
|
|
876
|
+
_atomicWriteState(doneState);
|
|
877
|
+
return emitEmpty();
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
// ---------- Main ----------
|
|
881
|
+
|
|
882
|
+
function main() {
|
|
883
|
+
const t0 = Date.now();
|
|
884
|
+
const raw = readStdinSync();
|
|
885
|
+
const payload = safeParseJSON(raw);
|
|
886
|
+
const prompt = (payload && typeof payload.prompt === 'string') ? payload.prompt : null;
|
|
887
|
+
|
|
888
|
+
const existingState = _readState();
|
|
889
|
+
|
|
890
|
+
if (!existingState) {
|
|
891
|
+
// ONE-SHOT GATE: state.json absent -> this is the only turn this router
|
|
892
|
+
// ever reads the onboarding marker.
|
|
893
|
+
const status = _checkOnboardStatus();
|
|
894
|
+
if (status !== 'FIRST_INSTALL') {
|
|
895
|
+
// Not a first install (or the marker read failed/timed out): emit and
|
|
896
|
+
// exit without creating state, and never look again this session.
|
|
897
|
+
return emitEmpty();
|
|
898
|
+
}
|
|
899
|
+
const armedAtMs = Date.now();
|
|
900
|
+
const armedState = { phase: 'armed', armed_at_ms: armedAtMs, schema_version: 1 };
|
|
901
|
+
const armWriteOk = _atomicWriteState(armedState);
|
|
902
|
+
if (!armWriteOk) {
|
|
903
|
+
// WR-01 (267.2-REVIEW.md): the ONE-SHOT GATE depends on state.json actually
|
|
904
|
+
// persisting. If it cannot be written (permissions, a full disk, a read-only home),
|
|
905
|
+
// _readState() will keep returning null on every later turn, which -- if this branch
|
|
906
|
+
// proceeded to classify and route anyway -- would re-run _classifyAndRoute (including
|
|
907
|
+
// injecting "invoke /mos:ignite" prose) on every subsequent, unrelated turn for the
|
|
908
|
+
// rest of the session. Fail THIS turn closed instead: emit and exit without ever
|
|
909
|
+
// classifying the prompt. The onboarding marker read above is harmless to repeat
|
|
910
|
+
// (this router never calls check-onboard --write), so a transient write failure
|
|
911
|
+
// self-heals the moment the underlying filesystem issue clears; a persistent one
|
|
912
|
+
// degrades to "the router never arms," never to "the router injects ignite prose
|
|
913
|
+
// into an unrelated later turn."
|
|
914
|
+
return emitEmpty();
|
|
915
|
+
}
|
|
916
|
+
// Continue this turn: classify the same prompt that just armed the router.
|
|
917
|
+
return _classifyAndRoute(armedState, prompt, t0);
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
if (existingState.phase === 'armed') {
|
|
921
|
+
// Armed on an earlier turn (e.g. a crash between the arm-write and the
|
|
922
|
+
// route-write) but never routed. Classify now, using THIS turn's prompt.
|
|
923
|
+
return _classifyAndRoute(existingState, prompt, t0);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
if (existingState.phase === 'routed' && !existingState.outcome_observed_at_ms) {
|
|
927
|
+
return _emitOutcomeObserved(existingState);
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
if (existingState.phase === 'routed' && existingState.outcome_observed_at_ms) {
|
|
931
|
+
// Outcome already observed on an earlier turn: this turn fires the
|
|
932
|
+
// reward (plan 267.2-07) and advances routed -> reward_pending.
|
|
933
|
+
return _fireReward(existingState);
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
if (existingState.phase === 'reward_pending') {
|
|
937
|
+
// Drain leg (plan 267.2-07 Task 2): reward_pending -> reward_delivered,
|
|
938
|
+
// either because the capture file is ready or because the bounded
|
|
939
|
+
// retry counter forced a drain_timeout.
|
|
940
|
+
return _drainReward(existingState);
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
if (existingState.phase === 'reward_delivered') {
|
|
944
|
+
// Plan 267.2-09 leg: seed ~/.mindrian-user.md and emit the investment ask, strictly
|
|
945
|
+
// after the reward (decision D-L). Never reachable from any earlier phase.
|
|
946
|
+
return _askInvestment(existingState);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
if (existingState.phase === 'investment_asked') {
|
|
950
|
+
return _advanceToDone(existingState);
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
// Any other phase (done): this router's work here is complete.
|
|
954
|
+
return emitEmpty();
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
if (require.main === module) {
|
|
958
|
+
try {
|
|
959
|
+
main();
|
|
960
|
+
} catch (_e) {
|
|
961
|
+
emitEmpty();
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
module.exports = {
|
|
966
|
+
PHASES,
|
|
967
|
+
isValidTransition,
|
|
968
|
+
};
|