@lucern/contracts 0.3.0-alpha.17 → 0.3.0-alpha.3

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 (316) hide show
  1. package/CHANGELOG.md +0 -10
  2. package/dist/api-enums.contract.d.ts +3 -5
  3. package/dist/api-enums.contract.js +12 -14
  4. package/dist/api-enums.contract.js.map +1 -1
  5. package/dist/auth-context.contract.js +2 -14
  6. package/dist/auth-context.contract.js.map +1 -1
  7. package/dist/auth-session.contract.js +2 -14
  8. package/dist/auth-session.contract.js.map +1 -1
  9. package/dist/auth.contract.d.ts +1 -1
  10. package/dist/auth.contract.js +2 -14
  11. package/dist/auth.contract.js.map +1 -1
  12. package/dist/component-boundary.contract.d.ts +1 -1
  13. package/dist/component-boundary.contract.js +26 -46
  14. package/dist/component-boundary.contract.js.map +1 -1
  15. package/dist/context-pack.contract.d.ts +3 -5
  16. package/dist/context-pack.contract.js.map +1 -1
  17. package/dist/{defineTable-t1wr5wgn.d.ts → defineTable-CBQ03FXl.d.ts} +1 -1
  18. package/dist/{dsl-DVPthQGY.d.ts → dsl-BgpoVOVQ.d.ts} +2 -2
  19. package/dist/dsl.d.ts +2 -2
  20. package/dist/dsl.js +4 -1
  21. package/dist/dsl.js.map +1 -1
  22. package/dist/function-registry/beliefs.d.ts +51 -64
  23. package/dist/function-registry/beliefs.js +57 -817
  24. package/dist/function-registry/beliefs.js.map +1 -1
  25. package/dist/function-registry/coding.d.ts +6 -15
  26. package/dist/function-registry/coding.js +43 -866
  27. package/dist/function-registry/coding.js.map +1 -1
  28. package/dist/function-registry/context.d.ts +16 -22
  29. package/dist/function-registry/context.js +46 -805
  30. package/dist/function-registry/context.js.map +1 -1
  31. package/dist/function-registry/contracts.d.ts +3 -9
  32. package/dist/function-registry/contracts.js +39 -770
  33. package/dist/function-registry/contracts.js.map +1 -1
  34. package/dist/function-registry/coordination.d.ts +9 -21
  35. package/dist/function-registry/coordination.js +39 -770
  36. package/dist/function-registry/coordination.js.map +1 -1
  37. package/dist/function-registry/edges.d.ts +2 -167
  38. package/dist/function-registry/edges.js +71 -978
  39. package/dist/function-registry/edges.js.map +1 -1
  40. package/dist/function-registry/evidence.d.ts +41 -52
  41. package/dist/function-registry/evidence.js +62 -826
  42. package/dist/function-registry/evidence.js.map +1 -1
  43. package/dist/function-registry/graph.d.ts +66 -162
  44. package/dist/function-registry/graph.js +46 -886
  45. package/dist/function-registry/graph.js.map +1 -1
  46. package/dist/function-registry/helpers.d.ts +4 -7
  47. package/dist/function-registry/helpers.js +40 -771
  48. package/dist/function-registry/helpers.js.map +1 -1
  49. package/dist/function-registry/identity.d.ts +16 -62
  50. package/dist/function-registry/identity.js +45 -793
  51. package/dist/function-registry/identity.js.map +1 -1
  52. package/dist/function-registry/index.d.ts +3 -5
  53. package/dist/function-registry/index.js +43 -777
  54. package/dist/function-registry/index.js.map +1 -1
  55. package/dist/function-registry/judgments.d.ts +11 -16
  56. package/dist/function-registry/judgments.js +42 -782
  57. package/dist/function-registry/judgments.js.map +1 -1
  58. package/dist/function-registry/legacy.d.ts +1 -5
  59. package/dist/function-registry/legacy.js +39 -770
  60. package/dist/function-registry/legacy.js.map +1 -1
  61. package/dist/function-registry/lenses.d.ts +21 -28
  62. package/dist/function-registry/lenses.js +42 -793
  63. package/dist/function-registry/lenses.js.map +1 -1
  64. package/dist/function-registry/manifest.d.ts +6 -6
  65. package/dist/function-registry/manifest.js +2 -19
  66. package/dist/function-registry/manifest.js.map +1 -1
  67. package/dist/function-registry/ontologies.d.ts +56 -70
  68. package/dist/function-registry/ontologies.js +45 -788
  69. package/dist/function-registry/ontologies.js.map +1 -1
  70. package/dist/function-registry/pipeline.d.ts +16 -22
  71. package/dist/function-registry/pipeline.js +42 -779
  72. package/dist/function-registry/pipeline.js.map +1 -1
  73. package/dist/function-registry/questions.d.ts +61 -76
  74. package/dist/function-registry/questions.js +52 -869
  75. package/dist/function-registry/questions.js.map +1 -1
  76. package/dist/function-registry/tasks.d.ts +21 -28
  77. package/dist/function-registry/tasks.js +48 -845
  78. package/dist/function-registry/tasks.js.map +1 -1
  79. package/dist/function-registry/topics.d.ts +26 -114
  80. package/dist/function-registry/topics.js +43 -852
  81. package/dist/function-registry/topics.js.map +1 -1
  82. package/dist/function-registry/types.d.ts +3 -7
  83. package/dist/function-registry/worktrees.d.ts +51 -104
  84. package/dist/function-registry/worktrees.js +51 -925
  85. package/dist/function-registry/worktrees.js.map +1 -1
  86. package/dist/gateway.contract.d.ts +0 -5
  87. package/dist/gateway.contract.js.map +1 -1
  88. package/dist/generated/convexSchemas.d.ts +3 -3
  89. package/dist/generated/convexSchemas.js +18 -38
  90. package/dist/generated/convexSchemas.js.map +1 -1
  91. package/dist/generated/schema-manifest.json +114 -1221
  92. package/dist/generated/tableOwnership.d.ts +28 -48
  93. package/dist/generated/tableOwnership.js +26 -66
  94. package/dist/generated/tableOwnership.js.map +1 -1
  95. package/dist/generated/tier-expectations.json +9 -64
  96. package/dist/graph-types/index.d.ts +1 -5
  97. package/dist/graph-types/index.js +4 -15
  98. package/dist/graph-types/index.js.map +1 -1
  99. package/dist/index-CV-0_VWJ.d.ts +25 -0
  100. package/dist/index.d.ts +669 -28
  101. package/dist/index.js +400 -34707
  102. package/dist/index.js.map +1 -1
  103. package/dist/lens-filter.contract.js +3 -4
  104. package/dist/lens-filter.contract.js.map +1 -1
  105. package/dist/lens-workflow.contract.js +3 -4
  106. package/dist/lens-workflow.contract.js.map +1 -1
  107. package/dist/mcp-gateway-boundary.contract.d.ts +3 -23
  108. package/dist/mcp-gateway-boundary.contract.js +0 -2
  109. package/dist/mcp-gateway-boundary.contract.js.map +1 -1
  110. package/dist/schema-helpers/enumValidation.js +5 -2
  111. package/dist/schema-helpers/enumValidation.js.map +1 -1
  112. package/dist/schema-helpers/spine/nodes/decision.js +1 -2
  113. package/dist/schema-helpers/spine/nodes/decision.js.map +1 -1
  114. package/dist/schema-helpers/spine/tables/epistemicNodes.js +27 -27
  115. package/dist/schema-helpers/spine/tables/epistemicNodes.js.map +1 -1
  116. package/dist/schemas/component-table-manifest.d.ts +6 -6
  117. package/dist/schemas/component-table-manifest.js +2 -2
  118. package/dist/schemas/component-table-manifest.js.map +1 -1
  119. package/dist/schemas/enums.d.ts +2 -5
  120. package/dist/schemas/enums.js +2 -5
  121. package/dist/schemas/enums.js.map +1 -1
  122. package/dist/schemas/index.d.ts +3 -3
  123. package/dist/schemas/index.js +139 -1130
  124. package/dist/schemas/index.js.map +1 -1
  125. package/dist/schemas/manifest.d.ts +948 -2948
  126. package/dist/schemas/manifest.js +137 -1128
  127. package/dist/schemas/manifest.js.map +1 -1
  128. package/dist/schemas/sl-opinion.d.ts +4 -4
  129. package/dist/schemas/tables/{controlPlane → identity}/agent.d.ts +1 -1
  130. package/dist/schemas/tables/{controlPlane → identity}/agent.js +3 -3
  131. package/dist/schemas/tables/identity/agent.js.map +1 -0
  132. package/dist/schemas/tables/{controlPlane → identity}/epistemic.d.ts +1 -1
  133. package/dist/schemas/tables/{controlPlane → identity}/epistemic.js +3 -3
  134. package/dist/schemas/tables/identity/epistemic.js.map +1 -0
  135. package/dist/schemas/tables/{controlPlane → identity}/model.d.ts +1 -1
  136. package/dist/schemas/tables/{controlPlane → identity}/model.js +6 -6
  137. package/dist/schemas/tables/identity/model.js.map +1 -0
  138. package/dist/schemas/tables/{controlPlane → identity}/platform.d.ts +11 -11
  139. package/dist/schemas/tables/{controlPlane → identity}/platform.js +18 -18
  140. package/dist/schemas/tables/identity/platform.js.map +1 -0
  141. package/dist/schemas/tables/{controlPlane → identity}/project.d.ts +1 -1
  142. package/dist/schemas/tables/{controlPlane → identity}/project.js +3 -3
  143. package/dist/schemas/tables/identity/project.js.map +1 -0
  144. package/dist/schemas/tables/{controlPlane → identity}/user.d.ts +1 -1
  145. package/dist/schemas/tables/{controlPlane → identity}/user.js +3 -3
  146. package/dist/schemas/tables/identity/user.js.map +1 -0
  147. package/dist/schemas/tables/kernel/config.d.ts +1 -1
  148. package/dist/schemas/tables/kernel/config.js.map +1 -1
  149. package/dist/schemas/tables/kernel/coordination.d.ts +1 -1
  150. package/dist/schemas/tables/kernel/coordination.js.map +1 -1
  151. package/dist/schemas/tables/kernel/decision.d.ts +1 -1
  152. package/dist/schemas/tables/kernel/decision.js.map +1 -1
  153. package/dist/schemas/tables/kernel/embedding.d.ts +1 -1
  154. package/dist/schemas/tables/kernel/embedding.js.map +1 -1
  155. package/dist/schemas/tables/kernel/epistemic.d.ts +7 -7
  156. package/dist/schemas/tables/kernel/epistemic.js.map +1 -1
  157. package/dist/schemas/tables/kernel/idempotency.d.ts +1 -1
  158. package/dist/schemas/tables/kernel/idempotency.js.map +1 -1
  159. package/dist/schemas/tables/kernel/infra.d.ts +5 -5
  160. package/dist/schemas/tables/kernel/infra.js.map +1 -1
  161. package/dist/schemas/tables/kernel/intelligence.d.ts +11 -11
  162. package/dist/schemas/tables/kernel/intelligence.js.map +1 -1
  163. package/dist/schemas/tables/kernel/lens.d.ts +5 -5
  164. package/dist/schemas/tables/kernel/lens.js.map +1 -1
  165. package/dist/schemas/tables/kernel/ontology.d.ts +1 -1
  166. package/dist/schemas/tables/kernel/ontology.js.map +1 -1
  167. package/dist/schemas/tables/kernel/platform.d.ts +13 -13
  168. package/dist/schemas/tables/kernel/platform.js.map +1 -1
  169. package/dist/schemas/tables/kernel/spine.d.ts +4 -5
  170. package/dist/schemas/tables/kernel/spine.js +2 -6
  171. package/dist/schemas/tables/kernel/spine.js.map +1 -1
  172. package/dist/schemas/tables/kernel/task.d.ts +43 -43
  173. package/dist/schemas/tables/kernel/task.js.map +1 -1
  174. package/dist/schemas/tables/kernel/topic.d.ts +1 -1
  175. package/dist/schemas/tables/kernel/topic.js +1 -5
  176. package/dist/schemas/tables/kernel/topic.js.map +1 -1
  177. package/dist/schemas/tables/kernel/workflow.d.ts +1 -1
  178. package/dist/schemas/tables/kernel/workflow.js.map +1 -1
  179. package/dist/schemas/tables/kernel/worktree.d.ts +55 -55
  180. package/dist/schemas/tables/kernel/worktree.js.map +1 -1
  181. package/dist/schemas/tables/mc/identity.d.ts +4 -21
  182. package/dist/schemas/tables/mc/identity.js +1 -32
  183. package/dist/schemas/tables/mc/identity.js.map +1 -1
  184. package/dist/schemas/tables/mc/methodology.d.ts +1 -1
  185. package/dist/schemas/tables/mc/methodology.js.map +1 -1
  186. package/dist/schemas/tables/mc/pack.d.ts +21 -21
  187. package/dist/schemas/tables/mc/pack.js.map +1 -1
  188. package/dist/schemas/tables/mc/policy.d.ts +2 -2
  189. package/dist/schemas/tables/mc/policy.js +1 -1
  190. package/dist/schemas/tables/mc/policy.js.map +1 -1
  191. package/dist/schemas/tables/mc/registry.d.ts +5 -5
  192. package/dist/schemas/tables/mc/registry.js.map +1 -1
  193. package/dist/schemas/tables/mc/runtime.d.ts +3 -109
  194. package/dist/schemas/tables/mc/runtime.js +104 -330
  195. package/dist/schemas/tables/mc/runtime.js.map +1 -1
  196. package/dist/schemas/tables/mc/tenant.d.ts +2 -4
  197. package/dist/schemas/tables/mc/tenant.js +1 -3
  198. package/dist/schemas/tables/mc/tenant.js.map +1 -1
  199. package/dist/schemas/tables/mc/workspace.d.ts +5 -28
  200. package/dist/schemas/tables/mc/workspace.js +2 -36
  201. package/dist/schemas/tables/mc/workspace.js.map +1 -1
  202. package/dist/sdk-methods.contract.d.ts +2 -2
  203. package/dist/{sdk-tools.contract-CKmSsrZ2.d.ts → sdk-tools.contract-S4ia0TTo.d.ts} +2 -2
  204. package/dist/sdk-tools.contract.d.ts +2 -2
  205. package/dist/sdk-tools.contract.js +27 -719
  206. package/dist/sdk-tools.contract.js.map +1 -1
  207. package/dist/tenant-client.contract.d.ts +14 -102
  208. package/dist/tenant-client.contract.js +12 -113
  209. package/dist/tenant-client.contract.js.map +1 -1
  210. package/dist/{tool-contracts-C_xvM9q2.d.ts → tool-contracts-C92-9ueT.d.ts} +2 -38
  211. package/dist/tool-contracts.d.ts +1 -1
  212. package/dist/tool-contracts.js +28 -720
  213. package/dist/tool-contracts.js.map +1 -1
  214. package/package.json +1 -30
  215. package/dist/component-host-boundary.contract.d.ts +0 -46
  216. package/dist/component-host-boundary.contract.js +0 -60
  217. package/dist/component-host-boundary.contract.js.map +0 -1
  218. package/dist/edge-policy-manifest-Dw5IhT1L.d.ts +0 -133
  219. package/dist/function-registry/nodes.d.ts +0 -412
  220. package/dist/function-registry/nodes.js +0 -5354
  221. package/dist/function-registry/nodes.js.map +0 -1
  222. package/dist/function-registry-input-audit.d.ts +0 -13
  223. package/dist/function-registry-input-audit.js +0 -166
  224. package/dist/function-registry-input-audit.js.map +0 -1
  225. package/dist/generated/infisicalRuntimeEnv.d.ts +0 -70
  226. package/dist/generated/infisicalRuntimeEnv.js +0 -27345
  227. package/dist/generated/infisicalRuntimeEnv.js.map +0 -1
  228. package/dist/generated/lucernGatewayEnv.d.ts +0 -17
  229. package/dist/generated/lucernGatewayEnv.js +0 -38
  230. package/dist/generated/lucernGatewayEnv.js.map +0 -1
  231. package/dist/generated/lucernWebPublicEnv.d.ts +0 -26
  232. package/dist/generated/lucernWebPublicEnv.js +0 -32
  233. package/dist/generated/lucernWebPublicEnv.js.map +0 -1
  234. package/dist/generated/lucernWebServerEnv.d.ts +0 -33
  235. package/dist/generated/lucernWebServerEnv.js +0 -51
  236. package/dist/generated/lucernWebServerEnv.js.map +0 -1
  237. package/dist/graph-intelligence.contract.d.ts +0 -506
  238. package/dist/graph-intelligence.contract.js +0 -595
  239. package/dist/graph-intelligence.contract.js.map +0 -1
  240. package/dist/index-CM1Pl_vI.d.ts +0 -28
  241. package/dist/infisical-runtime.contract.d.ts +0 -1889
  242. package/dist/infisical-runtime.contract.js +0 -3235
  243. package/dist/infisical-runtime.contract.js.map +0 -1
  244. package/dist/manifests/edge-policy-manifest.d.ts +0 -2
  245. package/dist/manifests/edge-policy-manifest.data.d.ts +0 -13
  246. package/dist/manifests/edge-policy-manifest.data.js +0 -26
  247. package/dist/manifests/edge-policy-manifest.data.js.map +0 -1
  248. package/dist/manifests/edge-policy-manifest.js +0 -92
  249. package/dist/manifests/edge-policy-manifest.js.map +0 -1
  250. package/dist/manifests/infisical-runtime-manifest.d.ts +0 -1792
  251. package/dist/manifests/infisical-runtime-manifest.js +0 -3090
  252. package/dist/manifests/infisical-runtime-manifest.js.map +0 -1
  253. package/dist/manifests/invariant-manifest.d.ts +0 -65
  254. package/dist/manifests/invariant-manifest.js +0 -18
  255. package/dist/manifests/invariant-manifest.js.map +0 -1
  256. package/dist/manifests/invariants/ast-utils.d.ts +0 -14
  257. package/dist/manifests/invariants/ast-utils.js +0 -54
  258. package/dist/manifests/invariants/ast-utils.js.map +0 -1
  259. package/dist/manifests/invariants/index.d.ts +0 -15
  260. package/dist/manifests/invariants/index.js +0 -183
  261. package/dist/manifests/invariants/index.js.map +0 -1
  262. package/dist/manifests/invariants/inv-1-beliefs-append-only.d.ts +0 -12
  263. package/dist/manifests/invariants/inv-1-beliefs-append-only.js +0 -94
  264. package/dist/manifests/invariants/inv-1-beliefs-append-only.js.map +0 -1
  265. package/dist/manifests/invariants/inv-14-no-silent-transitions.d.ts +0 -12
  266. package/dist/manifests/invariants/inv-14-no-silent-transitions.js +0 -99
  267. package/dist/manifests/invariants/inv-14-no-silent-transitions.js.map +0 -1
  268. package/dist/manifests/invariants/manifest-1-projections-declare-audit.d.ts +0 -12
  269. package/dist/manifests/invariants/manifest-1-projections-declare-audit.js +0 -42
  270. package/dist/manifests/invariants/manifest-1-projections-declare-audit.js.map +0 -1
  271. package/dist/manifests/tenant-client-manifest.d.ts +0 -327
  272. package/dist/manifests/tenant-client-manifest.js +0 -449
  273. package/dist/manifests/tenant-client-manifest.js.map +0 -1
  274. package/dist/permit-principal-projection.contract.d.ts +0 -74
  275. package/dist/permit-principal-projection.contract.js +0 -167
  276. package/dist/permit-principal-projection.contract.js.map +0 -1
  277. package/dist/projections/check-convex-args-shape.d.ts +0 -3
  278. package/dist/projections/check-convex-args-shape.js +0 -403
  279. package/dist/projections/check-convex-args-shape.js.map +0 -1
  280. package/dist/projections/create-evidence.projection.d.ts +0 -176
  281. package/dist/projections/create-evidence.projection.js +0 -130
  282. package/dist/projections/create-evidence.projection.js.map +0 -1
  283. package/dist/projections/index.d.ts +0 -102
  284. package/dist/projections/index.js +0 -352
  285. package/dist/projections/index.js.map +0 -1
  286. package/dist/projections/list-beliefs.projection.d.ts +0 -36
  287. package/dist/projections/list-beliefs.projection.js +0 -54
  288. package/dist/projections/list-beliefs.projection.js.map +0 -1
  289. package/dist/projections/list-tasks.projection.d.ts +0 -44
  290. package/dist/projections/list-tasks.projection.js +0 -57
  291. package/dist/projections/list-tasks.projection.js.map +0 -1
  292. package/dist/projections/modulate-confidence.projection.d.ts +0 -219
  293. package/dist/projections/modulate-confidence.projection.js +0 -148
  294. package/dist/projections/modulate-confidence.projection.js.map +0 -1
  295. package/dist/projections/projection-dsl.d.ts +0 -11
  296. package/dist/projections/projection-dsl.js +0 -8
  297. package/dist/projections/projection-dsl.js.map +0 -1
  298. package/dist/proof-attestation.json +0 -45
  299. package/dist/schemas/tables/controlPlane/accessControl.d.ts +0 -260
  300. package/dist/schemas/tables/controlPlane/accessControl.js +0 -658
  301. package/dist/schemas/tables/controlPlane/accessControl.js.map +0 -1
  302. package/dist/schemas/tables/controlPlane/agent.js.map +0 -1
  303. package/dist/schemas/tables/controlPlane/epistemic.js.map +0 -1
  304. package/dist/schemas/tables/controlPlane/model.js.map +0 -1
  305. package/dist/schemas/tables/controlPlane/platform.js.map +0 -1
  306. package/dist/schemas/tables/controlPlane/project.js.map +0 -1
  307. package/dist/schemas/tables/controlPlane/user.js.map +0 -1
  308. package/dist/schemas/tables/kernel/events.d.ts +0 -21
  309. package/dist/schemas/tables/kernel/events.js +0 -43
  310. package/dist/schemas/tables/kernel/events.js.map +0 -1
  311. package/dist/tenant-bootstrap-seed.contract.d.ts +0 -1289
  312. package/dist/tenant-bootstrap-seed.contract.js +0 -764
  313. package/dist/tenant-bootstrap-seed.contract.js.map +0 -1
  314. package/dist/tenant-bootstrap-seed.defaults.d.ts +0 -16
  315. package/dist/tenant-bootstrap-seed.defaults.js +0 -321
  316. package/dist/tenant-bootstrap-seed.defaults.js.map +0 -1
