remdb 0.3.181__py3-none-any.whl → 0.3.223__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 (48) hide show
  1. rem/agentic/README.md +262 -2
  2. rem/agentic/context.py +173 -0
  3. rem/agentic/context_builder.py +12 -2
  4. rem/agentic/mcp/tool_wrapper.py +2 -2
  5. rem/agentic/providers/pydantic_ai.py +1 -1
  6. rem/agentic/schema.py +2 -2
  7. rem/api/main.py +1 -1
  8. rem/api/mcp_router/server.py +4 -0
  9. rem/api/mcp_router/tools.py +542 -170
  10. rem/api/routers/admin.py +30 -4
  11. rem/api/routers/auth.py +106 -10
  12. rem/api/routers/chat/completions.py +66 -18
  13. rem/api/routers/chat/sse_events.py +7 -3
  14. rem/api/routers/chat/streaming.py +254 -22
  15. rem/api/routers/common.py +18 -0
  16. rem/api/routers/dev.py +7 -1
  17. rem/api/routers/feedback.py +9 -1
  18. rem/api/routers/messages.py +176 -38
  19. rem/api/routers/models.py +9 -1
  20. rem/api/routers/query.py +12 -1
  21. rem/api/routers/shared_sessions.py +16 -0
  22. rem/auth/jwt.py +19 -4
  23. rem/auth/middleware.py +42 -28
  24. rem/cli/README.md +62 -0
  25. rem/cli/commands/db.py +33 -19
  26. rem/cli/commands/process.py +171 -43
  27. rem/models/entities/ontology.py +18 -20
  28. rem/schemas/agents/rem.yaml +1 -1
  29. rem/services/content/service.py +18 -5
  30. rem/services/postgres/__init__.py +28 -3
  31. rem/services/postgres/diff_service.py +57 -5
  32. rem/services/postgres/programmable_diff_service.py +635 -0
  33. rem/services/postgres/pydantic_to_sqlalchemy.py +2 -2
  34. rem/services/postgres/register_type.py +11 -10
  35. rem/services/postgres/repository.py +14 -4
  36. rem/services/session/__init__.py +8 -1
  37. rem/services/session/compression.py +40 -2
  38. rem/services/session/pydantic_messages.py +276 -0
  39. rem/settings.py +28 -0
  40. rem/sql/migrations/001_install.sql +125 -7
  41. rem/sql/migrations/002_install_models.sql +136 -126
  42. rem/sql/migrations/004_cache_system.sql +7 -275
  43. rem/sql/migrations/migrate_session_id_to_uuid.sql +45 -0
  44. rem/utils/schema_loader.py +6 -6
  45. {remdb-0.3.181.dist-info → remdb-0.3.223.dist-info}/METADATA +1 -1
  46. {remdb-0.3.181.dist-info → remdb-0.3.223.dist-info}/RECORD +48 -44
  47. {remdb-0.3.181.dist-info → remdb-0.3.223.dist-info}/WHEEL +0 -0
  48. {remdb-0.3.181.dist-info → remdb-0.3.223.dist-info}/entry_points.txt +0 -0
@@ -1,16 +1,15 @@
1
1
  -- REM Cache System
2
- -- Description: Self-healing cache for UNLOGGED tables (kv_store)
2
+ -- Description: Cache management helpers for UNLOGGED tables (kv_store)
3
3
  -- Version: 1.0.0
4
4
  -- Date: 2025-11-29
5
5
  --
6
6
  -- This migration adds:
7
7
  -- 1. cache_system_state table for debouncing and API secret storage
8
8
  -- 2. maybe_trigger_kv_rebuild() function for async rebuild triggering
9
- -- 3. Updated rem_lookup/fuzzy/traverse with self-healing on empty cache
9
+ -- 3. Helper functions for cache management
10
10
  --
11
- -- Self-Healing Flow:
12
- -- Query returns 0 results Check if kv_store empty → Trigger async rebuild
13
- -- Priority: pg_net (if available) → dblink (always available)
11
+ -- NOTE: Core functions (rem_lookup, rem_fuzzy, rem_traverse) are defined in 001_install.sql
12
+ -- This file only provides cache-specific infrastructure.
14
13
 
15
14
  -- ============================================================================
16
15
  -- REQUIRED EXTENSION
@@ -194,271 +193,6 @@ $$ LANGUAGE plpgsql;
194
193
  COMMENT ON FUNCTION maybe_trigger_kv_rebuild IS
195
194
  'Async trigger for kv_store rebuild. Uses pg_net (API) or dblink (SQL). Includes debouncing.';
196
195
 
