claude-smart 0.2.41 → 0.2.43

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 (396) hide show
  1. package/.claude-plugin/marketplace.json +17 -0
  2. package/README.md +1 -1
  3. package/bin/claude-smart.js +86 -48
  4. package/package.json +10 -3
  5. package/plugin/.claude-plugin/plugin.json +9 -3
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/README.md +2 -2
  8. package/plugin/dashboard/next.config.ts +9 -1
  9. package/plugin/pyproject.toml +2 -2
  10. package/plugin/scripts/_lib.sh +91 -0
  11. package/plugin/scripts/backend-service.sh +46 -15
  12. package/plugin/scripts/cli.sh +29 -1
  13. package/plugin/scripts/codex-hook.js +72 -4
  14. package/plugin/scripts/dashboard-build.sh +1 -0
  15. package/plugin/scripts/dashboard-service.sh +1 -0
  16. package/plugin/scripts/ensure-plugin-root.sh +7 -14
  17. package/plugin/scripts/hook_entry.sh +1 -0
  18. package/plugin/scripts/smart-install.sh +18 -2
  19. package/plugin/src/claude_smart/cli.py +72 -38
  20. package/plugin/src/claude_smart/context_format.py +11 -12
  21. package/plugin/src/claude_smart/cs_cite.py +26 -12
  22. package/plugin/src/claude_smart/ids.py +13 -5
  23. package/plugin/uv.lock +1 -1
  24. package/plugin/vendor/reflexio/.env.example +53 -0
  25. package/plugin/vendor/reflexio/LICENSE +201 -0
  26. package/plugin/vendor/reflexio/README.md +338 -0
  27. package/plugin/vendor/reflexio/pyproject.toml +271 -0
  28. package/plugin/vendor/reflexio/reflexio/README.md +184 -0
  29. package/plugin/vendor/reflexio/reflexio/__init__.py +166 -0
  30. package/plugin/vendor/reflexio/reflexio/benchmarks/__init__.py +1 -0
  31. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/README.md +109 -0
  32. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/__init__.py +1 -0
  33. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/backends.py +175 -0
  34. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/bench.py +642 -0
  35. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/embed_cache.py +330 -0
  36. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/report.py +317 -0
  37. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/report.md +43 -0
  38. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/results.json +4478 -0
  39. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/scenarios.py +134 -0
  40. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/seed.py +255 -0
  41. package/plugin/vendor/reflexio/reflexio/cli/README.md +287 -0
  42. package/plugin/vendor/reflexio/reflexio/cli/__init__.py +0 -0
  43. package/plugin/vendor/reflexio/reflexio/cli/__main__.py +56 -0
  44. package/plugin/vendor/reflexio/reflexio/cli/_client.py +86 -0
  45. package/plugin/vendor/reflexio/reflexio/cli/app.py +127 -0
  46. package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +266 -0
  47. package/plugin/vendor/reflexio/reflexio/cli/codex_auth.py +503 -0
  48. package/plugin/vendor/reflexio/reflexio/cli/commands/__init__.py +0 -0
  49. package/plugin/vendor/reflexio/reflexio/cli/commands/admin_cmd.py +65 -0
  50. package/plugin/vendor/reflexio/reflexio/cli/commands/agent_playbooks.py +503 -0
  51. package/plugin/vendor/reflexio/reflexio/cli/commands/api.py +114 -0
  52. package/plugin/vendor/reflexio/reflexio/cli/commands/auth.py +109 -0
  53. package/plugin/vendor/reflexio/reflexio/cli/commands/config_cmd.py +511 -0
  54. package/plugin/vendor/reflexio/reflexio/cli/commands/doctor.py +127 -0
  55. package/plugin/vendor/reflexio/reflexio/cli/commands/embeddings.py +53 -0
  56. package/plugin/vendor/reflexio/reflexio/cli/commands/interactions.py +478 -0
  57. package/plugin/vendor/reflexio/reflexio/cli/commands/profiles.py +303 -0
  58. package/plugin/vendor/reflexio/reflexio/cli/commands/services.py +289 -0
  59. package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +961 -0
  60. package/plugin/vendor/reflexio/reflexio/cli/commands/shortcuts.py +285 -0
  61. package/plugin/vendor/reflexio/reflexio/cli/commands/status_cmd.py +143 -0
  62. package/plugin/vendor/reflexio/reflexio/cli/commands/user_playbooks.py +373 -0
  63. package/plugin/vendor/reflexio/reflexio/cli/env_loader.py +284 -0
  64. package/plugin/vendor/reflexio/reflexio/cli/errors.py +217 -0
  65. package/plugin/vendor/reflexio/reflexio/cli/log_format.py +247 -0
  66. package/plugin/vendor/reflexio/reflexio/cli/output.py +867 -0
  67. package/plugin/vendor/reflexio/reflexio/cli/paths.py +41 -0
  68. package/plugin/vendor/reflexio/reflexio/cli/run_services.py +391 -0
  69. package/plugin/vendor/reflexio/reflexio/cli/state.py +204 -0
  70. package/plugin/vendor/reflexio/reflexio/cli/stop_services.py +96 -0
  71. package/plugin/vendor/reflexio/reflexio/cli/utils.py +329 -0
  72. package/plugin/vendor/reflexio/reflexio/client/__init__.py +3 -0
  73. package/plugin/vendor/reflexio/reflexio/client/cache.py +150 -0
  74. package/plugin/vendor/reflexio/reflexio/client/client.py +2613 -0
  75. package/plugin/vendor/reflexio/reflexio/defaults.py +23 -0
  76. package/plugin/vendor/reflexio/reflexio/integrations/__init__.py +0 -0
  77. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/.clawhubignore +7 -0
  78. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/README.md +274 -0
  79. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/TESTING.md +517 -0
  80. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/hook/handler.js +473 -0
  81. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package-lock.json +2156 -0
  82. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package.json +18 -0
  83. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/handler.ts +241 -0
  84. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/setup.ts +140 -0
  85. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/index.ts +130 -0
  86. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/publish.ts +113 -0
  87. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/search.ts +52 -0
  88. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/server.ts +103 -0
  89. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/sqlite-buffer.ts +156 -0
  90. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/user-id.ts +134 -0
  91. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/openclaw.plugin.json +41 -0
  92. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/package.json +17 -0
  93. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/rules/reflexio.md +24 -0
  94. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/reflexio/SKILL.md +48 -0
  95. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/publish_clawhub.sh +278 -0
  96. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/references/HOOK.md +164 -0
  97. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/install.sh +36 -0
  98. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/uninstall.sh +35 -0
  99. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/publish.test.ts +27 -0
  100. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/search.test.ts +31 -0
  101. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/server.test.ts +42 -0
  102. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/setup.test.ts +49 -0
  103. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/sqlite-buffer.test.ts +91 -0
  104. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/user-id.test.ts +50 -0
  105. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tsconfig.json +16 -0
  106. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/types/openclaw.d.ts +230 -0
  107. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/vitest.config.ts +13 -0
  108. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/README.md +120 -0
  109. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/TESTING.md +168 -0
  110. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package-lock.json +1657 -0
  111. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package.json +16 -0
  112. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/HEARTBEAT.md +6 -0
  113. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/README.md +84 -0
  114. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/SKILL.md +194 -0
  115. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/_meta.json +6 -0
  116. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/agents/reflexio-extractor.md +45 -0
  117. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/handler.ts +214 -0
  118. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/setup.ts +55 -0
  119. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/index.ts +327 -0
  120. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/consolidate.ts +233 -0
  121. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/dedup.ts +80 -0
  122. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/io.ts +155 -0
  123. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/openclaw-cli.ts +67 -0
  124. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/search.ts +33 -0
  125. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-playbook.ts +76 -0
  126. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-profile.ts +79 -0
  127. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/openclaw.plugin.json +46 -0
  128. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/package.json +18 -0
  129. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/README.md +36 -0
  130. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/full_consolidation.md +56 -0
  131. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/playbook_extraction.md +217 -0
  132. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/profile_extraction.md +132 -0
  133. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-consolidate/SKILL.md +33 -0
  134. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-embedded/SKILL.md +194 -0
  135. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/HOOK.md +18 -0
  136. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/architecture.md +49 -0
  137. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/comparison.md +31 -0
  138. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/future-work.md +47 -0
  139. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/porting-notes.md +52 -0
  140. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/install.sh +52 -0
  141. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/uninstall.sh +36 -0
  142. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/consolidate.test.ts +135 -0
  143. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/dedup.test.ts +104 -0
  144. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/io.test.ts +175 -0
  145. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/search.test.ts +66 -0
  146. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/smoke-test.ts +140 -0
  147. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-playbook.test.ts +93 -0
  148. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-profile.test.ts +174 -0
  149. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tsconfig.json +16 -0
  150. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/types/openclaw.d.ts +230 -0
  151. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/vitest.config.ts +7 -0
  152. package/plugin/vendor/reflexio/reflexio/lib/__init__.py +23 -0
  153. package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +310 -0
  154. package/plugin/vendor/reflexio/reflexio/lib/_base.py +225 -0
  155. package/plugin/vendor/reflexio/reflexio/lib/_config.py +83 -0
  156. package/plugin/vendor/reflexio/reflexio/lib/_dashboard.py +266 -0
  157. package/plugin/vendor/reflexio/reflexio/lib/_generation.py +176 -0
  158. package/plugin/vendor/reflexio/reflexio/lib/_interactions.py +334 -0
  159. package/plugin/vendor/reflexio/reflexio/lib/_operations.py +153 -0
  160. package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +545 -0
  161. package/plugin/vendor/reflexio/reflexio/lib/_reflection.py +52 -0
  162. package/plugin/vendor/reflexio/reflexio/lib/_search.py +167 -0
  163. package/plugin/vendor/reflexio/reflexio/lib/_storage_labels.py +103 -0
  164. package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +288 -0
  165. package/plugin/vendor/reflexio/reflexio/lib/reflexio_lib.py +27 -0
  166. package/plugin/vendor/reflexio/reflexio/models/__init__.py +0 -0
  167. package/plugin/vendor/reflexio/reflexio/models/api_schema/__init__.py +0 -0
  168. package/plugin/vendor/reflexio/reflexio/models/api_schema/braintrust_schema.py +141 -0
  169. package/plugin/vendor/reflexio/reflexio/models/api_schema/common.py +41 -0
  170. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +3 -0
  171. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/entities.py +1103 -0
  172. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +63 -0
  173. package/plugin/vendor/reflexio/reflexio/models/api_schema/eval_overview_schema.py +487 -0
  174. package/plugin/vendor/reflexio/reflexio/models/api_schema/internal_schema.py +28 -0
  175. package/plugin/vendor/reflexio/reflexio/models/api_schema/pending_tool_call_schema.py +83 -0
  176. package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +766 -0
  177. package/plugin/vendor/reflexio/reflexio/models/api_schema/service_schemas.py +9 -0
  178. package/plugin/vendor/reflexio/reflexio/models/api_schema/stall_state_schema.py +32 -0
  179. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/__init__.py +3 -0
  180. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/converters.py +177 -0
  181. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/entities.py +129 -0
  182. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/enums.py +25 -0
  183. package/plugin/vendor/reflexio/reflexio/models/api_schema/validators.py +280 -0
  184. package/plugin/vendor/reflexio/reflexio/models/config_schema.py +908 -0
  185. package/plugin/vendor/reflexio/reflexio/models/py.typed +0 -0
  186. package/plugin/vendor/reflexio/reflexio/server/OVERVIEW.md +90 -0
  187. package/plugin/vendor/reflexio/reflexio/server/README.md +616 -0
  188. package/plugin/vendor/reflexio/reflexio/server/__init__.py +210 -0
  189. package/plugin/vendor/reflexio/reflexio/server/__main__.py +132 -0
  190. package/plugin/vendor/reflexio/reflexio/server/_auth.py +25 -0
  191. package/plugin/vendor/reflexio/reflexio/server/api.py +2714 -0
  192. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/account_api.py +143 -0
  193. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/health_api.py +91 -0
  194. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/pending_tool_call_api.py +572 -0
  195. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/precondition_checks.py +66 -0
  196. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/publisher_api.py +540 -0
  197. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +50 -0
  198. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/stall_state_api.py +100 -0
  199. package/plugin/vendor/reflexio/reflexio/server/cache/__init__.py +15 -0
  200. package/plugin/vendor/reflexio/reflexio/server/cache/reflexio_cache.py +208 -0
  201. package/plugin/vendor/reflexio/reflexio/server/correlation.py +46 -0
  202. package/plugin/vendor/reflexio/reflexio/server/llm/__init__.py +30 -0
  203. package/plugin/vendor/reflexio/reflexio/server/llm/embedding_service.py +110 -0
  204. package/plugin/vendor/reflexio/reflexio/server/llm/image_utils.py +55 -0
  205. package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +1595 -0
  206. package/plugin/vendor/reflexio/reflexio/server/llm/llm_utils.py +112 -0
  207. package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +469 -0
  208. package/plugin/vendor/reflexio/reflexio/server/llm/providers/__init__.py +1 -0
  209. package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +1122 -0
  210. package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_stream_parser.py +197 -0
  211. package/plugin/vendor/reflexio/reflexio/server/llm/providers/embedding_service_provider.py +210 -0
  212. package/plugin/vendor/reflexio/reflexio/server/llm/providers/local_embedding_provider.py +213 -0
  213. package/plugin/vendor/reflexio/reflexio/server/llm/providers/nomic_embedding_provider.py +255 -0
  214. package/plugin/vendor/reflexio/reflexio/server/llm/rerank/__init__.py +6 -0
  215. package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +177 -0
  216. package/plugin/vendor/reflexio/reflexio/server/llm/rerank/llm_reranker.py +148 -0
  217. package/plugin/vendor/reflexio/reflexio/server/llm/tools.py +699 -0
  218. package/plugin/vendor/reflexio/reflexio/server/operation_limiter.py +179 -0
  219. package/plugin/vendor/reflexio/reflexio/server/prompt/__init__.py +0 -0
  220. package/plugin/vendor/reflexio/reflexio/server/prompt/_dispatchers.py +54 -0
  221. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/README.md +121 -0
  222. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/agent_success_evaluation/v1.0.0.prompt.md +58 -0
  223. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/agent_success_evaluation_with_comparison/v1.0.0.prompt.md +76 -0
  224. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/answer_synthesis/v1.5.2.prompt.md +88 -0
  225. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/compress_session_for_query/v1.3.0.prompt.md +31 -0
  226. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/document_expansion/v1.0.0.prompt.md +20 -0
  227. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.0.0.prompt.md +53 -0
  228. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.1.0.prompt.md +57 -0
  229. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.2.0.prompt.md +68 -0
  230. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.3.0.prompt.md +70 -0
  231. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.4.0.prompt.md +77 -0
  232. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.5.0.prompt.md +82 -0
  233. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.6.0.prompt.md +83 -0
  234. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.1.0.prompt.md +193 -0
  235. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.2.0.prompt.md +206 -0
  236. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.0.0-deprecated.prompt.md +66 -0
  237. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.0.0.prompt.md +43 -0
  238. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.1.0.prompt.md +46 -0
  239. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.0.0-deprecated.prompt.md +64 -0
  240. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.0.0.prompt.md +39 -0
  241. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.1.0.prompt.md +39 -0
  242. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.2.0.prompt.md +47 -0
  243. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.0.prompt.md +58 -0
  244. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.0.2.prompt.md +254 -0
  245. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.1.0.prompt.md +274 -0
  246. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.0.prompt.md +279 -0
  247. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v1.0.0.prompt.md +73 -0
  248. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v2.0.0.prompt.md +86 -0
  249. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.0.0.prompt.md +97 -0
  250. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.1.0.prompt.md +119 -0
  251. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.2.0.prompt.md +123 -0
  252. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.3.0.prompt.md +127 -0
  253. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.0.0.prompt.md +14 -0
  254. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.1.0.prompt.md +24 -0
  255. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.2.0.prompt.md +29 -0
  256. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.0.0.prompt.md +11 -0
  257. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.1.0.prompt.md +21 -0
  258. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.2.0.prompt.md +25 -0
  259. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.0.0.prompt.md +37 -0
  260. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.1.0.prompt.md +40 -0
  261. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.2.0.prompt.md +36 -0
  262. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v1.0.0.prompt.md +45 -0
  263. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v2.0.0.prompt.md +81 -0
  264. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v3.0.0.prompt.md +80 -0
  265. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate_expert/v1.0.0.prompt.md +34 -0
  266. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_deduplication/v1.0.0.prompt.md +116 -0
  267. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate/v1.0.0.prompt.md +33 -0
  268. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate_override/v1.0.0.prompt.md +16 -0
  269. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.0.0.prompt.md +140 -0
  270. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.1.0.prompt.md +160 -0
  271. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_main/v1.0.0.prompt.md +14 -0
  272. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/query_reformulation/v1.0.0.prompt.md +19 -0
  273. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/rerank_relevance/v1.1.0.prompt.md +44 -0
  274. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_comparison/v1.0.0.prompt.md +43 -0
  275. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_content_evaluation/v1.0.0.prompt.md +33 -0
  276. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/feedback_extraction_main_v1.jsonl +10 -0
  277. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/profile_update_main_v1.jsonl +10 -0
  278. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_manager.py +280 -0
  279. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_schema.py +11 -0
  280. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/_eval_health.py +131 -0
  281. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_constants.py +60 -0
  282. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_service.py +228 -0
  283. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_utils.py +87 -0
  284. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluator.py +372 -0
  285. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/delayed_group_evaluator.py +156 -0
  286. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/group_evaluation_runner.py +340 -0
  287. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/regen_jobs.py +471 -0
  288. package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +1626 -0
  289. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/__init__.py +0 -0
  290. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_cron.py +196 -0
  291. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_encryption.py +101 -0
  292. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/client.py +167 -0
  293. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/service.py +281 -0
  294. package/plugin/vendor/reflexio/reflexio/server/services/configurator/base_configurator.py +179 -0
  295. package/plugin/vendor/reflexio/reflexio/server/services/configurator/config_storage.py +62 -0
  296. package/plugin/vendor/reflexio/reflexio/server/services/configurator/configurator.py +87 -0
  297. package/plugin/vendor/reflexio/reflexio/server/services/configurator/local_file_config_storage.py +187 -0
  298. package/plugin/vendor/reflexio/reflexio/server/services/configurator/test_config_storage.py +162 -0
  299. package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +112 -0
  300. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/__init__.py +0 -0
  301. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/distribution.py +33 -0
  302. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/eval_sampler.py +126 -0
  303. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/group_aggregation.py +192 -0
  304. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/hero_state.py +75 -0
  305. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/rule_attribution.py +97 -0
  306. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/service.py +515 -0
  307. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/shadow_aggregation.py +90 -0
  308. package/plugin/vendor/reflexio/reflexio/server/services/extraction/__init__.py +0 -0
  309. package/plugin/vendor/reflexio/reflexio/server/services/extraction/agent_run_records.py +91 -0
  310. package/plugin/vendor/reflexio/reflexio/server/services/extraction/invariants.py +303 -0
  311. package/plugin/vendor/reflexio/reflexio/server/services/extraction/outcome.py +25 -0
  312. package/plugin/vendor/reflexio/reflexio/server/services/extraction/pending_tool_call_dispatch.py +351 -0
  313. package/plugin/vendor/reflexio/reflexio/server/services/extraction/plan.py +138 -0
  314. package/plugin/vendor/reflexio/reflexio/server/services/extraction/prior_answer_search.py +217 -0
  315. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resumable_agent.py +468 -0
  316. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_scheduler.py +171 -0
  317. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +777 -0
  318. package/plugin/vendor/reflexio/reflexio/server/services/extraction/tools.py +1125 -0
  319. package/plugin/vendor/reflexio/reflexio/server/services/extractor_config_utils.py +91 -0
  320. package/plugin/vendor/reflexio/reflexio/server/services/extractor_interaction_utils.py +251 -0
  321. package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +689 -0
  322. package/plugin/vendor/reflexio/reflexio/server/services/operation_state_utils.py +835 -0
  323. package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +89 -0
  324. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_aggregator.py +1388 -0
  325. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_consolidator.py +960 -0
  326. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_extractor.py +436 -0
  327. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_generation_service.py +808 -0
  328. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_constants.py +28 -0
  329. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_utils.py +362 -0
  330. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/__init__.py +24 -0
  331. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/assistant_webhook.py +246 -0
  332. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/gepa_adapter.py +291 -0
  333. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/judge.py +97 -0
  334. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/models.py +96 -0
  335. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/optimizer.py +645 -0
  336. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/rollout.py +35 -0
  337. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scenario_resolver.py +93 -0
  338. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scheduler.py +174 -0
  339. package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/__init__.py +26 -0
  340. package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_document_expander.py +179 -0
  341. package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_query_reformulator.py +297 -0
  342. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_deduplicator.py +741 -0
  343. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_extractor.py +462 -0
  344. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service.py +734 -0
  345. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service_utils.py +290 -0
  346. package/plugin/vendor/reflexio/reflexio/server/services/reflection/__init__.py +17 -0
  347. package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_extractor.py +247 -0
  348. package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service.py +800 -0
  349. package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service_utils.py +146 -0
  350. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/__init__.py +0 -0
  351. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +70 -0
  352. package/plugin/vendor/reflexio/reflexio/server/services/search/__init__.py +0 -0
  353. package/plugin/vendor/reflexio/reflexio/server/services/service_utils.py +671 -0
  354. package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/__init__.py +1 -0
  355. package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/judge.py +184 -0
  356. package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/outcome.py +81 -0
  357. package/plugin/vendor/reflexio/reflexio/server/services/storage/constants.py +2 -0
  358. package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +11 -0
  359. package/plugin/vendor/reflexio/reflexio/server/services/storage/retention.py +154 -0
  360. package/plugin/vendor/reflexio/reflexio/server/services/storage/retention_mixin.py +155 -0
  361. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +59 -0
  362. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +1253 -0
  363. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +1945 -0
  364. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +600 -0
  365. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_operations.py +346 -0
  366. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1378 -0
  367. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +747 -0
  368. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +263 -0
  369. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_shadow_verdicts.py +193 -0
  370. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_share_links.py +166 -0
  371. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_stall_state.py +217 -0
  372. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +153 -0
  373. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +372 -0
  374. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_base.py +71 -0
  375. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +235 -0
  376. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_operations.py +170 -0
  377. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +677 -0
  378. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +250 -0
  379. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +154 -0
  380. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_shadow_verdicts.py +130 -0
  381. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_share_links.py +93 -0
  382. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_stall_state.py +76 -0
  383. package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +568 -0
  384. package/plugin/vendor/reflexio/reflexio/server/site_var/README.md +77 -0
  385. package/plugin/vendor/reflexio/reflexio/server/site_var/feature_flags.py +116 -0
  386. package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_manager.py +263 -0
  387. package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/feature_flags.json +13 -0
  388. package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/llm_model_setting.json +7 -0
  389. package/plugin/vendor/reflexio/reflexio/server/tracing.py +158 -0
  390. package/plugin/vendor/reflexio/reflexio/server/usage_metrics.py +113 -0
  391. package/plugin/vendor/reflexio/reflexio/server/uvicorn_logging.py +76 -0
  392. package/plugin/vendor/reflexio/reflexio/test_support/__init__.py +1 -0
  393. package/plugin/vendor/reflexio/reflexio/test_support/llm_fixtures.py +62 -0
  394. package/plugin/vendor/reflexio/reflexio/test_support/llm_mock.py +242 -0
  395. package/plugin/vendor/reflexio/reflexio/test_support/llm_model_registry.py +129 -0
  396. package/plugin/vendor/reflexio/reflexio/test_support/skip_decorators.py +43 -0
