Conversation
…warning for missing paths (#4695) After parsing each collection, warn (do not raise) for any declared path that does not exist relative to the repo root. Adds repo_root param to load_synthesis_schema() (defaults to __file__-relative root) and threads it through _parse_collection(). Adds 3 tests: existing path → no warning, missing path → warning, mixed list → one warning per missing path.
fix(tools): replace hardcoded _BUILTIN_TOOL_SCHEMAS with imported constants (#4561)
fix(rag): wire expanded_queries into _retrieve_hybrid_results (#4685)
…stale paths (#4689) Add `_filter_stale_chunks()` to RAGService: after each ChromaDB retrieval, load the DocIndexer hash cache and drop any chunks whose source_path is absent (file removed/moved since last index run). Logs a WARNING with the stale path list. Graceful fallback: if the cache file is missing, empty, or unreadable the full result list is returned unchanged so RAG is never disrupted. Called from `advanced_search()` after `_execute_and_cache_search`. 6 unit tests cover: valid chunk passes through, stale chunk filtered, warning logged, cache unavailable → no filter, empty cache → no filter, missing cache file → no filter.
fix(rag): wire advanced_search_with_refinement into RAGService (#4696)
… runs (#4655) get_doc_indexer_service() now lazily resolves the process-level LLMService singleton when no llm_service is supplied, ensuring DocIndexerService is never created with _llm_service=None and _run_kb_synthesis() can call the LLM without an AttributeError. Three new tests cover the lazy-resolution path, explicit-injection path, and the _run_kb_synthesis → synthesize_docs call chain.
…ice (#4686) NeuralMeshRetriever requires 7+ injected dependencies (PPR, EdgeLearner, mesh_db, etc.) that don't exist in any production startup path. Remove _mesh_retriever field, _run_mesh_retriever() method, the guard block in advanced_search(), and mesh_retriever_enabled from RAGConfig.to_dict(). NeuralMeshRetriever class itself is retained — it has its own tests.
fix(knowledge): pass llm_service to DocIndexerService so KB synthesis runs (#4655)
fix(rag): validate source paths on retrieved chunks — filter stale paths (#4689)
fix(knowledge): validate synthesis_schema source paths on load — warn on missing (#4695)
fix(rag): remove dead NeuralMeshRetriever injection gate from RAGService (#4686)
…4697) Add TestRealKBBenchmarks class to rag_benchmarks.py that seeds a real ChromaDB EphemeralClient with 40 domain-relevant documents across 4 topics (Python, database, networking, ML/RAG) and runs precision@k assertions using deterministic term-frequency embeddings. No external services required. Also register the real_kb pytest marker and make the benchmark_base import non-fatal so TestRealKBBenchmarks can be collected independently. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…vice config (#4661) Add AUTOBOT_CHAT_ENDPOINT, AUTOBOT_RAG_ENDPOINT, and AUTOBOT_CLASSIFICATION_ENDPOINT to ai-stack.env.j2 template and corresponding defaults in defaults/main.yml pointing to the Ollama host/port. These vars are required by get_agent_endpoint_explicit() in ssot_config.py — without them all three core agents fail to initialize on startup.
…ns (#4664) Enhance _create_permissive_ssl_context() with a 4-level trust hierarchy: 1. AUTOBOT_TLS_CA_PATH env var — load explicit CA cert (production mTLS) 2. AUTOBOT_SKIP_TLS_VERIFY=true — disable verification (dev/test only) 3. AutoBot project CA fallback (certs/ca/ca-cert.pem) — covers single-host installs where the SLM uses an AutoBot-issued self-signed cert 4. System trust store — default Python SSL behaviour Add slm_client_test.py with 11 tests covering SSL trust hierarchy and exponential backoff in the WebSocket reconnect loop. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(deployment): add missing AUTOBOT_*_ENDPOINT env vars to ai-stack template (#4661)
fix(backend): trust self-signed CA cert for internal WebSocket connections (#4664)
…le paths were returned on fallback path (#4721) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…_costs, get_all_agent_costs, _fetch_model_costs (#4443) Eliminates O(N) blocking KEYS command across three cost-tracking methods; adds 5 async unit tests verifying scan_iter is called and daily sub-keys are correctly filtered.
…am — was patching non-existent get_redis_client (#4720)
fix(testing): patch get_async_redis_client in TestStoreFeedbackInStream (#4720)
fix(rag): call _filter_stale_chunks() in _fallback_basic_search — stale paths on fallback path (#4721)
fix(usage): replace redis.keys() with async scan_iter in cost tracker — eliminates O(N) block (#4443)
#4729) Add CAUSAL_ANALYSIS to ThinkCategory enum and think_causally() convenience function to agent_loop/think_tool.py; fix _extract_root_cause to prefer conclusion over reasoning for root cause extraction; mark integration test xfail where llama_index optional dep is absent.
…circular import (#4557) Circular import chain: chat_workflow.__init__ → manager → tool_handler → tools (code_interpreter) → tools.__init__ → tool_registry → chat_workflow.tool_handler (partially initialized, ImportError). Fix: remove the module-level `from chat_workflow.tool_handler import BROWSER_TOOL_NAMES` in tool_registry.py and move it inside get_available_tools() as a lazy import. This breaks the cycle while preserving the single-source-of-truth semantics documented in #2609. Result: 262 chat_workflow unit tests now collect and pass.
…r._synthesize_cluster (#4656) KBSynthesizer never called log_run after synthesis, so GET /knowledge/synthesis/log always returned empty for KB runs. Injects SynthesisProvenanceLog at __init__ (same pattern as KnowledgeSynthesizer) and calls log_run after _index_documents succeeds. Adds two tests: log_run called on success, not called on LLM error. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…_schema.yaml (#4688) - CollectionConfig gains optional synthesis_model field (None by default) - _ALLOWED_KEYS updated; _parse_collection validates non-empty string when present - KBSynthesizer._synthesize_cluster passes model= kwarg to llm.chat() when override is set - synthesis_schema.yaml documents the field via a commented example - 8 new unit tests: loader validation (omit/parse/empty/whitespace/mixed) + synthesizer model routing (override/no-override/no-config) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(testing): lazy-load BROWSER_TOOL_NAMES import in tool_registry — breaks circular import (#4557)
fix(testing): add think_causally + ThinkCategory.CAUSAL_ANALYSIS — fix broken test_causal_reasoning.py (#4729)
fix(testing): add missing sys.modules stubs for autobot_shared sub-modules in test_property_graph.py (#4730)
feat(kb): DocIndexerService.search() merges autobot_docs into RAGService (#4953)
… variable in sys.path.append (#4945) Replace literal '${AUTOBOT_PROJECT_ROOT:-/opt/autobot/code_source}' strings (which Python never expands) with os.environ.get("AUTOBOT_PROJECT_ROOT", "/opt/autobot/code_source") across 30 files. Add missing import os where needed.
…itter is counted as failed not skipped (#4938) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…_normalize_dow_field (#4944) Add range-step pattern r'(\d+)-(\d+)/(\d+)' to _replace_token so that tokens like '1-7/2' are rewritten to '1-6/2,0' instead of falling through to the scalar branch unchanged. Add 4 tests covering '1-7/2', '5-7/2', '0-7/2', and end-to-end firing on Sunday.
…ard is effective (#4937) Set self._running = True at the start of run_once() and reset it to False in a finally block, so the get_loop_orchestrator() singleton guard added in #4917 correctly prevents replacing an in-flight orchestrator. Add 5 tests covering _running lifecycle and singleton guard behavior.
fix(infrastructure): use os.environ.get() instead of unexpanded shell variable in sys.path (#4945)
fix(mesh): store community_cluster_task on app.state and cancel on shutdown (#4946)
fix(knowledge): propagate dep_error so missing tree-sitter counts as failed not skipped (#4938)
fix(scheduler): normalize day-7 in range-step tokens like '1-7/2' in _normalize_dow_field (#4944)
fix(knowledge): set _running=True during loop execution so re-init guard is effective (#4937)
…for frontend dialog (#4959) RedisEventStreamManager (agent_loop) and LiveEventManager (WebSocket/frontend) are two disconnected event buses. After publishing APPROVAL_REQUIRED to the Redis bus, also call publish_live_event("global", "tool_approval_required", ...) so the WebSocket layer receives the event and the frontend approval dialog fires.
…r TS7016 compatibility (#4534) - Add ManPageManager.vue.d.ts stub matching SystemKnowledgeManager pattern - Add ManPageManager export to manpage/index.ts barrel - Create ui/index.ts barrel exporting all ui components - CommandPermissionDialog and TerminalWindow already had .vue.d.ts stubs - vue-tsc reports no TS7016 errors and no new errors introduced (1939 baseline maintained) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
fix(agent_loop): bridge APPROVAL_REQUIRED events to LiveEventManager for frontend dialog (#4959)
feat(agent_terminal): add countdown timer to tool approval dialog (#4960)
refactor(frontend): add TypeScript stubs for Options API Vue components (#4534)
…ostSelectionDialog (#4806) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds autobot-frontend/scripts/check-i18n-keys.mjs that statically extracts all $t() and t() calls from .vue/.ts source files, resolves them against src/i18n/locales/en.json, and exits 1 if any keys are absent. Wired as `npm run check:i18n` in package.json and added as a CI step in both .github/workflows/ci.yml and frontend-test.yml so missing translations are caught on every push/PR. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…4676) Add publish_feedback_events() evaluator adapter to rag_benchmarks.py that publishes synthetic rag:feedback:__global__:{date} Redis stream entries from precision@k benchmark results, plus run_benchmark_suite() to execute the benchmark against an ephemeral ChromaDB collection. Add POST /rag/benchmark/run endpoint in knowledge_rag.py so the suite can be triggered manually or via scheduler. RetrievalLearner.consume_feedback_stream() picks up these events unchanged (no schema modifications). Five new unit tests cover the full benchmark → feedback → pattern-distillation round-trip. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
feat(rag): wire rag_benchmarks into RetrievalLearner feedback loop (#4676)
fix(ui): add ARIA roles, labels and focus management to BaseModal, DataTable, HostSelectionDialog (#4806)
feat(i18n): add CI check script for missing i18n keys (#4826)
Brings main up to date with Dev_new_gui. Resolves 31 conflicts by taking Dev_new_gui as authoritative (confirmed #4571 content already present in Dev_new_gui before merge). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
api/user_management module existed but was never registered — endpoints were unreachable. Ported registration from main (#4571) that bypassed Dev_new_gui. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Dev_new_guiintomainWhat's included (recent highlights)
🤖 Generated with Claude Code