@graphorin/memory 0.5.0 → 0.6.1

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 (236) hide show
  1. package/CHANGELOG.md +102 -1
  2. package/README.md +54 -37
  3. package/dist/conflict/index.d.ts +3 -1
  4. package/dist/conflict/index.js +1 -1
  5. package/dist/conflict/locale-packs/en.d.ts +13 -0
  6. package/dist/conflict/locale-packs/en.d.ts.map +1 -0
  7. package/dist/conflict/locale-packs/en.js +1 -1
  8. package/dist/conflict/locale-packs/en.js.map +1 -1
  9. package/dist/conflict/pipeline.d.ts +2 -2
  10. package/dist/conflict/pipeline.js +3 -3
  11. package/dist/conflict/pipeline.js.map +1 -1
  12. package/dist/conflict/stages/helpers.js +1 -1
  13. package/dist/conflict/stages/helpers.js.map +1 -1
  14. package/dist/conflict/stages/stage1-exact-dedup.js.map +1 -1
  15. package/dist/conflict/stages/stage2-embedding-three-zone.js.map +1 -1
  16. package/dist/conflict/stages/stage3-heuristic-regex.js +1 -1
  17. package/dist/conflict/stages/stage3-heuristic-regex.js.map +1 -1
  18. package/dist/conflict/stages/stage4-subject-predicate.js.map +1 -1
  19. package/dist/conflict/stages/stage5-defer-to-deep.js.map +1 -1
  20. package/dist/conflict/types.d.ts +7 -7
  21. package/dist/conflict/types.js +1 -1
  22. package/dist/conflict/types.js.map +1 -1
  23. package/dist/consolidator/budget.js +16 -3
  24. package/dist/consolidator/budget.js.map +1 -1
  25. package/dist/consolidator/decay.d.ts +13 -2
  26. package/dist/consolidator/decay.js +17 -5
  27. package/dist/consolidator/decay.js.map +1 -1
  28. package/dist/consolidator/dlq.js +1 -1
  29. package/dist/consolidator/dlq.js.map +1 -1
  30. package/dist/consolidator/errors.js +2 -2
  31. package/dist/consolidator/errors.js.map +1 -1
  32. package/dist/consolidator/index.js +8 -6
  33. package/dist/consolidator/index.js.map +1 -1
  34. package/dist/consolidator/lock.js +1 -1
  35. package/dist/consolidator/lock.js.map +1 -1
  36. package/dist/consolidator/noise-filter.js.map +1 -1
  37. package/dist/consolidator/phases/deep.js +6 -2
  38. package/dist/consolidator/phases/deep.js.map +1 -1
  39. package/dist/consolidator/phases/induce.d.ts +10 -10
  40. package/dist/consolidator/phases/induce.js +6 -6
  41. package/dist/consolidator/phases/induce.js.map +1 -1
  42. package/dist/consolidator/phases/learned-context.js +129 -0
  43. package/dist/consolidator/phases/learned-context.js.map +1 -0
  44. package/dist/consolidator/phases/light.js +2 -1
  45. package/dist/consolidator/phases/light.js.map +1 -1
  46. package/dist/consolidator/phases/reflect.js +5 -4
  47. package/dist/consolidator/phases/reflect.js.map +1 -1
  48. package/dist/consolidator/phases/standard.js +37 -8
  49. package/dist/consolidator/phases/standard.js.map +1 -1
  50. package/dist/consolidator/reconcile.js +1 -1
  51. package/dist/consolidator/reconcile.js.map +1 -1
  52. package/dist/consolidator/runtime.d.ts +4 -4
  53. package/dist/consolidator/runtime.d.ts.map +1 -1
  54. package/dist/consolidator/runtime.js +73 -16
  55. package/dist/consolidator/runtime.js.map +1 -1
  56. package/dist/consolidator/scheduler.d.ts +5 -5
  57. package/dist/consolidator/scheduler.js +1 -1
  58. package/dist/consolidator/scheduler.js.map +1 -1
  59. package/dist/consolidator/triggers.js +7 -7
  60. package/dist/consolidator/triggers.js.map +1 -1
  61. package/dist/consolidator/types.d.ts +68 -20
  62. package/dist/consolidator/types.d.ts.map +1 -1
  63. package/dist/consolidator/types.js +16 -6
  64. package/dist/consolidator/types.js.map +1 -1
  65. package/dist/context-engine/annotations.d.ts +9 -9
  66. package/dist/context-engine/annotations.js +3 -3
  67. package/dist/context-engine/annotations.js.map +1 -1
  68. package/dist/context-engine/auto-recall.js.map +1 -1
  69. package/dist/context-engine/compaction/clear-tool-results.d.ts +18 -3
  70. package/dist/context-engine/compaction/clear-tool-results.d.ts.map +1 -1
  71. package/dist/context-engine/compaction/clear-tool-results.js +26 -5
  72. package/dist/context-engine/compaction/clear-tool-results.js.map +1 -1
  73. package/dist/context-engine/compaction/compactor.js +19 -6
  74. package/dist/context-engine/compaction/compactor.js.map +1 -1
  75. package/dist/context-engine/compaction/hooks/reanchor-persona-block.js +4 -0
  76. package/dist/context-engine/compaction/hooks/reanchor-persona-block.js.map +1 -1
  77. package/dist/context-engine/compaction/hooks/reanchor-pinned-facts.js +1 -0
  78. package/dist/context-engine/compaction/hooks/reanchor-pinned-facts.js.map +1 -1
  79. package/dist/context-engine/compaction/hooks/reanchor-project-rules.js +2 -1
  80. package/dist/context-engine/compaction/hooks/reanchor-project-rules.js.map +1 -1
  81. package/dist/context-engine/compaction/hooks/reanchor-recent-results.d.ts +28 -0
  82. package/dist/context-engine/compaction/hooks/reanchor-recent-results.d.ts.map +1 -0
  83. package/dist/context-engine/compaction/hooks/reanchor-recent-results.js +71 -0
  84. package/dist/context-engine/compaction/hooks/reanchor-recent-results.js.map +1 -0
  85. package/dist/context-engine/compaction/hooks/types.d.ts +15 -3
  86. package/dist/context-engine/compaction/hooks/types.d.ts.map +1 -1
  87. package/dist/context-engine/compaction/index.d.ts +1 -0
  88. package/dist/context-engine/compaction/index.js +2 -1
  89. package/dist/context-engine/compaction/templates/summary-9-section.d.ts +10 -3
  90. package/dist/context-engine/compaction/templates/summary-9-section.d.ts.map +1 -1
  91. package/dist/context-engine/compaction/templates/summary-9-section.js +42 -5
  92. package/dist/context-engine/compaction/templates/summary-9-section.js.map +1 -1
  93. package/dist/context-engine/compaction/thresholds.js.map +1 -1
  94. package/dist/context-engine/compaction/types.d.ts +47 -7
  95. package/dist/context-engine/compaction/types.d.ts.map +1 -1
  96. package/dist/context-engine/engine.d.ts +23 -4
  97. package/dist/context-engine/engine.d.ts.map +1 -1
  98. package/dist/context-engine/engine.js +69 -15
  99. package/dist/context-engine/engine.js.map +1 -1
  100. package/dist/context-engine/index.d.ts +1 -0
  101. package/dist/context-engine/index.d.ts.map +1 -1
  102. package/dist/context-engine/index.js +2 -1
  103. package/dist/context-engine/locale-packs/en.js +14 -13
  104. package/dist/context-engine/locale-packs/en.js.map +1 -1
  105. package/dist/context-engine/locale-packs/types.d.ts +10 -10
  106. package/dist/context-engine/locale-packs/types.d.ts.map +1 -1
  107. package/dist/context-engine/locale-packs/types.js.map +1 -1
  108. package/dist/context-engine/metadata.d.ts +1 -1
  109. package/dist/context-engine/metadata.js +2 -2
  110. package/dist/context-engine/metadata.js.map +1 -1
  111. package/dist/context-engine/preambles/inbound-en.d.ts +1 -1
  112. package/dist/context-engine/preambles/inbound-en.js +1 -1
  113. package/dist/context-engine/preambles/inbound-en.js.map +1 -1
  114. package/dist/context-engine/privacy-filter.d.ts +2 -2
  115. package/dist/context-engine/privacy-filter.js +1 -1
  116. package/dist/context-engine/privacy-filter.js.map +1 -1
  117. package/dist/context-engine/templates/base-en.d.ts +1 -1
  118. package/dist/context-engine/templates/base-en.js +1 -1
  119. package/dist/context-engine/templates/base-en.js.map +1 -1
  120. package/dist/context-engine/templates/composer.d.ts +1 -1
  121. package/dist/context-engine/templates/composer.js.map +1 -1
  122. package/dist/context-engine/token-budget.d.ts +1 -1
  123. package/dist/context-engine/token-budget.js +1 -1
  124. package/dist/context-engine/token-budget.js.map +1 -1
  125. package/dist/context-engine/token-counter.d.ts +16 -7
  126. package/dist/context-engine/token-counter.d.ts.map +1 -1
  127. package/dist/context-engine/token-counter.js +31 -9
  128. package/dist/context-engine/token-counter.js.map +1 -1
  129. package/dist/errors/index.d.ts +2 -2
  130. package/dist/errors/index.js +4 -4
  131. package/dist/errors/index.js.map +1 -1
  132. package/dist/facade.d.ts +44 -15
  133. package/dist/facade.d.ts.map +1 -1
  134. package/dist/facade.js +16 -8
  135. package/dist/facade.js.map +1 -1
  136. package/dist/graph/entity-resolver.d.ts +2 -2
  137. package/dist/graph/entity-resolver.js +2 -2
  138. package/dist/graph/entity-resolver.js.map +1 -1
  139. package/dist/index.d.ts +9 -6
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +11 -5
  142. package/dist/index.js.map +1 -1
  143. package/dist/internal/contextualize.js +2 -2
  144. package/dist/internal/contextualize.js.map +1 -1
  145. package/dist/internal/embedder-binding.js +1 -1
  146. package/dist/internal/embedder-binding.js.map +1 -1
  147. package/dist/internal/id.js +1 -1
  148. package/dist/internal/id.js.map +1 -1
  149. package/dist/internal/injection-heuristics.js +25 -2
  150. package/dist/internal/injection-heuristics.js.map +1 -1
  151. package/dist/internal/spans.js +1 -1
  152. package/dist/internal/spans.js.map +1 -1
  153. package/dist/internal/storage-adapter.d.ts +71 -22
  154. package/dist/internal/storage-adapter.d.ts.map +1 -1
  155. package/dist/migration/embedder-migration.d.ts +7 -7
  156. package/dist/migration/embedder-migration.js.map +1 -1
  157. package/dist/package.js +6 -0
  158. package/dist/package.js.map +1 -0
  159. package/dist/search/explain.d.ts +7 -4
  160. package/dist/search/explain.d.ts.map +1 -1
  161. package/dist/search/explain.js +1 -1
  162. package/dist/search/explain.js.map +1 -1
  163. package/dist/search/fit-weights.d.ts +48 -0
  164. package/dist/search/fit-weights.d.ts.map +1 -0
  165. package/dist/search/fit-weights.js +70 -0
  166. package/dist/search/fit-weights.js.map +1 -0
  167. package/dist/search/graph-ppr.d.ts +36 -0
  168. package/dist/search/graph-ppr.d.ts.map +1 -0
  169. package/dist/search/graph-ppr.js +38 -0
  170. package/dist/search/graph-ppr.js.map +1 -0
  171. package/dist/search/index.d.ts +4 -1
  172. package/dist/search/index.js +4 -1
  173. package/dist/search/iterative.d.ts +15 -8
  174. package/dist/search/iterative.d.ts.map +1 -1
  175. package/dist/search/iterative.js +10 -9
  176. package/dist/search/iterative.js.map +1 -1
  177. package/dist/search/query-transform.d.ts +6 -6
  178. package/dist/search/query-transform.js +6 -6
  179. package/dist/search/query-transform.js.map +1 -1
  180. package/dist/search/rrf.d.ts +4 -4
  181. package/dist/search/rrf.js +4 -4
  182. package/dist/search/rrf.js.map +1 -1
  183. package/dist/search/trust.d.ts +30 -0
  184. package/dist/search/trust.d.ts.map +1 -0
  185. package/dist/search/trust.js +50 -0
  186. package/dist/search/trust.js.map +1 -0
  187. package/dist/search/types.d.ts +1 -1
  188. package/dist/tiers/episodic-memory.d.ts +6 -4
  189. package/dist/tiers/episodic-memory.d.ts.map +1 -1
  190. package/dist/tiers/episodic-memory.js +3 -2
  191. package/dist/tiers/episodic-memory.js.map +1 -1
  192. package/dist/tiers/index.d.ts +1 -1
  193. package/dist/tiers/index.js +1 -1
  194. package/dist/tiers/insight-memory.d.ts +4 -4
  195. package/dist/tiers/insight-memory.js +3 -3
  196. package/dist/tiers/insight-memory.js.map +1 -1
  197. package/dist/tiers/procedural-memory.d.ts +29 -7
  198. package/dist/tiers/procedural-memory.d.ts.map +1 -1
  199. package/dist/tiers/procedural-memory.js +66 -6
  200. package/dist/tiers/procedural-memory.js.map +1 -1
  201. package/dist/tiers/semantic-memory.d.ts +111 -30
  202. package/dist/tiers/semantic-memory.d.ts.map +1 -1
  203. package/dist/tiers/semantic-memory.js +120 -27
  204. package/dist/tiers/semantic-memory.js.map +1 -1
  205. package/dist/tiers/session-memory.d.ts +7 -7
  206. package/dist/tiers/session-memory.js +7 -7
  207. package/dist/tiers/session-memory.js.map +1 -1
  208. package/dist/tiers/shared-memory.d.ts +1 -1
  209. package/dist/tiers/shared-memory.js +1 -1
  210. package/dist/tiers/shared-memory.js.map +1 -1
  211. package/dist/tiers/working-memory.d.ts +3 -3
  212. package/dist/tiers/working-memory.js +2 -2
  213. package/dist/tiers/working-memory.js.map +1 -1
  214. package/dist/tools/block-tools.d.ts +3 -3
  215. package/dist/tools/block-tools.js +3 -3
  216. package/dist/tools/block-tools.js.map +1 -1
  217. package/dist/tools/fact-tools.d.ts +48 -31
  218. package/dist/tools/fact-tools.d.ts.map +1 -1
  219. package/dist/tools/fact-tools.js +30 -18
  220. package/dist/tools/fact-tools.js.map +1 -1
  221. package/dist/tools/index.d.ts +9 -2
  222. package/dist/tools/index.d.ts.map +1 -1
  223. package/dist/tools/index.js +4 -2
  224. package/dist/tools/index.js.map +1 -1
  225. package/dist/tools/recall-tools.d.ts +40 -20
  226. package/dist/tools/recall-tools.d.ts.map +1 -1
  227. package/dist/tools/recall-tools.js +29 -10
  228. package/dist/tools/recall-tools.js.map +1 -1
  229. package/dist/tools/runbook-tools.d.ts +76 -0
  230. package/dist/tools/runbook-tools.d.ts.map +1 -0
  231. package/dist/tools/runbook-tools.js +53 -0
  232. package/dist/tools/runbook-tools.js.map +1 -0
  233. package/dist/tools/taint.js +33 -0
  234. package/dist/tools/taint.js.map +1 -0
  235. package/dist/tools/types.d.ts +1 -1
  236. package/package.json +8 -8
