@jungjaehoon/mama-core 2.4.1 → 4.0.0

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 (371) hide show
  1. package/README.md +76 -239
  2. package/db/migrations/030-case-first-memory-substrate.sql +13 -98
  3. package/db/migrations/034-add-connector-event-scope-columns.sql +9 -13
  4. package/db/migrations/039-add-connector-event-operator-ingest-seq.sql +9 -95
  5. package/db/migrations/062-refresh-connector-event-sequences.sql +9 -113
  6. package/db/migrations/063-refresh-legacy-connector-event-updates.sql +9 -32
  7. package/db/migrations/067-add-connector-event-source-entity-id.sql +9 -13
  8. package/db/migrations/069-create-registry-nodes.sql +52 -0
  9. package/db/migrations/070-record-identity.sql +35 -0
  10. package/db/migrations/071-service-operation-origins.sql +187 -0
  11. package/db/migrations/072-observation-versions.sql +29 -0
  12. package/db/migrations/073-registry-corrections.sql +45 -0
  13. package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
  14. package/db/migrations/075-agent-judgments.sql +58 -0
  15. package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
  16. package/db/migrations/077-legacy-record-kind.sql +6 -0
  17. package/db/migrations/078-source-ingest-commands.sql +18 -0
  18. package/db/migrations/079-twin-edge-relations.sql +43 -0
  19. package/db/migrations/080-restore-duration-days.sql +7 -0
  20. package/db/migrations/081-mailbox.sql +61 -0
  21. package/db/migrations/082-commitments-row-id.sql +12 -0
  22. package/db/migrations/083-observation-is-the-evidence.sql +49 -0
  23. package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
  24. package/db/migrations/085-a-migration-has-a-source.sql +37 -0
  25. package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
  26. package/db/migrations/087-mailbox-payload.sql +5 -0
  27. package/db/migrations/088-native-input-journal.sql +14 -0
  28. package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
  29. package/db/migrations/090-model-run-native-inputs.sql +29 -0
  30. package/db/migrations/091-native-turn-results.sql +11 -0
  31. package/db/migrations/092-restore-decision-fts.sql +34 -0
  32. package/db/migrations/093-native-turn-primary-kind.sql +14 -0
  33. package/db/migrations/094-commitment-run-provenance.sql +9 -0
  34. package/db/migrations/095-model-run-native-input-identity.sql +39 -0
  35. package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
  36. package/db/migrations/097-native-input-json-validity.sql +37 -0
  37. package/db/migrations/098-workflow-memory-kind.sql +105 -0
  38. package/dist/action-contracts.d.ts +212 -0
  39. package/dist/action-contracts.js +10 -0
  40. package/dist/api/catalog.d.ts +118 -0
  41. package/dist/api/catalog.js +1756 -0
  42. package/dist/api/dispatch.d.ts +76 -0
  43. package/dist/api/dispatch.js +372 -0
  44. package/dist/canonicalize.d.ts +2 -2
  45. package/dist/canonicalize.js +3 -3
  46. package/dist/client/client.d.ts +33 -0
  47. package/dist/client/client.js +123 -0
  48. package/dist/client/ipc.d.ts +81 -0
  49. package/dist/client/ipc.js +314 -0
  50. package/dist/db-adapter/base-adapter.d.ts +6 -66
  51. package/dist/db-adapter/base-adapter.js +6 -6
  52. package/dist/db-adapter/index.d.ts +5 -5
  53. package/dist/db-adapter/index.js +2 -5
  54. package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
  55. package/dist/db-adapter/node-sqlite-adapter.js +1968 -570
  56. package/dist/db-manager.d.ts +53 -97
  57. package/dist/db-manager.js +121 -603
  58. package/dist/embedding/embedder.d.ts +132 -0
  59. package/dist/embedding/embedder.js +299 -0
  60. package/dist/identity/principal-repository.d.ts +2 -2
  61. package/dist/index.d.ts +43 -58
  62. package/dist/index.js +97 -145
  63. package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
  64. package/dist/knowledge/access.js +663 -0
  65. package/dist/knowledge/case-errors.d.ts +31 -0
  66. package/dist/knowledge/case-errors.js +40 -0
  67. package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
  68. package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
  69. package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
  70. package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
  71. package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
  72. package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
  73. package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
  74. package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
  75. package/dist/knowledge/commitments.d.ts +188 -0
  76. package/dist/knowledge/commitments.js +370 -0
  77. package/dist/knowledge/decision-edges.d.ts +70 -0
  78. package/dist/knowledge/decision-edges.js +123 -0
  79. package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
  80. package/dist/knowledge/graph-query.js +1585 -0
  81. package/dist/knowledge/identity.d.ts +16 -0
  82. package/dist/knowledge/identity.js +22 -0
  83. package/dist/knowledge/index.d.ts +47 -0
  84. package/dist/knowledge/index.js +90 -0
  85. package/dist/knowledge/judgments.d.ts +118 -0
  86. package/dist/knowledge/judgments.js +808 -0
  87. package/dist/knowledge/observations.d.ts +160 -0
  88. package/dist/knowledge/observations.js +449 -0
  89. package/dist/knowledge/question-type.d.ts +34 -0
  90. package/dist/knowledge/question-type.js +70 -0
  91. package/dist/{search → knowledge}/ranker-features.js +1 -1
  92. package/dist/{search → knowledge}/search-quality.d.ts +0 -1
  93. package/dist/knowledge/search.d.ts +38 -0
  94. package/dist/knowledge/search.js +91 -0
  95. package/dist/knowledge/source-ingest.d.ts +65 -0
  96. package/dist/knowledge/source-ingest.js +174 -0
  97. package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
  98. package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
  99. package/dist/knowledge/work-dates.d.ts +49 -0
  100. package/dist/knowledge/work-dates.js +120 -0
  101. package/dist/mama-api.d.ts +114 -778
  102. package/dist/mama-api.js +313 -2461
  103. package/dist/memory/api.d.ts +264 -24
  104. package/dist/memory/api.js +1633 -843
  105. package/dist/memory/bootstrap-builder.d.ts +2 -1
  106. package/dist/memory/bootstrap-builder.js +5 -5
  107. package/dist/memory/channel-summary-state-store.d.ts +3 -2
  108. package/dist/memory/channel-summary-state-store.js +53 -51
  109. package/dist/memory/channel-summary-store.d.ts +5 -3
  110. package/dist/memory/channel-summary-store.js +3 -8
  111. package/dist/memory/dashboard-read.d.ts +46 -0
  112. package/dist/memory/dashboard-read.js +94 -0
  113. package/dist/memory/event-store.d.ts +3 -3
  114. package/dist/memory/event-store.js +3 -10
  115. package/dist/memory/finding-store.d.ts +3 -2
  116. package/dist/memory/finding-store.js +2 -7
  117. package/dist/memory/graph-read.d.ts +52 -0
  118. package/dist/memory/graph-read.js +130 -0
  119. package/dist/memory/judgment-types.d.ts +394 -0
  120. package/dist/memory/judgment-types.js +16 -0
  121. package/dist/memory/provenance-audit.d.ts +5 -2
  122. package/dist/memory/provenance-audit.js +8 -14
  123. package/dist/memory/provenance-live.d.ts +141 -0
  124. package/dist/memory/provenance-live.js +409 -0
  125. package/dist/memory/provenance-query.d.ts +5 -4
  126. package/dist/memory/provenance-query.js +21 -29
  127. package/dist/memory/provenance-resolver.d.ts +191 -0
  128. package/dist/memory/provenance-resolver.js +155 -0
  129. package/dist/memory/provenance.d.ts +1 -11
  130. package/dist/memory/provenance.js +2 -33
  131. package/dist/memory/recall-sanitize.d.ts +55 -0
  132. package/dist/memory/recall-sanitize.js +144 -0
  133. package/dist/memory/secret-filter.d.ts +32 -0
  134. package/dist/memory/secret-filter.js +126 -0
  135. package/dist/memory/truth-store.d.ts +2 -1
  136. package/dist/memory/truth-store.js +1 -4
  137. package/dist/memory/types.d.ts +74 -24
  138. package/dist/memory/types.js +75 -5
  139. package/dist/memory/write-adapters.d.ts +98 -0
  140. package/dist/memory/write-adapters.js +242 -0
  141. package/dist/operations/owner-action-effects.d.ts +53 -0
  142. package/dist/operations/owner-action-effects.js +96 -0
  143. package/dist/provenance/source-ref.d.ts +1 -1
  144. package/dist/provenance/source-ref.js +0 -2
  145. package/dist/registry/corrections.d.ts +31 -0
  146. package/dist/registry/corrections.js +332 -0
  147. package/dist/registry/record-identity.d.ts +49 -0
  148. package/dist/registry/record-identity.js +133 -0
  149. package/dist/registry/store.d.ts +101 -0
  150. package/dist/registry/store.js +395 -0
  151. package/dist/registry/types.d.ts +28 -0
  152. package/dist/registry/types.js +5 -0
  153. package/dist/relevance-scorer.js +2 -2
  154. package/dist/runtime/agent-event-bus.d.ts +50 -0
  155. package/dist/runtime/agent-event-bus.js +101 -0
  156. package/dist/runtime/drivers/claude-cli-wrapper.d.ts +155 -0
  157. package/dist/runtime/drivers/claude-cli-wrapper.js +392 -0
  158. package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
  159. package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
  160. package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
  161. package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
  162. package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
  163. package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
  164. package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
  165. package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
  166. package/dist/runtime/drivers/codex-home.d.ts +20 -0
  167. package/dist/runtime/drivers/codex-home.js +674 -0
  168. package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
  169. package/dist/runtime/drivers/codex-thread-registry.js +433 -0
  170. package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
  171. package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
  172. package/dist/runtime/drivers/persistent-cli-process.d.ts +424 -0
  173. package/dist/runtime/drivers/persistent-cli-process.js +1543 -0
  174. package/dist/runtime/drivers/types.d.ts +456 -0
  175. package/dist/runtime/drivers/types.js +110 -0
  176. package/dist/runtime/mailbox.d.ts +223 -0
  177. package/dist/runtime/mailbox.js +582 -0
  178. package/dist/runtime/model-run-store.d.ts +28 -0
  179. package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
  180. package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
  181. package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
  182. package/dist/runtime/native-effect-observer.d.ts +22 -0
  183. package/dist/runtime/native-effect-observer.js +103 -0
  184. package/dist/runtime/native-input-journal.d.ts +46 -0
  185. package/dist/runtime/native-input-journal.js +308 -0
  186. package/dist/runtime/native-prompt.d.ts +118 -0
  187. package/dist/runtime/native-prompt.js +496 -0
  188. package/dist/runtime/native-session.d.ts +10 -0
  189. package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
  190. package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
  191. package/dist/runtime/native-tool-trace-observer.js +65 -0
  192. package/dist/runtime/native-turn.d.ts +272 -0
  193. package/dist/runtime/native-turn.js +1041 -0
  194. package/dist/runtime/operations.d.ts +236 -0
  195. package/dist/runtime/operations.js +565 -0
  196. package/dist/runtime/post-tool-handler.d.ts +74 -0
  197. package/dist/runtime/post-tool-handler.js +137 -0
  198. package/dist/runtime/prompt-layers.d.ts +126 -0
  199. package/dist/runtime/prompt-layers.js +239 -0
  200. package/dist/runtime/runtime-process.d.ts +102 -0
  201. package/dist/runtime/runtime-process.js +206 -0
  202. package/dist/runtime/runtime.d.ts +278 -0
  203. package/dist/runtime/runtime.js +563 -0
  204. package/dist/runtime/session-pool.d.ts +176 -0
  205. package/dist/runtime/session-pool.js +369 -0
  206. package/dist/runtime/stimulus-payload.d.ts +5 -0
  207. package/dist/runtime/stimulus-payload.js +50 -0
  208. package/dist/runtime/subagent-bridge.d.ts +24 -0
  209. package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
  210. package/dist/runtime/text-completion.d.ts +22 -0
  211. package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
  212. package/dist/runtime/token-estimator.d.ts +25 -0
  213. package/dist/runtime/token-estimator.js +75 -0
  214. package/dist/runtime/tool-trace-store.d.ts +22 -0
  215. package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
  216. package/dist/runtime/trace-summary.d.ts +5 -0
  217. package/dist/runtime/trace-summary.js +74 -0
  218. package/dist/runtime/turn-text.d.ts +23 -0
  219. package/dist/runtime/turn-text.js +41 -0
  220. package/dist/storage/database.d.ts +67 -0
  221. package/dist/storage/database.js +158 -0
  222. package/package.json +20 -34
  223. package/dist/agent-graph/alias-write.d.ts +0 -3
  224. package/dist/agent-graph/alias-write.js +0 -234
  225. package/dist/agent-graph/entity-resolve.d.ts +0 -3
  226. package/dist/agent-graph/entity-resolve.js +0 -271
  227. package/dist/agent-graph/errors.d.ts +0 -4
  228. package/dist/agent-graph/errors.js +0 -11
  229. package/dist/agent-graph/graph-query.d.ts +0 -5
  230. package/dist/agent-graph/graph-query.js +0 -360
  231. package/dist/agent-graph/index.d.ts +0 -6
  232. package/dist/agent-situation/builder.d.ts +0 -8
  233. package/dist/agent-situation/builder.js +0 -239
  234. package/dist/agent-situation/cache-key.d.ts +0 -4
  235. package/dist/agent-situation/cache-key.js +0 -64
  236. package/dist/agent-situation/index.d.ts +0 -7
  237. package/dist/agent-situation/index.js +0 -28
  238. package/dist/agent-situation/packet-store.d.ts +0 -27
  239. package/dist/agent-situation/packet-store.js +0 -228
  240. package/dist/agent-situation/ranking-policy.d.ts +0 -18
  241. package/dist/agent-situation/ranking-policy.js +0 -75
  242. package/dist/agent-situation/source-readers.d.ts +0 -52
  243. package/dist/agent-situation/source-readers.js +0 -300
  244. package/dist/agent-situation/types.d.ts +0 -195
  245. package/dist/cases/wiki-page-index.d.ts +0 -37
  246. package/dist/cases/wiki-page-index.js +0 -201
  247. package/dist/config-loader.d.ts +0 -68
  248. package/dist/config-loader.js +0 -239
  249. package/dist/connectors/event-index.d.ts +0 -24
  250. package/dist/connectors/event-index.js +0 -245
  251. package/dist/connectors/raw-query.d.ts +0 -40
  252. package/dist/connectors/raw-query.js +0 -412
  253. package/dist/connectors/types.d.ts +0 -117
  254. package/dist/connectors/types.js +0 -3
  255. package/dist/context-compile/boundary-defaults.d.ts +0 -12
  256. package/dist/context-compile/boundary-defaults.js +0 -105
  257. package/dist/context-compile/channel-grant.js +0 -66
  258. package/dist/context-compile/compiler-policy.d.ts +0 -39
  259. package/dist/context-compile/compiler-policy.js +0 -147
  260. package/dist/context-compile/compiler.d.ts +0 -18
  261. package/dist/context-compile/compiler.js +0 -404
  262. package/dist/context-compile/index.d.ts +0 -10
  263. package/dist/context-compile/index.js +0 -26
  264. package/dist/context-compile/packet-store.d.ts +0 -8
  265. package/dist/context-compile/packet-store.js +0 -239
  266. package/dist/context-compile/ref.d.ts +0 -7
  267. package/dist/context-compile/ref.js +0 -102
  268. package/dist/context-compile/source-readers.d.ts +0 -70
  269. package/dist/context-compile/source-readers.js +0 -840
  270. package/dist/context-compile/types.d.ts +0 -155
  271. package/dist/context-compile/types.js +0 -11
  272. package/dist/context-compile/visibility.d.ts +0 -21
  273. package/dist/context-compile/visibility.js +0 -224
  274. package/dist/decision-tracker.d.ts +0 -206
  275. package/dist/decision-tracker.js +0 -481
  276. package/dist/edges/ref-validation.d.ts +0 -7
  277. package/dist/edges/ref-validation.js +0 -321
  278. package/dist/edges/store.d.ts +0 -8
  279. package/dist/edges/store.js +0 -129
  280. package/dist/embedding-client.d.ts +0 -28
  281. package/dist/embedding-client.js +0 -53
  282. package/dist/embedding-server/index.d.ts +0 -67
  283. package/dist/embedding-server/index.js +0 -405
  284. package/dist/embedding-server/mobile/auth.d.ts +0 -44
  285. package/dist/embedding-server/mobile/auth.js +0 -150
  286. package/dist/embedding-server/mobile/daemon.d.ts +0 -129
  287. package/dist/embedding-server/mobile/daemon.js +0 -313
  288. package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
  289. package/dist/embedding-server/mobile/output-parser.js +0 -241
  290. package/dist/embedding-server/mobile/session-api.d.ts +0 -57
  291. package/dist/embedding-server/mobile/session-api.js +0 -261
  292. package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
  293. package/dist/embedding-server/mobile/session-manager.js +0 -378
  294. package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
  295. package/dist/embedding-server/mobile/websocket-handler.js +0 -486
  296. package/dist/embeddings.d.ts +0 -68
  297. package/dist/embeddings.js +0 -244
  298. package/dist/entities/audit-metrics.d.ts +0 -68
  299. package/dist/entities/audit-metrics.js +0 -124
  300. package/dist/entities/candidate-generator.d.ts +0 -8
  301. package/dist/entities/candidate-generator.js +0 -24
  302. package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
  303. package/dist/entities/entity-linked-decision-counts.js +0 -29
  304. package/dist/entities/entity-list.d.ts +0 -22
  305. package/dist/entities/entity-list.js +0 -3
  306. package/dist/entities/entity-orphan-list.d.ts +0 -17
  307. package/dist/entities/entity-orphan-list.js +0 -3
  308. package/dist/entities/entity-search.d.ts +0 -20
  309. package/dist/entities/entity-search.js +0 -3
  310. package/dist/entities/errors.d.ts +0 -55
  311. package/dist/entities/errors.js +0 -100
  312. package/dist/entities/lineage-store.d.ts +0 -28
  313. package/dist/entities/lineage-store.js +0 -204
  314. package/dist/entities/normalization.d.ts +0 -14
  315. package/dist/entities/normalization.js +0 -63
  316. package/dist/entities/policy-store.d.ts +0 -8
  317. package/dist/entities/policy-store.js +0 -75
  318. package/dist/entities/policy-types.d.ts +0 -72
  319. package/dist/entities/policy-types.js +0 -59
  320. package/dist/entities/projection.d.ts +0 -8
  321. package/dist/entities/projection.js +0 -82
  322. package/dist/entities/provenance-query.d.ts +0 -32
  323. package/dist/entities/provenance-query.js +0 -3
  324. package/dist/entities/read-identity.d.ts +0 -31
  325. package/dist/entities/read-identity.js +0 -264
  326. package/dist/entities/recall-bridge.d.ts +0 -5
  327. package/dist/entities/recall-bridge.js +0 -171
  328. package/dist/entities/resolution-engine.d.ts +0 -8
  329. package/dist/entities/resolution-engine.js +0 -3
  330. package/dist/entities/rollback-preview.d.ts +0 -35
  331. package/dist/entities/rollback-preview.js +0 -3
  332. package/dist/entities/source-locator.d.ts +0 -3
  333. package/dist/entities/source-locator.js +0 -32
  334. package/dist/entities/store.d.ts +0 -69
  335. package/dist/entities/store.js +0 -544
  336. package/dist/entities/types.d.ts +0 -166
  337. package/dist/entities/types.js +0 -30
  338. package/dist/memory/extraction-prompt.d.ts +0 -4
  339. package/dist/memory/extraction-prompt.js +0 -89
  340. package/dist/memory/scope-backfill.d.ts +0 -14
  341. package/dist/memory/scope-backfill.js +0 -3
  342. package/dist/memory/scope-store.d.ts +0 -4
  343. package/dist/memory/scope-store.js +0 -9
  344. package/dist/memory-store.d.ts +0 -87
  345. package/dist/memory-store.js +0 -78
  346. package/dist/model-runs/store.d.ts +0 -13
  347. package/dist/model-runs/tool-trace-store.d.ts +0 -8
  348. package/dist/notification-manager.d.ts +0 -7
  349. package/dist/notification-manager.js +0 -12
  350. package/dist/outcome-tracker.d.ts +0 -151
  351. package/dist/outcome-tracker.js +0 -271
  352. package/dist/query-intent.d.ts +0 -23
  353. package/dist/query-intent.js +0 -114
  354. package/dist/runtime/trusted-provenance.d.ts +0 -3
  355. package/dist/runtime/trusted-provenance.js +0 -6
  356. package/dist/search/question-type.d.ts +0 -5
  357. package/dist/search/question-type.js +0 -41
  358. package/dist/test-utils.d.ts +0 -80
  359. package/dist/test-utils.js +0 -218
  360. package/dist/tier-validator.d.ts +0 -43
  361. package/dist/tier-validator.js +0 -159
  362. package/dist/time-formatter.d.ts +0 -25
  363. package/dist/time-formatter.js +0 -93
  364. /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
  365. /package/dist/{search → knowledge}/feedback-store.js +0 -0
  366. /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
  367. /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
  368. /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
  369. /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
  370. /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
  371. /package/dist/{search → knowledge}/search-quality.js +0 -0
