claude-smart 0.2.42 → 0.2.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/README.md +1 -1
- package/package.json +9 -3
- package/plugin/.claude-plugin/plugin.json +9 -3
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/README.md +2 -2
- package/plugin/pyproject.toml +2 -2
- package/plugin/scripts/_lib.sh +91 -0
- package/plugin/scripts/backend-service.sh +1 -0
- package/plugin/scripts/cli.sh +1 -0
- package/plugin/scripts/codex-hook.js +72 -4
- package/plugin/scripts/dashboard-build.sh +1 -0
- package/plugin/scripts/dashboard-service.sh +1 -0
- package/plugin/scripts/hook_entry.sh +1 -0
- package/plugin/scripts/smart-install.sh +1 -0
- package/plugin/src/claude_smart/context_format.py +11 -12
- package/plugin/src/claude_smart/cs_cite.py +26 -12
- package/plugin/src/claude_smart/ids.py +13 -5
- package/plugin/uv.lock +1 -1
- package/plugin/vendor/reflexio/.env.example +53 -0
- package/plugin/vendor/reflexio/LICENSE +201 -0
- package/plugin/vendor/reflexio/README.md +338 -0
- package/plugin/vendor/reflexio/pyproject.toml +271 -0
- package/plugin/vendor/reflexio/reflexio/README.md +184 -0
- package/plugin/vendor/reflexio/reflexio/__init__.py +166 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/README.md +109 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/backends.py +175 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/bench.py +642 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/embed_cache.py +330 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/report.py +317 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/report.md +43 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/results.json +4478 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/scenarios.py +134 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/seed.py +255 -0
- package/plugin/vendor/reflexio/reflexio/cli/README.md +287 -0
- package/plugin/vendor/reflexio/reflexio/cli/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/cli/__main__.py +56 -0
- package/plugin/vendor/reflexio/reflexio/cli/_client.py +86 -0
- package/plugin/vendor/reflexio/reflexio/cli/app.py +127 -0
- package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +266 -0
- package/plugin/vendor/reflexio/reflexio/cli/codex_auth.py +503 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/admin_cmd.py +65 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/agent_playbooks.py +503 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/api.py +114 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/auth.py +109 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/config_cmd.py +511 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/doctor.py +127 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/embeddings.py +53 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/interactions.py +478 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/profiles.py +303 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/services.py +289 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +961 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/shortcuts.py +285 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/status_cmd.py +143 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/user_playbooks.py +373 -0
- package/plugin/vendor/reflexio/reflexio/cli/env_loader.py +284 -0
- package/plugin/vendor/reflexio/reflexio/cli/errors.py +217 -0
- package/plugin/vendor/reflexio/reflexio/cli/log_format.py +247 -0
- package/plugin/vendor/reflexio/reflexio/cli/output.py +867 -0
- package/plugin/vendor/reflexio/reflexio/cli/paths.py +41 -0
- package/plugin/vendor/reflexio/reflexio/cli/run_services.py +391 -0
- package/plugin/vendor/reflexio/reflexio/cli/state.py +204 -0
- package/plugin/vendor/reflexio/reflexio/cli/stop_services.py +96 -0
- package/plugin/vendor/reflexio/reflexio/cli/utils.py +329 -0
- package/plugin/vendor/reflexio/reflexio/client/__init__.py +3 -0
- package/plugin/vendor/reflexio/reflexio/client/cache.py +150 -0
- package/plugin/vendor/reflexio/reflexio/client/client.py +2613 -0
- package/plugin/vendor/reflexio/reflexio/defaults.py +23 -0
- package/plugin/vendor/reflexio/reflexio/integrations/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/.clawhubignore +7 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/README.md +274 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/TESTING.md +517 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/hook/handler.js +473 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package-lock.json +2156 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package.json +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/handler.ts +241 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/setup.ts +140 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/index.ts +130 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/publish.ts +113 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/search.ts +52 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/server.ts +103 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/sqlite-buffer.ts +156 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/user-id.ts +134 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/openclaw.plugin.json +41 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/package.json +17 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/rules/reflexio.md +24 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/reflexio/SKILL.md +48 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/publish_clawhub.sh +278 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/references/HOOK.md +164 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/install.sh +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/uninstall.sh +35 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/publish.test.ts +27 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/search.test.ts +31 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/server.test.ts +42 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/setup.test.ts +49 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/sqlite-buffer.test.ts +91 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/user-id.test.ts +50 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tsconfig.json +16 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/types/openclaw.d.ts +230 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/vitest.config.ts +13 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/README.md +120 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/TESTING.md +168 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package-lock.json +1657 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package.json +16 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/HEARTBEAT.md +6 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/README.md +84 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/SKILL.md +194 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/_meta.json +6 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/agents/reflexio-extractor.md +45 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/handler.ts +214 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/setup.ts +55 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/index.ts +327 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/consolidate.ts +233 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/dedup.ts +80 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/io.ts +155 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/openclaw-cli.ts +67 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/search.ts +33 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-playbook.ts +76 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-profile.ts +79 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/openclaw.plugin.json +46 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/package.json +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/README.md +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/full_consolidation.md +56 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/playbook_extraction.md +217 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/profile_extraction.md +132 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-consolidate/SKILL.md +33 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-embedded/SKILL.md +194 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/HOOK.md +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/architecture.md +49 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/comparison.md +31 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/future-work.md +47 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/porting-notes.md +52 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/install.sh +52 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/uninstall.sh +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/consolidate.test.ts +135 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/dedup.test.ts +104 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/io.test.ts +175 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/search.test.ts +66 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/smoke-test.ts +140 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-playbook.test.ts +93 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-profile.test.ts +174 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tsconfig.json +16 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/types/openclaw.d.ts +230 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/vitest.config.ts +7 -0
- package/plugin/vendor/reflexio/reflexio/lib/__init__.py +23 -0
- package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +310 -0
- package/plugin/vendor/reflexio/reflexio/lib/_base.py +225 -0
- package/plugin/vendor/reflexio/reflexio/lib/_config.py +83 -0
- package/plugin/vendor/reflexio/reflexio/lib/_dashboard.py +266 -0
- package/plugin/vendor/reflexio/reflexio/lib/_generation.py +176 -0
- package/plugin/vendor/reflexio/reflexio/lib/_interactions.py +334 -0
- package/plugin/vendor/reflexio/reflexio/lib/_operations.py +153 -0
- package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +545 -0
- package/plugin/vendor/reflexio/reflexio/lib/_reflection.py +52 -0
- package/plugin/vendor/reflexio/reflexio/lib/_search.py +167 -0
- package/plugin/vendor/reflexio/reflexio/lib/_storage_labels.py +103 -0
- package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +288 -0
- package/plugin/vendor/reflexio/reflexio/lib/reflexio_lib.py +27 -0
- package/plugin/vendor/reflexio/reflexio/models/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/braintrust_schema.py +141 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/common.py +41 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +3 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/entities.py +1103 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +63 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/eval_overview_schema.py +487 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/internal_schema.py +28 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/pending_tool_call_schema.py +83 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +766 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/service_schemas.py +9 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/stall_state_schema.py +32 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/__init__.py +3 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/converters.py +177 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/entities.py +129 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/enums.py +25 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/validators.py +280 -0
- package/plugin/vendor/reflexio/reflexio/models/config_schema.py +908 -0
- package/plugin/vendor/reflexio/reflexio/models/py.typed +0 -0
- package/plugin/vendor/reflexio/reflexio/server/OVERVIEW.md +90 -0
- package/plugin/vendor/reflexio/reflexio/server/README.md +616 -0
- package/plugin/vendor/reflexio/reflexio/server/__init__.py +210 -0
- package/plugin/vendor/reflexio/reflexio/server/__main__.py +132 -0
- package/plugin/vendor/reflexio/reflexio/server/_auth.py +25 -0
- package/plugin/vendor/reflexio/reflexio/server/api.py +2714 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/account_api.py +143 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/health_api.py +91 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/pending_tool_call_api.py +572 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/precondition_checks.py +66 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/publisher_api.py +540 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +50 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/stall_state_api.py +100 -0
- package/plugin/vendor/reflexio/reflexio/server/cache/__init__.py +15 -0
- package/plugin/vendor/reflexio/reflexio/server/cache/reflexio_cache.py +208 -0
- package/plugin/vendor/reflexio/reflexio/server/correlation.py +46 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/__init__.py +30 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/embedding_service.py +110 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/image_utils.py +55 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +1595 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/llm_utils.py +112 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +469 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +1122 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_stream_parser.py +197 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/embedding_service_provider.py +210 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/local_embedding_provider.py +213 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/nomic_embedding_provider.py +255 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/__init__.py +6 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +177 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/llm_reranker.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/tools.py +699 -0
- package/plugin/vendor/reflexio/reflexio/server/operation_limiter.py +179 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/_dispatchers.py +54 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/README.md +121 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/agent_success_evaluation/v1.0.0.prompt.md +58 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/agent_success_evaluation_with_comparison/v1.0.0.prompt.md +76 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/answer_synthesis/v1.5.2.prompt.md +88 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/compress_session_for_query/v1.3.0.prompt.md +31 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/document_expansion/v1.0.0.prompt.md +20 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.0.0.prompt.md +53 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.1.0.prompt.md +57 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.2.0.prompt.md +68 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.3.0.prompt.md +70 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.4.0.prompt.md +77 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.5.0.prompt.md +82 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.6.0.prompt.md +83 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.1.0.prompt.md +193 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.2.0.prompt.md +206 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.0.0-deprecated.prompt.md +66 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.0.0.prompt.md +43 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.1.0.prompt.md +46 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.0.0-deprecated.prompt.md +64 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.0.0.prompt.md +39 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.1.0.prompt.md +39 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.2.0.prompt.md +47 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.0.prompt.md +58 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.0.2.prompt.md +254 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.1.0.prompt.md +274 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.0.prompt.md +279 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v1.0.0.prompt.md +73 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v2.0.0.prompt.md +86 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.0.0.prompt.md +97 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.1.0.prompt.md +119 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.2.0.prompt.md +123 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.3.0.prompt.md +127 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.0.0.prompt.md +14 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.1.0.prompt.md +24 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.2.0.prompt.md +29 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.0.0.prompt.md +11 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.1.0.prompt.md +21 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.2.0.prompt.md +25 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.0.0.prompt.md +37 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.1.0.prompt.md +40 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.2.0.prompt.md +36 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v1.0.0.prompt.md +45 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v2.0.0.prompt.md +81 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v3.0.0.prompt.md +80 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate_expert/v1.0.0.prompt.md +34 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_deduplication/v1.0.0.prompt.md +116 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate/v1.0.0.prompt.md +33 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate_override/v1.0.0.prompt.md +16 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.0.0.prompt.md +140 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.1.0.prompt.md +160 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_main/v1.0.0.prompt.md +14 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/query_reformulation/v1.0.0.prompt.md +19 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/rerank_relevance/v1.1.0.prompt.md +44 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_comparison/v1.0.0.prompt.md +43 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_content_evaluation/v1.0.0.prompt.md +33 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/feedback_extraction_main_v1.jsonl +10 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/profile_update_main_v1.jsonl +10 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_manager.py +280 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_schema.py +11 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/_eval_health.py +131 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_constants.py +60 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_service.py +228 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_utils.py +87 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluator.py +372 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/delayed_group_evaluator.py +156 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/group_evaluation_runner.py +340 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/regen_jobs.py +471 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +1626 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_cron.py +196 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_encryption.py +101 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/client.py +167 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/service.py +281 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/base_configurator.py +179 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/config_storage.py +62 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/configurator.py +87 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/local_file_config_storage.py +187 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/test_config_storage.py +162 -0
- package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +112 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/distribution.py +33 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/eval_sampler.py +126 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/group_aggregation.py +192 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/hero_state.py +75 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/rule_attribution.py +97 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/service.py +515 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/shadow_aggregation.py +90 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/agent_run_records.py +91 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/invariants.py +303 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/outcome.py +25 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/pending_tool_call_dispatch.py +351 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/plan.py +138 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/prior_answer_search.py +217 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resumable_agent.py +468 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_scheduler.py +171 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +777 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/tools.py +1125 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extractor_config_utils.py +91 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extractor_interaction_utils.py +251 -0
- package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +689 -0
- package/plugin/vendor/reflexio/reflexio/server/services/operation_state_utils.py +835 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +89 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_aggregator.py +1388 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_consolidator.py +960 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_extractor.py +436 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_generation_service.py +808 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_constants.py +28 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_utils.py +362 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/__init__.py +24 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/assistant_webhook.py +246 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/gepa_adapter.py +291 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/judge.py +97 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/models.py +96 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/optimizer.py +645 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/rollout.py +35 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scenario_resolver.py +93 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scheduler.py +174 -0
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/__init__.py +26 -0
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_document_expander.py +179 -0
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_query_reformulator.py +297 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_deduplicator.py +741 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_extractor.py +462 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service.py +734 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service_utils.py +290 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/__init__.py +17 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_extractor.py +247 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service.py +800 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service_utils.py +146 -0
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +70 -0
- package/plugin/vendor/reflexio/reflexio/server/services/search/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/service_utils.py +671 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/judge.py +184 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/outcome.py +81 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/constants.py +2 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +11 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/retention.py +154 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/retention_mixin.py +155 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +59 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +1253 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +1945 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +600 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_operations.py +346 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1378 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +747 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +263 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_shadow_verdicts.py +193 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_share_links.py +166 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_stall_state.py +217 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +153 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +372 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_base.py +71 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +235 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_operations.py +170 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +677 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +250 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +154 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_shadow_verdicts.py +130 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_share_links.py +93 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_stall_state.py +76 -0
- package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +568 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/README.md +77 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/feature_flags.py +116 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_manager.py +263 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/feature_flags.json +13 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/llm_model_setting.json +7 -0
- package/plugin/vendor/reflexio/reflexio/server/tracing.py +158 -0
- package/plugin/vendor/reflexio/reflexio/server/usage_metrics.py +113 -0
- package/plugin/vendor/reflexio/reflexio/server/uvicorn_logging.py +76 -0
- package/plugin/vendor/reflexio/reflexio/test_support/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_fixtures.py +62 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_mock.py +242 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_model_registry.py +129 -0
- package/plugin/vendor/reflexio/reflexio/test_support/skip_decorators.py +43 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from reflexio.lib._base import STORAGE_NOT_CONFIGURED_MSG, ReflexioBase
|
|
4
|
+
from reflexio.models.api_schema.retriever_schema import (
|
|
5
|
+
GetAgentSuccessEvaluationResultsRequest,
|
|
6
|
+
GetAgentSuccessEvaluationResultsResponse,
|
|
7
|
+
GetRequestsRequest,
|
|
8
|
+
GetRequestsResponse,
|
|
9
|
+
RequestData,
|
|
10
|
+
Session,
|
|
11
|
+
UnifiedSearchRequest,
|
|
12
|
+
UnifiedSearchResponse,
|
|
13
|
+
)
|
|
14
|
+
from reflexio.server.llm.model_defaults import ModelRole, resolve_model_name
|
|
15
|
+
from reflexio.server.site_var.site_var_manager import SiteVarManager
|
|
16
|
+
|
|
17
|
+
_LOGGER = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class SearchMixin(ReflexioBase):
|
|
21
|
+
def get_agent_success_evaluation_results(
|
|
22
|
+
self,
|
|
23
|
+
request: GetAgentSuccessEvaluationResultsRequest | dict,
|
|
24
|
+
) -> GetAgentSuccessEvaluationResultsResponse:
|
|
25
|
+
"""Get agent success evaluation results.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
request (Union[GetAgentSuccessEvaluationResultsRequest, dict]): The get request
|
|
29
|
+
|
|
30
|
+
Returns:
|
|
31
|
+
GetAgentSuccessEvaluationResultsResponse: Response containing agent success evaluation results
|
|
32
|
+
"""
|
|
33
|
+
if not self._is_storage_configured():
|
|
34
|
+
return GetAgentSuccessEvaluationResultsResponse(
|
|
35
|
+
success=True,
|
|
36
|
+
agent_success_evaluation_results=[],
|
|
37
|
+
msg=STORAGE_NOT_CONFIGURED_MSG,
|
|
38
|
+
)
|
|
39
|
+
if isinstance(request, dict):
|
|
40
|
+
request = GetAgentSuccessEvaluationResultsRequest(**request)
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
results = self._get_storage().get_agent_success_evaluation_results(
|
|
44
|
+
limit=request.limit or 100, agent_version=request.agent_version
|
|
45
|
+
)
|
|
46
|
+
return GetAgentSuccessEvaluationResultsResponse(
|
|
47
|
+
success=True,
|
|
48
|
+
agent_success_evaluation_results=results,
|
|
49
|
+
msg=f"Found {len(results)} evaluation result(s)",
|
|
50
|
+
)
|
|
51
|
+
except Exception as e:
|
|
52
|
+
return GetAgentSuccessEvaluationResultsResponse(
|
|
53
|
+
success=False, agent_success_evaluation_results=[], msg=str(e)
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def get_requests(
|
|
57
|
+
self,
|
|
58
|
+
request: GetRequestsRequest | dict,
|
|
59
|
+
) -> GetRequestsResponse:
|
|
60
|
+
"""Get requests with their associated interactions, grouped by session.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
request (Union[GetRequestsRequest, dict]): The get request
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
GetRequestsResponse: Response containing requests grouped by session with their interactions
|
|
67
|
+
"""
|
|
68
|
+
if not self._is_storage_configured():
|
|
69
|
+
return GetRequestsResponse(
|
|
70
|
+
success=True, sessions=[], msg=STORAGE_NOT_CONFIGURED_MSG
|
|
71
|
+
)
|
|
72
|
+
if isinstance(request, dict):
|
|
73
|
+
request = GetRequestsRequest(**request)
|
|
74
|
+
|
|
75
|
+
try:
|
|
76
|
+
# Get requests with interactions from storage (already grouped by session)
|
|
77
|
+
grouped_results = self._get_storage().get_sessions(
|
|
78
|
+
user_id=request.user_id,
|
|
79
|
+
request_id=request.request_id,
|
|
80
|
+
session_id=request.session_id,
|
|
81
|
+
start_time=(
|
|
82
|
+
int(request.start_time.timestamp()) if request.start_time else None
|
|
83
|
+
),
|
|
84
|
+
end_time=(
|
|
85
|
+
int(request.end_time.timestamp()) if request.end_time else None
|
|
86
|
+
),
|
|
87
|
+
top_k=request.top_k,
|
|
88
|
+
offset=request.offset or 0,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Transform the dictionary into Session objects
|
|
92
|
+
sessions = []
|
|
93
|
+
for group_name, request_interaction_data_models in grouped_results.items():
|
|
94
|
+
# Convert each RequestInteractionDataModel to RequestData
|
|
95
|
+
request_data_list = [
|
|
96
|
+
RequestData(
|
|
97
|
+
request=request_interaction.request,
|
|
98
|
+
interactions=request_interaction.interactions,
|
|
99
|
+
)
|
|
100
|
+
for request_interaction in request_interaction_data_models
|
|
101
|
+
]
|
|
102
|
+
sessions.append(
|
|
103
|
+
Session(session_id=group_name, requests=request_data_list)
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# Determine has_more: count total requests returned across all groups
|
|
107
|
+
total_returned = sum(len(s.requests) for s in sessions)
|
|
108
|
+
effective_limit = request.top_k or 100
|
|
109
|
+
has_more = total_returned >= effective_limit
|
|
110
|
+
|
|
111
|
+
return GetRequestsResponse(
|
|
112
|
+
success=True,
|
|
113
|
+
sessions=sessions,
|
|
114
|
+
has_more=has_more,
|
|
115
|
+
msg=f"Found {total_returned} request(s) in {len(sessions)} session(s)",
|
|
116
|
+
)
|
|
117
|
+
except Exception as e:
|
|
118
|
+
return GetRequestsResponse(success=False, sessions=[], msg=str(e))
|
|
119
|
+
|
|
120
|
+
def unified_search(
|
|
121
|
+
self,
|
|
122
|
+
request: UnifiedSearchRequest | dict,
|
|
123
|
+
org_id: str,
|
|
124
|
+
) -> UnifiedSearchResponse:
|
|
125
|
+
"""Search across all entity types (profiles, feedbacks, raw_feedbacks) in parallel.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
request (Union[UnifiedSearchRequest, dict]): The unified search request
|
|
129
|
+
org_id (str): Organization ID (used for feature flag checks)
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
UnifiedSearchResponse: Combined results from all entity types
|
|
133
|
+
"""
|
|
134
|
+
if not self._is_storage_configured():
|
|
135
|
+
return UnifiedSearchResponse(success=True, msg=STORAGE_NOT_CONFIGURED_MSG)
|
|
136
|
+
if isinstance(request, dict):
|
|
137
|
+
request = UnifiedSearchRequest(**request)
|
|
138
|
+
|
|
139
|
+
config = self.request_context.configurator.get_config()
|
|
140
|
+
|
|
141
|
+
from reflexio.server.services.unified_search_service import run_unified_search
|
|
142
|
+
|
|
143
|
+
config_llm_config = config.llm_config if config else None
|
|
144
|
+
|
|
145
|
+
# Resolve pre_retrieval_model_name: config override → site var → auto-detect
|
|
146
|
+
model_setting = SiteVarManager().get_site_var("llm_model_setting")
|
|
147
|
+
site_var = model_setting if isinstance(model_setting, dict) else {}
|
|
148
|
+
api_key_config = config.api_key_config if config else None
|
|
149
|
+
|
|
150
|
+
pre_retrieval_model_name = resolve_model_name(
|
|
151
|
+
ModelRole.PRE_RETRIEVAL,
|
|
152
|
+
site_var_value=site_var.get("pre_retrieval_model_name"),
|
|
153
|
+
config_override=config_llm_config.pre_retrieval_model_name
|
|
154
|
+
if config_llm_config
|
|
155
|
+
else None,
|
|
156
|
+
api_key_config=api_key_config,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
return run_unified_search(
|
|
160
|
+
request=request,
|
|
161
|
+
org_id=org_id,
|
|
162
|
+
storage=self._get_storage(),
|
|
163
|
+
llm_client=self.llm_client,
|
|
164
|
+
prompt_manager=self.request_context.prompt_manager,
|
|
165
|
+
pre_retrieval_model_name=pre_retrieval_model_name,
|
|
166
|
+
retrieval_floor=config.retrieval_floor if config else None,
|
|
167
|
+
)
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"""Shared helpers for describing + masking storage configurations.
|
|
2
|
+
|
|
3
|
+
Used by the publish diagnostics, the whoami endpoint, and the config
|
|
4
|
+
show/pull commands so every surface labels storage the same way and
|
|
5
|
+
masks credentials with the same rules.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from reflexio.models.config_schema import (
|
|
11
|
+
StorageConfig,
|
|
12
|
+
StorageConfigSQLite,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def describe_storage(
|
|
17
|
+
storage_config: StorageConfig | None,
|
|
18
|
+
) -> tuple[str | None, str | None]:
|
|
19
|
+
"""Map a ``StorageConfig`` to a ``(storage_type, masked_label)`` pair.
|
|
20
|
+
|
|
21
|
+
The type is a short slug ("sqlite", "supabase", "postgres",
|
|
22
|
+
"local_dir") suitable for grouping; the label is a short,
|
|
23
|
+
human-readable string with any secret material masked so it's safe
|
|
24
|
+
to print anywhere.
|
|
25
|
+
|
|
26
|
+
Enterprise-only storage types (Supabase, Postgres, local directory)
|
|
27
|
+
are matched by class name so we don't take a hard import dependency
|
|
28
|
+
on ``reflexio_ext`` from the open-source package.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
storage_config: The storage configuration to describe.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
tuple[str | None, str | None]: ``(storage_type, storage_label)``,
|
|
35
|
+
or ``(None, None)`` when no storage is configured.
|
|
36
|
+
"""
|
|
37
|
+
if storage_config is None:
|
|
38
|
+
return None, None
|
|
39
|
+
|
|
40
|
+
cls_name = type(storage_config).__name__
|
|
41
|
+
|
|
42
|
+
if isinstance(storage_config, StorageConfigSQLite):
|
|
43
|
+
return "sqlite", storage_config.db_path or "<default sqlite>"
|
|
44
|
+
|
|
45
|
+
if cls_name == "StorageConfigSupabase":
|
|
46
|
+
url = getattr(storage_config, "url", None)
|
|
47
|
+
return "supabase", mask_url(url) if url else "<supabase>"
|
|
48
|
+
if cls_name == "StorageConfigPostgres":
|
|
49
|
+
db_url = getattr(storage_config, "db_url", None)
|
|
50
|
+
return "postgres", mask_url(db_url) if db_url else "<postgres>"
|
|
51
|
+
if cls_name == "StorageConfigLocal":
|
|
52
|
+
return "local_dir", getattr(storage_config, "dir_path", None) or "<local>"
|
|
53
|
+
|
|
54
|
+
return cls_name.removeprefix("StorageConfig").lower() or None, cls_name
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def mask_url(value: str) -> str:
|
|
58
|
+
"""Mask the middle of a URL/host while keeping scheme + domain tail.
|
|
59
|
+
|
|
60
|
+
Examples:
|
|
61
|
+
``https://jpkjckbyxrdefzomiyse.supabase.co`` →
|
|
62
|
+
``https://jpkj...supabase.co``
|
|
63
|
+
|
|
64
|
+
``postgresql://user:pass@host.supabase.com:6543/postgres`` →
|
|
65
|
+
``postgresql://***@host.supabase.com:6543/postgres``
|
|
66
|
+
"""
|
|
67
|
+
if not value:
|
|
68
|
+
return ""
|
|
69
|
+
|
|
70
|
+
# Postgres / user-info URLs: hide the credentials segment entirely.
|
|
71
|
+
if "@" in value and "://" in value:
|
|
72
|
+
scheme, rest = value.split("://", 1)
|
|
73
|
+
_, host_part = rest.split("@", 1)
|
|
74
|
+
return f"{scheme}://***@{host_part}"
|
|
75
|
+
|
|
76
|
+
# HTTP(S) URLs: keep scheme, show first 4 chars of host, then tail domain.
|
|
77
|
+
if "://" in value:
|
|
78
|
+
scheme, rest = value.split("://", 1)
|
|
79
|
+
host = rest.split("/", 1)[0]
|
|
80
|
+
if "." not in host:
|
|
81
|
+
return f"{scheme}://{_short_head(host)}..."
|
|
82
|
+
head, tail = host.split(".", 1)
|
|
83
|
+
return f"{scheme}://{_short_head(head)}...{tail}"
|
|
84
|
+
|
|
85
|
+
# Plain strings (keys, paths): keep the first 4 chars.
|
|
86
|
+
return _short_head(value) + "..."
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def mask_secret(value: str) -> str:
|
|
90
|
+
"""Mask a secret string, keeping only the first 4 and last 2 characters.
|
|
91
|
+
|
|
92
|
+
Returns ``"<empty>"`` for empty inputs so the output is always printable.
|
|
93
|
+
"""
|
|
94
|
+
if not value:
|
|
95
|
+
return "<empty>"
|
|
96
|
+
if len(value) <= 8:
|
|
97
|
+
return "*" * len(value)
|
|
98
|
+
return f"{value[:4]}...{value[-2:]}"
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _short_head(value: str) -> str:
|
|
102
|
+
"""Return the first 4 characters of ``value`` (or the full string if shorter)."""
|
|
103
|
+
return value[:4] if len(value) > 4 else value
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
from reflexio.lib._base import (
|
|
2
|
+
STORAGE_NOT_CONFIGURED_MSG,
|
|
3
|
+
ReflexioBase,
|
|
4
|
+
_require_storage,
|
|
5
|
+
)
|
|
6
|
+
from reflexio.models.api_schema.retriever_schema import (
|
|
7
|
+
GetUserPlaybooksRequest,
|
|
8
|
+
GetUserPlaybooksResponse,
|
|
9
|
+
SearchUserPlaybookRequest,
|
|
10
|
+
SearchUserPlaybookResponse,
|
|
11
|
+
UpdateUserPlaybookRequest,
|
|
12
|
+
UpdateUserPlaybookResponse,
|
|
13
|
+
)
|
|
14
|
+
from reflexio.models.api_schema.service_schemas import (
|
|
15
|
+
AddUserPlaybookRequest,
|
|
16
|
+
AddUserPlaybookResponse,
|
|
17
|
+
BulkDeleteResponse,
|
|
18
|
+
DeleteUserPlaybookRequest,
|
|
19
|
+
DeleteUserPlaybookResponse,
|
|
20
|
+
DeleteUserPlaybooksByIdsRequest,
|
|
21
|
+
DowngradeUserPlaybooksRequest,
|
|
22
|
+
DowngradeUserPlaybooksResponse,
|
|
23
|
+
UpgradeUserPlaybooksRequest,
|
|
24
|
+
UpgradeUserPlaybooksResponse,
|
|
25
|
+
)
|
|
26
|
+
from reflexio.models.config_schema import SearchOptions
|
|
27
|
+
from reflexio.server.services.playbook.playbook_generation_service import (
|
|
28
|
+
PlaybookGenerationService,
|
|
29
|
+
)
|
|
30
|
+
from reflexio.server.tracing import profile_step
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class UserPlaybookMixin(ReflexioBase):
|
|
34
|
+
def get_user_playbooks(
|
|
35
|
+
self,
|
|
36
|
+
request: GetUserPlaybooksRequest | dict,
|
|
37
|
+
) -> GetUserPlaybooksResponse:
|
|
38
|
+
"""Get user playbooks.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
request (Union[GetUserPlaybooksRequest, dict]): The get request
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
GetUserPlaybooksResponse: Response containing user playbooks
|
|
45
|
+
"""
|
|
46
|
+
if not self._is_storage_configured():
|
|
47
|
+
return GetUserPlaybooksResponse(
|
|
48
|
+
success=True, user_playbooks=[], msg=STORAGE_NOT_CONFIGURED_MSG
|
|
49
|
+
)
|
|
50
|
+
if isinstance(request, dict):
|
|
51
|
+
request = GetUserPlaybooksRequest(**request)
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
user_playbooks = self._get_storage().get_user_playbooks(
|
|
55
|
+
limit=request.limit or 100,
|
|
56
|
+
user_id=request.user_id,
|
|
57
|
+
playbook_name=request.playbook_name,
|
|
58
|
+
agent_version=request.agent_version,
|
|
59
|
+
status_filter=request.status_filter,
|
|
60
|
+
)
|
|
61
|
+
return GetUserPlaybooksResponse(
|
|
62
|
+
success=True,
|
|
63
|
+
user_playbooks=user_playbooks,
|
|
64
|
+
msg=f"Found {len(user_playbooks)} user playbook(s)",
|
|
65
|
+
)
|
|
66
|
+
except Exception as e:
|
|
67
|
+
return GetUserPlaybooksResponse(
|
|
68
|
+
success=False, user_playbooks=[], msg=str(e)
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
def add_user_playbook(
|
|
72
|
+
self,
|
|
73
|
+
request: AddUserPlaybookRequest | dict,
|
|
74
|
+
) -> AddUserPlaybookResponse:
|
|
75
|
+
"""Add user playbooks directly to storage.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
request (Union[AddUserPlaybookRequest, dict]): The add request containing user playbooks
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
AddUserPlaybookResponse: Response containing success status, message, and count of added playbooks
|
|
82
|
+
"""
|
|
83
|
+
if not self._is_storage_configured():
|
|
84
|
+
return AddUserPlaybookResponse(
|
|
85
|
+
success=False, message=STORAGE_NOT_CONFIGURED_MSG
|
|
86
|
+
)
|
|
87
|
+
if isinstance(request, dict):
|
|
88
|
+
request = AddUserPlaybookRequest(**request)
|
|
89
|
+
|
|
90
|
+
try:
|
|
91
|
+
self._get_storage().save_user_playbooks(list(request.user_playbooks))
|
|
92
|
+
return AddUserPlaybookResponse(
|
|
93
|
+
success=True,
|
|
94
|
+
added_count=len(request.user_playbooks),
|
|
95
|
+
message=f"Added {len(request.user_playbooks)} item(s)",
|
|
96
|
+
)
|
|
97
|
+
except Exception as e:
|
|
98
|
+
return AddUserPlaybookResponse(success=False, message=str(e))
|
|
99
|
+
|
|
100
|
+
def search_user_playbooks(
|
|
101
|
+
self,
|
|
102
|
+
request: SearchUserPlaybookRequest | dict,
|
|
103
|
+
) -> SearchUserPlaybookResponse:
|
|
104
|
+
"""Search user playbooks with advanced filtering and semantic search.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
request (Union[SearchUserPlaybookRequest, dict]): The search request
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
SearchUserPlaybookResponse: Response containing matching user playbooks
|
|
111
|
+
"""
|
|
112
|
+
if not self._is_storage_configured():
|
|
113
|
+
return SearchUserPlaybookResponse(
|
|
114
|
+
success=True, user_playbooks=[], msg=STORAGE_NOT_CONFIGURED_MSG
|
|
115
|
+
)
|
|
116
|
+
if isinstance(request, dict):
|
|
117
|
+
request = SearchUserPlaybookRequest(**request)
|
|
118
|
+
|
|
119
|
+
try:
|
|
120
|
+
query = (
|
|
121
|
+
self._reformulate_query(
|
|
122
|
+
request.query, enabled=bool(request.enable_reformulation)
|
|
123
|
+
)
|
|
124
|
+
or request.query
|
|
125
|
+
)
|
|
126
|
+
search_request = request.model_copy(update={"query": query})
|
|
127
|
+
query_embedding = self._maybe_get_query_embedding(
|
|
128
|
+
search_request.query, search_request.search_mode
|
|
129
|
+
)
|
|
130
|
+
options = (
|
|
131
|
+
SearchOptions(query_embedding=query_embedding)
|
|
132
|
+
if query_embedding
|
|
133
|
+
else None
|
|
134
|
+
)
|
|
135
|
+
with profile_step(
|
|
136
|
+
"search.storage",
|
|
137
|
+
entity_type="user_playbooks",
|
|
138
|
+
search_mode=search_request.search_mode,
|
|
139
|
+
top_k=search_request.top_k,
|
|
140
|
+
) as span:
|
|
141
|
+
user_playbooks = self._get_storage().search_user_playbooks(
|
|
142
|
+
search_request, options
|
|
143
|
+
)
|
|
144
|
+
span.set_data("result_count", len(user_playbooks))
|
|
145
|
+
return SearchUserPlaybookResponse(
|
|
146
|
+
success=True,
|
|
147
|
+
user_playbooks=user_playbooks,
|
|
148
|
+
msg=f"Found {len(user_playbooks)} matching user playbook(s)",
|
|
149
|
+
)
|
|
150
|
+
except Exception as e:
|
|
151
|
+
return SearchUserPlaybookResponse(
|
|
152
|
+
success=False, user_playbooks=[], msg=str(e)
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
@_require_storage(DeleteUserPlaybookResponse)
|
|
156
|
+
def delete_user_playbook(
|
|
157
|
+
self,
|
|
158
|
+
request: DeleteUserPlaybookRequest | dict,
|
|
159
|
+
) -> DeleteUserPlaybookResponse:
|
|
160
|
+
"""Delete a user playbook by ID.
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
request (DeleteUserPlaybookRequest): The delete request containing user_playbook_id
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
DeleteUserPlaybookResponse: Response containing success status and message
|
|
167
|
+
"""
|
|
168
|
+
if isinstance(request, dict):
|
|
169
|
+
request = DeleteUserPlaybookRequest(**request)
|
|
170
|
+
self._get_storage().delete_user_playbook(request.user_playbook_id)
|
|
171
|
+
return DeleteUserPlaybookResponse(success=True, message="Deleted successfully")
|
|
172
|
+
|
|
173
|
+
@_require_storage(BulkDeleteResponse)
|
|
174
|
+
def delete_user_playbooks_by_ids_bulk(
|
|
175
|
+
self,
|
|
176
|
+
request: DeleteUserPlaybooksByIdsRequest | dict,
|
|
177
|
+
) -> BulkDeleteResponse:
|
|
178
|
+
"""Delete user playbooks by their IDs.
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
request (DeleteUserPlaybooksByIdsRequest): The delete request containing user_playbook_ids
|
|
182
|
+
|
|
183
|
+
Returns:
|
|
184
|
+
BulkDeleteResponse: Response containing success status and deleted count
|
|
185
|
+
"""
|
|
186
|
+
if isinstance(request, dict):
|
|
187
|
+
request = DeleteUserPlaybooksByIdsRequest(**request)
|
|
188
|
+
deleted = self._get_storage().delete_user_playbooks_by_ids(
|
|
189
|
+
request.user_playbook_ids
|
|
190
|
+
)
|
|
191
|
+
return BulkDeleteResponse(
|
|
192
|
+
success=True, deleted_count=deleted, message=f"Deleted {deleted} item(s)"
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
@_require_storage(BulkDeleteResponse)
|
|
196
|
+
def delete_all_user_playbooks_bulk(self) -> BulkDeleteResponse:
|
|
197
|
+
"""Delete all user playbooks (only user playbooks, not agent playbooks).
|
|
198
|
+
|
|
199
|
+
Unlike :meth:`delete_all_playbooks_bulk` on ``AgentPlaybookMixin``
|
|
200
|
+
(which cascades to both user and agent playbooks), this method
|
|
201
|
+
scopes the deletion strictly to user playbooks. Use this from
|
|
202
|
+
CLI or API callers that want per-entity semantics.
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
BulkDeleteResponse: Response containing success status and message.
|
|
206
|
+
"""
|
|
207
|
+
self._get_storage().delete_all_user_playbooks()
|
|
208
|
+
return BulkDeleteResponse(success=True, message="Deleted successfully")
|
|
209
|
+
|
|
210
|
+
@_require_storage(UpdateUserPlaybookResponse, msg_field="msg")
|
|
211
|
+
def update_user_playbook(
|
|
212
|
+
self,
|
|
213
|
+
request: UpdateUserPlaybookRequest | dict,
|
|
214
|
+
) -> UpdateUserPlaybookResponse:
|
|
215
|
+
"""Update editable fields of a user playbook.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
request (Union[UpdateUserPlaybookRequest, dict]): The update request
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
UpdateUserPlaybookResponse: Response containing success status and message
|
|
222
|
+
"""
|
|
223
|
+
if isinstance(request, dict):
|
|
224
|
+
request = UpdateUserPlaybookRequest(**request)
|
|
225
|
+
self._get_storage().update_user_playbook(
|
|
226
|
+
user_playbook_id=request.user_playbook_id,
|
|
227
|
+
playbook_name=request.playbook_name,
|
|
228
|
+
content=request.content,
|
|
229
|
+
trigger=request.trigger,
|
|
230
|
+
rationale=request.rationale,
|
|
231
|
+
)
|
|
232
|
+
return UpdateUserPlaybookResponse(
|
|
233
|
+
success=True, msg="User playbook updated successfully"
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
def upgrade_all_user_playbooks(
|
|
237
|
+
self,
|
|
238
|
+
request: UpgradeUserPlaybooksRequest | dict | None = None,
|
|
239
|
+
) -> UpgradeUserPlaybooksResponse:
|
|
240
|
+
"""Upgrade all user playbooks by deleting old ARCHIVED, archiving CURRENT, and promoting PENDING.
|
|
241
|
+
|
|
242
|
+
Args:
|
|
243
|
+
request (Union[UpgradeUserPlaybooksRequest, dict], optional): The upgrade request
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
UpgradeUserPlaybooksResponse: Response containing success status and counts
|
|
247
|
+
"""
|
|
248
|
+
if not self._is_storage_configured():
|
|
249
|
+
return UpgradeUserPlaybooksResponse(
|
|
250
|
+
success=False, message=STORAGE_NOT_CONFIGURED_MSG
|
|
251
|
+
)
|
|
252
|
+
if isinstance(request, dict):
|
|
253
|
+
request = UpgradeUserPlaybooksRequest(**request)
|
|
254
|
+
elif request is None:
|
|
255
|
+
request = UpgradeUserPlaybooksRequest()
|
|
256
|
+
|
|
257
|
+
service = PlaybookGenerationService(
|
|
258
|
+
llm_client=self.llm_client,
|
|
259
|
+
request_context=self.request_context,
|
|
260
|
+
)
|
|
261
|
+
return service.run_upgrade(request) # type: ignore[reportArgumentType]
|
|
262
|
+
|
|
263
|
+
def downgrade_all_user_playbooks(
|
|
264
|
+
self,
|
|
265
|
+
request: DowngradeUserPlaybooksRequest | dict | None = None,
|
|
266
|
+
) -> DowngradeUserPlaybooksResponse:
|
|
267
|
+
"""Downgrade all user playbooks by archiving CURRENT and restoring ARCHIVED.
|
|
268
|
+
|
|
269
|
+
Args:
|
|
270
|
+
request (Union[DowngradeUserPlaybooksRequest, dict], optional): The downgrade request
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
DowngradeUserPlaybooksResponse: Response containing success status and counts
|
|
274
|
+
"""
|
|
275
|
+
if not self._is_storage_configured():
|
|
276
|
+
return DowngradeUserPlaybooksResponse(
|
|
277
|
+
success=False, message=STORAGE_NOT_CONFIGURED_MSG
|
|
278
|
+
)
|
|
279
|
+
if isinstance(request, dict):
|
|
280
|
+
request = DowngradeUserPlaybooksRequest(**request)
|
|
281
|
+
elif request is None:
|
|
282
|
+
request = DowngradeUserPlaybooksRequest()
|
|
283
|
+
|
|
284
|
+
service = PlaybookGenerationService(
|
|
285
|
+
llm_client=self.llm_client,
|
|
286
|
+
request_context=self.request_context,
|
|
287
|
+
)
|
|
288
|
+
return service.run_downgrade(request) # type: ignore[reportArgumentType]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Reflexio facade — assembled from domain mixins."""
|
|
2
|
+
|
|
3
|
+
from reflexio.lib._agent_playbook import AgentPlaybookMixin
|
|
4
|
+
from reflexio.lib._config import ConfigMixin
|
|
5
|
+
from reflexio.lib._dashboard import DashboardMixin
|
|
6
|
+
from reflexio.lib._generation import GenerationMixin
|
|
7
|
+
from reflexio.lib._interactions import InteractionsMixin
|
|
8
|
+
from reflexio.lib._operations import OperationsMixin
|
|
9
|
+
from reflexio.lib._profiles import ProfilesMixin
|
|
10
|
+
from reflexio.lib._reflection import ReflectionMixin
|
|
11
|
+
from reflexio.lib._search import SearchMixin
|
|
12
|
+
from reflexio.lib._user_playbook import UserPlaybookMixin
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Reflexio(
|
|
16
|
+
InteractionsMixin,
|
|
17
|
+
ProfilesMixin,
|
|
18
|
+
AgentPlaybookMixin,
|
|
19
|
+
UserPlaybookMixin,
|
|
20
|
+
ConfigMixin,
|
|
21
|
+
GenerationMixin,
|
|
22
|
+
ReflectionMixin,
|
|
23
|
+
OperationsMixin,
|
|
24
|
+
DashboardMixin,
|
|
25
|
+
SearchMixin,
|
|
26
|
+
):
|
|
27
|
+
"""Synchronous facade providing a unified API for all Reflexio operations."""
|
|
File without changes
|
|
File without changes
|