remdb 0.3.146__py3-none-any.whl → 0.3.181__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 (57) hide show
  1. rem/agentic/agents/__init__.py +16 -0
  2. rem/agentic/agents/agent_manager.py +311 -0
  3. rem/agentic/context.py +81 -3
  4. rem/agentic/context_builder.py +36 -9
  5. rem/agentic/mcp/tool_wrapper.py +43 -14
  6. rem/agentic/providers/pydantic_ai.py +76 -34
  7. rem/agentic/schema.py +4 -3
  8. rem/agentic/tools/rem_tools.py +11 -0
  9. rem/api/deps.py +3 -5
  10. rem/api/main.py +22 -3
  11. rem/api/mcp_router/resources.py +75 -14
  12. rem/api/mcp_router/server.py +28 -23
  13. rem/api/mcp_router/tools.py +177 -2
  14. rem/api/middleware/tracking.py +5 -5
  15. rem/api/routers/auth.py +352 -6
  16. rem/api/routers/chat/completions.py +5 -3
  17. rem/api/routers/chat/streaming.py +95 -22
  18. rem/api/routers/messages.py +24 -15
  19. rem/auth/__init__.py +13 -3
  20. rem/auth/jwt.py +352 -0
  21. rem/auth/middleware.py +70 -30
  22. rem/auth/providers/__init__.py +4 -1
  23. rem/auth/providers/email.py +215 -0
  24. rem/cli/commands/ask.py +1 -1
  25. rem/cli/commands/db.py +118 -54
  26. rem/models/entities/__init__.py +4 -0
  27. rem/models/entities/ontology.py +93 -101
  28. rem/models/entities/subscriber.py +175 -0
  29. rem/models/entities/user.py +1 -0
  30. rem/schemas/agents/core/agent-builder.yaml +235 -0
  31. rem/services/__init__.py +3 -1
  32. rem/services/content/service.py +4 -3
  33. rem/services/email/__init__.py +10 -0
  34. rem/services/email/service.py +522 -0
  35. rem/services/email/templates.py +360 -0
  36. rem/services/embeddings/worker.py +26 -12
  37. rem/services/postgres/README.md +38 -0
  38. rem/services/postgres/diff_service.py +19 -3
  39. rem/services/postgres/pydantic_to_sqlalchemy.py +37 -2
  40. rem/services/postgres/register_type.py +1 -1
  41. rem/services/postgres/repository.py +37 -25
  42. rem/services/postgres/schema_generator.py +5 -5
  43. rem/services/postgres/sql_builder.py +6 -5
  44. rem/services/session/compression.py +113 -50
  45. rem/services/session/reload.py +14 -7
  46. rem/services/user_service.py +41 -9
  47. rem/settings.py +182 -1
  48. rem/sql/background_indexes.sql +5 -0
  49. rem/sql/migrations/001_install.sql +33 -4
  50. rem/sql/migrations/002_install_models.sql +204 -186
  51. rem/sql/migrations/005_schema_update.sql +145 -0
  52. rem/utils/model_helpers.py +101 -0
  53. rem/utils/schema_loader.py +45 -7
  54. {remdb-0.3.146.dist-info → remdb-0.3.181.dist-info}/METADATA +1 -1
  55. {remdb-0.3.146.dist-info → remdb-0.3.181.dist-info}/RECORD +57 -48
  56. {remdb-0.3.146.dist-info → remdb-0.3.181.dist-info}/WHEEL +0 -0
  57. {remdb-0.3.146.dist-info → remdb-0.3.181.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,145 @@
1
+ -- Migration: schema_update
2
+ -- Generated by: rem db diff --generate
3
+ -- Changes detected: 139
4
+ --
5
+ -- Review this file before applying!
6
+ -- Apply with: rem db migrate
7
+ --
8
+
9
+ CREATE TABLE IF NOT EXISTS patient_profiles (
10
+ id UUID NOT NULL,
11
+ tenant_id VARCHAR(100) NOT NULL,
12
+ user_id VARCHAR(256),
13
+ patient_ref VARCHAR(256) NOT NULL,
14
+ clinician_ref VARCHAR(256),
15
+ evaluation_type TEXT,
16
+ evaluation_date DATE,
17
+ session_ref VARCHAR(256),
18
+ risk_level TEXT,
19
+ suicidality TEXT,
20
+ suicidality_details VARCHAR(256),
21
+ homicidal_ideation BOOLEAN,
22
+ homicidal_details VARCHAR(256),
23
+ self_harm_current BOOLEAN,
24
+ self_harm_history BOOLEAN,
25
+ suicide_attempts_lifetime INTEGER,
26
+ suicide_attempt_most_recent VARCHAR(256),
27
+ safety_plan_in_place BOOLEAN,
28
+ safety_plan_date DATE,
29
+ appearance VARCHAR(256),
30
+ behavior VARCHAR(256),
31
+ speech VARCHAR(256),
32
+ mood_states JSONB,
33
+ mood_description TEXT,
34
+ affect_quality TEXT,
35
+ affect_congruent BOOLEAN,
36
+ thought_process TEXT,
37
+ delusions_present BOOLEAN,
38
+ delusion_types TEXT[],
39
+ hallucinations_present BOOLEAN,
40
+ hallucination_types TEXT[],
41
+ command_hallucinations BOOLEAN,
42
+ oriented BOOLEAN,
43
+ orientation_deficits TEXT[],
44
+ memory_intact BOOLEAN,
45
+ attention_intact BOOLEAN,
46
+ insight TEXT,
47
+ judgment TEXT,
48
+ symptoms JSONB,
49
+ chief_complaint VARCHAR(256),
50
+ symptom_duration VARCHAR(256),
51
+ symptom_trajectory VARCHAR(256),
52
+ precipitating_factors TEXT[],
53
+ substance_use_profiles JSONB,
54
+ substance_use_summary TEXT,
55
+ in_recovery BOOLEAN,
56
+ recovery_duration VARCHAR(256),
57
+ mat_current BOOLEAN,
58
+ diagnoses_current TEXT[],
59
+ diagnoses_historical TEXT[],
60
+ first_psychiatric_contact_age INTEGER,
61
+ hospitalizations_psychiatric INTEGER,
62
+ last_hospitalization VARCHAR(256),
63
+ ect_history BOOLEAN,
64
+ therapy_history VARCHAR(256),
65
+ family_psychiatric_history VARCHAR(256),
66
+ current_medications JSONB,
67
+ other_medications TEXT[],
68
+ allergies TEXT[],
69
+ current_therapist BOOLEAN,
70
+ therapy_type VARCHAR(256),
71
+ therapy_frequency VARCHAR(256),
72
+ other_providers TEXT[],
73
+ functioning JSONB,
74
+ social_determinants JSONB,
75
+ cgi_severity TEXT,
76
+ cgi_improvement TEXT,
77
+ gaf_equivalent INTEGER,
78
+ clinical_impression VARCHAR(256),
79
+ differential_diagnoses TEXT[],
80
+ treatment_plan VARCHAR(256),
81
+ treatment_goals TEXT[],
82
+ barriers_to_treatment TEXT[],
83
+ strengths TEXT[],
84
+ follow_up_recommended BOOLEAN,
85
+ follow_up_urgency VARCHAR(256),
86
+ follow_up_interval VARCHAR(256),
87
+ referrals TEXT[],
88
+ labs_ordered TEXT[],
89
+ data_source VARCHAR(256),
90
+ confidence_score FLOAT,
91
+ reviewed_by_clinician BOOLEAN,
92
+ notes VARCHAR(256),
93
+ created_at TIMESTAMP WITHOUT TIME ZONE,
94
+ updated_at TIMESTAMP WITHOUT TIME ZONE,
95
+ deleted_at TIMESTAMP WITHOUT TIME ZONE,
96
+ graph_edges JSONB,
97
+ metadata JSONB,
98
+ tags TEXT[]
99
+ );
100
+ -- Changes to table: patient_profiles
101
+ CREATE INDEX IF NOT EXISTS idx_patient_profiles_graph_edges ON patient_profiles (graph_edges);
102
+ CREATE INDEX IF NOT EXISTS idx_patient_profiles_metadata ON patient_profiles (metadata);
103
+ CREATE INDEX IF NOT EXISTS idx_patient_profiles_tags ON patient_profiles (tags);
104
+ CREATE INDEX IF NOT EXISTS idx_patient_profiles_tenant ON patient_profiles (tenant_id);
105
+ CREATE INDEX IF NOT EXISTS idx_patient_profiles_user ON patient_profiles (user_id);
106
+ CREATE TABLE IF NOT EXISTS subscribers (
107
+ id UUID NOT NULL,
108
+ tenant_id VARCHAR(100) NOT NULL,
109
+ user_id VARCHAR(256),
110
+ email TEXT NOT NULL,
111
+ name VARCHAR(256),
112
+ comment TEXT,
113
+ status TEXT,
114
+ origin TEXT,
115
+ origin_detail VARCHAR(256),
116
+ subscribed_at TIMESTAMP WITHOUT TIME ZONE,
117
+ unsubscribed_at TIMESTAMP WITHOUT TIME ZONE,
118
+ ip_address VARCHAR(256),
119
+ user_agent VARCHAR(256),
120
+ created_at TIMESTAMP WITHOUT TIME ZONE,
121
+ updated_at TIMESTAMP WITHOUT TIME ZONE,
122
+ deleted_at TIMESTAMP WITHOUT TIME ZONE,
123
+ graph_edges JSONB,
124
+ metadata JSONB,
125
+ tags TEXT[]
126
+ );
127
+ -- Changes to table: subscribers
128
+ CREATE INDEX IF NOT EXISTS idx_subscribers_graph_edges ON subscribers (graph_edges);
129
+ CREATE INDEX IF NOT EXISTS idx_subscribers_metadata ON subscribers (metadata);
130
+ CREATE INDEX IF NOT EXISTS idx_subscribers_tags ON subscribers (tags);
131
+ CREATE INDEX IF NOT EXISTS idx_subscribers_tenant ON subscribers (tenant_id);
132
+ CREATE INDEX IF NOT EXISTS idx_subscribers_user ON subscribers (user_id);
133
+ CREATE TABLE IF NOT EXISTS embeddings_patient_profiles (
134
+ id UUID NOT NULL,
135
+ entity_id UUID NOT NULL,
136
+ field_name VARCHAR(100) NOT NULL,
137
+ provider VARCHAR(50) NOT NULL,
138
+ model VARCHAR(100) NOT NULL,
139
+ embedding FLOAT[] NOT NULL,
140
+ created_at TIMESTAMP WITHOUT TIME ZONE,
141
+ updated_at TIMESTAMP WITHOUT TIME ZONE
142
+ );
143
+ -- Changes to table: embeddings_patient_profiles
144
+ CREATE INDEX IF NOT EXISTS idx_embeddings_patient_profiles_entity ON embeddings_patient_profiles (entity_id);
145
+ CREATE INDEX IF NOT EXISTS idx_embeddings_patient_profiles_field_provider ON embeddings_patient_profiles (field_name, provider);
@@ -19,6 +19,9 @@ Table Name Inference:
19
19
 
20
20
  Model Resolution:
21
21
  - model_from_arbitrary_casing: Resolve model class from flexible input casing
22
+
23
+ Data Validation:
24
+ - validate_data_for_model: Validate row data against a Pydantic model with clear error reporting
22
25
  """
23
26
 
24
27
  import re
@@ -389,3 +392,101 @@ def model_from_arbitrary_casing(
389
392
  f"Unknown model: '{name}' (normalized: '{normalized}'). "
390
393
  f"Available models: {', '.join(available)}"
391
394
  )
395
+
396
+
397
+ class ValidationResult:
398
+ """Result of validating data against a Pydantic model."""
399
+
400
+ def __init__(
401
+ self,
402
+ valid: bool,
403
+ instance: BaseModel | None = None,
404
+ errors: list[str] | None = None,
405
+ missing_required: set[str] | None = None,
406
+ extra_fields: set[str] | None = None,
407
+ required_fields: set[str] | None = None,
408
+ optional_fields: set[str] | None = None,
409
+ ):
410
+ self.valid = valid
411
+ self.instance = instance
412
+ self.errors = errors or []
413
+ self.missing_required = missing_required or set()
414
+ self.extra_fields = extra_fields or set()
415
+ self.required_fields = required_fields or set()
416
+ self.optional_fields = optional_fields or set()
417
+
418
+ def log_errors(self, row_label: str = "Row") -> None:
419
+ """Log validation errors using loguru."""
420
+ if self.valid:
421
+ return
422
+
423
+ logger.error(f"{row_label}: Validation failed")
424
+ if self.missing_required:
425
+ logger.error(f" Missing required: {self.missing_required}")
426
+ if self.extra_fields:
427
+ logger.warning(f" Unknown fields (ignored): {self.extra_fields}")
428
+ for err in self.errors:
429
+ logger.error(f" - {err}")
430
+ logger.info(f" Required: {self.required_fields or '(none)'}")
431
+ logger.info(f" Optional: {self.optional_fields}")
432
+
433
+
434
+ def validate_data_for_model(
435
+ model: Type[BaseModel],
436
+ data: dict[str, Any],
437
+ ) -> ValidationResult:
438
+ """
439
+ Validate a data dict against a Pydantic model with detailed error reporting.
440
+
441
+ Args:
442
+ model: Pydantic model class to validate against
443
+ data: Dictionary of field values
444
+
445
+ Returns:
446
+ ValidationResult with validation status and detailed field info
447
+
448
+ Example:
449
+ >>> from rem.models.entities import Resource
450
+ >>> result = validate_data_for_model(Resource, {"name": "test", "content": "hello"})
451
+ >>> result.valid
452
+ True
453
+ >>> result = validate_data_for_model(Resource, {"unknown_field": "value"})
454
+ >>> result.valid
455
+ True # Resource has no required fields
456
+ >>> result.extra_fields
457
+ {'unknown_field'}
458
+ """
459
+ from pydantic import ValidationError
460
+
461
+ model_fields = set(model.model_fields.keys())
462
+ required = {k for k, v in model.model_fields.items() if v.is_required()}
463
+ optional = model_fields - required
464
+ data_fields = set(data.keys())
465
+
466
+ missing_required = required - data_fields
467
+ extra_fields = data_fields - model_fields
468
+
469
+ try:
470
+ instance = model(**data)
471
+ return ValidationResult(
472
+ valid=True,
473
+ instance=instance,
474
+ required_fields=required,
475
+ optional_fields=optional,
476
+ extra_fields=extra_fields,
477
+ )
478
+ except ValidationError as e:
479
+ errors = []
480
+ for err in e.errors():
481
+ field = ".".join(str(p) for p in err["loc"])
482
+ if field not in missing_required: # Don't double-report missing
483
+ errors.append(f"{field}: {err['msg']}")
484
+
485
+ return ValidationResult(
486
+ valid=False,
487
+ errors=errors,
488
+ missing_required=missing_required,
489
+ extra_fields=extra_fields,
490
+ required_fields=required,
491
+ optional_fields=optional,
492
+ )
@@ -132,13 +132,51 @@ def _load_schema_from_database(schema_name: str, user_id: str) -> dict[str, Any]
132
132
  # Check if we're already in an async context
133
133
  try:
134
134
  loop = asyncio.get_running_loop()
135
- # We're in an async context - can't use asyncio.run()
136
- # This shouldn't happen in normal usage since load_agent_schema is called from sync contexts
137
- logger.warning(
138
- "Database schema lookup called from async context. "
139
- "This may cause issues. Consider using async version of load_agent_schema."
140
- )
141
- return None
135
+ # We're in an async context - use thread executor to run async code
136
+ import concurrent.futures
137
+
138
+ async def _async_lookup():
139
+ """Async helper to query database."""
140
+ from rem.services.postgres import get_postgres_service
141
+
142
+ db = get_postgres_service()
143
+ if not db:
144
+ logger.debug("PostgreSQL service not available for schema lookup")
145
+ return None
146
+
147
+ try:
148
+ await db.connect()
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)
159
+
160
+ if row:
161
+ spec = row.get("spec")
162
+ if spec and isinstance(spec, dict):
163
+ logger.debug(f"Found schema in database: {schema_name}")
164
+ return spec
165
+
166
+ logger.debug(f"Schema not found in database: {schema_name}")
167
+ return None
168
+
169
+ except Exception as e:
170
+ logger.debug(f"Database schema lookup error: {e}")
171
+ return None
172
+ finally:
173
+ await db.disconnect()
174
+
175
+ # Run in thread pool to avoid blocking the event loop
176
+ with concurrent.futures.ThreadPoolExecutor() as pool:
177
+ future = pool.submit(asyncio.run, _async_lookup())
178
+ return future.result(timeout=10)
179
+
142
180
  except RuntimeError:
143
181
  # Not in async context - safe to use asyncio.run()
144
182
  pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: remdb
3
- Version: 0.3.146
3
+ Version: 0.3.181
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,55 +3,58 @@ 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=fB9_J6S8XYXTWC4qlkhVDBsnmJc-VCedd-jVQ8ceajE,54361
6
+ rem/settings.py,sha256=Ecs3P6sxDnu1Ens5NsqNR998XnKRx5DOItxbM0au1tY,60155
7
7
  rem/agentic/README.md,sha256=brF1Z1V6s8z5TLoyNPQ3BC5mqDy648QRPOQmGu6Jkzw,21815
8
8
  rem/agentic/__init__.py,sha256=-UZiEYpodfD5xDns6L0nYSqK9owr3NxiWsq6vmK1tGk,1268
9
- rem/agentic/context.py,sha256=EBw2rQ85mygJZHaHfO2A59cu3rgI2vfy1A0Qhri99DE,6282
10
- rem/agentic/context_builder.py,sha256=AkZPYMFhTWde6DiQ4yGgNmV32qDQQj-13SZnj3ppnFE,12686
9
+ rem/agentic/context.py,sha256=JGwgCQ5S_jd8MXO6xJNe_ddHX46M6m9qjfRKhZxkS_o,9402
10
+ rem/agentic/context_builder.py,sha256=POz8Rje4xn01K7i7yq3ty5RX3CZUhI2AlVPbrzgQWDo,14068
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=PKcVvotbEmAyfqW7qkmO9cdZkUduwl89lSI7IUaVyJY,22914
14
+ rem/agentic/schema.py,sha256=lc819ZJNiGC3tEQO6sfN-H93PU9-wqXTNA7h1Cn9myY,22993
15
15
  rem/agentic/serialization.py,sha256=zwjyvcGjTHuChG9goRHEVlA3etAekVJGzv9o6Fo7raM,7999
16
16
  rem/agentic/agents/README.md,sha256=npq2ENb5dNGYxqGQYTb9E0JquyKcXrMt8kM2q6LRxRk,4972
17
- rem/agentic/agents/__init__.py,sha256=N4I_-yGieWMl5vEJ94yQ1v5WhQy2Z2-vOdyX3LcTzuk,581
17
+ rem/agentic/agents/__init__.py,sha256=OV-9J0EpxLv_zjhv9v2o-42tFcSkLabrwgumood27ZI,893
18
+ rem/agentic/agents/agent_manager.py,sha256=idT4brDCSzjDKkm897acKHgbJb25FISvDKqeWyU7hak,8228
18
19
  rem/agentic/agents/sse_simulator.py,sha256=NTJuunUlEY5KFUKbxgkrt5iihdVIEAqPsufUVisziaQ,16392
19
20
  rem/agentic/mcp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- rem/agentic/mcp/tool_wrapper.py,sha256=ZHKWIeHwnvIegbRwUG1xovmTOLYcY9i28liBHNB6UH8,10012
21
+ rem/agentic/mcp/tool_wrapper.py,sha256=0BDtg7Dp1Hk6rsCeZW39YV_DWPAsBwZrJ67r0KTKa8g,12172
21
22
  rem/agentic/otel/__init__.py,sha256=IC0lLMmuxXRZrhO9p8-GQ6raZDP9YE3gcuCwl6vBv4c,195
22
23
  rem/agentic/otel/setup.py,sha256=-NL5jDXuDdQMKEhZfOtjZ2kJtpayQ7dhM0p1OrU185c,9629
23
24
  rem/agentic/providers/phoenix.py,sha256=_e8-S8aSfpX2EulH0nXAermoDZ1c9Kh3QALGTCvCmC4,35422
24
- rem/agentic/providers/pydantic_ai.py,sha256=GHFBmN8KaMYe6eLSysA1g_fY30fUI6B5EDVoproM6F0,31746
25
+ rem/agentic/providers/pydantic_ai.py,sha256=_9EdJrxFZDptgTAJ3MuXyen7zok91CVaqX7Dwvrxzp8,34188
25
26
  rem/agentic/tools/__init__.py,sha256=tb_9ml0i2LtEALAJ6h7D91xVEA_8ktDzD4s3nM0MsUE,147
26
- rem/agentic/tools/rem_tools.py,sha256=xhLohuAsv0AUjXLMXa-n9KchhkHxEi7jq1BsjPBuogw,7344
27
+ rem/agentic/tools/rem_tools.py,sha256=0Aps2TcA3z6WLJQ1M98iYX-1uoIEwTozmwodl2_AUCI,7833
27
28
  rem/api/README.md,sha256=68KtBi1nkXm_J0skGVBhchXP-cLNaBBka6ZhLqAncoA,19998
28
- rem/api/deps.py,sha256=75c_PZ1XWPanHBds4Ap3JZtLSLtDF_qNMploSgHvdmo,6736
29
- rem/api/main.py,sha256=_vfKH_DBWuempKs-YOS0gQOUbsHe3l1kEoVSvD-sOkQ,15917
29
+ rem/api/deps.py,sha256=3_M8YOdyzEkr4kIhjJvxuDvnSaq7U8TLx1sZkEG63eU,6611
30
+ rem/api/main.py,sha256=TqNO7C-O483qvmM5odHTbqTgq4Lq4CibsF3Steq4ApE,16743
30
31
  rem/api/mcp_router/prompts.py,sha256=bVNsJMur6i0oyd38WIr-r0kUNUAlcGG595WVhBDwxik,4077
31
- rem/api/mcp_router/resources.py,sha256=2Ph0psMbCpH6MUJhV-uFSZJQwGbGELE2zoXBt9yOmL4,16194
32
- rem/api/mcp_router/server.py,sha256=boaxrFqywbiv0-hZ6nOvWrNXYlrG7thtmqa9dSv9sKE,11181
33
- rem/api/mcp_router/tools.py,sha256=H2YaJvT2HSDr68j3EOrHPWU3M742e4T1Me9oUdsnIYs,35719
34
- rem/api/middleware/tracking.py,sha256=cA9ChbBQ8-QipLlyGrTUsd7eMtHGzZ9Cp4iEHBgOQiM,6326
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
35
+ rem/api/middleware/tracking.py,sha256=ZlFkCVsmIfGuiRX1PPWN0vEIPZoOFIKqMZ3P-CjwfHc,6453
35
36
  rem/api/routers/admin.py,sha256=AEvfi5QyfTG_3a8LZ5FPgbOXPajKeIu_5P6oqmLYa1E,14696
36
- rem/api/routers/auth.py,sha256=cDvPvqmMxr5FRign98K87Rp8GtVD2V9oZWoSPeqnP1o,11918
37
+ rem/api/routers/auth.py,sha256=U42HaghPwyT--yTWHplAFmZbwkwXHpkaTo9Y4LQ0DDE,23168
37
38
  rem/api/routers/dev.py,sha256=rLySeGas9USZxMxJiHU4ziaA8EK9aoc8dg7TpJagV-I,2229
38
39
  rem/api/routers/feedback.py,sha256=UfDQlqeRwB1b4Q0agJOBahiAHL_aAHMb_l7TEjwZuGs,11378
39
- rem/api/routers/messages.py,sha256=Av-fFeRLn_xMWDv0cdggfy4bw05WIHK0phWtPoffhOw,16292
40
+ rem/api/routers/messages.py,sha256=LLJSAZd6sD6IzaGhfMM1dGm-Uz4D6BdYBk1OsMmpUDM,16215
40
41
  rem/api/routers/models.py,sha256=GMhDJzLrWe-gp842F1Vua2XOjZNAcIG-p-tCquJ5FQM,1946
41
42
  rem/api/routers/query.py,sha256=cYV2HoSqMHr7kgeEFhx2GqUt_9Geg756JgJoYrX6OrU,13972
42
43
  rem/api/routers/shared_sessions.py,sha256=9vQoQOsQhqWzcoJZ7_dhvi6zJlR5B72LP5THLfm--Ts,12259
43
44
  rem/api/routers/chat/__init__.py,sha256=fck9klAzF7HJHNPAhl0B63uSavXvs6h26QhUsByf4JM,113
44
- rem/api/routers/chat/completions.py,sha256=6kNlys_Vw2eMe8JJ7PhSLluq22cFboiMdJL49eSasnU,27092
45
+ rem/api/routers/chat/completions.py,sha256=ZjwKULboM0oKhSc0DP3tj4gamMNKphkvgJ01bUQ-O2Q,27239
45
46
  rem/api/routers/chat/json_utils.py,sha256=BVRu-7PWIHTbC9Ubq4MfifZ8qYQZpcGhEgFgPVcXXKE,2191
46
47
  rem/api/routers/chat/models.py,sha256=kzBxRvm5Ie2IchJrnFOom8cx6_ieEbuF2RqfiRJNNh8,7339
47
48
  rem/api/routers/chat/otel_utils.py,sha256=al_4v044T3sOtIZtT9kHiNT6Twlc7wqz26edCcUSHSY,930
48
49
  rem/api/routers/chat/sse_events.py,sha256=CS1yuor09Qq48bpJBODu7INS94S4GjS8YsPZkIc3Ii8,16508
49
- rem/api/routers/chat/streaming.py,sha256=bHSDfTjpMS7wMjF1ovKWoH7mPngh7O5EHMzadOLBxKg,37287
50
+ rem/api/routers/chat/streaming.py,sha256=WCxtJ32V-9NpvkCvum1C8ay5IQ5tADpkKXgcurewcv8,41154
50
51
  rem/auth/README.md,sha256=BpZUqEVYMUpQG4guykyuvmtzlH3_LsGzspuRZS20i8k,8631
51
- rem/auth/__init__.py,sha256=NuOzrlipfiRUM7lwuEJTzc-b8lYWCxDl_7V82FxElJA,700
52
- rem/auth/middleware.py,sha256=3RaMTFTtu8o3VXfXGazFHSUlDG-wDJNi4msE83w_RwM,9923
53
- rem/auth/providers/__init__.py,sha256=NMdH84_UC2_9zX7yv-u26FxdGuDipz42S-YO1vc8w1M,318
52
+ 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
55
+ rem/auth/providers/__init__.py,sha256=yWurO-3o0fT_XIVcIyDX-ECx37jVn5g0pvOxcsU4Q3k,429
54
56
  rem/auth/providers/base.py,sha256=wa7lrgM0AetZnITc45QFyiNHXgVVoWmZgW9tBpInDLw,11831
57
+ rem/auth/providers/email.py,sha256=LOrVIUiWDTTXMDLeiaTlrA1IQgELQS-nEtXzmzV2BaE,7000
55
58
  rem/auth/providers/google.py,sha256=p3JAYOtyWwiN6T05rZI6sQJqrXhHaunaNOucHTBzWWc,5346
56
59
  rem/auth/providers/microsoft.py,sha256=sv6emYa5B7XTk6gi18n_UCLPDqUmrrsuDnAnWGvJAYA,8444
57
60
  rem/cli/README.md,sha256=UxmsXjxmee39xUrE7TRJ093Pfhazi58LhRqLfQsYA8g,11857
@@ -60,10 +63,10 @@ rem/cli/dreaming.py,sha256=UUxx9zXFDIvI5QhCLB303TPH0OiYMnr3l2YhF2GvF_8,11537
60
63
  rem/cli/main.py,sha256=gP-lnD6kkCGeeMHh9aWPRb26CT1zpsDUwuQ30Zqkobw,3127
61
64
  rem/cli/commands/README.md,sha256=CxTm4pAKVzE780sWn_sAILu2_nH_0oh9whppZvW4bew,9295
62
65
  rem/cli/commands/__init__.py,sha256=wKff1WrBXwf-vDXjSvUuk-61Npm5716okVnOQ22FcEk,30
63
- rem/cli/commands/ask.py,sha256=VTKL-E3_XZ8OWX16RCDAeAPrp28PLyXMgh63CNF-29Q,19389
66
+ rem/cli/commands/ask.py,sha256=uxKM9z_k6iNi39UC1WQ8crZcT1u17TWo_MwgI0nZANo,19374
64
67
  rem/cli/commands/cluster.py,sha256=MQThC3Da73ixVQ75UYxleQlB8AqPQLzEK73eaB8pNFI,64247
65
68
  rem/cli/commands/configure.py,sha256=GQzlER8PkUCTaeYuLbXUYoeqlmEDafcjAcPJrDchC1I,16595
66
- rem/cli/commands/db.py,sha256=5Enkq7CG7fOpIwMGQ_yF4mTEP3wmoZK3ic3jxERi7Fk,24953
69
+ rem/cli/commands/db.py,sha256=p8U7hL6iukSrZvYTD70JcwWDMZvLUZtTZLDebyTclbE,27506
67
70
  rem/cli/commands/dreaming.py,sha256=2P8nyX9gnRgyCJZrDuyJt5_YAsFmjUGa6dg7OvoLA8k,13292
68
71
  rem/cli/commands/experiments.py,sha256=dRJKtvrGQu0a9bQZaLnVfdWhaur2bKYviixqOnYQC-k,62472
69
72
  rem/cli/commands/mcp.py,sha256=PiP_zXflZ2lPVgmH3N8EGOWXDSfvNTQJD-MMW3ym3xo,1666
@@ -78,24 +81,26 @@ rem/models/core/engram.py,sha256=CuoilA74hmlgMT2mZCoEEh0jFsMrKUw9wdyFOygBa8E,101
78
81
  rem/models/core/experiment.py,sha256=Zc5kVtUa05mxEzvJHuXGvGMffa0Uk9Lo16XNsbIDfHw,20777
79
82
  rem/models/core/inline_edge.py,sha256=BVOYchWzb5vYRPTBJEKh06YDwzL_NKdvCRg4BtXRn7g,5059
80
83
  rem/models/core/rem_query.py,sha256=EpD1NdhxgptW81ID1_q2pnYhioM8J4Efx-JFJsNW_i0,8108
81
- rem/models/entities/__init__.py,sha256=p3eOFNZdlQ_dF0ZdXR9sHPHu_btMd5mZmw0v5iL8uik,1878
84
+ rem/models/entities/__init__.py,sha256=h_Bt83lk1qTliTybT0HbxcBCPzIvbtfr7kizbSua1iM,2015
82
85
  rem/models/entities/domain_resource.py,sha256=9kfsa1ELGG1gpAWlxBGkaWk157pJ8u636aQBi-ZJ9WA,1269
83
86
  rem/models/entities/feedback.py,sha256=m8AIm57DD4N4-8M6hI9EwF6rpA_EYE8tNR-sln9vEb8,3483
84
87
  rem/models/entities/file.py,sha256=plUm0Caww_yNrpgnOkGp3RBv4l9I6szGOe-NuAuWCcg,1492
85
88
  rem/models/entities/image_resource.py,sha256=FIZbGVgsroHY47ESbFIjy0sOtgM8w6vHPUk9lJSVJz4,3254
86
89
  rem/models/entities/message.py,sha256=KHHDBKs_UsWQ-0LURRQlDTV_iiUozmERMBWLPlHPbgg,1966
87
90
  rem/models/entities/moment.py,sha256=sTRFShQwgJMez9OcU7-Vs6k-Whof2TuZCVjdUSyVjVY,4434
88
- rem/models/entities/ontology.py,sha256=uJI-GhtvikafiJe2pYECFqGQlIZAHstSwIs9Lu4J6c0,7818
91
+ rem/models/entities/ontology.py,sha256=bvUBTlg4fQ0mWtiSEggeri3he5BqwYXF_TpuYmzCKxI,7584
89
92
  rem/models/entities/ontology_config.py,sha256=fe-LLM-AaKznVoQ02ou2GvPSAp_Bwez0rk3H0RIUYTw,5055
90
93
  rem/models/entities/resource.py,sha256=FW7R_AylZilb-1iYfZA5MMQw2zA42CUVweKgO-4cwqM,3407
91
94
  rem/models/entities/schema.py,sha256=CEcd49kR_6YgaLLKsWaIb2J0KdbVsgYoi_srPgzr9Aw,2945
92
95
  rem/models/entities/session.py,sha256=VKeTAZZphrKz379Av1hhUTWfQ-DbxLAt3CfU3aDHfwk,2499
93
96
  rem/models/entities/shared_session.py,sha256=PWTH637NHmwziXCgr1BM0KXWLUzHrbfLlYKLH3qdU6A,5901
94
- rem/models/entities/user.py,sha256=Svew38nvZhhXUeDdE8Np37Ljq41JfwwZIEkgxOB2eY8,2820
97
+ rem/models/entities/subscriber.py,sha256=0x51UkGRkAeJfr_0u4srN8H0NrXJEv5MdESeQsjvin4,5181
98
+ rem/models/entities/user.py,sha256=Ps-CWn-Rkj7yYEW768_mSu3maDxysxsJWT2T7XisuN4,2879
95
99
  rem/schemas/README.md,sha256=_WH2A78jyLb11xu8q1tu4pDMlgZfE9WjYqrAUbn2BIM,13588
96
100
  rem/schemas/__init__.py,sha256=cY7Hqc056Mb3t12nfpkAK6WZDvOP1gk4rv0CK4VbhTk,213
97
101
  rem/schemas/agents/README.md,sha256=FZI5B8Miqod7KY3KxidW4q8u9W7FbtigV2VU7ropPS0,2815
98
102
  rem/schemas/agents/rem.yaml,sha256=w8hIZvAnoWmYJrob1gEZ-yi6BXLQoafwlysYeGU168g,8390
103
+ rem/schemas/agents/core/agent-builder.yaml,sha256=-Yy-X1nreK1hEjGad1Pr0ROtG1LiRtidq8-63CMEqL4,7399
99
104
  rem/schemas/agents/core/moment-builder.yaml,sha256=-nieKbEiYKiIwBtTCBtIVDKV-cfXpGn0AJ66BUUm48U,8368
100
105
  rem/schemas/agents/core/rem-query-agent.yaml,sha256=dQyShquyn-2nGooy8tyZ588etfx4kzfAE1xDIBCJCVI,10265
101
106
  rem/schemas/agents/core/resource-affinity-assessor.yaml,sha256=AXS_gvDdjUyFGZO-VJsGx30qKDIQJjdWU81ben-Jrk0,5361
@@ -114,9 +119,9 @@ rem/schemas/evaluators/rem/lookup-correctness.yaml,sha256=i0HLGlVzNlf7chVbXMpmyZ
114
119
  rem/schemas/evaluators/rem/retrieval-precision.yaml,sha256=3CekIxTjJ0RFFKVNo-JFIpZ1KFea1WOWuMnRu8i-m1Q,7181
115
120
  rem/schemas/evaluators/rem/retrieval-recall.yaml,sha256=2IuO8uu9hr-Nrn23nDo4rebE5t0eFtxcUYihHh5JwVc,7894
116
121
  rem/schemas/evaluators/rem/search-correctness.yaml,sha256=pODDOMCqnTfAViQnn_KvSO132JYXoZiMeXW-8g7v-JE,6247
117
- rem/services/__init__.py,sha256=oPjNQ-JrsrAEz1Ox7E7v_G416lAslbV5vmNzjAM6IuI,458
122
+ rem/services/__init__.py,sha256=NEm6aX38YW1HcICNGYbYTZb4VGWHgqRev5Rrf6xOQi0,566
118
123
  rem/services/rate_limit.py,sha256=p7tTvGQfyM4XalEMdtGaDKvwCeuKZLQXSoM07aEru98,3725
119
- rem/services/user_service.py,sha256=TYlxUaUUUjAho3F2l8_hqAhe-MSLHd5VoewNe5SdqWw,3132
124
+ rem/services/user_service.py,sha256=TJJDnWgrFviY7yb0bz5jfmYGnuQ2WaGvGvD5OgEOa0Q,4110
120
125
  rem/services/audio/INTEGRATION.md,sha256=j1GhA1Az_x8Q6soxQ2blQ-0Av7he3lkeEw8P4SffI88,9526
121
126
  rem/services/audio/README.md,sha256=VQmqhRNvNqXU549rhf589WBs1iacbvzayhRER1lyXV4,10355
122
127
  rem/services/audio/__init__.py,sha256=jTAbL0324bJESsY9FBum6ybaXaxy7HTlREm9FiuCcSI,438
@@ -125,7 +130,7 @@ rem/services/audio/transcriber.py,sha256=CbUkNr_AyFZ4NImr6giwgDTT_xPmOe3iSr_YPdB
125
130
  rem/services/content/README.md,sha256=nKOYqYbMljCVRZ55dlGU6Afipo0FVV7YXqT_dV-VXsw,35806
126
131
  rem/services/content/__init__.py,sha256=JtfEPROctu3_R5oGdo04PxpgYqXxAz-TbpS8Ejkjdfs,120
127
132
  rem/services/content/providers.py,sha256=xKW6Bn_fJpQGtnESufZcLRh7BAjWqSOLVdYiEg6rYDc,27909
128
- rem/services/content/service.py,sha256=PDdLPuN3mlfCPh-PttbPVjOQ63iIWWm4ApTH0TWEM40,29678
133
+ rem/services/content/service.py,sha256=DjGNmkrRu18ODknD-cxSc2VAI_OtFbkGpbX5EOVXb-g,29765
129
134
  rem/services/dreaming/README.md,sha256=JhzndF6yRP2Eut_AlvukZHV9MSv83V--V2pA0GXXf2g,9100
130
135
  rem/services/dreaming/__init__.py,sha256=3j2TBC1_0z8AlCA9jiqsecyzPFaptCUUHsO_RlXrINc,1719
131
136
  rem/services/dreaming/affinity_service.py,sha256=ScWKwRIPLywqqL2RFd_TsTg_KKmPb0ngBCpOpmIG7w4,12205
@@ -133,9 +138,12 @@ rem/services/dreaming/moment_service.py,sha256=cqUQpqGZx__Gx0m0I-_WmJJgNPrwVwHRQ
133
138
  rem/services/dreaming/ontology_service.py,sha256=hpP3aCYqsP26taq3__Q2w_jmA9-J1wZ7gNrKvBf-HQM,1704
134
139
  rem/services/dreaming/user_model_service.py,sha256=oTuqFdNxegWwVGzOOnwdf5YS2IKQYRNW10bV5efG57E,9929
135
140
  rem/services/dreaming/utils.py,sha256=ntCXGygJERdH7CW59kudjodBVP6oD4mH42_vH_2powk,1116
141
+ rem/services/email/__init__.py,sha256=SwPCjm-8EuSFcap-LYLQ3NQnofd0v27ks0qLAKkg_tM,271
142
+ rem/services/email/service.py,sha256=13v-EGHIDda0IyIg7bVDGea32fYLmq9VWruqr2KdcFU,18211
143
+ rem/services/email/templates.py,sha256=bXgNweo6xwGJxxDvnjmhI320eyHTRtnyjstYk-Fs_5k,12775
136
144
  rem/services/embeddings/__init__.py,sha256=Jr22tszCfpmishCnnQrS0MBHxiUK_E7rJmNqTeR_xpI,293
137
145
  rem/services/embeddings/api.py,sha256=mDkx_-wWOfjI4uuPIaQDLkfdznEdXQFOvx4VK-Ll4oc,4340
138
- rem/services/embeddings/worker.py,sha256=BdPIsR4hv_epbjpLMg7-n_uje6crvhdfZcVha9EzaxA,13993
146
+ rem/services/embeddings/worker.py,sha256=EQcqkqaAaTw8ymEPDl0EG-NGoP3IIRXhNYVXBwCJyuA,14788
139
147
  rem/services/fs/README.md,sha256=Rocb3a0uz27q1QXlhT8DQNUzHM6o_ryt4pRREgcvf0Q,18322
140
148
  rem/services/fs/__init__.py,sha256=VvFB1SMQLzd0rRatWvhpnFkoOGDBHYdTC63tZkzOy10,1606
141
149
  rem/services/fs/examples.py,sha256=ERHJP7RzZ8stetxesILaTvT4gOa9vlkW-e8EP-ZWAM8,5572
@@ -156,16 +164,16 @@ rem/services/phoenix/__init__.py,sha256=f6h90EHVrQkyS-ZhPknXwbHp_vrZrQ7HgXmCGc1J
156
164
  rem/services/phoenix/client.py,sha256=0sDm26v7Wi9jTof31Cf0A_5hA_g0HKGQys4qeBqySc0,35214
157
165
  rem/services/phoenix/config.py,sha256=rgFEJ5iENuvBa0_nhEhgz0gW4Sg0uo_fkQMgsnHiTc8,2932
158
166
  rem/services/phoenix/prompt_labels.py,sha256=82VIsXgZ51d3YLzHxusmfzd40yl5YOVnddzv_lNFIGg,13953
159
- rem/services/postgres/README.md,sha256=qPimP6367CvfcuF1DjC0VSL0uoc_ThOVeZ0ioJy_z5Q,21518
167
+ rem/services/postgres/README.md,sha256=Uh9ZyATF2PyNWz-QEtXl7wJ9Q_3Q0SL2hVKO2ncSwB8,22796
160
168
  rem/services/postgres/__init__.py,sha256=hPOVs7Gi42qjz9ySu1y1Fmxcyo21UrhVycw_y4YAF-0,563
161
- rem/services/postgres/diff_service.py,sha256=vffYq6e5Ce_b8yuS01u9r27SYCUnmODa5mH8eeZpInM,19402
169
+ rem/services/postgres/diff_service.py,sha256=J6QFsNmgaJA5I3BtP8_1NNm-OwloG8p44PlHhwCJiYc,20087
162
170
  rem/services/postgres/migration_service.py,sha256=2irsWfzczZ0_-wge6ReyCrFrE3HxvnlwKAEp8mWqtQo,14897
163
- rem/services/postgres/pydantic_to_sqlalchemy.py,sha256=Gnphk41CPfgYNgEYlnGV1bkz7o56n8PQe1v47mWks-E,16036
164
- rem/services/postgres/register_type.py,sha256=KwttMTvCdtLvSyW2YICmZ71BBB4oomIoX9IJT-qyEn8,11169
165
- rem/services/postgres/repository.py,sha256=CYbAozL7iAjVnpV8HbQ1HNu8UUlgHzvyBds1qTICfQE,15788
166
- rem/services/postgres/schema_generator.py,sha256=TpINJtEPcrbISbz3HUo7zEI1C-542HEAsf2m5kOuGM8,23906
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
174
+ rem/services/postgres/schema_generator.py,sha256=R0qJI_wFp4JgkGsh42kVtxdCAWjd129qlGV2_3YdgoM,23943
167
175
  rem/services/postgres/service.py,sha256=3CIOP7LuaK4p2rYTyscIXasGLTwjb62HnAGbOCuEm74,27122
168
- rem/services/postgres/sql_builder.py,sha256=EQZCXBLuOM_trDnr0vwzqJRCKMk9wpZG2ZrY_yBfQMk,10348
176
+ rem/services/postgres/sql_builder.py,sha256=dgezomG1s-cLcu8Q3u8AjOWO3Rtyg4r_m91UAE4vc9o,10418
169
177
  rem/services/rem/README.md,sha256=uNFYDzlxFuYOAE3Qxuiy7OYRPoTIDWT_e3d7FZmVHQ8,15441
170
178
  rem/services/rem/__init__.py,sha256=c0Mzd9K2hzeDTldU4IffQPhiuGshfLqdIFp1KQ9ykU4,482
171
179
  rem/services/rem/exceptions.py,sha256=9pse9_1XKm7VuiRxZVgHZeD2nm8yabYfw24Fga_mdGc,2440
@@ -176,13 +184,14 @@ rem/services/rem/query.py,sha256=z4Qcaed1mPG2p-4pazEUlnUFqOEYxrKGYLffwD2-V-c,121
176
184
  rem/services/rem/service.py,sha256=cYPPCZ90S9QRWi_4JxEe9oybdDM8Is7wgYt8EpLoiVY,21093
177
185
  rem/services/session/README.md,sha256=WDoVWMRXrSh6wRSlUQ0oIHUItOol65INl86VCNPUOYQ,10446
178
186
  rem/services/session/__init__.py,sha256=ODLcjnOjLubJU8ncvZsB4SB2zl-mncQQLDZWILwc0Cs,254
179
- rem/services/session/compression.py,sha256=D1kOljLD5bUxukGQKpGmVSjn3Z9Ugx-T3IF--GXMSCw,14236
180
- rem/services/session/reload.py,sha256=MhCielWyhNAP6yqi61q9sc_8CRWAvG2sHBRTvamIcF8,2428
181
- rem/sql/background_indexes.sql,sha256=Lra21QxTvuDOlf0yoF23VOUiHJLRnNWgu0OOR8OXTGQ,1792
182
- rem/sql/migrations/001_install.sql,sha256=LPaIStaDwQ39U-mlMqY6qxMoAAdulyB80ReyiPw_TvA,30039
183
- rem/sql/migrations/002_install_models.sql,sha256=SMhvFKp70ctaln63ghZq9ED34LWR0__w-ETph7pgvQ4,152648
187
+ rem/services/session/compression.py,sha256=8PTGqJ9G4AJaMHzJL5BbVMz_okFSqWbRI3TSHCRYriU,17079
188
+ rem/services/session/reload.py,sha256=qbs9yYYBaEH0n_XN_A4BqHcB0RIX_JMkZjHNzUR6zY4,2805
189
+ 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
184
192
  rem/sql/migrations/003_optional_extensions.sql,sha256=QACy3J50ZgV_4BHNkkT3iswkE1ijc0oCAOgavv6KC5g,12443
185
193
  rem/sql/migrations/004_cache_system.sql,sha256=KBpU3hQY08So_MkMfcOwTZDngTMqa_3kA0ujQ98K33k,19672
194
+ rem/sql/migrations/005_schema_update.sql,sha256=fVcuUt0I24UXMEWA25TM-kN29GC19IAqxlxFP-3Z2ys,5055
186
195
  rem/utils/AGENTIC_CHUNKING.md,sha256=Z9IyL5yoFTlvamPE5KA7cs0Btoc_6bq8hh7Q_WARlw8,17230
187
196
  rem/utils/README.md,sha256=Osix2SVYAECMFTFnLhn8D8rsPrtNaCBWfkZfkn5RS60,18087
188
197
  rem/utils/__init__.py,sha256=ZGMTgR7g-V3fhfgKo791wGBhdxy72xTJSo7Q_xwkQRI,1417
@@ -197,8 +206,8 @@ rem/utils/embeddings.py,sha256=FnjZFHXgxf__dbubY2HknhDAngizr8j7P28-Sug4-f0,13150
197
206
  rem/utils/files.py,sha256=6ax-5vmk_4cI-IG55PT9sKj_DqXBl32RkTRSsxqvgGY,8759
198
207
  rem/utils/markdown.py,sha256=zhfSiSRX36vky1b2UOGKsuSr11L2l6Kl_O7iSfwQXBY,401
199
208
  rem/utils/mime_types.py,sha256=8KGEuPWVdQ8r1DFLsgiaAgEYqMaaQIk-6lCVOBB1z_A,5346
200
- rem/utils/model_helpers.py,sha256=Cvqeof9KlhkkBmAFxRLtfsh4m_MQ0N8WukI3IDJcTtw,11743
201
- rem/utils/schema_loader.py,sha256=HMFr9SLOqj9N9fdqBBJJUEY86ruPWg75ay-k8B9SdsY,22740
209
+ rem/utils/model_helpers.py,sha256=c60hxrS6wmYCIJjjl7uMq4cE-GCe27A7YAizRjKqtJE,15160
210
+ rem/utils/schema_loader.py,sha256=4sfhbjSuFK8WN3e86IdqN8wsgbIA4dgboWMG-CuZzbY,24050
202
211
  rem/utils/sql_paths.py,sha256=4bEHU3J3liZdhWYu0WSpCQSo-wfO0sHC_BrJlStRAks,4257
203
212
  rem/utils/sql_types.py,sha256=VKGmDhxPP91EnjJ6h78Q2sUvjBulowR1brtgAdACbtE,10622
204
213
  rem/utils/user_id.py,sha256=AhrUniMZYDybHT6mcv9RalUS3klobqkoMmPh9ZxiZcU,2107
@@ -213,7 +222,7 @@ rem/workers/dreaming.py,sha256=UqCf-iBUhzBVBRFj7_DtR6q27oRo7EUoal9qqHLzlo4,17823
213
222
  rem/workers/engram_processor.py,sha256=Ws92kAILMLK_np3F1HRmhKKXiruLIvFn3o9MY3V2W8g,10779
214
223
  rem/workers/sqs_file_processor.py,sha256=tX8S0yo2n1XGvaZ7JUqeGmtTwxybQqz3wkHT2j6Ak7Y,6597
215
224
  rem/workers/unlogged_maintainer.py,sha256=KhebhXl3s6DwvHnXXEJ45r5tLK9PNj-0KclNIQVQ68s,15817
216
- remdb-0.3.146.dist-info/METADATA,sha256=5EN8fzDT5MKmkGWP4W6-bZSPQ6uG9j0rcsUsZdpK-_c,53341
217
- remdb-0.3.146.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
218
- remdb-0.3.146.dist-info/entry_points.txt,sha256=gmmrz7tRC1WGUrCMJMg6p5pEP5h5mPYRvWIxp1FYdr0,42
219
- remdb-0.3.146.dist-info/RECORD,,
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,,