@lucern/contracts 1.0.11 → 1.0.13

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.
Files changed (123) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/function-registry/beliefs.d.ts +1 -1
  3. package/dist/function-registry/beliefs.js +126 -10
  4. package/dist/function-registry/beliefs.js.map +1 -1
  5. package/dist/function-registry/coding.d.ts +1 -1
  6. package/dist/function-registry/coding.js +124 -8
  7. package/dist/function-registry/coding.js.map +1 -1
  8. package/dist/function-registry/context.d.ts +44 -4
  9. package/dist/function-registry/context.js +146 -8
  10. package/dist/function-registry/context.js.map +1 -1
  11. package/dist/function-registry/contracts.d.ts +1 -1
  12. package/dist/function-registry/contracts.js +124 -8
  13. package/dist/function-registry/contracts.js.map +1 -1
  14. package/dist/function-registry/coordination.d.ts +1 -1
  15. package/dist/function-registry/coordination.js +124 -8
  16. package/dist/function-registry/coordination.js.map +1 -1
  17. package/dist/function-registry/edges.d.ts +1 -1
  18. package/dist/function-registry/edges.js +124 -8
  19. package/dist/function-registry/edges.js.map +1 -1
  20. package/dist/function-registry/evidence.d.ts +1 -1
  21. package/dist/function-registry/evidence.js +309 -40
  22. package/dist/function-registry/evidence.js.map +1 -1
  23. package/dist/function-registry/graph.d.ts +1 -1
  24. package/dist/function-registry/graph.js +126 -12
  25. package/dist/function-registry/graph.js.map +1 -1
  26. package/dist/function-registry/helpers.js +124 -8
  27. package/dist/function-registry/helpers.js.map +1 -1
  28. package/dist/function-registry/identity.d.ts +1 -1
  29. package/dist/function-registry/identity.js +124 -8
  30. package/dist/function-registry/identity.js.map +1 -1
  31. package/dist/function-registry/index.js +124 -8
  32. package/dist/function-registry/index.js.map +1 -1
  33. package/dist/function-registry/judgments.d.ts +1 -1
  34. package/dist/function-registry/judgments.js +124 -8
  35. package/dist/function-registry/judgments.js.map +1 -1
  36. package/dist/function-registry/legacy.d.ts +1 -1
  37. package/dist/function-registry/legacy.js +124 -8
  38. package/dist/function-registry/legacy.js.map +1 -1
  39. package/dist/function-registry/lenses.d.ts +1 -1
  40. package/dist/function-registry/lenses.js +124 -8
  41. package/dist/function-registry/lenses.js.map +1 -1
  42. package/dist/function-registry/manifest.d.ts +10 -4
  43. package/dist/function-registry/manifest.js +14 -1
  44. package/dist/function-registry/manifest.js.map +1 -1
  45. package/dist/function-registry/nodes.d.ts +1 -1
  46. package/dist/function-registry/nodes.js +124 -8
  47. package/dist/function-registry/nodes.js.map +1 -1
  48. package/dist/function-registry/ontologies.d.ts +1 -1
  49. package/dist/function-registry/ontologies.js +124 -8
  50. package/dist/function-registry/ontologies.js.map +1 -1
  51. package/dist/function-registry/pipeline.d.ts +1 -1
  52. package/dist/function-registry/pipeline.js +124 -8
  53. package/dist/function-registry/pipeline.js.map +1 -1
  54. package/dist/function-registry/questions.d.ts +1 -1
  55. package/dist/function-registry/questions.js +124 -8
  56. package/dist/function-registry/questions.js.map +1 -1
  57. package/dist/function-registry/tasks.d.ts +1 -1
  58. package/dist/function-registry/tasks.js +124 -8
  59. package/dist/function-registry/tasks.js.map +1 -1
  60. package/dist/function-registry/topics.d.ts +1 -1
  61. package/dist/function-registry/topics.js +126 -12
  62. package/dist/function-registry/topics.js.map +1 -1
  63. package/dist/function-registry/types.d.ts +1 -1
  64. package/dist/function-registry/worktrees.d.ts +1 -1
  65. package/dist/function-registry/worktrees.js +124 -8
  66. package/dist/function-registry/worktrees.js.map +1 -1
  67. package/dist/generated/infisicalRuntimeEnv.js +536 -1
  68. package/dist/generated/infisicalRuntimeEnv.js.map +1 -1
  69. package/dist/index.d.ts +2 -1
  70. package/dist/index.js +941 -14
  71. package/dist/index.js.map +1 -1
  72. package/dist/infisical-runtime.base.d.ts +42 -1
  73. package/dist/infisical-runtime.base.js +50 -1
  74. package/dist/infisical-runtime.base.js.map +1 -1
  75. package/dist/infisical-runtime.contract.d.ts +102 -0
  76. package/dist/infisical-runtime.contract.js +170 -1
  77. package/dist/infisical-runtime.contract.js.map +1 -1
  78. package/dist/infisical-runtime.platform-secrets.d.ts +102 -0
  79. package/dist/infisical-runtime.platform-secrets.js +120 -0
  80. package/dist/infisical-runtime.platform-secrets.js.map +1 -1
  81. package/dist/infisical-runtime.tenant-secrets.js.map +1 -1
  82. package/dist/manifests/infisical-runtime-manifest.d.ts +144 -1
  83. package/dist/manifests/infisical-runtime-manifest.js +170 -1
  84. package/dist/manifests/infisical-runtime-manifest.js.map +1 -1
  85. package/dist/manifests/invariants/index.js +24 -5
  86. package/dist/manifests/invariants/index.js.map +1 -1
  87. package/dist/manifests/invariants/inv-1-beliefs-append-only.js +24 -5
  88. package/dist/manifests/invariants/inv-1-beliefs-append-only.js.map +1 -1
  89. package/dist/projections/check-convex-args-shape.js +138 -5
  90. package/dist/projections/check-convex-args-shape.js.map +1 -1
  91. package/dist/projections/create-evidence.projection.d.ts +168 -0
  92. package/dist/projections/create-evidence.projection.js +138 -5
  93. package/dist/projections/create-evidence.projection.js.map +1 -1
  94. package/dist/projections/index.d.ts +28 -0
  95. package/dist/projections/index.js +138 -5
  96. package/dist/projections/index.js.map +1 -1
  97. package/dist/proof-attestation.json +1 -1
  98. package/dist/schemas/manifest.d.ts +20 -20
  99. package/dist/schemas/tables/kernel/platform.d.ts +4 -4
  100. package/dist/sdk-methods.contract.d.ts +3 -2
  101. package/dist/sdk-tools.contract.js +110 -7
  102. package/dist/sdk-tools.contract.js.map +1 -1
  103. package/dist/sdk-tools.contract.registry.js +110 -7
  104. package/dist/sdk-tools.contract.registry.js.map +1 -1
  105. package/dist/sdk-tools.contract.values.js +110 -7
  106. package/dist/sdk-tools.contract.values.js.map +1 -1
  107. package/dist/tool-contracts.context-orientation.d.ts +5 -0
  108. package/dist/tool-contracts.context-orientation.js +57 -0
  109. package/dist/tool-contracts.context-orientation.js.map +1 -0
  110. package/dist/tool-contracts.d.ts +1 -0
  111. package/dist/tool-contracts.intelligence-evidence.js +26 -4
  112. package/dist/tool-contracts.intelligence-evidence.js.map +1 -1
  113. package/dist/tool-contracts.js +111 -8
  114. package/dist/tool-contracts.js.map +1 -1
  115. package/dist/tool-contracts.lifecycle.js +2 -2
  116. package/dist/tool-contracts.lifecycle.js.map +1 -1
  117. package/dist/tool-contracts.questions-listing.js +27 -1
  118. package/dist/tool-contracts.questions-listing.js.map +1 -1
  119. package/dist/{tool-contracts.values-DjctSW7S.d.ts → tool-contracts.values-BhxfrXS5.d.ts} +3 -1
  120. package/dist/tool-contracts.values.d.ts +1 -0
  121. package/dist/tool-contracts.values.js +111 -8
  122. package/dist/tool-contracts.values.js.map +1 -1
  123. 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>;