@@ -0,0 +1,540 @@
1
+ """
2
+ Create, edit, delete user interaction and user profile
3
+ """
4
+
5
+ import logging
6
+
7
+ from reflexio.models.api_schema.retriever_schema import (
8
+ UpdateAgentPlaybookRequest,
9
+ UpdateAgentPlaybookResponse,
10
+ UpdatePlaybookStatusRequest,
11
+ UpdatePlaybookStatusResponse,
12
+ UpdateUserPlaybookRequest,
13
+ UpdateUserPlaybookResponse,
14
+ UpdateUserProfileRequest,
15
+ UpdateUserProfileResponse,
16
+ )
17
+ from reflexio.models.api_schema.service_schemas import (
18
+ AddAgentPlaybookRequest,
19
+ AddAgentPlaybookResponse,
20
+ AddUserPlaybookRequest,
21
+ AddUserPlaybookResponse,
22
+ AddUserProfileRequest,
23
+ AddUserProfileResponse,
24
+ BulkDeleteResponse,
25
+ ClearUserDataRequest,
26
+ ClearUserDataResponse,
27
+ DeleteAgentPlaybookRequest,
28
+ DeleteAgentPlaybookResponse,
29
+ DeleteAgentPlaybooksByIdsRequest,
30
+ DeleteProfilesByIdsRequest,
31
+ DeleteRequestRequest,
32
+ DeleteRequestResponse,
33
+ DeleteRequestsByIdsRequest,
34
+ DeleteSessionRequest,
35
+ DeleteSessionResponse,
36
+ DeleteUserInteractionRequest,
37
+ DeleteUserInteractionResponse,
38
+ DeleteUserPlaybookRequest,
39
+ DeleteUserPlaybookResponse,
40
+ DeleteUserPlaybooksByIdsRequest,
41
+ DeleteUserProfileRequest,
42
+ DeleteUserProfileResponse,
43
+ PublishUserInteractionRequest,
44
+ PublishUserInteractionResponse,
45
+ RunPlaybookAggregationRequest,
46
+ RunPlaybookAggregationResponse,
47
+ )
48
+ from reflexio.server.api_endpoints.precondition_checks import (
49
+ validate_delete_user_profile_request,
50
+ validate_publish_user_interaction_request,
51
+ )
52
+ from reflexio.server.cache.reflexio_cache import get_reflexio
53
+ from reflexio.server.tracing import sentry_tags
54
+
55
+ logger = logging.getLogger(__name__)
56
+
57
+ # ==============================
58
+ # Create user interaction and profile
59
+ # ==============================
60
+
61
+
62
+ def add_user_interaction(
63
+ org_id: str,
64
+ request: PublishUserInteractionRequest,
65
+ ) -> PublishUserInteractionResponse:
66
+ """Add user interaction
67
+
68
+ Args:
69
+ org_id (str): Organization ID
70
+ request (PublishUserInteractionRequest): The request containing interaction data
71
+
72
+ Returns:
73
+ PublishUserInteractionResponse: Response containing success status and message
74
+ """
75
+ is_valid, message = validate_publish_user_interaction_request(request)
76
+ if not is_valid:
77
+ return PublishUserInteractionResponse(success=False, message=message)
78
+
79
+ reflexio = get_reflexio(org_id=org_id)
80
+ return reflexio.publish_interaction(request=request)
81
+
82
+
83
+ def add_user_playbook(
84
+ org_id: str,
85
+ request: AddUserPlaybookRequest,
86
+ ) -> AddUserPlaybookResponse:
87
+ """Add user playbook directly to storage.
88
+
89
+ Args:
90
+ org_id (str): Organization ID
91
+ request (AddUserPlaybookRequest): The request containing user playbooks
92
+
93
+ Returns:
94
+ AddUserPlaybookResponse: Response containing success status, message, and added count
95
+ """
96
+ reflexio = get_reflexio(org_id=org_id)
97
+ return reflexio.add_user_playbook(request=request)
98
+
99
+
100
+ def add_agent_playbook(
101
+ org_id: str,
102
+ request: AddAgentPlaybookRequest,
103
+ ) -> AddAgentPlaybookResponse:
104
+ """Add agent playbook directly to storage.
105
+
106
+ Args:
107
+ org_id (str): Organization ID
108
+ request (AddAgentPlaybookRequest): The request containing agent playbooks
109
+
110
+ Returns:
111
+ AddAgentPlaybookResponse: Response containing success status, message, and added count
112
+ """
113
+ reflexio = get_reflexio(org_id=org_id)
114
+ return reflexio.add_agent_playbook(request=request)
115
+
116
+
117
+ def add_user_profile(
118
+ org_id: str,
119
+ request: AddUserProfileRequest,
120
+ ) -> AddUserProfileResponse:
121
+ """Add user profile directly to storage, bypassing inference.
122
+
123
+ Mirror of :func:`add_user_playbook` for the profile resource —
124
+ useful for seeding a known fact about the user (testing, migration,
125
+ manual fact injection) without producing an interaction first.
126
+
127
+ Args:
128
+ org_id (str): Organization ID
129
+ request (AddUserProfileRequest): The request containing user profiles
130
+
131
+ Returns:
132
+ AddUserProfileResponse: Response containing success status, message, and added count
133
+ """
134
+ reflexio = get_reflexio(org_id=org_id)
135
+ return reflexio.add_user_profile(request=request)
136
+
137
+
138
+ def delete_user_profile(
139
+ org_id: str, request: DeleteUserProfileRequest
140
+ ) -> DeleteUserProfileResponse:
141
+ """Delete user profile
142
+
143
+ Args:
144
+ org_id (str): Organization ID
145
+ request (DeleteUserProfileRequest): The delete request
146
+
147
+ Returns:
148
+ DeleteUserProfileResponse: Response containing success status and message
149
+ """
150
+ is_valid, message = validate_delete_user_profile_request(request)
151
+ if not is_valid:
152
+ return DeleteUserProfileResponse(success=False, message=message)
153
+
154
+ reflexio = get_reflexio(org_id=org_id)
155
+ try:
156
+ return reflexio.delete_profile(request)
157
+ except Exception as e:
158
+ with sentry_tags(subsystem="publisher_api", action="delete_user_profile", org_id=org_id):
159
+ logger.exception("Failed to delete user profile")
160
+ return DeleteUserProfileResponse(success=False, message=str(e))
161
+
162
+
163
+ def delete_user_interaction(
164
+ org_id: str, request: DeleteUserInteractionRequest
165
+ ) -> DeleteUserInteractionResponse:
166
+ """Delete user interaction
167
+
168
+ Args:
169
+ org_id (str): Organization ID
170
+ request (DeleteUserInteractionRequest): The delete request
171
+
172
+ Returns:
173
+ DeleteUserInteractionResponse: Response containing success status and message
174
+ """
175
+ reflexio = get_reflexio(org_id=org_id)
176
+ try:
177
+ return reflexio.delete_interaction(request)
178
+ except Exception as e:
179
+ with sentry_tags(subsystem="publisher_api", action="delete_user_interaction", org_id=org_id):
180
+ logger.exception("Failed to delete user interaction")
181
+ return DeleteUserInteractionResponse(success=False, message=str(e))
182
+
183
+
184
+ def delete_request(org_id: str, request: DeleteRequestRequest) -> DeleteRequestResponse:
185
+ """Delete request and all its associated interactions
186
+
187
+ Args:
188
+ org_id (str): Organization ID
189
+ request (DeleteRequestRequest): The delete request
190
+
191
+ Returns:
192
+ DeleteRequestResponse: Response containing success status and message
193
+ """
194
+ reflexio = get_reflexio(org_id=org_id)
195
+ try:
196
+ return reflexio.delete_request(request)
197
+ except Exception as e:
198
+ with sentry_tags(subsystem="publisher_api", action="delete_request", org_id=org_id):
199
+ logger.exception("Failed to delete request")
200
+ return DeleteRequestResponse(success=False, message=str(e))
201
+
202
+
203
+ def delete_session(org_id: str, request: DeleteSessionRequest) -> DeleteSessionResponse:
204
+ """Delete all requests and interactions in a session
205
+
206
+ Args:
207
+ org_id (str): Organization ID
208
+ request (DeleteSessionRequest): The delete request
209
+
210
+ Returns:
211
+ DeleteSessionResponse: Response containing success status, message, and deleted count
212
+ """
213
+ reflexio = get_reflexio(org_id=org_id)
214
+ try:
215
+ return reflexio.delete_session(request)
216
+ except Exception as e:
217
+ with sentry_tags(subsystem="publisher_api", action="delete_session", org_id=org_id):
218
+ logger.exception("Failed to delete session")
219
+ return DeleteSessionResponse(success=False, message=str(e))
220
+
221
+
222
+ def delete_agent_playbook(
223
+ org_id: str, request: DeleteAgentPlaybookRequest
224
+ ) -> DeleteAgentPlaybookResponse:
225
+ """Delete agent playbook by ID.
226
+
227
+ Args:
228
+ org_id (str): Organization ID
229
+ request (DeleteAgentPlaybookRequest): The delete request
230
+
231
+ Returns:
232
+ DeleteAgentPlaybookResponse: Response containing success status and message
233
+ """
234
+ reflexio = get_reflexio(org_id=org_id)
235
+ try:
236
+ return reflexio.delete_agent_playbook(request)
237
+ except Exception as e:
238
+ with sentry_tags(subsystem="publisher_api", action="delete_agent_playbook", org_id=org_id):
239
+ logger.exception("Failed to delete agent playbook")
240
+ return DeleteAgentPlaybookResponse(success=False, message=str(e))
241
+
242
+
243
+ def delete_user_playbook(
244
+ org_id: str, request: DeleteUserPlaybookRequest
245
+ ) -> DeleteUserPlaybookResponse:
246
+ """Delete user playbook by ID.
247
+
248
+ Args:
249
+ org_id (str): Organization ID
250
+ request (DeleteUserPlaybookRequest): The delete request
251
+
252
+ Returns:
253
+ DeleteUserPlaybookResponse: Response containing success status and message
254
+ """
255
+ reflexio = get_reflexio(org_id=org_id)
256
+ try:
257
+ return reflexio.delete_user_playbook(request)
258
+ except Exception as e:
259
+ with sentry_tags(subsystem="publisher_api", action="delete_user_playbook", org_id=org_id):
260
+ logger.exception("Failed to delete user playbook")
261
+ return DeleteUserPlaybookResponse(success=False, message=str(e))
262
+
263
+
264
+ # ==============================
265
+ # Bulk delete operations
266
+ # ==============================
267
+
268
+
269
+ def delete_all_interactions_bulk(org_id: str) -> BulkDeleteResponse:
270
+ """Delete all requests and their associated interactions.
271
+
272
+ Args:
273
+ org_id (str): Organization ID
274
+
275
+ Returns:
276
+ BulkDeleteResponse: Response containing success status and deleted count
277
+ """
278
+ reflexio = get_reflexio(org_id=org_id)
279
+ return reflexio.delete_all_interactions_bulk()
280
+
281
+
282
+ def delete_all_profiles_bulk(org_id: str) -> BulkDeleteResponse:
283
+ """Delete all profiles.
284
+
285
+ Args:
286
+ org_id (str): Organization ID
287
+
288
+ Returns:
289
+ BulkDeleteResponse: Response containing success status and deleted count
290
+ """
291
+ reflexio = get_reflexio(org_id=org_id)
292
+ return reflexio.delete_all_profiles_bulk()
293
+
294
+
295
+ def delete_all_playbooks_bulk(org_id: str) -> BulkDeleteResponse:
296
+ """Delete all playbooks (both user and agent).
297
+
298
+ Args:
299
+ org_id (str): Organization ID
300
+
301
+ Returns:
302
+ BulkDeleteResponse: Response containing success status and deleted count
303
+ """
304
+ reflexio = get_reflexio(org_id=org_id)
305
+ return reflexio.delete_all_playbooks_bulk()
306
+
307
+
308
+ def delete_all_user_playbooks_bulk(org_id: str) -> BulkDeleteResponse:
309
+ """Delete all user playbooks (user only, not agent).
310
+
311
+ Args:
312
+ org_id (str): Organization ID
313
+
314
+ Returns:
315
+ BulkDeleteResponse: Response containing success status and deleted count
316
+ """
317
+ reflexio = get_reflexio(org_id=org_id)
318
+ return reflexio.delete_all_user_playbooks_bulk()
319
+
320
+
321
+ def delete_all_agent_playbooks_bulk(org_id: str) -> BulkDeleteResponse:
322
+ """Delete all agent playbooks (agent only, not user).
323
+
324
+ Args:
325
+ org_id (str): Organization ID
326
+
327
+ Returns:
328
+ BulkDeleteResponse: Response containing success status and deleted count
329
+ """
330
+ reflexio = get_reflexio(org_id=org_id)
331
+ return reflexio.delete_all_agent_playbooks_bulk()
332
+
333
+
334
+ def delete_requests_by_ids(
335
+ org_id: str, request: DeleteRequestsByIdsRequest
336
+ ) -> BulkDeleteResponse:
337
+ """Delete requests by their IDs.
338
+
339
+ Args:
340
+ org_id (str): Organization ID
341
+ request (DeleteRequestsByIdsRequest): The delete request
342
+
343
+ Returns:
344
+ BulkDeleteResponse: Response containing success status and deleted count
345
+ """
346
+ reflexio = get_reflexio(org_id=org_id)
347
+ return reflexio.delete_requests_by_ids(request)
348
+
349
+
350
+ def delete_profiles_by_ids(
351
+ org_id: str, request: DeleteProfilesByIdsRequest
352
+ ) -> BulkDeleteResponse:
353
+ """Delete profiles by their IDs.
354
+
355
+ Args:
356
+ org_id (str): Organization ID
357
+ request (DeleteProfilesByIdsRequest): The delete request
358
+
359
+ Returns:
360
+ BulkDeleteResponse: Response containing success status and deleted count
361
+ """
362
+ reflexio = get_reflexio(org_id=org_id)
363
+ return reflexio.delete_profiles_by_ids(request)
364
+
365
+
366
+ def delete_agent_playbooks_by_ids_bulk(
367
+ org_id: str, request: DeleteAgentPlaybooksByIdsRequest
368
+ ) -> BulkDeleteResponse:
369
+ """Delete agent playbooks by their IDs.
370
+
371
+ Args:
372
+ org_id (str): Organization ID
373
+ request (DeleteAgentPlaybooksByIdsRequest): The delete request
374
+
375
+ Returns:
376
+ BulkDeleteResponse: Response containing success status and deleted count
377
+ """
378
+ reflexio = get_reflexio(org_id=org_id)
379
+ return reflexio.delete_agent_playbooks_by_ids_bulk(request)
380
+
381
+
382
+ def delete_user_playbooks_by_ids_bulk(
383
+ org_id: str, request: DeleteUserPlaybooksByIdsRequest
384
+ ) -> BulkDeleteResponse:
385
+ """Delete user playbooks by their IDs.
386
+
387
+ Args:
388
+ org_id (str): Organization ID
389
+ request (DeleteUserPlaybooksByIdsRequest): The delete request
390
+
391
+ Returns:
392
+ BulkDeleteResponse: Response containing success status and deleted count
393
+ """
394
+ reflexio = get_reflexio(org_id=org_id)
395
+ return reflexio.delete_user_playbooks_by_ids_bulk(request)
396
+
397
+
398
+ def clear_user_data(
399
+ org_id: str, request: ClearUserDataRequest
400
+ ) -> ClearUserDataResponse:
401
+ """Delete all rows scoped to a single ``user_id``.
402
+
403
+ Args:
404
+ org_id (str): Organization ID
405
+ request (ClearUserDataRequest): Request containing the target user_id
406
+
407
+ Returns:
408
+ ClearUserDataResponse: Response with per-entity deletion counts
409
+ """
410
+ reflexio = get_reflexio(org_id=org_id)
411
+ return reflexio.clear_user_data(request)
412
+
413
+
414
+ # ==============================
415
+ # Run playbook aggregation
416
+ # ==============================
417
+
418
+
419
+ def run_playbook_aggregation(
420
+ org_id: str, request: RunPlaybookAggregationRequest
421
+ ) -> RunPlaybookAggregationResponse:
422
+ """Run playbook aggregation for a given agent version and playbook name.
423
+
424
+ Args:
425
+ org_id (str): Organization ID
426
+ request (RunPlaybookAggregationRequest): The run playbook aggregation request
427
+
428
+ Returns:
429
+ RunPlaybookAggregationResponse: Response containing success status and message
430
+ """
431
+ reflexio = get_reflexio(org_id=org_id)
432
+ try:
433
+ result = reflexio.run_playbook_aggregation(
434
+ request.agent_version, request.playbook_name
435
+ )
436
+ except Exception as e:
437
+ with sentry_tags(subsystem="publisher_api", action="run_playbook_aggregation", org_id=org_id):
438
+ logger.exception("Failed to run playbook aggregation")
439
+ return RunPlaybookAggregationResponse(success=False, message=str(e))
440
+
441
+ if result.get("skipped"):
442
+ return RunPlaybookAggregationResponse(
443
+ success=True, message=f"Skipped: {result['skipped']}"
444
+ )
445
+
446
+ message = (
447
+ f"Processed {result['user_playbooks_processed']} user playbooks, "
448
+ f"found {result['clusters_found']} clusters, "
449
+ f"generated {result['playbooks_generated']} agent playbooks"
450
+ )
451
+ return RunPlaybookAggregationResponse(success=True, message=message)
452
+
453
+
454
+ # ==============================
455
+ # Update playbook status
456
+ # ==============================
457
+
458
+
459
+ def update_agent_playbook_status(
460
+ org_id: str, request: UpdatePlaybookStatusRequest
461
+ ) -> UpdatePlaybookStatusResponse:
462
+ """Update the status of a specific playbook.
463
+
464
+ Args:
465
+ org_id (str): Organization ID
466
+ request (UpdatePlaybookStatusRequest): The update request
467
+
468
+ Returns:
469
+ UpdatePlaybookStatusResponse: Response containing success status and message
470
+ """
471
+ reflexio = get_reflexio(org_id=org_id)
472
+ try:
473
+ return reflexio.update_agent_playbook_status(request)
474
+ except Exception as e:
475
+ with sentry_tags(subsystem="publisher_api", action="update_playbook_status", org_id=org_id):
476
+ logger.exception("Failed to update playbook status")
477
+ return UpdatePlaybookStatusResponse(success=False, msg=str(e))
478
+
479
+
480
+ def update_agent_playbook(
481
+ org_id: str, request: UpdateAgentPlaybookRequest
482
+ ) -> UpdateAgentPlaybookResponse:
483
+ """Update editable fields of an agent playbook.
484
+
485
+ Args:
486
+ org_id (str): Organization ID
487
+ request (UpdateAgentPlaybookRequest): The update request
488
+
489
+ Returns:
490
+ UpdateAgentPlaybookResponse: Response containing success status and message
491
+ """
492
+ reflexio = get_reflexio(org_id=org_id)
493
+ try:
494
+ return reflexio.update_agent_playbook(request)
495
+ except Exception as e:
496
+ with sentry_tags(subsystem="publisher_api", action="update_agent_playbook", org_id=org_id):
497
+ logger.exception("Failed to update agent playbook")
498
+ return UpdateAgentPlaybookResponse(success=False, msg=str(e))
499
+
500
+
501
+ def update_user_playbook(
502
+ org_id: str, request: UpdateUserPlaybookRequest
503
+ ) -> UpdateUserPlaybookResponse:
504
+ """Update editable fields of a user playbook.
505
+
506
+ Args:
507
+ org_id (str): Organization ID
508
+ request (UpdateUserPlaybookRequest): The update request
509
+
510
+ Returns:
511
+ UpdateUserPlaybookResponse: Response containing success status and message
512
+ """
513
+ reflexio = get_reflexio(org_id=org_id)
514
+ try:
515
+ return reflexio.update_user_playbook(request)
516
+ except Exception as e:
517
+ with sentry_tags(subsystem="publisher_api", action="update_user_playbook", org_id=org_id):
518
+ logger.exception("Failed to update user playbook")
519
+ return UpdateUserPlaybookResponse(success=False, msg=str(e))
520
+
521
+
522
+ def update_user_profile(
523
+ org_id: str, request: UpdateUserProfileRequest
524
+ ) -> UpdateUserProfileResponse:
525
+ """Apply a partial update to an existing user profile.
526
+
527
+ Args:
528
+ org_id (str): Organization ID
529
+ request (UpdateUserProfileRequest): The update request
530
+
531
+ Returns:
532
+ UpdateUserProfileResponse: Response containing success status and message
533
+ """
534
+ reflexio = get_reflexio(org_id=org_id)
535
+ try:
536
+ return reflexio.update_user_profile(request)
537
+ except Exception as e:
538
+ with sentry_tags(subsystem="publisher_api", action="update_user_profile", org_id=org_id):
539
+ logger.exception("Failed to update user profile")
540
+ return UpdateUserProfileResponse(success=False, msg=str(e))
@@ -0,0 +1,50 @@
1
+ from fastapi import Depends
2
+
3
+ from reflexio.server._auth import default_get_org_id
4
+ from reflexio.server.prompt.prompt_manager import PromptManager
5
+ from reflexio.server.services.configurator.base_configurator import BaseConfigurator
6
+ from reflexio.server.services.configurator.configurator import get_configurator_class
7
+
8
+
9
+ class RequestContext:
10
+ def __init__(
11
+ self,
12
+ org_id: str,
13
+ storage_base_dir: str | None = None,
14
+ configurator: BaseConfigurator | None = None,
15
+ ):
16
+ self.org_id = str(org_id)
17
+ self.storage_base_dir = storage_base_dir
18
+ cls = get_configurator_class()
19
+ self.configurator = configurator or cls(org_id, base_dir=storage_base_dir)
20
+ self.prompt_manager = PromptManager()
21
+ self.storage = self.configurator.create_storage(
22
+ storage_config=self.configurator.get_current_storage_configuration(),
23
+ )
24
+
25
+ def is_storage_configured(self) -> bool:
26
+ """Check if storage is configured and available.
27
+
28
+ Returns:
29
+ bool: True if storage is configured, False otherwise
30
+ """
31
+ return self.storage is not None
32
+
33
+
34
+ def get_request_context(
35
+ org_id: str = Depends(default_get_org_id),
36
+ ) -> RequestContext:
37
+ """FastAPI dependency that builds a RequestContext for the calling org.
38
+
39
+ The ``org_id`` parameter is resolved through :func:`default_get_org_id`,
40
+ which enterprise deployments override via ``app.dependency_overrides`` in
41
+ :func:`create_app` to plug in real auth (e.g. Bearer-token org resolution).
42
+ Tests that need a fixed context override this function directly.
43
+
44
+ Args:
45
+ org_id (str): Organisation identifier resolved by the auth layer.
46
+
47
+ Returns:
48
+ RequestContext: Fully initialised context with storage attached.
49
+ """
50
+ return RequestContext(org_id=org_id)
@@ -0,0 +1,100 @@
1
+ """HTTP endpoints exposing the stall_state row."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from fastapi import APIRouter, Depends, HTTPException
6
+
7
+ from reflexio.models.api_schema.stall_state_schema import (
8
+ MarkNotifiedResponse,
9
+ StallStateResponse,
10
+ )
11
+ from reflexio.server.api_endpoints.request_context import (
12
+ RequestContext,
13
+ get_request_context,
14
+ )
15
+ from reflexio.server.services.storage.storage_base import BaseStorage
16
+
17
+ router = APIRouter(tags=["stall_state"])
18
+
19
+ _UNSUPPORTED_DETAIL = "Stall state is not supported by the configured storage backend"
20
+
21
+
22
+ def _require_storage(ctx: RequestContext) -> BaseStorage:
23
+ """Return ``ctx.storage`` or raise 503 when storage isn't configured.
24
+
25
+ Cloud-mode deployments may run with ``ctx.storage is None`` until the
26
+ caller provisions a backend; stall_state has no meaningful response in
27
+ that state, so we surface 503 instead of an ``AttributeError``.
28
+
29
+ Args:
30
+ ctx (RequestContext): The injected request context.
31
+
32
+ Returns:
33
+ BaseStorage: The configured storage backend.
34
+
35
+ Raises:
36
+ HTTPException: 503 when storage is not configured.
37
+ """
38
+ if not ctx.is_storage_configured() or ctx.storage is None:
39
+ raise HTTPException(status_code=503, detail="Storage not configured")
40
+ return ctx.storage
41
+
42
+
43
+ @router.get("/stall_state", response_model=StallStateResponse)
44
+ def read_stall_state(
45
+ ctx: RequestContext = Depends(get_request_context),
46
+ ) -> StallStateResponse:
47
+ """Return the current singleton stall_state row.
48
+
49
+ Args:
50
+ ctx (RequestContext): Injected request context with storage attached.
51
+
52
+ Returns:
53
+ StallStateResponse: ``stalled=False`` with null fields when clean.
54
+
55
+ Raises:
56
+ HTTPException: 503 when storage is not configured, or when the
57
+ backend does not implement stall_state (backends without stall_state support).
58
+ """
59
+ storage = _require_storage(ctx)
60
+ try:
61
+ state = storage.get_stall_state()
62
+ except NotImplementedError as exc:
63
+ raise HTTPException(status_code=503, detail=_UNSUPPORTED_DETAIL) from exc
64
+ return StallStateResponse(
65
+ stalled=state.stalled,
66
+ reason=state.reason,
67
+ stalled_at=state.stalled_at,
68
+ reset_estimate=state.reset_estimate,
69
+ notified_in_cc=state.notified_in_cc,
70
+ error_message=state.error_message,
71
+ )
72
+
73
+
74
+ @router.post("/stall_state/notified", response_model=MarkNotifiedResponse)
75
+ def post_notified(
76
+ ctx: RequestContext = Depends(get_request_context),
77
+ ) -> MarkNotifiedResponse:
78
+ """Idempotently flip ``notified_in_cc=1`` for the current stall.
79
+
80
+ No-op (and still returns 200) when there's no active stall — the SessionStart
81
+ hook may race with auto-clear.
82
+
83
+ Args:
84
+ ctx (RequestContext): Injected request context with storage attached.
85
+
86
+ Returns:
87
+ MarkNotifiedResponse: ``notified_in_cc=True`` after the call (when stalled),
88
+ ``False`` when no stall is active.
89
+
90
+ Raises:
91
+ HTTPException: 503 when storage is not configured, or when the
92
+ backend does not implement stall_state (backends without stall_state support).
93
+ """
94
+ storage = _require_storage(ctx)
95
+ try:
96
+ storage.mark_stall_notified()
97
+ state = storage.get_stall_state()
98
+ except NotImplementedError as exc:
99
+ raise HTTPException(status_code=503, detail=_UNSUPPORTED_DETAIL) from exc
100
+ return MarkNotifiedResponse(notified_in_cc=state.notified_in_cc)
@@ -0,0 +1,15 @@
1
+ """Reflexio caching module."""
2
+
3
+ from reflexio.server.cache.reflexio_cache import (
4
+ clear_reflexio_cache,
5
+ get_cache_stats,
6
+ get_reflexio,
7
+ invalidate_reflexio_cache,
8
+ )
9
+
10
+ __all__ = [
11
+ "get_reflexio",
12
+ "invalidate_reflexio_cache",
13
+ "clear_reflexio_cache",
14
+ "get_cache_stats",
15
+ ]