@lucern/contracts 1.0.12 → 1.0.14
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/CHANGELOG.md +7 -0
- package/dist/function-registry/beliefs.js +48 -11
- package/dist/function-registry/beliefs.js.map +1 -1
- package/dist/function-registry/coding.js +46 -9
- package/dist/function-registry/coding.js.map +1 -1
- package/dist/function-registry/context.js +46 -9
- package/dist/function-registry/context.js.map +1 -1
- package/dist/function-registry/contracts.js +46 -9
- package/dist/function-registry/contracts.js.map +1 -1
- package/dist/function-registry/coordination.js +46 -9
- package/dist/function-registry/coordination.js.map +1 -1
- package/dist/function-registry/edges.js +46 -9
- package/dist/function-registry/edges.js.map +1 -1
- package/dist/function-registry/evidence.js +227 -25
- package/dist/function-registry/evidence.js.map +1 -1
- package/dist/function-registry/graph.js +46 -9
- package/dist/function-registry/graph.js.map +1 -1
- package/dist/function-registry/helpers.js +46 -9
- package/dist/function-registry/helpers.js.map +1 -1
- package/dist/function-registry/identity.js +46 -9
- package/dist/function-registry/identity.js.map +1 -1
- package/dist/function-registry/index.js +46 -9
- package/dist/function-registry/index.js.map +1 -1
- package/dist/function-registry/judgments.js +46 -9
- package/dist/function-registry/judgments.js.map +1 -1
- package/dist/function-registry/legacy.js +46 -9
- package/dist/function-registry/legacy.js.map +1 -1
- package/dist/function-registry/lenses.js +46 -9
- package/dist/function-registry/lenses.js.map +1 -1
- package/dist/function-registry/manifest.d.ts +10 -4
- package/dist/function-registry/manifest.js +13 -1
- package/dist/function-registry/manifest.js.map +1 -1
- package/dist/function-registry/nodes.js +46 -9
- package/dist/function-registry/nodes.js.map +1 -1
- package/dist/function-registry/ontologies.js +46 -9
- package/dist/function-registry/ontologies.js.map +1 -1
- package/dist/function-registry/pipeline.js +46 -9
- package/dist/function-registry/pipeline.js.map +1 -1
- package/dist/function-registry/questions.js +46 -9
- package/dist/function-registry/questions.js.map +1 -1
- package/dist/function-registry/tasks.js +46 -9
- package/dist/function-registry/tasks.js.map +1 -1
- package/dist/function-registry/topics.js +46 -9
- package/dist/function-registry/topics.js.map +1 -1
- package/dist/function-registry/worktrees.js +46 -9
- package/dist/function-registry/worktrees.js.map +1 -1
- package/dist/index.js +160 -16
- package/dist/index.js.map +1 -1
- package/dist/manifests/invariants/index.js +24 -5
- package/dist/manifests/invariants/index.js.map +1 -1
- package/dist/manifests/invariants/inv-1-beliefs-append-only.js +24 -5
- package/dist/manifests/invariants/inv-1-beliefs-append-only.js.map +1 -1
- package/dist/projections/check-convex-args-shape.js +127 -8
- package/dist/projections/check-convex-args-shape.js.map +1 -1
- package/dist/projections/create-evidence.projection.d.ts +168 -0
- package/dist/projections/create-evidence.projection.js +127 -8
- package/dist/projections/create-evidence.projection.js.map +1 -1
- package/dist/projections/index.d.ts +28 -0
- package/dist/projections/index.js +127 -8
- package/dist/projections/index.js.map +1 -1
- package/dist/proof-attestation.json +1 -1
- package/dist/sdk-methods.contract.d.ts +3 -2
- package/dist/sdk-tools.contract.js +33 -8
- package/dist/sdk-tools.contract.js.map +1 -1
- package/dist/sdk-tools.contract.registry.js +33 -8
- package/dist/sdk-tools.contract.registry.js.map +1 -1
- package/dist/sdk-tools.contract.values.js +33 -8
- package/dist/sdk-tools.contract.values.js.map +1 -1
- package/dist/tool-contracts.context-orientation.js +2 -1
- package/dist/tool-contracts.context-orientation.js.map +1 -1
- package/dist/tool-contracts.intelligence-evidence.js +26 -4
- package/dist/tool-contracts.intelligence-evidence.js.map +1 -1
- package/dist/tool-contracts.js +33 -8
- package/dist/tool-contracts.js.map +1 -1
- package/dist/tool-contracts.lifecycle.js +2 -2
- package/dist/tool-contracts.lifecycle.js.map +1 -1
- package/dist/tool-contracts.questions-listing.js +3 -1
- package/dist/tool-contracts.questions-listing.js.map +1 -1
- package/dist/tool-contracts.values.js +33 -8
- package/dist/tool-contracts.values.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,6 +23,34 @@ declare const createEvidenceInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
23
23
|
targetNodeId: z.ZodOptional<z.ZodString>;
|
|
24
24
|
linkedBeliefNodeId: z.ZodOptional<z.ZodString>;
|
|
25
25
|
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
26
|
+
beliefRelations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
27
|
+
beliefId: z.ZodOptional<z.ZodString>;
|
|
28
|
+
beliefNodeId: z.ZodOptional<z.ZodString>;
|
|
29
|
+
targetId: z.ZodOptional<z.ZodString>;
|
|
30
|
+
relation: z.ZodOptional<z.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
31
|
+
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
32
|
+
confidence: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
34
|
+
rationale: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
beliefId?: string | undefined;
|
|
37
|
+
rationale?: string | undefined;
|
|
38
|
+
beliefNodeId?: string | undefined;
|
|
39
|
+
weight?: number | undefined;
|
|
40
|
+
confidence?: number | undefined;
|
|
41
|
+
targetId?: string | undefined;
|
|
42
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
43
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
beliefId?: string | undefined;
|
|
46
|
+
rationale?: string | undefined;
|
|
47
|
+
beliefNodeId?: string | undefined;
|
|
48
|
+
weight?: number | undefined;
|
|
49
|
+
confidence?: number | undefined;
|
|
50
|
+
targetId?: string | undefined;
|
|
51
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
52
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
53
|
+
}>, "many">>;
|
|
26
54
|
confidence: z.ZodOptional<z.ZodNumber>;
|
|
27
55
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
28
56
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
@@ -51,6 +79,34 @@ declare const createEvidenceInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
51
79
|
targetNodeId: z.ZodOptional<z.ZodString>;
|
|
52
80
|
linkedBeliefNodeId: z.ZodOptional<z.ZodString>;
|
|
53
81
|
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
82
|
+
beliefRelations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
83
|
+
beliefId: z.ZodOptional<z.ZodString>;
|
|
84
|
+
beliefNodeId: z.ZodOptional<z.ZodString>;
|
|
85
|
+
targetId: z.ZodOptional<z.ZodString>;
|
|
86
|
+
relation: z.ZodOptional<z.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
87
|
+
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
88
|
+
confidence: z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
90
|
+
rationale: z.ZodOptional<z.ZodString>;
|
|
91
|
+
}, "strip", z.ZodTypeAny, {
|
|
92
|
+
beliefId?: string | undefined;
|
|
93
|
+
rationale?: string | undefined;
|
|
94
|
+
beliefNodeId?: string | undefined;
|
|
95
|
+
weight?: number | undefined;
|
|
96
|
+
confidence?: number | undefined;
|
|
97
|
+
targetId?: string | undefined;
|
|
98
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
99
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
100
|
+
}, {
|
|
101
|
+
beliefId?: string | undefined;
|
|
102
|
+
rationale?: string | undefined;
|
|
103
|
+
beliefNodeId?: string | undefined;
|
|
104
|
+
weight?: number | undefined;
|
|
105
|
+
confidence?: number | undefined;
|
|
106
|
+
targetId?: string | undefined;
|
|
107
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
108
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
109
|
+
}>, "many">>;
|
|
54
110
|
confidence: z.ZodOptional<z.ZodNumber>;
|
|
55
111
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
56
112
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
@@ -79,6 +135,34 @@ declare const createEvidenceInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
79
135
|
targetNodeId: z.ZodOptional<z.ZodString>;
|
|
80
136
|
linkedBeliefNodeId: z.ZodOptional<z.ZodString>;
|
|
81
137
|
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
138
|
+
beliefRelations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
139
|
+
beliefId: z.ZodOptional<z.ZodString>;
|
|
140
|
+
beliefNodeId: z.ZodOptional<z.ZodString>;
|
|
141
|
+
targetId: z.ZodOptional<z.ZodString>;
|
|
142
|
+
relation: z.ZodOptional<z.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
143
|
+
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
144
|
+
confidence: z.ZodOptional<z.ZodNumber>;
|
|
145
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
146
|
+
rationale: z.ZodOptional<z.ZodString>;
|
|
147
|
+
}, "strip", z.ZodTypeAny, {
|
|
148
|
+
beliefId?: string | undefined;
|
|
149
|
+
rationale?: string | undefined;
|
|
150
|
+
beliefNodeId?: string | undefined;
|
|
151
|
+
weight?: number | undefined;
|
|
152
|
+
confidence?: number | undefined;
|
|
153
|
+
targetId?: string | undefined;
|
|
154
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
155
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
156
|
+
}, {
|
|
157
|
+
beliefId?: string | undefined;
|
|
158
|
+
rationale?: string | undefined;
|
|
159
|
+
beliefNodeId?: string | undefined;
|
|
160
|
+
weight?: number | undefined;
|
|
161
|
+
confidence?: number | undefined;
|
|
162
|
+
targetId?: string | undefined;
|
|
163
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
164
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
165
|
+
}>, "many">>;
|
|
82
166
|
confidence: z.ZodOptional<z.ZodNumber>;
|
|
83
167
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
84
168
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
@@ -107,6 +191,34 @@ declare const createEvidenceInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
107
191
|
targetNodeId: z.ZodOptional<z.ZodString>;
|
|
108
192
|
linkedBeliefNodeId: z.ZodOptional<z.ZodString>;
|
|
109
193
|
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
194
|
+
beliefRelations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
195
|
+
beliefId: z.ZodOptional<z.ZodString>;
|
|
196
|
+
beliefNodeId: z.ZodOptional<z.ZodString>;
|
|
197
|
+
targetId: z.ZodOptional<z.ZodString>;
|
|
198
|
+
relation: z.ZodOptional<z.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
199
|
+
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
200
|
+
confidence: z.ZodOptional<z.ZodNumber>;
|
|
201
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
202
|
+
rationale: z.ZodOptional<z.ZodString>;
|
|
203
|
+
}, "strip", z.ZodTypeAny, {
|
|
204
|
+
beliefId?: string | undefined;
|
|
205
|
+
rationale?: string | undefined;
|
|
206
|
+
beliefNodeId?: string | undefined;
|
|
207
|
+
weight?: number | undefined;
|
|
208
|
+
confidence?: number | undefined;
|
|
209
|
+
targetId?: string | undefined;
|
|
210
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
211
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
212
|
+
}, {
|
|
213
|
+
beliefId?: string | undefined;
|
|
214
|
+
rationale?: string | undefined;
|
|
215
|
+
beliefNodeId?: string | undefined;
|
|
216
|
+
weight?: number | undefined;
|
|
217
|
+
confidence?: number | undefined;
|
|
218
|
+
targetId?: string | undefined;
|
|
219
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
220
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
221
|
+
}>, "many">>;
|
|
110
222
|
confidence: z.ZodOptional<z.ZodNumber>;
|
|
111
223
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
112
224
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
@@ -135,6 +247,34 @@ declare const createEvidenceInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
135
247
|
targetNodeId: z.ZodOptional<z.ZodString>;
|
|
136
248
|
linkedBeliefNodeId: z.ZodOptional<z.ZodString>;
|
|
137
249
|
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
250
|
+
beliefRelations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
251
|
+
beliefId: z.ZodOptional<z.ZodString>;
|
|
252
|
+
beliefNodeId: z.ZodOptional<z.ZodString>;
|
|
253
|
+
targetId: z.ZodOptional<z.ZodString>;
|
|
254
|
+
relation: z.ZodOptional<z.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
255
|
+
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
256
|
+
confidence: z.ZodOptional<z.ZodNumber>;
|
|
257
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
258
|
+
rationale: z.ZodOptional<z.ZodString>;
|
|
259
|
+
}, "strip", z.ZodTypeAny, {
|
|
260
|
+
beliefId?: string | undefined;
|
|
261
|
+
rationale?: string | undefined;
|
|
262
|
+
beliefNodeId?: string | undefined;
|
|
263
|
+
weight?: number | undefined;
|
|
264
|
+
confidence?: number | undefined;
|
|
265
|
+
targetId?: string | undefined;
|
|
266
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
267
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
268
|
+
}, {
|
|
269
|
+
beliefId?: string | undefined;
|
|
270
|
+
rationale?: string | undefined;
|
|
271
|
+
beliefNodeId?: string | undefined;
|
|
272
|
+
weight?: number | undefined;
|
|
273
|
+
confidence?: number | undefined;
|
|
274
|
+
targetId?: string | undefined;
|
|
275
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
276
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
277
|
+
}>, "many">>;
|
|
138
278
|
confidence: z.ZodOptional<z.ZodNumber>;
|
|
139
279
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
140
280
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
@@ -165,6 +305,34 @@ declare const createEvidenceProjection: ProjectionDef<z.objectInputType<{
|
|
|
165
305
|
targetNodeId: z.ZodOptional<z.ZodString>;
|
|
166
306
|
linkedBeliefNodeId: z.ZodOptional<z.ZodString>;
|
|
167
307
|
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
308
|
+
beliefRelations: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
309
|
+
beliefId: z.ZodOptional<z.ZodString>;
|
|
310
|
+
beliefNodeId: z.ZodOptional<z.ZodString>;
|
|
311
|
+
targetId: z.ZodOptional<z.ZodString>;
|
|
312
|
+
relation: z.ZodOptional<z.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
313
|
+
evidenceRelation: z.ZodOptional<z.ZodEnum<["supports", "contradicts"]>>;
|
|
314
|
+
confidence: z.ZodOptional<z.ZodNumber>;
|
|
315
|
+
weight: z.ZodOptional<z.ZodNumber>;
|
|
316
|
+
rationale: z.ZodOptional<z.ZodString>;
|
|
317
|
+
}, "strip", z.ZodTypeAny, {
|
|
318
|
+
beliefId?: string | undefined;
|
|
319
|
+
rationale?: string | undefined;
|
|
320
|
+
beliefNodeId?: string | undefined;
|
|
321
|
+
weight?: number | undefined;
|
|
322
|
+
confidence?: number | undefined;
|
|
323
|
+
targetId?: string | undefined;
|
|
324
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
325
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
326
|
+
}, {
|
|
327
|
+
beliefId?: string | undefined;
|
|
328
|
+
rationale?: string | undefined;
|
|
329
|
+
beliefNodeId?: string | undefined;
|
|
330
|
+
weight?: number | undefined;
|
|
331
|
+
confidence?: number | undefined;
|
|
332
|
+
targetId?: string | undefined;
|
|
333
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
334
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
335
|
+
}>, "many">>;
|
|
168
336
|
confidence: z.ZodOptional<z.ZodNumber>;
|
|
169
337
|
weight: z.ZodOptional<z.ZodNumber>;
|
|
170
338
|
reasoning: z.ZodOptional<z.ZodString>;
|
|
@@ -24,6 +24,23 @@ function defineProjection(def) {
|
|
|
24
24
|
|
|
25
25
|
// src/projections/create-evidence.projection.ts
|
|
26
26
|
var jsonRecordSchema = z.record(z.unknown());
|
|
27
|
+
var evidenceRelationSchema = z.enum(["supports", "contradicts"]);
|
|
28
|
+
var evidenceRelationAliasSchema = z.enum([
|
|
29
|
+
"supports",
|
|
30
|
+
"contradicts",
|
|
31
|
+
"supporting",
|
|
32
|
+
"contradicting"
|
|
33
|
+
]);
|
|
34
|
+
var beliefRelationSchema = z.object({
|
|
35
|
+
beliefId: z.string().optional(),
|
|
36
|
+
beliefNodeId: z.string().optional(),
|
|
37
|
+
targetId: z.string().optional(),
|
|
38
|
+
relation: evidenceRelationAliasSchema.optional(),
|
|
39
|
+
evidenceRelation: evidenceRelationSchema.optional(),
|
|
40
|
+
confidence: z.number().optional(),
|
|
41
|
+
weight: z.number().optional(),
|
|
42
|
+
rationale: z.string().optional()
|
|
43
|
+
});
|
|
27
44
|
var createEvidenceInputSchemaBase = z.object({
|
|
28
45
|
projectId: z.string().optional(),
|
|
29
46
|
topicId: z.string().optional(),
|
|
@@ -45,7 +62,8 @@ var createEvidenceInputSchemaBase = z.object({
|
|
|
45
62
|
targetId: z.string().optional(),
|
|
46
63
|
targetNodeId: z.string().optional(),
|
|
47
64
|
linkedBeliefNodeId: z.string().optional(),
|
|
48
|
-
evidenceRelation:
|
|
65
|
+
evidenceRelation: evidenceRelationSchema.optional(),
|
|
66
|
+
beliefRelations: z.array(beliefRelationSchema).optional(),
|
|
49
67
|
confidence: z.number().optional(),
|
|
50
68
|
weight: z.number().optional(),
|
|
51
69
|
reasoning: z.string().optional(),
|
|
@@ -53,11 +71,55 @@ var createEvidenceInputSchemaBase = z.object({
|
|
|
53
71
|
metadata: jsonRecordSchema.optional(),
|
|
54
72
|
trustedBypassAccessCheck: z.boolean().optional()
|
|
55
73
|
}).passthrough();
|
|
56
|
-
|
|
57
|
-
(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
74
|
+
function hasNonzeroWeight(value) {
|
|
75
|
+
return typeof value === "number" && Number.isFinite(value) && value !== 0;
|
|
76
|
+
}
|
|
77
|
+
function hasRelationSignal(value, weight) {
|
|
78
|
+
return Boolean(normalizeRelation(value, weight));
|
|
79
|
+
}
|
|
80
|
+
var createEvidenceInputSchema = createEvidenceInputSchemaBase.superRefine(
|
|
81
|
+
(input, ctx) => {
|
|
82
|
+
if (!input.text && !input.canonicalText) {
|
|
83
|
+
ctx.addIssue({
|
|
84
|
+
code: z.ZodIssueCode.custom,
|
|
85
|
+
message: "create_evidence requires text",
|
|
86
|
+
path: ["text"]
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const target = input.targetId ?? input.targetNodeId;
|
|
90
|
+
const kind = targetKind(target);
|
|
91
|
+
const linksPrimaryBelief = Boolean(
|
|
92
|
+
input.linkedBeliefNodeId || kind === "belief" || kind === "unknown" && target
|
|
93
|
+
);
|
|
94
|
+
const weight = typeof input.weight === "number" ? input.weight : void 0;
|
|
95
|
+
if (linksPrimaryBelief && !hasRelationSignal(input.evidenceRelation, weight)) {
|
|
96
|
+
ctx.addIssue({
|
|
97
|
+
code: z.ZodIssueCode.custom,
|
|
98
|
+
message: "belief-targeted evidence requires evidenceRelation='supports'|'contradicts' or a nonzero signed weight",
|
|
99
|
+
path: ["evidenceRelation"]
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
input.beliefRelations?.forEach((relation, index) => {
|
|
103
|
+
const beliefNodeId = relation.beliefNodeId ?? relation.beliefId ?? relation.targetId;
|
|
104
|
+
if (!beliefNodeId) {
|
|
105
|
+
ctx.addIssue({
|
|
106
|
+
code: z.ZodIssueCode.custom,
|
|
107
|
+
message: "beliefRelations entries require beliefId, beliefNodeId, or targetId",
|
|
108
|
+
path: ["beliefRelations", index, "beliefNodeId"]
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const relationWeight = typeof relation.weight === "number" ? relation.weight : void 0;
|
|
112
|
+
if (beliefNodeId && !hasRelationSignal(
|
|
113
|
+
relation.evidenceRelation ?? relation.relation,
|
|
114
|
+
relationWeight
|
|
115
|
+
)) {
|
|
116
|
+
ctx.addIssue({
|
|
117
|
+
code: z.ZodIssueCode.custom,
|
|
118
|
+
message: "beliefRelations entries require evidenceRelation='supports'|'contradicts' or a nonzero signed weight",
|
|
119
|
+
path: ["beliefRelations", index, "evidenceRelation"]
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
61
123
|
}
|
|
62
124
|
);
|
|
63
125
|
function compactRecord(input) {
|
|
@@ -109,6 +171,47 @@ function targetKind(targetId) {
|
|
|
109
171
|
}
|
|
110
172
|
return "unknown";
|
|
111
173
|
}
|
|
174
|
+
function normalizeRelation(value, weight) {
|
|
175
|
+
if (value === "supports" || value === "supporting") {
|
|
176
|
+
return "supports";
|
|
177
|
+
}
|
|
178
|
+
if (value === "contradicts" || value === "contradicting") {
|
|
179
|
+
return "contradicts";
|
|
180
|
+
}
|
|
181
|
+
if (weight === void 0 || !hasNonzeroWeight(weight)) {
|
|
182
|
+
return void 0;
|
|
183
|
+
}
|
|
184
|
+
return weight < 0 ? "contradicts" : "supports";
|
|
185
|
+
}
|
|
186
|
+
function normalizeConfidence(confidence, weight) {
|
|
187
|
+
if (confidence !== void 0) {
|
|
188
|
+
return Math.min(1, Math.max(0, confidence));
|
|
189
|
+
}
|
|
190
|
+
if (weight === void 0) {
|
|
191
|
+
return void 0;
|
|
192
|
+
}
|
|
193
|
+
return Math.min(1, Math.max(0, Math.abs(weight)));
|
|
194
|
+
}
|
|
195
|
+
function normalizeBeliefRelation(relation) {
|
|
196
|
+
const beliefNodeId = relation.beliefNodeId ?? relation.beliefId ?? relation.targetId;
|
|
197
|
+
if (!beliefNodeId) {
|
|
198
|
+
return void 0;
|
|
199
|
+
}
|
|
200
|
+
const weight = typeof relation.weight === "number" ? relation.weight : void 0;
|
|
201
|
+
const evidenceRelation = normalizeRelation(
|
|
202
|
+
relation.evidenceRelation ?? relation.relation,
|
|
203
|
+
weight
|
|
204
|
+
);
|
|
205
|
+
if (!evidenceRelation) {
|
|
206
|
+
return void 0;
|
|
207
|
+
}
|
|
208
|
+
return compactRecord({
|
|
209
|
+
beliefNodeId,
|
|
210
|
+
relation: evidenceRelation,
|
|
211
|
+
confidence: normalizeConfidence(relation.confidence, weight),
|
|
212
|
+
rationale: relation.rationale
|
|
213
|
+
});
|
|
214
|
+
}
|
|
112
215
|
var createEvidenceProjection = defineProjection({
|
|
113
216
|
contractName: "create_evidence",
|
|
114
217
|
inputSchema: createEvidenceInputSchema,
|
|
@@ -119,6 +222,11 @@ var createEvidenceProjection = defineProjection({
|
|
|
119
222
|
const kind = targetKind(target);
|
|
120
223
|
const linkedWorktreeId = kind === "worktree" ? normalizeWorktreeId(target) : void 0;
|
|
121
224
|
const linkedBeliefNodeId = input.linkedBeliefNodeId ?? (kind === "belief" || kind === "unknown" ? input.targetNodeId ?? input.targetId : void 0);
|
|
225
|
+
const evidenceRelation = linkedBeliefNodeId ? normalizeRelation(input.evidenceRelation, weight) : void 0;
|
|
226
|
+
const confidence = evidenceRelation ? normalizeConfidence(input.confidence, weight) : void 0;
|
|
227
|
+
const beliefRelations = input.beliefRelations?.map(normalizeBeliefRelation).filter(
|
|
228
|
+
(relation) => relation !== void 0
|
|
229
|
+
);
|
|
122
230
|
return compactRecord({
|
|
123
231
|
projectId: input.projectId,
|
|
124
232
|
topicId: normalizeTopicIdForKernel(input.topicId),
|
|
@@ -147,8 +255,9 @@ var createEvidenceProjection = defineProjection({
|
|
|
147
255
|
rationale: input.rationale
|
|
148
256
|
}),
|
|
149
257
|
linkedBeliefNodeId,
|
|
150
|
-
evidenceRelation
|
|
151
|
-
confidence
|
|
258
|
+
evidenceRelation,
|
|
259
|
+
confidence,
|
|
260
|
+
beliefRelations: beliefRelations && beliefRelations.length > 0 ? beliefRelations : void 0,
|
|
152
261
|
rationale: input.rationale,
|
|
153
262
|
trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true
|
|
154
263
|
});
|
|
@@ -177,6 +286,16 @@ var createEvidenceProjection = defineProjection({
|
|
|
177
286
|
v.literal("contradicts")
|
|
178
287
|
)
|
|
179
288
|
),
|
|
289
|
+
beliefRelations: v.optional(
|
|
290
|
+
v.array(
|
|
291
|
+
v.object({
|
|
292
|
+
beliefNodeId: v.string(),
|
|
293
|
+
relation: v.union(v.literal("supports"), v.literal("contradicts")),
|
|
294
|
+
confidence: v.optional(v.number()),
|
|
295
|
+
rationale: v.optional(v.string())
|
|
296
|
+
})
|
|
297
|
+
)
|
|
298
|
+
),
|
|
180
299
|
confidence: v.optional(v.number()),
|
|
181
300
|
rationale: v.string(),
|
|
182
301
|
trustedBypassAccessCheck: v.optional(v.boolean())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ids.contract.ts","../../src/projections/projection-dsl.ts","../../src/projections/create-evidence.projection.ts"],"names":[],"mappings":"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","file":"create-evidence.projection.js","sourcesContent":["export type DecodedPrefixedId = {\n prefix: string;\n value: string;\n};\n\nconst PREFIXED_ID_PATTERN = /^([a-z][a-z0-9]*)_(.+)$/;\n\nexport function encodePrefixedId(prefix: string, value: string): string {\n const normalizedPrefix = prefix.trim();\n const normalizedValue = value.trim();\n\n if (!normalizedPrefix || !normalizedValue) {\n throw new Error(\"Both prefix and value are required to encode a prefixed ID.\");\n }\n\n return `${normalizedPrefix}_${normalizedValue}`;\n}\n\nexport function decodePrefixedId(id: string): DecodedPrefixedId {\n const normalized = id.trim();\n const match = PREFIXED_ID_PATTERN.exec(normalized);\n\n if (!match) {\n throw new Error(`Invalid prefixed ID: ${id}`);\n }\n\n return {\n prefix: match[1],\n value: match[2],\n };\n}\n\nexport function hasPrefixedIdPrefix(id: string, prefix: string): boolean {\n const decoded = decodePrefixedId(id);\n return decoded.prefix === prefix.trim();\n}\n","import type { z } from \"zod\";\n\nexport interface ProjectionDef<TInput, TConvexArgs> {\n contractName: string;\n inputSchema: z.ZodSchema<TInput>;\n project: (input: TInput) => TConvexArgs;\n convexArgsValidator: unknown;\n}\n\nexport function defineProjection<I, C>(\n def: ProjectionDef<I, C>\n): ProjectionDef<I, C> {\n return def;\n}\n","import { v } from \"convex/values\";\nimport { z } from \"zod\";\nimport { decodePrefixedId } from \"../ids.contract.js\";\nimport { defineProjection } from \"./projection-dsl.js\";\n\nconst jsonRecordSchema = z.record(z.unknown());\n\nconst createEvidenceInputSchemaBase = z\n .object({\n projectId: z.string().optional(),\n topicId: z.string().optional(),\n text: z.string().optional(),\n canonicalText: z.string().optional(),\n title: z.string().optional(),\n content: z.string().optional(),\n contentType: z.string().optional(),\n kind: z.string().optional(),\n tags: z.array(z.string()).optional(),\n source: z.string().optional(),\n sourceUrl: z.string().optional(),\n sourceType: z.string().optional(),\n externalSourceType: z.string().optional(),\n sourceQuestionId: z.string().optional(),\n methodology: z.string().optional(),\n informationAsymmetry: z.string().optional(),\n sourceDescription: z.string().optional(),\n targetId: z.string().optional(),\n targetNodeId: z.string().optional(),\n linkedBeliefNodeId: z.string().optional(),\n evidenceRelation: z.enum([\"supports\", \"contradicts\"]).optional(),\n confidence: z.number().optional(),\n weight: z.number().optional(),\n reasoning: z.string().optional(),\n rationale: z.string(),\n metadata: jsonRecordSchema.optional(),\n trustedBypassAccessCheck: z.boolean().optional(),\n })\n .passthrough();\n\nexport const createEvidenceInputSchema = createEvidenceInputSchemaBase.refine(\n (input) => Boolean(input.text ?? input.canonicalText),\n {\n message: \"create_evidence requires text\",\n path: [\"text\"],\n },\n);\n\nexport type CreateEvidenceProjectionInput = z.infer<\n typeof createEvidenceInputSchema\n>;\n\nfunction compactRecord(\n input: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(input).filter(([, value]) => value !== undefined),\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction normalizeTopicIdForKernel(topicId: string | undefined): string | undefined {\n const normalized = topicId?.trim();\n if (!normalized) {\n return undefined;\n }\n\n try {\n const decoded = decodePrefixedId(normalized);\n return decoded.prefix === \"top\" ? decoded.value : normalized;\n } catch {\n return normalized;\n }\n}\n\nfunction normalizeWorktreeId(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n if (!normalized) {\n return undefined;\n }\n if (normalized.startsWith(\"wt_\")) {\n return normalized.slice(\"wt_\".length);\n }\n return normalized;\n}\n\nfunction targetKind(targetId: string | undefined): \"belief\" | \"question\" | \"worktree\" | \"unknown\" {\n const normalized = targetId?.trim();\n if (!normalized) {\n return \"unknown\";\n }\n if (normalized.startsWith(\"wt_\") || /^tn[a-z0-9]+$/i.test(normalized)) {\n return \"worktree\";\n }\n if (normalized.startsWith(\"que_\")) {\n return \"question\";\n }\n if (normalized.startsWith(\"bel_\")) {\n return \"belief\";\n }\n return \"unknown\";\n}\n\nexport const createEvidenceProjection = defineProjection({\n contractName: \"create_evidence\",\n inputSchema: createEvidenceInputSchema,\n project: (input: CreateEvidenceProjectionInput) => {\n const text = input.text ?? input.canonicalText;\n const weight = typeof input.weight === \"number\" ? input.weight : undefined;\n const target = input.targetId ?? input.targetNodeId;\n const kind = targetKind(target);\n const linkedWorktreeId =\n kind === \"worktree\" ? normalizeWorktreeId(target) : undefined;\n const linkedBeliefNodeId =\n input.linkedBeliefNodeId ??\n (kind === \"belief\" || kind === \"unknown\" ? input.targetNodeId ?? input.targetId : undefined);\n\n return compactRecord({\n projectId: input.projectId,\n topicId: normalizeTopicIdForKernel(input.topicId),\n text,\n title: input.title ?? text,\n content: input.content ?? text,\n contentType: input.contentType,\n kind: input.kind,\n tags: input.tags,\n sourceType: input.sourceType,\n externalSourceType: input.externalSourceType,\n sourceUrl: input.sourceUrl ?? input.source,\n sourceQuestionId: input.sourceQuestionId,\n methodology: input.methodology,\n informationAsymmetry: input.informationAsymmetry,\n sourceDescription: input.sourceDescription,\n metadata: compactRecord({\n ...recordValue(input.metadata),\n source: input.source,\n targetId: input.targetId,\n targetNodeId: input.targetNodeId,\n targetKind: kind === \"unknown\" ? undefined : kind,\n linkedWorktreeId,\n weight,\n reasoning: input.reasoning,\n rationale: input.rationale,\n }),\n linkedBeliefNodeId,\n evidenceRelation:\n input.evidenceRelation ??\n (weight === undefined\n ? undefined\n : weight < 0\n ? \"contradicts\"\n : \"supports\"),\n confidence:\n input.confidence ??\n (weight === undefined\n ? undefined\n : Math.min(1, Math.max(0, Math.abs(weight)))),\n rationale: input.rationale,\n trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true,\n });\n },\n convexArgsValidator: v.object({\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n metadata: v.optional(v.record(v.string(), v.any())),\n linkedBeliefNodeId: v.optional(v.string()),\n evidenceRelation: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n ),\n ),\n confidence: v.optional(v.number()),\n rationale: v.string(),\n trustedBypassAccessCheck: v.optional(v.boolean()),\n }),\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ids.contract.ts","../../src/projections/projection-dsl.ts","../../src/projections/create-evidence.projection.ts"],"names":[],"mappings":"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","file":"create-evidence.projection.js","sourcesContent":["export type DecodedPrefixedId = {\n prefix: string;\n value: string;\n};\n\nconst PREFIXED_ID_PATTERN = /^([a-z][a-z0-9]*)_(.+)$/;\n\nexport function encodePrefixedId(prefix: string, value: string): string {\n const normalizedPrefix = prefix.trim();\n const normalizedValue = value.trim();\n\n if (!normalizedPrefix || !normalizedValue) {\n throw new Error(\"Both prefix and value are required to encode a prefixed ID.\");\n }\n\n return `${normalizedPrefix}_${normalizedValue}`;\n}\n\nexport function decodePrefixedId(id: string): DecodedPrefixedId {\n const normalized = id.trim();\n const match = PREFIXED_ID_PATTERN.exec(normalized);\n\n if (!match) {\n throw new Error(`Invalid prefixed ID: ${id}`);\n }\n\n return {\n prefix: match[1],\n value: match[2],\n };\n}\n\nexport function hasPrefixedIdPrefix(id: string, prefix: string): boolean {\n const decoded = decodePrefixedId(id);\n return decoded.prefix === prefix.trim();\n}\n","import type { z } from \"zod\";\n\nexport interface ProjectionDef<TInput, TConvexArgs> {\n contractName: string;\n inputSchema: z.ZodSchema<TInput>;\n project: (input: TInput) => TConvexArgs;\n convexArgsValidator: unknown;\n}\n\nexport function defineProjection<I, C>(\n def: ProjectionDef<I, C>\n): ProjectionDef<I, C> {\n return def;\n}\n","import { v } from \"convex/values\";\nimport { z } from \"zod\";\nimport { decodePrefixedId } from \"../ids.contract.js\";\nimport { defineProjection } from \"./projection-dsl.js\";\n\nconst jsonRecordSchema = z.record(z.unknown());\n\nconst evidenceRelationSchema = z.enum([\"supports\", \"contradicts\"]);\nconst evidenceRelationAliasSchema = z.enum([\n \"supports\",\n \"contradicts\",\n \"supporting\",\n \"contradicting\",\n]);\nconst beliefRelationSchema = z.object({\n beliefId: z.string().optional(),\n beliefNodeId: z.string().optional(),\n targetId: z.string().optional(),\n relation: evidenceRelationAliasSchema.optional(),\n evidenceRelation: evidenceRelationSchema.optional(),\n confidence: z.number().optional(),\n weight: z.number().optional(),\n rationale: z.string().optional(),\n});\n\nconst createEvidenceInputSchemaBase = z\n .object({\n projectId: z.string().optional(),\n topicId: z.string().optional(),\n text: z.string().optional(),\n canonicalText: z.string().optional(),\n title: z.string().optional(),\n content: z.string().optional(),\n contentType: z.string().optional(),\n kind: z.string().optional(),\n tags: z.array(z.string()).optional(),\n source: z.string().optional(),\n sourceUrl: z.string().optional(),\n sourceType: z.string().optional(),\n externalSourceType: z.string().optional(),\n sourceQuestionId: z.string().optional(),\n methodology: z.string().optional(),\n informationAsymmetry: z.string().optional(),\n sourceDescription: z.string().optional(),\n targetId: z.string().optional(),\n targetNodeId: z.string().optional(),\n linkedBeliefNodeId: z.string().optional(),\n evidenceRelation: evidenceRelationSchema.optional(),\n beliefRelations: z.array(beliefRelationSchema).optional(),\n confidence: z.number().optional(),\n weight: z.number().optional(),\n reasoning: z.string().optional(),\n rationale: z.string(),\n metadata: jsonRecordSchema.optional(),\n trustedBypassAccessCheck: z.boolean().optional(),\n })\n .passthrough();\n\nfunction hasNonzeroWeight(value: number | undefined): boolean {\n return typeof value === \"number\" && Number.isFinite(value) && value !== 0;\n}\n\nfunction hasRelationSignal(\n value: string | undefined,\n weight: number | undefined,\n): boolean {\n return Boolean(normalizeRelation(value, weight));\n}\n\nexport const createEvidenceInputSchema = createEvidenceInputSchemaBase.superRefine(\n (input, ctx) => {\n if (!input.text && !input.canonicalText) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"create_evidence requires text\",\n path: [\"text\"],\n });\n }\n\n const target = input.targetId ?? input.targetNodeId;\n const kind = targetKind(target);\n const linksPrimaryBelief = Boolean(\n input.linkedBeliefNodeId ||\n kind === \"belief\" ||\n (kind === \"unknown\" && target),\n );\n const weight =\n typeof input.weight === \"number\" ? input.weight : undefined;\n if (\n linksPrimaryBelief &&\n !hasRelationSignal(input.evidenceRelation, weight)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"belief-targeted evidence requires evidenceRelation='supports'|'contradicts' or a nonzero signed weight\",\n path: [\"evidenceRelation\"],\n });\n }\n\n input.beliefRelations?.forEach((relation, index) => {\n const beliefNodeId =\n relation.beliefNodeId ?? relation.beliefId ?? relation.targetId;\n if (!beliefNodeId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"beliefRelations entries require beliefId, beliefNodeId, or targetId\",\n path: [\"beliefRelations\", index, \"beliefNodeId\"],\n });\n }\n const relationWeight =\n typeof relation.weight === \"number\" ? relation.weight : undefined;\n if (\n beliefNodeId &&\n !hasRelationSignal(\n relation.evidenceRelation ?? relation.relation,\n relationWeight,\n )\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"beliefRelations entries require evidenceRelation='supports'|'contradicts' or a nonzero signed weight\",\n path: [\"beliefRelations\", index, \"evidenceRelation\"],\n });\n }\n });\n },\n);\n\nexport type CreateEvidenceProjectionInput = z.infer<\n typeof createEvidenceInputSchema\n>;\n\nfunction compactRecord(\n input: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(input).filter(([, value]) => value !== undefined),\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction recordValue(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction normalizeTopicIdForKernel(\n topicId: string | undefined,\n): string | undefined {\n const normalized = topicId?.trim();\n if (!normalized) {\n return undefined;\n }\n\n try {\n const decoded = decodePrefixedId(normalized);\n return decoded.prefix === \"top\" ? decoded.value : normalized;\n } catch {\n return normalized;\n }\n}\n\nfunction normalizeWorktreeId(value: string | undefined): string | undefined {\n const normalized = value?.trim();\n if (!normalized) {\n return undefined;\n }\n if (normalized.startsWith(\"wt_\")) {\n return normalized.slice(\"wt_\".length);\n }\n return normalized;\n}\n\nfunction targetKind(\n targetId: string | undefined,\n): \"belief\" | \"question\" | \"worktree\" | \"unknown\" {\n const normalized = targetId?.trim();\n if (!normalized) {\n return \"unknown\";\n }\n if (normalized.startsWith(\"wt_\") || /^tn[a-z0-9]+$/i.test(normalized)) {\n return \"worktree\";\n }\n if (normalized.startsWith(\"que_\")) {\n return \"question\";\n }\n if (normalized.startsWith(\"bel_\")) {\n return \"belief\";\n }\n return \"unknown\";\n}\n\nfunction normalizeRelation(value: string | undefined, weight: number | undefined) {\n if (value === \"supports\" || value === \"supporting\") {\n return \"supports\" as const;\n }\n if (value === \"contradicts\" || value === \"contradicting\") {\n return \"contradicts\" as const;\n }\n if (weight === undefined || !hasNonzeroWeight(weight)) {\n return undefined;\n }\n return weight < 0 ? (\"contradicts\" as const) : (\"supports\" as const);\n}\n\nfunction normalizeConfidence(\n confidence: number | undefined,\n weight: number | undefined,\n) {\n if (confidence !== undefined) {\n return Math.min(1, Math.max(0, confidence));\n }\n if (weight === undefined) {\n return undefined;\n }\n return Math.min(1, Math.max(0, Math.abs(weight)));\n}\n\nfunction normalizeBeliefRelation(\n relation: z.infer<typeof beliefRelationSchema>,\n) {\n const beliefNodeId =\n relation.beliefNodeId ?? relation.beliefId ?? relation.targetId;\n if (!beliefNodeId) {\n return undefined;\n }\n const weight =\n typeof relation.weight === \"number\" ? relation.weight : undefined;\n const evidenceRelation = normalizeRelation(\n relation.evidenceRelation ?? relation.relation,\n weight,\n );\n if (!evidenceRelation) {\n return undefined;\n }\n return compactRecord({\n beliefNodeId,\n relation: evidenceRelation,\n confidence: normalizeConfidence(relation.confidence, weight),\n rationale: relation.rationale,\n });\n}\n\nexport const createEvidenceProjection = defineProjection({\n contractName: \"create_evidence\",\n inputSchema: createEvidenceInputSchema,\n project: (input: CreateEvidenceProjectionInput) => {\n const text = input.text ?? input.canonicalText;\n const weight = typeof input.weight === \"number\" ? input.weight : undefined;\n const target = input.targetId ?? input.targetNodeId;\n const kind = targetKind(target);\n const linkedWorktreeId =\n kind === \"worktree\" ? normalizeWorktreeId(target) : undefined;\n const linkedBeliefNodeId =\n input.linkedBeliefNodeId ??\n (kind === \"belief\" || kind === \"unknown\"\n ? (input.targetNodeId ?? input.targetId)\n : undefined);\n const evidenceRelation = linkedBeliefNodeId\n ? normalizeRelation(input.evidenceRelation, weight)\n : undefined;\n const confidence = evidenceRelation\n ? normalizeConfidence(input.confidence, weight)\n : undefined;\n const beliefRelations = input.beliefRelations\n ?.map(normalizeBeliefRelation)\n .filter(\n (relation): relation is Record<string, unknown> => relation !== undefined,\n );\n\n return compactRecord({\n projectId: input.projectId,\n topicId: normalizeTopicIdForKernel(input.topicId),\n text,\n title: input.title ?? text,\n content: input.content ?? text,\n contentType: input.contentType,\n kind: input.kind,\n tags: input.tags,\n sourceType: input.sourceType,\n externalSourceType: input.externalSourceType,\n sourceUrl: input.sourceUrl ?? input.source,\n sourceQuestionId: input.sourceQuestionId,\n methodology: input.methodology,\n informationAsymmetry: input.informationAsymmetry,\n sourceDescription: input.sourceDescription,\n metadata: compactRecord({\n ...recordValue(input.metadata),\n source: input.source,\n targetId: input.targetId,\n targetNodeId: input.targetNodeId,\n targetKind: kind === \"unknown\" ? undefined : kind,\n linkedWorktreeId,\n weight,\n reasoning: input.reasoning,\n rationale: input.rationale,\n }),\n linkedBeliefNodeId,\n evidenceRelation,\n confidence,\n beliefRelations:\n beliefRelations && beliefRelations.length > 0\n ? beliefRelations\n : undefined,\n rationale: input.rationale,\n trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true,\n });\n },\n convexArgsValidator: v.object({\n projectId: v.optional(v.string()),\n topicId: v.optional(v.string()),\n text: v.string(),\n title: v.optional(v.string()),\n content: v.optional(v.string()),\n contentType: v.optional(v.string()),\n kind: v.optional(v.string()),\n tags: v.optional(v.array(v.string())),\n sourceType: v.optional(v.string()),\n externalSourceType: v.optional(v.string()),\n sourceUrl: v.optional(v.string()),\n sourceQuestionId: v.optional(v.string()),\n methodology: v.optional(v.string()),\n informationAsymmetry: v.optional(v.string()),\n sourceDescription: v.optional(v.string()),\n metadata: v.optional(v.record(v.string(), v.any())),\n linkedBeliefNodeId: v.optional(v.string()),\n evidenceRelation: v.optional(\n v.union(\n v.literal(\"supports\"),\n v.literal(\"contradicts\"),\n ),\n ),\n beliefRelations: v.optional(\n v.array(\n v.object({\n beliefNodeId: v.string(),\n relation: v.union(v.literal(\"supports\"), v.literal(\"contradicts\")),\n confidence: v.optional(v.number()),\n rationale: v.optional(v.string()),\n }),\n ),\n ),\n confidence: v.optional(v.number()),\n rationale: v.string(),\n trustedBypassAccessCheck: v.optional(v.boolean()),\n }),\n});\n"]}
|
|
@@ -29,6 +29,34 @@ declare const projections: {
|
|
|
29
29
|
targetNodeId: zod.ZodOptional<zod.ZodString>;
|
|
30
30
|
linkedBeliefNodeId: zod.ZodOptional<zod.ZodString>;
|
|
31
31
|
evidenceRelation: zod.ZodOptional<zod.ZodEnum<["supports", "contradicts"]>>;
|
|
32
|
+
beliefRelations: zod.ZodOptional<zod.ZodArray<zod.ZodObject<{
|
|
33
|
+
beliefId: zod.ZodOptional<zod.ZodString>;
|
|
34
|
+
beliefNodeId: zod.ZodOptional<zod.ZodString>;
|
|
35
|
+
targetId: zod.ZodOptional<zod.ZodString>;
|
|
36
|
+
relation: zod.ZodOptional<zod.ZodEnum<["supports", "contradicts", "supporting", "contradicting"]>>;
|
|
37
|
+
evidenceRelation: zod.ZodOptional<zod.ZodEnum<["supports", "contradicts"]>>;
|
|
38
|
+
confidence: zod.ZodOptional<zod.ZodNumber>;
|
|
39
|
+
weight: zod.ZodOptional<zod.ZodNumber>;
|
|
40
|
+
rationale: zod.ZodOptional<zod.ZodString>;
|
|
41
|
+
}, "strip", zod.ZodTypeAny, {
|
|
42
|
+
beliefId?: string | undefined;
|
|
43
|
+
rationale?: string | undefined;
|
|
44
|
+
beliefNodeId?: string | undefined;
|
|
45
|
+
weight?: number | undefined;
|
|
46
|
+
confidence?: number | undefined;
|
|
47
|
+
targetId?: string | undefined;
|
|
48
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
49
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
50
|
+
}, {
|
|
51
|
+
beliefId?: string | undefined;
|
|
52
|
+
rationale?: string | undefined;
|
|
53
|
+
beliefNodeId?: string | undefined;
|
|
54
|
+
weight?: number | undefined;
|
|
55
|
+
confidence?: number | undefined;
|
|
56
|
+
targetId?: string | undefined;
|
|
57
|
+
evidenceRelation?: "contradicts" | "supports" | undefined;
|
|
58
|
+
relation?: "contradicts" | "supports" | "supporting" | "contradicting" | undefined;
|
|
59
|
+
}>, "many">>;
|
|
32
60
|
confidence: zod.ZodOptional<zod.ZodNumber>;
|
|
33
61
|
weight: zod.ZodOptional<zod.ZodNumber>;
|
|
34
62
|
reasoning: zod.ZodOptional<zod.ZodString>;
|