@@ -0,0 +1,53 @@
1
+ import { tool } from "@graphorin/tools";
2
+ import { z } from "zod";
3
+
4
+ //#region src/tools/runbook-tools.ts
5
+ const runbookSearchInputSchema = z.object({
6
+ query: z.string().min(1).max(512),
7
+ topK: z.number().int().min(1).max(20).optional()
8
+ });
9
+ const runbookSearchOutputSchema = z.object({ procedures: z.array(z.object({
10
+ id: z.string(),
11
+ text: z.string(),
12
+ steps: z.array(z.string()).optional(),
13
+ variables: z.array(z.string()).optional(),
14
+ successCriteria: z.array(z.string()).optional(),
15
+ priority: z.number(),
16
+ score: z.number()
17
+ })) });
18
+ /**
19
+ * `runbook_search` - find validated procedures matching a task
20
+ * description. Quarantined (unvalidated induced) procedures never
21
+ * surface here: they must not drive actions until validated.
22
+ *
23
+ * @stable
24
+ */
25
+ function createRunbookSearchTool(deps) {
26
+ return tool({
27
+ name: "runbook_search",
28
+ description: "Find a stored, validated procedure (\"runbook\") matching the task at hand - e.g. \"deploy the docs site\" or \"rotate the API key\". Returns whole procedures with their numbered steps, variables, and success criteria so you can follow a known-good workflow instead of improvising. Use BEFORE attempting a multi-step operational task the user may have done with you previously.",
29
+ inputSchema: runbookSearchInputSchema,
30
+ outputSchema: runbookSearchOutputSchema,
31
+ sideEffectClass: "read-only",
32
+ sandboxPolicy: "none",
33
+ sensitivity: "internal",
34
+ memoryGuardTier: "pure",
35
+ tags: ["memory", "procedural"],
36
+ async execute(input, ctx) {
37
+ const scope = await deps.resolveScope(ctx);
38
+ return { procedures: (await deps.procedural.search(scope, input.query, { ...input.topK !== void 0 ? { topK: input.topK } : {} })).map((hit) => ({
39
+ id: hit.record.id,
40
+ text: hit.record.text,
41
+ ...hit.record.steps !== void 0 ? { steps: [...hit.record.steps] } : {},
42
+ ...hit.record.variables !== void 0 ? { variables: [...hit.record.variables] } : {},
43
+ ...hit.record.successCriteria !== void 0 ? { successCriteria: [...hit.record.successCriteria] } : {},
44
+ priority: hit.record.priority,
45
+ score: hit.score
46
+ })) };
47
+ }
48
+ });
49
+ }
50
+
51
+ //#endregion
52
+ export { createRunbookSearchTool };
53
+ //# sourceMappingURL=runbook-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runbook-tools.js","names":[],"sources":["../../src/tools/runbook-tools.ts"],"sourcesContent":["/**\n * Runbook tool (D3) - gated content recall over procedural memory.\n * `runbook_search` finds validated procedures whose text / steps match\n * a task description and returns them **whole** (title line, numbered\n * steps, variables, success criteria), so the model can follow a known\n * workflow file-style instead of re-deriving it. Registered only when\n * the facade opts in (`createMemory({ runbookSearch: true })`) - the\n * default tool surface is unchanged.\n *\n * @packageDocumentation\n */\n\nimport type { Tool } from '@graphorin/core';\nimport { tool } from '@graphorin/tools';\nimport { z } from 'zod';\nimport type { MemoryToolDeps } from './types.js';\n\nconst runbookSearchInputSchema = z.object({\n query: z.string().min(1).max(512),\n topK: z.number().int().min(1).max(20).optional(),\n});\nconst runbookSearchOutputSchema = z.object({\n procedures: z.array(\n z.object({\n id: z.string(),\n text: z.string(),\n steps: z.array(z.string()).optional(),\n variables: z.array(z.string()).optional(),\n successCriteria: z.array(z.string()).optional(),\n priority: z.number(),\n score: z.number(),\n }),\n ),\n});\n\ntype RunbookSearchInput = z.infer<typeof runbookSearchInputSchema>;\ntype RunbookSearchOutput = z.infer<typeof runbookSearchOutputSchema>;\n\n/**\n * `runbook_search` - find validated procedures matching a task\n * description. Quarantined (unvalidated induced) procedures never\n * surface here: they must not drive actions until validated.\n *\n * @stable\n */\nexport function createRunbookSearchTool(\n deps: MemoryToolDeps,\n): Tool<RunbookSearchInput, RunbookSearchOutput> {\n return tool<RunbookSearchInput, RunbookSearchOutput>({\n name: 'runbook_search',\n description:\n 'Find a stored, validated procedure (\"runbook\") matching the task at hand - e.g. \"deploy the docs site\" or \"rotate the API key\". Returns whole procedures with their numbered steps, variables, and success criteria so you can follow a known-good workflow instead of improvising. Use BEFORE attempting a multi-step operational task the user may have done with you previously.',\n inputSchema: runbookSearchInputSchema,\n outputSchema: runbookSearchOutputSchema,\n sideEffectClass: 'read-only',\n sandboxPolicy: 'none',\n sensitivity: 'internal',\n memoryGuardTier: 'pure',\n tags: ['memory', 'procedural'],\n async execute(input, ctx) {\n const scope = await deps.resolveScope(ctx);\n const hits = await deps.procedural.search(scope, input.query, {\n ...(input.topK !== undefined ? { topK: input.topK } : {}),\n });\n return {\n procedures: hits.map((hit) => ({\n id: hit.record.id,\n text: hit.record.text,\n ...(hit.record.steps !== undefined ? { steps: [...hit.record.steps] } : {}),\n ...(hit.record.variables !== undefined ? { variables: [...hit.record.variables] } : {}),\n ...(hit.record.successCriteria !== undefined\n ? { successCriteria: [...hit.record.successCriteria] }\n : {}),\n priority: hit.record.priority,\n score: hit.score,\n })),\n };\n },\n });\n}\n"],"mappings":";;;;AAiBA,MAAM,2BAA2B,EAAE,OAAO;CACxC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;CACjC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,UAAU;CACjD,CAAC;AACF,MAAM,4BAA4B,EAAE,OAAO,EACzC,YAAY,EAAE,MACZ,EAAE,OAAO;CACP,IAAI,EAAE,QAAQ;CACd,MAAM,EAAE,QAAQ;CAChB,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACrC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CACzC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;CAC/C,UAAU,EAAE,QAAQ;CACpB,OAAO,EAAE,QAAQ;CAClB,CAAC,CACH,EACF,CAAC;;;;;;;;AAYF,SAAgB,wBACd,MAC+C;AAC/C,QAAO,KAA8C;EACnD,MAAM;EACN,aACE;EACF,aAAa;EACb,cAAc;EACd,iBAAiB;EACjB,eAAe;EACf,aAAa;EACb,iBAAiB;EACjB,MAAM,CAAC,UAAU,aAAa;EAC9B,MAAM,QAAQ,OAAO,KAAK;GACxB,MAAM,QAAQ,MAAM,KAAK,aAAa,IAAI;AAI1C,UAAO,EACL,aAJW,MAAM,KAAK,WAAW,OAAO,OAAO,MAAM,OAAO,EAC5D,GAAI,MAAM,SAAS,SAAY,EAAE,MAAM,MAAM,MAAM,GAAG,EAAE,EACzD,CAAC,EAEiB,KAAK,SAAS;IAC7B,IAAI,IAAI,OAAO;IACf,MAAM,IAAI,OAAO;IACjB,GAAI,IAAI,OAAO,UAAU,SAAY,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,MAAM,EAAE,GAAG,EAAE;IAC1E,GAAI,IAAI,OAAO,cAAc,SAAY,EAAE,WAAW,CAAC,GAAG,IAAI,OAAO,UAAU,EAAE,GAAG,EAAE;IACtF,GAAI,IAAI,OAAO,oBAAoB,SAC/B,EAAE,iBAAiB,CAAC,GAAG,IAAI,OAAO,gBAAgB,EAAE,GACpD,EAAE;IACN,UAAU,IAAI,OAAO;IACrB,OAAO,IAAI;IACZ,EAAE,EACJ;;EAEJ,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { isForeignProvenance } from "../search/trust.js";
2
+
3
+ //#region src/tools/taint.ts
4
+ /**
5
+ * C6: taint override for memory-recall tool results. The recall tools are
6
+ * first-party (`sideEffectClass: 'read-only'`), so the data-flow ledger
7
+ * would derive their outputs as trusted - but the CONTENT they return can
8
+ * be quarantined or foreign-provenance memory written in an earlier
9
+ * session (the cross-session poisoning leg). This helper computes the
10
+ * `ToolReturn.taint` override that re-arms the ledger at recall: recalled
11
+ * poisoned content is recorded as untrusted spans, so the verbatim probe
12
+ * and the trifecta/derived gates see it exactly like fresh untrusted
13
+ * input.
14
+ *
15
+ * @packageDocumentation
16
+ */
17
+ /**
18
+ * Compute the taint override for a recalled item set: untrusted when ANY
19
+ * item is quarantined or foreign-provenance; `undefined` when all items
20
+ * are first-party active (the common case - zero overhead, no override).
21
+ *
22
+ * @stable
23
+ */
24
+ function recallTaint(items) {
25
+ for (const item of items) if (item.status === "quarantined" || isForeignProvenance(item.provenance)) return {
26
+ untrusted: true,
27
+ sourceKind: "memory-recall"
28
+ };
29
+ }
30
+
31
+ //#endregion
32
+ export { recallTaint };
33
+ //# sourceMappingURL=taint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taint.js","names":[],"sources":["../../src/tools/taint.ts"],"sourcesContent":["/**\n * C6: taint override for memory-recall tool results. The recall tools are\n * first-party (`sideEffectClass: 'read-only'`), so the data-flow ledger\n * would derive their outputs as trusted - but the CONTENT they return can\n * be quarantined or foreign-provenance memory written in an earlier\n * session (the cross-session poisoning leg). This helper computes the\n * `ToolReturn.taint` override that re-arms the ledger at recall: recalled\n * poisoned content is recorded as untrusted spans, so the verbatim probe\n * and the trifecta/derived gates see it exactly like fresh untrusted\n * input.\n *\n * @packageDocumentation\n */\n\nimport { isForeignProvenance } from '../search/trust.js';\n\n/** Minimal record surface the helper inspects. */\nexport interface RecalledItemLike {\n readonly provenance?: string | null;\n readonly status?: string;\n}\n\n/**\n * Compute the taint override for a recalled item set: untrusted when ANY\n * item is quarantined or foreign-provenance; `undefined` when all items\n * are first-party active (the common case - zero overhead, no override).\n *\n * @stable\n */\nexport function recallTaint(\n items: ReadonlyArray<RecalledItemLike>,\n): { readonly untrusted: true; readonly sourceKind: 'memory-recall' } | undefined {\n for (const item of items) {\n if (item.status === 'quarantined' || isForeignProvenance(item.provenance)) {\n return { untrusted: true, sourceKind: 'memory-recall' };\n }\n }\n return undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,YACd,OACgF;AAChF,MAAK,MAAM,QAAQ,MACjB,KAAI,KAAK,WAAW,iBAAiB,oBAAoB,KAAK,WAAW,CACvE,QAAO;EAAE,WAAW;EAAM,YAAY;EAAiB"}
@@ -1,9 +1,9 @@
1
1
  import { EpisodicMemory } from "../tiers/episodic-memory.js";
