diegosouzapw
1a99f0058e
feat(playground): add MarkdownMessage component with react-markdown
...
Renders markdown safely using react-markdown ^10.1.0. Supports code blocks
(pre/code fallback — no syntax highlighter), tables, lists, links, headings,
blockquotes. Script tags appear as literal text (not executed) by default
react-markdown behavior — no XSS possible (D15, §17.3).
2026-05-27 21:29:10 -03:00
diegosouzapw
52c2d1cb75
feat(schemas): add shared playground and searchTools Zod schemas
...
Adds PlaygroundPresetRowSchema, PlaygroundPresetCreateSchema,
PlaygroundPresetUpdateSchema, PlaygroundPresetListItemSchema,
ToolDefinitionSchema, StructuredOutputSchema, StreamMetricsSchema
(src/shared/schemas/playground.ts) and SearchProviderCatalogItemSchema,
SearchProviderCatalogResponseSchema, ScrapeResultSchema
(src/shared/schemas/searchTools.ts). All z.record() calls use the
Zod v4 two-argument form z.record(z.string(), z.any()) (§17.1).
2026-05-27 21:29:04 -03:00
diegosouzapw
3c3a02ed42
feat(playground): add types.ts with static provider pricing table
...
Re-exports all playground types and adds static MODEL_PRICING_TABLE with
8-10 popular models labeled (estimated) for client-side cost estimation (D13).
Exports getModelPricing and getProviderPricing helpers.
2026-05-27 21:28:57 -03:00
diegosouzapw
bda03ce5dc
feat(playground): add promptImprover.ts meta-prompt helpers
...
Adds META_SYSTEM_PROMPT, ImprovePromptRequestSchema, buildImproveChatBody,
and parseImprovedContent for the Prompt Improver feature (D8). Handles
system-only, prompt-only, and both-present scenarios with <<SYSTEM>>/<<PROMPT>>
markers.
2026-05-27 21:28:52 -03:00
diegosouzapw
25613e6176
feat(playground): add codeExport.ts generator (curl/python/typescript)
...
Implements the shared codeExport.ts foundation for the Playground Studio.
Generates curl/python/typescript snippets for all 10 endpoints (chat.completions,
completions, embeddings, images, audio.transcriptions, audio.speech, moderations,
rerank, search, web.fetch). Always uses $OMNIROUTE_API_KEY placeholder (D11).
2026-05-27 21:28:47 -03:00
diegosouzapw
f27911fd4a
feat(batch): add NewBatchWizard (4-step modal: destination, input, validate, cost) + tests (F4)
2026-05-27 21:27: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
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
b9e5d940a4
merge: F6 QuotaStore core (sqlite + redis drivers + fairShare + planResolver + burnRate + saturation)
2026-05-27 21:14:01 -03:00
diegosouzapw
fb519b2002
feat(translator): add StreamTransformerAccordion (F5)
...
- Refactor of StreamTransformerMode wrapped in Collapsible with lazy-render
- Preserves rawSse input, transform button, MiniStat output, copy
- POST /api/translator/transform-stream reused unchanged
- D7 lazy-render
2026-05-27 20:50:51 -03:00
diegosouzapw
de7c0c6bba
feat(translator): add CompressionPreviewAccordion (F7)
...
- Extracted Compression Preview from PlaygroundMode lines 506-584 into standalone accordion
- Wrapped in Collapsible with lazy-render (D7): content only mounts after first open
- Accepts inputContent via prop (lifted from TranslateTab in F9) or shows empty-state hint
- POST /api/compression/preview unchanged; error path sanitized (no stack-trace leak)
- 33 Vitest tests covering smoke, lazy-render guard, mode select, fetch dispatch, result grid, error path
2026-05-27 20:46:55 -03:00
diegosouzapw
d7372dea3f
feat(translator): add MonitorTab (F8)
...
- Refactor of LiveMonitorMode with paridade
- ADD: monitorOriginHint header explaining event origin
- ADD: empty state with CTA 'Ir para Translate' (onGoToTranslate)
- Preserves 3s polling /api/translator/history, auto-refresh toggle, stats, table
- cleanup useEffect preserved
2026-05-27 20:40:31 -03:00
diegosouzapw
4d825ad482
feat(quota): add saturationSignals reader with 30s cache and fail-open (B/F6)
2026-05-27 20:38:41 -03:00
diegosouzapw
23f5b6f8b8
feat(quota): add planResolver (DB override > known catalog > empty) (B/F6)
2026-05-27 20:38:33 -03:00
diegosouzapw
c3c0817c3b
feat(quota): add burnRate EMA estimator and time-to-exhaustion (B/F6)
2026-05-27 20:38:25 -03:00
diegosouzapw
9905d92244
feat(quota): add fairShare work-conserving algorithm (multi-dimension, generous/strict modes, cap-absolute) (B/F6)
2026-05-27 20:38:18 -03:00
diegosouzapw
67548034be
feat(quota): add storeFactory with setting/env-driven driver selection (B/F6)
2026-05-27 20:38:11 -03:00
diegosouzapw
4bb44b10d3
feat(quota): add redisQuotaStore (optional driver, gated by ioredis availability) (B/F6)
2026-05-27 20:38:02 -03:00
diegosouzapw
ca85652bab
feat(quota): add sqliteQuotaStore with sliding window counter and per-key mutex (B/F6)
2026-05-27 20:37:51 -03:00
diegosouzapw
8a10b3ecd8
feat(quota): add QuotaStore facade and types re-export (B/F6)
2026-05-27 20:37:44 -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
8dbd0a9d1c
feat(translator): add TestBenchAccordion (F6)
...
- Refactor of TestBenchMode wrapped in Collapsible with lazy-render (D7)
- Preserves 8 scenarios, runAll, per-scenario re-run, pass/fail badges, compatibility report
- Reuses useProviderOptions + useAvailableModels (D12)
- POST /api/translator/translate + /api/translator/send unchanged
- Hard Rule #12 : error display uses err.message only (no stack trace)
- 17 Vitest tests: smoke render, lazy-render guard, Run All 8 fetches,
results running→pass, per-scenario re-run, error sanitization
2026-05-27 20:27:51 -03:00
diegosouzapw
150fe98ddd
feat(batch): add UploadFileModal + Used by column + Concept card on /batch/files (F5)
...
- Create UploadFileModal: drag/drop + click-to-pick, .jsonl + 512MB validation, purpose=batch upload, D14 error sanitization, Escape key handler
- Modify files/page.tsx: integrate FilesConceptCard (F3) + Upload toolbar button + UploadFileModal wired to fetchAll refresh
- Modify FilesListTab.tsx: add "Used by" column (D12 — derives related batches client-side), download button per row, delete button with canDelete guard (terminal-only or no related batches), colspan updated 6→8
- Create UploadFileModal.test.tsx (9 tests, all passing): render, invalid ext, valid .jsonl, >512MB (size property mock), upload 200 → onUploaded, upload 500 → sanitized error, Escape→onClose, drag-drop, sanitization assert (no /home/ in alert text)
2026-05-27 20:25:43 -03:00
diegosouzapw
bb200cd0ba
Merge branch 'feat/translator-friendly-concept-card-F2' into refactor/pages-v3-19-translator-friendly-redesign
2026-05-27 19:56:38 -03:00
diegosouzapw
c0db545811
chore(i18n): pt-BR + en keys for activity, costsSection, logsGroup, systemGroup, costsOverview (B/F3)
...
Add new sidebar i18n keys without removing existing ones (back-compat B11/B12):
- sidebar.activity / sidebar.activitySubtitle
- sidebar.logsGroup
- sidebar.systemGroup
- sidebar.costsOverview / sidebar.costsOverviewSubtitle
Existing sidebar.costs, sidebar.costsSection, sidebar.costsSubtitle preserved.
2026-05-27 19:51:40 -03:00
diegosouzapw
e98ba91928
refactor(sidebar): split Monitoring into Logs/Audit/System groups + Activity at top (B/F3)
...
- MONITORING_ITEMS reduced to single `activity` item at `/dashboard/activity`
- New LOGS_GROUP (logs/logs-proxy/logs-console) extracted from flat monitoring items
- New SYSTEM_GROUP (health/runtime) extracted from flat monitoring items
- AUDIT_GROUP preserved unchanged
- Monitoring section children: [...MONITORING_ITEMS, LOGS_GROUP, AUDIT_GROUP, SYSTEM_GROUP]
- COSTS_PARAMS_GROUP removed from monitoring section (items migrate to COSTS_ITEMS)
- `activity` added to HIDEABLE_SIDEBAR_ITEM_IDS; `logs-activity` preserved for back-compat (B11)
- Updated existing sidebar-visibility.test.ts to match new monitoring item structure
2026-05-27 19:51:30 -03:00
diegosouzapw
193bf1a766
feat(cli-tools): extend catalog with category/vendor/acpSpawnable/baseUrlSupport + new entries (plan 14 F1)
...
- Add CliCatalogEntrySchema (Zod) + CliCatalogEntry type + CliCatalogSchema in src/shared/schemas/cliCatalog.ts
- Add ToolBatchStatus + ToolBatchStatusMap interfaces in src/shared/types/cliBatchStatus.ts
- Re-export cliBatchStatus from src/shared/types/index.ts
- Extend all CLI_TOOLS entries with 4 new fields: category, vendor, acpSpawnable, baseUrlSupport
- Add 13 new entries: roo, jcode, deepseek-tui, smelt, pi (code), aider, forge,
gemini-cli, cursor-cli (code), goose, interpreter, warp, agent-deck (agent)
- Remove windsurf and amp (MITM backlog plan 11, D17)
- Result: 19 visible code entries + 6 agent entries (D15 cardinality)
- Add 5 new unit tests: cli-catalog-schema, cli-catalog-counts, cli-catalog-newentries,
cli-catalog-removed, cli-catalog-acpspawnable
- Update existing tests to align with removed entries
2026-05-27 19:50:38 -03:00
diegosouzapw
269fce6f0b
feat(batches): add pure helpers — csvToJsonl, validateJsonl, costEstimator, retryFailed (F2)
2026-05-27 19:42:51 -03:00
diegosouzapw
ddf6b0ef63
merge(F2): DB migrations + modules into Group A parent
2026-05-27 19:41:11 -03:00
diegosouzapw
96b6000f40
feat(schemas): add agentBridge/inspector Zod schemas (F1)
...
- AgentBridgeStateRow/Mapping/Bypass/ServerAction/Dns/MappingPut/BypassUpsert/UpstreamCaPost schemas
- InspectorCustomHost/SessionStart/SessionPatch/CaptureModeAction/SystemProxy/TlsInterceptToggle/AnnotationPut/ListQuery schemas
2026-05-27 19:39:32 -03:00
diegosouzapw
411a6d85d1
feat(inspector): add types, contextKey, kindDetector (F1)
...
- InterceptedRequest/LlmMetadata/WsEvent types + InterceptedRequestSchema
- extractSystemPrompt() supports OpenAI/Anthropic/Gemini formats
- computeContextKey() returns 12-hex SHA-256 of system prompt
- detectKind() classifies traffic via 18 host patterns + path + body + UA
- src/lib/inspector/secretMask.ts re-exports maskSecret (plano 12 bridge)
2026-05-27 19:39:26 -03:00
diegosouzapw
898f2f21c4
feat(mitm): add types, masking, passthrough, upstream-trust (F1)
...
- MitmTarget/AgentId types + MitmTargetSchema (Zod) in src/mitm/types.ts
- maskSecret() with pre-compiled BEARER/SK_KEY/LONG_TOKEN patterns
- sanitizeHeaders() using isForbiddenUpstreamHeaderName denylist + masking
- shouldBypass()/globMatch() — ReDoS-safe string split (no runtime RegExp)
- configureUpstreamCa() sets undici global dispatcher; safe error message (Hard Rule #12 )
2026-05-27 19:39:18 -03:00
diegosouzapw
ae0941464f
feat(translator): add F1 foundation types, hooks, and i18n keys
...
- types.ts: FormatId, TranslatorTab, TranslateMode, AdvancedSlug, TranslateDeepLink, TranslateNarratedResult, AdvancedAccordionProps, ExampleTemplate
- useTranslateDeepLink hook (URL ?tab/mode/advanced enum-validated parsing + setTab/setMode/setAdvanced)
- useTranslateSession hook (detect+translate+send orchestration with sanitized errors)
- 52 new i18n keys (en + pt-BR) under namespace 'translator' (ADD-only, no old keys removed)
- 3 unit test files: deeplink (32 tests), session (10 tests), i18n-keys (138 tests)
2026-05-27 19:38:34 -03:00
diegosouzapw
3c50ebce8f
merge: F2 DB migrations + modules (pools, consumption, plans)
2026-05-27 19:25:12 -03:00
diegosouzapw
47c0dce062
chore(env): document AgentBridge + Inspector env vars and re-exports (F2)
2026-05-27 19:24:26 -03:00
diegosouzapw
9fcfc2bd0b
feat(db): add inspector custom hosts + sessions CRUD modules (F2)
2026-05-27 19:24:22 -03:00
diegosouzapw
45f602606b
feat(db): add agentBridge state/mappings/bypass CRUD modules (F2)
2026-05-27 19:24:19 -03:00
diegosouzapw
89d3304a93
feat(db): add migrations 073/074/075 agent_bridge + inspector (F2)
2026-05-27 19:24:14 -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
e827ac125a
feat(translator): add TranslatorConceptCard with flow diagram (F2)
...
- TranslatorConceptCard: headline, analogy, expandable 'how it works'
- TranslateFlowDiagram: pure HTML/CSS responsive diagram (D10)
- translateOrFallback inline (D19 — no shared fallback file)
- Tooltip on technical terms (D20 a11y: aria-expanded + aria-controls)
2026-05-27 19:15:50 -03:00
diegosouzapw
44e49f635b
chore(db): re-export quota modules in localDb (B/F2)
...
Adds re-export blocks for quotaPools (7 functions), quotaConsumption
(4 functions with gcQuotaConsumption alias), and providerPlans (4
functions with getProviderPlan/listProviderPlans/etc. aliases).
Zero logic added to localDb.ts — Hard Rule #2 maintained.
2026-05-27 19:14:38 -03:00
diegosouzapw
1721cf7b32
feat(db): add providerPlans module with CRUD for per-connection quota plans (B/F2)
...
Implements getPlan, listPlans, upsertPlan (idempotent ON CONFLICT DO
UPDATE), and deletePlan. Serializes QuotaDimension[] as JSON into
dimensions_json column and parses back on read. Malformed JSON returns
empty dimensions rather than throwing.
2026-05-27 19:14:32 -03:00
diegosouzapw
83790b6c6a
feat(db): add quotaConsumption sliding-window counter storage (B/F2)
...
Implements getBucket, incrementBucket (atomic UPSERT), getPair (curr+prev
for sliding window formula), and gcOlderThan (stale bucket cleanup).
Atomic increment uses INSERT ... ON CONFLICT DO UPDATE — no separate
read-modify-write cycle needed.
2026-05-27 19:14:27 -03:00
diegosouzapw
07d6a17643
feat(db): add quotaPools module with CRUD and allocation management (B/F2)
...
Implements listPools, getPool, createPool, updatePool, deletePool,
upsertAllocations (replace strategy via transaction), and
listAllocationsForApiKey. All SQL uses prepared statements. Local type
shapes aligned with src/lib/quota/dimensions.ts contract (B13).
2026-05-27 19:14:21 -03:00
diegosouzapw
4f149fb5a3
feat(db): add quota_pools and quota_consumption migrations (B/F2)
...
Creates migrations 073 (quota_pools + quota_allocations) and 074
(quota_consumption sliding-window counter). Both are idempotent via
CREATE TABLE IF NOT EXISTS and CREATE INDEX IF NOT EXISTS. FK ON DELETE
CASCADE from quota_allocations to quota_pools. Fixes B2 IDs.
2026-05-27 19:14:15 -03:00