ennodia 0.1.1 → 0.2.0

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.
Files changed (46) hide show
  1. package/CONTRIBUTING.md +60 -36
  2. package/README.md +74 -58
  3. package/bench/README.md +7 -5
  4. package/bench/bug-recall/run.ts +12 -4
  5. package/bin/ennodia +23 -2
  6. package/docs/assets/agents/mcp.svg +1 -1
  7. package/docs/assets/orchestration-pipeline.svg +4 -3
  8. package/docs/comparisons/agent-frameworks.md +15 -10
  9. package/docs/comparisons/autogen.md +20 -15
  10. package/docs/comparisons/chathub.md +15 -14
  11. package/docs/comparisons/index.md +30 -22
  12. package/docs/comparisons/langgraph.md +19 -12
  13. package/docs/comparisons/mixture-of-agents.md +20 -17
  14. package/docs/comparisons/model-merging.md +7 -5
  15. package/docs/comparisons/openrouter.md +30 -22
  16. package/docs/concepts/compositional-audits.md +16 -13
  17. package/docs/concepts/data-governance.md +31 -15
  18. package/docs/concepts/how-ennodia-works.md +48 -22
  19. package/docs/concepts/interfaces-and-core.md +19 -6
  20. package/docs/concepts/second-opinions.md +20 -20
  21. package/docs/getting-started.md +55 -27
  22. package/docs/guides/agent-skills.md +16 -13
  23. package/docs/guides/budgets-and-limits.md +30 -20
  24. package/docs/guides/running-better-audits.md +50 -44
  25. package/docs/index.md +60 -37
  26. package/docs/install.md +41 -32
  27. package/docs/reference/benchmarks.md +6 -4
  28. package/docs/reference/controlled-english.md +130 -0
  29. package/docs/reference/ennodia-io.md +28 -22
  30. package/docs/reference/mcp-tools.md +244 -87
  31. package/docs/reference/supported-harnesses.md +9 -9
  32. package/package.json +7 -5
  33. package/src/advisor.ts +685 -0
  34. package/src/budget.ts +25 -6
  35. package/src/cli.ts +1 -1
  36. package/src/compare.ts +248 -52
  37. package/src/compositional.ts +18 -0
  38. package/src/core.ts +547 -16
  39. package/src/harnesses.ts +33 -2
  40. package/src/index.ts +38 -0
  41. package/src/plan-advice.ts +601 -0
  42. package/src/runs.ts +74 -9
  43. package/src/server.ts +312 -46
  44. package/src/skills.ts +131 -11
  45. package/src/tasks.ts +192 -22
  46. package/src/version.ts +1 -1
@@ -1,18 +1,23 @@
1
1
  ---
2
2
  title: Ennodia IO
3
- description: The local interface for app-facing AI provider options and chat calls.
3
+ description: The local interface for app-facing artificial intelligence (AI) provider options and chat calls.
4
4
  ---
5
5
 
6
- Ennodia IO is a local HTTP server over the same Ennodia Core used
7
- by the MCP tools. It is useful when an app wants BYOK-style settings without
8
- asking the user for a provider API key first. The app can ask Ennodia what local
9
- agents are installed and runnable, show those options in its own settings UI,
10
- then send chat-style requests to the selected local option.
6
+ Ennodia IO is a local Hypertext Transfer Protocol (HTTP) server for artificial
7
+ intelligence (AI) provider options. It uses the same Ennodia Core as the Model
8
+ Context Protocol (MCP) tools. It supports a bring your own key (BYOK) setup
9
+ without requiring a provider application programming interface (API) key.
10
+ The app can show runnable local agents in its user interface (UI). It can then
11
+ send chat-style requests to one option.
11
12
 
12
13
  It is not a hosted model router. Ennodia does not sell model access, proxy
13
14
  provider billing, or hide which local agents ran. IO ships as the separate
14
15
  `@cherninlab/ennodia-io` package.
15
16
 
17
+ When Compare is enabled, Ennodia keeps the roles explicit. The Judge evaluates
18
+ candidate results. The Result Advisor combines the Judge analysis and candidate
19
+ evidence into the final answer.
20
+
16
21
  ## Start IO
17
22
 
