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

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 (180) hide show
  1. package/dist/component-host-boundary.contract.d.ts +41 -0
  2. package/dist/component-host-boundary.contract.js +54 -0
  3. package/dist/component-host-boundary.contract.js.map +1 -0
  4. package/dist/edge-policy-manifest-DpmTtjmm.d.ts +132 -0
  5. package/dist/function-registry/beliefs.d.ts +41 -41
  6. package/dist/function-registry/beliefs.js +274 -8
  7. package/dist/function-registry/beliefs.js.map +1 -1
  8. package/dist/function-registry/coding.js +259 -8
  9. package/dist/function-registry/coding.js.map +1 -1
  10. package/dist/function-registry/context.d.ts +13 -13
  11. package/dist/function-registry/context.js +259 -9
  12. package/dist/function-registry/context.js.map +1 -1
  13. package/dist/function-registry/contracts.js +230 -5
  14. package/dist/function-registry/contracts.js.map +1 -1
  15. package/dist/function-registry/coordination.js +230 -5
  16. package/dist/function-registry/coordination.js.map +1 -1
  17. package/dist/function-registry/edges.js +241 -6
  18. package/dist/function-registry/edges.js.map +1 -1
  19. package/dist/function-registry/evidence.d.ts +33 -33
  20. package/dist/function-registry/evidence.js +274 -9
  21. package/dist/function-registry/evidence.js.map +1 -1
  22. package/dist/function-registry/graph.d.ts +131 -53
  23. package/dist/function-registry/graph.js +346 -12
  24. package/dist/function-registry/graph.js.map +1 -1
  25. package/dist/function-registry/helpers.d.ts +1 -1
  26. package/dist/function-registry/helpers.js +230 -5
  27. package/dist/function-registry/helpers.js.map +1 -1
  28. package/dist/function-registry/identity.js +230 -5
  29. package/dist/function-registry/identity.js.map +1 -1
  30. package/dist/function-registry/index.d.ts +1 -1
  31. package/dist/function-registry/index.js +230 -5
  32. package/dist/function-registry/index.js.map +1 -1
  33. package/dist/function-registry/judgments.d.ts +9 -9
  34. package/dist/function-registry/judgments.js +242 -8
  35. package/dist/function-registry/judgments.js.map +1 -1
  36. package/dist/function-registry/legacy.js +230 -5
  37. package/dist/function-registry/legacy.js.map +1 -1
  38. package/dist/function-registry/lenses.d.ts +17 -17
  39. package/dist/function-registry/lenses.js +253 -8
  40. package/dist/function-registry/lenses.js.map +1 -1
  41. package/dist/function-registry/manifest.d.ts +5 -5
  42. package/dist/function-registry/manifest.js +3 -1
  43. package/dist/function-registry/manifest.js.map +1 -1
  44. package/dist/function-registry/ontologies.d.ts +45 -45
  45. package/dist/function-registry/ontologies.js +248 -11
  46. package/dist/function-registry/ontologies.js.map +1 -1
  47. package/dist/function-registry/pipeline.d.ts +13 -13
  48. package/dist/function-registry/pipeline.js +239 -8
  49. package/dist/function-registry/pipeline.js.map +1 -1
  50. package/dist/function-registry/questions.d.ts +49 -49
  51. package/dist/function-registry/questions.js +327 -13
  52. package/dist/function-registry/questions.js.map +1 -1
  53. package/dist/function-registry/tasks.js +230 -5
  54. package/dist/function-registry/tasks.js.map +1 -1
  55. package/dist/function-registry/topics.d.ts +21 -21
  56. package/dist/function-registry/topics.js +244 -8
  57. package/dist/function-registry/topics.js.map +1 -1
  58. package/dist/function-registry/types.d.ts +1 -1
  59. package/dist/function-registry/worktrees.d.ts +80 -41
  60. package/dist/function-registry/worktrees.js +364 -17
  61. package/dist/function-registry/worktrees.js.map +1 -1
  62. package/dist/function-registry-input-audit.d.ts +13 -0
  63. package/dist/function-registry-input-audit.js +164 -0
  64. package/dist/function-registry-input-audit.js.map +1 -0
  65. package/dist/gateway.contract.d.ts +1 -0
  66. package/dist/gateway.contract.js.map +1 -1
  67. package/dist/generated/convexSchemas.js +2 -2
  68. package/dist/generated/convexSchemas.js.map +1 -1
  69. package/dist/graph-intelligence.contract.d.ts +506 -0
  70. package/dist/graph-intelligence.contract.js +595 -0
  71. package/dist/graph-intelligence.contract.js.map +1 -0
  72. package/dist/graph-types/index.d.ts +5 -1
  73. package/dist/graph-types/index.js +15 -4
  74. package/dist/graph-types/index.js.map +1 -1
  75. package/dist/{index-CV-0_VWJ.d.ts → index-O09U2xHk.d.ts} +5 -2
  76. package/dist/index.d.ts +21 -667
  77. package/dist/index.js +2139 -52
  78. package/dist/index.js.map +1 -1
  79. package/dist/infisical-runtime.contract.d.ts +174 -0
  80. package/dist/infisical-runtime.contract.js +312 -0
  81. package/dist/infisical-runtime.contract.js.map +1 -0
  82. package/dist/manifests/edge-policy-manifest.d.ts +2 -0
  83. package/dist/manifests/edge-policy-manifest.data.d.ts +27 -0
  84. package/dist/manifests/edge-policy-manifest.data.js +34 -0
  85. package/dist/manifests/edge-policy-manifest.data.js.map +1 -0
  86. package/dist/manifests/edge-policy-manifest.js +65 -0
  87. package/dist/manifests/edge-policy-manifest.js.map +1 -0
  88. package/dist/manifests/infisical-runtime-manifest.d.ts +151 -0
  89. package/dist/manifests/infisical-runtime-manifest.js +311 -0
  90. package/dist/manifests/infisical-runtime-manifest.js.map +1 -0
  91. package/dist/manifests/invariant-manifest.d.ts +65 -0
  92. package/dist/manifests/invariant-manifest.js +18 -0
  93. package/dist/manifests/invariant-manifest.js.map +1 -0
  94. package/dist/manifests/invariants/ast-utils.d.ts +14 -0
  95. package/dist/manifests/invariants/ast-utils.js +54 -0
  96. package/dist/manifests/invariants/ast-utils.js.map +1 -0
  97. package/dist/manifests/invariants/index.d.ts +15 -0
  98. package/dist/manifests/invariants/index.js +183 -0
  99. package/dist/manifests/invariants/index.js.map +1 -0
  100. package/dist/manifests/invariants/inv-1-beliefs-append-only.d.ts +12 -0
  101. package/dist/manifests/invariants/inv-1-beliefs-append-only.js +94 -0
  102. package/dist/manifests/invariants/inv-1-beliefs-append-only.js.map +1 -0
  103. package/dist/manifests/invariants/inv-14-no-silent-transitions.d.ts +12 -0
  104. package/dist/manifests/invariants/inv-14-no-silent-transitions.js +99 -0
  105. package/dist/manifests/invariants/inv-14-no-silent-transitions.js.map +1 -0
  106. package/dist/manifests/invariants/manifest-1-projections-declare-audit.d.ts +12 -0
  107. package/dist/manifests/invariants/manifest-1-projections-declare-audit.js +42 -0
  108. package/dist/manifests/invariants/manifest-1-projections-declare-audit.js.map +1 -0
  109. package/dist/manifests/tenant-client-manifest.d.ts +303 -0
  110. package/dist/manifests/tenant-client-manifest.js +409 -0
  111. package/dist/manifests/tenant-client-manifest.js.map +1 -0
  112. package/dist/projections/check-convex-args-shape.d.ts +3 -0
  113. package/dist/projections/check-convex-args-shape.js +396 -0
  114. package/dist/projections/check-convex-args-shape.js.map +1 -0
  115. package/dist/projections/create-evidence.projection.d.ts +176 -0
  116. package/dist/projections/create-evidence.projection.js +128 -0
  117. package/dist/projections/create-evidence.projection.js.map +1 -0
  118. package/dist/projections/index.d.ts +102 -0
  119. package/dist/projections/index.js +345 -0
  120. package/dist/projections/index.js.map +1 -0
  121. package/dist/projections/list-beliefs.projection.d.ts +36 -0
  122. package/dist/projections/list-beliefs.projection.js +54 -0
  123. package/dist/projections/list-beliefs.projection.js.map +1 -0
  124. package/dist/projections/list-tasks.projection.d.ts +32 -0
  125. package/dist/projections/list-tasks.projection.js +52 -0
  126. package/dist/projections/list-tasks.projection.js.map +1 -0
  127. package/dist/projections/modulate-confidence.projection.d.ts +219 -0
  128. package/dist/projections/modulate-confidence.projection.js +148 -0
  129. package/dist/projections/modulate-confidence.projection.js.map +1 -0
  130. package/dist/projections/projection-dsl.d.ts +11 -0
  131. package/dist/projections/projection-dsl.js +8 -0
  132. package/dist/projections/projection-dsl.js.map +1 -0
  133. package/dist/schemas/enums.d.ts +5 -2
  134. package/dist/schemas/enums.js +5 -2
  135. package/dist/schemas/enums.js.map +1 -1
  136. package/dist/schemas/index.d.ts +1 -1
  137. package/dist/schemas/index.js +9 -4
  138. package/dist/schemas/index.js.map +1 -1
  139. package/dist/schemas/manifest.d.ts +940 -910
  140. package/dist/schemas/manifest.js +8 -3
  141. package/dist/schemas/manifest.js.map +1 -1
  142. package/dist/schemas/sl-opinion.d.ts +4 -4
  143. package/dist/schemas/tables/identity/platform.d.ts +10 -10
  144. package/dist/schemas/tables/kernel/epistemic.d.ts +6 -6
  145. package/dist/schemas/tables/kernel/infra.d.ts +4 -4
  146. package/dist/schemas/tables/kernel/intelligence.d.ts +10 -10
  147. package/dist/schemas/tables/kernel/lens.d.ts +4 -4
  148. package/dist/schemas/tables/kernel/platform.d.ts +12 -12
  149. package/dist/schemas/tables/kernel/spine.d.ts +3 -3
  150. package/dist/schemas/tables/kernel/spine.js +5 -2
  151. package/dist/schemas/tables/kernel/spine.js.map +1 -1
  152. package/dist/schemas/tables/kernel/task.d.ts +42 -42
  153. package/dist/schemas/tables/kernel/topic.js +4 -1
  154. package/dist/schemas/tables/kernel/topic.js.map +1 -1
  155. package/dist/schemas/tables/kernel/worktree.d.ts +62 -62
  156. package/dist/schemas/tables/mc/identity.d.ts +2 -2
  157. package/dist/schemas/tables/mc/pack.d.ts +20 -20
  158. package/dist/schemas/tables/mc/registry.d.ts +4 -4
  159. package/dist/schemas/tables/mc/workspace.d.ts +9 -3
  160. package/dist/schemas/tables/mc/workspace.js +3 -1
  161. package/dist/schemas/tables/mc/workspace.js.map +1 -1
  162. package/dist/sdk-methods.contract.d.ts +1 -1
  163. package/dist/{sdk-tools.contract-S4ia0TTo.d.ts → sdk-tools.contract-Ng8ULxjr.d.ts} +1 -1
  164. package/dist/sdk-tools.contract.d.ts +2 -2
  165. package/dist/sdk-tools.contract.js +227 -4
  166. package/dist/sdk-tools.contract.js.map +1 -1
  167. package/dist/tenant-bootstrap-seed.contract.d.ts +1101 -0
  168. package/dist/tenant-bootstrap-seed.contract.js +653 -0
  169. package/dist/tenant-bootstrap-seed.contract.js.map +1 -0
  170. package/dist/tenant-bootstrap-seed.defaults.d.ts +16 -0
  171. package/dist/tenant-bootstrap-seed.defaults.js +303 -0
  172. package/dist/tenant-bootstrap-seed.defaults.js.map +1 -0
  173. package/dist/tenant-client.contract.d.ts +69 -5
  174. package/dist/tenant-client.contract.js +65 -4
  175. package/dist/tenant-client.contract.js.map +1 -1
  176. package/dist/{tool-contracts-C92-9ueT.d.ts → tool-contracts-CYXVPN4K.d.ts} +8 -2
  177. package/dist/tool-contracts.d.ts +1 -1
  178. package/dist/tool-contracts.js +228 -5
  179. package/dist/tool-contracts.js.map +1 -1
  180. package/package.json +9 -1
