@revealui/contracts 1.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 (191) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +160 -0
  3. package/dist/a2a/index.d.ts +383 -0
  4. package/dist/a2a/index.d.ts.map +1 -0
  5. package/dist/a2a/index.js +276 -0
  6. package/dist/a2a/index.js.map +1 -0
  7. package/dist/actions/action-validator.d.ts +48 -0
  8. package/dist/actions/action-validator.d.ts.map +1 -0
  9. package/dist/actions/action-validator.js +288 -0
  10. package/dist/actions/action-validator.js.map +1 -0
  11. package/dist/actions/index.d.ts +7 -0
  12. package/dist/actions/index.d.ts.map +1 -0
  13. package/dist/actions/index.js +7 -0
  14. package/dist/actions/index.js.map +1 -0
  15. package/dist/agents/index.d.ts +628 -0
  16. package/dist/agents/index.d.ts.map +1 -0
  17. package/dist/agents/index.js +511 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/types.d.ts +22 -0
  20. package/dist/agents/types.d.ts.map +1 -0
  21. package/dist/agents/types.js +2 -0
  22. package/dist/agents/types.js.map +1 -0
  23. package/dist/api/auth.d.ts +60 -0
  24. package/dist/api/auth.d.ts.map +1 -0
  25. package/dist/api/auth.js +84 -0
  26. package/dist/api/auth.js.map +1 -0
  27. package/dist/api/chat.d.ts +45 -0
  28. package/dist/api/chat.d.ts.map +1 -0
  29. package/dist/api/chat.js +55 -0
  30. package/dist/api/chat.js.map +1 -0
  31. package/dist/api/gdpr.d.ts +39 -0
  32. package/dist/api/gdpr.d.ts.map +1 -0
  33. package/dist/api/gdpr.js +53 -0
  34. package/dist/api/gdpr.js.map +1 -0
  35. package/dist/cms/collection.d.ts +108 -0
  36. package/dist/cms/collection.d.ts.map +1 -0
  37. package/dist/cms/collection.js +144 -0
  38. package/dist/cms/collection.js.map +1 -0
  39. package/dist/cms/compat.d.ts +128 -0
  40. package/dist/cms/compat.d.ts.map +1 -0
  41. package/dist/cms/compat.js +141 -0
  42. package/dist/cms/compat.js.map +1 -0
  43. package/dist/cms/config-contract.d.ts +278 -0
  44. package/dist/cms/config-contract.d.ts.map +1 -0
  45. package/dist/cms/config-contract.js +220 -0
  46. package/dist/cms/config-contract.js.map +1 -0
  47. package/dist/cms/config.d.ts +351 -0
  48. package/dist/cms/config.d.ts.map +1 -0
  49. package/dist/cms/config.js +50 -0
  50. package/dist/cms/config.js.map +1 -0
  51. package/dist/cms/errors.d.ts +122 -0
  52. package/dist/cms/errors.d.ts.map +1 -0
  53. package/dist/cms/errors.js +163 -0
  54. package/dist/cms/errors.js.map +1 -0
  55. package/dist/cms/extensibility.d.ts +211 -0
  56. package/dist/cms/extensibility.d.ts.map +1 -0
  57. package/dist/cms/extensibility.js +313 -0
  58. package/dist/cms/extensibility.js.map +1 -0
  59. package/dist/cms/field.d.ts +69 -0
  60. package/dist/cms/field.d.ts.map +1 -0
  61. package/dist/cms/field.js +94 -0
  62. package/dist/cms/field.js.map +1 -0
  63. package/dist/cms/functions.d.ts +466 -0
  64. package/dist/cms/functions.d.ts.map +1 -0
  65. package/dist/cms/functions.js +19 -0
  66. package/dist/cms/functions.js.map +1 -0
  67. package/dist/cms/global.d.ts +45 -0
  68. package/dist/cms/global.d.ts.map +1 -0
  69. package/dist/cms/global.js +62 -0
  70. package/dist/cms/global.js.map +1 -0
  71. package/dist/cms/index.d.ts +23 -0
  72. package/dist/cms/index.d.ts.map +1 -0
  73. package/dist/cms/index.js +42 -0
  74. package/dist/cms/index.js.map +1 -0
  75. package/dist/cms/structure.d.ts +1601 -0
  76. package/dist/cms/structure.d.ts.map +1 -0
  77. package/dist/cms/structure.js +757 -0
  78. package/dist/cms/structure.js.map +1 -0
  79. package/dist/content/index.d.ts +1542 -0
  80. package/dist/content/index.d.ts.map +1 -0
  81. package/dist/content/index.js +522 -0
  82. package/dist/content/index.js.map +1 -0
  83. package/dist/database/bridge.d.ts +177 -0
  84. package/dist/database/bridge.d.ts.map +1 -0
  85. package/dist/database/bridge.js +139 -0
  86. package/dist/database/bridge.js.map +1 -0
  87. package/dist/database/index.d.ts +8 -0
  88. package/dist/database/index.d.ts.map +1 -0
  89. package/dist/database/index.js +9 -0
  90. package/dist/database/index.js.map +1 -0
  91. package/dist/database/type-bridge.d.ts +178 -0
  92. package/dist/database/type-bridge.d.ts.map +1 -0
  93. package/dist/database/type-bridge.js +154 -0
  94. package/dist/database/type-bridge.js.map +1 -0
  95. package/dist/entities/agent-context.d.ts +280 -0
  96. package/dist/entities/agent-context.d.ts.map +1 -0
  97. package/dist/entities/agent-context.js +390 -0
  98. package/dist/entities/agent-context.js.map +1 -0
  99. package/dist/entities/agent-memory.d.ts +661 -0
  100. package/dist/entities/agent-memory.d.ts.map +1 -0
  101. package/dist/entities/agent-memory.js +544 -0
  102. package/dist/entities/agent-memory.js.map +1 -0
  103. package/dist/entities/board.d.ts +95 -0
  104. package/dist/entities/board.d.ts.map +1 -0
  105. package/dist/entities/board.js +99 -0
  106. package/dist/entities/board.js.map +1 -0
  107. package/dist/entities/code-provenance.d.ts +270 -0
  108. package/dist/entities/code-provenance.d.ts.map +1 -0
  109. package/dist/entities/code-provenance.js +339 -0
  110. package/dist/entities/code-provenance.js.map +1 -0
  111. package/dist/entities/index.d.ts +22 -0
  112. package/dist/entities/index.d.ts.map +1 -0
  113. package/dist/entities/index.js +22 -0
  114. package/dist/entities/index.js.map +1 -0
  115. package/dist/entities/media.d.ts +485 -0
  116. package/dist/entities/media.d.ts.map +1 -0
  117. package/dist/entities/media.js +606 -0
  118. package/dist/entities/media.js.map +1 -0
  119. package/dist/entities/page-revision.d.ts +390 -0
  120. package/dist/entities/page-revision.d.ts.map +1 -0
  121. package/dist/entities/page-revision.js +406 -0
  122. package/dist/entities/page-revision.js.map +1 -0
  123. package/dist/entities/page.d.ts +2349 -0
  124. package/dist/entities/page.d.ts.map +1 -0
  125. package/dist/entities/page.js +377 -0
  126. package/dist/entities/page.js.map +1 -0
  127. package/dist/entities/post.d.ts +619 -0
  128. package/dist/entities/post.d.ts.map +1 -0
  129. package/dist/entities/post.js +555 -0
  130. package/dist/entities/post.js.map +1 -0
  131. package/dist/entities/price.d.ts +772 -0
  132. package/dist/entities/price.d.ts.map +1 -0
  133. package/dist/entities/price.js +308 -0
  134. package/dist/entities/price.js.map +1 -0
  135. package/dist/entities/product.d.ts +753 -0
  136. package/dist/entities/product.d.ts.map +1 -0
  137. package/dist/entities/product.js +307 -0
  138. package/dist/entities/product.js.map +1 -0
  139. package/dist/entities/session.d.ts +222 -0
  140. package/dist/entities/session.d.ts.map +1 -0
  141. package/dist/entities/session.js +253 -0
  142. package/dist/entities/session.js.map +1 -0
  143. package/dist/entities/site.d.ts +387 -0
  144. package/dist/entities/site.d.ts.map +1 -0
  145. package/dist/entities/site.js +348 -0
  146. package/dist/entities/site.js.map +1 -0
  147. package/dist/entities/ticket-comment.d.ts +49 -0
  148. package/dist/entities/ticket-comment.d.ts.map +1 -0
  149. package/dist/entities/ticket-comment.js +58 -0
  150. package/dist/entities/ticket-comment.js.map +1 -0
  151. package/dist/entities/ticket-label.d.ts +64 -0
  152. package/dist/entities/ticket-label.d.ts.map +1 -0
  153. package/dist/entities/ticket-label.js +77 -0
  154. package/dist/entities/ticket-label.js.map +1 -0
  155. package/dist/entities/ticket.d.ts +204 -0
  156. package/dist/entities/ticket.d.ts.map +1 -0
  157. package/dist/entities/ticket.js +205 -0
  158. package/dist/entities/ticket.js.map +1 -0
  159. package/dist/entities/user.d.ts +336 -0
  160. package/dist/entities/user.d.ts.map +1 -0
  161. package/dist/entities/user.js +255 -0
  162. package/dist/entities/user.js.map +1 -0
  163. package/dist/foundation/contract.d.ts +221 -0
  164. package/dist/foundation/contract.d.ts.map +1 -0
  165. package/dist/foundation/contract.js +133 -0
  166. package/dist/foundation/contract.js.map +1 -0
  167. package/dist/foundation/index.d.ts +7 -0
  168. package/dist/foundation/index.d.ts.map +1 -0
  169. package/dist/foundation/index.js +7 -0
  170. package/dist/foundation/index.js.map +1 -0
  171. package/dist/generated/contracts.d.ts +1514 -0
  172. package/dist/generated/contracts.d.ts.map +1 -0
  173. package/dist/generated/contracts.js +959 -0
  174. package/dist/generated/contracts.js.map +1 -0
  175. package/dist/generated/database.d.ts +48 -0
  176. package/dist/generated/database.d.ts.map +1 -0
  177. package/dist/generated/database.js +17 -0
  178. package/dist/generated/database.js.map +1 -0
  179. package/dist/generated/zod-schemas.d.ts +14793 -0
  180. package/dist/generated/zod-schemas.d.ts.map +1 -0
  181. package/dist/generated/zod-schemas.js +547 -0
  182. package/dist/generated/zod-schemas.js.map +1 -0
  183. package/dist/index.d.ts +50 -0
  184. package/dist/index.d.ts.map +1 -0
  185. package/dist/index.js +81 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/representation/index.d.ts +304 -0
  188. package/dist/representation/index.d.ts.map +1 -0
  189. package/dist/representation/index.js +280 -0
  190. package/dist/representation/index.js.map +1 -0
  191. package/package.json +117 -0