18
23
  ```sh
@@ -57,10 +62,10 @@ Environment variables:
57
62
  IO binds to loopback by default and refuses non-loopback hosts unless an API key
58
63
  is configured. Bearer tokens are compared with a timing-safe comparison.
59
64
 
60
- IO intentionally sends no CORS headers by default. Browser-based local apps are
61
- therefore blocked by the browser unless they proxy through their own local
62
- origin. There is no `--cors-origin` flag yet; add one only when a real app needs
63
- that trust boundary.
65
+ IO intentionally sends no Cross-Origin Resource Sharing (CORS) headers by
66
+ default. The browser blocks local apps unless they use their own local proxy.
67
+ There is no `--cors-origin` flag. Add one only when an app needs that trust
68
+ boundary.
64
69
 
65
70
  ## Routes
66
71
 
@@ -108,7 +113,7 @@ Option statuses:
108
113
  | Status | Meaning |
109
114
  | --- | --- |
110
115
  | `ready` | The local agent is runnable now. |
111
- | `installed` | An app or partial install was detected, but Ennodia cannot run it through a supported CLI surface yet. |
116
+ | `installed` | An app or partial install was detected, but Ennodia cannot run it through a supported command-line interface (CLI) surface yet. |
112
117
  | `missing` | The supported local agent was not found. |
113
118
 
114
119
  Add `?includeUnavailable=false` to return only ready options.
@@ -120,11 +125,11 @@ Add `?includeUnavailable=false` to return only ready options.
120
125
  | Model | Meaning |
121
126
  | --- | --- |
122
127
  | `local/auto` | Let Ennodia choose the local harness. |
123
- | `local/compare` | Run parallel local harnesses and synthesize with Compare. |
128
+ | `local/compare` | Run parallel local harnesses, evaluate them with the Judge, and combine the result with the Result Advisor. |
124
129
  | `local/<harness-id>` | Force a specific harness, such as `local/codex` or `local/claude-code`. |
125
130
 
126
131
  Older aliases `ennodia-auto`, `ennodia/auto`, and `ennodia/compare` are accepted
127
- for compatibility, but new app integrations should prefer `local/*` IDs.
132
+ for compatibility. Prefer `local/*` IDs in new app integrations.
128
133
 
129
134
  ## Chat Completions
130
135
 
@@ -183,31 +188,32 @@ Supported `ennodia` fields:
183
188
  | `timeoutMs` | Per-child timeout, capped at one hour. |
184
189
  | `refresh` | Re-scan harnesses before planning. |
185
190
  | `judgeHarnessId`, `judgeModel` | Compare judge overrides. |
186
- | `synthesizerHarnessId`, `synthesizerModel` | Compare synthesizer overrides. |
191
+ | `advisorHarnessId`, `advisorModel` | Compare Result Advisor overrides. |
192
+ | `synthesizerHarnessId`, `synthesizerModel` | Deprecated aliases for `advisorHarnessId` and `advisorModel`. If both forms are supplied, their values must match. |
187
193
  | `maxOutputChars` | Candidate output cap for Compare. |
188
194
  | `maxWaitMs` | HTTP request wait cap, capped at one hour. |
189
195
 
190
196
  Chat completions are non-streaming. A request waits until the Ennodia run
191
- finishes or `maxWaitMs` elapses; the default is 10 minutes. Disable streaming in
197
+ finishes or `maxWaitMs` elapses. The default is 10 minutes. Disable streaming in
192
198
  OpenAI-compatible clients and set `ennodia.maxWaitMs` when the client or proxy
193
199
  needs a shorter or longer hold time.
194
200
 
195
201
  The response includes the normal OpenAI-style `choices[0].message.content` plus
196
- an `ennodia` object with the run ID, status, selected harnesses, task IDs,
197
- Compare ID when present, and budget estimate.
202
+ an `ennodia` object. The object contains the run ID, status, selected harnesses,
203
+ task IDs, Compare ID when present, and budget estimate.
198
204
 
199
205
  Limits and failures are returned as JSON with `cache-control: no-store`:
200
206
 
201
207
  - request body above the configured cap -> `413 request_too_large`
202
208
  - saturated chat completions -> `429 rate_limit_error` with `retry-after: 1`
203
- - client abort after the run starts -> `499 client_closed_request`; IO cancels
209
+ - client abort after the run starts -> `499 client_closed_request`. IO cancels
204
210
  the Ennodia run when Core exposes cancellation
205
211
  - timeout, disappeared run, or start failure -> `502 ennodia_run_error`
206
- - failed or cancelled terminal run -> `502 ennodia_run_failed` plus run metadata
212
+ - failed run or run with `cancelled` status -> `502 ennodia_run_failed` plus run metadata
207
213
 
208
214
  ## Library Use
209
215
 
210
- Apps can import the same primitives instead of running the HTTP server:
216
+ Apps can import the same primitives without running the HTTP server:
211
217
 
212
218
  ```ts
213
219
  import { createDefaultEnnodiaCore } from "ennodia";
@@ -244,5 +250,5 @@ IO deliberately rejects or omits:
244
250
  - IO-specific history endpoints. Terminal run history is written by Core when
245
251
  history is enabled, but IO does not expose a read API for it.
246
252
 
247
- Use MCP when an agent should inspect detailed run, task, and Compare state while
248
- work is still in progress. Use IO when a local app needs a small HTTP bridge.
253
+ Use MCP to inspect detailed run, task, Judge, Result Advisor, and Compare state
254
+ while work is in progress. Use IO when a local app needs a small HTTP bridge.