@@ -0,0 +1,13 @@
1
+ import { FunctionContract } from './function-registry/types.js';
2
+
3
+ type FunctionRegistryInputAuditFinding = {
4
+ contractName: string;
5
+ projectionKeys: string[];
6
+ acceptedKeys: string[];
7
+ missingKeys: string[];
8
+ };
9
+ type InputProjection = NonNullable<FunctionContract["convex"]>["inputProjection"];
10
+ declare function projectionReadKeys(projection: InputProjection): string[];
11
+ declare function auditFunctionRegistryInputs(contracts?: readonly FunctionContract[]): FunctionRegistryInputAuditFinding[];
12
+
13
+ export { type FunctionRegistryInputAuditFinding, auditFunctionRegistryInputs, projectionReadKeys };
@@ -0,0 +1,164 @@
1
+ import { z } from 'zod';
2
+ import { ALL_FUNCTION_CONTRACTS } from './function-registry/index.js';
3
+
4
+ // src/function-registry-input-audit.ts
5
+ var INTERNAL_OR_ALIAS_KEYS = /* @__PURE__ */ new Set([
6
+ "__sdkSessionId",
7
+ "actorId",
8
+ "beliefId",
9
+ "createdBy",
10
+ "evidenceId",
11
+ "id",
12
+ "insightId",
13
+ "nodeId",
14
+ "ontologyId",
15
+ "parentNodeId",
16
+ "principalId",
17
+ "projectId",
18
+ "questionId",
19
+ "tenantId",
20
+ "trustedBypassAccessCheck",
21
+ "userId",
22
+ "versionId",
23
+ "workspaceId"
24
+ ]);
25
+ var INTENTIONAL_PROJECTION_READS = {
26
+ add_evidence: ["linkedBeliefNodeId", "targetId"],
27
+ apply_lens_to_topic: ["metadata"],
28
+ archive_belief: ["reason"],
29
+ check_permission: ["principalId", "tenantId", "userId", "workspaceId"],
30
+ claim_files: ["paths", "touchedFiles"],
31
+ complete_task: ["summary"],
32
+ create_belief: ["formulation"],
33
+ discover: ["prompt", "topicHint"],
34
+ filter_by_permission: ["principalId", "tenantId", "userId", "workspaceId"],
35
+ get_change_history: ["status"],
36
+ get_failure_log: ["status"],
37
+ identity_whoami: ["principalId", "tenantId", "userId", "workspaceId"],
38
+ ingest_observation: ["reasoning", "trustedBypassAccessCheck"],
39
+ link_evidence: [
40
+ "beliefId",
41
+ "beliefNodeId",
42
+ "context",
43
+ "evidenceNodeId",
44
+ "globalId",
45
+ "insightId",
46
+ "topicId",
47
+ "trustedBypassAccessCheck",
48
+ "type"
49
+ ],
50
+ link_evidence_to_belief: [
51
+ "beliefNodeId",
52
+ "context",
53
+ "evidenceNodeId",
54
+ "globalId",
55
+ "insightId",
56
+ "targetId",
57
+ "topicId",
58
+ "trustedBypassAccessCheck",
59
+ "type"
60
+ ],
61
+ link_evidence_to_question: [
62
+ "context",
63
+ "evidenceNodeId",
64
+ "globalId",
65
+ "impactScore",
66
+ "insightId",
67
+ "questionNodeId",
68
+ "targetId",
69
+ "topicId",
70
+ "trustedBypassAccessCheck",
71
+ "weight"
72
+ ],
73
+ list_evidence: ["status"],
74
+ manage_write_policy: ["summary"],
75
+ merge: ["decisionsReached", "keyFindings", "nextSteps"],
76
+ record_attempt: ["reasoning", "trustedBypassAccessCheck"],
77
+ record_judgment: ["reasoning", "trustedBypassAccessCheck"],
78
+ record_scope_learning: ["reasoning", "trustedBypassAccessCheck"],
79
+ search_beliefs: ["searchQuery"],
80
+ search_evidence: ["query", "searchQuery"],
81
+ update_question_status: ["answer", "answerStatus", "nodeId", "questionId"],
82
+ update_topic: ["graphScopeProjectId"]
83
+ };
84
+ function unwrapObjectSchema(schema) {
85
+ let current = schema;
86
+ while (true) {
87
+ switch (current._def.typeName) {
88
+ case z.ZodFirstPartyTypeKind.ZodEffects:
89
+ current = current._def.schema;
90
+ continue;
91
+ case z.ZodFirstPartyTypeKind.ZodBranded:
92
+ current = current._def.type;
93
+ continue;
94
+ default:
95
+ return current instanceof z.ZodObject ? current : void 0;
96
+ }
97
+ }
98
+ }
99
+ function objectSchemaKeys(schema) {
100
+ const objectSchema = unwrapObjectSchema(schema);
101
+ if (!objectSchema) {
102
+ return /* @__PURE__ */ new Set();
103
+ }
104
+ const shape = typeof objectSchema._def.shape === "function" ? objectSchema._def.shape() : objectSchema._def.shape;
105
+ return new Set(Object.keys(shape));
106
+ }
107
+ function projectionReadKeys(projection) {
108
+ if (!projection) {
109
+ return [];
110
+ }
111
+ const source = String(projection);
112
+ const keys = /* @__PURE__ */ new Set();
113
+ for (const match of source.matchAll(/\binput\s*\.\s*([A-Za-z_$][\w$]*)/gu)) {
114
+ keys.add(match[1]);
115
+ }
116
+ for (const match of source.matchAll(/\binput\s*\[\s*["']([^"']+)["']\s*\]/gu)) {
117
+ keys.add(match[1]);
118
+ }
119
+ return [...keys].sort();
120
+ }
121
+ function acceptedInputKeys(contract) {
122
+ return [
123
+ .../* @__PURE__ */ new Set([
124
+ ...objectSchemaKeys(contract.args),
125
+ ...objectSchemaKeys(contract.input),
126
+ ...Object.keys(contract.mcp.parameters),
127
+ "__sdkSessionId"
128
+ ])
129
+ ].sort();
130
+ }
131
+ function allowedProjectionKeys(contractName) {
132
+ return /* @__PURE__ */ new Set([
133
+ ...INTERNAL_OR_ALIAS_KEYS,
134
+ ...INTENTIONAL_PROJECTION_READS[contractName] ?? []
135
+ ]);
136
+ }
137
+ function auditFunctionRegistryInputs(contracts = ALL_FUNCTION_CONTRACTS) {
138
+ return contracts.flatMap((contract) => {
139
+ const projectionKeys = projectionReadKeys(contract.convex?.inputProjection);
140
+ if (projectionKeys.length === 0) {
141
+ return [];
142
+ }
143
+ const accepted = new Set(acceptedInputKeys(contract));
144
+ const allowed = allowedProjectionKeys(contract.name);
145
+ const missingKeys = projectionKeys.filter(
146
+ (key) => !accepted.has(key) && !allowed.has(key)
147
+ );
148
+ if (missingKeys.length === 0) {
149
+ return [];
150
+ }
151
+ return [
152
+ {
153
+ contractName: contract.name,
154
+ projectionKeys,
155
+ acceptedKeys: [...accepted].sort(),
156
+ missingKeys
157
+ }
158
+ ];
159
+ });
160
+ }
161
+
162
+ export { auditFunctionRegistryInputs, projectionReadKeys };
163
+ //# sourceMappingURL=function-registry-input-audit.js.map
164
+ //# sourceMappingURL=function-registry-input-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/function-registry-input-audit.ts"],"names":[],"mappings":"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","file":"function-registry-input-audit.js","sourcesContent":["import { z } from \"zod\";\nimport { ALL_FUNCTION_CONTRACTS } from \"./function-registry/index.js\";\nimport type { FunctionContract } from \"./function-registry/types.js\";\n\nexport type FunctionRegistryInputAuditFinding = {\n contractName: string;\n projectionKeys: string[];\n acceptedKeys: string[];\n missingKeys: string[];\n};\n\ntype InputProjection = NonNullable<\n FunctionContract[\"convex\"]\n>[\"inputProjection\"];\n\nconst INTERNAL_OR_ALIAS_KEYS = new Set([\n \"__sdkSessionId\",\n \"actorId\",\n \"beliefId\",\n \"createdBy\",\n \"evidenceId\",\n \"id\",\n \"insightId\",\n \"nodeId\",\n \"ontologyId\",\n \"parentNodeId\",\n \"principalId\",\n \"projectId\",\n \"questionId\",\n \"tenantId\",\n \"trustedBypassAccessCheck\",\n \"userId\",\n \"versionId\",\n \"workspaceId\",\n]);\n\nconst INTENTIONAL_PROJECTION_READS: Record<string, readonly string[]> = {\n add_evidence: [\"linkedBeliefNodeId\", \"targetId\"],\n apply_lens_to_topic: [\"metadata\"],\n archive_belief: [\"reason\"],\n check_permission: [\"principalId\", \"tenantId\", \"userId\", \"workspaceId\"],\n claim_files: [\"paths\", \"touchedFiles\"],\n complete_task: [\"summary\"],\n create_belief: [\"formulation\"],\n discover: [\"prompt\", \"topicHint\"],\n filter_by_permission: [\"principalId\", \"tenantId\", \"userId\", \"workspaceId\"],\n get_change_history: [\"status\"],\n get_failure_log: [\"status\"],\n identity_whoami: [\"principalId\", \"tenantId\", \"userId\", \"workspaceId\"],\n ingest_observation: [\"reasoning\", \"trustedBypassAccessCheck\"],\n link_evidence: [\n \"beliefId\",\n \"beliefNodeId\",\n \"context\",\n \"evidenceNodeId\",\n \"globalId\",\n \"insightId\",\n \"topicId\",\n \"trustedBypassAccessCheck\",\n \"type\",\n ],\n link_evidence_to_belief: [\n \"beliefNodeId\",\n \"context\",\n \"evidenceNodeId\",\n \"globalId\",\n \"insightId\",\n \"targetId\",\n \"topicId\",\n \"trustedBypassAccessCheck\",\n \"type\",\n ],\n link_evidence_to_question: [\n \"context\",\n \"evidenceNodeId\",\n \"globalId\",\n \"impactScore\",\n \"insightId\",\n \"questionNodeId\",\n \"targetId\",\n \"topicId\",\n \"trustedBypassAccessCheck\",\n \"weight\",\n ],\n list_evidence: [\"status\"],\n manage_write_policy: [\"summary\"],\n merge: [\"decisionsReached\", \"keyFindings\", \"nextSteps\"],\n record_attempt: [\"reasoning\", \"trustedBypassAccessCheck\"],\n record_judgment: [\"reasoning\", \"trustedBypassAccessCheck\"],\n record_scope_learning: [\"reasoning\", \"trustedBypassAccessCheck\"],\n search_beliefs: [\"searchQuery\"],\n search_evidence: [\"query\", \"searchQuery\"],\n update_question_status: [\"answer\", \"answerStatus\", \"nodeId\", \"questionId\"],\n update_topic: [\"graphScopeProjectId\"],\n};\n\nfunction unwrapObjectSchema(\n schema: z.ZodTypeAny,\n): z.ZodObject<z.ZodRawShape> | undefined {\n let current = schema;\n while (true) {\n switch (current._def.typeName) {\n case z.ZodFirstPartyTypeKind.ZodEffects:\n current = current._def.schema;\n continue;\n case z.ZodFirstPartyTypeKind.ZodBranded:\n current = current._def.type;\n continue;\n default:\n return current instanceof z.ZodObject ? current : undefined;\n }\n }\n}\n\nfunction objectSchemaKeys(schema: z.ZodTypeAny): Set<string> {\n const objectSchema = unwrapObjectSchema(schema);\n if (!objectSchema) {\n return new Set();\n }\n const shape =\n typeof objectSchema._def.shape === \"function\"\n ? objectSchema._def.shape()\n : objectSchema._def.shape;\n return new Set(Object.keys(shape));\n}\n\nexport function projectionReadKeys(\n projection: InputProjection,\n): string[] {\n if (!projection) {\n return [];\n }\n const source = String(projection);\n const keys = new Set<string>();\n\n for (const match of source.matchAll(/\\binput\\s*\\.\\s*([A-Za-z_$][\\w$]*)/gu)) {\n keys.add(match[1]);\n }\n for (const match of source.matchAll(/\\binput\\s*\\[\\s*[\"']([^\"']+)[\"']\\s*\\]/gu)) {\n keys.add(match[1]);\n }\n\n return [...keys].sort();\n}\n\nfunction acceptedInputKeys(contract: FunctionContract): string[] {\n return [\n ...new Set([\n ...objectSchemaKeys(contract.args),\n ...objectSchemaKeys(contract.input),\n ...Object.keys(contract.mcp.parameters),\n \"__sdkSessionId\",\n ]),\n ].sort();\n}\n\nfunction allowedProjectionKeys(contractName: string): Set<string> {\n return new Set([\n ...INTERNAL_OR_ALIAS_KEYS,\n ...(INTENTIONAL_PROJECTION_READS[contractName] ?? []),\n ]);\n}\n\nexport function auditFunctionRegistryInputs(\n contracts: readonly FunctionContract[] = ALL_FUNCTION_CONTRACTS,\n): FunctionRegistryInputAuditFinding[] {\n return contracts.flatMap((contract) => {\n const projectionKeys = projectionReadKeys(contract.convex?.inputProjection);\n if (projectionKeys.length === 0) {\n return [];\n }\n\n const accepted = new Set(acceptedInputKeys(contract));\n const allowed = allowedProjectionKeys(contract.name);\n const missingKeys = projectionKeys.filter(\n (key) => !accepted.has(key) && !allowed.has(key),\n );\n\n if (missingKeys.length === 0) {\n return [];\n }\n\n return [\n {\n contractName: contract.name,\n projectionKeys,\n acceptedKeys: [...accepted].sort(),\n missingKeys,\n },\n ];\n });\n}\n"]}
@@ -43,6 +43,7 @@ type GatewayAuthContext = {
43
43
  tenantId?: string;
44
44
  workspaceId?: string;
45
45
  roles?: string[];
46
+ membershipId?: string;
46
47
  sessionId?: string;
47
48
  sessionAuthMode?: SessionAuthMode;
48
49
  sessionExpiresAt?: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gateway.contract.ts"],"names":[],"mappings":";AA4IO,SAAS,wBACd,WAAA,EACQ;AACR,EAAA,MAAM,WAAA,GACJ,OAAO,WAAA,CAAY,WAAA,KAAgB,WAC/B,WAAA,CAAY,WAAA,CAAY,MAAK,GAC7B,EAAA;AACN,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AACxE","file":"gateway.contract.js","sourcesContent":["/**\n * Gateway contract types — shared between Stack's gateway middleware and\n * Lucern's server-core / gateway route handlers.\n *\n * These types describe the authenticated request context that flows from\n * the gateway into Lucern route handlers. The gateway (Stack-side) creates\n * the context; Lucern consumes it read-only.\n *\n * @module @lucern/contracts/src/gateway\n */\n\nimport type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"./auth-session.contract\";\n\n// ---------------------------------------------------------------------------\n// Error codes\n// ---------------------------------------------------------------------------\n\nexport type PlatformApiErrorCode =\n | \"AUTH_REQUIRED\"\n | \"AUTHENTICATION_REQUIRED\"\n | \"AUTH_TOKEN_MISSING\"\n | \"INVALID_REQUEST\"\n | \"IDEMPOTENCY_KEY_REQUIRED\"\n | \"FORBIDDEN\"\n | \"SCOPE_INSUFFICIENT\"\n | \"ENVIRONMENT_MISMATCH\"\n | \"KEY_EXPIRED\"\n | \"KEY_REVOKED\"\n | \"RATE_LIMIT_EXCEEDED\"\n | \"NOT_FOUND\"\n | \"CONFLICT\"\n | \"UPSTREAM_ERROR\"\n | \"INTERNAL_ERROR\";\n\n// ---------------------------------------------------------------------------\n// Gateway scope and environment\n// ---------------------------------------------------------------------------\n\nexport type GatewayScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type GatewayEnvironment = \"sandbox\" | \"production\";\n\nexport type GatewayAuthMode =\n | \"interactive_user\"\n | \"service_principal\"\n | \"tenant_api_key\"\n | \"session_token\";\n\nexport type KeyLifecycleStatus =\n | \"active\"\n | \"rotating\"\n | \"rotated\"\n | \"expired\"\n | \"revoked\";\n\nexport type CutoverDomain =\n | \"graph\"\n | \"schema\"\n | \"identity\"\n | \"policy\"\n | \"audit\"\n | \"admin\"\n | \"agent\"\n | \"tool\"\n | \"prompt\"\n | \"intelligence\";\n\nexport type CutoverFlagState = \"legacy\" | \"cutover\" | \"disabled\";\n\n// ---------------------------------------------------------------------------\n// Gateway auth context — the canonical authenticated request shape\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticated request context created by the gateway middleware.\n * Lucern route handlers receive this as a read-only parameter.\n *\n * The `convex` field is typed as `unknown` in the contract because Lucern\n * consumers should not use the gateway's Convex client directly — they\n * have their own kernel client. The gateway (Stack-side) narrows this to\n * `ConvexHttpClient` at the construction site.\n */\nexport type GatewayAuthContext = {\n userId: string;\n clerkId?: string;\n convexToken?: string;\n /** Opaque in contract — narrowed to ConvexHttpClient at the gateway. */\n convex: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n authMode: GatewayAuthMode;\n principalId?: string;\n principalType?: SessionPrincipalType;\n tenantId?: string;\n workspaceId?: string;\n roles?: string[];\n sessionId?: string;\n sessionAuthMode?: SessionAuthMode;\n sessionExpiresAt?: number;\n delegationChain?: SessionDelegationHop[];\n servicePrincipalId?: string;\n servicePrincipalKeyId?: string;\n servicePrincipalTenantId?: string;\n servicePrincipalWorkspaceId?: string;\n requestEnvironment: GatewayEnvironment;\n keyEnvironment?: GatewayEnvironment;\n keyStatus: KeyLifecycleStatus | \"unknown\";\n grantedScopes: Set<string>;\n cutoverDomain: CutoverDomain;\n cutoverState: CutoverFlagState;\n};\n\n// ---------------------------------------------------------------------------\n// Gateway response helpers — portable (no Next.js dependency)\n// ---------------------------------------------------------------------------\n\nexport type GatewayErrorArgs = {\n code: PlatformApiErrorCode;\n message: string;\n status: number;\n correlationId: string;\n policyTraceId?: string;\n invariant?: string;\n suggestion?: string;\n details?: unknown;\n headers?: HeadersInit;\n};\n\nexport type GatewaySuccessArgs = {\n status?: number;\n correlationId: string;\n policyTraceId?: string;\n idempotentReplay?: boolean;\n};\n\nexport function requireActorPrincipalId(\n authContext: GatewayAuthContext\n): string {\n const principalId =\n typeof authContext.principalId === \"string\"\n ? authContext.principalId.trim()\n : \"\";\n if (principalId.length > 0) {\n return principalId;\n }\n throw new Error(\"Access denied: federated principal context required.\");\n}\n"]}
