remdb 0.3.202__py3-none-any.whl → 0.3.245__py3-none-any.whl

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.

Potentially problematic release.


This version of remdb might be problematic. Click here for more details.

Files changed (44) hide show
  1. rem/agentic/README.md +36 -2
  2. rem/agentic/context.py +86 -3
  3. rem/agentic/context_builder.py +39 -33
  4. rem/agentic/mcp/tool_wrapper.py +2 -2
  5. rem/agentic/providers/pydantic_ai.py +68 -51
  6. rem/agentic/schema.py +2 -2
  7. rem/api/mcp_router/resources.py +223 -0
  8. rem/api/mcp_router/tools.py +170 -18
  9. rem/api/routers/admin.py +30 -4
  10. rem/api/routers/auth.py +175 -18
  11. rem/api/routers/chat/child_streaming.py +394 -0
  12. rem/api/routers/chat/completions.py +24 -29
  13. rem/api/routers/chat/sse_events.py +5 -1
  14. rem/api/routers/chat/streaming.py +242 -272
  15. rem/api/routers/chat/streaming_utils.py +327 -0
  16. rem/api/routers/common.py +18 -0
  17. rem/api/routers/dev.py +7 -1
  18. rem/api/routers/feedback.py +9 -1
  19. rem/api/routers/messages.py +80 -15
  20. rem/api/routers/models.py +9 -1
  21. rem/api/routers/query.py +17 -15
  22. rem/api/routers/shared_sessions.py +16 -0
  23. rem/cli/commands/ask.py +205 -114
  24. rem/cli/commands/process.py +12 -4
  25. rem/cli/commands/query.py +109 -0
  26. rem/cli/commands/session.py +117 -0
  27. rem/cli/main.py +2 -0
  28. rem/models/entities/session.py +1 -0
  29. rem/schemas/agents/rem.yaml +1 -1
  30. rem/services/postgres/repository.py +7 -7
  31. rem/services/rem/service.py +47 -0
  32. rem/services/session/__init__.py +2 -1
  33. rem/services/session/compression.py +14 -12
  34. rem/services/session/pydantic_messages.py +111 -11
  35. rem/services/session/reload.py +2 -1
  36. rem/settings.py +71 -0
  37. rem/sql/migrations/001_install.sql +4 -4
  38. rem/sql/migrations/004_cache_system.sql +3 -1
  39. rem/sql/migrations/migrate_session_id_to_uuid.sql +45 -0
  40. rem/utils/schema_loader.py +139 -111
  41. {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/METADATA +2 -2
  42. {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/RECORD +44 -39
  43. {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/WHEEL +0 -0
  44. {remdb-0.3.202.dist-info → remdb-0.3.245.dist-info}/entry_points.txt +0 -0
@@ -64,9 +64,11 @@ CREATE OR REPLACE FUNCTION rem_kv_store_empty(p_user_id TEXT)
64
64
  RETURNS BOOLEAN AS $$
65
65
  BEGIN
66
66
  -- Quick existence check - very fast with index
67
+ -- Check for user-specific OR public (NULL user_id) entries
68
+ -- This ensures self-healing triggers correctly for public ontologies
67
69
  RETURN NOT EXISTS (
68
70
  SELECT 1 FROM kv_store
69
- WHERE user_id = p_user_id
71
+ WHERE user_id = p_user_id OR user_id IS NULL
70
72
  LIMIT 1
71
73
  );
72
74
  END;
@@ -0,0 +1,45 @@
1
+ -- Migration: Update messages.session_id from session name to session UUID
2
+ -- This fixes the bug where messages were stored with session.name instead of session.id
3
+ --
4
+ -- Run this migration AFTER deploying the code fixes in remdb 0.3.204+
5
+ -- The code now correctly stores session.id (UUID), but existing data needs migration.
6
+
7
+ BEGIN;
8
+
9
+ -- First, count how many messages need to be updated
10
+ DO $$
11
+ DECLARE
12
+ count_to_migrate INTEGER;
13
+ BEGIN
14
+ SELECT COUNT(*) INTO count_to_migrate
15
+ FROM messages m
16
+ JOIN sessions s ON m.session_id = s.name
17
+ WHERE m.session_id != s.id::text;
18
+
19
+ RAISE NOTICE 'Messages needing migration: %', count_to_migrate;
20
+ END $$;
21
+
22
+ -- Update messages.session_id from session name to session UUID
23
+ UPDATE messages m
24
+ SET session_id = s.id::text
25
+ FROM sessions s
26
+ WHERE m.session_id = s.name
27
+ AND m.session_id != s.id::text;
28
+
29
+ -- Report how many were updated
30
+ DO $$
31
+ DECLARE
32
+ updated_count INTEGER;
33
+ BEGIN
34
+ GET DIAGNOSTICS updated_count = ROW_COUNT;
35
+ RAISE NOTICE 'Messages updated: %', updated_count;
36
+ END $$;
37
+
38
+ COMMIT;
39
+
40
+ -- Verify the fix - all messages should now join by UUID
41
+ SELECT
42
+ 'Messages matching sessions by UUID' as status,
43
+ COUNT(*) as count
44
+ FROM messages m
45
+ JOIN sessions s ON m.session_id = s.id::text;
@@ -147,15 +147,25 @@ def _load_schema_from_database(schema_name: str, user_id: str) -> dict[str, Any]
147
147
  try:
148
148
  await db.connect()
149
149
 
150
- query = """
151
- SELECT spec FROM schemas
152
- WHERE LOWER(name) = LOWER($1)
153
- AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
154
- LIMIT 1
155
- """
156
- logger.debug(f"Executing schema lookup: name={schema_name}, user_id={user_id}")
157
-
158
- row = await db.fetchrow(query, schema_name, user_id)
150
+ # Query for public schemas (user_id IS NULL) and optionally user-specific
151
+ if user_id:
152
+ query = """
153
+ SELECT spec FROM schemas
154
+ WHERE LOWER(name) = LOWER($1)
155
+ AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
156
+ LIMIT 1
157
+ """
158
+ row = await db.fetchrow(query, schema_name, user_id)
159
+ else:
160
+ # No user_id - only search public schemas
161
+ query = """
162
+ SELECT spec FROM schemas
163
+ WHERE LOWER(name) = LOWER($1)
164
+ AND (user_id = 'system' OR user_id IS NULL)
165
+ LIMIT 1
166
+ """
167
+ row = await db.fetchrow(query, schema_name)
168
+ logger.debug(f"Executing schema lookup: name={schema_name}, user_id={user_id or 'public'}")
159
169
 
160
170
  if row:
161
171
  spec = row.get("spec")
@@ -193,17 +203,25 @@ def _load_schema_from_database(schema_name: str, user_id: str) -> dict[str, Any]
193
203
  try:
194
204
  await db.connect()
195
205
 
196
- # Query schemas table directly by name
197
- # Note: Schema name lookup is case-insensitive for user convenience
198
- query = """
199
- SELECT spec FROM schemas
200
- WHERE LOWER(name) = LOWER($1)
201
- AND (user_id = $2 OR user_id = 'system')
202
- LIMIT 1
203
- """
204
- logger.debug(f"Executing schema lookup: name={schema_name}, user_id={user_id}")
205
-
206
- row = await db.fetchrow(query, schema_name, user_id)
206
+ # Query for public schemas (user_id IS NULL) and optionally user-specific
207
+ if user_id:
208
+ query = """
209
+ SELECT spec FROM schemas
210
+ WHERE LOWER(name) = LOWER($1)
211
+ AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
212
+ LIMIT 1
213
+ """
214
+ row = await db.fetchrow(query, schema_name, user_id)
215
+ else:
216
+ # No user_id - only search public schemas
217
+ query = """
218
+ SELECT spec FROM schemas
219
+ WHERE LOWER(name) = LOWER($1)
220
+ AND (user_id = 'system' OR user_id IS NULL)
221
+ LIMIT 1
222
+ """
223
+ row = await db.fetchrow(query, schema_name)
224
+ logger.debug(f"Executing schema lookup: name={schema_name}, user_id={user_id or 'public'}")
207
225
 
208
226
  if row:
209
227
  spec = row.get("spec")
@@ -231,73 +249,65 @@ def load_agent_schema(
231
249
  enable_db_fallback: bool = True,
232
250
  ) -> dict[str, Any]:
233
251
  """
234
- Load agent schema from YAML file with unified search logic and caching.
252
+ Load agent schema with database-first priority for hot-reloading support.
235
253
 
236
254
  Schema names are case-invariant - "Rem", "rem", "REM" all resolve to the same schema.
237
255
 
238
- Filesystem schemas are cached indefinitely (immutable, versioned with code).
239
- Database schemas (future) will be cached with TTL for invalidation.
256
+ **IMPORTANT**: Database is checked FIRST (before filesystem) to enable hot-reloading
257
+ of schema updates without redeploying the application. This allows operators to
258
+ update schemas via `rem process ingest` and have changes take effect immediately.
240
259
 
241
260
  Handles path resolution automatically:
242
- - "rem" → searches schemas/agents/rem.yaml (top-level)
243
- - "moment-builder" → searches schemas/agents/core/moment-builder.yaml
244
- - "contract-analyzer" → searches schemas/agents/examples/contract-analyzer.yaml
245
- - "core/moment-builder" → searches schemas/agents/core/moment-builder.yaml
246
- - "/absolute/path.yaml" → loads directly
247
- - "relative/path.yaml" → loads relative to cwd
261
+ - "rem" → searches database, then schemas/agents/rem.yaml
262
+ - "moment-builder" → searches database, then schemas/agents/core/moment-builder.yaml
263
+ - "/absolute/path.yaml" → loads directly from filesystem (exact paths skip database)
264
+ - "relative/path.yaml" → loads relative to cwd (exact paths skip database)
248
265
 
249
266
  Search Order:
250
- 1. Check cache (if use_cache=True and schema found in FS cache)
251
- 2. Exact path if it exists (absolute or relative)
252
- 3. Custom paths from rem.register_schema_path() and SCHEMA__PATHS env var
253
- 4. Package resources: schemas/agents/{name}.yaml (top-level)
254
- 5. Package resources: schemas/agents/core/{name}.yaml
255
- 6. Package resources: schemas/agents/examples/{name}.yaml
256
- 7. Package resources: schemas/evaluators/{name}.yaml
257
- 8. Package resources: schemas/{name}.yaml
258
- 9. Database LOOKUP: schemas table (if enable_db_fallback=True and user_id provided)
267
+ 1. Exact path if it exists (absolute or relative) - skips database
268
+ 2. Database LOOKUP: schemas table (if enable_db_fallback=True) - PREFERRED for hot-reload
269
+ 3. Check cache (if use_cache=True and schema found in FS cache)
270
+ 4. Custom paths from rem.register_schema_path() and SCHEMA__PATHS env var
271
+ 5. Package resources: schemas/agents/{name}.yaml (top-level)
272
+ 6. Package resources: schemas/agents/core/{name}.yaml
273
+ 7. Package resources: schemas/agents/examples/{name}.yaml
274
+ 8. Package resources: schemas/evaluators/{name}.yaml
275
+ 9. Package resources: schemas/{name}.yaml
259
276
 
260
277
  Args:
261
278
  schema_name_or_path: Schema name or file path (case-invariant for names)
262
279
  Examples: "rem-query-agent", "Contract-Analyzer", "./my-schema.yaml"
263
280
  use_cache: If True, uses in-memory cache for filesystem schemas
264
- user_id: User ID for database schema lookup (required for DB fallback)
265
- enable_db_fallback: If True, falls back to database LOOKUP when file not found
281
+ user_id: User ID for database schema lookup
282
+ enable_db_fallback: If True, checks database FIRST for schema (default: True)
266
283
 
267
284
  Returns:
268
285
  Agent schema as dictionary
269
286
 
270
287
  Raises:
271
- FileNotFoundError: If schema not found in any search location (filesystem + database)
288
+ FileNotFoundError: If schema not found in any search location (database + filesystem)
272
289
  yaml.YAMLError: If schema file is invalid YAML
273
290
 
274
291
  Examples:
275
- >>> # Load by short name (cached after first load) - case invariant
276
- >>> schema = load_agent_schema("Contract-Analyzer") # same as "contract-analyzer"
292
+ >>> # Load by short name - checks database first for hot-reload support
293
+ >>> schema = load_agent_schema("Contract-Analyzer") # case invariant
277
294
  >>>
278
- >>> # Load from custom path (not cached - custom paths may change)
295
+ >>> # Load from custom path (skips database - exact paths always use filesystem)
279
296
  >>> schema = load_agent_schema("./my-agent.yaml")
280
297
  >>>
281
- >>> # Load evaluator schema (cached)
298
+ >>> # Load evaluator schema
282
299
  >>> schema = load_agent_schema("rem-lookup-correctness")
283
- >>>
284
- >>> # Load custom user schema from database (case invariant)
285
- >>> schema = load_agent_schema("My-Agent", user_id="user-123") # same as "my-agent"
286
300
  """
287
301
  # Normalize the name for cache key (lowercase for case-invariant lookups)
288
302
  cache_key = str(schema_name_or_path).replace('agents/', '').replace('schemas/', '').replace('evaluators/', '').replace('core/', '').replace('examples/', '').lower()
289
303
  if cache_key.endswith('.yaml') or cache_key.endswith('.yml'):
290
304
  cache_key = cache_key.rsplit('.', 1)[0]
291
305
 
292
- # Check cache first (only for package resources, not custom paths)
293
306
  path = Path(schema_name_or_path)
294
307
  is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
295
308
 
296
- if use_cache and not is_custom_path and cache_key in _fs_schema_cache:
297
- logger.debug(f"Loading schema from cache: {cache_key}")
298
- return _fs_schema_cache[cache_key]
299
-
300
309
  # 1. Try exact path first (absolute or relative to cwd) - must be a file, not directory
310
+ # Exact paths skip database lookup (explicit file reference)
301
311
  if path.exists() and path.is_file():
302
312
  logger.debug(f"Loading schema from exact path: {path}")
303
313
  with open(path, "r") as f:
@@ -306,10 +316,28 @@ def load_agent_schema(
306
316
  # Don't cache custom paths (they may change)
307
317
  return cast(dict[str, Any], schema)
308
318
 
309
- # 2. Normalize name for package resource search (lowercase)
319
+ # 2. Normalize name for lookups (lowercase)
310
320
  base_name = cache_key
311
321
 
312
- # 3. Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
322
+ # 3. Try database FIRST (if enabled) - enables hot-reload without redeploy
323
+ # Database schemas are NOT cached to ensure hot-reload works immediately
324
+ if enable_db_fallback and not is_custom_path:
325
+ try:
326
+ logger.debug(f"Checking database for schema: {base_name} (user_id={user_id or 'public'})")
327
+ db_schema = _load_schema_from_database(base_name, user_id)
328
+ if db_schema:
329
+ logger.info(f"✅ Loaded schema from database: {base_name}")
330
+ return db_schema
331
+ except Exception as e:
332
+ logger.debug(f"Database schema lookup failed: {e}")
333
+ # Fall through to filesystem search
334
+
335
+ # 4. Check filesystem cache (only for package resources, not custom paths)
336
+ if use_cache and not is_custom_path and cache_key in _fs_schema_cache:
337
+ logger.debug(f"Loading schema from cache: {cache_key}")
338
+ return _fs_schema_cache[cache_key]
339
+
340
+ # 5. Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
313
341
  from ..registry import get_schema_paths
314
342
 
315
343
  custom_paths = get_schema_paths()
@@ -340,7 +368,7 @@ def load_agent_schema(
340
368
  # Don't cache custom paths (they may change during development)
341
369
  return cast(dict[str, Any], schema)
342
370
 
343
- # 4. Try package resources with standard search paths
371
+ # 6. Try package resources with standard search paths
344
372
  for search_pattern in SCHEMA_SEARCH_PATHS:
345
373
  search_path = search_pattern.format(name=base_name)
346
374
 
@@ -365,19 +393,7 @@ def load_agent_schema(
365
393
  logger.debug(f"Could not load from {search_path}: {e}")
366
394
  continue
367
395
 
368
- # 5. Try database LOOKUP fallback (if enabled and user_id provided)
369
- if enable_db_fallback and user_id:
370
- try:
371
- logger.debug(f"Attempting database LOOKUP for schema: {base_name} (user_id={user_id})")
372
- db_schema = _load_schema_from_database(base_name, user_id)
373
- if db_schema:
374
- logger.info(f"✅ Loaded schema from database: {base_name} (user_id={user_id})")
375
- return db_schema
376
- except Exception as e:
377
- logger.debug(f"Database schema lookup failed: {e}")
378
- # Fall through to error below
379
-
380
- # 6. Schema not found in any location
396
+ # 7. Schema not found in any location
381
397
  searched_paths = [pattern.format(name=base_name) for pattern in SCHEMA_SEARCH_PATHS]
382
398
 
383
399
  custom_paths_note = ""
@@ -387,9 +403,9 @@ def load_agent_schema(
387
403
  db_search_note = ""
388
404
  if enable_db_fallback:
389
405
  if user_id:
390
- db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id='{user_id}' (no match)"
406
+ db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id IN ('{user_id}', 'system', NULL) (no match)"
391
407
  else:
392
- db_search_note = "\n - Database: (skipped - no user_id provided)"
408
+ db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id IN ('system', NULL) (no match)"
393
409
 
394
410
  raise FileNotFoundError(
395
411
  f"Schema not found: {schema_name_or_path}\n"
@@ -405,18 +421,21 @@ async def load_agent_schema_async(
405
421
  schema_name_or_path: str,
406
422
  user_id: str | None = None,
407
423
  db=None,
424
+ enable_db_fallback: bool = True,
408
425
  ) -> dict[str, Any]:
409
426
  """
410
- Async version of load_agent_schema for use in async contexts.
427
+ Async version of load_agent_schema with database-first priority.
411
428
 
412
429
  Schema names are case-invariant - "MyAgent", "myagent", "MYAGENT" all resolve to the same schema.
413
430
 
414
- This version accepts an existing database connection to avoid creating new connections.
431
+ **IMPORTANT**: Database is checked FIRST (before filesystem) to enable hot-reloading
432
+ of schema updates without redeploying the application.
415
433
 
416
434
  Args:
417
435
  schema_name_or_path: Schema name or file path (case-invariant for names)
418
436
  user_id: User ID for database schema lookup
419
437
  db: Optional existing PostgresService connection (if None, will create one)
438
+ enable_db_fallback: If True, checks database FIRST for schema (default: True)
420
439
 
421
440
  Returns:
422
441
  Agent schema as dictionary
@@ -424,7 +443,6 @@ async def load_agent_schema_async(
424
443
  Raises:
425
444
  FileNotFoundError: If schema not found
426
445
  """
427
- # First try filesystem search (sync operations are fine)
428
446
  path = Path(schema_name_or_path)
429
447
 
430
448
  # Normalize the name for cache key (lowercase for case-invariant lookups)
@@ -434,12 +452,7 @@ async def load_agent_schema_async(
434
452
 
435
453
  is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
436
454
 
437
- # Check cache
438
- if not is_custom_path and cache_key in _fs_schema_cache:
439
- logger.debug(f"Loading schema from cache: {cache_key}")
440
- return _fs_schema_cache[cache_key]
441
-
442
- # Try exact path (must be a file, not directory)
455
+ # 1. Try exact path first (skips database - explicit file reference)
443
456
  if path.exists() and path.is_file():
444
457
  logger.debug(f"Loading schema from exact path: {path}")
445
458
  with open(path, "r") as f:
@@ -448,7 +461,51 @@ async def load_agent_schema_async(
448
461
 
449
462
  base_name = cache_key
450
463
 
451
- # Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
464
+ # 2. Try database FIRST (if enabled) - enables hot-reload without redeploy
465
+ if enable_db_fallback and not is_custom_path:
466
+ from rem.services.postgres import get_postgres_service
467
+
468
+ should_disconnect = False
469
+ if db is None:
470
+ db = get_postgres_service()
471
+ if db:
472
+ await db.connect()
473
+ should_disconnect = True
474
+
475
+ if db:
476
+ try:
477
+ if user_id:
478
+ query = """
479
+ SELECT spec FROM schemas
480
+ WHERE LOWER(name) = LOWER($1)
481
+ AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
482
+ LIMIT 1
483
+ """
484
+ row = await db.fetchrow(query, base_name, user_id)
485
+ else:
486
+ # No user_id - only search public schemas
487
+ query = """
488
+ SELECT spec FROM schemas
489
+ WHERE LOWER(name) = LOWER($1)
490
+ AND (user_id = 'system' OR user_id IS NULL)
491
+ LIMIT 1
492
+ """
493
+ row = await db.fetchrow(query, base_name)
494
+ if row:
495
+ spec = row.get("spec")
496
+ if spec and isinstance(spec, dict):
497
+ logger.info(f"✅ Loaded schema from database: {base_name}")
498
+ return spec
499
+ finally:
500
+ if should_disconnect:
501
+ await db.disconnect()
502
+
503
+ # 3. Check filesystem cache
504
+ if not is_custom_path and cache_key in _fs_schema_cache:
505
+ logger.debug(f"Loading schema from cache: {cache_key}")
506
+ return _fs_schema_cache[cache_key]
507
+
508
+ # 4. Try custom schema paths (from registry + SCHEMA__PATHS env var + auto-detected)
452
509
  from ..registry import get_schema_paths
453
510
  custom_paths = get_schema_paths()
454
511
 
@@ -470,7 +527,7 @@ async def load_agent_schema_async(
470
527
  schema = yaml.safe_load(f)
471
528
  return cast(dict[str, Any], schema)
472
529
 
473
- # Try package resources
530
+ # 5. Try package resources
474
531
  for search_pattern in SCHEMA_SEARCH_PATHS:
475
532
  search_path = search_pattern.format(name=base_name)
476
533
  try:
@@ -484,35 +541,6 @@ async def load_agent_schema_async(
484
541
  except Exception:
485
542
  continue
486
543
 
487
- # Try database lookup
488
- if user_id:
489
- from rem.services.postgres import get_postgres_service
490
-
491
- should_disconnect = False
492
- if db is None:
493
- db = get_postgres_service()
494
- if db:
495
- await db.connect()
496
- should_disconnect = True
497
-
498
- if db:
499
- try:
500
- query = """
501
- SELECT spec FROM schemas
502
- WHERE LOWER(name) = LOWER($1)
503
- AND (user_id = $2 OR user_id = 'system' OR user_id IS NULL)
504
- LIMIT 1
505
- """
506
- row = await db.fetchrow(query, base_name, user_id)
507
- if row:
508
- spec = row.get("spec")
509
- if spec and isinstance(spec, dict):
510
- logger.info(f"✅ Loaded schema from database: {base_name}")
511
- return spec
512
- finally:
513
- if should_disconnect:
514
- await db.disconnect()
515
-
516
544
  # Not found
517
545
  raise FileNotFoundError(f"Schema not found: {schema_name_or_path}")
518
546
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remdb
3
- Version: 0.3.202
3
+ Version: 0.3.245
4
4
  Summary: Resources Entities Moments - Bio-inspired memory system for agentic AI workloads
5
5
  Project-URL: Homepage, https://github.com/Percolation-Labs/reminiscent
6
6
  Project-URL: Documentation, https://github.com/Percolation-Labs/reminiscent/blob/main/README.md
@@ -39,7 +39,7 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.49b0
39
39
  Requires-Dist: opentelemetry-instrumentation>=0.49b0
40
40
  Requires-Dist: opentelemetry-sdk>=1.28.0
41
41
  Requires-Dist: psycopg[binary]>=3.2.0
42
- Requires-Dist: pydantic-ai>=0.0.14
42
+ Requires-Dist: pydantic-ai>=1.0.0
43
43
  Requires-Dist: pydantic-settings>=2.6.0
44
44
  Requires-Dist: pydantic>=2.10.0
45
45
  Requires-Dist: pydub>=0.25.0
@@ -3,51 +3,54 @@ rem/config.py,sha256=cyXFpqgTvHeYeIriiQHGC1jSokp55BkJtMS1cVu-C1M,6769
3
3
  rem/mcp_server.py,sha256=OK0XaO2k_7BnVRozOfH_xRL51SkRN9kLoNNp_zrrGeA,1383
4
4
  rem/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  rem/registry.py,sha256=AAGcr7oRHiHsX2mu7TL4EgKw39IFea8F-YIgbX58CUM,10545
6
- rem/settings.py,sha256=Ecs3P6sxDnu1Ens5NsqNR998XnKRx5DOItxbM0au1tY,60155
7
- rem/agentic/README.md,sha256=brF1Z1V6s8z5TLoyNPQ3BC5mqDy648QRPOQmGu6Jkzw,21815
6
+ rem/settings.py,sha256=W1ktvJvcna5i-zXHWa55t0uMN0uG0NoVJrvWmDhvTuE,62430
7
+ rem/agentic/README.md,sha256=DHt53giAbyEpp_8NV_WFkJJlfvVJX7lLyqNZRAz-OOo,23203
8
8
  rem/agentic/__init__.py,sha256=-UZiEYpodfD5xDns6L0nYSqK9owr3NxiWsq6vmK1tGk,1268
9
- rem/agentic/context.py,sha256=ay79gqaf2kd96uCw4jdb8klNYRaiMdWjb7R6N9mSvaA,12879
10
- rem/agentic/context_builder.py,sha256=0V-uN5B3Q7VPVH4uaN26aHMDd_ChagfCiwfYty30LbI,14583
9
+ rem/agentic/context.py,sha256=_UlvHlTHdFQnOULVXrdr0SUmO8LmBbcsXzwIxGVSvzM,15635
10
+ rem/agentic/context_builder.py,sha256=7MuqcGNMqCI2XNTnLiL7j7Peb87am0gbfQ_qqd029-A,14229
11
11
  rem/agentic/llm_provider_models.py,sha256=bkBs_6aQ0maerlnQNH5hWv21Os3mX5Q14zXTW_8bGgI,10508
12
12
  rem/agentic/query.py,sha256=yBtVT9bCUT9DPKRw9UltzN4o9wgB-Ry-FfW814Eg1WE,3612
13
13
  rem/agentic/query_helper.py,sha256=DAr-he5XsJfwrcEzfJCNujWYU6MFvK0JFXee2ulRMQU,2458
14
- rem/agentic/schema.py,sha256=lc819ZJNiGC3tEQO6sfN-H93PU9-wqXTNA7h1Cn9myY,22993
14
+ rem/agentic/schema.py,sha256=YDmkfR6JEV9elgOEc-7e_YZzLAtKMZ2f-viBvJIPeZY,22991
15
15
  rem/agentic/serialization.py,sha256=zwjyvcGjTHuChG9goRHEVlA3etAekVJGzv9o6Fo7raM,7999
16
16
  rem/agentic/agents/README.md,sha256=npq2ENb5dNGYxqGQYTb9E0JquyKcXrMt8kM2q6LRxRk,4972
17
17
  rem/agentic/agents/__init__.py,sha256=OV-9J0EpxLv_zjhv9v2o-42tFcSkLabrwgumood27ZI,893
18
18
  rem/agentic/agents/agent_manager.py,sha256=idT4brDCSzjDKkm897acKHgbJb25FISvDKqeWyU7hak,8228
19
19
  rem/agentic/agents/sse_simulator.py,sha256=NTJuunUlEY5KFUKbxgkrt5iihdVIEAqPsufUVisziaQ,16392
20
20
  rem/agentic/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- rem/agentic/mcp/tool_wrapper.py,sha256=0BDtg7Dp1Hk6rsCeZW39YV_DWPAsBwZrJ67r0KTKa8g,12172
21
+ rem/agentic/mcp/tool_wrapper.py,sha256=7xpF1UuGZQy0rfuzQgkNxHGbwWFbNWnnIjtKupxRMDw,12170
22
22
  rem/agentic/otel/__init__.py,sha256=IC0lLMmuxXRZrhO9p8-GQ6raZDP9YE3gcuCwl6vBv4c,195
23
23
  rem/agentic/otel/setup.py,sha256=-NL5jDXuDdQMKEhZfOtjZ2kJtpayQ7dhM0p1OrU185c,9629
24
24
  rem/agentic/providers/phoenix.py,sha256=_e8-S8aSfpX2EulH0nXAermoDZ1c9Kh3QALGTCvCmC4,35422
25
- rem/agentic/providers/pydantic_ai.py,sha256=_9EdJrxFZDptgTAJ3MuXyen7zok91CVaqX7Dwvrxzp8,34188
25
+ rem/agentic/providers/pydantic_ai.py,sha256=rMkfJSy_XcrgP5W8uhWGasdYJUxfU2wpdT8BHVn4mqM,35075
26
26
  rem/agentic/tools/__init__.py,sha256=tb_9ml0i2LtEALAJ6h7D91xVEA_8ktDzD4s3nM0MsUE,147
27
27
  rem/agentic/tools/rem_tools.py,sha256=0Aps2TcA3z6WLJQ1M98iYX-1uoIEwTozmwodl2_AUCI,7833
28
28
  rem/api/README.md,sha256=68KtBi1nkXm_J0skGVBhchXP-cLNaBBka6ZhLqAncoA,19998
29
29
  rem/api/deps.py,sha256=3_M8YOdyzEkr4kIhjJvxuDvnSaq7U8TLx1sZkEG63eU,6611
30
30
  rem/api/main.py,sha256=6BcUdr0F74-RnVytToh8s9H7OmmO11Xgl_p03FjeDks,16757
31
31
  rem/api/mcp_router/prompts.py,sha256=bVNsJMur6i0oyd38WIr-r0kUNUAlcGG595WVhBDwxik,4077
32
- rem/api/mcp_router/resources.py,sha256=sN9quo7HsGxlDpOS1_1kwM1RhT9oayvpz9Bsi0DwKkM,18788
32
+ rem/api/mcp_router/resources.py,sha256=plGhg8bp5hOstoIgPIpniVsBaWjSxz_dHsiabqWWh7g,26814
33
33
  rem/api/mcp_router/server.py,sha256=06yqR7CBAcmMqHJyUpndQXXYCnu42M5Uen3Oh4mnMVI,11550
34
- rem/api/mcp_router/tools.py,sha256=PaDDPRHKg8TYTFHnQi1a74pKlijEmW63gx367hgo2Bk,51337
34
+ rem/api/mcp_router/tools.py,sha256=jD9kStAnLtgdX33EaWrYds_yUT151sPh84WjYkR9izc,60943
35
35
  rem/api/middleware/tracking.py,sha256=ZlFkCVsmIfGuiRX1PPWN0vEIPZoOFIKqMZ3P-CjwfHc,6453
36
- rem/api/routers/admin.py,sha256=AEvfi5QyfTG_3a8LZ5FPgbOXPajKeIu_5P6oqmLYa1E,14696
37
- rem/api/routers/auth.py,sha256=onNJngduQm3KxezjtVpDoSqhic46lajk8jBYf17tOUc,24868
38
- rem/api/routers/dev.py,sha256=rLySeGas9USZxMxJiHU4ziaA8EK9aoc8dg7TpJagV-I,2229
39
- rem/api/routers/feedback.py,sha256=UfDQlqeRwB1b4Q0agJOBahiAHL_aAHMb_l7TEjwZuGs,11378
40
- rem/api/routers/messages.py,sha256=t9OsCMZs0RCrGySXiG_0gjhpOWiPy7z5lh6oi0vQw6M,18728
41
- rem/api/routers/models.py,sha256=GMhDJzLrWe-gp842F1Vua2XOjZNAcIG-p-tCquJ5FQM,1946
42
- rem/api/routers/query.py,sha256=cYV2HoSqMHr7kgeEFhx2GqUt_9Geg756JgJoYrX6OrU,13972
43
- rem/api/routers/shared_sessions.py,sha256=9vQoQOsQhqWzcoJZ7_dhvi6zJlR5B72LP5THLfm--Ts,12259
36
+ rem/api/routers/admin.py,sha256=t5WRsi_niGvdqibk6Qel6T7uF0lO2AdDCG1sQC4HVB4,15179
37
+ rem/api/routers/auth.py,sha256=gF85VMen9BaHxWGWi5xXXYH5MfxZDmtaE2pGMxEfeZ8,31260
38
+ rem/api/routers/common.py,sha256=Sw39bkCOrqoJl0hB9ZuJhXd0223Aj0rJ9Uej-4DPAAU,517
39
+ rem/api/routers/dev.py,sha256=UpwEYZYuxsWSSHZosirdUp1uoyYbD_Mg47z4beqFx-4,2389
40
+ rem/api/routers/feedback.py,sha256=sr-NNawuAYEi-EwyCHYNwI0zGdS-Cwjs6NfGc6GZrnI,11525
41
+ rem/api/routers/messages.py,sha256=YMx3Z_dqDrltt1ZUleiLaBamrrOBD-hvLIhRKlBVn4M,20386
42
+ rem/api/routers/models.py,sha256=VvHA1JmpiyVCHhH68s8PNwpVxSvAyGlXQJ3T8dFMwRs,2088
43
+ rem/api/routers/query.py,sha256=7g9e-LdrlIMr-VpW8MZFVT0oEVuoF8O5fIaUovp2u0M,14104
44
+ rem/api/routers/shared_sessions.py,sha256=2CRAZUR8OLq39KC1r4IBQycE5PYO5Jg9lSJG8mnPa7M,12866
44
45
  rem/api/routers/chat/__init__.py,sha256=fck9klAzF7HJHNPAhl0B63uSavXvs6h26QhUsByf4JM,113
45
- rem/api/routers/chat/completions.py,sha256=OSQ-nRMVwUEHCMbKBcX5HOTPVkLiOKeJt1yCUDx2zp8,29771
46
+ rem/api/routers/chat/child_streaming.py,sha256=B-XAvAK0UlJOCN_RNwNESgVkdpKg3emiPo2s3MdTuYs,13457
47
+ rem/api/routers/chat/completions.py,sha256=I6EKMVfEe4QmfsEfW6mTK7riJWZUzkWZCgNRnmJG7ik,29637
46
48
  rem/api/routers/chat/json_utils.py,sha256=BVRu-7PWIHTbC9Ubq4MfifZ8qYQZpcGhEgFgPVcXXKE,2191
47
49
  rem/api/routers/chat/models.py,sha256=kzBxRvm5Ie2IchJrnFOom8cx6_ieEbuF2RqfiRJNNh8,7339
48
50
  rem/api/routers/chat/otel_utils.py,sha256=al_4v044T3sOtIZtT9kHiNT6Twlc7wqz26edCcUSHSY,930
49
- rem/api/routers/chat/sse_events.py,sha256=yiwhuG2Fx0-iJwNIFbVDDNj6UpF_MjBMuX_16V8PzDU,16551
50
- rem/api/routers/chat/streaming.py,sha256=ExGS94-GAJwF58jbUKOUgt9l97nKmtd9d1L5tcfU9RQ,47871
51
+ rem/api/routers/chat/sse_events.py,sha256=m1-2HodSKx9NI6OCcgX17kHcV5GBYmp1iOm1lG8FdrE,16724
52
+ rem/api/routers/chat/streaming.py,sha256=6D98GxNSF-EIfcgzxumUaFm0gNee4D4-bhkWwF6hrgc,43594
53
+ rem/api/routers/chat/streaming_utils.py,sha256=ipVHWATbCjrg6Rrad9SMz0gIe6aS56lDn9fwwuFUJvA,9735
51
54
  rem/auth/README.md,sha256=BpZUqEVYMUpQG4guykyuvmtzlH3_LsGzspuRZS20i8k,8631
52
55
  rem/auth/__init__.py,sha256=ebS-_x21TZsgq7QVgziUpXagSVQU5y0kIxqc_ZywzCE,1027
53
56
  rem/auth/jwt.py,sha256=VT77nTYqCt4tkbd_ZmXQy9wU3LcjQ8WLqm9sEcYLYLs,11600
@@ -60,21 +63,22 @@ rem/auth/providers/microsoft.py,sha256=sv6emYa5B7XTk6gi18n_UCLPDqUmrrsuDnAnWGvJA
60
63
  rem/cli/README.md,sha256=Cn41x7YoNlnNg3t9WBMGfNXqZBfhjmU6hgPNGL1mlpo,13677
61
64
  rem/cli/__init__.py,sha256=NazCCnBFZwMkvJgzeGkfYveP_MUpvbqHcOLZihew0-Q,188
62
65
  rem/cli/dreaming.py,sha256=UUxx9zXFDIvI5QhCLB303TPH0OiYMnr3l2YhF2GvF_8,11537
63
- rem/cli/main.py,sha256=gP-lnD6kkCGeeMHh9aWPRb26CT1zpsDUwuQ30Zqkobw,3127
66
+ rem/cli/main.py,sha256=JvpdGixaBFMdKsAxBGza71Fy0_yejDh7uObFiHNq5Hc,3226
64
67
  rem/cli/commands/README.md,sha256=CxTm4pAKVzE780sWn_sAILu2_nH_0oh9whppZvW4bew,9295
65
68
  rem/cli/commands/__init__.py,sha256=wKff1WrBXwf-vDXjSvUuk-61Npm5716okVnOQ22FcEk,30
66
- rem/cli/commands/ask.py,sha256=uxKM9z_k6iNi39UC1WQ8crZcT1u17TWo_MwgI0nZANo,19374
69
+ rem/cli/commands/ask.py,sha256=3A8oCyUt1IlYWLYX390s1Yk--OgxdMdXuz8VqdqJiOk,23863
67
70
  rem/cli/commands/cluster.py,sha256=MQThC3Da73ixVQ75UYxleQlB8AqPQLzEK73eaB8pNFI,64247
68
71
  rem/cli/commands/configure.py,sha256=GQzlER8PkUCTaeYuLbXUYoeqlmEDafcjAcPJrDchC1I,16595
69
72
  rem/cli/commands/db.py,sha256=9uAJT4xkMstVuqXjj02y-4A3y5G8DUsEaLf44Q3ayXA,28141
70
73
  rem/cli/commands/dreaming.py,sha256=2P8nyX9gnRgyCJZrDuyJt5_YAsFmjUGa6dg7OvoLA8k,13292
71
74
  rem/cli/commands/experiments.py,sha256=dRJKtvrGQu0a9bQZaLnVfdWhaur2bKYviixqOnYQC-k,62472
72
75
  rem/cli/commands/mcp.py,sha256=PiP_zXflZ2lPVgmH3N8EGOWXDSfvNTQJD-MMW3ym3xo,1666
73
- rem/cli/commands/process.py,sha256=rUXkiDWG1UiulFo74dJUU1WIH6lpP9TrLxsSlxD0Bp8,14263
76
+ rem/cli/commands/process.py,sha256=JH5xcf11pDlw2eD5Cp2taFPRC0DbiHyiZcQfKSDk8rY,14681
77
+ rem/cli/commands/query.py,sha256=ttJObJD6YCqlfT0noCuSc-27PopEP7c293FbCw7s5nE,3712
74
78
  rem/cli/commands/scaffold.py,sha256=hv2-ozD1bbD8FEky7OdIDzcgu-KISs5ek6APqykdZ6I,1618
75
79
  rem/cli/commands/schema.py,sha256=oCsRUoih2MC_mpxmj14hsQy0xWLCddSUYcfGnDMlbuw,7325
76
80
  rem/cli/commands/serve.py,sha256=ku6z5gxRwmY-vNdNELGPA8aiYyO4QGRgJ_H4wpusd8Y,2926
77
- rem/cli/commands/session.py,sha256=rUDeLnBNwc6A1zSOOs-uHyfixDmBYlVtLToJpbPxo7I,9851
81
+ rem/cli/commands/session.py,sha256=2vPdaSXSWfs3YozxAzHoOY1ph9l9V4PAitzv2wjOcyI,13933
78
82
  rem/models/core/__init__.py,sha256=BBbARx5_7uVz5FuuoPdFm3tbiWZWubs97i3smU0UxXg,1449
79
83
  rem/models/core/core_model.py,sha256=aYVx2905n0b6TGLnIiV5YMWO2O8pxHVtLEWljWvURxU,2617
80
84
  rem/models/core/engram.py,sha256=CuoilA74hmlgMT2mZCoEEh0jFsMrKUw9wdyFOygBa8E,10135
@@ -92,14 +96,14 @@ rem/models/entities/ontology.py,sha256=1K9rNZ32BjS24tmjYN89zW81kFVw2vAfcY24ldJqY
92
96
  rem/models/entities/ontology_config.py,sha256=fe-LLM-AaKznVoQ02ou2GvPSAp_Bwez0rk3H0RIUYTw,5055
93
97
  rem/models/entities/resource.py,sha256=FW7R_AylZilb-1iYfZA5MMQw2zA42CUVweKgO-4cwqM,3407
94
98
  rem/models/entities/schema.py,sha256=CEcd49kR_6YgaLLKsWaIb2J0KdbVsgYoi_srPgzr9Aw,2945
95
- rem/models/entities/session.py,sha256=VKeTAZZphrKz379Av1hhUTWfQ-DbxLAt3CfU3aDHfwk,2499
99
+ rem/models/entities/session.py,sha256=CODIf3979RZ-bj6gwVZFNmnlKmd6QnxhsmGPTSjn4IA,2519
96
100
  rem/models/entities/shared_session.py,sha256=PWTH637NHmwziXCgr1BM0KXWLUzHrbfLlYKLH3qdU6A,5901
97
101
  rem/models/entities/subscriber.py,sha256=0x51UkGRkAeJfr_0u4srN8H0NrXJEv5MdESeQsjvin4,5181
98
102
  rem/models/entities/user.py,sha256=Ps-CWn-Rkj7yYEW768_mSu3maDxysxsJWT2T7XisuN4,2879
99
103
  rem/schemas/README.md,sha256=_WH2A78jyLb11xu8q1tu4pDMlgZfE9WjYqrAUbn2BIM,13588
100
104
  rem/schemas/__init__.py,sha256=cY7Hqc056Mb3t12nfpkAK6WZDvOP1gk4rv0CK4VbhTk,213
101
105
  rem/schemas/agents/README.md,sha256=FZI5B8Miqod7KY3KxidW4q8u9W7FbtigV2VU7ropPS0,2815
102
- rem/schemas/agents/rem.yaml,sha256=w8hIZvAnoWmYJrob1gEZ-yi6BXLQoafwlysYeGU168g,8390
106
+ rem/schemas/agents/rem.yaml,sha256=oYVvyfbyW0wCbF-XVrfW3FitbTF4Zdgr5hOHcJ-19Ls,8389
103
107
  rem/schemas/agents/core/agent-builder.yaml,sha256=-Yy-X1nreK1hEjGad1Pr0ROtG1LiRtidq8-63CMEqL4,7399
104
108
  rem/schemas/agents/core/moment-builder.yaml,sha256=-nieKbEiYKiIwBtTCBtIVDKV-cfXpGn0AJ66BUUm48U,8368
105
109
  rem/schemas/agents/core/rem-query-agent.yaml,sha256=dQyShquyn-2nGooy8tyZ588etfx4kzfAE1xDIBCJCVI,10265
@@ -171,7 +175,7 @@ rem/services/postgres/migration_service.py,sha256=2irsWfzczZ0_-wge6ReyCrFrE3Hxvn
171
175
  rem/services/postgres/programmable_diff_service.py,sha256=Ip6gRm7LRdYww_5nWkhnXPdqjHSW4sbFOWjBatLHiQs,25075
172
176
  rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=523lJuq_xeRWVo8D3ocFd7else5ZUw2XAketmhDN1wA,17295
173
177
  rem/services/postgres/register_type.py,sha256=AF88kjn0Gdi8xEaAj5JimH1BrzZ7ONaSOQ4qKKXLhTw,11387
174
- rem/services/postgres/repository.py,sha256=73oXs5Ya2JNM_bpS1Xh9AJlvRjF0vJYAJlAEqaRbpyM,16446
178
+ rem/services/postgres/repository.py,sha256=U_I43BSGjK8qVBCCjyJjp6kCa2-U4A19Q-WdBMK_lfg,16630
175
179
  rem/services/postgres/schema_generator.py,sha256=R0qJI_wFp4JgkGsh42kVtxdCAWjd129qlGV2_3YdgoM,23943
176
180
  rem/services/postgres/service.py,sha256=3CIOP7LuaK4p2rYTyscIXasGLTwjb62HnAGbOCuEm74,27122
177
181
  rem/services/postgres/sql_builder.py,sha256=dgezomG1s-cLcu8Q3u8AjOWO3Rtyg4r_m91UAE4vc9o,10418
@@ -182,18 +186,19 @@ rem/services/rem/executor.py,sha256=o30fYs7Y91arcCZ70PurPn-Q_7gXjxZXerk70A-MM4A,
182
186
  rem/services/rem/parser.py,sha256=w7jFSzWuNSTrhPDw3s5IH4O0kVT4zwBp0i52RyNEPNs,6896
183
187
  rem/services/rem/queries.py,sha256=k-fniVSMBcq4TPUw-g4kp6D9Fbs5DphqUwzAk2wXv5M,5146
184
188
  rem/services/rem/query.py,sha256=z4Qcaed1mPG2p-4pazEUlnUFqOEYxrKGYLffwD2-V-c,12178
185
- rem/services/rem/service.py,sha256=cYPPCZ90S9QRWi_4JxEe9oybdDM8Is7wgYt8EpLoiVY,21093
189
+ rem/services/rem/service.py,sha256=--yHq3ODXxX2mgc2AmUS_pNm46g2S8aEyJ0vEZYrjU0,22773
186
190
  rem/services/session/README.md,sha256=WDoVWMRXrSh6wRSlUQ0oIHUItOol65INl86VCNPUOYQ,10446
187
- rem/services/session/__init__.py,sha256=htT9QvxtfeSJ5ExTPheQhTlrB77e4XSJ3e_PUhYU250,365
188
- rem/services/session/compression.py,sha256=uxXOA5pwN1fg49C8aaQmJI41JayfpNqvXopnFgldqC8,18530
189
- rem/services/session/pydantic_messages.py,sha256=KaU8Tgp7qzBNrq98Dr65poZW_IEaD6223ZYMVTmxPJs,8412
190
- rem/services/session/reload.py,sha256=qbs9yYYBaEH0n_XN_A4BqHcB0RIX_JMkZjHNzUR6zY4,2805
191
+ rem/services/session/__init__.py,sha256=y9tvBcto0qUcduZwAQn1EwrAo-bZ0ZErodz_1SeN5kU,417
192
+ rem/services/session/compression.py,sha256=WHh0IZP-pM3_QNeYcYLyq-9Zz_p2HT4iFezor5RQcks,18936
193
+ rem/services/session/pydantic_messages.py,sha256=1mLq-AJfa8Gf0kfwmPGW_cghFPKEB5dkHHFmdeP9-lY,12338
194
+ rem/services/session/reload.py,sha256=Abr9QOq_PPTsQelMGzWvgh8fKRbW2WH_ZT8ATSsvsgQ,2896
191
195
  rem/sql/background_indexes.sql,sha256=wbQMtgap247K29w24aPPHhhF0tdcFuZ2nCWyALh51DM,1985
192
- rem/sql/migrations/001_install.sql,sha256=FfJjt7HqC9BPQSdyVOWT51Cv9OuybFPCGlmpoTCaG7k,35567
196
+ rem/sql/migrations/001_install.sql,sha256=95-f4L8KUo5te9r_G0fNPdsr8KXK34HaF-dH_vbdr9k,35485
193
197
  rem/sql/migrations/002_install_models.sql,sha256=bxb35SX4KZ9qLAlQrKf35R82F3jWiqmVyeuvDRlXUeA,153766
194
198
  rem/sql/migrations/003_optional_extensions.sql,sha256=QACy3J50ZgV_4BHNkkT3iswkE1ijc0oCAOgavv6KC5g,12443
195
- rem/sql/migrations/004_cache_system.sql,sha256=iUMRj4r45EhI2kKABp9PS9i_Bs16715HG2ovbYMOsgc,10571
199
+ rem/sql/migrations/004_cache_system.sql,sha256=dbjKNTFsB2pHAOqThkpsK_pMWN0GKZoFvQopHauqzjY,10728
196
200
  rem/sql/migrations/005_schema_update.sql,sha256=fVcuUt0I24UXMEWA25TM-kN29GC19IAqxlxFP-3Z2ys,5055
201
+ rem/sql/migrations/migrate_session_id_to_uuid.sql,sha256=-H4ROtu4SPHTVbzW60Am1YdpJ_OHagWCAwgqd3wbDIM,1248
197
202
  rem/utils/AGENTIC_CHUNKING.md,sha256=Z9IyL5yoFTlvamPE5KA7cs0Btoc_6bq8hh7Q_WARlw8,17230
198
203
  rem/utils/README.md,sha256=Osix2SVYAECMFTFnLhn8D8rsPrtNaCBWfkZfkn5RS60,18087
199
204
  rem/utils/__init__.py,sha256=ZGMTgR7g-V3fhfgKo791wGBhdxy72xTJSo7Q_xwkQRI,1417
@@ -209,7 +214,7 @@ rem/utils/files.py,sha256=6ax-5vmk_4cI-IG55PT9sKj_DqXBl32RkTRSsxqvgGY,8759
209
214
  rem/utils/markdown.py,sha256=zhfSiSRX36vky1b2UOGKsuSr11L2l6Kl_O7iSfwQXBY,401
210
215
  rem/utils/mime_types.py,sha256=8KGEuPWVdQ8r1DFLsgiaAgEYqMaaQIk-6lCVOBB1z_A,5346
211
216
  rem/utils/model_helpers.py,sha256=c60hxrS6wmYCIJjjl7uMq4cE-GCe27A7YAizRjKqtJE,15160
212
- rem/utils/schema_loader.py,sha256=waiIqxAFGpJbPKLf_pqk87KUjAEKs-rJcm9Gv9H-aKA,24194
217
+ rem/utils/schema_loader.py,sha256=FEooLXUxzzpoUeNsgwYGM5AkM6flsm4cp1Pm6L3mDSA,25933
213
218
  rem/utils/sql_paths.py,sha256=4bEHU3J3liZdhWYu0WSpCQSo-wfO0sHC_BrJlStRAks,4257
214
219
  rem/utils/sql_types.py,sha256=VKGmDhxPP91EnjJ6h78Q2sUvjBulowR1brtgAdACbtE,10622
215
220
  rem/utils/user_id.py,sha256=AhrUniMZYDybHT6mcv9RalUS3klobqkoMmPh9ZxiZcU,2107
@@ -224,7 +229,7 @@ rem/workers/dreaming.py,sha256=UqCf-iBUhzBVBRFj7_DtR6q27oRo7EUoal9qqHLzlo4,17823
224
229
  rem/workers/engram_processor.py,sha256=Ws92kAILMLK_np3F1HRmhKKXiruLIvFn3o9MY3V2W8g,10779
225
230
  rem/workers/sqs_file_processor.py,sha256=tX8S0yo2n1XGvaZ7JUqeGmtTwxybQqz3wkHT2j6Ak7Y,6597
226
231
  rem/workers/unlogged_maintainer.py,sha256=KhebhXl3s6DwvHnXXEJ45r5tLK9PNj-0KclNIQVQ68s,15817
227
- remdb-0.3.202.dist-info/METADATA,sha256=_r_Mo484kcAAZW2uqAgbV5LyE7YoskzzAOEiIed6ZWM,53341
228
- remdb-0.3.202.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
229
- remdb-0.3.202.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
230
- remdb-0.3.202.dist-info/RECORD,,
232
+ remdb-0.3.245.dist-info/METADATA,sha256=aqFWcRJ1shoMwHMtXAAkX4hkEq-9HPNdHZBwxrE0C8w,53340
233
+ remdb-0.3.245.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
234
+ remdb-0.3.245.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
235
+ remdb-0.3.245.dist-info/RECORD,,