omnius 1.0.676 → 1.0.678

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.
@@ -15,18 +15,45 @@ The host validates all identifiers, citations, panel results, and the verdict.
15
15
  The tool holds the case when it cannot validate the required quorum or final
16
16
  contract. It does not guess a result.
17
17
 
18
+ ## Clean-context purpose
19
+
20
+ The main agent context can contain old plans, persuasive language, stale
21
+ assumptions, and momentum from work that happened before the current decision.
22
+ `adjudicate` does not pass that transcript into the panel. The parent must first
23
+ freeze one explicit admissible record. Each constituent starts in a fresh
24
+ context and receives only its assignment, the relevant record subset, and the
25
+ decision rules. The judge receives the immutable record and validated public
26
+ findings. It does not receive the parent's accumulated narrative.
27
+
28
+ This boundary reduces anchoring and accidental context contamination. It does
29
+ not guarantee an unbiased decision. Record selection, question framing,
30
+ decision rules, and model behavior can still influence the result. The receipt
31
+ makes those inputs, exclusions, validation failures, findings, and dissent
32
+ auditable instead of hiding them in the parent context.
33
+
18
34
  ## Availability
19
35
 
20
- `adjudicate` is an agent-bound tool in the top-level interactive TUI. Start
21
- `omnius` and ask the active agent to adjudicate an exact impasse with an
22
- admissible evidence record. The tool is intentionally unavailable to child
23
- agents. This prevents nested panels, recursive terminal projections, and
24
- unbounded inference fan-out.
36
+ `adjudicate` is an agent-bound tool in each top-level full-agent path:
37
+
38
+ | Surface | Execution | Progress projection |
39
+ | --- | --- | --- |
40
+ | Interactive `omnius` TUI | Yes | Specialized streamed adjudication block |
41
+ | One-shot `omnius "<task>"` | Yes | Ordinary tool events and final result |
42
+ | `POST /v1/run` | Yes, subject to the selected tool profile | Run events and final result |
43
+ | Default full-agent `POST /v1/chat` | Yes, subject to the selected tool profile | Chat/run events and final result |
25
44
 
26
- The daemon direct-tool registry does not currently expose this tool. Do not
45
+ The tool is intentionally unavailable to child agents. This prevents nested
46
+ panels, recursive terminal projections, and unbounded inference fan-out.
47
+ Constituents are isolated tools-free inference contexts inside the
48
+ adjudication engine. They are not `full_sub_agent` workers, so an empty
49
+ sub-agent activity list does not indicate that panel fan-out was skipped.
50
+
51
+ The daemon direct-tool registry, `/v1/chat/completions` bounded mini-loop,
52
+ Telegram runners, and voice-call runners do not expose the native tool. Do not
27
53
  infer `GET /v1/tools/adjudicate` or
28
- `POST /v1/tools/adjudicate/call` from the tool name. Use
29
- `omnius show tool.adjudicate` for its static discovery contract.
54
+ `POST /v1/tools/adjudicate/call` from the tool name. A caller-supplied OpenAI
55
+ tool with the same name is not the native Omnius implementation. Use
56
+ `omnius show tool.adjudicate` for the static discovery contract.
30
57
 
31
58
  ## When to use it
32
59
 
@@ -36,7 +63,7 @@ Use `adjudicate` when all of these conditions are true:
36
63
  - Two or more outcomes remain materially plausible.
37
64
  - The decision affects the next action.
38
65
  - The available evidence conflicts or supports different risk tradeoffs.
39
- - A fresh, impartial context can assess the decision more reliably than the
66
+ - A fresh, evidence-scoped context can assess the decision more reliably than the
40
67
  main loop's large working context.
41
68
 
42
69
  Do not use it for an ordinary implementation choice, a factual lookup, or a
@@ -174,6 +201,11 @@ The host rejects unknown IDs and incomplete evidence coverage. It retries one
174
201
  time with validation codes only. The invalid model output is not added to the
175
202
  repair prompt.
176
203
 
204
+ Planner, constituent, and judge requests use strict provider JSON Schemas.
205
+ When a visible response still fails host validation, the receipt retains
206
+ bounded field-level issue codes, a response hash, and a content-free top-level
207
+ shape summary. It does not retain the rejected response body.
208
+
177
209
  ### 3. Constituent fan-out
178
210
 
179
211
  The host runs assignments with bounded concurrency. Each constituent gets a
@@ -36087,7 +36087,7 @@
36087
36087
  "id": "tool.adjudicate",
36088
36088
  "kind": "tool",
36089
36089
  "title": "Evidence-bound adjudication",
