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,56 @@
1
+ """Reflexio CLI entry point.
2
+
3
+ Usage:
4
+ reflexio [--json] [--url URL] [--api-key KEY] COMMAND [OPTIONS]
5
+
6
+ Command groups:
7
+ reflexio services start|stop
8
+ reflexio interactions publish|list|search|delete|delete-all
9
+ reflexio profiles list|search|delete|delete-all|generate
10
+ reflexio feedbacks list|search|delete|delete-all|aggregate|regenerate
11
+ reflexio raw-feedbacks list|search|add|delete|delete-all
12
+ reflexio config show|set
13
+ reflexio auth login|status|logout|setup
14
+ reflexio status check
15
+ reflexio api METHOD PATH
16
+ reflexio doctor check
17
+
18
+ Shortcuts:
19
+ reflexio publish (alias for: interactions publish)
20
+ reflexio search (unified search across profiles and feedbacks)
21
+ reflexio context (fetch formatted context for agent injection)
22
+ """
23
+
24
+ from __future__ import annotations
25
+
26
+ import sys
27
+
28
+
29
+ def main(argv: list[str] | None = None) -> None:
30
+ """Main CLI entry point.
31
+
32
+ Loads ``~/.reflexio/.env`` so every CLI invocation (including those
33
+ spawned by hooks) picks up ``REFLEXIO_URL`` and ``REFLEXIO_API_KEY``.
34
+
35
+ Checks for registered CLI extensions (e.g. enterprise) via the
36
+ ``reflexio.cli`` entry-point group before falling back to the
37
+ default open-source app factory.
38
+ """
39
+ from reflexio.cli.env_loader import load_reflexio_env
40
+
41
+ load_reflexio_env()
42
+
43
+ from importlib.metadata import entry_points
44
+
45
+ eps = entry_points(group="reflexio.cli")
46
+ if eps:
47
+ create_app = next(iter(eps)).load()
48
+ else:
49
+ from reflexio.cli.app import create_app
50
+
51
+ app = create_app()
52
+ app(argv if argv is not None else sys.argv[1:], standalone_mode=True)
53
+
54
+
55
+ if __name__ == "__main__":
56
+ main()
@@ -0,0 +1,86 @@
1
+ """ReflexioClient factory with layered config resolution.
2
+
3
+ All connection settings come from CLI flags, environment variables
4
+ (typically loaded from ``~/.reflexio/.env`` at CLI startup), or
5
+ hard-coded defaults. No separate config file is used.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import argparse
11
+ import os
12
+
13
+ from reflexio import ReflexioClient
14
+ from reflexio.defaults import DEFAULT_AGENT_VERSION, DEFAULT_SERVER_URL, DEFAULT_USER_ID
15
+
16
+
17
+ def _resolve(
18
+ args: argparse.Namespace | None,
19
+ arg_name: str,
20
+ env_var: str,
21
+ default: str,
22
+ ) -> str:
23
+ """Resolve a config value through the priority chain: CLI flag -> env var -> default.
24
+
25
+ Args:
26
+ args (argparse.Namespace | None): Parsed CLI arguments
27
+ arg_name (str): Attribute name on the args namespace
28
+ env_var (str): Environment variable name
29
+ default (str): Fallback default value
30
+
31
+ Returns:
32
+ str: The resolved value
33
+ """
34
+ if args and hasattr(args, arg_name) and getattr(args, arg_name):
35
+ return getattr(args, arg_name)
36
+ if env_val := os.environ.get(env_var):
37
+ return env_val
38
+ return default
39
+
40
+
41
+ def create_client(args: argparse.Namespace | None = None) -> ReflexioClient:
42
+ """Create a ReflexioClient with config resolved from CLI flags, env vars, and defaults.
43
+
44
+ Resolution order (highest to lowest priority):
45
+ 1. CLI flags (args.url, args.api_key)
46
+ 2. Environment variables (REFLEXIO_URL, REFLEXIO_API_KEY)
47
+ 3. Defaults (https://www.reflexio.ai/, no api_key)
48
+
49
+ Args:
50
+ args (argparse.Namespace | None): Parsed CLI arguments, or None for env/defaults only
51
+
52
+ Returns:
53
+ ReflexioClient: Configured client instance
54
+ """
55
+ url = _resolve(args, "url", "REFLEXIO_URL", DEFAULT_SERVER_URL)
56
+ api_key = _resolve(args, "api_key", "REFLEXIO_API_KEY", "")
57
+ return ReflexioClient(url_endpoint=url, api_key=api_key)
58
+
59
+
60
+ def resolve_user_id(args: argparse.Namespace | None = None) -> str:
61
+ """Resolve user_id from CLI flags, env var, or default.
62
+
63
+ Args:
64
+ args (argparse.Namespace | None): Parsed CLI arguments
65
+
66
+ Returns:
67
+ str: Resolved user ID
68
+ """
69
+ return _resolve(args, "user_id", "REFLEXIO_USER_ID", DEFAULT_USER_ID)
70
+
71
+
72
+ def resolve_agent_version(args: argparse.Namespace | None = None) -> str:
73
+ """Resolve agent_version from CLI flags, env var, or default.
74
+
75
+ Args:
76
+ args (argparse.Namespace | None): Parsed CLI arguments
77
+
78
+ Returns:
79
+ str: Resolved agent version
80
+ """
81
+ return _resolve(
82
+ args,
83
+ "agent_version",
84
+ "REFLEXIO_AGENT_VERSION",
85
+ DEFAULT_AGENT_VERSION,
86
+ )
@@ -0,0 +1,127 @@
1
+ """Typer app factory for Reflexio CLI.
2
+
3
+ Creates the root app with global flags, registers all command groups
4
+ as sub-apps, and provides the entry point for both open-source and
5
+ enterprise CLI variants.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from typing import Annotated
11
+
12
+ import typer
13
+
14
+ from reflexio import __version__
15
+ from reflexio.cli.state import CliState
16
+
17
+
18
+ def _version_callback(value: bool) -> None:
19
+ """Print version and exit.
20
+
21
+ Args:
22
+ value: Whether the --version flag was passed
23
+ """
24
+ if value:
25
+ typer.echo(f"reflexio {__version__}")
26
+ raise typer.Exit
27
+
28
+
29
+ def create_app(exclude: set[str] | None = None) -> typer.Typer:
30
+ """Create and configure the root Typer application.
31
+
32
+ Registers global flags (--json, --url, --api-key, --version) and
33
+ all command group sub-apps.
34
+
35
+ Args:
36
+ exclude: Optional set of sub-app names to skip registration for.
37
+ Allows consumers to replace specific sub-apps (e.g., ``exclude={"services"}``
38
+ to provide a custom services implementation).
39
+
40
+ Returns:
41
+ typer.Typer: The configured root application
42
+ """
43
+ app = typer.Typer(
44
+ name="reflexio",
45
+ help="Reflexio CLI — AI agent memory and feedback system",
46
+ no_args_is_help=True,
47
+ rich_markup_mode="rich",
48
+ )
49
+
50
+ @app.callback()
51
+ def main_callback(
52
+ ctx: typer.Context,
53
+ json_mode: Annotated[
54
+ bool,
55
+ typer.Option("--json", help="Output structured JSON envelopes"),
56
+ ] = False,
57
+ server_url: Annotated[
58
+ str | None,
59
+ typer.Option(
60
+ "--server-url", help="Backend API server URL", envvar="REFLEXIO_URL"
61
+ ),
62
+ ] = None,
63
+ api_key: Annotated[
64
+ str | None,
65
+ typer.Option(
66
+ "--api-key", help="Reflexio API key", envvar="REFLEXIO_API_KEY"
67
+ ),
68
+ ] = None,
69
+ _version: Annotated[ # noqa: ARG001 — Typer requires this param for the callback
70
+ bool,
71
+ typer.Option(
72
+ "--version",
73
+ callback=_version_callback,
74
+ is_eager=True,
75
+ help="Show version",
76
+ ),
77
+ ] = False,
78
+ ) -> None:
79
+ """Reflexio CLI — AI agent memory and feedback system."""
80
+ ctx.ensure_object(CliState)
81
+ ctx.obj.json_mode = json_mode
82
+ if server_url:
83
+ ctx.obj.server_url = server_url
84
+ if api_key:
85
+ ctx.obj.api_key = api_key
86
+
87
+ # Register command groups
88
+ from reflexio.cli.commands.admin_cmd import app as admin_app
89
+ from reflexio.cli.commands.agent_playbooks import app as agent_playbooks_app
90
+ from reflexio.cli.commands.api import app as api_app
91
+ from reflexio.cli.commands.auth import app as auth_app
92
+ from reflexio.cli.commands.config_cmd import app as config_app
93
+ from reflexio.cli.commands.doctor import app as doctor_app
94
+ from reflexio.cli.commands.embeddings import app as embeddings_app
95
+ from reflexio.cli.commands.interactions import app as interactions_app
96
+ from reflexio.cli.commands.profiles import app as profiles_app
97
+ from reflexio.cli.commands.services import app as services_app
98
+ from reflexio.cli.commands.setup_cmd import app as setup_app
99
+ from reflexio.cli.commands.shortcuts import register_shortcuts
100
+ from reflexio.cli.commands.status_cmd import app as status_app
101
+ from reflexio.cli.commands.user_playbooks import app as user_playbooks_app
102
+
103
+ _skip = exclude or set()
104
+
105
+ _sub_apps: list[tuple[typer.Typer, str]] = [
106
+ (services_app, "services"),
107
+ (embeddings_app, "embeddings"),
108
+ (interactions_app, "interactions"),
109
+ (profiles_app, "user-profiles"),
110
+ (agent_playbooks_app, "agent-playbooks"),
111
+ (user_playbooks_app, "user-playbooks"),
112
+ (config_app, "config"),
113
+ (auth_app, "auth"),
114
+ (status_app, "status"),
115
+ (api_app, "api"),
116
+ (doctor_app, "doctor"),
117
+ (setup_app, "setup"),
118
+ (admin_app, "admin"),
119
+ ]
120
+ for sub_app, name in _sub_apps:
121
+ if name not in _skip:
122
+ app.add_typer(sub_app, name=name)
123
+
124
+ # Top-level shortcuts (publish, search, context)
125
+ register_shortcuts(app)
126
+
127
+ return app
@@ -0,0 +1,265 @@
1
+ """CLI bootstrap config: resolve and persist storage settings without a running server.
2
+
3
+ Provides the priority chain: CLI flag > env var (.env) > config file > default.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import logging
9
+ import os
10
+ from pathlib import Path
11
+ from typing import Any
12
+
13
+ import typer
14
+
15
+ from .paths import reflexio_home
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+ _VALID_STORAGE_BACKENDS = frozenset({"sqlite", "supabase", "postgres"})
20
+ _DEFAULT_ORG_ID = "self-host-org"
21
+ _DEFAULT_STORAGE = "sqlite"
22
+
23
+ # Maps StorageConfig subclass to backend string. Lazy-imported in functions
24
+ # that need it so module-level import stays lightweight (no Pydantic at import).
25
+ _TYPE_TO_BACKEND: dict[type, str] = {} # populated on first use
26
+
27
+
28
+ def _data_db_url_from_env() -> str:
29
+ """Resolve the canonical data DB URL, accepting the legacy alias."""
30
+ return os.environ.get("DATA_DB_URL", "") or os.environ.get(
31
+ "DATA_SUPABASE_DB_URL", ""
32
+ )
33
+
34
+
35
+ def _ensure_type_map() -> dict[type, str]:
36
+ """Lazy-build the StorageConfig type → backend string map."""
37
+ if not _TYPE_TO_BACKEND:
38
+ from reflexio.models.config_schema import (
39
+ StorageConfigPostgres,
40
+ StorageConfigSQLite,
41
+ StorageConfigSupabase,
42
+ )
43
+
44
+ _TYPE_TO_BACKEND.update(
45
+ {
46
+ StorageConfigSQLite: "sqlite",
47
+ StorageConfigSupabase: "supabase",
48
+ StorageConfigPostgres: "postgres",
49
+ }
50
+ )
51
+ return _TYPE_TO_BACKEND
52
+
53
+
54
+ def _config_dir(base_dir: str | None = None) -> Path:
55
+ """Return the config directory path."""
56
+ if base_dir:
57
+ return Path(base_dir) / "configs"
58
+ return reflexio_home() / "configs"
59
+
60
+
61
+ def default_config_path(base_dir: str | None = None) -> Path:
62
+ """Return the local config file path for the default self-host org.
63
+
64
+ Shared helper so CLI display commands (e.g. ``config show``,
65
+ ``config local``) resolve the same path without duplicating the
66
+ ``<dir>/config_<org>.json`` convention.
67
+
68
+ Args:
69
+ base_dir: Override base directory (for testing). If None, uses ~/.reflexio/.
70
+
71
+ Returns:
72
+ Path: Absolute path to the default-org config file (may not exist).
73
+ """
74
+ return _config_dir(base_dir) / f"config_{_DEFAULT_ORG_ID}.json"
75
+
76
+
77
+ def load_storage_from_config(
78
+ org_id: str = _DEFAULT_ORG_ID,
79
+ *,
80
+ base_dir: str | None = None,
81
+ ) -> str | None:
82
+ """Read storage type from the local config file.
83
+
84
+ Args:
85
+ org_id: Organization ID for the config file name.
86
+ base_dir: Override base directory (for testing). If None, uses ~/.reflexio/.
87
+
88
+ Returns:
89
+ Storage backend string ("sqlite", "supabase", "postgres") or None if
90
+ no config file exists or storage_config is unset.
91
+ """
92
+ config_path = _config_dir(base_dir) / f"config_{org_id}.json"
93
+ if not config_path.exists():
94
+ return None
95
+
96
+ try:
97
+ from reflexio.server.services.configurator.local_file_config_storage import (
98
+ LocalFileConfigStorage,
99
+ )
100
+
101
+ storage = LocalFileConfigStorage(org_id, base_dir=base_dir)
102
+ config = storage.load_config()
103
+ except Exception:
104
+ logger.debug("Failed to load config from %s", config_path, exc_info=True)
105
+ return None
106
+
107
+ sc = config.storage_config
108
+ if sc is None:
109
+ return None
110
+
111
+ type_map = _ensure_type_map()
112
+ return type_map.get(type(sc))
113
+
114
+
115
+ def save_storage_to_config(
116
+ storage_type: str,
117
+ org_id: str = _DEFAULT_ORG_ID,
118
+ *,
119
+ base_dir: str | None = None,
120
+ ) -> None:
121
+ """Update storage_config in the local config file.
122
+
123
+ Loads the existing config, replaces only ``storage_config``, and saves.
124
+ All other fields (extractors, api_keys, etc.) are preserved.
125
+
126
+ Args:
127
+ storage_type: Backend name ("sqlite", "supabase", "postgres").
128
+ org_id: Organization ID for the config file name.
129
+ base_dir: Override base directory (for testing).
130
+ """
131
+ from reflexio.models.config_schema import (
132
+ StorageConfigPostgres,
133
+ StorageConfigSQLite,
134
+ StorageConfigSupabase,
135
+ )
136
+ from reflexio.server.services.configurator.local_file_config_storage import (
137
+ LocalFileConfigStorage,
138
+ )
139
+
140
+ storage_obj = LocalFileConfigStorage(org_id, base_dir=base_dir)
141
+ config = storage_obj.load_config()
142
+
143
+ match storage_type:
144
+ case "sqlite":
145
+ config.storage_config = StorageConfigSQLite()
146
+ case "supabase":
147
+ url = os.environ.get("DATA_SUPABASE_URL", "")
148
+ key = os.environ.get("DATA_SUPABASE_KEY", "")
149
+ db_url = _data_db_url_from_env()
150
+ if url and key and db_url:
151
+ config.storage_config = StorageConfigSupabase(
152
+ url=url, key=key, db_url=db_url
153
+ )
154
+ else:
155
+ logger.warning(
156
+ "Supabase storage requested but credentials are missing "
157
+ "(DATA_SUPABASE_URL, DATA_SUPABASE_KEY, DATA_DB_URL). "
158
+ "Keeping existing storage config."
159
+ )
160
+ case "postgres":
161
+ db_url = os.environ.get("DATA_DB_URL", "").strip()
162
+ schema = os.environ.get("REFLEXIO_POSTGRES_SCHEMA", "").strip()
163
+ pool_size_raw = os.environ.get("REFLEXIO_POSTGRES_POOL_SIZE", "").strip()
164
+ pool_size = int(pool_size_raw) if pool_size_raw.isdigit() else 10
165
+ if pool_size < 1:
166
+ logger.warning(
167
+ "Invalid REFLEXIO_POSTGRES_POOL_SIZE=%r (must be >= 1); using default",
168
+ pool_size_raw,
169
+ )
170
+ pool_size = 10
171
+ timeout_raw = os.environ.get(
172
+ "REFLEXIO_POSTGRES_POOL_ACQUIRE_TIMEOUT", ""
173
+ ).strip()
174
+ postgres_kwargs: dict[str, Any] = {
175
+ "db_url": db_url,
176
+ "schema": schema or None,
177
+ "pool_size": pool_size,
178
+ }
179
+ if timeout_raw:
180
+ try:
181
+ timeout = float(timeout_raw)
182
+ except ValueError:
183
+ logger.warning(
184
+ "Invalid REFLEXIO_POSTGRES_POOL_ACQUIRE_TIMEOUT=%r; using default",
185
+ timeout_raw,
186
+ )
187
+ else:
188
+ if timeout > 0:
189
+ postgres_kwargs["pool_acquire_timeout"] = timeout
190
+ else:
191
+ logger.warning(
192
+ "Invalid REFLEXIO_POSTGRES_POOL_ACQUIRE_TIMEOUT=%r "
193
+ "(must be > 0); using default",
194
+ timeout_raw,
195
+ )
196
+ if db_url:
197
+ config.storage_config = StorageConfigPostgres(**postgres_kwargs)
198
+ else:
199
+ logger.warning(
200
+ "Postgres storage requested but DATA_DB_URL "
201
+ "is missing. Keeping existing storage config."
202
+ )
203
+ case _:
204
+ raise ValueError(f"Unknown storage type: {storage_type}")
205
+
206
+ storage_obj.save_config(config)
207
+
208
+
209
+ def resolve_storage(cli_flag: str | None) -> str:
210
+ """Resolve storage backend using priority: CLI flag > env var > config file > default.
211
+
212
+ Do NOT use Typer's ``envvar=`` binding for ``--storage``. This function
213
+ handles the full resolution chain so callers can distinguish explicit CLI
214
+ flags (``cli_flag is not None``) from implicit fallback (``cli_flag is None``)
215
+ for write-back decisions.
216
+
217
+ Args:
218
+ cli_flag: Value from ``--storage`` flag, or ``None`` if not passed.
219
+
220
+ Returns:
221
+ Resolved storage backend string.
222
+
223
+ Raises:
224
+ typer.BadParameter: If the resolved value is not a known backend.
225
+ """
226
+ # 1. CLI flag (explicit user intent)
227
+ if cli_flag is not None:
228
+ result = cli_flag.lower()
229
+ if result not in _VALID_STORAGE_BACKENDS:
230
+ raise typer.BadParameter(
231
+ f"Invalid storage backend '{cli_flag}'. "
232
+ f"Must be one of: {', '.join(sorted(_VALID_STORAGE_BACKENDS))}"
233
+ )
234
+ return result
235
+
236
+ # 2. Environment variable (from .env or shell)
237
+ env_val = os.environ.get("REFLEXIO_STORAGE")
238
+ if env_val:
239
+ env_norm = env_val.lower()
240
+ if env_norm in _VALID_STORAGE_BACKENDS:
241
+ return env_norm
242
+ # Unknown value (e.g., legacy "disk" or a typo). Don't silently fall
243
+ # through — surface a warning so operators notice that their env var
244
+ # was ignored. Common case: REFLEXIO_STORAGE=disk left over from a
245
+ # release that supported the now-removed disk backend.
246
+ legacy_hint = (
247
+ " The 'disk' backend was removed; migrate to 'sqlite'."
248
+ if env_norm == "disk"
249
+ else ""
250
+ )
251
+ logger.warning(
252
+ "Ignoring unsupported REFLEXIO_STORAGE=%r; falling back to config/default. "
253
+ "Supported: %s.%s",
254
+ env_val,
255
+ ", ".join(sorted(_VALID_STORAGE_BACKENDS)),
256
+ legacy_hint,
257
+ )
258
+
259
+ # 3. Config file
260
+ from_config = load_storage_from_config()
261
+ if from_config and from_config in _VALID_STORAGE_BACKENDS:
262
+ return from_config
263
+
264
+ # 4. Hardcoded default
265
+ return _DEFAULT_STORAGE