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
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"name": "Yi Lu"
|
|
5
5
|
},
|
|
6
6
|
"metadata": {
|
|
7
|
-
"description": "claude-smart — self-improving Claude Code plugin via reflexio"
|
|
7
|
+
"description": "claude-smart — self-improving Claude Code and Codex plugin via reflexio"
|
|
8
8
|
},
|
|
9
9
|
"plugins": [
|
|
10
10
|
{
|
|
11
11
|
"name": "claude-smart",
|
|
12
|
-
"version": "0.2.
|
|
12
|
+
"version": "0.2.43",
|
|
13
13
|
"source": "./plugin",
|
|
14
|
-
"description": "
|
|
14
|
+
"description": "Turns user corrections into project-specific and shared skills via reflexio — uses Claude Code or Codex as the LLM backend (no external API key required)"
|
|
15
15
|
}
|
|
16
16
|
]
|
|
17
17
|
}
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License">
|
|
14
14
|
</a>
|
|
15
15
|
<a href="plugin/pyproject.toml">
|
|
16
|
-
<img src="https://img.shields.io/badge/version-0.2.
|
|
16
|
+
<img src="https://img.shields.io/badge/version-0.2.43-green.svg" alt="Version">
|
|
17
17
|
</a>
|
|
18
18
|
<a href="plugin/pyproject.toml">
|
|
19
19
|
<img src="https://img.shields.io/badge/python-%3E%3D3.12-brightgreen.svg" alt="Python">
|
package/package.json
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-smart",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Self-improving Claude Code plugin —
|
|
3
|
+
"version": "0.2.43",
|
|
4
|
+
"description": "Self-improving Claude Code and Codex plugin — turns corrections into durable skills via reflexio",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
7
7
|
"claude-code",
|
|
8
|
+
"claude-code-plugin",
|
|
9
|
+
"codex",
|
|
10
|
+
"codex-plugin",
|
|
11
|
+
"memory",
|
|
12
|
+
"agent-memory",
|
|
8
13
|
"plugin",
|
|
9
14
|
"reflexio",
|
|
10
15
|
"self-improvement",
|
|
11
|
-
"
|
|
16
|
+
"self-improving-agents",
|
|
17
|
+
"skills",
|
|
12
18
|
"learning"
|
|
13
19
|
],
|
|
14
20
|
"homepage": "https://github.com/ReflexioAI/claude-smart#readme",
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-smart",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "Self-improving Claude Code plugin —
|
|
3
|
+
"version": "0.2.43",
|
|
4
|
+
"description": "Self-improving Claude Code and Codex plugin — turns corrections into durable skills via reflexio",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Yi Lu"
|
|
7
7
|
},
|
|
8
8
|
"keywords": [
|
|
9
9
|
"claude",
|
|
10
10
|
"claude-code",
|
|
11
|
+
"claude-code-plugin",
|
|
12
|
+
"codex",
|
|
13
|
+
"codex-plugin",
|
|
14
|
+
"memory",
|
|
15
|
+
"agent-memory",
|
|
11
16
|
"plugin",
|
|
12
17
|
"reflexio",
|
|
13
18
|
"self-improvement",
|
|
14
|
-
"
|
|
19
|
+
"self-improving-agents",
|
|
20
|
+
"skills",
|
|
15
21
|
"learning"
|
|
16
22
|
]
|
|
17
23
|
}
|
package/plugin/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# claude-smart
|
|
2
2
|
|
|
3
|
-
Self-improving [Claude Code](https://claude.com/claude-code) plugin — turns your corrections into durable
|
|
3
|
+
Self-improving [Claude Code](https://claude.com/claude-code) and Codex plugin — turns your corrections into durable skills that future sessions follow, via [reflexio](https://github.com/ReflexioAI/reflexio).
|
|
4
4
|
|
|
5
|
-
This directory is the published Python package (`claude-smart` on PyPI) and the Claude Code plugin payload shipped through the marketplace. For the project overview, install instructions, benchmarks, and feature walkthrough, see the [top-level README](https://github.com/ReflexioAI/claude-smart#readme).
|
|
5
|
+
This directory is the published Python package (`claude-smart` on PyPI) and the Claude Code/Codex plugin payload shipped through the marketplace. For the project overview, install instructions, benchmarks, and feature walkthrough, see the [top-level README](https://github.com/ReflexioAI/claude-smart#readme).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
package/plugin/pyproject.toml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "claude-smart"
|
|
3
|
-
version = "0.2.
|
|
4
|
-
description = "Self-improving Claude Code plugin —
|
|
3
|
+
version = "0.2.43"
|
|
4
|
+
description = "Self-improving Claude Code and Codex plugin — turns corrections into durable skills via reflexio"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
7
7
|
dependencies = [
|
package/plugin/scripts/_lib.sh
CHANGED
|
@@ -220,6 +220,97 @@ importlib.import_module(sys.argv[1])
|
|
|
220
220
|
PY
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
+
claude_smart_canonical_dir() {
|
|
224
|
+
local dir
|
|
225
|
+
dir="$1"
|
|
226
|
+
[ -d "$dir" ] || return 1
|
|
227
|
+
(cd "$dir" 2>/dev/null && pwd -P)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
# True when $1 canonicalizes to a plugin directory that physically lives
|
|
231
|
+
# *inside* ~/.reflexio. claude-smart's real install never places the live
|
|
232
|
+
# plugin tree there: the only entry under ~/.reflexio is the `plugin-root`
|
|
233
|
+
# symlink, whose `pwd -P` resolves to a cache dir *outside* ~/.reflexio
|
|
234
|
+
# (~/.claude, ~/.codex, or the npm global). So any plugin root that resolves
|
|
235
|
+
# to a descendant of ~/.reflexio is a stray host-made copy — e.g. the Windows
|
|
236
|
+
# cwd-derived `CUsers...` directories from issue #65 — that we must not
|
|
237
|
+
# bootstrap a heavy .venv/node_modules into.
|
|
238
|
+
#
|
|
239
|
+
# Detection is structural (descendant-of-~/.reflexio + plugin markers) rather
|
|
240
|
+
# than name-based on purpose: the host mangles the cwd differently per drive
|
|
241
|
+
# and user dir (C:\Users -> CUsers..., D:\repos -> Drepos..., varying case),
|
|
242
|
+
# so matching a fixed prefix like `Cu*` misses most real copies.
|
|
243
|
+
claude_smart_is_reflexio_session_copy() {
|
|
244
|
+
local plugin_root reflexio_root
|
|
245
|
+
plugin_root="$(claude_smart_canonical_dir "$1" 2>/dev/null || true)"
|
|
246
|
+
[ -n "$plugin_root" ] || return 1
|
|
247
|
+
# Must look like a plugin root — not ~/.reflexio/data, /configs, or .env.
|
|
248
|
+
[ -f "$plugin_root/pyproject.toml" ] || return 1
|
|
249
|
+
[ -d "$plugin_root/scripts" ] || return 1
|
|
250
|
+
reflexio_root="$(claude_smart_canonical_dir "$HOME/.reflexio" 2>/dev/null || true)"
|
|
251
|
+
[ -n "$reflexio_root" ] || return 1
|
|
252
|
+
# Descendant of ~/.reflexio. The trailing slash on the subject plus the
|
|
253
|
+
# "/" before * pins the boundary so a sibling like ~/.reflexio-bak/plugin
|
|
254
|
+
# does not match.
|
|
255
|
+
case "$plugin_root/" in
|
|
256
|
+
"$reflexio_root"/*) return 0 ;;
|
|
257
|
+
esac
|
|
258
|
+
return 1
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
claude_smart_stable_plugin_root_for_session_copy() {
|
|
262
|
+
local current candidate current_real candidate_real glob
|
|
263
|
+
current="$1"
|
|
264
|
+
if ! claude_smart_is_reflexio_session_copy "$current"; then
|
|
265
|
+
return 1
|
|
266
|
+
fi
|
|
267
|
+
current_real="$(claude_smart_canonical_dir "$current" 2>/dev/null || true)"
|
|
268
|
+
|
|
269
|
+
for candidate in \
|
|
270
|
+
"$HOME/.reflexio/plugin-root" \
|
|
271
|
+
"$HOME/.claude/plugins/marketplaces/reflexioai/plugin" \
|
|
272
|
+
"$HOME/.codex/plugins/cache/reflexioai/claude-smart/current"
|
|
273
|
+
do
|
|
274
|
+
[ -f "$candidate/pyproject.toml" ] || continue
|
|
275
|
+
candidate_real="$(claude_smart_canonical_dir "$candidate" 2>/dev/null || true)"
|
|
276
|
+
[ -n "$candidate_real" ] || continue
|
|
277
|
+
[ "$candidate_real" != "$current_real" ] || continue
|
|
278
|
+
if claude_smart_is_reflexio_session_copy "$candidate_real"; then
|
|
279
|
+
continue
|
|
280
|
+
fi
|
|
281
|
+
printf '%s\n' "$candidate_real"
|
|
282
|
+
return 0
|
|
283
|
+
done
|
|
284
|
+
|
|
285
|
+
for glob in "$HOME/.claude/plugins/cache/reflexioai/claude-smart"/* "$HOME/.codex/plugins/cache/reflexioai/claude-smart"/*; do
|
|
286
|
+
[ -f "$glob/pyproject.toml" ] || continue
|
|
287
|
+
candidate_real="$(claude_smart_canonical_dir "$glob" 2>/dev/null || true)"
|
|
288
|
+
[ -n "$candidate_real" ] || continue
|
|
289
|
+
[ "$candidate_real" != "$current_real" ] || continue
|
|
290
|
+
if claude_smart_is_reflexio_session_copy "$candidate_real"; then
|
|
291
|
+
continue
|
|
292
|
+
fi
|
|
293
|
+
printf '%s\n' "$candidate_real"
|
|
294
|
+
return 0
|
|
295
|
+
done
|
|
296
|
+
return 1
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
claude_smart_reexec_stable_plugin_root_if_needed() {
|
|
300
|
+
local plugin_root script stable
|
|
301
|
+
plugin_root="$1"
|
|
302
|
+
script="$2"
|
|
303
|
+
stable="$(claude_smart_stable_plugin_root_for_session_copy "$plugin_root" 2>/dev/null || true)"
|
|
304
|
+
[ -n "$stable" ] || return 0
|
|
305
|
+
# `-f` not `-x`: we re-run via `exec bash <script>`, which does not need the
|
|
306
|
+
# executable bit. Cached copies on Windows/NTFS often lack +x, so requiring
|
|
307
|
+
# -x would no-op the guard on the very platform issue #65 affects.
|
|
308
|
+
[ -f "$stable/scripts/$script" ] || return 0
|
|
309
|
+
echo "[claude-smart] redirecting stray plugin copy under ~/.reflexio ($plugin_root) to stable root $stable" >&2
|
|
310
|
+
shift 2
|
|
311
|
+
exec bash "$stable/scripts/$script" "$@"
|
|
312
|
+
}
|
|
313
|
+
|
|
223
314
|
claude_smart_download() {
|
|
224
315
|
local url dest src _CS_PY
|
|
225
316
|
url="$1"
|
|
@@ -45,6 +45,7 @@ fi
|
|
|
45
45
|
# CLI dir (commonly ~/.local/bin or /opt/homebrew/bin). Pin the CLI
|
|
46
46
|
# explicitly if we can resolve it from our own (post-login-path) PATH.
|
|
47
47
|
PLUGIN_ROOT="$(cd "$HERE/.." && pwd)"
|
|
48
|
+
claude_smart_reexec_stable_plugin_root_if_needed "$PLUGIN_ROOT" "backend-service.sh" "$@"
|
|
48
49
|
|
|
49
50
|
if [ -z "${CLAUDE_SMART_CLI_PATH:-}" ]; then
|
|
50
51
|
if [ "${CLAUDE_SMART_HOST:-claude-code}" = "codex" ]; then
|
package/plugin/scripts/cli.sh
CHANGED
|
@@ -18,6 +18,7 @@ claude_smart_prepend_node_bins
|
|
|
18
18
|
claude_smart_source_reflexio_env
|
|
19
19
|
|
|
20
20
|
PLUGIN_ROOT="$(cd "$HERE/.." && pwd)"
|
|
21
|
+
claude_smart_reexec_stable_plugin_root_if_needed "$PLUGIN_ROOT" "cli.sh" "$@"
|
|
21
22
|
|
|
22
23
|
# If the Setup hook recorded an install failure, surface that reason
|
|
23
24
|
# instead of falling through to a generic "uv not found" — mirrors the
|
|
@@ -89,14 +89,82 @@ function appendLog(name, line) {
|
|
|
89
89
|
trimLog(file);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
function realDir(dir) {
|
|
93
|
+
try {
|
|
94
|
+
if (!fs.statSync(dir).isDirectory()) return null;
|
|
95
|
+
return fs.realpathSync(dir);
|
|
96
|
+
} catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function isInsideDir(parent, child) {
|
|
102
|
+
const rel = path.relative(parent, child);
|
|
103
|
+
return rel && !rel.startsWith("..") && !path.isAbsolute(rel);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function isPluginLikeRoot(root) {
|
|
107
|
+
return fs.existsSync(path.join(root, "pyproject.toml")) && fs.existsSync(path.join(root, "scripts"));
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function isReflexioStrayPluginCopy(root) {
|
|
111
|
+
if (!isPluginLikeRoot(root)) return false;
|
|
112
|
+
const rootReal = realDir(root);
|
|
113
|
+
const reflexioReal = realDir(REFLEXIO_DIR);
|
|
114
|
+
if (!rootReal || !reflexioReal) return false;
|
|
115
|
+
return isInsideDir(reflexioReal, rootReal);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function stablePluginRootForStrayCopy(root) {
|
|
119
|
+
if (!isReflexioStrayPluginCopy(root)) return null;
|
|
120
|
+
const rootReal = realDir(root);
|
|
121
|
+
const candidates = [
|
|
122
|
+
path.join(REFLEXIO_DIR, "plugin-root"),
|
|
123
|
+
path.join(HOME, ".claude", "plugins", "marketplaces", "reflexioai", "plugin"),
|
|
124
|
+
path.join(HOME, ".codex", "plugins", "cache", "reflexioai", "claude-smart", "current"),
|
|
125
|
+
];
|
|
126
|
+
for (const cacheRoot of [
|
|
127
|
+
path.join(HOME, ".claude", "plugins", "cache", "reflexioai", "claude-smart"),
|
|
128
|
+
path.join(HOME, ".codex", "plugins", "cache", "reflexioai", "claude-smart"),
|
|
129
|
+
]) {
|
|
130
|
+
try {
|
|
131
|
+
const versions = fs
|
|
132
|
+
.readdirSync(cacheRoot, { withFileTypes: true })
|
|
133
|
+
.filter((entry) => entry.isDirectory())
|
|
134
|
+
.map((entry) => path.join(cacheRoot, entry.name))
|
|
135
|
+
.sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs);
|
|
136
|
+
candidates.push(...versions);
|
|
137
|
+
} catch {
|
|
138
|
+
// Missing cache roots are fine; try the next candidate family.
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
for (const candidate of candidates) {
|
|
142
|
+
if (!isPluginLikeRoot(candidate)) continue;
|
|
143
|
+
const candidateReal = realDir(candidate);
|
|
144
|
+
if (!candidateReal || candidateReal === rootReal) continue;
|
|
145
|
+
if (isReflexioStrayPluginCopy(candidateReal)) continue;
|
|
146
|
+
return candidateReal;
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function stablePluginRoot(root) {
|
|
152
|
+
const stable = stablePluginRootForStrayCopy(root);
|
|
153
|
+
if (stable) {
|
|
154
|
+
appendLog("backend.log", `[claude-smart] redirecting stray plugin copy under ~/.reflexio (${root}) to stable root ${stable}`);
|
|
155
|
+
return stable;
|
|
156
|
+
}
|
|
157
|
+
return root;
|
|
158
|
+
}
|
|
159
|
+
|
|
92
160
|
function pluginRoot() {
|
|
93
161
|
for (const value of [process.env.CLAUDE_PLUGIN_ROOT, process.env.PLUGIN_ROOT]) {
|
|
94
162
|
if (value && fs.existsSync(path.join(value, "pyproject.toml"))) {
|
|
95
|
-
return path.resolve(value);
|
|
163
|
+
return stablePluginRoot(path.resolve(value));
|
|
96
164
|
}
|
|
97
165
|
}
|
|
98
166
|
const fromScript = path.resolve(__dirname, "..");
|
|
99
|
-
if (fs.existsSync(path.join(fromScript, "pyproject.toml"))) return fromScript;
|
|
167
|
+
if (fs.existsSync(path.join(fromScript, "pyproject.toml"))) return stablePluginRoot(fromScript);
|
|
100
168
|
const cacheRoot = path.join(HOME, ".codex", "plugins", "cache", "reflexioai", "claude-smart");
|
|
101
169
|
try {
|
|
102
170
|
const versions = fs
|
|
@@ -105,12 +173,12 @@ function pluginRoot() {
|
|
|
105
173
|
.map((entry) => path.join(cacheRoot, entry.name))
|
|
106
174
|
.sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs);
|
|
107
175
|
for (const candidate of versions) {
|
|
108
|
-
if (fs.existsSync(path.join(candidate, "pyproject.toml"))) return candidate;
|
|
176
|
+
if (fs.existsSync(path.join(candidate, "pyproject.toml"))) return stablePluginRoot(candidate);
|
|
109
177
|
}
|
|
110
178
|
} catch {
|
|
111
179
|
// Fall through to the stable plugin-root link.
|
|
112
180
|
}
|
|
113
|
-
return path.join(REFLEXIO_DIR, "plugin-root");
|
|
181
|
+
return stablePluginRoot(path.join(REFLEXIO_DIR, "plugin-root"));
|
|
114
182
|
}
|
|
115
183
|
|
|
116
184
|
function prependRuntimePath() {
|
|
@@ -27,6 +27,7 @@ claude_smart_source_login_path
|
|
|
27
27
|
claude_smart_prepend_node_bins
|
|
28
28
|
|
|
29
29
|
PLUGIN_ROOT="$(cd "$HERE/.." && pwd)"
|
|
30
|
+
claude_smart_reexec_stable_plugin_root_if_needed "$PLUGIN_ROOT" "dashboard-build.sh" "$@"
|
|
30
31
|
DASHBOARD_DIR="$PLUGIN_ROOT/dashboard"
|
|
31
32
|
|
|
32
33
|
STATE_DIR="$HOME/.claude-smart"
|
|
@@ -46,6 +46,7 @@ claude_smart_prepend_astral_bins
|
|
|
46
46
|
claude_smart_source_reflexio_env
|
|
47
47
|
|
|
48
48
|
PLUGIN_ROOT="$(cd "$HERE/.." && pwd)"
|
|
49
|
+
claude_smart_reexec_stable_plugin_root_if_needed "$PLUGIN_ROOT" "hook_entry.sh" "$@"
|
|
49
50
|
|
|
50
51
|
FAILURE_MARKER="$HOME/.claude-smart/install-failed"
|
|
51
52
|
STATE_DIR="$HOME/.claude-smart"
|
|
@@ -17,6 +17,7 @@ claude_smart_prepend_node_bins
|
|
|
17
17
|
claude_smart_source_reflexio_env
|
|
18
18
|
|
|
19
19
|
PLUGIN_ROOT="$(cd "$HERE/.." && pwd)"
|
|
20
|
+
claude_smart_reexec_stable_plugin_root_if_needed "$PLUGIN_ROOT" "smart-install.sh" "$@"
|
|
20
21
|
REPO_ROOT="$(cd "$HERE/../.." && pwd)"
|
|
21
22
|
|
|
22
23
|
MARKER_DIR="$HOME/.claude-smart"
|
|
@@ -266,6 +266,7 @@ def render_inline_compact_with_registry(
|
|
|
266
266
|
def _compact_citation_instruction(marker_parts: list[str] | None = None) -> str:
|
|
267
267
|
if os.environ.get("CLAUDE_SMART_CITATIONS", "on") == "off":
|
|
268
268
|
return ""
|
|
269
|
+
gate = cs_cite.WHEN_TO_CITE_COMPACT
|
|
269
270
|
link_style = os.environ.get(_CITATION_LINK_STYLE_ENV, "markdown")
|
|
270
271
|
if link_style == "osc8" and marker_parts:
|
|
271
272
|
marker = f"✨ claude-smart rule applied: {' | '.join(marker_parts)}"
|
|
@@ -275,15 +276,14 @@ def _compact_citation_instruction(marker_parts: list[str] | None = None) -> str:
|
|
|
275
276
|
else ""
|
|
276
277
|
)
|
|
277
278
|
return _remoteize_citation_instruction(
|
|
278
|
-
f"If
|
|
279
|
-
f"OSC 8 terminal link: `{marker}`.{separator_instruction}
|
|
280
|
-
f"Skip when unrelated."
|
|
279
|
+
f"{gate} If you do, copy this final marker exactly, preserving its "
|
|
280
|
+
f"hidden OSC 8 terminal link: `{marker}`.{separator_instruction}"
|
|
281
281
|
)
|
|
282
282
|
if link_style == "osc8":
|
|
283
283
|
return _remoteize_citation_instruction(
|
|
284
|
-
"If
|
|
285
|
-
"the same linked memory text; keep the link, but do
|
|
286
|
-
"
|
|
284
|
+
f"{gate} If you do, end with `✨ claude-smart rule applied:` "
|
|
285
|
+
"followed by the same linked memory text; keep the link, but do "
|
|
286
|
+
"not show the URL."
|
|
287
287
|
)
|
|
288
288
|
if marker_parts:
|
|
289
289
|
marker = f"✨ claude-smart rule applied: {' | '.join(marker_parts)}"
|
|
@@ -293,14 +293,13 @@ def _compact_citation_instruction(marker_parts: list[str] | None = None) -> str:
|
|
|
293
293
|
else ""
|
|
294
294
|
)
|
|
295
295
|
return _remoteize_citation_instruction(
|
|
296
|
-
f"If
|
|
297
|
-
f"`{marker}`.{separator_instruction}
|
|
296
|
+
f"{gate} If you do, copy this final marker exactly with markdown "
|
|
297
|
+
f"links: `{marker}`.{separator_instruction}"
|
|
298
298
|
)
|
|
299
299
|
return _remoteize_citation_instruction(
|
|
300
|
-
"
|
|
301
|
-
"
|
|
302
|
-
"
|
|
303
|
-
"the shown rule URL; skip the marker when unrelated."
|
|
300
|
+
f"{gate} If you do, end with one final marker like `✨ claude-smart "
|
|
301
|
+
"rule applied: [verify process state](http://localhost:3001/rules/"
|
|
302
|
+
"s1-123)` using the shown rule URL."
|
|
304
303
|
)
|
|
305
304
|
|
|
306
305
|
|
|
@@ -55,9 +55,7 @@ _APPLIED_LINK_LINE_RE = re.compile(
|
|
|
55
55
|
r"(?im)^\s*✨\s+(?:Applied|claude-smart rules? applied):\s+(?P<body>.+?)\s*$"
|
|
56
56
|
)
|
|
57
57
|
_MARKDOWN_LINK_RE = re.compile(r"\[[^\]]+\]\((?P<url>[^)]+)\)")
|
|
58
|
-
_OSC8_URL_RE = re.compile(
|
|
59
|
-
r"\x1b\]8;[^\x07\x1b]*;(?P<url>[^\x07\x1b]+)(?:\x07|\x1b\\)"
|
|
60
|
-
)
|
|
58
|
+
_OSC8_URL_RE = re.compile(r"\x1b\]8;[^\x07\x1b]*;(?P<url>[^\x07\x1b]+)(?:\x07|\x1b\\)")
|
|
61
59
|
_RAW_DASHBOARD_URL_RE = re.compile(
|
|
62
60
|
r"(?P<url>(?:https?://[^\s),\x1b\\]+)?/"
|
|
63
61
|
r"(?:skills/(?:project|shared)/[^\s),\x1b\\]+|"
|
|
@@ -65,14 +63,31 @@ _RAW_DASHBOARD_URL_RE = re.compile(
|
|
|
65
63
|
r"rules/[^\s),\x1b\\]+))"
|
|
66
64
|
)
|
|
67
65
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
66
|
+
# The single "when to cite" decision, shared across every render path so the
|
|
67
|
+
# bar can't drift between markdown / OSC8 / compact-Codex variants. The
|
|
68
|
+
# counterfactual is the deciding test; relatedness alone is not enough.
|
|
69
|
+
WHEN_TO_CITE = (
|
|
70
|
+
"When to cite: add a marker only when a listed `[cs:…]` item materially "
|
|
71
|
+
"and meaningfully changed your response — it must be clearly related to "
|
|
72
|
+
"what you actually did, and your answer would be substantively different "
|
|
73
|
+
"if the item had not been shown. The counterfactual is the deciding test: "
|
|
74
|
+
"if your response would be essentially the same without the item, omit the "
|
|
75
|
+
"marker."
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# One-line form of WHEN_TO_CITE for the compact Codex path, which renders the
|
|
79
|
+
# whole context block as a single logical line.
|
|
80
|
+
WHEN_TO_CITE_COMPACT = (
|
|
81
|
+
"Cite only if a listed memory materially and meaningfully changed your "
|
|
82
|
+
"response — counterfactual: the answer would be substantively different "
|
|
83
|
+
"without it; otherwise omit."
|
|
72
84
|
)
|
|
73
85
|
|
|
86
|
+
_COMPACT_INTRO = f"_{WHEN_TO_CITE}"
|
|
87
|
+
|
|
74
88
|
_MARKDOWN_MARKER_PARAGRAPH = (
|
|
75
|
-
"
|
|
89
|
+
"How to format: use human-readable linked titles, not raw ids. "
|
|
90
|
+
"Format for one item: "
|
|
76
91
|
"`✨ claude-smart rule applied: "
|
|
77
92
|
"[verify process state](http://localhost:3001/rules/s1-123)`. "
|
|
78
93
|
"For multiple items: "
|
|
@@ -102,14 +117,13 @@ _OSC8_EXAMPLE_MULTI = (
|
|
|
102
117
|
"\x1b]8;;\x1b\\"
|
|
103
118
|
)
|
|
104
119
|
_OSC8_MARKER_PARAGRAPH = (
|
|
105
|
-
"
|
|
106
|
-
"URLs. Format for one item: "
|
|
120
|
+
"How to format: use human-readable OSC 8 terminal hyperlinks, not raw ids "
|
|
121
|
+
"or visible URLs. Format for one item: "
|
|
107
122
|
f"`{_OSC8_EXAMPLE_ONE}`. For multiple items: "
|
|
108
123
|
f"`{_OSC8_EXAMPLE_MULTI}`. Use the dashboard URL shown beside each cited "
|
|
109
124
|
"item; do not invent URLs. Separate multiple linked memories with the "
|
|
110
125
|
"visible ` | ` separator. If OSC 8 is unavailable, use markdown links. "
|
|
111
|
-
"Do not include `[cs:…]` ids in the marker line.
|
|
112
|
-
"after using listed memory._"
|
|
126
|
+
"Do not include `[cs:…]` ids in the marker line._"
|
|
113
127
|
)
|
|
114
128
|
|
|
115
129
|
CITATION_MODES = ("on", "auto", "marker-only", "off")
|
|
@@ -19,7 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
import logging
|
|
20
20
|
import os
|
|
21
21
|
import subprocess # noqa: S404 — git invocation with a fixed flag set.
|
|
22
|
-
from pathlib import Path
|
|
22
|
+
from pathlib import Path, PureWindowsPath
|
|
23
23
|
|
|
24
24
|
from claude_smart import env_config
|
|
25
25
|
|
|
@@ -28,6 +28,14 @@ _LOGGER = logging.getLogger(__name__)
|
|
|
28
28
|
_USER_ID_OVERRIDE_ENV = "REFLEXIO_USER_ID"
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
def _basename(path: str | os.PathLike[str]) -> str:
|
|
32
|
+
"""Return a cwd basename, including native Windows paths under Git Bash."""
|
|
33
|
+
text = os.fspath(path)
|
|
34
|
+
if "\\" in text or (len(text) >= 2 and text[0].isalpha() and text[1] == ":"):
|
|
35
|
+
return PureWindowsPath(text).name or "unknown-project"
|
|
36
|
+
return Path(path).name or "unknown-project"
|
|
37
|
+
|
|
38
|
+
|
|
31
39
|
def resolve_project_id(cwd: str | os.PathLike[str] | None = None) -> str:
|
|
32
40
|
"""Return a stable project identifier for the given working directory.
|
|
33
41
|
|
|
@@ -47,7 +55,7 @@ def resolve_project_id(cwd: str | os.PathLike[str] | None = None) -> str:
|
|
|
47
55
|
base = Path(cwd) if cwd is not None else Path.cwd()
|
|
48
56
|
try:
|
|
49
57
|
result = subprocess.run( # noqa: S603, S607 — fixed argv, cwd is a Path.
|
|
50
|
-
["git", "rev-parse", "--show-toplevel"],
|
|
58
|
+
["git", "rev-parse", "--show-toplevel"], # noqa: S607
|
|
51
59
|
cwd=base,
|
|
52
60
|
capture_output=True,
|
|
53
61
|
text=True,
|
|
@@ -57,10 +65,10 @@ def resolve_project_id(cwd: str | os.PathLike[str] | None = None) -> str:
|
|
|
57
65
|
if result.returncode == 0:
|
|
58
66
|
toplevel = result.stdout.strip()
|
|
59
67
|
if toplevel:
|
|
60
|
-
return
|
|
61
|
-
except (FileNotFoundError, subprocess.TimeoutExpired) as exc:
|
|
68
|
+
return _basename(toplevel)
|
|
69
|
+
except (FileNotFoundError, OSError, subprocess.TimeoutExpired) as exc:
|
|
62
70
|
_LOGGER.debug("git toplevel resolution failed: %s", exc)
|
|
63
|
-
return
|
|
71
|
+
return _basename(cwd) if cwd is not None else _basename(base)
|
|
64
72
|
|
|
65
73
|
|
|
66
74
|
def resolve_user_id(cwd: str | os.PathLike[str] | None = None) -> str:
|
package/plugin/uv.lock
CHANGED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# .env
|
|
2
|
+
|
|
3
|
+
# ====================
|
|
4
|
+
# LLM API Keys
|
|
5
|
+
# ====================
|
|
6
|
+
# Set at least one API key. The system auto-detects available providers and
|
|
7
|
+
# selects appropriate default models per role (generation, evaluation, should_run,
|
|
8
|
+
# pre_retrieval, embedding). Provider priority when multiple keys are set:
|
|
9
|
+
# Anthropic > Gemini > OpenRouter > DeepSeek > MiniMax > DashScope > xAI > Moonshot > ZAI > OpenAI
|
|
10
|
+
# For the embedding role, if the top-priority provider has no embedding support,
|
|
11
|
+
# the next embedding-capable provider is used (currently OpenAI or Gemini).
|
|
12
|
+
# Model resolution order (highest priority first):
|
|
13
|
+
# 1. Org-level LLMConfig override
|
|
14
|
+
# 2. Non-empty values in reflexio/server/site_var/site_var_sources/llm_model_setting.json
|
|
15
|
+
# 3. Auto-detected default for the primary available provider
|
|
16
|
+
OPENAI_API_KEY=
|
|
17
|
+
ANTHROPIC_API_KEY=
|
|
18
|
+
OPENROUTER_API_KEY=
|
|
19
|
+
GEMINI_API_KEY=
|
|
20
|
+
MINIMAX_API_KEY=
|
|
21
|
+
DEEPSEEK_API_KEY=
|
|
22
|
+
DASHSCOPE_API_KEY=
|
|
23
|
+
ZAI_API_KEY=
|
|
24
|
+
MOONSHOT_API_KEY=
|
|
25
|
+
XAI_API_KEY=
|
|
26
|
+
|
|
27
|
+
# ====================
|
|
28
|
+
# Observability (Optional)
|
|
29
|
+
# ====================
|
|
30
|
+
# Set to enable Braintrust LLM observability (https://www.braintrust.dev)
|
|
31
|
+
# BRAINTRUST_API_KEY=
|
|
32
|
+
# BRAINTRUST_PROJECT_NAME=reflexio
|
|
33
|
+
|
|
34
|
+
# ====================
|
|
35
|
+
# Local Storage Configuration
|
|
36
|
+
# ====================
|
|
37
|
+
# Local storage directory — houses disk-storage artifacts and the SQLite
|
|
38
|
+
# database file (reflexio.db). Defaults to ~/.reflexio/data/.
|
|
39
|
+
LOCAL_STORAGE_PATH=
|
|
40
|
+
|
|
41
|
+
# ====================
|
|
42
|
+
# Testing & Logging
|
|
43
|
+
# ====================
|
|
44
|
+
# Set to true to enable test environment mode
|
|
45
|
+
IS_TEST_ENV=true
|
|
46
|
+
# Set to enable debug logging to console
|
|
47
|
+
DEBUG_LOG_TO_CONSOLE=true
|
|
48
|
+
# Mock LLM call response
|
|
49
|
+
MOCK_LLM_RESPONSE=false
|
|
50
|
+
# Override the base directory for log files. The .reflexio/logs suffix is
|
|
51
|
+
# always preserved, so e.g. REFLEXIO_LOG_DIR=/tmp/foo writes logs to
|
|
52
|
+
# /tmp/foo/.reflexio/logs/. Defaults to $HOME (i.e. ~/.reflexio/logs/).
|
|
53
|
+
REFLEXIO_LOG_DIR=
|