claude-smart 0.2.42 → 0.2.44

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 (402) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/README.md +1 -1
  3. package/bin/claude-smart.js +2 -2
  4. package/package.json +9 -3
  5. package/plugin/.claude-plugin/plugin.json +9 -3
  6. package/plugin/.codex-plugin/plugin.json +1 -1
  7. package/plugin/README.md +23 -3
  8. package/plugin/pyproject.toml +3 -3
  9. package/plugin/scripts/_lib.sh +91 -0
  10. package/plugin/scripts/backend-service.sh +51 -4
  11. package/plugin/scripts/cli.sh +3 -1
  12. package/plugin/scripts/codex-hook.js +72 -4
  13. package/plugin/scripts/dashboard-build.sh +1 -0
  14. package/plugin/scripts/dashboard-service.sh +1 -0
  15. package/plugin/scripts/ensure-plugin-root.sh +1 -0
  16. package/plugin/scripts/hook_entry.sh +6 -3
  17. package/plugin/scripts/smart-install.sh +3 -2
  18. package/plugin/src/README.md +57 -0
  19. package/plugin/src/claude_smart/context_format.py +11 -12
  20. package/plugin/src/claude_smart/cs_cite.py +26 -12
  21. package/plugin/src/claude_smart/ids.py +13 -5
  22. package/plugin/uv.lock +126 -5
  23. package/plugin/vendor/reflexio/.env.example +62 -0
  24. package/plugin/vendor/reflexio/LICENSE +201 -0
  25. package/plugin/vendor/reflexio/README.md +338 -0
  26. package/plugin/vendor/reflexio/pyproject.toml +274 -0
  27. package/plugin/vendor/reflexio/reflexio/README.md +184 -0
  28. package/plugin/vendor/reflexio/reflexio/__init__.py +166 -0
  29. package/plugin/vendor/reflexio/reflexio/benchmarks/__init__.py +1 -0
  30. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/README.md +109 -0
  31. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/__init__.py +1 -0
  32. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/backends.py +175 -0
  33. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/bench.py +642 -0
  34. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/embed_cache.py +330 -0
  35. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/report.py +317 -0
  36. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/report.md +43 -0
  37. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/results.json +4478 -0
  38. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/scenarios.py +134 -0
  39. package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/seed.py +255 -0
  40. package/plugin/vendor/reflexio/reflexio/cli/README.md +287 -0
  41. package/plugin/vendor/reflexio/reflexio/cli/__init__.py +0 -0
  42. package/plugin/vendor/reflexio/reflexio/cli/__main__.py +56 -0
  43. package/plugin/vendor/reflexio/reflexio/cli/_client.py +86 -0
  44. package/plugin/vendor/reflexio/reflexio/cli/app.py +127 -0
  45. package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +265 -0
  46. package/plugin/vendor/reflexio/reflexio/cli/codex_auth.py +503 -0
  47. package/plugin/vendor/reflexio/reflexio/cli/commands/__init__.py +0 -0
  48. package/plugin/vendor/reflexio/reflexio/cli/commands/admin_cmd.py +65 -0
  49. package/plugin/vendor/reflexio/reflexio/cli/commands/agent_playbooks.py +503 -0
  50. package/plugin/vendor/reflexio/reflexio/cli/commands/api.py +114 -0
  51. package/plugin/vendor/reflexio/reflexio/cli/commands/auth.py +109 -0
  52. package/plugin/vendor/reflexio/reflexio/cli/commands/config_cmd.py +511 -0
  53. package/plugin/vendor/reflexio/reflexio/cli/commands/doctor.py +127 -0
  54. package/plugin/vendor/reflexio/reflexio/cli/commands/embeddings.py +53 -0
  55. package/plugin/vendor/reflexio/reflexio/cli/commands/interactions.py +478 -0
  56. package/plugin/vendor/reflexio/reflexio/cli/commands/profiles.py +303 -0
  57. package/plugin/vendor/reflexio/reflexio/cli/commands/services.py +289 -0
  58. package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +964 -0
  59. package/plugin/vendor/reflexio/reflexio/cli/commands/shortcuts.py +285 -0
  60. package/plugin/vendor/reflexio/reflexio/cli/commands/status_cmd.py +143 -0
  61. package/plugin/vendor/reflexio/reflexio/cli/commands/user_playbooks.py +373 -0
  62. package/plugin/vendor/reflexio/reflexio/cli/env_loader.py +284 -0
  63. package/plugin/vendor/reflexio/reflexio/cli/errors.py +217 -0
  64. package/plugin/vendor/reflexio/reflexio/cli/log_format.py +247 -0
  65. package/plugin/vendor/reflexio/reflexio/cli/output.py +867 -0
  66. package/plugin/vendor/reflexio/reflexio/cli/paths.py +41 -0
  67. package/plugin/vendor/reflexio/reflexio/cli/run_services.py +391 -0
  68. package/plugin/vendor/reflexio/reflexio/cli/state.py +204 -0
  69. package/plugin/vendor/reflexio/reflexio/cli/stop_services.py +96 -0
  70. package/plugin/vendor/reflexio/reflexio/cli/utils.py +329 -0
  71. package/plugin/vendor/reflexio/reflexio/client/__init__.py +3 -0
  72. package/plugin/vendor/reflexio/reflexio/client/cache.py +150 -0
  73. package/plugin/vendor/reflexio/reflexio/client/client.py +2613 -0
  74. package/plugin/vendor/reflexio/reflexio/defaults.py +23 -0
  75. package/plugin/vendor/reflexio/reflexio/integrations/__init__.py +0 -0
  76. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/.clawhubignore +7 -0
  77. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/README.md +274 -0
  78. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/TESTING.md +517 -0
  79. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/hook/handler.js +473 -0
  80. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package-lock.json +2156 -0
  81. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package.json +18 -0
  82. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/handler.ts +241 -0
  83. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/setup.ts +140 -0
  84. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/index.ts +130 -0
  85. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/publish.ts +113 -0
  86. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/search.ts +52 -0
  87. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/server.ts +103 -0
  88. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/sqlite-buffer.ts +156 -0
  89. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/user-id.ts +134 -0
  90. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/openclaw.plugin.json +41 -0
  91. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/package.json +17 -0
  92. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/rules/reflexio.md +24 -0
  93. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/reflexio/SKILL.md +48 -0
  94. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/publish_clawhub.sh +278 -0
  95. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/references/HOOK.md +164 -0
  96. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/install.sh +36 -0
  97. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/uninstall.sh +35 -0
  98. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/publish.test.ts +27 -0
  99. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/search.test.ts +31 -0
  100. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/server.test.ts +42 -0
  101. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/setup.test.ts +49 -0
  102. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/sqlite-buffer.test.ts +91 -0
  103. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/user-id.test.ts +50 -0
  104. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tsconfig.json +16 -0
  105. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/types/openclaw.d.ts +230 -0
  106. package/plugin/vendor/reflexio/reflexio/integrations/openclaw/vitest.config.ts +13 -0
  107. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/README.md +120 -0
  108. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/TESTING.md +168 -0
  109. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package-lock.json +1657 -0
  110. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package.json +16 -0
  111. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/HEARTBEAT.md +6 -0
  112. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/README.md +84 -0
  113. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/SKILL.md +194 -0
  114. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/_meta.json +6 -0
  115. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/agents/reflexio-extractor.md +45 -0
  116. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/handler.ts +214 -0
  117. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/setup.ts +55 -0
  118. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/index.ts +327 -0
  119. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/consolidate.ts +233 -0
  120. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/dedup.ts +80 -0
  121. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/io.ts +155 -0
  122. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/openclaw-cli.ts +67 -0
  123. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/search.ts +33 -0
  124. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-playbook.ts +76 -0
  125. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-profile.ts +79 -0
  126. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/openclaw.plugin.json +46 -0
  127. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/package.json +18 -0
  128. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/README.md +36 -0
  129. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/full_consolidation.md +56 -0
  130. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/playbook_extraction.md +217 -0
  131. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/profile_extraction.md +132 -0
  132. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-consolidate/SKILL.md +33 -0
  133. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-embedded/SKILL.md +194 -0
  134. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/HOOK.md +18 -0
  135. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/architecture.md +49 -0
  136. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/comparison.md +31 -0
  137. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/future-work.md +47 -0
  138. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/porting-notes.md +52 -0
  139. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/install.sh +52 -0
  140. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/uninstall.sh +36 -0
  141. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/consolidate.test.ts +135 -0
  142. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/dedup.test.ts +104 -0
  143. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/io.test.ts +175 -0
  144. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/search.test.ts +66 -0
  145. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/smoke-test.ts +140 -0
  146. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-playbook.test.ts +93 -0
  147. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-profile.test.ts +174 -0
  148. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tsconfig.json +16 -0
  149. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/types/openclaw.d.ts +230 -0
  150. package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/vitest.config.ts +7 -0
  151. package/plugin/vendor/reflexio/reflexio/lib/__init__.py +23 -0
  152. package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +310 -0
  153. package/plugin/vendor/reflexio/reflexio/lib/_base.py +225 -0
  154. package/plugin/vendor/reflexio/reflexio/lib/_config.py +83 -0
  155. package/plugin/vendor/reflexio/reflexio/lib/_dashboard.py +266 -0
  156. package/plugin/vendor/reflexio/reflexio/lib/_generation.py +176 -0
  157. package/plugin/vendor/reflexio/reflexio/lib/_interactions.py +334 -0
  158. package/plugin/vendor/reflexio/reflexio/lib/_operations.py +153 -0
  159. package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +545 -0
  160. package/plugin/vendor/reflexio/reflexio/lib/_reflection.py +52 -0
  161. package/plugin/vendor/reflexio/reflexio/lib/_search.py +167 -0
  162. package/plugin/vendor/reflexio/reflexio/lib/_storage_labels.py +103 -0
  163. package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +288 -0
  164. package/plugin/vendor/reflexio/reflexio/lib/reflexio_lib.py +27 -0
  165. package/plugin/vendor/reflexio/reflexio/models/__init__.py +0 -0
  166. package/plugin/vendor/reflexio/reflexio/models/api_schema/__init__.py +0 -0
  167. package/plugin/vendor/reflexio/reflexio/models/api_schema/braintrust_schema.py +141 -0
  168. package/plugin/vendor/reflexio/reflexio/models/api_schema/common.py +41 -0
  169. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +3 -0
  170. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/entities.py +1112 -0
  171. package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +63 -0
  172. package/plugin/vendor/reflexio/reflexio/models/api_schema/eval_overview_schema.py +487 -0
  173. package/plugin/vendor/reflexio/reflexio/models/api_schema/internal_schema.py +28 -0
  174. package/plugin/vendor/reflexio/reflexio/models/api_schema/pending_tool_call_schema.py +83 -0
  175. package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +768 -0
  176. package/plugin/vendor/reflexio/reflexio/models/api_schema/service_schemas.py +9 -0
  177. package/plugin/vendor/reflexio/reflexio/models/api_schema/stall_state_schema.py +32 -0
  178. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/__init__.py +3 -0
  179. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/converters.py +177 -0
  180. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/entities.py +129 -0
  181. package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/enums.py +25 -0
  182. package/plugin/vendor/reflexio/reflexio/models/api_schema/validators.py +333 -0
  183. package/plugin/vendor/reflexio/reflexio/models/config_schema.py +908 -0
  184. package/plugin/vendor/reflexio/reflexio/models/py.typed +0 -0
  185. package/plugin/vendor/reflexio/reflexio/server/OVERVIEW.md +90 -0
  186. package/plugin/vendor/reflexio/reflexio/server/README.md +622 -0
  187. package/plugin/vendor/reflexio/reflexio/server/__init__.py +210 -0
  188. package/plugin/vendor/reflexio/reflexio/server/__main__.py +132 -0
  189. package/plugin/vendor/reflexio/reflexio/server/_auth.py +25 -0
  190. package/plugin/vendor/reflexio/reflexio/server/api.py +2868 -0
  191. package/plugin/vendor/reflexio/reflexio/server/api_endpoints/README.md +34 -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 +562 -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 +359 -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 +1871 -0
  206. package/plugin/vendor/reflexio/reflexio/server/llm/llm_utils.py +140 -0
  207. package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +479 -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 +338 -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 +288 -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 +187 -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 +716 -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_consolidation/v2.3.1.prompt.md +69 -0
  245. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.2.prompt.md +71 -0
  246. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.0.2.prompt.md +254 -0
  247. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.1.0.prompt.md +274 -0
  248. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.0.prompt.md +283 -0
  249. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.2.prompt.md +234 -0
  250. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.3.prompt.md +244 -0
  251. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v1.0.0.prompt.md +73 -0
  252. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v2.0.0.prompt.md +86 -0
  253. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.0.0.prompt.md +97 -0
  254. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.1.0.prompt.md +119 -0
  255. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.2.0.prompt.md +123 -0
  256. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.3.0.prompt.md +137 -0
  257. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.0.0.prompt.md +14 -0
  258. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.1.0.prompt.md +24 -0
  259. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.2.0.prompt.md +29 -0
  260. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.0.0.prompt.md +11 -0
  261. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.1.0.prompt.md +21 -0
  262. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.2.0.prompt.md +25 -0
  263. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.0.0.prompt.md +37 -0
  264. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.1.0.prompt.md +40 -0
  265. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.2.0.prompt.md +36 -0
  266. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v1.0.0.prompt.md +45 -0
  267. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v2.0.0.prompt.md +81 -0
  268. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v3.0.0.prompt.md +80 -0
  269. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate_expert/v1.0.0.prompt.md +34 -0
  270. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_deduplication/v1.0.0.prompt.md +116 -0
  271. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate/v1.0.0.prompt.md +33 -0
  272. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate_override/v1.0.0.prompt.md +16 -0
  273. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.0.0.prompt.md +140 -0
  274. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.1.0.prompt.md +160 -0
  275. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_main/v1.0.0.prompt.md +14 -0
  276. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/query_reformulation/v1.0.0.prompt.md +19 -0
  277. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/rerank_relevance/v1.1.0.prompt.md +44 -0
  278. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_comparison/v1.0.0.prompt.md +43 -0
  279. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_content_evaluation/v1.0.0.prompt.md +33 -0
  280. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/feedback_extraction_main_v1.jsonl +10 -0
  281. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/profile_update_main_v1.jsonl +10 -0
  282. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_manager.py +280 -0
  283. package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_schema.py +11 -0
  284. package/plugin/vendor/reflexio/reflexio/server/services/README.md +58 -0
  285. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/_eval_health.py +131 -0
  286. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_constants.py +60 -0
  287. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_service.py +228 -0
  288. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_utils.py +87 -0
  289. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluator.py +372 -0
  290. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/delayed_group_evaluator.py +156 -0
  291. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/group_evaluation_runner.py +336 -0
  292. package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/regen_jobs.py +471 -0
  293. package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +1668 -0
  294. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/__init__.py +0 -0
  295. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_cron.py +196 -0
  296. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_encryption.py +101 -0
  297. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/client.py +167 -0
  298. package/plugin/vendor/reflexio/reflexio/server/services/braintrust/service.py +281 -0
  299. package/plugin/vendor/reflexio/reflexio/server/services/configurator/base_configurator.py +179 -0
  300. package/plugin/vendor/reflexio/reflexio/server/services/configurator/config_storage.py +62 -0
  301. package/plugin/vendor/reflexio/reflexio/server/services/configurator/configurator.py +87 -0
  302. package/plugin/vendor/reflexio/reflexio/server/services/configurator/local_file_config_storage.py +187 -0
  303. package/plugin/vendor/reflexio/reflexio/server/services/configurator/test_config_storage.py +162 -0
  304. package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +112 -0
  305. package/plugin/vendor/reflexio/reflexio/server/services/embedding_text.py +62 -0
  306. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/__init__.py +0 -0
  307. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/distribution.py +33 -0
  308. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/eval_sampler.py +126 -0
  309. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/group_aggregation.py +192 -0
  310. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/hero_state.py +75 -0
  311. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/rule_attribution.py +97 -0
  312. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/service.py +515 -0
  313. package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/shadow_aggregation.py +90 -0
  314. package/plugin/vendor/reflexio/reflexio/server/services/extraction/__init__.py +0 -0
  315. package/plugin/vendor/reflexio/reflexio/server/services/extraction/agent_run_records.py +91 -0
  316. package/plugin/vendor/reflexio/reflexio/server/services/extraction/invariants.py +303 -0
  317. package/plugin/vendor/reflexio/reflexio/server/services/extraction/outcome.py +25 -0
  318. package/plugin/vendor/reflexio/reflexio/server/services/extraction/pending_tool_call_dispatch.py +358 -0
  319. package/plugin/vendor/reflexio/reflexio/server/services/extraction/plan.py +138 -0
  320. package/plugin/vendor/reflexio/reflexio/server/services/extraction/prior_answer_search.py +217 -0
  321. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resumable_agent.py +535 -0
  322. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_scheduler.py +171 -0
  323. package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +779 -0
  324. package/plugin/vendor/reflexio/reflexio/server/services/extraction/tools.py +1125 -0
  325. package/plugin/vendor/reflexio/reflexio/server/services/extractor_config_utils.py +94 -0
  326. package/plugin/vendor/reflexio/reflexio/server/services/extractor_interaction_utils.py +251 -0
  327. package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +702 -0
  328. package/plugin/vendor/reflexio/reflexio/server/services/operation_state_utils.py +835 -0
  329. package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +89 -0
  330. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_aggregator.py +1388 -0
  331. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_consolidator.py +1045 -0
  332. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_extractor.py +436 -0
  333. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_generation_service.py +808 -0
  334. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_constants.py +28 -0
  335. package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_utils.py +362 -0
  336. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/__init__.py +24 -0
  337. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/assistant_webhook.py +246 -0
  338. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/gepa_adapter.py +291 -0
  339. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/judge.py +97 -0
  340. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/models.py +96 -0
  341. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/optimizer.py +645 -0
  342. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/rollout.py +35 -0
  343. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scenario_resolver.py +93 -0
  344. package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scheduler.py +174 -0
  345. package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/__init__.py +26 -0
  346. package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_document_expander.py +179 -0
  347. package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_query_reformulator.py +297 -0
  348. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_deduplicator.py +772 -0
  349. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_extractor.py +462 -0
  350. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service.py +737 -0
  351. package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service_utils.py +290 -0
  352. package/plugin/vendor/reflexio/reflexio/server/services/reflection/__init__.py +17 -0
  353. package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_extractor.py +247 -0
  354. package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service.py +803 -0
  355. package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service_utils.py +146 -0
  356. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/__init__.py +0 -0
  357. package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +80 -0
  358. package/plugin/vendor/reflexio/reflexio/server/services/search/__init__.py +0 -0
  359. package/plugin/vendor/reflexio/reflexio/server/services/service_utils.py +756 -0
  360. package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/__init__.py +1 -0
  361. package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/judge.py +184 -0
  362. package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/outcome.py +81 -0
  363. package/plugin/vendor/reflexio/reflexio/server/services/storage/constants.py +2 -0
  364. package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +11 -0
  365. package/plugin/vendor/reflexio/reflexio/server/services/storage/retention.py +154 -0
  366. package/plugin/vendor/reflexio/reflexio/server/services/storage/retention_mixin.py +155 -0
  367. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +59 -0
  368. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +1298 -0
  369. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +1945 -0
  370. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +600 -0
  371. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_operations.py +346 -0
  372. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1378 -0
  373. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +747 -0
  374. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +263 -0
  375. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_shadow_verdicts.py +193 -0
  376. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_share_links.py +166 -0
  377. package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_stall_state.py +217 -0
  378. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +153 -0
  379. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +384 -0
  380. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_base.py +71 -0
  381. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +235 -0
  382. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_operations.py +170 -0
  383. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +677 -0
  384. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +250 -0
  385. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +154 -0
  386. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_shadow_verdicts.py +130 -0
  387. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_share_links.py +93 -0
  388. package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_stall_state.py +76 -0
  389. package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +572 -0
  390. package/plugin/vendor/reflexio/reflexio/server/site_var/README.md +77 -0
  391. package/plugin/vendor/reflexio/reflexio/server/site_var/feature_flags.py +116 -0
  392. package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_manager.py +263 -0
  393. package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/feature_flags.json +13 -0
  394. package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/llm_model_setting.json +7 -0
  395. package/plugin/vendor/reflexio/reflexio/server/tracing.py +158 -0
  396. package/plugin/vendor/reflexio/reflexio/server/usage_metrics.py +113 -0
  397. package/plugin/vendor/reflexio/reflexio/server/uvicorn_logging.py +76 -0
  398. package/plugin/vendor/reflexio/reflexio/test_support/__init__.py +1 -0
  399. package/plugin/vendor/reflexio/reflexio/test_support/llm_fixtures.py +62 -0
  400. package/plugin/vendor/reflexio/reflexio/test_support/llm_mock.py +242 -0
  401. package/plugin/vendor/reflexio/reflexio/test_support/llm_model_registry.py +129 -0
  402. package/plugin/vendor/reflexio/reflexio/test_support/skip_decorators.py +43 -0
