claude-smart 0.2.46 → 0.2.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +19 -11
  3. package/bin/claude-smart.js +290 -68
  4. package/package.json +1 -1
  5. package/plugin/.claude-plugin/plugin.json +1 -1
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/README.md +11 -10
  8. package/plugin/dashboard/app/layout.tsx +20 -0
  9. package/plugin/dashboard/app/sessions/[sessionId]/page.tsx +36 -2
  10. package/plugin/dashboard/package-lock.json +61 -390
  11. package/plugin/dashboard/package.json +2 -2
  12. package/plugin/opencode/dist/server.mjs +76 -2
  13. package/plugin/opencode/server.mts +79 -2
  14. package/plugin/pyproject.toml +6 -2
  15. package/plugin/scripts/smart-install.sh +7 -1
  16. package/plugin/src/claude_smart/cli.py +210 -22
  17. package/plugin/src/claude_smart/context_format.py +9 -9
  18. package/plugin/src/claude_smart/cs_cite.py +66 -19
  19. package/plugin/uv.lock +5 -5
  20. package/plugin/vendor/reflexio/.env.example +7 -0
  21. package/plugin/vendor/reflexio/README.md +3 -3
  22. package/plugin/vendor/reflexio/pyproject.toml +2 -1
  23. package/plugin/vendor/reflexio/reflexio/README.md +11 -6
  24. package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +1 -1
  25. package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +2 -2
  26. package/plugin/vendor/reflexio/reflexio/cli/utils.py +44 -1
  27. package/plugin/vendor/reflexio/reflexio/client/client.py +97 -0
  28. package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +8 -0
  29. package/plugin/vendor/reflexio/reflexio/lib/_base.py +15 -0
  30. package/plugin/vendor/reflexio/reflexio/lib/_config.py +23 -18
  31. package/plugin/vendor/reflexio/reflexio/lib/_generation.py +9 -8
  32. package/plugin/vendor/reflexio/reflexio/lib/_interactions.py +16 -1
  33. package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +27 -16
  34. package/plugin/vendor/reflexio/reflexio/lib/_search.py +27 -5
  35. package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +9 -0
  36. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +1 -0
  37. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +1 -0
  38. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/governance.py +117 -0
  39. package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +45 -3
  40. package/plugin/vendor/reflexio/reflexio/models/config_schema.py +37 -0
  41. package/plugin/vendor/reflexio/reflexio/server/README.md +38 -9
  42. package/plugin/vendor/reflexio/reflexio/server/__init__.py +21 -2
  43. package/plugin/vendor/reflexio/reflexio/server/api.py +274 -3267
  44. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/README.md +4 -3
  45. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/publisher_api.py +16 -1
  46. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +1 -1
  47. package/plugin/vendor/reflexio/reflexio/server/{_auth.py → auth.py} +2 -0
  48. package/plugin/vendor/reflexio/reflexio/server/cache/reflexio_cache.py +62 -36
  49. package/plugin/vendor/reflexio/reflexio/server/deployment_profile.py +69 -0
  50. package/plugin/vendor/reflexio/reflexio/server/extensions.py +213 -0
  51. package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_embedding.py +424 -0
  52. package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_json_extraction.py +249 -0
  53. package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_structured_output.py +195 -0
  54. package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_subprocess.py +152 -0
  55. package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_text_generation.py +980 -0
  56. package/plugin/vendor/reflexio/reflexio/server/llm/_litellm_types.py +110 -0
  57. package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +73 -1819
  58. package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +4 -4
  59. package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +57 -5
  60. package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +12 -1
  61. package/plugin/vendor/reflexio/reflexio/server/middleware.py +244 -0
  62. package/plugin/vendor/reflexio/reflexio/server/operation_limiter.py +9 -1
  63. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.4.0.prompt.md +14 -2
  64. package/plugin/vendor/reflexio/reflexio/server/rate_limit.py +79 -0
  65. package/plugin/vendor/reflexio/reflexio/server/routes/__init__.py +6 -0
  66. package/plugin/vendor/reflexio/reflexio/server/routes/_common.py +25 -0
  67. package/plugin/vendor/reflexio/reflexio/server/routes/_metering.py +98 -0
  68. package/plugin/vendor/reflexio/reflexio/server/routes/braintrust.py +129 -0
  69. package/plugin/vendor/reflexio/reflexio/server/routes/config.py +210 -0
  70. package/plugin/vendor/reflexio/reflexio/server/routes/evaluation.py +549 -0
  71. package/plugin/vendor/reflexio/reflexio/server/routes/interactions.py +259 -0
  72. package/plugin/vendor/reflexio/reflexio/server/routes/playbooks.py +578 -0
  73. package/plugin/vendor/reflexio/reflexio/server/routes/profiles.py +423 -0
  74. package/plugin/vendor/reflexio/reflexio/server/routes/provenance.py +345 -0
  75. package/plugin/vendor/reflexio/reflexio/server/routes/search.py +349 -0
  76. package/plugin/vendor/reflexio/reflexio/server/routes/system.py +261 -0
  77. package/plugin/vendor/reflexio/reflexio/server/scheduling.py +132 -0
  78. package/plugin/vendor/reflexio/reflexio/server/services/README.md +5 -2
  79. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/__init__.py +38 -0
  80. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_batch_progress.py +298 -0
  81. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_config_filter.py +152 -0
  82. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_extraction_lifecycle.py +243 -0
  83. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_should_run.py +299 -0
  84. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_status_change.py +273 -0
  85. package/plugin/vendor/reflexio/reflexio/server/services/base_generation/_usage_billing.py +258 -0
  86. package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +17 -1183
  87. package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +8 -1
  88. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_scheduler.py +26 -41
  89. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +8 -0
  90. package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +232 -123
  91. package/plugin/vendor/reflexio/reflexio/server/services/governance/config.py +52 -0
  92. package/plugin/vendor/reflexio/reflexio/server/services/governance/service.py +378 -0
  93. package/plugin/vendor/reflexio/reflexio/server/services/governance/subject_refs.py +34 -0
  94. package/plugin/vendor/reflexio/reflexio/server/services/lineage/gc_scheduler.py +385 -78
  95. package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +9 -1
  96. package/plugin/vendor/reflexio/reflexio/server/services/playbook/aggregation_prompt_processing.py +100 -0
  97. package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator.py +121 -525
  98. package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator_clustering.py +184 -0
  99. package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator_postprocessing.py +130 -0
  100. package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/aggregator_prompt_formatting.py +212 -0
  101. package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/consolidator.py +258 -69
  102. package/plugin/vendor/reflexio/reflexio/server/services/playbook/service.py +9 -9
  103. package/plugin/vendor/reflexio/reflexio/server/services/profile/components/extractor.py +3 -2
  104. package/plugin/vendor/reflexio/reflexio/server/services/publish_learning_worker.py +288 -0
  105. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/recency.py +211 -0
  106. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +29 -13
  107. package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +4 -0
  108. package/plugin/vendor/reflexio/reflexio/server/services/storage/governance_validation.py +681 -0
  109. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +43 -6
  110. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +10 -1167
  111. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +58 -351
  112. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +49 -19
  113. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_governance.py +452 -0
  114. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_lineage.py +11 -4
  115. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1 -2133
  116. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +7 -1126
  117. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +73 -33
  118. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_share_links.py +30 -0
  119. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/__init__.py +9 -0
  120. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/_agent_run_store.py +506 -0
  121. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/_pending_tool_call_store.py +704 -0
  122. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/agent_run/_run_tool_dependency_store.py +123 -0
  123. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/base/__init__.py +6 -0
  124. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/base/_deletion.py +263 -0
  125. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/base/_fts_vec.py +132 -0
  126. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/__init__.py +13 -0
  127. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_audit.py +122 -0
  128. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_erase_execution.py +465 -0
  129. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_purge.py +387 -0
  130. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_rebuild_hide.py +332 -0
  131. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/governance/_subject_barrier.py +511 -0
  132. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/__init__.py +13 -0
  133. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_agent.py +955 -0
  134. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_eval_results.py +189 -0
  135. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_optimization.py +247 -0
  136. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_source_linkage.py +145 -0
  137. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_user.py +844 -0
  138. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/__init__.py +9 -0
  139. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/_interaction_store.py +263 -0
  140. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/_profile_store.py +896 -0
  141. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/profiles/_search.py +270 -0
  142. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +50 -9
  143. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +64 -370
  144. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +4 -4
  145. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +0 -909
  146. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +2 -0
  147. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_share_links.py +20 -0
  148. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/__init__.py +9 -0
  149. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_agent_run_store.py +86 -0
  150. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_models.py +195 -0
  151. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_pending_tool_call_store.py +148 -0
  152. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/agent_run/_run_tool_dependency_store.py +38 -0
  153. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/__init__.py +13 -0
  154. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_audit.py +29 -0
  155. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_erase_execution.py +30 -0
  156. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_purge.py +74 -0
  157. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_rebuild_hide.py +32 -0
  158. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/governance/_subject_barrier.py +49 -0
  159. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/__init__.py +13 -0
  160. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_agent.py +365 -0
  161. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_eval_results.py +124 -0
  162. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_optimization.py +85 -0
  163. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_source_linkage.py +47 -0
  164. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_user.py +333 -0
  165. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/profiles/__init__.py +9 -0
  166. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/profiles/_interaction_store.py +73 -0
  167. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/{_profiles.py → profiles/_profile_store.py} +57 -86
  168. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/profiles/_search.py +32 -0
  169. package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +153 -12
  170. package/plugin/vendor/reflexio/reflexio/server/services/playbook/user_detail_stripping.py +0 -84
