claude-smart 0.2.45 → 0.2.47
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 +47 -10
- package/bin/claude-smart.js +535 -23
- package/package.json +22 -3
- package/plugin/.claude-plugin/plugin.json +4 -2
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/README.md +27 -6
- package/plugin/commands/clear-all.md +1 -0
- package/plugin/commands/dashboard.md +1 -0
- package/plugin/commands/learn.md +1 -0
- package/plugin/commands/restart.md +1 -0
- package/plugin/commands/show.md +1 -0
- package/plugin/dashboard/app/configure/env/page.tsx +40 -14
- package/plugin/dashboard/app/configure/server/page.tsx +51 -1
- package/plugin/dashboard/app/layout.tsx +20 -0
- package/plugin/dashboard/app/preferences/[id]/page.tsx +8 -8
- package/plugin/dashboard/app/skills/project/[id]/page.tsx +7 -3
- package/plugin/dashboard/app/skills/shared/[id]/page.tsx +10 -3
- package/plugin/dashboard/lib/claude-settings-file.ts +20 -10
- package/plugin/dashboard/lib/reflexio-client.ts +16 -0
- package/plugin/dashboard/lib/status.ts +10 -3
- package/plugin/dashboard/lib/types.ts +18 -6
- package/plugin/hooks/codex-hooks.json +0 -1
- package/plugin/opencode/assistant-buffer.ts +108 -0
- package/plugin/opencode/dist/assistant-buffer.js +96 -0
- package/plugin/opencode/dist/internal.js +12 -0
- package/plugin/opencode/dist/payload.js +85 -0
- package/plugin/opencode/dist/server.mjs +232 -0
- package/plugin/opencode/internal.ts +18 -0
- package/plugin/opencode/package.json +3 -0
- package/plugin/opencode/payload.ts +90 -0
- package/plugin/opencode/server.mts +251 -0
- package/plugin/opencode/tsconfig.json +13 -0
- package/plugin/pyproject.toml +25 -4
- package/plugin/scripts/_lib.sh +5 -1
- package/plugin/scripts/backend-service.sh +22 -2
- package/plugin/scripts/ensure-plugin-root.sh +4 -4
- package/plugin/scripts/hook_entry.sh +1 -1
- package/plugin/scripts/opencode-claude-compat +4 -0
- package/plugin/scripts/opencode-claude-compat.cmd +3 -0
- package/plugin/scripts/opencode-claude-compat.js +225 -0
- package/plugin/scripts/smart-install.sh +17 -9
- package/plugin/src/README.md +1 -1
- package/plugin/src/claude_smart/cli.py +498 -12
- package/plugin/src/claude_smart/context_format.py +9 -9
- package/plugin/src/claude_smart/cs_cite.py +66 -19
- package/plugin/src/claude_smart/env_config.py +12 -4
- package/plugin/src/claude_smart/events/session_start.py +26 -7
- package/plugin/src/claude_smart/events/stop.py +1 -1
- package/plugin/src/claude_smart/ids.py +1 -1
- package/plugin/src/claude_smart/reflexio_adapter.py +5 -5
- package/plugin/src/claude_smart/runtime.py +7 -1
- package/plugin/uv.lock +5 -5
- package/plugin/vendor/reflexio/.env.example +54 -30
- package/plugin/vendor/reflexio/README.md +17 -11
- package/plugin/vendor/reflexio/pyproject.toml +13 -1
- package/plugin/vendor/reflexio/reflexio/README.md +4 -1
- package/plugin/vendor/reflexio/reflexio/cli/README.md +9 -7
- package/plugin/vendor/reflexio/reflexio/cli/__main__.py +10 -1
- package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +22 -5
- package/plugin/vendor/reflexio/reflexio/cli/commands/interactions.py +34 -4
- package/plugin/vendor/reflexio/reflexio/cli/commands/profiles.py +12 -7
- package/plugin/vendor/reflexio/reflexio/cli/commands/services.py +13 -6
- package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +212 -52
- package/plugin/vendor/reflexio/reflexio/cli/commands/shortcuts.py +15 -2
- package/plugin/vendor/reflexio/reflexio/cli/env_loader.py +292 -22
- package/plugin/vendor/reflexio/reflexio/cli/log_format.py +29 -4
- package/plugin/vendor/reflexio/reflexio/cli/run_services.py +17 -8
- package/plugin/vendor/reflexio/reflexio/cli/stop_services.py +13 -10
- package/plugin/vendor/reflexio/reflexio/cli/utils.py +44 -1
- package/plugin/vendor/reflexio/reflexio/client/client.py +154 -13
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/README.md +135 -257
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/npm/openclaw-smart/bin/openclaw-smart.js +13 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/npm/openclaw-smart/package.json +15 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/README.md +38 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/index.ts +151 -110
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/openclaw.plugin.json +20 -10
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/package.json +28 -6
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/pyproject.toml +42 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/_lib.sh +371 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/backend-log-runner.sh +33 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/backend-service.sh +271 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/cli.sh +68 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/dashboard-open.sh +15 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/ensure-plugin-root.sh +84 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/hook_entry.sh +106 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/npm-cli.js +219 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/scripts/smart-install.sh +269 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/clear-all/SKILL.md +8 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/dashboard/SKILL.md +8 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/learn/SKILL.md +10 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/reflexio/SKILL.md +15 -44
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/restart/SKILL.md +6 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/show/SKILL.md +8 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/cli.py +634 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/context_format.py +224 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/context_inject.py +79 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/after_tool_call.py +160 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/agent_end.py +187 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/before_prompt_build.py +69 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/before_tool_call.py +30 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/session_end.py +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/events/session_start.py +130 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/hook.py +131 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/ids.py +94 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/internal_call.py +75 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/oc_cite.py +196 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/optimizer_assistant.py +272 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/publish.py +96 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/query_compose.py +66 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/reflexio_adapter.py +336 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/runtime.py +47 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/stall_banner.py +61 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/src/openclaw_smart/state.py +323 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/integration/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/integration/test_e2e_session_loop.py +190 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/integration/test_publish_to_local_reflexio_integration.py +112 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/integration/test_recursion_guard_integration.py +86 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/integration/test_search_inject_integration.py +144 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_cli.py +184 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_events_after_tool_call.py +142 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_events_agent_end.py +233 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_events_before_prompt_build.py +116 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_events_before_tool_call.py +35 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_events_session_end.py +47 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_events_session_start.py +109 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_hook_dispatch.py +117 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_ids.py +41 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_internal_call.py +50 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_oc_cite.py +88 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_publish.py +48 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_query_compose.py +48 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_reflexio_adapter.py +188 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_runtime.py +41 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests/test_state.py +235 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests-ts/__mocks__/plugin-entry-stub.ts +6 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests-ts/test_npm_cli.test.ts +56 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tests-ts/test_shim_dispatch.test.ts +171 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/tsconfig.build.json +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/{tsconfig.json → plugin/tsconfig.json} +2 -2
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/uv.lock +3835 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/vitest.config.ts +18 -0
- package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +246 -10
- package/plugin/vendor/reflexio/reflexio/lib/_base.py +15 -0
- package/plugin/vendor/reflexio/reflexio/lib/_config.py +11 -4
- package/plugin/vendor/reflexio/reflexio/lib/_generation.py +17 -5
- package/plugin/vendor/reflexio/reflexio/lib/_lineage_parity_readers.py +187 -0
- package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +224 -21
- package/plugin/vendor/reflexio/reflexio/lib/_reflection.py +1 -1
- package/plugin/vendor/reflexio/reflexio/lib/_search.py +52 -25
- package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +11 -1
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/entities.py +127 -38
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +4 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/governance.py +117 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/eval_overview_schema.py +64 -41
- package/plugin/vendor/reflexio/reflexio/models/api_schema/internal_schema.py +19 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/pending_tool_call_schema.py +12 -5
- package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +97 -3
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/converters.py +5 -1
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/entities.py +5 -1
- package/plugin/vendor/reflexio/reflexio/models/config_schema.py +104 -7
- package/plugin/vendor/reflexio/reflexio/models/structured_output.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/OVERVIEW.md +3 -3
- package/plugin/vendor/reflexio/reflexio/server/README.md +58 -33
- package/plugin/vendor/reflexio/reflexio/server/__init__.py +29 -5
- package/plugin/vendor/reflexio/reflexio/server/__main__.py +2 -2
- package/plugin/vendor/reflexio/reflexio/server/api.py +899 -103
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/precondition_checks.py +7 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +4 -2
- package/plugin/vendor/reflexio/reflexio/server/auth.py +90 -0
- package/plugin/vendor/reflexio/reflexio/server/billing_meter.py +173 -0
- package/plugin/vendor/reflexio/reflexio/server/billing_signals.py +64 -0
- package/plugin/vendor/reflexio/reflexio/server/cache/reflexio_cache.py +46 -16
- package/plugin/vendor/reflexio/reflexio/server/env_utils.py +65 -0
- package/plugin/vendor/reflexio/reflexio/server/extensions.py +213 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/embedding_service.py +19 -4
- package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +264 -77
- package/plugin/vendor/reflexio/reflexio/server/llm/llm_utils.py +69 -7
- package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +4 -4
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +1 -1
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/embedding_service_provider.py +75 -16
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/openclaw_provider.py +280 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +12 -1
- package/plugin/vendor/reflexio/reflexio/server/llm/token_accounting.py +48 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/tools.py +107 -17
- package/plugin/vendor/reflexio/reflexio/server/operation_limiter.py +360 -4
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.6.0.prompt.md +1 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.7.0.prompt.md +85 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.2.0.prompt.md +1 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.3.0.prompt.md +253 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.2.prompt.md +1 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.3.prompt.md +74 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.3.prompt.md +1 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.3.0.prompt.md +266 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.4.0.prompt.md +278 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.3.0.prompt.md +1 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.4.0.prompt.md +137 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.2.0.prompt.md +1 -1
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.3.0.prompt.md +34 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.0.0.prompt.md +5 -12
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.1.0.prompt.md +5 -12
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.2.0.prompt.md +155 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/tagging/v1.0.0.prompt.md +23 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_manager.py +89 -32
- package/plugin/vendor/reflexio/reflexio/server/services/README.md +28 -11
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/README.md +22 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_constants.py +4 -2
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_utils.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/components/__init__.py +7 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/{agent_success_evaluator.py → components/evaluator.py} +3 -16
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/regen_jobs.py +28 -72
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/{group_evaluation_runner.py → runner.py} +12 -10
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/{delayed_group_evaluator.py → scheduler.py} +10 -2
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/{agent_success_evaluation_service.py → service.py} +36 -1
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +160 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/base_configurator.py +5 -0
- package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +1 -1
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/README.md +9 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/components/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/{rule_attribution.py → components/rule_attribution.py} +10 -9
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/eval_sampler.py +15 -24
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/service.py +238 -164
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/README.md +31 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/outcome.py +13 -3
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/pending_tool_call_dispatch.py +3 -2
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resumable_agent.py +32 -118
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +47 -16
- package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +105 -23
- package/plugin/vendor/reflexio/reflexio/server/services/governance/config.py +52 -0
- package/plugin/vendor/reflexio/reflexio/server/services/governance/service.py +378 -0
- package/plugin/vendor/reflexio/reflexio/server/services/governance/subject_refs.py +34 -0
- package/plugin/vendor/reflexio/reflexio/server/services/lineage/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/lineage/gc_scheduler.py +219 -0
- package/plugin/vendor/reflexio/reflexio/server/services/lineage/resolve.py +98 -0
- package/plugin/vendor/reflexio/reflexio/server/services/operation_state_utils.py +26 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +18 -11
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/aggregation_prompt_processing.py +100 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/components/__init__.py +5 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/{playbook_aggregator.py → components/aggregator.py} +334 -178
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/{playbook_consolidator.py → components/consolidator.py} +168 -62
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/{playbook_extractor.py → components/extractor.py} +5 -1
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_edit_apply.py +74 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_utils.py +33 -3
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/{playbook_generation_service.py → service.py} +121 -19
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/README.md +10 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/models.py +2 -1
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/optimizer.py +178 -30
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/README.md +9 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/components/__init__.py +17 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/{profile_deduplicator.py → components/consolidator.py} +7 -6
- package/plugin/vendor/reflexio/reflexio/server/services/profile/{profile_extractor.py → components/extractor.py} +31 -22
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service_utils.py +6 -13
- package/plugin/vendor/reflexio/reflexio/server/services/profile/{profile_generation_service.py → service.py} +32 -50
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/__init__.py +4 -8
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/components/__init__.py +7 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service_utils.py +12 -1
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/{reflection_service.py → service.py} +36 -16
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/recency.py +211 -0
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +99 -6
- package/plugin/vendor/reflexio/reflexio/server/services/service_utils.py +36 -1
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/README.md +8 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/outcome.py +1 -2
- package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +31 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/governance_validation.py +681 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/retention.py +9 -9
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +16 -2
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +4 -1
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +644 -197
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +106 -119
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_governance.py +1965 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_lineage.py +630 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_operations.py +38 -6
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +31 -1369
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +756 -210
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +148 -34
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_shadow_verdicts.py +23 -9
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_stall_state.py +5 -2
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/__init__.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_agent.py +952 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_eval_results.py +189 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_optimization.py +247 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_source_linkage.py +145 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/playbook/_user.py +838 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +150 -23
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +2 -8
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_base.py +5 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +40 -57
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_governance.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_lineage.py +215 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_operations.py +20 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +4 -677
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +134 -1
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +62 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_retrieval_log.py +51 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_shadow_verdicts.py +17 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/__init__.py +13 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_agent.py +365 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_eval_results.py +124 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_optimization.py +85 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_source_linkage.py +47 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/playbook/_user.py +333 -0
- package/plugin/vendor/reflexio/reflexio/server/services/tagging/README.md +8 -0
- package/plugin/vendor/reflexio/reflexio/server/services/tagging/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/services/tagging/service.py +200 -0
- package/plugin/vendor/reflexio/reflexio/server/services/tagging/tagging_scheduler.py +149 -0
- package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +372 -34
- package/plugin/vendor/reflexio/reflexio/server/site_var/README.md +2 -1
- package/plugin/vendor/reflexio/reflexio/server/site_var/feature_flags.py +120 -1
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/feature_flags.json +4 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/search_settings.json +5 -0
- package/plugin/vendor/reflexio/reflexio/server/tracing.py +30 -0
- package/plugin/vendor/reflexio/reflexio/server/usage_metrics.py +18 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_mock.py +61 -26
- package/plugin/vendor/reflexio/reflexio/test_support/llm_model_registry.py +41 -4
- package/scripts/setup-claude-smart.sh +8 -3
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/TESTING.md +0 -517
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/hook/handler.js +0 -473
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package-lock.json +0 -2156
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package.json +0 -18
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/handler.ts +0 -241
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/setup.ts +0 -140
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/publish.ts +0 -113
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/search.ts +0 -52
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/server.ts +0 -103
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/sqlite-buffer.ts +0 -156
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/user-id.ts +0 -134
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/rules/reflexio.md +0 -24
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/publish_clawhub.sh +0 -278
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/references/HOOK.md +0 -164
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/install.sh +0 -36
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/uninstall.sh +0 -35
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/publish.test.ts +0 -27
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/search.test.ts +0 -31
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/server.test.ts +0 -42
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/setup.test.ts +0 -49
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/sqlite-buffer.test.ts +0 -91
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/user-id.test.ts +0 -50
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/vitest.config.ts +0 -13
- package/plugin/vendor/reflexio/reflexio/server/_auth.py +0 -25
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/group_aggregation.py +0 -192
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/invariants.py +0 -303
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/plan.py +0 -138
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/tools.py +0 -1125
- /package/plugin/vendor/reflexio/reflexio/integrations/{__init__.py → openclaw/plugin/src/openclaw_smart/__init__.py} +0 -0
- /package/plugin/vendor/reflexio/reflexio/integrations/openclaw/{types → plugin/types}/openclaw.d.ts +0 -0
- /package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/{distribution.py → components/distribution.py} +0 -0
- /package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/{hero_state.py → components/hero_state.py} +0 -0
- /package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/{shadow_aggregation.py → components/shadow_aggregation.py} +0 -0
- /package/plugin/vendor/reflexio/reflexio/server/services/reflection/{reflection_extractor.py → components/extractor.py} +0 -0
|
@@ -62,7 +62,7 @@ Example: `uv run reflexio --json search "refund policy"`.
|
|
|
62
62
|
Start and stop the backend, docs server, and optional local embedding daemon.
|
|
63
63
|
|
|
64
64
|
```shell
|
|
65
|
-
uv run reflexio services start # backend :
|
|
65
|
+
uv run reflexio services start # backend :8061, docs :8062
|
|
66
66
|
uv run reflexio services start --storage sqlite # sqlite (default) | supabase | postgres
|
|
67
67
|
uv run reflexio services start --backend-port 9000 --docs-port 9001
|
|
68
68
|
uv run reflexio services start --only backend --no-reload
|
|
@@ -92,6 +92,7 @@ Reflexio learns most from interactions that contain a **signal** — a user corr
|
|
|
92
92
|
```shell
|
|
93
93
|
uv run reflexio publish \
|
|
94
94
|
--user-id alice \
|
|
95
|
+
--session-id style-session-1 \
|
|
95
96
|
--user-message "Stop adding disclaimers and caveats. Give me the answer in one line." \
|
|
96
97
|
--agent-response "Understood — I'll drop the boilerplate from now on." \
|
|
97
98
|
--wait
|
|
@@ -102,7 +103,7 @@ uv run reflexio publish \
|
|
|
102
103
|
For real dialogues (3+ turns, tool calls, corrections mid-conversation), pass a JSON object whose `interactions` field is a list of `{role, content}` items. Each item becomes one turn, in order. Roles are `user` and `assistant`; `system` and `tool` turns are also accepted.
|
|
103
104
|
|
|
104
105
|
```shell
|
|
105
|
-
uv run reflexio publish --user-id alice --wait --data '{
|
|
106
|
+
uv run reflexio publish --user-id alice --session-id deploy-session-1 --wait --data '{
|
|
106
107
|
"interactions": [
|
|
107
108
|
{"role": "user", "content": "Deploy the payments service to us-east-1."},
|
|
108
109
|
{"role": "assistant", "content": "Starting deployment to us-east-1..."},
|
|
@@ -123,11 +124,11 @@ You can also load inline JSON from a file with `@`: `--data @conversation.json`.
|
|
|
123
124
|
For bulk publishing or conversations you already have on disk, point at a file. A `.json` file should be a single object (or a list of objects); a `.jsonl` file is one JSON object per line, one conversation per line.
|
|
124
125
|
|
|
125
126
|
```shell
|
|
126
|
-
uv run reflexio publish --file conversations.jsonl --user-id alice --wait
|
|
127
|
-
cat conversations.jsonl | uv run reflexio publish --stdin --user-id alice
|
|
127
|
+
uv run reflexio publish --file conversations.jsonl --user-id alice --session-id bulk-session --wait
|
|
128
|
+
cat conversations.jsonl | uv run reflexio publish --stdin --user-id alice --session-id bulk-session
|
|
128
129
|
```
|
|
129
130
|
|
|
130
|
-
Each payload object accepts the same fields as Mode 2 (`interactions`, and optionally per-payload overrides for `user_id`, `
|
|
131
|
+
Each payload object accepts the same fields as Mode 2 (`interactions`, `session_id`, and optionally per-payload overrides for `user_id`, `source`, `agent_version`). A payload's own `user_id` and `session_id` win over the corresponding flags, so you can publish a mixed-user or mixed-session JSONL file in a single call.
|
|
131
132
|
|
|
132
133
|
### Common flags
|
|
133
134
|
|
|
@@ -136,11 +137,12 @@ Apply to all three modes:
|
|
|
136
137
|
| Flag | Purpose |
|
|
137
138
|
| ------------------- | ----------------------------------------------------------------------- |
|
|
138
139
|
| `--wait` | Block until server-side extraction finishes (returns real counts). |
|
|
139
|
-
| `--session-id` |
|
|
140
|
+
| `--session-id` | Required unless each payload includes `session_id`; group publishes into one session. |
|
|
140
141
|
| `--agent-version` | Tag the interaction with an agent version (used by playbook filtering). |
|
|
141
142
|
| `--source` | Free-form source tag (defaults to `cli`). |
|
|
142
143
|
| `--skip-aggregation`| Extract profiles/playbooks but skip playbook aggregation. |
|
|
143
144
|
| `--force-extraction`| Bypass all extraction gates (`stride_size`, cheap pre-filter, LLM `should_run`) and always run extractors. |
|
|
145
|
+
| `--evaluation-only` | Store the request for session-level evaluation only; requires `--session-id` and skips profile/playbook extraction. |
|
|
144
146
|
|
|
145
147
|
Full options via `uv run reflexio interactions publish --help`.
|
|
146
148
|
|
|
@@ -214,7 +216,7 @@ uv run reflexio config pull # pull server config to
|
|
|
214
216
|
## Auth
|
|
215
217
|
|
|
216
218
|
```shell
|
|
217
|
-
uv run reflexio auth login --api-key $REFLEXIO_API_KEY --server-url http://localhost:
|
|
219
|
+
uv run reflexio auth login --api-key $REFLEXIO_API_KEY --server-url http://localhost:8061
|
|
218
220
|
uv run reflexio auth status
|
|
219
221
|
uv run reflexio auth logout
|
|
220
222
|
```
|
|
@@ -36,8 +36,17 @@ def main(argv: list[str] | None = None) -> None:
|
|
|
36
36
|
``reflexio.cli`` entry-point group before falling back to the
|
|
37
37
|
default open-source app factory.
|
|
38
38
|
"""
|
|
39
|
-
from reflexio.cli.env_loader import
|
|
39
|
+
from reflexio.cli.env_loader import (
|
|
40
|
+
block_implicit_dotenv_walkup,
|
|
41
|
+
load_reflexio_env,
|
|
42
|
+
)
|
|
40
43
|
|
|
44
|
+
# Stop third-party import-time ``load_dotenv()`` calls (notably litellm)
|
|
45
|
+
# from walking UP the tree and loading a parent ``.env`` — e.g. the
|
|
46
|
+
# enterprise-root ``.env`` when the OSS launcher runs from the
|
|
47
|
+
# ``open_source/reflexio`` submodule. Must precede any import that pulls in
|
|
48
|
+
# litellm. Reflexio's own scoped loader runs right after.
|
|
49
|
+
block_implicit_dotenv_walkup()
|
|
41
50
|
load_reflexio_env()
|
|
42
51
|
|
|
43
52
|
from importlib.metadata import entry_points
|
|
@@ -20,6 +20,19 @@ _VALID_STORAGE_BACKENDS = frozenset({"sqlite", "supabase", "postgres"})
|
|
|
20
20
|
_DEFAULT_ORG_ID = "self-host-org"
|
|
21
21
|
_DEFAULT_STORAGE = "sqlite"
|
|
22
22
|
|
|
23
|
+
|
|
24
|
+
def default_org_id() -> str:
|
|
25
|
+
"""Resolve the default org id, honoring ``REFLEXIO_DEFAULT_ORG_ID``.
|
|
26
|
+
|
|
27
|
+
Mirrors :func:`reflexio.server.auth.default_get_org_id` so the local CLI
|
|
28
|
+
helpers (``setup``, ``config show`` / ``config local``) resolve the same
|
|
29
|
+
``config_<org>.json`` the running no-auth server reads. Uses ``os.environ``
|
|
30
|
+
directly (not ``env_utils``) to keep this module's import lightweight — see
|
|
31
|
+
the ``_TYPE_TO_BACKEND`` note above.
|
|
32
|
+
"""
|
|
33
|
+
return os.environ.get("REFLEXIO_DEFAULT_ORG_ID", "").strip() or _DEFAULT_ORG_ID
|
|
34
|
+
|
|
35
|
+
|
|
23
36
|
# Maps StorageConfig subclass to backend string. Lazy-imported in functions
|
|
24
37
|
# that need it so module-level import stays lightweight (no Pydantic at import).
|
|
25
38
|
_TYPE_TO_BACKEND: dict[type, str] = {} # populated on first use
|
|
@@ -71,24 +84,26 @@ def default_config_path(base_dir: str | None = None) -> Path:
|
|
|
71
84
|
Returns:
|
|
72
85
|
Path: Absolute path to the default-org config file (may not exist).
|
|
73
86
|
"""
|
|
74
|
-
return _config_dir(base_dir) / f"config_{
|
|
87
|
+
return _config_dir(base_dir) / f"config_{default_org_id()}.json"
|
|
75
88
|
|
|
76
89
|
|
|
77
90
|
def load_storage_from_config(
|
|
78
|
-
org_id: str =
|
|
91
|
+
org_id: str | None = None,
|
|
79
92
|
*,
|
|
80
93
|
base_dir: str | None = None,
|
|
81
94
|
) -> str | None:
|
|
82
95
|
"""Read storage type from the local config file.
|
|
83
96
|
|
|
84
97
|
Args:
|
|
85
|
-
org_id: Organization ID for the config file name.
|
|
98
|
+
org_id: Organization ID for the config file name. Defaults to the
|
|
99
|
+
``REFLEXIO_DEFAULT_ORG_ID``-aware default org.
|
|
86
100
|
base_dir: Override base directory (for testing). If None, uses ~/.reflexio/.
|
|
87
101
|
|
|
88
102
|
Returns:
|
|
89
103
|
Storage backend string ("sqlite", "supabase", "postgres") or None if
|
|
90
104
|
no config file exists or storage_config is unset.
|
|
91
105
|
"""
|
|
106
|
+
org_id = org_id or default_org_id()
|
|
92
107
|
config_path = _config_dir(base_dir) / f"config_{org_id}.json"
|
|
93
108
|
if not config_path.exists():
|
|
94
109
|
return None
|
|
@@ -114,7 +129,7 @@ def load_storage_from_config(
|
|
|
114
129
|
|
|
115
130
|
def save_storage_to_config(
|
|
116
131
|
storage_type: str,
|
|
117
|
-
org_id: str =
|
|
132
|
+
org_id: str | None = None,
|
|
118
133
|
*,
|
|
119
134
|
base_dir: str | None = None,
|
|
120
135
|
) -> None:
|
|
@@ -125,7 +140,8 @@ def save_storage_to_config(
|
|
|
125
140
|
|
|
126
141
|
Args:
|
|
127
142
|
storage_type: Backend name ("sqlite", "supabase", "postgres").
|
|
128
|
-
org_id: Organization ID for the config file name.
|
|
143
|
+
org_id: Organization ID for the config file name. Defaults to the
|
|
144
|
+
``REFLEXIO_DEFAULT_ORG_ID``-aware default org.
|
|
129
145
|
base_dir: Override base directory (for testing).
|
|
130
146
|
"""
|
|
131
147
|
from reflexio.models.config_schema import (
|
|
@@ -137,6 +153,7 @@ def save_storage_to_config(
|
|
|
137
153
|
LocalFileConfigStorage,
|
|
138
154
|
)
|
|
139
155
|
|
|
156
|
+
org_id = org_id or default_org_id()
|
|
140
157
|
storage_obj = LocalFileConfigStorage(org_id, base_dir=base_dir)
|
|
141
158
|
config = storage_obj.load_config()
|
|
142
159
|
|
|
@@ -122,6 +122,20 @@ def _interactions_from_payload(payload: dict) -> list[InteractionData]:
|
|
|
122
122
|
) from exc
|
|
123
123
|
|
|
124
124
|
|
|
125
|
+
def _resolve_session_id(raw_session_id: object, *, source_hint: str) -> str:
|
|
126
|
+
"""Return a non-empty session id or raise a CLI validation error."""
|
|
127
|
+
if not isinstance(raw_session_id, str) or not raw_session_id.strip():
|
|
128
|
+
raise CliError(
|
|
129
|
+
error_type="validation",
|
|
130
|
+
message=(
|
|
131
|
+
"session_id is required and cannot be empty "
|
|
132
|
+
f"({source_hint}; pass --session-id or include 'session_id' in the payload)"
|
|
133
|
+
),
|
|
134
|
+
exit_code=EXIT_VALIDATION,
|
|
135
|
+
)
|
|
136
|
+
return raw_session_id.strip()
|
|
137
|
+
|
|
138
|
+
|
|
125
139
|
def _read_data_arg(data: str) -> str:
|
|
126
140
|
"""Read inline JSON or from a file path prefixed with ``@``.
|
|
127
141
|
|
|
@@ -233,7 +247,7 @@ def publish(
|
|
|
233
247
|
),
|
|
234
248
|
] = None,
|
|
235
249
|
session_id: Annotated[
|
|
236
|
-
str | None, typer.Option(help="
|
|
250
|
+
str | None, typer.Option(help="Required session ID for grouping")
|
|
237
251
|
] = None,
|
|
238
252
|
source: Annotated[str, typer.Option(help="Source tag")] = "cli",
|
|
239
253
|
agent_version: Annotated[
|
|
@@ -265,6 +279,13 @@ def publish(
|
|
|
265
279
|
help="Bypass all extraction gates (stride_size, cheap pre-filter, LLM should_run) and always run extractors",
|
|
266
280
|
),
|
|
267
281
|
] = False,
|
|
282
|
+
evaluation_only: Annotated[
|
|
283
|
+
bool,
|
|
284
|
+
typer.Option(
|
|
285
|
+
"--evaluation-only",
|
|
286
|
+
help="Store for session-level evaluation only and skip profile/playbook extraction",
|
|
287
|
+
),
|
|
288
|
+
] = False,
|
|
268
289
|
override_learning_stall: Annotated[
|
|
269
290
|
bool,
|
|
270
291
|
typer.Option(
|
|
@@ -310,6 +331,9 @@ def publish(
|
|
|
310
331
|
message="--user-id is required with --user-message (or set REFLEXIO_USER_ID)",
|
|
311
332
|
exit_code=EXIT_VALIDATION,
|
|
312
333
|
)
|
|
334
|
+
resolved_session_id = _resolve_session_id(
|
|
335
|
+
session_id, source_hint="single-turn publish"
|
|
336
|
+
)
|
|
313
337
|
interactions: list[InteractionData | dict] = [
|
|
314
338
|
InteractionData(role="user", content=user_message),
|
|
315
339
|
InteractionData(role="assistant", content=agent_response),
|
|
@@ -319,10 +343,11 @@ def publish(
|
|
|
319
343
|
interactions=interactions,
|
|
320
344
|
source=source,
|
|
321
345
|
agent_version=resolve_agent_version(agent_version),
|
|
322
|
-
session_id=
|
|
346
|
+
session_id=resolved_session_id,
|
|
323
347
|
wait_for_response=wait,
|
|
324
348
|
skip_aggregation=skip_aggregation,
|
|
325
349
|
force_extraction=force_extraction,
|
|
350
|
+
evaluation_only=evaluation_only,
|
|
326
351
|
override_learning_stall=override_learning_stall,
|
|
327
352
|
)
|
|
328
353
|
if json_mode:
|
|
@@ -371,15 +396,20 @@ def publish(
|
|
|
371
396
|
),
|
|
372
397
|
exit_code=EXIT_VALIDATION,
|
|
373
398
|
)
|
|
399
|
+
resolved_session_id = _resolve_session_id(
|
|
400
|
+
payload.get("session_id", session_id),
|
|
401
|
+
source_hint="payload publish",
|
|
402
|
+
)
|
|
374
403
|
result = client.publish_interaction(
|
|
375
404
|
user_id=resolved_user_id,
|
|
376
405
|
interactions=interaction_items, # type: ignore[arg-type]
|
|
377
406
|
source=payload.get("source", source),
|
|
378
407
|
agent_version=payload.get("agent_version", resolved_version),
|
|
379
|
-
session_id=
|
|
408
|
+
session_id=resolved_session_id,
|
|
380
409
|
wait_for_response=wait,
|
|
381
410
|
skip_aggregation=payload.get("skip_aggregation", skip_aggregation),
|
|
382
411
|
force_extraction=payload.get("force_extraction", force_extraction),
|
|
412
|
+
evaluation_only=payload.get("evaluation_only", evaluation_only),
|
|
383
413
|
override_learning_stall=payload.get(
|
|
384
414
|
"override_learning_stall", override_learning_stall
|
|
385
415
|
),
|
|
@@ -441,7 +471,7 @@ def search(
|
|
|
441
471
|
@handle_errors
|
|
442
472
|
def delete(
|
|
443
473
|
ctx: typer.Context,
|
|
444
|
-
interaction_id: Annotated[
|
|
474
|
+
interaction_id: Annotated[int, typer.Option(help="Interaction ID to delete")],
|
|
445
475
|
user_id: Annotated[str, typer.Option(help="User ID that owns the interaction")],
|
|
446
476
|
) -> None:
|
|
447
477
|
"""Delete a single interaction by ID."""
|
|
@@ -157,15 +157,22 @@ def delete(
|
|
|
157
157
|
],
|
|
158
158
|
profile_id: Annotated[
|
|
159
159
|
str,
|
|
160
|
-
typer.Option(
|
|
160
|
+
typer.Option(
|
|
161
|
+
"--profile-id",
|
|
162
|
+
help="Specific profile ID to delete (required; use 'delete-all' for bulk)",
|
|
163
|
+
),
|
|
161
164
|
] = "",
|
|
162
165
|
) -> None:
|
|
163
|
-
"""Delete a user profile.
|
|
166
|
+
"""Delete a specific user profile.
|
|
167
|
+
|
|
168
|
+
A ``--profile-id`` is required: the server rejects an empty profile id
|
|
169
|
+
with "Profile id or search query is required". To remove every profile
|
|
170
|
+
for an org, use ``reflexio user-profiles delete-all`` instead.
|
|
164
171
|
|
|
165
172
|
Args:
|
|
166
173
|
ctx: Typer context with CliState in ctx.obj
|
|
167
174
|
user_id: User ID owning the profile
|
|
168
|
-
profile_id: Specific profile ID to delete
|
|
175
|
+
profile_id: Specific profile ID to delete
|
|
169
176
|
"""
|
|
170
177
|
client = get_client(ctx)
|
|
171
178
|
resp = client.delete_profile(
|
|
@@ -178,10 +185,8 @@ def delete(
|
|
|
178
185
|
if json_mode:
|
|
179
186
|
render(resp, json_mode=True)
|
|
180
187
|
else:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
)
|
|
184
|
-
print_info(f"Deleted {label}")
|
|
188
|
+
raise_if_failed(resp, default="Failed to delete user profile")
|
|
189
|
+
print_info(f"Deleted profile {profile_id} for user {user_id}")
|
|
185
190
|
|
|
186
191
|
|
|
187
192
|
@app.command(name="delete-all")
|
|
@@ -123,6 +123,13 @@ def _ensure_llm_configured(env_path: Path) -> None:
|
|
|
123
123
|
)
|
|
124
124
|
_prompt_embedding_provider(env_path, non_embedding_provider)
|
|
125
125
|
|
|
126
|
+
# override=True is required here: the wizard wrote the operator's chosen key
|
|
127
|
+
# to the .env FILE only (via set_env_var), never to os.environ. A fresh
|
|
128
|
+
# install ships an empty OPENAI_API_KEY placeholder already in os.environ, so
|
|
129
|
+
# with override=False this reload would skip the (present-but-empty) var and
|
|
130
|
+
# the key just entered would never reach the process env. For this OSS local
|
|
131
|
+
# first-run path the file value must win. (The enterprise mode-file path uses
|
|
132
|
+
# override=False in load_reflexio_env_for_mode and is unaffected.)
|
|
126
133
|
load_dotenv(dotenv_path=env_path, override=True)
|
|
127
134
|
typer.echo()
|
|
128
135
|
|
|
@@ -159,13 +166,13 @@ def validate_storage_backend(storage: str | None) -> None:
|
|
|
159
166
|
@app.command()
|
|
160
167
|
def start(
|
|
161
168
|
backend_port: Annotated[
|
|
162
|
-
int | None, typer.Option(help="Backend server port (default:
|
|
169
|
+
int | None, typer.Option(help="Backend server port (default: 8061)")
|
|
163
170
|
] = None,
|
|
164
171
|
docs_port: Annotated[
|
|
165
|
-
int | None, typer.Option(help="Docs server port (default:
|
|
172
|
+
int | None, typer.Option(help="Docs server port (default: 8062)")
|
|
166
173
|
] = None,
|
|
167
174
|
embedding_port: Annotated[
|
|
168
|
-
int | None, typer.Option(help="Embedding service port (default:
|
|
175
|
+
int | None, typer.Option(help="Embedding service port (default: 8069)")
|
|
169
176
|
] = None,
|
|
170
177
|
only: Annotated[
|
|
171
178
|
str | None,
|
|
@@ -264,13 +271,13 @@ def start(
|
|
|
264
271
|
@app.command()
|
|
265
272
|
def stop(
|
|
266
273
|
backend_port: Annotated[
|
|
267
|
-
int | None, typer.Option(help="Backend server port (default:
|
|
274
|
+
int | None, typer.Option(help="Backend server port (default: 8061)")
|
|
268
275
|
] = None,
|
|
269
276
|
docs_port: Annotated[
|
|
270
|
-
int | None, typer.Option(help="Docs server port (default:
|
|
277
|
+
int | None, typer.Option(help="Docs server port (default: 8062)")
|
|
271
278
|
] = None,
|
|
272
279
|
embedding_port: Annotated[
|
|
273
|
-
int | None, typer.Option(help="Embedding service port (default:
|
|
280
|
+
int | None, typer.Option(help="Embedding service port (default: 8069)")
|
|
274
281
|
] = None,
|
|
275
282
|
only: Annotated[
|
|
276
283
|
str | None,
|