@lucern/sdk 0.2.0-alpha.7 → 0.2.0-alpha.9

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 (257) hide show
  1. package/dist/adminClient.d.ts +409 -0
  2. package/dist/adminClient.js +755 -0
  3. package/dist/adminClient.js.map +1 -0
  4. package/dist/answersClient.d.ts +23 -0
  5. package/dist/answersClient.js +333 -0
  6. package/dist/answersClient.js.map +1 -0
  7. package/dist/audiencesClient.d.ts +99 -0
  8. package/dist/audiencesClient.js +472 -0
  9. package/dist/audiencesClient.js.map +1 -0
  10. package/dist/auditClient.d.ts +29 -0
  11. package/dist/auditClient.js +386 -0
  12. package/dist/auditClient.js.map +1 -0
  13. package/dist/beliefsClient.d.ts +162 -0
  14. package/dist/beliefsClient.js +477 -0
  15. package/dist/beliefsClient.js.map +1 -0
  16. package/dist/client.d.ts +2378 -0
  17. package/dist/client.js +6134 -0
  18. package/dist/client.js.map +1 -0
  19. package/dist/contextClient.d.ts +27 -0
  20. package/dist/contextClient.js +396 -0
  21. package/dist/contextClient.js.map +1 -0
  22. package/dist/contextFacade.d.ts +2 -0
  23. package/dist/contextFacade.js +73 -0
  24. package/dist/contextFacade.js.map +1 -0
  25. package/dist/contextPackCompiler.d.ts +102 -0
  26. package/dist/contextPackCompiler.js +1091 -0
  27. package/dist/contextPackCompiler.js.map +1 -0
  28. package/dist/contextPackPolicy.d.ts +84 -0
  29. package/dist/contextPackPolicy.js +347 -0
  30. package/dist/contextPackPolicy.js.map +1 -0
  31. package/dist/contextPackSchema.d.ts +7 -0
  32. package/{src/contextPackSchema.ts → dist/contextPackSchema.js} +22 -70
  33. package/dist/contextPackSchema.js.map +1 -0
  34. package/dist/contextTypes.d.ts +135 -0
  35. package/dist/contextTypes.js +3 -0
  36. package/dist/contextTypes.js.map +1 -0
  37. package/dist/contracts/api-enums.contract.d.ts +81 -0
  38. package/dist/contracts/api-enums.contract.js +92 -0
  39. package/dist/contracts/api-enums.contract.js.map +1 -0
  40. package/dist/contracts/auth-session.contract.d.ts +55 -0
  41. package/dist/contracts/auth-session.contract.js +48 -0
  42. package/dist/contracts/auth-session.contract.js.map +1 -0
  43. package/dist/contracts/context-pack.contract.d.ts +492 -0
  44. package/dist/contracts/context-pack.contract.js +98 -0
  45. package/dist/contracts/context-pack.contract.js.map +1 -0
  46. package/dist/contracts/contextPack.d.ts +1 -0
  47. package/dist/contracts/contextPack.js +98 -0
  48. package/dist/contracts/contextPack.js.map +1 -0
  49. package/dist/contracts/index.d.ts +9 -0
  50. package/dist/contracts/index.js +4892 -0
  51. package/dist/contracts/index.js.map +1 -0
  52. package/dist/contracts/lens-filter.contract.d.ts +72 -0
  53. package/dist/contracts/lens-filter.contract.js +71 -0
  54. package/dist/contracts/lens-filter.contract.js.map +1 -0
  55. package/dist/contracts/lens-workflow.contract.d.ts +87 -0
  56. package/dist/contracts/lens-workflow.contract.js +123 -0
  57. package/dist/contracts/lens-workflow.contract.js.map +1 -0
  58. package/dist/contracts/lensFilter.d.ts +1 -0
  59. package/dist/contracts/lensFilter.js +71 -0
  60. package/dist/contracts/lensFilter.js.map +1 -0
  61. package/dist/contracts/lensWorkflow.d.ts +2 -0
  62. package/dist/contracts/lensWorkflow.js +123 -0
  63. package/dist/contracts/lensWorkflow.js.map +1 -0
  64. package/dist/contracts/mcp-tools.contract.d.ts +1 -0
  65. package/dist/contracts/mcp-tools.contract.js +2986 -0
  66. package/dist/contracts/mcp-tools.contract.js.map +1 -0
  67. package/dist/contracts/mcpTools.d.ts +1 -0
  68. package/dist/contracts/mcpTools.js +2986 -0
  69. package/dist/contracts/mcpTools.js.map +1 -0
  70. package/dist/contracts/prompt.contract.d.ts +26 -0
  71. package/dist/contracts/prompt.contract.js +12 -0
  72. package/dist/contracts/prompt.contract.js.map +1 -0
  73. package/dist/contracts/prompt.d.ts +1 -0
  74. package/dist/contracts/prompt.js +12 -0
  75. package/dist/contracts/prompt.js.map +1 -0
  76. package/dist/contracts/sdk-tools.contract.d.ts +2 -0
  77. package/dist/contracts/sdk-tools.contract.js +4134 -0
  78. package/dist/contracts/sdk-tools.contract.js.map +1 -0
  79. package/dist/contracts/sdkTools.d.ts +2 -0
  80. package/dist/contracts/sdkTools.js +4134 -0
  81. package/dist/contracts/sdkTools.js.map +1 -0
  82. package/dist/contracts/workflow-runtime.contract.d.ts +163 -0
  83. package/dist/contracts/workflow-runtime.contract.js +245 -0
  84. package/dist/contracts/workflow-runtime.contract.js.map +1 -0
  85. package/dist/contracts/workflowRuntime.d.ts +1 -0
  86. package/dist/contracts/workflowRuntime.js +245 -0
  87. package/dist/contracts/workflowRuntime.js.map +1 -0
  88. package/dist/controlObjectOwnership.d.ts +310 -0
  89. package/{src/controlObjectOwnership.ts → dist/controlObjectOwnership.js} +53 -124
  90. package/dist/controlObjectOwnership.js.map +1 -0
  91. package/dist/coreClient.d.ts +144 -0
  92. package/dist/coreClient.js +339 -0
  93. package/dist/coreClient.js.map +1 -0
  94. package/dist/customTools.d.ts +88 -0
  95. package/dist/customTools.js +248 -0
  96. package/dist/customTools.js.map +1 -0
  97. package/dist/decisionsClient.d.ts +111 -0
  98. package/dist/decisionsClient.js +522 -0
  99. package/dist/decisionsClient.js.map +1 -0
  100. package/dist/domainContext.d.ts +1 -0
  101. package/dist/domainContext.js +3 -0
  102. package/dist/domainContext.js.map +1 -0
  103. package/dist/events.d.ts +178 -0
  104. package/dist/events.js +249 -0
  105. package/dist/events.js.map +1 -0
  106. package/dist/eventsCore.d.ts +49 -0
  107. package/dist/eventsCore.js +429 -0
  108. package/dist/eventsCore.js.map +1 -0
  109. package/dist/facade/context.d.ts +18 -0
  110. package/dist/facade/context.js +73 -0
  111. package/dist/facade/context.js.map +1 -0
  112. package/dist/gatewayFacades.d.ts +591 -0
  113. package/dist/gatewayFacades.js +1953 -0
  114. package/dist/gatewayFacades.js.map +1 -0
  115. package/dist/graphClient.d.ts +271 -0
  116. package/dist/graphClient.js +698 -0
  117. package/dist/graphClient.js.map +1 -0
  118. package/dist/harnessClient.d.ts +314 -0
  119. package/dist/harnessClient.js +607 -0
  120. package/dist/harnessClient.js.map +1 -0
  121. package/dist/identityClient.d.ts +140 -0
  122. package/dist/identityClient.js +497 -0
  123. package/dist/identityClient.js.map +1 -0
  124. package/dist/index.d.ts +42 -0
  125. package/dist/index.js +11381 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/learningClient.d.ts +46 -0
  128. package/dist/learningClient.js +409 -0
  129. package/dist/learningClient.js.map +1 -0
  130. package/dist/mcpParityClient.d.ts +74 -0
  131. package/dist/mcpParityClient.js +516 -0
  132. package/dist/mcpParityClient.js.map +1 -0
  133. package/dist/mcpParitySurface.d.ts +12 -0
  134. package/{src/mcpParitySurface.ts → dist/mcpParitySurface.js} +9 -14
  135. package/dist/mcpParitySurface.js.map +1 -0
  136. package/dist/mcpTools-DPZxowDX.d.ts +254 -0
  137. package/dist/ontologyClient.d.ts +137 -0
  138. package/dist/ontologyClient.js +513 -0
  139. package/dist/ontologyClient.js.map +1 -0
  140. package/dist/packRuntime.d.ts +2 -0
  141. package/dist/packRuntime.js +3 -0
  142. package/dist/packRuntime.js.map +1 -0
  143. package/dist/packsClient.d.ts +131 -0
  144. package/dist/packsClient.js +525 -0
  145. package/dist/packsClient.js.map +1 -0
  146. package/dist/policyClient.d.ts +299 -0
  147. package/dist/policyClient.js +625 -0
  148. package/dist/policyClient.js.map +1 -0
  149. package/dist/realtime/index.d.ts +29 -0
  150. package/dist/realtime/index.js +23 -0
  151. package/dist/realtime/index.js.map +1 -0
  152. package/{src/realtime/refs.ts → dist/realtime/refs.d.ts} +5 -5
  153. package/dist/realtime/refs.js +9 -0
  154. package/dist/realtime/refs.js.map +1 -0
  155. package/dist/reportsClient.d.ts +41 -0
  156. package/dist/reportsClient.js +418 -0
  157. package/dist/reportsClient.js.map +1 -0
  158. package/dist/schemaClient.d.ts +64 -0
  159. package/dist/schemaClient.js +434 -0
  160. package/dist/schemaClient.js.map +1 -0
  161. package/dist/sdkSurface.d.ts +61 -0
  162. package/dist/sdkSurface.js +112 -0
  163. package/dist/sdkSurface.js.map +1 -0
  164. package/dist/sdkTools-CwXJDACb.d.ts +150 -0
  165. package/dist/topicsClient.d.ts +84 -0
  166. package/dist/topicsClient.js +492 -0
  167. package/dist/topicsClient.js.map +1 -0
  168. package/dist/types.d.ts +696 -0
  169. package/dist/types.js +3 -0
  170. package/dist/types.js.map +1 -0
  171. package/dist/version.d.ts +4 -0
  172. package/dist/version.js +6 -0
  173. package/dist/version.js.map +1 -0
  174. package/dist/workflowClient.d.ts +316 -0
  175. package/dist/workflowClient.js +830 -0
  176. package/dist/workflowClient.js.map +1 -0
  177. package/package.json +39 -7
  178. package/.turbo/turbo-build.log +0 -7
  179. package/.turbo/turbo-typecheck.log +0 -4
  180. package/examples/README.md +0 -69
  181. package/examples/contradiction.ts +0 -94
  182. package/examples/investigation-context.ts +0 -118
  183. package/examples/questions-and-tasks.ts +0 -55
  184. package/examples/quickstart.ts +0 -97
  185. package/examples/shared.ts +0 -318
  186. package/examples/strict-public-types.ts +0 -143
  187. package/examples/worktree-lifecycle.ts +0 -79
  188. package/src/README.md +0 -6
  189. package/src/adminClient.ts +0 -789
  190. package/src/answersClient.ts +0 -29
  191. package/src/audiencesClient.ts +0 -209
  192. package/src/auditClient.ts +0 -50
  193. package/src/beliefsClient.ts +0 -319
  194. package/src/client.ts +0 -2647
  195. package/src/contextClient.ts +0 -130
  196. package/src/contextFacade.ts +0 -15
  197. package/src/contextPackCompiler.ts +0 -828
  198. package/src/contextTypes.ts +0 -153
  199. package/src/contracts/api-enums.contract.ts +0 -202
  200. package/src/contracts/auth-session.contract.ts +0 -109
  201. package/src/contracts/context-pack.contract.ts +0 -700
  202. package/src/contracts/contextPack.ts +0 -1
  203. package/src/contracts/index.ts +0 -10
  204. package/src/contracts/lens-filter.contract.ts +0 -183
  205. package/src/contracts/lens-workflow.contract.ts +0 -162
  206. package/src/contracts/lensFilter.ts +0 -1
  207. package/src/contracts/lensWorkflow.ts +0 -1
  208. package/src/contracts/mcp-tools.contract.ts +0 -3636
  209. package/src/contracts/mcpTools.ts +0 -1
  210. package/src/contracts/prompt.contract.ts +0 -50
  211. package/src/contracts/prompt.ts +0 -1
  212. package/src/contracts/sdk-tools.contract.ts +0 -1457
  213. package/src/contracts/sdkTools.ts +0 -1
  214. package/src/contracts/workflow-runtime.contract.ts +0 -440
  215. package/src/contracts/workflowRuntime.ts +0 -1
  216. package/src/coreClient.ts +0 -570
  217. package/src/customTools.ts +0 -398
  218. package/src/decisionsClient.ts +0 -286
  219. package/src/domainContext.ts +0 -15
  220. package/src/events.ts +0 -531
  221. package/src/eventsCore.ts +0 -168
  222. package/src/facade/beliefs.ts +0 -83
  223. package/src/facade/context.ts +0 -110
  224. package/src/facade/contradictions.ts +0 -29
  225. package/src/facade/edges.ts +0 -30
  226. package/src/facade/events.ts +0 -23
  227. package/src/facade/evidence.ts +0 -41
  228. package/src/facade/graph.ts +0 -38
  229. package/src/facade/identity.ts +0 -16
  230. package/src/facade/ontologies.ts +0 -34
  231. package/src/facade/questions.ts +0 -59
  232. package/src/facade/search.ts +0 -16
  233. package/src/facade/tasks.ts +0 -37
  234. package/src/facade/topics.ts +0 -42
  235. package/src/facade/webhooks.ts +0 -58
  236. package/src/facade/worktrees.ts +0 -51
  237. package/src/gatewayFacades.ts +0 -1666
  238. package/src/graphClient.ts +0 -529
  239. package/src/harnessClient.ts +0 -585
  240. package/src/identityClient.ts +0 -278
  241. package/src/index.ts +0 -49
  242. package/src/learningClient.ts +0 -95
  243. package/src/mcpParityClient.ts +0 -240
  244. package/src/ontologyClient.ts +0 -275
  245. package/src/packRuntime.ts +0 -3
  246. package/src/packsClient.ts +0 -260
  247. package/src/policyClient.ts +0 -572
  248. package/src/promptCatalog.ts +0 -1
  249. package/src/realtime/index.ts +0 -51
  250. package/src/reportsClient.ts +0 -99
  251. package/src/schemaClient.ts +0 -129
  252. package/src/sdkSurface.ts +0 -190
  253. package/src/topicsClient.ts +0 -243
  254. package/src/types.ts +0 -807
  255. package/src/version.ts +0 -2
  256. package/src/workflowClient.ts +0 -826
  257. package/tsconfig.json +0 -9
