remdb 0.3.202__py3-none-any.whl → 0.3.226__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.

rem/settings.py CHANGED
@@ -1651,6 +1651,33 @@ class EmailSettings(BaseSettings):
1651
1651
  return kwargs
1652
1652
 
1653
1653
 
1654
+ class DebugSettings(BaseSettings):
1655
+ """
1656
+ Debug settings for development and troubleshooting.
1657
+
1658
+ Environment variables:
1659
+ DEBUG__AUDIT_SESSION - Dump session history to /tmp/{session_id}.yaml
1660
+ DEBUG__AUDIT_DIR - Directory for session audit files (default: /tmp)
1661
+ """
1662
+
1663
+ model_config = SettingsConfigDict(
1664
+ env_prefix="DEBUG__",
1665
+ env_file=".env",
1666
+ env_file_encoding="utf-8",
1667
+ extra="ignore",
1668
+ )
1669
+
1670
+ audit_session: bool = Field(
1671
+ default=False,
1672
+ description="When true, dump full session history to audit files for debugging",
1673
+ )
1674
+
1675
+ audit_dir: str = Field(
1676
+ default="/tmp",
1677
+ description="Directory for session audit files",
1678
+ )
1679
+
1680
+
1654
1681
  class TestSettings(BaseSettings):
1655
1682
  """
1656
1683
  Test environment settings.
@@ -1767,6 +1794,7 @@ class Settings(BaseSettings):
1767
1794
  schema_search: SchemaSettings = Field(default_factory=SchemaSettings)
1768
1795
  email: EmailSettings = Field(default_factory=EmailSettings)
1769
1796
  test: TestSettings = Field(default_factory=TestSettings)
1797
+ debug: DebugSettings = Field(default_factory=DebugSettings)
1770
1798
 
1771
1799
 
1772
1800
  # Auto-load .env file from current directory if it exists
@@ -822,7 +822,7 @@ COMMENT ON FUNCTION fn_get_shared_messages IS
822
822
  -- Function to list sessions with user details (name, email) for admin views
823
823
 
824
824
  -- List sessions with user info, CTE pagination
825
- -- Note: messages.session_id stores the session name (not UUID), so we join on sessions.name
825
+ -- Note: messages.session_id stores the session UUID (sessions.id)
826
826
  CREATE OR REPLACE FUNCTION fn_list_sessions_with_user(
827
827
  p_user_id VARCHAR(256) DEFAULT NULL, -- Filter by user_id (NULL = all users, admin only)
828
828
  p_user_name VARCHAR(256) DEFAULT NULL, -- Filter by user name (partial match, admin only)
@@ -849,9 +849,9 @@ RETURNS TABLE(
849
849
  BEGIN
850
850
  RETURN QUERY
851
851
  WITH session_msg_counts AS (
852
- -- Count messages per session (joining on session name since messages.session_id = sessions.name)
852
+ -- Count messages per session (joining on session UUID)
853
853
  SELECT
854
- m.session_id as session_name,
854
+ m.session_id,
855
855
  COUNT(*)::INTEGER as actual_message_count
856
856
  FROM messages m
857
857
  GROUP BY m.session_id
@@ -872,7 +872,7 @@ BEGIN
872
872
  s.metadata
873
873
  FROM sessions s
874
874
  LEFT JOIN users u ON u.id::text = s.user_id
875
- LEFT JOIN session_msg_counts mc ON mc.session_name = s.name
875
+ LEFT JOIN session_msg_counts mc ON mc.session_id = s.id::text
876
876
  WHERE s.deleted_at IS NULL
877
877
  AND (p_user_id IS NULL OR s.user_id = p_user_id)
878
878
  AND (p_user_name IS NULL OR u.name ILIKE '%' || p_user_name || '%')
@@ -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")
@@ -365,13 +383,14 @@ def load_agent_schema(
365
383
  logger.debug(f"Could not load from {search_path}: {e}")
366
384
  continue
367
385
 
368
- # 5. Try database LOOKUP fallback (if enabled and user_id provided)
369
- if enable_db_fallback and user_id:
386
+ # 5. Try database LOOKUP fallback (if enabled)
387
+ # Always search for public schemas (user_id IS NULL), plus user-specific if user_id provided
388
+ if enable_db_fallback:
370
389
  try:
371
- logger.debug(f"Attempting database LOOKUP for schema: {base_name} (user_id={user_id})")
390
+ logger.debug(f"Attempting database LOOKUP for schema: {base_name} (user_id={user_id or 'public'})")
372
391
  db_schema = _load_schema_from_database(base_name, user_id)
373
392
  if db_schema:
374
- logger.info(f"✅ Loaded schema from database: {base_name} (user_id={user_id})")
393
+ logger.info(f"✅ Loaded schema from database: {base_name}")
375
394
  return db_schema
376
395
  except Exception as e:
377
396
  logger.debug(f"Database schema lookup failed: {e}")
@@ -387,9 +406,9 @@ def load_agent_schema(
387
406
  db_search_note = ""
388
407
  if enable_db_fallback:
389
408
  if user_id:
390
- db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id='{user_id}' (no match)"
409
+ db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id IN ('{user_id}', 'system', NULL) (no match)"
391
410
  else:
392
- db_search_note = "\n - Database: (skipped - no user_id provided)"
411
+ db_search_note = f"\n - Database: LOOKUP '{base_name}' FROM schemas WHERE user_id IN ('system', NULL) (no match)"
393
412
 
394
413
  raise FileNotFoundError(
395
414
  f"Schema not found: {schema_name_or_path}\n"
@@ -484,19 +503,19 @@ async def load_agent_schema_async(
484
503
  except Exception:
485
504
  continue
486
505
 
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
506
+ # Try database lookup - always search public schemas, plus user-specific if user_id provided
507
+ from rem.services.postgres import get_postgres_service
497
508
 
509
+ should_disconnect = False
510
+ if db is None:
511
+ db = get_postgres_service()
498
512
  if db:
499
- try:
513
+ await db.connect()
514
+ should_disconnect = True
515
+
516
+ if db:
517
+ try:
518
+ if user_id:
500
519
  query = """
