@polpo-ai/core 0.15.41 → 0.15.43

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 (108) hide show
  1. package/README.md +54 -0
  2. package/dist/__tests__/memory-store-policy.test.d.ts +2 -0
  3. package/dist/__tests__/memory-store-policy.test.d.ts.map +1 -0
  4. package/dist/__tests__/memory-store-policy.test.js +141 -0
  5. package/dist/__tests__/memory-store-policy.test.js.map +1 -0
  6. package/dist/__tests__/typed-memory.test.d.ts +2 -0
  7. package/dist/__tests__/typed-memory.test.d.ts.map +1 -0
  8. package/dist/__tests__/typed-memory.test.js +226 -0
  9. package/dist/__tests__/typed-memory.test.js.map +1 -0
  10. package/dist/adapter.d.ts +3 -0
  11. package/dist/adapter.d.ts.map +1 -1
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/memory/compatibility.d.ts +3 -0
  17. package/dist/memory/compatibility.d.ts.map +1 -0
  18. package/dist/memory/compatibility.js +27 -0
  19. package/dist/memory/compatibility.js.map +1 -0
  20. package/dist/memory/dedupe.d.ts +4 -0
  21. package/dist/memory/dedupe.d.ts.map +1 -0
  22. package/dist/memory/dedupe.js +21 -0
  23. package/dist/memory/dedupe.js.map +1 -0
  24. package/dist/memory/errors.d.ts +7 -0
  25. package/dist/memory/errors.d.ts.map +1 -0
  26. package/dist/memory/errors.js +11 -0
  27. package/dist/memory/errors.js.map +1 -0
  28. package/dist/memory/extraction.d.ts +124 -0
  29. package/dist/memory/extraction.d.ts.map +1 -0
  30. package/dist/memory/extraction.js +450 -0
  31. package/dist/memory/extraction.js.map +1 -0
  32. package/dist/memory/extraction.test.d.ts +2 -0
  33. package/dist/memory/extraction.test.d.ts.map +1 -0
  34. package/dist/memory/extraction.test.js +366 -0
  35. package/dist/memory/extraction.test.js.map +1 -0
  36. package/dist/memory/in-memory-extraction-store.d.ts +30 -0
  37. package/dist/memory/in-memory-extraction-store.d.ts.map +1 -0
  38. package/dist/memory/in-memory-extraction-store.js +363 -0
  39. package/dist/memory/in-memory-extraction-store.js.map +1 -0
  40. package/dist/memory/in-memory-store.d.ts +25 -0
  41. package/dist/memory/in-memory-store.d.ts.map +1 -0
  42. package/dist/memory/in-memory-store.js +434 -0
  43. package/dist/memory/in-memory-store.js.map +1 -0
  44. package/dist/memory/index.d.ts +20 -0
  45. package/dist/memory/index.d.ts.map +1 -0
  46. package/dist/memory/index.js +14 -0
  47. package/dist/memory/index.js.map +1 -0
  48. package/dist/memory/item.d.ts +6 -0
  49. package/dist/memory/item.d.ts.map +1 -0
  50. package/dist/memory/item.js +169 -0
  51. package/dist/memory/item.js.map +1 -0
  52. package/dist/memory/lifecycle.d.ts +5 -0
  53. package/dist/memory/lifecycle.d.ts.map +1 -0
  54. package/dist/memory/lifecycle.js +32 -0
  55. package/dist/memory/lifecycle.js.map +1 -0
  56. package/dist/memory/policy.d.ts +27 -0
  57. package/dist/memory/policy.d.ts.map +1 -0
  58. package/dist/memory/policy.js +114 -0
  59. package/dist/memory/policy.js.map +1 -0
  60. package/dist/memory/ranking.d.ts +9 -0
  61. package/dist/memory/ranking.d.ts.map +1 -0
  62. package/dist/memory/ranking.js +65 -0
  63. package/dist/memory/ranking.js.map +1 -0
  64. package/dist/memory/scope.d.ts +5 -0
  65. package/dist/memory/scope.d.ts.map +1 -0
  66. package/dist/memory/scope.js +68 -0
  67. package/dist/memory/scope.js.map +1 -0
  68. package/dist/memory/store-errors.d.ts +10 -0
  69. package/dist/memory/store-errors.d.ts.map +1 -0
  70. package/dist/memory/store-errors.js +19 -0
  71. package/dist/memory/store-errors.js.map +1 -0
  72. package/dist/memory/store-types.d.ts +97 -0
  73. package/dist/memory/store-types.d.ts.map +1 -0
  74. package/dist/memory/store-types.js +2 -0
  75. package/dist/memory/store-types.js.map +1 -0
  76. package/dist/memory/types.d.ts +70 -0
  77. package/dist/memory/types.d.ts.map +1 -0
  78. package/dist/memory/types.js +32 -0
  79. package/dist/memory/types.js.map +1 -0
  80. package/dist/orchestrator-context.d.ts +6 -0
  81. package/dist/orchestrator-context.d.ts.map +1 -1
  82. package/dist/runtime-context/index.d.ts +5 -0
  83. package/dist/runtime-context/index.d.ts.map +1 -0
  84. package/dist/runtime-context/index.js +4 -0
  85. package/dist/runtime-context/index.js.map +1 -0
  86. package/dist/runtime-context/memory-retriever.d.ts +14 -0
  87. package/dist/runtime-context/memory-retriever.d.ts.map +1 -0
  88. package/dist/runtime-context/memory-retriever.js +76 -0
  89. package/dist/runtime-context/memory-retriever.js.map +1 -0
  90. package/dist/runtime-context/runtime-context.d.ts +4 -0
  91. package/dist/runtime-context/runtime-context.d.ts.map +1 -0
  92. package/dist/runtime-context/runtime-context.js +311 -0
  93. package/dist/runtime-context/runtime-context.js.map +1 -0
  94. package/dist/runtime-context/runtime-context.test.d.ts +2 -0
  95. package/dist/runtime-context/runtime-context.test.d.ts.map +1 -0
  96. package/dist/runtime-context/runtime-context.test.js +282 -0
  97. package/dist/runtime-context/runtime-context.test.js.map +1 -0
  98. package/dist/runtime-context/types.d.ts +75 -0
  99. package/dist/runtime-context/types.d.ts.map +1 -0
  100. package/dist/runtime-context/types.js +8 -0
  101. package/dist/runtime-context/types.js.map +1 -0
  102. package/dist/task-runner.d.ts.map +1 -1
  103. package/dist/task-runner.js +16 -0
  104. package/dist/task-runner.js.map +1 -1
  105. package/dist/types/config.d.ts +6 -0
  106. package/dist/types/config.d.ts.map +1 -1
  107. package/dist/types/config.js.map +1 -1
  108. package/package.json +9 -1