@@ -0,0 +1,544 @@
1
+ /**
2
+ * AgentMemory Entity Contract
3
+ *
4
+ * Manages long-term agent memories with semantic search, verification workflow,
5
+ * and multi-source tracking. Memories can be facts, preferences, decisions,
6
+ * feedback, examples, corrections, skills, or warnings.
7
+ *
8
+ * Business Rules:
9
+ * - Memory types: fact, preference, decision, feedback, example, correction, skill, warning
10
+ * - Embeddings are 1536 dimensions (OpenAI ada-002 format)
11
+ * - Source tracking required (conversation, user input, observation, etc.)
12
+ * - Access tracking for importance scoring
13
+ * - Verification workflow (verified, verifiedBy, verifiedAt)
14
+ * - Optional expiration for time-sensitive memories
15
+ * - Scoped to site and/or agent
16
+ */
17
+ import { z } from 'zod/v4';
18
+ // =============================================================================
19
+ // Constants
20
+ // =============================================================================
21
+ export const AGENT_MEMORY_SCHEMA_VERSION = 1;
22
+ // Memory types
23
+ export const MEMORY_TYPES = [
24
+ 'fact',
25
+ 'preference',
26
+ 'decision',
27
+ 'feedback',
28
+ 'example',
29
+ 'correction',
30
+ 'skill',
31
+ 'warning',
32
+ ];
33
+ // Source types for memory provenance
34
+ export const SOURCE_TYPES = [
35
+ 'conversation',
36
+ 'user_input',
37
+ 'observation',
38
+ 'tool_use',
39
+ 'feedback',
40
+ 'correction',
41
+ 'inference',
42
+ 'import',
43
+ ];
44
+ // Embedding configuration (same as AgentContext)
45
+ export const MEMORY_EMBEDDING_CONFIG = {
46
+ DIMENSIONS: 1536,
47
+ MIN_VALUE: -1.0,
48
+ MAX_VALUE: 1.0,
49
+ };
50
+ // Access tracking thresholds
51
+ export const ACCESS_THRESHOLDS = {
52
+ FREQUENTLY_ACCESSED: 10,
53
+ RARELY_ACCESSED: 2,
54
+ STALE_DAYS: 30,
55
+ };
56
+ // Importance scores
57
+ export const IMPORTANCE_LEVELS = {
58
+ CRITICAL: 1.0,
59
+ HIGH: 0.8,
60
+ MEDIUM: 0.5,
61
+ LOW: 0.3,
62
+ MINIMAL: 0.1,
63
+ };
64
+ // =============================================================================
65
+ // Base Schemas
66
+ // =============================================================================
67
+ /**
68
+ * Memory source schema with provenance tracking
69
+ */
70
+ export const MemorySourceSchema = z.object({
71
+ type: z.enum(SOURCE_TYPES),
72
+ conversationId: z.string().optional(),
73
+ messageId: z.string().optional(),
74
+ userId: z.string().optional(),
75
+ timestamp: z.date().optional(),
76
+ context: z.record(z.string(), z.unknown()).optional(),
77
+ });
78
+ /**
79
+ * Embedding metadata schema
80
+ */
81
+ export const EmbeddingMetadataSchema = z.object({
82
+ model: z.string(),
83
+ dimensions: z.number().int().default(MEMORY_EMBEDDING_CONFIG.DIMENSIONS),
84
+ generatedAt: z.date(),
85
+ version: z.string().optional(),
86
+ });
87
+ /**
88
+ * Memory metadata schema
89
+ */
90
+ export const MemoryMetadataSchema = z.object({
91
+ importance: z.number().min(0).max(1).optional(),
92
+ tags: z.array(z.string()).optional(),
93
+ category: z.string().optional(),
94
+ confidence: z.number().min(0).max(1).optional(),
95
+ relatedMemories: z.array(z.string()).optional(),
96
+ });
97
+ /**
98
+ * Embedding vector schema (1536 dimensions)
99
+ */
100
+ export const MemoryEmbeddingVectorSchema = z
101
+ .array(z.number())
102
+ .length(MEMORY_EMBEDDING_CONFIG.DIMENSIONS, `Embedding must have exactly ${MEMORY_EMBEDDING_CONFIG.DIMENSIONS} dimensions`)
103
+ .refine((arr) => arr.every((val) => val >= MEMORY_EMBEDDING_CONFIG.MIN_VALUE && val <= MEMORY_EMBEDDING_CONFIG.MAX_VALUE), {
104
+ message: `All embedding values must be between ${MEMORY_EMBEDDING_CONFIG.MIN_VALUE} and ${MEMORY_EMBEDDING_CONFIG.MAX_VALUE}`,
105
+ });
106
+ // =============================================================================
107
+ // Base AgentMemory Schema
108
+ // =============================================================================
109
+ /**
110
+ * Agent Memory object schema
111
+ */
112
+ export const AgentMemoryObjectSchema = z.object({
113
+ id: z.string().min(1),
114
+ version: z.number().int().default(AGENT_MEMORY_SCHEMA_VERSION),
115
+ content: z.string().min(1, 'Memory content is required'),
116
+ type: z.enum(MEMORY_TYPES),
117
+ source: MemorySourceSchema,
118
+ embedding: MemoryEmbeddingVectorSchema.nullable().optional(),
119
+ embeddingMetadata: EmbeddingMetadataSchema.nullable().optional(),
120
+ metadata: MemoryMetadataSchema.default({}),
121
+ accessCount: z.number().int().default(0),
122
+ accessedAt: z.date().nullable().optional(),
123
+ verified: z.boolean().default(false),
124
+ verifiedBy: z.string().nullable().optional(),
125
+ verifiedAt: z.date().nullable().optional(),
126
+ siteId: z.string().nullable().optional(),
127
+ agentId: z.string().nullable().optional(),
128
+ createdAt: z.date(),
129
+ expiresAt: z.date().nullable().optional(),
130
+ });
131
+ /**
132
+ * Agent Memory schema with validation rules
133
+ */
134
+ export const AgentMemoryBaseSchema = AgentMemoryObjectSchema.refine((data) => {
135
+ // If verified, must have verifiedBy and verifiedAt
136
+ if (data.verified) {
137
+ return data.verifiedBy !== null && data.verifiedAt !== null;
138
+ }
139
+ return true;
140
+ }, {
141
+ message: 'Verified memories must have verifiedBy and verifiedAt',
142
+ path: ['verified'],
143
+ }).refine((data) => {
144
+ // If expiresAt exists, it must be in the future
145
+ if (data.expiresAt) {
146
+ return data.expiresAt > new Date();
147
+ }
148
+ return true;
149
+ }, {
150
+ message: 'Memory expiration must be in the future',
151
+ path: ['expiresAt'],
152
+ });
153
+ export const AgentMemorySchema = AgentMemoryBaseSchema;
154
+ // =============================================================================
155
+ // Insert Schema
156
+ // =============================================================================
157
+ /**
158
+ * Schema for creating new agent memories
159
+ */
160
+ export const AgentMemoryInsertSchema = AgentMemoryObjectSchema.omit({
161
+ createdAt: true,
162
+ accessCount: true,
163
+ accessedAt: true,
164
+ }).extend({
165
+ createdAt: z.date().optional(),
166
+ accessCount: z.number().int().optional(),
167
+ accessedAt: z.date().nullable().optional(),
168
+ });
169
+ // =============================================================================
170
+ // Memory Type Helpers
171
+ // =============================================================================
172
+ /**
173
+ * Check if memory is a fact
174
+ */
175
+ export function isFactMemory(memory) {
176
+ return memory.type === 'fact';
177
+ }
178
+ /**
179
+ * Check if memory is a preference
180
+ */
181
+ export function isPreferenceMemory(memory) {
182
+ return memory.type === 'preference';
183
+ }
184
+ /**
185
+ * Check if memory is a decision
186
+ */
187
+ export function isDecisionMemory(memory) {
188
+ return memory.type === 'decision';
189
+ }
190
+ /**
191
+ * Check if memory is feedback
192
+ */
193
+ export function isFeedbackMemory(memory) {
194
+ return memory.type === 'feedback';
195
+ }
196
+ /**
197
+ * Check if memory is a correction
198
+ */
199
+ export function isCorrectionMemory(memory) {
200
+ return memory.type === 'correction';
201
+ }
202
+ /**
203
+ * Check if memory is a warning
204
+ */
205
+ export function isWarningMemory(memory) {
206
+ return memory.type === 'warning';
207
+ }
208
+ // =============================================================================
209
+ // Verification Helpers
210
+ // =============================================================================
211
+ /**
212
+ * Check if memory is verified
213
+ */
214
+ export function isVerified(memory) {
215
+ return memory.verified === true;
216
+ }
217
+ /**
218
+ * Check if memory needs verification
219
+ */
220
+ export function needsVerification(memory) {
221
+ return !memory.verified && (memory.type === 'fact' || memory.type === 'correction');
222
+ }
223
+ /**
224
+ * Create verification update
225
+ */
226
+ export function createVerification(verifiedBy) {
227
+ return {
228
+ verified: true,
229
+ verifiedBy,
230
+ verifiedAt: new Date(),
231
+ };
232
+ }
233
+ /**
234
+ * Revoke verification
235
+ */
236
+ export function revokeVerification() {
237
+ return {
238
+ verified: false,
239
+ verifiedBy: null,
240
+ verifiedAt: null,
241
+ };
242
+ }
243
+ // =============================================================================
244
+ // Expiration Helpers
245
+ // =============================================================================
246
+ /**
247
+ * Check if memory is expired
248
+ */
249
+ export function isExpired(memory) {
250
+ if (!memory.expiresAt)
251
+ return false;
252
+ return memory.expiresAt <= new Date();
253
+ }
254
+ /**
255
+ * Check if memory is permanent (no expiration)
256
+ */
257
+ export function isPermanent(memory) {
258
+ return memory.expiresAt === null || memory.expiresAt === undefined;
259
+ }
260
+ /**
261
+ * Calculate time until expiration in milliseconds
262
+ */
263
+ export function getTimeUntilExpiration(memory) {
264
+ if (!memory.expiresAt)
265
+ return null;
266
+ const now = Date.now();
267
+ const expiresAt = memory.expiresAt.getTime();
268
+ return Math.max(0, expiresAt - now);
269
+ }
270
+ /**
271
+ * Check if memory is near expiration (< 24 hours)
272
+ */
273
+ export function isNearExpiration(memory, thresholdHours = 24) {
274
+ const timeRemaining = getTimeUntilExpiration(memory);
275
+ if (timeRemaining === null)
276
+ return false;
277
+ const thresholdMs = thresholdHours * 60 * 60 * 1000;
278
+ return timeRemaining > 0 && timeRemaining < thresholdMs;
279
+ }
280
+ /**
281
+ * Create expiration date from duration in days
282
+ */
283
+ export function createExpirationDate(daysFromNow) {
284
+ const now = new Date();
285
+ return new Date(now.getTime() + daysFromNow * 24 * 60 * 60 * 1000);
286
+ }
287
+ // =============================================================================
288
+ // Access Tracking Helpers
289
+ // =============================================================================
290
+ /**
291
+ * Check if memory is frequently accessed
292
+ */
293
+ export function isFrequentlyAccessed(memory) {
294
+ return memory.accessCount >= ACCESS_THRESHOLDS.FREQUENTLY_ACCESSED;
295
+ }
296
+ /**
297
+ * Check if memory is rarely accessed
298
+ */
299
+ export function isRarelyAccessed(memory) {
300
+ return memory.accessCount <= ACCESS_THRESHOLDS.RARELY_ACCESSED;
301
+ }
302
+ /**
303
+ * Check if memory is stale (not accessed recently)
304
+ */
305
+ export function isStale(memory, thresholdDays = ACCESS_THRESHOLDS.STALE_DAYS) {
306
+ if (!memory.accessedAt)
307
+ return true;
308
+ const daysSinceAccess = (Date.now() - memory.accessedAt.getTime()) / (1000 * 60 * 60 * 24);
309
+ return daysSinceAccess > thresholdDays;
310
+ }
311
+ /**
312
+ * Increment access count and update timestamp
313
+ */
314
+ export function recordAccess() {
315
+ return {
316
+ accessCount: undefined, // Will be incremented by DB
317
+ accessedAt: new Date(),
318
+ };
319
+ }
320
+ /**
321
+ * Get access frequency category
322
+ */
323
+ export function getAccessFrequency(memory) {
324
+ if (memory.accessCount >= ACCESS_THRESHOLDS.FREQUENTLY_ACCESSED)
325
+ return 'high';
326
+ if (memory.accessCount <= ACCESS_THRESHOLDS.RARELY_ACCESSED)
327
+ return 'low';
328
+ return 'medium';
329
+ }
330
+ // =============================================================================
331
+ // Importance Helpers
332
+ // =============================================================================
333
+ /**
334
+ * Get memory importance from metadata
335
+ */
336
+ export function getImportance(memory) {
337
+ return memory.metadata?.importance ?? IMPORTANCE_LEVELS.MEDIUM;
338
+ }
339
+ /**
340
+ * Check if memory is critical importance
341
+ */
342
+ export function isCriticalImportance(memory) {
343
+ return getImportance(memory) >= IMPORTANCE_LEVELS.CRITICAL;
344
+ }
345
+ /**
346
+ * Get importance category
347
+ */
348
+ export function getImportanceCategory(memory) {
349
+ const importance = getImportance(memory);
350
+ if (importance >= IMPORTANCE_LEVELS.CRITICAL)
351
+ return 'critical';
352
+ if (importance >= IMPORTANCE_LEVELS.HIGH)
353
+ return 'high';
354
+ if (importance >= IMPORTANCE_LEVELS.MEDIUM)
355
+ return 'medium';
356
+ return 'low';
357
+ }
358
+ /**
359
+ * Calculate composite relevance score
360
+ */
361
+ export function calculateRelevanceScore(memory) {
362
+ const importance = getImportance(memory);
363
+ const accessFactor = Math.min(memory.accessCount / 100, 1.0) * 0.3;
364
+ const verificationBonus = memory.verified ? 0.2 : 0;
365
+ const stalePenalty = isStale(memory) ? -0.2 : 0;
366
+ return Math.max(0, Math.min(1, importance + accessFactor + verificationBonus + stalePenalty));
367
+ }
368
+ // =============================================================================
369
+ // Embedding Validation
370
+ // =============================================================================
371
+ /**
372
+ * Check if memory has valid embedding
373
+ */
374
+ export function hasValidEmbedding(memory) {
375
+ if (!memory.embedding)
376
+ return false;
377
+ return (memory.embedding.length === MEMORY_EMBEDDING_CONFIG.DIMENSIONS &&
378
+ memory.embedding.every((val) => val >= MEMORY_EMBEDDING_CONFIG.MIN_VALUE && val <= MEMORY_EMBEDDING_CONFIG.MAX_VALUE));
379
+ }
380
+ /**
381
+ * Check if memory has embedding metadata
382
+ */
383
+ export function hasEmbeddingMetadata(memory) {
384
+ return memory.embeddingMetadata !== null && memory.embeddingMetadata !== undefined;
385
+ }
386
+ // =============================================================================
387
+ // Scope Helpers
388
+ // =============================================================================
389
+ /**
390
+ * Check if memory is scoped to a site
391
+ */
392
+ export function isSiteScoped(memory) {
393
+ return memory.siteId !== null && memory.siteId !== undefined;
394
+ }
395
+ /**
396
+ * Check if memory is scoped to an agent
397
+ */
398
+ export function isAgentScoped(memory) {
399
+ return memory.agentId !== null && memory.agentId !== undefined;
400
+ }
401
+ /**
402
+ * Check if memory is global (not scoped)
403
+ */
404
+ export function isGlobalMemory(memory) {
405
+ return !(isSiteScoped(memory) || isAgentScoped(memory));
406
+ }
407
+ // =============================================================================
408
+ // Memory Creation
409
+ // =============================================================================
410
+ /**
411
+ * Create agent memory insert data
412
+ */
413
+ export function createAgentMemoryInsert(content, type, source, options) {
414
+ const now = new Date();
415
+ return {
416
+ id: options?.id ?? crypto.randomUUID(),
417
+ version: AGENT_MEMORY_SCHEMA_VERSION,
418
+ content,
419
+ type,
420
+ source,
421
+ embedding: options?.embedding ?? null,
422
+ embeddingMetadata: options?.embeddingMetadata ?? null,
423
+ metadata: options?.metadata ?? {},
424
+ verified: false,
425
+ verifiedBy: null,
426
+ verifiedAt: null,
427
+ siteId: options?.siteId ?? null,
428
+ agentId: options?.agentId ?? null,
429
+ createdAt: now,
430
+ expiresAt: options?.expiresAt ?? null,
431
+ };
432
+ }
433
+ /**
434
+ * Update memory with new data
435
+ */
436
+ export function updateAgentMemory(updates) {
437
+ const result = {};
438
+ if (updates.content !== undefined) {
439
+ result.content = updates.content;
440
+ }
441
+ if (updates.metadata !== undefined) {
442
+ result.metadata = updates.metadata;
443
+ }
444
+ if (updates.embedding !== undefined) {
445
+ result.embedding = updates.embedding;
446
+ }
447
+ if (updates.embeddingMetadata !== undefined) {
448
+ result.embeddingMetadata = updates.embeddingMetadata;
449
+ }
450
+ if (updates.expiresAt !== undefined) {
451
+ result.expiresAt = updates.expiresAt;
452
+ }
453
+ return result;
454
+ }
455
+ /**
456
+ * Convert agent memory to format with computed fields
457
+ */
458
+ export function agentMemoryToHuman(memory) {
459
+ return {
460
+ ...memory,
461
+ _computed: {
462
+ isExpired: isExpired(memory),
463
+ isPermanent: isPermanent(memory),
464
+ isVerified: isVerified(memory),
465
+ needsVerification: needsVerification(memory),
466
+ hasEmbedding: memory.embedding !== null && memory.embedding !== undefined,
467
+ embeddingValid: hasValidEmbedding(memory),
468
+ accessFrequency: getAccessFrequency(memory),
469
+ isStale: isStale(memory),
470
+ importance: getImportance(memory),
471
+ importanceCategory: getImportanceCategory(memory),
472
+ relevanceScore: calculateRelevanceScore(memory),
473
+ timeUntilExpiration: getTimeUntilExpiration(memory),
474
+ isSiteScoped: isSiteScoped(memory),
475
+ isAgentScoped: isAgentScoped(memory),
476
+ isGlobal: isGlobalMemory(memory),
477
+ },
478
+ };
479
+ }
480
+ /**
481
+ * Convert agent memory to agent-compatible format
482
+ */
483
+ export function agentMemoryToAgent(memory) {
484
+ let scope;
485
+ if (isSiteScoped(memory))
486
+ scope = 'site';
487
+ else if (isAgentScoped(memory))
488
+ scope = 'agent';
489
+ else
490
+ scope = 'global';
491
+ return {
492
+ ...memory,
493
+ agentMetadata: {
494
+ expired: isExpired(memory),
495
+ permanent: isPermanent(memory),
496
+ verified: isVerified(memory),
497
+ embeddingPresent: memory.embedding !== null && memory.embedding !== undefined,
498
+ embeddingDimensions: memory.embedding?.length ?? null,
499
+ accessCount: memory.accessCount,
500
+ lastAccessed: memory.accessedAt ?? null,
501
+ relevanceScore: calculateRelevanceScore(memory),
502
+ scope,
503
+ },
504
+ };
505
+ }
506
+ /**
507
+ * Zod schema for agent memory with computed fields
508
+ */
509
+ export const AgentMemoryWithComputedSchema = AgentMemorySchema.and(z.object({
510
+ _computed: z.object({
511
+ isExpired: z.boolean(),
512
+ isPermanent: z.boolean(),
513
+ isVerified: z.boolean(),
514
+ needsVerification: z.boolean(),
515
+ hasEmbedding: z.boolean(),
516
+ embeddingValid: z.boolean(),
517
+ accessFrequency: z.enum(['high', 'medium', 'low']),
518
+ isStale: z.boolean(),
519
+ importance: z.number(),
520
+ importanceCategory: z.enum(['critical', 'high', 'medium', 'low']),
521
+ relevanceScore: z.number(),
522
+ timeUntilExpiration: z.number().nullable(),
523
+ isSiteScoped: z.boolean(),
524
+ isAgentScoped: z.boolean(),
525
+ isGlobal: z.boolean(),
526
+ }),
527
+ }));
528
+ /**
529
+ * Zod schema for agent memory with agent metadata
530
+ */
531
+ export const AgentMemoryAgentSchema = AgentMemorySchema.and(z.object({
532
+ agentMetadata: z.object({
533
+ expired: z.boolean(),
534
+ permanent: z.boolean(),
535
+ verified: z.boolean(),
536
+ embeddingPresent: z.boolean(),
537
+ embeddingDimensions: z.number().int().nullable(),
538
+ accessCount: z.number().int(),
539
+ lastAccessed: z.date().nullable(),
540
+ relevanceScore: z.number(),
541
+ scope: z.enum(['site', 'agent', 'global']),
542
+ }),
543
+ }));
544
+ //# sourceMappingURL=agent-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-memory.js","sourceRoot":"","sources":["../../src/entities/agent-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Board Entity Contract
3
+ *
4
+ * Kanban board that contains tickets organized into columns.
5
+ *
6
+ * Business Rules:
7
+ * - Board slug must be unique per tenant
8
+ * - One board per tenant may be marked isDefault
9
+ * - Creating a board auto-creates default columns (Backlog, To Do, In Progress, Review, Done)
10
+ * - Deleting a board cascades to columns and tickets
11
+ */
12
+ import { z } from 'zod/v4';
13
+ export declare const BOARD_SCHEMA_VERSION = 1;
14
+ export declare const DEFAULT_COLUMN_SLUGS: readonly ["backlog", "todo", "in-progress", "review", "done"];
15
+ export declare const BOARD_LIMITS: {
16
+ readonly MIN_NAME_LENGTH: 1;
17
+ readonly MAX_NAME_LENGTH: 200;
18
+ readonly MIN_SLUG_LENGTH: 1;
19
+ readonly MAX_SLUG_LENGTH: 200;
20
+ readonly MAX_DESCRIPTION_LENGTH: 1000;
21
+ readonly MAX_COLUMNS: 20;
22
+ };
23
+ export declare const BoardObjectSchema: z.ZodObject<{
24
+ id: z.ZodString;
25
+ schemaVersion: z.ZodDefault<z.ZodString>;
26
+ name: z.ZodString;
27
+ slug: z.ZodString;
28
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
29
+ ownerId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ tenantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
31
+ isDefault: z.ZodDefault<z.ZodBoolean>;
32
+ createdAt: z.ZodDate;
33
+ updatedAt: z.ZodDate;
34
+ }, z.core.$strip>;
35
+ export declare const BoardSchema: z.ZodObject<{
36
+ id: z.ZodString;
37
+ schemaVersion: z.ZodDefault<z.ZodString>;
38
+ name: z.ZodString;
39
+ slug: z.ZodString;
40
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
41
+ ownerId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
42
+ tenantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
43
+ isDefault: z.ZodDefault<z.ZodBoolean>;
44
+ createdAt: z.ZodDate;
45
+ updatedAt: z.ZodDate;
46
+ }, z.core.$strip>;
47
+ export type Board = z.infer<typeof BoardSchema>;
48
+ export declare const BoardInsertSchema: z.ZodObject<{
49
+ name: z.ZodString;
50
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
51
+ id: z.ZodString;
52
+ schemaVersion: z.ZodDefault<z.ZodString>;
53
+ slug: z.ZodString;
54
+ ownerId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ isDefault: z.ZodDefault<z.ZodBoolean>;
56
+ tenantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
57
+ createdAt: z.ZodOptional<z.ZodDate>;
58
+ updatedAt: z.ZodOptional<z.ZodDate>;
59
+ }, z.core.$strip>;
60
+ export type BoardInsert = z.infer<typeof BoardInsertSchema>;
61
+ export declare const BoardColumnObjectSchema: z.ZodObject<{
62
+ id: z.ZodString;
63
+ boardId: z.ZodString;
64
+ name: z.ZodString;
65
+ slug: z.ZodString;
66
+ position: z.ZodNumber;
67
+ wipLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
68
+ color: z.ZodOptional<z.ZodNullable<z.ZodString>>;
69
+ isDefault: z.ZodDefault<z.ZodBoolean>;
70
+ createdAt: z.ZodDate;
71
+ updatedAt: z.ZodDate;
72
+ }, z.core.$strip>;
73
+ export declare const BoardColumnSchema: z.ZodObject<{
74
+ id: z.ZodString;
75
+ boardId: z.ZodString;
76
+ name: z.ZodString;
77
+ slug: z.ZodString;
78
+ position: z.ZodNumber;
79
+ wipLimit: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
80
+ color: z.ZodOptional<z.ZodNullable<z.ZodString>>;
81
+ isDefault: z.ZodDefault<z.ZodBoolean>;
82
+ createdAt: z.ZodDate;
83
+ updatedAt: z.ZodDate;
84
+ }, z.core.$strip>;
85
+ export type BoardColumn = z.infer<typeof BoardColumnSchema>;
86
+ export declare function generateSlug(name: string): string;
87
+ export declare function isValidSlug(slug: string): boolean;
88
+ export declare function createBoardInsert(name: string, slug: string, options?: {
89
+ id?: string;
90
+ description?: string;
91
+ ownerId?: string;
92
+ tenantId?: string;
93
+ isDefault?: boolean;
94
+ }): BoardInsert;
95
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/entities/board.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAM1B,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC,eAAO,MAAM,oBAAoB,+DAAgE,CAAA;AAEjG,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAA;AAMV,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAe5B,CAAA;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;iBAAoB,CAAA;AAC5C,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAM5B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAM3D,eAAO,MAAM,uBAAuB;;;;;;;;;;;iBAWlC,CAAA;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAA0B,CAAA;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAM3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GACA,WAAW,CAcb"}