@lucern/sdk 0.2.0-alpha.6 → 0.2.0-alpha.8

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 (274) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{lib/platform/sdk/adminClient.d.ts → adminClient.d.ts} +56 -51
  3. package/dist/adminClient.js +755 -0
  4. package/dist/adminClient.js.map +1 -0
  5. package/dist/answersClient.d.ts +23 -0
  6. package/dist/answersClient.js +333 -0
  7. package/dist/answersClient.js.map +1 -0
  8. package/dist/{lib/platform/sdk/audiencesClient.d.ts → audiencesClient.d.ts} +24 -18
  9. package/dist/audiencesClient.js +472 -0
  10. package/dist/audiencesClient.js.map +1 -0
  11. package/dist/auditClient.d.ts +29 -0
  12. package/dist/auditClient.js +386 -0
  13. package/dist/auditClient.js.map +1 -0
  14. package/dist/{lib/platform/sdk/beliefsClient.d.ts → beliefsClient.d.ts} +32 -27
  15. package/dist/beliefsClient.js +477 -0
  16. package/dist/beliefsClient.js.map +1 -0
  17. package/dist/{lib/platform/sdk/client.d.ts → client.d.ts} +404 -395
  18. package/dist/client.js +6134 -0
  19. package/dist/client.js.map +1 -0
  20. package/dist/{lib/platform/sdk/contextClient.d.ts → contextClient.d.ts} +13 -7
  21. package/dist/contextClient.js +396 -0
  22. package/dist/contextClient.js.map +1 -0
  23. package/dist/contextFacade.d.ts +2 -0
  24. package/dist/contextFacade.js +73 -0
  25. package/dist/contextFacade.js.map +1 -0
  26. package/dist/{lib/platform/sdk/contextPackCompiler.d.ts → contextPackCompiler.d.ts} +11 -9
  27. package/dist/contextPackCompiler.js +1091 -0
  28. package/dist/contextPackCompiler.js.map +1 -0
  29. package/dist/contextPackPolicy.d.ts +84 -0
  30. package/dist/contextPackPolicy.js +347 -0
  31. package/dist/contextPackPolicy.js.map +1 -0
  32. package/dist/contextPackSchema.d.ts +7 -0
  33. package/dist/contextPackSchema.js +203 -0
  34. package/dist/contextPackSchema.js.map +1 -0
  35. package/dist/{lib/platform/sdk/contextTypes.d.ts → contextTypes.d.ts} +15 -13
  36. package/dist/contextTypes.js +3 -0
  37. package/dist/contextTypes.js.map +1 -0
  38. package/dist/contracts/api-enums.contract.d.ts +81 -0
  39. package/dist/contracts/api-enums.contract.js +92 -0
  40. package/dist/contracts/api-enums.contract.js.map +1 -0
  41. package/dist/contracts/auth-session.contract.d.ts +55 -0
  42. package/dist/contracts/auth-session.contract.js +48 -0
  43. package/dist/contracts/auth-session.contract.js.map +1 -0
  44. package/dist/{lucern/contracts/src → contracts}/context-pack.contract.d.ts +56 -58
  45. package/dist/contracts/context-pack.contract.js +98 -0
  46. package/dist/contracts/context-pack.contract.js.map +1 -0
  47. package/dist/contracts/contextPack.d.ts +1 -0
  48. package/dist/contracts/contextPack.js +98 -0
  49. package/dist/contracts/contextPack.js.map +1 -0
  50. package/dist/contracts/index.d.ts +9 -0
  51. package/dist/contracts/index.js +4892 -0
  52. package/dist/contracts/index.js.map +1 -0
  53. package/dist/{lucern/contracts/src → contracts}/lens-filter.contract.d.ts +10 -8
  54. package/dist/contracts/lens-filter.contract.js +71 -0
  55. package/dist/contracts/lens-filter.contract.js.map +1 -0
  56. package/dist/contracts/lens-workflow.contract.d.ts +87 -0
  57. package/dist/contracts/lens-workflow.contract.js +123 -0
  58. package/dist/contracts/lens-workflow.contract.js.map +1 -0
  59. package/dist/contracts/lensFilter.d.ts +1 -0
  60. package/dist/contracts/lensFilter.js +71 -0
  61. package/dist/contracts/lensFilter.js.map +1 -0
  62. package/dist/contracts/lensWorkflow.d.ts +2 -0
  63. package/dist/contracts/lensWorkflow.js +123 -0
  64. package/dist/contracts/lensWorkflow.js.map +1 -0
  65. package/dist/contracts/mcp-tools.contract.d.ts +1 -0
  66. package/dist/contracts/mcp-tools.contract.js +2986 -0
  67. package/dist/contracts/mcp-tools.contract.js.map +1 -0
  68. package/dist/contracts/mcpTools.d.ts +1 -0
  69. package/dist/contracts/mcpTools.js +2986 -0
  70. package/dist/contracts/mcpTools.js.map +1 -0
  71. package/dist/{lucern/contracts/src → contracts}/prompt.contract.d.ts +5 -3
  72. package/dist/contracts/prompt.contract.js +12 -0
  73. package/dist/contracts/prompt.contract.js.map +1 -0
  74. package/dist/contracts/prompt.d.ts +1 -0
  75. package/dist/contracts/prompt.js +12 -0
  76. package/dist/contracts/prompt.js.map +1 -0
  77. package/dist/contracts/sdk-tools.contract.d.ts +2 -0
  78. package/dist/contracts/sdk-tools.contract.js +4134 -0
  79. package/dist/contracts/sdk-tools.contract.js.map +1 -0
  80. package/dist/contracts/sdkTools.d.ts +2 -0
  81. package/dist/contracts/sdkTools.js +4134 -0
  82. package/dist/contracts/sdkTools.js.map +1 -0
  83. package/dist/contracts/workflow-runtime.contract.d.ts +163 -0
  84. package/dist/contracts/workflow-runtime.contract.js +245 -0
  85. package/dist/contracts/workflow-runtime.contract.js.map +1 -0
  86. package/dist/contracts/workflowRuntime.d.ts +1 -0
  87. package/dist/contracts/workflowRuntime.js +245 -0
  88. package/dist/contracts/workflowRuntime.js.map +1 -0
  89. package/dist/{lib/platform/sdk/controlObjectOwnership.d.ts → controlObjectOwnership.d.ts} +20 -18
  90. package/dist/controlObjectOwnership.js +215 -0
  91. package/dist/controlObjectOwnership.js.map +1 -0
  92. package/dist/{lib/platform/sdk/coreClient.d.ts → coreClient.d.ts} +19 -14
  93. package/dist/coreClient.js +339 -0
  94. package/dist/coreClient.js.map +1 -0
  95. package/dist/{lib/platform/sdk/customTools.d.ts → customTools.d.ts} +21 -16
  96. package/dist/customTools.js +248 -0
  97. package/dist/customTools.js.map +1 -0
  98. package/dist/{lib/platform/sdk/decisionsClient.d.ts → decisionsClient.d.ts} +29 -24
  99. package/dist/decisionsClient.js +522 -0
  100. package/dist/decisionsClient.js.map +1 -0
  101. package/dist/domainContext.d.ts +1 -0
  102. package/dist/domainContext.js +3 -0
  103. package/dist/domainContext.js.map +1 -0
  104. package/dist/events.d.ts +178 -0
  105. package/dist/events.js +249 -0
  106. package/dist/events.js.map +1 -0
  107. package/dist/eventsCore.d.ts +49 -0
  108. package/dist/eventsCore.js +429 -0
  109. package/dist/eventsCore.js.map +1 -0
  110. package/dist/facade/context.d.ts +18 -0
  111. package/dist/facade/context.js +73 -0
  112. package/dist/facade/context.js.map +1 -0
  113. package/dist/{lib/platform/sdk/gatewayFacades.d.ts → gatewayFacades.d.ts} +31 -26
  114. package/dist/gatewayFacades.js +1953 -0
  115. package/dist/gatewayFacades.js.map +1 -0
  116. package/dist/{lib/platform/sdk/graphClient.d.ts → graphClient.d.ts} +57 -52
  117. package/dist/graphClient.js +698 -0
  118. package/dist/graphClient.js.map +1 -0
  119. package/dist/{lib/platform/sdk/harnessClient.d.ts → harnessClient.d.ts} +44 -39
  120. package/dist/harnessClient.js +607 -0
  121. package/dist/harnessClient.js.map +1 -0
  122. package/dist/{lib/platform/sdk/identityClient.d.ts → identityClient.d.ts} +17 -11
  123. package/dist/identityClient.js +497 -0
  124. package/dist/identityClient.js.map +1 -0
  125. package/dist/index.d.ts +42 -3
  126. package/dist/index.js +11381 -3
  127. package/dist/index.js.map +1 -0
  128. package/dist/{lib/platform/sdk/learningClient.d.ts → learningClient.d.ts} +13 -7
  129. package/dist/learningClient.js +409 -0
  130. package/dist/learningClient.js.map +1 -0
  131. package/dist/{lib/platform/sdk/mcpParityClient.d.ts → mcpParityClient.d.ts} +10 -5
  132. package/dist/mcpParityClient.js +516 -0
  133. package/dist/mcpParityClient.js.map +1 -0
  134. package/dist/mcpParitySurface.d.ts +12 -0
  135. package/dist/mcpParitySurface.js +65 -0
  136. package/dist/mcpParitySurface.js.map +1 -0
  137. package/dist/mcpTools-DPZxowDX.d.ts +254 -0
  138. package/dist/{lib/platform/sdk/ontologyClient.d.ts → ontologyClient.d.ts} +28 -22
  139. package/dist/ontologyClient.js +513 -0
  140. package/dist/ontologyClient.js.map +1 -0
  141. package/dist/packRuntime.d.ts +2 -0
  142. package/dist/packRuntime.js +3 -0
  143. package/dist/packRuntime.js.map +1 -0
  144. package/dist/{lib/platform/sdk/packsClient.d.ts → packsClient.d.ts} +34 -29
  145. package/dist/packsClient.js +525 -0
  146. package/dist/packsClient.js.map +1 -0
  147. package/dist/{lib/platform/sdk/policyClient.d.ts → policyClient.d.ts} +26 -20
  148. package/dist/policyClient.js +625 -0
  149. package/dist/policyClient.js.map +1 -0
  150. package/dist/realtime/index.d.ts +29 -0
  151. package/dist/realtime/index.js +23 -0
  152. package/dist/realtime/index.js.map +1 -0
  153. package/dist/realtime/refs.d.ts +17 -0
  154. package/dist/realtime/refs.js +9 -0
  155. package/dist/realtime/refs.js.map +1 -0
  156. package/dist/reportsClient.d.ts +41 -0
  157. package/dist/reportsClient.js +418 -0
  158. package/dist/reportsClient.js.map +1 -0
  159. package/dist/{lib/platform/sdk/schemaClient.d.ts → schemaClient.d.ts} +20 -15
  160. package/dist/schemaClient.js +434 -0
  161. package/dist/schemaClient.js.map +1 -0
  162. package/dist/sdkSurface.d.ts +61 -0
  163. package/dist/sdkSurface.js +112 -0
  164. package/dist/sdkSurface.js.map +1 -0
  165. package/dist/sdkTools-CwXJDACb.d.ts +150 -0
  166. package/dist/{lib/platform/sdk/topicsClient.d.ts → topicsClient.d.ts} +24 -18
  167. package/dist/topicsClient.js +492 -0
  168. package/dist/topicsClient.js.map +1 -0
  169. package/dist/{lib/platform/sdk/types.d.ts → types.d.ts} +84 -80
  170. package/dist/types.js +3 -0
  171. package/dist/types.js.map +1 -0
  172. package/dist/version.d.ts +4 -0
  173. package/dist/version.js +6 -0
  174. package/dist/version.js.map +1 -0
  175. package/dist/{lib/platform/sdk/workflowClient.d.ts → workflowClient.d.ts} +60 -57
  176. package/dist/workflowClient.js +830 -0
  177. package/dist/workflowClient.js.map +1 -0
  178. package/package.json +25 -43
  179. package/dist/.generated +0 -2
  180. package/dist/lib/platform/auth/credentials.d.ts +0 -5
  181. package/dist/lib/platform/auth/credentials.js +0 -40
  182. package/dist/lib/platform/sdk/adminClient.js +0 -384
  183. package/dist/lib/platform/sdk/answersClient.d.ts +0 -16
  184. package/dist/lib/platform/sdk/answersClient.js +0 -21
  185. package/dist/lib/platform/sdk/audiencesClient.js +0 -111
  186. package/dist/lib/platform/sdk/auditClient.d.ts +0 -24
  187. package/dist/lib/platform/sdk/auditClient.js +0 -21
  188. package/dist/lib/platform/sdk/beliefsClient.js +0 -124
  189. package/dist/lib/platform/sdk/client.js +0 -1831
  190. package/dist/lib/platform/sdk/contextClient.js +0 -86
  191. package/dist/lib/platform/sdk/contextFacade.d.ts +0 -10
  192. package/dist/lib/platform/sdk/contextFacade.js +0 -10
  193. package/dist/lib/platform/sdk/contextPackCompiler.js +0 -534
  194. package/dist/lib/platform/sdk/contextTypes.js +0 -1
  195. package/dist/lib/platform/sdk/controlObjectOwnership.js +0 -220
  196. package/dist/lib/platform/sdk/coreClient.js +0 -366
  197. package/dist/lib/platform/sdk/customTools.js +0 -247
  198. package/dist/lib/platform/sdk/decisionsClient.js +0 -129
  199. package/dist/lib/platform/sdk/domainContext.d.ts +0 -1
  200. package/dist/lib/platform/sdk/domainContext.js +0 -1
  201. package/dist/lib/platform/sdk/events.d.ts +0 -176
  202. package/dist/lib/platform/sdk/events.js +0 -261
  203. package/dist/lib/platform/sdk/eventsCore.d.ts +0 -13
  204. package/dist/lib/platform/sdk/eventsCore.js +0 -13
  205. package/dist/lib/platform/sdk/gatewayFacades.js +0 -845
  206. package/dist/lib/platform/sdk/graphClient.js +0 -235
  207. package/dist/lib/platform/sdk/harnessClient.js +0 -219
  208. package/dist/lib/platform/sdk/identityClient.js +0 -131
  209. package/dist/lib/platform/sdk/index.d.ts +0 -49
  210. package/dist/lib/platform/sdk/index.js +0 -49
  211. package/dist/lib/platform/sdk/learningClient.js +0 -53
  212. package/dist/lib/platform/sdk/mcpParityClient.js +0 -196
  213. package/dist/lib/platform/sdk/mcpParitySurface.d.ts +0 -10
  214. package/dist/lib/platform/sdk/mcpParitySurface.js +0 -57
  215. package/dist/lib/platform/sdk/ontologyClient.js +0 -161
  216. package/dist/lib/platform/sdk/packRuntime.d.ts +0 -1
  217. package/dist/lib/platform/sdk/packRuntime.js +0 -1
  218. package/dist/lib/platform/sdk/packsClient.js +0 -157
  219. package/dist/lib/platform/sdk/policyClient.js +0 -277
  220. package/dist/lib/platform/sdk/promptCatalog.d.ts +0 -1
  221. package/dist/lib/platform/sdk/promptCatalog.js +0 -1
  222. package/dist/lib/platform/sdk/reportsClient.d.ts +0 -34
  223. package/dist/lib/platform/sdk/reportsClient.js +0 -64
  224. package/dist/lib/platform/sdk/schemaClient.js +0 -71
  225. package/dist/lib/platform/sdk/sdkSurface.d.ts +0 -56
  226. package/dist/lib/platform/sdk/sdkSurface.js +0 -140
  227. package/dist/lib/platform/sdk/topicsClient.js +0 -118
  228. package/dist/lib/platform/sdk/types.js +0 -1
  229. package/dist/lib/platform/sdk/version.d.ts +0 -2
  230. package/dist/lib/platform/sdk/version.js +0 -2
  231. package/dist/lib/platform/sdk/workflowClient.js +0 -366
  232. package/dist/lucern/contracts/src/api-enums.contract.d.ts +0 -58
  233. package/dist/lucern/contracts/src/api-enums.contract.js +0 -147
  234. package/dist/lucern/contracts/src/auth-context.contract.d.ts +0 -8
  235. package/dist/lucern/contracts/src/auth-context.contract.js +0 -8
  236. package/dist/lucern/contracts/src/auth-session.contract.d.ts +0 -8
  237. package/dist/lucern/contracts/src/auth-session.contract.js +0 -8
  238. package/dist/lucern/contracts/src/auth.contract.d.ts +0 -88
  239. package/dist/lucern/contracts/src/auth.contract.js +0 -57
  240. package/dist/lucern/contracts/src/context-pack.contract.js +0 -169
  241. package/dist/lucern/contracts/src/convex-admin.contract.d.ts +0 -5
  242. package/dist/lucern/contracts/src/convex-admin.contract.js +0 -1
  243. package/dist/lucern/contracts/src/events-types.contract.d.ts +0 -8
  244. package/dist/lucern/contracts/src/events-types.contract.js +0 -8
  245. package/dist/lucern/contracts/src/events.contract.d.ts +0 -176
  246. package/dist/lucern/contracts/src/events.contract.js +0 -159
  247. package/dist/lucern/contracts/src/gateway.contract.d.ts +0 -74
  248. package/dist/lucern/contracts/src/gateway.contract.js +0 -19
  249. package/dist/lucern/contracts/src/ids.contract.d.ts +0 -7
  250. package/dist/lucern/contracts/src/ids.contract.js +0 -24
  251. package/dist/lucern/contracts/src/index.d.ts +0 -29
  252. package/dist/lucern/contracts/src/index.js +0 -29
  253. package/dist/lucern/contracts/src/lens-filter.contract.js +0 -95
  254. package/dist/lucern/contracts/src/lens-workflow.contract.d.ts +0 -84
  255. package/dist/lucern/contracts/src/lens-workflow.contract.js +0 -54
  256. package/dist/lucern/contracts/src/mcp-tools.contract.d.ts +0 -151
  257. package/dist/lucern/contracts/src/mcp-tools.contract.js +0 -3281
  258. package/dist/lucern/contracts/src/ontology-matching.contract.d.ts +0 -8
  259. package/dist/lucern/contracts/src/ontology-matching.contract.js +0 -8
  260. package/dist/lucern/contracts/src/prompt.contract.js +0 -24
  261. package/dist/lucern/contracts/src/sdk-methods.contract.d.ts +0 -358
  262. package/dist/lucern/contracts/src/sdk-methods.contract.js +0 -19
  263. package/dist/lucern/contracts/src/sdk-tools.contract.d.ts +0 -92
  264. package/dist/lucern/contracts/src/sdk-tools.contract.js +0 -1398
  265. package/dist/lucern/contracts/src/text-matching.contract.d.ts +0 -53
  266. package/dist/lucern/contracts/src/text-matching.contract.js +0 -277
  267. package/dist/lucern/contracts/src/topic-scope.contract.d.ts +0 -8
  268. package/dist/lucern/contracts/src/topic-scope.contract.js +0 -8
  269. package/dist/lucern/contracts/src/workflow-runtime.contract.d.ts +0 -161
  270. package/dist/lucern/contracts/src/workflow-runtime.contract.js +0 -257
  271. package/dist/realtime-refs.d.ts +0 -1
  272. package/dist/realtime-refs.js +0 -1
  273. package/dist/realtime.d.ts +0 -1
  274. package/dist/realtime.js +0 -1