@@ -1,360 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getGraphNeighborhood = getGraphNeighborhood;
4
- exports.getGraphPaths = getGraphPaths;
5
- exports.getGraphTimeline = getGraphTimeline;
6
- const ref_validation_js_1 = require("../edges/ref-validation.js");
7
- const store_js_1 = require("../entities/store.js");
8
- const errors_js_1 = require("./errors.js");
9
- const DEFAULT_GRAPH_LIMIT = 100;
10
- const DEFAULT_PATH_LIMIT = 10;
11
- const MAX_DEPTH = 5;
12
- function refKey(ref) {
13
- return `${ref.kind}:${ref.id}`;
14
- }
15
- function edgeKey(edge) {
16
- return edge.edge_id;
17
- }
18
- function eventKey(event) {
19
- if (event.kind === 'edge') {
20
- return event.edge.edge_id;
21
- }
22
- return `${event.ref.kind}:${event.ref.id}`;
23
- }
24
- function eventKindRank(kind) {
25
- if (kind === 'entity') {
26
- return 0;
27
- }
28
- if (kind === 'memory') {
29
- return 1;
30
- }
31
- if (kind === 'raw') {
32
- return 2;
33
- }
34
- if (kind === 'case') {
35
- return 3;
36
- }
37
- return 4;
38
- }
39
- function normalizeDepth(value, fallback) {
40
- if (typeof value !== 'number' || !Number.isFinite(value)) {
41
- return fallback;
42
- }
43
- return Math.max(0, Math.min(MAX_DEPTH, Math.floor(value)));
44
- }
45
- function normalizeLimit(value, fallback) {
46
- if (typeof value !== 'number' || !Number.isFinite(value)) {
47
- return fallback;
48
- }
49
- return Math.max(1, Math.floor(value));
50
- }
51
- function addNode(nodes, seen, ref) {
52
- const key = refKey(ref);
53
- if (!seen.has(key)) {
54
- seen.add(key);
55
- nodes.push(ref);
56
- }
57
- }
58
- function addRef(refs, seen, ref) {
59
- if (ref.kind === 'edge' || ref.kind === 'report') {
60
- return;
61
- }
62
- const key = refKey(ref);
63
- if (!seen.has(key)) {
64
- seen.add(key);
65
- refs.push(ref);
66
- }
67
- }
68
- function oppositeRef(edge, current) {
69
- const currentKey = refKey(current);
70
- const refs = [];
71
- if (refKey(edge.subject_ref) !== currentKey) {
72
- refs.push(edge.subject_ref);
73
- }
74
- if (refKey(edge.object_ref) !== currentKey) {
75
- refs.push(edge.object_ref);
76
- }
77
- if (refs.length === 0) {
78
- refs.push(edge.object_ref);
79
- }
80
- return refs;
81
- }
82
- function listFilteredEdges(adapter, refs, input) {
83
- // Spread, not a field-by-field re-listing. Re-listing is how the channel grant was
84
- // silently dropped here while every other path enforced it: a new field on the
85
- // visibility type simply never arrived, and nothing failed to say so.
86
- return (0, ref_validation_js_1.listVisibleTwinEdgesForRefs)(adapter, refs, {
87
- ...input.visibility,
88
- edgeTypes: input.edge_filters?.edge_types,
89
- asOfMs: input.as_of_ms,
90
- limit: input.limit,
91
- });
92
- }
93
- function assertRefsVisible(adapter, refs, visibility, asOfMs) {
94
- try {
95
- (0, ref_validation_js_1.assertTwinRefsVisible)(adapter, refs, { ...visibility, asOfMs });
96
- }
97
- catch (error) {
98
- throw new errors_js_1.AgentGraphValidationError(error instanceof Error ? error.message : String(error));
99
- }
100
- }
101
- function graphVisibility(input) {
102
- return {
103
- scopes: input.scopes,
104
- connectors: input.connectors,
105
- projectRefs: input.project_refs,
106
- tenantId: input.tenant_id,
107
- ...(input.channels ? { channels: input.channels } : {}),
108
- };
109
- }
110
- function numberMs(value, field, refId) {
111
- if (typeof value === 'number' && Number.isFinite(value)) {
112
- return Math.floor(value);
113
- }
114
- throw new Error(`Invalid ${field} timestamp for graph timeline ref ${refId}.`);
115
- }
116
- function nullableNumberMs(value, field, refId) {
117
- if (value === null || value === undefined) {
118
- return null;
119
- }
120
- return numberMs(value, field, refId);
121
- }
122
- function parseTimestampMs(value, field, refId) {
123
- if (typeof value === 'number' && Number.isFinite(value)) {
124
- return Math.floor(value);
125
- }
126
- if (typeof value === 'string') {
127
- const parsed = Date.parse(value);
128
- if (Number.isFinite(parsed)) {
129
- return parsed;
130
- }
131
- }
132
- throw new Error(`Invalid ${field} timestamp for graph timeline ref ${refId}.`);
133
- }
134
- function timelineWindow(input) {
135
- const upperBounds = [input.to_ms, input.as_of_ms].filter((value) => typeof value === 'number');
136
- return {
137
- fromMs: input.from_ms,
138
- toMs: upperBounds.length > 0 ? Math.min(...upperBounds) : undefined,
139
- };
140
- }
141
- function isInTimelineWindow(atMs, window) {
142
- return ((window.fromMs === undefined || atMs >= window.fromMs) &&
143
- (window.toMs === undefined || atMs <= window.toMs));
144
- }
145
- function loadTimelineRecordEvent(adapter, ref) {
146
- if (ref.kind === 'entity') {
147
- const entity = (0, store_js_1.getEntityNode)(ref.id, adapter);
148
- if (!entity || entity.status !== 'active') {
149
- return null;
150
- }
151
- return { kind: 'entity', at_ms: entity.created_at, ref, entity };
152
- }
153
- if (ref.kind === 'memory') {
154
- const row = adapter
155
- .prepare(`
156
- SELECT id, topic, decision, created_at, event_datetime
157
- FROM decisions
158
- WHERE id = ?
159
- LIMIT 1
160
- `)
161
- .get(ref.id);
162
- if (!row) {
163
- return null;
164
- }
165
- const eventDatetime = nullableNumberMs(row.event_datetime, 'decisions.event_datetime', ref.id);
166
- const createdAt = numberMs(row.created_at, 'decisions.created_at', ref.id);
167
- return {
168
- kind: 'memory',
169
- at_ms: eventDatetime ?? createdAt,
170
- ref,
171
- memory: {
172
- id: row.id,
173
- topic: row.topic,
174
- decision: row.decision,
175
- created_at: createdAt,
176
- event_datetime: eventDatetime,
177
- },
178
- };
179
- }
180
- if (ref.kind === 'raw') {
181
- const row = adapter
182
- .prepare(`
183
- SELECT
184
- event_index_id, source_connector, source_type, source_id, source_locator,
185
- title, event_datetime, source_timestamp_ms
186
- FROM connector_event_index
187
- WHERE event_index_id = ?
188
- LIMIT 1
189
- `)
190
- .get(ref.id);
191
- if (!row) {
192
- return null;
193
- }
194
- const eventDatetime = nullableNumberMs(row.event_datetime, 'connector_event_index.event_datetime', ref.id);
195
- const sourceTimestampMs = numberMs(row.source_timestamp_ms, 'connector_event_index.source_timestamp_ms', ref.id);
196
- return {
197
- kind: 'raw',
198
- at_ms: eventDatetime ?? sourceTimestampMs,
199
- ref,
200
- raw: {
201
- event_index_id: row.event_index_id,
202
- source_connector: row.source_connector,
203
- source_type: row.source_type,
204
- source_id: row.source_id,
205
- source_locator: row.source_locator,
206
- title: row.title,
207
- event_datetime: eventDatetime,
208
- source_timestamp_ms: sourceTimestampMs,
209
- },
210
- };
211
- }
212
- if (ref.kind === 'case') {
213
- const row = adapter
214
- .prepare(`
215
- SELECT case_id, title, status, last_activity_at, created_at, updated_at
216
- FROM case_truth
217
- WHERE case_id = ?
218
- LIMIT 1
219
- `)
220
- .get(ref.id);
221
- if (!row) {
222
- return null;
223
- }
224
- return {
225
- kind: 'case',
226
- at_ms: parseTimestampMs(row.last_activity_at ?? row.updated_at, 'case_truth.updated_at', ref.id),
227
- ref,
228
- case: {
229
- case_id: row.case_id,
230
- title: row.title,
231
- status: row.status,
232
- created_at: row.created_at,
233
- updated_at: row.updated_at,
234
- last_activity_at: row.last_activity_at,
235
- },
236
- };
237
- }
238
- return null;
239
- }
240
- function getGraphNeighborhood(adapter, input) {
241
- const depth = normalizeDepth(input.depth, 1);
242
- const limit = normalizeLimit(input.limit, DEFAULT_GRAPH_LIMIT);
243
- const visibility = graphVisibility(input);
244
- assertRefsVisible(adapter, [input.ref], visibility, input.as_of_ms);
245
- const nodes = [];
246
- const edges = [];
247
- const seenNodes = new Set();
248
- const seenEdges = new Set();
249
- addNode(nodes, seenNodes, input.ref);
250
- let frontier = [input.ref];
251
- for (let currentDepth = 0; currentDepth < depth && frontier.length > 0; currentDepth++) {
252
- const found = listFilteredEdges(adapter, frontier, {
253
- visibility,
254
- edge_filters: input.edge_filters,
255
- as_of_ms: input.as_of_ms,
256
- limit,
257
- });
258
- const nextFrontier = [];
259
- const nextKeys = new Set();
260
- for (const edge of found) {
261
- if (seenEdges.size >= limit) {
262
- break;
263
- }
264
- if (!seenEdges.has(edgeKey(edge))) {
265
- seenEdges.add(edgeKey(edge));
266
- edges.push(edge);
267
- }
268
- for (const endpoint of [edge.subject_ref, edge.object_ref]) {
269
- const before = seenNodes.size;
270
- addNode(nodes, seenNodes, endpoint);
271
- if (seenNodes.size > before && !nextKeys.has(refKey(endpoint))) {
272
- nextKeys.add(refKey(endpoint));
273
- nextFrontier.push(endpoint);
274
- }
275
- }
276
- }
277
- frontier = nextFrontier;
278
- }
279
- return { nodes, edges };
280
- }
281
- function getGraphPaths(adapter, input) {
282
- const maxDepth = normalizeDepth(input.max_depth, 3);
283
- const limit = normalizeLimit(input.limit, DEFAULT_PATH_LIMIT);
284
- const visibility = graphVisibility(input);
285
- assertRefsVisible(adapter, [input.from_ref, input.to_ref], visibility, input.as_of_ms);
286
- const targetKey = refKey(input.to_ref);
287
- const queue = [{ refs: [input.from_ref], edges: [] }];
288
- const paths = [];
289
- while (queue.length > 0 && paths.length < limit) {
290
- const path = queue.shift();
291
- if (!path) {
292
- break;
293
- }
294
- const current = path.refs[path.refs.length - 1];
295
- if (!current || path.edges.length >= maxDepth) {
296
- continue;
297
- }
298
- const edges = listFilteredEdges(adapter, [current], {
299
- visibility,
300
- edge_filters: input.edge_filters,
301
- as_of_ms: input.as_of_ms,
302
- });
303
- for (const edge of edges) {
304
- for (const next of oppositeRef(edge, current)) {
305
- if (path.refs.some((ref) => refKey(ref) === refKey(next))) {
306
- continue;
307
- }
308
- const nextPath = { refs: [...path.refs, next], edges: [...path.edges, edge] };
309
- if (refKey(next) === targetKey) {
310
- paths.push(nextPath);
311
- if (paths.length >= limit) {
312
- break;
313
- }
314
- }
315
- else {
316
- queue.push(nextPath);
317
- }
318
- }
319
- if (paths.length >= limit) {
320
- break;
321
- }
322
- }
323
- }
324
- return { paths };
325
- }
326
- function getGraphTimeline(adapter, input) {
327
- const visibility = graphVisibility(input);
328
- assertRefsVisible(adapter, [input.ref], visibility, input.as_of_ms);
329
- const limit = normalizeLimit(input.limit, DEFAULT_GRAPH_LIMIT);
330
- const window = timelineWindow(input);
331
- const edges = listFilteredEdges(adapter, [input.ref], {
332
- visibility,
333
- edge_filters: input.edge_filters,
334
- as_of_ms: input.as_of_ms,
335
- }).filter((edge) => isInTimelineWindow(edge.created_at, window));
336
- const refs = [];
337
- const seenRefs = new Set();
338
- addRef(refs, seenRefs, input.ref);
339
- for (const edge of edges) {
340
- addRef(refs, seenRefs, edge.subject_ref);
341
- addRef(refs, seenRefs, edge.object_ref);
342
- }
343
- const events = [];
344
- for (const ref of refs) {
345
- const event = loadTimelineRecordEvent(adapter, ref);
346
- if (event && isInTimelineWindow(event.at_ms, window)) {
347
- events.push(event);
348
- }
349
- }
350
- events.push(...edges.map((edge) => ({ kind: 'edge', at_ms: edge.created_at, edge })));
351
- return {
352
- ref: input.ref,
353
- events: events
354
- .sort((left, right) => left.at_ms - right.at_ms ||
355
- eventKindRank(left.kind) - eventKindRank(right.kind) ||
356
- eventKey(left).localeCompare(eventKey(right)))
357
- .slice(0, limit),
358
- };
359
- }
360
- //# sourceMappingURL=graph-query.js.map
@@ -1,6 +0,0 @@
1
- export * from './types.js';
2
- export * from './errors.js';
3
- export * from './entity-resolve.js';
4
- export * from './graph-query.js';
5
- export * from './alias-write.js';
6
- //# sourceMappingURL=index.d.ts.map
@@ -1,8 +0,0 @@
1
- import type { DatabaseAdapter } from '../db-manager.js';
2
- import { type AgentSituationSourceReadInput, type VisibleAgentSituationSources } from './source-readers.js';
3
- import type { AgentSituationInput, AgentSituationPacketRecord } from './types.js';
4
- type SituationBuilderAdapter = Pick<DatabaseAdapter, 'prepare'>;
5
- export declare function listVisibleAgentSituationSources(adapter: SituationBuilderAdapter, input: AgentSituationSourceReadInput): VisibleAgentSituationSources;
6
- export declare function buildAgentSituationPacketRecord(adapter: SituationBuilderAdapter, input: AgentSituationInput): AgentSituationPacketRecord;
7
- export {};
8
- //# sourceMappingURL=builder.d.ts.map
@@ -1,239 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.listVisibleAgentSituationSources = listVisibleAgentSituationSources;
4
- exports.buildAgentSituationPacketRecord = buildAgentSituationPacketRecord;
5
- const node_crypto_1 = require("node:crypto");
6
- const canonicalize_js_1 = require("../canonicalize.js");
7
- const cache_key_js_1 = require("./cache-key.js");
8
- const ranking_policy_js_1 = require("./ranking-policy.js");
9
- const source_readers_js_1 = require("./source-readers.js");
10
- function iso(ms) {
11
- return new Date(ms).toISOString();
12
- }
13
- function ttlForRange(rangeStartMs, rangeEndMs) {
14
- const rangeMs = Math.max(0, rangeEndMs - rangeStartMs);
15
- const dayMs = 24 * 60 * 60 * 1000;
16
- if (rangeMs <= 7 * dayMs) {
17
- return 120;
18
- }
19
- if (rangeMs <= 30 * dayMs) {
20
- return 300;
21
- }
22
- return 900;
23
- }
24
- function topStrings(values, limit = 3) {
25
- return values
26
- .map((value) => value.trim())
27
- .filter(Boolean)
28
- .slice(0, limit);
29
- }
30
- function refKey(ref) {
31
- return `${ref.kind}:${ref.id}`;
32
- }
33
- function buildBriefing(sources) {
34
- const memories = sources.memories;
35
- const openQuestions = memories.filter((memory) => memory.is_open_question);
36
- const lowConfidence = [...memories, ...sources.cases, ...sources.edges].filter((candidate) => typeof candidate.confidence === 'number' && candidate.confidence < 0.6);
37
- return {
38
- decisions: topStrings(memories.map((memory) => memory.summary || memory.title)),
39
- facts: topStrings(sources.raw.map((raw) => raw.summary)),
40
- open_questions: topStrings(openQuestions.map((memory) => memory.summary || memory.title)),
41
- risks: topStrings([
42
- ...lowConfidence.map((candidate) => candidate.summary || candidate.title),
43
- ...sources.cases
44
- .filter((item) => item.status === 'blocked')
45
- .map((item) => `${item.title}: ${item.status}`),
46
- ]),
47
- };
48
- }
49
- function buildCoverage(sources, input) {
50
- const coverage = [];
51
- for (const connector of input.effective_filters.connectors) {
52
- for (const scope of input.effective_filters.scopes) {
53
- const raw = sources.raw.filter((item) => item.connector === connector &&
54
- item.scope?.kind === scope.kind &&
55
- item.scope.id === scope.id);
56
- const memories = sources.memories.filter((item) => item.scope?.kind === scope.kind && item.scope.id === scope.id);
57
- const cases = sources.cases.filter((item) => item.scope?.kind === scope.kind && item.scope.id === scope.id);
58
- const rowRefs = new Set([...raw, ...memories, ...cases].map((item) => refKey(item.ref)));
59
- const edges = sources.edges.filter((item) => rowRefs.has(refKey(item.subject_ref)) && rowRefs.has(refKey(item.object_ref)));
60
- const lastSeenMs = Math.max(0, ...raw.map((item) => item.timestamp_ms), ...memories.map((item) => item.timestamp_ms), ...cases.map((item) => item.timestamp_ms), ...edges.map((item) => item.timestamp_ms));
61
- coverage.push({
62
- connector,
63
- channel_id: raw[0]?.channel_id ?? null,
64
- memory_scope: scope,
65
- raw_count: raw.length,
66
- memory_count: memories.length,
67
- case_count: cases.length,
68
- edge_count: edges.length,
69
- last_seen: lastSeenMs > 0 ? iso(lastSeenMs) : null,
70
- stale: lastSeenMs > 0
71
- ? (input.now_ms ?? Date.now()) - lastSeenMs > 30 * 24 * 60 * 60 * 1000
72
- : true,
73
- });
74
- }
75
- }
76
- return coverage;
77
- }
78
- function buildRankedItems(sources, limit) {
79
- const policy = (0, ranking_policy_js_1.getAgentSituationRankingPolicy)();
80
- const candidates = [...sources.raw, ...sources.memories, ...sources.cases, ...sources.edges];
81
- return candidates
82
- .map((candidate) => {
83
- const score = (0, ranking_policy_js_1.scoreAgentSituationCandidate)(candidate, policy);
84
- return {
85
- ref: candidate.ref,
86
- kind: candidate.kind,
87
- score: score.score,
88
- reasons: score.reasons,
89
- caveats: score.caveats,
90
- };
91
- })
92
- .sort((left, right) => right.score - left.score || left.ref.id.localeCompare(right.ref.id))
93
- .slice(0, limit);
94
- }
95
- function buildRecommendations(sources, rankedItems) {
96
- const recommendations = [];
97
- const expectedRefs = rankedItems.map((item) => item.ref);
98
- if (sources.memories.some((memory) => memory.is_open_question) || sources.raw.length > 0) {
99
- recommendations.push({
100
- tool: 'raw.searchAll',
101
- args: {
102
- query: sources.memories.find((memory) => memory.is_open_question)?.title ?? 'recent work',
103
- },
104
- reason: 'visible_open_question_needs_evidence',
105
- expected_refs: expectedRefs.filter((ref) => ref.kind === 'raw' || ref.kind === 'memory'),
106
- });
107
- }
108
- const topRaw = sources.raw[0];
109
- if (topRaw) {
110
- recommendations.push({
111
- tool: 'raw.window',
112
- args: { raw_id: topRaw.ref.id },
113
- reason: 'inspect_visible_raw_context',
114
- expected_refs: [topRaw.ref],
115
- });
116
- }
117
- return recommendations;
118
- }
119
- function sourceRefs(sources) {
120
- return [
121
- ...sources.raw.map((item) => item.ref),
122
- ...sources.memories.map((item) => item.ref),
123
- ...sources.cases.map((item) => item.ref),
124
- ...sources.edges.map((item) => item.ref),
125
- ];
126
- }
127
- function primaryScope(input) {
128
- const scope = input.scope[0] ?? input.effective_filters.scopes[0];
129
- if (!scope) {
130
- throw new Error('agent.situation requires at least one effective memory scope');
131
- }
132
- return scope;
133
- }
134
- function primaryProjectId(input) {
135
- const project = input.effective_filters.project_refs[0];
136
- if (!project) {
137
- throw new Error('agent.situation requires at least one effective project ref');
138
- }
139
- return project.id;
140
- }
141
- function json(value) {
142
- return (0, canonicalize_js_1.canonicalizeJSON)(value);
143
- }
144
- function listVisibleAgentSituationSources(adapter, input) {
145
- return (0, source_readers_js_1.listVisibleAgentSituationSources)(adapter, input);
146
- }
147
- function buildAgentSituationPacketRecord(adapter, input) {
148
- const rankingPolicyVersion = input.ranking_policy_version ?? ranking_policy_js_1.AGENT_SITUATION_V0_POLICY_VERSION;
149
- const nowMs = Math.floor(input.now_ms ?? Date.now());
150
- const limit = Math.floor(input.limit);
151
- const effectiveFilters = (0, cache_key_js_1.normalizeAgentSituationEffectiveFilters)(input.effective_filters);
152
- const normalizedInput = { ...input, effective_filters: effectiveFilters };
153
- const sources = (0, source_readers_js_1.listVisibleAgentSituationSources)(adapter, {
154
- effective_filters: effectiveFilters,
155
- range_start_ms: input.range_start_ms,
156
- range_end_ms: input.range_end_ms,
157
- limit,
158
- });
159
- const key = (0, cache_key_js_1.buildAgentSituationCacheKey)({
160
- ...effectiveFilters,
161
- range_start_ms: input.range_start_ms,
162
- range_end_ms: input.range_end_ms,
163
- focus: input.focus,
164
- limit,
165
- ranking_policy_version: rankingPolicyVersion,
166
- });
167
- const ttlSeconds = ttlForRange(input.range_start_ms, input.range_end_ms);
168
- const expiresAt = nowMs + ttlSeconds * 1000;
169
- const scope = primaryScope(input);
170
- const rankedItems = buildRankedItems(sources, limit);
171
- const briefing = buildBriefing(sources);
172
- const coverage = buildCoverage(sources, normalizedInput);
173
- const visibleSourceRefs = sourceRefs(sources);
174
- const pendingHumanQuestions = sources.memories
175
- .filter((memory) => memory.is_open_question)
176
- .slice(0, 3)
177
- .map((memory) => ({
178
- memory_id: memory.ref.id,
179
- title: memory.title,
180
- summary: memory.summary,
181
- }));
182
- const caveats = visibleSourceRefs.length === 0 ? ['no_visible_sources'] : [];
183
- const recommendedNextTools = buildRecommendations(sources, rankedItems);
184
- const topMemoryRefs = sources.memories.map((memory) => memory.ref.id).slice(0, limit);
185
- const freshness = {
186
- generated_at_ms: nowMs,
187
- visible_source_count: visibleSourceRefs.length,
188
- };
189
- return {
190
- packet_id: `situ_${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}`,
191
- cache_key: key.cacheKey,
192
- scope_json: json(input.scope),
193
- scope: input.scope,
194
- scope_hash: key.scopeHash,
195
- range_start_ms: Math.floor(input.range_start_ms),
196
- range_end_ms: Math.floor(input.range_end_ms),
197
- focus_json: json(input.focus),
198
- focus: input.focus,
199
- envelope_hash: input.envelope_hash,
200
- envelope_effective_filters_json: json(effectiveFilters),
201
- envelope_effective_filters: effectiveFilters,
202
- envelope_effective_filters_hash: key.filtersHash,
203
- ranking_policy_version: rankingPolicyVersion,
204
- generated_at: nowMs,
205
- expires_at: expiresAt,
206
- ttl_seconds: ttlSeconds,
207
- freshness_json: json(freshness),
208
- freshness,
209
- source_coverage_json: json(coverage),
210
- source_coverage: coverage,
211
- briefing_json: json(briefing),
212
- briefing,
213
- ranked_items_json: json(rankedItems),
214
- ranked_items: rankedItems,
215
- top_memory_refs_json: json(topMemoryRefs),
216
- top_memory_refs: topMemoryRefs,
217
- pending_human_questions_json: json(pendingHumanQuestions),
218
- pending_human_questions: pendingHumanQuestions,
219
- entity_clusters_json: '[]',
220
- entity_clusters: [],
221
- recommended_next_tools_json: json(recommendedNextTools),
222
- recommended_next_tools: recommendedNextTools,
223
- generated_from_slice_ids_json: '[]',
224
- generated_from_slice_ids: [],
225
- caveats_json: json(caveats),
226
- caveats,
227
- agent_id: input.agent_id,
228
- model_run_id: input.model_run_id,
229
- input_snapshot_ref: `situation:${key.cacheKey}`,
230
- source_refs_json: json(visibleSourceRefs),
231
- source_refs: visibleSourceRefs,
232
- tenant_id: effectiveFilters.tenant_id,
233
- project_id: primaryProjectId(normalizedInput),
234
- memory_scope_kind: scope.kind,
235
- memory_scope_id: scope.id,
236
- created_at: nowMs,
237
- };
238
- }
239
- //# sourceMappingURL=builder.js.map
@@ -1,4 +0,0 @@
1
- import type { AgentSituationCacheKeyInput, AgentSituationCacheKeyResult, AgentSituationEffectiveFilters } from './types.js';
2
- export declare function normalizeAgentSituationEffectiveFilters(input: AgentSituationEffectiveFilters): AgentSituationEffectiveFilters;
3
- export declare function buildAgentSituationCacheKey(input: AgentSituationCacheKeyInput): AgentSituationCacheKeyResult;
4
- //# sourceMappingURL=cache-key.d.ts.map
@@ -1,64 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.normalizeAgentSituationEffectiveFilters = normalizeAgentSituationEffectiveFilters;
4
- exports.buildAgentSituationCacheKey = buildAgentSituationCacheKey;
5
- const node_crypto_1 = require("node:crypto");
6
- const canonicalize_js_1 = require("../canonicalize.js");
7
- function sha256Hex(value) {
8
- return (0, node_crypto_1.createHash)('sha256').update((0, canonicalize_js_1.canonicalizeJSON)(value), 'utf8').digest('hex');
9
- }
10
- function uniqueSorted(values) {
11
- return [...new Set(values.map((value) => value.trim()).filter(Boolean))].sort();
12
- }
13
- function normalizeScopes(scopes) {
14
- const byKey = new Map();
15
- for (const scope of scopes) {
16
- const normalized = { kind: scope.kind, id: scope.id.trim() };
17
- if (normalized.id.length > 0) {
18
- byKey.set(`${normalized.kind}:${normalized.id}`, normalized);
19
- }
20
- }
21
- return [...byKey.values()].sort((left, right) => `${left.kind}:${left.id}`.localeCompare(`${right.kind}:${right.id}`));
22
- }
23
- function normalizeProjectRefs(projectRefs) {
24
- const byId = new Map();
25
- for (const project of projectRefs) {
26
- const normalized = { kind: 'project', id: project.id.trim() };
27
- if (normalized.id.length > 0) {
28
- byId.set(normalized.id, normalized);
29
- }
30
- }
31
- return [...byId.values()].sort((left, right) => left.id.localeCompare(right.id));
32
- }
33
- function normalizeFocus(focus) {
34
- return [...new Set(focus)].sort();
35
- }
36
- function normalizeAgentSituationEffectiveFilters(input) {
37
- return {
38
- scopes: normalizeScopes(input.scopes),
39
- connectors: uniqueSorted(input.connectors),
40
- project_refs: normalizeProjectRefs(input.project_refs),
41
- tenant_id: input.tenant_id.trim() || 'default',
42
- as_of: input.as_of ?? null,
43
- };
44
- }
45
- function buildAgentSituationCacheKey(input) {
46
- const effective = normalizeAgentSituationEffectiveFilters(input);
47
- const canonicalInput = {
48
- ...effective,
49
- range_start_ms: Math.floor(input.range_start_ms),
50
- range_end_ms: Math.floor(input.range_end_ms),
51
- focus: normalizeFocus(input.focus),
52
- limit: Math.floor(input.limit),
53
- ranking_policy_version: input.ranking_policy_version,
54
- };
55
- const canonicalJson = (0, canonicalize_js_1.canonicalizeJSON)(canonicalInput);
56
- return {
57
- cacheKey: (0, node_crypto_1.createHash)('sha256').update(canonicalJson, 'utf8').digest('hex'),
58
- canonicalInput,
59
- canonicalJson,
60
- filtersHash: sha256Hex(effective),
61
- scopeHash: sha256Hex(effective.scopes),
62
- };
63
- }
64
- //# sourceMappingURL=cache-key.js.map
@@ -1,7 +0,0 @@
1
- export * from './types.js';
2
- export * from './cache-key.js';
3
- export * from './ranking-policy.js';
4
- export { listVisibleRawCandidates, listVisibleMemoryCandidates, listVisibleCaseCandidates, listVisibleEdgeCandidates, type AgentSituationSourceReadInput, type VisibleAgentSituationSources, type VisibleRawCandidate, type VisibleMemoryCandidate, type VisibleCaseCandidate, type VisibleEdgeCandidate, } from './source-readers.js';
5
- export * from './builder.js';
6
- export * from './packet-store.js';
7
- //# sourceMappingURL=index.d.ts.map