Commit Graph

3361 Commits

Author SHA1 Message Date
diegosouzapw
0e357a9cc7 merge(F6): integrate W3 frente F6 into base 2026-05-27 22:17:24 -03:00
diegosouzapw
95312401b6 merge(F5): integrate W3 frente F5 into base 2026-05-27 22:17:23 -03:00
diegosouzapw
1d44f5d35d merge(F4): integrate W3 frente F4 into base 2026-05-27 22:17:21 -03:00
diegosouzapw
8ed2c02808 merge(F3): integrate W3 frente F3 into base 2026-05-27 22:17:20 -03:00
diegosouzapw
4a97b419ae test(mcp): unit tests for agentSkillTools 2026-05-27 21:58:22 -03:00
diegosouzapw
a7a093d066 feat(mcp): register read:catalog scope + add tools to MCP_TOOLS array 2026-05-27 21:58:18 -03:00
diegosouzapw
d96e74bc15 feat(mcp): add agentSkillTools (list/get/coverage) for agent-skills discovery 2026-05-27 21:58:14 -03:00
diegosouzapw
d1d0ddda0f test(agent-skills): unit tests for generator + scripts smoke
20 tests covering:
- dry-run produces report without writing (filesystem unchanged)
- apply writes SKILL.md for API and CLI skills with correct sections
- apply writes all 42 skills when no filter
- idempotency: second run reports 0 generated, all unchanged
- prune dry-run detects orphans without deleting
- prune apply deletes orphan dirs, preserves catalog dirs
- marker preservation: custom block survives regeneration
- buildSkillMarkdown: valid shape, no escape errors, correct sections per category
- onlyIds filter limits generation
- report shape validation

Also adds gray-matter as dependency (per plan prerequisite check).
2026-05-27 21:55:01 -03:00
diegosouzapw
ca41880bb3 feat(agent-skills): add CLI wrapper scripts/skills/generate-agent-skills.mjs
Implements the CLI wrapper for the generator:
- --apply flag: enables write mode (default: dry-run)
- --prune flag: enables orphan detection/deletion
- --only=<id1,id2>: filters to specific skill IDs
- --json flag: structured JSON output
- Exit codes: 0 success, 1 error, 2 dry-run detected pending changes (CI)
- Human-readable table output with Generated/Unchanged/Pruned/Orphans/Errors summary
- Dynamic import via tsx/esm runtime; falls back to module.register() if needed
2026-05-27 21:54:50 -03:00
diegosouzapw
f86e905efb feat(agent-skills): add generator with idempotent skill md generation + prune
Implements src/lib/agentSkills/generator.ts (§3.4 contract):
- generateAgentSkills(opts): idempotent, dryRun:true default, prune:false default
- buildSkillMarkdown(skillId, sources): generates frontmatter + API/CLI body
- API body: Visão geral + Autenticação + Endpoints (with curl) + Payloads
- CLI body: Visão geral + Instalação rápida + Subcomandos (with flags + examples)
- Prune: detects orphans in skills/{id}/ not in catalog; deletes in apply mode
- Marker preservation: <!-- skill:custom-start --> ... <!-- skill:custom-end -->
- Generated comment: per D24 spec
2026-05-27 21:54:42 -03:00
diegosouzapw
b7efba4727 test(agent-skills): unit tests for REST routes with sanitization assertions
16 tests covering all 5 endpoints:
- GET /agent-skills: 42 total, category/area filters, invalid category → 400
- GET /agent-skills/[id]: found api+cli skills, unknown → 404
- GET /agent-skills/[id]/raw: unknown → 404, valid → 200/502/500 (network-tolerant)
- GET /agent-skills/coverage: SkillCoverage shape (api.total=22, cli.total=20)
- POST /generate: no auth → 401/403, invalid body → 400, no generator → 503

Hard Rule #12 verified explicitly in every error case: error.message must
not match /\bat \/|\bat file:\/\// (no stack trace exposure). Final test
collects all error paths and asserts sanitization in a single sweep.
2026-05-27 21:49:32 -03:00
diegosouzapw
ccda3cf0f0 feat(agent-skills): add POST /generate with management auth + dryRun default
Implements POST /api/agent-skills/generate (F4):

- Requires management auth via requireManagementAuth (same pattern as
  usage/combo-health-dashboard and other management routes)