@@ -1,86 +0,0 @@
1
- import { createGatewayRequestClient, } from "./coreClient.js";
2
- function cleanString(value) {
3
- return typeof value === "string" && value.trim().length > 0
4
- ? value.trim()
5
- : undefined;
6
- }
7
- function cleanNumber(value) {
8
- return typeof value === "number" && Number.isFinite(value) ? value : undefined;
9
- }
10
- function cleanBoolean(value) {
11
- return typeof value === "boolean" ? value : undefined;
12
- }
13
- function buildCompileContextRequest(topicId, input = {}) {
14
- const payload = { topicId };
15
- const query = cleanString(input.query);
16
- if (query) {
17
- payload.query = query;
18
- }
19
- const budget = cleanNumber(input.budget) ?? cleanNumber(input.tokenBudget);
20
- if (budget !== undefined) {
21
- payload.budget = budget;
22
- }
23
- const ranking = cleanString(input.ranking) ?? cleanString(input.rankingProfile);
24
- if (ranking) {
25
- payload.ranking = ranking;
26
- }
27
- const limit = cleanNumber(input.limit);
28
- if (limit !== undefined) {
29
- payload.limit = limit;
30
- }
31
- const maxDepth = cleanNumber(input.maxDepth);
32
- if (maxDepth !== undefined) {
33
- payload.maxDepth = maxDepth;
34
- }
35
- const includeEntities = cleanBoolean(input.includeEntities);
36
- if (includeEntities !== undefined) {
37
- payload.includeEntities = includeEntities;
38
- }
39
- const mode = cleanString(input.mode);
40
- if (mode) {
41
- payload.mode = mode;
42
- }
43
- const includeFailures = cleanBoolean(input.includeFailures);
44
- if (includeFailures !== undefined) {
45
- payload.includeFailures = includeFailures;
46
- }
47
- const worktreeId = cleanString(input.worktreeId);
48
- if (worktreeId) {
49
- payload.worktreeId = worktreeId;
50
- }
51
- const sessionId = cleanString(input.sessionId);
52
- if (sessionId) {
53
- payload.sessionId = sessionId;
54
- }
55
- if (Array.isArray(input.packWeightOverrides) && input.packWeightOverrides.length > 0) {
56
- payload.packWeightOverrides = input.packWeightOverrides;
57
- }
58
- return {
59
- path: "/api/platform/v1/context/compile",
60
- method: "POST",
61
- body: payload,
62
- };
63
- }
64
- /**
65
- * Create the context client for compiling reasoning context packs.
66
- * @param config - Gateway transport configuration.
67
- * @returns An object with a `compile` method for building context packs.
68
- */
69
- export function createContextClient(config = {}) {
70
- const gateway = createGatewayRequestClient(config);
71
- return {
72
- /**
73
- * Compile a focused reasoning context pack for a topic scope.
74
- * @param topicId - The topic to compile context for.
75
- * @param input - Optional compile parameters (query, budget, ranking, etc.).
76
- * @returns The compiled context payload with beliefs, questions, and evidence.
77
- */
78
- async compile(topicId, input = {}) {
79
- const request = buildCompileContextRequest(topicId, input);
80
- return gateway.request({
81
- ...request,
82
- body: request.body,
83
- });
84
- },
85
- };
86
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Context facade factory exposed for testing / audit tooling.
3
- *
4
- * Lives canonically in `lucern/packages/sdk/src/facade/context` and is
5
- * re-exported here so downstream tests can import from the public
6
- * `@lucern/sdk` entry point.
7
- *
8
- * Added: EK-16 T7.3.4 (2026-04-18).
9
- */
10
- export { createContextFacade, type ContextFacadeConfig, type ContextFacadeTransport, } from "./facade/context";
@@ -1,10 +0,0 @@
1
- /**
2
- * Context facade factory exposed for testing / audit tooling.
3
- *
4
- * Lives canonically in `lucern/packages/sdk/src/facade/context` and is
5
- * re-exported here so downstream tests can import from the public
6
- * `@lucern/sdk` entry point.
7
- *
8
- * Added: EK-16 T7.3.4 (2026-04-18).
9
- */
10
- export { createContextFacade, } from "./facade/context.js";
@@ -1,534 +0,0 @@
1
- import { CONTEXT_PACK_SCHEMA_VERSION, DEFAULT_COMPILATION_MODE, DEFAULT_ENTITY_LIMIT, MAX_ENTITY_LIMIT, } from "./contracts/context-pack.contract.js";
2
- import { buildInjectionPlan, parseTokenBudget, rankContextSection, rankEntities, resolveEffectiveWeights, } from "@lucern/reasoning-kernel/compat/contextPackPolicy";
3
- import { validateContextPackSchema } from "@/packages/mcp/src/contextPackSchema";
4
- function assertContextPackSchema(payload) {
5
- const result = validateContextPackSchema(payload);
6
- if (!result.valid) {
7
- throw new Error(`Invalid context pack payload: ${result.errors.join("; ")}`);
8
- }
9
- }
10
- function asStringArray(value) {
11
- if (!Array.isArray(value)) {
12
- return [];
13
- }
14
- return value
15
- .map((entry) => (typeof entry === "string" ? entry.trim() : ""))
16
- .filter((entry) => entry.length > 0);
17
- }
18
- function toPositiveInt(value, fallback, max) {
19
- if (typeof value !== "number" || !Number.isFinite(value)) {
20
- return fallback;
21
- }
22
- const floored = Math.floor(value);
23
- return Math.max(1, Math.min(floored, max));
24
- }
25
- function normalizeQueryTokens(query) {
26
- if (!query) {
27
- return [];
28
- }
29
- return query
30
- .toLowerCase()
31
- .split(/[^a-z0-9]+/)
32
- .map((token) => token.trim())
33
- .filter((token) => token.length >= 2);
34
- }
35
- function parseRankingProfile(value) {
36
- return value === "baseline_v1" ? "baseline_v1" : "weighted_v1";
37
- }
38
- function beliefTypeOf(node) {
39
- if (typeof node.beliefType === "string") {
40
- return node.beliefType;
41
- }
42
- const metadata = (node.metadata || {});
43
- if (typeof metadata.beliefType === "string") {
44
- return metadata.beliefType;
45
- }
46
- return "";
47
- }
48
- function questionStatusOf(node) {
49
- const metadata = (node.metadata || {});
50
- const direct = typeof node.status === "string" ? node.status : "";
51
- const questionStatus = typeof metadata.questionStatus === "string" ? metadata.questionStatus : "";
52
- return (questionStatus || direct || "open").toLowerCase();
53
- }
54
- function isOpenQuestion(status) {
55
- return ![
56
- "answered",
57
- "archived",
58
- "closed",
59
- "resolved",
60
- "resolved_support",
61
- "resolved_contra",
62
- "belief_forked",
63
- ].includes(status);
64
- }
65
- function metadataText(payload) {
66
- return JSON.stringify(payload).toLowerCase();
67
- }
68
- function collectTopicNeighborhood(topics, rootTopicId, maxDescendantDepth = 2) {
69
- const byId = new Map();
70
- const children = new Map();
71
- for (const topic of topics) {
72
- const id = String(topic._id);
73
- byId.set(id, topic);
74
- if (!children.has(id)) {
75
- children.set(id, []);
76
- }
77
- }
78
- for (const topic of topics) {
79
- if (!topic.parentTopicId) {
80
- continue;
81
- }
82
- const parent = String(topic.parentTopicId);
83
- const id = String(topic._id);
84
- const list = children.get(parent) || [];
85
- list.push(id);
86
- children.set(parent, list);
87
- }
88
- const selected = new Set([rootTopicId]);
89
- let cursor = byId.get(rootTopicId);
90
- while (cursor?.parentTopicId) {
91
- const parentId = String(cursor.parentTopicId);
92
- if (selected.has(parentId)) {
93
- break;
94
- }
95
- selected.add(parentId);
96
- cursor = byId.get(parentId);
97
- }
98
- const queue = [
99
- { id: rootTopicId, depth: 0 },
100
- ];
101
- while (queue.length > 0) {
102
- const current = queue.shift();
103
- if (!current || current.depth >= maxDescendantDepth) {
104
- continue;
105
- }
106
- for (const childId of children.get(current.id) || []) {
107
- if (!selected.has(childId)) {
108
- selected.add(childId);
109
- }
110
- queue.push({ id: childId, depth: current.depth + 1 });
111
- }
112
- }
113
- return Array.from(selected);
114
- }
115
- function dedupeById(rows) {
116
- const seen = new Set();
117
- const output = [];
118
- for (const row of rows) {
119
- const id = row?._id ? String(row._id) : "";
120
- if (!id || seen.has(id)) {
121
- continue;
122
- }
123
- seen.add(id);
124
- output.push(row);
125
- }
126
- return output;
127
- }
128
- function candidateTimestamp(candidate) {
129
- if (!candidate || typeof candidate !== "object") {
130
- return 0;
131
- }
132
- const record = candidate;
133
- const timestamps = [record.updatedAt, record.createdAt, record.generatedAt].filter((value) => typeof value === "number" && Number.isFinite(value));
134
- return timestamps.length > 0 ? Math.max(...timestamps) : 0;
135
- }
136
- function resolveReferenceTimeMs(...collections) {
137
- let maxTimestamp = 0;
138
- for (const collection of collections) {
139
- for (const item of collection) {
140
- const timestamp = candidateTimestamp(item);
141
- if (timestamp > maxTimestamp) {
142
- maxTimestamp = timestamp;
143
- }
144
- }
145
- }
146
- return maxTimestamp;
147
- }
148
- export function planContextPackCompilation(input) {
149
- const args = input.args ?? {};
150
- const topicId = String(input.topic._id);
151
- const queryText = typeof args.query === "string" && args.query.trim().length > 0
152
- ? args.query.trim()
153
- : undefined;
154
- const tokens = normalizeQueryTokens(queryText);
155
- const limit = toPositiveInt(args.limit, 8, 25);
156
- const rankingProfile = parseRankingProfile(typeof args.ranking === "string" ? args.ranking : args.rankingProfile);
157
- const tokenBudget = parseTokenBudget(typeof args.budget === "number" ? args.budget : args.tokenBudget, 1800);
158
- const topicDepth = typeof input.topic.depth === "number" && Number.isFinite(input.topic.depth)
159
- ? input.topic.depth
160
- : 0;
161
- const requestedMaxDepth = typeof args.maxDepth === "number" && Number.isFinite(args.maxDepth)
162
- ? Math.max(1, Math.min(Math.floor(args.maxDepth), 6))
163
- : undefined;
164
- const descendantDepth = requestedMaxDepth ?? (topicDepth <= 1 ? 4 : 2);
165
- const includeEntities = args.includeEntities !== false;
166
- const compilationMode = args.mode === "delta" ? "delta" : DEFAULT_COMPILATION_MODE;
167
- const includeFailures = compilationMode === "delta" || args.includeFailures === true;
168
- const worktreeId = typeof args.worktreeId === "string" && args.worktreeId.trim().length > 0
169
- ? args.worktreeId.trim()
170
- : undefined;
171
- const sessionId = typeof args.sessionId === "string" && args.sessionId.trim().length > 0
172
- ? args.sessionId.trim()
173
- : undefined;
174
- const packWeightOverrides = Array.isArray(args.packWeightOverrides)
175
- ? args.packWeightOverrides
176
- : undefined;
177
- const effectiveWeights = resolveEffectiveWeights(packWeightOverrides);
178
- let scopedTopicIds = collectTopicNeighborhood(input.allTopics, topicId, descendantDepth);
179
- const allowedTopicIds = asStringArray(args.allowedTopicIds);
180
- if (allowedTopicIds.length > 0) {
181
- const allowedSet = new Set(allowedTopicIds);
182
- if (!allowedSet.has(topicId)) {
183
- throw new Error(`Access denied to compile context for topic ${topicId}.`);
184
- }
185
- scopedTopicIds = scopedTopicIds.filter((id) => allowedSet.has(id));
186
- }
187
- return {
188
- topicId,
189
- ...(queryText ? { queryText } : {}),
190
- tokens,
191
- limit,
192
- rankingProfile,
193
- tokenBudget,
194
- descendantDepth,
195
- includeEntities,
196
- compilationMode,
197
- includeFailures,
198
- ...(worktreeId ? { worktreeId } : {}),
199
- ...(sessionId ? { sessionId } : {}),
200
- ...(packWeightOverrides ? { packWeightOverrides } : {}),
201
- effectiveWeights,
202
- scopedTopicIds,
203
- };
204
- }
205
- export function compileContextPackFromSnapshot(snapshot) {
206
- const uniqueBeliefs = dedupeById(snapshot.beliefs);
207
- const uniqueQuestions = dedupeById(snapshot.questions);
208
- const uniqueEvidence = dedupeById(snapshot.evidence);
209
- const uniqueContradictions = dedupeById(snapshot.contradictions);
210
- const referenceTimeMs = resolveReferenceTimeMs([snapshot.topic], uniqueBeliefs, uniqueQuestions, uniqueEvidence, uniqueContradictions, snapshot.entities) || 0;
211
- const rankOptions = {
212
- effectiveWeights: snapshot.plan.effectiveWeights,
213
- includeJustifications: snapshot.plan.compilationMode === "delta",
214
- referenceTimeMs,
215
- };
216
- const invariantCandidates = uniqueBeliefs
217
- .filter((belief) => beliefTypeOf(belief).toLowerCase() === "invariant")
218
- .map((belief) => ({
219
- nodeId: String(belief._id),
220
- canonicalText: String(belief.canonicalText || ""),
221
- confidence: typeof belief.confidence === "number" ? belief.confidence : null,
222
- beliefType: beliefTypeOf(belief) || "invariant",
223
- updatedAt: belief.updatedAt || belief.createdAt || null,
224
- }));
225
- const invariants = rankContextSection("invariants", invariantCandidates.map((candidate) => ({
226
- ...candidate,
227
- id: candidate.nodeId,
228
- text: `${candidate.canonicalText} ${candidate.beliefType}`,
229
- })), snapshot.plan.tokens, snapshot.plan.limit, snapshot.plan.rankingProfile, rankOptions).map((row) => ({
230
- nodeId: row.nodeId,
231
- canonicalText: row.canonicalText,
232
- confidence: row.confidence,
233
- beliefType: row.beliefType,
234
- score: row.score,
235
- ...(row.justification ? { justification: row.justification } : {}),
236
- }));
237
- const activeBeliefCandidates = uniqueBeliefs
238
- .filter((belief) => (belief.status || "active") !== "archived")
239
- .map((belief) => ({
240
- nodeId: String(belief._id),
241
- canonicalText: String(belief.canonicalText || ""),
242
- confidence: typeof belief.confidence === "number" ? belief.confidence : null,
243
- beliefType: beliefTypeOf(belief) || null,
244
- status: belief.status || "active",
245
- updatedAt: belief.updatedAt || belief.createdAt || null,
246
- metadataText: belief.metadata && typeof belief.metadata === "object"
247
- ? metadataText(belief.metadata)
248
- : "",
249
- }));
250
- const activeBeliefs = rankContextSection("activeBeliefs", activeBeliefCandidates.map((candidate) => ({
251
- ...candidate,
252
- id: candidate.nodeId,
253
- text: `${candidate.canonicalText} ${candidate.metadataText}`,
254
- })), snapshot.plan.tokens, snapshot.plan.limit, snapshot.plan.rankingProfile, rankOptions).map((row) => ({
255
- nodeId: row.nodeId,
256
- canonicalText: row.canonicalText,
257
- confidence: row.confidence,
258
- beliefType: row.beliefType,
259
- status: row.status,
260
- updatedAt: row.updatedAt,
261
- score: row.score,
262
- ...(row.justification ? { justification: row.justification } : {}),
263
- }));
264
- const openQuestionCandidates = uniqueQuestions
265
- .map((question) => {
266
- const status = questionStatusOf(question);
267
- const metadata = question.metadata && typeof question.metadata === "object"
268
- ? question.metadata
269
- : {};
270
- return {
271
- questionId: String(question._id),
272
- text: String(question.canonicalText || ""),
273
- status,
274
- priority: typeof metadata.priority === "string" ? metadata.priority : "medium",
275
- updatedAt: question.updatedAt || question.createdAt || null,
276
- metadataText: metadataText(metadata),
277
- };
278
- })
279
- .filter((row) => isOpenQuestion(row.status));
280
- const openQuestions = rankContextSection("openQuestions", openQuestionCandidates.map((candidate) => ({
281
- ...candidate,
282
- id: candidate.questionId,
283
- text: `${candidate.text} ${candidate.metadataText}`,
284
- })), snapshot.plan.tokens, snapshot.plan.limit, snapshot.plan.rankingProfile, rankOptions).map((row) => ({
285
- questionId: row.questionId,
286
- text: row.text,
287
- status: row.status,
288
- priority: row.priority,
289
- updatedAt: row.updatedAt,
290
- score: row.score,
291
- ...(row.justification ? { justification: row.justification } : {}),
292
- }));
293
- const evidenceCandidates = uniqueEvidence.map((item) => {
294
- const metadata = item.metadata && typeof item.metadata === "object" ? item.metadata : {};
295
- return {
296
- nodeId: String(item._id),
297
- canonicalText: String(item.canonicalText || ""),
298
- sourceUrl: (typeof metadata.sourceUrl === "string" && metadata.sourceUrl) ||
299
- (typeof item.sourceUrl === "string" && item.sourceUrl) ||
300
- null,
301
- kind: (typeof metadata.kind === "string" && metadata.kind) || "observation",
302
- createdAt: item.createdAt || null,
303
- updatedAt: item.updatedAt || item.createdAt || null,
304
- metadataText: metadataText(metadata),
305
- };
306
- });
307
- const recentEvidence = rankContextSection("recentEvidence", evidenceCandidates.map((candidate) => ({
308
- ...candidate,
309
- id: candidate.nodeId,
310
- text: `${candidate.canonicalText} ${candidate.metadataText}`,
311
- })), snapshot.plan.tokens, snapshot.plan.limit, snapshot.plan.rankingProfile, rankOptions).map((row) => ({
312
- nodeId: row.nodeId,
313
- canonicalText: row.canonicalText,
314
- sourceUrl: row.sourceUrl,
315
- kind: row.kind,
316
- createdAt: row.createdAt,
317
- score: row.score,
318
- ...(row.justification ? { justification: row.justification } : {}),
319
- }));
320
- const contradictionCandidates = uniqueContradictions.map((row) => {
321
- const weight = typeof row.weight === "number" ? row.weight : 0;
322
- const severity = weight <= -0.9
323
- ? "critical"
324
- : weight <= -0.7
325
- ? "high"
326
- : weight <= -0.5
327
- ? "medium"
328
- : "low";
329
- return {
330
- contradictionId: String(row._id || row.globalId || ""),
331
- severity,
332
- status: "active",
333
- description: row.context || row.description || row.summary || "",
334
- updatedAt: row.updatedAt || row.createdAt || null,
335
- };
336
- });
337
- const contradictions = rankContextSection("contradictions", contradictionCandidates.map((candidate) => ({
338
- ...candidate,
339
- id: candidate.contradictionId,
340
- text: `${candidate.description} ${candidate.severity}`,
341
- })), snapshot.plan.tokens, snapshot.plan.limit, snapshot.plan.rankingProfile, rankOptions).map((row) => ({
342
- contradictionId: row.contradictionId,
343
- severity: row.severity,
344
- status: row.status,
345
- description: row.description,
346
- score: row.score,
347
- ...(row.justification ? { justification: row.justification } : {}),
348
- }));
349
- const entityCandidates = snapshot.entities.map((row) => ({
350
- nodeId: String(row._id),
351
- entityType: String(row.nodeType || ""),
352
- title: String(row.title || ""),
353
- canonicalText: String(row.canonicalText || ""),
354
- connectedBeliefCount: typeof row.connectedBeliefCount === "number" ? row.connectedBeliefCount : 0,
355
- connectedEvidenceCount: typeof row.connectedEvidenceCount === "number"
356
- ? row.connectedEvidenceCount
357
- : 0,
358
- metadata: row.metadata && typeof row.metadata === "object" ? row.metadata : {},
359
- updatedAt: row.updatedAt || null,
360
- }));
361
- const entityLimit = toPositiveInt(snapshot.plan.limit, DEFAULT_ENTITY_LIMIT, MAX_ENTITY_LIMIT);
362
- const rankedEntities = snapshot.plan.includeEntities
363
- ? rankEntities(entityCandidates, snapshot.plan.tokens, entityLimit).map((row) => ({
364
- nodeId: row.nodeId,
365
- entityType: row.entityType,
366
- title: row.title,
367
- connectedBeliefCount: row.connectedBeliefCount,
368
- connectedEvidenceCount: row.connectedEvidenceCount,
369
- score: row.score,
370
- ...(Object.keys(row.metadata).length > 0
371
- ? { metadata: row.metadata }
372
- : {}),
373
- }))
374
- : undefined;
375
- let failureContext;
376
- if (snapshot.plan.includeFailures && snapshot.failures) {
377
- const allFailures = snapshot.failures.filter((node) => {
378
- const metadata = (node.metadata || {});
379
- return metadata.failedApproach === true || metadata.isFailedAttempt === true;
380
- });
381
- const rankedFailures = rankContextSection("recentEvidence", allFailures.map((node) => ({
382
- id: String(node._id),
383
- text: String(node.canonicalText || ""),
384
- createdAt: node.createdAt || null,
385
- updatedAt: node.updatedAt || node.createdAt || null,
386
- })), snapshot.plan.tokens, 10, snapshot.plan.rankingProfile, rankOptions);
387
- const failures = rankedFailures.map((row) => {
388
- const original = allFailures.find((node) => String(node._id) === row.id);
389
- const metadata = (original?.metadata || {});
390
- return {
391
- attemptId: row.id,
392
- approach: String(row.text || ""),
393
- outcome: String(metadata.errorMessage || "Failed"),
394
- recordedAt: row.createdAt || referenceTimeMs || 0,
395
- score: row.score,
396
- };
397
- });
398
- const failureTexts = new Set(failures.map((failure) => failure.approach.toLowerCase().slice(0, 100)));
399
- const suppressionIds = new Set();
400
- if (snapshot.plan.sessionId && failureTexts.size > 0) {
401
- for (const evidenceRow of recentEvidence) {
402
- const evidenceText = evidenceRow.canonicalText.toLowerCase().slice(0, 100);
403
- for (const failureText of failureTexts) {
404
- if (evidenceText.includes(failureText) ||
405
- failureText.includes(evidenceText)) {
406
- suppressionIds.add(evidenceRow.nodeId);
407
- break;
408
- }
409
- }
410
- }
411
- }
412
- if (failures.length > 0) {
413
- failureContext = {
414
- failures,
415
- suppressedIds: Array.from(suppressionIds),
416
- };
417
- }
418
- }
419
- const suppressionSet = new Set(failureContext?.suppressedIds || []);
420
- const effectiveEvidence = suppressionSet.size > 0
421
- ? recentEvidence.filter((row) => !suppressionSet.has(row.nodeId))
422
- : recentEvidence;
423
- const suppressedEvidenceIds = suppressionSet.size > 0
424
- ? recentEvidence
425
- .filter((row) => suppressionSet.has(row.nodeId))
426
- .map((row) => row.nodeId)
427
- : [];
428
- const summary = {
429
- totalBeliefs: uniqueBeliefs.length,
430
- invariants: invariants.length,
431
- openQuestions: openQuestions.length,
432
- evidenceItems: uniqueEvidence.length,
433
- contradictions: contradictions.length,
434
- ...(rankedEntities ? { relatedEntities: rankedEntities.length } : {}),
435
- scopedTopics: snapshot.plan.scopedTopicIds.length,
436
- descendantDepth: snapshot.plan.descendantDepth,
437
- query: snapshot.plan.queryText || null,
438
- };
439
- const injectionPolicy = buildInjectionPlan({
440
- tokenBudget: snapshot.plan.tokenBudget,
441
- invariants: invariants.map((row) => ({
442
- nodeId: row.nodeId,
443
- canonicalText: row.canonicalText,
444
- score: row.score,
445
- })),
446
- activeBeliefs: activeBeliefs.map((row) => ({
447
- nodeId: row.nodeId,
448
- canonicalText: row.canonicalText,
449
- score: row.score,
450
- })),
451
- openQuestions: openQuestions.map((row) => ({
452
- questionId: row.questionId,
453
- text: row.text,
454
- score: row.score,
455
- })),
456
- recentEvidence: effectiveEvidence.map((row) => ({
457
- nodeId: row.nodeId,
458
- canonicalText: row.canonicalText,
459
- score: row.score,
460
- })),
461
- contradictions: contradictions.map((row) => ({
462
- contradictionId: row.contradictionId,
463
- description: row.description,
464
- score: row.score,
465
- })),
466
- trackExclusions: snapshot.plan.compilationMode === "delta",
467
- });
468
- const contextNarrative = [
469
- "Prefer invariant beliefs as hard constraints while reasoning over this scope.",
470
- "Treat open questions as unresolved work items and avoid claiming closure without evidence.",
471
- "Use recent evidence for implementation context before creating new beliefs.",
472
- "When contradictions exist, resolve explicitly (fork, lower confidence, or gather counter-evidence).",
473
- `Apply injection token budget of ${injectionPolicy.tokenBudget} with section quotas before prompt assembly.`,
474
- ];
475
- const deltaReport = snapshot.plan.compilationMode === "delta" && snapshot.plan.worktreeId
476
- ? {
477
- changedItems: [],
478
- verificationObligations: [],
479
- referencePoint: snapshot.plan.worktreeId,
480
- }
481
- : undefined;
482
- const excludedItems = [
483
- ...(injectionPolicy.excludedItems || []),
484
- ...suppressedEvidenceIds.map((id) => ({
485
- id,
486
- section: "recentEvidence",
487
- reason: "anti_repetition",
488
- score: recentEvidence.find((row) => row.nodeId === id)?.score ?? 0,
489
- })),
490
- ];
491
- const result = {
492
- schemaVersion: CONTEXT_PACK_SCHEMA_VERSION,
493
- topicId: snapshot.plan.topicId,
494
- topicName: snapshot.topic.name || "Untitled Topic",
495
- scopedTopicIds: snapshot.plan.scopedTopicIds,
496
- generatedAt: referenceTimeMs,
497
- rankingProfile: snapshot.plan.rankingProfile,
498
- summary,
499
- invariants,
500
- activeBeliefs,
501
- openQuestions,
502
- recentEvidence: effectiveEvidence,
503
- contradictions,
504
- ...(rankedEntities ? { relatedEntities: rankedEntities } : {}),
505
- contextNarrative,
506
- injectionPolicy: {
507
- ...injectionPolicy,
508
- ...(excludedItems.length > 0 ? { excludedItems } : {}),
509
- },
510
- diagnostics: {
511
- itemsScored: invariantCandidates.length +
512
- activeBeliefCandidates.length +
513
- openQuestionCandidates.length +
514
- evidenceCandidates.length +
515
- contradictionCandidates.length +
516
- entityCandidates.length,
517
- tokenBudgetUtilization: injectionPolicy.tokenBudget === 0
518
- ? 0
519
- : Number((injectionPolicy.estimatedTokens / injectionPolicy.tokenBudget).toFixed(4)),
520
- referenceTimeMs,
521
- },
522
- ...(snapshot.plan.compilationMode !== "standard"
523
- ? { compilationMode: snapshot.plan.compilationMode }
524
- : {}),
525
- ...(failureContext ? { failureContext } : {}),
526
- ...(deltaReport ? { deltaReport } : {}),
527
- ...(snapshot.plan.packWeightOverrides &&
528
- snapshot.plan.packWeightOverrides.length > 0
529
- ? { appliedWeightOverrides: snapshot.plan.packWeightOverrides }
530
- : {}),
531
- };
532
- assertContextPackSchema(result);
533
- return result;
534
- }
@@ -1 +0,0 @@
1
- export {};