197
- -- ============================================================================
198
- -- UPDATED: rem_lookup with self-healing
199
- -- ============================================================================
200
-
201
- CREATE OR REPLACE FUNCTION rem_lookup(
202
- p_entity_key VARCHAR(255),
203
- p_tenant_id VARCHAR(100),
204
- p_user_id VARCHAR(100)
205
- )
206
- RETURNS TABLE(
207
- entity_type VARCHAR(100),
208
- data JSONB
209
- ) AS $$
210
- DECLARE
211
- entity_table VARCHAR(100);
212
- query_sql TEXT;
213
- effective_user_id VARCHAR(100);
214
- v_result_count INTEGER := 0;
215
- BEGIN
216
- effective_user_id := COALESCE(p_user_id, p_tenant_id);
217
-
218
- -- First lookup in KV store to get entity_type (table name)
219
- SELECT kv.entity_type INTO entity_table
220
- FROM kv_store kv
221
- WHERE (kv.user_id = effective_user_id OR kv.user_id IS NULL)
222
- AND kv.entity_key = p_entity_key
223
- LIMIT 1;
224
-
225
- -- If not found, check if cache is empty and maybe trigger rebuild
226
- IF entity_table IS NULL THEN
227
- -- SELF-HEALING: Check if this is because cache is empty
228
- IF rem_kv_store_empty(effective_user_id) THEN
229
- PERFORM maybe_trigger_kv_rebuild(effective_user_id, 'rem_lookup');
230
- END IF;
231
- RETURN;
232
- END IF;
233
-
234
- -- Fetch raw record from underlying table as JSONB
235
- query_sql := format('
236
- SELECT
237
- %L::VARCHAR(100) AS entity_type,
238
- row_to_json(t)::jsonb AS data
239
- FROM %I t
240
- WHERE (t.user_id = $1 OR t.user_id IS NULL)
241
- AND t.name = $2
242
- AND t.deleted_at IS NULL
243
- ', entity_table, entity_table);
244
-
245
- RETURN QUERY EXECUTE query_sql USING effective_user_id, p_entity_key;
246
- END;
247
- $$ LANGUAGE plpgsql STABLE;
248
-
249
- -- ============================================================================
250
- -- UPDATED: rem_fuzzy with self-healing
251
- -- ============================================================================
252
-
253
- CREATE OR REPLACE FUNCTION rem_fuzzy(
254
- p_query TEXT,
255
- p_tenant_id VARCHAR(100),
256
- p_threshold REAL DEFAULT 0.3,
257
- p_limit INTEGER DEFAULT 10,
258
- p_user_id VARCHAR(100) DEFAULT NULL
259
- )
260
- RETURNS TABLE(
261
- entity_type VARCHAR(100),
262
- similarity_score REAL,
263
- data JSONB
264
- ) AS $$
265
- DECLARE
266
- kv_matches RECORD;
267
- entities_by_table JSONB := '{}'::jsonb;
268
- table_keys JSONB;
269
- effective_user_id VARCHAR(100);
270
- v_found_any BOOLEAN := FALSE;
271
- BEGIN
272
- effective_user_id := COALESCE(p_user_id, p_tenant_id);
273
-
274
- -- Find matching keys in KV store
275
- FOR kv_matches IN
276
- SELECT
277
- kv.entity_key,
278
- kv.entity_type,
279
- similarity(kv.entity_key, p_query) AS sim_score
280
- FROM kv_store kv
281
- WHERE (kv.user_id = effective_user_id OR kv.user_id IS NULL)
282
- AND kv.entity_key % p_query
283
- AND similarity(kv.entity_key, p_query) >= p_threshold
284
- ORDER BY sim_score DESC
285
- LIMIT p_limit
286
- LOOP
287
- v_found_any := TRUE;
288
- -- Build JSONB mapping {table: [keys]}
289
- IF entities_by_table ? kv_matches.entity_type THEN
290
- table_keys := entities_by_table->kv_matches.entity_type;
291
- entities_by_table := jsonb_set(
292
- entities_by_table,
293
- ARRAY[kv_matches.entity_type],
294
- table_keys || jsonb_build_array(kv_matches.entity_key)
295
- );
296
- ELSE
297
- entities_by_table := jsonb_set(
298
- entities_by_table,
299
- ARRAY[kv_matches.entity_type],
300
- jsonb_build_array(kv_matches.entity_key)
301
- );
302
- END IF;
303
- END LOOP;
304
-
305
- -- SELF-HEALING: If no matches and cache is empty, trigger rebuild
306
- IF NOT v_found_any AND rem_kv_store_empty(effective_user_id) THEN
307
- PERFORM maybe_trigger_kv_rebuild(effective_user_id, 'rem_fuzzy');
308
- END IF;
309
-
310
- -- Fetch full records
311
- RETURN QUERY
312
- SELECT
313
- f.entity_type::VARCHAR(100),
314
- similarity(f.entity_key, p_query) AS similarity_score,
315
- f.entity_record AS data
316
- FROM rem_fetch(entities_by_table, effective_user_id) f
317
- ORDER BY similarity_score DESC;
318
- END;
319
- $$ LANGUAGE plpgsql STABLE;
320
-
321
- -- ============================================================================
322
- -- UPDATED: rem_traverse with self-healing
323
- -- ============================================================================
324
-
325
- CREATE OR REPLACE FUNCTION rem_traverse(
326
- p_entity_key VARCHAR(255),
327
- p_tenant_id VARCHAR(100),
328
- p_user_id VARCHAR(100),
329
- p_max_depth INTEGER DEFAULT 1,
330
- p_rel_type VARCHAR(100) DEFAULT NULL,
331
- p_keys_only BOOLEAN DEFAULT FALSE
332
- )
333
- RETURNS TABLE(
334
- depth INTEGER,
335
- entity_key VARCHAR(255),
336
- entity_type VARCHAR(100),
337
- entity_id UUID,
338
- rel_type VARCHAR(100),
339
- rel_weight REAL,
340
- path TEXT[],
341
- entity_record JSONB
342
- ) AS $$
343
- DECLARE
344
- graph_keys RECORD;
345
- entities_by_table JSONB := '{}'::jsonb;
346
- table_keys JSONB;
347
- effective_user_id VARCHAR(100);
348
- v_found_start BOOLEAN := FALSE;
349
- BEGIN
350
- effective_user_id := COALESCE(p_user_id, p_tenant_id);
351
-
352
- -- Check if start entity exists in kv_store
353
- SELECT TRUE INTO v_found_start
354
- FROM kv_store kv
355
- WHERE (kv.user_id = effective_user_id OR kv.user_id IS NULL)
356
- AND kv.entity_key = p_entity_key
357
- LIMIT 1;
358
-
359
- -- SELF-HEALING: If start not found and cache is empty, trigger rebuild
360
- IF NOT COALESCE(v_found_start, FALSE) THEN
361
- IF rem_kv_store_empty(effective_user_id) THEN
362
- PERFORM maybe_trigger_kv_rebuild(effective_user_id, 'rem_traverse');
363
- END IF;
364
- RETURN;
365
- END IF;
366
-
367
- -- Original traverse logic
368
- FOR graph_keys IN
369
- WITH RECURSIVE graph_traversal AS (
370
- SELECT
371
- 0 AS depth,
372
- kv.entity_key,
373
- kv.entity_type,
374
- kv.entity_id,
375
- NULL::VARCHAR(100) AS rel_type,
376
- NULL::REAL AS rel_weight,
377
- ARRAY[kv.entity_key]::TEXT[] AS path
378
- FROM kv_store kv
379
- WHERE (kv.user_id = effective_user_id OR kv.user_id IS NULL)
380
- AND kv.entity_key = p_entity_key
381
-
382
- UNION ALL
383
-
384
- SELECT
385
- gt.depth + 1,
386
- target_kv.entity_key,
387
- target_kv.entity_type,
388
- target_kv.entity_id,
389
- (edge->>'rel_type')::VARCHAR(100) AS rel_type,
390
- COALESCE((edge->>'weight')::REAL, 1.0) AS rel_weight,
391
- gt.path || target_kv.entity_key AS path
392
- FROM graph_traversal gt
393
- JOIN kv_store source_kv ON source_kv.entity_key = gt.entity_key
394
- AND (source_kv.user_id = effective_user_id OR source_kv.user_id IS NULL)
395
- CROSS JOIN LATERAL jsonb_array_elements(COALESCE(source_kv.graph_edges, '[]'::jsonb)) AS edge
396
- JOIN kv_store target_kv ON target_kv.entity_key = (edge->>'dst')::VARCHAR(255)
397
- AND (target_kv.user_id = effective_user_id OR target_kv.user_id IS NULL)
398
- WHERE gt.depth < p_max_depth
399
- AND (p_rel_type IS NULL OR (edge->>'rel_type')::VARCHAR(100) = p_rel_type)
400
- AND NOT (target_kv.entity_key = ANY(gt.path))
401
- )
402
- SELECT DISTINCT ON (gt.entity_key)
403
- gt.depth,
404
- gt.entity_key,
405
- gt.entity_type,
406
- gt.entity_id,
407
- gt.rel_type,
408
- gt.rel_weight,
409
- gt.path
410
- FROM graph_traversal gt
411
- WHERE gt.depth > 0
412
- ORDER BY gt.entity_key, gt.depth
413
- LOOP
414
- IF p_keys_only THEN
415
- depth := graph_keys.depth;
416
- entity_key := graph_keys.entity_key;
417
- entity_type := graph_keys.entity_type;
418
- entity_id := graph_keys.entity_id;
419
- rel_type := graph_keys.rel_type;
420
- rel_weight := graph_keys.rel_weight;
421
- path := graph_keys.path;
422
- entity_record := NULL;
423
- RETURN NEXT;
424
- ELSE
425
- IF entities_by_table ? graph_keys.entity_type THEN
426
- table_keys := entities_by_table->graph_keys.entity_type;
427
- entities_by_table := jsonb_set(
428
- entities_by_table,
429
- ARRAY[graph_keys.entity_type],
430
- table_keys || jsonb_build_array(graph_keys.entity_key)
431
- );
432
- ELSE
433
- entities_by_table := jsonb_set(
434
- entities_by_table,
435
- ARRAY[graph_keys.entity_type],
436
- jsonb_build_array(graph_keys.entity_key)
437
- );
438
- END IF;
439
- END IF;
440
- END LOOP;
441
-
442
- IF NOT p_keys_only THEN
443
- RETURN QUERY
444
- SELECT
445
- g.depth,
446
- g.entity_key,
447
- g.entity_type,
448
- g.entity_id,
449
- g.rel_type,
450
- g.rel_weight,
451
- g.path,
452
- f.entity_record
453
- FROM (
454
- SELECT * FROM rem_traverse(p_entity_key, p_tenant_id, effective_user_id, p_max_depth, p_rel_type, TRUE)
455
- ) g
456
- LEFT JOIN rem_fetch(entities_by_table, effective_user_id) f
457
- ON g.entity_key = f.entity_key;
458
- END IF;
459
- END;
460
- $$ LANGUAGE plpgsql STABLE;
461
-
462
196
  -- ============================================================================
463
197
  -- HELPER: Get API secret for validation
464
198
  -- ============================================================================
@@ -527,9 +261,9 @@ BEGIN
527
261
  RAISE NOTICE '';
528
262
  RAISE NOTICE 'Functions:';
529
263
  RAISE NOTICE ' maybe_trigger_kv_rebuild() - Async rebuild trigger';
530
- RAISE NOTICE ' rem_lookup() - Updated with self-healing';
531
- RAISE NOTICE ' rem_fuzzy() - Updated with self-healing';
532
- RAISE NOTICE ' rem_traverse() - Updated with self-healing';
264
+ RAISE NOTICE ' rem_kv_store_empty() - Check if cache is empty';
265
+ RAISE NOTICE ' rem_get_cache_api_secret() - Get API secret';
266
+ RAISE NOTICE ' rem_record_cache_rebuild() - Record rebuild completion';
533
267
  RAISE NOTICE '';
534
268
  RAISE NOTICE 'Async Methods Available:';
535
269
  IF v_has_pgnet THEN
@@ -542,7 +276,5 @@ BEGIN
542
276
  ELSE
543
277
  RAISE NOTICE ' [ ] dblink - Not installed';
544
278
  END IF;
545
- RAISE NOTICE '';
546
- RAISE NOTICE 'Self-Healing: Queries will auto-trigger rebuild on empty cache';
547
279
  RAISE NOTICE '============================================================';
548
280
  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;
@@ -291,14 +291,14 @@ def load_agent_schema(
291
291
 
292
292
  # Check cache first (only for package resources, not custom paths)
293
293
  path = Path(schema_name_or_path)
294
- is_custom_path = path.exists() or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
294
+ is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
295
295
 
296
296
  if use_cache and not is_custom_path and cache_key in _fs_schema_cache:
297
297
  logger.debug(f"Loading schema from cache: {cache_key}")
298
298
  return _fs_schema_cache[cache_key]
299
299
 
300
- # 1. Try exact path first (absolute or relative to cwd)
301
- if path.exists():
300
+ # 1. Try exact path first (absolute or relative to cwd) - must be a file, not directory
301
+ if path.exists() and path.is_file():
302
302
  logger.debug(f"Loading schema from exact path: {path}")
303
303
  with open(path, "r") as f:
304
304
  schema = yaml.safe_load(f)
@@ -432,15 +432,15 @@ async def load_agent_schema_async(
432
432
  if cache_key.endswith('.yaml') or cache_key.endswith('.yml'):
433
433
  cache_key = cache_key.rsplit('.', 1)[0]
434
434
 
435
- is_custom_path = path.exists() or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
435
+ is_custom_path = (path.exists() and path.is_file()) or '/' in str(schema_name_or_path) or '\\' in str(schema_name_or_path)
436
436
 
437
437
  # Check cache
438
438
  if not is_custom_path and cache_key in _fs_schema_cache:
439
439
  logger.debug(f"Loading schema from cache: {cache_key}")
440
440
  return _fs_schema_cache[cache_key]
441
441
 
442
- # Try exact path
443
- if path.exists():
442
+ # Try exact path (must be a file, not directory)
443
+ if path.exists() and path.is_file():
444
444
  logger.debug(f"Loading schema from exact path: {path}")
445
445
  with open(path, "r") as f:
446
446
  schema = yaml.safe_load(f)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remdb
3
- Version: 0.3.181
3
+ Version: 0.3.223
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
@@ -3,61 +3,62 @@ 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=El_nPe_uq8EllybZ4u-uYC_zriwxQqJ6H-vKugMyi60,60939
7
+ rem/agentic/README.md,sha256=M8opfg40BAnJokRhw7C-hovyfI183qX2wP8uavlWOfs,30510
8
8
  rem/agentic/__init__.py,sha256=-UZiEYpodfD5xDns6L0nYSqK9owr3NxiWsq6vmK1tGk,1268
9
- rem/agentic/context.py,sha256=JGwgCQ5S_jd8MXO6xJNe_ddHX46M6m9qjfRKhZxkS_o,9402
10
- rem/agentic/context_builder.py,sha256=POz8Rje4xn01K7i7yq3ty5RX3CZUhI2AlVPbrzgQWDo,14068
9
+ rem/agentic/context.py,sha256=l7sJIJGJm_40xp-mmqibblu7Ik33MJM2E9mhbE5qHlA,15133
10
+ rem/agentic/context_builder.py,sha256=0V-uN5B3Q7VPVH4uaN26aHMDd_ChagfCiwfYty30LbI,14583
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=WGzH6MoMbTBeUrEEGU5s-MzDScLR0iXWHprIbOsqoXM,34187
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
- rem/api/main.py,sha256=TqNO7C-O483qvmM5odHTbqTgq4Lq4CibsF3Steq4ApE,16743
30
+ rem/api/main.py,sha256=6BcUdr0F74-RnVytToh8s9H7OmmO11Xgl_p03FjeDks,16757
31
31
  rem/api/mcp_router/prompts.py,sha256=bVNsJMur6i0oyd38WIr-r0kUNUAlcGG595WVhBDwxik,4077
32
32
  rem/api/mcp_router/resources.py,sha256=sN9quo7HsGxlDpOS1_1kwM1RhT9oayvpz9Bsi0DwKkM,18788
33
- rem/api/mcp_router/server.py,sha256=ESD219vLiDkxJf_l3uGV7cRKMpwuZB_Jmso6mXzxULs,11475
34
- rem/api/mcp_router/tools.py,sha256=OhtA6IEO8l5eh6C2Vf4f2Chad_hzg_7jx1vrRr8vcko,42665
33
+ rem/api/mcp_router/server.py,sha256=06yqR7CBAcmMqHJyUpndQXXYCnu42M5Uen3Oh4mnMVI,11550
34
+ rem/api/mcp_router/tools.py,sha256=j0KSfJ9jt1e7sGNn5nvhQpE_qO0O9WP6NRVlJbfieOI,59510
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=U42HaghPwyT--yTWHplAFmZbwkwXHpkaTo9Y4LQ0DDE,23168
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=LLJSAZd6sD6IzaGhfMM1dGm-Uz4D6BdYBk1OsMmpUDM,16215
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=api1zAX_f2z4HTpEyvCgAipYrrDoLZgySQN5S5goxno,26580
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=0BZjiLJ4MKxP1eb8_tKrK-gzvzVG6aLY9VmbIa-hwVQ,14400
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=ZjwKULboM0oKhSc0DP3tj4gamMNKphkvgJ01bUQ-O2Q,27239
46
+ rem/api/routers/chat/completions.py,sha256=5rpbTlrGcFvyaaqUlKrdvvyEzNgBuYp7xKsamExeZ8w,30229
46
47
  rem/api/routers/chat/json_utils.py,sha256=BVRu-7PWIHTbC9Ubq4MfifZ8qYQZpcGhEgFgPVcXXKE,2191
47
48
  rem/api/routers/chat/models.py,sha256=kzBxRvm5Ie2IchJrnFOom8cx6_ieEbuF2RqfiRJNNh8,7339
48
49
  rem/api/routers/chat/otel_utils.py,sha256=al_4v044T3sOtIZtT9kHiNT6Twlc7wqz26edCcUSHSY,930
49
- rem/api/routers/chat/sse_events.py,sha256=CS1yuor09Qq48bpJBODu7INS94S4GjS8YsPZkIc3Ii8,16508
50
- rem/api/routers/chat/streaming.py,sha256=WCxtJ32V-9NpvkCvum1C8ay5IQ5tADpkKXgcurewcv8,41154
50
+ rem/api/routers/chat/sse_events.py,sha256=m1-2HodSKx9NI6OCcgX17kHcV5GBYmp1iOm1lG8FdrE,16724
51
+ rem/api/routers/chat/streaming.py,sha256=Jf89eag2cEvOD2zKklwU_hS_44KD5bzsGSV888c_5nI,55008
51
52
  rem/auth/README.md,sha256=BpZUqEVYMUpQG4guykyuvmtzlH3_LsGzspuRZS20i8k,8631
52
53
  rem/auth/__init__.py,sha256=ebS-_x21TZsgq7QVgziUpXagSVQU5y0kIxqc_ZywzCE,1027
53
- rem/auth/jwt.py,sha256=hKO8DeNZohqBiS8F7ZVOnlg-IF0SrGZ7cWMdC0a9jTE,10997
54
- rem/auth/middleware.py,sha256=VUfbeUTeT7yGI-ZxlqeJAru_EH-qtiBaIHdFuRZozWA,11309
54
+ rem/auth/jwt.py,sha256=VT77nTYqCt4tkbd_ZmXQy9wU3LcjQ8WLqm9sEcYLYLs,11600
55
+ rem/auth/middleware.py,sha256=LuEVtl2umRqeh2gp3vPrrDHtiELghkgho9hflXRaOkc,11740
55
56
  rem/auth/providers/__init__.py,sha256=yWurO-3o0fT_XIVcIyDX-ECx37jVn5g0pvOxcsU4Q3k,429
56
57
  rem/auth/providers/base.py,sha256=wa7lrgM0AetZnITc45QFyiNHXgVVoWmZgW9tBpInDLw,11831
57
58
  rem/auth/providers/email.py,sha256=LOrVIUiWDTTXMDLeiaTlrA1IQgELQS-nEtXzmzV2BaE,7000
58
59
  rem/auth/providers/google.py,sha256=p3JAYOtyWwiN6T05rZI6sQJqrXhHaunaNOucHTBzWWc,5346
59
60
  rem/auth/providers/microsoft.py,sha256=sv6emYa5B7XTk6gi18n_UCLPDqUmrrsuDnAnWGvJAYA,8444
60
- rem/cli/README.md,sha256=UxmsXjxmee39xUrE7TRJ093Pfhazi58LhRqLfQsYA8g,11857
61
+ rem/cli/README.md,sha256=Cn41x7YoNlnNg3t9WBMGfNXqZBfhjmU6hgPNGL1mlpo,13677
61
62
  rem/cli/__init__.py,sha256=NazCCnBFZwMkvJgzeGkfYveP_MUpvbqHcOLZihew0-Q,188
62
63
  rem/cli/dreaming.py,sha256=UUxx9zXFDIvI5QhCLB303TPH0OiYMnr3l2YhF2GvF_8,11537
63
64
  rem/cli/main.py,sha256=gP-lnD6kkCGeeMHh9aWPRb26CT1zpsDUwuQ30Zqkobw,3127
@@ -66,11 +67,11 @@ rem/cli/commands/__init__.py,sha256=wKff1WrBXwf-vDXjSvUuk-61Npm5716okVnOQ22FcEk,
66
67
  rem/cli/commands/ask.py,sha256=uxKM9z_k6iNi39UC1WQ8crZcT1u17TWo_MwgI0nZANo,19374
67
68
  rem/cli/commands/cluster.py,sha256=MQThC3Da73ixVQ75UYxleQlB8AqPQLzEK73eaB8pNFI,64247
68
69
  rem/cli/commands/configure.py,sha256=GQzlER8PkUCTaeYuLbXUYoeqlmEDafcjAcPJrDchC1I,16595
69
- rem/cli/commands/db.py,sha256=p8U7hL6iukSrZvYTD70JcwWDMZvLUZtTZLDebyTclbE,27506
70
+ rem/cli/commands/db.py,sha256=9uAJT4xkMstVuqXjj02y-4A3y5G8DUsEaLf44Q3ayXA,28141
70
71
  rem/cli/commands/dreaming.py,sha256=2P8nyX9gnRgyCJZrDuyJt5_YAsFmjUGa6dg7OvoLA8k,13292
71
72
  rem/cli/commands/experiments.py,sha256=dRJKtvrGQu0a9bQZaLnVfdWhaur2bKYviixqOnYQC-k,62472
72
73
  rem/cli/commands/mcp.py,sha256=PiP_zXflZ2lPVgmH3N8EGOWXDSfvNTQJD-MMW3ym3xo,1666
73
- rem/cli/commands/process.py,sha256=DCV7KuS3idRkJ7hsl4uxFqdt67RbxuCP3DL9VeqQuFQ,8630
74
+ rem/cli/commands/process.py,sha256=acitqSuisyDwVZ2f2ndF_C5LQbPoQpVrGJLJwl8POG8,14242
74
75
  rem/cli/commands/scaffold.py,sha256=hv2-ozD1bbD8FEky7OdIDzcgu-KISs5ek6APqykdZ6I,1618
75
76
  rem/cli/commands/schema.py,sha256=oCsRUoih2MC_mpxmj14hsQy0xWLCddSUYcfGnDMlbuw,7325
76
77
  rem/cli/commands/serve.py,sha256=ku6z5gxRwmY-vNdNELGPA8aiYyO4QGRgJ_H4wpusd8Y,2926
@@ -88,7 +89,7 @@ rem/models/entities/file.py,sha256=plUm0Caww_yNrpgnOkGp3RBv4l9I6szGOe-NuAuWCcg,1
88
89
  rem/models/entities/image_resource.py,sha256=FIZbGVgsroHY47ESbFIjy0sOtgM8w6vHPUk9lJSVJz4,3254
89
90
  rem/models/entities/message.py,sha256=KHHDBKs_UsWQ-0LURRQlDTV_iiUozmERMBWLPlHPbgg,1966
90
91
  rem/models/entities/moment.py,sha256=sTRFShQwgJMez9OcU7-Vs6k-Whof2TuZCVjdUSyVjVY,4434
91
- rem/models/entities/ontology.py,sha256=bvUBTlg4fQ0mWtiSEggeri3he5BqwYXF_TpuYmzCKxI,7584
92
+ rem/models/entities/ontology.py,sha256=1K9rNZ32BjS24tmjYN89zW81kFVw2vAfcY24ldJqY-I,7398
92
93
  rem/models/entities/ontology_config.py,sha256=fe-LLM-AaKznVoQ02ou2GvPSAp_Bwez0rk3H0RIUYTw,5055
93
94
  rem/models/entities/resource.py,sha256=FW7R_AylZilb-1iYfZA5MMQw2zA42CUVweKgO-4cwqM,3407
94
95
  rem/models/entities/schema.py,sha256=CEcd49kR_6YgaLLKsWaIb2J0KdbVsgYoi_srPgzr9Aw,2945
@@ -99,7 +100,7 @@ rem/models/entities/user.py,sha256=Ps-CWn-Rkj7yYEW768_mSu3maDxysxsJWT2T7XisuN4,2
99
100
  rem/schemas/README.md,sha256=_WH2A78jyLb11xu8q1tu4pDMlgZfE9WjYqrAUbn2BIM,13588
100
101
  rem/schemas/__init__.py,sha256=cY7Hqc056Mb3t12nfpkAK6WZDvOP1gk4rv0CK4VbhTk,213
101
102
  rem/schemas/agents/README.md,sha256=FZI5B8Miqod7KY3KxidW4q8u9W7FbtigV2VU7ropPS0,2815
102
- rem/schemas/agents/rem.yaml,sha256=w8hIZvAnoWmYJrob1gEZ-yi6BXLQoafwlysYeGU168g,8390
103
+ rem/schemas/agents/rem.yaml,sha256=oYVvyfbyW0wCbF-XVrfW3FitbTF4Zdgr5hOHcJ-19Ls,8389
103
104
  rem/schemas/agents/core/agent-builder.yaml,sha256=-Yy-X1nreK1hEjGad1Pr0ROtG1LiRtidq8-63CMEqL4,7399
104
105
  rem/schemas/agents/core/moment-builder.yaml,sha256=-nieKbEiYKiIwBtTCBtIVDKV-cfXpGn0AJ66BUUm48U,8368
105
106
  rem/schemas/agents/core/rem-query-agent.yaml,sha256=dQyShquyn-2nGooy8tyZ588etfx4kzfAE1xDIBCJCVI,10265
@@ -130,7 +131,7 @@ rem/services/audio/transcriber.py,sha256=CbUkNr_AyFZ4NImr6giwgDTT_xPmOe3iSr_YPdB
130
131
  rem/services/content/README.md,sha256=nKOYqYbMljCVRZ55dlGU6Afipo0FVV7YXqT_dV-VXsw,35806
131
132
  rem/services/content/__init__.py,sha256=JtfEPROctu3_R5oGdo04PxpgYqXxAz-TbpS8Ejkjdfs,120
132
133
  rem/services/content/providers.py,sha256=xKW6Bn_fJpQGtnESufZcLRh7BAjWqSOLVdYiEg6rYDc,27909
133
- rem/services/content/service.py,sha256=DjGNmkrRu18ODknD-cxSc2VAI_OtFbkGpbX5EOVXb-g,29765
134
+ rem/services/content/service.py,sha256=WsamRS9Zho4Hzh_IDk8D0W8VECSOVk1roW-u6z4436Q,30562
134
135
  rem/services/dreaming/README.md,sha256=JhzndF6yRP2Eut_AlvukZHV9MSv83V--V2pA0GXXf2g,9100
135
136
  rem/services/dreaming/__init__.py,sha256=3j2TBC1_0z8AlCA9jiqsecyzPFaptCUUHsO_RlXrINc,1719
136
137
  rem/services/dreaming/affinity_service.py,sha256=ScWKwRIPLywqqL2RFd_TsTg_KKmPb0ngBCpOpmIG7w4,12205
@@ -165,12 +166,13 @@ rem/services/phoenix/client.py,sha256=0sDm26v7Wi9jTof31Cf0A_5hA_g0HKGQys4qeBqySc
165
166
  rem/services/phoenix/config.py,sha256=rgFEJ5iENuvBa0_nhEhgz0gW4Sg0uo_fkQMgsnHiTc8,2932
166
167
  rem/services/phoenix/prompt_labels.py,sha256=82VIsXgZ51d3YLzHxusmfzd40yl5YOVnddzv_lNFIGg,13953
167
168
  rem/services/postgres/README.md,sha256=Uh9ZyATF2PyNWz-QEtXl7wJ9Q_3Q0SL2hVKO2ncSwB8,22796
168
- rem/services/postgres/__init__.py,sha256=hPOVs7Gi42qjz9ySu1y1Fmxcyo21UrhVycw_y4YAF-0,563
169
- rem/services/postgres/diff_service.py,sha256=J6QFsNmgaJA5I3BtP8_1NNm-OwloG8p44PlHhwCJiYc,20087
169
+ rem/services/postgres/__init__.py,sha256=KOeC6m1pPy2390nizSnKqa0M2WeFOIMOs21c0PDeKgE,1034
170
+ rem/services/postgres/diff_service.py,sha256=iL5ZmGxHnkyUQSJC1QhMI9Mff_WsP7wAXhXT1VC54jg,22108
170
171
  rem/services/postgres/migration_service.py,sha256=2irsWfzczZ0_-wge6ReyCrFrE3HxvnlwKAEp8mWqtQo,14897
171
- rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=09KUBZWe8SgjSvXLkftG9zby8crWqnmDz9KlTJ0MVoM,17248
172
- rem/services/postgres/register_type.py,sha256=EDZZ7gqpqDAiXjoRK8nqM-bTjLFMmkR8dUsEKE7WVro,11184
173
- rem/services/postgres/repository.py,sha256=73oXs5Ya2JNM_bpS1Xh9AJlvRjF0vJYAJlAEqaRbpyM,16446
172
+ rem/services/postgres/programmable_diff_service.py,sha256=Ip6gRm7LRdYww_5nWkhnXPdqjHSW4sbFOWjBatLHiQs,25075
173
+ rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=523lJuq_xeRWVo8D3ocFd7else5ZUw2XAketmhDN1wA,17295
174
+ rem/services/postgres/register_type.py,sha256=AF88kjn0Gdi8xEaAj5JimH1BrzZ7ONaSOQ4qKKXLhTw,11387
175
+ rem/services/postgres/repository.py,sha256=EvrsyMyu-1WDihjC-T2XnBTMYWwrRkhv1eoZDg0wjTg,16701
174
176
  rem/services/postgres/schema_generator.py,sha256=R0qJI_wFp4JgkGsh42kVtxdCAWjd129qlGV2_3YdgoM,23943
175
177
  rem/services/postgres/service.py,sha256=3CIOP7LuaK4p2rYTyscIXasGLTwjb62HnAGbOCuEm74,27122
176
178
  rem/services/postgres/sql_builder.py,sha256=dgezomG1s-cLcu8Q3u8AjOWO3Rtyg4r_m91UAE4vc9o,10418
@@ -183,15 +185,17 @@ rem/services/rem/queries.py,sha256=k-fniVSMBcq4TPUw-g4kp6D9Fbs5DphqUwzAk2wXv5M,5
183
185
  rem/services/rem/query.py,sha256=z4Qcaed1mPG2p-4pazEUlnUFqOEYxrKGYLffwD2-V-c,12178
184
186
  rem/services/rem/service.py,sha256=cYPPCZ90S9QRWi_4JxEe9oybdDM8Is7wgYt8EpLoiVY,21093
185
187
  rem/services/session/README.md,sha256=WDoVWMRXrSh6wRSlUQ0oIHUItOol65INl86VCNPUOYQ,10446
186
- rem/services/session/__init__.py,sha256=ODLcjnOjLubJU8ncvZsB4SB2zl-mncQQLDZWILwc0Cs,254
187
- rem/services/session/compression.py,sha256=8PTGqJ9G4AJaMHzJL5BbVMz_okFSqWbRI3TSHCRYriU,17079
188
+ rem/services/session/__init__.py,sha256=y9tvBcto0qUcduZwAQn1EwrAo-bZ0ZErodz_1SeN5kU,417
189
+ rem/services/session/compression.py,sha256=rxUlnieBmonOxRtYhg1QTkHmKdQZ5bDbW2Qcsc0zEtg,18573
190
+ rem/services/session/pydantic_messages.py,sha256=eWqSJW9nyZDgUT1Fxrrp1CVIwlipH4AYwzPBWhPuHXI,10816
188
191
  rem/services/session/reload.py,sha256=qbs9yYYBaEH0n_XN_A4BqHcB0RIX_JMkZjHNzUR6zY4,2805
189
192
  rem/sql/background_indexes.sql,sha256=wbQMtgap247K29w24aPPHhhF0tdcFuZ2nCWyALh51DM,1985
190
- rem/sql/migrations/001_install.sql,sha256=DN8Yo8jcpA4Xc_C6IHURqVGr0nXb4V9_BzfStJqVvOE,31187
191
- rem/sql/migrations/002_install_models.sql,sha256=kkJvvyxKGSWlGgrA8_e4iwfvlLWcqqQfPXQ-MnlFOT8,152230
193
+ rem/sql/migrations/001_install.sql,sha256=95-f4L8KUo5te9r_G0fNPdsr8KXK34HaF-dH_vbdr9k,35485
194
+ rem/sql/migrations/002_install_models.sql,sha256=bxb35SX4KZ9qLAlQrKf35R82F3jWiqmVyeuvDRlXUeA,153766
192
195
  rem/sql/migrations/003_optional_extensions.sql,sha256=QACy3J50ZgV_4BHNkkT3iswkE1ijc0oCAOgavv6KC5g,12443
193
- rem/sql/migrations/004_cache_system.sql,sha256=KBpU3hQY08So_MkMfcOwTZDngTMqa_3kA0ujQ98K33k,19672
196
+ rem/sql/migrations/004_cache_system.sql,sha256=iUMRj4r45EhI2kKABp9PS9i_Bs16715HG2ovbYMOsgc,10571
194
197
  rem/sql/migrations/005_schema_update.sql,sha256=fVcuUt0I24UXMEWA25TM-kN29GC19IAqxlxFP-3Z2ys,5055
198
+ rem/sql/migrations/migrate_session_id_to_uuid.sql,sha256=-H4ROtu4SPHTVbzW60Am1YdpJ_OHagWCAwgqd3wbDIM,1248
195
199
  rem/utils/AGENTIC_CHUNKING.md,sha256=Z9IyL5yoFTlvamPE5KA7cs0Btoc_6bq8hh7Q_WARlw8,17230
196
200
  rem/utils/README.md,sha256=Osix2SVYAECMFTFnLhn8D8rsPrtNaCBWfkZfkn5RS60,18087
197
201
  rem/utils/__init__.py,sha256=ZGMTgR7g-V3fhfgKo791wGBhdxy72xTJSo7Q_xwkQRI,1417
@@ -207,7 +211,7 @@ rem/utils/files.py,sha256=6ax-5vmk_4cI-IG55PT9sKj_DqXBl32RkTRSsxqvgGY,8759
207
211
  rem/utils/markdown.py,sha256=zhfSiSRX36vky1b2UOGKsuSr11L2l6Kl_O7iSfwQXBY,401
208
212
  rem/utils/mime_types.py,sha256=8KGEuPWVdQ8r1DFLsgiaAgEYqMaaQIk-6lCVOBB1z_A,5346
209
213
  rem/utils/model_helpers.py,sha256=c60hxrS6wmYCIJjjl7uMq4cE-GCe27A7YAizRjKqtJE,15160
210
- rem/utils/schema_loader.py,sha256=4sfhbjSuFK8WN3e86IdqN8wsgbIA4dgboWMG-CuZzbY,24050
214
+ rem/utils/schema_loader.py,sha256=waiIqxAFGpJbPKLf_pqk87KUjAEKs-rJcm9Gv9H-aKA,24194
211
215
  rem/utils/sql_paths.py,sha256=4bEHU3J3liZdhWYu0WSpCQSo-wfO0sHC_BrJlStRAks,4257
212
216
  rem/utils/sql_types.py,sha256=VKGmDhxPP91EnjJ6h78Q2sUvjBulowR1brtgAdACbtE,10622
213
217
  rem/utils/user_id.py,sha256=AhrUniMZYDybHT6mcv9RalUS3klobqkoMmPh9ZxiZcU,2107
@@ -222,7 +226,7 @@ rem/workers/dreaming.py,sha256=UqCf-iBUhzBVBRFj7_DtR6q27oRo7EUoal9qqHLzlo4,17823
222
226
  rem/workers/engram_processor.py,sha256=Ws92kAILMLK_np3F1HRmhKKXiruLIvFn3o9MY3V2W8g,10779
223
227
  rem/workers/sqs_file_processor.py,sha256=tX8S0yo2n1XGvaZ7JUqeGmtTwxybQqz3wkHT2j6Ak7Y,6597
224
228
  rem/workers/unlogged_maintainer.py,sha256=KhebhXl3s6DwvHnXXEJ45r5tLK9PNj-0KclNIQVQ68s,15817
225
- remdb-0.3.181.dist-info/METADATA,sha256=gK70ym1aGV_IL8C3wwEZ4UZR2W_5_XkS6gaaFHRfV74,53341
226
- remdb-0.3.181.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
227
- remdb-0.3.181.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
228
- remdb-0.3.181.dist-info/RECORD,,
229
+ remdb-0.3.223.dist-info/METADATA,sha256=Ys8z6tXLftbQF3hzy73So9WSOkkJ3kI54d09QKV7Zr4,53341
230
+ remdb-0.3.223.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
231
+ remdb-0.3.223.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
232
+ remdb-0.3.223.dist-info/RECORD,,