@@ -0,0 +1,169 @@
1
+ import { nanoid } from "nanoid";
2
+ import { MemoryContractError } from "./errors.js";
3
+ import { normalizeMemoryScope } from "./scope.js";
4
+ import { MEMORY_KINDS, MEMORY_PROVENANCE_SOURCES, MEMORY_STATUSES, } from "./types.js";
5
+ export const MAX_MEMORY_CONTENT_CHARACTERS = 32_000;
6
+ export const MAX_MEMORY_SUMMARY_CHARACTERS = 1_000;
7
+ const kinds = new Set(MEMORY_KINDS);
8
+ const statuses = new Set(MEMORY_STATUSES);
9
+ const provenanceSources = new Set(MEMORY_PROVENANCE_SOURCES);
10
+ const provenanceActors = new Set(["user", "agent", "system"]);
11
+ function text(value, path, max, required = true) {
12
+ if (value === undefined && !required)
13
+ return undefined;
14
+ if (typeof value !== "string") {
15
+ throw new MemoryContractError(`${path} must be a string`, "invalid_item", path);
16
+ }
17
+ const normalized = value.trim();
18
+ if ((required && normalized.length === 0)
19
+ || normalized.length > max) {
20
+ throw new MemoryContractError(`${path} must contain ${required ? "between 1 and" : "at most"} ${max} characters`, "invalid_item", path);
21
+ }
22
+ return normalized || undefined;
23
+ }
24
+ function isoTimestamp(value, path) {
25
+ if (!(typeof value === "string" || value instanceof Date)) {
26
+ throw new MemoryContractError(`${path} must be a valid timestamp`, "invalid_item", path);
27
+ }
28
+ const date = value instanceof Date ? value : new Date(value);
29
+ if (!Number.isFinite(date.getTime())) {
30
+ throw new MemoryContractError(`${path} must be a valid timestamp`, "invalid_item", path);
31
+ }
32
+ return date.toISOString();
33
+ }
34
+ function optionalReference(value, path) {
35
+ return text(value, path, 512, false);
36
+ }
37
+ function normalizeProvenance(value) {
38
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
39
+ throw new MemoryContractError("Memory provenance must be an object", "invalid_provenance", "provenance");
40
+ }
41
+ const candidate = value;
42
+ if (typeof candidate.source !== "string"
43
+ || !provenanceSources.has(candidate.source)) {
44
+ throw new MemoryContractError(`Unknown Memory provenance source: ${String(candidate.source)}`, "invalid_provenance", "provenance.source");
45
+ }
46
+ const source = candidate.source;
47
+ let actor;
48
+ if (candidate.actor !== undefined) {
49
+ if (typeof candidate.actor !== "string"
50
+ || !provenanceActors.has(candidate.actor)) {
51
+ throw new MemoryContractError(`Unknown Memory provenance actor: ${String(candidate.actor)}`, "invalid_provenance", "provenance.actor");
52
+ }
53
+ actor = candidate.actor;
54
+ }
55
+ const sourceId = optionalReference(candidate.sourceId, "provenance.sourceId");
56
+ const runId = optionalReference(candidate.runId, "provenance.runId");
57
+ const sessionId = optionalReference(candidate.sessionId, "provenance.sessionId");
58
+ const messageId = optionalReference(candidate.messageId, "provenance.messageId");
59
+ const toolName = optionalReference(candidate.toolName, "provenance.toolName");
60
+ const provenance = {
61
+ source,
62
+ ...(actor ? { actor } : {}),
63
+ ...(sourceId ? { sourceId } : {}),
64
+ ...(runId ? { runId } : {}),
65
+ ...(sessionId ? { sessionId } : {}),
66
+ ...(messageId ? { messageId } : {}),
67
+ ...(toolName ? { toolName } : {}),
68
+ };
69
+ const hasReference = Boolean(provenance.sourceId
70
+ || provenance.runId
71
+ || provenance.sessionId
72
+ || provenance.messageId
73
+ || provenance.toolName);
74
+ if (source === "explicit" && !provenance.actor) {
75
+ throw new MemoryContractError("Explicit Memory provenance requires an actor", "invalid_provenance", "provenance.actor");
76
+ }
77
+ if (source === "run" && !provenance.runId) {
78
+ throw new MemoryContractError("Run Memory provenance requires runId", "invalid_provenance", "provenance.runId");
79
+ }
80
+ if (source === "session" && !provenance.sessionId) {
81
+ throw new MemoryContractError("Session Memory provenance requires sessionId", "invalid_provenance", "provenance.sessionId");
82
+ }
83
+ if (source === "tool" && !provenance.toolName) {
84
+ throw new MemoryContractError("Tool Memory provenance requires toolName", "invalid_provenance", "provenance.toolName");
85
+ }
86
+ if ((source === "import" || source === "extraction") && !hasReference) {
87
+ throw new MemoryContractError(`${source} Memory provenance requires a source reference`, "invalid_provenance", "provenance");
88
+ }
89
+ return Object.freeze(provenance);
90
+ }
91
+ function normalizeConfidence(value) {
92
+ if (value === undefined)
93
+ return undefined;
94
+ if (typeof value !== "number"
95
+ || !Number.isFinite(value)
96
+ || value < 0
97
+ || value > 1) {
98
+ throw new MemoryContractError("Memory confidence must be a finite number between 0 and 1", "invalid_item", "confidence");
99
+ }
100
+ return value;
101
+ }
102
+ function normalizeKind(value) {
103
+ if (typeof value !== "string" || !kinds.has(value)) {
104
+ throw new MemoryContractError(`Unknown Memory kind: ${String(value)}`, "invalid_item", "kind");
105
+ }
106
+ return value;
107
+ }
108
+ function normalizeStatus(value) {
109
+ if (typeof value !== "string" || !statuses.has(value)) {
110
+ throw new MemoryContractError(`Unknown Memory status: ${String(value)}`, "invalid_item", "status");
111
+ }
112
+ return value;
113
+ }
114
+ function freezeItem(input) {
115
+ const createdAt = isoTimestamp(input.createdAt, "createdAt");
116
+ const updatedAt = isoTimestamp(input.updatedAt, "updatedAt");
117
+ if (Date.parse(updatedAt) < Date.parse(createdAt)) {
118
+ throw new MemoryContractError("Memory updatedAt cannot precede createdAt", "invalid_item", "updatedAt");
119
+ }
120
+ const confidence = normalizeConfidence(input.confidence);
121
+ const summary = text(input.summary, "summary", MAX_MEMORY_SUMMARY_CHARACTERS, false);
122
+ const expiresAt = input.expiresAt === undefined
123
+ ? undefined
124
+ : isoTimestamp(input.expiresAt, "expiresAt");
125
+ return Object.freeze({
126
+ id: text(input.id, "id", 256),
127
+ scope: normalizeMemoryScope(input.scope),
128
+ kind: normalizeKind(input.kind),
129
+ content: text(input.content, "content", MAX_MEMORY_CONTENT_CHARACTERS),
130
+ ...(summary ? { summary } : {}),
131
+ provenance: normalizeProvenance(input.provenance),
132
+ ...(confidence === undefined ? {} : { confidence }),
133
+ status: normalizeStatus(input.status),
134
+ ...(expiresAt ? { expiresAt } : {}),
135
+ createdAt,
136
+ updatedAt,
137
+ });
138
+ }
139
+ export function createMemoryItem(input, factory = {}) {
140
+ if (!input || typeof input !== "object") {
141
+ throw new MemoryContractError("Memory item input must be an object");
142
+ }
143
+ const status = input.status ?? "active";
144
+ if (status !== "active" && status !== "pending") {
145
+ throw new MemoryContractError("New Memory items may only be active or pending", "invalid_item", "status");
146
+ }
147
+ const nowValue = factory.now?.() ?? new Date();
148
+ const now = isoTimestamp(nowValue, "now");
149
+ return freezeItem({
150
+ id: input.id ?? factory.createId?.() ?? `memory-${nanoid(16)}`,
151
+ scope: input.scope,
152
+ kind: input.kind,
153
+ content: input.content,
154
+ summary: input.summary,
155
+ provenance: input.provenance,
156
+ confidence: input.confidence,
157
+ status,
158
+ expiresAt: input.expiresAt,
159
+ createdAt: now,
160
+ updatedAt: now,
161
+ });
162
+ }
163
+ export function normalizeMemoryItem(value) {
164
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
165
+ throw new MemoryContractError("Memory item must be an object");
166
+ }
167
+ return freezeItem(value);
168
+ }
169
+ //# sourceMappingURL=item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../src/memory/item.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { MemoryItem, MemoryStatus } from "./types.js";
2
+ export declare function assertMemoryStatusTransition(from: MemoryStatus, to: MemoryStatus): void;
3
+ export declare function isMemoryItemExpired(item: Pick<MemoryItem, "expiresAt">, now?: Date | string): boolean;
4
+ export declare function isMemoryItemRetrievable(item: Pick<MemoryItem, "status" | "expiresAt">, now?: Date | string): boolean;
5
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAS3D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,YAAY,GACf,IAAI,CAQN;AAcD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,EACnC,GAAG,GAAE,IAAI,GAAG,MAAmB,GAC9B,OAAO,CAWT;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,WAAW,CAAC,EAC9C,GAAG,GAAE,IAAI,GAAG,MAAmB,GAC9B,OAAO,CAET"}
@@ -0,0 +1,32 @@
1
+ import { MemoryContractError } from "./errors.js";
2
+ const allowedTransitions = {
3
+ pending: new Set(["pending", "active", "deleted"]),
4
+ active: new Set(["active", "superseded", "deleted"]),
5
+ superseded: new Set(["superseded", "deleted"]),
6
+ deleted: new Set(["deleted"]),
7
+ };
8
+ export function assertMemoryStatusTransition(from, to) {
9
+ if (!allowedTransitions[from]?.has(to)) {
10
+ throw new MemoryContractError(`Invalid Memory status transition: ${String(from)} -> ${String(to)}`, "invalid_transition", "status");
11
+ }
12
+ }
13
+ function timestamp(value) {
14
+ const time = value instanceof Date ? value.getTime() : Date.parse(value);
15
+ if (!Number.isFinite(time)) {
16
+ throw new MemoryContractError("Memory comparison time must be a valid date", "invalid_item", "now");
17
+ }
18
+ return time;
19
+ }
20
+ export function isMemoryItemExpired(item, now = new Date()) {
21
+ if (!item.expiresAt)
22
+ return false;
23
+ const expiresAt = Date.parse(item.expiresAt);
24
+ if (!Number.isFinite(expiresAt)) {
25
+ throw new MemoryContractError("Memory expiresAt must be a valid date", "invalid_item", "expiresAt");
26
+ }
27
+ return expiresAt <= timestamp(now);
28
+ }
29
+ export function isMemoryItemRetrievable(item, now = new Date()) {
30
+ return item.status === "active" && !isMemoryItemExpired(item, now);
31
+ }
32
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/memory/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,kBAAkB,GAA8D;IACpF,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACpD,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC1C,IAAkB,EAClB,EAAgB;IAEhB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,mBAAmB,CAC3B,qCAAqC,MAAM,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,EACpE,oBAAoB,EACpB,QAAQ,CACT,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAoB;IACrC,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,mBAAmB,CAC3B,6CAA6C,EAC7C,cAAc,EACd,KAAK,CACN,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAmC,EACnC,MAAqB,IAAI,IAAI,EAAE;IAE/B,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,mBAAmB,CAC3B,uCAAuC,EACvC,cAAc,EACd,WAAW,CACZ,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,IAA8C,EAC9C,MAAqB,IAAI,IAAI,EAAE;IAE/B,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { MemoryItem, MemoryKind, MemoryScopeKind } from "./types.js";
2
+ import type { MemoryStoreContext } from "./store-types.js";
3
+ export interface MemorySensitiveContentFinding {
4
+ readonly code: string;
5
+ readonly start: number;
6
+ readonly length: number;
7
+ }
8
+ export type MemorySensitiveContentHook = (content: string) => readonly MemorySensitiveContentFinding[] | Promise<readonly MemorySensitiveContentFinding[]>;
9
+ export interface MemoryWritePolicy {
10
+ readonly allowedScopeKinds?: readonly MemoryScopeKind[];
11
+ readonly allowedKinds?: readonly MemoryKind[];
12
+ readonly allowSensitiveContent?: boolean;
13
+ readonly allowPublicChannelBroadScopeWrites?: boolean;
14
+ readonly sensitiveContentHook?: MemorySensitiveContentHook;
15
+ }
16
+ export interface MemoryPolicyViolation {
17
+ readonly code: "unauthorized_scope" | "scope_kind_denied" | "memory_kind_denied" | "public_channel_broad_scope" | "sensitive_content";
18
+ readonly message: string;
19
+ readonly findingCodes?: readonly string[];
20
+ }
21
+ export interface MemoryWriteDecision {
22
+ readonly allowed: boolean;
23
+ readonly violations: readonly MemoryPolicyViolation[];
24
+ }
25
+ export declare function detectSensitiveMemoryContent(content: string): MemorySensitiveContentFinding[];
26
+ export declare function evaluateMemoryWrite(item: MemoryItem, context: MemoryStoreContext, policy?: MemoryWritePolicy): Promise<MemoryWriteDecision>;
27
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/memory/policy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,MAAM,KAEb,SAAS,6BAA6B,EAAE,GACxC,OAAO,CAAC,SAAS,6BAA6B,EAAE,CAAC,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACxD,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,OAAO,CAAC;IACtD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CAC5D;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EACT,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,4BAA4B,GAC5B,mBAAmB,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACvD;AAgDD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,GACd,6BAA6B,EAAE,CAejC;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,kBAAkB,EAC3B,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAqE9B"}
@@ -0,0 +1,114 @@
1
+ import { canAccessMemoryScope } from "./scope.js";
2
+ import { MemoryPolicyError } from "./store-errors.js";
3
+ const SENSITIVE_PATTERNS = [
4
+ {
5
+ code: "private_key",
6
+ expression: /-----BEGIN (?:[A-Z0-9 ]+ )?PRIVATE KEY-----/gu,
7
+ },
8
+ {
9
+ code: "bearer_token",
10
+ expression: /\bBearer\s+[A-Za-z0-9._~+/=-]{16,}/giu,
11
+ },
12
+ {
13
+ code: "credential_assignment",
14
+ expression: /\b(?:api[_-]?key|access[_-]?token|password|secret|client[_-]?secret)\s*[:=]\s*["']?[^\s"',;]{12,}/giu,
15
+ },
16
+ {
17
+ code: "known_token_prefix",
18
+ expression: /\b(?:sk[-_]|ghp_|github_pat_|xox[baprs]-|AKIA)[A-Za-z0-9_=-]{16,}\b/gu,
19
+ },
20
+ ];
21
+ const BROAD_SCOPE_KINDS = new Set([
22
+ "org",
23
+ "project",
24
+ "agent",
25
+ ]);
26
+ function normalizeFinding(finding) {
27
+ const code = typeof finding.code === "string"
28
+ && /^[a-z0-9][a-z0-9_-]{0,63}$/u.test(finding.code)
29
+ ? finding.code
30
+ : "custom_sensitive_content";
31
+ const start = Number.isInteger(finding.start) && finding.start >= 0
32
+ ? finding.start
33
+ : 0;
34
+ const length = Number.isInteger(finding.length) && finding.length >= 0
35
+ ? finding.length
36
+ : 0;
37
+ return Object.freeze({ code, start, length });
38
+ }
39
+ export function detectSensitiveMemoryContent(content) {
40
+ const findings = [];
41
+ for (const pattern of SENSITIVE_PATTERNS) {
42
+ for (const match of content.matchAll(pattern.expression)) {
43
+ findings.push(Object.freeze({
44
+ code: pattern.code,
45
+ start: match.index,
46
+ length: match[0].length,
47
+ }));
48
+ }
49
+ }
50
+ return findings.sort((left, right) => (left.start - right.start
51
+ || left.code.localeCompare(right.code)));
52
+ }
53
+ export async function evaluateMemoryWrite(item, context, policy = {}) {
54
+ const violations = [];
55
+ if (!canAccessMemoryScope(item.scope, context.access)) {
56
+ violations.push({
57
+ code: "unauthorized_scope",
58
+ message: "The caller cannot write this Memory scope.",
59
+ });
60
+ }
61
+ if (policy.allowedScopeKinds
62
+ && !policy.allowedScopeKinds.includes(item.scope.kind)) {
63
+ violations.push({
64
+ code: "scope_kind_denied",
65
+ message: `Memory scope kind "${item.scope.kind}" is denied by policy.`,
66
+ });
67
+ }
68
+ if (policy.allowedKinds && !policy.allowedKinds.includes(item.kind)) {
69
+ violations.push({
70
+ code: "memory_kind_denied",
71
+ message: `Memory kind "${item.kind}" is denied by policy.`,
72
+ });
73
+ }
74
+ if (context.surface === "channel"
75
+ && context.channelVisibility === "public"
76
+ && BROAD_SCOPE_KINDS.has(item.scope.kind)
77
+ && !policy.allowPublicChannelBroadScopeWrites) {
78
+ violations.push({
79
+ code: "public_channel_broad_scope",
80
+ message: "Public channels cannot write broad Memory scopes.",
81
+ });
82
+ }
83
+ if (!policy.allowSensitiveContent) {
84
+ const values = [
85
+ item.content,
86
+ ...(item.summary ? [item.summary] : []),
87
+ ];
88
+ const findings = [];
89
+ for (const value of values) {
90
+ findings.push(...detectSensitiveMemoryContent(value));
91
+ if (policy.sensitiveContentHook) {
92
+ try {
93
+ const custom = await policy.sensitiveContentHook(value);
94
+ findings.push(...custom.map(normalizeFinding));
95
+ }
96
+ catch (error) {
97
+ throw new MemoryPolicyError("Memory sensitive-content policy failed closed", { cause: error });
98
+ }
99
+ }
100
+ }
101
+ if (findings.length > 0) {
102
+ violations.push({
103
+ code: "sensitive_content",
104
+ message: "Memory content contains sensitive credential material.",
105
+ findingCodes: [...new Set(findings.map((finding) => finding.code))],
106
+ });
107
+ }
108
+ }
109
+ return Object.freeze({
110
+ allowed: violations.length === 0,
111
+ violations: Object.freeze(violations),
112
+ });
113
+ }
114
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/memory/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { MemoryItem } from "./types.js";
2
+ import type { MemorySearchResult } from "./store-types.js";
3
+ export declare function estimateMemoryItemTokens(item: MemoryItem): number;
4
+ export declare function rankMemoryItems(items: readonly MemoryItem[], query: string): MemorySearchResult[];
5
+ export declare function selectMemoryResultsWithinBudget(results: readonly MemorySearchResult[], options: {
6
+ readonly tokenBudget: number;
7
+ readonly maxResults?: number;
8
+ }): MemorySearchResult[];
9
+ //# sourceMappingURL=ranking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.d.ts","sourceRoot":"","sources":["../../src/memory/ranking.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAa3D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAGjE;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAqCtB;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,OAAO,EAAE;IACP,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GACA,kBAAkB,EAAE,CA6BtB"}
@@ -0,0 +1,65 @@
1
+ import { MemoryContractError } from "./errors.js";
2
+ const TOKEN_PATTERN = /[\p{L}\p{N}]+/gu;
3
+ function terms(value) {
4
+ return [
5
+ ...new Set((value.normalize("NFKC").toLowerCase().match(TOKEN_PATTERN) ?? [])
6
+ .filter(Boolean)),
7
+ ];
8
+ }
9
+ export function estimateMemoryItemTokens(item) {
10
+ const characters = item.content.length + (item.summary?.length ?? 0);
11
+ return Math.max(1, Math.ceil(characters / 4));
12
+ }
13
+ export function rankMemoryItems(items, query) {
14
+ const queryTerms = terms(query);
15
+ if (queryTerms.length === 0) {
16
+ throw new MemoryContractError("Memory search query must contain searchable terms", "invalid_item", "query");
17
+ }
18
+ const normalizedQuery = query.normalize("NFKC").trim().toLowerCase();
19
+ return items
20
+ .map((item) => {
21
+ const searchable = `${item.summary ?? ""}\n${item.content}`
22
+ .normalize("NFKC")
23
+ .toLowerCase();
24
+ const searchableTerms = new Set(terms(searchable));
25
+ const matchedTerms = queryTerms.filter((term) => searchableTerms.has(term));
26
+ if (matchedTerms.length === 0)
27
+ return undefined;
28
+ const coverage = matchedTerms.length / queryTerms.length;
29
+ const density = matchedTerms.length / Math.max(1, searchableTerms.size);
30
+ const exactPhrase = searchable.includes(normalizedQuery) ? 1 : 0;
31
+ const score = exactPhrase * 2 + coverage + density;
32
+ return Object.freeze({
33
+ item,
34
+ score,
35
+ matchedTerms: Object.freeze(matchedTerms),
36
+ estimatedTokens: estimateMemoryItemTokens(item),
37
+ });
38
+ })
39
+ .filter((result) => result !== undefined)
40
+ .sort((left, right) => (right.score - left.score
41
+ || right.item.updatedAt.localeCompare(left.item.updatedAt)
42
+ || left.item.id.localeCompare(right.item.id)));
43
+ }
44
+ export function selectMemoryResultsWithinBudget(results, options) {
45
+ if (!Number.isInteger(options.tokenBudget)
46
+ || options.tokenBudget < 0) {
47
+ throw new MemoryContractError("Memory token budget must be a non-negative integer", "invalid_item", "tokenBudget");
48
+ }
49
+ const maxResults = options.maxResults ?? results.length;
50
+ if (!Number.isInteger(maxResults) || maxResults < 0) {
51
+ throw new MemoryContractError("Memory maxResults must be a non-negative integer", "invalid_item", "maxResults");
52
+ }
53
+ const selected = [];
54
+ let usedTokens = 0;
55
+ for (const result of results) {
56
+ if (selected.length >= maxResults)
57
+ break;
58
+ if (usedTokens + result.estimatedTokens > options.tokenBudget)
59
+ continue;
60
+ selected.push(result);
61
+ usedTokens += result.estimatedTokens;
62
+ }
63
+ return selected;
64
+ }
65
+ //# sourceMappingURL=ranking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../src/memory/ranking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type MemoryScope, type MemoryScopeAccess } from "./types.js";
2
+ export declare function normalizeMemoryScope(value: unknown): MemoryScope;
3
+ export declare function memoryScopeKey(scope: MemoryScope): string;
4
+ export declare function canAccessMemoryScope(scope: MemoryScope, access: MemoryScopeAccess): boolean;
5
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/memory/scope.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EAEvB,MAAM,YAAY,CAAC;AA6BpB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CA0ChE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAOzD;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAsBT"}
@@ -0,0 +1,68 @@
1
+ import { MemoryContractError } from "./errors.js";
2
+ import { MEMORY_SCOPE_KINDS, } from "./types.js";
3
+ const scopeKinds = new Set(MEMORY_SCOPE_KINDS);
4
+ const MAX_SCOPE_IDENTIFIER_CHARACTERS = 512;
5
+ const MAX_AGENT_NAME_CHARACTERS = 128;
6
+ function requiredIdentifier(value, path, max = MAX_SCOPE_IDENTIFIER_CHARACTERS) {
7
+ if (typeof value !== "string") {
8
+ throw new MemoryContractError(`${path} must be a non-empty string`, "invalid_scope", path);
9
+ }
10
+ const normalized = value.trim();
11
+ if (normalized.length === 0 || normalized.length > max) {
12
+ throw new MemoryContractError(`${path} must contain between 1 and ${max} characters`, "invalid_scope", path);
13
+ }
14
+ return normalized;
15
+ }
16
+ export function normalizeMemoryScope(value) {
17
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
18
+ throw new MemoryContractError("Memory scope must be an object", "invalid_scope", "scope");
19
+ }
20
+ const candidate = value;
21
+ if (typeof candidate.kind !== "string" || !scopeKinds.has(candidate.kind)) {
22
+ throw new MemoryContractError(`Unknown Memory scope kind: ${String(candidate.kind)}`, "invalid_scope", "scope.kind");
23
+ }
24
+ const kind = candidate.kind;
25
+ if (kind === "agent") {
26
+ return Object.freeze({
27
+ kind,
28
+ agentName: requiredIdentifier(candidate.agentName, "scope.agentName", MAX_AGENT_NAME_CHARACTERS),
29
+ });
30
+ }
31
+ const subjectId = requiredIdentifier(candidate.subjectId, "scope.subjectId");
32
+ if (kind === "user" && candidate.agentName !== undefined) {
33
+ return Object.freeze({
34
+ kind,
35
+ subjectId,
36
+ agentName: requiredIdentifier(candidate.agentName, "scope.agentName", MAX_AGENT_NAME_CHARACTERS),
37
+ });
38
+ }
39
+ return Object.freeze({ kind, subjectId });
40
+ }
41
+ export function memoryScopeKey(scope) {
42
+ const normalized = normalizeMemoryScope(scope);
43
+ return JSON.stringify([
44
+ normalized.kind,
45
+ normalized.subjectId ?? "",
46
+ normalized.agentName ?? "",
47
+ ]);
48
+ }
49
+ export function canAccessMemoryScope(scope, access) {
50
+ const normalized = normalizeMemoryScope(scope);
51
+ switch (normalized.kind) {
52
+ case "org":
53
+ return normalized.subjectId === access.orgId;
54
+ case "project":
55
+ return normalized.subjectId === access.projectId;
56
+ case "agent":
57
+ return normalized.agentName === access.agentName;
58
+ case "user":
59
+ return (normalized.subjectId === access.externalUserId
60
+ && (normalized.agentName === undefined
61
+ || normalized.agentName === access.agentName));
62
+ case "channel":
63
+ return normalized.subjectId === access.channelId;
64
+ case "session":
65
+ return normalized.subjectId === access.sessionId;
66
+ }
67
+ }
68
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/memory/scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class MemoryAuthorizationError extends Error {
2
+ constructor(message?: string);
3
+ }
4
+ export declare class MemoryConflictError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ export declare class MemoryPolicyError extends Error {
8
+ constructor(message: string, options?: ErrorOptions);
9
+ }
10
+ //# sourceMappingURL=store-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-errors.d.ts","sourceRoot":"","sources":["../../src/memory/store-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,SAAmC;CAIvD;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD"}
@@ -0,0 +1,19 @@
1
+ export class MemoryAuthorizationError extends Error {
2
+ constructor(message = "Memory scope is not authorized") {
3
+ super(message);
4
+ this.name = "MemoryAuthorizationError";
5
+ }
6
+ }
7
+ export class MemoryConflictError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "MemoryConflictError";
11
+ }
12
+ }
13
+ export class MemoryPolicyError extends Error {
14
+ constructor(message, options) {
15
+ super(message, options);
16
+ this.name = "MemoryPolicyError";
17
+ }
18
+ }
19
+ //# sourceMappingURL=store-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-errors.js","sourceRoot":"","sources":["../../src/memory/store-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAO,GAAG,gCAAgC;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}