501
520
  SELECT spec FROM schemas
502
521
  WHERE LOWER(name) = LOWER($1)
@@ -504,14 +523,23 @@ async def load_agent_schema_async(
504
523
  LIMIT 1
505
524
  """
506
525
  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()
526
+ else:
527
+ # No user_id - only search public schemas
528
+ query = """
529
+ SELECT spec FROM schemas
530
+ WHERE LOWER(name) = LOWER($1)
531
+ AND (user_id = 'system' OR user_id IS NULL)
532
+ LIMIT 1
533
+ """
534
+ row = await db.fetchrow(query, base_name)
535
+ if row:
536
+ spec = row.get("spec")
537
+ if spec and isinstance(spec, dict):
538
+ logger.info(f"✅ Loaded schema from database: {base_name}")
539
+ return spec
540
+ finally:
541
+ if should_disconnect:
542
+ await db.disconnect()
515
543
 
516
544
  # Not found
517
545
  raise FileNotFoundError(f"Schema not found: {schema_name_or_path}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remdb
3
- Version: 0.3.202
3
+ Version: 0.3.226
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,26 +3,26 @@ 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=ay79gqaf2kd96uCw4jdb8klNYRaiMdWjb7R6N9mSvaA,12879
9
+ rem/agentic/context.py,sha256=l7sJIJGJm_40xp-mmqibblu7Ik33MJM2E9mhbE5qHlA,15133
10
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
@@ -31,23 +31,24 @@ 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
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=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=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=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=OSQ-nRMVwUEHCMbKBcX5HOTPVkLiOKeJt1yCUDx2zp8,29771
46
+ rem/api/routers/chat/completions.py,sha256=I6EKMVfEe4QmfsEfW6mTK7riJWZUzkWZCgNRnmJG7ik,29637
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=yiwhuG2Fx0-iJwNIFbVDDNj6UpF_MjBMuX_16V8PzDU,16551
50
- rem/api/routers/chat/streaming.py,sha256=ExGS94-GAJwF58jbUKOUgt9l97nKmtd9d1L5tcfU9RQ,47871
50
+ rem/api/routers/chat/sse_events.py,sha256=m1-2HodSKx9NI6OCcgX17kHcV5GBYmp1iOm1lG8FdrE,16724
51
+ rem/api/routers/chat/streaming.py,sha256=LEha-T_37xjbF6gqeTxmWwm2FzwBFOQvcqPV_soZH9Q,57214
51
52
  rem/auth/README.md,sha256=BpZUqEVYMUpQG4guykyuvmtzlH3_LsGzspuRZS20i8k,8631
52
53
  rem/auth/__init__.py,sha256=ebS-_x21TZsgq7QVgziUpXagSVQU5y0kIxqc_ZywzCE,1027
53
54
  rem/auth/jwt.py,sha256=VT77nTYqCt4tkbd_ZmXQy9wU3LcjQ8WLqm9sEcYLYLs,11600
@@ -63,14 +64,14 @@ rem/cli/dreaming.py,sha256=UUxx9zXFDIvI5QhCLB303TPH0OiYMnr3l2YhF2GvF_8,11537
63
64
  rem/cli/main.py,sha256=gP-lnD6kkCGeeMHh9aWPRb26CT1zpsDUwuQ30Zqkobw,3127
64
65
  rem/cli/commands/README.md,sha256=CxTm4pAKVzE780sWn_sAILu2_nH_0oh9whppZvW4bew,9295
65
66
  rem/cli/commands/__init__.py,sha256=wKff1WrBXwf-vDXjSvUuk-61Npm5716okVnOQ22FcEk,30
66
- rem/cli/commands/ask.py,sha256=uxKM9z_k6iNi39UC1WQ8crZcT1u17TWo_MwgI0nZANo,19374
67
+ rem/cli/commands/ask.py,sha256=9dlx13_ZP9N8ivjmVgfuN3c8BTDdTfoZB2E1yNFi0Bk,18396
67
68
  rem/cli/commands/cluster.py,sha256=MQThC3Da73ixVQ75UYxleQlB8AqPQLzEK73eaB8pNFI,64247
68
69
  rem/cli/commands/configure.py,sha256=GQzlER8PkUCTaeYuLbXUYoeqlmEDafcjAcPJrDchC1I,16595
69
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=rUXkiDWG1UiulFo74dJUU1WIH6lpP9TrLxsSlxD0Bp8,14263
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
@@ -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
@@ -171,7 +172,7 @@ rem/services/postgres/migration_service.py,sha256=2irsWfzczZ0_-wge6ReyCrFrE3Hxvn
171
172
  rem/services/postgres/programmable_diff_service.py,sha256=Ip6gRm7LRdYww_5nWkhnXPdqjHSW4sbFOWjBatLHiQs,25075
172
173
  rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=523lJuq_xeRWVo8D3ocFd7else5ZUw2XAketmhDN1wA,17295
173
174
  rem/services/postgres/register_type.py,sha256=AF88kjn0Gdi8xEaAj5JimH1BrzZ7ONaSOQ4qKKXLhTw,11387
174
- rem/services/postgres/repository.py,sha256=73oXs5Ya2JNM_bpS1Xh9AJlvRjF0vJYAJlAEqaRbpyM,16446
175
+ rem/services/postgres/repository.py,sha256=EvrsyMyu-1WDihjC-T2XnBTMYWwrRkhv1eoZDg0wjTg,16701
175
176
  rem/services/postgres/schema_generator.py,sha256=R0qJI_wFp4JgkGsh42kVtxdCAWjd129qlGV2_3YdgoM,23943
176
177
  rem/services/postgres/service.py,sha256=3CIOP7LuaK4p2rYTyscIXasGLTwjb62HnAGbOCuEm74,27122
177
178
  rem/services/postgres/sql_builder.py,sha256=dgezomG1s-cLcu8Q3u8AjOWO3Rtyg4r_m91UAE4vc9o,10418
@@ -184,16 +185,17 @@ rem/services/rem/queries.py,sha256=k-fniVSMBcq4TPUw-g4kp6D9Fbs5DphqUwzAk2wXv5M,5
184
185
  rem/services/rem/query.py,sha256=z4Qcaed1mPG2p-4pazEUlnUFqOEYxrKGYLffwD2-V-c,12178
185
186
  rem/services/rem/service.py,sha256=cYPPCZ90S9QRWi_4JxEe9oybdDM8Is7wgYt8EpLoiVY,21093
186
187
  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
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
190
191
  rem/services/session/reload.py,sha256=qbs9yYYBaEH0n_XN_A4BqHcB0RIX_JMkZjHNzUR6zY4,2805
191
192
  rem/sql/background_indexes.sql,sha256=wbQMtgap247K29w24aPPHhhF0tdcFuZ2nCWyALh51DM,1985
192
- rem/sql/migrations/001_install.sql,sha256=FfJjt7HqC9BPQSdyVOWT51Cv9OuybFPCGlmpoTCaG7k,35567
193
+ rem/sql/migrations/001_install.sql,sha256=95-f4L8KUo5te9r_G0fNPdsr8KXK34HaF-dH_vbdr9k,35485
193
194
  rem/sql/migrations/002_install_models.sql,sha256=bxb35SX4KZ9qLAlQrKf35R82F3jWiqmVyeuvDRlXUeA,153766
194
195
  rem/sql/migrations/003_optional_extensions.sql,sha256=QACy3J50ZgV_4BHNkkT3iswkE1ijc0oCAOgavv6KC5g,12443
195
196
  rem/sql/migrations/004_cache_system.sql,sha256=iUMRj4r45EhI2kKABp9PS9i_Bs16715HG2ovbYMOsgc,10571
196
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
197
199
  rem/utils/AGENTIC_CHUNKING.md,sha256=Z9IyL5yoFTlvamPE5KA7cs0Btoc_6bq8hh7Q_WARlw8,17230
198
200
  rem/utils/README.md,sha256=Osix2SVYAECMFTFnLhn8D8rsPrtNaCBWfkZfkn5RS60,18087
199
201
  rem/utils/__init__.py,sha256=ZGMTgR7g-V3fhfgKo791wGBhdxy72xTJSo7Q_xwkQRI,1417
@@ -209,7 +211,7 @@ rem/utils/files.py,sha256=6ax-5vmk_4cI-IG55PT9sKj_DqXBl32RkTRSsxqvgGY,8759
209
211
  rem/utils/markdown.py,sha256=zhfSiSRX36vky1b2UOGKsuSr11L2l6Kl_O7iSfwQXBY,401
210
212
  rem/utils/mime_types.py,sha256=8KGEuPWVdQ8r1DFLsgiaAgEYqMaaQIk-6lCVOBB1z_A,5346
211
213
  rem/utils/model_helpers.py,sha256=c60hxrS6wmYCIJjjl7uMq4cE-GCe27A7YAizRjKqtJE,15160
212
- rem/utils/schema_loader.py,sha256=waiIqxAFGpJbPKLf_pqk87KUjAEKs-rJcm9Gv9H-aKA,24194
214
+ rem/utils/schema_loader.py,sha256=u9-b9X05PWn29RHP4WJMPK3j_DUL22h8K9s_cPnMy6Q,25671
213
215
  rem/utils/sql_paths.py,sha256=4bEHU3J3liZdhWYu0WSpCQSo-wfO0sHC_BrJlStRAks,4257
214
216
  rem/utils/sql_types.py,sha256=VKGmDhxPP91EnjJ6h78Q2sUvjBulowR1brtgAdACbtE,10622
215
217
  rem/utils/user_id.py,sha256=AhrUniMZYDybHT6mcv9RalUS3klobqkoMmPh9ZxiZcU,2107
@@ -224,7 +226,7 @@ rem/workers/dreaming.py,sha256=UqCf-iBUhzBVBRFj7_DtR6q27oRo7EUoal9qqHLzlo4,17823
224
226
  rem/workers/engram_processor.py,sha256=Ws92kAILMLK_np3F1HRmhKKXiruLIvFn3o9MY3V2W8g,10779
225
227
  rem/workers/sqs_file_processor.py,sha256=tX8S0yo2n1XGvaZ7JUqeGmtTwxybQqz3wkHT2j6Ak7Y,6597
226
228
  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,,
229
+ remdb-0.3.226.dist-info/METADATA,sha256=oSLxEj7l2ii1Gvv0EMdmKwJkThCsg7gjV9I-8cu5_V0,53341
230
+ remdb-0.3.226.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
231
+ remdb-0.3.226.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
232
+ remdb-0.3.226.dist-info/RECORD,,