mirror of
https://github.com/multica-ai/multica.git
synced 2026-08-02 01:45:52 +02:00
Server-side foundation for Phase 1 of the quick-create roadmap (see
docs/agent-quick-create-plan.md). Adds:
- server/internal/agenttmpl/ — embed-loaded catalog of curated agent
templates. Each template ships pre-written instructions plus a list
of skill URLs that get materialised into the workspace at create
time. Validation runs at startup (init() panics on a malformed
template) so a bad JSON ships as a deploy-time defect, not a
runtime 500. Slug must equal the filename basename so the URL
router is mirror-symmetric with the file layout.
- 11 starter templates covering Engineering / Writing / Building /
Testing (code-reviewer, frontend-builder, planner, docs-writer,
one-pager, html-slides, full-stack-engineer, …).
- Three new endpoints, all behind RequireWorkspaceMember:
GET /api/agent-templates — picker list (no instructions)
GET /api/agent-templates/:slug — detail with instructions
POST /api/agents/from-template — materialise + create
Create flow:
1. Auth + runtime authorization happen BEFORE the GitHub fan-out
so a 403 never wastes 20s of upstream fetches.
2. Pre-flight dedupe by cached_name reuses workspace skills
without an HTTP fetch — second create-from-the-same-template
drops from 20s to <100ms.
3. Parallel fetch (30s per-URL timeout) for the remaining skills.
4. Single transaction: every skill insert, the agent insert, and
the agent_skill bindings. On any upstream fetch failure the TX
rolls back and the API returns 422 with `failed_urls` so the
UI can name the bad source(s).
5. extra_skill_ids (user-supplied additions) are verified through
GetSkillInWorkspace per id before attach, so a malicious client
can't graft a skill from another workspace via UUID guessing.
- multica agent create --from-template <slug> CLI flag dispatches to
the new endpoint with a 60s ceiling, matching `multica skill import`.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
17 lines
1.3 KiB
JSON
17 lines
1.3 KiB
JSON
{
|
|
"slug": "webapp-tester",
|
|
"name": "Webapp Tester",
|
|
"description": "Writes meaningful E2E and integration tests that catch real regressions.",
|
|
"category": "Engineering",
|
|
"icon": "FlaskConical",
|
|
"accent": "primary",
|
|
"instructions": "You write web application tests. Defaults:\n\n1. Test behavior, not implementation. A test that breaks when the user-visible behavior is unchanged is a bad test.\n2. Read the attached `webapp-testing` skill before choosing an approach — the right tool (Playwright, MSW, Vitest) depends on what's being tested.\n3. Test the happy path, the obvious edge case, and the regression that prompted the test. Skip exhaustive enumeration of trivial variations.\n4. Use realistic fixtures: factor real-looking payloads into shared helpers, not 200-line inline mocks per test.\n5. Tests must be deterministic. Flaky tests are worse than no tests; fix the flake or delete the test.\n\nWhen writing a regression test, name the bug it's pinning down in the test description. Future readers should know why this test exists.",
|
|
"skills": [
|
|
{
|
|
"source_url": "https://github.com/anthropics/skills/tree/main/skills/webapp-testing",
|
|
"cached_name": "webapp-testing",
|
|
"cached_description": "Toolkit for testing local web applications with Playwright."
|
|
}
|
|
]
|
|
}
|