@@ -1,167 +0,0 @@
1
- // src/permit-principal-projection.contract.ts
2
- var PLATFORM_ROLE_PRIORITY = {
3
- platform_admin: 70,
4
- tenant_admin: 60,
5
- workspace_admin: 50,
6
- editor: 40,
7
- auditor: 30,
8
- viewer: 20,
9
- service_agent: 10
10
- };
11
- function readPermitProjectionString(value) {
12
- return typeof value === "string" && value.trim() ? value.trim() : void 0;
13
- }
14
- function isActivePermitProjectionStatus(value) {
15
- const status = readPermitProjectionString(value)?.toLowerCase();
16
- return !status || status === "active" || status === "synced";
17
- }
18
- function mapPermitRoleToPlatformRole(role) {
19
- switch (readPermitProjectionString(role)?.toLowerCase()) {
20
- case "platform_admin":
21
- return "platform_admin";
22
- case "tenant_admin":
23
- return "tenant_admin";
24
- case "workspace_admin":
25
- case "deployment_admin":
26
- case "graph_admin":
27
- return "workspace_admin";
28
- case "editor":
29
- case "workspace_member":
30
- case "graph_editor":
31
- case "evidence_contributor":
32
- case "question_resolver":
33
- case "theme_promoter":
34
- case "topic_promoter":
35
- return "editor";
36
- case "auditor":
37
- return "auditor";
38
- case "viewer":
39
- case "graph_viewer":
40
- case "stakeholder_viewer":
41
- case "stakeholder_summarizer":
42
- case "source_drilldown_viewer":
43
- case "restricted_data_viewer":
44
- case "proprietary_data_viewer":
45
- return "viewer";
46
- case "service_agent":
47
- case "agent_runner":
48
- return "service_agent";
49
- default:
50
- return void 0;
51
- }
52
- }
53
- function highestPlatformRole(roles) {
54
- return roles.reduce(
55
- (best, role) => PLATFORM_ROLE_PRIORITY[role] > PLATFORM_ROLE_PRIORITY[best] ? role : best,
56
- "viewer"
57
- );
58
- }
59
- function isClerkAliasFor(alias, clerkId) {
60
- return isActivePermitProjectionStatus(alias.status) && readPermitProjectionString(alias.provider)?.toLowerCase() === "clerk" && (readPermitProjectionString(alias.providerSubjectId) === clerkId || readPermitProjectionString(alias.alias) === clerkId);
61
- }
62
- function isHumanPermitPrincipal(principal) {
63
- const principalType = readPermitProjectionString(principal.principalType)?.toLowerCase();
64
- return !principalType || principalType === "human" || principalType === "user";
65
- }
66
- function emailFromAlias(aliases, principal) {
67
- return aliases.find(
68
- (alias) => readPermitProjectionString(alias.aliasKind)?.toLowerCase() === "email"
69
- )?.alias ?? readPermitProjectionString(principal.metadata?.email);
70
- }
71
- function groupIdsForPrincipal(memberships, principal) {
72
- const principalId = readPermitProjectionString(principal.principalId);
73
- if (!principalId) return [];
74
- return [
75
- ...new Set(
76
- memberships.filter(
77
- (membership) => isActivePermitProjectionStatus(membership.status) && readPermitProjectionString(membership.tenantId) === readPermitProjectionString(principal.tenantId) && readPermitProjectionString(membership.memberType) === "principal" && (readPermitProjectionString(membership.memberId) === principalId || readPermitProjectionString(membership.principalId) === principalId)
78
- ).map((membership) => readPermitProjectionString(membership.groupId)).filter((groupId) => Boolean(groupId))
79
- )
80
- ];
81
- }
82
- function rolesForPrincipal(assignments, principal, groupIds) {
83
- const principalId = readPermitProjectionString(principal.principalId);
84
- const tenantId = readPermitProjectionString(principal.tenantId);
85
- const roles = assignments.filter(
86
- (assignment) => isActivePermitProjectionStatus(assignment.status) && readPermitProjectionString(assignment.tenantId) === tenantId && (readPermitProjectionString(assignment.targetType) === "principal" && readPermitProjectionString(assignment.targetId) === principalId || readPermitProjectionString(assignment.targetType) === "group" && groupIds.includes(
87
- readPermitProjectionString(assignment.targetId) ?? ""
88
- ))
89
- ).map((assignment) => mapPermitRoleToPlatformRole(assignment.role)).filter((role) => Boolean(role));
90
- if (readPermitProjectionString(principal.principalType) === "agent" || readPermitProjectionString(principal.principalType) === "service_principal") {
91
- roles.push("service_agent");
92
- }
93
- return [...new Set(roles)];
94
- }
95
- function workspaceFromPermitProjection(principal, alias, assignments) {
96
- return readPermitProjectionString(principal.workspaceId) ?? readPermitProjectionString(alias?.workspaceId) ?? readPermitProjectionString(
97
- assignments.find(
98
- (assignment) => readPermitProjectionString(assignment.targetId) === readPermitProjectionString(principal.principalId) && readPermitProjectionString(assignment.resourceType) === "workspace"
99
- )?.resourceKey
100
- ) ?? readPermitProjectionString(
101
- assignments.find((assignment) => assignment.workspaceId)?.workspaceId
102
- );
103
- }
104
- function buildProjectedUserFromPermitPrincipal(rows, principal, matchingAlias, now = Date.now()) {
105
- const principalId = readPermitProjectionString(principal.principalId);
106
- const tenantId = readPermitProjectionString(principal.tenantId);
107
- if (!principalId || !tenantId || !isActivePermitProjectionStatus(principal.status)) {
108
- return null;
109
- }
110
- const aliases = rows.aliases.filter(
111
- (alias2) => readPermitProjectionString(alias2.tenantId) === tenantId && readPermitProjectionString(alias2.principalId) === principalId && isActivePermitProjectionStatus(alias2.status)
112
- );
113
- const groupIds = groupIdsForPrincipal(rows.groupMemberships, principal);
114
- const roles = rolesForPrincipal(rows.roleAssignments, principal, groupIds);
115
- if (roles.length === 0) {
116
- return null;
117
- }
118
- const alias = matchingAlias ?? aliases[0];
119
- const clerkId = readPermitProjectionString(
120
- aliases.find(
121
- (entry) => readPermitProjectionString(entry.provider)?.toLowerCase() === "clerk"
122
- )?.providerSubjectId
123
- ) ?? principalId;
124
- if (isHumanPermitPrincipal(principal) && principalId !== clerkId) {
125
- return null;
126
- }
127
- return {
128
- clerkId,
129
- email: emailFromAlias(aliases, principal) ?? `${principalId}@permit.local`,
130
- name: readPermitProjectionString(principal.displayName),
131
- lastSeenAt: principal.lastSeenAt ?? principal.updatedAt ?? now,
132
- chatCount: 0,
133
- messageCount: 0,
134
- mcRole: highestPlatformRole(roles),
135
- mcRoleSyncedAt: principal.updatedAt ?? now,
136
- defaultTenantId: tenantId,
137
- defaultWorkspaceId: workspaceFromPermitProjection(principal, alias, rows.roleAssignments) ?? tenantId,
138
- defaultPrincipalId: principalId,
139
- principalGroupIds: groupIds,
140
- governanceGrantsSyncedAt: principal.updatedAt ?? now,
141
- createdAt: principal.createdAt ?? now,
142
- updatedAt: principal.updatedAt ?? now
143
- };
144
- }
145
- function findProjectedUserByPermitPrincipalId(rows, principalId, now = Date.now()) {
146
- const normalizedPrincipalId = principalId.trim();
147
- const principal = rows.principals.find(
148
- (row) => isActivePermitProjectionStatus(row.status) && readPermitProjectionString(row.principalId) === normalizedPrincipalId
149
- );
150
- return principal ? buildProjectedUserFromPermitPrincipal(rows, principal, void 0, now) : null;
151
- }
152
- function findProjectedUserByPermitClerkId(rows, clerkId, now = Date.now()) {
153
- const normalizedClerkId = clerkId.trim();
154
- const matchingAlias = rows.aliases.find(
155
- (alias) => isClerkAliasFor(alias, normalizedClerkId)
156
- );
157
- const principal = matchingAlias ? rows.principals.find(
158
- (row) => readPermitProjectionString(row.tenantId) === readPermitProjectionString(matchingAlias.tenantId) && readPermitProjectionString(row.principalId) === readPermitProjectionString(matchingAlias.principalId)
159
- ) : rows.principals.find(
160
- (row) => readPermitProjectionString(row.principalId) === normalizedClerkId
161
- );
162
- return principal ? buildProjectedUserFromPermitPrincipal(rows, principal, matchingAlias, now) : null;
163
- }
164
-
165
- export { buildProjectedUserFromPermitPrincipal, findProjectedUserByPermitClerkId, findProjectedUserByPermitPrincipalId, isActivePermitProjectionStatus, mapPermitRoleToPlatformRole, readPermitProjectionString };
166
- //# sourceMappingURL=permit-principal-projection.contract.js.map
167
- //# sourceMappingURL=permit-principal-projection.contract.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/permit-principal-projection.contract.ts"],"names":["alias"],"mappings":"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","file":"permit-principal-projection.contract.js","sourcesContent":["export type PermitProjectionPlatformRole =\n | \"platform_admin\"\n | \"tenant_admin\"\n | \"workspace_admin\"\n | \"editor\"\n | \"viewer\"\n | \"auditor\"\n | \"service_agent\";\n\nexport type PermitPrincipalProjection = Record<string, unknown> & {\n principalId?: string;\n tenantId?: string;\n workspaceId?: string;\n principalType?: string;\n status?: string;\n displayName?: string;\n metadata?: Record<string, unknown>;\n createdAt?: number;\n updatedAt?: number;\n lastSeenAt?: number;\n};\n\nexport type PermitAliasProjection = Record<string, unknown> & {\n principalId?: string;\n tenantId?: string;\n workspaceId?: string;\n provider?: string;\n providerSubjectId?: string;\n alias?: string;\n aliasKind?: string;\n status?: string;\n metadata?: Record<string, unknown>;\n};\n\nexport type PermitRoleAssignmentProjection = Record<string, unknown> & {\n tenantId?: string;\n workspaceId?: string;\n role?: string;\n targetType?: string;\n targetId?: string;\n resourceType?: string;\n resourceKey?: string;\n status?: string;\n};\n\nexport type PermitGroupMembershipProjection = Record<string, unknown> & {\n tenantId?: string;\n workspaceId?: string;\n groupId?: string;\n memberType?: string;\n memberId?: string;\n principalId?: string;\n status?: string;\n};\n\nexport type PermitProjectedUserRecord = {\n clerkId: string;\n email: string;\n name?: string;\n lastSeenAt: number;\n chatCount: number;\n messageCount: number;\n mcRole: PermitProjectionPlatformRole;\n mcRoleSyncedAt: number;\n defaultTenantId: string;\n defaultWorkspaceId: string;\n defaultPrincipalId: string;\n principalGroupIds: string[];\n governanceGrantsSyncedAt: number;\n createdAt: number;\n updatedAt: number;\n};\n\nexport type PermitProjectionRows = {\n principals: PermitPrincipalProjection[];\n aliases: PermitAliasProjection[];\n roleAssignments: PermitRoleAssignmentProjection[];\n groupMemberships: PermitGroupMembershipProjection[];\n};\n\nconst PLATFORM_ROLE_PRIORITY: Record<PermitProjectionPlatformRole, number> = {\n platform_admin: 70,\n tenant_admin: 60,\n workspace_admin: 50,\n editor: 40,\n auditor: 30,\n viewer: 20,\n service_agent: 10,\n};\n\nexport function readPermitProjectionString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nexport function isActivePermitProjectionStatus(value: unknown): boolean {\n const status = readPermitProjectionString(value)?.toLowerCase();\n return !status || status === \"active\" || status === \"synced\";\n}\n\nexport function mapPermitRoleToPlatformRole(\n role: unknown,\n): PermitProjectionPlatformRole | undefined {\n switch (readPermitProjectionString(role)?.toLowerCase()) {\n case \"platform_admin\":\n return \"platform_admin\";\n case \"tenant_admin\":\n return \"tenant_admin\";\n case \"workspace_admin\":\n case \"deployment_admin\":\n case \"graph_admin\":\n return \"workspace_admin\";\n case \"editor\":\n case \"workspace_member\":\n case \"graph_editor\":\n case \"evidence_contributor\":\n case \"question_resolver\":\n case \"theme_promoter\":\n case \"topic_promoter\":\n return \"editor\";\n case \"auditor\":\n return \"auditor\";\n case \"viewer\":\n case \"graph_viewer\":\n case \"stakeholder_viewer\":\n case \"stakeholder_summarizer\":\n case \"source_drilldown_viewer\":\n case \"restricted_data_viewer\":\n case \"proprietary_data_viewer\":\n return \"viewer\";\n case \"service_agent\":\n case \"agent_runner\":\n return \"service_agent\";\n default:\n return undefined;\n }\n}\n\nfunction highestPlatformRole(\n roles: PermitProjectionPlatformRole[],\n): PermitProjectionPlatformRole {\n return roles.reduce<PermitProjectionPlatformRole>(\n (best, role) =>\n PLATFORM_ROLE_PRIORITY[role] > PLATFORM_ROLE_PRIORITY[best] ? role : best,\n \"viewer\",\n );\n}\n\nfunction isClerkAliasFor(\n alias: PermitAliasProjection,\n clerkId: string,\n): boolean {\n return (\n isActivePermitProjectionStatus(alias.status) &&\n readPermitProjectionString(alias.provider)?.toLowerCase() === \"clerk\" &&\n (readPermitProjectionString(alias.providerSubjectId) === clerkId ||\n readPermitProjectionString(alias.alias) === clerkId)\n );\n}\n\nfunction isHumanPermitPrincipal(principal: PermitPrincipalProjection): boolean {\n const principalType =\n readPermitProjectionString(principal.principalType)?.toLowerCase();\n return !principalType || principalType === \"human\" || principalType === \"user\";\n}\n\nfunction emailFromAlias(\n aliases: PermitAliasProjection[],\n principal: PermitPrincipalProjection,\n): string | undefined {\n return (\n aliases.find(\n (alias) =>\n readPermitProjectionString(alias.aliasKind)?.toLowerCase() === \"email\",\n )?.alias ?? readPermitProjectionString(principal.metadata?.email)\n );\n}\n\nfunction groupIdsForPrincipal(\n memberships: PermitGroupMembershipProjection[],\n principal: PermitPrincipalProjection,\n): string[] {\n const principalId = readPermitProjectionString(principal.principalId);\n if (!principalId) return [];\n return [\n ...new Set(\n memberships\n .filter(\n (membership) =>\n isActivePermitProjectionStatus(membership.status) &&\n readPermitProjectionString(membership.tenantId) ===\n readPermitProjectionString(principal.tenantId) &&\n readPermitProjectionString(membership.memberType) === \"principal\" &&\n (readPermitProjectionString(membership.memberId) === principalId ||\n readPermitProjectionString(membership.principalId) ===\n principalId),\n )\n .map((membership) => readPermitProjectionString(membership.groupId))\n .filter((groupId): groupId is string => Boolean(groupId)),\n ),\n ];\n}\n\nfunction rolesForPrincipal(\n assignments: PermitRoleAssignmentProjection[],\n principal: PermitPrincipalProjection,\n groupIds: string[],\n): PermitProjectionPlatformRole[] {\n const principalId = readPermitProjectionString(principal.principalId);\n const tenantId = readPermitProjectionString(principal.tenantId);\n const roles = assignments\n .filter(\n (assignment) =>\n isActivePermitProjectionStatus(assignment.status) &&\n readPermitProjectionString(assignment.tenantId) === tenantId &&\n ((readPermitProjectionString(assignment.targetType) === \"principal\" &&\n readPermitProjectionString(assignment.targetId) === principalId) ||\n (readPermitProjectionString(assignment.targetType) === \"group\" &&\n groupIds.includes(\n readPermitProjectionString(assignment.targetId) ?? \"\",\n ))),\n )\n .map((assignment) => mapPermitRoleToPlatformRole(assignment.role))\n .filter((role): role is PermitProjectionPlatformRole => Boolean(role));\n\n if (\n readPermitProjectionString(principal.principalType) === \"agent\" ||\n readPermitProjectionString(principal.principalType) === \"service_principal\"\n ) {\n roles.push(\"service_agent\");\n }\n\n return [...new Set(roles)];\n}\n\nfunction workspaceFromPermitProjection(\n principal: PermitPrincipalProjection,\n alias: PermitAliasProjection | undefined,\n assignments: PermitRoleAssignmentProjection[],\n): string | undefined {\n return (\n readPermitProjectionString(principal.workspaceId) ??\n readPermitProjectionString(alias?.workspaceId) ??\n readPermitProjectionString(\n assignments.find(\n (assignment) =>\n readPermitProjectionString(assignment.targetId) ===\n readPermitProjectionString(principal.principalId) &&\n readPermitProjectionString(assignment.resourceType) === \"workspace\",\n )?.resourceKey,\n ) ??\n readPermitProjectionString(\n assignments.find((assignment) => assignment.workspaceId)?.workspaceId,\n )\n );\n}\n\nexport function buildProjectedUserFromPermitPrincipal(\n rows: PermitProjectionRows,\n principal: PermitPrincipalProjection,\n matchingAlias?: PermitAliasProjection,\n now = Date.now(),\n): PermitProjectedUserRecord | null {\n const principalId = readPermitProjectionString(principal.principalId);\n const tenantId = readPermitProjectionString(principal.tenantId);\n if (\n !principalId ||\n !tenantId ||\n !isActivePermitProjectionStatus(principal.status)\n ) {\n return null;\n }\n\n const aliases = rows.aliases.filter(\n (alias) =>\n readPermitProjectionString(alias.tenantId) === tenantId &&\n readPermitProjectionString(alias.principalId) === principalId &&\n isActivePermitProjectionStatus(alias.status),\n );\n const groupIds = groupIdsForPrincipal(rows.groupMemberships, principal);\n const roles = rolesForPrincipal(rows.roleAssignments, principal, groupIds);\n if (roles.length === 0) {\n return null;\n }\n\n const alias = matchingAlias ?? aliases[0];\n const clerkId =\n readPermitProjectionString(\n aliases.find(\n (entry) =>\n readPermitProjectionString(entry.provider)?.toLowerCase() === \"clerk\",\n )?.providerSubjectId,\n ) ?? principalId;\n if (isHumanPermitPrincipal(principal) && principalId !== clerkId) {\n return null;\n }\n\n return {\n clerkId,\n email: emailFromAlias(aliases, principal) ?? `${principalId}@permit.local`,\n name: readPermitProjectionString(principal.displayName),\n lastSeenAt: principal.lastSeenAt ?? principal.updatedAt ?? now,\n chatCount: 0,\n messageCount: 0,\n mcRole: highestPlatformRole(roles),\n mcRoleSyncedAt: principal.updatedAt ?? now,\n defaultTenantId: tenantId,\n defaultWorkspaceId:\n workspaceFromPermitProjection(principal, alias, rows.roleAssignments) ??\n tenantId,\n defaultPrincipalId: principalId,\n principalGroupIds: groupIds,\n governanceGrantsSyncedAt: principal.updatedAt ?? now,\n createdAt: principal.createdAt ?? now,\n updatedAt: principal.updatedAt ?? now,\n };\n}\n\nexport function findProjectedUserByPermitPrincipalId(\n rows: PermitProjectionRows,\n principalId: string,\n now = Date.now(),\n): PermitProjectedUserRecord | null {\n const normalizedPrincipalId = principalId.trim();\n const principal = rows.principals.find(\n (row) =>\n isActivePermitProjectionStatus(row.status) &&\n readPermitProjectionString(row.principalId) === normalizedPrincipalId,\n );\n return principal\n ? buildProjectedUserFromPermitPrincipal(rows, principal, undefined, now)\n : null;\n}\n\nexport function findProjectedUserByPermitClerkId(\n rows: PermitProjectionRows,\n clerkId: string,\n now = Date.now(),\n): PermitProjectedUserRecord | null {\n const normalizedClerkId = clerkId.trim();\n const matchingAlias = rows.aliases.find((alias) =>\n isClerkAliasFor(alias, normalizedClerkId),\n );\n const principal = matchingAlias\n ? rows.principals.find(\n (row) =>\n readPermitProjectionString(row.tenantId) ===\n readPermitProjectionString(matchingAlias.tenantId) &&\n readPermitProjectionString(row.principalId) ===\n readPermitProjectionString(matchingAlias.principalId),\n )\n : rows.principals.find(\n (row) =>\n readPermitProjectionString(row.principalId) === normalizedClerkId,\n );\n return principal\n ? buildProjectedUserFromPermitPrincipal(rows, principal, matchingAlias, now)\n : null;\n}\n"]}
@@ -1,3 +0,0 @@
1
- declare function checkConvexArgsShape(): void;
2
-
3
- export { checkConvexArgsShape };
@@ -1,403 +0,0 @@
1
- import { v } from 'convex/values';
2
- import { z } from 'zod';
3
-
4
- // src/projections/create-evidence.projection.ts
5
-
6
- // src/projections/projection-dsl.ts
7
- function defineProjection(def) {
8
- return def;
9
- }
10
-
11
- // src/projections/create-evidence.projection.ts
12
- var jsonRecordSchema = z.record(z.unknown());
13
- var createEvidenceInputSchemaBase = z.object({
14
- projectId: z.string().optional(),
15
- topicId: z.string().optional(),
16
- text: z.string().optional(),
17
- canonicalText: z.string().optional(),
18
- title: z.string().optional(),
19
- content: z.string().optional(),
20
- contentType: z.string().optional(),
21
- kind: z.string().optional(),
22
- tags: z.array(z.string()).optional(),
23
- source: z.string().optional(),
24
- sourceUrl: z.string().optional(),
25
- sourceType: z.string().optional(),
26
- externalSourceType: z.string().optional(),
27
- sourceQuestionId: z.string().optional(),
28
- methodology: z.string().optional(),
29
- informationAsymmetry: z.string().optional(),
30
- sourceDescription: z.string().optional(),
31
- targetId: z.string().optional(),
32
- targetNodeId: z.string().optional(),
33
- linkedBeliefNodeId: z.string().optional(),
34
- evidenceRelation: z.enum(["supports", "contradicts"]).optional(),
35
- confidence: z.number().optional(),
36
- weight: z.number().optional(),
37
- reasoning: z.string().optional(),
38
- rationale: z.string(),
39
- metadata: jsonRecordSchema.optional(),
40
- trustedBypassAccessCheck: z.boolean().optional()
41
- }).passthrough();
42
- var createEvidenceInputSchema = createEvidenceInputSchemaBase.refine(
43
- (input) => Boolean(input.text ?? input.canonicalText),
44
- {
45
- message: "create_evidence requires text",
46
- path: ["text"]
47
- }
48
- );
49
- function compactRecord(input) {
50
- return Object.fromEntries(
51
- Object.entries(input).filter(([, value]) => value !== void 0)
52
- );
53
- }
54
- function isRecord(value) {
55
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
56
- }
57
- function recordValue(value) {
58
- return isRecord(value) ? value : {};
59
- }
60
- var createEvidenceProjection = defineProjection({
61
- contractName: "create_evidence",
62
- inputSchema: createEvidenceInputSchema,
63
- project: (input) => {
64
- const text = input.text ?? input.canonicalText;
65
- const weight = typeof input.weight === "number" ? input.weight : void 0;
66
- return compactRecord({
67
- projectId: input.projectId,
68
- topicId: input.topicId,
69
- text,
70
- title: input.title ?? text,
71
- content: input.content ?? text,
72
- contentType: input.contentType,
73
- kind: input.kind,
74
- tags: input.tags,
75
- sourceType: input.sourceType,
76
- externalSourceType: input.externalSourceType,
77
- sourceUrl: input.sourceUrl ?? input.source,
78
- sourceQuestionId: input.sourceQuestionId,
79
- methodology: input.methodology,
80
- informationAsymmetry: input.informationAsymmetry,
81
- sourceDescription: input.sourceDescription,
82
- metadata: compactRecord({
83
- ...recordValue(input.metadata),
84
- source: input.source,
85
- targetId: input.targetId,
86
- targetNodeId: input.targetNodeId,
87
- weight,
88
- reasoning: input.reasoning,
89
- rationale: input.rationale
90
- }),
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)))),
94
- rationale: input.rationale,
95
- trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true
96
- });
97
- },
98
- convexArgsValidator: v.object({
99
- projectId: v.optional(v.string()),
100
- topicId: v.optional(v.string()),
101
- text: v.string(),
102
- title: v.optional(v.string()),
103
- content: v.optional(v.string()),
104
- contentType: v.optional(v.string()),
105
- kind: v.optional(v.string()),
106
- tags: v.optional(v.array(v.string())),
107
- sourceType: v.optional(v.string()),
108
- externalSourceType: v.optional(v.string()),
109
- sourceUrl: v.optional(v.string()),
110
- sourceQuestionId: v.optional(v.string()),
111
- methodology: v.optional(v.string()),
112
- informationAsymmetry: v.optional(v.string()),
113
- sourceDescription: v.optional(v.string()),
114
- metadata: v.optional(v.record(v.string(), v.any())),
115
- linkedBeliefNodeId: v.optional(v.string()),
116
- evidenceRelation: v.optional(
117
- v.union(
118
- v.literal("supports"),
119
- v.literal("contradicts")
120
- )
121
- ),
122
- confidence: v.optional(v.number()),
123
- rationale: v.string(),
124
- trustedBypassAccessCheck: v.optional(v.boolean())
125
- })
126
- });
127
- var beliefStatusSchema = z.enum(["active", "superseded", "archived", "unscored", "scored"]).optional().describe("Filter by belief lifecycle or scoring status");
128
- var listBeliefsInputSchema = z.object({
129
- topicId: z.string().describe("Topic scope"),
130
- worktreeId: z.string().optional().describe("Filter to worktree scope"),
131
- status: beliefStatusSchema,
132
- minConfidence: z.number().optional().describe("Minimum confidence threshold"),
133
- limit: z.number().optional().describe("Maximum results"),
134
- includeEdgeAssociated: z.boolean().optional().describe("Include beliefs associated to the topic through edges")
135
- });
136
- function kernelStatus(status) {
137
- return status === "active" || status === "superseded" || status === "archived" ? status : void 0;
138
- }
139
- function compactRecord2(input) {
140
- return Object.fromEntries(
141
- Object.entries(input).filter(([, value]) => value !== void 0)
142
- );
143
- }
144
- var listBeliefsProjection = defineProjection({
145
- contractName: "list_beliefs",
146
- inputSchema: listBeliefsInputSchema,
147
- project: (input) => compactRecord2({
148
- topicId: input.topicId,
149
- status: kernelStatus(input.status),
150
- limit: input.limit,
151
- includeEdgeAssociated: input.includeEdgeAssociated
152
- }),
153
- convexArgsValidator: v.object({
154
- topicId: v.string(),
155
- status: v.optional(
156
- v.union(
157
- v.literal("active"),
158
- v.literal("superseded"),
159
- v.literal("archived")
160
- )
161
- ),
162
- limit: v.optional(v.number()),
163
- includeEdgeAssociated: v.optional(v.boolean())
164
- })
165
- });
166
- var taskStatusSchema = z.enum(["todo", "in_progress", "blocked", "done"]).optional().describe("Filter by task status");
167
- var listTasksInputSchema = z.object({
168
- topicId: z.string().optional().describe("Topic scope"),
169
- worktreeId: z.string().optional().describe("Alias for linkedWorktreeId"),
170
- linkedWorktreeId: z.string().optional().describe("Filter to tasks linked to this worktree"),
171
- status: taskStatusSchema,
172
- limit: z.number().optional().describe("Maximum results")
173
- }).refine(
174
- (input) => Boolean(input.topicId || input.worktreeId || input.linkedWorktreeId),
175
- {
176
- message: "topicId or worktreeId is required"
177
- }
178
- );
179
- function compactRecord3(input) {
180
- return Object.fromEntries(
181
- Object.entries(input).filter(([, value]) => value !== void 0)
182
- );
183
- }
184
- var listTasksProjection = defineProjection({
185
- contractName: "list_tasks",
186
- inputSchema: listTasksInputSchema,
187
- project: (input) => compactRecord3({
188
- topicId: input.topicId,
189
- status: input.status,
190
- userId: void 0,
191
- limit: input.limit,
192
- linkedWorktreeId: input.linkedWorktreeId ?? input.worktreeId
193
- }),
194
- convexArgsValidator: v.object({
195
- topicId: v.optional(v.string()),
196
- status: v.optional(
197
- v.union(
198
- v.literal("todo"),
199
- v.literal("in_progress"),
200
- v.literal("blocked"),
201
- v.literal("done")
202
- )
203
- ),
204
- limit: v.optional(v.number()),
205
- linkedWorktreeId: v.optional(v.string())
206
- })
207
- });
208
- var confidenceTriggerSchema = z.enum([
209
- "evidence_added",
210
- "evidence_removed",
211
- "contradiction_resolved",
212
- "agent_assessment",
213
- "worktree_outcome",
214
- "worktree_completed",
215
- "contradiction_detected",
216
- "answer_recorded",
217
- "fusion",
218
- "discount",
219
- "deduction",
220
- "backfill_synthetic"
221
- ]);
222
- var provenanceSchema = z.object({
223
- evidence: z.string().optional(),
224
- question: z.string().optional(),
225
- answer: z.string().optional(),
226
- contradiction: z.string().optional(),
227
- worktree: z.string().optional()
228
- });
229
- var slOpinionProjectionSchema = z.object({
230
- belief: z.number(),
231
- disbelief: z.number(),
232
- uncertainty: z.number(),
233
- baseRate: z.number()
234
- });
235
- var modulateConfidenceInputObjectSchema = z.object({
236
- nodeId: z.string().optional(),
237
- beliefNodeId: z.string().optional(),
238
- worktreeId: z.string().optional(),
239
- opinion: slOpinionProjectionSchema.optional(),
240
- belief: z.number().optional(),
241
- disbelief: z.number().optional(),
242
- uncertainty: z.number().optional(),
243
- baseRate: z.number().optional(),
244
- trigger: confidenceTriggerSchema,
245
- provenance: provenanceSchema.optional(),
246
- triggeringEvidenceId: z.string().optional(),
247
- triggeringQuestionId: z.string().optional(),
248
- triggeringAnswerId: z.string().optional(),
249
- triggeringContradictionId: z.string().optional(),
250
- triggeringWorktreeId: z.string().optional(),
251
- rationale: z.string(),
252
- trustedBypassAccessCheck: z.boolean().optional()
253
- });
254
- var modulateConfidenceInputSchema = modulateConfidenceInputObjectSchema.superRefine((input, ctx) => {
255
- if (hasProvenance(input)) {
256
- return;
257
- }
258
- ctx.addIssue({
259
- code: z.ZodIssueCode.custom,
260
- message: "modulate_confidence requires evidence, question, answer, contradiction, or worktree provenance",
261
- path: ["provenance"]
262
- });
263
- });
264
- var modulateConfidenceProjection = defineProjection({
265
- contractName: "modulate_confidence",
266
- inputSchema: modulateConfidenceInputSchema,
267
- project: (input) => {
268
- const nodeId = input.beliefNodeId ?? input.nodeId;
269
- if (!nodeId) {
270
- throw new Error("modulate_confidence requires beliefNodeId or nodeId");
271
- }
272
- const opinion = input.opinion ?? {
273
- belief: requireNumber(input.belief, "belief"),
274
- disbelief: requireNumber(input.disbelief, "disbelief"),
275
- uncertainty: requireNumber(input.uncertainty, "uncertainty"),
276
- baseRate: requireNumber(input.baseRate, "baseRate")
277
- };
278
- assertProvenance(input);
279
- return {
280
- nodeId,
281
- worktreeId: input.worktreeId,
282
- belief: opinion.belief,
283
- disbelief: opinion.disbelief,
284
- uncertainty: opinion.uncertainty,
285
- baseRate: opinion.baseRate,
286
- trigger: input.trigger === "answer_recorded" ? "agent_assessment" : input.trigger,
287
- triggeringEvidenceId: input.provenance?.evidence ?? input.triggeringEvidenceId,
288
- triggeringQuestionId: input.provenance?.question ?? input.triggeringQuestionId,
289
- triggeringAnswerId: input.provenance?.answer ?? input.triggeringAnswerId,
290
- triggeringContradictionId: input.provenance?.contradiction ?? input.triggeringContradictionId,
291
- triggeringWorktreeId: input.provenance?.worktree ?? input.triggeringWorktreeId,
292
- rationale: input.rationale,
293
- trustedBypassAccessCheck: input.trustedBypassAccessCheck ?? true
294
- };
295
- },
296
- convexArgsValidator: v.object({
297
- nodeId: v.string(),
298
- worktreeId: v.optional(v.string()),
299
- belief: v.number(),
300
- disbelief: v.number(),
301
- uncertainty: v.number(),
302
- baseRate: v.number(),
303
- trigger: v.union(
304
- v.literal("evidence_added"),
305
- v.literal("evidence_removed"),
306
- v.literal("worktree_completed"),
307
- v.literal("contradiction_detected"),
308
- v.literal("contradiction_resolved"),
309
- v.literal("agent_assessment"),
310
- v.literal("worktree_outcome"),
311
- v.literal("fusion"),
312
- v.literal("discount"),
313
- v.literal("deduction"),
314
- v.literal("backfill_synthetic")
315
- ),
316
- triggeringEvidenceId: v.optional(v.string()),
317
- triggeringQuestionId: v.optional(v.string()),
318
- triggeringAnswerId: v.optional(v.string()),
319
- triggeringContradictionId: v.optional(v.string()),
320
- triggeringWorktreeId: v.optional(v.string()),
321
- rationale: v.string(),
322
- trustedBypassAccessCheck: v.optional(v.boolean())
323
- })
324
- });
325
- function requireNumber(value, field) {
326
- if (value === void 0) {
327
- throw new Error(`modulate_confidence requires ${field}`);
328
- }
329
- return value;
330
- }
331
- function assertProvenance(input) {
332
- if (!hasProvenance(input)) {
333
- throw new Error(
334
- "modulate_confidence requires evidence, question, answer, contradiction, or worktree provenance"
335
- );
336
- }
337
- }
338
- function hasProvenance(input) {
339
- return input.trigger === "backfill_synthetic" || Boolean(input.provenance && Object.values(input.provenance).some(Boolean)) || Boolean(input.triggeringEvidenceId) || Boolean(input.triggeringQuestionId) || Boolean(input.triggeringAnswerId) || Boolean(input.triggeringContradictionId) || Boolean(input.triggeringWorktreeId);
340
- }
341
-
342
- // src/projections/index.ts
343
- var projections = {
344
- create_evidence: createEvidenceProjection,
345
- list_beliefs: listBeliefsProjection,
346
- list_tasks: listTasksProjection,
347
- modulate_confidence: modulateConfidenceProjection
348
- };
349
-
350
- // src/projections/check-convex-args-shape.ts
351
- var fixture = {
352
- create_evidence: {
353
- topicId: "topic:fixture",
354
- canonicalText: "projection fixture evidence",
355
- sourceUrl: "https://example.test/evidence",
356
- targetId: "belief:fixture",
357
- weight: 0.6,
358
- rationale: "projection fixture"
359
- },
360
- list_beliefs: {
361
- topicId: "topic:fixture",
362
- status: "scored",
363
- limit: 25
364
- },
365
- list_tasks: {
366
- topicId: "topic:fixture",
367
- worktreeId: "worktree:fixture",
368
- status: "in_progress",
369
- limit: 10
370
- },
371
- modulate_confidence: {
372
- beliefNodeId: "belief:fixture",
373
- opinion: {
374
- belief: 0.7,
375
- disbelief: 0.1,
376
- uncertainty: 0.2,
377
- baseRate: 0.5
378
- },
379
- trigger: "evidence_added",
380
- provenance: { evidence: "evidence:fixture" },
381
- rationale: "projection fixture"
382
- }
383
- };
384
- function checkConvexArgsShape() {
385
- for (const [name, projection] of Object.entries(projections)) {
386
- const input = fixture[name];
387
- const parsed = projection.inputSchema.safeParse(input);
388
- if (!parsed.success) {
389
- throw new Error(
390
- `Projection fixture for ${name} failed input validation: ${parsed.error.message}`
391
- );
392
- }
393
- const projected = projection.project(parsed.data);
394
- if (!projected || typeof projected !== "object") {
395
- throw new Error(`Projection ${name} did not emit object convex args.`);
396
- }
397
- }
398
- }
399
- checkConvexArgsShape();
400
-
401
- export { checkConvexArgsShape };
402
- //# sourceMappingURL=check-convex-args-shape.js.map
403
- //# sourceMappingURL=check-convex-args-shape.js.map