36090
- "summary": "Resolve one genuine decision impasse through an isolated evidence record, independently scoped constituent review, host-validated citations and quorum, a final judge, and a durable verdict receipt.",
36090
+ "summary": "Resolve one genuine decision impasse outside the accumulated parent narrative through a frozen evidence record, fresh scoped constituent review, host-validated citations and quorum, a final judge, and a durable verdict receipt.",
36091
36091
  "aliases": [
36092
36092
  "adjudicate",
36093
36093
  "adjudication",
@@ -36114,19 +36114,35 @@
36114
36114
  ],
36115
36115
  "direct_callable": false,
36116
36116
  "use_when": [
36117
- "The top-level interactive agent has one exact unresolved decision with at least two materially plausible outcomes",
36117
+ "A top-level full agent has one exact unresolved decision with at least two materially plausible outcomes",
36118
36118
  "The admissible evidence supports conflicting conclusions or risk tradeoffs",
36119
- "The decision changes the next action and benefits from isolated impartial review"
36119
+ "The decision changes the next action and benefits from fresh evidence-scoped review that reduces parent-context anchoring",
36120
+ "The caller can make record selection and framing explicit and auditable"
36120
36121
  ],
36121
36122
  "avoid_when": [
36122
36123
  "The question is an ordinary implementation choice, factual lookup, or substitute for gathering missing evidence",
36123
- "The caller is a child agent, daemon direct-tool client, REST run, or Telegram tool loop"
36124
+ "The caller is a child agent, daemon direct-tool client, bounded /v1/chat/completions loop, Telegram runner, or voice-call runner"
36124
36125
  ],
36125
36126
  "interfaces": [
36126
36127
  {
36127
36128
  "type": "tui-agent-tool",
36128
36129
  "target": "omnius",
36129
- "description": "Registered only in the top-level interactive agent tool catalog"
36130
+ "description": "Top-level interactive agent with the specialized streamed adjudication block"
36131
+ },
36132
+ {
36133
+ "type": "cli-agent-tool",
36134
+ "target": "omnius \"<task>\"",
36135
+ "description": "Top-level one-shot agent with ordinary tool events"
36136
+ },
36137
+ {
36138
+ "type": "agent-run",
36139
+ "target": "POST /v1/run",
36140
+ "description": "Spawned top-level full agent; subject to the active tool profile"
36141
+ },
36142
+ {
36143
+ "type": "agent-chat",
36144
+ "target": "POST /v1/chat",
36145
+ "description": "Default full-agent chat mode; subject to the active tool profile"
36130
36146
  }
36131
36147
  ],
36132
36148
  "references": [
@@ -36164,15 +36180,15 @@
36164
36180
  "expected": "Parallel constituent streams, judge synthesis, and a durable receipt complete without loading a real model"
36165
36181
  },
36166
36182
  {
36167
- "check": "Inspect the top-level and child-agent tool registration tests",
36168
- "expected": "The top-level tool list includes adjudicate and child-agent lists exclude it"
36183
+ "check": "Inspect the parent-runner and child-agent tool registration tests",
36184
+ "expected": "Top-level full agents keep adjudicate inline and host scope enforcement excludes it from child runners"
36169
36185
  }
36170
36186
  ],