- Validates body via GenerateBodySchema (dryRun defaults true, prune
  defaults false — safe preview mode)
- Dynamic import of @/lib/agentSkills/generator so the route coexists
  before F3 (generator.ts) is merged; returns 503 if module unavailable
- Hard Rule #12: all error paths use buildErrorBody (400/401/403/503/500)
- Hard Rule #7: Zod validates both JSON parse and schema shape
2026-05-27 21:49:21 -03:00
diegosouzapw
d1160120c0 feat(agent-skills): add REST GET endpoints (list, get, raw, coverage)
Implements four read-only endpoints for the Agent Skills REST API (F4):

- GET /api/agent-skills — catalog with ?category= and ?area= filters,
  returns { skills, count, coverage }
- GET /api/agent-skills/[id] — single skill by canonical ID (404 if absent)
- GET /api/agent-skills/[id]/raw — SKILL.md as text/markdown with
  Cache-Control: public, max-age=3600; 502 on GitHub fallback failure
- GET /api/agent-skills/coverage — SkillCoverage (filesystem vs catalog)

All routes: export const dynamic = "force-dynamic" (filesystem reads),
error responses via buildErrorBody (Hard Rule #12), Zod input validation
(Hard Rule #7). coverage/route.ts force-added to git because .gitignore
matches the directory name "coverage/" — this is an API route, not a
report directory.
2026-05-27 21:49:12 -03:00
diegosouzapw
754806e0f8 test(a2a): unit tests for listCapabilities + Agent Card route
Adds 6 tests for executeListCapabilities (§3.7 shape, 42-skill IDs in markdown,
coverage bounds, ISO datetime, handler registration) and 5 tests for the Agent
Card route (6 skills total, list-capabilities presence + tags + examples, all
original 5 skills preserved). All 11 pass.
2026-05-27 21:49:03 -03:00
diegosouzapw
c91decf543 feat(a2a): register list-capabilities in A2A_SKILL_HANDLERS + Agent Card
Adds "list-capabilities" entry to A2A_SKILL_HANDLERS in taskExecution.ts
(dynamic import pattern, consistent with the 5 existing skills) and adds
the 6th skill entry to /.well-known/agent.json with tags [discovery, capabilities]
and example questions for agent discovery.
2026-05-27 21:48:57 -03:00
diegosouzapw
6bad368dcb feat(a2a): add list-capabilities skill with markdown table of 42 skills
Implements executeListCapabilities() which calls getCatalog() + computeCoverage()
from the agentSkills catalog (F1/F2) and returns a markdown table covering all
42 skills (22 API + 20 CLI) with ID, name, category, area, endpoints/commands,
and raw SKILL.md URL, matching the §3.7 result contract.
2026-05-27 21:48:50 -03:00
diegosouzapw
44b248314b merge(F8): move skills→omni-skills + split into 8 components + inspector 2026-05-27 21:26:38 -03:00
diegosouzapw
f730161c74 merge(F2): catalog source 42 entries + parsers OpenAPI/CLI 2026-05-27 21:26:37 -03:00
diegosouzapw
b1a127a732 test(omni-skills): unit tests for OmniSkillsPageClient and components
46 structural/source-pattern tests covering: file structure, page.tsx server
component contract, PageClient 4-tab wiring, OmniSkillCard accessibility,
SkillInspectorPane 4 sub-tabs + API fetches, OmniSkillsList split layout,
OmniExecutionsTab columns, OmniSandboxTab config values,
OmniMarketplaceTab dual-provider logic, and E2E path update.
2026-05-27 21:24:15 -03:00
diegosouzapw
33c9b2b96c test(omni-skills): update e2e path /dashboard/skills → /dashboard/omni-skills 2026-05-27 21:24:10 -03:00
diegosouzapw
99ccc35b93 refactor(omni-skills): split monolithic page into PageClient + 6 components
Extract the 870-line page.tsx into OmniSkillsPageClient (state + orchestration)
and 6 focused components: OmniSkillCard, OmniSkillsList, SkillInspectorPane,
OmniExecutionsTab, OmniSandboxTab, OmniMarketplaceTab.

- SkillsConceptCard variant="omni" rendered at top of page
- 4 tabs (skills/executions/sandbox/marketplace) preserved
- Skills tab uses 12-col split grid with SkillInspectorPane (4 sub-tabs)
- SkillInspectorPane: schema/handler/executions/sandbox sub-tabs, mode buttons,
  uninstall, per-skill execution fetch
2026-05-27 21:24:06 -03:00
diegosouzapw
dfd2182c41 refactor(omni-skills): move dashboard/skills → dashboard/omni-skills
Rename the page route from /dashboard/skills to /dashboard/omni-skills
to align with the task-15 F8 redesign plan. The server component wrapper
is reduced to a 5-line delegator, removing the prior 870-line monolith.
2026-05-27 21:23:55 -03:00
diegosouzapw
15838348c3 test(agent-skills): unit tests for catalog + openapi + cli parsers
agentSkills-catalog.test.ts (30 tests):
- getCatalog(): 42 total, 22 api, 20 cli
- API_SKILL_IDS/CLI_SKILL_IDS length assertions
- ID regex format, uniqueness, required fields
- getSkillById happy path + null for unknown/empty
- filterCatalog by category, area, combined, empty
- refreshCatalog() invalidates cache (new array reference)
- computeCoverage() shape validation
- rawUrl/githubUrl URL format assertions

agentSkills-openapiParser.test.ts (9 tests):
- Fixture YAML: paths Map, area groupings (providers, api-keys, inference)
- OpenapiPath field validation
- Missing file throws
- Empty paths YAML returns empty Maps
- Real openapi.yaml: providers area ≥5 endpoints (integration)

agentSkills-cliRegistryParser.test.ts (10 tests):
- Fixture .mjs: commands Map, families Map, ≥5 provider subcommands
- Description extraction, isSubcommand flag, flags extraction
- Skips unrecognised files, throws on missing dir
- Real providers.mjs: ≥5 commands (integration)
2026-05-27 20:32:08 -03:00
diegosouzapw
0a95372746 feat(agent-skills): add openapiParser and cliRegistryParser
openapiParser.ts:
- parseOpenapi(): reads docs/reference/openapi.yaml via js-yaml (already a dep)
  and returns { paths: Map<METHOD+path, OpenapiPath>, areas: Map<SkillArea, ops[]> }
- PATH_AREA_MAP maps 30+ path prefixes to SkillArea values
- getEndpointsForArea(area): convenience helper returning 'METHOD /path' strings

cliRegistryParser.ts:
- parseCliRegistry(): reads all bin/cli/commands/*.mjs via fs.readdirSync
  and regex-parses .command(), .description(), .option() calls
- FILE_FAMILY_MAP maps 40+ file basenames to CLI SkillArea families
- getCommandsForFamily(family): convenience helper for catalog consumers
- Does NOT import Commander.js modules to avoid side-effects (D15)
2026-05-27 20:31:55 -03:00
diegosouzapw
a0cc22be73 feat(agent-skills): add catalog.ts with getCatalog/filter/coverage/fetch helpers
Implements the catalog.ts public API defined in §3.3 of the master plan:
- getCatalog(): AgentSkill[] — returns 42 entries, lazy-cached in module scope
- getSkillById(id): AgentSkill | null — lookup by canonical ID
- filterCatalog(opts): AgentSkill[] — filter by category and/or area
- computeCoverage(): SkillCoverage — reads skills/ dir and counts SKILL.md present
- refreshCatalog(): void — invalidates cache (used by tests + generator)
- fetchSkillMarkdown(id): Promise<SkillMarkdown> — reads local fs first,
  falls back to GitHub raw fetch with 1h Next.js cache (for F4 /raw route)

API_SKILL_IDS and CLI_SKILL_IDS exported as readonly string arrays (D28 order).
Single source of truth for all consumers (REST routes, MCP, A2A).
2026-05-27 20:31:44 -03:00
diegosouzapw
78de1d2455 feat(agent-skills): expand catalog source to 42 entries (22 API + 20 CLI)
Replace 18-entry hardcoded AGENT_SKILLS array with 42-entry CURATED_SKILLS
covering all areas listed in D28 of the master plan. Each curated entry
has id, name, description, category, area, icon, and optional flags.

Adds backward-compatible AGENT_SKILLS alias (deprecated) that maps curated
entries to the old AgentSkill shape with empty endpoints/cliCommands arrays
so the existing /dashboard/agent-skills page continues to work until F7
rewrites it.

Imports AgentSkill, SkillArea, SkillCategory types from src/lib/agentSkills/types.ts
(F1 single source of truth) instead of redeclaring locally.
2026-05-27 20:31:31 -03:00
diegosouzapw
bf764dc529 test(agent-skills): unit tests for schemas + SkillsConceptCard 2026-05-27 19:23:36 -03:00
diegosouzapw
612cf63de7 feat(agent-skills): redirect /dashboard/skills -> /dashboard/omni-skills + sidebar reorder 2026-05-27 19:23:32 -03:00
diegosouzapw
aed1bd02d2 feat(agent-skills): add SkillsConceptCard shared component + i18n 2026-05-27 19:23:27 -03:00
diegosouzapw
051ce5e786 feat(agent-skills): add foundation types + Zod schemas 2026-05-27 19:23:20 -03:00
diegosouzapw
722e9f41cd chore: apply unit test fixes, polyfills, and environment precedence fixes 2026-05-27 18:02:17 -03:00
JeferssonLemes
52a43d65d3 feat(modelSpecs): align opencode-go family with upstream provider limits (#2802)
Integrated into release/v3.8.6
2026-05-27 17:06:32 -03:00
Hernan Javier Ardila Sanchez
0e9aed4d03 fix(gemini): emit signaturelessToolCallMode:text for GEMINI format models (#2801)
Integrated into release/v3.8.6
2026-05-27 17:05:36 -03:00
Apostol Apostolov
87fad5d171 [codex] home: restore settings-driven home layout and quota auto-refresh (#2800)
Integrated into release/v3.8.6
2026-05-27 17:05:18 -03:00
Apostol Apostolov
f1e4c001a9 feat(logs): add clean history button (#2799)
Integrated into release/v3.8.6
2026-05-27 17:04:49 -03:00
akarray
83445a96b8 fix(oauth): repair Google loopback callback flow (#2796)
Integrated into release/v3.8.6
2026-05-27 17:04:31 -03:00
Markus Hartung
0c6c5e212e fix: Error: Unable to inspect existing database #2771 (#2795)
Integrated into release/v3.8.6
2026-05-27 17:04:13 -03:00
Paijo
aac17c01c3 fix: register missing web-cookie validators (claude-web, gemini-web, copilot-web, t3-web) (#2793)
Integrated into release/v3.8.6
2026-05-27 17:03:55 -03:00
Paijo
619463c573 fix: resolve npm install warnings — remove dead deps, relax engine constraint (#2792)
Integrated into release/v3.8.6
2026-05-27 17:03:38 -03:00
JeferssonLemes
72a46581b6 fix(opencode-go): route qwen3.x via claude messages + repair fixMissingToolResponses for Claude-shape upstreams (#2791)
Integrated into release/v3.8.6
2026-05-27 17:02:38 -03:00
diegosouzapw
722aa32939 chore: ignore .claude/settings.local.json (per-user Claude Code permissions) 2026-05-27 16:29:27 -03:00
diegosouzapw
80f8dd7863 chore: merge release/v3.8.5 into main (post-v3.8.5 hotfixes + community PRs) 2026-05-27 16:23:02 -03:00
Diego Rodrigues de Sa e Souza
3c016ce4dc Merge pull request #2790 from jeferssonlemes/feat/opencode-go-missing-models
feat(opencode-go): register 4 missing models from upstream catalog
2026-05-27 10:42:14 -03:00
diegosouzapw
7042460292 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:41:52 -03:00
Diego Rodrigues de Sa e Souza
10ecf693a9 Merge pull request #2789 from InkshadeWoods/main
fix(i18n): translate 162 missing zh-CN UI strings
2026-05-27 10:41:29 -03:00
diegosouzapw
d718a6cbfb chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:41:07 -03:00
Diego Rodrigues de Sa e Souza
f32f6b841c Merge pull request #2782 from kjhq/docs/fix-readme-broken-links
docs: fix broken documentation links in README after Fumadocs migration
2026-05-27 10:31:54 -03:00
diegosouzapw
7117cea835 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:31:40 -03:00
Diego Rodrigues de Sa e Souza
c765a987e6 Merge pull request #2783 from JxnLexn/fix-codex
fix(codex): apply global service tiers to combo request bodies
2026-05-27 10:31:22 -03:00
diegosouzapw
a00af74279 chore: merge release/v3.8.5 to resolve conflicts 2026-05-27 10:31:09 -03:00