@@ -1,398 +0,0 @@
1
- import { z } from "zod";
2
- import type {
3
- McpParameterDef,
4
- McpResponseDef,
5
- McpToolContract,
6
- } from "./contracts/mcpTools";
7
- import type { JsonObject } from "./types";
8
-
9
- /** Default namespace assigned to custom tools when none is specified. */
10
- const DEFAULT_CUSTOM_NAMESPACE = "custom";
11
-
12
- /** Namespace strings reserved for platform-internal tools. */
13
- const RESERVED_NAMESPACES = new Set(["lucern"]);
14
-
15
- type AnyZodObject = z.ZodObject<z.ZodRawShape>;
16
-
17
- /** Origin of a custom tool invocation (SDK call or MCP request). */
18
- export type CustomToolInvocationSource = "sdk" | "mcp";
19
-
20
- /** Runtime context passed to a custom tool handler during invocation. */
21
- export type CustomToolInvocationContext = {
22
- source: CustomToolInvocationSource;
23
- };
24
-
25
- /** Optional metadata attached to a custom tool registration. */
26
- export type CustomToolMetadata = {
27
- category?: string;
28
- tags?: string[];
29
- requiredScopes?: string[];
30
- };
31
-
32
- /** Input descriptor for registering a custom tool with its schemas and handler. */
33
- export type CustomToolRegistration<
34
- TInput extends AnyZodObject = AnyZodObject,
35
- TOutput extends z.ZodTypeAny = z.ZodTypeAny,
36
- > = {
37
- namespace?: string;
38
- name: string;
39
- description: string;
40
- inputSchema: TInput;
41
- outputSchema: TOutput;
42
- handler: (
43
- input: z.infer<TInput>,
44
- context: CustomToolInvocationContext
45
- ) => Promise<z.infer<TOutput>> | z.infer<TOutput>;
46
- metadata?: CustomToolMetadata;
47
- ownerModule?: string;
48
- ontologyPrimitive?: McpToolContract["ontologyPrimitive"];
49
- tier?: McpToolContract["tier"];
50
- };
51
-
52
- /** A fully resolved custom tool entry stored in the in-memory registry. */
53
- export type RegisteredCustomTool = {
54
- fullName: string;
55
- namespace: string;
56
- shortName: string;
57
- metadata: CustomToolMetadata;
58
- contract: McpToolContract;
59
- inputSchema: AnyZodObject;
60
- outputSchema: z.ZodTypeAny;
61
- invoke: (
62
- input: JsonObject,
63
- context: CustomToolInvocationContext
64
- ) => Promise<unknown>;
65
- };
66
-
67
- /** Error thrown when custom tool registration or invocation fails validation. */
68
- export class CustomToolRegistryError extends Error {
69
- constructor(message: string) {
70
- super(message);
71
- this.name = "CustomToolRegistryError";
72
- }
73
- }
74
-
75
- const customToolRegistry = new Map<string, RegisteredCustomTool>();
76
-
77
- function normalizeSegment(value: string, field: "namespace" | "name"): string {
78
- const normalized = value.trim();
79
- if (!normalized) {
80
- throw new CustomToolRegistryError(`Custom tool ${field} is required.`);
81
- }
82
- if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(normalized)) {
83
- throw new CustomToolRegistryError(
84
- `Invalid custom tool ${field}: "${value}". Use letters, numbers, "_" or "-".`
85
- );
86
- }
87
- return normalized;
88
- }
89
-
90
- function normalizeNamespace(namespace?: string): string {
91
- const resolved = normalizeSegment(
92
- namespace ?? DEFAULT_CUSTOM_NAMESPACE,
93
- "namespace"
94
- );
95
- if (RESERVED_NAMESPACES.has(resolved.toLowerCase())) {
96
- throw new CustomToolRegistryError(
97
- `Namespace "${resolved}" is reserved for platform tools.`
98
- );
99
- }
100
- return resolved;
101
- }
102
-
103
- function normalizeName(name: string): string {
104
- if (name.includes(".")) {
105
- throw new CustomToolRegistryError(
106
- `Custom tool name "${name}" must not include "."; use namespace + name.`
107
- );
108
- }
109
- return normalizeSegment(name, "name");
110
- }
111
-
112
- function buildFullName(namespace: string, shortName: string): string {
113
- return `${namespace}.${shortName}`;
114
- }
115
-
116
- function unwrapSchema(schema: z.ZodTypeAny): {
117
- schema: z.ZodTypeAny;
118
- required: boolean;
119
- } {
120
- if (schema instanceof z.ZodOptional) {
121
- return { schema: schema.unwrap(), required: false };
122
- }
123
- if (schema instanceof z.ZodDefault) {
124
- const removeDefault = (
125
- schema as unknown as { removeDefault?: () => z.ZodTypeAny }
126
- ).removeDefault;
127
- if (typeof removeDefault === "function") {
128
- return { schema: removeDefault.call(schema), required: false };
129
- }
130
- const inner = (schema as unknown as { _def?: { innerType?: z.ZodTypeAny } })
131
- ._def?.innerType;
132
- return { schema: inner ?? schema, required: false };
133
- }
134
- return { schema, required: true };
135
- }
136
-
137
- function resolveParameterType(schema: z.ZodTypeAny): {
138
- type: McpParameterDef["type"];
139
- enum?: string[];
140
- } {
141
- if (schema instanceof z.ZodString) {
142
- return { type: "string" };
143
- }
144
- if (schema instanceof z.ZodEnum) {
145
- return { type: "string", enum: schema.options };
146
- }
147
- if (schema instanceof z.ZodNativeEnum) {
148
- const values = Object.values(schema.enum).filter(
149
- (value): value is string => typeof value === "string"
150
- );
151
- return values.length > 0
152
- ? { type: "string", enum: values }
153
- : { type: "string" };
154
- }
155
- if (schema instanceof z.ZodLiteral) {
156
- const literalValue = schema.value;
157
- if (typeof literalValue === "string") {
158
- return { type: "string", enum: [literalValue] };
159
- }
160
- if (typeof literalValue === "number") {
161
- return { type: "number" };
162
- }
163
- if (typeof literalValue === "boolean") {
164
- return { type: "boolean" };
165
- }
166
- return { type: "object" };
167
- }
168
- if (schema instanceof z.ZodNumber) {
169
- return { type: "number" };
170
- }
171
- if (schema instanceof z.ZodBoolean) {
172
- return { type: "boolean" };
173
- }
174
- if (schema instanceof z.ZodArray) {
175
- return { type: "array" };
176
- }
177
- return { type: "object" };
178
- }
179
-
180
- function schemaTypeLabel(schema: z.ZodTypeAny): string {
181
- if (schema instanceof z.ZodString || schema instanceof z.ZodEnum) {
182
- return "string";
183
- }
184
- if (schema instanceof z.ZodNumber) {
185
- return "number";
186
- }
187
- if (schema instanceof z.ZodBoolean) {
188
- return "boolean";
189
- }
190
- if (schema instanceof z.ZodArray) {
191
- return "array";
192
- }
193
- if (schema instanceof z.ZodObject) {
194
- return "object";
195
- }
196
- return "unknown";
197
- }
198
-
199
- function parseObjectSchema<TInput extends AnyZodObject>(
200
- value: TInput,
201
- fieldName: string
202
- ): TInput {
203
- if (!(value instanceof z.ZodObject)) {
204
- throw new CustomToolRegistryError(
205
- `${fieldName} must be a Zod object schema.`
206
- );
207
- }
208
- return value;
209
- }
210
-
211
- function deriveParameters(schema: AnyZodObject): {
212
- parameters: Record<string, McpParameterDef>;
213
- required: string[];
214
- } {
215
- const shape = schema.shape;
216
- const parameters: Record<string, McpParameterDef> = {};
217
- const required: string[] = [];
218
-
219
- for (const [key, raw] of Object.entries(shape)) {
220
- const { schema: unwrapped, required: isRequired } = unwrapSchema(
221
- raw as z.ZodTypeAny
222
- );
223
- const parameterType = resolveParameterType(unwrapped);
224
- parameters[key] = {
225
- type: parameterType.type,
226
- description: (raw as z.ZodTypeAny).description ?? `${key} parameter`,
227
- ...(parameterType.enum ? { enum: parameterType.enum } : {}),
228
- };
229
- if (isRequired) {
230
- required.push(key);
231
- }
232
- }
233
-
234
- return { parameters, required };
235
- }
236
-
237
- function deriveResponse(schema: z.ZodTypeAny): McpResponseDef {
238
- if (schema instanceof z.ZodObject) {
239
- const fields = Object.fromEntries(
240
- Object.entries(schema.shape).map(([key, value]) => {
241
- const zodValue = value as z.ZodTypeAny;
242
- const label = schemaTypeLabel(unwrapSchema(zodValue).schema);
243
- const description = zodValue.description ?? "custom output field";
244
- return [key, `${label} — ${description}`];
245
- })
246
- );
247
- return {
248
- description: "Custom tool result payload",
249
- fields,
250
- };
251
- }
252
-
253
- return {
254
- description: "Custom tool result payload",
255
- fields: {
256
- result: `${schemaTypeLabel(schema)} — custom output payload`,
257
- },
258
- };
259
- }
260
-
261
- function buildContract<
262
- TInput extends AnyZodObject,
263
- TOutput extends z.ZodTypeAny,
264
- >(
265
- fullName: string,
266
- namespace: string,
267
- registration: CustomToolRegistration<TInput, TOutput>,
268
- inputSchema: TInput
269
- ): McpToolContract {
270
- const { parameters, required } = deriveParameters(inputSchema);
271
- return {
272
- name: fullName,
273
- description: registration.description,
274
- parameters,
275
- required,
276
- response: deriveResponse(registration.outputSchema),
277
- ownerModule: registration.ownerModule ?? `${namespace}-extension`,
278
- ontologyPrimitive: registration.ontologyPrimitive ?? "task",
279
- tier: registration.tier ?? "workhorse",
280
- };
281
- }
282
-
283
- /**
284
- * Register a custom SDK tool in the in-memory registry.
285
- * @param registration - The tool definition including name, schemas, and handler.
286
- * @param options - Optional flags; set `replace` to overwrite an existing registration.
287
- * @returns The fully resolved registered tool entry.
288
- */
289
- export function registerCustomTool<
290
- TInput extends AnyZodObject,
291
- TOutput extends z.ZodTypeAny,
292
- >(
293
- registration: CustomToolRegistration<TInput, TOutput>,
294
- options: { replace?: boolean } = {}
295
- ): RegisteredCustomTool {
296
- const namespace = normalizeNamespace(registration.namespace);
297
- const shortName = normalizeName(registration.name);
298
- const fullName = buildFullName(namespace, shortName);
299
-
300
- if (customToolRegistry.has(fullName) && !options.replace) {
301
- throw new CustomToolRegistryError(
302
- `Custom tool "${fullName}" is already registered.`
303
- );
304
- }
305
-
306
- const inputSchema = parseObjectSchema(
307
- registration.inputSchema,
308
- "inputSchema"
309
- );
310
- const outputSchema = registration.outputSchema;
311
- const contract = buildContract(
312
- fullName,
313
- namespace,
314
- registration,
315
- inputSchema
316
- );
317
- const metadata: CustomToolMetadata = {
318
- category: registration.metadata?.category,
319
- tags: registration.metadata?.tags ?? [],
320
- requiredScopes: registration.metadata?.requiredScopes ?? ["custom:execute"],
321
- };
322
-
323
- const registered: RegisteredCustomTool = {
324
- fullName,
325
- namespace,
326
- shortName,
327
- metadata,
328
- contract,
329
- inputSchema,
330
- outputSchema,
331
- invoke: async (input, context) => {
332
- const parsedInput = inputSchema.parse(input);
333
- const rawOutput = await registration.handler(parsedInput, context);
334
- return outputSchema.parse(rawOutput);
335
- },
336
- };
337
-
338
- customToolRegistry.set(fullName, registered);
339
- return registered;
340
- }
341
-
342
- /**
343
- * Remove a custom SDK tool from the registry.
344
- * @param fullName - Fully qualified tool name (`namespace.name`).
345
- * @returns `true` if the tool was found and removed, `false` otherwise.
346
- */
347
- export function unregisterCustomTool(fullName: string): boolean {
348
- return customToolRegistry.delete(fullName.trim());
349
- }
350
-
351
- /**
352
- * Get a custom SDK tool by fully qualified name.
353
- * @param fullName - Fully qualified tool name (`namespace.name`).
354
- * @returns The registered tool entry, or `undefined` if not found.
355
- */
356
- export function getRegisteredCustomTool(
357
- fullName: string
358
- ): RegisteredCustomTool | undefined {
359
- return customToolRegistry.get(fullName.trim());
360
- }
361
-
362
- /**
363
- * List all registered custom SDK tools, sorted alphabetically by full name.
364
- * @returns An array of all registered tool entries.
365
- */
366
- export function listRegisteredCustomTools(): RegisteredCustomTool[] {
367
- return [...customToolRegistry.values()].sort((left, right) =>
368
- left.fullName.localeCompare(right.fullName)
369
- );
370
- }
371
-
372
- /**
373
- * Clear the registered custom tool registry.
374
- */
375
- export function clearRegisteredCustomTools(): void {
376
- customToolRegistry.clear();
377
- }
378
-
379
- /**
380
- * Invoke a registered custom SDK tool by fully qualified name.
381
- * @param fullName - Fully qualified tool name (`namespace.name`).
382
- * @param params - JSON-serializable input parameters for the tool handler.
383
- * @param context - Invocation context indicating the call source.
384
- * @returns The validated output from the tool handler.
385
- */
386
- export async function invokeRegisteredCustomTool(
387
- fullName: string,
388
- params: JsonObject,
389
- context: CustomToolInvocationContext
390
- ): Promise<unknown> {
391
- const registered = getRegisteredCustomTool(fullName);
392
- if (!registered) {
393
- throw new CustomToolRegistryError(
394
- `Custom tool "${fullName}" is not registered.`
395
- );
396
- }
397
- return registered.invoke(params, context);
398
- }
@@ -1,286 +0,0 @@
1
- import {
2
- createGatewayRequestClient,
3
- type GatewayClientConfig,
4
- LucernApiError,
5
- randomIdempotencyKey,
6
- toQueryString,
7
- } from "./coreClient";
8
- import {
9
- createListResult,
10
- mapGatewayData,
11
- normalizeTopicQuery,
12
- withTopicAlias,
13
- } from "./sdkSurface";
14
- import type {
15
- GetJudgmentResponse,
16
- JudgmentCalibrationResponse,
17
- JudgmentRecord,
18
- JudgmentReadinessResponse,
19
- JudgmentTransitionAuditIntegrityResponse,
20
- ListJudgmentsResponse,
21
- PendingJudgmentOutcomeReviewResponse,
22
- PendingJudgmentOutcomeRecord,
23
- RecordJudgmentOutcomeResponse,
24
- RecordJudgmentResponse,
25
- TopicIdentifierInput,
26
- } from "./types";
27
-
28
- export { LucernApiError };
29
- export type { PlatformGatewaySuccess } from "./coreClient";
30
- export type {
31
- GetJudgmentResponse,
32
- JudgmentCalibrationResponse,
33
- JudgmentReadinessResponse,
34
- JudgmentTransitionAuditIntegrityResponse,
35
- ListJudgmentsResponse,
36
- PendingJudgmentOutcomeReviewResponse,
37
- RecordJudgmentOutcomeResponse,
38
- RecordJudgmentResponse,
39
- } from "./types";
40
-
41
- /** Configuration for the decisions client. */
42
- export type DecisionsClientConfig = GatewayClientConfig;
43
-
44
- /** Input for recording a new judgment (irreversible decision commitment). */
45
- export type RecordJudgmentInput = {
46
- title: string;
47
- summary?: string;
48
- rationale: string;
49
- topicId?: string;
50
- confidence?: number;
51
- decisionConfidence?: number;
52
- judgmentType?: string;
53
- decisionType?: string;
54
- beliefIds?: string[];
55
- keyUncertainties?: string[];
56
- alternativesConsidered?: string[];
57
- decisionMakers?: string[];
58
- companyId?: string;
59
- amount?: number;
60
- valuation?: number;
61
- terms?: string;
62
- themeIds?: string[];
63
- } & TopicIdentifierInput;
64
-
65
- /** Filter parameters for listing judgments within a topic scope. */
66
- export type ListJudgmentsInput = {
67
- topicId?: string;
68
- includeArchived?: boolean;
69
- limit?: number;
70
- } & TopicIdentifierInput;
71
-
72
- /** Input for recording the real-world outcome of a judgment. */
73
- export type RecordJudgmentOutcomeInput = {
74
- outcome:
75
- | "pending"
76
- | "successful"
77
- | "unsuccessful"
78
- | "mixed"
79
- | "unknown"
80
- | "too_early";
81
- outcomeNotes?: string;
82
- notes?: string;
83
- };
84
-
85
- /** Input for retrieving judgment calibration analytics. */
86
- export type GetJudgmentCalibrationInput = {
87
- topicId?: string;
88
- } & TopicIdentifierInput;
89
-
90
- /** Input for listing judgments still awaiting outcome review. */
91
- export type ListPendingJudgmentOutcomeReviewInput = {
92
- topicId?: string;
93
- } & TopicIdentifierInput;
94
-
95
- /** Input for checking audit integrity of judgment state transitions. */
96
- export type GetJudgmentTransitionAuditIntegrityInput = {
97
- topicId?: string;
98
- judgmentId?: string;
99
- includePassing?: boolean;
100
- } & TopicIdentifierInput;
101
-
102
- /**
103
- * Create the judgments client for decision lifecycle operations.
104
- * @param config - Gateway transport configuration.
105
- * @returns An object with methods to manage judgments, outcomes, readiness, and calibration.
106
- */
107
- export function createDecisionsClient(config: DecisionsClientConfig = {}) {
108
- const gateway = createGatewayRequestClient(config);
109
-
110
- return {
111
- /**
112
- * List judgments for a topic scope.
113
- */
114
- async listJudgments(query: ListJudgmentsInput) {
115
- return gateway.request<ListJudgmentsResponse>({
116
- path: `/api/platform/v1/graph/judgments${toQueryString({
117
- ...normalizeTopicQuery(query),
118
- includeArchived:
119
- typeof query.includeArchived === "boolean"
120
- ? query.includeArchived
121
- ? "true"
122
- : "false"
123
- : undefined,
124
- limit: query.limit,
125
- })}`,
126
- }).then((response) =>
127
- mapGatewayData(response, (data) => {
128
- const rows = Array.isArray(data) ? data : [];
129
- const judgments = rows.map((row) =>
130
- withTopicAlias(row as Record<string, unknown>) as JudgmentRecord
131
- );
132
- return {
133
- ...createListResult(judgments, "judgments"),
134
- } as ListJudgmentsResponse;
135
- })
136
- );
137
- },
138
-
139
- /**
140
- * Get a single judgment by identifier.
141
- */
142
- async getJudgment(judgmentId: string) {
143
- return gateway.request<GetJudgmentResponse>({
144
- path: `/api/platform/v1/graph/judgments/${encodeURIComponent(judgmentId)}`,
145
- }).then((response) =>
146
- mapGatewayData(response, (data) =>
147
- data && typeof data === "object"
148
- ? (withTopicAlias(
149
- data as Record<string, unknown>
150
- ) as GetJudgmentResponse)
151
- : data
152
- )
153
- );
154
- },
155
-
156
- /**
157
- * Get readiness signals for creating a judgment.
158
- */
159
- async getJudgmentReadiness(query: {
160
- topicId?: string;
161
- } & TopicIdentifierInput) {
162
- return gateway.request<JudgmentReadinessResponse>({
163
- path: `/api/platform/v1/graph/judgments/readiness${toQueryString(
164
- normalizeTopicQuery(query)
165
- )}`,
166
- });
167
- },
168
-
169
- /**
170
- * Get calibration analytics for judgment outcomes.
171
- */
172
- async getJudgmentCalibration(query: GetJudgmentCalibrationInput) {
173
- return gateway.request<JudgmentCalibrationResponse>({
174
- path: `/api/platform/v1/graph/judgments/calibration${toQueryString(
175
- normalizeTopicQuery(query)
176
- )}`,
177
- });
178
- },
179
-
180
- /**
181
- * List judgments still awaiting outcome review.
182
- */
183
- async listPendingOutcomeReviews(
184
- query: ListPendingJudgmentOutcomeReviewInput
185
- ) {
186
- return gateway.request<PendingJudgmentOutcomeReviewResponse>({
187
- path: `/api/platform/v1/graph/judgments/pending-outcome-review${toQueryString(
188
- normalizeTopicQuery(query)
189
- )}`,
190
- }).then((response) =>
191
- mapGatewayData(response, (data) => {
192
- const rows = Array.isArray(data) ? data : [];
193
- const reviews = rows.map((row) =>
194
- withTopicAlias(
195
- row as Record<string, unknown>
196
- ) as PendingJudgmentOutcomeRecord
197
- );
198
- return createListResult(reviews, "reviews");
199
- })
200
- );
201
- },
202
-
203
- /**
204
- * @deprecated Use listPendingOutcomeReviews.
205
- */
206
- async listPendingJudgmentOutcomeReview(
207
- query: ListPendingJudgmentOutcomeReviewInput
208
- ) {
209
- return this.listPendingOutcomeReviews(query);
210
- },
211
-
212
- /**
213
- * Get audit integrity checks for judgment transitions.
214
- */
215
- async getJudgmentTransitionAuditIntegrity(
216
- query: GetJudgmentTransitionAuditIntegrityInput
217
- ) {
218
- return gateway.request<JudgmentTransitionAuditIntegrityResponse>({
219
- path: `/api/platform/v1/graph/judgments/transition-audit-integrity${toQueryString(
220
- {
221
- ...normalizeTopicQuery(query),
222
- judgmentId: query.judgmentId,
223
- includePassing:
224
- typeof query.includePassing === "boolean"
225
- ? query.includePassing
226
- ? "true"
227
- : "false"
228
- : undefined,
229
- }
230
- )}`,
231
- });
232
- },
233
-
234
- /**
235
- * Create a judgment.
236
- */
237
- async createJudgment(input: RecordJudgmentInput, idempotencyKey?: string) {
238
- return gateway.request<RecordJudgmentResponse>({
239
- path: "/api/platform/v1/graph/judgments",
240
- method: "POST",
241
- body: normalizeTopicQuery(input),
242
- idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),
243
- }).then((response) =>
244
- mapGatewayData(response, (data) =>
245
- withTopicAlias(
246
- data as Record<string, unknown>
247
- ) as RecordJudgmentResponse
248
- )
249
- );
250
- },
251
-
252
- /**
253
- * @deprecated Use createJudgment.
254
- */
255
- async recordJudgment(input: RecordJudgmentInput, idempotencyKey?: string) {
256
- return this.createJudgment(input, idempotencyKey);
257
- },
258
-
259
- /**
260
- * Update the outcome for an existing judgment.
261
- */
262
- async updateJudgmentOutcome(
263
- judgmentId: string,
264
- input: RecordJudgmentOutcomeInput,
265
- idempotencyKey?: string
266
- ) {
267
- return gateway.request<RecordJudgmentOutcomeResponse>({
268
- path: `/api/platform/v1/graph/judgments/${encodeURIComponent(judgmentId)}/outcome`,
269
- method: "POST",
270
- body: input,
271
- idempotencyKey: idempotencyKey ?? randomIdempotencyKey(),
272
- });
273
- },
274
-
275
- /**
276
- * @deprecated Use updateJudgmentOutcome.
277
- */
278
- async recordJudgmentOutcome(
279
- judgmentId: string,
280
- input: RecordJudgmentOutcomeInput,
281
- idempotencyKey?: string
282
- ) {
283
- return this.updateJudgmentOutcome(judgmentId, input, idempotencyKey);
284
- },
285
- };
286
- }
@@ -1,15 +0,0 @@
1
- export type {
2
- CompileContextInput,
3
- ContextCompilationMode,
4
- ContextPackSectionKey,
5
- ContextRankingProfile,
6
- PackWeightOverride,
7
- PublicCompiledContext,
8
- PublicContextBelief,
9
- PublicContextContradiction,
10
- PublicContextEntity,
11
- PublicContextEvidence,
12
- PublicContextInjectionPolicy,
13
- PublicContextQuestion,
14
- RankingWeightVector,
15
- } from "./contextTypes";