ennodia 0.1.0-rc.0 → 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.
- package/CONTRIBUTING.md +159 -5
- package/README.md +107 -50
- package/bench/README.md +7 -5
- package/bench/bug-recall/run.ts +13 -5
- package/bin/ennodia +23 -0
- package/docs/assets/agent-font/ennodia-agents.css +44 -0
- package/docs/assets/agent-font/ennodia-agents.json +13 -0
- package/docs/assets/agent-font/ennodia-agents.woff +0 -0
- package/docs/assets/agent-font/ennodia-agents.woff2 +0 -0
- package/docs/assets/agents/amp-color.svg +1 -0
- package/docs/assets/agents/cline.svg +1 -0
- package/docs/assets/agents/codex-transparent.svg +1 -0
- package/docs/assets/agents/cursor.svg +1 -0
- package/docs/assets/agents/hermesagent.svg +1 -0
- package/docs/assets/agents/kilocode.svg +1 -0
- package/docs/assets/agents/kiro-color.svg +1 -0
- package/docs/assets/agents/kiro.svg +1 -0
- package/docs/assets/agents/langgraph.svg +1 -0
- package/docs/assets/agents/mcp.svg +1 -0
- package/docs/assets/agents/openhands-color.svg +1 -0
- package/docs/assets/agents/openrouter.svg +1 -0
- package/docs/assets/audio/mouse-down.mp3 +0 -0
- package/docs/assets/audio/mouse-up.mp3 +0 -0
- package/docs/assets/orchestration-pipeline.svg +4 -3
- package/docs/assets/terminal.png +0 -0
- package/docs/comparisons/agent-frameworks.md +42 -0
- package/docs/comparisons/autogen.md +42 -0
- package/docs/comparisons/chathub.md +37 -0
- package/docs/comparisons/index.md +79 -0
- package/docs/comparisons/langgraph.md +43 -0
- package/docs/comparisons/mixture-of-agents.md +40 -0
- package/docs/comparisons/model-merging.md +37 -0
- package/docs/comparisons/openrouter.md +55 -0
- package/docs/concepts/compositional-audits.md +170 -0
- package/docs/concepts/data-governance.md +70 -0
- package/docs/concepts/how-ennodia-works.md +121 -0
- package/docs/concepts/interfaces-and-core.md +56 -0
- package/docs/concepts/second-opinions.md +120 -0
- package/docs/getting-started.md +81 -47
- package/docs/guides/agent-skills.md +86 -0
- package/docs/guides/budgets-and-limits.md +105 -0
- package/docs/guides/running-better-audits.md +123 -0
- package/docs/index.md +98 -10
- package/docs/install.md +126 -0
- package/docs/reference/benchmarks.md +64 -0
- package/docs/reference/controlled-english.md +130 -0
- package/docs/reference/ennodia-io.md +254 -0
- package/docs/reference/mcp-tools.md +498 -43
- package/docs/reference/supported-harnesses.md +71 -0
- package/package.json +32 -9
- package/skills/benchmark-critic/SKILL.md +20 -0
- package/skills/compositional-audit/SKILL.md +27 -0
- package/skills/release-readiness/SKILL.md +19 -0
- package/skills/rigorous-review/SKILL.md +18 -0
- package/skills/source-grounded-audit/SKILL.md +19 -0
- package/src/advisor.ts +685 -0
- package/src/budget.ts +312 -0
- package/src/cli.ts +85 -0
- package/src/compare.ts +358 -109
- package/src/compositional.ts +331 -0
- package/src/core.ts +1149 -0
- package/src/diagnosis.ts +1 -8
- package/src/harnesses.ts +148 -3
- package/src/history.ts +175 -0
- package/src/index.ts +195 -52
- package/src/internal.ts +32 -0
- package/src/plan-advice.ts +601 -0
- package/src/planner.ts +44 -28
- package/src/priority.ts +83 -0
- package/src/runs.ts +300 -65
- package/src/server.ts +690 -228
- package/src/skills.ts +947 -0
- package/src/tasks.ts +255 -58
- package/src/version.ts +1 -1
- package/docs/in-depth/architecture.md +0 -53
- package/docs/in-depth/releasing.md +0 -120
package/CONTRIBUTING.md
CHANGED
|
@@ -1,21 +1,175 @@
|
|
|
1
1
|
# Contributing to Ennodia
|
|
2
2
|
|
|
3
|
+
Thanks for helping make Ennodia better. Keep changes small, tested, and easy to
|
|
4
|
+
review.
|
|
5
|
+
|
|
3
6
|
## Prerequisites
|
|
4
7
|
|
|
5
|
-
-
|
|
6
|
-
- Local AI tools
|
|
8
|
+
- Bun `1.3.14` or newer
|
|
9
|
+
- Local artificial intelligence (AI) tools only when you change or test their adapters
|
|
7
10
|
|
|
8
|
-
##
|
|
11
|
+
## Local workflow
|
|
9
12
|
|
|
10
13
|
```sh
|
|
11
14
|
bun install
|
|
12
15
|
bun run verify
|
|
13
16
|
```
|
|
14
17
|
|
|
15
|
-
`verify` runs
|
|
18
|
+
`bun run verify` runs:
|
|
19
|
+
|
|
20
|
+
- TypeScript typechecking
|
|
21
|
+
- Oxlint
|
|
22
|
+
- Bun tests
|
|
23
|
+
- website build
|
|
24
|
+
- controlled-English deterministic checks
|
|
25
|
+
- task smoke test
|
|
26
|
+
- Model Context Protocol (MCP) smoke test
|
|
16
27
|
|
|
17
|
-
Before changing release metadata
|
|
28
|
+
Before changing release metadata, package contents, or registry config, also run:
|
|
18
29
|
|
|
19
30
|
```sh
|
|
20
31
|
bun run release:check
|
|
21
32
|
```
|
|
33
|
+
|
|
34
|
+
## Project rules
|
|
35
|
+
|
|
36
|
+
- Keep adapters thin. Put shared routing, tracing, task lifecycle, recovery, and
|
|
37
|
+
Compare behavior in core modules.
|
|
38
|
+
- Do not add permission-bypass flags to harness commands by default.
|
|
39
|
+
- Do not call provider-private application programming interfaces (APIs).
|
|
40
|
+
Use supported command-line interface (CLI) or API surfaces.
|
|
41
|
+
- Keep progress and status output compact and factual.
|
|
42
|
+
- Keep docs, website copy, package metadata, and MCP behavior aligned in the
|
|
43
|
+
same change when public behavior changes.
|
|
44
|
+
- Edit the version in root `package.json`, then run `bun run version:sync` to
|
|
45
|
+
refresh generated version fields.
|
|
46
|
+
|
|
47
|
+
## Package surfaces
|
|
48
|
+
|
|
49
|
+
`bin/ennodia` is the executable used by npm, `bunx`, and `npx`.
|
|
50
|
+
`src/cli.ts` starts the stdio MCP server only.
|
|
51
|
+
`src/index.ts` is the side-effect-free TypeScript export surface for the
|
|
52
|
+
JavaScript Registry (JSR) and imports.
|
|
53
|
+
`packages/ennodia-io` is the experimental local Hypertext Transfer Protocol
|
|
54
|
+
(HTTP) package. It owns the
|
|
55
|
+
`ennodia-io` binary and imports Core from the `ennodia` package surface. The
|
|
56
|
+
root package must not ship the HTTP server.
|
|
57
|
+
|
|
58
|
+
## Releasing
|
|
59
|
+
|
|
60
|
+
Releases are cut by a maintainer, not part of a normal contribution. This
|
|
61
|
+
section exists so the process is written down.
|
|
62
|
+
|
|
63
|
+
**Versioning.** Prerelease versions use SemVer suffixes such as `0.1.0-rc.1`.
|
|
64
|
+
stable versions omit the suffix, such as `0.1.0`. The source of truth is the
|
|
65
|
+
root `package.json` version.
|
|
66
|
+
|
|
67
|
+
`bun run version:sync` derives `jsr.json`,
|
|
68
|
+
`src/version.ts`, `server.json`, `manifest.json`, and the IO package version.
|
|
69
|
+
It also derives the IO dependency on the core version. `bun test` verifies
|
|
70
|
+
that the versions match.
|
|
71
|
+
|
|
72
|
+
**Dist-tags.** Tags containing a hyphen publish to npm's `next` dist-tag.
|
|
73
|
+
tags without a hyphen publish to `latest`:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
git tag v0.1.0-rc.1 && git push origin v0.1.0-rc.1 # publishes to next
|
|
77
|
+
git tag v0.1.0 && git push origin v0.1.0 # publishes to latest
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Since `v0.1.0`, docs recommend the unqualified `ennodia` install, which npm
|
|
81
|
+
resolves to the `latest` dist-tag. Prerelease work between stable releases
|
|
82
|
+
still publishes to `next`. Recommend `ennodia@next` in docs only while a fix
|
|
83
|
+
exists solely on that channel.
|
|
84
|
+
|
|
85
|
+
**Release checklist.**
|
|
86
|
+
|
|
87
|
+
1. Update the root `package.json` version, then run `bun run version:sync`.
|
|
88
|
+
2. Run `bun run release:check`. It chains `bun run version:sync`,
|
|
89
|
+
`bun run verify`,
|
|
90
|
+
`npm pack --dry-run`, `npm publish --dry-run --tag next`,
|
|
91
|
+
`npx jsr publish --dry-run --allow-dirty`, and a package smoke test that
|
|
92
|
+
packs a real tarball and MCP-handshakes it through `bunx`, `npm exec`,
|
|
93
|
+
and `npx`. It also runs the `@cherninlab/ennodia-io` typecheck, tests,
|
|
94
|
+
pack dry-run, and npm publish dry-run.
|
|
95
|
+
3. Commit the version change.
|
|
96
|
+
4. Push a matching tag, for example `v0.1.0-rc.1`.
|
|
97
|
+
5. The `Release` GitHub Actions workflow publishes the core `ennodia` package
|
|
98
|
+
to npm and JSR, then `@cherninlab/ennodia-io` to npm, the MCP Registry
|
|
99
|
+
listing, and the GitHub release asset. Re-running a release is safe when a
|
|
100
|
+
prior attempt published one of these immutable versions.
|
|
101
|
+
|
|
102
|
+
**Package contents.** The core npm package must include these items:
|
|
103
|
+
|
|
104
|
+
- `bin/ennodia`
|
|
105
|
+
- source files that the Bun runtime needs
|
|
106
|
+
- README, LICENSE, CONTRIBUTING, and documentation files
|
|
107
|
+
- benchmark fixtures
|
|
108
|
+
|
|
109
|
+
The core npm package must not include these items:
|
|
110
|
+
|
|
111
|
+
- `.github/`, `AGENTS.md`, or `CLAUDE.md`
|
|
112
|
+
- `bun.lock`, `src/dev/`, or `src/io.ts`
|
|
113
|
+
- `*.test.ts`, `packages/`, or `website/`
|
|
114
|
+
|
|
115
|
+
JSR publishes the TypeScript source and docs, but not benchmark fixtures.
|
|
116
|
+
The IO npm package must include `bin/ennodia-io`, its `src/` files, and its
|
|
117
|
+
README. It has an exact runtime dependency on the matching `ennodia` version.
|
|
118
|
+
The release workflow publishes the core package first. The IO package stays
|
|
119
|
+
outside the root Bun workspace so an unpublished next version does not block
|
|
120
|
+
the root install. `bun run release:check` enforces these rules.
|
|
121
|
+
|
|
122
|
+
**Registry publishing.** npm publishes use the repository `NPM_TOKEN` secret.
|
|
123
|
+
The workflow passes it to npm as `NODE_AUTH_TOKEN`. JSR uses GitHub Actions
|
|
124
|
+
OpenID Connect (OIDC) without a JSR token.
|
|
125
|
+
|
|
126
|
+
Link scope `@cherninlab`, package `ennodia`, to
|
|
127
|
+
`cherninlab/ennodia` in JSR package settings. The workflow's `id-token: write`
|
|
128
|
+
permission enables that authentication. To reconfigure npm, ensure the token
|
|
129
|
+
can publish both `ennodia` and `@cherninlab/ennodia-io` with public access.
|
|
130
|
+
|
|
131
|
+
**MCP registry listing.** The official MCP Registry
|
|
132
|
+
(`registry.modelcontextprotocol.io`) hosts metadata only. npm remains the
|
|
133
|
+
artifact source. The listing is defined by `server.json` at the repo root,
|
|
134
|
+
and npm-side ownership is verified through the `mcpName` field in
|
|
135
|
+
`package.json`. Its value must match `io.github.cherninlab/ennodia` in
|
|
136
|
+
`server.json`.
|
|
137
|
+
To publish or update the listing after the npm package is live:
|
|
138
|
+
|
|
139
|
+
```sh
|
|
140
|
+
brew install mcp-publisher # or download from the registry's releases
|
|
141
|
+
mcp-publisher login github # interactive local login; grants io.github.cherninlab/*
|
|
142
|
+
mcp-publisher publish # validates and submits server.json
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
The release workflow uses the non-interactive GitHub Actions OIDC equivalent:
|
|
146
|
+
`mcp-publisher login github-oidc --registry=https://registry.modelcontextprotocol.io`.
|
|
147
|
+
This also requires the workflow's `id-token: write` permission.
|
|
148
|
+
|
|
149
|
+
Keep the `version` fields in `server.json` in step with releases. The
|
|
150
|
+
listing is per-version, so re-run `mcp-publisher publish` after each release.
|
|
151
|
+
Community aggregators (Glama, PulseMCP, mcp.so, Smithery) index
|
|
152
|
+
GitHub and the official registry automatically or accept one-time
|
|
153
|
+
submissions. They do not need per-release updates.
|
|
154
|
+
|
|
155
|
+
## Benchmarks
|
|
156
|
+
|
|
157
|
+
The deterministic benchmark suite is:
|
|
158
|
+
|
|
159
|
+
```sh
|
|
160
|
+
bun run bench:bug-recall
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Live harness benchmarks use:
|
|
164
|
+
|
|
165
|
+
```sh
|
|
166
|
+
bun run bench:bug-recall:live
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Live runs are intentionally not part of `bun run verify`.
|
|
170
|
+
|
|
171
|
+
## Security
|
|
172
|
+
|
|
173
|
+
Do not commit credentials, provider tokens, `.env` files, or private tool
|
|
174
|
+
configuration. If you suspect a secret was committed, stop and rotate the secret
|
|
175
|
+
before continuing.
|
package/README.md
CHANGED
|
@@ -1,89 +1,142 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
3
|
<a href="https://ennodia.cherninlab.com">
|
|
4
|
-
<picture>
|
|
5
|
-
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/logo-dark.svg">
|
|
6
|
-
<source media="(prefers-color-scheme: light)" srcset="docs/assets/logo.svg">
|
|
7
|
-
<img alt="Ennodia" src="docs/assets/logo.svg" width="235" height="50">
|
|
4
|
+
<picture>
|
|
5
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/cherninlab/ennodia/raw/main/docs/assets/logo-dark.svg">
|
|
6
|
+
<source media="(prefers-color-scheme: light)" srcset="https://github.com/cherninlab/ennodia/raw/main/docs/assets/logo.svg">
|
|
7
|
+
<img alt="Ennodia" src="https://github.com/cherninlab/ennodia/raw/main/docs/assets/logo.svg" width="235" height="50">
|
|
8
8
|
</picture>
|
|
9
9
|
</a>
|
|
10
10
|
|
|
11
|
-
<p><strong>
|
|
11
|
+
<p><strong>Model Context Protocol (MCP) server for multi-agent review with Compare and traceable receipts</strong></p>
|
|
12
12
|
|
|
13
13
|
<p>
|
|
14
14
|
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-informational"></a>
|
|
15
|
-
<img alt="
|
|
15
|
+
<img alt="Continuous integration" src="https://github.com/cherninlab/ennodia/actions/workflows/ci.yml/badge.svg" />
|
|
16
|
+
<a href="https://smithery.ai/servers/cherninlab/ennodia"><img alt="Smithery: Ennodia" src="https://img.shields.io/badge/Smithery-Ennodia-FF5601"></a>
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<img alt="Ennodia terminal with three completed artificial intelligence reviews" src="https://github.com/cherninlab/ennodia/raw/main/docs/assets/terminal.png" width="600">
|
|
16
21
|
</p>
|
|
17
22
|
|
|
18
23
|
</div>
|
|
19
24
|
|
|
20
|
-
Ennodia
|
|
25
|
+
Ennodia gives your primary agent access to installed agent command-line
|
|
26
|
+
interfaces (CLIs). It tracks each child task and uses model-led Compare to show
|
|
27
|
+
agreements, disagreements, omissions, and one recommended answer with receipts.
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
Before work, an optional Plan Advisor can propose a bounded set of harnesses,
|
|
30
|
+
models, and skills. It does not start the proposed work.
|
|
23
31
|
|
|
24
|
-
##
|
|
32
|
+
## Install
|
|
25
33
|
|
|
26
|
-
|
|
34
|
+
Send this address to your primary agent. The agent can then complete the
|
|
35
|
+
installation:
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
try-ennodia.cherninlab.com
|
|
39
|
+
```
|
|
40
|
+
To run Ennodia directly as a standard input/output (stdio) MCP server, use:
|
|
27
41
|
|
|
28
42
|
```sh
|
|
29
|
-
|
|
30
|
-
cd ennodia
|
|
31
|
-
bun install
|
|
32
|
-
bun run verify
|
|
43
|
+
npx -y ennodia
|
|
33
44
|
```
|
|
45
|
+
To use Bun directly, run `bunx ennodia`.
|
|
46
|
+
|
|
47
|
+
For a registry or client installer, use the
|
|
48
|
+
[Ennodia Smithery page](https://smithery.ai/servers/cherninlab/ennodia).
|
|
34
49
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
already available on `PATH`.
|
|
50
|
+
For manual installation or local development, see
|
|
51
|
+
[Quickstart](https://ennodia.cherninlab.com/docs/getting-started/).
|
|
38
52
|
|
|
39
|
-
## What Ennodia
|
|
53
|
+
## What Ennodia does
|
|
40
54
|
|
|
41
|
-
- Discovers available local AI tools
|
|
42
|
-
- Plans
|
|
55
|
+
- Discovers available local artificial intelligence (AI) tools
|
|
56
|
+
- Plans a route with a caller-provided category or keyword fallback
|
|
57
|
+
- Estimates preflight input tokens and enforces local caps on that estimate
|
|
43
58
|
- Starts and monitors child tasks
|
|
44
|
-
- Shows status,
|
|
59
|
+
- Shows status, elapsed time, logs, and failures
|
|
45
60
|
- Cancels tasks and runs explicitly
|
|
46
|
-
-
|
|
47
|
-
-
|
|
61
|
+
- Lets a Plan Advisor propose an inert, validated work plan
|
|
62
|
+
- Compares multiple completed outputs with a Judge
|
|
63
|
+
- Lets a Result Advisor combine the Judge findings into one answer
|
|
64
|
+
|
|
65
|
+
`ennodia_run` is the main entrypoint. It plans and starts tasks. It can also use
|
|
66
|
+
Compare. It returns a run identifier (ID) for use with `ennodia_get_run`.
|
|
67
|
+
|
|
68
|
+
See [MCP tools](https://ennodia.cherninlab.com/docs/reference/mcp-tools/) for
|
|
69
|
+
the full tool and parameter reference.
|
|
70
|
+
|
|
71
|
+
Use Ennodia for work that needs additional model analysis. A run usually takes
|
|
72
|
+
minutes. Compare adds two serial model passes after the child agents finish.
|
|
73
|
+
|
|
74
|
+
## Judge, Plan Advisor, and Result Advisor
|
|
75
|
+
|
|
76
|
+
Each role has limited responsibilities:
|
|
48
77
|
|
|
49
|
-
|
|
78
|
+
- **Plan Advisor** runs before work when requested. It proposes explicit
|
|
79
|
+
harness, model, and skill assignments as inert data. Ennodia validates the
|
|
80
|
+
proposal against a frozen inventory. Plan Advisor cannot execute it. The
|
|
81
|
+
caller must use a separate call to start the validated plan once.
|
|
82
|
+
- **Judge** runs during Compare and maps agreements, contradictions, unique
|
|
83
|
+
evidence, omissions, and risks across completed outputs.
|
|
84
|
+
- **Result Advisor** follows the Judge. It uses the Judge findings and original
|
|
85
|
+
outputs to recommend an answer. If Judge analysis is not usable, it uses
|
|
86
|
+
`basis: "candidates-only"`. This status makes the degradation visible.
|
|
50
87
|
|
|
51
|
-
|
|
88
|
+
## Ennodia IO
|
|
89
|
+
|
|
90
|
+
The separate `@cherninlab/ennodia-io` package provides a local Hypertext
|
|
91
|
+
Transfer Protocol (HTTP) and TypeScript interface. Apps can use it with
|
|
92
|
+
user-supplied keys and installed local agents:
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
npx -y @cherninlab/ennodia-io
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
See [Ennodia IO](https://ennodia.cherninlab.com/docs/reference/ennodia-io/) for
|
|
99
|
+
supported fields, authentication behavior, cross-origin resource sharing
|
|
100
|
+
rules, and current limits.
|
|
101
|
+
|
|
102
|
+
## Supported harnesses
|
|
52
103
|
|
|
53
104
|
- Codex CLI
|
|
54
105
|
- Claude Code
|
|
55
106
|
- OpenCode
|
|
107
|
+
- Kilo Code
|
|
108
|
+
- Kiro CLI
|
|
109
|
+
- Cline CLI
|
|
110
|
+
- Hermes Agent
|
|
56
111
|
- Antigravity
|
|
57
112
|
|
|
58
|
-
Adapters stay thin.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
## MCP Tools
|
|
113
|
+
Adapters stay thin. Core modules contain shared routing, trace data, task state,
|
|
114
|
+
recovery, and Compare logic.
|
|
62
115
|
|
|
63
|
-
|
|
116
|
+
Evaluated candidates include Gemini CLI, GitHub Copilot CLI, Amp, Aider, Goose,
|
|
117
|
+
Qwen Code, and Cursor CLI. Ennodia does not include these candidates.
|
|
64
118
|
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
- `ennodia_run` - plan, execute, optionally Compare, and return a final answer
|
|
69
|
-
- `ennodia_get_run` - inspect run state, events, ETA, and final output
|
|
70
|
-
- `ennodia_cancel_run` - cancel a running orchestration
|
|
71
|
-
- `ennodia_start_compare` - compare completed task outputs or supplied responses
|
|
72
|
-
|
|
73
|
-
Lower-level task tools are available for polling and cancellation.
|
|
119
|
+
Ennodia can add a candidate after verification of a supported prompt-in and
|
|
120
|
+
text-out interface. Verification must not use permission-bypass flags or
|
|
121
|
+
provider-private APIs.
|
|
74
122
|
|
|
75
123
|
## Documentation
|
|
76
124
|
|
|
77
|
-
- [
|
|
78
|
-
- [
|
|
79
|
-
- [MCP
|
|
80
|
-
- [
|
|
125
|
+
- [Installation for Agents](https://ennodia.cherninlab.com/docs/install/): agent-controlled installation
|
|
126
|
+
- [Quickstart](https://ennodia.cherninlab.com/docs/getting-started/): manual installation and local development
|
|
127
|
+
- [MCP Tools](https://ennodia.cherninlab.com/docs/reference/mcp-tools/): full tool parameter reference
|
|
128
|
+
- [How Ennodia Works](https://ennodia.cherninlab.com/docs/concepts/how-ennodia-works/): orchestration pipeline
|
|
129
|
+
- [Second Opinions](https://ennodia.cherninlab.com/docs/concepts/second-opinions/): replicate, decompose, and red-team patterns
|
|
130
|
+
- [Data Governance](https://ennodia.cherninlab.com/docs/concepts/data-governance/): local storage and data movement boundaries
|
|
131
|
+
- [Controlled English](https://ennodia.cherninlab.com/docs/reference/controlled-english/): ASD-STE100 rules and Ennodia technical terms
|
|
132
|
+
- [Comparisons](https://ennodia.cherninlab.com/docs/comparisons/): comparisons with adjacent tools
|
|
133
|
+
- [Benchmarks](https://ennodia.cherninlab.com/docs/reference/benchmarks/): deterministic bug-recall results
|
|
134
|
+
- [Better Audits](https://ennodia.cherninlab.com/docs/guides/running-better-audits/): prompt rubrics for Compare
|
|
81
135
|
|
|
82
136
|
## Benchmarks
|
|
83
137
|
|
|
84
|
-
The
|
|
85
|
-
fixtures
|
|
86
|
-
suite with:
|
|
138
|
+
The current benchmark is `multi-model-bug-recall`. It uses small TypeScript
|
|
139
|
+
review fixtures and committed bug oracles. Run the deterministic suite with:
|
|
87
140
|
|
|
88
141
|
```sh
|
|
89
142
|
bun run bench:bug-recall
|
|
@@ -92,8 +145,12 @@ bun run bench:bug-recall
|
|
|
92
145
|
Live harness runs are available through `bun run bench:bug-recall:live` and are
|
|
93
146
|
kept out of `bun run verify`.
|
|
94
147
|
|
|
95
|
-
|
|
148
|
+
The current dated fixture snapshot is published in
|
|
149
|
+
[Benchmarks](https://ennodia.cherninlab.com/docs/reference/benchmarks/): 4
|
|
150
|
+
cases, with `ennodia-parallel-compare` at 100% recall and 100% precision.
|
|
151
|
+
|
|
152
|
+
## Contribute
|
|
96
153
|
|
|
97
|
-
Ennodia is under active development.
|
|
98
|
-
|
|
99
|
-
workflow.
|
|
154
|
+
Ennodia is under active development. You can submit bug reports and small,
|
|
155
|
+
focused pull requests. See [CONTRIBUTING.md](CONTRIBUTING.md) for the local
|
|
156
|
+
verification workflow.
|
package/bench/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Benchmarks
|
|
2
2
|
|
|
3
3
|
Ennodia's first release-candidate benchmark is `multi-model-bug-recall`: small
|
|
4
|
-
TypeScript review fixtures with committed oracles. It measures
|
|
4
|
+
TypeScript review fixtures with committed oracles. It measures if
|
|
5
5
|
parallel peer review plus Compare recovers more required findings than a solo
|
|
6
6
|
harness answer.
|
|
7
7
|
|
|
@@ -11,8 +11,8 @@ The default command is deterministic and uses committed reference outputs:
|
|
|
11
11
|
bun run bench:bug-recall
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
The live command starts a fresh Ennodia MCP server and
|
|
15
|
-
is intentionally not part of `bun run verify`.
|
|
14
|
+
The live command starts a fresh Ennodia Model Context Protocol (MCP) server and
|
|
15
|
+
runs real harnesses. It is intentionally not part of `bun run verify`.
|
|
16
16
|
|
|
17
17
|
```sh
|
|
18
18
|
bun run bench:bug-recall:live -- --fixture 001-missing-await
|
|
@@ -20,10 +20,12 @@ bun run bench:bug-recall:live -- --fixture 001-missing-await
|
|
|
20
20
|
|
|
21
21
|
Useful flags:
|
|
22
22
|
|
|
23
|
-
- `--fixture <id>` runs one fixture
|
|
23
|
+
- `--fixture <id>` runs one fixture. Repeat it to select multiple fixtures.
|
|
24
24
|
- `--harness <id>` adds a solo baseline harness in live mode. Defaults to
|
|
25
25
|
`codex` and `claude-code`.
|
|
26
|
-
- `--judge-harness <id>` and `--
|
|
26
|
+
- `--judge-harness <id>` and `--advisor-harness <id>` select Compare roles.
|
|
27
|
+
- `--synthesizer-harness <id>` is a deprecated alias for
|
|
28
|
+
`--advisor-harness <id>`.
|
|
27
29
|
- `--timeout-ms <ms>` sets the per-run timeout for live harness calls.
|
|
28
30
|
- `--out <dir>` writes results to a specific directory.
|
|
29
31
|
|
package/bench/bug-recall/run.ts
CHANGED
|
@@ -21,7 +21,7 @@ type CliOptions = {
|
|
|
21
21
|
timeoutMs: number;
|
|
22
22
|
outDir?: string;
|
|
23
23
|
judgeHarnessId?: string;
|
|
24
|
-
|
|
24
|
+
advisorHarnessId?: string;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
type McpTextContent = {
|
|
@@ -97,7 +97,7 @@ async function runLiveBenchmark(
|
|
|
97
97
|
});
|
|
98
98
|
const transport = new StdioClientTransport({
|
|
99
99
|
command: "bun",
|
|
100
|
-
args: ["run", "src/
|
|
100
|
+
args: ["run", "src/cli.ts"],
|
|
101
101
|
cwd: new URL("../../", import.meta.url).pathname,
|
|
102
102
|
stderr: "pipe",
|
|
103
103
|
});
|
|
@@ -129,7 +129,7 @@ async function runLiveBenchmark(
|
|
|
129
129
|
compare: true,
|
|
130
130
|
timeoutMs: options.timeoutMs,
|
|
131
131
|
judgeHarnessId: options.judgeHarnessId,
|
|
132
|
-
|
|
132
|
+
advisorHarnessId: options.advisorHarnessId,
|
|
133
133
|
maxOutputChars: 16_000,
|
|
134
134
|
});
|
|
135
135
|
outputs.push(runToOutput(
|
|
@@ -284,8 +284,16 @@ function parseArgs(args: string[]): CliOptions {
|
|
|
284
284
|
options.outDir = requireValue(args, ++index, arg);
|
|
285
285
|
} else if (arg === "--judge-harness") {
|
|
286
286
|
options.judgeHarnessId = requireValue(args, ++index, arg);
|
|
287
|
-
} else if (
|
|
288
|
-
|
|
287
|
+
} else if (
|
|
288
|
+
arg === "--advisor-harness" || arg === "--synthesizer-harness"
|
|
289
|
+
) {
|
|
290
|
+
const value = requireValue(args, ++index, arg);
|
|
291
|
+
if (options.advisorHarnessId && options.advisorHarnessId !== value) {
|
|
292
|
+
throw new Error(
|
|
293
|
+
"--advisor-harness and --synthesizer-harness must match.",
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
options.advisorHarnessId = value;
|
|
289
297
|
} else {
|
|
290
298
|
throw new Error(`Unknown option: ${arg}`);
|
|
291
299
|
}
|
package/bin/ennodia
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
|
|
6
|
+
const cliPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "src", "cli.ts");
|
|
7
|
+
|
|
8
|
+
const bunCheck = spawnSync("bun", ["--version"], { stdio: "ignore" });
|
|
9
|
+
|
|
10
|
+
if (bunCheck.error) {
|
|
11
|
+
process.stderr.write(
|
|
12
|
+
"Ennodia requires Bun (1.3.14 or newer) to run, but it wasn't found on your PATH.\n" +
|
|
13
|
+
"Install Bun from https://bun.sh, then try again:\n" +
|
|
14
|
+
" curl -fsSL https://bun.sh/install | bash\n",
|
|
15
|
+
);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const result = spawnSync("bun", ["run", cliPath, ...process.argv.slice(2)], {
|
|
20
|
+
stdio: "inherit",
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
process.exit(result.status ?? 1);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: "Ennodia Agent Logos";
|
|
3
|
+
src: url("./ennodia-agents.woff2") format("woff2"), url("./ennodia-agents.woff") format("woff");
|
|
4
|
+
font-display: block;
|
|
5
|
+
font-style: normal;
|
|
6
|
+
font-weight: 400;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.agent-logo {
|
|
10
|
+
font-family: "Ennodia Agent Logos";
|
|
11
|
+
display: inline-block;
|
|
12
|
+
width: 1em;
|
|
13
|
+
height: 1em;
|
|
14
|
+
color: currentColor;
|
|
15
|
+
direction: ltr;
|
|
16
|
+
font-feature-settings: normal;
|
|
17
|
+
font-size: 1em;
|
|
18
|
+
font-style: normal;
|
|
19
|
+
font-variant: normal;
|
|
20
|
+
font-weight: 400;
|
|
21
|
+
letter-spacing: 0;
|
|
22
|
+
line-height: 1;
|
|
23
|
+
text-rendering: geometricPrecision;
|
|
24
|
+
text-transform: none;
|
|
25
|
+
vertical-align: -0.12em;
|
|
26
|
+
-moz-osx-font-smoothing: grayscale;
|
|
27
|
+
-webkit-font-smoothing: antialiased;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.agent-logo::before {
|
|
31
|
+
display: block;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.agent-logo--antigravity::before { content: "\e001"; }
|
|
35
|
+
.agent-logo--claude-code::before { content: "\e002"; }
|
|
36
|
+
.agent-logo--cline::before { content: "\e003"; }
|
|
37
|
+
.agent-logo--codex::before { content: "\e004"; }
|
|
38
|
+
.agent-logo--hermes-agent::before { content: "\e005"; }
|
|
39
|
+
.agent-logo--kilo-code::before { content: "\e006"; }
|
|
40
|
+
.agent-logo--kiro::before { content: "\e007"; }
|
|
41
|
+
.agent-logo--opencode::before { content: "\e008"; }
|
|
42
|
+
.agent-logo--mcp::before { content: "\e009"; }
|
|
43
|
+
.agent-logo--langgraph::before { content: "\e00a"; }
|
|
44
|
+
.agent-logo--openrouter::before { content: "\e00b"; }
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Amp</title><path d="M15.087 23.18L12.03 24l-2.097-7.823-5.738 5.738-2.251-2.251 5.718-5.719-7.769-2.082.82-3.057 11.294 3.08 3.08 11.295z" fill="#F34E3F"></path><path d="M19.505 18.762l-3.057.82-2.564-9.573-9.572-2.564.819-3.057 11.295 3.079 3.08 11.295z" fill="#F34E3F"></path><path d="M23.893 14.374l-3.057.82-2.565-9.572L8.7 3.057 9.52 0l11.295 3.08 3.079 11.294z" fill="#F34E3F"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" style="flex:none;line-height:1" viewBox="0 0 24 24"><title>Cline</title><path d="M17.035 3.991c2.75 0 4.98 2.24 4.98 5.003v1.667l1.45 2.896a1.01 1.01 0 0 1-.002.909l-1.448 2.864v1.668c0 2.762-2.23 5.002-4.98 5.002H7.074c-2.751 0-4.98-2.24-4.98-5.002V17.33l-1.48-2.855a1.01 1.01 0 0 1-.003-.927l1.482-2.887V8.994c0-2.763 2.23-5.003 4.98-5.003zM8.265 9.6a2.274 2.274 0 0 0-2.274 2.274v4.042a2.274 2.274 0 0 0 4.547 0v-4.042A2.274 2.274 0 0 0 8.265 9.6m7.326 0a2.274 2.274 0 0 0-2.274 2.274v4.042a2.274 2.274 0 1 0 4.548 0v-4.042A2.274 2.274 0 0 0 15.59 9.6z"/><path d="M12.054 5.558a2.779 2.779 0 1 0 0-5.558 2.779 2.779 0 0 0 0 5.558"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24"><title>Codex</title><path fill="url(#lobe-icons-codex-_R_0_)" d="M9.064 3.344a4.6 4.6 0 0 1 2.285-.312q1.5.173 2.673 1.275.016.015.037.021a.1.1 0 0 0 .043 0 4.55 4.55 0 0 1 3.046.275l.047.022.116.057a4.58 4.58 0 0 1 2.188 2.399q.313.765.315 1.595a4.2 4.2 0 0 1-.134 1.223.12.12 0 0 0 .03.115q.89.91 1.183 2.17.433 2.138-.887 3.854l-.136.166a4.55 4.55 0 0 1-2.201 1.388.12.12 0 0 0-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838q-1.78-.009-3.157-1.302a.11.11 0 0 0-.105-.024c-.388.125-.78.143-1.204.138a4.44 4.44 0 0 1-1.945-.466 4.54 4.54 0 0 1-1.61-1.335c-.152-.202-.303-.392-.414-.617a6 6 0 0 1-.37-.961 4.6 4.6 0 0 1-.014-2.298.1.1 0 0 0 .006-.056.1.1 0 0 0-.027-.048 4.5 4.5 0 0 1-1.034-1.651 3.9 3.9 0 0 1-.251-1.192 5.2 5.2 0 0 1 .141-1.6Q3.659 7.92 5.086 6.97q.318-.212.601-.33a6 6 0 0 1 .646-.227.1.1 0 0 0 .065-.066 4.5 4.5 0 0 1 .829-1.615 4.54 4.54 0 0 1 1.837-1.388m3.482 10.565a.637.637 0 0 0 0 1.272h3.636a.637.637 0 1 0 0-1.272zM8.462 9.23a.637.637 0 0 0-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 1 0 1.095.649l1.454-2.455a.64.64 0 0 0 .005-.64z"/><defs><linearGradient id="lobe-icons-codex-_R_0_" x1="12" x2="12" y1="3" y2="21" gradientUnits="userSpaceOnUse"><stop stop-color="#b1a7ff"/><stop offset=".5" stop-color="#7a9dff"/><stop offset="1" stop-color="#3941ff"/></linearGradient></defs></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Cursor</title><path d="M22.106 5.68L12.5.135a.998.998 0 00-.998 0L1.893 5.68a.84.84 0 00-.419.726v11.186c0 .3.16.577.42.727l9.607 5.547a.999.999 0 00.998 0l9.608-5.547a.84.84 0 00.42-.727V6.407a.84.84 0 00-.42-.726zm-.603 1.176L12.228 22.92c-.063.108-.228.064-.228-.061V12.34a.59.59 0 00-.295-.51l-9.11-5.26c-.107-.062-.063-.228.062-.228h18.55c.264 0 .428.286.296.514z"></path></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" style="flex:none;line-height:1" viewBox="0 0 24 24"><title>Hermes Agent</title><path d="M5.938 12.835c.127-.039.285.02.373.143.028.038.036.092.046.14.003.014-.02.033-.04.05q-.184-.146-.354-.291c-.011-.01-.016-.027-.025-.042m2.458-3.423c.195-.032.39-.06.588-.05a.5.5 0 0 1 .148.026q.303.107.601.224c.028.01.05.036.075.055l-.013.027a9 9 0 0 1-.26-.089c-.115-.038-.213-.077-.315-.098-.25-.05-.25-.046-.292-.014l.574.144q.413.207.823.417c.042.022.09.057.107.098.026.06.063.076.117.072.066-.006.132-.017.213-.027l-.04.086c.051.08.142.02.216.064-.074.13-.247.09-.334.199l.061.074-.12.087c0 .106-.038.168-.306.243l.026.085-.196.042.07.124h-.25l-.007.137-.244-.027-.053.123c-.027-.008-.052-.011-.073-.023-.067-.038-.128-.056-.195.006-.019.017-.063.014-.093.008-.026-.006-.05-.029-.07-.042-.11.095-.11.095-.208.003-.057.046-.12.074-.186.011-.063.027-.123-.02-.178-.014-.07.007-.097-.035-.133-.07l-.13.033c-.013-.236-.194-.19-.34-.203.005-.072.05-.092.095-.094a.5.5 0 0 1 .159.022c.164.05.32.12.496.138.203.021.405.029.601-.015.265-.059.52-.149.707-.365.049-.056.083-.127.117-.195.019-.038.02-.084-.02-.116a1.4 1.4 0 0 0-.382-.217c.024.12-.031.182-.115.221 0 .014-.004.025 0 .03.08.115.084.16-.007.267a1.4 1.4 0 0 1-.218.211.477.477 0 0 1-.641-.05 1.4 1.4 0 0 1-.133-.152c-.078-.107-.076-.108-.033-.236-.165-.08-.128-.226-.104-.364.008-.05.028-.096.049-.163-.04.014-.067.017-.087.032a.9.9 0 0 0-.316.357c-.007.016-.01.034-.02.047-.012.015-.034.038-.045.035-.02-.006-.037-.027-.05-.045-.008-.012-.007-.032-.012-.057h-.126l.053-.172-.039-.049.11-.284c-.06.026-.091.044-.124.051-.03.007-.064 0-.095 0 0-.031-.01-.07.004-.092.149-.22.305-.428.593-.476"/><path d="M8.06 10.788c-.003-.038-.004-.075.037-.062.016.006.034.048.028.067-.01.04-.038.032-.064-.005z"/><path d="M11.981.009q.34-.017.679 0c.247.01.495.024.74.062q.602.097 1.19.273c.463.138.92.299 1.356.511a7.3 7.3 0 0 1 2.948 2.642q.436.704.739 1.479c.219.556.446 1.11.623 1.683.204.654.329 1.326.458 1.997.097.504.182 1.01.29 1.511.156.722.329 1.44.494 2.16.186.812.4 1.615.63 2.415.102.355.193.713.282 1.072.11.436.202.876.254 1.323.031.278.066.557.073.837a8 8 0 0 1-.017.88c-.037.413-.1.818-.226 1.212a5 5 0 0 1-.915 1.649l-.13.156.018.023c.043-.023.088-.041.127-.068.2-.138.373-.307.531-.49.4-.46.721-.973.975-1.529a3.6 3.6 0 0 0 .325-1.72c-.024-.424-.097-.834-.3-1.213-.013-.027-.015-.06-.03-.121.05.035.082.048.101.072.107.13.22.258.315.398.33.494.46 1.052.486 1.64a3.75 3.75 0 0 1-.47 1.97c-.36.655-.887 1.14-1.526 1.506-.193.111-.394.21-.595.308-.157.078-.248.211-.318.365a.52.52 0 0 0-.033.406.4.4 0 0 1 .013.139c-.005.077-.077.155-.14.162-.054.006-.125-.043-.15-.116a1.2 1.2 0 0 1-.06-.233c-.04-.314-.155-.6-.308-.87a3.9 3.9 0 0 0-.73-.91 2.1 2.1 0 0 0-.897-.524 4 4 0 0 0-.692-.131c-.075-.008-.15-.04-.22.01.18.06.363.11.538.18.434.173.82.43 1.18.728.308.255.58.543.794.884.098.155.186.315.227.496.027.123.042.25.067.375q.021.092-.053.144c-.047.033-.122.034-.163-.01a.5.5 0 0 1-.08-.14c-.03-.073-.038-.159-.078-.225a7.3 7.3 0 0 0-1.423-1.664c-.16-.137-.329-.26-.537-.323-.376-.114-.753-.203-1.15-.154-.213.025-.427.032-.64.053a1.6 1.6 0 0 0-.736.278 5 5 0 0 0-.834.72c-.329.342-.642.699-.955 1.055-.136.155-.264.319-.314.531l-.012.051a.096.096 0 0 1-.09.076h-.31c-.046 0-.082-.048-.072-.094q.033-.162.07-.324c.075-.325.19-.635.368-.917.024-.039.04-.088.104-.08l.01.049.027.077c.28-.435.571-.834.996-1.135.283-.204.584-.378.89-.55a.2.2 0 0 0-.098-.002c-.162.043-.325.084-.485.134-.402.124-.764.33-1.11.566-.147.1-.298.193-.414.333a7.3 7.3 0 0 0-1.07 1.767 1 1 0 0 0-.04.12.075.075 0 0 1-.072.056h-.494c-.04 0-.062-.051-.036-.082.123-.14.246-.282.377-.415.275-.281.58-.532.777-.884.027-.048.063-.09.095-.135.238-.333.54-.607.818-.902.082-.086.175-.16.26-.24q.042-.042.079-.085l-.018-.025-.135.041q-.053.023-.102.05c-.248.144-.494.292-.743.433-.408.23-.825.439-1.209.711-.281.2-.591.358-.889.533-.02.012-.044.015-.08.028-.015-.135.143-.201.108-.336-.033.014-.064.02-.085.038-.111.096-.227.19-.328.296-.148.157-.284.325-.425.488q-.188.214-.373.431A.15.15 0 0 1 9.89 24H8.762l.016-.042c.028-.09.085-.172.083-.28-.091-.018-.162.001-.212.077a5 5 0 0 0-.136.215c-.01.016-.024.03-.042.03h-.093c-.019 0-.029-.022-.017-.037q.106-.133.209-.268c.001-.002-.006-.012-.012-.024q-.022.004-.045.013-.264.135-.527.274a.4.4 0 0 1-.168.042H5.202c-.026 0-.039-.036-.019-.053a3 3 0 0 0 .558-.605c.335-.496.538-1.047.667-1.629.004-.02-.003-.043-.006-.091-.037.048-.059.072-.076.1a2 2 0 0 1-.334.415c-.28.258-.59.448-.983.464-.297.012-.588 0-.865-.127-.46-.21-.722-.57-.794-1.072-.025-.17-.017-.171-.182-.219A3.5 3.5 0 0 1 1.97 20.6a2.3 2.3 0 0 1-.808-1.13 3.6 3.6 0 0 1-.16-1.245c.002-.034.016-.067.024-.1.032.023.046.043.05.066.033.153.059.308.096.46q.128.534.516.92c.258.256.571.419.91.532.358.118.717.138 1.07-.016a1.9 1.9 0 0 0 .621-.452c.328-.348.533-.76.648-1.223.009-.034.005-.071.007-.11-.015.006-.026.006-.03.011q-.048.075-.093.152A2.7 2.7 0 0 1 3.625 19.6c-.351.17-.718.255-1.11.159a1.6 1.6 0 0 1-.971-.64 2 2 0 0 1-.368-.924 2.9 2.9 0 0 1 .02-.886c.05-.439.466-1.17.742-1.271-.02.063-.035.112-.053.16-.043.116-.097.227-.13.345a1.9 1.9 0 0 0-.05.82c.033.212.09.416.204.6.147.236.346.407.62.465.11.023.225.014.338.018a.58.58 0 0 0 .386-.131 1.2 1.2 0 0 0 .366-.481c.168-.375.24-.777.309-1.179q.074-.444.133-.893c.039-.281.071-.563.104-.845.026-.232.048-.464.074-.696l.076-.683q.036-.34.069-.683l.034-.42.037-.417q.031-.375.065-.748c.008-.082-.02-.132-.09-.177a2.5 2.5 0 0 1-.492-.418c-.1-.109-.188-.228-.282-.342-.035-.042-.056-.097-.116-.118a2.1 2.1 0 0 0 .275.597c.06.092.131.176.196.265.063.086.182.115.234.226-.028.003-.046.01-.06.006a5 5 0 0 1-.22-.057 2.7 2.7 0 0 1-1.287-.819c-.435-.487-.656-1.076-.71-1.723a5.2 5.2 0 0 1 .014-1.06q.106-.905.45-1.745c.155-.376.338-.741.526-1.102.205-.393.466-.75.765-1.076.512-.559 1.104-1.024 1.726-1.448a12.8 12.8 0 0 1 2.277-1.233A11 11 0 0 1 9.31.494c.655-.166 1.31-.33 1.982-.415.229-.03.458-.058.688-.07zm-1.847 22.82c-.07.06-.147.111-.207.18-.238.27-.464.549-.668.869l-.044.108a.2.2 0 0 0 .093-.057c.174-.19.351-.378.519-.574.104-.122.195-.255.288-.386.024-.034.03-.08.046-.12zm1.65-3.695a5.5 5.5 0 0 0-.653.593l-.37.386a.96.96 0 0 1-.377.25 1.4 1.4 0 0 1-.467.09c-.044 0-.087.006-.151.012.028.058.043.097.064.131l.45.724c.136.22.276.438.399.666.068.125.105.267.156.404.077.027.14-.018.202-.048q.435-.204.867-.412c.213-.101.437-.186.636-.31.347-.215.68-.455 1.018-.685.015-.01.026-.028.042-.046-.023-.019-.038-.037-.056-.044-.287-.111-.527-.3-.77-.482a5 5 0 0 1-.506-.42 1.8 1.8 0 0 1-.41-.653c-.019-.049-.045-.095-.075-.156zm-5.847.264c-.06.096-.097.194-.132.293a3.4 3.4 0 0 1-.555 1.01q-.3.373-.762.493c-.23.06-.464.076-.7.07-.048-.002-.097.002-.158.005.016.04.021.066.035.085.1.145.23.246.4.295.157.046.316.034.498.023q.272-.055.485-.234c.238-.199.402-.454.536-.732.175-.363.264-.751.342-1.144.01-.053.008-.11.011-.164m14.945-4.586c.008.029.016.057.027.107.024.155.051.31.072.464.03.219.067.437.078.657.017.344.027.689-.014 1.033-.037.315-.063.633-.116.946a6.2 6.2 0 0 1-.46 1.518c-.008.018-.01.039-.02.082.047-.03.077-.042.098-.064q.13-.124.248-.255c.271-.305.458-.66.596-1.043.18-.498.228-1.011.145-1.531-.103-.65-.33-1.263-.597-1.881l-.024-.055zM5.797 8.29a.26.26 0 0 0 .018.153q.186.376.379.75c.025.049.066.09.03.163-.284.06-.578.119-.88.255.059.038.097.06.132.087.042.032.112.058.09.12-.01.033-.075.048-.117.072.017.01.043.021.067.036.166.102.33.207.447.368.138.192.229.404.188.644-.079.469-.306.85-.69 1.132q-.08.062-.161.122a.24.24 0 0 0-.103.245.8.8 0 0 0 .055.195c.083.196.22.35.375.492q.126.116.222.257a.37.37 0 0 1 .025.377q-.036.075-.076.148c-.03.06-.028.111.022.162q.063.064.112.138c.038.058.078.079.147.05a.5.5 0 0 1 .333-.006c.16.046.302.126.444.21q.195.115.4.219c.067.035.14.05.219.026.071-.022.124.01.145.076q.031.094-.074.139c-.07.03-.137.063-.209.088-.1.035-.201.073-.314.077-.013-.107.11-.088.127-.159-.206-.126-.643-.145-.801-.034.063.112.035.21-.096.313-.13-.1-.025-.202.002-.3a.21.21 0 0 0-.249.17c-.015.101.067.216.178.224.108.007.218-.005.326-.012.06-.005.12-.027.199 0-.103.123-.248.127-.357.19.002.05.07.086.019.131-.053.048-.095-.001-.132-.03a3 3 0 0 1-.231-.197.47.47 0 0 1-.157-.311.5.5 0 0 0-.043-.172c-.032-.074-.032-.137.033-.19-.018-.03-.028-.053-.045-.072a1.2 1.2 0 0 1-.196-.369c-.053-.137-.046-.264.048-.381.024-.03.05-.06.064-.095a.7.7 0 0 0 .047-.168c.017-.165-.064-.287-.182-.387-.186-.156-.36-.322-.46-.551-.005-.011-.024-.017-.037-.026-.011.017-.024.027-.025.038-.019.185-.045.37-.052.557-.014.377.058.743.162 1.104.118.41.289.798.488 1.173q.4.753.812 1.5c.055.098.13.189.208.27.198.202.452.272.724.273q.303.002.605-.026c.295-.03.59-.073.884-.113.183-.025.365-.057.548-.08.21-.026.38.073.522.21.16.156.305.327.447.5.22.265.397.56.554.867.05.098.07.1.147.03q.194-.182.394-.36c.067-.059.088-.12.067-.213a3.5 3.5 0 0 1-.085-.796q.002-.236.018-.471c.015-.224.03-.45.06-.672a59 59 0 0 1 .362-2.298c.087-.493.182-.984.268-1.477.06-.347.118-.694.162-1.043q.051-.411.063-.825c.011-.332.003-.665.002-.998 0-.077.004-.155-.01-.23-.028-.142-.01-.155-.162-.19a6 6 0 0 0-.607-.107c-.146-.018-.207-.053-.221-.19-.006-.049-.025-.098-.041-.146-.009-.025-.024-.048-.046-.09l-.025.264c-.009.096-.029.116-.127.115-.055 0-.11-.008-.164-.008-.476 0-.952-.008-1.426.032-.095.008-.173-.015-.226-.103-.04-.066-.088-.126-.134-.186-.063-.084-.086-.093-.182-.06a31 31 0 0 0-.582.21 2.7 2.7 0 0 0-.675.394 1 1 0 0 1-.323.168c-.033.01-.07.008-.127.013.02-.066.024-.114.047-.15.064-.105.135-.205.205-.306l.073-.095-.015-.023-.201.037c-.146.04-.296.07-.437.122-.148.053-.266.023-.386-.072a3.6 3.6 0 0 1-.733-.786zm8.592 8.963-.147.09q-.33.2-.659.402-.14.087-.27.188c-.085.07-.124.161-.072.272.047.1.093.2.147.294.047.08.124.138.213.147.11.01.228.012.336-.012.217-.05.372-.205.528-.357a.29.29 0 0 0 .087-.308c-.046-.18-.079-.365-.118-.547-.011-.052-.027-.103-.045-.169m-.257-2.409c-.12.291-.205.597-.325.91-.151.433-.294.87-.435 1.323.036-.01.054-.01.067-.018.261-.16.522-.324.785-.484.054-.033.071-.078.065-.138q-.018-.196-.034-.393l-.068-.886-.029-.31q-.013 0-.026-.004m3.081-8.13.099.285c.08.231.159.463.24.714l.58 1.952q.28.946.558 1.893c.114.382.235.762.343 1.146.072.257.126.519.186.799.044.206.087.413.127.64.034.106.023.226.077.325l.025-.006-.068-.362c-.038-.206-.077-.412-.113-.638l-.046-.211c-.095-.396-.177-.796-.29-1.187-.196-.685-.413-1.364-.618-2.046-.165-.549-.322-1.1-.488-1.648-.069-.227-.15-.45-.226-.695l-.117-.336a12 12 0 0 0-.115-.322q-.061-.159-.127-.314l-.027.01zm-10.988 7.59c-.063-.001-.115.014-.134.083a.35.35 0 0 0 .41.012 5 5 0 0 0-.276-.095M5.23 11.98c-.026-.027-.057-.048-.075.002-.012.032-.007.07-.01.113.082-.037.082-.037.085-.115m.062-1.189a.14.14 0 0 0-.088.056.2.2 0 0 0-.025.11c.005.152.01.306.026.457a.8.8 0 0 0 .066.218q.091.202.288.101c.055-.027.06-.054.025-.11a5 5 0 0 1-.129-.211c-.015-.068-.066-.131-.033-.207.04-.09-.076-.116-.074-.19v-.141c-.003-.038-.006-.087-.056-.083m-.017-.968a.87.87 0 0 0-.467.127c-.076.045-.084.07-.05.158q.05.131.115.254c.064.117.09.125.21.077a.66.66 0 0 1 .336-.053c.202.022.357.136.504.264l.092.077q.01-.01.022-.018c-.019-.105-.035-.226-.149-.264-.157-.053-.324-.075-.508-.117l-.24-.005c.24-.169.452-.044.687.009-.063-.115-.153-.147-.23-.193-.082-.05-.17-.092-.25-.144-.06-.037-.12-.08-.072-.172m10.233.325c-.23-.01-.427.08-.608.211-.034.026-.06.065-.105.117.087.026.15.046.232.065q.066-.022.13-.046c.306-.114.61-.115.904.031.126.063.237.04.366-.005-.02-.031-.03-.054-.045-.071a1 1 0 0 0-.448-.273c-.14-.044-.284-.024-.426-.03zM7.99 6.483a.3.3 0 0 0 .002.133c.08.321.156.643.242.962.104.387.27.75.456 1.103.02.037.061.08.098.087a.4.4 0 0 0 .253-.051l-.472-.84c-.23-.448-.405-.92-.579-1.394M10.397.497c-.2-.008-.405.004-.603.034q-.355.054-.7.152c-.287.08-.569.18-.852.273-.04.013-.074.038-.11.058q.041.02.07.014c.287-.068.58-.085.873-.09.134-.002.269.009.402.025.19.024.382.048.57.09.456.104.874.3 1.265.556.464.306.888.66 1.257 1.078.205.232.395.475.56.739.17.274.315.561.449.856.273.601.456 1.232.6 1.876.04.173.07.348.1.524.017.104.065.167.17.19.122.028.2.105.22.251-.003.102-.06.174-.129.24a1.1 1.1 0 0 0-.268.358.16.16 0 0 0 .083-.039c.08-.086.162-.172.235-.265a.56.56 0 0 0 .13-.333c.009-.05.022-.1.024-.15.007-.124-.017-.15-.143-.168-.025-.004-.049-.014-.073-.015-.082-.007-.125-.063-.137-.131-.033-.198-.004-.355.247-.408q.13-.025.26-.042c.158-.023.315-.053.473-.067.14-.012.19.033.226.167.008.029.018.057.021.087.019.179-.008.225-.141.288-.027.013-.055.024-.078.042a.15.15 0 0 0-.051.067c-.039.144.073.382.206.445l.673.32c.023.011.05.015.075.023l.018-.026c-.015-.008-.032-.013-.044-.024a2.3 2.3 0 0 0-.544-.32l-.173-.075a.2.2 0 0 1-.126-.191.19.19 0 0 1 .128-.187l.059-.025c.099-.044.118-.076.112-.187a.4.4 0 0 0-.008-.063c-.067-.294-.123-.59-.205-.88a9.5 9.5 0 0 0-.826-2.036 7.5 7.5 0 0 0-1.39-1.805 4.5 4.5 0 0 0-1.177-.824 3.7 3.7 0 0 0-1.016-.328 6 6 0 0 0-.712-.074m6.719 5.955c.01.014.018.028.038.034l-.022-.044zM4.103 3.917a.1.1 0 0 1-.03.012l-.04.039c-.01.01-.02.02-.045.04l-.363.354c-.088.085-.17.178-.266.253-.284.22-.425.53-.544.855a.13.13 0 0 0-.007.071c.013.055.033.108.052.168l.074.026c-.017.056-.03.105-.047.152l-.175.491c-.005.015.008.036.019.077.08-.175.158-.33.225-.489.228-.544.484-1.074.819-1.561q.133-.199.283-.401c.004-.006.007-.013.022-.03.001-.016.003-.032.015-.04zm12.976 2.408a.02.02 0 0 1 .009.019l-.006.01.007.02.018.022c.002-.007.007-.016.005-.021-.003-.01-.012-.018-.02-.038zM4.199 4.48c-.003.004-.008.008-.027.014a.14.14 0 0 1-.031.047 2 2 0 0 1-.124.167c-.048.07-.116.055-.181.041-.134-.028-.228.016-.287.143-.089.187-.187.37-.273.56-.049.108-.11.216-.118.36.081.003.154.007.228.008h.228a3 3 0 0 1-.079.264l-.033.155.02.004c.018-.046.037-.092.067-.153.066-.142.13-.285.2-.426.02-.04.034-.1.116-.092 0 .043.004.084 0 .124-.005.045-.017.09-.028.143.141.043.086.174.115.269.102-.022.104-.195.248-.144v.205l.017.002.439-1.059c-.13 0-.246-.02-.358.033-.024.011-.058-.001-.108-.004.075-.15.139-.278.211-.417a.1.1 0 0 1 .025-.036c0-.015-.001-.03.008-.038l.006-.02c-.005.006-.01.011-.028.017a.1.1 0 0 1-.026.045.1.1 0 0 1-.032.033c-.123.157-.09.164-.258.106-.079-.027-.078-.028-.047-.144.028-.046.056-.093.098-.15 0-.016-.001-.032.007-.042L4.2 4.48zm2.073-.67c-.003.006-.007.011-.027.016-.094.125-.194.246-.28.377-.155.238-.301.481-.451.723-.14.224-.345.368-.575.481-.017.008-.04.006-.079.011.012-.059.016-.109.033-.153a6 6 0 0 1 .229-.518l-.007-.02a.1.1 0 0 1-.035.025c-.028.05-.055.1-.093.164-.26.424-.443.817-.442.95.024.004.048.011.073.013.177.013.188.007.26-.165a.27.27 0 0 1 .147-.15l.175-.07c.044-.018.085-.057.146-.032.003.05-.01.11.014.145.042.062.044.125.047.193.002.049.017.098.026.147.029-.034.039-.065.05-.097.142-.39.277-.782.428-1.17.1-.256.22-.504.33-.756.013-.03.013-.067.03-.092zm3.987-.34c0 .045.01.084.021.123.042.16.094.318.124.48.024.133.023.27.028.406 0 .033-.019.067-.032.11-.094-.058-.047-.158-.106-.215h-.125c-.015.072-.01.152-.046.2-.066.085-.155.154-.236.227-.043.038-.078.018-.103-.025l-.046-.087c-.065.035-.117.069-.172.093-.116.051-.235.095-.35.147-.085.038-.09.053-.07.147.014.075.034.148.047.223.013.072.05.109.123.124.233.05.462.115.657.265.058-.102.058-.102.168-.151q.044-.023.092-.042c.08-.03.115-.017.15.06.023.048.041.098.066.158.06-.14-.042-.267.017-.416.157.18.24.39.375.567a.2.2 0 0 0 .022-.098l.002-.371c0-.034.013-.067.02-.1l.032-.003c.11.155.13.354.226.52a3 3 0 0 0-.01-.392c-.004-.045 0-.074.05-.088.08.036.116.14.215.158-.03-.275-.423-1.137-.798-1.635-.114-.127-.2-.28-.34-.386zm-2.667.696c-.019.034-.03.05-.037.067-.061.185-.125.37-.18.556-.031.105-.087.169-.195.19-.09.019-.178.052-.268.073-.038.009-.089.015-.118-.003-.024-.016-.025-.069-.036-.106-.064.076-.082.087-.17.047-.133-.062-.262-.135-.393-.201-.048-.025-.093-.063-.17-.03l-.137.382c-.099.28-.087.242.095.453.046.048.102.03.154.023.054-.009.106-.03.16-.036.13-.013.26-.08.367-.015.204-.064.387-.122.571-.178q.076-.021.114.054c.022.042.034.093.082.121.038-.056-.013-.128.063-.178l.14.241zm.278.358c-.096-.01-.107.01-.11.108a1 1 0 0 0 .002.115c.03.2.099.386.174.57q.005.008.022.015l.078-.05c.052.036.081.088.153.088.205-.002.41.014.616.012.099-.001.158.042.205.12.018.03.024.077.088.066l-.08-.394c-.05-.195-.085-.395-.172-.589-.057.057-.114.068-.18.046a1 1 0 0 0-.135-.028c-.22-.028-.44-.059-.66-.08zm10.254-1.727c.089.163.155.316.139.491-.016.168.026.342-.044.516-.047-.033-.088-.082-.112-.075-.117.035-.164-.057-.227-.115a5 5 0 0 1-.286-.29l-.104-.113-.023.019c.035.046.07.093.11.156.04.064.084.127.122.193.034.058.065.118.031.205q-.123-.014-.246-.032c-.06-.01-.101 0-.124.07-.031.098-.037.096-.15.09.02.042.036.08.057.116q.06.11-.03.196l-.178.181a.18.18 0 0 1-.185.046c-.222-.061-.447-.113-.67-.174-.032-.009-.063-.04-.086-.068-.03-.04-.052-.087-.08-.13q-.067-.104-.136-.207a.2.2 0 0 0-.014.105c.012.127.03.253.035.38.005.1-.024.12-.121.104-.104-.017-.206-.04-.31-.058-.064-.012-.131-.028-.202.03l.081.208c.09 0 .166-.01.237.002a.82.82 0 0 1 .458.251c.078.083.154.168.241.26l.018-.005c-.004-.006-.008-.013-.01-.04.014-.056-.062-.118.018-.178.031.03.064.057.088.09.058.078.111.159.169.257l.089.141.024-.013-.427-.934c.055.007.083.007.108.016q.29.105.577.216.111.042.219.094.091.043.157-.033.076-.084.154-.167.076-.076.132.014c.016.025.026.053.04.08.071.138.143.277.217.433l.159.308.025-.011c-.044-.106-.07-.218-.138-.334-.057-.182-.168-.346-.206-.545.136.034.362.326.567.732l.057.074.018-.011a2 2 0 0 1-.052-.127c-.046-.145-.097-.29-.136-.436-.022-.083-.036-.173.022-.26l.109.058-.026-.207.027-.016c.022.02.05.036.065.06q.108.163.215.33c.01.016.029.029.043.043-.036-.217-.2-.38-.229-.626l.155.112c.014-.166.012-.319.042-.465.032-.158-.023-.297-.063-.445.024.004.036.006.055.025q.137.187.277.371c.02.027.05.047.069.087l.04.063.019-.015a.3.3 0 0 1-.053-.082 28 28 0 0 1-.332-.49c-.221-.311-.363-.467-.485-.521m-6.57.327c-.003.161.092.275.069.415l-.368.087c.09.139.032.237-.052.331-.05.057-.092.122-.143.178-.037.04-.046.078-.018.126l.16.275c.029.048.072.066.128.064.076-.003.152 0 .228-.001.116-.003.216.022.275.137.006.014.02.024.044.052.004-.059-.003-.098.01-.13.016-.04.04-.099.072-.108.084-.023.173-.024.26-.03.013-.001.027.018.04.029l.071.065c.019-.11-.082-.198-.024-.31l.126.04c-.026-.123-.07-.245-.071-.366a.8.8 0 0 1 .115-.36c.107.062.16.156.234.253.183.265.36.533.494.834.165-.078.27.068.407.088-.003-.106-.133-.441-.197-.492a.14.14 0 0 0-.102-.028c-.06.011-.119.039-.191.063-.025-.039-.056-.078-.077-.122a4 4 0 0 0-.473-.783c-.076-.094-.16-.182-.228-.26l-.391.285q-.074.053-.132-.017l-.169-.207c-.025-.03-.053-.059-.097-.108" clip-rule="evenodd"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" fill-rule="evenodd" style="flex:none;line-height:1" viewBox="0 0 24 24"><title>Kilo Code</title><path d="M0 0v24h24V0zm22.222 22.222H1.778V1.778h20.444zm-7.555-4.964h2.222v1.778h-2.794L12.89 17.83v-2.794h1.778v2.222zm4 0h-1.778v-2.222h-2.222v-1.778h2.793l1.207 1.207zm-7.556-2.591H9.333v-1.778h1.778zm-5.778-1.778h1.778v4h4v1.778H6.54L5.333 17.46v-4.57zm13.334-3.556v1.778h-5.778V9.333h1.987V7.111h-1.987V5.333h2.558l1.206 1.207v2.793zm-11.556-2h2.222l1.778 1.778v2H9.333v-2H7.111v2H5.333V5.333h1.778zm4 0H9.333v-2h1.778z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24"><title>Kiro</title><path fill="#9046ff" d="M18.8 0H5.2A5.2 5.2 0 0 0 0 5.2v13.6A5.2 5.2 0 0 0 5.2 24h13.6a5.2 5.2 0 0 0 5.2-5.2V5.2A5.2 5.2 0 0 0 18.8 0"/><path fill="#fff" d="M7.97 16.376c-1.644 3.642 1.86 4.556 4.443 2.424.76 2.39 3.608.607 4.631-1.247 2.251-4.084 1.342-8.249 1.108-9.108-1.6-5.859-9.6-5.869-10.976.03-.323 1.033-.328 2.206-.507 3.423-.09.617-.16 1.009-.393 1.655-.139.373-.323.7-.62 1.257-.458.865-.264 2.53 2.101 1.665l.224-.1h-.01z"/><path d="M12.722 10.985c-.656 0-.755-.785-.755-1.252 0-.423.074-.756.218-.97a.61.61 0 0 1 .537-.283c.229 0 .428.095.567.289.159.218.243.55.243.964 0 .785-.303 1.252-.805 1.252zm2.703 0c-.656 0-.755-.785-.755-1.252 0-.423.074-.756.219-.97a.61.61 0 0 1 .536-.283c.229 0 .428.095.567.289.159.218.243.55.243.964 0 .785-.303 1.252-.805 1.252z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" fill="currentColor" fill-rule="evenodd" style="flex:0 0 auto;line-height:1" viewBox="0 0 24 24"><title>Kiro</title><path d="M4.594 6.677C6.67-2.226 18.746-2.211 21.16 6.632c.353 1.297 1.725 7.582-1.673 13.747-1.545 2.797-5.841 5.49-6.99 1.883C8.6 25.477 3.315 24.1 5.789 18.609l-.318.143c-3.57 1.305-3.863-1.208-3.173-2.513.45-.84.727-1.335.937-1.897.353-.975.458-1.568.593-2.498.27-1.837.277-3.607.765-5.167zm8.37.01a.92.92 0 0 0-.81.428c-.217.323-.33.825-.33 1.462 0 .705.15 1.89 1.14 1.89h.008c.757 0 1.214-.705 1.214-1.89 0-.622-.127-1.125-.367-1.455a1.01 1.01 0 0 0-.855-.435m4.08 0a.92.92 0 0 0-.81.428c-.217.323-.33.825-.33 1.462 0 .705.15 1.89 1.14 1.89h.008c.757 0 1.215-.705 1.215-1.89 0-.622-.128-1.125-.368-1.455a1.01 1.01 0 0 0-.855-.435"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="currentColor" fill-rule="evenodd" height="56" viewBox="0 0 24 24" width="56" xmlns="http://www.w3.org/2000/svg" style="flex: 0 0 auto; line-height: 1;"><title>LangGraph</title><path clip-rule="evenodd" d="M6.099 6H17.9C21.264 6 24 8.692 24 12s-2.736 6-6.099 6H6.1C2.736 18 0 15.308 0 12s2.736-6 6.099-6zm5.419 9.3c.148.154.367.146.561.106l.002.001c.09-.072-.038-.163-.16-.25-.074-.052-.145-.102-.166-.147.068-.08-.133-.265-.289-.408a1.52 1.52 0 01-.15-.148c-.11-.119-.155-.268-.2-.418-.03-.1-.06-.2-.11-.292-.304-.694-.653-1.383-1.143-1.97-.315-.39-.674-.74-1.033-1.09a19.384 19.384 0 01-.683-.688c-.226-.229-.362-.511-.499-.794-.114-.236-.228-.473-.396-.68-.507-.735-2.107-.936-2.342.104 0 .032-.01.052-.039.073-.13.094-.245.2-.342.327-.238.326-.274.877.022 1.17l.001-.019c.01-.147.02-.286.139-.391.228.193.576.262.841.117.32.45.422.995.525 1.54.085.456.17.912.382 1.316l.014.022c.124.203.25.41.41.587.059.089.178.184.297.279.157.125.314.25.329.359v.143c-.001.285-.002.58.184.813.103.205-.15.41-.352.385-.112.015-.233-.014-.354-.042-.165-.04-.329-.078-.462-.003-.038.04-.091.04-.145.042-.064.002-.129.004-.167.07-.008.019-.026.04-.045.063-.042.05-.087.105-.033.146l.015-.01c.082-.062.16-.12.27-.084-.014.08.039.102.092.123l.027.012a.344.344 0 01-.008.056c-.009.045-.017.088.018.127a.598.598 0 00.046-.054c.037-.046.073-.092.139-.11.144.19.289.111.471.013.206-.111.459-.248.81-.055-.135-.006-.255.01-.345.12-.023.024-.042.052-.002.084.207-.132.294-.085.375-.04.06.032.115.063.212.024l.07-.036c.155-.083.314-.166.499-.137-.139.039-.188.125-.242.218-.026.047-.054.095-.094.14-.021.021-.03.046-.007.08.29-.023.4-.095.548-.192.07-.046.15-.099.261-.154.124-.075.248-.027.368.02.13.05.255.098.371-.014.037-.033.083-.034.129-.034.016 0 .033 0 .05-.002-.037-.19-.24-.188-.448-.186-.24.003-.483.006-.475-.289.222-.149.224-.407.226-.651 0-.06 0-.117.005-.173.163.09.336.16.508.229.162.065.323.13.474.21.158.25.404.58.732.558.008-.026.016-.047.026-.073.019.004.039.008.059.014.086.02.178.044.223-.056zm6.429-2.829c.19.186.447.29.716.29.269 0 .526-.104.716-.29a.98.98 0 00.297-.7.98.98 0 00-.297-.7 1.024 1.024 0 00-1.08-.224l-.58-.831-.405.272.583.835a.978.978 0 00.05 1.348zm-1.817-2.69a1.03 1.03 0 001.056-.095.991.991 0 00.363-.507.97.97 0 00-.016-.62.994.994 0 00-.39-.488 1.028 1.028 0 00-1.298.14.987.987 0 00-.263.856.98.98 0 00.187.42c.095.125.218.225.36.294zm0 5.752a1.032 1.032 0 001.056-.095.991.991 0 00.363-.507.97.97 0 00-.016-.62.994.994 0 00-.39-.488 1.027 1.027 0 00-1.298.14.986.986 0 00-.263.856.98.98 0 00.187.42c.095.125.218.225.36.294zm.93-3.516v-.492h-1.55a.977.977 0 00-.217-.404l.584-.847-.425-.276-.583.847a1.023 1.023 0 00-1.047.23.973.973 0 00-.296.696c0 .261.107.512.296.696a1.023 1.023 0 001.047.23l.583.847.42-.276-.579-.847a.977.977 0 00.217-.404h1.55z"></path></svg>
|