@@ -0,0 +1,259 @@
1
+ """Interaction route handlers (extracted from api.py, Tier3 A2)."""
2
+
3
+ import logging
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ pass
8
+
9
+ from fastapi import (
10
+ APIRouter,
11
+ BackgroundTasks,
12
+ Depends,
13
+ Request,
14
+ )
15
+
16
+ from reflexio.models.api_schema.retriever_schema import (
17
+ GetInteractionsRequest,
18
+ GetInteractionsViewResponse,
19
+ GetRequestsRequest,
20
+ GetRequestsViewResponse,
21
+ RequestDataView,
22
+ SessionView,
23
+ )
24
+ from reflexio.models.api_schema.service_schemas import (
25
+ BulkDeleteResponse,
26
+ DeleteRequestRequest,
27
+ DeleteRequestResponse,
28
+ DeleteRequestsByIdsRequest,
29
+ DeleteSessionRequest,
30
+ DeleteSessionResponse,
31
+ DeleteUserInteractionRequest,
32
+ DeleteUserInteractionResponse,
33
+ PublishUserInteractionRequest,
34
+ PublishUserInteractionResponse,
35
+ )
36
+ from reflexio.models.api_schema.ui.converters import (
37
+ to_interaction_view,
38
+ )
39
+ from reflexio.server.api_endpoints import (
40
+ publisher_api,
41
+ )
42
+ from reflexio.server.auth import (
43
+ default_billing_gate,
44
+ default_get_org_id,
45
+ )
46
+ from reflexio.server.cache import reflexio_cache
47
+ from reflexio.server.rate_limit import limiter
48
+ from reflexio.server.routes._common import _run_limited_api
49
+
50
+ logger = logging.getLogger(__name__)
51
+ router = APIRouter()
52
+
53
+
54
+ @router.post(
55
+ "/api/publish_interaction",
56
+ response_model=PublishUserInteractionResponse,
57
+ response_model_exclude_none=True,
58
+ )
59
+ @limiter.limit("60/minute") # Rate limit for write operations
60
+ def publish_user_interaction(
61
+ request: Request,
62
+ payload: PublishUserInteractionRequest,
63
+ background_tasks: BackgroundTasks,
64
+ org_id: str = Depends(default_get_org_id),
65
+ wait_for_response: bool = False,
66
+ _gate: None = Depends(default_billing_gate("learnings_generated")), # noqa: B008
67
+ ) -> PublishUserInteractionResponse:
68
+ if wait_for_response:
69
+ # Sync callers wait for the real result, so preserve bounded backpressure
70
+ # before any storage side effects. The inner service limiter is disabled
71
+ # because this route already owns the publish slot.
72
+ return _run_limited_api(
73
+ org_id,
74
+ "publish",
75
+ lambda: publisher_api.add_user_interaction(
76
+ org_id=org_id,
77
+ request=payload,
78
+ use_publish_limiter=False,
79
+ ),
80
+ )
81
+
82
+ def _publish_task() -> None:
83
+ try:
84
+ publisher_api.add_user_interaction(
85
+ org_id=org_id,
86
+ request=payload,
87
+ defer_learning=True,
88
+ )
89
+ except Exception:
90
+ logger.exception("Background publish failed for org %s", org_id)
91
+
92
+ # Run in background — caller gets immediate acknowledgement
93
+ background_tasks.add_task(_publish_task)
94
+ return PublishUserInteractionResponse(
95
+ success=True, message="Interaction queued for processing"
96
+ )
97
+
98
+
99
+ @router.delete(
100
+ "/api/delete_interaction",
101
+ response_model=DeleteUserInteractionResponse,
102
+ response_model_exclude_none=True,
103
+ )
104
+ def delete_interaction(
105
+ request: DeleteUserInteractionRequest,
106
+ org_id: str = Depends(default_get_org_id),
107
+ ) -> DeleteUserInteractionResponse:
108
+ return publisher_api.delete_user_interaction(org_id=org_id, request=request)
109
+
110
+
111
+ @router.delete(
112
+ "/api/delete_request",
113
+ response_model=DeleteRequestResponse,
114
+ response_model_exclude_none=True,
115
+ )
116
+ def delete_request(
117
+ request: DeleteRequestRequest,
118
+ org_id: str = Depends(default_get_org_id),
119
+ ) -> DeleteRequestResponse:
120
+ return publisher_api.delete_request(org_id=org_id, request=request)
121
+
122
+
123
+ @router.delete(
124
+ "/api/delete_session",
125
+ response_model=DeleteSessionResponse,
126
+ response_model_exclude_none=True,
127
+ )
128
+ def delete_session(
129
+ request: DeleteSessionRequest,
130
+ org_id: str = Depends(default_get_org_id),
131
+ ) -> DeleteSessionResponse:
132
+ return publisher_api.delete_session(org_id=org_id, request=request)
133
+
134
+
135
+ @router.delete(
136
+ "/api/delete_requests_by_ids",
137
+ response_model=BulkDeleteResponse,
138
+ response_model_exclude_none=True,
139
+ )
140
+ def delete_requests_by_ids(
141
+ request: DeleteRequestsByIdsRequest,
142
+ org_id: str = Depends(default_get_org_id),
143
+ ) -> BulkDeleteResponse:
144
+ """Delete multiple requests by their IDs.
145
+
146
+ Args:
147
+ request (DeleteRequestsByIdsRequest): Request containing list of request IDs to delete
148
+ org_id (str): Organization ID
149
+
150
+ Returns:
151
+ BulkDeleteResponse: Response containing success status and deleted count
152
+ """
153
+ return publisher_api.delete_requests_by_ids(org_id=org_id, request=request)
154
+
155
+
156
+ @router.delete(
157
+ "/api/delete_all_interactions",
158
+ response_model=BulkDeleteResponse,
159
+ response_model_exclude_none=True,
160
+ )
161
+ @limiter.limit("10/minute")
162
+ def delete_all_interactions(
163
+ request: Request,
164
+ org_id: str = Depends(default_get_org_id),
165
+ ) -> BulkDeleteResponse:
166
+ """Delete all requests and their associated interactions.
167
+
168
+ Args:
169
+ org_id (str): Organization ID
170
+
171
+ Returns:
172
+ BulkDeleteResponse: Response containing success status and deleted count
173
+ """
174
+ return publisher_api.delete_all_interactions_bulk(org_id=org_id)
175
+
176
+
177
+ @router.post(
178
+ "/api/get_interactions",
179
+ response_model=GetInteractionsViewResponse,
180
+ response_model_exclude_none=True,
181
+ )
182
+ def get_interactions(
183
+ request: GetInteractionsRequest,
184
+ org_id: str = Depends(default_get_org_id),
185
+ ) -> GetInteractionsViewResponse:
186
+ response = reflexio_cache.get_reflexio(org_id=org_id).get_interactions(request)
187
+ return GetInteractionsViewResponse(
188
+ success=response.success,
189
+ interactions=[to_interaction_view(i) for i in response.interactions],
190
+ msg=response.msg,
191
+ )
192
+
193
+
194
+ @router.get(
195
+ "/api/get_all_interactions",
196
+ response_model=GetInteractionsViewResponse,
197
+ response_model_exclude_none=True,
198
+ )
199
+ @limiter.limit("30/minute")
200
+ def get_all_interactions(
201
+ request: Request,
202
+ limit: int = 100,
203
+ org_id: str = Depends(default_get_org_id),
204
+ ) -> GetInteractionsViewResponse:
205
+ """Get all user interactions across all users.
206
+
207
+ Args:
208
+ limit (int, optional): Maximum number of interactions to return. Defaults to 100.
209
+ org_id (str): Organization ID
210
+
211
+ Returns:
212
+ GetInteractionsViewResponse: Response containing all user interactions
213
+ """
214
+ reflexio = reflexio_cache.get_reflexio(org_id=org_id)
215
+ response = reflexio.get_all_interactions(limit=limit)
216
+ return GetInteractionsViewResponse(
217
+ success=response.success,
218
+ interactions=[to_interaction_view(i) for i in response.interactions],
219
+ msg=response.msg,
220
+ )
221
+
222
+
223
+ @router.post(
224
+ "/api/get_requests",
225
+ response_model=GetRequestsViewResponse,
226
+ response_model_exclude_none=True,
227
+ )
228
+ def get_requests_endpoint(
229
+ request: GetRequestsRequest,
230
+ org_id: str = Depends(default_get_org_id),
231
+ ) -> GetRequestsViewResponse:
232
+ """Get requests with their associated interactions.
233
+
234
+ Args:
235
+ request (GetRequestsRequest): The get request
236
+ org_id (str): Organization ID
237
+
238
+ Returns:
239
+ GetRequestsViewResponse: Response containing requests with their interactions
240
+ """
241
+ internal_response = reflexio_cache.get_reflexio(org_id=org_id).get_requests(request)
242
+ return GetRequestsViewResponse(
243
+ success=internal_response.success,
244
+ sessions=[
245
+ SessionView(
246
+ session_id=s.session_id,
247
+ requests=[
248
+ RequestDataView(
249
+ request=rd.request,
250
+ interactions=[to_interaction_view(i) for i in rd.interactions],
251
+ )
252
+ for rd in s.requests
253
+ ],
254
+ )
255
+ for s in internal_response.sessions
256
+ ],
257
+ has_more=internal_response.has_more,
258
+ msg=internal_response.msg,
259
+ )