1
+ {"version":3,"sources":["../src/gateway.contract.ts"],"names":[],"mappings":";AA6IO,SAAS,wBACd,WAAA,EACQ;AACR,EAAA,MAAM,WAAA,GACJ,OAAO,WAAA,CAAY,WAAA,KAAgB,WAC/B,WAAA,CAAY,WAAA,CAAY,MAAK,GAC7B,EAAA;AACN,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,OAAO,WAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AACxE","file":"gateway.contract.js","sourcesContent":["/**\n * Gateway contract types — shared between Stack's gateway middleware and\n * Lucern's server-core / gateway route handlers.\n *\n * These types describe the authenticated request context that flows from\n * the gateway into Lucern route handlers. The gateway (Stack-side) creates\n * the context; Lucern consumes it read-only.\n *\n * @module @lucern/contracts/src/gateway\n */\n\nimport type {\n SessionAuthMode,\n SessionDelegationHop,\n SessionPrincipalType,\n} from \"./auth-session.contract\";\n\n// ---------------------------------------------------------------------------\n// Error codes\n// ---------------------------------------------------------------------------\n\nexport type PlatformApiErrorCode =\n | \"AUTH_REQUIRED\"\n | \"AUTHENTICATION_REQUIRED\"\n | \"AUTH_TOKEN_MISSING\"\n | \"INVALID_REQUEST\"\n | \"IDEMPOTENCY_KEY_REQUIRED\"\n | \"FORBIDDEN\"\n | \"SCOPE_INSUFFICIENT\"\n | \"ENVIRONMENT_MISMATCH\"\n | \"KEY_EXPIRED\"\n | \"KEY_REVOKED\"\n | \"RATE_LIMIT_EXCEEDED\"\n | \"NOT_FOUND\"\n | \"CONFLICT\"\n | \"UPSTREAM_ERROR\"\n | \"INTERNAL_ERROR\";\n\n// ---------------------------------------------------------------------------\n// Gateway scope and environment\n// ---------------------------------------------------------------------------\n\nexport type GatewayScope = {\n tenantId?: string;\n workspaceId?: string;\n};\n\nexport type GatewayEnvironment = \"sandbox\" | \"production\";\n\nexport type GatewayAuthMode =\n | \"interactive_user\"\n | \"service_principal\"\n | \"tenant_api_key\"\n | \"session_token\";\n\nexport type KeyLifecycleStatus =\n | \"active\"\n | \"rotating\"\n | \"rotated\"\n | \"expired\"\n | \"revoked\";\n\nexport type CutoverDomain =\n | \"graph\"\n | \"schema\"\n | \"identity\"\n | \"policy\"\n | \"audit\"\n | \"admin\"\n | \"agent\"\n | \"tool\"\n | \"prompt\"\n | \"intelligence\";\n\nexport type CutoverFlagState = \"legacy\" | \"cutover\" | \"disabled\";\n\n// ---------------------------------------------------------------------------\n// Gateway auth context — the canonical authenticated request shape\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticated request context created by the gateway middleware.\n * Lucern route handlers receive this as a read-only parameter.\n *\n * The `convex` field is typed as `unknown` in the contract because Lucern\n * consumers should not use the gateway's Convex client directly — they\n * have their own kernel client. The gateway (Stack-side) narrows this to\n * `ConvexHttpClient` at the construction site.\n */\nexport type GatewayAuthContext = {\n userId: string;\n clerkId?: string;\n convexToken?: string;\n /** Opaque in contract — narrowed to ConvexHttpClient at the gateway. */\n convex: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n authMode: GatewayAuthMode;\n principalId?: string;\n principalType?: SessionPrincipalType;\n tenantId?: string;\n workspaceId?: string;\n roles?: string[];\n membershipId?: string;\n sessionId?: string;\n sessionAuthMode?: SessionAuthMode;\n sessionExpiresAt?: number;\n delegationChain?: SessionDelegationHop[];\n servicePrincipalId?: string;\n servicePrincipalKeyId?: string;\n servicePrincipalTenantId?: string;\n servicePrincipalWorkspaceId?: string;\n requestEnvironment: GatewayEnvironment;\n keyEnvironment?: GatewayEnvironment;\n keyStatus: KeyLifecycleStatus | \"unknown\";\n grantedScopes: Set<string>;\n cutoverDomain: CutoverDomain;\n cutoverState: CutoverFlagState;\n};\n\n// ---------------------------------------------------------------------------\n// Gateway response helpers — portable (no Next.js dependency)\n// ---------------------------------------------------------------------------\n\nexport type GatewayErrorArgs = {\n code: PlatformApiErrorCode;\n message: string;\n status: number;\n correlationId: string;\n policyTraceId?: string;\n invariant?: string;\n suggestion?: string;\n details?: unknown;\n headers?: HeadersInit;\n};\n\nexport type GatewaySuccessArgs = {\n status?: number;\n correlationId: string;\n policyTraceId?: string;\n idempotentReplay?: boolean;\n};\n\nexport function requireActorPrincipalId(\n authContext: GatewayAuthContext\n): string {\n const principalId =\n typeof authContext.principalId === \"string\"\n ? authContext.principalId.trim()\n : \"\";\n if (principalId.length > 0) {\n return principalId;\n }\n throw new Error(\"Access denied: federated principal context required.\");\n}\n"]}
@@ -26,7 +26,7 @@ var KERNEL_SCHEMA_TABLES = {
26
26
  "deliberationSessions": defineTable(v.object({ "completedAt": v.optional(v.number()), "contextBrief": v.optional(v.string()), "contextSnapshot": v.optional(v.any()), "contradictionIds": v.array(v.id("contradictions")), "createdAt": v.number(), "createdBy": v.string(), "error": v.optional(v.string()), "escalationQuestionIds": v.array(v.id("epistemicNodes")), "linkedBeliefNodeId": v.optional(v.id("epistemicNodes")), "modelSlots": v.array(v.string()), "outcomeSummary": v.optional(v.any()), "principalId": v.string(), "question": v.string(), "replayBaseline": v.optional(v.any()), "replayBaselineAt": v.number(), "replayDelta": v.optional(v.any()), "replayHeadAt": v.optional(v.number()), "status": v.union(v.literal("running"), v.literal("completed"), v.literal("failed")), "tenantId": v.optional(v.string()), "topicId": v.optional(v.string()), "traceId": v.optional(v.string()), "uncertaintyZones": v.array(v.object({ "explanation": v.string(), "label": v.string(), "slots": v.array(v.string()) })), "updatedAt": v.number(), "workspaceId": v.optional(v.string()) })).index("by_topicId", ["topicId"]).index("by_status", ["status"]).index("by_topic_status", ["topicId", "status"]).index("by_createdBy", ["createdBy"]),
27
27
  "epistemicAudit": defineTable(v.object({ "agentType": v.optional(v.string()), "changedAt": v.number(), "changedBy": v.string(), "changeType": v.union(v.literal("created"), v.literal("status_changed"), v.literal("confidence_changed"), v.literal("criticality_changed"), v.literal("formulation_modified"), v.literal("forked"), v.literal("superseded"), v.literal("archived"), v.literal("resolved"), v.literal("severity_changed"), v.literal("edge_added"), v.literal("edge_removed"), v.literal("annotated"), v.literal("blocked"), v.literal("unblocked"), v.literal("decision_finalized"), v.literal("proposal_accepted"), v.literal("proposal_rejected"), v.literal("pillar_changed"), v.literal("updated"), v.literal("deleted"), v.literal("entity_merged"), v.literal("entity_attributes_updated"), v.literal("entity_archived"), v.literal("published"), v.literal("deprecated"), v.literal("source_created"), v.literal("source_metadata_updated")), "entityId": v.string(), "entityType": v.union(v.literal("belief"), v.literal("evidence"), v.literal("question"), v.literal("answer"), v.literal("contradiction"), v.literal("decision"), v.literal("proposal"), v.literal("edge"), v.literal("node"), v.literal("entity"), v.literal("source"), v.literal("belief_conditional"), v.literal("belief_scenario"), v.literal("ontologyDefinition"), v.literal("ontologyVersion")), "isAgent": v.boolean(), "mcpSessionId": v.optional(v.string()), "mcpToolName": v.optional(v.string()), "newState": v.optional(v.union(v.record(v.string(), v.any()), v.null())), "previousState": v.optional(v.union(v.record(v.string(), v.any()), v.null())), "proposalId": v.optional(v.string()), "rationale": v.optional(v.string()), "sourceCommit": v.optional(v.string()), "topicId": v.optional(v.string()), "triggeringAction": v.optional(v.string()) })).index("by_entityId", ["entityId"]).index("by_entityType", ["entityType"]).index("by_entityType_id", ["entityType", "entityId"]).index("by_changedAt", ["changedAt"]).index("by_changedBy", ["changedBy"]).index("by_topicId", ["topicId"]).index("by_changeType", ["changeType"]).index("by_mcpSessionId", ["mcpSessionId"]),
28
28
  "epistemicContracts": defineTable(v.object({ "beliefNodeId": v.string(), "compositeOf": v.optional(v.array(v.string())), "compositeOperator": v.optional(v.union(v.literal("all"), v.literal("any"), v.literal("majority"))), "condition": v.object({ "evaluator": v.string(), "evaluatorConfig": v.optional(v.union(v.string(), v.number(), v.boolean(), v.null(), v.record(v.string(), v.any()), v.array(v.any()))), "expression": v.string() }), "conditionType": v.union(v.literal("assertion"), v.literal("temporal"), v.literal("evidential"), v.literal("threshold"), v.literal("composite")), "contractId": v.string(), "createdAt": v.number(), "createdBy": v.string(), "deadline": v.optional(v.number()), "description": v.optional(v.string()), "direction": v.union(v.literal("confirms"), v.literal("falsifies")), "evaluationCount": v.optional(v.number()), "evaluationSchedule": v.union(v.literal("on_demand"), v.literal("on_evidence"), v.literal("periodic"), v.literal("event_driven")), "inheritedAt": v.optional(v.number()), "inheritedFromBeliefNodeId": v.optional(v.string()), "inheritedFromContractId": v.optional(v.string()), "lastEvaluatedAt": v.optional(v.number()), "lineageSource": v.union(v.literal("declared"), v.literal("inherited")), "modulation": v.object({ "onConfirmed": v.object({ "ceiling": v.optional(v.number()), "delta": v.number() }), "onDisconfirmed": v.object({ "delta": v.number(), "floor": v.optional(v.number()) }), "onExpired": v.optional(v.object({ "delta": v.number() })), "onPartial": v.optional(v.object({ "delta": v.number(), "threshold": v.number() })) }), "periodicIntervalMs": v.optional(v.number()), "status": v.union(v.literal("active"), v.literal("satisfied"), v.literal("violated"), v.literal("expired"), v.literal("suspended"), v.literal("archived")), "title": v.string(), "topicId": v.optional(v.string()), "updatedAt": v.number() })).index("by_contractId", ["contractId"]).index("by_belief", ["beliefNodeId"]).index("by_status", ["status"]).index("by_evaluator", ["condition.evaluator"]).index("by_topic", ["topicId"]).index("by_schedule", ["evaluationSchedule"]),
29
- "epistemicEdges": defineTable(v.object({ "analogyBasis": v.optional(v.string()), "analogyStrength": v.optional(v.number()), "anonymizationClass": v.optional(v.union(v.literal("none"), v.literal("standard"), v.literal("strict"))), "audienceLabel": v.optional(v.string()), "blocking": v.optional(v.boolean()), "causal": v.optional(v.boolean()), "conditionalA": v.optional(v.object({ "a": v.number(), "b": v.number(), "d": v.number(), "u": v.number() })), "conditionalNotA": v.optional(v.object({ "a": v.number(), "b": v.number(), "d": v.number(), "u": v.number() })), "confidence": v.optional(v.number()), "constraint": v.optional(v.string()), "containment": v.optional(v.string()), "context": v.optional(v.string()), "createdAt": v.number(), "createdBy": v.string(), "defeatType": v.optional(v.union(v.literal("rebuts"), v.literal("undercuts"), v.literal("undermines"))), "derivation": v.optional(v.string()), "derivationType": v.optional(v.string()), "disanalogies": v.optional(v.array(v.string())), "domainNamespace": v.optional(v.string()), "edgeTier": v.optional(v.string()), "edgeType": v.union(v.literal("supports"), v.literal("informs"), v.literal("depends_on"), v.literal("extracted_from"), v.literal("contains"), v.literal("tests"), v.literal("supersedes"), v.literal("responds_to"), v.literal("belongs_to"), v.literal("relates_to_thesis"), v.literal("works_at"), v.literal("invested_in"), v.literal("competes_with"), v.literal("participates_in"), v.literal("founded_by"), v.literal("evaluates"), v.literal("performs"), v.literal("function_in"), v.literal("impacts"), v.literal("raised_from"), v.literal("mentioned_in"), v.literal("perspective_on"), v.literal("plays_theme"), v.literal("answers"), v.literal("explores"), v.literal("qualifies"), v.literal("based_on"), v.literal("based_on_belief"), v.literal("based_on_question"), v.literal("blocked_by_contradiction"), v.literal("informed_by_theme"), v.literal("same_as"), v.literal("reinforces"), v.literal("parent_of"), v.literal("child_of"), v.literal("falsified_by"), v.literal("exclusive_with"), v.literal("collapses_if"), v.literal("cascade_from"), v.literal("counterfactual_of"), v.literal("cascade_to"), v.literal("mutually_exclusive"), v.literal("correlates_with"), v.literal("amplifies"), v.literal("precondition_for"), v.literal("in_tension_with"), v.literal("strengthened_by"), v.literal("weakened_by"), v.literal("alternative_to"), v.literal("subsumes"), v.literal("validated_by"), v.literal("required_for"), v.literal("blocks"), v.literal("prerequisite_for"), v.literal("parallel_to"), v.literal("corroborates"), v.literal("extends"), v.literal("same_source_as"), v.literal("same_theme_as"), v.literal("assumes"), v.literal("would_predict"), v.literal("analogous_to"), v.literal("independent_of"), v.literal("implements"), v.literal("violates"), v.literal("co_changes_with"), v.literal("migrating_from"), v.literal("migrating_to"), v.literal("scoped_by"), v.literal("about_entity"), v.literal("entity_referenced_in"), v.literal("contradicts"), v.literal("cites"), v.literal("summarizes"), v.literal("related_to"), v.literal("partially_answers"), v.literal("refines"), v.literal("branches_from")), "endDate": v.optional(v.number()), "evidence": v.optional(v.string()), "exportClass": v.optional(v.union(v.literal("internal_only"), v.literal("client_safe"), v.literal("public_safe"), v.literal("restricted"))), "fromLayer": v.optional(v.union(v.literal("L4"), v.literal("L3"), v.literal("L2"), v.literal("L1"), v.literal("ontological"), v.literal("organizational"))), "fromNodeId": v.string(), "fromNodeType": v.optional(v.string()), "globalId": v.string(), "implicit": v.optional(v.boolean()), "interrogation": v.optional(v.string()), "keywords": v.optional(v.array(v.string())), "logicalRole": v.optional(v.union(v.literal("necessary"), v.literal("sufficient"), v.literal("necessary_sufficient"), v.literal("contributory"), v.literal("corroborative"))), "metadata": v.optional(v.record(v.string(), v.any())), "normalization": v.optional(v.string()), "ownerPrincipalId": v.optional(v.string()), "policyTags": v.optional(v.array(v.string())), "predictionFulfilled": v.optional(v.boolean()), "predictionFulfilledAt": v.optional(v.number()), "predictionFulfilledBy": v.optional(v.string()), "projectId": v.optional(v.string()), "propagation": v.optional(v.string()), "reasoningMethod": v.optional(v.union(v.literal("deductive"), v.literal("inductive"), v.literal("abductive"), v.literal("analogical"), v.literal("causal"), v.literal("correlational"), v.literal("testimonial"), v.literal("statistical"), v.literal("implicit"), v.literal("pattern_match"))), "sensitivityTier": v.optional(v.union(v.literal("low"), v.literal("medium"), v.literal("high"), v.literal("restricted"))), "sourceGlobalId": v.optional(v.string()), "startDate": v.optional(v.number()), "surpriseScore": v.optional(v.number()), "targetGlobalId": v.optional(v.string()), "temporalClass": v.optional(v.union(v.literal("structural"), v.literal("cyclical"), v.literal("transient"), v.literal("point_in_time"))), "tenantId": v.optional(v.string()), "toLayer": v.optional(v.union(v.literal("L4"), v.literal("L3"), v.literal("L2"), v.literal("L1"), v.literal("ontological"), v.literal("organizational"))), "toNodeId": v.optional(v.string()), "toNodeType": v.optional(v.string()), "topicId": v.optional(v.string()), "updatedAt": v.optional(v.number()), "validFrom": v.optional(v.number()), "validUntil": v.optional(v.number()), "weight": v.optional(v.number()), "workspaceId": v.optional(v.string()) })).index("by_globalId", ["globalId"]).index("by_from", ["fromNodeId"]).index("by_to", ["toNodeId"]).index("by_from_type", ["fromNodeId", "edgeType"]).index("by_to_type", ["toNodeId", "edgeType"]).index("by_topic", ["topicId"]).index("by_tenantId", ["tenantId"]).index("by_workspaceId", ["workspaceId"]).index("by_tenant_workspace", ["tenantId", "workspaceId"]).index("by_audienceLabel", ["audienceLabel"]).index("by_sensitivityTier", ["sensitivityTier"]).index("by_exportClass", ["exportClass"]).index("by_type", ["edgeType"]).index("by_from_to", ["fromNodeId", "toNodeId"]).index("by_fromLayer", ["fromLayer"]).index("by_toLayer", ["toLayer"]).index("by_layer_pair", ["fromLayer", "toLayer"]).index("by_source_global_id", ["sourceGlobalId"]).index("by_target_global_id", ["targetGlobalId"]).index("by_reasoning_method", ["edgeType", "reasoningMethod"]).index("by_logical_role", ["edgeType", "logicalRole"]).index("by_temporal_class", ["temporalClass", "validUntil"]).index("by_surprise", ["edgeType", "surpriseScore"]),
29
+ "epistemicEdges": defineTable(v.object({ "analogyBasis": v.optional(v.string()), "analogyStrength": v.optional(v.number()), "anonymizationClass": v.optional(v.union(v.literal("none"), v.literal("standard"), v.literal("strict"))), "audienceLabel": v.optional(v.string()), "blocking": v.optional(v.boolean()), "causal": v.optional(v.boolean()), "conditionalA": v.optional(v.object({ "a": v.number(), "b": v.number(), "d": v.number(), "u": v.number() })), "conditionalNotA": v.optional(v.object({ "a": v.number(), "b": v.number(), "d": v.number(), "u": v.number() })), "confidence": v.optional(v.number()), "constraint": v.optional(v.string()), "containment": v.optional(v.string()), "context": v.optional(v.string()), "createdAt": v.number(), "createdBy": v.string(), "defeatType": v.optional(v.union(v.literal("rebuts"), v.literal("undercuts"), v.literal("undermines"))), "derivation": v.optional(v.string()), "derivationType": v.optional(v.string()), "disanalogies": v.optional(v.array(v.string())), "domainNamespace": v.optional(v.string()), "edgeTier": v.optional(v.string()), "edgeType": v.union(v.literal("supports"), v.literal("informs"), v.literal("depends_on"), v.literal("derived_from"), v.literal("contains"), v.literal("tests"), v.literal("supersedes"), v.literal("responds_to"), v.literal("belongs_to"), v.literal("relates_to_thesis"), v.literal("works_at"), v.literal("invested_in"), v.literal("competes_with"), v.literal("participates_in"), v.literal("founded_by"), v.literal("evaluates"), v.literal("performs"), v.literal("function_in"), v.literal("impacts"), v.literal("raised_from"), v.literal("mentioned_in"), v.literal("perspective_on"), v.literal("plays_theme"), v.literal("answers"), v.literal("explores"), v.literal("qualifies"), v.literal("based_on"), v.literal("based_on_belief"), v.literal("based_on_question"), v.literal("blocked_by_contradiction"), v.literal("informed_by_theme"), v.literal("same_as"), v.literal("reinforces"), v.literal("parent_of"), v.literal("child_of"), v.literal("falsified_by"), v.literal("exclusive_with"), v.literal("collapses_if"), v.literal("cascade_from"), v.literal("counterfactual_of"), v.literal("cascade_to"), v.literal("mutually_exclusive"), v.literal("correlates_with"), v.literal("amplifies"), v.literal("precondition_for"), v.literal("in_tension_with"), v.literal("strengthened_by"), v.literal("weakened_by"), v.literal("alternative_to"), v.literal("subsumes"), v.literal("validated_by"), v.literal("required_for"), v.literal("blocks"), v.literal("prerequisite_for"), v.literal("parallel_to"), v.literal("corroborates"), v.literal("extends"), v.literal("same_source_as"), v.literal("same_theme_as"), v.literal("assumes"), v.literal("would_predict"), v.literal("analogous_to"), v.literal("independent_of"), v.literal("implements"), v.literal("violates"), v.literal("co_changes_with"), v.literal("migrating_from"), v.literal("migrating_to"), v.literal("scoped_by"), v.literal("about_entity"), v.literal("entity_referenced_in"), v.literal("contradicts"), v.literal("cites"), v.literal("summarizes"), v.literal("related_to"), v.literal("partially_answers"), v.literal("refines"), v.literal("branches_from"), v.literal("extracted_from")), "endDate": v.optional(v.number()), "evidence": v.optional(v.string()), "exportClass": v.optional(v.union(v.literal("internal_only"), v.literal("client_safe"), v.literal("public_safe"), v.literal("restricted"))), "fromLayer": v.optional(v.union(v.literal("L4"), v.literal("L3"), v.literal("L2"), v.literal("L1"), v.literal("ontological"), v.literal("organizational"))), "fromNodeId": v.string(), "fromNodeType": v.optional(v.string()), "globalId": v.string(), "implicit": v.optional(v.boolean()), "interrogation": v.optional(v.string()), "keywords": v.optional(v.array(v.string())), "logicalRole": v.optional(v.union(v.literal("necessary"), v.literal("sufficient"), v.literal("necessary_sufficient"), v.literal("contributory"), v.literal("corroborative"))), "metadata": v.optional(v.record(v.string(), v.any())), "normalization": v.optional(v.string()), "ownerPrincipalId": v.optional(v.string()), "policyTags": v.optional(v.array(v.string())), "predictionFulfilled": v.optional(v.boolean()), "predictionFulfilledAt": v.optional(v.number()), "predictionFulfilledBy": v.optional(v.string()), "projectId": v.optional(v.string()), "propagation": v.optional(v.string()), "reasoningMethod": v.optional(v.union(v.literal("deductive"), v.literal("inductive"), v.literal("abductive"), v.literal("analogical"), v.literal("causal"), v.literal("correlational"), v.literal("testimonial"), v.literal("statistical"), v.literal("implicit"), v.literal("pattern_match"))), "sensitivityTier": v.optional(v.union(v.literal("low"), v.literal("medium"), v.literal("high"), v.literal("restricted"))), "sourceGlobalId": v.optional(v.string()), "startDate": v.optional(v.number()), "surpriseScore": v.optional(v.number()), "targetGlobalId": v.optional(v.string()), "temporalClass": v.optional(v.union(v.literal("structural"), v.literal("cyclical"), v.literal("transient"), v.literal("point_in_time"))), "tenantId": v.optional(v.string()), "toLayer": v.optional(v.union(v.literal("L4"), v.literal("L3"), v.literal("L2"), v.literal("L1"), v.literal("ontological"), v.literal("organizational"))), "toNodeId": v.optional(v.string()), "toNodeType": v.optional(v.string()), "topicId": v.optional(v.string()), "updatedAt": v.optional(v.number()), "validFrom": v.optional(v.number()), "validUntil": v.optional(v.number()), "weight": v.optional(v.number()), "workspaceId": v.optional(v.string()) })).index("by_globalId", ["globalId"]).index("by_from", ["fromNodeId"]).index("by_to", ["toNodeId"]).index("by_from_type", ["fromNodeId", "edgeType"]).index("by_to_type", ["toNodeId", "edgeType"]).index("by_topic", ["topicId"]).index("by_tenantId", ["tenantId"]).index("by_workspaceId", ["workspaceId"]).index("by_tenant_workspace", ["tenantId", "workspaceId"]).index("by_audienceLabel", ["audienceLabel"]).index("by_sensitivityTier", ["sensitivityTier"]).index("by_exportClass", ["exportClass"]).index("by_type", ["edgeType"]).index("by_from_to", ["fromNodeId", "toNodeId"]).index("by_fromLayer", ["fromLayer"]).index("by_toLayer", ["toLayer"]).index("by_layer_pair", ["fromLayer", "toLayer"]).index("by_source_global_id", ["sourceGlobalId"]).index("by_target_global_id", ["targetGlobalId"]).index("by_reasoning_method", ["edgeType", "reasoningMethod"]).index("by_logical_role", ["edgeType", "logicalRole"]).index("by_temporal_class", ["temporalClass", "validUntil"]).index("by_surprise", ["edgeType", "surpriseScore"]),
30
30
  "epistemicNodeEmbeddings": defineTable(v.object({ "confidence": v.optional(v.number()), "createdAt": v.number(), "createdBy": v.string(), "embedding": v.array(v.number()), "hasAnswer": v.optional(v.boolean()), "importance": v.optional(v.union(v.literal("critical"), v.literal("high"), v.literal("medium"), v.literal("low"))), "nodeId": v.id("epistemicNodes"), "nodeType": v.union(v.literal("belief"), v.literal("question"), v.literal("evidence"), v.literal("answer"), v.literal("synthesis"), v.literal("theme"), v.literal("source")), "topicId": v.optional(v.string()), "updatedAt": v.optional(v.number()) })).index("by_nodeId", ["nodeId"]).index("by_topicId_type", ["topicId", "nodeType"]).index("by_topicId", ["topicId"]).vectorIndex("by_embedding", { vectorField: "embedding", dimensions: 1024, filterFields: ["nodeType", "createdBy"] }),
31
31
  "epistemicNodes": defineTable(v.object({ "aiProvider": v.optional(v.string()), "anonymizationClass": v.optional(v.union(v.literal("none"), v.literal("standard"), v.literal("strict"))), "answerQuality": v.optional(v.union(v.literal("definitive"), v.literal("strong"), v.literal("moderate"), v.literal("weak"), v.literal("speculative"), v.literal("unanswered"))), "audienceLabel": v.optional(v.string()), "beliefStatus": v.optional(v.union(v.literal("assumption"), v.literal("hypothesis"), v.literal("belief"), v.literal("fact"))), "beliefType": v.optional(v.string()), "canonicalText": v.string(), "confidence": v.optional(v.number()), "consensusConfidence": v.optional(v.number()), "consensusSource": v.optional(v.string()), "consensusView": v.optional(v.union(v.literal("aligned"), v.literal("ahead_of"), v.literal("contrarian"), v.literal("orthogonal"), v.literal("unknown"))), "content": v.optional(v.string()), "contentHash": v.string(), "contentType": v.optional(v.string()), "createdAt": v.number(), "createdBy": v.string(), "decisionOutcome": v.optional(v.union(v.literal("pending"), v.literal("successful"), v.literal("unsuccessful"), v.literal("mixed"), v.literal("unknown"))), "decisionType": v.optional(v.union(v.literal("invest"), v.literal("pass"), v.literal("follow_on"), v.literal("exit"), v.literal("deep_dive"), v.literal("monitor"), v.literal("deprioritize"), v.literal("thesis_adopt"), v.literal("thesis_revise"), v.literal("thesis_abandon"))), "domain": v.optional(v.string()), "epistemicLayer": v.optional(v.union(v.literal("L4"), v.literal("L3"), v.literal("L2"), v.literal("L1"), v.literal("ontological"), v.literal("organizational"))), "epistemicStatus": v.optional(v.union(v.literal("hypothesis"), v.literal("emerging"), v.literal("established"), v.literal("challenged"), v.literal("assumption"), v.literal("deprecated"))), "exportClass": v.optional(v.union(v.literal("internal_only"), v.literal("client_safe"), v.literal("public_safe"), v.literal("restricted"))), "externalIds": v.optional(v.object({ "crunchbase": v.optional(v.string()), "linkedin": v.optional(v.string()), "pitchbook": v.optional(v.string()), "twitter": v.optional(v.string()), "website": v.optional(v.string()) })), "extractedFromNodeId": v.optional(v.id("epistemicNodes")), "extractionLangfuseTraceId": v.optional(v.string()), "extractionModel": v.optional(v.string()), "extractionPromptName": v.optional(v.string()), "extractionPromptVersion": v.optional(v.number()), "extractionTemperature": v.optional(v.number()), "globalId": v.string(), "groundingConfidence": v.optional(v.number()), "groundingEndOffset": v.optional(v.number()), "groundingMatchedText": v.optional(v.string()), "groundingRejectionReason": v.optional(v.string()), "groundingStartOffset": v.optional(v.number()), "groundingVerified": v.optional(v.boolean()), "informationAsymmetry": v.optional(v.union(v.literal("proprietary"), v.literal("early"), v.literal("common"))), "metadata": v.optional(v.record(v.string(), v.any())), "methodology": v.optional(v.union(v.literal("primary_research"), v.literal("expert_interview"), v.literal("customer_interview"), v.literal("field_observation"), v.literal("proprietary_data"), v.literal("desk_research"), v.literal("regulatory_filing"), v.literal("news_article"), v.literal("academic_paper"), v.literal("ai_synthesis"), v.literal("ai_extraction"))), "nodeType": v.union(v.literal("decision"), v.literal("belief"), v.literal("question"), v.literal("theme"), v.literal("deal"), v.literal("topic"), v.literal("claim"), v.literal("evidence"), v.literal("synthesis"), v.literal("answer"), v.literal("atomic_fact"), v.literal("excerpt"), v.literal("source"), v.literal("company"), v.literal("person"), v.literal("investor"), v.literal("function"), v.literal("value_chain")), "ownerPrincipalId": v.optional(v.string()), "policyTags": v.optional(v.array(v.string())), "predictionMeta": v.optional(v.object({ "actualVsPredicted": v.optional(v.string()), "confidenceAtPrediction": v.optional(v.number()), "expectedBy": v.optional(v.number()), "isPrediction": v.boolean(), "outcome": v.optional(v.union(v.literal("pending"), v.literal("confirmed"), v.literal("disconfirmed"), v.literal("partial"), v.literal("expired"))), "outcomeEvidenceId": v.optional(v.string()), "outcomeRecordedAt": v.optional(v.number()), "registeredAt": v.number() })), "projectId": v.optional(v.string()), "questionPriority": v.optional(v.union(v.literal("critical"), v.literal("high"), v.literal("medium"), v.literal("low"))), "questionType": v.optional(v.union(v.literal("validation"), v.literal("falsification"), v.literal("assumption_probe"), v.literal("prediction_test"), v.literal("counterfactual"), v.literal("discovery"), v.literal("clarification"), v.literal("comparison"), v.literal("causal"), v.literal("mechanism"), v.literal("general"))), "reversibility": v.optional(v.union(v.literal("irreversible"), v.literal("hard_to_reverse"), v.literal("reversible"), v.literal("trivial"))), "sensitivityTier": v.optional(v.union(v.literal("low"), v.literal("medium"), v.literal("high"), v.literal("restricted"))), "sourceType": v.union(v.literal("human"), v.literal("ai_extracted"), v.literal("ai_generated"), v.literal("imported"), v.literal("system"), v.literal("verified"), v.literal("proprietary")), "status": v.union(v.literal("active"), v.literal("superseded"), v.literal("archived"), v.literal("deleted")), "subtype": v.optional(v.string()), "supersededBy": v.optional(v.id("epistemicNodes")), "syncError": v.optional(v.string()), "syncStatus": v.optional(v.union(v.literal("synced"), v.literal("pending_edges"), v.literal("edge_creation_failed"))), "tags": v.optional(v.array(v.string())), "temporalNature": v.optional(v.union(v.literal("factual"), v.literal("forecast"), v.literal("unknown"))), "tenantId": v.optional(v.string()), "themeConviction": v.optional(v.union(v.literal("high"), v.literal("medium"), v.literal("low"), v.literal("negative"))), "title": v.optional(v.string()), "topicId": v.optional(v.string()), "updatedAt": v.number(), "verificationStatus": v.optional(v.union(v.literal("unverified"), v.literal("human_verified"), v.literal("ai_verified"), v.literal("contradicted"), v.literal("outdated"))), "workspaceId": v.optional(v.string()) })).index("by_globalId", ["globalId"]).index("by_contentHash", ["contentHash"]).index("by_nodeType", ["nodeType"]).index("by_subtype", ["nodeType", "subtype"]).index("by_domain", ["domain"]).index("by_topic", ["topicId"]).index("by_topic_type", ["topicId", "nodeType"]).index("by_tenantId", ["tenantId"]).index("by_workspaceId", ["workspaceId"]).index("by_tenant_workspace", ["tenantId", "workspaceId"]).index("by_audienceLabel", ["audienceLabel"]).index("by_sensitivityTier", ["sensitivityTier"]).index("by_exportClass", ["exportClass"]).index("by_status", ["status"]).index("by_sourceType", ["sourceType"]).index("by_verification", ["verificationStatus"]).index("by_layer", ["epistemicLayer"]).index("by_layer_type", ["epistemicLayer", "nodeType"]).index("by_syncStatus", ["syncStatus"]).index("by_belief_status", ["nodeType", "beliefStatus"]).index("by_epistemic_status", ["nodeType", "epistemicStatus"]).index("by_temporal_nature", ["nodeType", "temporalNature"]).index("by_methodology", ["nodeType", "methodology"]).index("by_reversibility", ["nodeType", "reversibility"]).index("by_questionType", ["nodeType", "questionType"]).index("by_questionPriority", ["nodeType", "questionPriority"]).searchIndex("search_canonicalText", { searchField: "canonicalText", filterFields: ["nodeType", "topicId", "topicId", "status"] }),
32
32
  "graphAnalysisCache": defineTable(v.object({ "analysisVersion": v.string(), "analyzedAt": v.number(), "changesSinceRefresh": v.number(), "findings": v.array(v.object({ "category": v.union(v.literal("structural_risk"), v.literal("evidence_gap"), v.literal("reasoning_flaw"), v.literal("staleness"), v.literal("opportunity"), v.literal("propagation_risk"), v.literal("epistemology"), v.literal("temporal"), v.literal("semantic_gap")), "description": v.string(), "detector": v.string(), "id": v.string(), "importance": v.optional(v.number()), "nodeIds": v.array(v.string()), "nodeLabels": v.array(v.string()), "severity": v.union(v.literal("critical"), v.literal("warning"), v.literal("info")), "title": v.string(), "totalCount": v.optional(v.number()) })), "healthScore": v.number(), "isStale": v.boolean(), "killerQueryResults": v.optional(v.object({ "anchoringBias": v.optional(v.array(v.any())), "confirmationBias": v.optional(v.array(v.any())), "contradictionTensions": v.optional(v.array(v.any())), "knowledgeFrontier": v.optional(v.array(v.any())), "minimumFalsificationSet": v.optional(v.union(v.string(), v.number(), v.boolean(), v.null(), v.record(v.string(), v.any()), v.array(v.any()))), "missingQuestions": v.optional(v.array(v.any())), "nonConsensusBeliefs": v.optional(v.array(v.any())), "portfolioConviction": v.optional(v.array(v.any())), "reasoningDepth": v.optional(v.array(v.any())), "sourceConcentration": v.optional(v.array(v.any())), "staleThemes": v.optional(v.array(v.any())) })), "lastGraphChange": v.optional(v.number()), "stats": v.object({ "algebraicConnectivity": v.number(), "averageResilience": v.number(), "beliefs": v.number(), "beliefStatus": v.optional(v.object({ "assumption": v.number(), "belief": v.number(), "fact": v.number(), "hypothesis": v.number() })), "bridgeNodeCount": v.number(), "coherenceScore": v.number(), "communityCount": v.number(), "cycleCount": v.number(), "evidence": v.number(), "evidenceTemporalNature": v.optional(v.object({ "factual": v.number(), "forecast": v.number(), "unknown": v.number() })), "orphanCount": v.number(), "overconfidentCount": v.number(), "propagationRisks": v.number(), "questions": v.number(), "sccCount": v.number(), "temporalDecayCount": v.number(), "tensionPairs": v.number(), "totalEdges": v.number(), "totalNodes": v.number(), "ungroundedCount": v.number() }), "topicId": v.optional(v.string()) })).index("by_topic", ["topicId"]).index("by_topic_stale", ["topicId", "isStale"]).index("by_analyzedAt", ["analyzedAt"]),
@@ -118,7 +118,7 @@ var MC_SCHEMA_TABLES = {
118
118
  "toolCatalog": defineTable(v.object({ "category": v.union(v.literal("read"), v.literal("write"), v.literal("admin"), v.literal("system")), "createdAt": v.number(), "description": v.string(), "distribution": v.union(v.literal("base"), v.literal("pack_only")), "executionAdapter": v.optional(v.union(v.literal("convex_mutation"), v.literal("convex_action"), v.literal("http_callback"), v.literal("mcp_tool"), v.literal("sdk_invocation"), v.literal("external_observed"))), "handlerRef": v.optional(v.string()), "metadata": v.optional(v.record(v.string(), v.any())), "parameterSchema": v.optional(v.record(v.string(), v.any())), "requiredAction": v.union(v.literal("read"), v.literal("mutate"), v.literal("admin"), v.literal("summarize"), v.literal("export"), v.literal("create"), v.literal("delete"), v.literal("grant"), v.literal("revoke")), "requiredRole": v.union(v.literal("platform_admin"), v.literal("tenant_admin"), v.literal("workspace_admin"), v.literal("editor"), v.literal("viewer"), v.literal("auditor"), v.literal("service_agent")), "returnSchema": v.optional(v.record(v.string(), v.any())), "safetyMetadata": v.optional(v.object({ "idempotent": v.boolean(), "readOnly": v.boolean(), "sideEffectLevel": v.union(v.literal("none"), v.literal("low"), v.literal("high")) })), "status": v.union(v.literal("active"), v.literal("deprecated"), v.literal("draft")), "surfaces": v.array(v.union(v.literal("mcp"), v.literal("chat"), v.literal("voice"), v.literal("sprint"), v.literal("api"), v.literal("sdk"), v.literal("cli"))), "toolName": v.string(), "updatedAt": v.number(), "version": v.string() })).index("by_toolName", ["toolName"]).index("by_status", ["status"]).index("by_distribution", ["distribution"]).index("by_distribution_status", ["distribution", "status"]).index("by_category", ["category"]).index("by_requiredRole", ["requiredRole"]),
119
119
  "toolRegistryEntries": defineTable(v.object({ "approvalGateId": v.optional(v.string()), "category": v.optional(v.union(v.literal("read"), v.literal("write"), v.literal("admin"), v.literal("system"))), "createdAt": v.number(), "createdBy": v.string(), "description": v.string(), "exampleInvocations": v.array(v.object({ "expectedOutput": v.optional(v.record(v.string(), v.any())), "input": v.record(v.string(), v.any()) })), "executionAdapter": v.union(v.literal("convex_mutation"), v.literal("convex_action"), v.literal("http_callback"), v.literal("mcp_tool"), v.literal("sdk_invocation"), v.literal("external_observed")), "gateClassification": v.union(v.literal("core"), v.literal("shimmed")), "isCore": v.optional(v.boolean()), "metadata": v.optional(v.record(v.string(), v.any())), "parameterSchema": v.record(v.string(), v.any()), "requiredAction": v.optional(v.union(v.literal("read"), v.literal("mutate"), v.literal("admin"), v.literal("summarize"), v.literal("export"), v.literal("create"), v.literal("delete"), v.literal("grant"), v.literal("revoke"))), "requiredRole": v.optional(v.union(v.literal("platform_admin"), v.literal("tenant_admin"), v.literal("workspace_admin"), v.literal("editor"), v.literal("viewer"), v.literal("auditor"), v.literal("service_agent"))), "safetyMetadata": v.object({ "idempotent": v.boolean(), "readOnly": v.boolean(), "sideEffectLevel": v.union(v.literal("none"), v.literal("low"), v.literal("high")) }), "scopeRequirements": v.array(v.string()), "status": v.union(v.literal("active"), v.literal("deprecated"), v.literal("disabled")), "surfaces": v.optional(v.array(v.union(v.literal("mcp"), v.literal("chat"), v.literal("voice"), v.literal("sprint"), v.literal("api"), v.literal("sdk"), v.literal("cli")))), "tenantId": v.id("tenants"), "toolId": v.string(), "toolName": v.string(), "updatedAt": v.number(), "version": v.string(), "workspaceId": v.optional(v.id("workspaces")) })).index("by_toolId", ["toolId"]).index("by_tenant_toolId", ["tenantId", "toolId"]).index("by_tenant_toolId_version", ["tenantId", "toolId", "version"]).index("by_tenant_toolName", ["tenantId", "toolName"]).index("by_tenant_toolName_version", ["tenantId", "toolName", "version"]).index("by_workspace_toolName_version", ["workspaceId", "toolName", "version"]).index("by_tenant_gateClassification", ["tenantId", "gateClassification"]).index("by_tenant_status", ["tenantId", "status"]),
120
120
  "userSessions": defineTable(v.object({ "apiKeyId": v.id("apiKeys"), "authMode": v.optional(v.union(v.literal("interactive_user"), v.literal("service_principal"), v.literal("tenant_api_key"), v.literal("session_token"))), "clerkUserId": v.string(), "createdAt": v.number(), "delegationChain": v.optional(v.array(v.object({ "authMode": v.optional(v.union(v.literal("interactive_user"), v.literal("service_principal"), v.literal("tenant_api_key"), v.literal("session_token"))), "delegatedAt": v.optional(v.number()), "principalId": v.string(), "principalType": v.union(v.literal("human"), v.literal("service"), v.literal("agent")), "reason": v.optional(v.string()), "sessionId": v.optional(v.string()) }))), "jwtExpiresAt": v.optional(v.number()), "jwtIssuedAt": v.optional(v.number()), "lastActivityAt": v.number(), "lastValidatedAt": v.optional(v.number()), "principalId": v.optional(v.string()), "principalType": v.optional(v.union(v.literal("human"), v.literal("service"), v.literal("agent"))), "revokedAt": v.optional(v.number()), "revokedBy": v.optional(v.string()), "revokeReason": v.optional(v.string()), "role": v.optional(v.string()), "scopes": v.optional(v.array(v.string())), "sessionExpiresAt": v.optional(v.number()), "sessionId": v.string(), "sessionType": v.union(v.literal("user"), v.literal("agent")), "sourceSessionId": v.optional(v.string()), "status": v.union(v.literal("active"), v.literal("expired"), v.literal("revoked")), "tenantId": v.id("tenants"), "updatedAt": v.number(), "workspaceId": v.optional(v.string()) })).index("by_sessionId", ["sessionId"]).index("by_sourceSessionId", ["sourceSessionId"]).index("by_tenantId", ["tenantId"]).index("by_clerkUserId", ["clerkUserId"]).index("by_status", ["status"]),
121
- "workspaces": defineTable(v.object({ "createdAt": v.number(), "createdBy": v.optional(v.string()), "defaultProjectVisibility": v.optional(v.union(v.literal("private"), v.literal("team"), v.literal("firm"), v.literal("external"), v.literal("public"))), "deployments": v.optional(v.record(v.string(), v.object({ "encryptedDeployKey": v.string(), "url": v.string() }))), "key": v.string(), "metadata": v.optional(v.record(v.string(), v.any())), "name": v.string(), "slug": v.string(), "status": v.union(v.literal("active"), v.literal("archived")), "tenantId": v.id("tenants"), "updatedAt": v.number() })).index("by_tenantId", ["tenantId"]).index("by_tenantId_key", ["tenantId", "key"]).index("by_tenantId_slug", ["tenantId", "slug"]).index("by_status", ["status"])
121
+ "workspaces": defineTable(v.object({ "createdAt": v.number(), "createdBy": v.optional(v.string()), "defaultProjectVisibility": v.optional(v.union(v.literal("private"), v.literal("team"), v.literal("firm"), v.literal("external"), v.literal("public"))), "deployments": v.optional(v.record(v.string(), v.object({ "credentialRef": v.optional(v.string()), "encryptedDeployKey": v.optional(v.string()), "target": v.optional(v.union(v.literal("kernelDeployment"), v.literal("appDeployment"))), "url": v.string() }))), "key": v.string(), "metadata": v.optional(v.record(v.string(), v.any())), "name": v.string(), "slug": v.string(), "status": v.union(v.literal("active"), v.literal("archived")), "tenantId": v.id("tenants"), "updatedAt": v.number() })).index("by_tenantId", ["tenantId"]).index("by_tenantId_key", ["tenantId", "key"]).index("by_tenantId_slug", ["tenantId", "slug"]).index("by_status", ["status"])
122
122
  };
123
123
  var DEVELOPER_PACK_SCHEMA_TABLES = {};
124
124
  var EMPTY_SCHEMA_TABLES = {};