Skip to content

apomesh-vertical-deep-research

apomesh-vertical-deep-research is a substrate-coupled vertical: a use-case that sits beside the substrate and drives it, rather than living inside it. It implements the orchestrator’s SessionStrategy seam to specialize the VMAO loop for verified-citation research reports — plan sub-topics, fan out grounded web workers, verify each worker’s citations, gate on coverage, and synthesize a typed report. It also re-expresses the research domain as three tier-keyed skills so the same discipline rides the substrate’s skill carrier into any coordination skeleton. Touch it when you change how deep research plans, grounds, verifies, or writes its reports. The reverse-pipeline posture holds: a shape here migrates into the substrate only when a second vertical needs the same thing — until then it stays vertical-side, and the substrate gains no knowledge of any one vertical.

  • Layer: vertical (substrate-coupled use-case). See Coordination loops for the SessionStrategy seam it plugs into.
  • Depends on: apomesh-orchestrator (the SessionStrategy seam + VMAO hooks), apomesh-substrate (agent, predicate, skill, and coordinator primitives), and apomesh-protocol (the wire types). Plus the dependency-light apomesh-vertical-deep-research-projection sibling (below).
  • Consumed by: only apomesh-orchestrator-bin — the assembly point that registers the strategy and its skills at boot. The heavy runtime crate enters no other crate by design; the console, worker, and orchestrator library depend on the projection sibling instead.
  • The research strategyDeepResearchStrategy, the SessionStrategy impl that wires VMAO’s four extension points: planner prompt, planner-response parsing (into a DeepResearchPlan), a post-execute validator-pairing hook, a post-verify coverage check, and synthesis.
  • The research skills — the domain re-expressed as three tier-keyed Skills (research-worker, research-synthesizer, research-validator), bound per role so the same framing runs under any skeleton.
  • Two-mode verificationmechanical: one Validator paired per Worker runs Predicate::URLContentMatch against each claim’s cited URLs inside the tool sandbox; LLM-judge: a session-level coverage check runs a Predicate::LLMJudge whose rubric is derived one-to-one from the planner’s sub-topics, and the validator skill carries a citation-grounding rubric.
  • The tuning surfaceDeepResearchConfig, deserialized from the opaque vertical_config launch bytes the substrate ferries but never interprets (see Agent configuration).
  • The typed reportDeepResearchReport / ReportSection / ResearchClaim, with a JSON schema pinned to the Rust type.
  • The memory-ablation eval harness (eval) — cassette record/replay and a memory-mode ablation corpus that measures grounded fact-recall across episodic / semantic / full-context injection.

The dependency-light apomesh-vertical-deep-research-projection sibling holds deep research’s tier-4 open-vocabulary consumer surfaces — the pure coverage-audit ExtensionHandler and the sandboxed coverage-schema verification unit — split into their own crate so the light Tauri console and the worker can register them without pulling this heavy runtime. This crate re-exports them verbatim, so its public API is unchanged; that sibling is documented on its own page.

Verified against HEAD. This is a curated map, not the full rustdoc.

  • DeepResearchEntry — the composition the loop engine runs for this kind. This replaced the DeepResearchStrategy impl that plugged into VMAO’s fixed hook positions: the phase sequencing, cap arithmetic, checkpointing and convergence are the engine’s now, and what stays here is the planner-response parser plus the mapping from config and goal to a definition.
  • DeepResearchConfig — per-launch tuning (synthesis depth, coverage/citation strictness, sub-topic breadth, min-claims floor); every field defaulted, malformed bytes fall back to shipped defaults.
  • deep_research_skills() — the three tier-keyed Skills in stable id order.
  • RESEARCH_WORKER_SKILL_ID / RESEARCH_SYNTHESIZER_SKILL_ID / RESEARCH_VALIDATOR_SKILL_ID — operator-stable skill ids under the io.descoped/ namespace.
  • register_deep_research_skills() — upserts the pack into a tenant’s SkillRegistry at boot.
  • deep_research_report_schema() — the JSON schema for DeepResearchReport, pinned to the Rust type by a drift-guard test.
  • DeepResearchReport — the typed report the synthesizer emits (title, sections, summary).
  • register_deep_research_extension_handlers() / register_deep_research_verification_units() — re-exported from the projection sibling; register deep research’s tier-4 consumer surfaces.

The strategy is not called directly — the orchestrator daemon binary wires it in at boot. It wraps DeepResearchStrategy in a VmaoCoordinator, registers it in the SessionStrategyRegistry, and registers the skill pack for the tenant:

use apomesh_vertical_deep_research::{DeepResearchStrategy, register_deep_research_skills};
// Plug the strategy into the VMAO skeleton and register it as a coordinator.
let deep_research: Arc<dyn SessionEntry> = Arc::new(
VmaoCoordinator::with_strategy(session.clone(), router.clone(), DeepResearchStrategy)
.with_prompt_processor_registry(prompt_processor_registry.clone()),
);
let registry = Arc::new(SessionStrategyRegistry::with_deep_research(
generic, evaluator_optimizer, parallel_sample, debate, deep_research,
));
// Register the three tier-keyed research skills for the tenant.
register_deep_research_skills(skill_registry.as_ref(), &tenant_ctx).await?;

To launch a deep-research session against a running stack, see Deep research.