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.
- package/.claude-plugin/marketplace.json +3 -3
- package/README.md +1 -1
- package/bin/claude-smart.js +2 -2
- 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 +23 -3
- package/plugin/pyproject.toml +3 -3
- package/plugin/scripts/_lib.sh +91 -0
- package/plugin/scripts/backend-service.sh +51 -4
- package/plugin/scripts/cli.sh +3 -1
- 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/ensure-plugin-root.sh +1 -0
- package/plugin/scripts/hook_entry.sh +6 -3
- package/plugin/scripts/smart-install.sh +3 -2
- package/plugin/src/README.md +57 -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 +126 -5
- package/plugin/vendor/reflexio/.env.example +62 -0
- package/plugin/vendor/reflexio/LICENSE +201 -0
- package/plugin/vendor/reflexio/README.md +338 -0
- package/plugin/vendor/reflexio/pyproject.toml +274 -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 +265 -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 +964 -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 +1112 -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 +768 -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 +333 -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 +622 -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 +2868 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/README.md +34 -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 +562 -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 +359 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/image_utils.py +55 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +1871 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/llm_utils.py +140 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +479 -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 +338 -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 +288 -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 +187 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/llm_reranker.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/tools.py +716 -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_consolidation/v2.3.1.prompt.md +69 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.2.prompt.md +71 -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 +283 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.2.prompt.md +234 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.3.prompt.md +244 -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 +137 -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/README.md +58 -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 +336 -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 +1668 -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/embedding_text.py +62 -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 +358 -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 +535 -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 +779 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/tools.py +1125 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extractor_config_utils.py +94 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extractor_interaction_utils.py +251 -0
- package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +702 -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 +1045 -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 +772 -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 +737 -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 +803 -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 +80 -0
- package/plugin/vendor/reflexio/reflexio/server/services/search/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/service_utils.py +756 -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 +1298 -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 +384 -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 +572 -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,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
|