36171
36187
  "failure_modes": [
36172
36188
  {
36173
36189
  "symptom": "A caller attempts /v1/tools/adjudicate/call",
36174
36190
  "likely_cause": "Static tool discovery was mistaken for daemon direct-tool exposure",
36175
- "recovery": "Use the top-level interactive TUI agent"
36191
+ "recovery": "Use a top-level TUI, one-shot CLI, /v1/run, or default full-agent /v1/chat path"
36176
36192
  },
36177
36193
  {
36178
36194
  "symptom": "The case returns held instead of a verdict",
@@ -44127,7 +44143,7 @@
44127
44143
  "id": "workflow.evidence-bound-adjudication",
44128
44144
  "kind": "workflow",
44129
44145
  "title": "Resolve an evidence-bound decision impasse",
44130
- "summary": "Admit one exact decision record, isolate constituent review, validate citations and quorum, synthesize a verdict through a final judge, and preserve a durable receipt without granting the panel tools or mutation authority.",
44146
+ "summary": "Freeze one exact decision record outside the accumulated parent narrative, run fresh evidence-scoped constituent review, validate citations and quorum, synthesize a verdict through a final judge, and preserve an auditable durable receipt without granting the panel tools or mutation authority.",
44131
44147
  "aliases": [
44132
44148
  "adjudicate impasse",
44133
44149
  "impartial review",
@@ -44141,7 +44157,8 @@
44141
44157
  "judge",
44142
44158
  "verdict",
44143
44159
  "dissent",
44144
- "receipt"
44160
+ "receipt",
44161
+ "anchoring"
44145
44162
  ],
44146
44163
  "maturity": "stable",
44147
44164
  "layer": "orchestration",
@@ -44151,7 +44168,7 @@
44151
44168
  "interactive-user"
44152
44169
  ],
44153
44170
  "prerequisites": [
44154
- "Top-level interactive TUI agent",
44171
+ "Top-level full-agent TUI, one-shot CLI, /v1/run, or default /v1/chat path",
44155
44172
  "One exact unresolved decision",
44156
44173
  "At least two allowed outcomes",
44157
44174
  "Caller-supplied admissible evidence"
@@ -44180,7 +44197,7 @@
44180
44197
  },
44181
44198
  {
44182
44199
  "step": "3",
44183
- "action": "Run tools-free constituent assessments in fresh scoped contexts with bounded concurrency.",
44200
+ "action": "Run tools-free constituent assessments in fresh scoped contexts that do not receive the parent transcript.",
44184
44201
  "expected": "Public findings cite only assigned evidence"
44185
44202
  },
44186
44203
  {
@@ -44190,18 +44207,19 @@
44190
44207
  },
44191
44208
  {
44192
44209
  "step": "5",
44193
- "action": "Have the judge apply the burden and rules, preserve material dissent, and select an allowed outcome or insufficient_evidence.",
44210
+ "action": "Have the judge apply the burden and rules to the immutable record and validated findings, preserve material dissent, and select an allowed outcome or insufficient_evidence.",
44194
44211
  "expected": "A host-validated verdict or held case"
44195
44212
  },
44196
44213
  {
44197
44214
  "step": "6",
44198
- "action": "Inspect the CLI block and durable receipt before acting on the decision.",
44199
- "expected": "The decision is traceable to the admitted record, validated findings, and receipt hashes"
44215
+ "action": "Inspect the available run events and durable receipt before acting on the decision.",
44216
+ "expected": "The decision and remaining framing risks are traceable to the admitted record, validated findings, and receipt hashes"
44200
44217
  }
44201
44218
  ],
44202
44219
  "avoid_when": [
44203
44220
  "Using adjudication to replace normal judgment, gather evidence, or let a child agent spawn nested panels",
44204
- "Inferring a REST, daemon direct-call, or Telegram exposure that is not registered"
44221
+ "Treating clean contexts as a guarantee against biased record selection, framing, rules, or model behavior",
44222
+ "Inferring a direct registry, /v1/chat/completions, Telegram, voice, or child-agent exposure that is not registered"
44205
44223
  ],
44206
44224
  "verification": [
44207
44225
  {
@@ -44221,8 +44239,8 @@
44221
44239
  },
44222
44240
  {
44223
44241
  "symptom": "A direct REST call is attempted",
44224
- "likely_cause": "Agent-bound static discovery was confused with direct registry exposure",
44225
- "recovery": "Invoke through the top-level interactive TUI agent only"
44242
+ "likely_cause": "Agent-bound full-agent exposure was confused with direct registry exposure",
44243
+ "recovery": "Use top-level TUI, one-shot CLI, /v1/run, or default full-agent /v1/chat"
44226
44244
  }
44227
44245
  ],