2
2
  import { SemanticMemory } from "../tiers/semantic-memory.js";
3
+ import { WorkingMemory } from "../tiers/working-memory.js";
3
4
  import { ProceduralMemory } from "../tiers/procedural-memory.js";
4
5
  import { SessionMemory } from "../tiers/session-memory.js";
5
6
  import { SharedMemory } from "../tiers/shared-memory.js";
6
- import { WorkingMemory } from "../tiers/working-memory.js";
7
7
  import * as _graphorin_core0 from "@graphorin/core";
8
8
  import { SessionScope } from "@graphorin/core";
9
9
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@graphorin/memory",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "Six-tier memory system for the Graphorin framework: createMemory() facade with working / session / episodic / semantic / procedural / shared sub-modules, eleven memory tools wired into @graphorin/tools, hybrid vector + FTS5 search composed through Reciprocal Rank Fusion (k=60 default) with a pluggable reranker hook, a multi-stage conflict resolution pipeline (exact dedup → embedding three-zone → heuristic regex → subject/predicate → defer-to-deep) with an English locale pack default + plug-in locales, an embedder migration runner with three coexistence policies (lock-on-first / multi-active / auto-migrate), per-record embedder_id enforcement, multi-agent attribution, append-only writes with soft-delete + supersede semantics, default-on bi-temporal storage, provenance + quarantine safety gate for synthesized memory, AISpan emission for every operation, and tier-aware memory-modification guard wiring.",
5
5
  "license": "MIT",
