claude-smart 0.2.41 → 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 +17 -0
- package/README.md +1 -1
- package/bin/claude-smart.js +86 -48
- package/package.json +10 -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/dashboard/next.config.ts +9 -1
- package/plugin/pyproject.toml +2 -2
- package/plugin/scripts/_lib.sh +91 -0
- package/plugin/scripts/backend-service.sh +46 -15
- package/plugin/scripts/cli.sh +29 -1
- package/plugin/scripts/codex-hook.js +72 -4
- package/plugin/scripts/dashboard-build.sh +1 -0
- package/plugin/scripts/dashboard-service.sh +1 -0
- package/plugin/scripts/ensure-plugin-root.sh +7 -14
- package/plugin/scripts/hook_entry.sh +1 -0
- package/plugin/scripts/smart-install.sh +18 -2
- package/plugin/src/claude_smart/cli.py +72 -38
- package/plugin/src/claude_smart/context_format.py +11 -12
- package/plugin/src/claude_smart/cs_cite.py +26 -12
- package/plugin/src/claude_smart/ids.py +13 -5
- package/plugin/uv.lock +1 -1
- package/plugin/vendor/reflexio/.env.example +53 -0
- package/plugin/vendor/reflexio/LICENSE +201 -0
- package/plugin/vendor/reflexio/README.md +338 -0
- package/plugin/vendor/reflexio/pyproject.toml +271 -0
- package/plugin/vendor/reflexio/reflexio/README.md +184 -0
- package/plugin/vendor/reflexio/reflexio/__init__.py +166 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/README.md +109 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/backends.py +175 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/bench.py +642 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/embed_cache.py +330 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/report.py +317 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/report.md +43 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/results/results.json +4478 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/scenarios.py +134 -0
- package/plugin/vendor/reflexio/reflexio/benchmarks/retrieval_latency/seed.py +255 -0
- package/plugin/vendor/reflexio/reflexio/cli/README.md +287 -0
- package/plugin/vendor/reflexio/reflexio/cli/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/cli/__main__.py +56 -0
- package/plugin/vendor/reflexio/reflexio/cli/_client.py +86 -0
- package/plugin/vendor/reflexio/reflexio/cli/app.py +127 -0
- package/plugin/vendor/reflexio/reflexio/cli/bootstrap_config.py +266 -0
- package/plugin/vendor/reflexio/reflexio/cli/codex_auth.py +503 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/admin_cmd.py +65 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/agent_playbooks.py +503 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/api.py +114 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/auth.py +109 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/config_cmd.py +511 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/doctor.py +127 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/embeddings.py +53 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/interactions.py +478 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/profiles.py +303 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/services.py +289 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/setup_cmd.py +961 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/shortcuts.py +285 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/status_cmd.py +143 -0
- package/plugin/vendor/reflexio/reflexio/cli/commands/user_playbooks.py +373 -0
- package/plugin/vendor/reflexio/reflexio/cli/env_loader.py +284 -0
- package/plugin/vendor/reflexio/reflexio/cli/errors.py +217 -0
- package/plugin/vendor/reflexio/reflexio/cli/log_format.py +247 -0
- package/plugin/vendor/reflexio/reflexio/cli/output.py +867 -0
- package/plugin/vendor/reflexio/reflexio/cli/paths.py +41 -0
- package/plugin/vendor/reflexio/reflexio/cli/run_services.py +391 -0
- package/plugin/vendor/reflexio/reflexio/cli/state.py +204 -0
- package/plugin/vendor/reflexio/reflexio/cli/stop_services.py +96 -0
- package/plugin/vendor/reflexio/reflexio/cli/utils.py +329 -0
- package/plugin/vendor/reflexio/reflexio/client/__init__.py +3 -0
- package/plugin/vendor/reflexio/reflexio/client/cache.py +150 -0
- package/plugin/vendor/reflexio/reflexio/client/client.py +2613 -0
- package/plugin/vendor/reflexio/reflexio/defaults.py +23 -0
- package/plugin/vendor/reflexio/reflexio/integrations/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/.clawhubignore +7 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/README.md +274 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/TESTING.md +517 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/hook/handler.js +473 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package-lock.json +2156 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/package.json +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/handler.ts +241 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/hook/setup.ts +140 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/index.ts +130 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/publish.ts +113 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/search.ts +52 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/server.ts +103 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/sqlite-buffer.ts +156 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/lib/user-id.ts +134 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/openclaw.plugin.json +41 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/package.json +17 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/rules/reflexio.md +24 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/plugin/skills/reflexio/SKILL.md +48 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/publish_clawhub.sh +278 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/references/HOOK.md +164 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/install.sh +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/scripts/uninstall.sh +35 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/publish.test.ts +27 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/search.test.ts +31 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/server.test.ts +42 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/setup.test.ts +49 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/sqlite-buffer.test.ts +91 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tests/user-id.test.ts +50 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/tsconfig.json +16 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/types/openclaw.d.ts +230 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw/vitest.config.ts +13 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/README.md +120 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/TESTING.md +168 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package-lock.json +1657 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/package.json +16 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/HEARTBEAT.md +6 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/README.md +84 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/SKILL.md +194 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/_meta.json +6 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/agents/reflexio-extractor.md +45 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/handler.ts +214 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/hook/setup.ts +55 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/index.ts +327 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/consolidate.ts +233 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/dedup.ts +80 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/io.ts +155 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/openclaw-cli.ts +67 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/search.ts +33 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-playbook.ts +76 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/lib/write-profile.ts +79 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/openclaw.plugin.json +46 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/package.json +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/README.md +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/full_consolidation.md +56 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/playbook_extraction.md +217 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/prompts/profile_extraction.md +132 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-consolidate/SKILL.md +33 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/plugin/skills/reflexio-embedded/SKILL.md +194 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/HOOK.md +18 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/architecture.md +49 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/comparison.md +31 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/future-work.md +47 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/references/porting-notes.md +52 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/install.sh +52 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/scripts/uninstall.sh +36 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/consolidate.test.ts +135 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/dedup.test.ts +104 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/io.test.ts +175 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/search.test.ts +66 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/smoke-test.ts +140 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-playbook.test.ts +93 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tests/write-profile.test.ts +174 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/tsconfig.json +16 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/types/openclaw.d.ts +230 -0
- package/plugin/vendor/reflexio/reflexio/integrations/openclaw-embedded/vitest.config.ts +7 -0
- package/plugin/vendor/reflexio/reflexio/lib/__init__.py +23 -0
- package/plugin/vendor/reflexio/reflexio/lib/_agent_playbook.py +310 -0
- package/plugin/vendor/reflexio/reflexio/lib/_base.py +225 -0
- package/plugin/vendor/reflexio/reflexio/lib/_config.py +83 -0
- package/plugin/vendor/reflexio/reflexio/lib/_dashboard.py +266 -0
- package/plugin/vendor/reflexio/reflexio/lib/_generation.py +176 -0
- package/plugin/vendor/reflexio/reflexio/lib/_interactions.py +334 -0
- package/plugin/vendor/reflexio/reflexio/lib/_operations.py +153 -0
- package/plugin/vendor/reflexio/reflexio/lib/_profiles.py +545 -0
- package/plugin/vendor/reflexio/reflexio/lib/_reflection.py +52 -0
- package/plugin/vendor/reflexio/reflexio/lib/_search.py +167 -0
- package/plugin/vendor/reflexio/reflexio/lib/_storage_labels.py +103 -0
- package/plugin/vendor/reflexio/reflexio/lib/_user_playbook.py +288 -0
- package/plugin/vendor/reflexio/reflexio/lib/reflexio_lib.py +27 -0
- package/plugin/vendor/reflexio/reflexio/models/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/braintrust_schema.py +141 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/common.py +41 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/__init__.py +3 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/entities.py +1103 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/domain/enums.py +63 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/eval_overview_schema.py +487 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/internal_schema.py +28 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/pending_tool_call_schema.py +83 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/retriever_schema.py +766 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/service_schemas.py +9 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/stall_state_schema.py +32 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/__init__.py +3 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/converters.py +177 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/entities.py +129 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/ui/enums.py +25 -0
- package/plugin/vendor/reflexio/reflexio/models/api_schema/validators.py +280 -0
- package/plugin/vendor/reflexio/reflexio/models/config_schema.py +908 -0
- package/plugin/vendor/reflexio/reflexio/models/py.typed +0 -0
- package/plugin/vendor/reflexio/reflexio/server/OVERVIEW.md +90 -0
- package/plugin/vendor/reflexio/reflexio/server/README.md +616 -0
- package/plugin/vendor/reflexio/reflexio/server/__init__.py +210 -0
- package/plugin/vendor/reflexio/reflexio/server/__main__.py +132 -0
- package/plugin/vendor/reflexio/reflexio/server/_auth.py +25 -0
- package/plugin/vendor/reflexio/reflexio/server/api.py +2714 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/account_api.py +143 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/health_api.py +91 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/pending_tool_call_api.py +572 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/precondition_checks.py +66 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/publisher_api.py +540 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/request_context.py +50 -0
- package/plugin/vendor/reflexio/reflexio/server/api_endpoints/stall_state_api.py +100 -0
- package/plugin/vendor/reflexio/reflexio/server/cache/__init__.py +15 -0
- package/plugin/vendor/reflexio/reflexio/server/cache/reflexio_cache.py +208 -0
- package/plugin/vendor/reflexio/reflexio/server/correlation.py +46 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/__init__.py +30 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/embedding_service.py +110 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/image_utils.py +55 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/litellm_client.py +1595 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/llm_utils.py +112 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/model_defaults.py +469 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_provider.py +1122 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/claude_code_stream_parser.py +197 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/embedding_service_provider.py +210 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/local_embedding_provider.py +213 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/providers/nomic_embedding_provider.py +255 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/__init__.py +6 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/cross_encoder_reranker.py +177 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/rerank/llm_reranker.py +148 -0
- package/plugin/vendor/reflexio/reflexio/server/llm/tools.py +699 -0
- package/plugin/vendor/reflexio/reflexio/server/operation_limiter.py +179 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/_dispatchers.py +54 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/README.md +121 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/agent_success_evaluation/v1.0.0.prompt.md +58 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/agent_success_evaluation_with_comparison/v1.0.0.prompt.md +76 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/answer_synthesis/v1.5.2.prompt.md +88 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/compress_session_for_query/v1.3.0.prompt.md +31 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/document_expansion/v1.0.0.prompt.md +20 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.0.0.prompt.md +53 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.1.0.prompt.md +57 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.2.0.prompt.md +68 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.3.0.prompt.md +70 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.4.0.prompt.md +77 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.5.0.prompt.md +82 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/memory_reflection/v1.6.0.prompt.md +83 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.1.0.prompt.md +193 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_aggregation/v2.2.0.prompt.md +206 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.0.0-deprecated.prompt.md +66 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.0.0.prompt.md +43 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v1.1.0.prompt.md +46 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.0.0-deprecated.prompt.md +64 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.0.0.prompt.md +39 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.1.0.prompt.md +39 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.2.0.prompt.md +47 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_consolidation/v2.3.0.prompt.md +58 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.0.2.prompt.md +254 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.1.0.prompt.md +274 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context/v4.2.0.prompt.md +279 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v1.0.0.prompt.md +73 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v2.0.0.prompt.md +86 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.0.0.prompt.md +97 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.1.0.prompt.md +119 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.2.0.prompt.md +123 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_context_expert/v3.3.0.prompt.md +127 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.0.0.prompt.md +14 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.1.0.prompt.md +24 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main/v1.2.0.prompt.md +29 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.0.0.prompt.md +11 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.1.0.prompt.md +21 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_extraction_main_expert/v1.2.0.prompt.md +25 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.0.0.prompt.md +37 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.1.0.prompt.md +40 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_optimizer_judge/v1.2.0.prompt.md +36 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v1.0.0.prompt.md +45 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v2.0.0.prompt.md +81 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate/v3.0.0.prompt.md +80 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/playbook_should_generate_expert/v1.0.0.prompt.md +34 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_deduplication/v1.0.0.prompt.md +116 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate/v1.0.0.prompt.md +33 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_should_generate_override/v1.0.0.prompt.md +16 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.0.0.prompt.md +140 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_instruction_start/v1.1.0.prompt.md +160 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/profile_update_main/v1.0.0.prompt.md +14 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/query_reformulation/v1.0.0.prompt.md +19 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/rerank_relevance/v1.1.0.prompt.md +44 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_comparison/v1.0.0.prompt.md +43 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_bank/shadow_content_evaluation/v1.0.0.prompt.md +33 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/feedback_extraction_main_v1.jsonl +10 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_evaluation/prompt_evaluation_dataset/profile_update_main_v1.jsonl +10 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_manager.py +280 -0
- package/plugin/vendor/reflexio/reflexio/server/prompt/prompt_schema.py +11 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/_eval_health.py +131 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_constants.py +60 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_service.py +228 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluation_utils.py +87 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/agent_success_evaluator.py +372 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/delayed_group_evaluator.py +156 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/group_evaluation_runner.py +340 -0
- package/plugin/vendor/reflexio/reflexio/server/services/agent_success_evaluation/regen_jobs.py +471 -0
- package/plugin/vendor/reflexio/reflexio/server/services/base_generation_service.py +1626 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_cron.py +196 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/_encryption.py +101 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/client.py +167 -0
- package/plugin/vendor/reflexio/reflexio/server/services/braintrust/service.py +281 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/base_configurator.py +179 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/config_storage.py +62 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/configurator.py +87 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/local_file_config_storage.py +187 -0
- package/plugin/vendor/reflexio/reflexio/server/services/configurator/test_config_storage.py +162 -0
- package/plugin/vendor/reflexio/reflexio/server/services/deduplication_utils.py +112 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/distribution.py +33 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/eval_sampler.py +126 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/group_aggregation.py +192 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/hero_state.py +75 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/rule_attribution.py +97 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/service.py +515 -0
- package/plugin/vendor/reflexio/reflexio/server/services/evaluation_overview/shadow_aggregation.py +90 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/agent_run_records.py +91 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/invariants.py +303 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/outcome.py +25 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/pending_tool_call_dispatch.py +351 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/plan.py +138 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/prior_answer_search.py +217 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resumable_agent.py +468 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_scheduler.py +171 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/resume_worker.py +777 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extraction/tools.py +1125 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extractor_config_utils.py +91 -0
- package/plugin/vendor/reflexio/reflexio/server/services/extractor_interaction_utils.py +251 -0
- package/plugin/vendor/reflexio/reflexio/server/services/generation_service.py +689 -0
- package/plugin/vendor/reflexio/reflexio/server/services/operation_state_utils.py +835 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/README.md +89 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_aggregator.py +1388 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_consolidator.py +960 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_extractor.py +436 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_generation_service.py +808 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_constants.py +28 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook/playbook_service_utils.py +362 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/__init__.py +24 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/assistant_webhook.py +246 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/gepa_adapter.py +291 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/judge.py +97 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/models.py +96 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/optimizer.py +645 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/rollout.py +35 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scenario_resolver.py +93 -0
- package/plugin/vendor/reflexio/reflexio/server/services/playbook_optimizer/scheduler.py +174 -0
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/__init__.py +26 -0
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_document_expander.py +179 -0
- package/plugin/vendor/reflexio/reflexio/server/services/pre_retrieval/_query_reformulator.py +297 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_deduplicator.py +741 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_extractor.py +462 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service.py +734 -0
- package/plugin/vendor/reflexio/reflexio/server/services/profile/profile_generation_service_utils.py +290 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/__init__.py +17 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_extractor.py +247 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service.py +800 -0
- package/plugin/vendor/reflexio/reflexio/server/services/reflection/reflection_service_utils.py +146 -0
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/retrieval/relevance_floor.py +70 -0
- package/plugin/vendor/reflexio/reflexio/server/services/search/__init__.py +0 -0
- package/plugin/vendor/reflexio/reflexio/server/services/service_utils.py +671 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/judge.py +184 -0
- package/plugin/vendor/reflexio/reflexio/server/services/shadow_comparison/outcome.py +81 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/constants.py +2 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/error.py +11 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/retention.py +154 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/retention_mixin.py +155 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/__init__.py +59 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_agent_run.py +1253 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_base.py +1945 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_extras.py +600 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_operations.py +346 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_playbook.py +1378 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_profiles.py +747 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_requests.py +263 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_shadow_verdicts.py +193 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_share_links.py +166 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/sqlite_storage/_stall_state.py +217 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/__init__.py +153 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_agent_run.py +372 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_base.py +71 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_extras.py +235 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_operations.py +170 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_playbook.py +677 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_profiles.py +250 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_requests.py +154 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_shadow_verdicts.py +130 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_share_links.py +93 -0
- package/plugin/vendor/reflexio/reflexio/server/services/storage/storage_base/_stall_state.py +76 -0
- package/plugin/vendor/reflexio/reflexio/server/services/unified_search_service.py +568 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/README.md +77 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/feature_flags.py +116 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_manager.py +263 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/feature_flags.json +13 -0
- package/plugin/vendor/reflexio/reflexio/server/site_var/site_var_sources/llm_model_setting.json +7 -0
- package/plugin/vendor/reflexio/reflexio/server/tracing.py +158 -0
- package/plugin/vendor/reflexio/reflexio/server/usage_metrics.py +113 -0
- package/plugin/vendor/reflexio/reflexio/server/uvicorn_logging.py +76 -0
- package/plugin/vendor/reflexio/reflexio/test_support/__init__.py +1 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_fixtures.py +62 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_mock.py +242 -0
- package/plugin/vendor/reflexio/reflexio/test_support/llm_model_registry.py +129 -0
- package/plugin/vendor/reflexio/reflexio/test_support/skip_decorators.py +43 -0
|
@@ -0,0 +1,766 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing import Literal, Self
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field, model_validator
|
|
7
|
+
|
|
8
|
+
from ..config_schema import SearchMode
|
|
9
|
+
from .service_schemas import (
|
|
10
|
+
AgentPlaybook,
|
|
11
|
+
AgentSuccessEvaluationResult,
|
|
12
|
+
Interaction,
|
|
13
|
+
PlaybookStatus,
|
|
14
|
+
Request,
|
|
15
|
+
Status,
|
|
16
|
+
UserPlaybook,
|
|
17
|
+
UserProfile,
|
|
18
|
+
)
|
|
19
|
+
from .ui.entities import (
|
|
20
|
+
AgentPlaybookView,
|
|
21
|
+
EvaluationResultView,
|
|
22
|
+
InteractionView,
|
|
23
|
+
ProfileChangeLogView,
|
|
24
|
+
ProfileView,
|
|
25
|
+
UserPlaybookView,
|
|
26
|
+
)
|
|
27
|
+
from .validators import (
|
|
28
|
+
NonEmptyStr,
|
|
29
|
+
TimeRangeValidatorMixin,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class SearchInteractionRequest(BaseModel):
|
|
34
|
+
user_id: NonEmptyStr
|
|
35
|
+
request_id: str | None = None
|
|
36
|
+
query: str | None = None
|
|
37
|
+
start_time: datetime | None = None
|
|
38
|
+
end_time: datetime | None = None
|
|
39
|
+
top_k: int | None = Field(default=None, gt=0)
|
|
40
|
+
most_recent_k: int | None = Field(default=None, gt=0)
|
|
41
|
+
search_mode: SearchMode = SearchMode.HYBRID
|
|
42
|
+
|
|
43
|
+
@model_validator(mode="after")
|
|
44
|
+
def check_time_range(self) -> Self:
|
|
45
|
+
"""Validate that end_time is after start_time."""
|
|
46
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
47
|
+
return self
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class SearchUserProfileRequest(BaseModel):
|
|
51
|
+
user_id: NonEmptyStr
|
|
52
|
+
generated_from_request_id: str | None = None
|
|
53
|
+
query: str | None = None
|
|
54
|
+
start_time: datetime | None = None
|
|
55
|
+
end_time: datetime | None = None
|
|
56
|
+
top_k: int | None = Field(default=10, gt=0)
|
|
57
|
+
source: str | None = None
|
|
58
|
+
custom_feature: str | None = None
|
|
59
|
+
extractor_name: str | None = None # Deprecated compatibility field; accepted but ignored.
|
|
60
|
+
threshold: float | None = Field(default=0.4, ge=0.0, le=1.0)
|
|
61
|
+
enable_reformulation: bool | None = False
|
|
62
|
+
search_mode: SearchMode = SearchMode.HYBRID
|
|
63
|
+
|
|
64
|
+
@model_validator(mode="after")
|
|
65
|
+
def check_time_range(self) -> Self:
|
|
66
|
+
"""Validate that end_time is after start_time."""
|
|
67
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
68
|
+
return self
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class SearchInteractionResponse(BaseModel):
|
|
72
|
+
success: bool
|
|
73
|
+
interactions: list[Interaction]
|
|
74
|
+
msg: str | None = None
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class SearchUserProfileResponse(BaseModel):
|
|
78
|
+
success: bool
|
|
79
|
+
user_profiles: list[UserProfile]
|
|
80
|
+
msg: str | None = None
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class RerankUserProfilesRequest(BaseModel):
|
|
84
|
+
"""Cross-encoder rerank for a list of profile ids.
|
|
85
|
+
|
|
86
|
+
Use after ``search_user_profiles`` (or any other source of candidate ids)
|
|
87
|
+
when initial results are noisy. The server fetches each candidate's full
|
|
88
|
+
content, scores ``(query, content)`` pairs with a CPU cross-encoder, and
|
|
89
|
+
returns the top_k profiles sorted by descending score.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
user_id (str): The user whose profiles to rerank.
|
|
93
|
+
query (str): The reranking query.
|
|
94
|
+
profile_ids (list[str]): Candidate profile ids; ids that don't belong
|
|
95
|
+
to ``user_id`` (or don't exist) are silently dropped.
|
|
96
|
+
top_k (int): Maximum number of profiles to return. Defaults to 10.
|
|
97
|
+
"""
|
|
98
|
+
|
|
99
|
+
user_id: NonEmptyStr
|
|
100
|
+
query: NonEmptyStr
|
|
101
|
+
profile_ids: list[str]
|
|
102
|
+
top_k: int = Field(default=10, gt=0)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class RerankUserProfilesResponse(BaseModel):
|
|
106
|
+
"""Response from :class:`RerankUserProfilesRequest`.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
success (bool): Whether the rerank call succeeded.
|
|
110
|
+
user_profiles (list[UserProfile]): Profiles sorted by descending
|
|
111
|
+
cross-encoder score, capped at ``top_k``.
|
|
112
|
+
msg (str, optional): Diagnostic message (e.g. how many ids were
|
|
113
|
+
silently dropped because they didn't resolve).
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
success: bool
|
|
117
|
+
user_profiles: list[UserProfile]
|
|
118
|
+
msg: str | None = None
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class StorageStatsRequest(BaseModel):
|
|
122
|
+
"""Request lightweight metadata about a user's stored profiles + playbooks.
|
|
123
|
+
|
|
124
|
+
Useful before deciding ``top_k`` for retrieval — sized counts and
|
|
125
|
+
timestamp ranges let the agent pick a sensible cap rather than a fixed
|
|
126
|
+
constant.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
user_id (str): The user to inspect.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
user_id: NonEmptyStr
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class StorageStatsResponse(BaseModel):
|
|
136
|
+
"""Response from :class:`StorageStatsRequest`.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
profile_count (int): Total number of profiles for the user across
|
|
140
|
+
all statuses.
|
|
141
|
+
playbook_count (int): Total number of user playbooks for the user
|
|
142
|
+
across all statuses.
|
|
143
|
+
oldest_profile_modified (datetime, optional): UTC timestamp of the
|
|
144
|
+
oldest profile's ``last_modified_timestamp``; None when the user
|
|
145
|
+
has no profiles.
|
|
146
|
+
newest_profile_modified (datetime, optional): UTC timestamp of the
|
|
147
|
+
newest profile's ``last_modified_timestamp``; None when the user
|
|
148
|
+
has no profiles.
|
|
149
|
+
success (bool): Whether the lookup succeeded.
|
|
150
|
+
msg (str, optional): Diagnostic message.
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
profile_count: int = Field(default=0, ge=0)
|
|
154
|
+
playbook_count: int = Field(default=0, ge=0)
|
|
155
|
+
oldest_profile_modified: datetime | None = None
|
|
156
|
+
newest_profile_modified: datetime | None = None
|
|
157
|
+
success: bool
|
|
158
|
+
msg: str | None = None
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class GetInteractionsRequest(BaseModel):
|
|
162
|
+
user_id: NonEmptyStr
|
|
163
|
+
start_time: datetime | None = None
|
|
164
|
+
end_time: datetime | None = None
|
|
165
|
+
top_k: int | None = Field(default=30, gt=0)
|
|
166
|
+
|
|
167
|
+
@model_validator(mode="after")
|
|
168
|
+
def check_time_range(self) -> Self:
|
|
169
|
+
"""Validate that end_time is after start_time."""
|
|
170
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
171
|
+
return self
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class GetInteractionsResponse(BaseModel):
|
|
175
|
+
success: bool
|
|
176
|
+
interactions: list[Interaction]
|
|
177
|
+
msg: str | None = None
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class GetUserProfilesRequest(BaseModel):
|
|
181
|
+
user_id: NonEmptyStr
|
|
182
|
+
start_time: datetime | None = None
|
|
183
|
+
end_time: datetime | None = None
|
|
184
|
+
top_k: int | None = Field(default=30, gt=0)
|
|
185
|
+
status_filter: list[Status | None] | None = None
|
|
186
|
+
|
|
187
|
+
@model_validator(mode="after")
|
|
188
|
+
def check_time_range(self) -> Self:
|
|
189
|
+
"""Validate that end_time is after start_time."""
|
|
190
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
191
|
+
return self
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class GetUserProfilesResponse(BaseModel):
|
|
195
|
+
success: bool
|
|
196
|
+
user_profiles: list[UserProfile]
|
|
197
|
+
msg: str | None = None
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
class GetProfileStatisticsResponse(BaseModel):
|
|
201
|
+
success: bool
|
|
202
|
+
current_count: int = 0
|
|
203
|
+
pending_count: int = 0
|
|
204
|
+
archived_count: int = 0
|
|
205
|
+
expiring_soon_count: int = 0
|
|
206
|
+
msg: str | None = None
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class SetConfigResponse(BaseModel):
|
|
210
|
+
success: bool
|
|
211
|
+
msg: str | None = None
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class GetUserPlaybooksRequest(BaseModel):
|
|
215
|
+
limit: int | None = Field(default=100, gt=0)
|
|
216
|
+
user_id: str | None = None
|
|
217
|
+
playbook_name: str | None = None
|
|
218
|
+
agent_version: str | None = None
|
|
219
|
+
status_filter: list[Status | None] | None = None
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class GetUserPlaybooksResponse(BaseModel):
|
|
223
|
+
success: bool
|
|
224
|
+
user_playbooks: list[UserPlaybook]
|
|
225
|
+
msg: str | None = None
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class GetAgentPlaybooksRequest(BaseModel):
|
|
229
|
+
limit: int | None = Field(default=100, gt=0)
|
|
230
|
+
playbook_name: str | None = None
|
|
231
|
+
agent_version: str | None = None
|
|
232
|
+
status_filter: list[Status | None] | None = None
|
|
233
|
+
playbook_status_filter: PlaybookStatus | None = None
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class GetAgentPlaybooksResponse(BaseModel):
|
|
237
|
+
success: bool
|
|
238
|
+
agent_playbooks: list[AgentPlaybook]
|
|
239
|
+
msg: str | None = None
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class SearchUserPlaybookRequest(BaseModel):
|
|
243
|
+
"""Request for searching user playbooks with semantic/text search and filtering.
|
|
244
|
+
|
|
245
|
+
Args:
|
|
246
|
+
query (str, optional): Query for semantic/text search
|
|
247
|
+
user_id (str, optional): Filter by user (via request_id linkage to requests table)
|
|
248
|
+
agent_version (str, optional): Filter by agent version
|
|
249
|
+
playbook_name (str, optional): Filter by playbook name
|
|
250
|
+
start_time (datetime, optional): Start time for created_at filter
|
|
251
|
+
end_time (datetime, optional): End time for created_at filter
|
|
252
|
+
status_filter (list[Optional[Status]], optional): Filter by status (None for CURRENT, PENDING, ARCHIVED)
|
|
253
|
+
top_k (int, optional): Maximum number of results to return. Defaults to 10
|
|
254
|
+
threshold (float, optional): Similarity threshold for vector search. Defaults to 0.4
|
|
255
|
+
"""
|
|
256
|
+
|
|
257
|
+
query: str | None = None
|
|
258
|
+
user_id: str | None = None
|
|
259
|
+
agent_version: str | None = None
|
|
260
|
+
playbook_name: str | None = None
|
|
261
|
+
start_time: datetime | None = None
|
|
262
|
+
end_time: datetime | None = None
|
|
263
|
+
status_filter: list[Status | None] | None = None
|
|
264
|
+
top_k: int | None = Field(default=10, gt=0)
|
|
265
|
+
threshold: float | None = Field(default=0.4, ge=0.0, le=1.0)
|
|
266
|
+
enable_reformulation: bool | None = False
|
|
267
|
+
search_mode: SearchMode = SearchMode.HYBRID
|
|
268
|
+
|
|
269
|
+
@model_validator(mode="after")
|
|
270
|
+
def check_time_range(self) -> Self:
|
|
271
|
+
"""Validate that end_time is after start_time."""
|
|
272
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
273
|
+
return self
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
class SearchUserPlaybookResponse(BaseModel):
|
|
277
|
+
"""Response for searching user playbooks.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
success (bool): Whether the search was successful
|
|
281
|
+
user_playbooks (list[UserPlaybook]): List of matching user playbooks
|
|
282
|
+
msg (str, optional): Additional message
|
|
283
|
+
"""
|
|
284
|
+
|
|
285
|
+
success: bool
|
|
286
|
+
user_playbooks: list[UserPlaybook]
|
|
287
|
+
msg: str | None = None
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
class SearchAgentPlaybookRequest(BaseModel):
|
|
291
|
+
"""Request for searching aggregated agent playbooks with semantic/text search and filtering.
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
query (str, optional): Query for semantic/text search
|
|
295
|
+
agent_version (str, optional): Filter by agent version
|
|
296
|
+
playbook_name (str, optional): Filter by playbook name
|
|
297
|
+
start_time (datetime, optional): Start time for created_at filter
|
|
298
|
+
end_time (datetime, optional): End time for created_at filter
|
|
299
|
+
status_filter (list[Optional[Status]], optional): Filter by status (None for CURRENT, PENDING, ARCHIVED)
|
|
300
|
+
playbook_status_filter (PlaybookStatus | list[PlaybookStatus], optional):
|
|
301
|
+
Filter by playbook approval status. Accepts either a single
|
|
302
|
+
``PlaybookStatus`` (matched with ``=``) or a list (matched with
|
|
303
|
+
``IN (...)``) so callers can request multiple approval states in
|
|
304
|
+
a single storage query without per-status fan-out. Defaults to
|
|
305
|
+
None (no status predicate).
|
|
306
|
+
top_k (int, optional): Maximum number of results to return. Defaults to 10
|
|
307
|
+
threshold (float, optional): Similarity threshold for vector search. Defaults to 0.4
|
|
308
|
+
"""
|
|
309
|
+
|
|
310
|
+
query: str | None = None
|
|
311
|
+
agent_version: str | None = None
|
|
312
|
+
playbook_name: str | None = None
|
|
313
|
+
start_time: datetime | None = None
|
|
314
|
+
end_time: datetime | None = None
|
|
315
|
+
status_filter: list[Status | None] | None = None
|
|
316
|
+
playbook_status_filter: PlaybookStatus | list[PlaybookStatus] | None = None
|
|
317
|
+
top_k: int | None = Field(default=10, gt=0)
|
|
318
|
+
threshold: float | None = Field(default=0.4, ge=0.0, le=1.0)
|
|
319
|
+
enable_reformulation: bool | None = False
|
|
320
|
+
search_mode: SearchMode = SearchMode.HYBRID
|
|
321
|
+
|
|
322
|
+
@model_validator(mode="after")
|
|
323
|
+
def check_time_range(self) -> Self:
|
|
324
|
+
"""Validate that end_time is after start_time."""
|
|
325
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
326
|
+
return self
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
class SearchAgentPlaybookResponse(BaseModel):
|
|
330
|
+
"""Response for searching aggregated agent playbooks.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
success (bool): Whether the search was successful
|
|
334
|
+
agent_playbooks (list[AgentPlaybook]): List of matching agent playbooks
|
|
335
|
+
msg (str, optional): Additional message
|
|
336
|
+
"""
|
|
337
|
+
|
|
338
|
+
success: bool
|
|
339
|
+
agent_playbooks: list[AgentPlaybook]
|
|
340
|
+
msg: str | None = None
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
class GetAgentSuccessEvaluationResultsRequest(BaseModel):
|
|
344
|
+
limit: int | None = Field(default=100, gt=0)
|
|
345
|
+
agent_version: str | None = None
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
class GetAgentSuccessEvaluationResultsResponse(BaseModel):
|
|
349
|
+
success: bool
|
|
350
|
+
agent_success_evaluation_results: list[AgentSuccessEvaluationResult]
|
|
351
|
+
msg: str | None = None
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
class GetRequestsRequest(BaseModel):
|
|
355
|
+
user_id: str | None = None
|
|
356
|
+
request_id: str | None = None
|
|
357
|
+
session_id: str | None = None
|
|
358
|
+
start_time: datetime | None = None
|
|
359
|
+
end_time: datetime | None = None
|
|
360
|
+
top_k: int | None = Field(default=30, gt=0)
|
|
361
|
+
offset: int | None = Field(default=0, ge=0)
|
|
362
|
+
|
|
363
|
+
@model_validator(mode="after")
|
|
364
|
+
def check_time_range(self) -> Self:
|
|
365
|
+
"""Validate that end_time is after start_time."""
|
|
366
|
+
TimeRangeValidatorMixin.validate_time_range(self.start_time, self.end_time)
|
|
367
|
+
return self
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
class RequestData(BaseModel):
|
|
371
|
+
request: Request
|
|
372
|
+
interactions: list[Interaction]
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
class Session(BaseModel):
|
|
376
|
+
session_id: str
|
|
377
|
+
requests: list[RequestData]
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
class GetRequestsResponse(BaseModel):
|
|
381
|
+
success: bool
|
|
382
|
+
sessions: list[Session]
|
|
383
|
+
has_more: bool = False
|
|
384
|
+
msg: str | None = None
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
class UpdatePlaybookStatusRequest(BaseModel):
|
|
388
|
+
agent_playbook_id: int = Field(gt=0)
|
|
389
|
+
playbook_status: PlaybookStatus
|
|
390
|
+
|
|
391
|
+
|
|
392
|
+
class UpdatePlaybookStatusResponse(BaseModel):
|
|
393
|
+
success: bool
|
|
394
|
+
msg: str | None = None
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
class UpdateAgentPlaybookRequest(BaseModel):
|
|
398
|
+
"""Generic update for an agent playbook. All fields except ID are optional."""
|
|
399
|
+
|
|
400
|
+
agent_playbook_id: int = Field(gt=0)
|
|
401
|
+
playbook_name: str | None = None
|
|
402
|
+
content: str | None = None
|
|
403
|
+
trigger: str | None = None
|
|
404
|
+
rationale: str | None = None
|
|
405
|
+
playbook_status: PlaybookStatus | None = None
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
class UpdateAgentPlaybookResponse(BaseModel):
|
|
409
|
+
success: bool
|
|
410
|
+
msg: str | None = None
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
class UpdateUserPlaybookRequest(BaseModel):
|
|
414
|
+
"""Generic update for a user playbook. All fields except ID are optional."""
|
|
415
|
+
|
|
416
|
+
user_playbook_id: int = Field(gt=0)
|
|
417
|
+
playbook_name: str | None = None
|
|
418
|
+
content: str | None = None
|
|
419
|
+
trigger: str | None = None
|
|
420
|
+
rationale: str | None = None
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
class UpdateUserPlaybookResponse(BaseModel):
|
|
424
|
+
success: bool
|
|
425
|
+
msg: str | None = None
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
class UpdateUserProfileRequest(BaseModel):
|
|
429
|
+
"""Partial update for an existing user profile.
|
|
430
|
+
|
|
431
|
+
Only non-None fields are applied. ``user_id`` and ``profile_id`` are
|
|
432
|
+
required; all other fields are optional, matching the UI edit flow
|
|
433
|
+
where the user typically changes ``content`` and/or ``custom_features``.
|
|
434
|
+
"""
|
|
435
|
+
|
|
436
|
+
user_id: str
|
|
437
|
+
profile_id: str
|
|
438
|
+
content: str | None = None
|
|
439
|
+
custom_features: dict[str, object] | None = None
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
class UpdateUserProfileResponse(BaseModel):
|
|
443
|
+
success: bool
|
|
444
|
+
msg: str | None = None
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
class TimeSeriesDataPoint(BaseModel):
|
|
448
|
+
"""A single data point in a time series."""
|
|
449
|
+
|
|
450
|
+
timestamp: int = Field(gt=0) # Unix timestamp
|
|
451
|
+
value: int = Field(ge=0) # Count or metric value
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
class PeriodStats(BaseModel):
|
|
455
|
+
"""Statistics for a specific time period."""
|
|
456
|
+
|
|
457
|
+
total_profiles: int = Field(ge=0)
|
|
458
|
+
total_interactions: int = Field(ge=0)
|
|
459
|
+
total_playbooks: int = Field(ge=0)
|
|
460
|
+
success_rate: float = Field(ge=0.0, le=100.0) # Percentage (0-100)
|
|
461
|
+
|
|
462
|
+
|
|
463
|
+
class DashboardStats(BaseModel):
|
|
464
|
+
"""Comprehensive dashboard statistics including current and previous periods."""
|
|
465
|
+
|
|
466
|
+
current_period: PeriodStats
|
|
467
|
+
previous_period: PeriodStats
|
|
468
|
+
interactions_time_series: list[TimeSeriesDataPoint]
|
|
469
|
+
profiles_time_series: list[TimeSeriesDataPoint]
|
|
470
|
+
playbooks_time_series: list[TimeSeriesDataPoint]
|
|
471
|
+
evaluations_time_series: list[TimeSeriesDataPoint] # Success rate over time
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
class GetDashboardStatsRequest(BaseModel):
|
|
475
|
+
"""Request for dashboard statistics.
|
|
476
|
+
|
|
477
|
+
Args:
|
|
478
|
+
days_back (int): Number of days to include in time series data. Defaults to 30.
|
|
479
|
+
"""
|
|
480
|
+
|
|
481
|
+
days_back: int | None = Field(default=30, gt=0)
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
class GetDashboardStatsResponse(BaseModel):
|
|
485
|
+
"""Response containing dashboard statistics."""
|
|
486
|
+
|
|
487
|
+
success: bool
|
|
488
|
+
stats: DashboardStats | None = None
|
|
489
|
+
msg: str | None = None
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
class PlaybookApplicationStat(BaseModel):
|
|
493
|
+
"""Per-rule application stats derived from interaction citations.
|
|
494
|
+
|
|
495
|
+
Aggregates the JSON ``citations`` column on interactions to surface how
|
|
496
|
+
often each individual playbook or profile has been cited by the agent in
|
|
497
|
+
a given time window. Used by the claude-smart dashboard to show users a
|
|
498
|
+
"track record" for each rule so the impact of a learning is visible
|
|
499
|
+
rather than abstract.
|
|
500
|
+
|
|
501
|
+
Args:
|
|
502
|
+
real_id (str): Stable id of the cited item — ``user_playbook_id``,
|
|
503
|
+
``agent_playbook_id``, or ``profile_id`` (always serialized as a
|
|
504
|
+
string).
|
|
505
|
+
kind (str): ``"playbook"`` or ``"profile"`` — the citation kind, as
|
|
506
|
+
recorded on ``Interaction.citations``.
|
|
507
|
+
title (str): Human-readable label for the rule. Empty string when
|
|
508
|
+
the underlying row has been deleted but old citations remain.
|
|
509
|
+
applied_count (int): Number of interactions in the window whose
|
|
510
|
+
citations referenced this ``(kind, real_id)``.
|
|
511
|
+
last_applied_at (int | None): Unix epoch seconds of the most recent
|
|
512
|
+
interaction citing this rule. ``None`` when no citation matches.
|
|
513
|
+
Matches the int-epoch convention used elsewhere in the dashboard
|
|
514
|
+
(e.g. ``Interaction.created_at``).
|
|
515
|
+
last_interaction_id (int | None): ``interaction_id`` of the most
|
|
516
|
+
recent citing interaction; useful for deep-linking from the
|
|
517
|
+
dashboard.
|
|
518
|
+
"""
|
|
519
|
+
|
|
520
|
+
real_id: str
|
|
521
|
+
kind: Literal["playbook", "profile"]
|
|
522
|
+
title: str = ""
|
|
523
|
+
applied_count: int = Field(ge=0)
|
|
524
|
+
last_applied_at: int | None = None
|
|
525
|
+
last_interaction_id: int | None = None
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
class GetPlaybookApplicationStatsRequest(BaseModel):
|
|
529
|
+
"""Request for per-rule application stats.
|
|
530
|
+
|
|
531
|
+
Args:
|
|
532
|
+
days_back (int): Look-back window in days. Defaults to 30; must be
|
|
533
|
+
positive.
|
|
534
|
+
"""
|
|
535
|
+
|
|
536
|
+
days_back: int = Field(default=30, gt=0)
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
class GetPlaybookApplicationStatsResponse(BaseModel):
|
|
540
|
+
"""Response containing per-rule application stats.
|
|
541
|
+
|
|
542
|
+
Args:
|
|
543
|
+
success (bool): Whether the call succeeded.
|
|
544
|
+
stats (list[PlaybookApplicationStat]): One row per cited rule, sorted
|
|
545
|
+
by ``applied_count`` descending.
|
|
546
|
+
msg (str | None): Optional error message when ``success`` is False.
|
|
547
|
+
"""
|
|
548
|
+
|
|
549
|
+
success: bool
|
|
550
|
+
stats: list[PlaybookApplicationStat] = Field(default_factory=list)
|
|
551
|
+
msg: str | None = None
|
|
552
|
+
|
|
553
|
+
|
|
554
|
+
# ===============================
|
|
555
|
+
# Query Reformulation Models
|
|
556
|
+
# ===============================
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
class ConversationTurn(BaseModel):
|
|
560
|
+
"""A single turn in a conversation history.
|
|
561
|
+
|
|
562
|
+
Args:
|
|
563
|
+
role (str): The role of the speaker (e.g., "user", "agent")
|
|
564
|
+
content (str): The message content
|
|
565
|
+
"""
|
|
566
|
+
|
|
567
|
+
role: NonEmptyStr
|
|
568
|
+
content: NonEmptyStr
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
class ReformulationResult(BaseModel):
|
|
572
|
+
"""Output of the query reformulation pipeline.
|
|
573
|
+
|
|
574
|
+
Args:
|
|
575
|
+
standalone_query (str): Clean, normalized natural language query with
|
|
576
|
+
conversation context resolved, abbreviations expanded, grammar fixed.
|
|
577
|
+
"""
|
|
578
|
+
|
|
579
|
+
standalone_query: str
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
# ===============================
|
|
583
|
+
# Unified Search Models
|
|
584
|
+
# ===============================
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
UnifiedSearchEntityType = Literal["profiles", "user_playbooks", "agent_playbooks"]
|
|
588
|
+
|
|
589
|
+
|
|
590
|
+
class UnifiedSearchRequest(BaseModel):
|
|
591
|
+
"""Request for unified search across all entity types.
|
|
592
|
+
|
|
593
|
+
Args:
|
|
594
|
+
query (str): Search query text
|
|
595
|
+
top_k (int, optional): Maximum results per entity type. Defaults to 5
|
|
596
|
+
threshold (float, optional): Similarity threshold for vector search. Defaults to 0.3
|
|
597
|
+
agent_version (str, optional): Filter by agent version (agent_playbooks, user_playbooks)
|
|
598
|
+
playbook_name (str, optional): Filter by playbook name (agent_playbooks, user_playbooks)
|
|
599
|
+
user_id (str, optional): Filter by user ID (profiles, user_playbooks)
|
|
600
|
+
entity_types (list[str], optional): Entity types to search. When omitted,
|
|
601
|
+
searches profiles, user_playbooks, and agent_playbooks.
|
|
602
|
+
agent_playbook_status_filter (list[PlaybookStatus], optional): Approval
|
|
603
|
+
statuses to include for agent_playbooks. When omitted, defaults to
|
|
604
|
+
``[APPROVED, PENDING]`` so that REJECTED playbooks are suppressed
|
|
605
|
+
from results — a rejection in the dashboard immediately hides the
|
|
606
|
+
playbook. Pass an explicit list to opt into REJECTED items.
|
|
607
|
+
conversation_history (list[ConversationTurn], optional): Prior conversation turns for context-aware query rewriting
|
|
608
|
+
"""
|
|
609
|
+
|
|
610
|
+
query: NonEmptyStr
|
|
611
|
+
top_k: int | None = Field(default=5, gt=0)
|
|
612
|
+
threshold: float | None = Field(default=0.3, ge=0.0, le=1.0)
|
|
613
|
+
agent_version: str | None = None
|
|
614
|
+
playbook_name: str | None = None
|
|
615
|
+
user_id: str | None = None
|
|
616
|
+
entity_types: list[UnifiedSearchEntityType] | None = None
|
|
617
|
+
agent_playbook_status_filter: list[PlaybookStatus] | None = None
|
|
618
|
+
conversation_history: list[ConversationTurn] | None = None
|
|
619
|
+
enable_reformulation: bool | None = False
|
|
620
|
+
enable_agent_answer: bool | None = False
|
|
621
|
+
search_mode: SearchMode = SearchMode.HYBRID
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
class UnifiedSearchResponse(BaseModel):
|
|
625
|
+
"""Response containing search results from all entity types.
|
|
626
|
+
|
|
627
|
+
Args:
|
|
628
|
+
success (bool): Whether the search was successful
|
|
629
|
+
profiles (list[UserProfile]): Matching user profiles
|
|
630
|
+
agent_playbooks (list[AgentPlaybook]): Matching aggregated agent playbooks
|
|
631
|
+
user_playbooks (list[UserPlaybook]): Matching user playbooks
|
|
632
|
+
reformulated_query (str, optional): The query used after reformulation (None if reformulation disabled)
|
|
633
|
+
msg (str, optional): Additional message
|
|
634
|
+
agent_answer (str, optional): LLM-synthesised answer populated by the agentic backend;
|
|
635
|
+
None for classic backend.
|
|
636
|
+
"""
|
|
637
|
+
|
|
638
|
+
success: bool
|
|
639
|
+
profiles: list[UserProfile] = []
|
|
640
|
+
agent_playbooks: list[AgentPlaybook] = []
|
|
641
|
+
user_playbooks: list[UserPlaybook] = []
|
|
642
|
+
reformulated_query: str | None = None
|
|
643
|
+
msg: str | None = None
|
|
644
|
+
agent_answer: str | None = None
|
|
645
|
+
agent_trace: str | None = None
|
|
646
|
+
rehydrated_text: str | None = None
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
# ===============================
|
|
650
|
+
# View Response Types (user-facing, without embeddings)
|
|
651
|
+
# ===============================
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
class GetInteractionsViewResponse(BaseModel):
|
|
655
|
+
"""API response for retrieving interactions — uses View types."""
|
|
656
|
+
|
|
657
|
+
success: bool
|
|
658
|
+
interactions: list[InteractionView]
|
|
659
|
+
msg: str | None = None
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
class GetProfilesViewResponse(BaseModel):
|
|
663
|
+
"""API response for retrieving profiles — uses View types."""
|
|
664
|
+
|
|
665
|
+
success: bool
|
|
666
|
+
user_profiles: list[ProfileView]
|
|
667
|
+
msg: str | None = None
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
class SearchInteractionsViewResponse(BaseModel):
|
|
671
|
+
"""API response for searching interactions — uses View types."""
|
|
672
|
+
|
|
673
|
+
success: bool
|
|
674
|
+
interactions: list[InteractionView]
|
|
675
|
+
msg: str | None = None
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
class SearchProfilesViewResponse(BaseModel):
|
|
679
|
+
"""API response for searching profiles — uses View types."""
|
|
680
|
+
|
|
681
|
+
success: bool
|
|
682
|
+
user_profiles: list[ProfileView]
|
|
683
|
+
msg: str | None = None
|
|
684
|
+
|
|
685
|
+
|
|
686
|
+
class GetEvaluationResultsViewResponse(BaseModel):
|
|
687
|
+
"""API response for retrieving evaluation results — uses View types."""
|
|
688
|
+
|
|
689
|
+
success: bool
|
|
690
|
+
agent_success_evaluation_results: list[EvaluationResultView]
|
|
691
|
+
msg: str | None = None
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
class ProfileChangeLogViewResponse(BaseModel):
|
|
695
|
+
"""API response for profile change logs — uses View types."""
|
|
696
|
+
|
|
697
|
+
success: bool
|
|
698
|
+
profile_change_logs: list[ProfileChangeLogView]
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
class RequestDataView(BaseModel):
|
|
702
|
+
"""A single request with its interactions, using View types."""
|
|
703
|
+
|
|
704
|
+
request: Request
|
|
705
|
+
interactions: list[InteractionView]
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
class SessionView(BaseModel):
|
|
709
|
+
"""A session containing requests, using View types."""
|
|
710
|
+
|
|
711
|
+
session_id: str
|
|
712
|
+
requests: list[RequestDataView]
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
class GetRequestsViewResponse(BaseModel):
|
|
716
|
+
"""API response for retrieving requests — uses View types."""
|
|
717
|
+
|
|
718
|
+
success: bool
|
|
719
|
+
sessions: list[SessionView]
|
|
720
|
+
has_more: bool = False
|
|
721
|
+
msg: str | None = None
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
class UnifiedSearchViewResponse(BaseModel):
|
|
725
|
+
"""API response for unified search — uses View types."""
|
|
726
|
+
|
|
727
|
+
success: bool
|
|
728
|
+
profiles: list[ProfileView] = []
|
|
729
|
+
agent_playbooks: list[AgentPlaybookView] = []
|
|
730
|
+
user_playbooks: list[UserPlaybookView] = []
|
|
731
|
+
reformulated_query: str | None = None
|
|
732
|
+
msg: str | None = None
|
|
733
|
+
agent_trace: str | None = None
|
|
734
|
+
rehydrated_text: str | None = None
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
class GetUserPlaybooksViewResponse(BaseModel):
|
|
738
|
+
"""API response for retrieving user playbooks — uses View types."""
|
|
739
|
+
|
|
740
|
+
success: bool
|
|
741
|
+
user_playbooks: list[UserPlaybookView]
|
|
742
|
+
msg: str | None = None
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
class GetAgentPlaybooksViewResponse(BaseModel):
|
|
746
|
+
"""API response for retrieving agent playbooks — uses View types."""
|
|
747
|
+
|
|
748
|
+
success: bool
|
|
749
|
+
agent_playbooks: list[AgentPlaybookView]
|
|
750
|
+
msg: str | None = None
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
class SearchUserPlaybooksViewResponse(BaseModel):
|
|
754
|
+
"""API response for searching user playbooks — uses View types."""
|
|
755
|
+
|
|
756
|
+
success: bool
|
|
757
|
+
user_playbooks: list[UserPlaybookView]
|
|
758
|
+
msg: str | None = None
|
|
759
|
+
|
|
760
|
+
|
|
761
|
+
class SearchAgentPlaybooksViewResponse(BaseModel):
|
|
762
|
+
"""API response for searching agent playbooks — uses View types."""
|
|
763
|
+
|
|
764
|
+
success: bool
|
|
765
|
+
agent_playbooks: list[AgentPlaybookView]
|
|
766
|
+
msg: str | None = None
|