44228
44246
  "source_of_truth": [
package/docs/DISCOVERY.md CHANGED
@@ -648,7 +648,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
648
648
 
649
649
  | ID | Title | Summary |
650
650
  | --- | --- | --- |
651
- | `tool.adjudicate` | Evidence-bound adjudication | Resolve one genuine decision impasse through an isolated evidence record, independently scoped constituent review, host-validated citations and quorum, a final judge, and a durable verdict receipt. |
651
+ | `tool.adjudicate` | Evidence-bound adjudication | Resolve one genuine decision impasse outside the accumulated parent narrative through a frozen evidence record, fresh scoped constituent review, host-validated citations and quorum, a final judge, and a durable verdict receipt. |
652
652
  | `tool.agenda` | Agenda | agenda is a directly callable Omnius tool. |
653
653
  | `tool.agent` | Agent | agent is a directly callable Omnius tool. |
654
654
  | `tool.aiwg-health` | Aiwg Health | aiwg_health is a directly callable Omnius tool. |
@@ -794,7 +794,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
794
794
  | `workflow.daemon-tray-update` | Operate daemon, tray, and updates | Ensure one current daemon owns the service port, start the tray against it, install updates through the real global npm flow, stream progress, restart components, and verify the target runtime. |
795
795
  | `workflow.debug-runtime` | Debug an Omnius runtime failure | Diagnose from identity and ownership outward: version, health, port/process, live contract, status/events, state scope, logs/evidence, then the owning module. |
796
796
  | `workflow.direct-tool-call` | Call a directly exposed tool | Inspect live metadata, confirm direct-call exposure and safety, submit the exact schema, and verify the tool result. |
797
- | `workflow.evidence-bound-adjudication` | Resolve an evidence-bound decision impasse | Admit one exact decision record, isolate constituent review, validate citations and quorum, synthesize a verdict through a final judge, and preserve a durable receipt without granting the panel tools or mutation authority. |
797
+ | `workflow.evidence-bound-adjudication` | Resolve an evidence-bound decision impasse | Freeze one exact decision record outside the accumulated parent narrative, run fresh evidence-scoped constituent review, validate citations and quorum, synthesize a verdict through a final judge, and preserve an auditable durable receipt without granting the panel tools or mutation authority. |
798
798
  | `workflow.extend-omnius` | Extend or modify Omnius safely | Locate the owning layer/module and canonical registry, change the smallest source boundary, update discovery/docs/contracts, and run targeted plus freshness tests. |
799
799
  | `workflow.provider-selection` | Select an inference provider and model | Resolve an explicit provider protocol, credentials, endpoint, and model; verify live reachability and hardware placement for local inference. |
800
800
  | `workflow.publish-package` | Build and publish the Omnius package | Follow the repository Minimal Publish SOP: clean all workspaces, rebuild, bundle publish/, inspect a local-cache tarball, patch-bump, publish only from publish/, and verify npm metadata. |
@@ -110,7 +110,7 @@
110
110
  {"id":"workflow.stateful-chat","kind":"workflow","title":"Use stateful daemon chat","summary":"Create or select a real chat session, send conversational turns, and load its history without treating control commands such as /quit as chats.","aliases":["chat sessions","history"],"keywords":["session","conversation","history"],"maturity":"stable","layer":"memory","audiences":["integrator","service-agent"],"workflow":[{"step":"1","action":"List or create sessions through the documented chat/session routes.","interface":"GET /v1/chats and chat creation route"},{"step":"2","action":"Send user content through POST /v1/chat with the selected session identity.","interface":"POST /v1/chat"},{"step":"3","action":"Load message history when selecting the session and distinguish UI/control events from conversational turns.","expected":"The selected chat displays its saved conversation"}],"verification":[{"check":"Reload the selected session","expected":"History is restored and control-only commands are absent from the chat list"}],"failure_modes":[{"symptom":"Chats named quit or duplicate Last task summaries appear","likely_cause":"Control/task metadata was projected as a chat session","recovery":"Use the canonical session registry and filter non-conversational control records"}],"source_of_truth":["packages/cli/src/api/chat-session.ts","packages/cli/src/api/session-summary.ts","packages/cli/src/api/web-ui.ts"]},
111
111
  {"id":"workflow.direct-tool-call","kind":"workflow","title":"Call a directly exposed tool","summary":"Inspect live metadata, confirm direct-call exposure and safety, submit the exact schema, and verify the tool result.","aliases":["tool REST call"],"keywords":["direct_callable","schema"],"maturity":"stable","layer":"execution","audiences":["integrator","service-agent"],"workflow":[{"step":"1","action":"Inspect the tool metadata and direct_callable flag.","interface":"GET /v1/tools/{name}","expected":"A rest-call interface is explicitly present"},{"step":"2","action":"Validate arguments against the returned parameter schema and call the exact route.","interface":"POST /v1/tools/{name}/call"},{"step":"3","action":"Inspect the structured output and any side effects.","expected":"Tool-specific verified result"}],"avoid_when":["The tool is agent-bound, unavailable, profile-gated, or lacks a rest-call interface"],"verification":[{"check":"Metadata, schema, and result all agree","expected":"No inferred route or unvalidated arguments"}],"failure_modes":[{"symptom":"Direct call returns not found or not callable","likely_cause":"The route was inferred or live exposure changed","recovery":"Re-read GET /v1/tools/{name}; use an agent-bound workflow when no rest-call interface exists"}],"source_of_truth":["packages/cli/src/api/direct-tool-registry.ts","packages/execution/src/tools/tool-manifest.ts"]},
112
112
  {"id":"workflow.agent-bound-tools","kind":"workflow","title":"Use agent-bound tools such as web_search","summary":"Offer a non-direct tool to an Omnius agent loop through run/chat instead of inventing a direct REST call.","aliases":["web search","daemon tools"],"keywords":["agent loop","web_search","tool exposure"],"maturity":"stable","layer":"execution","audiences":["integrator","coding-agent"],"workflow":[{"step":"1","action":"Inspect live tool metadata, security classification, availability, and schema.","interface":"GET /v1/tools/web_search"},{"step":"2","action":"Offer the tool through an agent-capable surface and a compatible tool profile.","interface":"POST /v1/run or POST /v1/chat/completions with agent_loop=true"},{"step":"3","action":"Require source/provenance verification appropriate to the research task.","expected":"The agent executes the bound tool and returns evidence"}],"avoid_when":["Calling POST /v1/tools/web_search/call unless live metadata explicitly adds direct exposure"],"verification":[{"check":"Inspect run/chat tool events and returned source evidence","expected":"The intended tool actually ran and its claims are traceable"}],"failure_modes":[{"symptom":"Direct tool URL is missing","likely_cause":"The tool is intentionally agent-bound","recovery":"Use /v1/run or agent-loop chat with the tool offered"}],"source_of_truth":["docs/guides/tools-and-web-search.md","packages/execution/src/tools/web-search.ts"]},
113
- {"id":"workflow.evidence-bound-adjudication","kind":"workflow","title":"Resolve an evidence-bound decision impasse","summary":"Admit one exact decision record, isolate constituent review, validate citations and quorum, synthesize a verdict through a final judge, and preserve a durable receipt without granting the panel tools or mutation authority.","aliases":["adjudicate impasse","impartial review","decision court","constituent panel"],"keywords":["evidence","arguments","quorum","judge","verdict","dissent","receipt"],"maturity":"stable","layer":"orchestration","audiences":["coding-agent","maintainer","interactive-user"],"prerequisites":["Top-level interactive TUI agent","One exact unresolved decision","At least two allowed outcomes","Caller-supplied admissible evidence"],"inputs":["question","allowed outcomes","evidence","optional arguments, decision rules, burden, constituents, and quorum"],"outputs":["validated findings","verdict or held status","durable receipt"],"workflow":[{"step":"1","action":"Confirm that a genuine impasse exists and submit an immutable record with stable evidence and argument IDs.","expected":"Host admission succeeds and creates a record hash"},{"step":"2","action":"Frame or validate distinct constituent assignments with explicit evidence subsets.","expected":"Every admitted evidence item is covered without unknown IDs"},{"step":"3","action":"Run tools-free constituent assessments in fresh scoped contexts with bounded concurrency.","expected":"Public findings cite only assigned evidence"},{"step":"4","action":"Validate findings and require quorum before invoking the judge.","expected":"Invalid findings cannot create facts or satisfy quorum"},{"step":"5","action":"Have the judge apply the burden and rules, preserve material dissent, and select an allowed outcome or insufficient_evidence.","expected":"A host-validated verdict or held case"},{"step":"6","action":"Inspect the CLI block and durable receipt before acting on the decision.","expected":"The decision is traceable to the admitted record, validated findings, and receipt hashes"}],"avoid_when":["Using adjudication to replace normal judgment, gather evidence, or let a child agent spawn nested panels","Inferring a REST, daemon direct-call, or Telegram exposure that is not registered"],"verification":[{"check":"Run pnpm harness:adjudication","expected":"The deterministic panel overlaps constituent work, streams attributed assessments, synthesizes a verdict, and persists a receipt"},{"check":"Inspect .omnius/adjudications/<case-id>/<run>/receipt.json","expected":"Hashes, quorum, validation failures, elapsed time, and final status are present"}],"failure_modes":[{"symptom":"The case is held before judgment","likely_cause":"The record, framing, findings, or quorum failed host validation","recovery":"Use receipt validation codes to correct the admissible record; do not guess an outcome"},{"symptom":"A direct REST call is attempted","likely_cause":"Agent-bound static discovery was confused with direct registry exposure","recovery":"Invoke through the top-level interactive TUI agent only"}],"source_of_truth":["docs/ADJUDICATION.md","packages/orchestrator/src/adjudication.ts","packages/cli/src/tui/interactive.ts","scripts/adjudication-impasse-harness.mjs"],"related":["tool.adjudicate","layer.orchestration","layer.observability","module.orchestrator","guide.adjudication-uppercase"]},
113
+ {"id":"workflow.evidence-bound-adjudication","kind":"workflow","title":"Resolve an evidence-bound decision impasse","summary":"Freeze one exact decision record outside the accumulated parent narrative, run fresh evidence-scoped constituent review, validate citations and quorum, synthesize a verdict through a final judge, and preserve an auditable durable receipt without granting the panel tools or mutation authority.","aliases":["adjudicate impasse","impartial review","decision court","constituent panel"],"keywords":["evidence","arguments","quorum","judge","verdict","dissent","receipt","anchoring"],"maturity":"stable","layer":"orchestration","audiences":["coding-agent","maintainer","interactive-user"],"prerequisites":["Top-level full-agent TUI, one-shot CLI, /v1/run, or default /v1/chat path","One exact unresolved decision","At least two allowed outcomes","Caller-supplied admissible evidence"],"inputs":["question","allowed outcomes","evidence","optional arguments, decision rules, burden, constituents, and quorum"],"outputs":["validated findings","verdict or held status","durable receipt"],"workflow":[{"step":"1","action":"Confirm that a genuine impasse exists and submit an immutable record with stable evidence and argument IDs.","expected":"Host admission succeeds and creates a record hash"},{"step":"2","action":"Frame or validate distinct constituent assignments with explicit evidence subsets.","expected":"Every admitted evidence item is covered without unknown IDs"},{"step":"3","action":"Run tools-free constituent assessments in fresh scoped contexts that do not receive the parent transcript.","expected":"Public findings cite only assigned evidence"},{"step":"4","action":"Validate findings and require quorum before invoking the judge.","expected":"Invalid findings cannot create facts or satisfy quorum"},{"step":"5","action":"Have the judge apply the burden and rules to the immutable record and validated findings, preserve material dissent, and select an allowed outcome or insufficient_evidence.","expected":"A host-validated verdict or held case"},{"step":"6","action":"Inspect the available run events and durable receipt before acting on the decision.","expected":"The decision and remaining framing risks are traceable to the admitted record, validated findings, and receipt hashes"}],"avoid_when":["Using adjudication to replace normal judgment, gather evidence, or let a child agent spawn nested panels","Treating clean contexts as a guarantee against biased record selection, framing, rules, or model behavior","Inferring a direct registry, /v1/chat/completions, Telegram, voice, or child-agent exposure that is not registered"],"verification":[{"check":"Run pnpm harness:adjudication","expected":"The deterministic panel overlaps constituent work, streams attributed assessments, synthesizes a verdict, and persists a receipt"},{"check":"Inspect .omnius/adjudications/<case-id>/<run>/receipt.json","expected":"Hashes, quorum, validation failures, elapsed time, and final status are present"}],"failure_modes":[{"symptom":"The case is held before judgment","likely_cause":"The record, framing, findings, or quorum failed host validation","recovery":"Use receipt validation codes to correct the admissible record; do not guess an outcome"},{"symptom":"A direct REST call is attempted","likely_cause":"Agent-bound full-agent exposure was confused with direct registry exposure","recovery":"Use top-level TUI, one-shot CLI, /v1/run, or default full-agent /v1/chat"}],"source_of_truth":["docs/ADJUDICATION.md","packages/orchestrator/src/adjudication.ts","packages/cli/src/tui/interactive.ts","scripts/adjudication-impasse-harness.mjs"],"related":["tool.adjudicate","layer.orchestration","layer.observability","module.orchestrator","guide.adjudication-uppercase"]},
114
114
  {"id":"workflow.provider-selection","kind":"workflow","title":"Select an inference provider and model","summary":"Resolve an explicit provider protocol, credentials, endpoint, and model; verify live reachability and hardware placement for local inference.","aliases":["BYOI","model selection"],"keywords":["provider","endpoint","protocol"],"maturity":"stable","layer":"inference","audiences":["operator","integrator","coding-agent"],"workflow":[{"step":"1","action":"Discover and expand the provider descriptor; do not infer protocol from a label or API key."},{"step":"2","action":"Configure endpoint/protocol/credential using the documented scope."},{"step":"3","action":"For local model work, perform the required hardware preflight before any token-generating request."},{"step":"4","action":"Verify the selected provider and exact model through live metadata."}],"verification":[{"check":"Live model/provider status matches the intended endpoint, protocol, and hardware","expected":"No silent fallback"}],"failure_modes":[{"symptom":"Model listing works but inference fails or uses the wrong protocol","likely_cause":"Endpoint display label was used instead of the provider descriptor","recovery":"Resolve the stable provider ID/protocol and re-test the exact endpoint before execution"}],"source_of_truth":["packages/backend-vllm/src/providerRegistry.ts","docs/guides/bring-your-own-inference.md"]},
115
115
  {"id":"workflow.voice-asr-tts","kind":"workflow","title":"Select and use ASR/TTS engines","summary":"Discover installed and supported ASR/TTS systems, perform managed setup when needed, activate one exact engine/model/device, and use the documented REST or TUI surface.","aliases":["speech","voice engines"],"keywords":["ASR","TTS","VibeVoice","transcribe_cli","LuxTTS"],"maturity":"stable","layer":"media","audiences":["integrator","operator","user"],"workflow":[{"step":"1","action":"List engines/models and inspect status before activation.","interface":"GET /v1/asr/engines; GET /v1/asr/status; voice model routes"},{"step":"2","action":"Run explicit managed setup for missing runtimes/weights and an exact accelerator when required."},{"step":"3","action":"Activate the selected engine/model and verify active status."},{"step":"4","action":"Transcribe or synthesize through the OpenAPI-documented route and validate the output artifact."}],"verification":[{"check":"Status reports the requested active engine/model/device and a small non-live test succeeds","expected":"No interpreter override or fallback to a different engine"}],"failure_modes":[{"symptom":"transcribe_cli is missing although a managed environment exists","likely_cause":"TRANSCRIBE_PYTHON points at an older Whisper environment","recovery":"Use the canonical managed transcribe runtime selection and re-check ASR status"}],"source_of_truth":["packages/execution/src/asr/registry.ts","packages/execution/src/transcribe-python-runtime.ts","packages/cli/src/api/voice-runtime.ts"]},
116
116
  {"id":"workflow.daemon-tray-update","kind":"workflow","title":"Operate daemon, tray, and updates","summary":"Ensure one current daemon owns the service port, start the tray against it, install updates through the real global npm flow, stream progress, restart components, and verify the target runtime.","aliases":["update Omnius","indicator update"],"keywords":["npm global","restart","version"],"maturity":"stable","layer":"operations","audiences":["operator","coding-agent"],"workflow":[{"step":"1","action":"Read installed and running identities from /version; diagnose port ownership before restart."},{"step":"2","action":"Start/reclaim the daemon through its managed lifecycle and confirm health."},{"step":"3","action":"Start the indicator and require daemon-online state before enabling service actions."},{"step":"4","action":"Run the update service, stream its live progress, restart the daemon/indicator, and compare /version with the target."}],"verification":[{"check":"Installed package, daemon /version, and indicator version all equal the update target","expected":"Verified target runtime, not merely queued or process-started"}],"failure_modes":[{"symptom":"UI remains on updating/queued","likely_cause":"The update worker was never executed or progress was not connected","recovery":"Inspect update job status/log stream and fail explicitly if no worker owns it"},{"symptom":"Restart verification fails","likely_cause":"Old daemon retained port ownership or new runtime did not become ready","recovery":"Resolve exact port PID, preserve unrelated processes, restart, then verify /health and /version"}],"source_of_truth":["packages/cli/src/update-service.ts","packages/cli/src/update-worker.ts","packages/cli/src/daemon.ts","packages/cli/src/tray.ts"]},
@@ -432,7 +432,7 @@
432
432
  "id": "tool.adjudicate",
433
433
  "kind": "tool",
434
434
  "title": "Evidence-bound adjudication",
435
- "summary": "Resolve one genuine decision impasse through an isolated evidence record, independently scoped constituent review, host-validated citations and quorum, a final judge, and a durable verdict receipt.",
435
+ "summary": "Resolve one genuine decision impasse outside the accumulated parent narrative through a frozen evidence record, fresh scoped constituent review, host-validated citations and quorum, a final judge, and a durable verdict receipt.",
436
436
  "aliases": ["adjudicate", "adjudication", "decision impasse", "impartial decision", "evidence-bound decision"],
437
437
  "keywords": ["agent-bound", "impasse", "evidence", "constituents", "quorum", "judge", "verdict", "dissent"],
438
438
  "maturity": "stable",
@@ -440,16 +440,20 @@
440
440
  "audiences": ["coding-agent", "maintainer", "interactive-user"],
441
441
  "direct_callable": false,
442
442
  "use_when": [
443
- "The top-level interactive agent has one exact unresolved decision with at least two materially plausible outcomes",
443
+ "A top-level full agent has one exact unresolved decision with at least two materially plausible outcomes",
444
444
  "The admissible evidence supports conflicting conclusions or risk tradeoffs",
445
- "The decision changes the next action and benefits from isolated impartial review"
445
+ "The decision changes the next action and benefits from fresh evidence-scoped review that reduces parent-context anchoring",
446
+ "The caller can make record selection and framing explicit and auditable"
446
447
  ],
447
448
  "avoid_when": [
448
449
  "The question is an ordinary implementation choice, factual lookup, or substitute for gathering missing evidence",
449
- "The caller is a child agent, daemon direct-tool client, REST run, or Telegram tool loop"
450
+ "The caller is a child agent, daemon direct-tool client, bounded /v1/chat/completions loop, Telegram runner, or voice-call runner"
450
451
  ],
451
452
  "interfaces": [
452
- {"type": "tui-agent-tool", "target": "omnius", "description": "Registered only in the top-level interactive agent tool catalog"}
453
+ {"type": "tui-agent-tool", "target": "omnius", "description": "Top-level interactive agent with the specialized streamed adjudication block"},
454
+ {"type": "cli-agent-tool", "target": "omnius \"<task>\"", "description": "Top-level one-shot agent with ordinary tool events"},
455
+ {"type": "agent-run", "target": "POST /v1/run", "description": "Spawned top-level full agent; subject to the active tool profile"},
456
+ {"type": "agent-chat", "target": "POST /v1/chat", "description": "Default full-agent chat mode; subject to the active tool profile"}
453
457
  ],
454
458
  "references": [
455
459
  {"type": "guide", "target": "docs/ADJUDICATION.md", "relation": "canonical-guide"},
@@ -460,10 +464,10 @@
460
464
  "related": ["workflow.evidence-bound-adjudication", "layer.orchestration", "layer.observability", "module.orchestrator", "guide.adjudication-uppercase"],
461
465
  "verification": [
462
466
  {"check": "Run pnpm harness:adjudication", "expected": "Parallel constituent streams, judge synthesis, and a durable receipt complete without loading a real model"},
463
- {"check": "Inspect the top-level and child-agent tool registration tests", "expected": "The top-level tool list includes adjudicate and child-agent lists exclude it"}
467
+ {"check": "Inspect the parent-runner and child-agent tool registration tests", "expected": "Top-level full agents keep adjudicate inline and host scope enforcement excludes it from child runners"}
464
468
  ],
465
469
  "failure_modes": [
466
- {"symptom": "A caller attempts /v1/tools/adjudicate/call", "likely_cause": "Static tool discovery was mistaken for daemon direct-tool exposure", "recovery": "Use the top-level interactive TUI agent"},
470
+ {"symptom": "A caller attempts /v1/tools/adjudicate/call", "likely_cause": "Static tool discovery was mistaken for daemon direct-tool exposure", "recovery": "Use a top-level TUI, one-shot CLI, /v1/run, or default full-agent /v1/chat path"},
467
471
  {"symptom": "The case returns held instead of a verdict", "likely_cause": "Admission, citation validation, quorum, or final verdict validation failed", "recovery": "Inspect the receipt and provide a corrected admissible record; do not infer a decision"}
468
472
  ],
469
473
  "source_of_truth": ["docs/ADJUDICATION.md", "packages/orchestrator/src/adjudication.ts", "packages/cli/src/tui/interactive.ts"]
@@ -85,19 +85,28 @@ origin, network/off-device policy, and risk.
85
85
  See [Tools, MCP, Hooks, Agents, And Code Graph](../rest/endpoints/tools.md) for
86
86
  the complete REST contract.
87
87
 
88
- ## `adjudicate` Is A Top-Level Interactive Agent Tool
88
+ ## `adjudicate` Is A Top-Level Full-Agent Tool
89
89
 
90
90
  `adjudicate` resolves a genuine decision impasse through an isolated,
91
- evidence-scoped panel and final judge. It is agent-bound, but its current
92
- exposure is narrower than `web_search`: only the top-level interactive TUI
93
- agent receives it. Start `omnius`, provide the exact question, allowed
94
- outcomes, evidence, and arguments, and let the active agent call the tool.
91
+ evidence-scoped panel and final judge. It is agent-bound, but it is not a
92
+ daemon direct tool. The interactive TUI, one-shot CLI, `POST /v1/run`, and the
93
+ default full-agent `POST /v1/chat` path receive it. REST execution remains
94
+ subject to the active full-agent tool profile.
95
+
96
+ The parent freezes an admissible record before deliberation. Fresh constituent
97
+ contexts receive only assigned evidence and rules, and the judge receives the
98
+ record plus validated findings instead of the parent transcript. This reduces
99
+ anchoring from accumulated working context. It does not erase bias from record
100
+ selection or framing, which remain visible in the durable receipt.
95
101
 
96
102
  The tool is intentionally excluded from sub-agents. This prevents nested
97
103
  adjudication panels, recursive live blocks, and unbounded inference fan-out.
98
- It is also absent from the daemon direct-tool registry. Do not infer
99
- `GET /v1/tools/adjudicate`, `POST /v1/tools/adjudicate/call`, `/v1/run`, or a
100
- Telegram tool route from its catalog entry.
104
+ It is also absent from the daemon direct-tool registry, the bounded
105
+ `/v1/chat/completions` mini-loop, Telegram, and voice-call agents. Do not infer
106
+ `GET /v1/tools/adjudicate`, `POST /v1/tools/adjudicate/call`, or a Telegram
107
+ tool route from its catalog entry. Only the interactive TUI renders the
108
+ specialized streamed adjudication block. Headless and REST full-agent paths
109
+ use ordinary run/tool events and still persist the same receipt artifacts.
101
110
 
102
111
  Use these offline discovery commands:
103
112
 
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.676",
3
+ "version": "1.0.678",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.676",
9
+ "version": "1.0.678",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],