6
6
  "author": "Oleksiy Stepurenko",
@@ -83,10 +83,10 @@
83
83
  "LICENSE"
84
84
  ],
85
85
  "dependencies": {
86
- "@graphorin/core": "0.5.0",
87
- "@graphorin/observability": "0.5.0",
88
- "@graphorin/security": "0.5.0",
89
- "@graphorin/tools": "0.5.0"
86
+ "@graphorin/core": "0.6.1",
87
+ "@graphorin/observability": "0.6.1",
88
+ "@graphorin/security": "0.6.1",
89
+ "@graphorin/tools": "0.6.1"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "zod": "^3.23.0 || ^4.0.0"
@@ -105,9 +105,9 @@
105
105
  "better-sqlite3": "^12.9.0",
106
106
  "fast-check": "^3.23.0",
107
107
  "zod": "^3.25.0",
108
- "@graphorin/store-sqlite": "0.5.0",
109
- "@graphorin/embedder-transformersjs": "0.5.0",
110
- "@graphorin/triggers": "0.5.0"
108
+ "@graphorin/store-sqlite": "0.6.1",
109
+ "@graphorin/embedder-transformersjs": "0.6.1",
110
+ "@graphorin/triggers": "0.6.1"
111
111
  },
112
112
  "scripts": {
113
113
  "build": "tsdown",