Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
57b8d0f
docs(roadmap): swap Phase 5 and Phase 6 — Performance/HA first, IoT/e…
techbuzzz Aug 14, 2026
e4f6072
docs(roadmap): add Phase 7 - Web UI follow-ups (8 tasks, initiative 48)
techbuzzz Aug 14, 2026
e287599
readme update
techbuzzz Aug 14, 2026
efcb5ee
feat(roadmap): complete task 071 - sqlite thread-safety via Semaphore…
techbuzzz Aug 14, 2026
e30a0d1
feat(roadmap): complete task 072 - QuotaService cleanup fix and distr…
techbuzzz Aug 14, 2026
1ce0755
feat(roadmap): complete task 073 - outbox synced-state and bounded-qu…
techbuzzz Aug 14, 2026
10f89e6
feat(roadmap): complete task 074 - NATS JetStream ack/fail + local DLQ
techbuzzz Aug 14, 2026
1faf6ce
docs(roadmap): sync backlog.md status with task files (task 074 done;…
techbuzzz Aug 14, 2026
7670490
feat(roadmap): complete task 075 - DI lifetime fixes (captive dep + A…
techbuzzz Aug 14, 2026
0db9d71
Epic Hercules Studio added
techbuzzz Aug 14, 2026
8169d87
fix(roadmap): complete task 076 - per-call provider/model in LlmResponse
techbuzzz Aug 14, 2026
e8d6170
docs(roadmap): add commit hash + validation summary to task 076
techbuzzz Aug 14, 2026
9be6532
feat(roadmap): complete task 077 - sync-over-async sweep
Aug 14, 2026
c2eaa4f
feat(roadmap): complete task 078 - IHttpClientFactory + standard resi…
techbuzzz Aug 14, 2026
31499ae
fix(tests): BudgetGuardTests case-sensitivity on hard-cap degradation…
techbuzzz Aug 14, 2026
eeaa67d
Hercules Studio - initial project
techbuzzz Aug 14, 2026
55c65bd
feat(roadmap): complete task 079 - real health checks infrastructure …
Aug 16, 2026
07a7024
Fix inital Hercules Studio
techbuzzz Aug 16, 2026
c1ba974
fix Studio
techbuzzz Aug 16, 2026
2f0461e
fix studio
techbuzzz Aug 16, 2026
d123c32
feat(roadmap): complete task 080 - graceful shutdown and drain
Aug 16, 2026
102c9d5
feat(roadmap): complete task 081 - kestrel tuning, rate limiter, comp…
techbuzzz Aug 16, 2026
396163a
feat(roadmap): complete task 082 - router/CAS/reconnect/DI fixes
Aug 16, 2026
49a4cb7
feat(roadmap): complete task 083 - cache stampede dedup, O(log n) evi…
Aug 16, 2026
cd13f8a
feat(roadmap): complete task 084 - ProposalStore cache + StringBuilde…
Aug 16, 2026
0810c8d
docs(roadmap): mark task 084 as done in backlog
Aug 16, 2026
415d1c5
feat(roadmap): complete task 085 - OTel polish (console gating, proce…
Aug 16, 2026
7644ed8
feat(roadmap): complete task 086 - backpressure, bounded channels, DL…
techbuzzz Aug 16, 2026
2ea65d1
feat(roadmap): harden task 087 - shared-memory catch log, backup pass…
techbuzzz Aug 17, 2026
d5b2e6f
feat(roadmap): harden task 087 - AuditService.QueryAsync filter imple…
Aug 17, 2026
5cf0ab0
feat(web): complete task 088 - A2A Agent Card panel
Aug 17, 2026
e43c25a
feat(roadmap): complete task 089 - web capability registry panel
techbuzzz Aug 17, 2026
7e55518
feat(roadmap): complete task 090 - web discovery panel
Aug 17, 2026
1ac2633
feat(roadmap): complete task 096 - port migration 5000 → 8421
Aug 17, 2026
d3aa2bd
feat(roadmap): complete task 087 - SLO real metrics, peer trim, Fleet…
techbuzzz Aug 17, 2026
2d88e82
docs(roadmap): mark task 087 as done in backlog
techbuzzz Aug 17, 2026
8880fd2
feat(roadmap): complete task 091 - trust admission policy panel
techbuzzz Aug 17, 2026
bc6e748
docs(roadmap): move 91 done tasks to tasks/completed/
techbuzzz Aug 17, 2026
5d000eb
docs(roadmap): move task_091 to completed (completed in 8880fd2)
techbuzzz Aug 17, 2026
74d5ba2
feat(roadmap): complete task 092 - web mesh profile & backend health …
techbuzzz Aug 17, 2026
2d52b1d
feat(roadmap): complete task 093 - mesh observability panel
techbuzzz Aug 17, 2026
bad417f
chore(roadmap): move task 093 to completed + update backlog
techbuzzz Aug 17, 2026
5a6452e
feat(roadmap): complete task 094 - backup & SLO operations panel
techbuzzz Aug 17, 2026
67a20dc
Add scope for OpenAPI
techbuzzz Aug 17, 2026
305848f
feat(roadmap): complete task 095 - web security, quotas & rollout panel
techbuzzz Aug 17, 2026
27694d9
feat(roadmap): complete task 097 - dual API keys (contribute + system)
techbuzzz Aug 17, 2026
e584c00
Landing repo part 1
techbuzzz Aug 17, 2026
9e596d2
feat(roadmap): complete task 098 - CheckIn/CheckOut protocol
Aug 17, 2026
690bf34
feat(roadmap): complete task 099 - system restart protocol
Aug 17, 2026
2202d0e
feat(roadmap): complete task 100 - MCP hot-reload (IConfigReload)
Aug 17, 2026
c3067ab
feat(roadmap): complete task 101 - SkillSdk (Hercules.SkillSdk NuGet)
techbuzzz Aug 17, 2026
4a4ddc1
docs(roadmap): update CHANGELOGs for task 101
techbuzzz Aug 17, 2026
4603560
feat(roadmap): complete task 102 - context distillation
techbuzzz Aug 17, 2026
102ee08
feat(roadmap): task_103 foundation - ISessionStore + PostgresSessionS…
techbuzzz Aug 17, 2026
2af2efa
feat(roadmap): complete task 106 - delegated task SQLite persistence
techbuzzz Aug 17, 2026
c520652
feat(roadmap): task 109 - OpenAPI producer + Scalar UI + build-time g…
techbuzzz Aug 17, 2026
e846dc8
feat(roadmap): complete task 108 - DurableTask checkpoint persistence
techbuzzz Aug 17, 2026
614aa7a
Big fixes all starting issue
techbuzzz Aug 17, 2026
22bdb59
fix
techbuzzz Aug 17, 2026
d0fdc36
refactor: introduce BuiltIn constants and unify runtime data root
techbuzzz Aug 17, 2026
2eb291f
feat(roadmap): complete task 112 - WithName on Marketplace + Template
Aug 17, 2026
08b68f5
feat(roadmap): complete task 104 - hercules-workflow-server MVP
Aug 17, 2026
baa3adb
fix
techbuzzz Aug 21, 2026
95c4a3d
fix(openapi): generate a populated build-time document via the runtim…
techbuzzz Oct 2, 2026
a3acd0e
fix
techbuzzz Oct 2, 2026
e4bb60d
feat(openapi): tag every endpoint so Orval tags-split works
techbuzzz Oct 2, 2026
e3e2ed5
perfomance fixes
techbuzzz Oct 6, 2026
a18195e
chore: update ROADMAP.md
techbuzzz Oct 6, 2026
8013c8d
chore: update README-RU.md
techbuzzz Oct 6, 2026
9f5f515
release: 2.0.0 — web-first Studio, changelog and version alignment
techbuzzz Oct 7, 2026
9998652
docs: stop two places from overstating release progress
techbuzzz Oct 7, 2026
71f3c13
chore: remove studio-ci.yml
techbuzzz Oct 7, 2026
3514305
chore: update .gitignore
techbuzzz Oct 7, 2026
6c3c4ec
chore: update AgentCardService.cs
techbuzzz Oct 7, 2026
1705f73
chore: update InFlightTrackerTests.cs
techbuzzz Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
49 changes: 49 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# =============================================================================
# Docker build context exclusions.
#
# Without this the context includes node_modules (Studio), bin/obj (six .NET
# projects), the Astro build output and git history — hundreds of MB that are
# never used by an image build and that invalidate the layer cache on every
# unrelated edit. Package *manifests* are deliberately NOT excluded: npm ci and
# dotnet restore both need them.
# =============================================================================

.git
.gitignore
.github
.opencode
**/.vs
**/.vscode
**/node_modules
**/bin
**/obj
**/.vite
**/test-results
**/playwright-report
**/.astro
**/.pytest_cache

# Build outputs — the image builds these itself.
src/hercules-studio/dist
src/hercules-web/dist

# Runtime state. HERCULES_DATA_ROOT is pinned inside the container, so a host
# data directory must never leak in and silently seed the test instance.
data
**/data
*.db
*.db-shm
*.db-wal

# Docs and assets not needed to run the agent.
docs
assets
examples
templates
deploy/raspberry-pi

# Not needed at runtime.
**/*.md
!**/README.md
LICENSE
LICENSE-COMMERCIAL.md
11 changes: 11 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# The `openapi` CI job regenerates openapi.json and fails on any diff, including
# line-ending-only changes. `core.autocrlf` is a per-machine Git setting, so without
# pinning this the job's result depends on whichever contributor pushed — a checkout
# with autocrlf=false produces CRLF, a Linux runner produces LF, and the job fails on
# content that is byte-identical apart from newlines.
#
# Both files below are generated artefacts that are committed and diffed, so their line
# endings are pinned rather than left to autocrlf.

src/agent/Hercules.WebApi/openapi.json text eol=lf
src/hercules-studio/renderer/src/sdk/openapi.d.ts text eol=lf
12 changes: 6 additions & 6 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: 💬 Вопросы и обсуждения
url: https://github.com/discussions
about: Задайте вопрос или обсудите идею в Discussions
- name: 🔒 Уязвимости безопасности
url: https://github.com/security/advisories
about: Сообщайте об уязвимостях приватно (см. SECURITY.md)
- name: Security issue
about: Please report security vulnerabilities privately via SECURITY.md.
url: https://github.com/techbuzzz/Hercules/security/advisories
- name: Question
about: Ask a question in Discussions.
url: https://github.com/techbuzzz/Hercules/discussions
29 changes: 29 additions & 0 deletions .github/ISSUE_TEMPLATE/good-first-discord.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Add Discord bot
description: Add a second chat interface — Discord bot alongside Telegram.
labels: ["good first issue", "interface", "discord"]
title: "[Good first issue] Add Discord bot interface"
body:
- type: markdown
attributes:
value: |
Hercules already has a Telegram bot (`src/agent/Hercules/Telegram/TelegramBot.cs`).
This issue asks for the same idea implemented for Discord.
- type: checkboxes
id: tasks
attributes:
label: Checklist
options:
- label: Read existing `TelegramBot.cs` to understand the adapter pattern
- label: Add a new project reference or package for Discord (e.g., `Discord.Net`)
- label: Implement `DiscordBot.cs` under `src/agent/Hercules/Discord/`
- label: Wire it into `Program.cs` behind `--discord` CLI flag
- label: Add config section `Discord: { Enabled, Token }` to `appsettings.json`
- label: Add minimal README in `docs/` or update `examples/`
- type: textarea
id: notes
attributes:
label: Notes
description: Tips for the implementer.
value: |
Reuse `AgentCore` via `WebApiAdapter` or call directly.
Keep parity with Telegram commands: `/start`, `/skills`, `/profile`, `/reset`.
32 changes: 32 additions & 0 deletions .github/ISSUE_TEMPLATE/good-first-dockerfile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Add Dockerfile
description: Provide a production-ready Dockerfile for Hercules (not only edge Raspberry Pi).
labels: ["good first issue", "ops", "docker"]
title: "[Good first issue] Add main Dockerfile and compose for Hercules"
body:
- type: markdown
attributes:
value: |
There is an edge Dockerfile under `deploy/raspberry-pi/`. This issue is about adding
a generic, non-privileged Dockerfile for the main agent and Web API.
- type: checkboxes
id: tasks
attributes:
label: Checklist
options:
- label: Read `deploy/raspberry-pi/Dockerfile` for conventions
- label: Add `Dockerfile` at repo root (or `deploy/default/Dockerfile`)
- label: Multi-stage build: restore → build → runtime (Alpine or Debian-slim)
- label: Add `.dockerignore`
- label: Add `docker-compose.yml` with optional Redis/PostgreSQL profiles
- label: Document build/run commands in README
- label: Add a GitHub Actions job that builds the image
- type: textarea
id: notes
attributes:
label: Notes
description: Non-functional requirements.
value: |
Use non-root user.
Expose ports 8421 (Web API) and optionally 4321 (frontend static).
Mount `data/` as a volume.
Keep image size small.
30 changes: 30 additions & 0 deletions .github/ISSUE_TEMPLATE/good-first-openrouter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Add OpenRouter adapter
description: Add OpenRouter as a supported LLM provider.
labels: ["good first issue", "llm", "provider"]
title: "[Good first issue] Add OpenRouter LLM provider adapter"
body:
- type: markdown
attributes:
value: |
Thanks for picking this up! OpenRouter exposes an OpenAI-compatible endpoint,
so the change is usually a new client class + registration in `LlmClientFactory`.
- type: checkboxes
id: tasks
attributes:
label: Checklist
options:
- label: Read [docs/CONFIGURATION-EN.md](docs/CONFIGURATION-EN.md)
- label: Implement `OpenRouterClient.cs` under `src/agent/Hercules/LLM/`
- label: Add "openrouter" to `LlmClientFactory` and `AppConfig`
- label: Add config section example to `appsettings.json`
- label: Add a unit test in `tests/Hercules.Agent.Tests/LLM/`
- label: Update README provider table
- type: textarea
id: notes
attributes:
label: Notes
description: Useful links or hints for the implementer.
value: |
Endpoint: `https://openrouter.ai/api/v1`
Docs: https://openrouter.ai/docs
Similar existing clients: `YandexGPTClient.cs`, `LocalLLMClient.cs`
31 changes: 31 additions & 0 deletions .github/ISSUE_TEMPLATE/good-first-readme-ru.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Translate README to Russian
description: Bring README-RU.md up to parity with the new landing-style README.md.
labels: ["good first issue", "docs", "i18n"]
title: "[Good first issue] Translate new README landing page to Russian"
body:
- type: markdown
attributes:
value: |
The English README was upgraded to a landing page with badges, architecture diagram,
comparison table, quick start, and CTA. The Russian version needs the same refresh.
- type: checkboxes
id: tasks
attributes:
label: Checklist
options:
- label: Read the new [README.md](../README.md) top section
- label: Update [README-RU.md](../README-RU.md) with the same landing structure
- label: Keep all existing Russian sections that are still accurate
- label: Translate the ASCII architecture diagram
- label: Translate the comparison table (Hercules vs Hermes vs AutoGen)
- label: Update links so they point to the Russian docs where available
- label: Open a PR with `docs:` prefix
- type: textarea
id: notes
attributes:
label: Notes
description: Style guide.
value: |
Keep technical terms consistent with existing Russian docs.
Do not translate code snippets or CLI commands.
Ask for review if unsure about terminology.
29 changes: 29 additions & 0 deletions .github/ISSUE_TEMPLATE/good-first-web-search.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Add web-search skill
description: Add a reusable `web-search` skill that queries a search engine and summarizes results.
labels: ["good first issue", "skill", "tools"]
title: "[Good first issue] Implement web-search skill"
body:
- type: markdown
attributes:
value: |
Hercules has an `http` tool. This issue is about wrapping it into a first-class skill
that can answer "search the web for ..." and return a concise summary.
- type: checkboxes
id: tasks
attributes:
label: Checklist
options:
- label: Pick a search provider: DuckDuckGo HTML, Bing API, SerpApi, or SearXNG
- label: Create `data/Skills/skill.web-search.md` following the skill spec
- label: Add allow-list entries for the search endpoint in `appsettings.json`
- label: Test at least 3 queries in CLI REPL
- label: Document the skill in `examples/03-local-folder-rag` or a new `examples/06-web-search`
- type: textarea
id: notes
attributes:
label: Notes
description: Implementation hints.
value: |
DuckDuckGo HTML endpoint is a good free starting point.
Parse the HTML carefully or use a lightweight library.
Cite sources in the final summary.
15 changes: 15 additions & 0 deletions .github/opencode.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"MSDN": {
"type": "remote",
"url":"https://learn.microsoft.com/api/mcp",
"enabled": true,
},
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
},
}

123 changes: 123 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
name: CI

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

# Cancel superseded runs on the same ref — this suite is fast enough that a stale
# result is worth less than the minutes it costs to keep computing it.
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

env:
DOTNET_NOLOGO: "true"
DOTNET_CLI_TELEMETRY_OPTOUT: "true"
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: "true"

jobs:
agent:
name: Agent (.NET)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-dotnet@v4
with:
global-json-file: global.json

- name: Restore
run: dotnet restore src/agent/Hercules.slnx

- name: Build
run: dotnet build src/agent/Hercules.slnx -c Release --no-restore

- name: Test
run: >-
dotnet test tests/Hercules.Agent.Tests
-c Release --no-build
--logger "trx;LogFileName=agent-tests.trx"

- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: agent-test-results
path: "**/TestResults/*.trx"
if-no-files-found: ignore

openapi:
name: OpenAPI document is current
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-dotnet@v4
with:
global-json-file: global.json

# Studio's contract test (client.contract.test.ts) asserts every endpoint the
# client calls exists in the committed document. During the web-first migration
# that document was found stale — live routes were missing from it and only
# regeneration exposed that. This job makes the drift fail the build instead.
- name: Regenerate the document
run: dotnet build src/agent/Hercules.WebApi -p:OpenApiGenerateDocumentOnBuild=true

- name: Fail if the committed document drifted
run: |
if ! git diff --quiet -- src/agent/Hercules.WebApi/openapi.json; then
echo "::error::src/agent/Hercules.WebApi/openapi.json is stale. Regenerate and commit it with:"
echo " dotnet build src/agent/Hercules.WebApi -p:OpenApiGenerateDocumentOnBuild=true"
echo " cd src/hercules-studio && npm run generate:api"
git --no-pager diff -- src/agent/Hercules.WebApi/openapi.json | head -120
exit 1
fi

studio:
name: Studio (Node)
runs-on: ubuntu-latest
defaults:
run:
working-directory: src/hercules-studio
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
cache-dependency-path: src/hercules-studio/package-lock.json

- name: Install dependencies
run: npm ci

- name: Typecheck
run: npm run typecheck

- name: Lint
run: npm run lint

- name: Unit tests
run: npm test

- name: Build
run: npm run build

- name: Install Playwright browsers
run: npx playwright install --with-deps chromium

# The Playwright config starts its own preview server; agent calls are
# stubbed in-spec, so no Hercules agent is needed here.
- name: E2E tests
run: npm run test:e2e

- name: Upload Playwright report
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: src/hercules-studio/playwright-report
if-no-files-found: ignore
retention-days: 7
Loading
Loading