Commit Graph
123 Commits
Author SHA1 Message Date
Evan Hu 98ae51444f fix: format agents/ops/agent.toml to satisfy taplo check 2026-04-27 08:54:49 +09:00
Evan d4f15fd662 feat: add web_search capability to all agents and hands (#74)
Adds the web_search tool to every agent.toml and hand HAND.toml that did
not already declare it. Without this capability the runtime gates the
tool with 'Capability denied: tool not in allowed list', leaving agents
unable to perform web searches even when a search provider is
configured.

For tools arrays that already contained web_fetch, web_search is
inserted directly after it (its natural companion). For arrays without
web_fetch, web_search is appended to the end.

24 files updated total: 21 agents and 3 hands.
2026-04-25 23:07:24 +09:00
Evan 7398983350 fix: use 127.0.0.1 instead of localhost for local provider base URLs (#73)
On dual-stack hosts (notably macOS), `localhost` resolves to both ::1
and 127.0.0.1 with IPv6 tried first. Local LLM servers (Ollama, vLLM,
LM Studio) installed via the standard scripts bind IPv4 only, so the
IPv6 connection attempt fails immediately and Happy Eyeballs fallback
to IPv4 isn't reliably triggered for connection-refused errors,
producing spurious "Configured local provider offline" warnings in
the daemon even when the server is up and reachable via curl.

Companion to librefang/librefang#3112 which fixes the hardcoded URL
constants in the main repo. After both land, existing installs pick
up the fix on their next registry sync.
2026-04-25 18:58:59 +09:00
github-actions[bot] 2097fc05bc chore: sync model pricing from OpenRouter API 2026-04-25 07:26:35 +00:00
Evan 12d19943c5 feat(novita): add Novita AI provider with 6 popular models (#72)
OpenAI-compatible LLM gateway. Pairs with the librefang-llm-drivers
registration (librefang PR #3076) so Novita models surface in the
dashboard model picker without each user having to add them via
/api/models/custom.

Pricing and limits sourced from GET /openai/v1/models on 2026-04-25
(input_token_price_per_m / output_token_price_per_m, divided by 10000
to get USD per million tokens). Curated to a small popular subset:

- deepseek/deepseek-v3.2 (frontier)
- moonshotai/kimi-k2-thinking (frontier, supports_thinking)
- minimax/minimax-m2 (smart)
- meta-llama/llama-3.3-70b-instruct (smart)
- qwen/qwen3-coder-30b-a3b-instruct (balanced)
- zai-org/glm-4.7-flash (balanced)
2026-04-25 14:16:04 +09:00
Evan 5909b024c1 feat(openai): add GPT Image 2 (image-generation modality) (#71)
Introduces image-generation models as a first-class [[models]] entry via
a new `modality` field on the model schema ("text" default, "image",
"audio"). When modality != "text", context_window / max_output_tokens
are optional since no conventional context gate exists — OpenAI's
gpt-image-2 docs omit them.

Adds `image_input_cost_per_m` / `image_output_cost_per_m` alongside
existing text token cost fields to cover the 4-price structure OpenAI
uses for image generation (text $5/$10, image $8/$30 per 1M tokens).

Validator updated to:
- accept any modality in {text, image, audio}
- require context_window/max_output_tokens only for modality=text
- range-check the two new cost fields

gpt-image-2 entry added to providers/openai.toml with pricing sourced
from https://developers.openai.com/api/docs/pricing. Snapshot
gpt-image-2-2026-04-21 listed as alias.
2026-04-25 13:30:07 +09:00
Evan 65cb852632 feat(openai): add GPT-5.5 and GPT-5.5 Pro (#70)
Source: https://openai.com/index/introducing-gpt-5-5/ (announcement 2026-04-23)

Adds 4 new model entries across 3 provider files:

- providers/openai.toml:
    gpt-5.5      — 1M context,  $5/$30 per 1M tokens (input/output)
    gpt-5.5-pro  — 1M context, $30/$180 per 1M tokens
- providers/codex-cli.toml:
    codex-cli/gpt-5.5  — 400K context (Codex subscription limit),
                         $0/$0 (covered by subscription)
- providers/chatgpt.toml:
    gpt-5.5-codex  — 400K context, session-auth (subscription)

Notes:
- API availability announced as 'very soon'; pricing confirmed in the
  announcement. tools/vision/streaming flags match GPT-5.4 family.
- max_output_tokens retained at 128000 (openai/codex-cli) and 65536
  (chatgpt) — matches sibling 5.4 entries; announcement does not
  specify a new output cap.
- Header comment in openai.toml updated (15 → 17 models).
2026-04-25 00:08:46 +09:00
github-actions[bot] b1ebaf6d34 chore: sync model pricing from OpenRouter API 2026-04-24 08:11:38 +00:00
Evan d43077afa9 fix(providers): remove ~anthropic, skip ~ prefixes in sync script (#69)
* fix(providers): remove ~anthropic, skip ~ prefixes in sync script

OpenRouter uses ~ prefixes for internal auto-routing aliases (e.g. ~anthropic).
These are not real providers — they already route through openrouter.toml.
The generated ~anthropic.toml was confusing (looked like a stale backup)
and redundant with the existing openrouter provider.

- Delete providers/~anthropic.toml
- Skip provider IDs starting with ~ in sync-pricing.py --create-missing

* fix(providers): remove morph, aider, kwaipilot

- morph: specialized code-editing/patching tool, not a general LLM provider
- aider: CLI meta-tool wrapper (base_url empty), redundant with claude-code/codex-cli/gemini-cli/qwen-code
- kwaipilot: Kwai internal coding assistant routed via OpenRouter, niche

* fix(sync): add morph/aider/kwaipilot to SKIP_PROVIDERS to prevent re-creation

* feat(sync): merge OpenRouter-only providers into openrouter.toml

Instead of generating standalone .toml files that just wrap the OpenRouter
endpoint, merge their models directly into openrouter.toml with the
standard 'openrouter/{provider}/{model}' ID convention.

- Add _build_model_fields() and _model_lines() helpers to deduplicate
  model rendering between standalone and merged paths
- Add merge_into_openrouter() that appends new models idempotently
- generate_provider_toml() now only runs for providers in PROVIDER_API
- --create-missing routes OpenRouter-only providers to merge_into_openrouter

* fix(providers): remove 14 OpenRouter-only standalone files

These providers have no direct public API and all route through
openrouter.ai/api/v1. Per the new sync-pricing.py policy, their models
will be merged into openrouter.toml on the next CI run instead of
living in separate files that just wrap the OpenRouter endpoint.

Removed: allenai, deepcogito, essentialai, inclusionai, inflection,
liquid, meituan, nex-agi, nousresearch, prime-intellect, relace,
switchpoint, tngtech, writer

* fix(providers): remove 7 niche providers with no driver support

No dedicated LLM driver code exists for these providers — they rely
purely on OpenAI-compatible passthrough with no special handling.
Removing them reduces registry noise; users can still reach them via
openrouter.toml if needed.

Removed: microsoft, ibm-granite, xiaomi, upstage, inception, aion-labs, arcee-ai

* fix(providers): remove ai21, chutes, venice

All three use ApiFormat::OpenAI with no special handling — pure passthrough.
No registry entry needed; users can reach them via openrouter.toml or by
adding a custom provider.

* docs(providers): rewrite README with full provider catalog and inclusion criteria

- List all 46 providers grouped by category with descriptions
- Document why each provider exists (direct API, unique endpoint, dedicated driver, local, CLI)
- Add inclusion criteria section explaining when to create standalone files vs merging into openrouter.toml
- Document sync script routing logic
- Update model counts: 49→46 providers, 339→232 models

* docs: add comprehensive READMEs for all registry sections + deepinfra provider

- agents/README.md: 32 agents across 7 categories with capability field reference
- channels/README.md: 44 channels across 5 categories with protocol reference table
- hands/README.md: 18 hands across 5 categories with HAND.toml format guide
- mcp/README.md: 33 MCP servers across 5 categories with transport/auth format
- plugins/README.md: 12 plugins with hook protocol documentation
- skills/README.md: 60 skills across 9 categories with SKILL.md format guide
- providers/deepinfra.toml: add DeepInfra serverless inference (5 models)
2026-04-24 00:02:33 +09:00
github-actions[bot] dbfb32d9d4 chore: sync model pricing from OpenRouter API 2026-04-22 08:03:48 +00:00
Evan 28ea31b073 chore(agents): drop GEMINI_API_KEY fallback from generic templates (#68)
These 11 templates are the general-purpose ones that don't depend on any
particular model at the primary level (`[model] provider = "default"`).
They also ship a secondary `[[fallback_models]]` block pointing at
`gemini-2.0-flash` with `api_key_env = "GEMINI_API_KEY"`.

That default hurts everyone who doesn't happen to have `$GEMINI_API_KEY`
set — every agent boot logs `WARN Fallback driver 'gemini' failed to
init: Missing API key`, once per turn per agent. The templates that
actually intend to use Gemini as their primary model (analyst, coder,
researcher, code-reviewer, debugger, legal-assistant, data-scientist,
academic-researcher, test-engineer) are left untouched — those
declare Gemini in `[model]`, which is an intentional design choice, not
a hidden fallback.

Users who want a Gemini fallback chain for generic agents can add
`[[fallback_models]]` themselves in `~/.librefang/workspaces/agents/...`
once they've set `$GEMINI_API_KEY`.

Removed from:
  assistant, customer-support, devops-lead, doc-writer, email-assistant,
  meeting-assistant, planner, recruiter, sales-assistant, social-media,
  writer
2026-04-21 20:10:09 +09:00
github-actions[bot] 1ecca29fee chore: sync model pricing from OpenRouter API 2026-04-21 08:00:48 +00:00
Evan 80c6ee79cd feat(anthropic): add Claude Opus 4.7 and fix Opus 4.6 context window (#66)
Add `claude-opus-4-7`, Anthropic's current flagship model (per
https://platform.claude.com/docs/en/docs/about-claude/models/overview).

- Context window: 1,000,000 tokens (Opus 4.7 ships with a new tokenizer)
- Max output: 128,000 tokens
- Pricing: $5 / input MTok, $25 / output MTok (unchanged from 4.6)
- Tier: frontier
- Supports tools, vision, streaming, and adaptive thinking

Move the `opus` / `claude-opus` aliases from 4.6 to 4.7 so a user asking
for "opus" gets the current flagship. Opus 4.6 is now in Anthropic's
"Legacy" section of the models overview; keeping it in the registry
entry (for existing callers that pin the exact ID) but without the
generic aliases.

Also **correct Opus 4.6's `context_window`**: it was listed as 200,000
tokens but the official model page has shown 1M tokens since release.
That was a pre-existing bug this PR fixes in passing since it directly
affects anyone who'd have routed queries to 4.6 expecting 1M.

Add a header comment pinning the source URL and explaining the
"latest-first" ordering convention so future additions don't silently
rebind aliases to a previous-generation snapshot.
2026-04-20 14:15:45 +09:00
Evan 396c88dc49 feat(openai): add GPT-5.4 and GPT-5.4-mini (#67)
Add the two GPT-5.4 variants exposed by OpenAI's API (source:
https://developers.openai.com/api/docs/models/gpt-5.4 and
https://developers.openai.com/api/docs/models/gpt-5.4-mini):

- **gpt-5.4** — frontier tier, 1,050,000 context window, 128k max output,
  $2.50 / input MTok, $15.00 / output MTok.
- **gpt-5.4-mini** — balanced tier (matching the naming convention used
  by `gpt-5-mini`, `gpt-4.1-mini`, etc.), 400,000 context window,
  128k max output, $0.75 / input MTok, $4.50 / output MTok.

Ordered right after the GPT-5.2 family and before the Codex variants
section to keep the frontier-GPT chain in release order.

Addresses librefang/librefang-registry#65 — the original request filed
these under the `codex-cli` provider, but Codex CLI's upstream
`models.json` doesn't list `gpt-5.4-mini` (only the full `gpt-5.4`
slug is list-visible there, and it's already tracked in
`providers/codex-cli.toml`). The correct home for OpenAI-API-direct
access is this file; users who want `gpt-5.4-mini` should configure
`provider = "openai"` rather than `provider = "codex-cli"`.
2026-04-20 14:15:20 +09:00
github-actions[bot] dc23636656 chore: sync model pricing from OpenRouter API 2026-04-19 07:25:57 +00:00
github-actions[bot] e859083cac chore: sync model pricing from OpenRouter API 2026-04-18 07:15:25 +00:00
Evan 38899238d7 chore: rename integrations/ directory to mcp/ (#64) 2026-04-17 23:38:44 +09:00
Evan 7881d327a5 refactor: migrate icon fields from emoji to lucide:<name> tokens (#63)
* refactor: migrate icon fields from emoji to lucide:<name> tokens

Every TOML manifest's `icon = "<emoji>"` line is replaced with
`icon = "lucide:<kebab-name>"` — a reference to a lucide-react icon,
which the librefang.ai site and dashboard render as crisp SVG. Reasons
for the switch:

- Emoji render very differently across OS/browser/font stacks; the
  registry catalog looked inconsistent from one row to the next.
- Five manifests (clip / creator / linkedin / reddit / twitter) had
  their icons stored as literal Python-style escape strings
  ("\\U0001F3AC") because the TOML parser upstream never decoded
  them. Switching away from emoji drops that class of bug entirely.
- As a drive-by, also decode the \\uXXXX accent escapes in the
  [i18n.fr] block of hands/creator/HAND.toml so "Créateur" shows
  up correctly.

87 files touched. example manifests left untouched (still "TODO").

* fix: backfill i18n name + drop the single-member email category

- Every existing [i18n.<lang>] block now has a `name` field. 60 files
  previously translated description but kept the English name
  implicitly — which rendered as "some English some Chinese" in the
  registry UI. Fill in the missing name from the English brand (or a
  known localized equivalent: DingTalk→钉钉, Feishu→飞书, Email→
  电子邮件 / メール / E-Mail / Correo / Courriel, and a handful of
  hands that have Chinese product names like 视频剪辑 Hand).
- channels/email.toml was the only item under category="email";
  reclassify it as "messaging" so the sub-category filter chip list
  on the category page isn't littered with singletons.

* feat(i18n): localize 76 agents/integrations/plugins into 7 languages

Adds full [i18n.zh], [i18n.zh-TW], [i18n.ja], [i18n.ko], [i18n.de],
[i18n.es], [i18n.fr] blocks with name + description to every manifest
that previously shipped English-only.

Coverage:
- 32 agents (academic-researcher, analyst, architect, assistant,
  code-reviewer, coder, customer-support, data-scientist, debugger,
  devops-lead, doc-writer, email-assistant, health-tracker,
  hello-world, home-automation, legal-assistant, meeting-assistant,
  ops, orchestrator, personal-finance, planner, recipe-assistant,
  recruiter, researcher, sales-assistant, security-auditor,
  social-media, test-engineer, translator, travel-planner, tutor,
  writer)
- 33 integrations (AWS, Azure, Bitbucket, Brave Search, Discord,
  Dropbox, Elasticsearch, Exa Search, Fetch, Filesystem, GCP, Git,
  GitHub, GitLab, Gmail, Google Calendar, Google Drive, Google Maps,
  Jira, Linear, Memory, MongoDB, Notion, PostgreSQL, Puppeteer, Redis,
  Sentry, Sequential Thinking, Slack, SQLite, Teams, Time, Todoist) —
  brand names kept as-is across all locales, only descriptions
  translated.
- 11 plugins (auto-summarizer, context-decay, conversation-logger,
  episodic-memory, guardrails, keyword-memory, mempalace-indexer,
  sentiment-tracker, todo-tracker, topic-memory, user-profile)

The descriptions are one-line summaries — hand-translated rather than
machine-generated, so technical terms (MCP, PR, CI/CD, etc.) stay
consistent across locales.

* feat(i18n): close remaining per-lang gaps for channels, workflows, devteam

Third pass on i18n coverage. Every non-example manifest now carries a
full set of [i18n.zh], [i18n.zh-TW], [i18n.ja], [i18n.ko], [i18n.de],
[i18n.es], [i18n.fr] blocks.

- 44 channel adapters: added French descriptions (zh/zh-TW/ja/ko/de/es
  were already present). Brand names kept as-is in all locales so users
  recognize Discord / Slack / LINE / etc. consistently.
- 22 workflows: filled zh-TW / ja / ko / de / es / fr blocks. Each
  translation mirrors the existing zh one in structure and tone so the
  catalog reads consistently across locales.
- hands/devteam/HAND.toml: added the four langs that were missing
  (zh-TW, de, es, fr).

Only the 6 templates under examples/ are left without i18n blocks on
purpose — they still contain "TODO:" placeholders.
2026-04-17 22:04:26 +09:00
github-actions[bot] 9f740e4843 chore: sync model pricing from OpenRouter API 2026-04-17 07:56:38 +00:00
github-actions[bot] 6d44be4277 chore: sync model pricing from OpenRouter API 2026-04-16 07:55:20 +00:00
Evan c439b1bb00 fix(integrations): use npx directly instead of sh -c wrapper (#61)
The librefang MCP security check blocks shell interpreters (sh, bash)
as commands. Use `command = "npx"` with `$HOME` in args — the runtime
now expands env vars in args natively.
2026-04-16 13:03:27 +09:00
Evan fb09c1b895 feat(integrations): add 8 missing mainstream MCP server templates (#59)
* feat(integrations): add filesystem, fetch, memory, puppeteer, sequential-thinking, git, google-maps, time

* chore(integrations): fix taplo formatting for filesystem and puppeteer
2026-04-16 09:48:21 +09:00
Evan 4f8dd2404d feat(providers): expand ollama catalog with thinking-capable models (#58)
* feat(providers): expand ollama model catalog with thinking-capable models

Add commonly used local models with accurate capability flags:
- gemma4, gemma3: supports_thinking, supports_vision
- deepseek-r1: supports_thinking (fix missing flag)
- deepseek-v3: supports_tools
- qwen3, qwq: supports_thinking
- llama4: supports_vision
- llama3.3: supports_tools
- phi4: supports_tools

Previously only 6 models were listed and none had supports_thinking
(except deepseek-r1), causing the dashboard to hide thinking toggles
for models that actually support it.

* chore(providers): major cleanup — remove defunct providers and old models

Delete 21 defunct/obscure providers:
aion-labs, arcee-ai, deepcogito, eleutherai, essentialai, ibm-granite,
inception, inflection, kwaipilot, lemonade, liquid, morph, nex-agi,
nousresearch, prime-intellect, reka, relace, switchpoint, tngtech,
upstage, writer

Clean up 10 major providers — keep only latest generation models:
- anthropic: remove claude-3.5-sonnet (superseded by 4.x)
- openai: remove gpt-4o/4-turbo/3.5/o1/o3-mini (superseded by gpt-5/4.1/o3/o4-mini)
- gemini: remove 1.5-*/2.0-flash (superseded by 2.5/3.x)
- deepseek: remove coder/chat-v3-0324 (superseded by r1/v3)
- qwen: remove turbo/2.5-coder (superseded by qwen3)
- groq: remove old llama/mixtral/gemma (keep latest only)
- mistral: remove medium/nemo/pixtral-large (keep large/small/codestral)
- xai: remove grok-2 (superseded by grok-3/4)
- meta-llama: remove 3.x/guard (keep llama-4 + 3.3)
- ollama: rewrite with current models (gemma4, qwen3, qwq, llama4, etc)

Total: 90 → 48 models across major providers. All thinking-capable
models now have supports_thinking = true.

* chore: add pre-commit hook for automatic TOML formatting

- .githooks/pre-commit: runs taplo fmt on staged .toml files
- Makefile: add setup target + auto-configure hooks on first make
- .gitignore: add .make-setup-done and .sync_marker
2026-04-15 22:18:01 +09:00
github-actions[bot] 4979c355b2 chore: sync model pricing from OpenRouter API 2026-04-15 07:55:35 +00:00
Evan 6439fb193c fix: add api_key field to provider schema for inline key setup (#57)
The provider creation form only collected api_key_env (the env var
name) but not the actual key value. New providers were always created
as "unconfigured" because no key was stored.

Add an optional secret api_key field so the dashboard can pass the
key value during creation. The backend strips it from the TOML and
saves it to secrets.env instead.
2026-04-15 12:49:38 +09:00
Adrian Rogala 3d1bfb4240 fix(wiki-hand): restore missing [agents.analyst] section header (#56) 2026-04-15 11:02:09 +09:00
Evan 6ab7002a2a fix(hands): use valid token_consumption enum value for wiki hand (#55) 2026-04-15 01:46:09 +09:00
Evan 85db9c8d78 feat(providers): add supports_thinking to thinking-capable models (#53)
* feat(providers): add supports_thinking field to thinking-capable models

Mark models that support extended thinking / reasoning with
supports_thinking = true so the dashboard can conditionally show
thinking toggles.

Providers updated: anthropic (8), codex-cli (7), gemini (6),
openai (3), qwen (2), deepseek (1). Schema updated accordingly.

* feat(providers): add supports_thinking to remaining thinking-capable models

Cover 19 additional providers: alibaba-coding-plan, allenai, arcee-ai,
fireworks, gemini-cli, groq, liquid, nvidia-nim, ollama, openai (codex),
openrouter, perplexity, qwen-code, replicate, sambanova, tngtech,
venice, vertex-ai, xai.

Total: 62 models across 24 providers now have supports_thinking = true.

* feat(providers): add supports_thinking to chutes, huggingface, together

Missed in prior commits: DeepSeek-R1 on chutes/huggingface/together,
Qwen3-235B on chutes. Total now 66 models across 27 providers.

* feat(providers): add supports_thinking to bedrock, claude-code, aider, moonshot, stepfun

- bedrock: all 5 Claude models
- claude-code: all 3 models (opus/sonnet/haiku wrappers)
- aider: aider/sonnet (Claude-backed)
- moonshot: kimi-k2.5 (reasoning mode)
- stepfun: step-1o-turbo-vision (reasoning model)

Total: 77 models across 32 providers.

* feat(providers): add supports_thinking to alibaba kimi-k2.5, openrouter claude-sonnet-4
2026-04-15 00:46:51 +09:00
Evan 300e3569fe chore: reorganize examples and templates into examples/ by type (#54)
- Move example skills to examples/skills/
- Move scaffolding templates to examples/{agents,hands,channels,plugins,providers,integrations,skills}/
- Remove legacy skill.toml from example skills; SKILL.md is the canonical format
- Delete top-level templates/ directory
2026-04-15 00:41:24 +09:00
Evan 2f4f94b45b fix(codex-cli): refresh model list to match upstream (#2347) (#50)
The prior entries (o4-mini, o3, gpt-4.1) no longer appear in
upstream openai/codex's codex-rs/models-manager/models.json and the
Codex CLI actively migrates users away from the old gpt-5 /
gpt-5-codex slugs via tui/src/model_migration.rs.

Replace with the currently-visible ("visibility": "list") slugs:

- gpt-5.4
- gpt-5.3-codex
- gpt-5.2
- gpt-5.2-codex
- gpt-5.1-codex-max
- gpt-5.1-codex-mini

All six share a 272k context window per upstream models.json.
Marking supports_tools / supports_vision / supports_streaming = true
to match the gpt-5-family capability envelope.

Closes librefang/librefang#2347
2026-04-14 19:40:56 +09:00
Adrian Rogala 6f447bf4c4 feat: add qwen3.6-plus model from alibaba coding plan (#48)
Add qwen3.6-plus model addition in Alibaba Coding Plan
2026-04-13 15:55:06 +02:00
Joshua Chong 49019d4c42 add qwen3.6-plus from coding plan 2026-04-13 20:07:54 +08:00
github-actions[bot] 07772c22ea chore: sync model pricing from OpenRouter API 2026-04-11 07:06:23 +00:00
Evan 2468e87968 fix(openrouter): use :free variant for qwen3.6-plus default (#46) 2026-04-10 22:12:30 +08:00
Adrian Rogala f9c7456900 feat(hands): add wiki hand for LLM-maintained knowledge bases (#44)
Squashed replay of the original 9-commit branch onto current main.  The
original branch was 30+ commits behind, forked from before the skills
refactor (PR #42) and workflow template expansion (PR #36), so a
standard rebase hit heavy add/add conflicts on workflows/*.toml that
are unrelated to the wiki hand.

This replay keeps only the final hands/wiki/ tree state, which is the
actual intent of the PR (the author iterated several times on the same
files; squashing matches that).

Implements the "LLM Wiki" pattern (Andrej Karpathy) for building a
personal, Obsidian-compatible knowledge base.  Instead of on-the-fly
RAG, the wiki hand incrementally maintains a Markdown vault:

  hands/wiki/
  ├── HAND.toml           # hand manifest + [agents.*] sections
  ├── README.md           # user-facing docs
  ├── SKILL-main.md       # Librarian (coordinator) routing + FS ops
  ├── SKILL-ingestor.md   # Source extraction + [[wikilink]] writing
  ├── SKILL-analyst.md    # Synthesis with provenance citations
  └── SKILL-linter.md     # Broken link / orphan / contradiction audit

Closes librefang/librefang-registry#44 (via replay, not merge).
2026-04-10 22:04:18 +08:00
Evan 8d3b49192d feat(plugins): add mempalace-indexer — local semantic memory for agents (#43) 2026-04-10 21:48:08 +08:00
Evan 919ac1acdf fix(openrouter): replace delisted models and set qwen3.6-plus as default (#45) 2026-04-10 21:26:06 +08:00
Evan HuandClaude Opus 4.6 6c0faf06ef refactor(skills): make SKILL.md the required entry point
Standardize on Claude Code's SKILL.md format as every skill's source of
truth. skill.toml becomes an optional metadata layer for runtime, input
schema, and versioning — never for the prompt body.

- validate.py: require SKILL.md in every skill dir; when skill.toml also
  exists, cross-check name/description consistency to prevent drift
- Add SKILL.md to the two custom-skill examples
- Move the meeting-agenda prompt body out of skill.toml into SKILL.md
- Rewrite skills/README.md to document the md-first, toml-as-metadata convention

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 20:23:06 +09:00
Evan HuandClaude Opus 4.6 adf2323330 fix(validate): accept SKILL.md as skill definition
Claude Code-style skills use SKILL.md with YAML frontmatter instead of
skill.toml. Validator now accepts either form, unblocking the 60 bundled
skills restored in #42.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 20:18:37 +09:00
Evan Hu fc650e4ed3 fix(hands): resolve routing alias conflict between devteam and coder 2026-04-10 12:50:39 +09:00
Evan 2b8259a0c0 feat(hands): add devteam hand (#41)
* feat(hands): add devteam hand -- autonomous software development team

Multi-agent hand with 7 roles (PM, Architect, Frontend, Backend, DevOps, QA, Designer)
and 3 team size tiers (simple/standard/full) for different project scales.

PM coordinator auto-scans GitHub issues, triages, assigns tasks to specialists,
and tracks progress on an in-memory project board.

* refactor(hands): slim devteam to 3 agents (PM + Engineer + QA)

7 agents with serial agent_send = massive token waste and info loss at every
handoff. Merge architect/frontend/backend/devops into one Engineer with full
context. Keep QA separate for independent verification. Drop designer.

Tiers: lite (PM + Engineer) and standard (PM + Engineer + QA).

* fix(hands/devteam): fix workspace isolation and git workflow gaps

- PM uses GitHub API for code browsing, no repo clone needed
- Engineer explicitly clones repo, branches, commits, pushes, creates PR
- QA explicitly clones repo, checks out branch under review
- PM tracks last_scan timestamp to filter already-triaged issues
- approval_mode now means PR stays open for review, not skip commit

* fix(hands/devteam): use shared repo checkout instead of per-agent clones

All 3 agents share one checkout at ../shared/repo/. Engineer clones it
on the first task; PM and QA read from the same path. Eliminates
duplicate clones and cross-workspace visibility issues.

* fix(hands/devteam): read issue comments before triaging

Comments contain clarifications, reproduction steps, duplicate markers,
and resolution status. Also skip already-assigned and wontfix issues.

* fix(hands/devteam): fix interactive git add, add merge/close APIs, add fix iteration flow

- Replace git add -p (interactive) with git add <specific files>
- PM prompt now has explicit merge PR and close issue API calls
- Engineer has explicit fix-request handling (same branch, push, no new PR)

* feat(hands/devteam): add full GitHub interaction -- PR review, issue comments, labels

PM:
- Labels issues during triage, comments triage status
- Scans open PRs for external review requests
- Comments on issues linking merged PRs

Engineer:
- Replies to review comments on PR after fixing
- Reviews external PRs with APPROVE/REQUEST_CHANGES + line comments

QA:
- Leaves PR review (APPROVE or REQUEST_CHANGES with line comments)
- All findings visible on GitHub, not just via agent_send

SKILL.md:
- Added PR diff, reviews, review comments, reply, merge API references

* fix(hands/devteam): enforce English comments, line-level reviews, comment-before-close

- All GitHub comments/reviews must be in English (added global rule)
- PR reviews must use comments[] with path+line, not body-only
- Comment on issue with resolution details BEFORE closing/merging
- Improved comment templates with structured info

* fix(hands/devteam): 8 logic fixes from end-to-end workflow review

1. Filter PRs from Issues API (pull_request key)
2. PM sends PR number to QA for review
3. Deduplicate PR scanning via devteam_reviewed_prs
4. QA reports test gaps instead of pushing code to shared branch
5. branch_strategy wired into Engineer (gitflow branches from develop)
6. approval_mode: ON = wait for human, OFF = auto-merge after QA
7. scan_interval mapped to schedule_create every_secs
8. git checkout -B instead of -b to handle existing branches

* fix(hands/devteam): second-pass review — 6 more logic fixes

1. Engineer extracts PR number from create-PR API response
2. PM falls back to GitHub Contents API when shared repo not yet cloned
3. QA gets external PR review flow (was only on Engineer)
4. PM checks CI status + mergeable before merging
5. PM handles merge conflict (409) by sending back to Engineer to rebase
6. i18n approval_mode description synced with actual semantics

* fix(hands/devteam): third-pass — runtime scenarios

1. Deduplicate cron schedule on daemon restart (check schedule_list first)
2. Max 3 review rounds before escalating to user (prevent infinite loop)
3. Clean working directory before switching tasks (git checkout -- . && git clean)
4. Add user direct commands (work on #42, status, review PR #50)
5. Pass tech_stack to Engineer in task delegation
6. Fix duplicate step numbering in Review Cycle

* fix(hands/devteam): fourth-pass — state consistency and edge cases

1. QA force-syncs to remote branch (git checkout -B origin/branch) for force-push safety
2. Board sync step: reconcile with GitHub each scan cycle (catch external closes/merges)
3. Prune devteam_reviewed_prs of closed PRs, cap done list at 30
4. PM checks CI before sending to QA (don't waste QA on red builds)
5. Stop/cancel command: remove from board, comment on issue
6. Explicit rebase commands for Engineer (fetch + rebase + force-with-lease)

* fix(hands/devteam): fifth-pass — crash prevention

1. Guard empty repo_url: stop and tell user to configure it
2. Add python3 to requires (all JSON parsing depends on it)
3. Engineer git config user.name/email on first clone (prevents commit rejection)
4. Explicit build/lint/test commands per tech stack (Rust/TS/Python/Go/Java/Swift)
5. event_publish on task completion so user gets notified
6. Global rule: check API HTTP status before parsing JSON

* feat(hands/devteam): add gh CLI / MCP / curl API three-layer fallback

- Add GitHub MCP integration (mcp_servers = ["github"])
- Add gh CLI as optional requirement (preferred over curl)
- All 3 agents: gh > MCP > curl priority for GitHub operations
- Add issue_tracker setting (github/linear/jira)
- Add agent_list to shared tools
- SKILL.md: add full gh CLI reference section
- i18n: add issue_tracker translation

* feat(hands/devteam): full MCP/integration/notification layer

MCP allowlist: github, linear, jira, sentry, slack, discord
- Sentry: Engineer reads crash reports/stack traces when fixing bugs
- Slack/Discord: PM posts status updates (triaged, completed, QA results)
- Linear/Jira: alternative issue trackers

New settings: notify_channel (none/slack/discord), issue_tracker (github/linear/jira)
New optional requires: npx (MCP runtime), SENTRY_AUTH_TOKEN

PM prompt: notification section, channel-aware status posting
Engineer prompt: Sentry context lookup for bug fixes
i18n: added translations for new settings

* feat(hands/devteam): workflows, onboarding, knowledge, standup, rollback

Workflows (8 integrated):
- PM: bug-triage, product-spec, weekly-report, incident-postmortem
- Engineer: code-review, test-generation, refactor-plan, api-design
- QA: code-review, test-generation

New capabilities:
- Repo onboarding: first activation analyzes repo structure/stack/CI
- Knowledge accumulation: store lessons per issue, detect module hotspots
- Daily standup: cron schedule, board summary via notify_channel
- Rollback: gh pr revert + postmortem workflow + re-open issue

Also:
- Added workflow_run to tools, skills = [] (all allowed)
- Rewrote README with full architecture, lifecycle, workflow table
- PM prompt now has 15 sections covering full lifecycle

* feat(hands/devteam): per-agent capabilities, resources, profiles, fallbacks

Each agent now has full AgentManifest config (not just system_prompt):

PM:
- profile: automation
- capabilities: web, memory, schedule, knowledge, event, workflow, agent_send
- shell: gh, curl, cat, python3
- resources: 200k tokens/hr

Engineer:
- profile: coding
- capabilities: file r/w, shell, web, memory, knowledge, workflow
- shell: cargo, npm, python, go, swift, mvn, git, gh, docker, make
- resources: 300k tokens/hr, 10 concurrent tools
- network: * (needs to push to GitHub)

QA:
- profile: coding (read-heavy, no file_write)
- capabilities: file read, shell (test/lint commands only), web, workflow
- shell: cargo test/clippy/audit, npm test, pytest, go test, gh
- resources: 150k tokens/hr

All agents have fallback_models configured.

* feat(hands/devteam): rewrite with proper resource composition

First hand to use the new composition features:

Agents:
- PM: base=planner, capabilities restricted to gh/git shell only
- Engineer: base=coder, full shell access, network=*
- QA: base=code-reviewer, tool_blocklist=[file_write], test/lint shells only

Composition:
- base: inherit from agents/planner, agents/coder, agents/code-reviewer
- mcp_servers: github (agents interact via MCP, not curl in prompts)
- workflows: bug-triage, code-review, test-generation via workflow_run tool
- plugins: todo-tracker, auto-summarizer, episodic-memory
- per-agent skills: SKILL-pm.md, SKILL-engineer.md, SKILL-qa.md
- per-agent capabilities: QA can't write files, PM can't run builds

Prompts are clean and focused (role + methodology + principles),
not stuffed with curl commands. GitHub interaction goes through
MCP tools or gh CLI.

* fix(devteam): complete planner methodology in PM prompt

Added SCOPE/SEQUENCE/RISK/MILESTONE keywords from the planner
base template's methodology into the PM's triage workflow.

* docs: update hands README, fix repo_url reference in prompts

- hands/README.md: document full composition model (base, MCP, workflows,
  plugins, per-agent skills, per-agent capabilities)
- Updated hand count to 15 (added devteam)
- Engineer prompt: clarify repo_url comes from User Configuration, not
  a template variable
- PM prompt: same clarification

* fix(devteam): override name/description from base templates

Without explicit name, agents inherit base names (planner/coder/code-reviewer)
instead of hand-specific names (pm/engineer/qa). This affects display and
the prefixed name used in agent registry (devteam:pm vs devteam:planner).

* style: format HAND.toml with taplo
2026-04-10 10:24:26 +08:00
Evan b567db71ba feat(skills): restore 60 bundled skills (#42)
* feat(skills): restore ansible skill

* feat(skills): restore api-tester skill

* feat(skills): restore aws skill

* feat(skills): restore azure skill

* feat(skills): restore ci-cd skill

* feat(skills): restore code-reviewer skill

* feat(skills): restore compliance skill

* feat(skills): restore confluence skill

* feat(skills): restore crypto-expert skill

* feat(skills): restore css-expert skill

* feat(skills): restore data-analyst skill

* feat(skills): restore data-pipeline skill

* feat(skills): restore docker skill

* feat(skills): restore elasticsearch skill

* feat(skills): restore email-writer skill

* feat(skills): restore figma-expert skill

* feat(skills): restore gcp skill

* feat(skills): restore git-expert skill

* feat(skills): restore github skill

* feat(skills): restore golang-expert skill

* feat(skills): restore graphql-expert skill

* feat(skills): restore helm skill

* feat(skills): restore interview-prep skill

* feat(skills): restore jira skill

* feat(skills): restore kubernetes skill

* feat(skills): restore linear-tools skill

* feat(skills): restore linux-networking skill

* feat(skills): restore llm-finetuning skill

* feat(skills): restore ml-engineer skill

* feat(skills): restore mongodb skill

* feat(skills): restore nextjs-expert skill

* feat(skills): restore nginx skill

* feat(skills): restore notion skill

* feat(skills): restore oauth-expert skill

* feat(skills): restore openapi-expert skill

* feat(skills): restore pdf-reader skill

* feat(skills): restore postgres-expert skill

* feat(skills): restore presentation skill

* feat(skills): restore project-manager skill

* feat(skills): restore prometheus skill

* feat(skills): restore prompt-engineer skill

* feat(skills): restore python-expert skill

* feat(skills): restore react-expert skill

* feat(skills): restore redis-expert skill

* feat(skills): restore regex-expert skill

* feat(skills): restore rust-expert skill

* feat(skills): restore security-audit skill

* feat(skills): restore sentry skill

* feat(skills): restore shell-scripting skill

* feat(skills): restore slack-tools skill

* feat(skills): restore sql-analyst skill

* feat(skills): restore sqlite-expert skill

* feat(skills): restore sysadmin skill

* feat(skills): restore technical-writer skill

* feat(skills): restore terraform skill

* feat(skills): restore typescript-expert skill

* feat(skills): restore vector-db skill

* feat(skills): restore wasm-expert skill

* feat(skills): restore web-search skill

* feat(skills): restore writing-coach skill
2026-04-08 15:18:53 +08:00
github-actions[bot] 3b5bde3486 chore: sync model pricing from OpenRouter API 2026-04-03 07:16:43 +00:00
Evan 5967c09c1b fix: correct morph API base_url to api.morphllm.com (#40) 2026-04-02 23:59:19 +08:00
Evan c192f493b4 fix: route providers through correct APIs (#39)
Providers with known public APIs use their official endpoints:
- meta-llama → api.llama.com/v1
- microsoft → models.inference.ai.azure.com (GitHub Models)
- ibm-granite → us-south.ml.cloud.ibm.com/ml/v1 (watsonx)
- tencent → api.hunyuan.cloud.tencent.com/v1
- morph → api.morphllm.com/v1

16 remaining providers without known public APIs route through
OpenRouter (base_url = openrouter.ai/api/v1, OPENROUTER_API_KEY).

sync-pricing.py updated with PROVIDER_API mapping.
2026-04-02 23:55:42 +08:00
Evan aa5822992a fix: route OpenRouter-only providers through OpenRouter API (#38)
Providers without their own public API now use OpenRouter as their
base_url with OPENROUTER_API_KEY, making them testable and usable
when the user has an OpenRouter key configured.

- 20 OpenRouter-only providers: set base_url to openrouter.ai/api/v1
- morph: set correct official API (api.morphllm.com/v1)
- sync-pricing.py: default to OpenRouter routing for new providers
2026-04-02 23:41:25 +08:00
Evan 2fa48bfdcb fix: clean up OpenRouter-generated provider configs (#37)
- Merge unique models from duplicate providers into their hand-written
  counterparts and remove the duplicates:
  - alibaba (tongyi-deepresearch) → qwen
  - amazon (nova-2-lite, nova-micro, nova-premier) → bedrock
  - bytedance (ui-tars) → volcengine
  - nvidia (nemotron-3-nano, nemotron-3-super, etc.) → nvidia-nim
  - rekaai (reka-flash-3) → reka
- Set correct official API base_url for providers with public APIs:
  arcee-ai, inception, morph, reka, upstage
- Set key_required=false for 20 providers only accessible through
  hosting platforms (no public API)
- Update sync-pricing.py with SKIP_DUPLICATES, PROVIDER_API mapping,
  and default key_required=false for future auto-generated providers
2026-04-02 23:30:56 +08:00
github-actions[bot] 8104d86caa chore: sync model pricing from OpenRouter API 2026-04-02 07:20:15 +00:00
Evan 05bdf02169 feat(workflows): expand template library from 9 to 22 + multiline string cleanup (#36)
* feat(workflows): add 13 workflow templates across engineering, business, and productivity

Engineering:
- bug-triage: reproduce path → root cause → fix plan
- api-design: resource model → endpoints → OpenAPI spec
- incident-postmortem: timeline → RCA → full postmortem report
- test-generation: code analysis → edge cases → full test suite
- refactor-plan: smell analysis → prioritised opportunities → migration plan

Business:
- competitor-analysis: profiles → SWOT → strategy report
- product-spec: problem definition → user stories → full PRD
- market-research: landscape → segments → research report

Productivity/Thinking:
- meeting-summary: raw notes → structured summary → follow-up email
- decision-matrix: criteria → weighted scoring → recommendation memo
- learning-plan: gap analysis → roadmap → week-1 day-by-day plan
- job-application: job analysis → tailored resume → cover letter → interview prep
- blog-post: research → outline → draft → SEO optimisation

Closes #1912 on librefang/librefang

* fix(workflows): overhaul existing 9 templates

- data-pipeline: redesigned — original 'extract from URL' step was
  broken (LLMs cannot fetch URLs); replaced with paste-data approach
  (profile → clean_transform → analyse) with analysis_goal parameter
- translate-polish: added target_language and register parameters;
  added back-translation step for accuracy verification
- weekly-report: added team/audience parameters, richer extraction
  step, added Metrics and Notes sections
- content-pipeline: added audience/tone parameters, added outline step
  between research and writing
- content-review: fix category 'content' → 'creation'
- customer-support: fix category 'support' → 'business'

* style(workflows): convert all prompt_template strings to TOML multiline syntax

Replace \n escape sequences with real newlines using triple-quote
multiline strings ("""...""") across all 22 workflow templates.
No content changes — formatting only.

* style(hands): replace \n escape in reddit writer format example with multiline code block
2026-04-01 18:21:09 +08:00
Evan ae5d97dc7e feat: convert schema.toml to machine-parseable format (#30)
* feat: convert schema.toml to machine-parseable format

Replace comment-based documentation format with structured TOML that
can be deserialized into the RegistrySchema Rust type. All 6 content
types (provider, agent, hand, integration, skill, plugin) preserved
with every field, description, enum option, and nested section.

* fix: format options arrays in schema.toml for taplo compliance
2026-04-01 00:15:10 +08:00