@@ -0,0 +1,562 @@
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(
159
+ subsystem="publisher_api", action="delete_user_profile", org_id=org_id
160
+ ):
161
+ logger.exception("Failed to delete user profile")
162
+ return DeleteUserProfileResponse(success=False, message=str(e))
163
+
164
+
165
+ def delete_user_interaction(
166
+ org_id: str, request: DeleteUserInteractionRequest
167
+ ) -> DeleteUserInteractionResponse:
168
+ """Delete user interaction
169
+
170
+ Args:
171
+ org_id (str): Organization ID
172
+ request (DeleteUserInteractionRequest): The delete request
173
+
174
+ Returns:
175
+ DeleteUserInteractionResponse: Response containing success status and message
176
+ """
177
+ reflexio = get_reflexio(org_id=org_id)
178
+ try:
179
+ return reflexio.delete_interaction(request)
180
+ except Exception as e:
181
+ with sentry_tags(
182
+ subsystem="publisher_api", action="delete_user_interaction", org_id=org_id
183
+ ):
184
+ logger.exception("Failed to delete user interaction")
185
+ return DeleteUserInteractionResponse(success=False, message=str(e))
186
+
187
+
188
+ def delete_request(org_id: str, request: DeleteRequestRequest) -> DeleteRequestResponse:
189
+ """Delete request and all its associated interactions
190
+
191
+ Args:
192
+ org_id (str): Organization ID
193
+ request (DeleteRequestRequest): The delete request
194
+
195
+ Returns:
196
+ DeleteRequestResponse: Response containing success status and message
197
+ """
198
+ reflexio = get_reflexio(org_id=org_id)
199
+ try:
200
+ return reflexio.delete_request(request)
201
+ except Exception as e:
202
+ with sentry_tags(
203
+ subsystem="publisher_api", action="delete_request", org_id=org_id
204
+ ):
205
+ logger.exception("Failed to delete request")
206
+ return DeleteRequestResponse(success=False, message=str(e))
207
+
208
+
209
+ def delete_session(org_id: str, request: DeleteSessionRequest) -> DeleteSessionResponse:
210
+ """Delete all requests and interactions in a session
211
+
212
+ Args:
213
+ org_id (str): Organization ID
214
+ request (DeleteSessionRequest): The delete request
215
+
216
+ Returns:
217
+ DeleteSessionResponse: Response containing success status, message, and deleted count
218
+ """
219
+ reflexio = get_reflexio(org_id=org_id)
220
+ try:
221
+ return reflexio.delete_session(request)
222
+ except Exception as e:
223
+ with sentry_tags(
224
+ subsystem="publisher_api", action="delete_session", org_id=org_id
225
+ ):
226
+ logger.exception("Failed to delete session")
227
+ return DeleteSessionResponse(success=False, message=str(e))
228
+
229
+
230
+ def delete_agent_playbook(
231
+ org_id: str, request: DeleteAgentPlaybookRequest
232
+ ) -> DeleteAgentPlaybookResponse:
233
+ """Delete agent playbook by ID.
234
+
235
+ Args:
236
+ org_id (str): Organization ID
237
+ request (DeleteAgentPlaybookRequest): The delete request
238
+
239
+ Returns:
240
+ DeleteAgentPlaybookResponse: Response containing success status and message
241
+ """
242
+ reflexio = get_reflexio(org_id=org_id)
243
+ try:
244
+ return reflexio.delete_agent_playbook(request)
245
+ except Exception as e:
246
+ with sentry_tags(
247
+ subsystem="publisher_api", action="delete_agent_playbook", org_id=org_id
248
+ ):
249
+ logger.exception("Failed to delete agent playbook")
250
+ return DeleteAgentPlaybookResponse(success=False, message=str(e))
251
+
252
+
253
+ def delete_user_playbook(
254
+ org_id: str, request: DeleteUserPlaybookRequest
255
+ ) -> DeleteUserPlaybookResponse:
256
+ """Delete user playbook by ID.
257
+
258
+ Args:
259
+ org_id (str): Organization ID
260
+ request (DeleteUserPlaybookRequest): The delete request
261
+
262
+ Returns:
263
+ DeleteUserPlaybookResponse: Response containing success status and message
264
+ """
265
+ reflexio = get_reflexio(org_id=org_id)
266
+ try:
267
+ return reflexio.delete_user_playbook(request)
268
+ except Exception as e:
269
+ with sentry_tags(
270
+ subsystem="publisher_api", action="delete_user_playbook", org_id=org_id
271
+ ):
272
+ logger.exception("Failed to delete user playbook")
273
+ return DeleteUserPlaybookResponse(success=False, message=str(e))
274
+
275
+
276
+ # ==============================
277
+ # Bulk delete operations
278
+ # ==============================
279
+
280
+
281
+ def delete_all_interactions_bulk(org_id: str) -> BulkDeleteResponse:
282
+ """Delete all requests and their associated interactions.
283
+
284
+ Args:
285
+ org_id (str): Organization ID
286
+
287
+ Returns:
288
+ BulkDeleteResponse: Response containing success status and deleted count
289
+ """
290
+ reflexio = get_reflexio(org_id=org_id)
291
+ return reflexio.delete_all_interactions_bulk()
292
+
293
+
294
+ def delete_all_profiles_bulk(org_id: str) -> BulkDeleteResponse:
295
+ """Delete all profiles.
296
+
297
+ Args:
298
+ org_id (str): Organization ID
299
+
300
+ Returns:
301
+ BulkDeleteResponse: Response containing success status and deleted count
302
+ """
303
+ reflexio = get_reflexio(org_id=org_id)
304
+ return reflexio.delete_all_profiles_bulk()
305
+
306
+
307
+ def delete_all_playbooks_bulk(org_id: str) -> BulkDeleteResponse:
308
+ """Delete all playbooks (both user and agent).
309
+
310
+ Args:
311
+ org_id (str): Organization ID
312
+
313
+ Returns:
314
+ BulkDeleteResponse: Response containing success status and deleted count
315
+ """
316
+ reflexio = get_reflexio(org_id=org_id)
317
+ return reflexio.delete_all_playbooks_bulk()
318
+
319
+
320
+ def delete_all_user_playbooks_bulk(org_id: str) -> BulkDeleteResponse:
321
+ """Delete all user playbooks (user only, not agent).
322
+
323
+ Args:
324
+ org_id (str): Organization ID
325
+
326
+ Returns:
327
+ BulkDeleteResponse: Response containing success status and deleted count
328
+ """
329
+ reflexio = get_reflexio(org_id=org_id)
330
+ return reflexio.delete_all_user_playbooks_bulk()
331
+
332
+
333
+ def delete_all_agent_playbooks_bulk(org_id: str) -> BulkDeleteResponse:
334
+ """Delete all agent playbooks (agent only, not user).
335
+
336
+ Args:
337
+ org_id (str): Organization ID
338
+
339
+ Returns:
340
+ BulkDeleteResponse: Response containing success status and deleted count
341
+ """
342
+ reflexio = get_reflexio(org_id=org_id)
343
+ return reflexio.delete_all_agent_playbooks_bulk()
344
+
345
+
346
+ def delete_requests_by_ids(
347
+ org_id: str, request: DeleteRequestsByIdsRequest
348
+ ) -> BulkDeleteResponse:
349
+ """Delete requests by their IDs.
350
+
351
+ Args:
352
+ org_id (str): Organization ID
353
+ request (DeleteRequestsByIdsRequest): The delete request
354
+
355
+ Returns:
356
+ BulkDeleteResponse: Response containing success status and deleted count
357
+ """
358
+ reflexio = get_reflexio(org_id=org_id)
359
+ return reflexio.delete_requests_by_ids(request)
360
+
361
+
362
+ def delete_profiles_by_ids(
363
+ org_id: str, request: DeleteProfilesByIdsRequest
364
+ ) -> BulkDeleteResponse:
365
+ """Delete profiles by their IDs.
366
+
367
+ Args:
368
+ org_id (str): Organization ID
369
+ request (DeleteProfilesByIdsRequest): The delete request
370
+
371
+ Returns:
372
+ BulkDeleteResponse: Response containing success status and deleted count
373
+ """
374
+ reflexio = get_reflexio(org_id=org_id)
375
+ return reflexio.delete_profiles_by_ids(request)
376
+
377
+
378
+ def delete_agent_playbooks_by_ids_bulk(
379
+ org_id: str, request: DeleteAgentPlaybooksByIdsRequest
380
+ ) -> BulkDeleteResponse:
381
+ """Delete agent playbooks by their IDs.
382
+
383
+ Args:
384
+ org_id (str): Organization ID
385
+ request (DeleteAgentPlaybooksByIdsRequest): The delete request
386
+
387
+ Returns:
388
+ BulkDeleteResponse: Response containing success status and deleted count
389
+ """
390
+ reflexio = get_reflexio(org_id=org_id)
391
+ return reflexio.delete_agent_playbooks_by_ids_bulk(request)
392
+
393
+
394
+ def delete_user_playbooks_by_ids_bulk(
395
+ org_id: str, request: DeleteUserPlaybooksByIdsRequest
396
+ ) -> BulkDeleteResponse:
397
+ """Delete user playbooks by their IDs.
398
+
399
+ Args:
400
+ org_id (str): Organization ID
401
+ request (DeleteUserPlaybooksByIdsRequest): The delete request
402
+
403
+ Returns:
404
+ BulkDeleteResponse: Response containing success status and deleted count
405
+ """
406
+ reflexio = get_reflexio(org_id=org_id)
407
+ return reflexio.delete_user_playbooks_by_ids_bulk(request)
408
+
409
+
410
+ def clear_user_data(
411
+ org_id: str, request: ClearUserDataRequest
412
+ ) -> ClearUserDataResponse:
413
+ """Delete all rows scoped to a single ``user_id``.
414
+
415
+ Args:
416
+ org_id (str): Organization ID
417
+ request (ClearUserDataRequest): Request containing the target user_id
418
+
419
+ Returns:
420
+ ClearUserDataResponse: Response with per-entity deletion counts
421
+ """
422
+ reflexio = get_reflexio(org_id=org_id)
423
+ return reflexio.clear_user_data(request)
424
+
425
+
426
+ # ==============================
427
+ # Run playbook aggregation
428
+ # ==============================
429
+
430
+
431
+ def run_playbook_aggregation(
432
+ org_id: str, request: RunPlaybookAggregationRequest
433
+ ) -> RunPlaybookAggregationResponse:
434
+ """Run playbook aggregation for a given agent version and playbook name.
435
+
436
+ Args:
437
+ org_id (str): Organization ID
438
+ request (RunPlaybookAggregationRequest): The run playbook aggregation request
439
+
440
+ Returns:
441
+ RunPlaybookAggregationResponse: Response containing success status and message
442
+ """
443
+ reflexio = get_reflexio(org_id=org_id)
444
+ try:
445
+ result = reflexio.run_playbook_aggregation(
446
+ request.agent_version, request.playbook_name
447
+ )
448
+ except Exception as e:
449
+ with sentry_tags(
450
+ subsystem="publisher_api", action="run_playbook_aggregation", org_id=org_id
451
+ ):
452
+ logger.exception("Failed to run playbook aggregation")
453
+ return RunPlaybookAggregationResponse(success=False, message=str(e))
454
+
455
+ if result.get("skipped"):
456
+ return RunPlaybookAggregationResponse(
457
+ success=True, message=f"Skipped: {result['skipped']}"
458
+ )
459
+
460
+ message = (
461
+ f"Processed {result['user_playbooks_processed']} user playbooks, "
462
+ f"found {result['clusters_found']} clusters, "
463
+ f"generated {result['playbooks_generated']} agent playbooks"
464
+ )
465
+ return RunPlaybookAggregationResponse(success=True, message=message)
466
+
467
+
468
+ # ==============================
469
+ # Update playbook status
470
+ # ==============================
471
+
472
+
473
+ def update_agent_playbook_status(
474
+ org_id: str, request: UpdatePlaybookStatusRequest
475
+ ) -> UpdatePlaybookStatusResponse:
476
+ """Update the status of a specific playbook.
477
+
478
+ Args:
479
+ org_id (str): Organization ID
480
+ request (UpdatePlaybookStatusRequest): The update request
481
+
482
+ Returns:
483
+ UpdatePlaybookStatusResponse: Response containing success status and message
484
+ """
485
+ reflexio = get_reflexio(org_id=org_id)
486
+ try:
487
+ return reflexio.update_agent_playbook_status(request)
488
+ except Exception as e:
489
+ with sentry_tags(
490
+ subsystem="publisher_api", action="update_playbook_status", org_id=org_id
491
+ ):
492
+ logger.exception("Failed to update playbook status")
493
+ return UpdatePlaybookStatusResponse(success=False, msg=str(e))
494
+
495
+
496
+ def update_agent_playbook(
497
+ org_id: str, request: UpdateAgentPlaybookRequest
498
+ ) -> UpdateAgentPlaybookResponse:
499
+ """Update editable fields of an agent playbook.
500
+
501
+ Args:
502
+ org_id (str): Organization ID
503
+ request (UpdateAgentPlaybookRequest): The update request
504
+
505
+ Returns:
506
+ UpdateAgentPlaybookResponse: Response containing success status and message
507
+ """
508
+ reflexio = get_reflexio(org_id=org_id)
509
+ try:
510
+ return reflexio.update_agent_playbook(request)
511
+ except Exception as e:
512
+ with sentry_tags(
513
+ subsystem="publisher_api", action="update_agent_playbook", org_id=org_id
514
+ ):
515
+ logger.exception("Failed to update agent playbook")
516
+ return UpdateAgentPlaybookResponse(success=False, msg=str(e))
517
+
518
+
519
+ def update_user_playbook(
520
+ org_id: str, request: UpdateUserPlaybookRequest
521
+ ) -> UpdateUserPlaybookResponse:
522
+ """Update editable fields of a user playbook.
523
+
524
+ Args:
525
+ org_id (str): Organization ID
526
+ request (UpdateUserPlaybookRequest): The update request
527
+
528
+ Returns:
529
+ UpdateUserPlaybookResponse: Response containing success status and message
530
+ """
531
+ reflexio = get_reflexio(org_id=org_id)
532
+ try:
533
+ return reflexio.update_user_playbook(request)
534
+ except Exception as e:
535
+ with sentry_tags(
536
+ subsystem="publisher_api", action="update_user_playbook", org_id=org_id
537
+ ):
538
+ logger.exception("Failed to update user playbook")
539
+ return UpdateUserPlaybookResponse(success=False, msg=str(e))
540
+
541
+
542
+ def update_user_profile(
543
+ org_id: str, request: UpdateUserProfileRequest
544
+ ) -> UpdateUserProfileResponse:
545
+ """Apply a partial update to an existing user profile.
546
+
547
+ Args:
548
+ org_id (str): Organization ID
549
+ request (UpdateUserProfileRequest): The update request
550
+
551
+ Returns:
552
+ UpdateUserProfileResponse: Response containing success status and message
553
+ """
554
+ reflexio = get_reflexio(org_id=org_id)
555
+ try:
556
+ return reflexio.update_user_profile(request)
557
+ except Exception as e:
558
+ with sentry_tags(
559
+ subsystem="publisher_api", action="update_user_profile", org_id=org_id
560
+ ):
561
+ logger.exception("Failed to update user profile")
562
+ 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)