@mindrian_os/install 1.13.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +21 -0
- package/.mcp.json +9 -0
- package/CHANGELOG.md +3333 -0
- package/LICENSE +123 -0
- package/README.md +673 -0
- package/agents/brain-query.md +80 -0
- package/agents/framework-runner.md +237 -0
- package/agents/grading.md +188 -0
- package/agents/investor.md +128 -0
- package/agents/larry-extended.md +135 -0
- package/agents/opportunity-scanner.md +91 -0
- package/agents/persona-analyst.md +132 -0
- package/agents/research.md +89 -0
- package/agents/reverse-salient-agent.md +27 -0
- package/bin/cli.js +142 -0
- package/bin/mindrian-mcp-server.cjs +182 -0
- package/bin/mindrian-tools.cjs +765 -0
- package/commands/act.md +439 -0
- package/commands/admin.md +404 -0
- package/commands/analyze-needs.md +42 -0
- package/commands/analyze-systems.md +39 -0
- package/commands/analyze-timing.md +42 -0
- package/commands/auto-explore.md +64 -0
- package/commands/beautiful-question.md +40 -0
- package/commands/brain-derive.md +78 -0
- package/commands/build-knowledge.md +42 -0
- package/commands/build-thesis.md +46 -0
- package/commands/causal.md +234 -0
- package/commands/challenge-assumptions.md +33 -0
- package/commands/compare-ventures.md +83 -0
- package/commands/dashboard.md +110 -0
- package/commands/deep-grade.md +82 -0
- package/commands/diagnose.md +58 -0
- package/commands/diagnostics.md +151 -0
- package/commands/doctor.md +151 -0
- package/commands/dominant-designs.md +40 -0
- package/commands/explain-decision.md +87 -0
- package/commands/explore-domains.md +42 -0
- package/commands/explore-futures.md +40 -0
- package/commands/explore-trends.md +42 -0
- package/commands/export.md +103 -0
- package/commands/file-meeting.md +724 -0
- package/commands/find-analogies.md +188 -0
- package/commands/find-bottlenecks.md +62 -0
- package/commands/find-connections.md +76 -0
- package/commands/funding.md +81 -0
- package/commands/grade.md +203 -0
- package/commands/graph.md +128 -0
- package/commands/hat-briefing.md +125 -0
- package/commands/heal.md +196 -0
- package/commands/help.md +399 -0
- package/commands/hmi-status.md +172 -0
- package/commands/jtbd.md +241 -0
- package/commands/leadership.md +73 -0
- package/commands/lean-canvas.md +40 -0
- package/commands/macro-trends.md +40 -0
- package/commands/map-unknowns.md +40 -0
- package/commands/memory.md +173 -0
- package/commands/models.md +175 -0
- package/commands/mos-reason.md +285 -0
- package/commands/mullins.md +120 -0
- package/commands/new-project.md +481 -0
- package/commands/onboard.md +434 -0
- package/commands/operator.md +149 -0
- package/commands/opportunities.md +144 -0
- package/commands/organize.md +497 -0
- package/commands/persona.md +198 -0
- package/commands/pipeline.md +112 -0
- package/commands/present.md +91 -0
- package/commands/publish.md +201 -0
- package/commands/query.md +124 -0
- package/commands/radar.md +72 -0
- package/commands/reanalyze.md +91 -0
- package/commands/research.md +196 -0
- package/commands/room.md +352 -0
- package/commands/rooms.md +598 -0
- package/commands/root-cause.md +40 -0
- package/commands/rs-experts.md +85 -0
- package/commands/rs-explain.md +100 -0
- package/commands/rs-fetch.md +94 -0
- package/commands/rs-thesis.md +85 -0
- package/commands/scenario-plan.md +40 -0
- package/commands/scheduled-tasks.md +285 -0
- package/commands/score-innovation.md +43 -0
- package/commands/scout.md +239 -0
- package/commands/setup.md +618 -0
- package/commands/snapshot.md +147 -0
- package/commands/speakers.md +84 -0
- package/commands/splash.md +28 -0
- package/commands/status.md +75 -0
- package/commands/structure-argument.md +42 -0
- package/commands/suggest-next.md +80 -0
- package/commands/systems-thinking.md +40 -0
- package/commands/think-hats.md +42 -0
- package/commands/update.md +181 -0
- package/commands/user-needs.md +40 -0
- package/commands/validate.md +40 -0
- package/commands/value-proposition.md +61 -0
- package/commands/vault.md +180 -0
- package/commands/visualize.md +52 -0
- package/commands/whitespace.md +507 -0
- package/commands/wiki.md +69 -0
- package/hooks/hooks.json +381 -0
- package/hooks/run-hook.cmd +64 -0
- package/lib/__init__.py +0 -0
- package/lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/agents/auto-explore-agent.cjs +1043 -0
- package/lib/agents/reverse-salient-agent.cjs +679 -0
- package/lib/agents/tension-hook-agent.cjs +544 -0
- package/lib/brain/ROOM.md +44 -0
- package/lib/brain/chain-recommender.cjs +301 -0
- package/lib/chat/chat-context.js +185 -0
- package/lib/chat/chat-panel.js +721 -0
- package/lib/chat/fabric-chat.cjs +288 -0
- package/lib/chat/generative-tools.js +219 -0
- package/lib/conversation/ROOM.md +39 -0
- package/lib/conversation/classifier-rules.json +38 -0
- package/lib/conversation/classifier.cjs +264 -0
- package/lib/conversation/operator.cjs +287 -0
- package/lib/copy/115-spec-strings.cjs +55 -0
- package/lib/core/__init__.py +0 -0
- package/lib/core/__nav-stub.cjs +14 -0
- package/lib/core/__pycache__/__init__.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs-math.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_cache.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_corpus.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_hybrid.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_math.cpython-312.pyc +0 -0
- package/lib/core/__pycache__/rs_rooms.cpython-312.pyc +0 -0
- package/lib/core/artifact-id.cjs +148 -0
- package/lib/core/asset-ops.cjs +151 -0
- package/lib/core/auto-commit-throttle.cjs +129 -0
- package/lib/core/bearer-token.cjs +199 -0
- package/lib/core/brain-client.cjs +865 -0
- package/lib/core/brain-derivation-prompts.cjs +326 -0
- package/lib/core/brain-derivation-queue.cjs +431 -0
- package/lib/core/brain-derivation.cjs +580 -0
- package/lib/core/brain-md-schema.cjs +528 -0
- package/lib/core/brain-md-staleness.cjs +357 -0
- package/lib/core/brain-response-sanitize.cjs +188 -0
- package/lib/core/bridge-writer.cjs +477 -0
- package/lib/core/chat-context-builder.cjs +253 -0
- package/lib/core/cross-room-aggregator.cjs +762 -0
- package/lib/core/daily-briefing.cjs +438 -0
- package/lib/core/decision-capture.cjs +618 -0
- package/lib/core/deep-links.cjs +82 -0
- package/lib/core/dispatch-optimizer.cjs +354 -0
- package/lib/core/dual-path-detector.cjs +84 -0
- package/lib/core/dual-path-detector.test.cjs +334 -0
- package/lib/core/exports-log.cjs +79 -0
- package/lib/core/feynman-minto-invariants.cjs +605 -0
- package/lib/core/folder-memory-async.cjs +338 -0
- package/lib/core/folder-memory-shared.cjs +890 -0
- package/lib/core/folder-memory.cjs +416 -0
- package/lib/core/framework-chain-composer.cjs +411 -0
- package/lib/core/frontmatter-schemas.cjs +330 -0
- package/lib/core/git-ops.cjs +141 -0
- package/lib/core/graph-ops.cjs +258 -0
- package/lib/core/hat-persistence.cjs +362 -0
- package/lib/core/index.cjs +60 -0
- package/lib/core/integration-registry.cjs +232 -0
- package/lib/core/intelligence-cascade.cjs +661 -0
- package/lib/core/lazygraph-ops.cjs +1057 -0
- package/lib/core/lru-cache.cjs +139 -0
- package/lib/core/mcp-profiles.cjs +182 -0
- package/lib/core/meeting-ops.cjs +54 -0
- package/lib/core/memory-ops.cjs +600 -0
- package/lib/core/migrations/ROOM.md +33 -0
- package/lib/core/migrations/phase-109-nodes-provenance.cjs +339 -0
- package/lib/core/migrations/phase-109-session-focus.cjs +99 -0
- package/lib/core/model-profiles.cjs +246 -0
- package/lib/core/mullins-scaffold.cjs +160 -0
- package/lib/core/nav-dial.cjs +316 -0
- package/lib/core/navigation/ROOM.md +15 -0
- package/lib/core/navigation/explanation.cjs +43 -0
- package/lib/core/navigation/focus.cjs +135 -0
- package/lib/core/navigation/ingestion.cjs +82 -0
- package/lib/core/navigation/insights.cjs +350 -0
- package/lib/core/navigation/memory-events.cjs +118 -0
- package/lib/core/navigation/neighborhood.cjs +78 -0
- package/lib/core/navigation/packet.cjs +182 -0
- package/lib/core/navigation/room-home.cjs +127 -0
- package/lib/core/navigation/transitions.cjs +82 -0
- package/lib/core/navigation-engine-shared.cjs +242 -0
- package/lib/core/navigation-engine.cjs +664 -0
- package/lib/core/navigation.cjs +60 -0
- package/lib/core/nl-graph-queries.cjs +164 -0
- package/lib/core/offer-presenter.cjs +406 -0
- package/lib/core/opportunity-extractor.cjs +183 -0
- package/lib/core/opportunity-ops.cjs +1371 -0
- package/lib/core/persona-ops.cjs +537 -0
- package/lib/core/persona-taxonomy.cjs +190 -0
- package/lib/core/platform-gates.cjs +120 -0
- package/lib/core/platform.cjs +257 -0
- package/lib/core/proactive-intelligence.cjs +528 -0
- package/lib/core/problem-type-router.cjs +315 -0
- package/lib/core/reasoning-ops.cjs +639 -0
- package/lib/core/reverse-salient-persona-suffix.cjs +115 -0
- package/lib/core/room-classifier-strict-mode.cjs +229 -0
- package/lib/core/room-db.cjs +127 -0
- package/lib/core/room-ops-async.cjs +92 -0
- package/lib/core/room-ops-shared.cjs +64 -0
- package/lib/core/room-ops-sync.cjs +70 -0
- package/lib/core/room-ops.cjs +32 -0
- package/lib/core/room-type-detector.cjs +386 -0
- package/lib/core/rs-brain-substrate-prompts.cjs +129 -0
- package/lib/core/rs-brain-substrate.cjs +570 -0
- package/lib/core/rs-breakthrough-scorer.cjs +255 -0
- package/lib/core/rs-canon-violations.cjs +82 -0
- package/lib/core/rs-chain-feeder.cjs +343 -0
- package/lib/core/rs-commercial-assessor.cjs +280 -0
- package/lib/core/rs-differential-scorer.cjs +376 -0
- package/lib/core/rs-domain-analyzer.cjs +385 -0
- package/lib/core/rs-egress-prompts.cjs +113 -0
- package/lib/core/rs-egress-telemetry.cjs +225 -0
- package/lib/core/rs-egress-violations.cjs +53 -0
- package/lib/core/rs-expert-mapper.cjs +467 -0
- package/lib/core/rs-fetcher-academic.cjs +697 -0
- package/lib/core/rs-fetcher-experts.cjs +314 -0
- package/lib/core/rs-fetcher-industry.cjs +731 -0
- package/lib/core/rs-fetcher-patents.cjs +564 -0
- package/lib/core/rs-innovation-classifier.cjs +194 -0
- package/lib/core/rs-mind-map.cjs +656 -0
- package/lib/core/rs-neo4j-writer.cjs +388 -0
- package/lib/core/rs-nl-to-query.cjs +425 -0
- package/lib/core/rs-pinecone-bridge.cjs +303 -0
- package/lib/core/rs-preprocessor.cjs +350 -0
- package/lib/core/rs-query-matrix.cjs +316 -0
- package/lib/core/rs-query-to-text.cjs +438 -0
- package/lib/core/rs-sqlite-mirror.cjs +443 -0
- package/lib/core/rs-thesis-generator.cjs +188 -0
- package/lib/core/rs_cache.py +479 -0
- package/lib/core/rs_corpus.py +468 -0
- package/lib/core/rs_hybrid.py +586 -0
- package/lib/core/rs_math.py +287 -0
- package/lib/core/rs_rooms.py +193 -0
- package/lib/core/scheduled-scanner.cjs +463 -0
- package/lib/core/scratchpad-ops.cjs +201 -0
- package/lib/core/section-8-trace-schema.cjs +138 -0
- package/lib/core/section-registry.cjs +111 -0
- package/lib/core/session-state.cjs +144 -0
- package/lib/core/shallow-doc-parser.cjs +174 -0
- package/lib/core/shallow-doc-parser.test.cjs +226 -0
- package/lib/core/skill-activation-router.cjs +284 -0
- package/lib/core/state-ops.cjs +46 -0
- package/lib/core/statusline-cache.cjs +266 -0
- package/lib/core/token-estimator.cjs +348 -0
- package/lib/core/user-archetype.cjs +239 -0
- package/lib/core/user-md-ops.cjs +524 -0
- package/lib/core/visual-ops.cjs +624 -0
- package/lib/core/write-lock.cjs +149 -0
- package/lib/graph/canvas-graph.js +467 -0
- package/lib/graph/constellation-config.cjs +299 -0
- package/lib/graph/graph-detail-panel.js +165 -0
- package/lib/hmi/ROOM.md +47 -0
- package/lib/hmi/across-session-memory.cjs +604 -0
- package/lib/hmi/cross-room-memory.cjs +575 -0
- package/lib/hmi/decoy-tier.cjs +395 -0
- package/lib/hmi/jtbd-classifier.cjs +219 -0
- package/lib/hmi/jtbd-state.cjs +199 -0
- package/lib/hmi/jtbd-taxonomy.json +392 -0
- package/lib/hmi/selector-dispatcher.cjs +546 -0
- package/lib/hmi/selector-telemetry.cjs +263 -0
- package/lib/hmi/shape-f0-renderer.cjs +139 -0
- package/lib/hmi/shape-f1-fallback.cjs +80 -0
- package/lib/hmi/shape-f1-renderer.cjs +138 -0
- package/lib/hmi/shape-f2-renderer.cjs +132 -0
- package/lib/hmi/shape-f3-renderer.cjs +66 -0
- package/lib/hmi/shape-f4-renderer.cjs +72 -0
- package/lib/hmi/shape-f5-renderer.cjs +155 -0
- package/lib/hmi/shape-f6-plan-review-renderer.cjs +312 -0
- package/lib/hmi/shape-f6-renderer.cjs +144 -0
- package/lib/hmi/shape-g-renderer.cjs +219 -0
- package/lib/hmi/shape-h-renderer.cjs +222 -0
- package/lib/hmi/tier-check.cjs +63 -0
- package/lib/import/PRECONDITIONS.md +41 -0
- package/lib/import/branding.cjs +210 -0
- package/lib/import/branding.test.cjs +235 -0
- package/lib/import/classifications-sync.cjs +104 -0
- package/lib/import/classifications-sync.test.cjs +129 -0
- package/lib/import/enricher.cjs +296 -0
- package/lib/import/enricher.test.cjs +273 -0
- package/lib/import/integration.test.cjs +376 -0
- package/lib/import/manifest.cjs +129 -0
- package/lib/import/manifest.schema.json +185 -0
- package/lib/import/manifest.test.cjs +123 -0
- package/lib/import/meeting-detector.cjs +92 -0
- package/lib/import/meeting-detector.test.cjs +100 -0
- package/lib/import/person-detector.cjs +229 -0
- package/lib/import/person-detector.test.cjs +149 -0
- package/lib/import/report.cjs +186 -0
- package/lib/import/report.test.cjs +186 -0
- package/lib/import/room-md-scaffolder.cjs +49 -0
- package/lib/import/router.cjs +224 -0
- package/lib/import/router.test.cjs +356 -0
- package/lib/import/run-all-tests.cjs +36 -0
- package/lib/import/smoke-test.cjs +213 -0
- package/lib/import/smoke-test.test.cjs +148 -0
- package/lib/import/test-fixtures/collision-vault/preexisting-room/STATE.md +8 -0
- package/lib/import/test-fixtures/collision-vault/preexisting-room/problem-definition/onboarding/onboarding.md +7 -0
- package/lib/import/test-fixtures/collision-vault/source/onboarding.md +5 -0
- package/lib/import/test-fixtures/obsidian-vault/.obsidian/workspace.json +1 -0
- package/lib/import/test-fixtures/obsidian-vault/notes/with-wikilinks.md +4 -0
- package/lib/import/test-fixtures/tiny-vault/notes/2026-01-15-team-sync.md +9 -0
- package/lib/import/test-fixtures/tiny-vault/notes/empty.md +3 -0
- package/lib/import/test-fixtures/tiny-vault/notes/onboarding.md +5 -0
- package/lib/import/test-fixtures/tiny-vault/notes/pricing.md +5 -0
- package/lib/import/test-fixtures/tiny-vault/notes/random.md +4 -0
- package/lib/import/undo.test.cjs +199 -0
- package/lib/import/vault-scanner.cjs +105 -0
- package/lib/import/vault-scanner.test.cjs +67 -0
- package/lib/mcp/app-html/dashboard.html +316 -0
- package/lib/mcp/app-html/graph.html +428 -0
- package/lib/mcp/app-html/mindrian-platform.html +1841 -0
- package/lib/mcp/app-html/wiki.html +383 -0
- package/lib/mcp/app-views.cjs +322 -0
- package/lib/mcp/brain-router.cjs +418 -0
- package/lib/mcp/capability-registry.cjs +62 -0
- package/lib/mcp/larry-context.cjs +46 -0
- package/lib/mcp/larry-server-instructions.md +114 -0
- package/lib/mcp/pipeline-state.cjs +275 -0
- package/lib/mcp/prompts.cjs +302 -0
- package/lib/mcp/resources.cjs +227 -0
- package/lib/mcp/session-catchup.cjs +327 -0
- package/lib/mcp/surface-detect.cjs +75 -0
- package/lib/mcp/tool-router.cjs +1034 -0
- package/lib/memory/aaak-compress.cjs +403 -0
- package/lib/memory/aaak-compress.test.cjs +288 -0
- package/lib/memory/async-artifact-auto-commit.test.cjs +223 -0
- package/lib/memory/bearer-token.test.cjs +315 -0
- package/lib/memory/brain-cache-lru.test.cjs +259 -0
- package/lib/memory/brain-client-query-shape.test.cjs +160 -0
- package/lib/memory/brain-derivation-graceful-degradation.test.cjs +1019 -0
- package/lib/memory/brain-derivation-queue.test.cjs +539 -0
- package/lib/memory/brain-derivation.test.cjs +634 -0
- package/lib/memory/brain-derive-command.test.cjs +534 -0
- package/lib/memory/brain-md-invariants-validator.test.cjs +704 -0
- package/lib/memory/brain-md-schema.test.cjs +467 -0
- package/lib/memory/brain-md-staleness.test.cjs +525 -0
- package/lib/memory/brain-server-resolution.test.cjs +314 -0
- package/lib/memory/chain-recommender.test.cjs +233 -0
- package/lib/memory/chat-context.test.cjs +128 -0
- package/lib/memory/command-registry.test.cjs +220 -0
- package/lib/memory/cross-room-aggregator.test.cjs +909 -0
- package/lib/memory/dashboard-server.test.cjs +256 -0
- package/lib/memory/debouncer-drain-at-prompt.test.cjs +389 -0
- package/lib/memory/decision-capture.test.cjs +632 -0
- package/lib/memory/decision-capture.worker.cjs +70 -0
- package/lib/memory/explain-decision-command.test.cjs +521 -0
- package/lib/memory/explain-decision-footer.test.cjs +316 -0
- package/lib/memory/explored-materials-store.cjs +392 -0
- package/lib/memory/feynman-minto-guardian.test.cjs +736 -0
- package/lib/memory/feynman-minto-invariants.test.cjs +511 -0
- package/lib/memory/feynman-prompts-drift.test.cjs +144 -0
- package/lib/memory/feynman-prompts.cjs +151 -0
- package/lib/memory/feynman-prompts.test.cjs +96 -0
- package/lib/memory/folder-memory-quadruple.test.cjs +548 -0
- package/lib/memory/folder-memory.test.cjs +503 -0
- package/lib/memory/framework-chain-composer.test.cjs +515 -0
- package/lib/memory/frontmatter-schema-validator.test.cjs +290 -0
- package/lib/memory/heal-command.test.cjs +604 -0
- package/lib/memory/index-artifact-transaction.test.cjs +333 -0
- package/lib/memory/lazygraph-rs-discoveries-view.test.cjs +122 -0
- package/lib/memory/mcp-input-validation.test.cjs +240 -0
- package/lib/memory/mcp-server-brain-deps.test.cjs +270 -0
- package/lib/memory/mcp-stack-fallback.test.cjs +433 -0
- package/lib/memory/minto-debouncer.test.cjs +407 -0
- package/lib/memory/minto-debouncer.worker.cjs +46 -0
- package/lib/memory/minto-migration-v88.test.cjs +265 -0
- package/lib/memory/minto-schema-v88.test.cjs +390 -0
- package/lib/memory/mos-status-renderer.test.cjs +631 -0
- package/lib/memory/narrative-schema.cjs +376 -0
- package/lib/memory/narrative-schema.test.cjs +209 -0
- package/lib/memory/nav-dial.test.cjs +414 -0
- package/lib/memory/navigation-engine-core.test.cjs +722 -0
- package/lib/memory/navigation-invariants.test.cjs +483 -0
- package/lib/memory/offer-presenter.test.cjs +554 -0
- package/lib/memory/on-stop-snapshot.test.cjs +404 -0
- package/lib/memory/pending-tension-store.cjs +373 -0
- package/lib/memory/post-compact-reinjection.test.cjs +854 -0
- package/lib/memory/post-write-triple.test.cjs +317 -0
- package/lib/memory/pre-compact-snapshot.test.cjs +495 -0
- package/lib/memory/problem-type-router.test.cjs +656 -0
- package/lib/memory/query-efficiency-telemetry.test.cjs +370 -0
- package/lib/memory/recompile-room-references.test.cjs +392 -0
- package/lib/memory/recompile-room-references.worker.cjs +42 -0
- package/lib/memory/record-decision-dual-write.test.cjs +454 -0
- package/lib/memory/room-classifier-strict-mode.test.cjs +417 -0
- package/lib/memory/room-minto-hook.test.cjs +398 -0
- package/lib/memory/rs-discovery-engine.test.cjs +323 -0
- package/lib/memory/run-feynman-tests.cjs +1247 -0
- package/lib/memory/security-trifecta.test.cjs +312 -0
- package/lib/memory/session-start-brain-staleness.test.cjs +363 -0
- package/lib/memory/session-start-triple-injection.test.cjs +514 -0
- package/lib/memory/sessionstart-banner-formatter.cjs +318 -0
- package/lib/memory/sessionstart-minto-banner.test.cjs +373 -0
- package/lib/memory/skill-activation-router.test.cjs +419 -0
- package/lib/memory/stamp-artifact-write.test.cjs +304 -0
- package/lib/memory/statusline-active-room.test.cjs +315 -0
- package/lib/memory/statusline-minto-segment.test.cjs +292 -0
- package/lib/memory/sync-async-entry-points.test.cjs +204 -0
- package/lib/memory/test-bridge-writer-enhanced.cjs +452 -0
- package/lib/memory/test-rs-brain-substrate-shape.cjs +529 -0
- package/lib/memory/test-rs-brain-substrate.cjs +636 -0
- package/lib/memory/test-rs-breakthrough-scorer.cjs +375 -0
- package/lib/memory/test-rs-canon-violations.cjs +218 -0
- package/lib/memory/test-rs-chain-feeder-core.cjs +344 -0
- package/lib/memory/test-rs-chain-feeder-skill-spawn.cjs +297 -0
- package/lib/memory/test-rs-commercial-assessor.cjs +385 -0
- package/lib/memory/test-rs-differential-scorer.cjs +480 -0
- package/lib/memory/test-rs-discovery-engine.cjs +603 -0
- package/lib/memory/test-rs-domain-analyzer.cjs +492 -0
- package/lib/memory/test-rs-egress-primitives.cjs +420 -0
- package/lib/memory/test-rs-expert-mapper.cjs +547 -0
- package/lib/memory/test-rs-explain-command.cjs +443 -0
- package/lib/memory/test-rs-fetcher-academic.cjs +848 -0
- package/lib/memory/test-rs-fetcher-experts.cjs +496 -0
- package/lib/memory/test-rs-fetcher-industry.cjs +702 -0
- package/lib/memory/test-rs-fetcher-patents.cjs +674 -0
- package/lib/memory/test-rs-innovation-classifier.cjs +301 -0
- package/lib/memory/test-rs-mind-map.cjs +646 -0
- package/lib/memory/test-rs-neo4j-writer.cjs +518 -0
- package/lib/memory/test-rs-nl-to-query.cjs +449 -0
- package/lib/memory/test-rs-pinecone-bridge.cjs +277 -0
- package/lib/memory/test-rs-preprocessor.cjs +433 -0
- package/lib/memory/test-rs-query-matrix.cjs +391 -0
- package/lib/memory/test-rs-query-to-text.cjs +551 -0
- package/lib/memory/test-rs-sqlite-mirror.cjs +649 -0
- package/lib/memory/test-rs-thesis-generator.cjs +360 -0
- package/lib/memory/triple-context-formatter.cjs +473 -0
- package/lib/memory/triple-context-formatter.test.cjs +442 -0
- package/lib/memory/user-md-persona.test.cjs +565 -0
- package/lib/memory/userpromptsubmit-integration.test.cjs +690 -0
- package/lib/memory/validators/README.md +157 -0
- package/lib/memory/validators/brain-md-invariants.cjs +475 -0
- package/lib/memory/validators/brain-substrate-invariants.cjs +285 -0
- package/lib/memory/validators/external-academic-invariants.cjs +249 -0
- package/lib/memory/validators/external-industry-invariants.cjs +271 -0
- package/lib/memory/validators/external-patents-invariants.cjs +266 -0
- package/lib/memory/validators/minto-invariants.cjs +62 -0
- package/lib/memory/validators/navigation-invariants.cjs +340 -0
- package/lib/memory/validators/queue-health.cjs +95 -0
- package/lib/memory/validators/snapshot-integrity.cjs +129 -0
- package/lib/memory/validators/stale-lifecycle.cjs +116 -0
- package/lib/memory/vault-section-minto-generator-atomic.test.cjs +556 -0
- package/lib/memory/vault-section-minto-generator-atomic.worker.cjs +73 -0
- package/lib/memory/write-lock-atomic.test.cjs +137 -0
- package/lib/memory/write-lock-atomic.worker.cjs +55 -0
- package/lib/parity/check-parity.cjs +83 -0
- package/lib/presentation/presentation-server.cjs +101 -0
- package/lib/presentation/presentation-watcher.cjs +123 -0
- package/lib/quickview/hub-server.cjs +719 -0
- package/lib/quickview/server.cjs +533 -0
- package/lib/render/JTBD-PALETTES.md +145 -0
- package/lib/render/ROOM.md +59 -0
- package/lib/render/render-v2.cjs +486 -0
- package/lib/render/render-v2.test.cjs +267 -0
- package/lib/render/render.cjs +65 -0
- package/lib/state/ROOM.md +46 -0
- package/lib/state/state-md-parser.cjs +215 -0
- package/lib/statusline/ROOM.md +38 -0
- package/lib/statusline/banner-suppression.cjs +50 -0
- package/lib/statusline/surface-detect.cjs +85 -0
- package/lib/update-bootstrap.sh.template +145 -0
- package/lib/vault/frontmatter-schema.cjs +297 -0
- package/lib/vault/room-scanner.cjs +352 -0
- package/lib/vault/wikilink-builder.cjs +231 -0
- package/lib/vault/wikilink-builder.test.cjs +182 -0
- package/lib/wiki/graph-links.cjs +281 -0
- package/lib/wiki/page-renderer.cjs +229 -0
- package/lib/wiki/wiki-chat.cjs +81 -0
- package/lib/wiki/wiki-layout.cjs +1459 -0
- package/lib/wiki/wiki-search.cjs +142 -0
- package/lib/wiki/wiki-server.cjs +678 -0
- package/lib/wiki/wiki-watcher.cjs +105 -0
- package/lib/workflow/ROOM.md +47 -0
- package/lib/workflow/command-resolver.cjs +155 -0
- package/lib/workflow/command-resolver.test.cjs +235 -0
- package/package.json +44 -0
- package/pipelines/analogy/01-decompose.md +80 -0
- package/pipelines/analogy/02-abstract.md +87 -0
- package/pipelines/analogy/03-search.md +135 -0
- package/pipelines/analogy/04-transfer.md +101 -0
- package/pipelines/analogy/05-validate.md +106 -0
- package/pipelines/analogy/CHAIN.md +56 -0
- package/pipelines/discovery/01-explore-domains.md +44 -0
- package/pipelines/discovery/02-think-hats.md +50 -0
- package/pipelines/discovery/03-analyze-needs.md +54 -0
- package/pipelines/discovery/CHAIN.md +37 -0
- package/pipelines/thesis/01-structure-argument.md +45 -0
- package/pipelines/thesis/02-challenge-assumptions.md +48 -0
- package/pipelines/thesis/03-build-thesis.md +54 -0
- package/pipelines/thesis/CHAIN.md +37 -0
- package/references/brain/causal-directives.md +91 -0
- package/references/brain/causal-enrichment.cypher +165 -0
- package/references/brain/command-triggers-schema.md +226 -0
- package/references/brain/graph-architecture.md +317 -0
- package/references/brain/query-patterns.md +460 -0
- package/references/brain/room-hierarchy-schema.md +218 -0
- package/references/brain/schema.md +76 -0
- package/references/capability-radar/capabilities-index.md +241 -0
- package/references/capability-radar/changelog-cache.md +81 -0
- package/references/causal/causal-schema.md +103 -0
- package/references/design/email-template-standard.md +155 -0
- package/references/design/graph-visualization-standard.md +178 -0
- package/references/document-generation.md +179 -0
- package/references/hsi/HSI-TOOLS-REFERENCE.md +222 -0
- package/references/import-config.md +141 -0
- package/references/integrations/detection-patterns.md +101 -0
- package/references/meeting/artifact-template.md +377 -0
- package/references/meeting/cross-meeting-intelligence.md +216 -0
- package/references/meeting/cross-relationship-patterns.md +202 -0
- package/references/meeting/live-join-interface.md +244 -0
- package/references/meeting/section-mapping.md +192 -0
- package/references/meeting/segment-classification.md +258 -0
- package/references/meeting/speaker-profile-template.md +219 -0
- package/references/meeting/summary-template.md +348 -0
- package/references/meeting/transcript-patterns.md +226 -0
- package/references/methodology/analyze-needs.md +135 -0
- package/references/methodology/analyze-systems.md +121 -0
- package/references/methodology/analyze-timing.md +149 -0
- package/references/methodology/beautiful-question.md +109 -0
- package/references/methodology/build-knowledge.md +161 -0
- package/references/methodology/build-thesis.md +237 -0
- package/references/methodology/challenge-assumptions.md +127 -0
- package/references/methodology/diagnose.md +169 -0
- package/references/methodology/dominant-designs.md +212 -0
- package/references/methodology/explore-domains.md +147 -0
- package/references/methodology/explore-futures.md +163 -0
- package/references/methodology/explore-trends.md +129 -0
- package/references/methodology/find-bottlenecks.md +131 -0
- package/references/methodology/grade.md +211 -0
- package/references/methodology/index.md +97 -0
- package/references/methodology/leadership.md +200 -0
- package/references/methodology/lean-canvas.md +116 -0
- package/references/methodology/macro-trends.md +192 -0
- package/references/methodology/map-unknowns.md +137 -0
- package/references/methodology/mullins-7-domains.md +104 -0
- package/references/methodology/problem-types.md +65 -0
- package/references/methodology/root-cause.md +178 -0
- package/references/methodology/sapphire-encoding.md +355 -0
- package/references/methodology/scenario-plan.md +178 -0
- package/references/methodology/score-innovation.md +154 -0
- package/references/methodology/structure-argument.md +158 -0
- package/references/methodology/systems-thinking.md +159 -0
- package/references/methodology/think-hats.md +147 -0
- package/references/methodology/triz-matrix.json +751 -0
- package/references/methodology/triz-principles.md +501 -0
- package/references/methodology/user-needs.md +199 -0
- package/references/methodology/validate.md +163 -0
- package/references/methodology/value-proposition.md +244 -0
- package/references/opportunities/funding-lifecycle.md +103 -0
- package/references/opportunities/grant-api-patterns.md +99 -0
- package/references/opportunities/opportunity-template.md +84 -0
- package/references/personality/assessment-philosophy.md +72 -0
- package/references/personality/lexicon.md +100 -0
- package/references/personality/persona-chains.md +56 -0
- package/references/personality/pws-lexicon-full.md +499 -0
- package/references/personality/voice-dna.md +156 -0
- package/references/personas/hat-perspectives.md +76 -0
- package/references/personas/persona-template.md +63 -0
- package/references/pipeline/act-output-contract.md +88 -0
- package/references/pipeline/chains-index.md +39 -0
- package/references/pws-profile-generation.md +79 -0
- package/references/reasoning/reasoning-schema.md +143 -0
- package/references/reasoning/reasoning-template.md +68 -0
- package/references/reasoning/run-template.md +38 -0
- package/references/research/RESEARCH_14_CLAUDE_CODE_SOURCE_ARCHITECTURE.md +209 -0
- package/references/research/RESEARCH_15_V1.8_OPTIMIZATION_JTBD.md +375 -0
- package/references/research/RESEARCH_16_NATIVE_FIRST_PLUGIN_ARCHITECTURE.md +575 -0
- package/references/research/RESEARCH_17_MCP_UI_FRAMEWORKS.md +272 -0
- package/references/taxonomy/TAXONOMY.md +192 -0
- package/references/templates/MINTO.md +36 -0
- package/references/user-research/2026-04-05-leah-lawrence-session.md +202 -0
- package/references/vault-kit/README.md +35 -0
- package/references/vault-kit/app.json +12 -0
- package/references/vault-kit/appearance.json +12 -0
- package/references/vault-kit/graph.json +35 -0
- package/references/vault-kit/snippets/mindrian-destijl.css +297 -0
- package/references/vault-kit/templates/new-artifact.md +37 -0
- package/references/vault-kit/templates/new-meeting-note.md +35 -0
- package/references/vault-kit/templates/new-team-profile.md +29 -0
- package/references/vault-kit/templates/new-xref.md +35 -0
- package/references/visual/symbol-system.md +151 -0
- package/skills/MOSDeckEngine/SKILL.md +325 -0
- package/skills/brain-connector/SKILL.md +114 -0
- package/skills/context-engine/SKILL.md +147 -0
- package/skills/conversation-mode/SKILL.md +102 -0
- package/skills/larry-personality/SKILL.md +219 -0
- package/skills/larry-personality/framework-chains.md +92 -0
- package/skills/larry-personality/mode-engine.md +185 -0
- package/skills/mullins-scaffold/SKILL.md +61 -0
- package/skills/mullins-scaffold/scaffold.json +146 -0
- package/skills/pws-methodology/SKILL.md +49 -0
- package/skills/room-passive/SKILL.md +165 -0
- package/skills/room-proactive/SKILL.md +250 -0
- package/skills/ui-system/SKILL.md +277 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (c) 2026 Mindrian. BSL 1.1.
|
|
6
|
+
*
|
|
7
|
+
* Phase 91-07 -- Problem-Type Router (canonical 4-type routing layer)
|
|
8
|
+
* ====================================================================
|
|
9
|
+
* Pure module. Parses BRAIN.md problemtype_classification +
|
|
10
|
+
* wicked_indicators section bodies (already-parsed shape from
|
|
11
|
+
* readQuadruple.brain.sections) and returns canonical 4-type routing
|
|
12
|
+
* recommendations:
|
|
13
|
+
*
|
|
14
|
+
* UDP (Undefined Problem) -> Exploration skills family
|
|
15
|
+
* IDP (Ill-Defined Problem) -> Problem-Definition-Seeking family
|
|
16
|
+
* WDP (Well-Defined Problem) -> Execution + Validation family
|
|
17
|
+
* unknown / null -> No routing opinion (engine falls
|
|
18
|
+
* through to five-signal triangulation)
|
|
19
|
+
*
|
|
20
|
+
* Wicked escalation per Canon Appendix E rule R4: when
|
|
21
|
+
* wicked_indicators.wicked_score >= 8, the router applies a wicked
|
|
22
|
+
* override that replaces the base routing with the soft-systems family
|
|
23
|
+
* (Founder/Yellow + Investor/Black + Researcher/White + Student/Green
|
|
24
|
+
* + Mentor/Blue team composition is encoded as the verb / skill set
|
|
25
|
+
* here; the team-composition implementation lands in Plan 91-08 or a
|
|
26
|
+
* later phase).
|
|
27
|
+
*
|
|
28
|
+
* Per locked decision D-08 (Plan 91-CONTEXT): problem-type is one
|
|
29
|
+
* signal among five in the navigation-engine triangulation. It biases
|
|
30
|
+
* routing; it never forces a fire_skill in the face of higher-priority
|
|
31
|
+
* signals.
|
|
32
|
+
*
|
|
33
|
+
* Canon Part 3 (10-verb closed vocabulary):
|
|
34
|
+
* Every recommended skill maps to one of the canonical 10 verbs from
|
|
35
|
+
* navigation-engine-shared.CANONICAL_VERBS. The verb mapping is
|
|
36
|
+
* exposed via TYPE_VERB_MAPPING + WICKED_VERB_MAPPING for downstream
|
|
37
|
+
* consumers (navigation-engine.cjs decide(), /mos:explain-decision).
|
|
38
|
+
*
|
|
39
|
+
* Canon Part 7 (Reuse Before Build):
|
|
40
|
+
* The recommended_skills strings reference EXISTING /mos:* commands
|
|
41
|
+
* (explore-domains, beautiful-question, whitespace, find-analogies,
|
|
42
|
+
* find-connections, structure-argument, mullins, lean-canvas,
|
|
43
|
+
* map-unknowns, grade, deep-grade, score-innovation, build-thesis,
|
|
44
|
+
* challenge-assumptions, find-bottlenecks, scenario-plan,
|
|
45
|
+
* explore-futures). NO net-new commands invented here.
|
|
46
|
+
*
|
|
47
|
+
* Canon Part 8 (Graph Boundary):
|
|
48
|
+
* ProblemType is a generic enum (UDP / IDP / WDP / unknown), not user
|
|
49
|
+
* content. The router NEVER reads BRAIN.md directly; it only consumes
|
|
50
|
+
* already-parsed section bodies passed in by callers. Zero I/O. Zero
|
|
51
|
+
* network. Zero brain-client touches.
|
|
52
|
+
*
|
|
53
|
+
* Pure module: zero I/O, zero side effects, zero throws.
|
|
54
|
+
*
|
|
55
|
+
* License: BSL 1.1.
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
// ---------- Frozen routing tables ----------
|
|
59
|
+
|
|
60
|
+
// Each entry pairs a /mos:* command name (without the /mos: prefix)
|
|
61
|
+
// with one of the 10 Canon Part 3 canonical verbs. Verbs are the
|
|
62
|
+
// closed-set source of truth from navigation-engine-shared.CANONICAL_VERBS.
|
|
63
|
+
|
|
64
|
+
const UDP_SKILLS = Object.freeze([
|
|
65
|
+
Object.freeze({ skill: 'explore-domains', verb: 'Run Methodology' }),
|
|
66
|
+
Object.freeze({ skill: 'beautiful-question', verb: 'Reformulate' }),
|
|
67
|
+
Object.freeze({ skill: 'whitespace', verb: 'Navigate Graph' }),
|
|
68
|
+
Object.freeze({ skill: 'find-analogies', verb: 'Navigate Graph' }),
|
|
69
|
+
Object.freeze({ skill: 'find-connections', verb: 'Navigate Graph' }),
|
|
70
|
+
]);
|
|
71
|
+
|
|
72
|
+
const IDP_SKILLS = Object.freeze([
|
|
73
|
+
Object.freeze({ skill: 'beautiful-question', verb: 'Reformulate' }),
|
|
74
|
+
Object.freeze({ skill: 'structure-argument', verb: 'Run Methodology' }),
|
|
75
|
+
Object.freeze({ skill: 'mullins', verb: 'Run Methodology' }),
|
|
76
|
+
Object.freeze({ skill: 'lean-canvas', verb: 'Run Methodology' }),
|
|
77
|
+
Object.freeze({ skill: 'map-unknowns', verb: 'Synthesize' }),
|
|
78
|
+
]);
|
|
79
|
+
|
|
80
|
+
const WDP_SKILLS = Object.freeze([
|
|
81
|
+
Object.freeze({ skill: 'grade', verb: 'Run Methodology' }),
|
|
82
|
+
Object.freeze({ skill: 'deep-grade', verb: 'Spawn Sub-Agent' }),
|
|
83
|
+
Object.freeze({ skill: 'score-innovation', verb: 'Synthesize' }),
|
|
84
|
+
Object.freeze({ skill: 'build-thesis', verb: 'Synthesize' }),
|
|
85
|
+
Object.freeze({ skill: 'challenge-assumptions', verb: "Devil's Advocate" }),
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
// Wicked override per Canon Appendix E rule R4 (wicked_score >= 8).
|
|
89
|
+
// Soft-systems family: emphasize stress-testing, bottleneck discovery,
|
|
90
|
+
// scenario planning, and futures exploration. Team composition for
|
|
91
|
+
// this override (Founder/Yellow + Investor/Black + Researcher/White +
|
|
92
|
+
// Student/Green + Mentor/Blue) is implemented in Plan 91-08 or later;
|
|
93
|
+
// this plan only emits the verb / skill set.
|
|
94
|
+
const WICKED_SKILLS = Object.freeze([
|
|
95
|
+
Object.freeze({ skill: 'challenge-assumptions', verb: "Devil's Advocate" }),
|
|
96
|
+
Object.freeze({ skill: 'find-bottlenecks', verb: 'Navigate Graph' }),
|
|
97
|
+
Object.freeze({ skill: 'scenario-plan', verb: 'Scenario Plan' }),
|
|
98
|
+
Object.freeze({ skill: 'explore-futures', verb: 'Scenario Plan' }),
|
|
99
|
+
]);
|
|
100
|
+
|
|
101
|
+
const TYPE_VERB_MAPPING = Object.freeze({
|
|
102
|
+
UDP: UDP_SKILLS,
|
|
103
|
+
IDP: IDP_SKILLS,
|
|
104
|
+
WDP: WDP_SKILLS,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const WICKED_VERB_MAPPING = WICKED_SKILLS;
|
|
108
|
+
|
|
109
|
+
const WICKED_ESCALATION_THRESHOLD = 8;
|
|
110
|
+
const LOW_CONFIDENCE_FLOOR = 0.5;
|
|
111
|
+
|
|
112
|
+
// Canonical type set (closed). Anything else (including 'wicked' as a
|
|
113
|
+
// type literal) becomes 'unknown' so wicked escalation is driven only
|
|
114
|
+
// by wicked_indicators score, not by the type label.
|
|
115
|
+
const CANONICAL_TYPES = Object.freeze(new Set(['UDP', 'IDP', 'WDP']));
|
|
116
|
+
|
|
117
|
+
// ---------- Helpers ----------
|
|
118
|
+
|
|
119
|
+
function extractTypeLabel(body) {
|
|
120
|
+
// Permissive: match `type: <token>` on any line. Tolerant of leading
|
|
121
|
+
// whitespace, list markers, and case variation. Returns the raw
|
|
122
|
+
// token (uppercased to match canonical set).
|
|
123
|
+
const m = /(?:^|\n)\s*[\-\*]?\s*type\s*:\s*([A-Za-z][A-Za-z0-9_-]*)/i.exec(body);
|
|
124
|
+
if (!m) return null;
|
|
125
|
+
return m[1].toUpperCase();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function extractConfidenceValue(body) {
|
|
129
|
+
// Permissive: match `confidence: <float>` on any line. Returns null
|
|
130
|
+
// when missing OR out-of-range (clamped to [0, 1] via null sentinel
|
|
131
|
+
// so callers see "no usable confidence" rather than a silent clamp).
|
|
132
|
+
const m = /(?:^|\n)\s*[\-\*]?\s*confidence\s*:\s*([0-9]*\.?[0-9]+)/i.exec(body);
|
|
133
|
+
if (!m) return null;
|
|
134
|
+
const v = parseFloat(m[1]);
|
|
135
|
+
if (!Number.isFinite(v)) return null;
|
|
136
|
+
if (v < 0.0 || v > 1.0) return null;
|
|
137
|
+
return v;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function isNoSignal(body) {
|
|
141
|
+
// Body is the literal "(no signal)" string (with optional whitespace).
|
|
142
|
+
return /^\s*\(no\s*signal\)\s*$/i.test(body);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function extractWickedScore(body) {
|
|
146
|
+
// Returns 0 when no score parses (matches navigation-engine.cjs
|
|
147
|
+
// extractWickedScore semantics so callers get the same behavior
|
|
148
|
+
// whether they go through this module or the engine directly).
|
|
149
|
+
if (typeof body !== 'string' || body.length === 0) return 0;
|
|
150
|
+
const m = /wicked_score\s*:\s*(\d+)/i.exec(body);
|
|
151
|
+
if (!m) return 0;
|
|
152
|
+
const v = parseInt(m[1], 10);
|
|
153
|
+
if (!Number.isFinite(v) || v < 0) return 0;
|
|
154
|
+
return v;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ---------- Public API ----------
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* parseProblemTypeSection(section) -> {type, confidence} | null
|
|
161
|
+
*
|
|
162
|
+
* Tolerantly extracts a (type, confidence) pair from the brain.sections.
|
|
163
|
+
* problemtype_classification body. Returns null when the body is the
|
|
164
|
+
* canonical "(no signal)" placeholder OR when nothing parses. Never
|
|
165
|
+
* throws.
|
|
166
|
+
*
|
|
167
|
+
* Output shape:
|
|
168
|
+
* { type: 'UDP' | 'IDP' | 'WDP' | 'unknown', confidence: number | null }
|
|
169
|
+
*
|
|
170
|
+
* @param {object|null} section -- {body, tokens_estimate} or null
|
|
171
|
+
* @returns {{type:string, confidence:number|null}|null}
|
|
172
|
+
*/
|
|
173
|
+
function parseProblemTypeSection(section) {
|
|
174
|
+
if (section === null || section === undefined) return null;
|
|
175
|
+
if (typeof section !== 'object') return null;
|
|
176
|
+
const body = section.body;
|
|
177
|
+
if (typeof body !== 'string' || body.length === 0) return null;
|
|
178
|
+
if (isNoSignal(body)) return null;
|
|
179
|
+
|
|
180
|
+
const typeLabel = extractTypeLabel(body);
|
|
181
|
+
if (typeLabel === null) return null;
|
|
182
|
+
|
|
183
|
+
const confidence = extractConfidenceValue(body);
|
|
184
|
+
const type = CANONICAL_TYPES.has(typeLabel) ? typeLabel : 'unknown';
|
|
185
|
+
return { type: type, confidence: confidence };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* routeByProblemType(type, confidence) -> routing object
|
|
190
|
+
*
|
|
191
|
+
* Returns the recommended_skills + suppressed_skills + reason for a
|
|
192
|
+
* given (type, confidence) pair. confidence is informational; the same
|
|
193
|
+
* skills surface for low-confidence calls but the reason is annotated
|
|
194
|
+
* with "low confidence" so callers can decide to weight down.
|
|
195
|
+
*
|
|
196
|
+
* Output shape:
|
|
197
|
+
* {
|
|
198
|
+
* recommended_skills: string[], // /mos:* command names (no prefix)
|
|
199
|
+
* suppressed_skills: string[],
|
|
200
|
+
* reason: string,
|
|
201
|
+
* wicked_override: boolean, // always false from this function
|
|
202
|
+
* }
|
|
203
|
+
*
|
|
204
|
+
* Never throws.
|
|
205
|
+
*
|
|
206
|
+
* @param {string|null} type
|
|
207
|
+
* @param {number|null} confidence
|
|
208
|
+
* @returns {{recommended_skills:string[], suppressed_skills:string[], reason:string, wicked_override:boolean}}
|
|
209
|
+
*/
|
|
210
|
+
function routeByProblemType(type, confidence) {
|
|
211
|
+
// Normalize: null / unknown / non-canonical -> fallback.
|
|
212
|
+
if (type === null || type === undefined || type === 'unknown' || !CANONICAL_TYPES.has(type)) {
|
|
213
|
+
return {
|
|
214
|
+
recommended_skills: [],
|
|
215
|
+
suppressed_skills: [],
|
|
216
|
+
reason: 'ProblemType classification unavailable; using fallback triangulation.',
|
|
217
|
+
wicked_override: false,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const table = TYPE_VERB_MAPPING[type];
|
|
222
|
+
const skills = table.map(function (e) { return e.skill; });
|
|
223
|
+
|
|
224
|
+
let reason;
|
|
225
|
+
if (type === 'UDP') {
|
|
226
|
+
reason = 'Problem is Undefined (UDP confidence ' + formatConf(confidence) + '). Surfacing exploration tools.';
|
|
227
|
+
} else if (type === 'IDP') {
|
|
228
|
+
reason = 'Problem is Ill-Defined (IDP confidence ' + formatConf(confidence) + '). Surfacing definition-seeking tools.';
|
|
229
|
+
} else { // WDP
|
|
230
|
+
reason = 'Problem is Well-Defined (WDP confidence ' + formatConf(confidence) + '). Surfacing execution/validation tools.';
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
if (typeof confidence === 'number' && confidence < LOW_CONFIDENCE_FLOOR) {
|
|
234
|
+
reason += ' (low confidence; caller may weight down.)';
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return {
|
|
238
|
+
recommended_skills: skills,
|
|
239
|
+
suppressed_skills: [],
|
|
240
|
+
reason: reason,
|
|
241
|
+
wicked_override: false,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function formatConf(c) {
|
|
246
|
+
if (typeof c !== 'number' || !Number.isFinite(c)) return 'n/a';
|
|
247
|
+
return c.toFixed(2);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* detectWickedEscalation(wickedSection) -> boolean
|
|
252
|
+
*
|
|
253
|
+
* Returns true when wicked_indicators.wicked_score >= 8 per Canon
|
|
254
|
+
* Appendix E rule R4. Returns false when the section is null, empty,
|
|
255
|
+
* unparseable, or below threshold.
|
|
256
|
+
*
|
|
257
|
+
* Never throws.
|
|
258
|
+
*
|
|
259
|
+
* @param {object|null} wickedSection -- {body, tokens_estimate} or null
|
|
260
|
+
* @returns {boolean}
|
|
261
|
+
*/
|
|
262
|
+
function detectWickedEscalation(wickedSection) {
|
|
263
|
+
if (wickedSection === null || wickedSection === undefined) return false;
|
|
264
|
+
if (typeof wickedSection !== 'object') return false;
|
|
265
|
+
const body = wickedSection.body;
|
|
266
|
+
if (typeof body !== 'string') return false;
|
|
267
|
+
const score = extractWickedScore(body);
|
|
268
|
+
return score >= WICKED_ESCALATION_THRESHOLD;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* applyWickedOverride(baseRouting) -> overridden routing
|
|
273
|
+
*
|
|
274
|
+
* Replaces baseRouting.recommended_skills with the WICKED_SKILLS
|
|
275
|
+
* soft-systems family per Canon Appendix E rule R4. The reason cites
|
|
276
|
+
* Canon Appendix E R4 explicitly so /mos:explain-decision can surface
|
|
277
|
+
* the override path.
|
|
278
|
+
*
|
|
279
|
+
* Never throws. Returns a new object (does not mutate baseRouting).
|
|
280
|
+
*
|
|
281
|
+
* @param {object} baseRouting -- output of routeByProblemType
|
|
282
|
+
* @returns {{recommended_skills:string[], suppressed_skills:string[], reason:string, wicked_override:boolean}}
|
|
283
|
+
*/
|
|
284
|
+
function applyWickedOverride(baseRouting) {
|
|
285
|
+
const skills = WICKED_SKILLS.map(function (e) { return e.skill; });
|
|
286
|
+
const baseReason = (baseRouting && typeof baseRouting.reason === 'string')
|
|
287
|
+
? baseRouting.reason
|
|
288
|
+
: '';
|
|
289
|
+
const reason = 'Wicked indicators detected (wicked_score >= ' + WICKED_ESCALATION_THRESHOLD +
|
|
290
|
+
'). Escalating to soft-systems family per Canon Appendix E R4. ' +
|
|
291
|
+
(baseReason.length > 0 ? '(Base: ' + baseReason + ')' : '');
|
|
292
|
+
return {
|
|
293
|
+
recommended_skills: skills,
|
|
294
|
+
suppressed_skills: (baseRouting && Array.isArray(baseRouting.suppressed_skills))
|
|
295
|
+
? baseRouting.suppressed_skills.slice()
|
|
296
|
+
: [],
|
|
297
|
+
reason: reason,
|
|
298
|
+
wicked_override: true,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// ---------- Exports ----------
|
|
303
|
+
|
|
304
|
+
module.exports = {
|
|
305
|
+
parseProblemTypeSection: parseProblemTypeSection,
|
|
306
|
+
routeByProblemType: routeByProblemType,
|
|
307
|
+
detectWickedEscalation: detectWickedEscalation,
|
|
308
|
+
applyWickedOverride: applyWickedOverride,
|
|
309
|
+
// Frozen tables (Test 16 asserts every entry maps to a canonical verb).
|
|
310
|
+
TYPE_VERB_MAPPING: TYPE_VERB_MAPPING,
|
|
311
|
+
WICKED_VERB_MAPPING: WICKED_VERB_MAPPING,
|
|
312
|
+
// Constants exposed for invariant tests.
|
|
313
|
+
WICKED_ESCALATION_THRESHOLD: WICKED_ESCALATION_THRESHOLD,
|
|
314
|
+
LOW_CONFIDENCE_FLOOR: LOW_CONFIDENCE_FLOOR,
|
|
315
|
+
};
|