@@ -3,6 +3,20 @@ import { z } from 'zod';
3
3
 
4
4
  // src/projections/create-evidence.projection.ts
5
5
 
6
+ // src/ids.contract.ts
7
+ var PREFIXED_ID_PATTERN = /^([a-z][a-z0-9]*)_(.+)$/;
8
+ function decodePrefixedId(id) {
9
+ const normalized = id.trim();
10
+ const match = PREFIXED_ID_PATTERN.exec(normalized);
11
+ if (!match) {
12
+ throw new Error(`Invalid prefixed ID: ${id}`);
13
+ }
14
+ return {
15
+ prefix: match[1],
16
+ value: match[2]
17
+ };
18
+ }
19
+
6
20
  // src/projections/projection-dsl.ts
7
21
  function defineProjection(def) {
8
22
  return def;
@@ -10,6 +24,23 @@ function defineProjection(def) {
10
24
 
11
25
  // src/projections/create-evidence.projection.ts
12
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
+ });
13
44
  var createEvidenceInputSchemaBase = z.object({
14
45
  projectId: z.string().optional(),
15
46
  topicId: z.string().optional(),
@@ -31,7 +62,8 @@ var createEvidenceInputSchemaBase = z.object({
31
62
  targetId: z.string().optional(),
32
63
  targetNodeId: z.string().optional(),
33
64
  linkedBeliefNodeId: z.string().optional(),
34
- evidenceRelation: z.enum(["supports", "contradicts"]).optional(),
65
+ evidenceRelation: evidenceRelationSchema.optional(),
66
+ beliefRelations: z.array(beliefRelationSchema).optional(),
35
67
  confidence: z.number().optional(),
36
68
  weight: z.number().optional(),
37
69
  reasoning: z.string().optional(),
@@ -57,15 +89,103 @@ function isRecord(value) {
57
89
  function recordValue(value) {
58
90
  return isRecord(value) ? value : {};
59
91
  }
92
+ function normalizeTopicIdForKernel(topicId) {
93
+ const normalized = topicId?.trim();
94
+ if (!normalized) {
95
+ return void 0;
96
+ }
97
+ try {
98
+ const decoded = decodePrefixedId(normalized);
99
+ return decoded.prefix === "top" ? decoded.value : normalized;
100
+ } catch {
101
+ return normalized;
102
+ }
103
+ }
104
+ function normalizeWorktreeId(value) {
105
+ const normalized = value?.trim();
106
+ if (!normalized) {
107
+ return void 0;
108
+ }
109
+ if (normalized.startsWith("wt_")) {
110
+ return normalized.slice("wt_".length);
111
+ }
112
+ return normalized;
113
+ }
114
+ function targetKind(targetId) {
115
+ const normalized = targetId?.trim();
116
+ if (!normalized) {
117
+ return "unknown";
118
+ }
119
+ if (normalized.startsWith("wt_") || /^tn[a-z0-9]+$/i.test(normalized)) {
120
+ return "worktree";
121
+ }
122
+ if (normalized.startsWith("que_")) {
123
+ return "question";
124
+ }
125
+ if (normalized.startsWith("bel_")) {
126
+ return "belief";
127
+ }
128
+ return "unknown";
129
+ }
130
+ function normalizeRelation(value, weight) {
131
+ if (value === "supports" || value === "supporting") {
132
+ return "supports";
133
+ }
134
+ if (value === "contradicts" || value === "contradicting") {
135
+ return "contradicts";
136
+ }
137
+ if (weight === void 0) {
138
+ return void 0;
139
+ }
140
+ return weight < 0 ? "contradicts" : "supports";
141
+ }
142
+ function normalizeConfidence(confidence, weight) {
143
+ if (confidence !== void 0) {
144
+ return Math.min(1, Math.max(0, confidence));
145
+ }
146
+ if (weight === void 0) {
147
+ return void 0;
148
+ }
149
+ return Math.min(1, Math.max(0, Math.abs(weight)));
150
+ }
151
+ function normalizeBeliefRelation(relation) {
152
+ const beliefNodeId = relation.beliefNodeId ?? relation.beliefId ?? relation.targetId;
153
+ if (!beliefNodeId) {
154
+ return void 0;
155
+ }
156
+ const weight = typeof relation.weight === "number" ? relation.weight : void 0;
157
+ const evidenceRelation = normalizeRelation(
158
+ relation.evidenceRelation ?? relation.relation,
159
+ weight
160
+ );
161
+ if (!evidenceRelation) {
162
+ return void 0;
163
+ }
164
+ return compactRecord({
165
+ beliefNodeId,
166
+ relation: evidenceRelation,
167
+ confidence: normalizeConfidence(relation.confidence, weight),
168
+ rationale: relation.rationale
169
+ });
170
+ }
60
171
  var createEvidenceProjection = defineProjection({
61
172
  contractName: "create_evidence",
62
173
  inputSchema: createEvidenceInputSchema,
63
174
  project: (input) => {
64
175
  const text = input.text ?? input.canonicalText;
65
176
  const weight = typeof input.weight === "number" ? input.weight : void 0;
177
+ const target = input.targetId ?? input.targetNodeId;
178
+ const kind = targetKind(target);
179
+ const linkedWorktreeId = kind === "worktree" ? normalizeWorktreeId(target) : void 0;
180
+ const linkedBeliefNodeId = input.linkedBeliefNodeId ?? (kind === "belief" || kind === "unknown" ? input.targetNodeId ?? input.targetId : void 0);
181
+ const evidenceRelation = linkedBeliefNodeId ? normalizeRelation(input.evidenceRelation, weight) : void 0;
182
+ const confidence = evidenceRelation ? normalizeConfidence(input.confidence, weight) : void 0;
183
+ const beliefRelations = input.beliefRelations?.map(normalizeBeliefRelation).filter(
184
+ (relation) => relation !== void 0
185
+ );
66
186
  return compactRecord({
67
187
  projectId: input.projectId,
68
- topicId: input.topicId,
188
+ topicId: normalizeTopicIdForKernel(input.topicId),
69
189
  text,
70
190
  title: input.title ?? text,
71
191
  content: input.content ?? text,
@@ -84,13 +204,16 @@ var createEvidenceProjection = defineProjection({
84
204
  source: input.source,
85
205
  targetId: input.targetId,
86
206
  targetNodeId: input.targetNodeId,
207
+ targetKind: kind === "unknown" ? void 0 : kind,
208
+ linkedWorktreeId,
87
209
  weight,
88
210
  reasoning: input.reasoning,
89
211
  rationale: input.rationale
90
212
  }),
91
- linkedBeliefNodeId: input.linkedBeliefNodeId ?? input.targetNodeId ?? input.targetId,
92
- evidenceRelation: input.evidenceRelation ?? (weight === void 0 ? void 0 : weight < 0 ? "contradicts" : "supports"),
93
- confidence: input.confidence ?? (weight === void 0 ? void 0 : Math.min(1, Math.max(0, Math.abs(weight)))),
213
+ linkedBeliefNodeId,
214
+ evidenceRelation,
215
+ confidence,
216
+ beliefRelations: beliefRelations && beliefRelations.length > 0 ? beliefRelations : void 0,
94
217
  rationale: input.rationale,
95
218
  trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true
96
219
  });
@@ -119,6 +242,16 @@ var createEvidenceProjection = defineProjection({
119
242
  v.literal("contradicts")
120
243
  )
121
244
  ),
245
+ beliefRelations: v.optional(
246
+ v.array(
247
+ v.object({
248
+ beliefNodeId: v.string(),
249
+ relation: v.union(v.literal("supports"), v.literal("contradicts")),
250
+ confidence: v.optional(v.number()),
251
+ rationale: v.optional(v.string())
252
+ })
253
+ )
254
+ ),
122
255
  confidence: v.optional(v.number()),
123
256
  rationale: v.string(),
124
257
  trustedBypassAccessCheck: v.optional(v.boolean())
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/projections/projection-dsl.ts","../../src/projections/create-evidence.projection.ts"],"names":[],"mappings":"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","file":"create-evidence.projection.js","sourcesContent":["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 { 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\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\n return compactRecord({\n projectId: input.projectId,\n topicId: 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 weight,\n reasoning: input.reasoning,\n rationale: input.rationale,\n }),\n linkedBeliefNodeId:\n input.linkedBeliefNodeId ?? input.targetNodeId ?? input.targetId,\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\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(\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) {\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>;