@lucern/graph-primitives 1.0.29 → 1.0.30
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,10 +1,14 @@
|
|
|
1
|
+
import { unsafeConvexAnyApi } from '@lucern/contracts/convex/unsafeAnyApi';
|
|
2
|
+
import { componentsGeneric } from 'convex/server';
|
|
1
3
|
import { generateGlobalId, assertUuidV7Identity } from '@lucern/contracts/ids';
|
|
2
|
-
import { componentsGeneric, anyApi } from 'convex/server';
|
|
3
4
|
import '@lucern/contracts';
|
|
4
5
|
|
|
5
|
-
// src/
|
|
6
|
+
// src/convex.ts
|
|
7
|
+
var unsafeApi = unsafeConvexAnyApi(
|
|
8
|
+
"graph-primitives top-level module bundle lacks a committed Convex _generated/api surface"
|
|
9
|
+
);
|
|
6
10
|
componentsGeneric();
|
|
7
|
-
var internal =
|
|
11
|
+
var internal = unsafeApi;
|
|
8
12
|
|
|
9
13
|
// src/epistemicLayerRules.ts
|
|
10
14
|
function getNodeLayer(nodeType) {
|
|
@@ -336,15 +340,73 @@ function validateEdgeLayers(edgeType, fromLayer, toLayer) {
|
|
|
336
340
|
}
|
|
337
341
|
|
|
338
342
|
// src/epistemicEdgeCreation.ts
|
|
343
|
+
var EPISTEMIC_LAYERS = /* @__PURE__ */ new Set([
|
|
344
|
+
"L4",
|
|
345
|
+
"L3",
|
|
346
|
+
"L2",
|
|
347
|
+
"L1",
|
|
348
|
+
"ontological",
|
|
349
|
+
"organizational"
|
|
350
|
+
]);
|
|
351
|
+
function readOptionalString(value) {
|
|
352
|
+
return typeof value === "string" && value.trim().length > 0 ? value : void 0;
|
|
353
|
+
}
|
|
354
|
+
function readConvexId(value) {
|
|
355
|
+
const normalized = readOptionalString(value);
|
|
356
|
+
return normalized;
|
|
357
|
+
}
|
|
358
|
+
function readEpistemicLayer(value) {
|
|
359
|
+
const layer = readOptionalString(value);
|
|
360
|
+
return layer && EPISTEMIC_LAYERS.has(layer) ? layer : void 0;
|
|
361
|
+
}
|
|
362
|
+
function readRecord(value) {
|
|
363
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
|
|
364
|
+
}
|
|
365
|
+
function readEdgeNodeRow(value) {
|
|
366
|
+
const record = readRecord(value);
|
|
367
|
+
if (!record) {
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
const id = readConvexId(record._id);
|
|
371
|
+
const globalId = readOptionalString(record.globalId);
|
|
372
|
+
const nodeType = readOptionalString(record.nodeType);
|
|
373
|
+
if (!(id && globalId && nodeType)) {
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
const node = { _id: id, globalId, nodeType };
|
|
377
|
+
const epistemicLayer = readEpistemicLayer(record.epistemicLayer);
|
|
378
|
+
if (epistemicLayer !== void 0) {
|
|
379
|
+
node.epistemicLayer = epistemicLayer;
|
|
380
|
+
}
|
|
381
|
+
const metadata = readRecord(record.metadata);
|
|
382
|
+
if (metadata !== void 0) {
|
|
383
|
+
node.metadata = metadata;
|
|
384
|
+
}
|
|
385
|
+
const projectId = readOptionalString(record.projectId);
|
|
386
|
+
if (projectId !== void 0) {
|
|
387
|
+
node.projectId = projectId;
|
|
388
|
+
}
|
|
389
|
+
return node;
|
|
390
|
+
}
|
|
391
|
+
function requireEdgeNodeRow(value, context) {
|
|
392
|
+
const node = readEdgeNodeRow(value);
|
|
393
|
+
if (!node) {
|
|
394
|
+
throw new Error(`${context} requires a canonical epistemic node row.`);
|
|
395
|
+
}
|
|
396
|
+
return node;
|
|
397
|
+
}
|
|
339
398
|
async function createEpistemicEdge(ctx, params) {
|
|
340
399
|
const globalId = generateGlobalId();
|
|
341
|
-
const fromNode =
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
400
|
+
const fromNode = requireEdgeNodeRow(
|
|
401
|
+
await ctx.db.get(params.fromNodeId),
|
|
402
|
+
"Create epistemic edge source"
|
|
403
|
+
);
|
|
404
|
+
const toNode = requireEdgeNodeRow(
|
|
405
|
+
await ctx.db.get(params.toNodeId),
|
|
406
|
+
"Create epistemic edge target"
|
|
407
|
+
);
|
|
408
|
+
const fromLayer = fromNode.epistemicLayer ?? getNodeLayer(fromNode.nodeType);
|
|
409
|
+
const toLayer = toNode.epistemicLayer ?? getNodeLayer(toNode.nodeType);
|
|
348
410
|
if (!params.skipLayerValidation) {
|
|
349
411
|
const validation = validateEdgeLayers(params.edgeType, fromLayer, toLayer);
|
|
350
412
|
if (!validation.valid) {
|
|
@@ -370,7 +432,7 @@ async function createEpistemicEdge(ctx, params) {
|
|
|
370
432
|
});
|
|
371
433
|
return globalId;
|
|
372
434
|
}
|
|
373
|
-
|
|
435
|
+
function insertEpistemicNode(ctx, doc) {
|
|
374
436
|
assertUuidV7Identity("epistemicNodes", doc.globalId);
|
|
375
437
|
return ctx.db.insert("epistemicNodes", doc);
|
|
376
438
|
}
|
|
@@ -380,8 +442,11 @@ function generateContentHash(nodeType, text) {
|
|
|
380
442
|
const content = `${nodeType}:${normalizeText(text)}`;
|
|
381
443
|
let hash = 5381;
|
|
382
444
|
for (let i = 0; i < content.length; i++) {
|
|
383
|
-
|
|
384
|
-
hash
|
|
445
|
+
const nextHash = hash * 33 + content.charCodeAt(i);
|
|
446
|
+
hash = nextHash - Math.floor(nextHash / 4294967296) * 4294967296;
|
|
447
|
+
if (hash >= 2147483648) {
|
|
448
|
+
hash -= 4294967296;
|
|
449
|
+
}
|
|
385
450
|
}
|
|
386
451
|
const hashHex = Math.abs(hash).toString(16).padStart(8, "0");
|
|
387
452
|
const lengthHex = content.length.toString(16).padStart(4, "0");
|
|
@@ -391,6 +456,71 @@ function generateContentHash(nodeType, text) {
|
|
|
391
456
|
function normalizeText(text) {
|
|
392
457
|
return text.trim().toLowerCase().replace(/\s+/g, " ");
|
|
393
458
|
}
|
|
459
|
+
function readOptionalString2(value) {
|
|
460
|
+
return typeof value === "string" && value.trim().length > 0 ? value : void 0;
|
|
461
|
+
}
|
|
462
|
+
function readOptionalBoolean(value) {
|
|
463
|
+
return typeof value === "boolean" ? value : void 0;
|
|
464
|
+
}
|
|
465
|
+
function readRecord2(value) {
|
|
466
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
467
|
+
}
|
|
468
|
+
function readConvexId2(value) {
|
|
469
|
+
const normalized = readOptionalString2(value);
|
|
470
|
+
return normalized ? normalized : null;
|
|
471
|
+
}
|
|
472
|
+
function readExistingEpistemicNodeRow(value) {
|
|
473
|
+
const record = readRecord2(value);
|
|
474
|
+
if (!record) {
|
|
475
|
+
return null;
|
|
476
|
+
}
|
|
477
|
+
const id = readConvexId2(record._id);
|
|
478
|
+
if (!id) {
|
|
479
|
+
return null;
|
|
480
|
+
}
|
|
481
|
+
const node = { _id: id };
|
|
482
|
+
const metadata = readRecord2(record.metadata);
|
|
483
|
+
if (metadata) {
|
|
484
|
+
node.metadata = metadata;
|
|
485
|
+
}
|
|
486
|
+
const projectId = readOptionalString2(record.projectId);
|
|
487
|
+
if (projectId !== void 0) {
|
|
488
|
+
node.projectId = projectId;
|
|
489
|
+
}
|
|
490
|
+
const status = readOptionalString2(record.status);
|
|
491
|
+
if (status !== void 0) {
|
|
492
|
+
node.status = status;
|
|
493
|
+
}
|
|
494
|
+
return node;
|
|
495
|
+
}
|
|
496
|
+
function readSourceArtifactRow(value) {
|
|
497
|
+
const record = readRecord2(value);
|
|
498
|
+
if (!record) {
|
|
499
|
+
return null;
|
|
500
|
+
}
|
|
501
|
+
const artifact = {};
|
|
502
|
+
const content = readOptionalString2(record.content);
|
|
503
|
+
if (content !== void 0) {
|
|
504
|
+
artifact.content = content;
|
|
505
|
+
}
|
|
506
|
+
const metadata = readRecord2(record.metadata);
|
|
507
|
+
if (metadata) {
|
|
508
|
+
artifact.metadata = metadata;
|
|
509
|
+
}
|
|
510
|
+
const projectId = readOptionalString2(record.projectId);
|
|
511
|
+
if (projectId !== void 0) {
|
|
512
|
+
artifact.projectId = projectId;
|
|
513
|
+
}
|
|
514
|
+
const stage = readOptionalString2(record.stage);
|
|
515
|
+
if (stage !== void 0) {
|
|
516
|
+
artifact.stage = stage;
|
|
517
|
+
}
|
|
518
|
+
const topicId = readOptionalString2(record.topicId);
|
|
519
|
+
if (topicId !== void 0) {
|
|
520
|
+
artifact.topicId = topicId;
|
|
521
|
+
}
|
|
522
|
+
return artifact;
|
|
523
|
+
}
|
|
394
524
|
function mapInsightSourceType(sourceType) {
|
|
395
525
|
switch (sourceType) {
|
|
396
526
|
case "verified":
|
|
@@ -413,16 +543,38 @@ function mapVerificationStatus(status) {
|
|
|
413
543
|
return "unverified";
|
|
414
544
|
}
|
|
415
545
|
}
|
|
546
|
+
function inferInsightConfidence(verificationStatus) {
|
|
547
|
+
if (verificationStatus === "manually_verified") {
|
|
548
|
+
return 0.9;
|
|
549
|
+
}
|
|
550
|
+
if (verificationStatus === "deep_verified") {
|
|
551
|
+
return 0.7;
|
|
552
|
+
}
|
|
553
|
+
if (verificationStatus === "pre_screened") {
|
|
554
|
+
return 0.5;
|
|
555
|
+
}
|
|
556
|
+
return 0.3;
|
|
557
|
+
}
|
|
558
|
+
function mapQuestionSourceType(source) {
|
|
559
|
+
if (source === "manual") {
|
|
560
|
+
return "human";
|
|
561
|
+
}
|
|
562
|
+
if (source === "ai_suggested") {
|
|
563
|
+
return "ai_generated";
|
|
564
|
+
}
|
|
565
|
+
return "ai_extracted";
|
|
566
|
+
}
|
|
416
567
|
async function createEpistemicNodeForInsight(ctx, _insightId, insight) {
|
|
417
568
|
const now = Date.now();
|
|
418
569
|
const globalId = generateGlobalId();
|
|
419
570
|
const contentHash = generateContentHash("evidence", insight.text);
|
|
420
571
|
const existing = await ctx.db.query("epistemicNodes").withIndex("by_contentHash", (q) => q.eq("contentHash", contentHash)).first();
|
|
421
|
-
|
|
422
|
-
|
|
572
|
+
const existingInsightNode = readExistingEpistemicNodeRow(existing);
|
|
573
|
+
if (existingInsightNode?.status === "active") {
|
|
574
|
+
await ctx.db.patch(existingInsightNode._id, {
|
|
423
575
|
updatedAt: now
|
|
424
576
|
});
|
|
425
|
-
return
|
|
577
|
+
return existingInsightNode._id;
|
|
426
578
|
}
|
|
427
579
|
const nodeId = await insertEpistemicNode(ctx, {
|
|
428
580
|
globalId,
|
|
@@ -458,7 +610,7 @@ async function createEpistemicNodeForInsight(ctx, _insightId, insight) {
|
|
|
458
610
|
},
|
|
459
611
|
sourceType: mapInsightSourceType(insight.sourceType),
|
|
460
612
|
aiProvider: insight.aiProvider,
|
|
461
|
-
confidence: insight.verificationStatus
|
|
613
|
+
confidence: inferInsightConfidence(insight.verificationStatus),
|
|
462
614
|
verificationStatus: mapVerificationStatus(insight.verificationStatus),
|
|
463
615
|
status: "active",
|
|
464
616
|
topicId: insight.projectId,
|
|
@@ -490,15 +642,16 @@ async function createEpistemicNodeForBelief(ctx, beliefId, belief) {
|
|
|
490
642
|
const globalId = generateGlobalId();
|
|
491
643
|
const contentHash = generateContentHash("belief", belief.belief);
|
|
492
644
|
const existing = await ctx.db.query("epistemicNodes").withIndex("by_contentHash", (q) => q.eq("contentHash", contentHash)).first();
|
|
493
|
-
|
|
494
|
-
|
|
645
|
+
const existingBeliefNode = readExistingEpistemicNodeRow(existing);
|
|
646
|
+
if (existingBeliefNode?.status === "active") {
|
|
647
|
+
await ctx.db.patch(existingBeliefNode._id, {
|
|
495
648
|
metadata: {
|
|
496
|
-
...
|
|
649
|
+
...existingBeliefNode.metadata ?? {},
|
|
497
650
|
sourceBeliefId: beliefId
|
|
498
651
|
},
|
|
499
652
|
updatedAt: now
|
|
500
653
|
});
|
|
501
|
-
return
|
|
654
|
+
return existingBeliefNode._id;
|
|
502
655
|
}
|
|
503
656
|
const nodeId = await insertEpistemicNode(ctx, {
|
|
504
657
|
globalId,
|
|
@@ -541,13 +694,14 @@ async function createEpistemicNodeForQuestion(ctx, _questionId, question) {
|
|
|
541
694
|
const globalId = generateGlobalId();
|
|
542
695
|
const contentHash = generateContentHash("question", question.question);
|
|
543
696
|
const existing = await ctx.db.query("epistemicNodes").withIndex("by_contentHash", (q) => q.eq("contentHash", contentHash)).first();
|
|
544
|
-
|
|
545
|
-
|
|
697
|
+
const existingQuestionNode = readExistingEpistemicNodeRow(existing);
|
|
698
|
+
if (existingQuestionNode?.status === "active") {
|
|
699
|
+
await ctx.db.patch(existingQuestionNode._id, {
|
|
546
700
|
updatedAt: now
|
|
547
701
|
});
|
|
548
|
-
return
|
|
702
|
+
return existingQuestionNode._id;
|
|
549
703
|
}
|
|
550
|
-
const sourceType = question.source
|
|
704
|
+
const sourceType = mapQuestionSourceType(question.source);
|
|
551
705
|
const nodeId = await insertEpistemicNode(ctx, {
|
|
552
706
|
globalId,
|
|
553
707
|
nodeType: "question",
|
|
@@ -588,8 +742,9 @@ async function createEpistemicNodeForArtifact(ctx, artifactId, artifact) {
|
|
|
588
742
|
artifact.title + artifact.content.slice(0, 500)
|
|
589
743
|
);
|
|
590
744
|
const existing2 = await ctx.db.query("epistemicNodes").withIndex("by_contentHash", (q) => q.eq("contentHash", contentHash2)).first();
|
|
591
|
-
|
|
592
|
-
|
|
745
|
+
const existingSynthesisNode = readExistingEpistemicNodeRow(existing2);
|
|
746
|
+
if (existingSynthesisNode?.status === "active") {
|
|
747
|
+
return existingSynthesisNode._id;
|
|
593
748
|
}
|
|
594
749
|
throw new Error("SKIP_SYNTHESIS_NODE_CREATION");
|
|
595
750
|
}
|
|
@@ -598,15 +753,16 @@ async function createEpistemicNodeForArtifact(ctx, artifactId, artifact) {
|
|
|
598
753
|
artifact.title + artifact.content.slice(0, 500)
|
|
599
754
|
);
|
|
600
755
|
const existing = await ctx.db.query("epistemicNodes").withIndex("by_contentHash", (q) => q.eq("contentHash", contentHash)).first();
|
|
601
|
-
|
|
602
|
-
|
|
756
|
+
const existingArtifactNode = readExistingEpistemicNodeRow(existing);
|
|
757
|
+
if (existingArtifactNode?.status === "active") {
|
|
758
|
+
await ctx.db.patch(existingArtifactNode._id, {
|
|
603
759
|
metadata: {
|
|
604
|
-
...
|
|
760
|
+
...existingArtifactNode.metadata ?? {},
|
|
605
761
|
legacyArtifactId: artifactId
|
|
606
762
|
},
|
|
607
763
|
updatedAt: now
|
|
608
764
|
});
|
|
609
|
-
return
|
|
765
|
+
return existingArtifactNode._id;
|
|
610
766
|
}
|
|
611
767
|
const epistemicLayer = "L1";
|
|
612
768
|
const nodeId = await insertEpistemicNode(ctx, {
|
|
@@ -635,21 +791,28 @@ async function createEpistemicNodeForArtifact(ctx, artifactId, artifact) {
|
|
|
635
791
|
return nodeId;
|
|
636
792
|
}
|
|
637
793
|
async function findOrCreateSourceNode(ctx, artifactId, createdBy, scopeProjectId) {
|
|
638
|
-
const artifact = await ctx.db.get(artifactId);
|
|
794
|
+
const artifact = readSourceArtifactRow(await ctx.db.get(artifactId));
|
|
639
795
|
const effectiveProjectId = scopeProjectId || artifact?.projectId;
|
|
640
796
|
const effectiveTopicId = artifact?.topicId;
|
|
641
797
|
let existingNodes;
|
|
642
798
|
if (effectiveTopicId) {
|
|
643
|
-
|
|
799
|
+
const collectedNodes = await ctx.db.query("epistemicNodes").withIndex("by_topic", (q) => q.eq("topicId", effectiveTopicId)).collect();
|
|
800
|
+
existingNodes = collectedNodes.flatMap((node) => {
|
|
801
|
+
const row = readExistingEpistemicNodeRow(node);
|
|
802
|
+
return row ? [row] : [];
|
|
803
|
+
});
|
|
644
804
|
} else {
|
|
645
|
-
|
|
805
|
+
const collectedNodes = await ctx.db.query("epistemicNodes").withIndex("by_nodeType", (q) => q.eq("nodeType", "source")).collect();
|
|
806
|
+
existingNodes = collectedNodes.flatMap((node) => {
|
|
807
|
+
const row = readExistingEpistemicNodeRow(node);
|
|
808
|
+
return row ? [row] : [];
|
|
809
|
+
});
|
|
646
810
|
}
|
|
647
811
|
const existing = existingNodes.find((n) => {
|
|
648
812
|
if (effectiveProjectId && n.projectId && n.projectId !== effectiveProjectId) {
|
|
649
813
|
return false;
|
|
650
814
|
}
|
|
651
|
-
|
|
652
|
-
return metadata?.legacyArtifactId === artifactId;
|
|
815
|
+
return n.metadata?.legacyArtifactId === artifactId;
|
|
653
816
|
});
|
|
654
817
|
if (existing) {
|
|
655
818
|
return existing._id;
|
|
@@ -659,18 +822,18 @@ async function findOrCreateSourceNode(ctx, artifactId, createdBy, scopeProjectId
|
|
|
659
822
|
}
|
|
660
823
|
const now = Date.now();
|
|
661
824
|
const globalId = generateGlobalId();
|
|
662
|
-
const artifactType = artifact.metadata?.type
|
|
663
|
-
const isDeepResearch = artifact.metadata?.isDeepResearch;
|
|
825
|
+
const artifactType = readOptionalString2(artifact.metadata?.type) ?? "";
|
|
826
|
+
const isDeepResearch = readOptionalBoolean(artifact.metadata?.isDeepResearch) ?? false;
|
|
664
827
|
let nodeType = "source";
|
|
665
828
|
if (isDeepResearch || artifactType.includes("deep") || artifactType.includes("research")) {
|
|
666
829
|
nodeType = "synthesis";
|
|
667
830
|
} else if (artifactType.includes("primer")) {
|
|
668
831
|
nodeType = "synthesis";
|
|
669
832
|
}
|
|
670
|
-
const title = artifact.metadata?.title || artifact.metadata?.theme || "Untitled";
|
|
833
|
+
const title = readOptionalString2(artifact.metadata?.title) || readOptionalString2(artifact.metadata?.theme) || "Untitled";
|
|
671
834
|
const contentHash = generateContentHash(
|
|
672
835
|
nodeType,
|
|
673
|
-
title + (artifact.content?.slice(0, 500)
|
|
836
|
+
title + (artifact.content?.slice(0, 500) ?? "")
|
|
674
837
|
);
|
|
675
838
|
const epistemicLayer = nodeType === "synthesis" ? "L2" : "L1";
|
|
676
839
|
const nodeId = await insertEpistemicNode(ctx, {
|