@lucern/graph-primitives 1.0.29 → 1.0.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/dist/{beliefDecay-DZ6tkLYq.d.ts → beliefDecay-BmkEk5OJ.d.ts} +3 -3
- package/dist/beliefDecay.d.ts +1 -1
- package/dist/beliefDecay.js +448 -314
- package/dist/beliefDecay.js.map +1 -1
- package/dist/{beliefEvidenceLinks-CWOXxxJg.d.ts → beliefEvidenceLinks-BzfjON_6.d.ts} +13 -13
- package/dist/beliefEvidenceLinks.d.ts +1 -1
- package/dist/beliefEvidenceLinks.js +843 -624
- package/dist/beliefEvidenceLinks.js.map +1 -1
- package/dist/beliefEvidenceLinks.operational.d.ts +7 -5
- package/dist/beliefEvidenceLinks.operational.js +91 -18
- package/dist/beliefEvidenceLinks.operational.js.map +1 -1
- package/dist/beliefLifecycle.js.map +1 -1
- package/dist/confidencePropagationDispatch.d.ts +28 -27
- package/dist/confidencePropagationDispatch.js +157 -99
- package/dist/confidencePropagationDispatch.js.map +1 -1
- package/dist/{contradictions-51VLsESq.d.ts → contradictions-BATPuZTL.d.ts} +10 -10
- package/dist/contradictions.d.ts +1 -1
- package/dist/contradictions.js +395 -225
- package/dist/contradictions.js.map +1 -1
- package/dist/convex.d.ts +65 -30
- package/dist/convex.js +7 -3
- package/dist/convex.js.map +1 -1
- package/dist/debug.js.map +1 -1
- package/dist/edgeValidation.js +293 -85
- package/dist/edgeValidation.js.map +1 -1
- package/dist/edges/contains.d.ts +1 -1
- package/dist/edges/contains.js.map +1 -1
- package/dist/edges/contradicts.d.ts +1 -1
- package/dist/edges/contradicts.js.map +1 -1
- package/dist/edges/{dependsOn.d.ts → depends-on.d.ts} +1 -1
- package/dist/edges/{dependsOn.js → depends-on.js} +4 -4
- package/dist/edges/depends-on.js.map +1 -0
- package/dist/edges/{derivedFrom.d.ts → derived-from.d.ts} +1 -1
- package/dist/edges/{derivedFrom.js → derived-from.js} +3 -3
- package/dist/edges/derived-from.js.map +1 -0
- package/dist/edges/elaborates.d.ts +1 -1
- package/dist/edges/elaborates.js.map +1 -1
- package/dist/edges/index.d.ts +7 -3
- package/dist/edges/index.js +7 -4
- package/dist/edges/index.js.map +1 -1
- package/dist/edges/informs.d.ts +1 -1
- package/dist/edges/informs.js.map +1 -1
- package/dist/edges/{propagationTypes.d.ts → propagation-types.d.ts} +14 -14
- package/dist/edges/{propagationTypes.js → propagation-types.js} +3 -3
- package/dist/edges/propagation-types.js.map +1 -0
- package/dist/edges/refutes.d.ts +1 -1
- package/dist/edges/refutes.js.map +1 -1
- package/dist/edges/supports.d.ts +1 -1
- package/dist/edges/supports.js.map +1 -1
- package/dist/edges/tests.d.ts +1 -1
- package/dist/edges/tests.js.map +1 -1
- package/dist/edges/utils.d.ts +1 -1
- package/dist/edges/utils.js.map +1 -1
- package/dist/embeddingTrigger.d.ts +14 -6
- package/dist/embeddingTrigger.js +11 -14
- package/dist/embeddingTrigger.js.map +1 -1
- package/dist/{entityBridge-DMaKooYn.d.ts → entityBridge-BhVDM3pc.d.ts} +5 -5
- package/dist/entityBridge.d.ts +1 -1
- package/dist/entityBridge.js +602 -225
- package/dist/entityBridge.js.map +1 -1
- package/dist/entityCanonicalMatch.d.ts +14 -12
- package/dist/entityCanonicalMatch.js.map +1 -1
- package/dist/{entityLifecycle-CvgSK5FV.d.ts → entityLifecycle-BsfCz9pS.d.ts} +5 -9
- package/dist/entityLifecycle.d.ts +1 -1
- package/dist/entityLifecycle.js +854 -480
- package/dist/entityLifecycle.js.map +1 -1
- package/dist/{entityValidation-KLZ_Xl2D.d.ts → entityValidation-B1yNEHJx.d.ts} +7 -6
- package/dist/entityValidation.d.ts +3 -1
- package/dist/entityValidation.js +60 -8
- package/dist/entityValidation.js.map +1 -1
- package/dist/{epistemicAnswers-C5ib4z6_.d.ts → epistemicAnswers-f47YMu9U.d.ts} +6 -6
- package/dist/epistemicAnswers.d.ts +1 -1
- package/dist/epistemicAnswers.js +587 -545
- package/dist/epistemicAnswers.js.map +1 -1
- package/dist/epistemicBeliefs.admin.d.ts +8 -8
- package/dist/epistemicBeliefs.admin.js +365 -166
- package/dist/epistemicBeliefs.admin.js.map +1 -1
- package/dist/epistemicBeliefs.backfills.d.ts +8 -8
- package/dist/epistemicBeliefs.backfills.js +655 -289
- package/dist/epistemicBeliefs.backfills.js.map +1 -1
- package/dist/epistemicBeliefs.confidence.d.ts +19 -15
- package/dist/epistemicBeliefs.confidence.js +633 -386
- package/dist/epistemicBeliefs.confidence.js.map +1 -1
- package/dist/epistemicBeliefs.core.d.ts +6 -6
- package/dist/epistemicBeliefs.core.js +717 -371
- package/dist/epistemicBeliefs.core.js.map +1 -1
- package/dist/epistemicBeliefs.d.ts +11 -9
- package/dist/epistemicBeliefs.forkEvidence.d.ts +2 -0
- package/dist/epistemicBeliefs.forkEvidence.js +8 -8
- package/dist/epistemicBeliefs.forkEvidence.js.map +1 -1
- package/dist/epistemicBeliefs.helpers.d.ts +68 -49
- package/dist/epistemicBeliefs.helpers.js +358 -211
- package/dist/epistemicBeliefs.helpers.js.map +1 -1
- package/dist/epistemicBeliefs.internal.d.ts +5 -5
- package/dist/epistemicBeliefs.internal.js +1248 -1026
- package/dist/epistemicBeliefs.internal.js.map +1 -1
- package/dist/epistemicBeliefs.js +4942 -3590
- package/dist/epistemicBeliefs.js.map +1 -1
- package/dist/epistemicBeliefs.lifecycle.d.ts +5 -5
- package/dist/epistemicBeliefs.lifecycle.js +1138 -781
- package/dist/epistemicBeliefs.lifecycle.js.map +1 -1
- package/dist/epistemicBeliefs.links.d.ts +7 -7
- package/dist/epistemicBeliefs.links.js +404 -267
- package/dist/epistemicBeliefs.links.js.map +1 -1
- package/dist/epistemicBeliefs.queries.d.ts +4 -4
- package/dist/epistemicBeliefs.queries.js +175 -20
- package/dist/epistemicBeliefs.queries.js.map +1 -1
- package/dist/epistemicBeliefs.topicAnchor.d.ts +6 -4
- package/dist/epistemicBeliefs.topicAnchor.js +12 -5
- package/dist/epistemicBeliefs.topicAnchor.js.map +1 -1
- package/dist/epistemicContracts.d.ts +28 -3
- package/dist/epistemicContracts.evaluators.d.ts +2 -0
- package/dist/epistemicContracts.evaluators.js +1062 -576
- package/dist/epistemicContracts.evaluators.js.map +1 -1
- package/dist/epistemicContracts.handlers.d.ts +15 -32
- package/dist/epistemicContracts.handlers.js +1829 -1351
- package/dist/epistemicContracts.handlers.js.map +1 -1
- package/dist/epistemicContracts.js +1131 -636
- package/dist/epistemicContracts.js.map +1 -1
- package/dist/epistemicContracts.metrics.d.ts +2 -0
- package/dist/epistemicContracts.metrics.js +375 -158
- package/dist/epistemicContracts.metrics.js.map +1 -1
- package/dist/epistemicContracts.types.d.ts +87 -81
- package/dist/epistemicEdgeCreation.d.ts +2 -0
- package/dist/epistemicEdgeCreation.js +87 -16
- package/dist/epistemicEdgeCreation.js.map +1 -1
- package/dist/{epistemicEdges-BF-cn4i3.d.ts → epistemicEdges-BGBh0QSP.d.ts} +4 -7
- package/dist/epistemicEdges.d.ts +6 -5
- package/dist/epistemicEdges.handlers.d.ts +3 -3
- package/dist/epistemicEdges.handlers.js +129 -24
- package/dist/epistemicEdges.handlers.js.map +1 -1
- package/dist/epistemicEdges.helpers.d.ts +6 -4
- package/dist/epistemicEdges.helpers.js +37 -2
- package/dist/epistemicEdges.helpers.js.map +1 -1
- package/dist/epistemicEdges.js +1966 -1202
- package/dist/epistemicEdges.js.map +1 -1
- package/dist/epistemicEdges.mutations.d.ts +7 -7
- package/dist/epistemicEdges.mutations.js +956 -579
- package/dist/epistemicEdges.mutations.js.map +1 -1
- package/dist/epistemicEdges.queries.d.ts +16 -16
- package/dist/epistemicEdges.queries.js +639 -367
- package/dist/epistemicEdges.queries.js.map +1 -1
- package/dist/epistemicEdges.types.d.ts +10 -8
- package/dist/epistemicEvidence.d.ts +4 -1
- package/dist/epistemicEvidence.js +933 -532
- package/dist/epistemicEvidence.js.map +1 -1
- package/dist/epistemicEvidenceHelpers.d.ts +26 -10
- package/dist/epistemicEvidenceHelpers.js +239 -200
- package/dist/epistemicEvidenceHelpers.js.map +1 -1
- package/dist/epistemicEvidenceMutations.d.ts +8 -8
- package/dist/epistemicEvidenceMutations.js +840 -692
- package/dist/epistemicEvidenceMutations.js.map +1 -1
- package/dist/epistemicEvidenceQueries.d.ts +8 -8
- package/dist/epistemicEvidenceQueries.js +514 -238
- package/dist/epistemicEvidenceQueries.js.map +1 -1
- package/dist/epistemicHelpers.d.ts +4 -2
- package/dist/epistemicHelpers.js +308 -134
- package/dist/epistemicHelpers.js.map +1 -1
- package/dist/epistemicInsert.d.ts +16 -4
- package/dist/epistemicInsert.js +6 -3
- package/dist/epistemicInsert.js.map +1 -1
- package/dist/epistemicLayerRules.d.ts +10 -8
- package/dist/epistemicLayerRules.js +1 -5
- package/dist/epistemicLayerRules.js.map +1 -1
- package/dist/{epistemicLinking-CfE00tHJ.d.ts → epistemicLinking-CsCDv2cN.d.ts} +3 -3
- package/dist/epistemicLinking.d.ts +1 -1
- package/dist/epistemicLinking.js +177 -100
- package/dist/epistemicLinking.js.map +1 -1
- package/dist/epistemicNodeCreation.d.ts +2 -0
- package/dist/epistemicNodeCreation.js +203 -40
- package/dist/epistemicNodeCreation.js.map +1 -1
- package/dist/{epistemicNodes-BCQxpYx_.d.ts → epistemicNodes-CokAgBHg.d.ts} +3 -3
- package/dist/epistemicNodes.d.ts +3 -3
- package/dist/epistemicNodes.helpers.d.ts +24 -15
- package/dist/epistemicNodes.helpers.js.map +1 -1
- package/dist/epistemicNodes.internal.d.ts +6 -6
- package/dist/epistemicNodes.internal.js +389 -319
- package/dist/epistemicNodes.internal.js.map +1 -1
- package/dist/epistemicNodes.js +700 -504
- package/dist/epistemicNodes.js.map +1 -1
- package/dist/epistemicNodes.mutations.d.ts +6 -6
- package/dist/epistemicNodes.mutations.js +560 -463
- package/dist/epistemicNodes.mutations.js.map +1 -1
- package/dist/epistemicNodes.queries.d.ts +8 -8
- package/dist/epistemicNodes.queries.js +311 -314
- package/dist/epistemicNodes.queries.js.map +1 -1
- package/dist/epistemicNodes.validators.d.ts +2 -2
- package/dist/epistemicNodes.validators.js.map +1 -1
- package/dist/epistemicQuestions.conviction.d.ts +8 -8
- package/dist/epistemicQuestions.conviction.js +665 -484
- package/dist/epistemicQuestions.conviction.js.map +1 -1
- package/dist/epistemicQuestions.create.d.ts +4 -4
- package/dist/epistemicQuestions.create.js +640 -612
- package/dist/epistemicQuestions.create.js.map +1 -1
- package/dist/epistemicQuestions.d.ts +8 -5
- package/dist/epistemicQuestions.evidence.d.ts +2 -2
- package/dist/epistemicQuestions.evidence.js +475 -383
- package/dist/epistemicQuestions.evidence.js.map +1 -1
- package/dist/epistemicQuestions.helpers.d.ts +125 -24
- package/dist/epistemicQuestions.helpers.js +240 -209
- package/dist/epistemicQuestions.helpers.js.map +1 -1
- package/dist/epistemicQuestions.js +3474 -2823
- package/dist/epistemicQuestions.js.map +1 -1
- package/dist/epistemicQuestions.lifecycle.d.ts +2 -2
- package/dist/epistemicQuestions.lifecycle.js +607 -546
- package/dist/epistemicQuestions.lifecycle.js.map +1 -1
- package/dist/epistemicQuestions.queries.d.ts +12 -7
- package/dist/epistemicQuestions.queries.js +305 -244
- package/dist/epistemicQuestions.queries.js.map +1 -1
- package/dist/epistemicQuestions.sprint.d.ts +2 -2
- package/dist/epistemicQuestions.sprint.js +600 -394
- package/dist/epistemicQuestions.sprint.js.map +1 -1
- package/dist/epistemicQuestions.tail.d.ts +6 -6
- package/dist/epistemicQuestions.tail.js +572 -433
- package/dist/epistemicQuestions.tail.js.map +1 -1
- package/dist/{epistemicSources-dlKj58Jp.d.ts → epistemicSources-DQtaEkWs.d.ts} +4 -4
- package/dist/epistemicSources.d.ts +1 -1
- package/dist/epistemicSources.js +351 -311
- package/dist/epistemicSources.js.map +1 -1
- package/dist/evaluators/index.d.ts +8 -6
- package/dist/evaluators/index.js +399 -167
- package/dist/evaluators/index.js.map +1 -1
- package/dist/evaluators/lint-checker-evaluator.d.ts +16 -0
- package/dist/evaluators/{lintCheckerEvaluator.js → lint-checker-evaluator.js} +10 -5
- package/dist/evaluators/lint-checker-evaluator.js.map +1 -0
- package/dist/evaluators/{sentryCheckerEvaluator.d.ts → sentry-checker-evaluator.d.ts} +7 -2
- package/dist/evaluators/{sentryCheckerEvaluator.js → sentry-checker-evaluator.js} +3 -3
- package/dist/evaluators/sentry-checker-evaluator.js.map +1 -0
- package/dist/evaluators/shared.d.ts +2 -2
- package/dist/evaluators/shared.js +3 -1
- package/dist/evaluators/shared.js.map +1 -1
- package/dist/evaluators/{testRunnerEvaluator.d.ts → test-runner-evaluator.d.ts} +6 -1
- package/dist/evaluators/{testRunnerEvaluator.js → test-runner-evaluator.js} +6 -4
- package/dist/evaluators/test-runner-evaluator.js.map +1 -0
- package/dist/evaluators/tsc-checker-evaluator.d.ts +16 -0
- package/dist/evaluators/{tscCheckerEvaluator.js → tsc-checker-evaluator.js} +10 -5
- package/dist/evaluators/tsc-checker-evaluator.js.map +1 -0
- package/dist/graphTypes.js +6 -2
- package/dist/graphTypes.js.map +1 -1
- package/dist/helpers.d.ts +2 -0
- package/dist/helpers.js +313 -93
- package/dist/helpers.js.map +1 -1
- package/dist/{index-C-Kyd7hD.d.ts → index-DZxyC9Pb.d.ts} +7 -6
- package/dist/index.d.ts +86 -83
- package/dist/index.js +16914 -11760
- package/dist/index.js.map +1 -1
- package/dist/invariantEnforcement.d.ts +3 -3
- package/dist/invariantEnforcement.js.map +1 -1
- package/dist/logicalRoleInference.d.ts +2 -0
- package/dist/logicalRoleInference.js +1 -1
- package/dist/logicalRoleInference.js.map +1 -1
- package/dist/matcherFeedbackUtils.d.ts +2 -2
- package/dist/matcherFeedbackUtils.js.map +1 -1
- package/dist/{ontology-matching-C6rrz2VP.d.ts → ontology-matching-C-mYFrir.d.ts} +16 -16
- package/dist/ontology-matching.d.ts +1 -1
- package/dist/{ontologyApproval-CFYmqKmk.d.ts → ontologyApproval-BVt0feJi.d.ts} +10 -10
- package/dist/ontologyApproval.d.ts +1 -1
- package/dist/ontologyApproval.js +7 -1
- package/dist/ontologyApproval.js.map +1 -1
- package/dist/ontologyDefinitions.d.ts +14 -24
- package/dist/ontologyDefinitions.js +269 -34
- package/dist/ontologyDefinitions.js.map +1 -1
- package/dist/ontologyHelpers.d.ts +13 -13
- package/dist/ontologyHelpers.js.map +1 -1
- package/dist/{ontologyRegistry-B67rPJ16.d.ts → ontologyRegistry-CljS-ENv.d.ts} +2 -2
- package/dist/ontologyRegistry.d.ts +1 -1
- package/dist/ontologyRegistry.js +34 -6
- package/dist/ontologyRegistry.js.map +1 -1
- package/dist/{projectionReconciliation-jww2fBI0.d.ts → projectionReconciliation-DnrSgHSQ.d.ts} +4 -4
- package/dist/projectionReconciliation.d.ts +1 -1
- package/dist/projectionReconciliation.js +57 -10
- package/dist/projectionReconciliation.js.map +1 -1
- package/dist/{projectionStaleness-CmdbpjVK.d.ts → projectionStaleness-C8ImQ2zP.d.ts} +17 -17
- package/dist/projectionStaleness.d.ts +1 -1
- package/dist/projectionStaleness.js +8 -2
- package/dist/projectionStaleness.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/{questionEvidenceLinks-DFlyPpAj.d.ts → questionEvidenceLinks-_nPRa-LY.d.ts} +10 -10
- package/dist/questionEvidenceLinks.d.ts +1 -1
- package/dist/questionEvidenceLinks.js +564 -347
- package/dist/questionEvidenceLinks.js.map +1 -1
- package/dist/{resolverTypes-CC8Ea2E2.d.ts → resolverTypes-BOXPxLET.d.ts} +8 -7
- package/dist/resolverTypes.d.ts +4 -2
- package/dist/{resolvers-Br1a6eLV.d.ts → resolvers-B1TIBmRO.d.ts} +3 -1
- package/dist/resolvers.d.ts +5 -3
- package/dist/resolvers.js +121 -77
- package/dist/resolvers.js.map +1 -1
- package/dist/scopeResolverCompat.d.ts +10 -7
- package/dist/scopeResolverCompat.js +106 -123
- package/dist/scopeResolverCompat.js.map +1 -1
- package/dist/{text-matching-DNg4M5Wd.d.ts → text-matching-DzFooju6.d.ts} +7 -7
- package/dist/text-matching.d.ts +1 -1
- package/dist/topicOntologyResolver.d.ts +22 -21
- package/dist/topicOntologyResolver.js +54 -32
- package/dist/topicOntologyResolver.js.map +1 -1
- package/dist/topicProjectOverlay.d.ts +30 -20
- package/dist/topicProjectOverlay.js +120 -76
- package/dist/topicProjectOverlay.js.map +1 -1
- package/dist/{topicScope-7zhyeGl7.d.ts → topicScope-DJVa0mLa.d.ts} +22 -7
- package/dist/topicScope.d.ts +3 -1
- package/dist/topicScope.js +104 -119
- package/dist/topicScope.js.map +1 -1
- package/dist/workflowBridge.d.ts +26 -15
- package/dist/workflowBridge.js +140 -144
- package/dist/workflowBridge.js.map +1 -1
- package/dist/workspaceIsolation.d.ts +14 -12
- package/dist/workspaceIsolation.js +108 -122
- package/dist/workspaceIsolation.js.map +1 -1
- package/package.json +4 -4
- package/dist/edges/dependsOn.js.map +0 -1
- package/dist/edges/derivedFrom.js.map +0 -1
- package/dist/edges/propagationTypes.js.map +0 -1
- package/dist/evaluators/lintCheckerEvaluator.d.ts +0 -11
- package/dist/evaluators/lintCheckerEvaluator.js.map +0 -1
- package/dist/evaluators/sentryCheckerEvaluator.js.map +0 -1
- package/dist/evaluators/testRunnerEvaluator.js.map +0 -1
- package/dist/evaluators/tscCheckerEvaluator.d.ts +0 -11
- package/dist/evaluators/tscCheckerEvaluator.js.map +0 -1
- package/dist/{epistemicQuestions-bwHd2FWE.d.ts → epistemicQuestions-Do1fhYm5.d.ts} +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/beliefLifecycle.ts","../src/convex.ts","../src/debug.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicBeliefs.helpers.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/dependsOn.ts","../src/edges/derivedFrom.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagationTypes.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.confidence.ts","../src/epistemicContracts.metrics.ts","../src/evaluators/shared.ts","../src/evaluators/lintCheckerEvaluator.ts","../src/evaluators/sentryCheckerEvaluator.ts","../src/evaluators/testRunnerEvaluator.ts","../src/evaluators/tscCheckerEvaluator.ts","../src/evaluators/index.ts","../src/epistemicContracts.evaluators.ts","../src/epistemicContracts.handlers.ts"],"names":["normalizeScopeValue","v","mkOpinion","project","readOpinionFromRecord","confidenceFromSL","detectTupleContradiction","evaluateTupleContradictionTransition","parseConfig","parseDiagnostics","getMatchedDiagnostics","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","resolveSchedulesForTrigger","getCurrentUserId","checkProjectAccess","permissiveReturn"],"mappings":";;;;;;;;;;;;;;AAuBA,IAAM,oBAAA,GAAyD;AAAA,EAC7D,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA;AASO,SAAS,wBACd,KAAA,EACgC;AAChC,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,oBAAA,CAAqB,SAAS,KAA8B,CAAA;AAEhE;AAEA,SAAS,4BACP,KAAA,EAC8B;AAC9B,EAAA,IAAI,uBAAA,CAAwB,KAAK,CAAA,EAAG;AAClC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,aAAA,IAAiB,UAAU,UAAA,EAAY;AACzE,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,WAAA,EAAa;AAC7C,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,KAAU,cAAA,IAAkB,KAAA,KAAU,SAAA,EAAW;AACnD,IAAA,OAAO,gBAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAU,YAAA,EAAc;AAC1B,IAAA,OAAO,YAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,0BAA0B,UAAA,EAAoC;AACrE,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,EAAG;AAClE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAA,IAAc,CAAA,IAAK,UAAA,IAAc,CAAA,EAAG;AACtC,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAA,GAAa,CAAA,IAAK,UAAA,IAAc,GAAA,EAAK;AACvC,IAAA,OAAO,UAAA,GAAa,GAAA;AAAA,EACtB;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,uBAAuB,UAAA,EAA8B;AACnE,EAAA,MAAM,UAAA,GAAa,0BAA0B,UAAU,CAAA;AACvD,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,UAAA,IAAc,KAAK,UAAA,IAAc,CAAA;AAC1C;AAaA,SAAS,8BACP,QAAA,EACS;AACT,EAAA,OAAO,QAAA,EAAU,cAAA;AACnB;AAqBA,SAAS,yBACP,cAAA,EAC8B;AAC9B,EAAA,IAAI,CAAC,cAAA,IAAkB,OAAO,cAAA,KAAmB,QAAA,EAAU;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,UAAW,cAAA,CAAyC,OAAA;AAC1D,EAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,KAAY,cAAA,IAAkB,OAAA,KAAY,SAAA,EAAW;AACvD,IAAA,OAAO,gBAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,4BAA4B,IAAA,EAIJ;AAC/B,EAAA,IAAI,sBAAA,CAAuB,IAAA,CAAK,UAAU,CAAA,EAAG;AAC3C,IAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,IAAA,CAAK,UAAU,CAAA;AAC5D,IAAA,OAAO,UAAA,KAAe,IAAI,gBAAA,GAAmB,eAAA;AAAA,EAC/C;AACA,EAAA,MAAM,sBAAA,GAAyB,wBAAA,CAAyB,IAAA,CAAK,cAAc,CAAA;AAC3E,EAAA,IAAI,sBAAA,EAAwB;AAC1B,IAAA,OAAO,sBAAA;AAAA,EACT;AACA,EAAA,MAAM,wBAAA,GAA2B,wBAAA;AAAA,IAC/B,6BAAA,CAA8B,KAAK,QAAQ;AAAA,GAC7C;AACA,EAAA,IAAI,wBAAA,EAA0B;AAC5B,IAAA,OAAO,wBAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,6BAA6B,IAAA,EAKnB;AACxB,EAAA,MAAM,cAAA,GAAiB,4BAA4B,IAAI,CAAA;AACvD,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAS,IAAA,CAAK,YAAA;AACpB,EAAA,MAAM,gBAAA,GAAmB,4BAA4B,MAAM,CAAA;AAC3D,EAAA,IAAI,gBAAA,EAAkB;AAIpB,IAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,IAAA,CAAK,UAAU,CAAA;AAC5D,IAAA,IACE,UAAA,KAAe,IAAA,IACf,2BAAA,CAA4B,gBAAgB,CAAA,EAC5C;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,OAAO,gBAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,KAAK,QAAA,EAAU,YAAA;AAClC,EAAA,MAAM,oBAAA,GAAuB,4BAA4B,UAAU,CAAA;AACnE,EAAA,IAAI,oBAAA,EAAsB;AACxB,IAAA,MAAM,UAAA,GAAa,yBAAA,CAA0B,IAAA,CAAK,UAAU,CAAA;AAC5D,IAAA,IACE,UAAA,KAAe,IAAA,IACf,2BAAA,CAA4B,oBAAoB,CAAA,EAChD;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AACA,IAAA,OAAO,oBAAA;AAAA,EACT;AAEA,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,4BACd,MAAA,EACS;AACT,EAAA,OAAO,MAAA,KAAW,gBAAgB,MAAA,KAAW,YAAA;AAC/C;AAQO,SAAS,+BAAA,CACd,QACA,IAAA,EAKuB;AACvB,EAAA,MAAM,cAAA,GAAiB,2BAAA,CAA4B,EAAE,GAAG,MAAM,CAAA;AAC9D,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,IAAI,2BAAA,CAA4B,MAAM,CAAA,EAAG;AACvC,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;ACpNO,IAAM,GAAA,GAAM,MAAA;AACO,iBAAA;AACnB,IAAM,QAAA,GAAW,MAAA;AAqGjB,IAAM,gBAAA,GACX,uBAAA;AAGK,IAAM,QAAA,GACX,eAAA;AACK,IAAM,KAAA,GAAQ,YAAA;;;AC/HrB,SAAS,4BAAA,GAAwC;AAC/C,EAAA,MAAM,GAAA,GAAO,WAA8C,OAAA,EAAS,GAAA;AACpE,EAAA,OACE,GAAA,EAAK,4BAAA,KAAiC,GAAA,IACtC,GAAA,EAAK,kBAAA,KAAuB,GAAA;AAEhC;AAsBO,SAAS,2BAAA,CACd,SACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,8BAA6B,EAAG;AACnC,IAAA;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,KAAA,CAAM,OAAA,EAAS,OAAA,IAAW,EAAE,CAAA;AACtC;ACpCA,IAAM,kBAAA,GAAqB,qBAAA;AA6C3B,eAAe,2BAAA,CACb,KACA,GAAA,EACmC;AACnC,EAAA,IAAI,CAAC,GAAA,EAAK,EAAA,IAAM,OAAO,GAAA,CAAI,EAAA,CAAG,UAAU,UAAA,EAAY;AAClD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,IAAA,GAAiC,IAAA;AAGrC,EAAA,IAAI;AACF,IAAA,MAAM,aAAc,MAAM,GAAA,CAAI,EAAA,CAC3B,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA,CAAU,aAAA,EAAe,CAAC,MAAW,CAAA,CAAE,EAAA,CAAG,YAAY,GAAG,CAAC,EAC1D,KAAA,EAAM;AACT,IAAA,IAAI,UAAA,IAAc,UAAA,CAAW,QAAA,KAAa,OAAA,EAAS;AACjD,MAAA,IAAA,GAAO,UAAA;AAAA,IACT;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,yDAAA;AAAA,MACA,EAAE,OAAO,GAAA;AAAI,KACf;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,mBAAA,CAAoB,IAAA,CAAK,OAAO,CAAA,IAAK,mBAAA,CAAoB,KAAK,QAAQ,CAAA;AACxE,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,QAAA;AAAA,IACT,SAAA,EAAW,kBAAkB,IAA2B,CAAA;AAAA,IACxD,MAAA,EAAQ;AAAA,GACV;AACF;AAOA,SAAS,kBACP,KAAA,EACoB;AACpB,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA;AAAA,EACF;AACA,EAAA,MAAM,qBAAA,GAAwB,mBAAA,CAAoB,KAAA,CAAM,kBAAkB,CAAC,CAAA;AAC3E,EAAA,IAAI,qBAAA,EAAuB;AACzB,IAAA,OAAO,qBAAA;AAAA,EACT;AACA,EAAA,MAAM,QAAA,GAAY,KAAA,CAAM,QAAA,IAAY,EAAC;AACrC,EAAA,MAAM,SAAA,GACH,SAAS,kBAAkB,CAAA,IAC3B,SAAS,eAAA,IACT,QAAA,CAAS,aACT,QAAA,CAAS,cAAA;AACZ,EAAA,OAAO,YAAa,SAAA,GAAuB,MAAA;AAC7C;AAEA,SAAS,oBAAoB,KAAA,EAAoC;AAC/D,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,MAAA;AAC9C;AAEA,SAAS,iBAAiB,UAAA,EAA8C;AACtE,EAAA,OAAO,CAAC,GAAG,UAAU,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACpC,IAAA,MAAM,MAAA,GAAS,EAAE,KAAA,IAAS,IAAA;AAC1B,IAAA,MAAM,MAAA,GAAS,EAAE,KAAA,IAAS,IAAA;AAC1B,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,OAAO,MAAA,GAAS,MAAA;AAAA,IAClB;AACA,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,SAAA,IAAa,MAAA,CAAO,gBAAA;AACvC,IAAA,MAAM,QAAA,GAAW,CAAA,CAAE,SAAA,IAAa,MAAA,CAAO,gBAAA;AACvC,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,OAAO,QAAA,GAAW,QAAA;AAAA,IACpB;AACA,IAAA,OAAO,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAA,CAAE,cAAc,MAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC,CAAA;AAAA,EAChE,CAAC,EAAE,CAAC,CAAA;AACN;AAEA,eAAe,sBAAA,CACb,KACA,OAAA,EACqB;AACrB,EAAA,IAAI;AACF,IAAA,OAAQ,MAAM,GAAA,CAAI,EAAA,CACf,KAAA,CAAM,QAAQ,CAAA,CACd,SAAA;AAAA,MAAU,wBAAA;AAAA,MAA0B,CAAC,CAAA,KACpC,CAAA,CAAE,EAAA,CAAG,oBAAoB,OAAO;AAAA,MAEjC,OAAA,EAAQ;AAAA,EACb,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,sDAAA;AAAA,MACA;AAAA,QACE,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAIA,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,GAAG,KAAA,CAAM,QAAQ,EAAE,OAAA,EAAQ;AACrD,IAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU;AAC9B,MAAA,MAAM,kBAAA,GAAqB,mBAAA,CAAoB,KAAA,CAAM,QAAQ,CAAA;AAC7D,MAAA,MAAM,eAAA,GAAkB,kBAAkB,KAAK,CAAA;AAC/C,MAAA,OACE,OAAO,KAAA,CAAM,GAAG,MAAM,OAAA,IACtB,kBAAA,KAAuB,WACvB,eAAA,KAAoB,OAAA;AAAA,IAExB,CAAC,CAAA;AAAA,EACH;AACF;AAEA,eAAe,uBAAA,CACb,KACA,OAAA,EAC0B;AAC1B,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA,KAAa,UAAA,EAAY;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,OAAS,MAAM,GAAA,CAAI,QAAA,CAAS,GAAA,CAAO,OAAO,GAAA,EAAY;AAAA,MACpD,EAAA,EAAI;AAAA,KACL,CAAA,IAAM,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,oDAAA;AAAA,MACA;AAAA,QACE,KAAA;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,eAAe,gCAAA,CACb,KACA,aAAA,EAC0B;AAC1B,EAAA,IAAI,OAAO,GAAA,CAAI,QAAA,KAAa,UAAA,EAAY;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,OAAS,MAAM,GAAA,CAAI,QAAA,CAAS,GAAA,CAAO,OAAO,kBAAA,EAA2B;AAAA,MACnE,SAAA,EAAW;AAAA,KACZ,CAAA,IAAM,IAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,sDAAA;AAAA,MACA;AAAA,QACE,KAAA;AAAA,QACA;AAAA;AACF,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAwBA,eAAe,8BAAA,CACb,KACA,KAAA,EACsD;AACtD,EAAA,MAAM,SAAA,GAAY,EAAA;AAClB,EAAA,IAAI,QAAA,GAAW,mBAAA,CAAoB,KAAA,CAAM,QAAQ,CAAA;AACjD,EAAA,IAAI,WAAA,GAAc,mBAAA,CAAoB,KAAA,CAAM,WAAW,CAAA;AAEvD,EAAA,IAAI,YAAY,WAAA,EAAa;AAC3B,IAAA,OAAO,EAAE,UAAU,WAAA,EAAY;AAAA,EACjC;AAEA,EAAA,IAAI,OAAA,GAA2B,KAAA;AAC/B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,IAAa,OAAA,EAAS,eAAe,CAAA,EAAA,EAAK;AAC5D,IAAA,OAAA,GAAW,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,QAAQ,aAAa,CAAA;AACjD,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,GAAW,mBAAA,CAAoB,QAAQ,QAAQ,CAAA;AAAA,IACjD;AACA,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,WAAA,GAAc,mBAAA,CAAoB,QAAQ,WAAW,CAAA;AAAA,IACvD;AACA,IAAA,IAAI,YAAY,WAAA,EAAa;AAAA,EAC/B;AAEA,EAAA,OAAO,EAAE,UAAU,WAAA,EAAY;AACjC;AAEA,eAAsB,wBAAA,CACpB,KACA,IAAA,EAC4B;AAC5B,EAAA,IAAI,KAAK,OAAA,EAAS;AAEhB,IAAA,IAAI,KAAA,GAAyB,IAAA;AAC7B,IAAA,IAAI;AACF,MAAA,KAAA,GAAS,MAAM,IAAI,EAAA,CAAG,GAAA;AAAA,QACpB,IAAA,CAAK;AAAA,OACP;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,2BAAA;AAAA,QACE,gDAAA;AAAA,QACA;AAAA,UACE,KAAA;AAAA,UACA,SAAS,IAAA,CAAK;AAAA;AAChB,OACF;AAAA,IAEF;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,KAAA,GAAQ,MAAM,uBAAA,CAAwB,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACjE;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AAEV,MAAA,KAAA,GACE,gBAAA;AAAA,QACE,MAAM,sBAAA,CAAuB,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC;AAAA,OACxD,IAAK,IAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AAGV,MAAA,MAAM,YAAY,MAAM,2BAAA;AAAA,QACtB,GAAA;AAAA,QACA,MAAA,CAAO,KAAK,OAAO;AAAA,OACrB;AACA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,SAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,OAAO,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5D;AACA,IAAA,MAAM,SAAA,GAAY,MAAM,8BAAA,CAA+B,GAAA,EAAK,KAAK,CAAA;AACjE,IAAA,MAAM,MAAA,GAAS,kBAAkB,KAAK,CAAA;AACtC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAO;AAAA,QACL,SAAS,KAAA,CAAM,GAAA;AAAA,QACf,SAAA,EAAW,MAAA;AAAA,QACX,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,aAAa,SAAA,CAAU,WAAA;AAAA,QACvB,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,SAAS,KAAA,CAAM,GAAA;AAAA,MACf,UAAU,SAAA,CAAU,QAAA;AAAA,MACpB,aAAa,SAAA,CAAU,WAAA;AAAA,MACvB,MAAA,EAAQ;AAAA,KACV;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,SAAA,EAAW;AAClB,IAAA,IAAI,WAAA,GAA+B,IAAA;AACnC,IAAA,IAAI;AACF,MAAA,WAAA,GAAe,MAAM,IAAI,EAAA,CAAG,GAAA;AAAA,QAC1B,IAAA,CAAK;AAAA,OACP;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,2BAAA;AAAA,QACE,kDAAA;AAAA,QACA;AAAA,UACE,KAAA;AAAA,UACA,WAAW,IAAA,CAAK;AAAA;AAClB,OACF;AAAA,IAEF;AAEA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,SAAA,GAAY,MAAM,8BAAA,CAA+B,GAAA,EAAK,WAAW,CAAA;AACvE,MAAA,MAAM,MAAA,GAAS,kBAAkB,WAAW,CAAA;AAC5C,MAAA,OAAO;AAAA,QACL,SAAS,WAAA,CAAY,GAAA;AAAA,QACrB,SAAA,EAAW,UAAU,IAAA,CAAK,SAAA;AAAA,QAC1B,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,aAAa,SAAA,CAAU,WAAA;AAAA,QACvB,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAEA,IAAA,WAAA,GAAc,MAAM,gCAAA,CAAiC,GAAA,EAAK,IAAA,CAAK,SAAS,CAAA;AACxE,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,MAAM,SAAA,GAAY,MAAM,8BAAA,CAA+B,GAAA,EAAK,WAAW,CAAA;AACvE,MAAA,MAAM,MAAA,GAAS,kBAAkB,WAAW,CAAA;AAC5C,MAAA,OAAO;AAAA,QACL,SAAS,WAAA,CAAY,GAAA;AAAA,QACrB,SAAA,EAAW,UAAU,IAAA,CAAK,SAAA;AAAA,QAC1B,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,aAAa,SAAA,CAAU,WAAA;AAAA,QACvB,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,sBAAA,CAAuB,GAAA,EAAK,KAAK,SAAS,CAAA;AAC/D,IAAA,MAAM,OAAA,GAAU,iBAAiB,MAAM,CAAA;AACvC,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,SAAA,GAAY,MAAM,8BAAA,CAA+B,GAAA,EAAK,OAAO,CAAA;AACnE,MAAA,OAAO;AAAA,QACL,SAAS,OAAA,CAAQ,GAAA;AAAA,QACjB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,aAAa,SAAA,CAAU,WAAA;AAAA,QACvB,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAEA,IAAA,MAAM,YAAY,MAAM,2BAAA;AAAA,MACtB,GAAA;AAAA,MACA,MAAA,CAAO,KAAK,SAAS;AAAA,KACvB;AACA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO;AAAA,QACL,GAAG,SAAA;AAAA,QACH,SAAA,EAAW,SAAA,CAAU,SAAA,IAAa,MAAA,CAAO,KAAK,SAAS;AAAA,OACzD;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,qBAAA,EAAwB,MAAA,CAAO,IAAA,CAAK,SAAS,CAAC,CAAA,qBAAA;AAAA,KAChD;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;CAGiC;AAAA,EAC/B,SAAA,EAAW,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,EAChC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ;AAChC;AC/XO,SAASA,qBAAoB,KAAA,EAAoC;AACtE,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,EAAK;AAC9B,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,MAAA;AAC9C;AAiDO,SAAS,kCAAA,CACd,MACA,KAAA,EACS;AACT,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,oBAAAA,CAAoB,KAAA,CAAM,QAAQ,CAAA;AACxD,EAAA,MAAM,gBAAA,GAAmBA,oBAAAA,CAAoB,KAAA,CAAM,WAAW,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAeA,oBAAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AACtD,EAAA,MAAM,eAAA,GAAkBA,oBAAAA,CAAoB,IAAA,CAAK,WAAW,CAAA;AAC5D,EAAA,MAAM,iBACJ,OAAO,IAAA,CAAK,cAAA,KAAmB,QAAA,GAAW,KAAK,cAAA,GAAiB,MAAA;AAElE,EAAA,IACE,aAAA,IACA,YAAA,IACA,aAAA,KAAkB,YAAA,EAClB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,cAAA,KAAmB,aAAA,IAAiB,eAAA,KAAoB,MAAA,EAAW;AACrE,IAAA,OAAO,IAAA;AAAA,EACT;AAIA,EAAA,IAAI,CAAC,gBAAA,IAAoB,IAAA,CAAK,iBAAA,KAAsB,WAAA,EAAa;AAC/D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,OAAO,eAAA,KAAoB,MAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,gBAAA,KAAqB,eAAA;AAC9B;AAEO,SAAS,kCAAA,CACd,MACA,KAAA,EACS;AACT,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,oBAAAA,CAAoB,KAAA,CAAM,QAAQ,CAAA;AACxD,EAAA,MAAM,gBAAA,GAAmBA,oBAAAA,CAAoB,KAAA,CAAM,WAAW,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAeA,oBAAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AACtD,EAAA,MAAM,eAAA,GAAkBA,oBAAAA,CAAoB,IAAA,CAAK,WAAW,CAAA;AAE5D,EAAA,IACE,aAAA,IACA,YAAA,IACA,aAAA,KAAkB,YAAA,EAClB;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,IAAA,OAAO,eAAA,KAAoB,MAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,gBAAA,KAAqB,eAAA;AAC9B;AAEA,eAAsB,qCAAA,CACpB,KACA,IAAA,EAMC;AACD,EAAA,MAAM,iBACJ,OAAO,IAAA,EAAM,cAAA,KAAmB,QAAA,GAAW,KAAK,cAAA,GAAiB,MAAA;AACnE,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,QAAA,EAAUA,oBAAAA,CAAoB,IAAA,EAAM,QAAQ,CAAA;AAAA,IAC5C,WAAA,EAAaA,oBAAAA,CAAoB,IAAA,EAAM,WAAW,CAAA;AAAA,IAClD,cAAA;AAAA,IACA,UAAU,OAAO,IAAA,EAAM,QAAA,KAAa,QAAA,GAAW,KAAK,QAAA,GAAW;AAAA,GACjE;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,CAAS,mBAAmB,aAAA,EAAe;AAC7C,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,WAAA,EAAa;AAC7C,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,MAAM,UAAA,GAAa,MAAM,wBAAA,CAAyB,GAAA,EAAK;AAAA,MACrD,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AACD,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,UAAU,UAAA,CAAW,QAAA;AAAA,MACrB,aAAa,UAAA,CAAW;AAAA,KAC1B;AAAA,EACF;AAEA,EAAA,IAAI,KAAK,SAAA,EAAW;AAClB,IAAA,MAAM,UAAA,GAAa,MAAM,wBAAA,CAAyB,GAAA,EAAK;AAAA,MACrD,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,SAAS;AAAA,KACjC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,GAAG,QAAA;AAAA,MACH,UAAU,UAAA,CAAW,QAAA;AAAA,MACrB,aAAa,UAAA,CAAW;AAAA,KAC1B;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;;;ACvI8BC,CAAAA,CAAE,EAAA,CAAG,gBAAgB;AAgEnD,IAAM,yBAAA,GAAoD;AAAA,EACxD,WAAA,EAAa,gBAAA;AAAA,EACb,oBAAoB,iCAAA;AACtB,CAAA;AA4CO,SAAS,yBAAyB,IAAA,EActC;AACD,EAAA,OAAO;AAAA,IACL,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAA,EAAY,gBAAA;AAAA,MACV,IAAA,CAAK,MAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,IACA,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAA,EAAY,KAAK,UAAA,IAAe,YAAA;AAAA,IAChC,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,GAAI,KAAK,SAAA,GAAY,EAAE,WAAW,IAAA,CAAK,SAAA,KAAc,EAAC;AAAA,IACtD,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,GAAI,KAAK,oBAAA,GACL;AAAA,MACE,sBAAsB,IAAA,CAAK,oBAAA;AAAA,MAC3B,qBAAA,EAAuB,CAAC,MAAA,CAAO,IAAA,CAAK,oBAAoB,CAAC;AAAA,QAE3D,EAAC;AAAA,IACL,GAAI,KAAK,yBAAA,GACL;AAAA,MACE,2BAA2B,IAAA,CAAK;AAAA,QAElC,EAAC;AAAA,IACL,GAAI,KAAK,oBAAA,GACL,EAAE,sBAAsB,IAAA,CAAK,oBAAA,KAC7B;AAAC,GACP;AACF;AAiEO,SAAS,0BAA0B,KAAA,EAAqC;AAC7E,EAAA,OAAO,OAAO,KAAA,KAAU,SAAA,GAAY,KAAA,GAAQ,MAAA;AAC9C;AAEO,SAAS,yBAAA,CACd,MACA,QAAA,EACW;AACX,EAAA,IAAI;AACF,IAAA,OAAO,qBAAA,CAAsB;AAAA,MAC3B,GAAG,QAAA;AAAA,MACH,WAAY,IAAA,CAAa,SAAA;AAAA,MACzB,WAAY,IAAA,CAAa,SAAA;AAAA,MACzB,WAAY,IAAA,CAAa,SAAA;AAAA,MACzB,WAAY,IAAA,CAAa;AAAA,KAC1B,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,2DAAA;AAAA,MACA;AAAA,QACE,KAAA;AAAA,QACA,UAAU,IAAA,CAAK;AAAA;AACjB,KACF;AACA,IAAA,OAAO,SAAA,CAAU,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAA,EAC/B;AACF;AAEO,SAAS,iCACd,IAAA,EACsC;AACtC,EAAA,MAAM,QAAA,GAAY,IAAA,CAAK,QAAA,IAAY,EAAC;AACpC,EAAA,MAAM,cACJ,OAAO,QAAA,CAAS,WAAA,KAAgB,QAAA,GAAW,SAAS,WAAA,GAAc,MAAA;AAEpE,EAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,IAAI,gBAAgB,YAAA,EAAc;AAChC,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,OAAO,aAAA;AACT;AAEO,SAAS,oCAAoC,IAAA,EAGzC;AACT,EAAA,OAAO,CAAA,sCAAA,EAAyC,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,MAAA,CAAO,eAAA,CAAgB,OAAA,CAAQ,CAAC,CAAC,CAAA,OAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,MAAA,CAAO,kBAAA,CAAmB,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AACzM;AAmPO,SAAS,mBAAA,CACd,MAKA,QAAA,EACuB;AACvB,EAAA,OAAO,4BAAA,CAA6B;AAAA,IAClC,cAAc,IAAA,CAAK,YAAA;AAAA,IACnB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB;AAAA,GACD,CAAA;AACH;AAEA,eAAsB,6BAAA,CACpB,KACA,YAAA,EACkB;AAElB,EAAA,MAAM,oBAAoB,MAAM,GAAA,CAAI,EAAA,CACjC,KAAA,CAAM,uBAAuB,CAAA,CAC7B,SAAA,CAAU,WAAA,EAAa,CAAC,MAAW,CAAA,CAAE,EAAA,CAAG,YAAY,YAAY,CAAC,EACjE,OAAA,EAAQ;AACX,EAAA,KAAA,MAAW,cAAc,iBAAA,EAAmB;AAC1C,IAAA,MAAM,WAAW,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,WAAW,UAAU,CAAA;AACvD,IAAA,IAAI,QAAA,EAAU,MAAA,KAAW,WAAA,IAAe,QAAA,EAAU,WAAW,QAAA,EAAU;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,eAAsB,0BACpB,GAAA,EACiC;AACjC,EAAA,IAAI;AACF,IAAA,MAAM,eAAe,MAAM,GAAA,CAAI,EAAA,CAC5B,KAAA,CAAM,oBAAoB,CAAA,CAC1B,SAAA,CAAU,WAAA,EAAa,CAAC,MAAW,CAAA,CAAE,EAAA,CAAG,YAAY,IAAI,CAAC,EACzD,KAAA,EAAM;AAET,IAAA,OAAO;AAAA,MACL,WAAA,EACE,YAAA,EAAc,gBAAA,KAAqB,QAAA,GAC/B,WACA,yBAAA,CAA0B,WAAA;AAAA,MAChC,kBAAA,EAAoB,iCAAA;AAAA,QAClB,YAAA,EAAc;AAAA;AAGhB,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,4DAAA;AAAA,MACA;AAAA,QACE;AAAA;AACF,KACF;AAEA,IAAA,OAAO,yBAAA;AAAA,EACT;AACF;;;AC5oBO,IAAM,uBAAA,GAA+C;AAAA,EAC1D,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,UAAU,MAAM,IAAA;AAAA,EAChB,WAAA,EACE;AACJ,CAAA;ACIO,SAAS,iBACd,IAAA,EACc;AACd,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,KAAK,UAAA,IAAc,MAAA;AAAA,IAC/B,aAAA,EAAe,KAAK,aAAA,IAAiB,MAAA;AAAA,IACrC,WAAA,EAAa,KAAK,WAAA,IAAe,MAAA;AAAA,IACjC,YAAA,EAAc,KAAK,YAAA,IAAgB,MAAA;AAAA,IACnC,eAAA,EAAiB,KAAK,eAAA,IAAmB;AAAA,GAC3C;AACF;AAEO,SAAS,kBAAA,CACd,eACA,OAAA,EACW;AACX,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,OAAO,cAAc,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAC,CAAA;AAC1D;AAEO,SAAS,iBAAA,CACd,MAAA,EACA,IAAA,EACA,GAAA,EACmB;AACnB,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,SAAA,EAAW,OAAO,GAAG,CAAA,MAAA,EAAS,KAAK,QAAQ,CAAA,SAAA,EAAY,KAAK,OAAA,CAAQ,OAAA;AAAA,MAClE;AAAA,KACD,CAAA,IAAA,EAAO,MAAA,CAAO,SAAS,CAAA;AAAA,GAC1B;AACF;AAEO,SAAS,wBAAA,CACd,aAAA,EACA,aAAA,EACA,UAAA,EACmB;AACnB,EAAA,MAAM,aAAa,aAAA,CAAc,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,UAAU,CAAC,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,gBAAA,CAAiB,aAAA,EAAe,UAAU,CAAA;AAAA,IACnD,QAAA,EAAU,mBAAA;AAAA,IACV,SAAA,EAAW,+BAA+B,UAAA,CAAW,OAAA;AAAA,MACnD;AAAA,KACD,CAAA,iBAAA,EAAoB,OAAA,CAAQ,aAAa,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,GACxD;AACF;AAEO,SAAS,uBAAA,CACd,aAAA,EACA,aAAA,EACA,UAAA,EACmB;AACnB,EAAA,MAAM,aAAa,aAAA,CAAc,aAAA,EAAe,IAAA,CAAK,GAAA,CAAI,UAAU,CAAC,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,gBAAA,CAAiB,aAAA,EAAe,UAAU,CAAA;AAAA,IACnD,QAAA,EAAU,mBAAA;AAAA,IACV,SAAA,EAAW,CAAA,4BAAA,EAA+B,UAAA,CAAW,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,GACjE;AACF;AAEO,SAAS,oCAAA,CACd,aAAA,EACA,aAAA,EACA,UAAA,EACA,IAAA,EACmB;AACnB,EAAA,OAAO,oBAAA;AAAA,IACL,aAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAiB,IAAI;AAAA,GACvB;AACF;AAEO,IAAM,uBAAA,GAA0B,qBAAA;;;ACtFhC,IAAM,0BAAA,GAAkD;AAAA,EAC7D,QAAA,EAAU,aAAA;AAAA,EACV,SAAA,EAAW,eAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU,CAAC,aAAA,EAAe,aAAA,EAAe,MAAM,OAAA,KAAY;AACzD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,aAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AACA,IAAA,MAAM,iBAAiB,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,UAAU,CAAC,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,oCAAA;AAAA,MACb,YAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,WAAA,EACE;AACJ,CAAA;ACrBO,IAAM,wBAAA,GAAgD;AAAA,EAC3D,QAAA,EAAU,YAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,QAAA;AAAA,EACd,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,WAAA;AAAA,EACT,QAAA,EAAU,CAAC,aAAA,EAAe,aAAA,EAAe,MAAM,OAAA,KAAY;AACzD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,aAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AACA,IAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AAEtC,IAAA,IAAI,QAAA,CAAS,YAAA,IAAgB,QAAA,CAAS,eAAA,EAAiB;AACrD,MAAA,MAAM,cAAA,GAAiB,oBAAA;AAAA,QACrB,YAAA;AAAA,QACAC,SAAAA;AAAA,UACE,SAAS,YAAA,CAAa,CAAA;AAAA,UACtB,SAAS,YAAA,CAAa,CAAA;AAAA,UACtB,SAAS,YAAA,CAAa,CAAA;AAAA,UACtB,SAAS,YAAA,CAAa;AAAA,SACxB;AAAA,QACAA,SAAAA;AAAA,UACE,SAAS,eAAA,CAAgB,CAAA;AAAA,UACzB,SAAS,eAAA,CAAgB,CAAA;AAAA,UACzB,SAAS,eAAA,CAAgB,CAAA;AAAA,UACzB,SAAS,eAAA,CAAgB;AAAA,SAC3B;AAAA,QACA,aAAA,CAAc;AAAA,OAChB;AAEA,MAAA,OAAO,iBAAA;AAAA,QACL;AAAA,UACE,OAAA,EAAS,cAAA;AAAA,UACT,QAAA,EAAU,uBAAA;AAAA,UACV,WAAW,CAAA,uCAAA,EAA0CC,OAAAA;AAAA,YACnD;AAAA,WACF,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,SACd;AAAA,QACA,OAAA,CAAQ,IAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACV;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,uBAAA;AAAA,MACb,YAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAS,WAAA,IAAe;AAAA,KAC1B;AAEA,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,WAAA,EACE;AACJ,CAAA;;;AC7DO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,QAAA,EAAU,cAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,UAAU,MAAM,IAAA;AAAA,EAChB,WAAA,EACE;AACJ,CAAA;;;ACJO,IAAM,yBAAA,GAAiD;AAAA,EAC5D,QAAA,EAAU,YAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,QAAA;AAAA,EACd,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU,CAAC,aAAA,EAAe,aAAA,EAAe,MAAM,OAAA,KAAY;AACzD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,aAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AACA,IAAA,MAAM,gBAAA,GAAmB,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,IAAA,CAAK,MAAA,IAAU,IAAI,CAAA,EAAG,IAAI,CAAA;AACrE,IAAA,MAAM,MAAA,GAAS,uBAAA;AAAA,MACb,YAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,WAAA,EACE;AACJ,CAAA;;;ACrBO,IAAM,sBAAA,GAA8C;AAAA,EACzD,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,WAAA;AAAA,EACT,QAAA,EAAU,CAAC,aAAA,EAAe,aAAA,EAAe,MAAM,OAAA,KAAY;AACzD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,aAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,CAAA;AAC9B,IAAA,MAAM,MAAA,GACJ,MAAA,GAAS,CAAA,GACL,uBAAA,CAAwB,YAAA,EAAc,aAAA,EAAe,MAAM,CAAA,GAC3D,uBAAA,CAAwB,YAAA,EAAc,aAAA,EAAe,MAAM,CAAA;AAEjE,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,WAAA,EACE;AACJ,CAAA;;;AC6BO,SAAS,gCACd,SAAA,EAC4C;AAC5C,EAAA,OAAO,SAAA,KAAc,cAAc,SAAA,KAAc,UAAA;AACnD;AAEO,SAAS,cAAA,CACd,MACA,OAAA,EACS;AACT,EAAA,OAAO,IAAA,CAAK,OAAA,KAAY,WAAA,IAAe,OAAA,IAAW,IAAA,CAAK,OAAA;AACzD;AAEO,SAAS,uBAAA,CACd,MACA,UAAA,EACS;AACT,EAAA,IAAI,IAAA,CAAK,iBAAiB,MAAA,EAAQ;AAChC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA,CAAK,OAAA,KAAY,WAAA,IAAe,UAAA,GAAa,IAAA,CAAK,OAAA;AAC3D;;;ACzEO,IAAM,sBAAA,GAA8C;AAAA,EACzD,QAAA,EAAU,SAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,GAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU,CAAC,aAAA,EAAe,aAAA,EAAe,MAAM,OAAA,KAAY;AACzD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,aAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AACA,IAAA,MAAM,iBAAiB,CAAC,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,UAAU,CAAC,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,uBAAA;AAAA,MACb,YAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,WAAA,EACE;AACJ,CAAA;;;ACrBO,IAAM,uBAAA,GAA+C;AAAA,EAC1D,QAAA,EAAU,UAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,WAAA;AAAA,EACT,QAAA,EAAU,CAAC,aAAA,EAAe,aAAA,EAAe,MAAM,OAAA,KAAY;AACzD,IAAA,MAAM,YAAA,GAAe,kBAAA;AAAA,MACnB,aAAA;AAAA,MACA,QAAQ,IAAA,CAAK;AAAA,KACf;AACA,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,CAAA;AAC9B,IAAA,MAAM,MAAA,GACJ,SAAS,CAAA,GACL,oCAAA;AAAA,MACE,YAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF,GACA,wBAAA,CAAyB,YAAA,EAAc,aAAA,EAAe,MAAM,CAAA;AAElE,IAAA,OAAO,iBAAA,CAAkB,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,EAC5D,CAAA;AAAA,EACA,WAAA,EACE;AACJ,CAAA;;;AChCO,IAAM,oBAAA,GAA4C;AAAA,EACvD,QAAA,EAAU,OAAA;AAAA,EACV,SAAA,EAAW,UAAA;AAAA,EACX,YAAA,EAAc,MAAA;AAAA,EACd,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS,CAAA;AAAA,EACT,UAAU,MAAM,IAAA;AAAA,EAChB,WAAA,EACE;AACJ,CAAA;;;ACuBO,IAAM,sBAAA,GAAyD;AAAA,EACpE,uBAAA;AAAA,EACA,sBAAA;AAAA,EACA,wBAAA;AAAA,EACA,0BAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,0BAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAA;AAEkC,IAAI,GAAA,CAGpC,sBAAA,CAAuB,GAAA,CAAI,CAAC,IAAA,KAAS,CAAC,IAAA,CAAK,QAAA,EAAU,IAAI,CAAC,CAAC;AAQtD,SAAS,uBAAA,GAA0D;AACxE,EAAA,OAAO,sBAAA;AACT;AAEO,SAAS,uBACd,SAAA,EAC0C;AAC1C,EAAA,IAAI,+BAAA,CAAgC,SAAS,CAAA,EAAG;AAC9C,IAAA,OAAO,CAAC,SAAS,CAAA;AAAA,EACnB;AAEA,EAAA,OAAO,CAAC,YAAY,UAAU,CAAA;AAChC;;;ACdA,SAAS,4BAAA,CACP,MACA,SAAA,EACqB;AACrB,EAAA,MAAM,YAAA,GACJ,SAAA,KAAc,UAAA,GAAa,IAAA,CAAK,WAAW,IAAA,CAAK,UAAA;AAClD,EAAA,OAAO,YAAA,IAAgB,MAAA;AACzB;AAEA,SAAS,gBACP,IAAA,EACW;AACX,EAAA,MAAM,QAAA,GAAY,IAAA,CAAK,QAAA,IAAY,EAAC;AAEpC,EAAA,IAAI;AACF,IAAA,OAAOC,qBAAAA,CAAsB;AAAA,MAC3B,GAAG,QAAA;AAAA,MACH,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK;AAAA,KACjB,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAOF,SAAAA,CAAU,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAG,CAAA;AAAA,EAC/B;AACF;AAEA,eAAsB,uCAEpB,IAAA,EAcoD;AACpD,EAAA,MAAM,oBAAA,uBAA2B,GAAA,EAG/B;AACF,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAuB;AAChD,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAGpB;AACF,EAAA,MAAM,cAAA,GAAkB,IAAA,CAAK,cAAA,IAC3B,uBAAA,EAAwB;AAC1B,EAAA,MAAM,KAAA,GAKD;AAAA,IACH;AAAA,MACE,QAAQ,IAAA,CAAK,YAAA;AAAA,MACb,SAAS,IAAA,CAAK,aAAA;AAAA,MACd,GAAA,EAAK,CAAA;AAAA,MACL,cAAA,sBAAoB,GAAA,CAAI,CAAC,OAAO,IAAA,CAAK,YAAY,CAAC,CAAC;AAAA;AACrD,GACF;AAEA,EAAA,MAAM,QAAA,GAAW,OAAO,MAAA,KAAoB;AAC1C,IAAA,MAAM,QAAA,GAAW,OAAO,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5B,MAAA,SAAA,CAAU,IAAI,QAAA,EAAU,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,IAAK,IAAA;AAAA,EACpC,CAAA;AAEA,EAAA,OAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACvB,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,EAAM;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;AACjC,MAAA,MAAM,OAAA,GAAU,MAAM,GAAA,GAAM,CAAA;AAC5B,MAAA,IAAI,CAAC,cAAA,CAAe,IAAA,EAAM,OAAO,CAAA,EAAG;AAClC,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,SAAA,IAAa,sBAAA,CAAuB,IAAA,CAAK,SAAS,CAAA,EAAG;AAC9D,QAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,UAAA,CAAW;AAAA,UAClC,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,IAAA;AAAA,UACA,SAAA;AAAA,UACA,GAAA,EAAK;AAAA,SACN,CAAA;AAED,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,IACE,KAAK,WAAA,IACL,CAAC,mCAAmC,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA,EAC1D;AACA,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,YAAA,GAAe,4BAAA,CAA6B,IAAA,EAAM,SAAS,CAAA;AACjE,UAAA,IAAI,CAAC,YAAA,EAAc;AACjB,YAAA;AAAA,UACF;AAEA,UAAA,IAAI,MAAM,cAAA,CAAe,GAAA,CAAI,MAAA,CAAO,YAAY,CAAC,CAAA,EAAG;AAClD,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAAS,YAAY,CAAA;AAC9C,UAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,QAAA,KAAa,QAAA,EAAU;AACnD,YAAA;AAAA,UACF;AAEA,UAAA,IACE,KAAK,WAAA,IACL,CAAC,mCAAmC,UAAA,EAAY,IAAA,CAAK,WAAW,CAAA,EAChE;AACA,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,QAAA,GAAW,OAAO,YAAY,CAAA;AACpC,UAAA,MAAM,gBACJ,YAAA,CAAa,GAAA,CAAI,QAAQ,CAAA,IAAK,gBAAgB,UAAU,CAAA;AAC1D,UAAA,MAAM,SAAS,IAAA,CAAK,QAAA,CAAS,KAAA,CAAM,OAAA,EAAS,eAAe,IAAA,EAAM;AAAA,YAC/D,GAAA,EAAK,OAAA;AAAA,YACL,cAAc,KAAA,CAAM,MAAA;AAAA,YACpB,YAAA;AAAA,YACA,kBAAA,EAAoB,SAAA;AAAA,YACpB;AAAA,WACD,CAAA;AAED,UAAA,IACE,CAAC,MAAA,IACD,CAAC,2BAA2B,aAAA,EAAe,MAAA,CAAO,OAAO,CAAA,EACzD;AACA,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,gBAAA,GAAmBA,SAAAA;AAAA,YACvB,OAAO,OAAA,CAAQ,CAAA;AAAA,YACf,OAAO,OAAA,CAAQ,CAAA;AAAA,YACf,OAAO,OAAA,CAAQ,CAAA;AAAA,YACf,OAAO,OAAA,CAAQ;AAAA,WACjB;AAEA,UAAA,YAAA,CAAa,GAAA,CAAI,UAAU,gBAAgB,CAAA;AAE3C,UAAA,MAAM,gBAAA,GAAmB,oBAAA,CAAqB,GAAA,CAAI,QAAQ,CAAA;AAC1D,UAAA,oBAAA,CAAqB,IAAI,QAAA,EAAU;AAAA,YACjC,YAAA;AAAA,YACA,UAAU,IAAA,CAAK,QAAA;AAAA,YACf,kBAAA,EAAoB,SAAA;AAAA,YACpB,MAAA,EAAQ,KAAK,MAAA,IAAU,CAAA;AAAA,YACvB,OAAA,EAAS,gBAAA;AAAA,YACT,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,SAAA,EAAW,mBACP,CAAA,EAAG,gBAAA,CAAiB,SAAS,CAAA,EAAA,EAAK,MAAA,CAAO,SAAS,CAAA,CAAA,GAClD,MAAA,CAAO,SAAA;AAAA,YACX,GAAA,EAAK;AAAA,WACN,CAAA;AAED,UAAA,IAAI,uBAAA,CAAwB,IAAA,EAAM,OAAO,CAAA,EAAG;AAC1C,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,MAAA,EAAQ,YAAA;AAAA,cACR,OAAA,EAAS,gBAAA;AAAA,cACT,GAAA,EAAK,OAAA;AAAA,cACL,cAAA,sBAAoB,GAAA,CAAI;AAAA,gBACtB,GAAG,KAAA,CAAM,cAAA;AAAA,gBACT,OAAO,YAAY;AAAA,eACpB;AAAA,aACF,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,KAAK,oBAAA,CAAqB,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,EAAM,KAAA,KAAU;AACrE,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,KAAA,CAAM,GAAA,EAAK;AAC1B,MAAA,OAAO,IAAA,CAAK,MAAM,KAAA,CAAM,GAAA;AAAA,IAC1B;AACA,IAAA,OAAO,MAAA,CAAO,KAAK,YAAY,CAAA,CAAE,cAAc,MAAA,CAAO,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,EAC3E,CAAC,CAAA;AACH;;;AC1KA,eAAsB,2BAAA,CACpB,KACA,IAAA,EAoBC;AACD,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AAErB,EAAA,MAAM,OAAO,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,MAAM,CAAA;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,4BAAA,CAA6B;AAAA,MAC3B,OAAA,EAAS,iBAAA;AAAA,MACT,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,WAAA;AAAA,MACN,aAAA,EAAe,eAAA;AAAA,MACf,UAAA,EACE,uEAAA;AAAA,MACF,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA;AAAO,KAChC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,IAAA,4BAAA,CAA6B;AAAA,MAC3B,OAAA,EAAS,CAAA,iEAAA,EAAoE,IAAA,CAAK,QAAQ,CAAA,mJAAA,CAAA;AAAA,MAC1F,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,kBAAA;AAAA,MACN,aAAA,EAAe,sBAAA;AAAA,MACf,UAAA,EACE,4GAAA;AAAA,MACF,SAAS,EAAE,MAAA,EAAQ,KAAK,MAAA,EAAQ,QAAA,EAAU,KAAK,QAAA;AAAS,KACzD,CAAA;AAAA,EACH;AACA,EAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,IAAA,4BAAA,CAA6B;AAAA,MAC3B,OAAA,EAAS,8BAAA;AAAA,MACT,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA,EAAM,eAAA;AAAA,MACN,aAAA,EAAe,yBAAA;AAAA,MACf,UAAA,EAAY,iEAAA;AAAA,MACZ,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA;AAAO,KAChC,CAAA;AAAA,EACH;AACA,EAAA,MAAM,uBAAA;AAAA,IACJ,GAAA;AAAA,IACA,IAAA,CAAK,SAAA;AAAA,IACL,IAAA,CAAK;AAAA,GACP;AAEA,EAAA,MAAM,gBAAA,GAAoB,IAAA,CAAK,QAAA,IAAY,EAAC;AAC5C,EAAA,MAAM,mBAAA,GAAsB,mBAAA,CAAoB,IAAA,EAAM,gBAAgB,CAAA;AACtE,EAAA,MAAM,gBAAA,GAAmB,MAAM,yBAAA,CAA0B,GAAG,CAAA;AAC5D,EAAA,IACE,gBAAA,CAAiB,WAAA,KAAgB,gBAAA,IACjC,2BAAA,CAA4B,mBAAmB,CAAA,EAC/C;AACA,IAAA,MAAM,uBAAuB,MAAM,6BAAA;AAAA,MACjC,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,MAAA,4BAAA,CAA6B;AAAA,QAC3B,OAAA,EACE,mGAAA;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA,QACR,IAAA,EAAM,UAAA;AAAA,QACN,aAAA,EAAe,+BAAA;AAAA,QACf,UAAA,EACE,wEAAA;AAAA,QACF,OAAA,EAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA;AAAO,OAChC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,kBAAA,GAAqB,KAAK,UAAA,IAAc,GAAA;AAC9C,EAAA,MAAM,cAAA,GACH,IAAA,CAAa,cAAA,IAAkB,gBAAA,CAAiB,cAAA;AACnD,EAAA,MAAM,eAAA,GAAkB,yBAAA,CAA0B,IAAA,EAAM,gBAAgB,CAAA;AAGxE,EAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,EAAA,MAAM,MAAM,IAAA,CAAK,SAAA;AACjB,EAAA,MAAM,MAAM,IAAA,CAAK,WAAA;AACjB,EAAA,MAAM,GAAA,GAAM,KAAK,QAAA,IAAY,GAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,EAAE,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAI;AACrD,EAAA,MAAM,iBAAA,GAAoBG,gBAAAA,CAAiB,GAAA,EAAK,GAAA,EAAK,KAAK,GAAG,CAAA;AAC7D,EAAA,MAAM,cAAA,GACJ,OAAO,IAAA,CAAK,UAAA,KAAe,YAAY,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,UAAU,CAAA;AACzE,EAAA,MAAM,yBAAA,GACJ,0BAA2B,IAAA,CAAa,iBAAiB,KACzD,yBAAA,CAA0B,gBAAA,CAAiB,iBAAiB,CAAA,IAC5DC,wBAAAA;AAAA,IACE,eAAA;AAAA,IACA,iBAAiB,kBAAA,CAAmB,eAAA;AAAA,IACpC,iBAAiB,kBAAA,CAAmB;AAAA,GACtC;AACF,EAAA,MAAM,kBAAkBC,oCAAAA,CAAqC;AAAA,IAC3D,yBAAA;AAAA,IACA,OAAA,EAAS,WAAA;AAAA,IACT,QAAQ,gBAAA,CAAiB;AAAA,GAC1B,CAAA;AACD,EAAA,MAAM,gCAAgC,mCAAA,CAAoC;AAAA,IACxE,OAAA,EAAS,WAAA;AAAA,IACT,QAAQ,eAAA,CAAgB;AAAA,GACzB,CAAA;AAED,EAAA,MAAM,eAAA,GAAkB,gCAAgC,mBAAA,EAAqB;AAAA,IAC3E,UAAA,EAAY,iBAAA;AAAA,IACZ,cAAA;AAAA,IACA,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,IAAI,oBAAA;AACJ,EAAA,IAAI,gBAAgB,6BAAA,EAA+B;AACjD,IAAA,oBAAA,GAAwB,MAAM,GAAA,CAAI,WAAA;AAAA,MAChC,uBAAA;AAAA,MACA;AAAA,QACE,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,UAAU,IAAA,CAAK,MAAA;AAAA,QACf,WAAW,IAAA,CAAK,MAAA;AAAA,QAChB,sBAAsB,EAAC;AAAA,QACvB,yBAAyB,EAAC;AAAA,QAC1B,QAAA,EAAU,iCAAiC,IAAI,CAAA;AAAA,QAC/C,MAAA,EAAQ,aAAA;AAAA,QACR,eAAA,EAAiB,OAAA;AAAA,QACjB,WAAA,EAAa,6BAAA;AAAA,QACb,WAAW,IAAA,CAAK;AAAA;AAClB,KACF;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ;AAAA,IAC9B,UAAA,EAAY,iBAAA;AAAA,IACZ,YAAA,EAAc,eAAA;AAAA,IACd,mBAAmB,eAAA,CAAgB,iBAAA;AAAA,IACnC,SAAA,EAAW,GAAA;AAAA;AAAA,IAEX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,SAAA,EAAW,GAAA;AAAA,IACX,QAAA,EAAU;AAAA,MACR,GAAG,gBAAA;AAAA,MACH,YAAA,EAAc,eAAA;AAAA,MACd,QAAA,EAAU,GAAA;AAAA,MACV,WAAA,EAAa,GAAA;AAAA,MACb,aAAA,EAAe,GAAA;AAAA,MACf,UAAA,EAAY,GAAA;AAAA,MACZ,mBAAmB,eAAA,CAAgB;AAAA;AACrC,GACM,CAAA;AAER,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,MAAM,cAAc,IAAA,CAAK,OAAA;AACzB,IAAA,MAAM,aAAa,MAAM,GAAA,CAAI,EAAA,CAC1B,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA;AAAA,MAAU,UAAA;AAAA,MAAY,CAAC,CAAA,KACtB,CAAA,CAAE,GAAG,SAAA,EAAW,WAAA,IAAe,KAAK,SAAS;AAAA,KAC/C,CACC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA,EAAG,OAAO,CAAC,EAChD,OAAA,EAAQ;AAEX,IAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,MAAA,IAAI,KAAA,CAAM,QAAA,IAAY,IAAA,CAAK,QAAA,EAAU;AACnC,QAAA,MAAM,IAAI,SAAA,CAAU,QAAA,CAAS,CAAA,EAAG,QAAA,CAAS,aAAa,UAAA,EAAY;AAAA,UAChE,UAAU,CAAA,KAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA,mBAAA,EAAsB,MAAM,QAAQ,CAAA,CAAA;AAAA,UACnE,cAAc,IAAA,CAAK,QAAA;AAAA,UACnB,YAAY,KAAA,CAAM,QAAA;AAAA,UAClB,QAAA,EAAU,mBAAA;AAAA,UACV,MAAA,EAAQ,iBAAA;AAAA,UACR,WAAW,IAAA,CAAK,mBAAA;AAAA,UAChB,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AAAA,UAC9B,YAAA,EAAc,QAAA;AAAA,UACd,UAAA,EAAY,OAAA;AAAA,UACZ,SAAA,EAAW,IAAA;AAAA,UACX,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GACJ,IAAA,CAAK,SAAA,IACL,CAAA,wBAAA,EAA2B,kBAAA,CAAmB,QAAQ,CAAC,CAAC,CAAA,UAAA,EAAa,IAAA,CAAK,MAAM,CAAA,CAAA,CAAA;AAElF,EAAA,MAAM,kBAAA,GAAsB,MAAM,GAAA,CAAI,EAAA,CAAG,OAAO,kBAAA,EAAoB;AAAA,IAClE,GAAG,wBAAA,CAAyB;AAAA,MAC1B,UAAU,IAAA,CAAK,MAAA;AAAA,MACf,MAAA,EAAQ,GAAA;AAAA,MACR,SAAA,EAAW,GAAA;AAAA,MACX,WAAA,EAAa,GAAA;AAAA,MACb,QAAA,EAAU,GAAA;AAAA,MACV,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAA,EAAW,eAAA;AAAA,MACX,YAAY,IAAA,CAAK,mBAAA;AAAA,MACjB,UAAA,EAAY,GAAA;AAAA,MACZ,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,sBAAsB,IAAA,CAAK,oBAAA;AAAA,MAC3B,yBAAA,EAA2B,oBAAA;AAAA,MAC3B,sBAAsB,IAAA,CAAK;AAAA,KAC5B;AAAA,GACK,CAAA;AAER,EAAA,MAAM,IAAI,SAAA,CAAU,QAAA,CAAS,CAAA,EAAG,QAAA,CAAS,UAAU,eAAA,EAAiB;AAAA,IAClE,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAA,EAAW;AAAA,GACZ,CAAA;AAED,EAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,gBAAA,EAAkB;AAAA,IACpC,UAAA,EAAY,QAAA;AAAA,IACZ,UAAU,IAAA,CAAK,MAAA;AAAA,IACf,UAAA,EAAY,oBAAA;AAAA,IACZ,aAAA,EAAe;AAAA,MACb,UAAA,EAAY,kBAAA;AAAA,MACZ,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,QAAA,EAAU;AAAA,MACR,OAAA,EAAS,WAAA;AAAA,MACT,UAAA,EAAY,iBAAA;AAAA,MACZ,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAA,EAAW,eAAA;AAAA,MACX,mBAAmB,eAAA,CAAgB,iBAAA;AAAA,MACnC,0BAA0B,eAAA,CAAgB,MAAA;AAAA,MAC1C,GAAI,uBACA,EAAE,oBAAA,EAAsB,OAAO,oBAAoB,CAAA,KACnD;AAAC,KACP;AAAA,IACA,WAAW,IAAA,CAAK,mBAAA;AAAA,IAChB,OAAA,EAAS,KAAA;AAAA,IACT,SAAA,EAAW,GAAA;AAAA,IACX,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAS,IAAA,CAAK;AAAA,GACf,CAAA;AAED,EAAA,IACE,eAAA,CAAgB,6BAAA,IAChB,eAAA,CAAgB,8BAAA,EAChB;AACA,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,gBAAA,EAAkB;AAAA,MACpC,UAAA,EAAY,QAAA;AAAA,MACZ,UAAU,IAAA,CAAK,MAAA;AAAA,MACf,UAAA,EAAY,SAAA;AAAA,MACZ,aAAA,EAAe,EAAE,iBAAA,EAAmB,yBAAA,EAA0B;AAAA,MAC9D,QAAA,EAAU;AAAA,QACR,mBAAmB,eAAA,CAAgB,iBAAA;AAAA,QACnC,MAAA,EAAQ,eAAA,CAAgB,6BAAA,GACpB,8BAAA,GACA,6BAAA;AAAA,QACJ,OAAA,EAAS,WAAA;AAAA,QACT,0BAA0B,eAAA,CAAgB,MAAA;AAAA,QAC1C,GAAI,uBACA,EAAE,oBAAA,EAAsB,OAAO,oBAAoB,CAAA,KACnD;AAAC,OACP;AAAA,MACA,SAAA,EAAW,eAAA,CAAgB,6BAAA,GACvB,6BAAA,GACA,wCAAwC,WAAA,CAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,WAAA,CAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA,mDAAA,CAAA;AAAA,MACnG,WAAW,IAAA,CAAK,mBAAA;AAAA,MAChB,OAAA,EAAS,KAAA;AAAA,MACT,SAAA,EAAW,GAAA;AAAA,MACX,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,IAAA,CAAK,GAAA,CAAI,iBAAA,GAAoB,kBAAkB,KAAK,IAAA,EAAM;AAC5D,IAAA,MAAM,IAAI,SAAA,CAAU,QAAA;AAAA,MAClB,GAAA;AAAA,MACA,QAAA,CAAS,GAAG,6BAAA,CAA8B,mBAAA;AAAA,MAC1C;AAAA,QACE,UAAU,IAAA,CAAK,MAAA;AAAA,QACf,WAAW,IAAA,CAAK;AAAA;AAClB,KACF;AAAA,EACF;AAKA,EAAA,IAAI,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,QAAA,EAAU;AACrC,IAAA,MAAM,IAAI,SAAA,CAAU,QAAA;AAAA,MAClB,CAAA;AAAA,MACC,SAAiB,WAAA,CAAY,uBAAA;AAAA,MAC9B,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA;AAAO,KACxB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,kBAAA;AAAA,IACA,aAAA,EAAe,iBAAA;AAAA,IACf,OAAA,EAAS,EAAE,CAAA,EAAG,GAAA,EAAK,GAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,GAAA,EAAI;AAAA,IAC1C;AAAA,GACF;AACF;AAOA,SAAS,wBAAA,CACP,UACA,MAAA,EACgC;AAChC,EAAA,IAAI,QAAA,KAAa,aAAA,IAAiB,QAAA,KAAa,SAAA,EAAW;AACxD,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,IAAA,CAAK,QAAA,KAAa,UAAA,IAAc,QAAA,KAAa,SAAA,KAAc,SAAS,CAAA,EAAG;AACrE,IAAA,OAAO,eAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAA;AACT;AAeyC,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQN,CAAAA,CAAE,EAAA,CAAG,gBAAgB,CAAA;AAAA,IAC7B,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,MAAA,EAAQA,EAAE,MAAA;AAAO,GACnB;AAAA,EACA,OAAA,EAAS,gBAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,aAAA,GAAgBC,SAAAA;AAAA,MACpB,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,MAAM,aAAa,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,MAAM,CAAA;AAC/C,IAAA,MAAM,cAAc,MAAM,qCAAA;AAAA,MACxB,GAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,MAAM,UAAA,GAAa,MAAM,sCAAA,CAAuC;AAAA,MAC9D,cAAc,IAAA,CAAK,MAAA;AAAA,MACnB,aAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAY,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,WAAU,KAAM;AACjD,QAAA,OAAO,MAAM,GAAA,CAAI,EAAA,CACd,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA;AAAA,UACC,SAAA,KAAc,aAAa,cAAA,GAAiB,YAAA;AAAA,UAC5C,CAAC,MACC,SAAA,KAAc,UAAA,GACV,EAAE,EAAA,CAAG,YAAA,EAAc,MAAM,CAAA,CAAE,EAAA,CAAG,UAAA,EAAY,KAAK,QAAQ,CAAA,GACvD,EAAE,EAAA,CAAG,UAAA,EAAY,MAAM,CAAA,CAAE,EAAA,CAAG,UAAA,EAAY,IAAA,CAAK,QAAQ;AAAA,UAE5D,OAAA,EAAQ;AAAA,MACb,CAAA;AAAA,MACA,SAAS,OAAO,MAAA,KAAW,MAAM,GAAA,CAAI,EAAA,CAAG,IAAI,MAAM;AAAA,KACnD,CAAA;AAED,IAAA,KAAA,MAAW,YAAY,UAAA,EAAY;AACjC,MAAA,MAAM,aAAA,GAAgB,wBAAA,CAAyB,QAAA,CAAS,QAAA,EAAU,SAAS,MAAM,CAAA;AACjF,MAAA,MAAM,4BAA4B,GAAA,EAAK;AAAA,QACrC,QAAQ,QAAA,CAAS,YAAA;AAAA,QACjB,MAAA,EAAQ,SAAS,OAAA,CAAQ,CAAA;AAAA,QACzB,SAAA,EAAW,SAAS,OAAA,CAAQ,CAAA;AAAA,QAC5B,WAAA,EAAa,SAAS,OAAA,CAAQ,CAAA;AAAA,QAC9B,QAAA,EAAU,SAAS,OAAA,CAAQ,CAAA;AAAA,QAC3B,OAAA,EAAS,aAAA;AAAA,QACT,SAAA,EAAW,sBAAsB,QAAA,CAAS,QAAQ,oBAAoB,aAAa,CAAA,GAAA,EAAM,SAAS,SAAS,CAAA,CAAA;AAAA,QAC3G,qBAAqB,IAAA,CAAK,MAAA;AAAA,QAC1B,YAAY,QAAA,CAAS;AAAA,OACtB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO;AAAA,MACL,UAAA,EAAY,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,QACxC,YAAA,EAAc,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA;AAAA,QAC1C,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,UAAU,QAAA,CAAS;AAAA,OACrB,CAAE,CAAA;AAAA,MACF,OAAO,UAAA,CAAW;AAAA,KACpB;AAAA,EACF;AACF,CAAC;;;AC/bD,IAAM,6BAAA,uBAAoC,GAAA,CAAI;AAAA,EAC5C,YAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,oBAAA,uBAA2B,GAAA,CAAI;AAAA,EACnC;AACF,CAAC,CAAA;AAED,SAAS,4BAA4B,MAAA,EAAwC;AAC3E,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,6BAAA,CAA8B,GAAA,CAAI,MAAM,CAAA,EAAG;AAC7C,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IACE,MAAA,KAAW,kBAAA,IACX,MAAA,KAAW,iBAAA,IACX,WAAW,eAAA,EACX;AACA,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,iBAAiB,IAAA,EAIR;AAChB,EAAA,IAAI,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA,EAAU;AACtC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AACA,EAAA,IAAI,OAAO,IAAA,CAAK,SAAA,KAAc,QAAA,EAAU;AACtC,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AACA,EAAA,IAAI,OAAO,IAAA,CAAK,aAAA,KAAkB,QAAA,EAAU;AAC1C,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAe,gBAAA,CACb,KACA,YAAA,EACkE;AAClE,EAAA,MAAM,QAAQ,MAAO,GAAA,CAAI,EAAA,CACtB,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA;AAAA,IAAU,YAAA;AAAA,IAAc,CAAC,MACxB,CAAA,CAAE,EAAA,CAAG,YAAY,YAAY,CAAA,CAAE,EAAA,CAAG,UAAA,EAAY,SAAS;AAAA,IAExD,OAAA,EAAQ;AAEX,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,GAAA,CAAI,CAAC,IAAA,KAAS,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,IAAA,CAAK,UAAU,CAAC,CAAC,CAAA;AAChF,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AACpC,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,aAAa,UAAA,IAAc,IAAA,CAAK,WAAW,UAAA,EAAY;AACvE,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,OAAO,CAAC,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,EACxB,CAAC,CAAA;AACH;AAEA,SAAS,gBAAgB,IAAA,EAAiC;AACxD,EAAA,MAAM,QAAA,GACJ,KAAK,QAAA,IAAY,OAAO,KAAK,QAAA,KAAa,QAAA,GACrC,KAAK,QAAA,GACN,IAAA;AACN,EAAA,MAAM,OAAO,QAAA,EAAU,IAAA;AACvB,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACxB,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,OAAO,KAAK,MAAA,CAAO,CAAC,GAAA,KAAuB,OAAO,QAAQ,QAAQ,CAAA;AACpE;AAEA,eAAsB,0BAAA,CACpB,KACA,YAAA,EACiB;AACjB,EAAA,OAAA,CAAQ,MAAM,gBAAA,CAAiB,GAAA,EAAK,YAAY,CAAA,EAAG,MAAA;AACrD;AAEA,eAAe,2BAA2B,IAAA,EAKmB;AAC3D,EAAA,MAAM,cAAc,IAAA,CAAK,aAAA,GAAgB,KAAK,GAAA,GAAM,IAAA,CAAK,IAAI,WAAA,EAAY;AACzE,EAAA,MAAM,sBAAsB,MAAM,gBAAA,CAAiB,KAAK,GAAA,EAAK,IAAA,CAAK,YAAY,CAAA,EAC3E,MAAA;AAAA,IAAO,CAAC,EAAE,IAAA,EAAK,KACd,eAAA,CAAgB,IAAI,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,GAAA,KAAA,CACzB,IAAA,CAAK,gBAAgB,GAAA,GAAM,GAAA,CAAI,aAAY,MAAO;AAAA;AACrD,GACF,CACC,IAAI,CAAC,EAAE,MAAK,KAAM,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAErC,EAAA,OAAO;AAAA,IACL,OAAO,kBAAA,CAAmB,MAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEA,eAAsB,0BAAA,CACpB,KACA,YAAA,EACoC;AACpC,EAAA,MAAM,iBAAiB,MAAQ,GAAA,CAAI,EAAA,CAChC,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA,CAAU,aAAA,EAAe,CAAC,MAAW,CAAA,CAAE,EAAA,CAAG,YAAY,YAAY,CAAC,EACnE,OAAA,EAAQ;AAIX,EAAA,OAAO,cAAA,CAAe,MAAA;AAAA,IACpB,CAAC,QAAQ,aAAA,KAAkB;AACzB,MAAA,MAAM,MAAA,GACJ,aAAA,CAAc,gBAAA,IAAoB,aAAA,CAAc,MAAA,IAAU,YAAA;AAC5D,MAAA,IAAI,2BAAA,CAA4B,MAAM,CAAA,KAAM,QAAA,EAAU;AACpD,QAAA,MAAA,CAAO,WAAA,IAAe,CAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,aAAA,IAAiB,CAAA;AAAA,MAC1B;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,EAAE,WAAA,EAAa,CAAA,EAAG,aAAA,EAAe,CAAA;AAAE,GACrC;AACF;AAEA,eAAsB,yBACpB,GAAA,EACA,YAAA,EACA,GAAA,GAAM,IAAA,CAAK,KAAI,EACa;AAC5B,EAAA,MAAM,cAAc,MAAM,gBAAA,CAAiB,KAAK,YAAY,CAAA,EACzD,IAAI,CAAC,EAAE,MAAK,KAAM,gBAAA,CAAiB,IAAI,CAAC,CAAA,CACxC,OAAO,CAAC,KAAA,KAA2B,UAAU,IAAI,CAAA;AAEpD,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAa,IAAA;AAAA,MACb,YAAA,EAAc,IAAA;AAAA,MACd,YAAA,EAAc,IAAA;AAAA,MACd,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,GAAG,UAAU,CAAA;AAC3C,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,GAAG,UAAU,CAAA;AAE3C,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,YAAY,CAAA;AAAA,IAC3C,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,YAAY,CAAA;AAAA,IAC3C,YAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAW,UAAA,CAAW;AAAA,GACxB;AACF;AAEA,eAAsB,2BAAA,CACpB,KACA,YAAA,EACiB;AACjB,EAAA,MAAM,gBAAgB,MAAO,GAAA,CAAI,EAAA,CAC9B,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA,CAAU,OAAA,EAAS,CAAC,MAAM,CAAA,CAAE,EAAA,CAAG,YAAY,YAAY,CAAC,EACxD,OAAA,EAAQ;AAIX,EAAA,MAAM,kBAAkB,aAAA,CAAc,MAAA;AAAA,IAAO,CAAC,IAAA,KAC5C,oBAAA,CAAqB,GAAA,CAAI,KAAK,QAAQ;AAAA,GACxC;AACA,EAAA,IAAI,eAAA,CAAgB,WAAW,CAAA,EAAG;AAChC,IAAA,OAAO,CAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,CAAQ,GAAA;AAAA,IACrC,eAAA,CAAgB,IAAI,CAAC,IAAA,KAAS,IAAI,EAAA,CAAG,GAAA,CAAI,IAAA,CAAK,UAAU,CAAC;AAAA,GAC3D;AACA,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AAExC,EAAA,KAAA,MAAW,QAAQ,gBAAA,EAAkB;AACnC,IAAA,IACE,IAAA,IACA,KAAK,QAAA,KAAa,QAAA,IAClB,KAAK,MAAA,KAAW,UAAA,IAChB,IAAA,CAAK,MAAA,KAAW,SAAA,EAChB;AACA,MAAA,eAAA,CAAgB,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IACtC;AAAA,EACF;AAEA,EAAA,OAAO,eAAA,CAAgB,IAAA;AACzB;AAEA,eAAe,yBAAyB,IAAA,EAKF;AACpC,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,QAAQ,MAAM,0BAAA,CAA2B,IAAA,CAAK,GAAA,EAAK,KAAK,YAAY,CAAA;AAC1E,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,KAAA,EAAO,KAAA;AAAA,QACP,IAAA,EAAM,EAAE,aAAA,EAAe,KAAA;AAAM,OAC/B;AAAA,IACF;AAAA,IACA,KAAK,sBAAA,EAAwB;AAC3B,MAAA,MAAM,SAAS,MAAM,0BAAA,CAA2B,IAAA,CAAK,GAAA,EAAK,KAAK,YAAY,CAAA;AAC3E,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAO,MAAA,CAAO,WAAA;AAAA,QACd,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAAA,IACA,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,YAAY,MAAM,wBAAA;AAAA,QACtB,IAAA,CAAK,GAAA;AAAA,QACL,IAAA,CAAK,YAAA;AAAA,QACL,IAAA,CAAK;AAAA,OACP;AACA,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAO,SAAA,CAAU,WAAA;AAAA,QACjB,IAAA,EAAM;AAAA,OACR;AAAA,IACF;AAAA,IACA,KAAK,iBAAA,EAAmB;AACtB,MAAA,MAAM,QAAQ,MAAM,2BAAA,CAA4B,IAAA,CAAK,GAAA,EAAK,KAAK,YAAY,CAAA;AAC3E,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,KAAA,EAAO,KAAA;AAAA,QACP,IAAA,EAAM,EAAE,cAAA,EAAgB,KAAA;AAAM,OAChC;AAAA,IACF;AAAA,IACA;AACE,MAAA,OAAO;AAAA,QACL,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,KAAA,EAAO,IAAA;AAAA,QACP,MAAM;AAAC,OACT;AAAA;AAEN;AAEA,eAAsB,kCACpB,IAAA,EACmC;AACnC,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,IAAA,CAAK,QAAA,CAAS,UAAU,eAAe,CAAA;AACrF,EAAA,MAAM,QAAA,GAAW,MAAM,wBAAA,CAAyB;AAAA,IAC9C,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,YAAA,EAAc,KAAK,MAAA,CAAO,GAAA;AAAA,IAC1B,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,KAAK,IAAA,CAAK;AAAA,GACX,CAAA;AAED,EAAA,MAAM,mBAAA,GACJ,QAAA,CAAS,KAAA,KAAU,IAAA,IACnB,kBAAA,CAAmB,OAAO,QAAA,EAAU,QAAA,CAAS,KAAA,EAAO,MAAA,CAAO,SAAS,CAAA;AACtE,EAAA,MAAM,MAAA,GACJ,KAAK,QAAA,CAAS,SAAA,KAAc,cACxB,mBAAA,GACE,cAAA,GACA,WAAA,GACF,mBAAA,GACE,WAAA,GACA,cAAA;AAER,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAW,wBAAA,CAAyB;AAAA,MAClC,MAAA;AAAA,MACA,QAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,IAAA,EAAM;AAAA,MACJ,GAAG,QAAA,CAAS,IAAA;AAAA,MACZ,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,eAAe,QAAA,CAAS,KAAA;AAAA,MACxB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,MAAA,EAAQ,OAAO,MAAA,IAAU,mBAAA;AAAA,MACzB,cAAc,MAAA,CAAO;AAAA;AACvB,GACF;AACF;AAEA,eAAsB,8BACpB,IAAA,EACmC;AACnC,EAAA,MAAM,MAAA,GAAS,wBAAA,CAAyB,IAAA,CAAK,QAAA,CAAS,UAAU,eAAe,CAAA;AAC/E,EAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,IAAA,CAAK,SAAA,EAAW,YAAY,CAAA;AAClE,EAAA,MAAM,MAAA,GACJ,OAAO,KAAA,CAAM,MAAA,KAAW,QAAA,IAAY,KAAA,CAAM,MAAA,CAAO,MAAA,GAAS,CAAA,GACtD,KAAA,CAAM,MAAA,GACN,MAAA,CAAO,MAAA;AACb,EAAA,MAAM,aAAA,GACJ,iBAAiB,KAAA,EAAO;AAAA,IACtB,eAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,CAAA,IACD,MAAA,CAAO,iBACP,MAAA,CAAO,YAAA,IACP,OAAO,WAAA,IACP,IAAA;AACF,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,cAAA;AAAA,MACR,WAAW,CAAA,oCAAA,EAAuC,MAAA,IAAU,IAAA,CAAK,QAAA,CAAS,UAAU,UAAU,CAAA,CAAA,CAAA;AAAA,MAC9F,IAAA,EAAM;AAAA,QACJ,MAAA;AAAA,QACA,aAAA,EAAe,IAAA;AAAA,QACf,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,MAAM,MAAA,CAAO;AAAA;AACf,KACF;AAAA,EACF;AAEA,EAAA,MAAM,mBAAA,GAAsB,kBAAA;AAAA,IAC1B,MAAA,CAAO,QAAA;AAAA,IACP,aAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AACA,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,QAAA,CAAS,WAAW,mBAAmB,CAAA;AAEnF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAW,wBAAA,CAAyB;AAAA,MAClC,OAAO,MAAA,IAAU,QAAA;AAAA,MACjB,aAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,mBAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAM,MAAA,CAAO;AAAA,KACd,CAAA;AAAA,IACD,IAAA,EAAM;AAAA,MACJ,MAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,MAAM,MAAA,CAAO;AAAA;AACf,GACF;AACF;AAEA,eAAsB,sCACpB,IAAA,EACmC;AACnC,EAAA,MAAM,MAAA,GAAS,gCAAA,CAAiC,IAAA,CAAK,QAAA,CAAS,UAAU,eAAe,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,IAAA,CAAK,SAAA,EAAW,oBAAoB,CAAA;AAC1E,EAAA,MAAM,GAAA,GACJ,OAAO,KAAA,CAAM,GAAA,KAAQ,YAAY,KAAA,CAAM,GAAA,CAAI,IAAA,EAAK,CAAE,SAAS,CAAA,GACvD,KAAA,CAAM,GAAA,CAAI,IAAA,KACV,MAAA,CAAO,GAAA;AACb,EAAA,MAAM,QAAA,GAAW,MAAM,0BAAA,CAA2B;AAAA,IAChD,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,YAAA,EAAc,KAAK,MAAA,CAAO,GAAA;AAAA,IAC1B,GAAA;AAAA,IACA,eAAe,MAAA,CAAO;AAAA,GACvB,CAAA;AACD,EAAA,MAAM,mBAAA,GAAsB,kBAAA;AAAA,IAC1B,MAAA,CAAO,QAAA;AAAA,IACP,QAAA,CAAS,KAAA;AAAA,IACT,MAAA,CAAO;AAAA,GACT;AACA,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,QAAA,CAAS,WAAW,mBAAmB,CAAA;AAEnF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAW,wBAAA,CAAyB;AAAA,MAClC,KAAA,EAAO,4BAA4B,GAAG,CAAA,CAAA,CAAA;AAAA,MACtC,eAAe,QAAA,CAAS,KAAA;AAAA,MACxB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,mBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACD,IAAA,EAAM;AAAA,MACJ,GAAA;AAAA,MACA,eAAe,QAAA,CAAS,KAAA;AAAA,MACxB,qBAAqB,QAAA,CAAS,KAAA;AAAA,MAC9B,oBAAoB,QAAA,CAAS,kBAAA;AAAA,MAC7B,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,aAAA,EAAe,OAAO,aAAA,IAAiB;AAAA;AACzC,GACF;AACF;AAEA,eAAsB,iCACpB,IAAA,EACmC;AACnC,EAAA,IACE,OAAO,IAAA,CAAK,QAAA,CAAS,QAAA,KAAa,QAAA,IAClC,CAAC,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EACvC;AACA,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,2BAAA,CAA4B,IAAA,CAAK,QAAA,CAAS,UAAU,eAAe,CAAA;AAClF,EAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,IAAA,CAAK,SAAA,EAAW,cAAc,CAAA;AACpE,EAAA,MAAM,SACH,OAAO,KAAA,CAAM,UAAU,QAAA,IAAY,KAAA,CAAM,MAAM,MAAA,GAAS,CAAA,GACrD,KAAA,CAAM,KAAA,GACN,OAAO,KAAA,KACX,IAAA,CAAK,SAAS,KAAA,IACd,IAAA,CAAK,SAAS,SAAA,CAAU,UAAA;AAC1B,EAAA,MAAM,WAAA,GACJ,iBAAiB,KAAA,EAAO;AAAA,IACtB,aAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACD,KACD,MAAA,CAAO,WAAA,IACP,OAAO,UAAA,IACP,MAAA,CAAO,eACP,MAAA,CAAO,UAAA;AACT,EAAA,MAAM,YACJ,KAAA,CAAM,SAAA,KAAc,QAAQ,MAAA,CAAO,SAAA,KAAc,QAAQ,WAAA,KAAgB,MAAA;AAE3E,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI,WAAA,KAAgB,MAAA,IAAa,WAAA,GAAc,IAAA,CAAK,SAAS,QAAA,EAAU;AACrE,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,SAAA;AAAA,QACR,SAAA,EAAW,GAAG,KAAK,CAAA,cAAA,EAAiB,WAAW,CAAA,iBAAA,EAAoB,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,QACzF,IAAA,EAAM;AAAA,UACJ,KAAA;AAAA,UACA,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,UACxB,SAAA,EAAW,IAAA;AAAA,UACX,WAAA;AAAA,UACA,cAAA,EAAgB,IAAA;AAAA,UAChB,WAAA,EAAa,WAAA,GAAc,IAAA,CAAK,QAAA,CAAS;AAAA;AAC3C,OACF;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GACJ,IAAA,CAAK,QAAA,CAAS,SAAA,KAAc,cAAc,cAAA,GAAiB,WAAA;AAC7D,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,WAAW,CAAA,EAAG,KAAK,CAAA,2BAAA,EAA8B,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA,CAAA;AAAA,MACvE,IAAA,EAAM;AAAA,QACJ,KAAA;AAAA,QACA,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,QACxB,SAAA,EAAW,IAAA;AAAA,QACX,aAAa,WAAA,IAAe,IAAA;AAAA,QAC5B,cAAA,EAAgB;AAAA;AAClB,KACF;AAAA,EACF;AAEA,EAAA,IAAI,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU;AACrC,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,SAAA;AAAA,MACR,WAAW,CAAA,EAAG,KAAK,CAAA,iBAAA,EAAoB,IAAA,CAAK,SAAS,QAAQ,CAAA,4BAAA,CAAA;AAAA,MAC7D,IAAA,EAAM;AAAA,QACJ,KAAA;AAAA,QACA,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,QACxB,SAAA,EAAW,KAAA;AAAA,QACX,WAAA,EAAa,IAAA,CAAK,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS;AAAA;AACxC,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,cAAA;AAAA,IACR,WAAW,CAAA,EAAG,KAAK,CAAA,0BAAA,EAA6B,IAAA,CAAK,SAAS,QAAQ,CAAA,mBAAA,CAAA;AAAA,IACtE,IAAA,EAAM;AAAA,MACJ,KAAA;AAAA,MACA,QAAA,EAAU,KAAK,QAAA,CAAS,QAAA;AAAA,MACxB,SAAA,EAAW,KAAA;AAAA,MACX,eAAA,EAAiB,IAAA,CAAK,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK;AAAA;AACjD,GACF;AACF;AAEA,eAAsB,sCACpB,IAAA,EACmC;AACnC,EAAA,MAAM,MAAA,GAAS,gCAAA,CAAiC,IAAA,CAAK,QAAA,CAAS,UAAU,eAAe,CAAA;AACvF,EAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,IAAA,CAAK,SAAA,EAAW,iBAAiB,CAAA;AACvE,EAAA,MAAM,OAAA,GACJ,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,GACxD,KAAA,CAAM,OAAA,GACN,MAAA,CAAO,OAAA;AACb,EAAA,MAAM,SAAA,GACJ,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,IAAY,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAA,GAC5D,KAAA,CAAM,SAAA,GACN,MAAA,CAAO,SAAA;AACb,EAAA,MAAM,YAAA,GACJ,gBAAA,CAAiB,KAAA,EAAO,CAAC,cAAA,EAAgB,cAAA,EAAgB,WAAW,CAAC,CAAA,IACrE,MAAA,CAAO,YAAA,IACP,MAAA,CAAO,YAAA,IACP,IAAA;AACF,EAAA,MAAM,cAAA,GACJ,gBAAA,CAAiB,KAAA,EAAO,CAAC,gBAAA,EAAkB,iBAAA,EAAmB,YAAY,CAAC,CAAA,IAC3E,MAAA,CAAO,cAAA,IACP,MAAA,CAAO,eAAA,IACP,IAAA;AAEF,EAAA,IAAI,YAAA,KAAiB,IAAA,IAAQ,cAAA,KAAmB,IAAA,EAAM;AACpD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,cAAA;AAAA,MACR,SAAA,EAAW,wEAAA;AAAA,MACX,IAAA,EAAM;AAAA,QACJ,OAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,QACA,cAAA;AAAA,QACA,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,WAAW,MAAA,CAAO;AAAA;AACpB,KACF;AAAA,EACF;AAEA,EAAA,IAAI,mBAAmB,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,uBACF,YAAA,GAAe,cAAA,IAAkB,IAAA,CAAK,GAAA,CAAI,cAAc,CAAA,GAAK,GAAA;AACjE,EAAA,MAAM,mBAAA,GAAsB,kBAAA;AAAA,IAC1B,MAAA,CAAO,QAAA;AAAA,IACP,mBAAA;AAAA,IACA,MAAA,CAAO;AAAA,GACT;AACA,EAAA,MAAM,MAAA,GAAS,uBAAA,CAAwB,IAAA,CAAK,QAAA,CAAS,WAAW,mBAAmB,CAAA;AAEnF,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,WAAW,wBAAA,CAAyB;AAAA,MAClC,OAAO,CAAA,EAAG,OAAA,IAAW,SAAS,CAAA,IAAA,EAAO,aAAa,WAAW,CAAA,aAAA,CAAA;AAAA,MAC7D,aAAA,EAAe,mBAAA;AAAA,MACf,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,mBAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,IACD,IAAA,EAAM;AAAA,MACJ,OAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO;AAAA;AACpB,GACF;AACF;AAEO,IAAM,iCAAA,GAAoC;AAAA,EAE/C,mCAAmB,IAAI,GAAA,CAAI,CAAC,YAAA,EAAc,qBAAA,EAAuB,oBAAoB,CAAC,CAAA;AAAA,EACtF,aAAA,EAAe,gBAAA;AAAA,EACf,qBAAA,EAAuB,yBAAA;AAAA,EACvB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,qBAAA,EAAuB;AACzB,CAAA;;;ACrlBO,SAAS,QAAQ,KAAA,EAA2B;AACjD,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,QAAQ,EAAC;AACzC;AAEO,SAAS,SAAS,KAAA,EAA+B;AACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,IAAA;AACvE;AAEO,SAAS,SAAS,KAAA,EAAkC;AACzD,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAC5D,KAAA,GACD,IAAA;AACN;AAEO,SAAS,SAAS,KAAA,EAA+B;AACtD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA,GACtD,KAAA,CAAM,IAAA,EAAK,GACX,IAAA;AACN;AAEO,SAAS,uBAAA,CACd,WACA,kBAAA,EACmC;AACnC,EAAA,IAAI,cAAc,WAAA,EAAa;AAC7B,IAAA,OAAO,qBAAqB,cAAA,GAAiB,WAAA;AAAA,EAC/C;AACA,EAAA,OAAO,qBAAqB,WAAA,GAAc,cAAA;AAC5C;AAEO,SAAS,sBAAsB,KAAA,EAA0B;AAC9D,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,SAAA,GAAY,SAAS,KAAK,CAAA;AAChC,IAAA,OAAO,SAAA,GAAY,CAAC,SAAS,CAAA,GAAI,EAAC;AAAA,EACpC;AAEA,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,MAAA,CAAO,MAAA;AAAA,IACP,MAAA,CAAO,MAAA;AAAA,IACP,MAAA,CAAO,MAAA;AAAA,IACP,MAAA,CAAO,IAAA;AAAA,IACP,MAAA,CAAO,OAAA;AAAA,IACP,MAAA,CAAO;AAAA,GACT,CACG,IAAI,QAAQ,CAAA,CACZ,OAAO,CAAC,SAAA,KAAmC,OAAA,CAAQ,SAAS,CAAC,CAAA;AAEhE,EAAA,KAAA,MAAW,aAAa,CAAC,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAM,MAAA,GAAS,OAAO,SAAS,CAAA;AAC/B,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,UAAA,CAAW,IAAA,CAAK,GAAG,qBAAA,CAAsB,MAAM,CAAC,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,UAAU,CAAC,CAAA;AACvC;AAEO,SAAS,kBAAkB,KAAA,EAAuB;AACvD,EAAA,OAAO,MAAM,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,SAAS,EAAE,CAAA;AACtD;AAEO,SAAS,4BACd,KAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,QAAA,CAAS,KAAK,CAAA,IAAK;AAAA,KAC7B;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GACJ,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,IACxB,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,IACpB,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IACtB,IAAA;AAEF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,QAAA,CAAS,MAAA,CAAO,OAAO,CAAA,IAAK,MAAA;AAAA,IACrC,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ,MAAA,CAAO,OAAA;AAAA,IAC5B,QAAA;AAAA,IACA,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA;AAAA,IACnC,MAAA,EACE,OAAO,MAAA,IACP,MAAA,CAAO,QACP,MAAA,CAAO,MAAA,IACP,OAAO,OAAA,IACP,MAAA;AAAA,IACF,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IAAK,MAAA;AAAA,IACnC,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,IAAK;AAAA,GACrC;AACF;AAEO,SAAS,mBAAgC,KAAA,EAA0B;AACxE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EACzB,SAAS,KAAA,EAAO;AACd,IAAA,2BAAA;AAAA,MACE,oDAAA;AAAA,MACA;AAAA,QACE,KAAA;AAAA,QACA,WAAW,OAAO;AAAA;AACpB,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,kBAAA,CAAmB,UAAkB,OAAA,EAA0B;AAC7E,EAAA,MAAM,cAAA,GAAiB,kBAAkB,QAAQ,CAAA;AACjD,EAAA,MAAM,iBAAA,GAAoB,kBAAkB,OAAO,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,OAAA,CAAQ,mBAAA,EAAqB,MAAM,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,OAAA,CAClB,OAAA,CAAQ,WAAA,EAAa,IAAI,CAAA,CACzB,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,CACxB,OAAA,CAAQ,OAAA,EAAS,MAAM,CAAA;AAC1B,EAAA,OAAO,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,cAAc,CAAA;AAC5D;AAEO,SAAS,kBAAA,CACd,UACA,QAAA,EACS;AACT,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAS,IAAA,CAAK,CAAC,YAAY,kBAAA,CAAmB,QAAA,EAAU,OAAO,CAAC,CAAA;AACzE;;;ACzHA,SAAS,YAAY,SAAA,EAA0D;AAC7E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,eAAe,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,CAC7C,GAAA,CAAI,QAAQ,CAAA,CACZ,MAAA,CAAO,CAAC,OAAA,KAA+B,OAAA,CAAQ,OAAO,CAAC,CAAA;AAC1D,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AACrC,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,iBAAiB,UAAA,EAA6C;AACrE,EAAA,MAAM,QAAA,GAAW,4BAA4B,UAAU,CAAA;AACvD,EAAA,MAAM,MAAA,GACJ,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,IAAK,SAAS,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,UAAU,CAAA;AAC7E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,OAAO,QAAQ,MAAA,CAAO,WAAW,CAAA,CAC9B,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,UAAA,GAAa,SAAS,KAAK,CAAA;AACjC,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA;AAC7C,IAAA,MAAM,UAAA,GAAa,QAAA,CAAS,QAAA,EAAU,IAAI,CAAA;AAC1C,IAAA,MAAM,QAAA,GACJ,QAAA,CAAS,UAAA,CAAW,QAAQ,KAC5B,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,IACxB,SAAS,QAAA,EAAU,QAAQ,CAAA,IAC3B,QAAA,CAAS,YAAY,IAAI,CAAA;AAC3B,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,IAAK,OAAA;AAClD,IAAA,MAAM,OAAA,GACJ,SAAS,UAAA,CAAW,OAAO,KAC3B,QAAA,CAAS,UAAA,CAAW,WAAW,CAAA,IAC/B,YAAA;AACF,IAAA,OAAO;AAAA,MACL,QAAA,EAAU,QAAA,GAAW,iBAAA,CAAkB,QAAQ,CAAA,GAAI,IAAA;AAAA,MACnD,OAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAC,CAAA,CACA,MAAA;AAAA,IACC,CAAC,UAAA,KAAmD,OAAA,CAAQ,UAAU;AAAA,GACxE;AACJ;AAEA,SAAS,qBAAA,CACP,UACA,UAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,QAAA,CAAS,SAAS,CAAA;AAC7C,EAAA,OAAO,gBAAA,CAAiB,UAAU,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,UAAA,KAC1C,kBAAA,CAAmB,UAAA,CAAW,QAAA,EAAU,OAAO,YAAY;AAAA,GAC7D;AACF;AAEO,IAAM,oBAAA,GAAsD;AAAA,EACjE,IAAA,EAAM,cAAA;AAAA,EACN,OAAA,CAAQ,EAAE,QAAA,EAAU,UAAA,EAAW,EAAG;AAChC,IAAA,MAAM,QAAA,GAAW,4BAA4B,UAAU,CAAA;AACvD,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAC3C,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,qBAAA,CAAsB,QAAA,EAAU,UAAU,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,EAC9D,CAAA;AAAA,EACA,SAAS,IAAA,EAA2D;AAClE,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAClD,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW;AAAA,OACb;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,2BAAA,CAA4B,IAAA,CAAK,UAAU,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAC3C,IAAA,MAAM,kBAAA,GAAqB,qBAAA,CAAsB,IAAA,CAAK,QAAA,EAAU,KAAK,UAAU,CAAA;AAE/E,IAAA,IAAI,mBAAmB,MAAA,KAAW,CAAA,IAAK,QAAA,KAAa,CAAA,IAAK,aAAa,IAAA,EAAM;AAC1E,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,SAAA,EACE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,MAAM,qBACJ,QAAA,KAAa,CAAA,IAAM,QAAA,KAAa,IAAA,IAAQ,mBAAmB,MAAA,KAAW,CAAA;AAExE,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,uBAAA;AAAA,QACN,KAAK,QAAA,CAAS,SAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,SAAA,EAAW,kBAAA,GACP,CAAA,gDAAA,EAAmD,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GACjF,CAAA,eAAA,EAAkB,kBAAA,CAAmB,MAAM,uBAAuB,kBAAA,CAC/D,GAAA;AAAA,QAAI,CAAC,UAAA,KACJ,UAAA,CAAW,QAAA,GACP,CAAA,EAAG,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK,UAAA,CAAW,QAAQ,CAAA,CAAA,CAAA,GAC9C,UAAA,CAAW;AAAA,OACjB,CACC,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,QAAA;AAAA,QACA,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf;AAAA;AACF,KACF;AAAA,EACF;AACF,CAAA;;;ACzIA,SAASM,aAAY,SAAA,EAA4D;AAC/E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,eAAe,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,QAAA,CAAS,MAAA,CAAO,UAAU,CAAA;AAC7C,EAAA,IAAI,CAAC,UAAA,IAAc,UAAA,KAAe,IAAA,EAAM;AACtC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,SAAS,mBAAmB,UAAA,EAI1B;AACA,EAAA,MAAM,QAAA,GAAW,4BAA4B,UAAU,CAAA;AACvD,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,IAAK,SAAS,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,UAAU,CAAA;AAC1F,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,IAAA;AAAA,MACf,UAAA,EAAY,IAAA;AAAA,MACZ,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AAC1C,EAAA,MAAM,aAAA,GACJ,SAAS,MAAA,CAAO,aAAa,MAC5B,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,SAAA,CAAU,MAAA,GAAS,IAAA,CAAA;AAE7C,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,UAAA,EAAY,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAAA,IAClC,UAAA,EAAY,QAAA,CAAS,MAAA,CAAO,UAAU;AAAA,GACxC;AACF;AAEA,SAAS,aAAA,CAAc,UAAuB,UAAA,EAA8B;AAC1E,EAAA,MAAM,MAAA,GAASA,YAAAA,CAAY,QAAA,CAAS,SAAS,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,mBAAmB,UAAU,CAAA;AAC7C,EAAA,OAAO,CAAC,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,eAAe,MAAA,CAAO,MAAA;AAC9D;AAEO,IAAM,sBAAA,GAAwD;AAAA,EACnE,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,CAAQ,EAAE,QAAA,EAAU,UAAA,EAAW,EAAG;AAChC,IAAA,OAAO,aAAA,CAAc,UAAU,UAAU,CAAA;AAAA,EAC3C,CAAA;AAAA,EACA,SAAS,IAAA,EAA2D;AAClE,IAAA,MAAM,MAAA,GAASA,YAAAA,CAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAClD,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW;AAAA,OACb;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,IAAA,CAAK,UAAU,CAAA;AAClD,IAAA,IAAI,OAAA,CAAQ,kBAAkB,IAAA,EAAM;AAClC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW;AAAA,OACb;AAAA,IACF;AACA,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA,EAAG;AAClD,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,WAAW,CAAA,uBAAA,EAA0B,OAAA,CAAQ,UAAU,CAAA,MAAA,EAAS,OAAO,MAAM,CAAA,CAAA;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,MAAM,kBAAA,GAAqB,QAAQ,aAAA,KAAkB,CAAA;AAErD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,uBAAA;AAAA,QACN,KAAK,QAAA,CAAS,SAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,WAAW,kBAAA,GACP,CAAA,mCAAA,EAAsC,MAAA,CAAO,MAAM,SAAS,MAAA,CAAO,UAAU,CAAA,QAAA,CAAA,GAC7E,CAAA,gBAAA,EAAmB,QAAQ,aAAa,CAAA,iBAAA,EAAoB,OAAO,MAAM,CAAA,MAAA,EAAS,OAAO,UAAU,CAAA,QAAA,CAAA;AAAA,MACvG,IAAA,EAAM;AAAA,QACJ,eAAe,OAAA,CAAQ,aAAA;AAAA,QACvB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,YAAY,MAAA,CAAO;AAAA;AACrB,KACF;AAAA,EACF;AACF,CAAA;;;AC3FA,SAASA,aAAY,SAAA,EAAyD;AAC5E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,eAAe,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,MAAA,CAAO,WAAW,CAAA;AAC/C,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AACrC,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,OAAO,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,EACrE;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,mBAAmB,KAAA,EAA0B;AACpD,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,IAAS,cAAA;AACnC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AACrC,EAAA,MAAM,QAAQ,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,MAAM,GAAG,KAAK,CAAA;AACrD,EAAA,MAAM,WACJ,MAAA,KAAW,QAAA,IACX,WAAW,MAAA,IACX,KAAA,KAAU,YACV,KAAA,KAAU,MAAA;AAEZ,EAAA,MAAM,QAAA,GAAW,QAAA,GAAW,CAAC,KAAK,IAAI,EAAC;AACvC,EAAA,KAAA,MAAW,SAAA,IAAa,CAAC,kBAAA,EAAoB,OAAA,EAAS,OAAO,CAAA,EAAG;AAC9D,IAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG;AAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,GAAG,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,IAC7C;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,mBAAmB,KAAA,EAA0B;AACpD,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,IAAS,cAAA;AACnC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AACrC,EAAA,MAAM,QAAQ,QAAA,CAAS,QAAA,CAAS,MAAA,CAAO,MAAM,GAAG,KAAK,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,MAAA,KAAW,QAAA,IAAY,KAAA,KAAU,QAAA;AAElD,EAAA,MAAM,MAAA,GAAS,QAAA,GAAW,CAAC,KAAK,IAAI,EAAC;AACrC,EAAA,KAAA,MAAW,SAAA,IAAa,CAAC,kBAAA,EAAoB,OAAA,EAAS,OAAO,CAAA,EAAG;AAC9D,IAAA,KAAA,MAAW,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAC,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,kBAAA,CAAmB,MAAM,CAAC,CAAA;AAAA,IAC3C;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,WAAW,KAAA,EAAoC;AACtD,EAAA,MAAM,MAAA,GAAS,SAAS,KAAK,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GACJ,QAAA,CAAS,MAAA,CAAO,IAAI,KACpB,QAAA,CAAS,MAAA,CAAO,IAAI,CAAA,IACpB,SAAS,MAAA,CAAO,QAAQ,CAAA,IACxB,QAAA,CAAS,OAAO,QAAQ,CAAA;AAC1B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,MAAM,IAAA,CAAK,IAAI,IAAI,kBAAA,CAAmB,MAAM,CAAC,CAAC,CAAA;AAAA,IAC3D,QAAA,EAAU,kBAAkB,QAAQ,CAAA;AAAA,IACpC,WAAA,EAAa,MAAM,IAAA,CAAK,IAAI,IAAI,kBAAA,CAAmB,MAAM,CAAC,CAAC;AAAA,GAC7D;AACF;AAEA,SAAS,kBAAkB,UAAA,EAAoC;AAC7D,EAAA,MAAM,QAAA,GAAW,4BAA4B,UAAU,CAAA;AACvD,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,QAAA,CAAS,MAAA;AAAA,IACT,QAAA,CAAS,IAAA;AAAA,IACT,QAAA,CAAS,MAAA;AAAA,IACT,QAAA,CAAS,MAAA;AAAA,IACT,GAAG,sBAAsB,UAAU;AAAA,GACrC;AAEA,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,MAAA,GAAS,mBAAmB,SAAS,CAAA;AAC3C,IAAA,MAAM,MAAA,GAAS,SAAS,MAAM,CAAA;AAC9B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,WAAW,CAAA,CACtC,GAAA,CAAI,UAAU,CAAA,CACd,MAAA,CAAO,CAAC,KAAA,KAAgC,OAAA,CAAQ,KAAK,CAAC,CAAA;AACzD,IAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,CACpC,GAAA,CAAI,UAAU,CAAA,CACd,MAAA,CAAO,CAAC,KAAA,KAAgC,OAAA,CAAQ,KAAK,CAAC,CAAA;AACzD,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,EAAC;AACV;AAEA,SAAS,gBAAA,CACP,UACA,UAAA,EACe;AACf,EAAA,MAAM,MAAA,GAASA,YAAAA,CAAY,QAAA,CAAS,SAAS,CAAA;AAC7C,EAAA,OAAO,iBAAA,CAAkB,UAAU,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,KAAA,KAC3C,kBAAA,CAAmB,KAAA,CAAM,QAAA,EAAU,OAAO,WAAW;AAAA,GACvD;AACF;AAMO,IAAM,mBAAA,GAAqD;AAAA,EAChE,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,CAAQ,EAAE,QAAA,EAAU,UAAA,EAAW,EAAG;AAChC,IAAA,OAAO,gBAAA,CAAiB,QAAA,EAAU,UAAU,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,EACzD,CAAA;AAAA,EACA,SAAS,IAAA,EAA2D;AAClE,IAAA,MAAM,MAAA,GAASA,YAAAA,CAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAClD,IAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,IAAA,CAAK,QAAA,EAAU,KAAK,UAAU,CAAA;AACrE,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW;AAAA,OACb;AAAA,IACF;AACA,IAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,SAAA,EAAW,CAAA,yBAAA,EAA4B,MAAA,CAAO,WAAW,CAAA,CAAA;AAAA,OAC3D;AAAA,IACF;AAEA,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAM,WAAW,CAAA;AACtE,IAAA,MAAM,cAAc,aAAA,CAAc,OAAA,CAAQ,CAAC,KAAA,KAAU,MAAM,WAAW,CAAA;AACtE,IAAA,MAAM,kBAAA,GAAqB,YAAY,MAAA,KAAW,CAAA;AAElD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,uBAAA;AAAA,QACN,KAAK,QAAA,CAAS,SAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,SAAA,EAAW,qBACP,CAAA,eAAA,EAAkB,aAAA,CAAc,MAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,WAAW,CAAA,MAAA,EAAS,WAAA,CAAY,MAAM,6BACpG,CAAA,eAAA,EAAkB,aAAA,CAAc,MAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,WAAW,CAAA,iBAAA,EAAoB,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACvH,IAAA,EAAM;AAAA,QACJ,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,aAAa,MAAA,CAAO,WAAA;AAAA,QACpB,cAAc,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,KAAU,MAAM,QAAQ,CAAA;AAAA,QACzD,WAAA;AAAA,QACA,iBAAiB,WAAA,CAAY;AAAA;AAC/B,KACF;AAAA,EACF;AACF,CAAA;;;AC5LA,SAASA,aAAY,SAAA,EAAyD;AAC5E,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,eAAe,CAAA;AACjD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,MAAA,CAAO,YAAY,CAAA,CAC7C,GAAA,CAAI,QAAQ,CAAA,CACZ,MAAA,CAAO,CAAC,OAAA,KAA+B,OAAA,CAAQ,OAAO,CAAC,CAAA;AAC1D,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AAEA,EAAA,OAAO,EAAE,YAAA,EAAa;AACxB;AAEA,SAAS,2BAA2B,UAAA,EAAyC;AAC3E,EAAA,MAAM,QAAA,GAAW,4BAA4B,UAAU,CAAA;AACvD,EAAA,MAAM,MAAA,GACJ,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA,IAAK,SAAS,QAAA,CAAS,IAAI,CAAA,IAAK,QAAA,CAAS,UAAU,CAAA;AAC7E,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,EAAC;AAAA,EACV;AAEA,EAAA,OAAO,QAAQ,MAAA,CAAO,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,KAAA,KAA8B;AACtE,IAAA,MAAM,UAAA,GAAa,SAAS,KAAK,CAAA;AACjC,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,QAAA,GACJ,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,IAC5B,SAAS,UAAA,CAAW,IAAI,CAAA,IACxB,QAAA,CAAS,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG,QAAQ,CAAA,IAChD,QAAA,CAAS,QAAA,CAAS,QAAA,CAAS,WAAW,QAAQ,CAAA,EAAG,IAAI,CAAA,EAAG,IAAI,CAAA;AAC9D,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,UAAA,CAAW,OAAO,CAAA,IAAK,kBAAA;AAChD,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,IAAK,MAAA;AAAA,QACnC,QAAA,EAAU,QAAA,GAAW,iBAAA,CAAkB,QAAQ,CAAA,GAAI,IAAA;AAAA,QACnD;AAAA;AACF,KACF;AAAA,EACF,CAAC,CAAA;AACL;AAEA,SAAS,qBAAqB,UAAA,EAAyC;AACrE,EAAA,MAAM,cAAkC,EAAC;AACzC,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,+CAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,KAAA,MAAW,IAAA,IAAQ,qBAAA,CAAsB,UAAU,CAAA,EAAG;AACpD,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,KAAA,MAAW,KAAA,IAAS,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1C,QAAA,WAAA,CAAY,IAAA,CAAK;AAAA,UACf,IAAA,EAAM,MAAM,CAAC,CAAA;AAAA,UACb,QAAA,EAAU,iBAAA,CAAkB,KAAA,CAAM,CAAC,KAAK,EAAE,CAAA;AAAA,UAC1C,OAAA,EAAS,KAAA,CAAM,CAAC,CAAA,IAAK;AAAA,SACtB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,WAAA;AACT;AAEA,SAASC,kBAAiB,UAAA,EAAyC;AACjE,EAAA,MAAM,UAAA,GAAa,2BAA2B,UAAU,CAAA;AACxD,EAAA,OAAO,UAAA,CAAW,MAAA,GAAS,CAAA,GAAI,UAAA,GAAa,qBAAqB,UAAU,CAAA;AAC7E;AAEA,SAASC,sBAAAA,CACP,UACA,UAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAASF,YAAAA,CAAY,QAAA,CAAS,SAAS,CAAA;AAC7C,EAAA,OAAOC,iBAAAA,CAAiB,UAAU,CAAA,CAAE,MAAA;AAAA,IAAO,CAAC,UAAA,KAC1C,kBAAA,CAAmB,UAAA,CAAW,QAAA,EAAU,OAAO,YAAY;AAAA,GAC7D;AACF;AAEO,IAAM,mBAAA,GAAqD;AAAA,EAChE,IAAA,EAAM,aAAA;AAAA,EACN,OAAA,CAAQ,EAAE,QAAA,EAAU,UAAA,EAAW,EAAG;AAChC,IAAA,MAAM,QAAA,GAAW,4BAA4B,UAAU,CAAA;AACvD,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAC3C,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAOC,sBAAAA,CAAsB,QAAA,EAAU,UAAU,CAAA,CAAE,MAAA,GAAS,CAAA;AAAA,EAC9D,CAAA;AAAA,EACA,SAAS,IAAA,EAA2D;AAClE,IAAA,MAAM,MAAA,GAASF,YAAAA,CAAY,IAAA,CAAK,QAAA,CAAS,SAAS,CAAA;AAClD,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EAAW;AAAA,OACb;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,2BAAA,CAA4B,IAAA,CAAK,UAAU,CAAA;AAC5D,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA;AAC3C,IAAA,MAAM,kBAAA,GAAqBE,sBAAAA,CAAsB,IAAA,CAAK,QAAA,EAAU,KAAK,UAAU,CAAA;AAE/E,IAAA,IAAI,mBAAmB,MAAA,KAAW,CAAA,IAAK,QAAA,KAAa,CAAA,IAAK,aAAa,IAAA,EAAM;AAC1E,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,cAAA;AAAA,QACR,SAAA,EACE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,MAAM,qBACJ,QAAA,KAAa,CAAA,IAAM,QAAA,KAAa,IAAA,IAAQ,mBAAmB,MAAA,KAAW,CAAA;AAExE,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,uBAAA;AAAA,QACN,KAAK,QAAA,CAAS,SAAA;AAAA,QACd;AAAA,OACF;AAAA,MACA,SAAA,EAAW,kBAAA,GACP,CAAA,gDAAA,EAAmD,MAAA,CAAO,YAAA,CAAa,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA,GACjF,CAAA,iBAAA,EAAoB,kBAAA,CAAmB,MAAM,4BAA4B,kBAAA,CACtE,GAAA;AAAA,QAAI,CAAC,UAAA,KACJ,UAAA,CAAW,QAAA,GACP,CAAA,EAAG,WAAW,QAAQ,CAAA,EAAG,UAAA,CAAW,IAAA,GAAO,OAAO,UAAA,CAAW,IAAI,CAAA,CAAA,CAAA,GAAM,EAAE,KACzE,UAAA,CAAW;AAAA,OACjB,CACC,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACjB,IAAA,EAAM;AAAA,QACJ,QAAA;AAAA,QACA,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB;AAAA;AACF,KACF;AAAA,EACF;AACF,CAAA;;;ACtKO,IAAM,gCAAA,GACX;AAAA,EACE,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA;AAEK,IAAM,8BAA8B,IAAI,GAAA;AAAA,EAC7C,gCAAA,CAAiC,GAAA,CAAI,CAAC,SAAA,KAAc,UAAU,IAAI;AACpE,CAAA;AAEO,SAAS,iCACd,IAAA,EAC2C;AAC3C,EAAA,OAAO,gCAAA,CAAiC,IAAA;AAAA,IACtC,CAAC,SAAA,KAAc,SAAA,CAAU,IAAA,KAAS;AAAA,GACpC;AACF;;;ACEA,IAAM,iBAAA,uBAAwB,GAAA,EAAgC;AAC9D,IAAMC,+BAA8B,iCAAA,CAAkC,iBAAA;AACtE,IAAMC,2BAA0B,iCAAA,CAAkC,aAAA;AAClE,IAAMC,oCACJ,iCAAA,CAAkC,qBAAA;AACpC,IAAMC,8BAA6B,iCAAA,CAAkC,gBAAA;AACrE,IAAMC,oCACJ,iCAAA,CAAkC,qBAAA;AACpC,IAAM,kCAAA,GAAqC,EAAA;AAEpC,SAAS,wBAAA,GAAiC;AAC/C,EAAA,iBAAA,CAAkB,KAAA,EAAM;AACxB,EAAA,uBAAA,EAAwB;AAC1B;AAEO,SAAS,2BACd,SAAA,EACM;AACN,EAAA,uBAAA,EAAwB;AACxB,EAAA,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AACjD;AAEO,SAAS,gCAAA,GAA6C;AAC3D,EAAA,uBAAA,EAAwB;AACxB,EAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,IAAA,EAAM,EAAE,IAAA,EAAK;AACnD;AAEA,SAAS,uBAAA,GAAgC;AACvC,EAAA,KAAA,MAAW,QAAQJ,4BAAAA,EAA6B;AAC9C,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,iBAAA,CAAkB,IAAI,IAAA,EAAM;AAAA,MAC1B,IAAA;AAAA,MACA,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,aAAa,gCAAA,EAAkC;AACxD,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,EAAG;AACzC,MAAA;AAAA,IACF;AACA,IAAA,iBAAA,CAAkB,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AAAA,EACjD;AAEA,EAAA,MAAM,kBAAA,GAAsE;AAAA,IAC1E,CAACC,0BAAyB,6BAA6B,CAAA;AAAA,IACvD,CAACC,mCAAkC,qCAAqC,CAAA;AAAA,IACxE,CAACC,6BAA4B,gCAAgC,CAAA;AAAA,IAC7D,CAACC,mCAAkC,qCAAqC;AAAA,GAC1E;AAEA,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,QAAQ,CAAA,IAAK,kBAAA,EAAoB;AACjD,IAAA,IAAI,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,iBAAA,CAAkB,GAAA,CAAI,IAAA,EAAM,EAAE,IAAA,EAAM,UAAU,CAAA;AAAA,EAChD;AACF;AAEA,SAAS,iBAAiB,OAAA,EAA0B;AAClD,EAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,IAAA,OAAO,gBAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,OAAO,QAAA;AAAA,EACT;AACA,EAAA,OAAO,cAAA;AACT;AAEA,SAAS,2BAA2B,OAAA,EAA8B;AAChE,EAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,IAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,aAAA,EAAe,cAAc,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,IAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,UAAU,CAAC,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,cAAc,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,cAAc,CAAC,CAAA;AACjC;AAEA,eAAsB,0BAA0B,IAAA,EAUP;AACvC,EAAA,uBAAA,EAAwB;AAExB,EAAA,MAAM,YAAY,iBAAA,CAAkB,GAAA,CAAI,IAAA,CAAK,QAAA,CAAS,UAAU,SAAS,CAAA;AACzE,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,MAAM,UAAU,QAAA,CAAS;AAAA,QACpC,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,WAAW,IAAA,CAAK;AAAA,OACjB,CAAA;AAAA,IACH,SAAS,KAAA,EAAO;AACd,MAAA,UAAA,GAAa;AAAA,QACX,MAAA,EAAQ,OAAA;AAAA,QACR,SAAA,EACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAC7C;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,UAAA,GAAa;AAAA,MACX,MAAA,EAAQ,OAAA;AAAA,MACR,SAAA,EAAW,CAAA,uCAAA,EAA0C,IAAA,CAAK,QAAA,CAAS,UAAU,SAAS,CAAA,EAAA;AAAA,KACxF;AAAA,EACF;AAEA,EAAA,MAAM,gBAAA,GACJ,OAAO,IAAA,CAAK,iBAAA,KAAsB,WAC9B,IAAA,CAAK,iBAAA,GACL,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,KAAe,QAAA,GAChC,IAAA,CAAK,OAAO,UAAA,GACZ,GAAA;AACR,EAAA,MAAM,iBAAiB,4BAAA,CAA6B;AAAA,IAClD,iBAAA,EAAmB,gBAAA;AAAA,IACnB,UAAA,EAAY,KAAK,QAAA,CAAS,UAAA;AAAA,IAC1B,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,kBAAkB,UAAA,CAAW;AAAA,GAC9B,CAAA;AAED,EAAA,IAAI,kBAAA;AACJ,EAAA,IAAI,eAAA,GAAkB,gBAAA;AACtB,EAAA,IAAI,cAAA,EAAgB;AAGlB,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,cAAA,CAAe,eAAe,CAAC,CAAA;AACzE,IAAA,MAAM,gBAAA,GAAmB,MAAM,2BAAA,CAA4B,IAAA,CAAK,GAAA,EAAK;AAAA,MACnE,MAAA,EAAQ,KAAK,QAAA,CAAS,YAAA;AAAA,MACtB,MAAA,EAAQ,SAAA;AAAA,MACR,WAAW,CAAA,GAAI,SAAA;AAAA,MACf,WAAA,EAAa,CAAA;AAAA,MACb,QAAA,EAAU,GAAA;AAAA,MACV,SAAS,cAAA,CAAe,OAAA;AAAA,MACxB,SAAA,EAAW,CAAA,oBAAA,EAAuB,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,UAAA,CAAW,MAAM,CAAA,EAAA,EAAK,UAAA,CAAW,SAAS,CAAA,CAAA;AAAA,MACpG,qBAAqB,IAAA,CAAK;AAAA,KAC3B,CAAA;AACD,IAAA,kBAAA,GAAqB,gBAAA,CAAiB,kBAAA;AACtC,IAAA,eAAA,GACE,OAAO,gBAAA,CAAiB,aAAA,KAAkB,QAAA,GACtC,gBAAA,CAAiB,gBACjB,cAAA,CAAe,eAAA;AAAA,EACvB;AAEA,EAAA,MAAM,eAAe,MAAO,IAAA,CAAK,GAAA,CAAI,EAAA,CAAW,OAAO,qBAAA,EAAuB;AAAA,IAC5E,UAAA,EAAY,KAAK,QAAA,CAAS,UAAA;AAAA,IAC1B,YAAA,EAAc,KAAK,QAAA,CAAS,YAAA;AAAA,IAC5B,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,aAAa,IAAA,CAAK,GAAA;AAAA,IAClB,SAAA,EAAW,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,SAAA;AAAA,IACnC,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAY,UAAA,CAAW,IAAA;AAAA,IACvB,iBAAA,EAAmB,QAAQ,cAAc,CAAA;AAAA,IACzC,iBAAiB,cAAA,EAAgB,eAAA;AAAA,IACjC,kBAAkB,cAAA,EAAgB,gBAAA;AAAA,IAClC,eAAA,EAAiB,iBAAiB,eAAA,GAAkB,MAAA;AAAA,IACpD,kBAAA;AAAA,IACA,qBAAqB,UAAA,CAAW,SAAA;AAAA,IAChC,OAAA,EAAS,KAAK,QAAA,CAAS;AAAA,GACjB,CAAA;AAER,EAAA,MAAM,aAAa,oBAAA,CAAqB,UAAA,CAAW,MAAA,EAAQ,IAAA,CAAK,SAAS,MAAM,CAAA;AAC/E,EAAA,MAAM,IAAA,CAAK,IAAI,EAAA,CAAG,KAAA;AAAA,IAChB,KAAK,QAAA,CAAS,GAAA;AAAA,IACd;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,iBAAiB,IAAA,CAAK,GAAA;AAAA,MACtB,eAAA,EAAA,CAAkB,IAAA,CAAK,QAAA,CAAS,eAAA,IAAmB,CAAA,IAAK,CAAA;AAAA,MACxD,WAAW,IAAA,CAAK;AAAA;AAClB,GACF;AAEA,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,MAAA,EAAQ,UAAA;AAAA,IACR,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAW,UAAA,CAAW,SAAA;AAAA,IACtB,MAAM,UAAA,CAAW,IAAA;AAAA,IACjB,iBAAA,EAAmB;AAAA,GACrB;AACF;AAEA,eAAsB,iCAAiC,IAAA,EAQvB;AAC9B,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,EAAA,MAAM,SAAA,GAAY,MAAM,uBAAA,CAAwB;AAAA,IAC9C,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,YAAA,EAAc,KAAK,MAAA,CAAO,GAAA;AAAA,IAC1B,OAAA,EAAS,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAAA,IACtC,aAAa,IAAA,CAAK;AAAA,GACnB,CAAA;AACD,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA;AAAA,IACtB,CAAA;AAAA,IACA,IAAA,CAAK,GAAA;AAAA,MACH,KAAK,YAAA,IAAgB,kCAAA;AAAA,MACrB;AAAA;AACF,GACF;AACA,EAAA,MAAM,YAAA,GAAe,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,UAAU,CAAA;AAClD,EAAA,MAAM,iBAAA,GAAoB,SAAA,CAAU,KAAA,CAAM,UAAU,CAAA;AAEpD,EAAA,IAAI,iBAAA,GACF,OAAO,IAAA,CAAK,MAAA,CAAO,eAAe,QAAA,GAAW,IAAA,CAAK,OAAO,UAAA,GAAa,GAAA;AACxE,EAAA,MAAM,UAAyC,EAAC;AAEhD,EAAA,KAAA,MAAW,YAAY,YAAA,EAAc;AACnC,IAAA,MAAM,UAAA,GAAa,MAAM,yBAAA,CAA0B;AAAA,MACjD,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,QAAA;AAAA,MACA,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,MACd,OAAA,EAAS,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAAA,MACtC,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,qBAAqB,IAAA,CAAK,mBAAA;AAAA,MAC1B,iBAAA,EAAmB;AAAA,KACpB,CAAA;AACD,IAAA,iBAAA,GAAoB,UAAA,CAAW,iBAAA;AAC/B,IAAA,IAAA,CAAK,OAAO,UAAA,GAAa,iBAAA;AACzB,IAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,MACX,YAAY,QAAA,CAAS,UAAA;AAAA,MACrB,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,iBAAiB,UAAA,CAAW;AAAA,KAC7B,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,iBAAA,CAAkB,SAAS,CAAA,EAAG;AAChC,IAAA,MAAM,IAAA,CAAK,IAAI,SAAA,CAAU,QAAA;AAAA,MACvB,CAAA;AAAA,MACA,sDAAA;AAAA,MACA;AAAA,QACE,YAAA,EAAc,KAAK,MAAA,CAAO,GAAA;AAAA,QAC1B,OAAA,EAAS,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAAA,QACtC,aAAa,iBAAA,CAAkB,GAAA,CAAI,CAAC,QAAA,KAAa,SAAS,UAAU,CAAA;AAAA,QACpE,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,qBAAqB,IAAA,CAAK,mBAAA;AAAA,QAC1B,YAAA,EAAc;AAAA;AAChB,KACF;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AACrC,EAAA,OAAA,CAAQ,KAAK,0DAAA,EAA4D;AAAA,IACvE,YAAA,EAAc,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA;AAAA,IACpC,OAAA,EAAS,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAAA,IACtC,WAAW,YAAA,CAAa,MAAA;AAAA,IACxB,eAAe,iBAAA,CAAkB,MAAA;AAAA,IACjC;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,gBAAgB,SAAA,CAAU,MAAA;AAAA,IAC1B,gBAAgB,YAAA,CAAa,MAAA;AAAA,IAC7B,eAAe,iBAAA,CAAkB,MAAA;AAAA,IACjC,iBAAA,EAAmB,kBAAkB,MAAA,GAAS,CAAA;AAAA,IAC9C,WAAW,YAAA,CAAa,MAAA;AAAA,IACxB,eAAA;AAAA,IACA,OAAA,EAAS,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAAA,IACtC;AAAA,GACF;AACF;AAEA,eAAsB,uBAAuB,IAAA,EAGlB;AACzB,EAAA,OAAO,MAAQ,IAAA,CAAK,GAAA,CAAI,GACrB,KAAA,CAAM,oBAAoB,EAC1B,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA,KAAW,EAAE,EAAA,CAAG,cAAA,EAAgB,KAAK,YAAY,CAAC,EAC1E,OAAA,EAAQ;AACb;AAEA,eAAe,wBAAwB,IAAA,EAKZ;AACzB,EAAA,MAAM,SAAA,GAAY,MAAM,sBAAA,CAAuB,IAAI,CAAA;AAEnD,EAAA,uBAAA,EAAwB;AACxB,EAAA,MAAM,gBAAA,GAAmB,0BAAA,CAA2B,IAAA,CAAK,OAAO,CAAA;AAChE,EAAA,MAAM,gBAAA,GACJ,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,GAC1C,IAAI,GAAA,CAAI,IAAA,CAAK,WAAW,CAAA,GACxB,IAAA;AAEN,EAAA,OAAO,SAAA,CAAU,MAAA,CAAO,CAAC,QAAA,KAAa;AACpC,IAAA,IAAI,QAAA,CAAS,WAAW,UAAA,EAAY;AAClC,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,QAAA,CAAS,kBAAkB,WAAA,EAAa;AAC1C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,iBAAA,CAAkB,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,SAAS,CAAA,EAAG;AACxD,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,OAAO,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,UAAU,CAAA;AAAA,IACjD;AACA,IAAA,OAAO,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,kBAAkB,CAAA;AAAA,EACzD,CAAC,CAAA;AACH;ACxUA,SAASC,4BAA2B,OAAA,EAA8B;AAChE,EAAA,IAAI,YAAY,gBAAA,EAAkB;AAChC,IAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,aAAA,EAAe,cAAc,CAAC,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,YAAY,UAAA,EAAY;AAC1B,IAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,UAAU,CAAC,CAAA;AAAA,EAC7B;AACA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,WAAA,EAAa,cAAc,CAAC,CAAA;AAAA,EAC9C;AACA,EAAA,uBAAO,IAAI,GAAA,CAAI,CAAC,cAAc,CAAC,CAAA;AACjC;AAMA,eAAe,YAAY,GAAA,EAA8C;AACvE,EAAA,MAAM,MAAA,GAAS,MAAMC,gBAAAA,CAAiB,GAAU,CAAA;AAChD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,MAAA;AACT;AAGA,eAAe,0BAAA,CACb,KACA,cAAA,EACiB;AACjB,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,OAAO,cAAA;AAAA,EACT;AACA,EAAA,OAAO,YAAY,GAAG,CAAA;AACxB;AAEA,eAAe,0BAAA,CACb,GAAA,EACA,MAAA,EACA,MAAA,EACe;AACf,EAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACA,EAAA,MAAM,YAAY,MAAMC,kBAAAA;AAAA,IACtB,GAAA;AAAA,IACA,MAAA,CAAO,SAAA;AAAA,IACP;AAAA,GACF;AACA,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,EAC5C;AACF;AAEA,eAAe,sBAAA,CACb,GAAA,EACA,OAAA,EACA,MAAA,EACe;AACf,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACrB,MAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,SAAS,CAAA;AAAA,EACjC;AAEA,EAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,IAAA,MAAM,SAAA,GAAY,MAAMA,kBAAAA,CAAmB,GAAA,EAAY,WAAW,MAAM,CAAA;AACxE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAAA,EACF;AACF;AAEA,eAAe,uBAAA,CACb,KACA,UAAA,EAC6B;AAC7B,EAAA,OAAO,MAAQ,GAAA,CAAI,EAAA,CAChB,KAAA,CAAM,oBAAoB,EAC1B,SAAA,CAAU,eAAA,EAAiB,CAAC,CAAA,KAAW,EAAE,EAAA,CAAG,YAAA,EAAc,UAAU,CAAC,EACrE,KAAA,EAAM;AACX;AAEA,eAAe,mBAAA,CACb,KACA,UAAA,EACuC;AACvC,EAAA,MAAM,WAAA,GAAc,MAAQ,GAAA,CAAI,EAAA,CAC7B,MAAM,qBAAqB,CAAA,CAC3B,UAAU,kBAAA,EAAoB,CAAC,MAAW,CAAA,CAAE,EAAA,CAAG,cAAc,UAAU,CAAC,EACxE,KAAA,CAAM,MAAM,CAAA,CACZ,IAAA,CAAK,CAAC,CAAA;AAET,EAAA,OAAO,WAAA,CAAY,CAAC,CAAA,IAAK,IAAA;AAC3B;AAEO,IAAM,wBAAwB,KAAA,CAAM;AAAA,EACzC,IAAA,EAAM;AAAA,IACJ,YAAA,EAAcjB,CAAAA,CAAE,EAAA,CAAG,gBAAgB;AAAA,GACrC;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAG,CAAA;AACpC,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,OAAO,MAAM,0BAAA,CAA2B,GAAA,EAAK,IAAA,CAAK,YAAY,CAAA;AAAA,EAChE;AACF,CAAC;AAEM,IAAM,8BAA8B,KAAA,CAAM;AAAA,EAC/C,IAAA,EAAM;AAAA,IACJ,YAAA,EAAclB,CAAAA,CAAE,EAAA,CAAG,gBAAgB;AAAA,GACrC;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAG,CAAA;AACpC,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,OAAO,MAAM,0BAAA,CAA2B,GAAA,EAAK,IAAA,CAAK,YAAY,CAAA;AAAA,EAChE;AACF,CAAC;AAEM,IAAM,wBAAwB,KAAA,CAAM;AAAA,EACzC,IAAA,EAAM;AAAA,IACJ,YAAA,EAAclB,CAAAA,CAAE,EAAA,CAAG,gBAAgB;AAAA,GACrC;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAG,CAAA;AACpC,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,OAAO,MAAM,wBAAA,CAAyB,GAAA,EAAK,IAAA,CAAK,YAAY,CAAA;AAAA,EAC9D;AACF,CAAC;AAEM,IAAM,+BAA+B,KAAA,CAAM;AAAA,EAChD,IAAA,EAAM;AAAA,IACJ,YAAA,EAAclB,CAAAA,CAAE,EAAA,CAAG,gBAAgB;AAAA,GACrC;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,GAAG,CAAA;AACpC,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AACpD,IAAA,OAAO,MAAM,2BAAA,CAA4B,GAAA,EAAK,IAAA,CAAK,YAAY,CAAA;AAAA,EACjE;AACF,CAAC;AAEM,IAAM,0BAA0B,QAAA,CAAS;AAAA,EAC9C,IAAA,EAAM;AAAA,IACJ,YAAA,EAAclB,CAAAA,CAAE,EAAA,CAAG,gBAAgB,CAAA;AAAA,IACnC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,WAAA,EAAaA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,eAAeA,CAAAA,CAAE,KAAA;AAAA,MACfA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,MACrBA,CAAAA,CAAE,QAAQ,UAAU,CAAA;AAAA,MACpBA,CAAAA,CAAE,QAAQ,YAAY,CAAA;AAAA,MACtBA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,MACrBA,CAAAA,CAAE,QAAQ,WAAW;AAAA,KACvB;AAAA,IACA,SAAA,EAAWA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAA,CAAQ,UAAU,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,WAAW,CAAC,CAAA;AAAA,IAChE,SAAA,EAAWA,EAAE,MAAA,CAAO;AAAA,MAClB,UAAA,EAAYA,EAAE,MAAA,EAAO;AAAA,MACrB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,MACpB,eAAA,EAAiBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK;AAAA,KACpC,CAAA;AAAA,IACD,QAAA,EAAUA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC/B,WAAA,EAAaA,EAAE,QAAA,CAASA,CAAAA,CAAE,MAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,IAC3C,mBAAmBA,CAAAA,CAAE,QAAA;AAAA,MACnBA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,UAAU,CAAC;AAAA,KACnE;AAAA,IACA,UAAA,EAAYA,EAAE,MAAA,CAAO;AAAA,MACnB,WAAA,EAAaA,EAAE,MAAA,CAAO;AAAA,QACpB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,QAChB,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,OAC/B,CAAA;AAAA,MACD,cAAA,EAAgBA,EAAE,MAAA,CAAO;AAAA,QACvB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,QAChB,KAAA,EAAOA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,OAC7B,CAAA;AAAA,MACD,WAAWA,CAAAA,CAAE,QAAA;AAAA,QACXA,EAAE,MAAA,CAAO;AAAA,UACP,KAAA,EAAOA,EAAE,MAAA;AAAO,SACjB;AAAA,OACH;AAAA,MACA,WAAWA,CAAAA,CAAE,QAAA;AAAA,QACXA,EAAE,MAAA,CAAO;AAAA,UACP,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,UACpB,KAAA,EAAOA,EAAE,MAAA;AAAO,SACjB;AAAA;AACH,KACD,CAAA;AAAA,IACD,oBAAoBA,CAAAA,CAAE,KAAA;AAAA,MACpBA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,MACrBA,CAAAA,CAAE,QAAQ,aAAa,CAAA;AAAA,MACvBA,CAAAA,CAAE,QAAQ,UAAU,CAAA;AAAA,MACpBA,CAAAA,CAAE,QAAQ,cAAc;AAAA,KAC1B;AAAA,IACA,kBAAA,EAAoBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IACzC,mBAAA,EAAqBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GAC5C;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,SAAS,MAAM,0BAAA;AAAA,MACnB,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAEpD,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,aAAa,gBAAA,EAAiB;AAEpC,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,UAAA;AAAA,MACA,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,eAAe,IAAA,CAAK,aAAA;AAAA,MACpB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,mBAAmB,IAAA,CAAK,iBAAA;AAAA,MACxB,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,oBAAoB,IAAA,CAAK,kBAAA;AAAA,MACzB,oBAAoB,IAAA,CAAK,kBAAA;AAAA,MACzB,MAAA,EAAQ,QAAA;AAAA,MACR,aAAA,EAAe,UAAA;AAAA,MACf,eAAA,EAAiB,CAAA;AAAA,MACjB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW,MAAA;AAAA,MACX,SAAA,EAAW;AAAA,KACb;AAEA,IAAA,MAAM,aAAa,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,sBAAsB,WAAW,CAAA;AAExE,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,EAAA,EAAI,UAAA;AAAA,MACJ,QAAQ,WAAA,CAAY;AAAA,KACtB;AAAA,EACF;AACF,CAAC;AAEM,IAAM,mBAAmB,QAAA,CAAS;AAAA,EACvC,IAAA,EAAM;AAAA,IACJ,UAAA,EAAYlB,EAAE,MAAA,EAAO;AAAA,IACrB,UAAA,EAAYA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC9B,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,SAAA,EAAWA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC7B,mBAAA,EAAqBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GAC5C;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,SAAS,MAAM,0BAAA;AAAA,MACnB,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,uBAAA,CAAwB,GAAA,EAAK,KAAK,UAAU,CAAA;AACnE,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAA,CAAK,UAAU,CAAA,CAAE,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,QAAA,CAAS,WAAW,UAAA,EAAY;AAClC,MAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,IAC3D;AAEA,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,SAAS,YAAY,CAAA;AACtD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAEpD,IAAA,MAAM,UAAA,GAAa,MAAM,yBAAA,CAA0B;AAAA,MACjD,GAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,MACd,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,OAAA,EAAS,KAAK,OAAA,IAAW,QAAA;AAAA,MACzB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,mBAAA,EAAqB;AAAA,KACtB,CAAA;AAED,IAAA,OAAO;AAAA,MACL,cAAc,UAAA,CAAW,YAAA;AAAA,MACzB,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,kBAAkB,UAAA,CAAW,gBAAA;AAAA,MAC7B,iBAAiB,UAAA,CAAW,eAAA;AAAA,MAC5B,WAAW,UAAA,CAAW;AAAA,KACxB;AAAA,EACF;AACF,CAAC;AAEM,IAAM,+BAA+B,QAAA,CAAS;AAAA,EACnD,IAAA,EAAM;AAAA,IACJ,YAAA,EAAclB,CAAAA,CAAE,EAAA,CAAG,gBAAgB,CAAA;AAAA,IACnC,UAAA,EAAYA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC9B,SAAA,EAAWA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC7B,UAAA,EAAYA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC9B,UAAA,EAAYA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC9B,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,mBAAA,EAAqBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GAC5C;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,SAAS,MAAM,0BAAA;AAAA,MACnB,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAEpD,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,cAAA;AAChC,IAAA,MAAM,gBAAA,GAAmBH,2BAAAA;AAAA,MACvB,OAAA,KAAY,QAAA,GACR,QAAA,GACA,OAAA,KAAY,mBACV,gBAAA,GACA;AAAA,KACR;AACA,IAAA,MAAM,kBAAA,uBAAyB,GAAA,CAAqB;AAAA,MAClD,CAAC,aAAA,EAAe,IAAA,CAAK,UAAU,CAAA;AAAA,MAC/B,CAAC,aAAA,EAAe,IAAA,CAAK,SAAS,CAAA;AAAA,MAC9B,CAAC,cAAA,EAAgB,IAAA,CAAK,UAAU,CAAA;AAAA,MAChC,CAAC,gBAAA,EAAkB,IAAA,CAAK,UAAU;AAAA,KACnC,CAAA;AACD,IAAA,MAAM,SAAA,GAAA,CAAa,MAAM,sBAAA,CAAuB;AAAA,MAC9C,GAAA;AAAA,MACA,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA,EAAG,MAAA,CAAO,CAAC,QAAA,KAAa;AACvB,MAAA,IAAI,QAAA,CAAS,WAAW,UAAA,EAAY;AAClC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,IAAI,CAAC,gBAAA,CAAiB,GAAA,CAAI,QAAA,CAAS,kBAAkB,CAAA,EAAG;AACtD,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,2BAAA,CAA4B,GAAA,CAAI,QAAA,CAAS,SAAA,CAAU,SAAS,CAAA;AAAA,IACrE,CAAC,CAAA;AAED,IAAA,IAAI,oBACF,OAAO,MAAA,CAAO,UAAA,KAAe,QAAA,GAAW,OAAO,UAAA,GAAa,GAAA;AAC9D,IAAA,MAAM,cAA8C,EAAC;AAErD,IAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,MAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,GAAA,CAAI,QAAA,CAAS,UAAU,SAAS,CAAA;AACtE,MAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,oBAAA,GAAuB,gCAAA;AAAA,QAC3B,SAAS,SAAA,CAAU;AAAA,OACrB;AACA,MAAA,IAAI,CAAC,oBAAA,EAAsB,OAAA,CAAQ,EAAE,QAAA,EAAU,UAAA,EAAY,CAAA,EAAG;AAC5D,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,UAAA,GAAa,MAAM,yBAAA,CAA0B;AAAA,QACjD,GAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,GAAA,EAAK,KAAK,GAAA,EAAI;AAAA,QACd,OAAA;AAAA,QACA,mBAAA,EAAqB,MAAA;AAAA,QACrB,iBAAA,EAAmB,iBAAA;AAAA,QACnB;AAAA,OACD,CAAA;AACD,MAAA,iBAAA,GAAoB,UAAA,CAAW,iBAAA;AAC/B,MAAA,MAAA,CAAO,UAAA,GAAa,iBAAA;AAEpB,MAAA,WAAA,CAAY,IAAA,CAAK;AAAA,QACf,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,SAAA,EAAW,SAAS,SAAA,CAAU,SAAA;AAAA,QAC9B,cAAc,UAAA,CAAW,YAAA;AAAA,QACzB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,kBAAkB,UAAA,CAAW,gBAAA;AAAA,QAC7B,iBAAiB,UAAA,CAAW,eAAA;AAAA,QAC5B,WAAW,UAAA,CAAW;AAAA,OACvB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO;AAAA,MACL,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,OAAA;AAAA,MACA,oBAAoB,SAAA,CAAU,MAAA;AAAA,MAC9B,oBAAoB,WAAA,CAAY,MAAA;AAAA,MAChC;AAAA,KACF;AAAA,EACF;AACF,CAAC;AAEM,IAAM,8BAA8B,QAAA,CAAS;AAAA,EAClD,IAAA,EAAM;AAAA,IACJ,YAAA,EAAcf,CAAAA,CAAE,EAAA,CAAG,gBAAgB,CAAA;AAAA,IACnC,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,SAAA,EAAWA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC7B,YAAA,EAAcA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IACnC,mBAAA,EAAqBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GAC5C;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,SAAS,MAAM,0BAAA;AAAA,MACnB,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AACA,IAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AAEpD,IAAA,OAAO,MAAM,gCAAA,CAAiC;AAAA,MAC5C,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,mBAAA,EAAqB,MAAA;AAAA,MACrB,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AAAA,EACH;AACF,CAAC;AAEM,IAAM,oCAAoC,gBAAA,CAAiB;AAAA,EAChE,IAAA,EAAM;AAAA,IACJ,YAAA,EAAclB,CAAAA,CAAE,EAAA,CAAG,gBAAgB,CAAA;AAAA,IACnC,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,WAAA,EAAaA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC/B,SAAA,EAAWA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,KAAK,CAAA;AAAA,IAC7B,mBAAA,EAAqBA,EAAE,MAAA,EAAO;AAAA,IAC9B,YAAA,EAAcA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GACrC;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,MAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,MAAM,gCAAA,CAAiC;AAAA,MAC5C,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,qBAAqB,IAAA,CAAK,mBAAA;AAAA,MAC1B,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AAAA,EACH;AACF,CAAC;AAEM,IAAM,oBAAoB,KAAA,CAAM;AAAA,EACrC,IAAA,EAAM;AAAA,IACJ,cAAclB,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,EAAA,CAAG,gBAAgB,CAAC,CAAA;AAAA,IAC/C,UAAA,EAAYA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IACjC,QAAQA,CAAAA,CAAE,QAAA;AAAA,MACRA,CAAAA,CAAE,KAAA;AAAA,QACAA,CAAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,QAClBA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,QACrBA,CAAAA,CAAE,QAAQ,UAAU,CAAA;AAAA,QACpBA,CAAAA,CAAE,QAAQ,SAAS,CAAA;AAAA,QACnBA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,QACrBA,CAAAA,CAAE,QAAQ,UAAU;AAAA;AACtB,KACF;AAAA,IACA,mBAAA,EAAqBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GAC5C;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,SAAS,MAAM,0BAAA;AAAA,MACnB,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAEA,IAAA,IAAI,YAA2B,EAAC;AAChC,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAM,QAAA,GAAW,MAAM,uBAAA,CAAwB,GAAA,EAAK,KAAK,UAAU,CAAA;AACnE,MAAA,SAAA,GAAY,QAAA,GAAW,CAAC,QAAQ,CAAA,GAAI,EAAC;AAAA,IACvC,CAAA,MAAA,IAAW,KAAK,YAAA,EAAc;AAC5B,MAAA,MAAM,SAAU,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,QAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,MACrC;AACA,MAAA,MAAM,0BAAA,CAA2B,GAAA,EAAK,MAAA,EAAQ,MAAM,CAAA;AACpD,MAAA,SAAA,GAAY,MAAQ,GAAA,CAAI,EAAA,CACrB,KAAA,CAAM,oBAAoB,CAAA,CAC1B,SAAA;AAAA,QAAU,WAAA;AAAA,QAAa,CAAC,CAAA,KACvB,CAAA,CAAE,EAAA,CAAG,cAAA,EAAgB,KAAK,YAAY;AAAA,QAEvC,OAAA,EAAQ;AAAA,IACb;AAEA,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,MAAM,kBAAA,GAAqB,MAAM,OAAA,CAAQ,GAAA;AAAA,QACvC,SAAA,CAAU,IAAI,CAAC,QAAA,KAAa,IAAI,EAAA,CAAG,GAAA,CAAI,QAAA,CAAS,YAAY,CAAC;AAAA,OAC/D;AACA,MAAA,MAAM,kBAAmC,EAAC;AAE1C,MAAA,KAAA,MAAW,UAAU,kBAAA,EAAoB;AACvC,QAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AAC3C,UAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,QACrC;AACA,QAAA,eAAA,CAAgB,KAAK,MAAuB,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,sBAAA,CAAuB,GAAA,EAAK,eAAA,EAAiB,MAAM,CAAA;AAAA,IAC3D;AAEA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,SAAA,GAAY,UAAU,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,MAAA,KAAW,KAAK,MAAM,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,IAAA,GAA4B,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC9C,SAAA,CAAU,GAAA,CAAI,OAAO,QAAA,MAAc;AAAA,QACjC,GAAG,QAAA;AAAA,QACH,gBAAA,EAAkB,MAAM,mBAAA,CAAoB,GAAA,EAAK,SAAS,UAAU;AAAA,OACtE,CAAE;AAAA,KACJ;AAEA,IAAA,OAAO,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAAA,EACtD;AACF,CAAC;AAEM,IAAM,sBAAsB,KAAA,CAAM;AAAA,EACvC,IAAA,EAAM;AAAA,IACJ,OAAA,EAASlB,EAAE,MAAA,EAAO;AAAA,IAClB,qBAAA,EAAuBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC5C,mBAAA,EAAqBA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAAA,GAC5C;AAAA,EACA,OAAA,EAASkB,gBAAAA;AAAA,EACT,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,YAAY,MAAQ,GAAA,CAAI,GAC3B,KAAA,CAAM,oBAAoB,EAC1B,SAAA,CAAU,UAAA,EAAY,CAAC,CAAA,KAAW,EAAE,EAAA,CAAG,SAAA,EAAW,KAAK,OAAO,CAAC,EAC/D,OAAA,EAAQ;AAEX,IAAA,MAAM,SAAS,MAAM,0BAAA;AAAA,MACnB,GAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AACA,IAAA,MAAM,UAAU,MAAO,GAAA,CAAI,EAAA,CACxB,KAAA,CAAM,gBAAgB,CAAA,CACtB,SAAA;AAAA,MAAU,eAAA;AAAA,MAAiB,CAAC,CAAA,KAC3B,CAAA,CAAE,EAAA,CAAG,SAAA,EAAW,KAAK,OAAO,CAAA,CAAE,EAAA,CAAG,UAAA,EAAY,QAAQ;AAAA,MAEtD,OAAA,EAAQ;AACX,IAAA,MAAM,sBAAA,CAAuB,GAAA,EAAK,OAAA,EAAS,MAAM,CAAA;AAEjD,IAAA,MAAM,wBAAwB,IAAA,CAAK,GAAA;AAAA,MACjC,CAAA;AAAA,MACA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,qBAAA,IAAyB,GAAG,EAAE;AAAA,KAC9C;AACA,IAAA,MAAM,iBAAA,GACJ,qBAAA,KAA0B,CAAA,GACtB,EAAC,GACE,MAAO,GAAA,CAAI,EAAA,CACX,KAAA,CAAM,qBAAqB,CAAA,CAC3B,SAAA,CAAU,eAAA,EAAiB,CAAC,CAAA,KAAW,CAAA,CAAE,EAAA,CAAG,SAAA,EAAW,IAAA,CAAK,OAAO,CAAC,CAAA,CACpE,KAAA,CAAM,MAAM,CAAA,CACZ,IAAA,CAAK,qBAAqB,CAAA,IAC7B,EAAC;AAEP,IAAA,MAAM,oBAAoB,IAAI,GAAA;AAAA,MAC5B,SAAA,CACG,MAAA,CAAO,CAAC,QAAA,KAAa,SAAS,MAAA,KAAW,UAAU,CAAA,CACnD,GAAA,CAAI,CAAC,QAAA,KAAa,MAAA,CAAO,QAAA,CAAS,YAAY,CAAC;AAAA,KACpD;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,UAAU,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,MAAA,KAAW,QAAQ,CAAA,CAAE,MAAA;AAAA,MACrE,QAAA,EAAU,UAAU,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,MAAA,KAAW,UAAU,CAAA,CAAE,MAAA;AAAA,MACzE,OAAA,EAAS,UAAU,MAAA,CAAO,CAAC,aAAa,QAAA,CAAS,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AAAA,MACvE,uBAAuB,OAAA,CACpB,MAAA;AAAA,QACC,CAAC,MAAA,KACC,OAAO,MAAA,CAAO,eAAe,QAAA,IAC7B,MAAA,CAAO,UAAA,IAAc,GAAA,IACrB,CAAC,iBAAA,CAAkB,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC;AAAA,OAC7C,CACC,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,QAChB,QAAQ,MAAA,CAAO,GAAA;AAAA,QACf,eAAe,MAAA,CAAO,aAAA;AAAA,QACtB,YAAY,MAAA,CAAO;AAAA,OACrB,CAAE,CAAA;AAAA,MACJ;AAAA,KACF;AAAA,EACF;AACF,CAAC;AAEM,SAAS,uBAAA,CAId,WAmBA,IAAA,EAMA;AACA,EAAA,OAAO,SAAA,CACJ,MAAA,CAAO,CAAC,QAAA,KAAa,SAAS,MAAA,KAAW,UAAU,CAAA,CACnD,GAAA,CAAI,CAAC,QAAA,KAAa,6BAAA,CAA8B,QAAA,EAAiB,IAAI,CAAC,CAAA;AAC3E","file":"epistemicContracts.js","sourcesContent":["/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> active -> resolved_true/resolved_false\n * \\-> superseded\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"active\"\n | \"superseded\"\n | \"resolved_true\"\n | \"resolved_false\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"active\",\n \"superseded\",\n \"resolved_true\",\n \"resolved_false\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeLegacyBeliefStatus(\n value: unknown\n): BeliefLifecycleStatus | null {\n if (isBeliefLifecycleStatus(value)) {\n return value;\n }\n if (value === \"belief\" || value === \"established\" || value === \"emerging\") {\n return \"active\";\n }\n if (value === \"fact\" || value === \"confirmed\") {\n return \"resolved_true\";\n }\n if (value === \"disconfirmed\" || value === \"expired\") {\n return \"resolved_false\";\n }\n if (value === \"deprecated\") {\n return \"superseded\";\n }\n return null;\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nfunction resolvedPredictionStatus(\n predictionMeta: unknown\n): BeliefLifecycleStatus | null {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return null;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n if (outcome === \"confirmed\") {\n return \"resolved_true\";\n }\n if (outcome === \"disconfirmed\" || outcome === \"expired\") {\n return \"resolved_false\";\n }\n return null;\n}\n\nfunction shouldTreatBeliefAsResolved(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus | null {\n if (isResolvedByConfidence(opts.confidence)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n return normalized === 0 ? \"resolved_false\" : \"resolved_true\";\n }\n const directPredictionStatus = resolvedPredictionStatus(opts.predictionMeta);\n if (directPredictionStatus) {\n return directPredictionStatus;\n }\n const metadataPredictionStatus = resolvedPredictionStatus(\n getPredictionMetaFromMetadata(opts.metadata)\n );\n if (metadataPredictionStatus) {\n return metadataPredictionStatus;\n }\n return null;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved(opts);\n if (resolvedStatus) {\n return resolvedStatus;\n }\n\n const direct = opts.beliefStatus;\n const normalizedDirect = normalizeLegacyBeliefStatus(direct);\n if (normalizedDirect) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to active. Evidence, not user intent,\n // makes a hypothesis active.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedDirect)\n ) {\n return \"active\";\n }\n return normalizedDirect;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n const normalizedMetaStatus = normalizeLegacyBeliefStatus(metaStatus);\n if (normalizedMetaStatus) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedMetaStatus)\n ) {\n return \"active\";\n }\n return normalizedMetaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"active\" || status === \"resolved_true\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved({ ...opts });\n if (resolvedStatus) {\n return resolvedStatus;\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"active\";\n }\n return status;\n}\n\nexport function promoteBeliefStatusAfterEvidence(\n status: BeliefLifecycleStatus\n): BeliefLifecycleStatus {\n return isPreValidationBeliefStatus(status) ? \"active\" : status;\n}\n","import {\n actionGeneric,\n anyApi,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nexport const api = anyApi as any;\nexport const components = componentsGeneric() as any;\nexport const internal = anyApi as any;\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> = any;\nexport type DataModel = any;\ntype IndexRangeBuilder = {\n field(fieldName: string): string;\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n};\ntype FilterBuilder = {\n eq(left: unknown, right: unknown): unknown;\n neq(left: unknown, right: unknown): unknown;\n gt(left: unknown, right: unknown): unknown;\n gte(left: unknown, right: unknown): unknown;\n lt(left: unknown, right: unknown): unknown;\n lte(left: unknown, right: unknown): unknown;\n and(...clauses: unknown[]): unknown;\n or(...clauses: unknown[]): unknown;\n field(fieldName: string): unknown;\n};\ntype QueryInitializer<TableName extends TableNames> = {\n withIndex(\n indexName: string,\n range?: (q: any) => unknown\n ): QueryInitializer<TableName>;\n filter(predicate: (q: any) => unknown): QueryInitializer<TableName>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n collect(): Promise<Doc<TableName>[]>;\n take(limit: number): Promise<Doc<TableName>[]>;\n first(): Promise<Doc<TableName> | null>;\n unique(): Promise<Doc<TableName> | null>;\n};\nexport type DatabaseReader = {\n get<TableName extends TableNames>(\n id: Id<TableName>\n ): Promise<Doc<TableName> | null>;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n};\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ntype Scheduler = {\n runAfter(delayMs: number, functionReference: unknown, args?: unknown): Promise<void>;\n};\ntype AuthReader = {\n getUserIdentity(): Promise<unknown>;\n};\ntype RuntimeInvoker = {\n runQuery(functionReference: unknown, args?: unknown): Promise<any>;\n runMutation(functionReference: unknown, args?: unknown): Promise<any>;\n runAction(functionReference: unknown, args?: unknown): Promise<any>;\n};\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Definition extends { handler?: (ctx: Ctx, args: any) => any },\n>(\n definition: Definition\n) => any;\n\nexport const action = actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","type GraphPrimitiveDebugEnvironment = {\n process?: {\n env?: Record<string, string | undefined>;\n };\n};\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" ||\n env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport { api as appApi } from \"./convex\";\nimport type { Id } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScope\" + \"ProjectId\";\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type TopicProjectScope = {\n topicId: Id<\"topics\">;\n projectId?: string;\n tenantId?: string;\n workspaceId?: string;\n source:\n | \"topic\"\n | \"project_mapped_topic\"\n | \"topic_inferred\"\n | \"topic_node\";\n};\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ntype TopicNodeScopeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n nodeType?: string;\n topicId?: string;\n metadata?: Record<string, unknown>;\n};\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: any,\n ref: string,\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q: any) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref },\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node as unknown as TopicDoc),\n source: \"topic_node\",\n };\n}\n\ntype MaterializedTopicNodeDoc = {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n};\n\nfunction asMappedProjectId(\n topic: TopicDoc | null | undefined,\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(topic[LEGACY_SCOPE_FIELD]);\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = (topic.metadata || {}) as Record<string, unknown>;\n const candidate =\n (metadata[LEGACY_SCOPE_FIELD] as string | undefined) ||\n (metadata.legacyProjectId as string | undefined) ||\n (metadata.projectId as string | undefined) ||\n (metadata.scopeProjectId as string | undefined);\n return candidate ? (candidate as string) : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: any,\n scopeId: string,\n): Promise<TopicDoc[]> {\n try {\n return (await ctx.db\n .query(\"topics\")\n .withIndex(\"by_graph_scope_project\", (q: any) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId),\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n },\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await ctx.db.query(\"topics\").collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: any,\n topicId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get as any, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n },\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: any,\n legacyScopeId: string,\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId as any, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n },\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined,\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: any,\n topic: TopicDoc,\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) break;\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) break;\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: any,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string },\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n // Try direct lookup, fall back to the legacy mapped-project bridge\n let topic: TopicDoc | null = null;\n try {\n topic = (await ctx.db.get(\n args.topicId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load topic by direct id\",\n {\n error,\n topicId: args.topicId,\n },\n );\n // Not a valid topics table ID\n }\n if (!topic) {\n topic = await tryResolveHostTopicById(ctx, String(args.topicId));\n }\n if (!topic) {\n // Try as legacy projectId / globalId via the mapped-project bridge.\n topic =\n pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, String(args.topicId)),\n ) ?? null;\n }\n if (!topic) {\n // RR.5: no legacy topics row — resolve the canonical topic node store\n // before throwing (silent-empty-result fix).\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.topicId),\n );\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(args.topicId)}`);\n }\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n if (mapped) {\n return {\n topicId: topic._id,\n projectId: mapped,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n return {\n topicId: topic._id,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic\",\n };\n }\n\n if (args.projectId) {\n let directTopic: TopicDoc | null = null;\n try {\n directTopic = (await ctx.db.get(\n args.projectId as Id<\"topics\">,\n )) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to load direct project topic\",\n {\n error,\n projectId: args.projectId,\n },\n );\n // Not a valid topics table ID, continue to legacy graph-scope lookup.\n }\n\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n directTopic = await tryResolveHostTopicByLegacyScope(ctx, args.projectId);\n if (directTopic) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, directTopic);\n const mapped = asMappedProjectId(directTopic);\n return {\n topicId: directTopic._id,\n projectId: mapped ?? args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"topic_inferred\",\n };\n }\n\n const topics = await findTopicsByScopeAlias(ctx, args.projectId);\n const primary = pickPrimaryTopic(topics);\n if (primary) {\n const inherited = await resolveInheritedWorkspaceScope(ctx, primary);\n return {\n topicId: primary._id,\n projectId: args.projectId,\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source: \"project_mapped_topic\",\n };\n }\n // RR.5: try the canonical topic node store before failing.\n const nodeScope = await resolveTopicNodeScopeOrNull(\n ctx,\n String(args.projectId),\n );\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? String(args.projectId),\n };\n }\n\n throw new Error(\n `Legacy project scope ${String(args.projectId)} has no mapped topic.`,\n );\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\",\n );\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","import {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport {\n resolveTopicProjectScope,\n type TopicProjectScope,\n} from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ntype ScopeLike = {\n tenantId?: unknown;\n workspaceId?: unknown;\n epistemicLayer?: unknown;\n nodeType?: unknown;\n topicId?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n};\n\nexport type RuntimePackMutationContext = {\n toolName?: string;\n packKey?: string;\n packInstallScope?: \"tenant\" | \"workspace\";\n};\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (\n scopeTenantId &&\n nodeTenantId &&\n scopeTenantId !== nodeTenantId\n ) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (\n scopeTenantId &&\n edgeTenantId &&\n scopeTenantId !== edgeTenantId\n ) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: any,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n if (node.topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId: node.topicId as any,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !args.runtimeToolName &&\n !args.runtimePackKey &&\n !args.runtimePackInstallScope\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (\n !args.runtime?.packKey ||\n args.runtime.packInstallScope !== \"tenant\"\n ) {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport { v } from \"convex/values\";\nimport {\n throwStructuredMutationError,\n type StructuredMutationErrorData,\n} from \"@lucern/access-control/structuredMutationError\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx, QueryCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nexport const insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nexport const MAX_PROJECT_BELIEF_LIMIT = 1000;\nexport const optionalBeliefScopeArgs = optionalScopeArgs;\n\n// CQ.11: the structured-refusal primitive is the single shared copy in\n// `@lucern/access-control/structuredMutationError` (the same home the shared\n// access gate throws from). Re-exported here so the graph-primitives modules\n// that imported it from this helper keep their import path unchanged.\nexport { throwStructuredMutationError };\nexport type { StructuredMutationErrorData };\n\ntype BeliefScopeArgs = {\n projectId?: string | null;\n topicId?: string | null;\n};\n\ntype EpistemicNodeOpinionDoc = Doc<\"epistemicNodes\"> & {\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n metadata?: Record<string, unknown> | null;\n};\n\ntype EpistemicIndexQuery = {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n};\n\ntype EpistemicQueryChain<T> = {\n withIndex(\n _name: string,\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n order(direction: \"asc\" | \"desc\"): EpistemicQueryChain<T>;\n filter(\n callback: (q: EpistemicIndexQuery) => EpistemicIndexQuery,\n ): EpistemicQueryChain<T>;\n first(): Promise<T | null>;\n collect(): Promise<T[]>;\n take(limit: number): Promise<T[]>;\n};\n\ntype EpistemicBeliefCtx = QueryCtx & {\n db: {\n query<T = unknown>(_table: string): EpistemicQueryChain<T>;\n get<T = unknown>(id: Id<string>): Promise<T | null>;\n };\n scheduler: {\n runAfter(\n _delayMs: number,\n _handler: unknown,\n _args: unknown,\n ): Promise<unknown>;\n };\n};\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"propagation\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\n\nexport function readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(baseRate: number, field = \"baseRate\"): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nexport function buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate,\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"prior_seed\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\ntype BeliefStatusResult =\n | { success: true }\n | { success: false; message: \"Evidence node not found\" };\n\nexport function buildBeliefStatusSuccessResult(): BeliefStatusResult {\n return { success: true };\n}\n\nexport function buildBeliefEvidenceNotFoundResult(): BeliefStatusResult {\n const result = {} as Extract<BeliefStatusResult, { success: false }>;\n result.success = false;\n result.message = \"Evidence node not found\";\n return result;\n}\n\nexport function deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>,\n): SLOpinion {\n const belief =\n readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n try {\n return readOpinionFromRecord(source);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to decode legacy belief opinion\",\n {\n error,\n },\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return mkOpinion(confidence, 1 - confidence, 0, 0.5);\n}\n\nexport function clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT,\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT),\n );\n}\n\nexport function readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readBeliefOpinionSnapshot(\n node: Doc<\"epistemicNodes\">,\n metadata: Record<string, unknown>,\n): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: (node as any).opinion_b,\n opinion_d: (node as any).opinion_d,\n opinion_u: (node as any).opinion_u,\n opinion_a: (node as any).opinion_a,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to read belief opinion snapshot\",\n {\n error,\n beliefId: node._id,\n },\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport function deriveTupleContradictionSeverity(\n node: Doc<\"epistemicNodes\">,\n): \"critical\" | \"significant\" | \"minor\" {\n const metadata = (node.metadata || {}) as Record<string, unknown>;\n const criticality =\n typeof metadata.criticality === \"string\" ? metadata.criticality : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nexport function formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n hash = (hash << 5) + hash + content.charCodeAt(i);\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined,\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nexport async function markBeliefGraphDirty(\n ctx: EpistemicBeliefCtx,\n scope: { projectId?: string | null; topicId?: string | null },\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!projectId && !topicId) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId },\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n { topicId },\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n topicId ?? projectId!,\n {\n lastActivityAt: Date.now(),\n },\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs,\n) {\n if (!args.projectId && !args.topicId) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to resolve belief scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n },\n );\n return null;\n }\n}\n\nexport async function getBeliefNodesForScope(\n ctx: EpistemicBeliefCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string },\n) {\n const baseQuery = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: any) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\"),\n );\n const nodes: EpistemicNodeOpinionDoc[] =\n typeof args?.scanLimit === \"number\"\n ? (await baseQuery.order(\"desc\").take(args.scanLimit)) as EpistemicNodeOpinionDoc[]\n : (await baseQuery.collect()) as EpistemicNodeOpinionDoc[];\n const scopedNodes = nodes.filter((node: Doc<\"epistemicNodes\">) =>\n nodeMatchesWorkspaceReasoningScope(node, scope),\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter((node: EpistemicNodeOpinionDoc) => node.status === args.status);\n}\n\nexport function createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>,\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ]),\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass,\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: Doc<\"epistemicNodes\">) {\n const meta = (node.metadata || {}) as Record<string, unknown>;\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(\n (node as EpistemicNodeOpinionDoc).tupleContradicted,\n ) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: (node as EpistemicNodeOpinionDoc).userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nexport function resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>,\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nexport async function hasCompletedWorktreeForBelief(\n ctx: EpistemicBeliefCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nexport async function getActiveConfidencePolicy(\n ctx: EpistemicBeliefCtx,\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: any) => q.eq(\"isActive\", true))\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined,\n ),\n };\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to load active confidence policy\",\n {\n error,\n },\n );\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(\n ctx as Parameters<typeof getCurrentUserId>[0],\n );\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n project,\n trustDiscount,\n type EdgeMetadata,\n type PropagationResult,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagationTypes\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: SLOpinion,\n damping: number\n): SLOpinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport const propagateNegativeInform = applyNegativeEvidence;\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n mkOpinion,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagationTypes\";\nimport { annotateRationale, applyPerHopDamping, readEdgeMetadata } from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n mkOpinion(\n metadata.conditionalA.b,\n metadata.conditionalA.d,\n metadata.conditionalA.u,\n metadata.conditionalA.a\n ),\n mkOpinion(\n metadata.conditionalNotA.b,\n metadata.conditionalNotA.d,\n metadata.conditionalNotA.u,\n metadata.conditionalNotA.a\n ),\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n\n","import type {\n EdgeMetadata,\n PropagationResult,\n SLOpinion,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport type PropagationEdgeRecord<TNodeId extends string = string> = {\n fromNodeId?: TNodeId | null;\n toNodeId?: TNodeId | null;\n edgeType: string;\n weight?: number | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type EdgePropagationSpec<TNodeId extends string = string> = {\n edgeType: PropagationEdgeType;\n direction: PropagationSpecDirection;\n transitivity: \"none\" | \"damped\" | \"full\";\n damping: number;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n description: string;\n};\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n\n","import type { EdgePropagationSpec } from \"./propagationTypes\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./dependsOn\";\nimport { derivedFromPropagationSpec } from \"./derivedFrom\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagationTypes\";\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n} from \"./propagationTypes\";\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n","import {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type EdgePropagationSpec,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport type PropagationDispatchScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type PropagationDispatchNode<TNodeId extends string = string> = {\n _id?: TNodeId;\n nodeType?: string;\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n publicationStatus?: string;\n metadata?: unknown;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n opinion_a?: number;\n};\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport type ConfidencePropagationDispatch<TNodeId extends string = string> = {\n targetNodeId: TNodeId;\n edgeType: PropagationEdgeType;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n opinion: SLOpinion;\n operator: SLOperator;\n rationale: string;\n hop: number;\n};\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): SLOpinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n });\n } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(args: {\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n queryEdges: (args: {\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n direction: PropagationTraversalDirection;\n hop: number;\n }) => Promise<ReadonlyArray<PropagationDispatchEdge<TNodeId>>>;\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n}): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, SLOpinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n const queue: Array<{\n nodeId: TNodeId;\n opinion: SLOpinion;\n hop: number;\n visitedNodeIds: Set<string>;\n }> = [\n {\n nodeId: args.sourceNodeId,\n opinion: args.sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([String(args.sourceNodeId)]),\n },\n ];\n\n const loadNode = async (nodeId: TNodeId) => {\n const cacheKey = String(nodeId);\n if (!nodeCache.has(cacheKey)) {\n nodeCache.set(cacheKey, await args.getNode(nodeId));\n }\n return nodeCache.get(cacheKey) ?? null;\n };\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n for (const spec of traversalSpecs) {\n const nextHop = state.hop + 1;\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await args.queryEdges({\n nodeId: state.nodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n if (\n args.sourceScope &&\n !edgeMatchesWorkspaceReasoningScope(edge, args.sourceScope)\n ) {\n continue;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n continue;\n }\n\n if (state.visitedNodeIds.has(String(targetNodeId))) {\n continue;\n }\n\n const targetNode = await loadNode(targetNodeId);\n if (!targetNode || targetNode.nodeType !== \"belief\") {\n continue;\n }\n\n if (\n args.sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, args.sourceScope)\n ) {\n continue;\n }\n\n const cacheKey = String(targetNodeId);\n const targetOpinion =\n opinionCache.get(cacheKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (\n !result ||\n !hasProjectedOpinionChanged(targetOpinion, result.opinion)\n ) {\n continue;\n }\n\n const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n\n opinionCache.set(cacheKey, projectedOpinion);\n\n const existingDispatch = dispatchesByTargetId.get(cacheKey);\n dispatchesByTargetId.set(cacheKey, {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: projectedOpinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n });\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push({\n nodeId: targetNodeId,\n opinion: projectedOpinion,\n hop: nextHop,\n visitedNodeIds: new Set([\n ...state.visitedNodeIds,\n String(targetNodeId),\n ]),\n });\n }\n }\n }\n }\n }\n\n return Array.from(dispatchesByTargetId.values()).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n","/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { v } from \"convex/values\";\nimport {\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n readOpinionFromRecord,\n type ConfidencePolicyConfig,\n type Opinion,\n type SLOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport {\n checkProjectAccess,\n checkScopeAccess,\n requireScopeWriteAccess,\n} from \"@lucern/access-control/access\";\nimport {\n canAudienceClassAccess,\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { listAudienceRegistryRows } from \"@lucern/access-control/audienceRegistry\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { assertSchemaEnumValue } from \"@lucern/contracts/schema-helpers/enumValidation\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n type BeliefLifecycleStatus,\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Doc, Id, MutationCtx } from \"./convex\";\nimport {\n internal,\n internalMutation,\n internalQuery,\n mutation,\n query,\n} from \"./convex\";\nimport { collectConfidencePropagationDispatches } from \"./confidencePropagationDispatch\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport {\n createInheritedContractRecord,\n type VerificationConfidenceTrigger,\n} from \"./epistemicContractHelpers\";\nimport { scheduleEmbeddingGeneration } from \"./embeddingTrigger\";\nimport { generateGlobalId } from \"./globalId\";\nimport { computeLogicalRole } from \"./logicalRoleInference\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport {\n assertTenantPackWorkspaceMutationAllowed,\n assertWorkspaceScopedEpistemicNodeScope,\n nodeMatchesWorkspaceReasoningScope,\n resolveNodeScopeForWorkspaceIsolation,\n resolveRuntimePackMutationContext,\n} from \"./workspaceIsolation\";\nimport {\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n type BeliefConfidenceTrigger,\n} from \"./epistemicBeliefs.helpers\";\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: {\n nodeId: Id<\"epistemicNodes\">;\n // SL opinion — the ONLY confidence input (EK-7)\n belief: number; // b: evidence FOR [0,1]\n disbelief: number; // d: evidence AGAINST [0,1]\n uncertainty: number; // u: lack of evidence [0,1]\n baseRate?: number; // a: prior probability [0,1], defaults to 0.5\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n authenticatedUserId: string;\n slOperator?: SLOperator; // which SL operator produced this opinion\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n },\n): Promise<{\n nodeId: Id<\"epistemicNodes\">;\n previousConfidence: number;\n newConfidence: number;\n opinion: { b: number; d: number; u: number; a: number };\n beliefConfidenceId: Id<\"beliefConfidence\">;\n}> {\n const now = Date.now();\n\n const node = await ctx.db.get(args.nodeId);\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before appending SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n }\n if (node.nodeType !== \"belief\") {\n throwStructuredMutationError({\n message: `appendSlScoring only applies to belief nodes. Received nodeType \"${node.nodeType}\". Entity nodes (company, person, investor, etc.) do not have confidence — use entityLifecycle.updateEntityAttributes for mutable entity data.`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"entity.no_confidence\",\n suggestion:\n \"Use entityLifecycle.updateEntityAttributes for entity mutations. appendSlScoring is for belief nodes only.\",\n details: { nodeId: args.nodeId, nodeType: node.nodeType },\n });\n }\n if (!node.projectId) {\n throwStructuredMutationError({\n message: \"Belief has no project scope.\",\n status: 400,\n code: \"MISSING_SCOPE\",\n invariantCode: \"belief.project_required\",\n suggestion: \"Belief must have a projectId before SL scoring can be appended.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireScopeWriteAccess(\n ctx,\n node.projectId,\n args.authenticatedUserId,\n );\n\n const existingMetadata = (node.metadata || {}) as Record<string, unknown>;\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n if (\n confidencePolicy.scoringMode === \"after_worktree\" &&\n isPreValidationBeliefStatus(currentBeliefStatus)\n ) {\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId,\n );\n if (!hasCompletedWorktree) {\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n }\n }\n\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta =\n (node as any).predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n\n // SL opinion — the only path (EK-7)\n const slB = args.belief;\n const slD = args.disbelief;\n const slU = args.uncertainty;\n const slA = args.baseRate ?? 0.5;\n const nextOpinion = { b: slB, d: slD, u: slU, a: slA };\n const derivedConfidence = confidenceFromSL(slB, slD, slU, slA);\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag((node as any).tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold,\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(currentBeliefStatus, {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n });\n\n let tupleContradictionId: Id<\"contradictions\"> | undefined;\n if (tupleTransition.crossedIntoTupleContradiction) {\n tupleContradictionId = (await ctx.runMutation(\n \"contradictions:create\" as any,\n {\n projectId: node.projectId,\n topicId: node.topicId as any,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n },\n )) as Id<\"contradictions\">;\n }\n\n await ctx.db.patch(args.nodeId, {\n confidence: derivedConfidence,\n beliefStatus: newBeliefStatus,\n tupleContradicted: tupleTransition.tupleContradicted,\n updatedAt: now,\n // Store SL opinion fields at node level for fast access\n opinion_b: slB,\n opinion_d: slD,\n opinion_u: slU,\n opinion_a: slA,\n metadata: {\n ...existingMetadata,\n beliefStatus: newBeliefStatus,\n slBelief: slB,\n slDisbelief: slD,\n slUncertainty: slU,\n slBaseRate: slA,\n tupleContradicted: tupleTransition.tupleContradicted,\n },\n } as any);\n\n if (isFirstScoring) {\n const nodeTopicId = node.topicId;\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q: any) =>\n q.eq(\"topicId\", nodeTopicId || node.projectId),\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (theme.globalId && node.globalId) {\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n }\n }\n\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n const beliefConfidenceId = (await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: slB,\n disbelief: slD,\n uncertainty: slU,\n baseRate: slA,\n trigger: args.trigger,\n rationale: storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n } as any)) as Id<\"beliefConfidence\">;\n\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: previousConfidence,\n tupleContradicted: previousTupleContradicted,\n },\n newState: {\n opinion: nextOpinion,\n confidence: derivedConfidence,\n trigger: args.trigger,\n rationale: storedRationale,\n tupleContradicted: tupleTransition.tupleContradicted,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n\n if (\n tupleTransition.crossedIntoTupleContradiction ||\n tupleTransition.crossedOutOfTupleContradiction\n ) {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: previousTupleContradicted },\n newState: {\n tupleContradicted: tupleTransition.tupleContradicted,\n action: tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: nextOpinion,\n tupleContradictionPolicy: tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleTransition.crossedIntoTupleContradiction\n ? tupleContradictionDescription\n : `Tuple-space contradiction cleared: b=${nextOpinion.b.toFixed(2)}, d=${nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`,\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n }\n\n if (Math.abs(derivedConfidence - previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n },\n );\n }\n\n // WT-4: Re-evaluate publication rules after confidence changes.\n // Publication is visibility-based: rules auto-determine which workspace\n // nodes are exposed at tenant scope based on confidence thresholds, etc.\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n (internal as any).publication.evaluateNodePublication,\n { nodeId: args.nodeId },\n );\n }\n\n return {\n nodeId: args.nodeId,\n previousConfidence,\n newConfidence: derivedConfidence,\n opinion: { b: slB, d: slD, u: slU, a: slA },\n beliefConfidenceId,\n };\n}\n\n/**\n * Returns the pressure direction label for use in the propagation rationale\n * string. The ledger trigger is always \"propagation\" (stage-1 containment,\n * AC.1 adjudication P1). The direction is carried in the rationale only.\n */\nfunction propagationPressureLabel(\n edgeType: string,\n weight: number,\n): \"supportive\" | \"contradictory\" {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradictory\";\n }\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradictory\";\n }\n return \"supportive\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const sourceOpinion = mkOpinion(\n args.opinion_b,\n args.opinion_d,\n args.opinion_u,\n args.opinion_a,\n );\n\n const sourceNode = await ctx.db.get(args.nodeId);\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode,\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) => {\n return await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: any) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType),\n )\n .collect();\n },\n getNode: async (nodeId) => await ctx.db.get(nodeId),\n });\n\n for (const dispatch of dispatches) {\n const pressureLabel = propagationPressureLabel(dispatch.edgeType, dispatch.weight);\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: \"propagation\",\n rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n","/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildEvidentialRationale,\n buildComparisonRationale,\n compareMetricValue,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n parseMarketIndexComparatorConfig,\n parseEvidentialEvaluatorConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n getEvaluatorInputRecord,\n} from \"./epistemicContractHelpers\";\nimport {\n type ContractDoc,\n type ContractReadCtx,\n type ContradictionStatusCounts,\n type EvidenceEdgeDoc,\n type EvidenceFreshness,\n type EvidenceNodeDoc,\n type EvidentialAction,\n type EvidentialEvaluatorConfig,\n type EvidentialMetric,\n type EvidentialMetricSnapshot,\n type EpistemicEvaluator,\n type EpistemicEvaluatorContext,\n type EpistemicEvaluatorResult,\n type MarketIndexComparatorConfig,\n type MetricCheckerEvaluatorConfig,\n type ReferenceCheckCounterConfig,\n type TemporalDeadlineEvaluatorConfig,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\n\nconst DEPENDENT_EDGE_TYPES = new Set([\n \"depends_on\",\n]);\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", beliefNodeId).eq(\"edgeType\", \"informs\")\n )\n .collect() as Promise<EvidenceEdgeDoc[]>);\n\n if (edges.length === 0) {\n return [];\n }\n\n const nodes = await Promise.all(edges.map((edge) => ctx.db.get(edge.fromNodeId)));\n return edges.flatMap((edge, index) => {\n const node = nodes[index] as EvidenceNodeDoc | null;\n if (!node || node.nodeType !== \"evidence\" || node.status === \"archived\") {\n return [];\n }\n return [{ edge, node }];\n });\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nexport async function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (await getEvidenceLinks(args.ctx, args.beliefNodeId))\n .filter(({ node }) =>\n getEvidenceTags(node).some((tag) =>\n (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nexport async function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictions = await ((ctx.db as any)\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q: any) => q.eq(\"beliefId\", beliefNodeId))\n .collect() as Promise<\n Array<{ resolutionStatus?: string; status?: string }>\n >);\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nexport async function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nexport async function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await (ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", beliefNodeId))\n .collect() as Promise<\n Array<{ fromNodeId: Id<\"epistemicNodes\">; edgeType: string }>\n >);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n DEPENDENT_EDGE_TYPES.has(edge.edgeType)\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const dependentBeliefs = await Promise.all(\n dependencyEdges.map((edge) => ctx.db.get(edge.fromNodeId))\n );\n const uniqueBeliefIds = new Set<string>();\n\n for (const node of dependentBeliefs) {\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(args.ctx, args.beliefNodeId);\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(args.contract.condition.evaluatorConfig);\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result =\n args.contract.direction === \"falsifies\"\n ? comparisonSatisfied\n ? \"disconfirmed\"\n : \"confirmed\"\n : comparisonSatisfied\n ? \"confirmed\"\n : \"disconfirmed\";\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport async function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMetricCheckerConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n}\n\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nexport async function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n\n const config = parseTemporalDeadlineConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true || config.completed === true || completedAt !== undefined;\n\n if (completed) {\n if (completedAt !== undefined && completedAt > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - args.contract.deadline,\n },\n };\n }\n\n const result =\n args.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${args.contract.deadline}.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n }\n\n if (args.now > args.contract.deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${args.contract.deadline}; temporal contract expired.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n overdueByMs: args.now - args.contract.deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${args.contract.deadline}; awaiting outcome.`,\n data: {\n label,\n deadline: args.contract.deadline,\n completed: false,\n timeRemainingMs: args.contract.deadline - args.now,\n },\n };\n}\n\nexport async function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseMarketIndexComparatorConfig(args.contract.condition.evaluatorConfig);\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\"benchmarkValue\", \"comparisonValue\", \"rightValue\"]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale: \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(args.contract.direction, comparisonSatisfied);\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n}\n\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\"evidential\", \"built_in_evidential\", \"builtin_evidential\"]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\nimport { debugGraphPrimitiveFallback } from \"../debug\";\n\nexport type ToolResultEnvelope = {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n};\n\ntype AnyRecord = Record<string, unknown>;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean,\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown,\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n },\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[],\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedLintDiagnostic = {\n filePath: string | null;\n message: string;\n severity: string;\n};\n\ntype LintCheckerConfig = {\n filePatterns: string[];\n linter: \"biome\";\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \\\"biome\\\" }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter(\n (diagnostic): diagnostic is ParsedLintDiagnostic => Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype SentryCheckerConfig = {\n module: string;\n windowDays: number;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record = asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedSuite = {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n};\n\ntype TestRunnerConfig = {\n runner: \"vitest\";\n testPattern: string;\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"test_runner requires evaluatorConfig with { testPattern, runner: \\\"vitest\\\" }.\"\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ntype ParsedDiagnostic = {\n code?: string;\n filePath: string | null;\n message: string;\n};\n\ntype TscCheckerConfig = {\n filePatterns: string[];\n};\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ?? asRecord(envelope.data) ?? asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(args.contract, args.resultData);\n\n if (matchedDiagnostics.length === 0 && exitCode !== 0 && exitCode !== null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nimport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nimport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./testRunnerEvaluator\";\nimport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluator,\n tscCheckerEvaluator,\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n ];\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\n\nexport { lintCheckerEvaluator } from \"./lintCheckerEvaluator\";\nexport { sentryCheckerEvaluator } from \"./sentryCheckerEvaluator\";\nexport { testRunnerEvaluator } from \"./testRunnerEvaluator\";\nexport { tscCheckerEvaluator } from \"./tscCheckerEvaluator\";\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n","/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport {\n type BeliefNodeDoc,\n type ContractDoc,\n type ContractEvaluationExecution,\n type EpistemicEvaluator,\n type EpistemicEvaluatorResult,\n type TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EPISTEMIC_EVALUATORS,\n} from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES = METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE = METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: Array<[string, EpistemicEvaluator[\"evaluate\"]]> = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nexport async function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore =\n typeof args.currentConfidence === \"number\"\n ? args.currentConfidence\n : typeof args.belief.confidence === \"number\"\n ? args.belief.confidence\n : 0.5;\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await (args.ctx.db as any).insert(\"contractEvaluations\", {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n } as any);\n\n const nextStatus = deriveContractStatus(evaluation.result, args.contract.status);\n await args.ctx.db.patch(\n args.contract._id as any,\n {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n } as any\n );\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nexport async function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: normalizeTrigger(args.trigger),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\" as any,\n {\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: normalizeTrigger(args.trigger),\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n return await ((args.ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect() as Promise<ContractDoc[]>);\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n","/** Convex queries and mutations for epistemic contract lifecycle management. */\n\nimport { v } from \"convex/values\";\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport {\n computeContradictionCounts,\n computeDependentBeliefCount,\n computeEvidenceCountMetric,\n computeEvidenceFreshness,\n} from \"./epistemicContracts.metrics\";\nimport {\n createInheritedContractRecord,\n} from \"./epistemicContractHelpers\";\nimport { type BeliefNodeDoc, type ContractDoc, type ContractEvaluationDoc } from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport {\n evaluateContractsForTriggerBatch,\n executeContractEvaluation,\n loadContractsForBelief,\n} from \"./epistemicContracts.evaluators\";\nimport { generateGlobalId } from \"./globalId\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\ntype ContractStatusRow = Omit<ContractDoc, \"latestEvaluation\"> & {\n latestEvaluation: ContractEvaluationDoc | null;\n};\n\nasync function requireAuth(ctx: MutationCtx | QueryCtx): Promise<string> {\n const userId = await getCurrentUserId(ctx as any);\n if (!userId) {\n throw new Error(\"Authentication required.\");\n }\n return userId;\n}\n\n// biome-ignore lint/suspicious/useAwait: delegates to requireAuth which is async in some ctx paths\nasync function resolveAuthenticatedUserId(\n ctx: MutationCtx | QueryCtx,\n explicitUserId?: string\n): Promise<string> {\n if (explicitUserId) {\n return explicitUserId;\n }\n return requireAuth(ctx);\n}\n\nasync function requireBeliefProjectAccess(\n ctx: MutationCtx | QueryCtx,\n belief: BeliefNodeDoc,\n userId: string\n): Promise<void> {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n const hasAccess = await checkProjectAccess(\n ctx as any,\n belief.projectId,\n userId\n );\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n}\n\nasync function requireTopicReadAccess(\n ctx: QueryCtx,\n beliefs: BeliefNodeDoc[],\n userId: string\n): Promise<void> {\n const projectIds = new Set<string>();\n\n for (const belief of beliefs) {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n projectIds.add(belief.projectId);\n }\n\n for (const projectId of projectIds) {\n const hasAccess = await checkProjectAccess(ctx as any, projectId, userId);\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n }\n}\n\nasync function getContractByContractId(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractDoc | null> {\n return await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_contractId\", (q: any) => q.eq(\"contractId\", contractId))\n .first() as Promise<ContractDoc | null>);\n}\n\nasync function getLatestEvaluation(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractEvaluationDoc | null> {\n const evaluations = await ((ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_contract_time\", (q: any) => q.eq(\"contractId\", contractId))\n .order(\"desc\")\n .take(1) as Promise<ContractEvaluationDoc[]>);\n\n return evaluations[0] ?? null;\n}\n\nexport const evaluateEvidenceCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceCountMetric(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateContradictionStatus = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeContradictionCounts(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateEdgeFreshness = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceFreshness(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateDependentBeliefCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await requireAuth(ctx);\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeDependentBeliefCount(ctx, args.beliefNodeId);\n },\n});\n\nexport const createEpistemicContract = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n title: v.string(),\n description: v.optional(v.string()),\n conditionType: v.union(\n v.literal(\"assertion\"),\n v.literal(\"temporal\"),\n v.literal(\"evidential\"),\n v.literal(\"threshold\"),\n v.literal(\"composite\")\n ),\n direction: v.union(v.literal(\"confirms\"), v.literal(\"falsifies\")),\n condition: v.object({\n expression: v.string(),\n evaluator: v.string(),\n evaluatorConfig: v.optional(v.any()),\n }),\n deadline: v.optional(v.number()),\n compositeOf: v.optional(v.array(v.string())),\n compositeOperator: v.optional(\n v.union(v.literal(\"all\"), v.literal(\"any\"), v.literal(\"majority\"))\n ),\n modulation: v.object({\n onConfirmed: v.object({\n delta: v.number(),\n ceiling: v.optional(v.number()),\n }),\n onDisconfirmed: v.object({\n delta: v.number(),\n floor: v.optional(v.number()),\n }),\n onExpired: v.optional(\n v.object({\n delta: v.number(),\n })\n ),\n onPartial: v.optional(\n v.object({\n threshold: v.number(),\n delta: v.number(),\n })\n ),\n }),\n evaluationSchedule: v.union(\n v.literal(\"on_demand\"),\n v.literal(\"on_evidence\"),\n v.literal(\"periodic\"),\n v.literal(\"event_driven\")\n ),\n periodicIntervalMs: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const now = Date.now();\n const contractId = generateGlobalId();\n\n const contractDoc = {\n beliefNodeId: args.beliefNodeId,\n contractId,\n title: args.title,\n description: args.description,\n conditionType: args.conditionType,\n direction: args.direction,\n condition: args.condition,\n deadline: args.deadline,\n compositeOf: args.compositeOf,\n compositeOperator: args.compositeOperator,\n modulation: args.modulation,\n evaluationSchedule: args.evaluationSchedule,\n periodicIntervalMs: args.periodicIntervalMs,\n status: \"active\" as const,\n lineageSource: \"declared\" as const,\n evaluationCount: 0,\n topicId: belief.topicId,\n createdAt: now,\n createdBy: userId,\n updatedAt: now,\n };\n\n const insertedId = await ctx.db.insert(\"epistemicContracts\", contractDoc);\n\n return {\n contractId,\n id: insertedId,\n status: contractDoc.status,\n };\n },\n});\n\nexport const evaluateContract = mutation({\n args: {\n contractId: v.string(),\n resultData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const contract = await getContractByContractId(ctx, args.contractId);\n if (!contract) {\n throw new Error(`Contract not found: ${args.contractId}`);\n }\n if (contract.status === \"archived\") {\n throw new Error(\"Archived contracts cannot be evaluated.\");\n }\n\n const belief = (await ctx.db.get(contract.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found for contract.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n resultData: args.resultData,\n trigger: args.trigger ?? \"manual\",\n inputData: args.inputData,\n authenticatedUserId: userId,\n });\n\n return {\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n };\n },\n});\n\nexport const evaluateEngineeringContracts = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n testOutput: v.optional(v.any()),\n tscOutput: v.optional(v.any()),\n lintOutput: v.optional(v.any()),\n sentryData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const trigger = args.trigger ?? \"event_driven\";\n const allowedSchedules = resolveSchedulesForTrigger(\n trigger === \"manual\"\n ? \"manual\"\n : trigger === \"evidence_added\"\n ? \"evidence_added\"\n : trigger\n );\n const payloadByEvaluator = new Map<string, unknown>([\n [\"test_runner\", args.testOutput],\n [\"tsc_checker\", args.tscOutput],\n [\"lint_checker\", args.lintOutput],\n [\"sentry_checker\", args.sentryData],\n ]);\n const contracts = (await loadContractsForBelief({\n ctx,\n beliefNodeId: args.beliefNodeId,\n })).filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (!allowedSchedules.has(contract.evaluationSchedule)) {\n return false;\n }\n return ENGINEERING_EVALUATOR_NAMES.has(contract.condition.evaluator);\n });\n\n let runningConfidence =\n typeof belief.confidence === \"number\" ? belief.confidence : 0.5;\n const evaluations: Array<Record<string, unknown>> = [];\n\n for (const contract of contracts) {\n const resultData = payloadByEvaluator.get(contract.condition.evaluator);\n if (resultData === undefined) {\n continue;\n }\n\n const engineeringEvaluator = getEngineeringEpistemicEvaluator(\n contract.condition.evaluator\n );\n if (!engineeringEvaluator?.matches({ contract, resultData })) {\n continue;\n }\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n trigger,\n authenticatedUserId: userId,\n currentConfidence: runningConfidence,\n resultData,\n });\n runningConfidence = evaluation.currentConfidence;\n belief.confidence = runningConfidence;\n\n evaluations.push({\n contractId: contract.contractId,\n evaluator: contract.condition.evaluator,\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n });\n }\n\n return {\n beliefNodeId: args.beliefNodeId,\n trigger,\n availableContracts: contracts.length,\n evaluatedContracts: evaluations.length,\n evaluations,\n };\n },\n});\n\nexport const evaluateContractsForTrigger = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n inputData: v.optional(v.any()),\n maxBatchSize: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: userId,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const processContractEvaluationOverflow = internalMutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n contractIds: v.array(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.string(),\n maxBatchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n contractIds: args.contractIds,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const getContractStatus = query({\n args: {\n beliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n contractId: v.optional(v.string()),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"satisfied\"),\n v.literal(\"violated\"),\n v.literal(\"expired\"),\n v.literal(\"suspended\"),\n v.literal(\"archived\")\n )\n ),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n\n let contracts: ContractDoc[] = [];\n if (args.contractId) {\n const contract = await getContractByContractId(ctx, args.contractId);\n contracts = contract ? [contract] : [];\n } else if (args.beliefNodeId) {\n const belief = (await ctx.db.get(args.beliefNodeId)) as BeliefNodeDoc | null;\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n await requireBeliefProjectAccess(ctx, belief, userId);\n contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q: any) =>\n q.eq(\"beliefNodeId\", args.beliefNodeId)\n )\n .collect() as Promise<ContractDoc[]>);\n }\n\n if (contracts.length > 0) {\n const contractBeliefDocs = await Promise.all(\n contracts.map((contract) => ctx.db.get(contract.beliefNodeId))\n );\n const contractBeliefs: BeliefNodeDoc[] = [];\n\n for (const belief of contractBeliefDocs) {\n if (!belief || belief.nodeType !== \"belief\") {\n throw new Error(\"Belief not found.\");\n }\n contractBeliefs.push(belief as BeliefNodeDoc);\n }\n\n await requireTopicReadAccess(ctx, contractBeliefs, userId);\n }\n\n if (args.status) {\n contracts = contracts.filter((contract) => contract.status === args.status);\n }\n\n const rows: ContractStatusRow[] = await Promise.all(\n contracts.map(async (contract) => ({\n ...contract,\n latestEvaluation: await getLatestEvaluation(ctx, contract.contractId),\n }))\n );\n\n return rows.sort((a, b) => b.createdAt - a.createdAt);\n },\n});\n\nexport const getContractCoverage = query({\n args: {\n topicId: v.string(),\n recentEvaluationLimit: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args) => {\n const contracts = await ((ctx.db as any)\n .query(\"epistemicContracts\")\n .withIndex(\"by_topic\", (q: any) => q.eq(\"topicId\", args.topicId))\n .collect() as Promise<ContractDoc[]>);\n\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const beliefs = await (ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect() as Promise<BeliefNodeDoc[]>);\n await requireTopicReadAccess(ctx, beliefs, userId);\n\n const recentEvaluationLimit = Math.max(\n 0,\n Math.min(args.recentEvaluationLimit ?? 5, 25)\n );\n const recentEvaluations =\n recentEvaluationLimit === 0\n ? []\n : (((await (ctx.db as any)\n .query(\"contractEvaluations\")\n .withIndex(\"by_topic_time\", (q: any) => q.eq(\"topicId\", args.topicId))\n .order(\"desc\")\n .take(recentEvaluationLimit)) as Promise<ContractEvaluationDoc[]>) ??\n []);\n\n const contractBeliefIds = new Set(\n contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => String(contract.beliefNodeId))\n );\n\n return {\n active: contracts.filter((contract) => contract.status === \"active\").length,\n violated: contracts.filter((contract) => contract.status === \"violated\").length,\n expired: contracts.filter((contract) => contract.status === \"expired\").length,\n unboundHighConfidence: beliefs\n .filter(\n (belief) =>\n typeof belief.confidence === \"number\" &&\n belief.confidence >= 0.8 &&\n !contractBeliefIds.has(String(belief._id))\n )\n .map((belief) => ({\n nodeId: belief._id,\n canonicalText: belief.canonicalText,\n confidence: belief.confidence,\n })),\n recentEvaluations,\n };\n },\n});\n\nexport function inheritContractsForFork<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contracts: Array<{\n status: string;\n beliefNodeId: any;\n contractId: string;\n title: string;\n description?: string;\n conditionType: any;\n direction: any;\n condition: any;\n deadline?: number;\n compositeOf?: string[];\n compositeOperator?: any;\n modulation: any;\n evaluationSchedule: any;\n periodicIntervalMs?: number;\n createdAt: number;\n createdBy: string;\n updatedAt: number;\n }>,\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n) {\n return contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => createInheritedContractRecord(contract as any, args));\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/convex.ts","../src/debug.ts","../src/beliefLifecycle.ts","../src/topicScope.ts","../src/workspaceIsolation.ts","../src/epistemicBeliefs.helpers.ts","../src/edges/contains.ts","../src/edges/utils.ts","../src/edges/contradicts.ts","../src/edges/depends-on.ts","../src/edges/derived-from.ts","../src/edges/elaborates.ts","../src/edges/informs.ts","../src/edges/propagation-types.ts","../src/edges/refutes.ts","../src/edges/supports.ts","../src/edges/tests.ts","../src/edges/index.ts","../src/confidencePropagationDispatch.ts","../src/epistemicBeliefs.confidence.ts","../src/epistemicContracts.metrics.ts","../src/evaluators/shared.ts","../src/evaluators/lint-checker-evaluator.ts","../src/evaluators/sentry-checker-evaluator.ts","../src/evaluators/test-runner-evaluator.ts","../src/evaluators/tsc-checker-evaluator.ts","../src/evaluators/index.ts","../src/epistemicContracts.evaluators.ts","../src/epistemicContracts.handlers.ts","../src/epistemicContracts.ts"],"names":["query","normalizeScopeValue","v","mkOpinion","project","canContinueTransitively","canTraverseHop","isPropagationTraversalDirection","readOpinionFromRecord","throwStructuredMutationError","confidenceFromSL","isRecord","readOptionalNumber","readOptionalString","readConvexId","parseConfig","parseDiagnostics","getMatchedDiagnostics","BUILT_IN_EVIDENTIAL_ALIASES","BUILT_IN_METRIC_CHECKER","BUILT_IN_REFERENCE_CHECK_COUNTER","BUILT_IN_TEMPORAL_DEADLINE","BUILT_IN_MARKET_INDEX_COMPARATOR","resolveSchedulesForTrigger","getCurrentUserId","permissiveReturn","clearEpistemicEvaluators","getRegisteredEpistemicEvaluators","registerEpistemicEvaluator","createEpistemicContract","evaluateContract","evaluateContractsForTrigger","evaluateContradictionStatus","evaluateDependentBeliefCount","evaluateEdgeFreshness","evaluateEngineeringContracts","evaluateEvidenceCount","getContractCoverage","getContractStatus","inheritContractsForFork","processContractEvaluationOverflow"],"mappings":"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","file":"epistemicContracts.js","sourcesContent":["import type { Doc as AccessControlDoc } from \"@lucern/access-control/convex\";\nimport {\n type UnsafeConvexAnyApi,\n unsafeConvexAnyApi,\n} from \"@lucern/contracts/convex/unsafeAnyApi\";\nimport {\n actionGeneric,\n componentsGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\n\n// TODO(FR.11-structural): `api`/`internal`/`components` are `anyApi as any`\n// because this module source tree is bundled into the kernel host at deploy time\n// and has NO top-level Convex `_generated/` directory to import a typed surface\n// from. Every `api.*` / `internal.*` / string-literal cross-component ref in this\n// module (topicScope.ts, topicProjectOverlay.ts, questionEvidenceLinks.ts,\n// beliefEvidenceLinks*.ts, epistemicQuestions.helpers.ts) inherits `any` from\n// here. The fix is structural — generate a per-module typed surface or a shared\n// typed function-reference manifest (template: the typed `components.controlPlane`\n// in modules/control-plane/src/component/convex.ts and the\n// `KERNEL_API_REF_MANIFEST` pattern in packages/server-core/src/kernelApi.ts) —\n// owned by the FR.11 closing/synthesis pass, not a mechanical swap.\nconst unsafeApi = unsafeConvexAnyApi(\n \"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface\"\n);\nexport const api = unsafeApi;\nexport const components =\n componentsGeneric() as unknown as UntypedFunctionReferenceSurface;\nexport const internal = unsafeApi;\n\ntype UntypedFunctionReferenceSurface = UnsafeConvexAnyApi;\ntype BoundaryValue = UntypedFunctionReferenceSurface[string];\n\nexport type TableNames = string;\nexport type Id<TableName extends TableNames = string> = GenericId<TableName>;\nexport type Doc<TableName extends TableNames = string> =\n AccessControlDoc<TableName>;\nexport type DataModel = Record<TableNames, unknown>;\ninterface IndexRangeBuilder {\n eq(fieldName: string, value: unknown): IndexRangeBuilder;\n field(fieldName: string): string;\n gt(fieldName: string, value: unknown): IndexRangeBuilder;\n gte(fieldName: string, value: unknown): IndexRangeBuilder;\n lt(fieldName: string, value: unknown): IndexRangeBuilder;\n lte(fieldName: string, value: unknown): IndexRangeBuilder;\n}\ninterface FilterBuilder {\n and(...clauses: unknown[]): FilterBuilder;\n eq(left: unknown, right: unknown): FilterBuilder;\n field(fieldName: string): string;\n gt(left: unknown, right: unknown): FilterBuilder;\n gte(left: unknown, right: unknown): FilterBuilder;\n lt(left: unknown, right: unknown): FilterBuilder;\n lte(left: unknown, right: unknown): FilterBuilder;\n neq(left: unknown, right: unknown): FilterBuilder;\n or(...clauses: unknown[]): FilterBuilder;\n [operator: string]: unknown;\n}\ninterface QueryInitializer<TableName extends TableNames> {\n collect(): Promise<Doc<TableName>[]>;\n filter(predicate: (q: FilterBuilder) => unknown): QueryInitializer<TableName>;\n first(): Promise<Doc<TableName> | null>;\n order(direction: \"asc\" | \"desc\"): QueryInitializer<TableName>;\n take(limit: number): Promise<Doc<TableName>[]>;\n unique(): Promise<Doc<TableName> | null>;\n withIndex(\n indexName: string,\n range?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n withSearchIndex(\n indexName: string,\n search?: (q: IndexRangeBuilder) => unknown\n ): QueryInitializer<TableName>;\n}\nexport interface DatabaseReader {\n get<TableName extends TableNames>(\n id: unknown\n ): Promise<Doc<TableName> | null>;\n normalizeId?<TableName extends TableNames>(\n tableName: TableName,\n id: string\n ): Id<TableName> | null;\n query<TableName extends TableNames>(\n tableName: TableName\n ): QueryInitializer<TableName>;\n}\nexport type DatabaseWriter = DatabaseReader & {\n insert<TableName extends TableNames>(\n tableName: TableName,\n value: Record<string, unknown>\n ): Promise<Id<TableName>>;\n patch<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n replace<TableName extends TableNames>(\n id: Id<TableName>,\n value: Record<string, unknown>\n ): Promise<void>;\n delete<TableName extends TableNames>(id: Id<TableName>): Promise<void>;\n};\ninterface Scheduler {\n runAfter(\n delayMs: number,\n functionReference: unknown,\n args?: unknown\n ): Promise<void>;\n}\ninterface AuthReader {\n getUserIdentity(): Promise<{\n readonly subject: string;\n readonly [claimName: string]: unknown;\n } | null>;\n}\ninterface RuntimeInvoker {\n runAction<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runMutation<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n runQuery<Result = unknown>(\n functionReference: unknown,\n args?: unknown\n ): Promise<Result>;\n}\nexport type QueryCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseReader;\n scheduler: Scheduler;\n};\nexport type MutationCtx = RuntimeInvoker & {\n auth: AuthReader;\n db: DatabaseWriter;\n scheduler: Scheduler;\n};\nexport type ActionCtx = RuntimeInvoker & {\n auth: AuthReader;\n scheduler: Scheduler;\n};\n\ntype ConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\ntype OptionalHandlerConvexFunctionBuilder<Ctx> = <\n Args = BoundaryValue,\n Result = BoundaryValue,\n>(definition: {\n args?: unknown;\n handler?: (ctx: Ctx, args: Args) => Result;\n returns?: unknown;\n}) => unknown;\n\nexport const action =\n actionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const httpAction =\n httpActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalAction =\n internalActionGeneric as unknown as ConvexFunctionBuilder<ActionCtx>;\nexport const internalMutation =\n internalMutationGeneric as unknown as OptionalHandlerConvexFunctionBuilder<MutationCtx>;\nexport const internalQuery =\n internalQueryGeneric as unknown as OptionalHandlerConvexFunctionBuilder<QueryCtx>;\nexport const mutation =\n mutationGeneric as unknown as ConvexFunctionBuilder<MutationCtx>;\nexport const query = queryGeneric as unknown as ConvexFunctionBuilder<QueryCtx>;\n","interface GraphPrimitiveDebugEnvironment {\n process?: {\n env?: Record<string, string | undefined>;\n };\n}\n\nfunction isGraphPrimitiveDebugEnabled(): boolean {\n const env = (globalThis as GraphPrimitiveDebugEnvironment).process?.env;\n return (\n env?.LUCERN_COMPAT_FALLBACK_DEBUG === \"1\" || env?.LUCERN_GRAPH_DEBUG === \"1\"\n );\n}\n\nexport function formatGraphPrimitiveError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}`;\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error === null) {\n return \"null\";\n }\n if (error === undefined) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(error);\n } catch {\n return Object.prototype.toString.call(error);\n }\n}\n\nexport function debugGraphPrimitiveFallback(\n message: string,\n context?: Record<string, unknown>\n): void {\n if (!isGraphPrimitiveDebugEnabled()) {\n return;\n }\n console.debug(message, context ?? {});\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Belief lifecycle helpers shared across Convex modules.\n *\n * Canonical lifecycle:\n * assumption -> hypothesis -> active -> resolved_true/resolved_false\n * \\-> superseded\n */\n\nexport type BeliefLifecycleStatus =\n | \"assumption\"\n | \"hypothesis\"\n | \"active\"\n | \"superseded\"\n | \"resolved_true\"\n | \"resolved_false\";\n\ntype PredictionOutcome =\n | \"pending\"\n | \"confirmed\"\n | \"disconfirmed\"\n | \"partial\"\n | \"expired\";\n\nconst BELIEF_STATUS_VALUES: readonly BeliefLifecycleStatus[] = [\n \"assumption\",\n \"hypothesis\",\n \"active\",\n \"superseded\",\n \"resolved_true\",\n \"resolved_false\",\n];\n\nconst RESOLVED_PREDICTION_OUTCOMES: readonly PredictionOutcome[] = [\n \"confirmed\",\n \"disconfirmed\",\n \"partial\",\n \"expired\",\n];\n\nexport function isBeliefLifecycleStatus(\n value: unknown\n): value is BeliefLifecycleStatus {\n return (\n typeof value === \"string\" &&\n BELIEF_STATUS_VALUES.includes(value as BeliefLifecycleStatus)\n );\n}\n\nfunction normalizeLegacyBeliefStatus(\n value: unknown\n): BeliefLifecycleStatus | null {\n if (isBeliefLifecycleStatus(value)) {\n return value;\n }\n if (value === \"belief\" || value === \"established\" || value === \"emerging\") {\n return \"active\";\n }\n if (value === \"fact\" || value === \"confirmed\") {\n return \"resolved_true\";\n }\n if (value === \"disconfirmed\" || value === \"expired\") {\n return \"resolved_false\";\n }\n if (value === \"deprecated\") {\n return \"superseded\";\n }\n return null;\n}\n\nfunction normalizeBeliefConfidence(confidence: unknown): number | null {\n if (typeof confidence !== \"number\" || !Number.isFinite(confidence)) {\n return null;\n }\n if (confidence >= 0 && confidence <= 1) {\n return confidence;\n }\n // Backward compatibility with historical percentage-scale confidence (0-100).\n if (confidence > 1 && confidence <= 100) {\n return confidence / 100;\n }\n return null;\n}\n\nexport function isResolvedByConfidence(confidence: unknown): boolean {\n const normalized = normalizeBeliefConfidence(confidence);\n if (normalized === null) {\n return false;\n }\n return normalized <= 0 || normalized >= 1;\n}\n\nexport function hasResolvedPredictionOutcome(predictionMeta: unknown): boolean {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return false;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n return (\n typeof outcome === \"string\" &&\n RESOLVED_PREDICTION_OUTCOMES.includes(outcome as PredictionOutcome)\n );\n}\n\nfunction getPredictionMetaFromMetadata(\n metadata: Record<string, unknown> | undefined\n): unknown {\n return metadata?.predictionMeta;\n}\n\nexport function shouldTreatBeliefAsFact(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): boolean {\n if (isResolvedByConfidence(opts.confidence)) {\n return true;\n }\n if (hasResolvedPredictionOutcome(opts.predictionMeta)) {\n return true;\n }\n if (\n hasResolvedPredictionOutcome(getPredictionMetaFromMetadata(opts.metadata))\n ) {\n return true;\n }\n return false;\n}\n\nfunction resolvedPredictionStatus(\n predictionMeta: unknown\n): BeliefLifecycleStatus | null {\n if (!predictionMeta || typeof predictionMeta !== \"object\") {\n return null;\n }\n const outcome = (predictionMeta as { outcome?: unknown }).outcome;\n if (outcome === \"confirmed\") {\n return \"resolved_true\";\n }\n if (outcome === \"disconfirmed\" || outcome === \"expired\") {\n return \"resolved_false\";\n }\n return null;\n}\n\nfunction shouldTreatBeliefAsResolved(opts: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus | null {\n if (isResolvedByConfidence(opts.confidence)) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n return normalized === 0 ? \"resolved_false\" : \"resolved_true\";\n }\n const directPredictionStatus = resolvedPredictionStatus(opts.predictionMeta);\n if (directPredictionStatus) {\n return directPredictionStatus;\n }\n const metadataPredictionStatus = resolvedPredictionStatus(\n getPredictionMetaFromMetadata(opts.metadata)\n );\n if (metadataPredictionStatus) {\n return metadataPredictionStatus;\n }\n return null;\n}\n\nexport function resolveBeliefLifecycleStatus(opts: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n}): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved(opts);\n if (resolvedStatus) {\n return resolvedStatus;\n }\n\n const direct = opts.beliefStatus;\n const normalizedDirect = normalizeLegacyBeliefStatus(direct);\n if (normalizedDirect) {\n // If the belief has been scored (has numeric credence) but stored status\n // is still pre-validation, promote to active. Evidence, not user intent,\n // makes a hypothesis active.\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (normalized !== null && isPreValidationBeliefStatus(normalizedDirect)) {\n return \"active\";\n }\n return normalizedDirect;\n }\n\n const metaStatus = opts.metadata?.beliefStatus;\n const normalizedMetaStatus = normalizeLegacyBeliefStatus(metaStatus);\n if (normalizedMetaStatus) {\n const normalized = normalizeBeliefConfidence(opts.confidence);\n if (\n normalized !== null &&\n isPreValidationBeliefStatus(normalizedMetaStatus)\n ) {\n return \"active\";\n }\n return normalizedMetaStatus;\n }\n\n return \"assumption\";\n}\n\nexport function isPreValidationBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"assumption\" || status === \"hypothesis\";\n}\n\nexport function isPropagationEligibleBeliefStatus(\n status: BeliefLifecycleStatus\n): boolean {\n return status === \"active\" || status === \"resolved_true\";\n}\n\nexport function promoteBeliefStatusAfterScoring(\n status: BeliefLifecycleStatus,\n opts?: {\n confidence?: unknown;\n predictionMeta?: unknown;\n metadata?: Record<string, unknown>;\n }\n): BeliefLifecycleStatus {\n const resolvedStatus = shouldTreatBeliefAsResolved({ ...opts });\n if (resolvedStatus) {\n return resolvedStatus;\n }\n if (isPreValidationBeliefStatus(status)) {\n return \"active\";\n }\n return status;\n}\n\nexport function promoteBeliefStatusAfterEvidence(\n status: BeliefLifecycleStatus\n): BeliefLifecycleStatus {\n return isPreValidationBeliefStatus(status) ? \"active\" : status;\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Topic-scope resolution helpers for graph-primitive operations. */\nimport { v } from \"convex/values\";\nimport type { Id } from \"./convex\";\nimport { api as appApi } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\n\nconst LEGACY_SCOPE_FIELD = \"graphScopeProjectId\";\n\ntype UnknownRecord = Record<string, unknown>;\n\ninterface TopicScopeContext {\n db: {\n get(id: string): Promise<unknown>;\n query(tableName: string): TopicScopeQuery;\n };\n runQuery?: <TResult>(fnRef: unknown, args: unknown) => Promise<TResult>;\n}\n\ninterface TopicScopeQuery {\n collect(): Promise<unknown[]>;\n first(): Promise<unknown | null>;\n withIndex(\n indexName: string,\n range?: (q: TopicScopeIndexRangeBuilder) => unknown\n ): TopicScopeQuery;\n}\n\ninterface TopicScopeIndexRangeBuilder {\n eq(field: string, value: unknown): TopicScopeIndexRangeBuilder;\n}\n\ntype TopicDoc = Record<string, unknown> & {\n _id: Id<\"topics\">;\n globalId?: string;\n name?: string;\n depth?: number;\n createdAt?: number;\n parentTopicId?: Id<\"topics\">;\n tenantId?: string;\n workspaceId?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport interface TopicProjectScope {\n projectId?: string;\n source: \"topic\" | \"project_mapped_topic\" | \"topic_inferred\" | \"topic_node\";\n tenantId?: string;\n topicId: Id<\"topics\">;\n workspaceId?: string;\n}\n\n/**\n * RR.5 (legacy topics-table retirement) — graph-primitives mirror of the\n * kernel's epistemicNodes-first topic-scope fallback. Kept in lockstep with\n * `packages/reasoning-kernel/src/adapters/lib/topicScope.ts`\n * (`tests/unit/convex/topic-scope-fallbacks.test.ts` asserts parity).\n *\n * Resolves a topic that exists only as `epistemicNodes(nodeType=\"topic\")` —\n * the write-of-record — when no legacy `topics` row backs the ref, returning the\n * node's `topicId` self-key so scoped beliefs/evidence/questions stay reachable.\n * See the kernel module for the full silent-empty-result rationale.\n */\ninterface TopicNodeScopeDoc {\n _id: string | Id<\"epistemicNodes\">;\n globalId?: string;\n metadata?: UnknownRecord;\n nodeType?: string;\n topicId?: string;\n}\n\nasync function resolveTopicNodeScopeOrNull(\n ctx: TopicScopeContext,\n ref: string\n): Promise<TopicProjectScope | null> {\n if (!ctx?.db || typeof ctx.db.query !== \"function\") {\n return null;\n }\n\n let node: TopicNodeScopeDoc | null = null;\n\n // 1. The ref IS the topic node's UUIDv7 globalId.\n try {\n const byGlobalId = (await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", ref))\n .first()) as TopicNodeScopeDoc | null;\n if (byGlobalId && byGlobalId.nodeType === \"topic\") {\n node = byGlobalId;\n }\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] topic-node scope lookup by globalId failed\",\n { error, ref }\n );\n }\n\n if (!node) {\n return null;\n }\n\n const scopeKey =\n normalizeScopeValue(node.topicId) ?? normalizeScopeValue(node.globalId);\n if (!scopeKey) {\n return null;\n }\n\n return {\n topicId: scopeKey as Id<\"topics\">,\n projectId: asMappedProjectId(node),\n source: \"topic_node\",\n };\n}\n\ninterface MaterializedTopicNodeDoc {\n _id: string | Id<\"epistemicNodes\">;\n metadata?: Record<string, unknown>;\n}\n\nfunction asMappedProjectId(\n topic: Pick<TopicDoc, \"metadata\"> | TopicNodeScopeDoc | null | undefined\n): string | undefined {\n if (!topic) {\n return;\n }\n const directLegacyProjectId = normalizeScopeValue(\n (topic as UnknownRecord)[LEGACY_SCOPE_FIELD]\n );\n if (directLegacyProjectId) {\n return directLegacyProjectId;\n }\n const metadata = topic.metadata || {};\n const candidate =\n (metadata as UnknownRecord)[LEGACY_SCOPE_FIELD] ||\n (metadata as UnknownRecord).legacyProjectId ||\n (metadata as UnknownRecord).projectId ||\n (metadata as UnknownRecord).scopeProjectId;\n return typeof candidate === \"string\"\n ? normalizeScopeValue(candidate)\n : undefined;\n}\n\nfunction normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction pickPrimaryTopic(candidates: TopicDoc[]): TopicDoc | undefined {\n return [...candidates].sort((a, b) => {\n const depthA = a.depth ?? 9999;\n const depthB = b.depth ?? 9999;\n if (depthA !== depthB) {\n return depthA - depthB;\n }\n const createdA = a.createdAt ?? Number.MAX_SAFE_INTEGER;\n const createdB = b.createdAt ?? Number.MAX_SAFE_INTEGER;\n if (createdA !== createdB) {\n return createdA - createdB;\n }\n return String(a.name || \"\").localeCompare(String(b.name || \"\"));\n })[0];\n}\n\nasync function findTopicsByScopeAlias(\n ctx: TopicScopeContext,\n scopeId: string\n): Promise<TopicDoc[]> {\n const query = ctx.db.query(\"topics\") as TopicScopeQuery;\n try {\n return (await query\n .withIndex(\"by_graph_scope_project\", (q) =>\n q.eq(LEGACY_SCOPE_FIELD, scopeId)\n )\n .collect()) as TopicDoc[];\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve scope alias via index\",\n {\n error,\n scopeId,\n }\n );\n // Older Lucern dev deployments can lag index backfills while still carrying\n // the underlying topics table. Scan and filter so scope resolution keeps\n // working during the rollout.\n const topics = (await query.collect()) as TopicDoc[];\n return topics.filter((topic) => {\n const normalizedGlobalId = normalizeScopeValue(topic.globalId);\n const mappedProjectId = asMappedProjectId(topic);\n return (\n String(topic._id) === scopeId ||\n normalizedGlobalId === scopeId ||\n mappedProjectId === scopeId\n );\n });\n }\n}\n\nasync function tryResolveHostTopicById(\n ctx: TopicScopeContext,\n topicId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.get, {\n id: topicId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by host query\",\n {\n error,\n topicId,\n }\n );\n return null;\n }\n}\n\nasync function tryResolveHostTopicByLegacyScope(\n ctx: TopicScopeContext,\n legacyScopeId: string\n): Promise<TopicDoc | null> {\n if (typeof ctx.runQuery !== \"function\") {\n return null;\n }\n try {\n return ((await ctx.runQuery(appApi.topics.getByLegacyScopeId, {\n projectId: legacyScopeId,\n })) ?? null) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[topicScope] Failed to resolve topic by legacy scope\",\n {\n error,\n legacyScopeId,\n }\n );\n return null;\n }\n}\n\nexport function readMaterializedTopicTableId(\n topicNode: MaterializedTopicNodeDoc | null | undefined\n): string | undefined {\n if (!topicNode) {\n return;\n }\n\n const metadata = (topicNode.metadata || {}) as Record<string, unknown>;\n const topicTableId =\n (metadata.topicTableId as string | undefined) ||\n (metadata.topicId as string | undefined);\n\n return typeof topicTableId === \"string\" && topicTableId.trim().length > 0\n ? topicTableId.trim()\n : undefined;\n}\n\n/**\n * Walk the topic parent chain to find inherited workspaceId and tenantId.\n * Mirrors the pattern used by resolveTopicOntology for ontologyId inheritance.\n * Max depth: 10 (defensive limit against pathological nesting).\n */\nasync function resolveInheritedWorkspaceScope(\n ctx: TopicScopeContext,\n topic: TopicDoc\n): Promise<{ tenantId?: string; workspaceId?: string }> {\n const MAX_DEPTH = 10;\n let tenantId = normalizeScopeValue(topic.tenantId);\n let workspaceId = normalizeScopeValue(topic.workspaceId);\n\n if (tenantId && workspaceId) {\n return { tenantId, workspaceId };\n }\n\n let current: TopicDoc | null = topic;\n for (let i = 0; i < MAX_DEPTH && current?.parentTopicId; i++) {\n current = (await ctx.db.get(current.parentTopicId)) as TopicDoc | null;\n if (!current) {\n break;\n }\n\n if (!tenantId) {\n tenantId = normalizeScopeValue(current.tenantId);\n }\n if (!workspaceId) {\n workspaceId = normalizeScopeValue(current.workspaceId);\n }\n if (tenantId && workspaceId) {\n break;\n }\n }\n\n return { tenantId, workspaceId };\n}\n\nexport async function resolveTopicProjectScope(\n ctx: TopicScopeContext,\n args: { topicId?: Id<\"topics\"> | string; projectId?: string }\n): Promise<TopicProjectScope> {\n if (args.topicId) {\n return await resolveScopeFromTopicId(ctx, args.topicId);\n }\n\n if (args.projectId) {\n return await resolveScopeFromLegacyProjectId(ctx, args.projectId);\n }\n\n throw new Error(\n \"Missing scope: provide topicId (preferred) or legacy projectId alias.\"\n );\n}\n\nasync function resolveScopeFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicProjectScope> {\n const topic = await resolveTopicDocFromTopicId(ctx, topicId);\n if (topic) {\n return await buildTopicScope(ctx, topic, \"topic\");\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, String(topicId));\n if (nodeScope) {\n return nodeScope;\n }\n throw new Error(`Topic not found: ${String(topicId)}`);\n}\n\nasync function resolveTopicDocFromTopicId(\n ctx: TopicScopeContext,\n topicId: Id<\"topics\"> | string\n): Promise<TopicDoc | null> {\n const direct = await tryReadTopicDoc(ctx, topicId, {\n failureLog: \"[topicScope] Failed to load topic by direct id\",\n idLogKey: \"topicId\",\n });\n if (direct) {\n return direct;\n }\n\n const hostTopic = await tryResolveHostTopicById(ctx, String(topicId));\n if (hostTopic) {\n return hostTopic;\n }\n\n return (\n pickPrimaryTopic(await findTopicsByScopeAlias(ctx, String(topicId))) ?? null\n );\n}\n\nasync function resolveScopeFromLegacyProjectId(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicProjectScope> {\n const directTopic = await resolveDirectLegacyProjectTopic(\n ctx,\n legacyProjectId\n );\n if (directTopic) {\n return await buildTopicScope(ctx, directTopic, \"topic_inferred\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const primary = pickPrimaryTopic(\n await findTopicsByScopeAlias(ctx, legacyProjectId)\n );\n if (primary) {\n return await buildTopicScope(ctx, primary, \"project_mapped_topic\", {\n fallbackProjectId: legacyProjectId,\n });\n }\n\n const nodeScope = await resolveTopicNodeScopeOrNull(ctx, legacyProjectId);\n if (nodeScope) {\n return {\n ...nodeScope,\n projectId: nodeScope.projectId ?? legacyProjectId,\n };\n }\n\n throw new Error(\n `Legacy project scope ${legacyProjectId} has no mapped topic.`\n );\n}\n\nasync function resolveDirectLegacyProjectTopic(\n ctx: TopicScopeContext,\n legacyProjectId: string\n): Promise<TopicDoc | null> {\n const directTopic = await tryReadTopicDoc(ctx, legacyProjectId, {\n failureLog: \"[topicScope] Failed to load direct project topic\",\n idLogKey: \"projectId\",\n });\n return directTopic ?? tryResolveHostTopicByLegacyScope(ctx, legacyProjectId);\n}\n\nasync function tryReadTopicDoc(\n ctx: TopicScopeContext,\n id: Id<\"topics\"> | string,\n log: { failureLog: string; idLogKey: \"projectId\" | \"topicId\" }\n): Promise<TopicDoc | null> {\n try {\n return (await ctx.db.get(id)) as TopicDoc | null;\n } catch (error) {\n debugGraphPrimitiveFallback(log.failureLog, {\n error,\n [log.idLogKey]: id,\n });\n return null;\n }\n}\n\nasync function buildTopicScope(\n ctx: TopicScopeContext,\n topic: TopicDoc,\n source: TopicProjectScope[\"source\"],\n options: { fallbackProjectId?: string } = {}\n): Promise<TopicProjectScope> {\n const inherited = await resolveInheritedWorkspaceScope(ctx, topic);\n const mapped = asMappedProjectId(topic);\n return {\n topicId: topic._id,\n ...(mapped || options.fallbackProjectId\n ? { projectId: mapped ?? options.fallbackProjectId }\n : {}),\n tenantId: inherited.tenantId,\n workspaceId: inherited.workspaceId,\n source,\n };\n}\n\n/** Shared scope args for graph-primitive functions. topicId is canonical; projectId is a legacy alias. */\nexport const optionalScopeArgs = {\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n} as const;\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\nimport {\n getLayerForNodeType,\n isNodeType,\n} from \"@lucern/contracts/schema-helpers/spine/tables/epistemicNodes\";\nimport type { MutationCtx, QueryCtx } from \"./convex\";\nimport { resolveTopicProjectScope, type TopicProjectScope } from \"./topicScope\";\n\ntype StructuredInvariantError = Error & {\n status: number;\n code: string;\n invariantCode?: string;\n suggestion?: string;\n details?: unknown;\n};\n\ninterface ScopeLike {\n epistemicLayer?: unknown;\n nodeType?: unknown;\n projectId?: unknown;\n publicationStatus?: unknown;\n tenantId?: unknown;\n topicId?: unknown;\n workspaceId?: unknown;\n}\n\nexport interface RuntimePackMutationContext {\n packInstallScope?: \"tenant\" | \"workspace\";\n packKey?: string;\n toolName?: string;\n}\n\nexport function normalizeScopeValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction throwWorkspaceIsolationError(args: {\n message: string;\n invariantCode: string;\n suggestion: string;\n details?: unknown;\n}): never {\n const error = new Error(args.message) as StructuredInvariantError;\n error.status = 409;\n error.code = \"INVARIANT_VIOLATION\";\n error.invariantCode = args.invariantCode;\n error.suggestion = args.suggestion;\n error.details = args.details;\n throw error;\n}\n\nexport function assertWorkspaceScopedEpistemicNodeScope(args: {\n scope: TopicProjectScope;\n nodeType: string;\n mutationName: string;\n}): void {\n const layer = isNodeType(args.nodeType)\n ? getLayerForNodeType(args.nodeType)\n : undefined;\n if (layer === \"ontological\") {\n return;\n }\n\n const workspaceId = normalizeScopeValue(args.scope.workspaceId);\n if (workspaceId) {\n return;\n }\n\n throwWorkspaceIsolationError({\n message:\n \"Workspace-scoped reasoning isolation requires workspaceId on non-ontological node creation.\",\n invariantCode: \"workspace.scope_required_for_epistemic_nodes\",\n suggestion:\n \"Resolve the topic/project scope through a workspace-bound topic before creating epistemic nodes.\",\n details: {\n mutationName: args.mutationName,\n nodeType: args.nodeType,\n topicId: args.scope.topicId,\n projectId: args.scope.projectId,\n },\n });\n}\n\nexport function nodeMatchesWorkspaceReasoningScope(\n node: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!node) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const nodeTenantId = normalizeScopeValue(node.tenantId);\n const nodeWorkspaceId = normalizeScopeValue(node.workspaceId);\n const epistemicLayer =\n typeof node.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n\n if (scopeTenantId && nodeTenantId && scopeTenantId !== nodeTenantId) {\n return false;\n }\n\n // Ontological entities are tenant-global (no workspace required)\n if (epistemicLayer === \"ontological\" && nodeWorkspaceId === undefined) {\n return true;\n }\n\n // Published nodes are visible at tenant scope — the microservice API surface.\n // The node stays in its workspace, but tenant-scope queries can see it.\n if (!scopeWorkspaceId && node.publicationStatus === \"published\") {\n return true;\n }\n\n if (!scopeWorkspaceId) {\n return nodeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === nodeWorkspaceId;\n}\n\nexport function edgeMatchesWorkspaceReasoningScope(\n edge: ScopeLike | null | undefined,\n scope: Pick<TopicProjectScope, \"tenantId\" | \"workspaceId\">\n): boolean {\n if (!edge) {\n return false;\n }\n\n const scopeTenantId = normalizeScopeValue(scope.tenantId);\n const scopeWorkspaceId = normalizeScopeValue(scope.workspaceId);\n const edgeTenantId = normalizeScopeValue(edge.tenantId);\n const edgeWorkspaceId = normalizeScopeValue(edge.workspaceId);\n\n if (scopeTenantId && edgeTenantId && scopeTenantId !== edgeTenantId) {\n return false;\n }\n\n if (!scopeWorkspaceId) {\n return edgeWorkspaceId === undefined;\n }\n\n return scopeWorkspaceId === edgeWorkspaceId;\n}\n\nexport async function resolveNodeScopeForWorkspaceIsolation(\n ctx: QueryCtx | MutationCtx,\n node: ScopeLike | null | undefined\n): Promise<{\n tenantId?: string;\n workspaceId?: string;\n epistemicLayer?: string;\n nodeType?: string;\n}> {\n const epistemicLayer =\n typeof node?.epistemicLayer === \"string\" ? node.epistemicLayer : undefined;\n const resolved = {\n tenantId: normalizeScopeValue(node?.tenantId),\n workspaceId: normalizeScopeValue(node?.workspaceId),\n epistemicLayer,\n nodeType: typeof node?.nodeType === \"string\" ? node.nodeType : undefined,\n };\n\n if (!node) {\n return resolved;\n }\n\n if (resolved.epistemicLayer === \"ontological\") {\n return resolved;\n }\n\n if (resolved.tenantId || resolved.workspaceId) {\n return resolved;\n }\n\n const topicId = normalizeScopeValue(node.topicId);\n if (topicId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n topicId,\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n if (node.projectId) {\n const topicScope = await resolveTopicProjectScope(ctx, {\n projectId: String(node.projectId),\n });\n return {\n ...resolved,\n tenantId: topicScope.tenantId,\n workspaceId: topicScope.workspaceId,\n };\n }\n\n return resolved;\n}\n\nexport function resolveRuntimePackMutationContext(args: {\n runtimeToolName?: string;\n runtimePackKey?: string;\n runtimePackInstallScope?: \"tenant\" | \"workspace\";\n}): RuntimePackMutationContext | undefined {\n if (\n !(\n args.runtimeToolName ||\n args.runtimePackKey ||\n args.runtimePackInstallScope\n )\n ) {\n return;\n }\n\n return {\n toolName: args.runtimeToolName,\n packKey: args.runtimePackKey,\n packInstallScope: args.runtimePackInstallScope,\n };\n}\n\nexport function assertTenantPackWorkspaceMutationAllowed(args: {\n runtime?: RuntimePackMutationContext;\n target: ScopeLike;\n mutationName: string;\n}): void {\n if (!args.runtime?.packKey || args.runtime.packInstallScope !== \"tenant\") {\n return;\n }\n\n const targetWorkspaceId = normalizeScopeValue(args.target.workspaceId);\n const targetLayer =\n typeof args.target.epistemicLayer === \"string\"\n ? args.target.epistemicLayer\n : undefined;\n\n if (!targetWorkspaceId || targetLayer === \"ontological\") {\n return;\n }\n\n throwWorkspaceIsolationError({\n message: `Tenant-scoped pack \"${args.runtime.packKey}\" cannot mutate workspace-scoped reasoning state.`,\n invariantCode: \"workspace.tenant_pack_reasoning_write_forbidden\",\n suggestion:\n \"Use a workspace-scoped pack for workspace-local graph mutations, or route the change through tenant-global canonical entity flows.\",\n details: {\n mutationName: args.mutationName,\n toolName: args.runtime.toolName,\n packKey: args.runtime.packKey,\n targetWorkspaceId,\n targetNodeType: args.target.nodeType,\n targetLayer,\n },\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/**\n * Epistemic Beliefs API\n *\n * Clean API for managing beliefs in the epistemic spine (epistemicNodes).\n * This is the NEW API that replaces beliefs.ts.\n *\n * Key differences from beliefs.ts:\n * - Writes ONLY to epistemicNodes (no dual-write)\n * - Uses epistemicNodes IDs directly (no runtime ID translation fallback)\n * - Syncs to Neo4j after mutations\n * - Follows Lucern invariants strictly\n *\n * @see /docs/epistemic-invariants/00-epistemic-invariants.md\n */\n\nimport {\n classFromAudienceKey,\n normalizeAudienceKey,\n} from \"@lucern/access-control/audience\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\nimport {\n type ConfidencePolicyConfig,\n confidenceFromSL,\n mkOpinion,\n normalizeTupleContradictionPolicy,\n type Opinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport { v } from \"convex/values\";\nimport {\n type BeliefLifecycleStatus,\n resolveBeliefLifecycleStatus,\n} from \"./beliefLifecycle\";\nimport type { Id, QueryCtx } from \"./convex\";\nimport { internal } from \"./convex\";\nimport { debugGraphPrimitiveFallback } from \"./debug\";\nimport type { VerificationConfidenceTrigger } from \"./epistemicContractHelpers\";\nimport { resolveGraphPrimitivesAppResolvers } from \"./resolvers\";\nimport { optionalScopeArgs, resolveTopicProjectScope } from \"./topicScope\";\nimport { nodeMatchesWorkspaceReasoningScope } from \"./workspaceIsolation\";\n\n// All IDs now use epistemicNodes exclusively\nexport const insightIdUnion = v.id(\"epistemicNodes\");\nconst DEFAULT_PROJECT_BELIEF_LIMIT = 250;\nexport const MAX_PROJECT_BELIEF_LIMIT = 1000;\nexport const optionalBeliefScopeArgs = optionalScopeArgs;\n\n// CQ.11: the structured-refusal primitive is the single shared copy in\n// `@lucern/access-control/structuredMutationError` (the same home the shared\n// access gate throws from). Re-exported here so the graph-primitives modules\n// that imported it from this helper keep their import path unchanged.\nexport type { StructuredMutationErrorData } from \"@lucern/access-control/structuredMutationError\";\n// biome-ignore lint/performance/noBarrelFile: Public helper compatibility re-export retained for existing graph-primitives consumers.\nexport { throwStructuredMutationError } from \"@lucern/access-control/structuredMutationError\";\n\ninterface BeliefScopeArgs {\n projectId?: string | null;\n topicId?: string | null;\n}\n\ninterface EpistemicNodeOpinionSource {\n _id?: unknown;\n metadata?: Record<string, unknown> | null;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n tupleContradicted?: boolean;\n userId?: string;\n}\n\nexport interface EpistemicNodeOpinionDoc extends EpistemicNodeOpinionSource {\n _creationTime?: number;\n _id: Id<\"epistemicNodes\">;\n anonymizationClass?: string;\n audienceLabel?: string;\n beliefStatus?: unknown;\n canonicalText?: string;\n confidence?: unknown;\n createdAt?: number;\n createdBy?: string;\n epistemicLayer?: string;\n exportClass?: string;\n globalId?: string;\n metadata?: Record<string, unknown> | null;\n nodeType: \"belief\";\n policyTags?: string[];\n predictionMeta?: unknown;\n projectId?: string;\n publicationStatus?: string;\n sensitivityTier?: string;\n status?: string;\n tenantId?: string;\n topicId?: string;\n updatedAt?: number;\n workspaceId?: string;\n}\n\ninterface EpistemicIndexQuery {\n eq(field: string, value: unknown): EpistemicIndexQuery;\n field(field: string): string;\n gt(field: string, value: unknown): EpistemicIndexQuery;\n lt(field: string, value: unknown): EpistemicIndexQuery;\n}\n\ntype EpistemicBeliefCtx = QueryCtx;\n\ntype AudienceClass = \"internal\" | \"restricted_external\" | \"public\";\n\nconst DEFAULT_CONFIDENCE_POLICY: ConfidencePolicyConfig = {\n scoringMode: \"after_worktree\",\n tupleContradiction: normalizeTupleContradictionPolicy(),\n};\n\nexport type BeliefConfidenceTrigger =\n | \"initial\"\n | \"evidence_added\"\n | \"evidence_removed\"\n | \"contradiction_detected\"\n | \"contradiction_resolved\"\n | \"propagation\"\n | \"agent_assessment\"\n | \"worktree_outcome\"\n | \"worktree_completed\"\n // SL-specific triggers\n | \"fusion\"\n | \"discount\"\n | \"deduction\"\n | \"backfill_synthetic\"\n | VerificationConfidenceTrigger;\n\nexport function readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) {\n return;\n }\n const strings = value.filter(\n (item): item is string => typeof item === \"string\" && item.length > 0\n );\n return strings.length === value.length ? strings : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nexport function readBeliefNodeView(\n value: unknown\n): EpistemicNodeOpinionDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readOptionalString(value._id) as Id<\"epistemicNodes\"> | undefined;\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType === \"belief\")) {\n return null;\n }\n\n const node: EpistemicNodeOpinionDoc = {\n _id: id,\n nodeType,\n };\n const creationTime = readFiniteNumber(value._creationTime);\n if (creationTime !== undefined) {\n node._creationTime = creationTime;\n }\n const metadata = readRecord(value.metadata);\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n const opinionA = readFiniteNumber(value.opinion_a);\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n const opinionB = readFiniteNumber(value.opinion_b);\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n const opinionD = readFiniteNumber(value.opinion_d);\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n const opinionU = readFiniteNumber(value.opinion_u);\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n const tupleContradicted =\n typeof value.tupleContradicted === \"boolean\"\n ? value.tupleContradicted\n : undefined;\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n\n const stringFields = {\n anonymizationClass: value.anonymizationClass,\n audienceLabel: value.audienceLabel,\n canonicalText: value.canonicalText,\n createdBy: value.createdBy,\n epistemicLayer: value.epistemicLayer,\n exportClass: value.exportClass,\n globalId: value.globalId,\n projectId: value.projectId,\n publicationStatus: value.publicationStatus,\n sensitivityTier: value.sensitivityTier,\n status: value.status,\n tenantId: value.tenantId,\n topicId: value.topicId,\n userId: value.userId,\n workspaceId: value.workspaceId,\n };\n for (const [field, fieldValue] of Object.entries(stringFields)) {\n const normalized = readOptionalString(fieldValue);\n if (normalized !== undefined) {\n node[field as keyof typeof stringFields] = normalized;\n }\n }\n\n const createdAt = readFiniteNumber(value.createdAt);\n if (createdAt !== undefined) {\n node.createdAt = createdAt;\n }\n const updatedAt = readFiniteNumber(value.updatedAt);\n if (updatedAt !== undefined) {\n node.updatedAt = updatedAt;\n }\n if (value.beliefStatus !== undefined) {\n node.beliefStatus = value.beliefStatus;\n }\n if (value.confidence !== undefined) {\n node.confidence = value.confidence;\n }\n if (value.predictionMeta !== undefined) {\n node.predictionMeta = value.predictionMeta;\n }\n const policyTags = readStringArray(value.policyTags);\n if (policyTags !== undefined) {\n node.policyTags = policyTags;\n }\n\n return node;\n}\n\nfunction readBeliefNodeViews(\n values: readonly unknown[]\n): EpistemicNodeOpinionDoc[] {\n return values.flatMap((value) => {\n const node = readBeliefNodeView(value);\n return node ? [node] : [];\n });\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\nexport function assertBaseRateInRange(\n baseRate: number,\n field = \"baseRate\"\n): number {\n if (baseRate < 0 || baseRate > 1) {\n throwStructuredMutationError({\n message: `${field} must be within [0, 1].`,\n status: 400,\n code: \"INVALID_ARGUMENT\",\n invariantCode: \"request.valid_shape\",\n suggestion: `Clamp ${field} into the inclusive [0, 1] interval.`,\n details: { field, baseRate },\n });\n }\n return baseRate;\n}\n\nexport function buildBeliefConfidenceRow(args: {\n beliefId: Id<\"epistemicNodes\">;\n belief: number;\n disbelief: number;\n uncertainty: number;\n baseRate: number;\n trigger: BeliefConfidenceTrigger;\n rationale?: string;\n assessedBy: string;\n assessedAt: number;\n slOperator?: SLOperator;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringContradictionId?: Id<\"contradictions\">;\n triggeringWorktreeId?: string;\n}) {\n return {\n beliefId: args.beliefId,\n confidence: confidenceFromSL(\n args.belief,\n args.disbelief,\n args.uncertainty,\n args.baseRate\n ),\n belief: args.belief,\n disbelief: args.disbelief,\n uncertainty: args.uncertainty,\n baseRate: args.baseRate,\n slOperator: args.slOperator ?? (\"prior_seed\" as const),\n trigger: args.trigger,\n ...(args.rationale ? { rationale: args.rationale } : {}),\n assessedBy: args.assessedBy,\n assessedAt: args.assessedAt,\n ...(args.triggeringEvidenceId\n ? {\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringEvidenceIds: [String(args.triggeringEvidenceId)],\n }\n : {}),\n ...(args.triggeringContradictionId\n ? {\n triggeringContradictionId: args.triggeringContradictionId,\n }\n : {}),\n ...(args.triggeringWorktreeId\n ? { triggeringWorktreeId: args.triggeringWorktreeId }\n : {}),\n };\n}\n\ntype BeliefStatusResult =\n | { success: true }\n | { success: false; message: \"Evidence node not found\" };\n\nexport function buildBeliefStatusSuccessResult(): BeliefStatusResult {\n return { success: true };\n}\n\nexport function buildBeliefEvidenceNotFoundResult(): BeliefStatusResult {\n const result = {} as Extract<BeliefStatusResult, { success: false }>;\n result.success = false;\n result.message = \"Evidence node not found\";\n return result;\n}\n\nexport function deriveSyntheticBackfillOpinion(\n source: Record<string, unknown>\n): SLOpinion {\n const belief =\n readFiniteNumber(source.opinion_b) ?? readFiniteNumber(source.belief);\n const disbelief =\n readFiniteNumber(source.opinion_d) ?? readFiniteNumber(source.disbelief);\n const uncertainty =\n readFiniteNumber(source.opinion_u) ?? readFiniteNumber(source.uncertainty);\n const baseRate =\n readFiniteNumber(source.opinion_a) ?? readFiniteNumber(source.baseRate);\n\n if (\n belief !== undefined ||\n disbelief !== undefined ||\n uncertainty !== undefined ||\n baseRate !== undefined\n ) {\n try {\n return readOpinionFromRecord(source);\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to decode legacy belief opinion\",\n {\n error,\n }\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n }\n\n const confidence = clamp01(readFiniteNumber(source.confidence) ?? 0);\n return mkOpinion(confidence, 1 - confidence, 0, 0.5);\n}\n\nexport function clampBeliefLimit(\n limit: number | undefined,\n fallback = DEFAULT_PROJECT_BELIEF_LIMIT\n): number {\n if (!Number.isFinite(limit)) {\n return fallback;\n }\n return Math.max(\n 1,\n Math.min(Math.floor(limit as number), MAX_PROJECT_BELIEF_LIMIT)\n );\n}\n\nexport function readTupleContradictedFlag(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nexport function readBeliefOpinionSnapshot(\n node: EpistemicNodeOpinionSource,\n metadata: Record<string, unknown>\n): SLOpinion {\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to read belief opinion snapshot\",\n {\n error,\n beliefId: node._id,\n }\n );\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nexport function deriveTupleContradictionSeverity(node: {\n metadata?: Record<string, unknown> | null;\n}): \"critical\" | \"significant\" | \"minor\" {\n const metadata = node.metadata || {};\n const criticality =\n typeof metadata.criticality === \"string\" ? metadata.criticality : undefined;\n\n if (criticality === \"blocking\") {\n return \"critical\";\n }\n if (criticality === \"supporting\") {\n return \"minor\";\n }\n return \"significant\";\n}\n\nexport function formatTupleContradictionDescription(args: {\n opinion: Opinion;\n policy: ConfidencePolicyConfig[\"tupleContradiction\"];\n}): string {\n return `Tuple-space contradiction detected: b=${args.opinion.b.toFixed(2)} > ${args.policy.beliefThreshold.toFixed(2)} and d=${args.opinion.d.toFixed(2)} > ${args.policy.disbeliefThreshold.toFixed(2)}.`;\n}\n\n// =============================================================================\n// HELPERS\n// =============================================================================\n\nexport function generateContentHash(text: string): string {\n const content = `belief:${text.trim().toLowerCase().replace(/\\s+/g, \" \")}`;\n let hash = 5381;\n for (let i = 0; i < content.length; i++) {\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\n hash = (hash << 5) + hash + content.charCodeAt(i);\n // biome-ignore lint/suspicious/noBitwiseOperators: Preserve deterministic djb2 hash semantics for persisted belief metadata compatibility.\n hash &= hash;\n }\n return Math.abs(hash).toString(16).padStart(8, \"0\");\n}\n\nexport function resolveBeliefWorktreeId(\n metadata: Record<string, unknown> | undefined\n): string | undefined {\n const worktreeId = metadata?.worktreeId;\n if (typeof worktreeId === \"string\" && worktreeId.trim().length > 0) {\n return worktreeId;\n }\n\n const sprintId = metadata?.sprintId;\n return typeof sprintId === \"string\" && sprintId.trim().length > 0\n ? sprintId\n : undefined;\n}\n\n// Map pillar names to valid pillar literals\ntype ValidPillar =\n | \"market\"\n | \"competition\"\n | \"product\"\n | \"team\"\n | \"financials\"\n | \"regulatory\"\n | \"timing\"\n | \"customer\"\n | \"technology\"\n | \"distribution\"\n | \"deal\"\n | \"risks\"\n | \"other\";\n\nexport function normalizePillar(pillar?: string): ValidPillar {\n if (!pillar) {\n return \"other\";\n }\n const lower = pillar.toLowerCase();\n const validPillars: ValidPillar[] = [\n \"market\",\n \"competition\",\n \"product\",\n \"team\",\n \"financials\",\n \"regulatory\",\n \"timing\",\n \"customer\",\n \"technology\",\n \"distribution\",\n \"deal\",\n \"risks\",\n ];\n return (validPillars.find((p) => lower.includes(p)) ||\n \"other\") as ValidPillar;\n}\n\nexport async function markBeliefGraphDirty(\n ctx: EpistemicBeliefCtx,\n scope: { projectId?: string | null; topicId?: string | null }\n): Promise<void> {\n const projectId =\n typeof scope.projectId === \"string\" && scope.projectId.trim().length > 0\n ? scope.projectId\n : undefined;\n const topicId =\n typeof scope.topicId === \"string\" && scope.topicId.trim().length > 0\n ? scope.topicId\n : undefined;\n\n if (!(projectId || topicId)) {\n return;\n }\n\n if (projectId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleInternal,\n { projectId }\n );\n }\n if (topicId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.graphAnalysisCache.markCacheStaleByTopic,\n { topicId }\n );\n }\n\n const activityScopeId = topicId ?? projectId;\n if (!activityScopeId) {\n throw new Error(\n \"Expected belief graph dirty scope to include a topic or project id.\"\n );\n }\n\n await resolveGraphPrimitivesAppResolvers(ctx).patchProject(\n ctx,\n activityScopeId,\n {\n lastActivityAt: Date.now(),\n }\n );\n}\n\nexport async function resolveBeliefScopeOrNull(\n ctx: QueryCtx,\n args: BeliefScopeArgs\n) {\n if (!(args.projectId || args.topicId)) {\n return null;\n }\n\n try {\n return await resolveTopicProjectScope(ctx, {\n projectId: args.projectId ?? undefined,\n topicId: args.topicId ?? undefined,\n });\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to resolve belief scope\",\n {\n error,\n projectId: args.projectId,\n topicId: args.topicId,\n }\n );\n return null;\n }\n}\n\nexport async function getBeliefNodesForScope(\n ctx: EpistemicBeliefCtx,\n scope: Awaited<ReturnType<typeof resolveTopicProjectScope>>,\n args?: { scanLimit?: number; status?: string }\n) {\n const baseQuery = ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q: EpistemicIndexQuery) =>\n q.eq(\"topicId\", scope.topicId).eq(\"nodeType\", \"belief\")\n );\n const rows =\n typeof args?.scanLimit === \"number\"\n ? await baseQuery.order(\"desc\").take(args.scanLimit)\n : await baseQuery.collect();\n const nodes = readBeliefNodeViews(rows);\n const scopedNodes = nodes.filter((node) =>\n nodeMatchesWorkspaceReasoningScope(node, scope)\n );\n\n if (!args?.status) {\n return scopedNodes;\n }\n\n return scopedNodes.filter(\n (node: EpistemicNodeOpinionDoc) => node.status === args.status\n );\n}\n\nexport function createBeliefAudienceResolver(\n registryRows: Array<{\n audienceKey?: string | null;\n audienceClass: AudienceClass;\n }>\n) {\n const audienceClassByKey = new Map<string, AudienceClass>(\n registryRows.map((row) => [\n normalizeAudienceKey(row.audienceKey),\n row.audienceClass,\n ])\n );\n\n return (\n audienceKey: string | undefined | null,\n fallback: AudienceClass\n ): AudienceClass => {\n const key = normalizeAudienceKey(audienceKey);\n if (!key) {\n return fallback;\n }\n return (\n audienceClassByKey.get(key) ??\n (classFromAudienceKey(key, fallback) as AudienceClass)\n );\n };\n}\n\nexport function flattenBeliefNode(node: EpistemicNodeOpinionDoc) {\n const meta = node.metadata || {};\n const worktreeId = resolveBeliefWorktreeId(meta);\n const tupleContradicted =\n readTupleContradictedFlag(node.tupleContradicted) ??\n readTupleContradictedFlag(meta.tupleContradicted) ??\n false;\n\n return {\n _id: node._id,\n _epistemicNodeId: node._id,\n _creationTime: node._creationTime,\n belief: node.canonicalText,\n formulation: node.canonicalText,\n projectId: node.projectId,\n topicId: node.topicId,\n userId: node.userId || node.createdBy || \"\",\n confidence: (meta.confidence as \"high\" | \"medium\" | \"low\") || \"untested\",\n status: node.status,\n beliefStatus: resolveBeliefStatus(node, meta),\n topic: (meta.topic as string) || (meta.pillar as string) || \"other\",\n pillar: (meta.pillar as string) || (meta.topic as string) || \"\",\n category: (meta.category as string) || \"\",\n subcategory: (meta.subcategory as string) || \"\",\n categoryIcon: (meta.categoryIcon as string) || \"\",\n supportingEvidence: (meta.supportingEvidenceIds as string[]) || [],\n contradictingEvidence: (meta.contradictingEvidenceIds as string[]) || [],\n testingQuestions: (meta.testingQuestionIds as string[]) || [],\n linkedInsights: (meta.linkedInsightIds as string[]) || [],\n createdAt: node.createdAt,\n updatedAt: node.updatedAt || node.createdAt,\n tupleContradicted,\n sprintId: (meta.sprintId as string) || undefined,\n worktreeId,\n sourceBeliefIds: (meta.sourceBeliefIds as string[]) || undefined,\n criticality:\n (meta.criticality as\n | \"critical\"\n | \"supporting\"\n | \"nice_to_have\"\n | \"unanalyzed\"\n | \"blocking\"\n | \"important\") || \"unanalyzed\",\n rationale: (meta.rationale as string) || \"\",\n audienceLabel: node.audienceLabel,\n policyTags: node.policyTags,\n sensitivityTier: node.sensitivityTier,\n exportClass: node.exportClass,\n anonymizationClass: node.anonymizationClass,\n };\n}\n\nexport function resolveBeliefStatus(\n node: {\n beliefStatus?: unknown;\n confidence?: unknown;\n predictionMeta?: unknown;\n },\n metadata: Record<string, unknown>\n): BeliefLifecycleStatus {\n return resolveBeliefLifecycleStatus({\n beliefStatus: node.beliefStatus,\n confidence: node.confidence,\n predictionMeta: node.predictionMeta,\n metadata,\n });\n}\n\nexport async function hasCompletedWorktreeForBelief(\n ctx: EpistemicBeliefCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<boolean> {\n // Check if the belief is linked to a completed worktree via worktreeBeliefCluster\n const clusterMembership = await ctx.db\n .query(\"worktreeBeliefCluster\")\n .withIndex(\"by_belief\", (q: EpistemicIndexQuery) =>\n q.eq(\"beliefId\", beliefNodeId)\n )\n .collect();\n for (const membership of clusterMembership) {\n const worktree = await ctx.db.get(membership.worktreeId);\n if (worktree?.status === \"completed\" || worktree?.status === \"merged\") {\n return true;\n }\n }\n return false;\n}\n\nexport async function getActiveConfidencePolicy(\n ctx: EpistemicBeliefCtx\n): Promise<ConfidencePolicyConfig> {\n try {\n const activeConfig = await ctx.db\n .query(\"logicSprintScoring\")\n .withIndex(\"by_active\", (q: EpistemicIndexQuery) =>\n q.eq(\"isActive\", true)\n )\n .first();\n\n return {\n scoringMode:\n activeConfig?.confidencePolicy === \"always\"\n ? \"always\"\n : DEFAULT_CONFIDENCE_POLICY.scoringMode,\n tupleContradiction: normalizeTupleContradictionPolicy(\n activeConfig?.tupleContradictionPolicy as\n | Partial<ConfidencePolicyConfig[\"tupleContradiction\"]>\n | undefined\n ),\n };\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[epistemicBeliefs] Failed to load active confidence policy\",\n {\n error,\n }\n );\n // K-tier/component environments do not carry logicSprintScoring.\n return DEFAULT_CONFIDENCE_POLICY;\n }\n}\n\nexport async function requireAuthenticatedUserId(ctx: {\n auth: { getUserIdentity: () => Promise<unknown> };\n}): Promise<string> {\n const userId = await getCurrentUserId(\n ctx as Parameters<typeof getCurrentUserId>[0]\n );\n if (!userId) {\n throwStructuredMutationError({\n message: \"Authentication required.\",\n status: 401,\n code: \"AUTHENTICATION_REQUIRED\",\n invariantCode: \"auth.required\",\n suggestion:\n \"Provide a valid bearer token before invoking belief mutations.\",\n });\n }\n return userId;\n}\n","import type { EdgePropagationSpec } from \"./propagation-types\";\n\nexport const containsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contains\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Structural containment only. Traversed for explicit semantics, but it never propagates opinions.\",\n};\n","import {\n applyNegativeEvidence,\n applyNegativeSupport,\n cumulativeFusion,\n type EdgeMetadata,\n type PropagationResult,\n project,\n type SLOpinion,\n trustDiscount,\n} from \"@lucern/confidence\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n} from \"./propagation-types\";\n\nexport function readEdgeMetadata<TNodeId extends string>(\n edge: PropagationEdgeRecord<TNodeId>\n): EdgeMetadata {\n return {\n constraint: edge.constraint ?? undefined,\n normalization: edge.normalization ?? undefined,\n propagation: edge.propagation ?? undefined,\n conditionalA: edge.conditionalA ?? undefined,\n conditionalNotA: edge.conditionalNotA ?? undefined,\n };\n}\n\nexport function applyPerHopDamping(\n sourceOpinion: SLOpinion,\n damping: number\n): SLOpinion {\n if (damping >= 1) {\n return sourceOpinion;\n }\n\n return trustDiscount(sourceOpinion, Math.max(0, damping));\n}\n\nexport function annotateRationale(\n result: PropagationResult,\n spec: EdgePropagationSpec,\n hop: number\n): PropagationResult {\n return {\n ...result,\n rationale: `hop=${hop} edge=${spec.edgeType} damping=${spec.damping.toFixed(\n 2\n )} :: ${result.rationale}`,\n };\n}\n\nexport function propagatePositiveSupport(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(\n 2\n )}) from source at ${project(sourceOpinion).toFixed(2)}`,\n };\n}\n\nexport function propagatePositiveInform(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number\n): PropagationResult {\n const discounted = trustDiscount(sourceOpinion, Math.abs(edgeWeight));\n return {\n opinion: cumulativeFusion(targetOpinion, discounted),\n operator: \"cumulative_fusion\",\n rationale: `Supporting evidence (weight=${edgeWeight.toFixed(2)})`,\n };\n}\n\nexport function propagateNegativeSupportWithMetadata(\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edgeWeight: number,\n edge: PropagationEdgeRecord\n): PropagationResult {\n return applyNegativeSupport(\n sourceOpinion,\n targetOpinion,\n edgeWeight,\n readEdgeMetadata(edge)\n );\n}\n\nexport const propagateNegativeInform = applyNegativeEvidence;\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n} from \"./utils\";\n\nexport const contradictsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"contradicts\",\n direction: \"bidirectional\",\n transitivity: \"none\",\n damping: 0.85,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n negativeWeight,\n edge\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Legacy contradiction edges move negative pressure in either direction, but never beyond one hop.\",\n};\n","import {\n conditionalDeduction,\n dampedDependencyCascade,\n mkOpinion,\n project,\n} from \"@lucern/confidence\";\nimport type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n readEdgeMetadata,\n} from \"./utils\";\n\nexport const dependsOnPropagationSpec: EdgePropagationSpec = {\n edgeType: \"depends_on\",\n direction: \"incoming\",\n transitivity: \"damped\",\n damping: 0.8,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const metadata = readEdgeMetadata(edge);\n\n if (metadata.conditionalA && metadata.conditionalNotA) {\n const deducedOpinion = conditionalDeduction(\n dampedSource,\n mkOpinion(\n metadata.conditionalA.b,\n metadata.conditionalA.d,\n metadata.conditionalA.u,\n metadata.conditionalA.a\n ),\n mkOpinion(\n metadata.conditionalNotA.b,\n metadata.conditionalNotA.d,\n metadata.conditionalNotA.u,\n metadata.conditionalNotA.a\n ),\n targetOpinion.a\n );\n\n return annotateRationale(\n {\n opinion: deducedOpinion,\n operator: \"conditional_deduction\",\n rationale: `Conditional deduction: prerequisite at ${project(\n dampedSource\n ).toFixed(2)}`,\n },\n context.spec,\n context.hop\n );\n }\n\n const result = dampedDependencyCascade(\n dampedSource,\n targetOpinion,\n metadata.propagation ?? \"continuous\"\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Structural gating. Textbook conditional deduction when edge conditionals exist, otherwise damped dependency cascade through downstream chains.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\n\nexport const derivedFromPropagationSpec: EdgePropagationSpec = {\n edgeType: \"derived_from\",\n direction: \"incoming\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Provenance only. The traversal surface stays explicit, but confidence does not move across derived_from edges.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const elaboratesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"elaborates\",\n direction: \"outgoing\",\n transitivity: \"damped\",\n damping: 0.7,\n maxHops: 2,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const contextualWeight = Math.min(Math.abs(edge.weight ?? 0.35), 0.35);\n const result = propagatePositiveInform(\n dampedSource,\n targetOpinion,\n contextualWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Context-rich supporting detail. Elaborates carries a small positive effect with short, damped chaining.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n propagatePositiveInform,\n} from \"./utils\";\n\nexport const informsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"informs\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.92,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeInform(dampedSource, targetOpinion, weight)\n : propagatePositiveInform(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Evidence-bearing influence. Informs can chain through the graph with light per-hop damping.\",\n};\n","import type {\n EdgeMetadata,\n PropagationResult,\n SLOpinion,\n} from \"@lucern/confidence\";\n\nexport type PropagationTraversalDirection = \"outgoing\" | \"incoming\";\n\nexport type PropagationSpecDirection =\n | PropagationTraversalDirection\n | \"bidirectional\";\n\nexport type PropagationEdgeType =\n | \"supports\"\n | \"depends_on\"\n | \"informs\"\n | \"contains\"\n | \"tests\"\n | \"derived_from\"\n | \"contradicts\"\n | \"refutes\"\n | \"elaborates\";\n\nexport interface PropagationEdgeRecord<TNodeId extends string = string> {\n conditionalA?: EdgeMetadata[\"conditionalA\"] | null;\n conditionalNotA?: EdgeMetadata[\"conditionalNotA\"] | null;\n constraint?: EdgeMetadata[\"constraint\"] | null;\n edgeType: string;\n fromNodeId?: TNodeId | null;\n normalization?: EdgeMetadata[\"normalization\"] | null;\n propagation?: EdgeMetadata[\"propagation\"] | null;\n tenantId?: string;\n toNodeId?: TNodeId | null;\n weight?: number | null;\n workspaceId?: string;\n}\n\nexport interface EdgePropagationSpec<TNodeId extends string = string> {\n damping: number;\n description: string;\n direction: PropagationSpecDirection;\n edgeType: PropagationEdgeType;\n maxHops: number | \"unbounded\";\n operator: (\n sourceOpinion: SLOpinion,\n targetOpinion: SLOpinion,\n edge: PropagationEdgeRecord<TNodeId>,\n context: {\n hop: number;\n sourceNodeId: TNodeId;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n spec: EdgePropagationSpec<TNodeId>;\n }\n ) => PropagationResult | null;\n transitivity: \"none\" | \"damped\" | \"full\";\n}\n\nexport function isPropagationTraversalDirection(\n direction: string\n): direction is PropagationTraversalDirection {\n return direction === \"outgoing\" || direction === \"incoming\";\n}\n\nexport function canTraverseHop<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n nextHop: number\n): boolean {\n return spec.maxHops === \"unbounded\" || nextHop <= spec.maxHops;\n}\n\nexport function canContinueTransitively<TNodeId extends string>(\n spec: EdgePropagationSpec<TNodeId>,\n currentHop: number\n): boolean {\n if (spec.transitivity === \"none\") {\n return false;\n }\n\n return spec.maxHops === \"unbounded\" || currentHop < spec.maxHops;\n}\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeInform,\n} from \"./utils\";\n\nexport const refutesPropagationSpec: EdgePropagationSpec = {\n edgeType: \"refutes\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 0.9,\n maxHops: 1,\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const negativeWeight = -Math.abs(edge.weight ?? 1);\n const result = propagateNegativeInform(\n dampedSource,\n targetOpinion,\n negativeWeight\n );\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Explicit negative evidence semantics. Refutes is treated as strong one-hop counter-evidence.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\nimport {\n annotateRationale,\n applyPerHopDamping,\n propagateNegativeSupportWithMetadata,\n propagatePositiveSupport,\n} from \"./utils\";\n\nexport const supportsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"supports\",\n direction: \"outgoing\",\n transitivity: \"full\",\n damping: 0.85,\n maxHops: \"unbounded\",\n operator: (sourceOpinion, targetOpinion, edge, context) => {\n const dampedSource = applyPerHopDamping(\n sourceOpinion,\n context.spec.damping\n );\n const weight = edge.weight ?? 1;\n const result =\n weight < 0\n ? propagateNegativeSupportWithMetadata(\n dampedSource,\n targetOpinion,\n weight,\n edge\n )\n : propagatePositiveSupport(dampedSource, targetOpinion, weight);\n\n return annotateRationale(result, context.spec, context.hop);\n },\n description:\n \"Belief-to-belief influence. Supports chains transitively with moderate per-hop damping.\",\n};\n","import type { EdgePropagationSpec } from \"./propagation-types\";\n\nexport const testsPropagationSpec: EdgePropagationSpec = {\n edgeType: \"tests\",\n direction: \"outgoing\",\n transitivity: \"none\",\n damping: 1,\n maxHops: 1,\n operator: () => null,\n description:\n \"Interrogation linkage only. Tests edges do not directly move confidence.\",\n};\n","import { containsPropagationSpec } from \"./contains\";\nimport { contradictsPropagationSpec } from \"./contradicts\";\nimport { dependsOnPropagationSpec } from \"./depends-on\";\nimport { derivedFromPropagationSpec } from \"./derived-from\";\nimport { elaboratesPropagationSpec } from \"./elaborates\";\nimport { informsPropagationSpec } from \"./informs\";\nimport type {\n EdgePropagationSpec,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagation-types\";\nimport {\n canContinueTransitively as importedCanContinueTransitively,\n canTraverseHop as importedCanTraverseHop,\n isPropagationTraversalDirection as importedIsPropagationTraversalDirection,\n} from \"./propagation-types\";\nimport { refutesPropagationSpec } from \"./refutes\";\nimport { supportsPropagationSpec } from \"./supports\";\nimport { testsPropagationSpec } from \"./tests\";\n\nexport type {\n EdgePropagationSpec,\n PropagationEdgeRecord,\n PropagationEdgeType,\n PropagationSpecDirection,\n PropagationTraversalDirection,\n} from \"./propagation-types\";\n\nconst canContinueTransitively = importedCanContinueTransitively;\nconst canTraverseHop = importedCanTraverseHop;\nconst isPropagationTraversalDirection = importedIsPropagationTraversalDirection;\n\nexport {\n canContinueTransitively,\n canTraverseHop,\n isPropagationTraversalDirection,\n};\n\nexport const EDGE_PROPAGATION_SPECS: readonly EdgePropagationSpec[] = [\n supportsPropagationSpec,\n informsPropagationSpec,\n dependsOnPropagationSpec,\n derivedFromPropagationSpec,\n containsPropagationSpec,\n testsPropagationSpec,\n contradictsPropagationSpec,\n refutesPropagationSpec,\n elaboratesPropagationSpec,\n] as const;\n\nconst EDGE_PROPAGATION_SPEC_MAP = new Map<\n PropagationEdgeType,\n EdgePropagationSpec\n>(EDGE_PROPAGATION_SPECS.map((spec) => [spec.edgeType, spec]));\n\nexport function getEdgePropagationSpec(\n edgeType: string\n): EdgePropagationSpec | undefined {\n return EDGE_PROPAGATION_SPEC_MAP.get(edgeType as PropagationEdgeType);\n}\n\nexport function getEdgePropagationSpecs(): readonly EdgePropagationSpec[] {\n return EDGE_PROPAGATION_SPECS;\n}\n\nexport function getTraversalDirections(\n direction: PropagationSpecDirection\n): readonly PropagationTraversalDirection[] {\n if (isPropagationTraversalDirection(direction)) {\n return [direction];\n }\n\n return [\"outgoing\", \"incoming\"];\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; keep the existing camelCase filename.\nimport {\n hasProjectedOpinionChanged,\n mkOpinion,\n readOpinionFromRecord,\n type SLOperator,\n type SLOpinion,\n} from \"@lucern/confidence\";\nimport {\n canContinueTransitively,\n canTraverseHop,\n type EdgePropagationSpec,\n getEdgePropagationSpecs,\n getTraversalDirections,\n type PropagationEdgeRecord,\n type PropagationEdgeType,\n type PropagationTraversalDirection,\n} from \"./edges\";\nimport {\n edgeMatchesWorkspaceReasoningScope,\n nodeMatchesWorkspaceReasoningScope,\n} from \"./workspaceIsolation\";\n\nexport interface PropagationDispatchScope {\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport interface PropagationDispatchNode<TNodeId extends string = string> {\n _id?: TNodeId;\n epistemicLayer?: string;\n metadata?: unknown;\n nodeType?: string;\n opinion_a?: number;\n opinion_b?: number;\n opinion_d?: number;\n opinion_u?: number;\n publicationStatus?: string;\n tenantId?: string;\n workspaceId?: string;\n}\n\nexport type PropagationDispatchEdge<TNodeId extends string = string> =\n PropagationEdgeRecord<TNodeId>;\n\nexport interface ConfidencePropagationDispatch<\n TNodeId extends string = string,\n> {\n edgeType: PropagationEdgeType;\n hop: number;\n operator: SLOperator;\n opinion: SLOpinion;\n rationale: string;\n targetNodeId: TNodeId;\n traversedDirection: PropagationTraversalDirection;\n weight: number;\n}\n\ninterface DispatchState<TNodeId extends string = string> {\n hop: number;\n nodeId: TNodeId;\n opinion: SLOpinion;\n visitedNodeIds: Set<string>;\n}\n\ninterface CollectConfidencePropagationDispatchesArgs<\n TNodeId extends string = string,\n> {\n getNode: (\n nodeId: TNodeId\n ) => Promise<PropagationDispatchNode<TNodeId> | null | undefined>;\n queryEdges: (args: {\n direction: PropagationTraversalDirection;\n hop: number;\n nodeId: TNodeId;\n spec: EdgePropagationSpec<TNodeId>;\n }) => Promise<readonly PropagationDispatchEdge<TNodeId>[]>;\n sourceNodeId: TNodeId;\n sourceOpinion: SLOpinion;\n sourceScope?: PropagationDispatchScope;\n traversalSpecs?: readonly EdgePropagationSpec<TNodeId>[];\n}\n\ninterface TraversalScope<TNodeId extends string = string> {\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>;\n dispatchesByTargetId: Map<string, ConfidencePropagationDispatch<TNodeId>>;\n nodeCache: Map<string, PropagationDispatchNode<TNodeId> | null | undefined>;\n opinionCache: Map<string, SLOpinion>;\n traversalSpecs: readonly EdgePropagationSpec<TNodeId>[];\n}\n\nfunction nodeIdToCacheKey<TNodeId extends string>(nodeId: TNodeId): string {\n return String(nodeId);\n}\n\nfunction readNodeOpinion<TNodeId extends string>(\n node: PropagationDispatchNode<TNodeId>\n): SLOpinion {\n const metadata = (node.metadata ?? {}) as Record<string, unknown>;\n\n try {\n return readOpinionFromRecord({\n ...metadata,\n opinion_b: node.opinion_b,\n opinion_d: node.opinion_d,\n opinion_u: node.opinion_u,\n opinion_a: node.opinion_a,\n });\n } catch {\n return mkOpinion(0, 0, 1, 0.5);\n }\n}\n\nfunction resolveTraversalTargetNodeId<TNodeId extends string>(\n edge: PropagationDispatchEdge<TNodeId>,\n direction: PropagationTraversalDirection\n): TNodeId | undefined {\n const targetNodeId =\n direction === \"outgoing\" ? edge.toNodeId : edge.fromNodeId;\n return targetNodeId ?? undefined;\n}\n\nfunction buildInitialState<TNodeId extends string>(\n sourceNodeId: TNodeId,\n sourceOpinion: SLOpinion\n): DispatchState<TNodeId> {\n return {\n nodeId: sourceNodeId,\n opinion: sourceOpinion,\n hop: 0,\n visitedNodeIds: new Set([nodeIdToCacheKey(sourceNodeId)]),\n };\n}\n\nfunction extendVisited<TNodeId extends string>(\n currentVisited: Set<string>,\n targetNodeId: TNodeId\n): Set<string> {\n return new Set([...currentVisited, nodeIdToCacheKey(targetNodeId)]);\n}\n\nfunction makeTransitiveState<TNodeId extends string>(\n current: DispatchState<TNodeId>,\n targetNodeId: TNodeId,\n projectedOpinion: SLOpinion,\n nextHop: number\n): DispatchState<TNodeId> {\n return {\n nodeId: targetNodeId,\n opinion: projectedOpinion,\n hop: nextHop,\n visitedNodeIds: extendVisited(current.visitedNodeIds, targetNodeId),\n };\n}\n\nfunction makeDispatchRecord<TNodeId extends string>(\n targetNodeId: TNodeId,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n projectedOpinion: SLOpinion,\n nextHop: number,\n result: NonNullable<ReturnType<EdgePropagationSpec<TNodeId>[\"operator\"]>>,\n existingDispatch?: ConfidencePropagationDispatch<TNodeId>\n): ConfidencePropagationDispatch<TNodeId> {\n return {\n targetNodeId,\n edgeType: spec.edgeType,\n traversedDirection: direction,\n weight: edge.weight ?? 1,\n opinion: projectedOpinion,\n operator: result.operator,\n rationale: existingDispatch\n ? `${existingDispatch.rationale}; ${result.rationale}`\n : result.rationale,\n hop: nextHop,\n };\n}\n\nasync function loadCachedNode<TNodeId extends string>(\n scope: TraversalScope<TNodeId>,\n nodeId: TNodeId\n): Promise<PropagationDispatchNode<TNodeId> | null | undefined> {\n const cacheKey = nodeIdToCacheKey(nodeId);\n if (!scope.nodeCache.has(cacheKey)) {\n scope.nodeCache.set(cacheKey, await scope.args.getNode(nodeId));\n }\n\n return scope.nodeCache.get(cacheKey) ?? null;\n}\n\nasync function collectTargetDispatch<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n direction: PropagationTraversalDirection,\n edge: PropagationDispatchEdge<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceScope = scope.args.sourceScope;\n if (sourceScope && !edgeMatchesWorkspaceReasoningScope(edge, sourceScope)) {\n return;\n }\n\n const targetNodeId = resolveTraversalTargetNodeId(edge, direction);\n if (!targetNodeId) {\n return;\n }\n\n const targetNodeIdKey = nodeIdToCacheKey(targetNodeId);\n if (state.visitedNodeIds.has(targetNodeIdKey)) {\n return;\n }\n\n const targetNode = await loadCachedNode(scope, targetNodeId);\n if (targetNode?.nodeType !== \"belief\") {\n return;\n }\n\n if (\n sourceScope &&\n !nodeMatchesWorkspaceReasoningScope(targetNode, sourceScope)\n ) {\n return;\n }\n\n const targetOpinion =\n scope.opinionCache.get(targetNodeIdKey) ?? readNodeOpinion(targetNode);\n const result = spec.operator(state.opinion, targetOpinion, edge, {\n hop: nextHop,\n sourceNodeId: state.nodeId,\n targetNodeId,\n traversedDirection: direction,\n spec,\n });\n\n if (!(result && hasProjectedOpinionChanged(targetOpinion, result.opinion))) {\n return;\n }\n\n const projectedOpinion = mkOpinion(\n result.opinion.b,\n result.opinion.d,\n result.opinion.u,\n result.opinion.a\n );\n scope.opinionCache.set(targetNodeIdKey, projectedOpinion);\n\n const existingDispatch = scope.dispatchesByTargetId.get(targetNodeIdKey);\n scope.dispatchesByTargetId.set(\n targetNodeIdKey,\n makeDispatchRecord(\n targetNodeId,\n spec,\n direction,\n edge,\n projectedOpinion,\n nextHop,\n result,\n existingDispatch\n )\n );\n\n if (canContinueTransitively(spec, nextHop)) {\n queue.push(\n makeTransitiveState(state, targetNodeId, projectedOpinion, nextHop)\n );\n }\n}\n\nasync function processTraversalSpec<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n nextHop: number,\n spec: EdgePropagationSpec<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const sourceNodeId = state.nodeId;\n for (const direction of getTraversalDirections(spec.direction)) {\n const edges = await scope.args.queryEdges({\n nodeId: sourceNodeId,\n spec,\n direction,\n hop: nextHop,\n });\n\n for (const edge of edges) {\n await collectTargetDispatch(\n state,\n nextHop,\n spec,\n direction,\n edge,\n queue,\n scope\n );\n }\n }\n}\n\nasync function processQueuedState<TNodeId extends string>(\n state: DispatchState<TNodeId>,\n queue: DispatchState<TNodeId>[],\n scope: TraversalScope<TNodeId>\n): Promise<void> {\n const nextHop = state.hop + 1;\n for (const spec of scope.traversalSpecs) {\n if (!canTraverseHop(spec, nextHop)) {\n continue;\n }\n\n await processTraversalSpec(state, nextHop, spec, queue, scope);\n }\n}\n\nfunction sortDispatches<TNodeId extends string>(\n dispatches: Iterable<ConfidencePropagationDispatch<TNodeId>>\n): ConfidencePropagationDispatch<TNodeId>[] {\n return Array.from(dispatches).sort((left, right) => {\n if (left.hop !== right.hop) {\n return left.hop - right.hop;\n }\n return String(left.targetNodeId).localeCompare(String(right.targetNodeId));\n });\n}\n\nexport async function collectConfidencePropagationDispatches<\n TNodeId extends string = string,\n>(\n args: CollectConfidencePropagationDispatchesArgs<TNodeId>\n): Promise<ConfidencePropagationDispatch<TNodeId>[]> {\n const dispatchesByTargetId = new Map<\n string,\n ConfidencePropagationDispatch<TNodeId>\n >();\n const opinionCache = new Map<string, SLOpinion>();\n const nodeCache = new Map<\n string,\n PropagationDispatchNode<TNodeId> | null | undefined\n >();\n const traversalSpecs = (args.traversalSpecs ??\n getEdgePropagationSpecs()) as readonly EdgePropagationSpec<TNodeId>[];\n\n const scope: TraversalScope<TNodeId> = {\n args,\n dispatchesByTargetId,\n opinionCache,\n nodeCache,\n traversalSpecs,\n };\n\n const queue: DispatchState<TNodeId>[] = [\n buildInitialState(args.sourceNodeId, args.sourceOpinion),\n ];\n\n while (queue.length > 0) {\n const state = queue.shift();\n if (!state) {\n continue;\n }\n\n await processQueuedState(state, queue, scope);\n }\n\n return sortDispatches(dispatchesByTargetId.values());\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Split confidence operations out of epistemicBeliefs.ts. */\n\nimport { requireScopeWriteAccess } from \"@lucern/access-control/access\";\nimport {\n confidenceFromSL,\n detectTupleContradiction,\n evaluateTupleContradictionTransition,\n mkOpinion,\n type SLOperator,\n} from \"@lucern/confidence\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport {\n isPreValidationBeliefStatus,\n promoteBeliefStatusAfterScoring,\n} from \"./beliefLifecycle\";\nimport {\n collectConfidencePropagationDispatches,\n type PropagationDispatchEdge,\n type PropagationDispatchNode,\n} from \"./confidencePropagationDispatch\";\nimport type { Id, MutationCtx } from \"./convex\";\nimport { internal, internalMutation } from \"./convex\";\nimport {\n type BeliefConfidenceTrigger,\n buildBeliefConfidenceRow,\n deriveTupleContradictionSeverity,\n formatTupleContradictionDescription,\n getActiveConfidencePolicy,\n hasCompletedWorktreeForBelief,\n readBeliefOpinionSnapshot,\n readTupleContradictedFlag,\n resolveBeliefStatus,\n throwStructuredMutationError,\n} from \"./epistemicBeliefs.helpers\";\nimport { resolveNodeScopeForWorkspaceIsolation } from \"./workspaceIsolation\";\n\ninterface EdgePropagationIndexScope {\n eq(field: string, value: unknown): EdgePropagationIndexScope;\n}\n\ninterface BeliefConfidenceChangeArgs {\n authenticatedUserId: string;\n baseRate?: number;\n belief: number;\n disbelief: number;\n nodeId: Id<\"epistemicNodes\">;\n rationale?: string;\n slOperator?: SLOperator;\n trigger: BeliefConfidenceTrigger;\n triggeringEvidenceId?: Id<\"epistemicNodes\">;\n triggeringWorktreeId?: string;\n uncertainty: number;\n}\n\ninterface BeliefConfidenceChangeResult {\n beliefConfidenceId: Id<\"beliefConfidence\">;\n newConfidence: number;\n nodeId: Id<\"epistemicNodes\">;\n opinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n}\n\ninterface ConfidenceBeliefNode\n extends PropagationDispatchNode<Id<\"epistemicNodes\">> {\n _id: Id<\"epistemicNodes\">;\n beliefStatus?: unknown;\n confidence?: number;\n globalId?: string;\n metadata?: Record<string, unknown>;\n nodeType: \"belief\";\n predictionMeta?: Record<string, unknown>;\n projectId: string;\n status?: string;\n topicId?: string;\n tupleContradicted?: boolean;\n}\n\ninterface PropagateConfidenceChangeArgs {\n nodeId: Id<\"epistemicNodes\">;\n opinion_a: number;\n opinion_b: number;\n opinion_d: number;\n opinion_u: number;\n userId: string;\n}\n\ntype ConfidencePolicy = Awaited<ReturnType<typeof getActiveConfidencePolicy>>;\ntype TupleTransition = ReturnType<typeof evaluateTupleContradictionTransition>;\n\ninterface ConfidenceChangeState {\n confidencePolicy: ConfidencePolicy;\n currentBeliefStatus: ReturnType<typeof resolveBeliefStatus>;\n derivedConfidence: number;\n existingMetadata: Record<string, unknown>;\n isFirstScoring: boolean;\n newBeliefStatus: ReturnType<typeof promoteBeliefStatusAfterScoring>;\n nextOpinion: { a: number; b: number; d: number; u: number };\n previousConfidence: number;\n previousTupleContradicted: boolean;\n storedRationale: string;\n tupleContradictionDescription: string;\n tupleTransition: TupleTransition;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? (value as Id<TableName>)\n : undefined;\n}\n\nfunction readOptionalBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction readConfidenceBeliefNode(value: unknown): ConfidenceBeliefNode | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n const projectId = readOptionalString(value.projectId);\n if (!(id && nodeType === \"belief\" && projectId)) {\n return null;\n }\n\n const node: ConfidenceBeliefNode = {\n _id: id,\n nodeType,\n projectId,\n };\n const confidence = readOptionalNumber(value.confidence);\n const epistemicLayer = readOptionalString(value.epistemicLayer);\n const globalId = readOptionalString(value.globalId);\n const metadata = readRecord(value.metadata);\n const opinionA = readOptionalNumber(value.opinion_a);\n const opinionB = readOptionalNumber(value.opinion_b);\n const opinionD = readOptionalNumber(value.opinion_d);\n const opinionU = readOptionalNumber(value.opinion_u);\n const predictionMeta = readRecord(value.predictionMeta);\n const publicationStatus = readOptionalString(value.publicationStatus);\n const status = readOptionalString(value.status);\n const tenantId = readOptionalString(value.tenantId);\n const topicId = readOptionalString(value.topicId);\n const tupleContradicted = readOptionalBoolean(value.tupleContradicted);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (confidence !== undefined) {\n node.confidence = confidence;\n }\n if (epistemicLayer !== undefined) {\n node.epistemicLayer = epistemicLayer;\n }\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (metadata !== undefined) {\n node.metadata = metadata;\n }\n if (opinionA !== undefined) {\n node.opinion_a = opinionA;\n }\n if (opinionB !== undefined) {\n node.opinion_b = opinionB;\n }\n if (opinionD !== undefined) {\n node.opinion_d = opinionD;\n }\n if (opinionU !== undefined) {\n node.opinion_u = opinionU;\n }\n if (predictionMeta !== undefined) {\n node.predictionMeta = predictionMeta;\n }\n if (publicationStatus !== undefined) {\n node.publicationStatus = publicationStatus;\n }\n if (status !== undefined) {\n node.status = status;\n }\n if (tenantId !== undefined) {\n node.tenantId = tenantId;\n }\n if (topicId !== undefined) {\n node.topicId = topicId;\n }\n if (tupleContradicted !== undefined) {\n node.tupleContradicted = tupleContradicted;\n }\n if (workspaceId !== undefined) {\n node.workspaceId = workspaceId;\n }\n\n return node;\n}\n\nfunction readPropagationEdge(\n value: unknown\n): PropagationDispatchEdge<Id<\"epistemicNodes\">> | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const edgeType = readOptionalString(value.edgeType);\n if (!edgeType) {\n return null;\n }\n\n const edge: PropagationDispatchEdge<Id<\"epistemicNodes\">> = { edgeType };\n const fromNodeId = readConvexId<\"epistemicNodes\">(value.fromNodeId);\n const tenantId = readOptionalString(value.tenantId);\n const toNodeId = readConvexId<\"epistemicNodes\">(value.toNodeId);\n const weight = readOptionalNumber(value.weight);\n const workspaceId = readOptionalString(value.workspaceId);\n\n if (fromNodeId !== undefined) {\n edge.fromNodeId = fromNodeId;\n }\n if (tenantId !== undefined) {\n edge.tenantId = tenantId;\n }\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n if (weight !== undefined) {\n edge.weight = weight;\n }\n if (workspaceId !== undefined) {\n edge.workspaceId = workspaceId;\n }\n\n return edge;\n}\n\nfunction readRowList<T>(\n values: readonly unknown[],\n reader: (value: unknown) => T | null\n): T[] {\n return values.flatMap((value) => {\n const row = reader(value);\n return row ? [row] : [];\n });\n}\n\nexport async function applyBeliefConfidenceChange(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<BeliefConfidenceChangeResult> {\n const now = Date.now();\n const node = await requireConfidenceBeliefNode(ctx, args);\n const state = await buildConfidenceChangeState(ctx, node, args);\n await assertConfidenceScoringPolicySatisfied(ctx, args, state);\n const tupleContradictionId = await createTupleContradictionIfNeeded(\n ctx,\n args,\n node,\n state\n );\n await patchBeliefConfidenceState(ctx, args, state);\n await scheduleFirstScoringThemeEdges(ctx, args, node, state);\n const beliefConfidenceId = await insertBeliefConfidenceRecord(\n ctx,\n args,\n state,\n tupleContradictionId,\n now\n );\n await ctx.scheduler.runAfter(0, internal.neo4jSync.syncNodeToNeo4j, {\n nodeId: args.nodeId,\n operation: \"upsert\",\n });\n await insertConfidenceAudit(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await insertTupleTransitionAuditIfNeeded(\n ctx,\n args,\n node,\n state,\n tupleContradictionId,\n now\n );\n await scheduleConfidenceFollowups(ctx, args, node, state);\n\n return {\n nodeId: args.nodeId,\n previousConfidence: state.previousConfidence,\n newConfidence: state.derivedConfidence,\n opinion: state.nextOpinion,\n beliefConfidenceId,\n };\n}\n\nasync function requireConfidenceBeliefNode(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceBeliefNode> {\n const node = readConfidenceBeliefNode(await ctx.db.get(args.nodeId));\n if (!node) {\n throwStructuredMutationError({\n message: \"Node not found.\",\n status: 404,\n code: \"NOT_FOUND\",\n invariantCode: \"belief.exists\",\n suggestion:\n \"Verify nodeId points to an existing node before appending SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n }\n await requireScopeWriteAccess(ctx, node.projectId, args.authenticatedUserId);\n return node;\n}\n\nasync function buildConfidenceChangeState(\n ctx: MutationCtx,\n node: ConfidenceBeliefNode,\n args: BeliefConfidenceChangeArgs\n): Promise<ConfidenceChangeState> {\n const existingMetadata = readNodeMetadata(node);\n const currentBeliefStatus = resolveBeliefStatus(node, existingMetadata);\n const confidencePolicy = await getActiveConfidencePolicy(ctx);\n const previousConfidence = node.confidence || 0.5;\n const predictionMeta = node.predictionMeta || existingMetadata.predictionMeta;\n const previousOpinion = readBeliefOpinionSnapshot(node, existingMetadata);\n const nextOpinion = {\n b: args.belief,\n d: args.disbelief,\n u: args.uncertainty,\n a: args.baseRate ?? 0.5,\n };\n const derivedConfidence = confidenceFromSL(\n nextOpinion.b,\n nextOpinion.d,\n nextOpinion.u,\n nextOpinion.a\n );\n const isFirstScoring =\n typeof node.confidence !== \"number\" || !Number.isFinite(node.confidence);\n const previousTupleContradicted =\n readTupleContradictedFlag(node.tupleContradicted) ??\n readTupleContradictedFlag(existingMetadata.tupleContradicted) ??\n detectTupleContradiction(\n previousOpinion,\n confidencePolicy.tupleContradiction.beliefThreshold,\n confidencePolicy.tupleContradiction.disbeliefThreshold\n );\n const tupleTransition = evaluateTupleContradictionTransition({\n previousTupleContradicted,\n opinion: nextOpinion,\n policy: confidencePolicy.tupleContradiction,\n });\n const tupleContradictionDescription = formatTupleContradictionDescription({\n opinion: nextOpinion,\n policy: tupleTransition.policy,\n });\n\n const newBeliefStatus = promoteBeliefStatusAfterScoring(currentBeliefStatus, {\n confidence: derivedConfidence,\n predictionMeta,\n metadata: existingMetadata,\n });\n const storedRationale =\n args.rationale ??\n `Confidence changed from ${previousConfidence.toFixed(2)} (nodeId: ${args.nodeId})`;\n\n return {\n confidencePolicy,\n currentBeliefStatus,\n derivedConfidence,\n existingMetadata,\n isFirstScoring,\n newBeliefStatus,\n nextOpinion,\n previousConfidence,\n previousTupleContradicted,\n storedRationale,\n tupleContradictionDescription,\n tupleTransition,\n };\n}\n\nfunction readNodeMetadata(node: ConfidenceBeliefNode): Record<string, unknown> {\n return node.metadata ?? {};\n}\n\nasync function assertConfidenceScoringPolicySatisfied(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n if (\n state.confidencePolicy.scoringMode !== \"after_worktree\" ||\n !isPreValidationBeliefStatus(state.currentBeliefStatus)\n ) {\n return;\n }\n const hasCompletedWorktree = await hasCompletedWorktreeForBelief(\n ctx,\n args.nodeId\n );\n if (hasCompletedWorktree) {\n return;\n }\n throwStructuredMutationError({\n message:\n \"Cannot score belief before worktree completion. Complete a worktree that tests this belief first.\",\n status: 409,\n code: \"CONFLICT\",\n invariantCode: \"belief.confidence_append_only\",\n suggestion:\n \"Complete a worktree linked to this belief before recording SL scoring.\",\n details: { nodeId: args.nodeId },\n });\n}\n\nasync function createTupleContradictionIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<Id<\"contradictions\"> | undefined> {\n if (!state.tupleTransition.crossedIntoTupleContradiction) {\n return;\n }\n return (await ctx.runMutation(\"contradictions:create\", {\n projectId: node.projectId,\n topicId: node.topicId,\n beliefId: args.nodeId,\n beliefBId: args.nodeId,\n supportingInsightIds: [],\n contradictingInsightIds: [],\n severity: deriveTupleContradictionSeverity(node),\n source: \"tuple_space\",\n detectionMethod: \"agent\",\n description: state.tupleContradictionDescription,\n createdBy: args.authenticatedUserId,\n })) as Id<\"contradictions\">;\n}\n\nasync function patchBeliefConfidenceState(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState\n): Promise<void> {\n await ctx.db.patch(args.nodeId, {\n confidence: state.derivedConfidence,\n beliefStatus: state.newBeliefStatus,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n updatedAt: Date.now(),\n opinion_b: state.nextOpinion.b,\n opinion_d: state.nextOpinion.d,\n opinion_u: state.nextOpinion.u,\n opinion_a: state.nextOpinion.a,\n metadata: {\n ...state.existingMetadata,\n beliefStatus: state.newBeliefStatus,\n slBelief: state.nextOpinion.b,\n slDisbelief: state.nextOpinion.d,\n slUncertainty: state.nextOpinion.u,\n slBaseRate: state.nextOpinion.a,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n },\n });\n}\n\nasync function scheduleFirstScoringThemeEdges(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (!state.isFirstScoring) {\n return;\n }\n const themeNodes = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic\", (q) =>\n q.eq(\"topicId\", node.topicId || node.projectId)\n )\n .filter((q) => q.eq(q.field(\"nodeType\"), \"theme\"))\n .collect();\n\n for (const theme of themeNodes) {\n if (!(theme.globalId && node.globalId)) {\n continue;\n }\n await ctx.scheduler.runAfter(0, internal.neo4jEdgeAPI.createEdge, {\n globalId: `edge-${node.globalId}-relates_to_thesis-${theme.globalId}`,\n fromGlobalId: node.globalId,\n toGlobalId: theme.globalId,\n edgeType: \"relates_to_thesis\",\n weight: state.derivedConfidence,\n createdBy: args.authenticatedUserId,\n topicId: String(node.projectId),\n fromNodeType: \"belief\",\n toNodeType: \"theme\",\n fromLayer: \"L3\",\n toLayer: \"L3\",\n });\n }\n}\n\nasync function insertBeliefConfidenceRecord(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<Id<\"beliefConfidence\">> {\n return await ctx.db.insert(\"beliefConfidence\", {\n ...buildBeliefConfidenceRow({\n beliefId: args.nodeId as Id<\"epistemicNodes\">,\n belief: state.nextOpinion.b,\n disbelief: state.nextOpinion.d,\n uncertainty: state.nextOpinion.u,\n baseRate: state.nextOpinion.a,\n trigger: args.trigger,\n rationale: state.storedRationale,\n assessedBy: args.authenticatedUserId,\n assessedAt: now,\n slOperator: args.slOperator,\n triggeringEvidenceId: args.triggeringEvidenceId,\n triggeringContradictionId: tupleContradictionId,\n triggeringWorktreeId: args.triggeringWorktreeId,\n }),\n });\n}\n\nasync function insertConfidenceAudit(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"confidence_changed\",\n previousState: {\n confidence: state.previousConfidence,\n tupleContradicted: state.previousTupleContradicted,\n },\n newState: {\n opinion: state.nextOpinion,\n confidence: state.derivedConfidence,\n trigger: args.trigger,\n rationale: state.storedRationale,\n tupleContradicted: state.tupleTransition.tupleContradicted,\n tupleContradictionPolicy: state.tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n}\n\nasync function insertTupleTransitionAuditIfNeeded(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState,\n tupleContradictionId: Id<\"contradictions\"> | undefined,\n now: number\n): Promise<void> {\n if (\n !(\n state.tupleTransition.crossedIntoTupleContradiction ||\n state.tupleTransition.crossedOutOfTupleContradiction\n )\n ) {\n return;\n }\n await ctx.db.insert(\"epistemicAudit\", {\n entityType: \"belief\",\n entityId: args.nodeId,\n changeType: \"updated\",\n previousState: { tupleContradicted: state.previousTupleContradicted },\n newState: {\n tupleContradicted: state.tupleTransition.tupleContradicted,\n action: state.tupleTransition.crossedIntoTupleContradiction\n ? \"tuple_contradiction_detected\"\n : \"tuple_contradiction_cleared\",\n opinion: state.nextOpinion,\n tupleContradictionPolicy: state.tupleTransition.policy,\n ...(tupleContradictionId\n ? { tupleContradictionId: String(tupleContradictionId) }\n : {}),\n },\n rationale: tupleAuditRationale(state),\n changedBy: args.authenticatedUserId,\n isAgent: false,\n changedAt: now,\n projectId: node.projectId,\n topicId: node.topicId,\n });\n}\n\nfunction tupleAuditRationale(state: ConfidenceChangeState): string {\n if (state.tupleTransition.crossedIntoTupleContradiction) {\n return state.tupleContradictionDescription;\n }\n return `Tuple-space contradiction cleared: b=${state.nextOpinion.b.toFixed(2)}, d=${state.nextOpinion.d.toFixed(2)} no longer exceed the configured policy thresholds.`;\n}\n\nasync function scheduleConfidenceFollowups(\n ctx: MutationCtx,\n args: BeliefConfidenceChangeArgs,\n node: ConfidenceBeliefNode,\n state: ConfidenceChangeState\n): Promise<void> {\n if (Math.abs(state.derivedConfidence - state.previousConfidence) >= 0.15) {\n await ctx.scheduler.runAfter(\n 5000,\n internal.bi.contradictionSemanticDetector.scanAffectedBeliefs,\n {\n beliefId: args.nodeId as string,\n projectId: node.projectId,\n }\n );\n }\n if (node.workspaceId && node.tenantId) {\n await ctx.scheduler.runAfter(\n 0,\n internal.publication.evaluateNodePublication,\n { nodeId: args.nodeId }\n );\n }\n}\n\n/**\n * Returns the pressure direction label for use in the propagation rationale\n * string. The ledger trigger is always \"propagation\" (stage-1 containment,\n * AC.1 adjudication P1). The direction is carried in the rationale only.\n */\nfunction propagationPressureLabel(\n edgeType: string,\n weight: number\n): \"supportive\" | \"contradictory\" {\n if (edgeType === \"contradicts\" || edgeType === \"refutes\") {\n return \"contradictory\";\n }\n if ((edgeType === \"supports\" || edgeType === \"informs\") && weight < 0) {\n return \"contradictory\";\n }\n return \"supportive\";\n}\n\n// =============================================================================\n// SL PROPAGATION — EDGE-DEFINED OPINION PROPAGATION (EK-7, LKC-5)\n// =============================================================================\n\n/**\n * Propagate a confidence change through graph edges whose specs allow it.\n *\n * After a belief is scored, this function:\n * 1. Reads the graph-primitives edge propagation specs\n * 2. Traverses matching incoming/outgoing/bidirectional edges hop by hop\n * 3. Applies the edge operator with per-hop damping and hop limits\n * 4. Writes propagated opinions as new beliefConfidence entries\n */\nexport const propagateConfidenceChange = internalMutation({\n args: {\n nodeId: v.id(\"epistemicNodes\"),\n opinion_b: v.number(),\n opinion_d: v.number(),\n opinion_u: v.number(),\n opinion_a: v.number(),\n userId: v.string(),\n },\n returns: permissiveReturn,\n handler: async (ctx: MutationCtx, args: PropagateConfidenceChangeArgs) => {\n const sourceOpinion = mkOpinion(\n args.opinion_b,\n args.opinion_d,\n args.opinion_u,\n args.opinion_a\n );\n\n const sourceNode = readConfidenceBeliefNode(await ctx.db.get(args.nodeId));\n const sourceScope = await resolveNodeScopeForWorkspaceIsolation(\n ctx,\n sourceNode\n );\n const dispatches = await collectConfidencePropagationDispatches({\n sourceNodeId: args.nodeId,\n sourceOpinion,\n sourceScope,\n queryEdges: async ({ nodeId, spec, direction }) =>\n readRowList(\n await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\n direction === \"outgoing\" ? \"by_from_type\" : \"by_to_type\",\n (q: EdgePropagationIndexScope) =>\n direction === \"outgoing\"\n ? q.eq(\"fromNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n : q.eq(\"toNodeId\", nodeId).eq(\"edgeType\", spec.edgeType)\n )\n .collect(),\n readPropagationEdge\n ),\n getNode: async (nodeId) =>\n readConfidenceBeliefNode(await ctx.db.get(nodeId)),\n });\n\n for (const dispatch of dispatches) {\n const pressureLabel = propagationPressureLabel(\n dispatch.edgeType,\n dispatch.weight\n );\n await applyBeliefConfidenceChange(ctx, {\n nodeId: dispatch.targetNodeId,\n belief: dispatch.opinion.b,\n disbelief: dispatch.opinion.d,\n uncertainty: dispatch.opinion.u,\n baseRate: dispatch.opinion.a,\n trigger: \"propagation\",\n rationale: `SL propagation via ${dispatch.edgeType} edge (pressure: ${pressureLabel}): ${dispatch.rationale}`,\n authenticatedUserId: args.userId,\n slOperator: dispatch.operator as SLOperator,\n });\n }\n\n return {\n propagated: dispatches.map((dispatch) => ({\n targetNodeId: String(dispatch.targetNodeId),\n edgeType: dispatch.edgeType,\n operator: dispatch.operator,\n })),\n count: dispatches.length,\n };\n },\n});\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Metric helpers and evidential snapshots used by contract evaluators. */\n\nimport type { Id } from \"./convex\";\nimport {\n buildComparisonRationale,\n buildEvidentialRationale,\n compareMetricValue,\n getEvaluatorInputRecord,\n parseEvidentialEvaluatorConfig,\n parseMarketIndexComparatorConfig,\n parseMetricCheckerConfig,\n parseReferenceCheckCounterConfig,\n parseTemporalDeadlineConfig,\n pickFiniteNumber,\n resolveComparisonResult,\n} from \"./epistemicContractHelpers\";\nimport type {\n ContractReadCtx,\n ContradictionStatusCounts,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n EvidenceEdgeDoc,\n EvidenceFreshness,\n EvidenceNodeDoc,\n EvidentialMetric,\n EvidentialMetricSnapshot,\n} from \"./epistemicContracts.types\";\n\nconst ACTIVE_CONTRADICTION_STATUSES = new Set([\n \"unresolved\",\n \"investigating\",\n \"accepted_as_permanent\",\n]);\n\nconst DEPENDENT_EDGE_TYPES = new Set([\"depends_on\"]);\n\ninterface ContradictionIndexQuery {\n eq(field: \"beliefId\", value: Id<\"epistemicNodes\">): ContradictionIndexQuery;\n}\n\ninterface ContradictionQuery {\n withIndex(\n index: \"by_beliefId\",\n builder: (q: ContradictionIndexQuery) => ContradictionIndexQuery\n ): {\n collect(): Promise<ContradictionStatusRow[]>;\n };\n}\n\ninterface ContradictionReadDb {\n query(table: \"contradictions\"): ContradictionQuery;\n}\n\ninterface ContradictionStatusRow {\n resolutionStatus?: string;\n status?: string;\n}\n\ninterface MetricNodeDoc extends EvidenceNodeDoc {\n nodeType: string;\n}\n\ninterface IncomingEdgeRow extends EvidenceEdgeDoc {\n _id?: Id<\"epistemicEdges\">;\n edgeType?: string;\n targetGlobalId?: string;\n toGlobalId?: string;\n toNodeId?: string;\n toUuid?: string;\n}\n\nfunction classifyContradictionStatus(status: unknown): \"active\" | \"resolved\" {\n if (typeof status !== \"string\") {\n return \"active\";\n }\n\n if (ACTIVE_CONTRADICTION_STATUSES.has(status)) {\n return \"active\";\n }\n\n if (\n status === \"resolved_support\" ||\n status === \"resolved_contra\" ||\n status === \"belief_forked\"\n ) {\n return \"resolved\";\n }\n\n return \"resolved\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0\n ? value\n : undefined;\n}\n\nfunction readConvexId<TableName extends string>(\n value: unknown\n): Id<TableName> | undefined {\n const normalized = readOptionalString(value);\n return normalized as Id<TableName> | undefined;\n}\n\nfunction readMetricNodeDoc(value: unknown): MetricNodeDoc | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const id = readConvexId<\"epistemicNodes\">(value._id);\n const nodeType = readOptionalString(value.nodeType);\n if (!(id && nodeType)) {\n return null;\n }\n\n const node: MetricNodeDoc = { _id: id, nodeType };\n const globalId = readOptionalString(value.globalId);\n if (globalId !== undefined) {\n node.globalId = globalId;\n }\n if (\"metadata\" in value) {\n node.metadata = value.metadata;\n }\n const status = readOptionalString(value.status);\n if (status !== undefined) {\n node.status = status;\n }\n return node;\n}\n\nfunction readIncomingEdgeRow(value: unknown): IncomingEdgeRow | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const fromNodeId = readOptionalString(value.fromNodeId);\n if (!fromNodeId) {\n return null;\n }\n\n const edge: IncomingEdgeRow = { fromNodeId };\n const id = readConvexId<\"epistemicEdges\">(value._id);\n if (id !== undefined) {\n edge._id = id;\n }\n const edgeType = readOptionalString(value.edgeType);\n if (edgeType !== undefined) {\n edge.edgeType = edgeType;\n }\n const fromGlobalId = readOptionalString(value.fromGlobalId);\n if (fromGlobalId !== undefined) {\n edge.fromGlobalId = fromGlobalId;\n }\n const fromUuid = readOptionalString(value.fromUuid);\n if (fromUuid !== undefined) {\n edge.fromUuid = fromUuid;\n }\n const sourceGlobalId = readOptionalString(value.sourceGlobalId);\n if (sourceGlobalId !== undefined) {\n edge.sourceGlobalId = sourceGlobalId;\n }\n const targetGlobalId = readOptionalString(value.targetGlobalId);\n if (targetGlobalId !== undefined) {\n edge.targetGlobalId = targetGlobalId;\n }\n const toGlobalId = readOptionalString(value.toGlobalId);\n if (toGlobalId !== undefined) {\n edge.toGlobalId = toGlobalId;\n }\n const toNodeId = readOptionalString(value.toNodeId);\n if (toNodeId !== undefined) {\n edge.toNodeId = toNodeId;\n }\n const toUuid = readOptionalString(value.toUuid);\n if (toUuid !== undefined) {\n edge.toUuid = toUuid;\n }\n const weight = readOptionalNumber(value.weight);\n if (weight !== undefined) {\n edge.weight = weight;\n }\n\n for (const timestampField of [\"_creationTime\", \"createdAt\", \"updatedAt\"]) {\n const timestamp = readOptionalNumber(value[timestampField]);\n if (timestamp !== undefined) {\n edge[timestampField as \"_creationTime\" | \"createdAt\" | \"updatedAt\"] =\n timestamp;\n }\n }\n\n return edge;\n}\n\nfunction getEdgeTimestamp(edge: {\n updatedAt?: unknown;\n createdAt?: unknown;\n _creationTime?: unknown;\n}): number | null {\n if (typeof edge.updatedAt === \"number\") {\n return edge.updatedAt;\n }\n if (typeof edge.createdAt === \"number\") {\n return edge.createdAt;\n }\n if (typeof edge._creationTime === \"number\") {\n return edge._creationTime;\n }\n return null;\n}\n\nasync function collectNodeEndpointRefs(\n ctx: ContractReadCtx,\n nodeId: Id<\"epistemicNodes\">\n): Promise<string[]> {\n const refs = new Set<string>([String(nodeId)]);\n const node = readMetricNodeDoc(await ctx.db.get(nodeId));\n if (node?.globalId) {\n refs.add(node.globalId);\n }\n return [...refs];\n}\n\nasync function collectIncomingEdgeRows(\n ctx: ContractReadCtx,\n nodeId: Id<\"epistemicNodes\">,\n edgeType?: string\n): Promise<IncomingEdgeRow[]> {\n const refs = await collectNodeEndpointRefs(ctx, nodeId);\n const seen = new Set<string>();\n const edges: IncomingEdgeRow[] = [];\n\n for (const ref of refs) {\n const rows =\n edgeType === undefined\n ? await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to\", (q) => q.eq(\"toNodeId\", ref))\n .collect()\n : await ctx.db\n .query(\"epistemicEdges\")\n .withIndex(\"by_to_type\", (q) =>\n q.eq(\"toNodeId\", ref).eq(\"edgeType\", edgeType)\n )\n .collect();\n\n for (const row of rows) {\n const edge = readIncomingEdgeRow(row);\n if (!edge) {\n continue;\n }\n if (edgeType !== undefined && edge.edgeType !== edgeType) {\n continue;\n }\n const key =\n edge._id === undefined\n ? `${edge.fromNodeId}->${edge.toNodeId ?? ref}:${edge.edgeType ?? \"\"}`\n : String(edge._id);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n edges.push(edge);\n }\n }\n\n return edges;\n}\n\nfunction sourceEndpointRefs(edge: IncomingEdgeRow): string[] {\n return [\n edge.fromNodeId,\n edge.sourceGlobalId,\n edge.fromGlobalId,\n edge.fromUuid,\n ].filter((value): value is string => value !== undefined);\n}\n\nasync function resolveEndpointNode(\n ctx: ContractReadCtx,\n refs: readonly string[]\n): Promise<MetricNodeDoc | null> {\n const candidates = refs\n .map((value) => value.trim())\n .filter(\n (value, index, values) =>\n value.length > 0 && values.indexOf(value) === index\n );\n\n for (const candidate of candidates) {\n try {\n const direct = readMetricNodeDoc(\n await ctx.db.get(candidate as Id<\"epistemicNodes\">)\n );\n if (direct) {\n return direct;\n }\n } catch {\n // Canonical global endpoints are expected to miss direct document lookup.\n }\n\n const byGlobalId = readMetricNodeDoc(\n await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_globalId\", (q) => q.eq(\"globalId\", candidate))\n .first()\n );\n if (byGlobalId) {\n return byGlobalId;\n }\n }\n\n return null;\n}\n\nasync function getEvidenceLinks(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }>> {\n const edges = await collectIncomingEdgeRows(ctx, beliefNodeId, \"informs\");\n\n if (edges.length === 0) {\n return [];\n }\n\n const links: Array<{ edge: EvidenceEdgeDoc; node: EvidenceNodeDoc }> = [];\n for (const edge of edges) {\n const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));\n if (node?.nodeType !== \"evidence\" || node.status === \"archived\") {\n continue;\n }\n links.push({ edge, node });\n }\n\n return links;\n}\n\nfunction getEvidenceTags(node: EvidenceNodeDoc): string[] {\n const metadata =\n node.metadata && typeof node.metadata === \"object\"\n ? (node.metadata as Record<string, unknown>)\n : null;\n const tags = metadata?.tags;\n if (!Array.isArray(tags)) {\n return [];\n }\n return tags.filter((tag): tag is string => typeof tag === \"string\");\n}\n\nexport async function computeEvidenceCountMetric(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n return (await getEvidenceLinks(ctx, beliefNodeId)).length;\n}\n\nasync function computeTaggedEvidenceCount(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n tag: string;\n caseSensitive?: boolean;\n}): Promise<{ count: number; matchedEvidenceIds: string[] }> {\n const expectedTag = args.caseSensitive ? args.tag : args.tag.toLowerCase();\n const matchedEvidenceIds = (\n await getEvidenceLinks(args.ctx, args.beliefNodeId)\n )\n .filter(({ node }) =>\n getEvidenceTags(node).some(\n (tag) => (args.caseSensitive ? tag : tag.toLowerCase()) === expectedTag\n )\n )\n .map(({ node }) => String(node._id));\n\n return {\n count: matchedEvidenceIds.length,\n matchedEvidenceIds,\n };\n}\n\nexport async function computeContradictionCounts(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<ContradictionStatusCounts> {\n const contradictionDb = ctx.db as unknown as ContradictionReadDb;\n const contradictions = await contradictionDb\n .query(\"contradictions\")\n .withIndex(\"by_beliefId\", (q) => q.eq(\"beliefId\", beliefNodeId))\n .collect();\n\n return contradictions.reduce<ContradictionStatusCounts>(\n (counts, contradiction) => {\n const status =\n contradiction.resolutionStatus ?? contradiction.status ?? \"unresolved\";\n if (classifyContradictionStatus(status) === \"active\") {\n counts.activeCount += 1;\n } else {\n counts.resolvedCount += 1;\n }\n return counts;\n },\n { activeCount: 0, resolvedCount: 0 }\n );\n}\n\nexport async function computeEvidenceFreshness(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">,\n now = Date.now()\n): Promise<EvidenceFreshness> {\n const timestamps = (await getEvidenceLinks(ctx, beliefNodeId))\n .map(({ edge }) => getEdgeTimestamp(edge))\n .filter((value): value is number => value !== null);\n\n if (timestamps.length === 0) {\n return {\n newestAgeMs: null,\n oldestAgeMs: null,\n newestEdgeAt: null,\n oldestEdgeAt: null,\n edgeCount: 0,\n };\n }\n\n const newestEdgeAt = Math.max(...timestamps);\n const oldestEdgeAt = Math.min(...timestamps);\n\n return {\n newestAgeMs: Math.max(0, now - newestEdgeAt),\n oldestAgeMs: Math.max(0, now - oldestEdgeAt),\n newestEdgeAt,\n oldestEdgeAt,\n edgeCount: timestamps.length,\n };\n}\n\nexport async function computeDependentBeliefCount(\n ctx: ContractReadCtx,\n beliefNodeId: Id<\"epistemicNodes\">\n): Promise<number> {\n const incomingEdges = await collectIncomingEdgeRows(ctx, beliefNodeId);\n\n const dependencyEdges = incomingEdges.filter((edge) =>\n edge.edgeType ? DEPENDENT_EDGE_TYPES.has(edge.edgeType) : false\n );\n if (dependencyEdges.length === 0) {\n return 0;\n }\n\n const uniqueBeliefIds = new Set<string>();\n\n for (const edge of dependencyEdges) {\n const node = await resolveEndpointNode(ctx, sourceEndpointRefs(edge));\n if (\n node &&\n node.nodeType === \"belief\" &&\n node.status !== \"archived\" &&\n node.status !== \"deleted\"\n ) {\n uniqueBeliefIds.add(String(node._id));\n }\n }\n\n return uniqueBeliefIds.size;\n}\n\nasync function snapshotEvidentialMetric(args: {\n ctx: ContractReadCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n metric: EvidentialMetric;\n now: number;\n}): Promise<EvidentialMetricSnapshot> {\n switch (args.metric) {\n case \"evidence_count\": {\n const count = await computeEvidenceCountMetric(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { evidenceCount: count },\n };\n }\n case \"contradiction_status\": {\n const counts = await computeContradictionCounts(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: counts.activeCount,\n data: counts as unknown as Record<string, unknown>,\n };\n }\n case \"edge_freshness\": {\n const freshness = await computeEvidenceFreshness(\n args.ctx,\n args.beliefNodeId,\n args.now\n );\n return {\n metric: args.metric,\n value: freshness.newestAgeMs,\n data: freshness as unknown as Record<string, unknown>,\n };\n }\n case \"dependent_count\": {\n const count = await computeDependentBeliefCount(\n args.ctx,\n args.beliefNodeId\n );\n return {\n metric: args.metric,\n value: count,\n data: { dependentCount: count },\n };\n }\n default:\n return {\n metric: args.metric,\n value: null,\n data: {},\n };\n }\n}\n\nexport async function evaluateBuiltInEvidentialContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseEvidentialEvaluatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const snapshot = await snapshotEvidentialMetric({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n metric: config.metric,\n now: args.now,\n });\n\n const comparisonSatisfied =\n snapshot.value !== null &&\n compareMetricValue(config.operator, snapshot.value, config.threshold);\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildEvidentialRationale({\n config,\n snapshot,\n comparisonSatisfied,\n result,\n }),\n data: {\n ...snapshot.data,\n metric: config.metric,\n observedValue: snapshot.value,\n operator: config.operator,\n threshold: config.threshold,\n action: config.action ?? \"append_sl_scoring\",\n actionParams: config.actionParams,\n },\n };\n}\n\nexport function evaluateMetricCheckerContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n const config = parseMetricCheckerConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"metricData\");\n const metric =\n typeof input.metric === \"string\" && input.metric.length > 0\n ? input.metric\n : config.metric;\n const observedValue =\n pickFiniteNumber(input, [\n \"observedValue\",\n \"currentValue\",\n \"metricValue\",\n \"value\",\n ]) ??\n config.observedValue ??\n config.currentValue ??\n config.metricValue ??\n null;\n if (observedValue === null) {\n return {\n result: \"inconclusive\",\n rationale: `metric_checker is awaiting data for ${metric ?? args.contract.condition.expression}.`,\n data: {\n metric,\n observedValue: null,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n }\n\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n observedValue,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: metric ?? \"metric\",\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: config.unit,\n }),\n data: {\n metric,\n observedValue,\n operator: config.operator,\n threshold: config.threshold,\n unit: config.unit,\n },\n };\n });\n}\n\nexport async function evaluateReferenceCheckCounterContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n const config = parseReferenceCheckCounterConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"referenceCheckData\");\n const tag =\n typeof input.tag === \"string\" && input.tag.trim().length > 0\n ? input.tag.trim()\n : config.tag;\n const snapshot = await computeTaggedEvidenceCount({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n tag,\n caseSensitive: config.caseSensitive,\n });\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n snapshot.count,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `reference checks tagged \"${tag}\"`,\n observedValue: snapshot.count,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n }),\n data: {\n tag,\n observedValue: snapshot.count,\n referenceCheckCount: snapshot.count,\n matchedEvidenceIds: snapshot.matchedEvidenceIds,\n operator: config.operator,\n threshold: config.threshold,\n caseSensitive: config.caseSensitive ?? false,\n },\n };\n}\n\nfunction resolveCompletedTemporalDeadlineResult(args: {\n completedAt: number | undefined;\n context: EpistemicEvaluatorContext;\n deadline: number;\n label: string;\n}): EpistemicEvaluatorResult {\n const { completedAt, context, deadline, label } = args;\n if (completedAt !== undefined && completedAt > deadline) {\n return {\n result: \"expired\",\n rationale: `${label} completed at ${completedAt}, after deadline ${deadline}.`,\n data: {\n label,\n deadline,\n completed: true,\n completedAt,\n missedDeadline: true,\n overdueByMs: completedAt - deadline,\n },\n };\n }\n\n const result =\n context.contract.direction === \"falsifies\" ? \"disconfirmed\" : \"confirmed\";\n return {\n result,\n rationale: `${label} completed before deadline ${deadline}.`,\n data: {\n label,\n deadline,\n completed: true,\n completedAt: completedAt ?? null,\n missedDeadline: false,\n },\n };\n}\n\nfunction resolveOpenTemporalDeadlineResult(args: {\n context: EpistemicEvaluatorContext;\n deadline: number;\n label: string;\n}): EpistemicEvaluatorResult {\n const { context, deadline, label } = args;\n if (context.now > deadline) {\n return {\n result: \"expired\",\n rationale: `${label} missed deadline ${deadline}; temporal contract expired.`,\n data: {\n label,\n deadline,\n completed: false,\n overdueByMs: context.now - deadline,\n },\n };\n }\n\n return {\n result: \"inconclusive\",\n rationale: `${label} is still before deadline ${deadline}; awaiting outcome.`,\n data: {\n label,\n deadline,\n completed: false,\n timeRemainingMs: deadline - context.now,\n },\n };\n}\n\nexport function evaluateTemporalDeadlineContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n if (\n typeof args.contract.deadline !== \"number\" ||\n !Number.isFinite(args.contract.deadline)\n ) {\n throw new Error(\n \"temporal_deadline requires contract.deadline to be set to a finite timestamp.\"\n );\n }\n const deadline = args.contract.deadline;\n\n const config = parseTemporalDeadlineConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"temporalData\");\n const label =\n (typeof input.label === \"string\" && input.label.length > 0\n ? input.label\n : config.label) ??\n args.contract.title ??\n args.contract.condition.expression;\n const completedAt =\n pickFiniteNumber(input, [\n \"completedAt\",\n \"observedAt\",\n \"satisfiedAt\",\n \"achievedAt\",\n ]) ??\n config.completedAt ??\n config.observedAt ??\n config.satisfiedAt ??\n config.achievedAt;\n const completed =\n input.completed === true ||\n config.completed === true ||\n completedAt !== undefined;\n\n if (completed) {\n return resolveCompletedTemporalDeadlineResult({\n completedAt,\n context: args,\n deadline,\n label,\n });\n }\n\n return resolveOpenTemporalDeadlineResult({\n context: args,\n deadline,\n label,\n });\n });\n}\n\nexport function evaluateMarketIndexComparatorContract(\n args: EpistemicEvaluatorContext\n): Promise<EpistemicEvaluatorResult> {\n return Promise.resolve().then(() => {\n const config = parseMarketIndexComparatorConfig(\n args.contract.condition.evaluatorConfig\n );\n const input = getEvaluatorInputRecord(args.inputData, \"marketIndexData\");\n const subject =\n typeof input.subject === \"string\" && input.subject.length > 0\n ? input.subject\n : config.subject;\n const benchmark =\n typeof input.benchmark === \"string\" && input.benchmark.length > 0\n ? input.benchmark\n : config.benchmark;\n const subjectValue =\n pickFiniteNumber(input, [\"subjectValue\", \"primaryValue\", \"leftValue\"]) ??\n config.subjectValue ??\n config.primaryValue ??\n null;\n const benchmarkValue =\n pickFiniteNumber(input, [\n \"benchmarkValue\",\n \"comparisonValue\",\n \"rightValue\",\n ]) ??\n config.benchmarkValue ??\n config.comparisonValue ??\n null;\n\n if (subjectValue === null || benchmarkValue === null) {\n return {\n result: \"inconclusive\",\n rationale:\n \"market_index_comparator is awaiting both subject and benchmark values.\",\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n }\n\n if (benchmarkValue === 0) {\n throw new Error(\n \"market_index_comparator cannot compare against a zero benchmark value.\"\n );\n }\n\n const differentialPercent =\n ((subjectValue - benchmarkValue) / Math.abs(benchmarkValue)) * 100;\n const comparisonSatisfied = compareMetricValue(\n config.operator,\n differentialPercent,\n config.threshold\n );\n const result = resolveComparisonResult(\n args.contract.direction,\n comparisonSatisfied\n );\n\n return {\n result,\n rationale: buildComparisonRationale({\n label: `${subject ?? \"subject\"} vs ${benchmark ?? \"benchmark\"} differential`,\n observedValue: differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n comparisonSatisfied,\n result,\n unit: \"%\",\n }),\n data: {\n subject,\n subjectValue,\n benchmark,\n benchmarkValue,\n differentialPercent,\n operator: config.operator,\n threshold: config.threshold,\n },\n };\n });\n}\n\nexport const METRIC_COMPARATOR_EVALUATOR_NAMES = {\n evidential: \"evidential\",\n evidentialAliases: new Set([\n \"evidential\",\n \"built_in_evidential\",\n \"builtin_evidential\",\n ]),\n metricChecker: \"metric_checker\",\n referenceCheckCounter: \"reference_check_counter\",\n temporalDeadline: \"temporal_deadline\",\n marketIndexComparator: \"market_index_comparator\",\n};\n","/** Shared evaluator helpers and result-normalization utilities. */\n\nimport { debugGraphPrimitiveFallback } from \"../debug\";\nimport type {\n EpistemicContractDirection,\n EpistemicContractEvaluationResult,\n} from \"../epistemicContractHelpers\";\n\nexport interface ToolResultEnvelope {\n command?: string;\n data?: unknown;\n exitCode?: number | null;\n output?: string;\n report?: unknown;\n stderr?: string;\n stdout?: string;\n}\n\ntype AnyRecord = Record<string, unknown>;\n\nconst WINDOWS_PATH_SEPARATORS = /\\\\/g;\nconst LEADING_DOT_SLASH = /^\\.\\//;\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function asNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function asRecord(value: unknown): AnyRecord | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as AnyRecord)\n : null;\n}\n\nexport function asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : null;\n}\n\nexport function deriveDirectionalResult(\n direction: EpistemicContractDirection,\n conditionSatisfied: boolean\n): EpistemicContractEvaluationResult {\n if (direction === \"falsifies\") {\n return conditionSatisfied ? \"disconfirmed\" : \"confirmed\";\n }\n return conditionSatisfied ? \"confirmed\" : \"disconfirmed\";\n}\n\nexport function extractTextCandidates(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n const candidate = asString(value);\n return candidate ? [candidate] : [];\n }\n\n const candidates = [\n record.stdout,\n record.stderr,\n record.output,\n record.text,\n record.message,\n record.raw,\n ]\n .map(asString)\n .filter((candidate): candidate is string => Boolean(candidate));\n\n for (const nestedKey of [\"report\", \"result\", \"data\", \"payload\"]) {\n const nested = record[nestedKey];\n if (nested !== value) {\n candidates.push(...extractTextCandidates(nested));\n }\n }\n\n return Array.from(new Set(candidates));\n}\n\nexport function normalizeFilePath(value: string): string {\n return value\n .replace(WINDOWS_PATH_SEPARATORS, \"/\")\n .replace(LEADING_DOT_SLASH, \"\");\n}\n\nexport function normalizeToolResultEnvelope(\n value: unknown\n): ToolResultEnvelope {\n const record = asRecord(value);\n if (!record) {\n return {\n output: asString(value) ?? undefined,\n };\n }\n\n const exitCode =\n asNumber(record.exitCode) ??\n asNumber(record.code) ??\n asNumber(record.status) ??\n null;\n\n return {\n command: asString(record.command) ?? undefined,\n data: record.data ?? record.payload,\n exitCode,\n output: asString(record.output) ?? undefined,\n report:\n record.report ??\n record.json ??\n record.result ??\n record.payload ??\n undefined,\n stderr: asString(record.stderr) ?? undefined,\n stdout: asString(record.stdout) ?? undefined,\n };\n}\n\nexport function parseJsonCandidate<T = unknown>(value: unknown): T | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value !== \"string\") {\n return value as T;\n }\n\n try {\n return JSON.parse(value) as T;\n } catch (error) {\n debugGraphPrimitiveFallback(\n \"[evaluators/shared] Failed to parse JSON candidate\",\n {\n error,\n valueType: typeof value,\n }\n );\n return null;\n }\n}\n\nexport function patternMatchesPath(filePath: string, pattern: string): boolean {\n const normalizedPath = normalizeFilePath(filePath);\n const normalizedPattern = normalizeFilePath(pattern);\n const escaped = normalizedPattern.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const regexPattern = escaped\n .replace(/\\\\\\*\\\\\\*/g, \".*\")\n .replace(/\\\\\\*/g, \"[^/]*\")\n .replace(/\\\\\\?/g, \"[^/]\");\n return new RegExp(`^${regexPattern}$`).test(normalizedPath);\n}\n\nexport function somePatternMatches(\n filePath: string | null | undefined,\n patterns: string[]\n): boolean {\n if (!filePath) {\n return false;\n }\n return patterns.some((pattern) => patternMatchesPath(filePath, pattern));\n}\n","/** Lint-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedLintDiagnostic {\n filePath: string | null;\n message: string;\n severity: string;\n}\n\ninterface LintCheckerConfig {\n filePatterns: string[];\n linter: \"biome\";\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): LintCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'lint_checker requires evaluatorConfig with { filePatterns: string[], linter: \"biome\" }.'\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"lint_checker requires at least one file pattern.\");\n }\n\n const linter = asString(record.linter);\n if (linter !== \"biome\") {\n throw new Error(`Unsupported linter: ${String(record.linter)}`);\n }\n\n return {\n filePatterns,\n linter,\n };\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedLintDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics)\n .map((entry) => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return null;\n }\n const location = asRecord(diagnostic.location);\n const pathRecord = asRecord(location?.path);\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(location?.filePath) ??\n asString(pathRecord?.file);\n const severity = asString(diagnostic.severity) ?? \"error\";\n const message =\n asString(diagnostic.message) ??\n asString(diagnostic.description) ??\n \"Lint issue\";\n return {\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n severity,\n };\n })\n .filter((diagnostic): diagnostic is ParsedLintDiagnostic =>\n Boolean(diagnostic)\n );\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedLintDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const lintCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"lint_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"lint_checker requires Biome lint resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"Biome reported issues, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Biome reported no matching lint diagnostics for ${config.filePatterns.join(\", \")}.`\n : `Biome reported ${matchedDiagnostics.length} matching issue(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath} (${diagnostic.severity})`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n linter: config.linter,\n matchedDiagnostics,\n },\n };\n },\n};\n","/** Sentry-backed engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n normalizeToolResultEnvelope,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface SentryCheckerConfig {\n module: string;\n windowDays: number;\n}\n\nfunction parseConfig(\n condition: EpistemicContractCondition\n): SentryCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"sentry_checker requires evaluatorConfig with { module, windowDays }.\"\n );\n }\n\n const moduleName = asString(record.module);\n const windowDays = asNumber(record.windowDays);\n if (!moduleName || windowDays === null) {\n throw new Error(\n \"sentry_checker requires a module name and numeric windowDays.\"\n );\n }\n\n return {\n module: moduleName,\n windowDays,\n };\n}\n\nfunction parseIncidentCount(resultData: unknown): {\n incidentCount: number | null;\n moduleName: string | null;\n windowDays: number | null;\n} {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return {\n incidentCount: null,\n moduleName: null,\n windowDays: null,\n };\n }\n\n const incidents = asArray(record.incidents);\n const incidentCount =\n asNumber(record.incidentCount) ??\n (incidents.length > 0 ? incidents.length : null);\n\n return {\n incidentCount,\n moduleName: asString(record.module),\n windowDays: asNumber(record.windowDays),\n };\n}\n\nfunction matchesModule(contract: AnyContract, resultData: unknown): boolean {\n const config = parseConfig(contract.condition);\n const payload = parseIncidentCount(resultData);\n return !payload.moduleName || payload.moduleName === config.module;\n}\n\nexport const sentryCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"sentry_checker\",\n matches({ contract, resultData }) {\n return matchesModule(contract, resultData);\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"sentry_checker requires incident count resultData.\",\n };\n }\n\n const payload = parseIncidentCount(args.resultData);\n if (payload.incidentCount === null) {\n return {\n result: \"error\",\n rationale: \"sentry_checker could not determine an incident count.\",\n };\n }\n if (!matchesModule(args.contract, args.resultData)) {\n return {\n result: \"inconclusive\",\n rationale: `Sentry result targeted ${payload.moduleName}, not ${config.module}.`,\n };\n }\n\n const conditionSatisfied = payload.incidentCount === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Sentry reported zero incidents for ${config.module} over ${config.windowDays} day(s).`\n : `Sentry reported ${payload.incidentCount} incident(s) for ${config.module} over ${config.windowDays} day(s).`,\n data: {\n incidentCount: payload.incidentCount,\n module: config.module,\n windowDays: config.windowDays,\n },\n };\n },\n};\n","/** Test-runner engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluator,\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n parseJsonCandidate,\n patternMatchesPath,\n} from \"./shared\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedSuite {\n failedTests: string[];\n filePath: string;\n passedTests: string[];\n}\n\ninterface TestRunnerConfig {\n runner: \"vitest\";\n testPattern: string;\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TestRunnerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n 'test_runner requires evaluatorConfig with { testPattern, runner: \"vitest\" }.'\n );\n }\n\n const testPattern = asString(record.testPattern);\n if (!testPattern) {\n throw new Error(\"test_runner requires a non-empty testPattern.\");\n }\n\n const runner = asString(record.runner);\n if (runner !== \"vitest\") {\n throw new Error(`Unsupported test runner: ${String(record.runner)}`);\n }\n\n return {\n runner,\n testPattern,\n };\n}\n\nfunction collectFailedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isFailed =\n status === \"failed\" ||\n status === \"fail\" ||\n state === \"failed\" ||\n state === \"fail\";\n\n const failures = isFailed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n failures.push(...collectFailedTests(nested));\n }\n }\n\n return failures;\n}\n\nfunction collectPassedTests(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) {\n return [];\n }\n\n const fullName = asString(record.fullName);\n const title = asString(record.title);\n const label = fullName ?? title ?? \"unnamed test\";\n const status = asString(record.status);\n const state = asString(asRecord(record.result)?.state);\n const isPassed = status === \"passed\" || state === \"passed\";\n\n const passed = isPassed ? [label] : [];\n for (const nestedKey of [\"assertionResults\", \"tests\", \"tasks\"]) {\n for (const nested of asArray(record[nestedKey])) {\n passed.push(...collectPassedTests(nested));\n }\n }\n\n return passed;\n}\n\nfunction parseSuite(value: unknown): ParsedSuite | null {\n const record = asRecord(value);\n if (!record) {\n return null;\n }\n\n const filePath =\n asString(record.name) ??\n asString(record.file) ??\n asString(record.filePath) ??\n asString(record.filepath);\n if (!filePath) {\n return null;\n }\n\n return {\n failedTests: Array.from(new Set(collectFailedTests(record))),\n filePath: normalizeFilePath(filePath),\n passedTests: Array.from(new Set(collectPassedTests(record))),\n };\n}\n\nfunction parseVitestSuites(resultData: unknown): ParsedSuite[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const candidates = [\n envelope.report,\n envelope.data,\n envelope.stdout,\n envelope.output,\n ...extractTextCandidates(resultData),\n ];\n\n for (const candidate of candidates) {\n const parsed = parseJsonCandidate(candidate);\n const report = asRecord(parsed);\n if (!report) {\n continue;\n }\n\n const suites = asArray(report.testResults)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (suites.length > 0) {\n return suites;\n }\n\n const fileSuites = asArray(report.files)\n .map(parseSuite)\n .filter((suite): suite is ParsedSuite => Boolean(suite));\n if (fileSuites.length > 0) {\n return fileSuites;\n }\n }\n\n return [];\n}\n\nfunction getMatchedSuites(\n contract: AnyContract,\n resultData: unknown\n): ParsedSuite[] {\n const config = parseConfig(contract.condition);\n return parseVitestSuites(resultData).filter((suite) =>\n patternMatchesPath(suite.filePath, config.testPattern)\n );\n}\n\nexport type EngineeringEpistemicEvaluator = EpistemicEvaluator & {\n matches(args: { contract: AnyContract; resultData: unknown }): boolean;\n};\n\nexport const testRunnerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"test_runner\",\n matches({ contract, resultData }) {\n return getMatchedSuites(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n const matchedSuites = getMatchedSuites(args.contract, args.resultData);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"test_runner requires Vitest JSON resultData.\",\n };\n }\n if (matchedSuites.length === 0) {\n return {\n result: \"inconclusive\",\n rationale: `No Vitest suites matched ${config.testPattern}.`,\n };\n }\n\n const failedTests = matchedSuites.flatMap((suite) => suite.failedTests);\n const passedTests = matchedSuites.flatMap((suite) => suite.passedTests);\n const conditionSatisfied = failedTests.length === 0;\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; all ${passedTests.length} test assertions passed.`\n : `Vitest matched ${matchedSuites.length} suite(s) for ${config.testPattern}; failing tests: ${failedTests.join(\", \")}.`,\n data: {\n runner: config.runner,\n testPattern: config.testPattern,\n matchedFiles: matchedSuites.map((suite) => suite.filePath),\n failedTests,\n passedTestCount: passedTests.length,\n },\n };\n },\n};\n","/** Typecheck-based engineering evaluator for epistemic contracts. */\n\nimport type {\n EpistemicContractCondition,\n EpistemicContractRecord,\n} from \"../epistemicContractHelpers\";\nimport type {\n EpistemicEvaluatorContext,\n EpistemicEvaluatorResult,\n} from \"../epistemicContracts\";\nimport {\n asArray,\n asNumber,\n asRecord,\n asString,\n deriveDirectionalResult,\n extractTextCandidates,\n normalizeFilePath,\n normalizeToolResultEnvelope,\n somePatternMatches,\n} from \"./shared\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\n\ntype AnyContract = Pick<EpistemicContractRecord, \"condition\">;\n\ninterface ParsedDiagnostic {\n code?: string;\n filePath: string | null;\n message: string;\n}\n\ninterface TscCheckerConfig {\n filePatterns: string[];\n}\n\nfunction parseConfig(condition: EpistemicContractCondition): TscCheckerConfig {\n const record = asRecord(condition.evaluatorConfig);\n if (!record) {\n throw new Error(\n \"tsc_checker requires evaluatorConfig with { filePatterns: string[] }.\"\n );\n }\n\n const filePatterns = asArray(record.filePatterns)\n .map(asString)\n .filter((pattern): pattern is string => Boolean(pattern));\n if (filePatterns.length === 0) {\n throw new Error(\"tsc_checker requires at least one file pattern.\");\n }\n\n return { filePatterns };\n}\n\nfunction parseStructuredDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const envelope = normalizeToolResultEnvelope(resultData);\n const record =\n asRecord(envelope.report) ??\n asRecord(envelope.data) ??\n asRecord(resultData);\n if (!record) {\n return [];\n }\n\n return asArray(record.diagnostics).flatMap((entry): ParsedDiagnostic[] => {\n const diagnostic = asRecord(entry);\n if (!diagnostic) {\n return [];\n }\n const filePath =\n asString(diagnostic.filePath) ??\n asString(diagnostic.file) ??\n asString(asRecord(diagnostic.location)?.filePath) ??\n asString(asRecord(asRecord(diagnostic.location)?.path)?.file);\n const message = asString(diagnostic.message) ?? \"TypeScript error\";\n return [\n {\n code: asString(diagnostic.code) ?? undefined,\n filePath: filePath ? normalizeFilePath(filePath) : null,\n message,\n },\n ];\n });\n}\n\nfunction parseTextDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const diagnostics: ParsedDiagnostic[] = [];\n const patterns = [\n /^(.+?)\\((\\d+),(\\d+)\\): error TS(\\d+): (.+)$/gm,\n /^(.+?):(\\d+):(\\d+) - error TS(\\d+): (.+)$/gm,\n ];\n\n for (const text of extractTextCandidates(resultData)) {\n for (const pattern of patterns) {\n for (const match of text.matchAll(pattern)) {\n diagnostics.push({\n code: match[4],\n filePath: normalizeFilePath(match[1] ?? \"\"),\n message: match[5] ?? \"TypeScript error\",\n });\n }\n }\n }\n\n return diagnostics;\n}\n\nfunction parseDiagnostics(resultData: unknown): ParsedDiagnostic[] {\n const structured = parseStructuredDiagnostics(resultData);\n return structured.length > 0 ? structured : parseTextDiagnostics(resultData);\n}\n\nfunction getMatchedDiagnostics(\n contract: AnyContract,\n resultData: unknown\n): ParsedDiagnostic[] {\n const config = parseConfig(contract.condition);\n return parseDiagnostics(resultData).filter((diagnostic) =>\n somePatternMatches(diagnostic.filePath, config.filePatterns)\n );\n}\n\nexport const tscCheckerEvaluator: EngineeringEpistemicEvaluator = {\n name: \"tsc_checker\",\n matches({ contract, resultData }) {\n const envelope = normalizeToolResultEnvelope(resultData);\n const exitCode = asNumber(envelope.exitCode);\n if (exitCode === 0) {\n return true;\n }\n return getMatchedDiagnostics(contract, resultData).length > 0;\n },\n evaluate(args: EpistemicEvaluatorContext): EpistemicEvaluatorResult {\n const config = parseConfig(args.contract.condition);\n if (!args.resultData) {\n return {\n result: \"error\",\n rationale: \"tsc_checker requires TypeScript diagnostic resultData.\",\n };\n }\n\n const envelope = normalizeToolResultEnvelope(args.resultData);\n const exitCode = asNumber(envelope.exitCode);\n const matchedDiagnostics = getMatchedDiagnostics(\n args.contract,\n args.resultData\n );\n\n if (\n matchedDiagnostics.length === 0 &&\n exitCode !== 0 &&\n exitCode !== null\n ) {\n return {\n result: \"inconclusive\",\n rationale:\n \"TypeScript reported errors, but none matched the configured file patterns.\",\n };\n }\n\n const conditionSatisfied =\n exitCode === 0 || (exitCode !== null && matchedDiagnostics.length === 0);\n\n return {\n result: deriveDirectionalResult(\n args.contract.direction,\n conditionSatisfied\n ),\n rationale: conditionSatisfied\n ? `TypeScript reported no matching diagnostics for ${config.filePatterns.join(\", \")}.`\n : `TypeScript found ${matchedDiagnostics.length} matching diagnostic(s): ${matchedDiagnostics\n .map((diagnostic) =>\n diagnostic.filePath\n ? `${diagnostic.filePath}${diagnostic.code ? ` (TS${diagnostic.code})` : \"\"}`\n : diagnostic.message\n )\n .join(\", \")}.`,\n data: {\n exitCode,\n filePatterns: config.filePatterns,\n matchedDiagnostics,\n },\n };\n },\n};\n","import type { EpistemicEvaluator } from \"../epistemicContracts\";\nimport { getRegisteredEpistemicEvaluators } from \"../epistemicContracts\";\nimport { lintCheckerEvaluator as lintCheckerEvaluatorModule } from \"./lint-checker-evaluator\";\nimport { sentryCheckerEvaluator as sentryCheckerEvaluatorModule } from \"./sentry-checker-evaluator\";\nimport type { EngineeringEpistemicEvaluator } from \"./test-runner-evaluator\";\nimport { testRunnerEvaluator as testRunnerEvaluatorModule } from \"./test-runner-evaluator\";\nimport { tscCheckerEvaluator as tscCheckerEvaluatorModule } from \"./tsc-checker-evaluator\";\n\nexport const ENGINEERING_EPISTEMIC_EVALUATORS: EngineeringEpistemicEvaluator[] =\n [\n testRunnerEvaluatorModule,\n tscCheckerEvaluatorModule,\n lintCheckerEvaluatorModule,\n sentryCheckerEvaluatorModule,\n ];\n\nconst lintCheckerEvaluator = lintCheckerEvaluatorModule;\nconst sentryCheckerEvaluator = sentryCheckerEvaluatorModule;\nconst testRunnerEvaluator = testRunnerEvaluatorModule;\nconst tscCheckerEvaluator = tscCheckerEvaluatorModule;\n\nexport const ENGINEERING_EVALUATOR_NAMES = new Set(\n ENGINEERING_EPISTEMIC_EVALUATORS.map((evaluator) => evaluator.name)\n);\n\nexport function getEngineeringEpistemicEvaluator(\n name: string\n): EngineeringEpistemicEvaluator | undefined {\n return ENGINEERING_EPISTEMIC_EVALUATORS.find(\n (evaluator) => evaluator.name === name\n );\n}\n\nexport function registerAllEngineeringEvaluators(\n registerEvaluator: (evaluator: EpistemicEvaluator) => void\n): void {\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n registerEvaluator(evaluator);\n }\n}\nexport {\n lintCheckerEvaluator,\n sentryCheckerEvaluator,\n testRunnerEvaluator,\n tscCheckerEvaluator,\n};\n\nexport const RESEARCH_EVALUATOR_NAMES = [\n \"market_index_comparator\",\n \"metric_checker\",\n \"reference_check_counter\",\n \"temporal_deadline\",\n] as const;\n\nexport type ResearchEvaluatorName = (typeof RESEARCH_EVALUATOR_NAMES)[number];\n\nexport function registerAllResearchEvaluators(): ResearchEvaluatorName[] {\n const registered = new Set(getRegisteredEpistemicEvaluators());\n return RESEARCH_EVALUATOR_NAMES.filter((name) => registered.has(name));\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Evaluator registry and contract execution logic for epistemic contracts. */\n\nimport type { Id, MutationCtx } from \"./convex\";\nimport { applyBeliefConfidenceChange } from \"./epistemicBeliefs\";\nimport {\n deriveContractModulationPlan,\n deriveContractStatus,\n} from \"./epistemicContractHelpers\";\nimport {\n evaluateBuiltInEvidentialContract,\n evaluateMarketIndexComparatorContract,\n evaluateMetricCheckerContract,\n evaluateReferenceCheckCounterContract,\n evaluateTemporalDeadlineContract,\n METRIC_COMPARATOR_EVALUATOR_NAMES,\n} from \"./epistemicContracts.metrics\";\nimport type {\n BeliefNodeDoc,\n ContractDoc,\n ContractEvaluationExecution,\n EpistemicEvaluator,\n EpistemicEvaluatorResult,\n TriggerBatchResult,\n} from \"./epistemicContracts.types\";\nimport { ENGINEERING_EPISTEMIC_EVALUATORS } from \"./evaluators\";\n\nconst evaluatorRegistry = new Map<string, EpistemicEvaluator>();\nconst BUILT_IN_EVIDENTIAL_ALIASES =\n METRIC_COMPARATOR_EVALUATOR_NAMES.evidentialAliases;\nconst BUILT_IN_METRIC_CHECKER = METRIC_COMPARATOR_EVALUATOR_NAMES.metricChecker;\nconst BUILT_IN_REFERENCE_CHECK_COUNTER =\n METRIC_COMPARATOR_EVALUATOR_NAMES.referenceCheckCounter;\nconst BUILT_IN_TEMPORAL_DEADLINE =\n METRIC_COMPARATOR_EVALUATOR_NAMES.temporalDeadline;\nconst BUILT_IN_MARKET_INDEX_COMPARATOR =\n METRIC_COMPARATOR_EVALUATOR_NAMES.marketIndexComparator;\nconst MAX_CONTRACT_EVALUATION_BATCH_SIZE = 50;\n\nfunction confidenceSeed(args: {\n beliefConfidence?: number;\n currentConfidence?: number;\n}): number {\n if (typeof args.currentConfidence === \"number\") {\n return args.currentConfidence;\n }\n if (typeof args.beliefConfidence === \"number\") {\n return args.beliefConfidence;\n }\n return 0.5;\n}\n\nfunction contractDocId(contract: ContractDoc): Id<\"epistemicContracts\"> {\n return contract._id as Id<\"epistemicContracts\">;\n}\n\nexport function clearEpistemicEvaluators(): void {\n evaluatorRegistry.clear();\n ensureBuiltInEvaluators();\n}\n\nexport function registerEpistemicEvaluator(\n evaluator: EpistemicEvaluator\n): void {\n ensureBuiltInEvaluators();\n evaluatorRegistry.set(evaluator.name, evaluator);\n}\n\nexport function getRegisteredEpistemicEvaluators(): string[] {\n ensureBuiltInEvaluators();\n return Array.from(evaluatorRegistry.keys()).sort();\n}\n\nfunction ensureBuiltInEvaluators(): void {\n for (const name of BUILT_IN_EVIDENTIAL_ALIASES) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, {\n name,\n evaluate: evaluateBuiltInEvidentialContract,\n });\n }\n\n for (const evaluator of ENGINEERING_EPISTEMIC_EVALUATORS) {\n if (evaluatorRegistry.has(evaluator.name)) {\n continue;\n }\n evaluatorRegistry.set(evaluator.name, evaluator);\n }\n\n const researchEvaluators: [string, EpistemicEvaluator[\"evaluate\"]][] = [\n [BUILT_IN_METRIC_CHECKER, evaluateMetricCheckerContract],\n [BUILT_IN_REFERENCE_CHECK_COUNTER, evaluateReferenceCheckCounterContract],\n [BUILT_IN_TEMPORAL_DEADLINE, evaluateTemporalDeadlineContract],\n [BUILT_IN_MARKET_INDEX_COMPARATOR, evaluateMarketIndexComparatorContract],\n ];\n\n for (const [name, evaluate] of researchEvaluators) {\n if (evaluatorRegistry.has(name)) {\n continue;\n }\n evaluatorRegistry.set(name, { name, evaluate });\n }\n}\n\nfunction normalizeTrigger(trigger?: string): string {\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n if (trigger === \"periodic\") {\n return \"periodic\";\n }\n if (trigger === \"manual\") {\n return \"manual\";\n }\n return \"event_driven\";\n}\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\nexport async function executeContractEvaluation(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n contract: ContractDoc;\n now: number;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n currentConfidence?: number;\n resultData?: unknown;\n}): Promise<ContractEvaluationExecution> {\n ensureBuiltInEvaluators();\n\n const evaluator = evaluatorRegistry.get(args.contract.condition.evaluator);\n let evaluation: EpistemicEvaluatorResult;\n if (evaluator) {\n try {\n evaluation = await evaluator.evaluate({\n belief: args.belief,\n contract: args.contract,\n ctx: args.ctx,\n now: args.now,\n resultData: args.resultData,\n trigger: args.trigger,\n inputData: args.inputData,\n });\n } catch (error) {\n evaluation = {\n result: \"error\",\n rationale:\n error instanceof Error ? error.message : \"Unknown evaluator error.\",\n };\n }\n } else {\n evaluation = {\n result: \"error\",\n rationale: `No epistemic evaluator registered for \"${args.contract.condition.evaluator}\".`,\n };\n }\n\n const confidenceBefore = confidenceSeed({\n beliefConfidence: args.belief.confidence,\n currentConfidence: args.currentConfidence,\n });\n const modulationPlan = deriveContractModulationPlan({\n currentConfidence: confidenceBefore,\n modulation: args.contract.modulation,\n result: evaluation.result,\n resultConfidence: evaluation.confidence,\n });\n\n let beliefConfidenceId: Id<\"beliefConfidence\"> | undefined;\n let confidenceAfter = confidenceBefore;\n if (modulationPlan) {\n // EK-7: Convert contract modulation to SL opinion.\n // Contract modulations are dogmatic (certainty=1) → u=0.\n const contractB = Math.max(0, Math.min(1, modulationPlan.confidenceAfter));\n const modulationResult = await applyBeliefConfidenceChange(args.ctx, {\n nodeId: args.contract.beliefNodeId,\n belief: contractB,\n disbelief: 1 - contractB,\n uncertainty: 0,\n baseRate: 0.5,\n trigger: modulationPlan.trigger,\n rationale: `Epistemic contract \"${args.contract.title}\" ${evaluation.result}: ${evaluation.rationale}`,\n authenticatedUserId: args.authenticatedUserId,\n });\n beliefConfidenceId = modulationResult.beliefConfidenceId;\n confidenceAfter =\n typeof modulationResult.newConfidence === \"number\"\n ? modulationResult.newConfidence\n : modulationPlan.confidenceAfter;\n }\n\n const evaluationId = await args.ctx.db.insert(\"contractEvaluations\", {\n contractId: args.contract.contractId,\n beliefNodeId: args.contract.beliefNodeId,\n result: evaluation.result,\n evaluatedAt: args.now,\n evaluator: args.contract.condition.evaluator,\n trigger: args.trigger,\n resultData: evaluation.data,\n modulationApplied: Boolean(modulationPlan),\n confidenceDelta: modulationPlan?.confidenceDelta,\n confidenceBefore: modulationPlan?.confidenceBefore,\n confidenceAfter: modulationPlan ? confidenceAfter : undefined,\n beliefConfidenceId,\n modulationRationale: evaluation.rationale,\n topicId: args.contract.topicId,\n });\n\n const nextStatus = deriveContractStatus(\n evaluation.result,\n args.contract.status\n );\n await args.ctx.db.patch(contractDocId(args.contract), {\n status: nextStatus,\n lastEvaluatedAt: args.now,\n evaluationCount: (args.contract.evaluationCount ?? 0) + 1,\n updatedAt: args.now,\n });\n\n return {\n evaluationId,\n result: evaluation.result,\n status: nextStatus,\n confidenceBefore,\n confidenceAfter,\n rationale: evaluation.rationale,\n data: evaluation.data,\n currentConfidence: confidenceAfter,\n };\n}\n\nexport async function evaluateContractsForTriggerBatch(args: {\n ctx: MutationCtx;\n belief: BeliefNodeDoc;\n trigger: string;\n inputData?: unknown;\n authenticatedUserId: string;\n contractIds?: string[];\n maxBatchSize?: number;\n}): Promise<TriggerBatchResult> {\n const startedAt = Date.now();\n const contracts = await loadContractsForTrigger({\n ctx: args.ctx,\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: args.contractIds,\n });\n const batchLimit = Math.max(\n 1,\n Math.min(\n args.maxBatchSize ?? MAX_CONTRACT_EVALUATION_BATCH_SIZE,\n MAX_CONTRACT_EVALUATION_BATCH_SIZE\n )\n );\n const currentBatch = contracts.slice(0, batchLimit);\n const overflowContracts = contracts.slice(batchLimit);\n\n let runningConfidence =\n typeof args.belief.confidence === \"number\" ? args.belief.confidence : 0.5;\n const results: TriggerBatchResult[\"results\"] = [];\n\n for (const contract of currentBatch) {\n const evaluation = await executeContractEvaluation({\n ctx: args.ctx,\n belief: args.belief,\n contract,\n now: Date.now(),\n trigger: normalizeTrigger(args.trigger),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n currentConfidence: runningConfidence,\n });\n runningConfidence = evaluation.currentConfidence;\n args.belief.confidence = runningConfidence;\n results.push({\n contractId: contract.contractId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceAfter: evaluation.confidenceAfter,\n });\n }\n\n if (overflowContracts.length > 0) {\n await args.ctx.scheduler.runAfter(\n 0,\n \"epistemicContracts.processContractEvaluationOverflow\",\n {\n beliefNodeId: args.belief._id,\n trigger: normalizeTrigger(args.trigger),\n contractIds: overflowContracts.map((contract) => contract.contractId),\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n maxBatchSize: batchLimit,\n }\n );\n }\n\n const executionTimeMs = Date.now() - startedAt;\n console.info(\"[epistemicContracts] processed contract evaluation batch\", {\n beliefNodeId: String(args.belief._id),\n trigger: normalizeTrigger(args.trigger),\n batchSize: currentBatch.length,\n overflowCount: overflowContracts.length,\n executionTimeMs,\n });\n\n return {\n totalContracts: contracts.length,\n processedCount: currentBatch.length,\n overflowCount: overflowContracts.length,\n scheduledOverflow: overflowContracts.length > 0,\n batchSize: currentBatch.length,\n executionTimeMs,\n trigger: normalizeTrigger(args.trigger),\n results,\n };\n}\n\nexport async function loadContractsForBelief(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n}): Promise<ContractDoc[]> {\n const rows = await args.ctx.db\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect();\n return rows as unknown as ContractDoc[];\n}\n\nasync function loadContractsForTrigger(args: {\n ctx: MutationCtx;\n beliefNodeId: Id<\"epistemicNodes\">;\n trigger: string;\n contractIds?: string[];\n}): Promise<ContractDoc[]> {\n const contracts = await loadContractsForBelief(args);\n\n ensureBuiltInEvaluators();\n const allowedSchedules = resolveSchedulesForTrigger(args.trigger);\n const contractIdFilter =\n args.contractIds && args.contractIds.length > 0\n ? new Set(args.contractIds)\n : null;\n\n return contracts.filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (contract.conditionType === \"composite\") {\n return false;\n }\n if (!evaluatorRegistry.has(contract.condition.evaluator)) {\n return false;\n }\n if (contractIdFilter) {\n return contractIdFilter.has(contract.contractId);\n }\n return allowedSchedules.has(contract.evaluationSchedule);\n });\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Convex queries and mutations for epistemic contract lifecycle management. */\n\nimport { checkProjectAccess } from \"@lucern/access-control/access\";\nimport { getCurrentUserId } from \"@lucern/access-control/auth\";\nimport { permissiveReturn } from \"@lucern/contracts/schema-helpers/validators\";\nimport { v } from \"convex/values\";\nimport type { Id, MutationCtx, QueryCtx } from \"./convex\";\nimport { internalMutation, mutation, query } from \"./convex\";\nimport type { EpistemicContractRecord } from \"./epistemicContractHelpers\";\nimport { createInheritedContractRecord } from \"./epistemicContractHelpers\";\nimport {\n evaluateContractsForTriggerBatch,\n executeContractEvaluation,\n loadContractsForBelief,\n} from \"./epistemicContracts.evaluators\";\nimport {\n computeContradictionCounts,\n computeDependentBeliefCount,\n computeEvidenceCountMetric,\n computeEvidenceFreshness,\n} from \"./epistemicContracts.metrics\";\nimport type {\n BeliefNodeDoc,\n ContractDoc,\n ContractEvaluationDoc,\n} from \"./epistemicContracts.types\";\nimport {\n ENGINEERING_EVALUATOR_NAMES,\n getEngineeringEpistemicEvaluator,\n} from \"./evaluators\";\nimport { generateGlobalId } from \"./globalId\";\n\nfunction resolveSchedulesForTrigger(trigger: string): Set<string> {\n if (trigger === \"evidence_added\") {\n return new Set([\"on_evidence\", \"event_driven\"]);\n }\n if (trigger === \"periodic\") {\n return new Set([\"periodic\"]);\n }\n if (trigger === \"manual\") {\n return new Set([\"on_demand\", \"event_driven\"]);\n }\n return new Set([\"event_driven\"]);\n}\n\ntype ContractStatusRow = Omit<ContractDoc, \"latestEvaluation\"> & {\n latestEvaluation: ContractEvaluationDoc | null;\n};\ntype ContractInsertDoc = Omit<ContractDoc, \"_creationTime\" | \"_id\">;\ninterface BeliefNodeIdArgs {\n beliefNodeId: Id<\"epistemicNodes\">;\n}\ninterface AuthenticatedUserArgs {\n authenticatedUserId?: string;\n}\ntype ContractMetricArgs = BeliefNodeIdArgs;\ntype CreateEpistemicContractArgs = AuthenticatedUserArgs &\n Pick<\n ContractDoc,\n | \"beliefNodeId\"\n | \"compositeOf\"\n | \"compositeOperator\"\n | \"condition\"\n | \"conditionType\"\n | \"deadline\"\n | \"description\"\n | \"direction\"\n | \"evaluationSchedule\"\n | \"modulation\"\n | \"periodicIntervalMs\"\n | \"title\"\n >;\ntype EvaluateContractArgs = AuthenticatedUserArgs & {\n contractId: string;\n inputData?: unknown;\n resultData?: unknown;\n trigger?: string;\n};\ntype EvaluateEngineeringContractsArgs = AuthenticatedUserArgs &\n BeliefNodeIdArgs & {\n lintOutput?: unknown;\n sentryData?: unknown;\n testOutput?: unknown;\n trigger?: string;\n tscOutput?: unknown;\n };\ntype EvaluateContractsForTriggerArgs = AuthenticatedUserArgs &\n BeliefNodeIdArgs & {\n inputData?: unknown;\n maxBatchSize?: number;\n trigger: string;\n };\ntype ProcessContractEvaluationOverflowArgs = BeliefNodeIdArgs & {\n authenticatedUserId: string;\n contractIds: string[];\n inputData?: unknown;\n maxBatchSize?: number;\n trigger: string;\n};\ntype GetContractStatusArgs = AuthenticatedUserArgs & {\n beliefNodeId?: Id<\"epistemicNodes\">;\n contractId?: string;\n status?: ContractDoc[\"status\"];\n};\ntype GetContractCoverageArgs = AuthenticatedUserArgs & {\n recentEvaluationLimit?: number;\n topicId: string;\n};\n\ntype AuthContext = Parameters<typeof getCurrentUserId>[0];\ntype ProjectAccessContext = Parameters<typeof checkProjectAccess>[0];\n\ninterface ContractIndexRange {\n eq(fieldName: string, value: unknown): ContractIndexRange;\n}\n\ninterface ContractTableQuery<TDocument> {\n collect(): Promise<TDocument[]>;\n first(): Promise<TDocument | null>;\n order(direction: \"asc\" | \"desc\"): ContractTableQuery<TDocument>;\n take(limit: number): Promise<TDocument[]>;\n withIndex(\n indexName: string,\n range?: (q: ContractIndexRange) => unknown\n ): ContractTableQuery<TDocument>;\n}\n\ninterface ContractTableReader {\n query(\n tableName: \"contractEvaluations\"\n ): ContractTableQuery<ContractEvaluationDoc>;\n query(tableName: \"epistemicContracts\"): ContractTableQuery<ContractDoc>;\n}\n\nfunction contractTables(ctx: MutationCtx | QueryCtx): ContractTableReader {\n return ctx.db as unknown as ContractTableReader;\n}\n\nfunction assertBeliefNode(\n value: unknown,\n message = \"Belief not found.\"\n): BeliefNodeDoc {\n if (\n !value ||\n typeof value !== \"object\" ||\n (value as { nodeType?: unknown }).nodeType !== \"belief\"\n ) {\n throw new Error(message);\n }\n return value as BeliefNodeDoc;\n}\n\nfunction normalizeEngineeringTrigger(trigger: string): string {\n if (trigger === \"manual\") {\n return \"manual\";\n }\n if (trigger === \"evidence_added\") {\n return \"evidence_added\";\n }\n return trigger;\n}\n\nasync function requireAuth(ctx: MutationCtx | QueryCtx): Promise<string> {\n const userId = await getCurrentUserId(ctx as unknown as AuthContext);\n if (!userId) {\n throw new Error(\"Authentication required.\");\n }\n return userId;\n}\n\n// biome-ignore lint/suspicious/useAwait: delegates to requireAuth which is async in some ctx paths\nasync function resolveAuthenticatedUserId(\n ctx: MutationCtx | QueryCtx,\n explicitUserId?: string\n): Promise<string> {\n if (explicitUserId) {\n return explicitUserId;\n }\n return requireAuth(ctx);\n}\n\nasync function requireBeliefProjectAccess(\n ctx: MutationCtx | QueryCtx,\n belief: BeliefNodeDoc,\n userId: string\n): Promise<void> {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n const hasAccess = await checkProjectAccess(\n ctx as unknown as ProjectAccessContext,\n belief.projectId,\n userId\n );\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n}\n\nasync function requireTopicReadAccess(\n ctx: QueryCtx,\n beliefs: BeliefNodeDoc[],\n userId: string\n): Promise<void> {\n const projectIds = new Set<string>();\n\n for (const belief of beliefs) {\n if (!belief.projectId) {\n throw new Error(\"Belief has no project scope.\");\n }\n projectIds.add(belief.projectId);\n }\n\n for (const projectId of projectIds) {\n const hasAccess = await checkProjectAccess(\n ctx as unknown as ProjectAccessContext,\n projectId,\n userId\n );\n if (!hasAccess) {\n throw new Error(\"Project access required.\");\n }\n }\n}\n\nasync function getContractByContractId(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractDoc | null> {\n return await contractTables(ctx)\n .query(\"epistemicContracts\")\n .withIndex(\"by_contractId\", (q) => q.eq(\"contractId\", contractId))\n .first();\n}\n\nasync function getLatestEvaluation(\n ctx: MutationCtx | QueryCtx,\n contractId: string\n): Promise<ContractEvaluationDoc | null> {\n const evaluations = await contractTables(ctx)\n .query(\"contractEvaluations\")\n .withIndex(\"by_contract_time\", (q) => q.eq(\"contractId\", contractId))\n .order(\"desc\")\n .take(1);\n\n return evaluations[0] ?? null;\n}\n\nexport const evaluateEvidenceCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ContractMetricArgs) => {\n const userId = await requireAuth(ctx);\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceCountMetric(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateContradictionStatus = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ContractMetricArgs) => {\n const userId = await requireAuth(ctx);\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeContradictionCounts(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateEdgeFreshness = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ContractMetricArgs) => {\n const userId = await requireAuth(ctx);\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeEvidenceFreshness(ctx, args.beliefNodeId);\n },\n});\n\nexport const evaluateDependentBeliefCount = query({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ContractMetricArgs) => {\n const userId = await requireAuth(ctx);\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n return await computeDependentBeliefCount(ctx, args.beliefNodeId);\n },\n});\n\nexport const createEpistemicContract = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n title: v.string(),\n description: v.optional(v.string()),\n conditionType: v.union(\n v.literal(\"assertion\"),\n v.literal(\"temporal\"),\n v.literal(\"evidential\"),\n v.literal(\"threshold\"),\n v.literal(\"composite\")\n ),\n direction: v.union(v.literal(\"confirms\"), v.literal(\"falsifies\")),\n condition: v.object({\n expression: v.string(),\n evaluator: v.string(),\n evaluatorConfig: v.optional(v.any()),\n }),\n deadline: v.optional(v.number()),\n compositeOf: v.optional(v.array(v.string())),\n compositeOperator: v.optional(\n v.union(v.literal(\"all\"), v.literal(\"any\"), v.literal(\"majority\"))\n ),\n modulation: v.object({\n onConfirmed: v.object({\n delta: v.number(),\n ceiling: v.optional(v.number()),\n }),\n onDisconfirmed: v.object({\n delta: v.number(),\n floor: v.optional(v.number()),\n }),\n onExpired: v.optional(\n v.object({\n delta: v.number(),\n })\n ),\n onPartial: v.optional(\n v.object({\n threshold: v.number(),\n delta: v.number(),\n })\n ),\n }),\n evaluationSchedule: v.union(\n v.literal(\"on_demand\"),\n v.literal(\"on_evidence\"),\n v.literal(\"periodic\"),\n v.literal(\"event_driven\")\n ),\n periodicIntervalMs: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: CreateEpistemicContractArgs) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const now = Date.now();\n const contractId = generateGlobalId();\n\n const contractDoc: ContractInsertDoc = {\n beliefNodeId: args.beliefNodeId,\n contractId,\n title: args.title,\n description: args.description,\n conditionType: args.conditionType,\n direction: args.direction,\n condition: args.condition,\n deadline: args.deadline,\n compositeOf: args.compositeOf,\n compositeOperator: args.compositeOperator,\n modulation: args.modulation,\n evaluationSchedule: args.evaluationSchedule,\n periodicIntervalMs: args.periodicIntervalMs,\n status: \"active\" as const,\n lineageSource: \"declared\" as const,\n evaluationCount: 0,\n topicId: belief.topicId,\n createdAt: now,\n createdBy: userId,\n updatedAt: now,\n };\n\n const insertedId = await ctx.db.insert(\"epistemicContracts\", contractDoc);\n\n return {\n contractId,\n id: insertedId,\n status: contractDoc.status,\n };\n },\n});\n\nexport const evaluateContract = mutation({\n args: {\n contractId: v.string(),\n resultData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: EvaluateContractArgs) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const contract = await getContractByContractId(ctx, args.contractId);\n if (!contract) {\n throw new Error(`Contract not found: ${args.contractId}`);\n }\n if (contract.status === \"archived\") {\n throw new Error(\"Archived contracts cannot be evaluated.\");\n }\n\n const belief = assertBeliefNode(\n await ctx.db.get(contract.beliefNodeId),\n \"Belief not found for contract.\"\n );\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n resultData: args.resultData,\n trigger: args.trigger ?? \"manual\",\n inputData: args.inputData,\n authenticatedUserId: userId,\n });\n\n return {\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n };\n },\n});\n\nexport const evaluateEngineeringContracts = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n testOutput: v.optional(v.any()),\n tscOutput: v.optional(v.any()),\n lintOutput: v.optional(v.any()),\n sentryData: v.optional(v.any()),\n trigger: v.optional(v.string()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: EvaluateEngineeringContractsArgs) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n const trigger = args.trigger ?? \"event_driven\";\n const allowedSchedules = resolveSchedulesForTrigger(\n normalizeEngineeringTrigger(trigger)\n );\n const payloadByEvaluator = new Map<string, unknown>([\n [\"test_runner\", args.testOutput],\n [\"tsc_checker\", args.tscOutput],\n [\"lint_checker\", args.lintOutput],\n [\"sentry_checker\", args.sentryData],\n ]);\n const contracts = (\n await loadContractsForBelief({\n ctx,\n beliefNodeId: args.beliefNodeId,\n })\n ).filter((contract) => {\n if (contract.status === \"archived\") {\n return false;\n }\n if (!allowedSchedules.has(contract.evaluationSchedule)) {\n return false;\n }\n return ENGINEERING_EVALUATOR_NAMES.has(contract.condition.evaluator);\n });\n\n let runningConfidence =\n typeof belief.confidence === \"number\" ? belief.confidence : 0.5;\n const evaluations: Record<string, unknown>[] = [];\n\n for (const contract of contracts) {\n const resultData = payloadByEvaluator.get(contract.condition.evaluator);\n if (resultData === undefined) {\n continue;\n }\n\n const engineeringEvaluator = getEngineeringEpistemicEvaluator(\n contract.condition.evaluator\n );\n if (!engineeringEvaluator?.matches({ contract, resultData })) {\n continue;\n }\n\n const evaluation = await executeContractEvaluation({\n ctx,\n belief,\n contract,\n now: Date.now(),\n trigger,\n authenticatedUserId: userId,\n currentConfidence: runningConfidence,\n resultData,\n });\n runningConfidence = evaluation.currentConfidence;\n belief.confidence = runningConfidence;\n\n evaluations.push({\n contractId: contract.contractId,\n evaluator: contract.condition.evaluator,\n evaluationId: evaluation.evaluationId,\n result: evaluation.result,\n status: evaluation.status,\n confidenceBefore: evaluation.confidenceBefore,\n confidenceAfter: evaluation.confidenceAfter,\n rationale: evaluation.rationale,\n });\n }\n\n return {\n beliefNodeId: args.beliefNodeId,\n trigger,\n availableContracts: contracts.length,\n evaluatedContracts: evaluations.length,\n evaluations,\n };\n },\n});\n\nexport const evaluateContractsForTrigger = mutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n inputData: v.optional(v.any()),\n maxBatchSize: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: EvaluateContractsForTriggerArgs) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: userId,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const processContractEvaluationOverflow = internalMutation({\n args: {\n beliefNodeId: v.id(\"epistemicNodes\"),\n trigger: v.string(),\n contractIds: v.array(v.string()),\n inputData: v.optional(v.any()),\n authenticatedUserId: v.string(),\n maxBatchSize: v.optional(v.number()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: ProcessContractEvaluationOverflowArgs) => {\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n\n return await evaluateContractsForTriggerBatch({\n ctx,\n belief,\n trigger: args.trigger,\n inputData: args.inputData,\n authenticatedUserId: args.authenticatedUserId,\n contractIds: args.contractIds,\n maxBatchSize: args.maxBatchSize,\n });\n },\n});\n\nexport const getContractStatus = query({\n args: {\n beliefNodeId: v.optional(v.id(\"epistemicNodes\")),\n contractId: v.optional(v.string()),\n status: v.optional(\n v.union(\n v.literal(\"active\"),\n v.literal(\"satisfied\"),\n v.literal(\"violated\"),\n v.literal(\"expired\"),\n v.literal(\"suspended\"),\n v.literal(\"archived\")\n )\n ),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetContractStatusArgs) => {\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n\n let contracts: ContractDoc[] = [];\n if (args.contractId) {\n const contract = await getContractByContractId(ctx, args.contractId);\n contracts = contract ? [contract] : [];\n } else if (args.beliefNodeId) {\n const belief = assertBeliefNode(await ctx.db.get(args.beliefNodeId));\n await requireBeliefProjectAccess(ctx, belief, userId);\n contracts = await contractTables(ctx)\n .query(\"epistemicContracts\")\n .withIndex(\"by_belief\", (q) => q.eq(\"beliefNodeId\", args.beliefNodeId))\n .collect();\n }\n\n if (contracts.length > 0) {\n const contractBeliefDocs = await Promise.all(\n contracts.map((contract) => ctx.db.get(contract.beliefNodeId))\n );\n const contractBeliefs: BeliefNodeDoc[] = [];\n\n for (const belief of contractBeliefDocs) {\n contractBeliefs.push(assertBeliefNode(belief));\n }\n\n await requireTopicReadAccess(ctx, contractBeliefs, userId);\n }\n\n if (args.status) {\n contracts = contracts.filter(\n (contract) => contract.status === args.status\n );\n }\n\n const rows: ContractStatusRow[] = await Promise.all(\n contracts.map(async (contract) => ({\n ...contract,\n latestEvaluation: await getLatestEvaluation(ctx, contract.contractId),\n }))\n );\n\n return rows.sort((a, b) => b.createdAt - a.createdAt);\n },\n});\n\nexport const getContractCoverage = query({\n args: {\n topicId: v.string(),\n recentEvaluationLimit: v.optional(v.number()),\n authenticatedUserId: v.optional(v.string()),\n },\n returns: permissiveReturn,\n handler: async (ctx, args: GetContractCoverageArgs) => {\n const contracts = await contractTables(ctx)\n .query(\"epistemicContracts\")\n .withIndex(\"by_topic\", (q) => q.eq(\"topicId\", args.topicId))\n .collect();\n\n const userId = await resolveAuthenticatedUserId(\n ctx,\n args.authenticatedUserId\n );\n const beliefRows = await ctx.db\n .query(\"epistemicNodes\")\n .withIndex(\"by_topic_type\", (q) =>\n q.eq(\"topicId\", args.topicId).eq(\"nodeType\", \"belief\")\n )\n .collect();\n const beliefs = beliefRows.map((belief) => assertBeliefNode(belief));\n await requireTopicReadAccess(ctx, beliefs, userId);\n\n const recentEvaluationLimit = Math.max(\n 0,\n Math.min(args.recentEvaluationLimit ?? 5, 25)\n );\n const recentEvaluations =\n recentEvaluationLimit === 0\n ? []\n : await contractTables(ctx)\n .query(\"contractEvaluations\")\n .withIndex(\"by_topic_time\", (q) => q.eq(\"topicId\", args.topicId))\n .order(\"desc\")\n .take(recentEvaluationLimit);\n\n const contractBeliefIds = new Set(\n contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => String(contract.beliefNodeId))\n );\n\n return {\n active: contracts.filter((contract) => contract.status === \"active\")\n .length,\n violated: contracts.filter((contract) => contract.status === \"violated\")\n .length,\n expired: contracts.filter((contract) => contract.status === \"expired\")\n .length,\n unboundHighConfidence: beliefs\n .filter(\n (belief) =>\n typeof belief.confidence === \"number\" &&\n belief.confidence >= 0.8 &&\n !contractBeliefIds.has(String(belief._id))\n )\n .map((belief) => ({\n nodeId: belief._id,\n canonicalText: belief.canonicalText,\n confidence: belief.confidence,\n })),\n recentEvaluations,\n };\n },\n});\n\nexport function inheritContractsForFork<\n TBeliefId = string,\n TTopicId = string | undefined,\n>(\n contracts: EpistemicContractRecord<unknown, unknown>[],\n args: {\n beliefNodeId: TBeliefId;\n topicId?: TTopicId;\n createdBy: string;\n now: number;\n }\n) {\n return contracts\n .filter((contract) => contract.status !== \"archived\")\n .map((contract) => createInheritedContractRecord(contract, args));\n}\n","// biome-ignore-all lint/style/useFilenamingConvention: Public graph-primitives wildcard-export path; rename requires an export-map migration.\n/** Facade for split epistemic contract primitives and public contract operations. */\n\nimport {\n clearEpistemicEvaluators as clearEpistemicEvaluatorsImpl,\n getRegisteredEpistemicEvaluators as getRegisteredEpistemicEvaluatorsImpl,\n registerEpistemicEvaluator as registerEpistemicEvaluatorImpl,\n} from \"./epistemicContracts.evaluators\";\nimport {\n createEpistemicContract as createEpistemicContractImpl,\n evaluateContract as evaluateContractImpl,\n evaluateContractsForTrigger as evaluateContractsForTriggerImpl,\n evaluateContradictionStatus as evaluateContradictionStatusImpl,\n evaluateDependentBeliefCount as evaluateDependentBeliefCountImpl,\n evaluateEdgeFreshness as evaluateEdgeFreshnessImpl,\n evaluateEngineeringContracts as evaluateEngineeringContractsImpl,\n evaluateEvidenceCount as evaluateEvidenceCountImpl,\n getContractCoverage as getContractCoverageImpl,\n getContractStatus as getContractStatusImpl,\n inheritContractsForFork as inheritContractsForForkImpl,\n processContractEvaluationOverflow as processContractEvaluationOverflowImpl,\n} from \"./epistemicContracts.handlers\";\nimport type {\n EpistemicEvaluatorContext as EpistemicEvaluatorContextType,\n EpistemicEvaluatorResult as EpistemicEvaluatorResultType,\n EpistemicEvaluator as EpistemicEvaluatorType,\n} from \"./epistemicContracts.types\";\n\nexport type EpistemicEvaluator = EpistemicEvaluatorType;\nexport type EpistemicEvaluatorContext = EpistemicEvaluatorContextType;\nexport type EpistemicEvaluatorResult = EpistemicEvaluatorResultType;\n\nexport const clearEpistemicEvaluators = clearEpistemicEvaluatorsImpl;\nexport const getRegisteredEpistemicEvaluators =\n getRegisteredEpistemicEvaluatorsImpl;\nexport const registerEpistemicEvaluator = registerEpistemicEvaluatorImpl;\nexport const createEpistemicContract = createEpistemicContractImpl;\nexport const evaluateContract = evaluateContractImpl;\nexport const evaluateContractsForTrigger = evaluateContractsForTriggerImpl;\nexport const evaluateContradictionStatus = evaluateContradictionStatusImpl;\nexport const evaluateDependentBeliefCount = evaluateDependentBeliefCountImpl;\nexport const evaluateEdgeFreshness = evaluateEdgeFreshnessImpl;\nexport const evaluateEngineeringContracts = evaluateEngineeringContractsImpl;\nexport const evaluateEvidenceCount = evaluateEvidenceCountImpl;\nexport const getContractCoverage = getContractCoverageImpl;\nexport const getContractStatus = getContractStatusImpl;\nexport const inheritContractsForFork = inheritContractsForForkImpl;\nexport const processContractEvaluationOverflow =\n processContractEvaluationOverflowImpl;\n"]}
|