chore: drop in-repo infographic/ directory; keep PR-body URLs only (#30854)
PR infographics belong in PR descriptions, not committed to the repo. Removes the 13 archived directories under infographic/ and adds the path to .gitignore so future generations don't accidentally land in-tree. The fal.media URLs embedded in each PR's body remain the canonical artifact — those PR descriptions are the storage.
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.9 MiB |
|
|
@ -1,121 +0,0 @@
|
||||||
Create a professional infographic following these specifications:
|
|
||||||
|
|
||||||
## Image Specifications
|
|
||||||
|
|
||||||
- **Type**: Infographic
|
|
||||||
- **Layout**: bento-grid
|
|
||||||
- **Style**: retro-pop-grid
|
|
||||||
- **Aspect Ratio**: 1:1 (square)
|
|
||||||
- **Language**: en
|
|
||||||
|
|
||||||
## Core Principles
|
|
||||||
|
|
||||||
- Follow the layout structure precisely for information architecture
|
|
||||||
- Apply style aesthetics consistently throughout
|
|
||||||
- Keep information concise, highlight keywords and core concepts
|
|
||||||
- Use ample whitespace for visual clarity
|
|
||||||
- Maintain clear visual hierarchy
|
|
||||||
|
|
||||||
## Text Requirements
|
|
||||||
|
|
||||||
- All text must match the specified style treatment
|
|
||||||
- Main titles should be prominent and readable
|
|
||||||
- Key concepts should be visually emphasized
|
|
||||||
- Labels should be clear and appropriately sized
|
|
||||||
- Use English for all text content
|
|
||||||
|
|
||||||
## Layout Guidelines (bento-grid)
|
|
||||||
|
|
||||||
- Grid of rectangular cells with varied sizes (1x1, 2x1, 1x2, 2x2)
|
|
||||||
- Hero cell ("ONE TOKEN, EVERY KEY") takes the largest position (top-center or upper-left, 2x2)
|
|
||||||
- Supporting cells around the hero, mixed cell sizes for rhythm
|
|
||||||
- Each cell self-contained with its own title + icon + brief content
|
|
||||||
- Title strip at the top: "BITWARDEN SECRETS MANAGER — HERMES-AGENT PR #30035"
|
|
||||||
- Footer strip at the bottom with commit SHA + repo
|
|
||||||
|
|
||||||
## Style Guidelines (retro-pop-grid)
|
|
||||||
|
|
||||||
- 1970s retro pop art with strict Swiss international grid
|
|
||||||
- Background: warm vintage cream/beige (#F5F0E6)
|
|
||||||
- Accents: salmon pink, sky blue, mustard yellow, mint green — all muted retro tones
|
|
||||||
- Pure solid black (#000000) and solid white (#FFFFFF) for extreme-contrast cells
|
|
||||||
- Uniform thick black outlines on ALL illustrations, text boxes, grid dividers
|
|
||||||
- Pure 2D flat vector aesthetic with subtle screen-print texture
|
|
||||||
- One cell inverted to black-background-with-white-text for the "NEVER BLOCKS STARTUP" warning section
|
|
||||||
- Geometric fill patterns in empty cells: checkerboards, diagonal lines, dot grids
|
|
||||||
- Flat abstract symbols: shields (security), wrenches (install), arrows (rotation), keyholes (auth), checkmarks (tests)
|
|
||||||
- Vintage comic-style smiley face for "26/26 PASSING" cell
|
|
||||||
- Bold brutalist or thick retro display fonts for headers; clean sans-serif body
|
|
||||||
- Decorative stylistic labels acceptable: "WARNING", "NEW DEFAULT", "PINNED", "VERIFIED", "ROTATE"
|
|
||||||
|
|
||||||
## Avoid
|
|
||||||
|
|
||||||
- 3D rendering, gradients, soft shadows, sketch-like lines
|
|
||||||
- Free-floating elements — everything anchored in grid cells
|
|
||||||
- Pure white background — must use warm cream/beige
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
Generate the infographic based on the content below:
|
|
||||||
|
|
||||||
### Title (top strip)
|
|
||||||
BITWARDEN SECRETS MANAGER → HERMES-AGENT
|
|
||||||
PR #30035
|
|
||||||
|
|
||||||
### HERO CELL (largest, top-center, salmon pink background with thick black border)
|
|
||||||
ONE TOKEN, EVERY KEY
|
|
||||||
Rotate once in the Bitwarden web app.
|
|
||||||
Every Hermes process picks it up on next start.
|
|
||||||
NEW DEFAULT: override_existing = true
|
|
||||||
|
|
||||||
### Cell — LAZY INSTALL (sky blue background)
|
|
||||||
~/.hermes/bin/bws
|
|
||||||
bws v2.0.0 PINNED
|
|
||||||
SHA-256 VERIFIED
|
|
||||||
No apt · no brew · no sudo
|
|
||||||
Icon: wrench + downward arrow
|
|
||||||
|
|
||||||
### Cell — CLI SURFACE (mustard yellow background, checkerboard accents)
|
|
||||||
$ hermes secrets bitwarden
|
|
||||||
setup wizard
|
|
||||||
status diagnose
|
|
||||||
sync fetch
|
|
||||||
install binary
|
|
||||||
disable off
|
|
||||||
Icon: terminal prompt symbol
|
|
||||||
|
|
||||||
### Cell — SOURCE OF TRUTH (mint green background)
|
|
||||||
BITWARDEN WINS
|
|
||||||
Overwrites stale .env on every start
|
|
||||||
Bootstrap token never overwritten (exception)
|
|
||||||
Icon: keyhole + arrow
|
|
||||||
|
|
||||||
### Cell — INVERTED BLACK CELL with WHITE TEXT — NEVER BLOCKS STARTUP (extreme contrast)
|
|
||||||
WARNING-FREE STARTUP
|
|
||||||
Missing binary → warn + continue
|
|
||||||
Bad token → warn + continue
|
|
||||||
Network down → warn + continue
|
|
||||||
Checksum mismatch → refuse + warn
|
|
||||||
30s timeout ceiling
|
|
||||||
Icon: white triangle warning sign
|
|
||||||
|
|
||||||
### Cell — TESTS (cream with thick black outline, vintage comic smiley face)
|
|
||||||
26 / 26
|
|
||||||
HERMETIC
|
|
||||||
subprocess + urllib mocked
|
|
||||||
linux · macos · windows
|
|
||||||
x86_64 · arm64
|
|
||||||
Icon: comic-style smiley face with checkmark
|
|
||||||
|
|
||||||
### Cell — CONFIG YAML (white background with black grid)
|
|
||||||
secrets:
|
|
||||||
bitwarden:
|
|
||||||
enabled: true
|
|
||||||
project_id: ...
|
|
||||||
override_existing: true
|
|
||||||
cache_ttl_seconds: 300
|
|
||||||
auto_install: true
|
|
||||||
|
|
||||||
### Footer strip (bottom, black-on-cream)
|
|
||||||
PR #30035 · commit 7f9b05668 · NousResearch/hermes-agent
|
|
||||||
10 files · +1743 / -1 · agent/secret_sources/ · hermes_cli/secrets_cli.py
|
|
||||||
|
|
@ -1,57 +0,0 @@
|
||||||
# Hermes-Agent PR #30035 — Bitwarden Secrets Manager Integration
|
|
||||||
|
|
||||||
## Hero
|
|
||||||
**ONE TOKEN, EVERY KEY**
|
|
||||||
Rotate once. Every Hermes process picks it up on next start.
|
|
||||||
`secrets.bitwarden.override_existing: true` (default)
|
|
||||||
|
|
||||||
## Cells
|
|
||||||
|
|
||||||
### Lazy Install
|
|
||||||
- `bws v2.0.0` pinned
|
|
||||||
- Downloaded into `~/.hermes/bin/bws`
|
|
||||||
- SHA-256 verified vs GitHub Releases checksum file
|
|
||||||
- No apt, no brew, no sudo
|
|
||||||
- Cross-platform: linux gnu+musl, macos universal, windows x86_64+arm64
|
|
||||||
|
|
||||||
### CLI Surface
|
|
||||||
- `hermes secrets bitwarden setup` wizard
|
|
||||||
- `hermes secrets bitwarden status` diagnose
|
|
||||||
- `hermes secrets bitwarden sync` dry-run / --apply
|
|
||||||
- `hermes secrets bitwarden install` binary only
|
|
||||||
- `hermes secrets bitwarden disable` off switch
|
|
||||||
|
|
||||||
### Source of Truth
|
|
||||||
- Bitwarden WINS on every Hermes start
|
|
||||||
- BSM values overwrite stale `.env` lines
|
|
||||||
- Rotate a key once → all your machines reload it
|
|
||||||
- Bootstrap token `BWS_ACCESS_TOKEN` is the lone exception (never overwritten)
|
|
||||||
|
|
||||||
### Never Blocks Startup
|
|
||||||
- Missing binary → warn + continue
|
|
||||||
- Bad token → warn + continue
|
|
||||||
- Checksum mismatch → refuse install + warn
|
|
||||||
- No network → warn + continue
|
|
||||||
- Timeout → 30s ceiling, warn + continue
|
|
||||||
|
|
||||||
### Tests
|
|
||||||
- 26/26 passing, hermetic
|
|
||||||
- subprocess + urllib mocked
|
|
||||||
- Platform matrix tested (linux, macos, windows × x86_64, arm64)
|
|
||||||
- Cache hit/miss, auth fail, non-JSON, timeout, override behavior
|
|
||||||
|
|
||||||
### Config
|
|
||||||
```yaml
|
|
||||||
secrets:
|
|
||||||
bitwarden:
|
|
||||||
enabled: true
|
|
||||||
project_id: <uuid>
|
|
||||||
override_existing: true # NEW DEFAULT
|
|
||||||
cache_ttl_seconds: 300
|
|
||||||
auto_install: true
|
|
||||||
```
|
|
||||||
|
|
||||||
## Footer
|
|
||||||
PR #30035 · commit 7f9b05668 · NousResearch/hermes-agent
|
|
||||||
|
|
||||||
10 files changed · +1743 / -1 · agent/secret_sources/ · hermes_cli/secrets_cli.py · tests · docs
|
|
||||||
|
Before Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 1 MiB |
|
Before Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.4 MiB |
|
|
@ -1,85 +0,0 @@
|
||||||
Create a professional infographic following these specifications:
|
|
||||||
|
|
||||||
## Image Specifications
|
|
||||||
|
|
||||||
- **Type**: Infographic
|
|
||||||
- **Layout**: bento-grid
|
|
||||||
- **Style**: technical-schematic (engineering blueprint variant)
|
|
||||||
- **Aspect Ratio**: 1:1 (square)
|
|
||||||
- **Language**: English
|
|
||||||
|
|
||||||
## Core Principles
|
|
||||||
|
|
||||||
- Follow the bento-grid layout precisely with varied cell sizes
|
|
||||||
- Apply technical-schematic aesthetics consistently throughout
|
|
||||||
- Keep information concise, highlight keywords and core concepts
|
|
||||||
- Use ample whitespace for visual clarity
|
|
||||||
- Maintain clear visual hierarchy with a hero cell for the headline metric
|
|
||||||
|
|
||||||
## Style Guidelines (technical-schematic blueprint)
|
|
||||||
|
|
||||||
- Color palette: deep blue background (#1E3A5F), white lines and text, amber accent (#F59E0B) ONLY on the hero metric and critical deltas, cyan callouts for measurement annotations
|
|
||||||
- Grid pattern overlay across the entire canvas — fine white grid lines on the deep blue background
|
|
||||||
- All-caps technical stencil typography for headers; clean sans-serif for body
|
|
||||||
- Dimension lines with arrowheads connecting metrics to their cells
|
|
||||||
- Technical symbols where appropriate (gear icons, flow arrows, modular block diagrams)
|
|
||||||
- Consistent stroke weights — bold for cell borders, thin for grid, medium for connector lines
|
|
||||||
- Engineering spec-sheet aesthetic: feels like a printed architectural blueprint, austere and precise
|
|
||||||
|
|
||||||
## Layout Guidelines (bento-grid)
|
|
||||||
|
|
||||||
- Hero cell (TOP-CENTER or LEFT, occupying ~40% of canvas): "−61 COMPLEXITY · 79 → 18" headline metric in massive amber-on-blue, with subtitle "convert_messages_to_anthropic refactored"
|
|
||||||
- 7 helper cells in a 2x4 or 3x3 grid showing each extracted helper as its own modular block — each cell has the helper name in all-caps, its complexity number, and one-line role
|
|
||||||
- Metrics strip cell: BEFORE/AFTER table with deltas (185 statements → ~70, 79 C → 18 C, +5 violations intentional)
|
|
||||||
- Test validation cell: "152/152 + 213/213 PASS" with checkmark stencil
|
|
||||||
- Footer strip across bottom: "PR #27784 · agent/anthropic_adapter.py · @kshitijk4poor · NousResearch/hermes-agent"
|
|
||||||
|
|
||||||
## Content to render
|
|
||||||
|
|
||||||
**Main title (top of canvas, all caps):** "ANTHROPIC ADAPTER · 1-INTO-7 EXTRACTION"
|
|
||||||
**Subtitle:** "PR #27784 — convert_messages_to_anthropic refactor"
|
|
||||||
|
|
||||||
**Hero cell (largest, amber accent):**
|
|
||||||
- "−61"
|
|
||||||
- "CYCLOMATIC COMPLEXITY"
|
|
||||||
- "79 → 18 MAX (−77%)"
|
|
||||||
- Subtext: "convert_messages_to_anthropic · pure code motion · zero behavior change"
|
|
||||||
|
|
||||||
**7 helper cells (one per helper, each its own modular block):**
|
|
||||||
|
|
||||||
1. _convert_assistant_message · C<10 · "Assistant msg → content blocks"
|
|
||||||
2. _convert_tool_message_to_result · C=12 · "Tool msg → tool_result + merge"
|
|
||||||
3. _convert_user_message · C<10 · "User msg validation"
|
|
||||||
4. _strip_orphaned_tool_blocks · C=15 · "Orphan tool_use removal"
|
|
||||||
5. _merge_consecutive_roles · C=13 · "Anthropic role-alternation"
|
|
||||||
6. _manage_thinking_signatures · C=18 · "Strip/preserve by endpoint"
|
|
||||||
7. _evict_old_screenshots · C<10 · "Keep most recent 3 images"
|
|
||||||
|
|
||||||
**Metrics cell (table format with arrows):**
|
|
||||||
- MAX FUNCTION COMPLEXITY: 79 → 18 (−77%)
|
|
||||||
- MAX STATEMENTS/FUNCTION: 185 → ~70 (−62%)
|
|
||||||
- LOC FILE-WIDE: −4
|
|
||||||
- MAIN FUNCTION LOC: 395 → 63
|
|
||||||
|
|
||||||
**Test validation cell (checkmark stencil):**
|
|
||||||
- test_anthropic_adapter.py: 152/152 PASS
|
|
||||||
- test_auxiliary_client.py: 172/172 PASS
|
|
||||||
- test_azure_identity_adapter.py: 39/39 PASS
|
|
||||||
- test_bedrock_1m_context.py: 2/2 PASS
|
|
||||||
|
|
||||||
**Behavior preservation cell:**
|
|
||||||
"ZERO LOGIC CHANGES · ANTHROPIC + KIMI + DEEPSEEK + MINIMAX + AZURE FOUNDRY + BEDROCK SEMANTICS PRESERVED"
|
|
||||||
|
|
||||||
**Footer strip:**
|
|
||||||
"PR #27784 · agent/anthropic_adapter.py · cherry-picked from #23968 · @kshitijk4poor · NousResearch/hermes-agent"
|
|
||||||
|
|
||||||
## Text Requirements
|
|
||||||
|
|
||||||
- All text in English, all-caps for headers
|
|
||||||
- Hero metric "−61" in amber (#F59E0B), oversized, with thick blueprint stencil treatment
|
|
||||||
- Helper names in white technical stencil
|
|
||||||
- Complexity numbers (C=12, C=18, etc.) in cyan callouts
|
|
||||||
- "BEFORE" labels in white-on-blue, "AFTER" labels in amber-on-blue
|
|
||||||
- Footer in small white stencil
|
|
||||||
|
|
||||||
Generate the infographic now as a square engineering blueprint.
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
||||||
# Infographic: PR #27784 — convert_messages_to_anthropic refactor
|
|
||||||
|
|
||||||
## Hero metric
|
|
||||||
**−61 cyclomatic complexity** in `agent/anthropic_adapter.py` (79 → 18 max).
|
|
||||||
**−4 LOC** net file-wide. **77% drop** in single-function complexity ceiling.
|
|
||||||
|
|
||||||
## Title
|
|
||||||
ANTHROPIC ADAPTER · 1-INTO-7 EXTRACTION
|
|
||||||
PR #27784 · agent/anthropic_adapter.py · @kshitijk4poor
|
|
||||||
|
|
||||||
## Section 1: BEFORE (left side)
|
|
||||||
**convert_messages_to_anthropic**
|
|
||||||
- 185 statements
|
|
||||||
- 90 branches
|
|
||||||
- Cyclomatic: 79
|
|
||||||
- Did 7 jobs in one function
|
|
||||||
|
|
||||||
Inline responsibilities mixed together:
|
|
||||||
1. Walk + dispatch by role
|
|
||||||
2. Tool-result conversion
|
|
||||||
3. Orphan tool-use stripping
|
|
||||||
4. Same-role merging
|
|
||||||
5. Thinking-signature management
|
|
||||||
6. Screenshot eviction
|
|
||||||
7. Final assembly
|
|
||||||
|
|
||||||
## Section 2: AFTER (right side)
|
|
||||||
**convert_messages_to_anthropic** — now 63 lines, C<10
|
|
||||||
Plus 7 single-responsibility helpers:
|
|
||||||
|
|
||||||
| Helper | C | Role |
|
|
||||||
|---|---|---|
|
|
||||||
| _convert_assistant_message | <10 | Assistant msg → content blocks |
|
|
||||||
| _convert_tool_message_to_result | 12 | Tool msg → tool_result + merge |
|
|
||||||
| _convert_user_message | <10 | User msg validation + conversion |
|
|
||||||
| _strip_orphaned_tool_blocks | 15 | Strip orphan tool_use + tool_result |
|
|
||||||
| _merge_consecutive_roles | 13 | Anthropic role-alternation enforce |
|
|
||||||
| _manage_thinking_signatures | 18 | Strip/preserve/downgrade by endpoint |
|
|
||||||
| _evict_old_screenshots | <10 | Keep most recent 3 images |
|
|
||||||
|
|
||||||
## Section 3: METRICS
|
|
||||||
| Metric | Before | After | Δ |
|
|
||||||
|---|---:|---:|---:|
|
|
||||||
| Max function complexity | 79 | 18 | −77% |
|
|
||||||
| Max statements/function | 185 | ~70 | −62% |
|
|
||||||
| LOC (file-wide) | — | — | **−4** |
|
|
||||||
| C901 violations | 3 | 8 | +5 (intentional split) |
|
|
||||||
|
|
||||||
## Section 4: ZERO BEHAVIOR CHANGE
|
|
||||||
- Pure code motion — no logic edits
|
|
||||||
- Mutating helpers update `result` in place (same as inline)
|
|
||||||
- `_merge_consecutive_roles` returns new list — caller rebinds
|
|
||||||
- Anthropic / Kimi / DeepSeek / MiniMax / Azure Foundry / Bedrock semantics preserved
|
|
||||||
- Thinking-signature handling identical to pre-refactor
|
|
||||||
|
|
||||||
## Section 5: TEST VALIDATION
|
|
||||||
- tests/agent/test_anthropic_adapter.py — **152 / 152 pass**
|
|
||||||
- tests/agent/test_auxiliary_client.py — **172 / 172 pass**
|
|
||||||
- tests/agent/test_azure_identity_adapter.py — **39 / 39 pass**
|
|
||||||
- tests/agent/test_bedrock_1m_context.py — **2 / 2 pass**
|
|
||||||
|
|
||||||
## Footer
|
|
||||||
File: agent/anthropic_adapter.py
|
|
||||||
Original PR: #27784 (cherry-pick of #23968)
|
|
||||||
Salvage commit: 9c102b937 (kshitijk4poor authorship preserved)
|
|
||||||
Repo: NousResearch/hermes-agent
|
|
||||||
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 1.9 MiB |