Commit Graph

1717 Commits

Author SHA1 Message Date
diegosouzapw
bd31823259 test(ui): add traffic-inspector UI tests (56 cases passing) (F8) 2026-05-28 07:25:32 -03:00
diegosouzapw
0b15624ca4 Merge F9 (TranslatorPageClient 2-tab shell + integration tests + legacy *Mode removal) into refactor/pages-v3-19 2026-05-28 02:43:06 -03:00
diegosouzapw
b6a6586bf8 feat(translator): rewrite TranslatorPageClient with 2-tab shell (F9) 2026-05-28 02:27:28 -03:00
diegosouzapw
4797c08018 fix(agent-skills): use res.text() for text/markdown endpoint (GAP-1 critical bug)
The /api/agent-skills/[id]/raw endpoint returns text/markdown (plain string),
not a JSON envelope. The client was incorrectly calling res.json() and
unpacking a non-existent `body` field, causing all preview panes to show
empty content. Switch to res.text() and update the test mock to match.
2026-05-28 01:53:59 -03:00
diegosouzapw
6facf168e4 test(translator): raise timeout on TranslatorConceptCard dynamic import test (flake fix) 2026-05-28 01:50:40 -03:00
diegosouzapw
69394a906e fix(batch): F10 audit — increase flaky perf test threshold from 100ms to 500ms 2026-05-28 01:49:49 -03:00
diegosouzapw
649a2219f0 feat(dashboard,cli,i18n): add sidebar entries + 308 redirects + cliCommon/cliCode/cliAgents/acpAgents i18n namespaces (plan 14 F9)
- sidebarVisibility.ts: replace cli-tools with cli-code, add cli-agents, keep acp-agents order cli-code→cli-agents→acp-agents→cloud-agents in TOOLS_GROUP; update HIDEABLE_SIDEBAR_ITEM_IDS and DEVELOPER_SHOWN preset
- next.config.mjs: 4 permanent (308) redirects for /dashboard/cli-tools→/dashboard/cli-code and /dashboard/agents→/dashboard/acp-agents (with :path* wildcards)
- pt-BR.json + en.json: add cliCommon, cliCode, cliAgents, acpAgents namespaces (~140 keys each) + sidebar keys for the 3 new IDs
- request.ts: merge EN as namespace-level fallback so 39 non-EN/pt-BR locales display new namespaces in English until translations ship
- Header.tsx: update HEADER_DESCRIPTIONS map to use new HideableSidebarItemId values
- tests: 4 new unit test files (38 assertions), update sidebar-visibility.test.ts omni-proxy item order
2026-05-28 01:49:49 -03:00
diegosouzapw
caf68872ec test(playground): fix react-hooks/immutability lint in hook test harnesses
Add eslint-disable-next-line comment to the outer hookRef assignment inside
mountHook<T> in all 5 vitest UI test files — the assignment is intentional
(test harness captures hook return via React ref) and safe.
2026-05-28 01:48:17 -03:00
diegosouzapw
f6f5d8da7d test(ui): agent-bridge UI unit tests (F7)
18 vitest/jsdom tests across 4 files:
- agent-bridge-page.test.tsx: EmptyState, RiskNoticeBanner (render/dismiss),
  BypassListEditor (defaults, initial patterns)
- agent-card.test.tsx: render, expand, DNS toggle, wizard open
- setup-wizard.test.tsx: step1 render, Next navigation, DNS enable, Cancel
- bypass-list-editor.test.tsx: defaults, patterns, save callback, button
All 18 tests pass. Timeout set to 30000ms (initial transform overhead).
2026-05-28 01:39:44 -03:00
diegosouzapw
bdaa045d5d merge(F4): vector store (sqlite-vec + hybrid RRF) 2026-05-28 01:26:16 -03:00
diegosouzapw
1d9cb7eb03 test(api): integration tests for traffic-inspector routes (F6) 2026-05-28 01:24:33 -03:00
diegosouzapw
5508dc4e3c feat(memory): add sqlite-vec vector store with hybrid RRF search (plan 21 F4)
Implements VectorStore interface contract from master plan 21 §3.4:
- sqlite-vec v0.1.9 extension loaded via createRequire (ESM compat)
- vec0 virtual table with FLOAT[N] dimensions driven by EmbeddingResolution
- Upsert via DELETE+INSERT (vec0 does not support INSERT OR REPLACE)
- BigInt rowids required by vec0 v0.1.9 for primary key insertion
- Hybrid RRF (k=60) fusing FTS5 + vector KNN via UNION ALL + GROUP BY
- FTS join on m.memory_id = fts.rowid (migration 023 bridge column)
- VECTOR_STORE_DISABLE_VEC=true test seam for null-extension path
- sanitizeErrorMessage in 3 error paths (Hard Rule #12)
- Raw SQL exception documented in header comment (Hard Rule #5 §D5)
- 27 unit tests across 5 files; all lint/typecheck/cycles checks pass
2026-05-28 01:22:38 -03:00
diegosouzapw
e7a1bf1c24 test(agent-skills): integration tests for discovery + content + MCP + A2A
Add tests/integration/agent-skills-discovery.test.ts (13 tests):
- Verifies every API_SKILL_IDS + CLI_SKILL_IDS has skills/<id>/SKILL.md on disk
- Validates frontmatter name + description present in each SKILL.md
- Validates body >= 100 chars per SKILL.md
- Verifies MCP omniroute_agent_skills_list handler returns 42 entries
- Verifies A2A list-capabilities returns 1 artifact containing all 42 IDs

Add tests/integration/agent-skills-content.test.ts (16 tests):
- Confirms all 42 catalog IDs have skills/{id}/ directory + SKILL.md
- Confirms 0 omniroute-* directories remain (post-prune)
- Confirms exactly 10 IDs have skill:custom-start/end blocks
  (omni-mcp, omni-compression, cli-providers, cli-eval, omni-agents-a2a,
   omni-combos-routing, omni-auth, omni-resilience, omni-inference, cli-serve)
- Confirms no unclosed custom blocks
2026-05-28 01:09:32 -03:00
diegosouzapw
02bc079ef9 feat(memory): add embedding layer — remote/static/transformers/cache (plan 21 F3)
Implements the multi-source embedding layer for the Memory Engine Redesign (plan 21).
Adds 5 production modules under src/lib/memory/embedding/:
- cache.ts: LRU+TTL in-memory cache (max=1000, TTL=5min, sha256 keyed)
- remote.ts: delegates to createEmbeddingResponse(), maps HTTP 401/403→no_key, 429→rate_limited, AbortError→timeout; all errors via sanitizeErrorMessage()
- staticPotion.ts: download-once potion-base-8M (JS-only WordPiece tokenizer + mean pooling, no WASM)
- transformersLocal.ts: lazy await import('@huggingface/transformers') singleton pipeline (Xenova/all-MiniLM-L6-v2, q8)
- index.ts: resolveEmbeddingSource (pure, sync), embed (cached dispatch), listEmbeddingProviders, invalidateEmbeddingCache

Also adds @huggingface/transformers and sqlite-vec to dependencies, and registers
@huggingface/transformers in next.config.mjs serverExternalPackages (D8/D25).

6 unit test files: cache (9), resolve (14), remote (10), static-potion (13), transformers (6), list-providers (8) — all 60 tests green.
2026-05-28 00:40:56 -03:00
diegosouzapw
4b0bda9b91 Merge F8 (MonitorTab) into refactor/pages-v3-19 2026-05-28 00:31:11 -03:00
diegosouzapw
cf88675917 Merge F7 (CompressionPreviewAccordion) into refactor/pages-v3-19 2026-05-28 00:31:10 -03:00
diegosouzapw
2e756b8789 Merge F6 (TestBenchAccordion) into refactor/pages-v3-19 2026-05-28 00:31:08 -03:00
diegosouzapw
c4853a4ce1 Merge F5 (StreamTransformerAccordion) into refactor/pages-v3-19 2026-05-28 00:30:51 -03:00
diegosouzapw
52b9192d83 Merge F4 (AdvancedSection/RawJsonPanel/PipelineView) into refactor/pages-v3-19 2026-05-28 00:30:50 -03:00
diegosouzapw
0820ec453b feat(translator): add SimpleControls, ResultNarrated, TranslateTab (F3) 2026-05-28 00:29:35 -03:00
diegosouzapw
0c38ed57ec test(api): integration tests for agent-bridge routes (F5)
4 integration test files covering: happy paths for all 8 major routes,
LOCAL_ONLY classification assertion, Zod 400 paths, cert flow (status/trust/
download/regenerate), bypass CRUD (POST/GET/DELETE), mappings PUT→GET
round-trip. Every error path asserts no stack trace leakage (Hard Rule #12).
Total: 41 tests, 41 pass.
2026-05-28 00:24:48 -03:00
diegosouzapw
3852656e8b feat(translator): add AdvancedSection, RawJsonPanel, PipelineView (F4) 2026-05-28 00:19:43 -03:00
diegosouzapw
3a535625b5 Merge F8 into parent: detail pages + move cards to cli-code/components (plan 14) 2026-05-28 00:18:37 -03:00
diegosouzapw
029a1f8e5b Merge F7 into parent: rename /agents → /acp-agents + concept/comparison cards (plan 14) 2026-05-28 00:18:37 -03:00
diegosouzapw
02d5dfb61f Merge F6 into parent: /dashboard/cli-agents page (plan 14) 2026-05-28 00:18:36 -03:00
diegosouzapw
2d58519ca9 refactor(dashboard,cli): move cards to cli-code/components + add detail pages /cli-code/[id] + /cli-agents/[id] + ToolDetailClient orchestrator (plan 14 F8)
- git mv cli-tools/components → cli-code/components (history preserved, 15 renames)
- Add isExpanded=false + onToggle=()=>{} defaults to all 12 specialized cards
- Create cli-code/[id]/page.tsx: server component, guards category=code
- Create cli-agents/[id]/page.tsx: server component, guards category=agent
- Create cli-code/components/ToolDetailClient.tsx: orchestrator with isExpanded:true always (D23), header with back-link + vendor/category/baseUrl badges
- Delete cli-tools/CLIToolsPageClient.tsx + cli-tools/page.tsx (accordion-based orchestrator replaced)
- Tests: ToolDetailClient smoke (5), cli-code detail page (3), cli-agents detail page (3) — 11/11 passing
2026-05-28 00:15:04 -03:00
diegosouzapw
2cc0f5bb5b test(playground): cover hooks and streamMetrics 2026-05-27 23:59:47 -03:00
diegosouzapw
bb312062ea merge(F2): db migrations + memoryVec + localDb re-export 2026-05-27 23:26:22 -03:00
diegosouzapw
6ba76aa500 test(memory): add edge-case test for getMemoryVecMeta when sentinel row is absent 2026-05-27 23:22:48 -03:00
diegosouzapw
371a7d8dbc feat(dashboard,cli): add /dashboard/cli-agents page for autonomous CLI agents (plan 14 F6) 2026-05-27 23:18:50 -03:00
diegosouzapw
b9f93a5c07 feat(memory): add migration 073, memoryVec CRUD module, and localDb re-export (plan 21 F2)
- 073_memory_vec.sql: creates memory_vec_meta singleton table (active_dim,
  embedding_signature, last_reset_at, vec_loaded) and adds needs_reindex column
  to memories table with a partial index; idempotent via CREATE IF NOT EXISTS +
  INSERT OR IGNORE + migration runner's duplicate-column-name guard
- src/lib/db/memoryVec.ts: implements 6 CRUD functions per §3.8 contract
  (getMemoryVecMeta, setMemoryVecMeta, markMemoryNeedsReindex,
  markAllMemoriesNeedReindex, getMemoryReindexQueue, countMemoryReindexPending)
- src/lib/localDb.ts: adds re-export block for the 6 functions (Hard Rule #2)
- .env.example: documents 7 new MEMORY_* env vars per §3.9
- tests/unit/memory-vec-meta.test.ts: 7 tests (meta get/set, migration idempotency)
- tests/unit/memory-needs-reindex.test.ts: 12 tests (mark/unmark, markAll, queue)
2026-05-27 23:16:05 -03:00
diegosouzapw
5dd75be1b9 test(batch): add integration tests + sanitization asserts + coverage gap fillers (F9)
- Add tests/unit/batches-f9-helpers.test.ts (19 tests, top-level for c8 coverage gate)
  covering uncovered branches: alias-match pricing, blank CSV rows, body.input/prompt paths,
  non-object JSON lines, invalid Anthropic params, body-is-array validation
- Add tests/unit/dashboard/batch/concept-cards.test.tsx (16 tests)
  covering BatchConceptCard + FilesConceptCard: render, toggle, localStorage hydration, sanitization
- Add tests/unit/dashboard/batch/list-regression.test.tsx (15 tests)
  covering BatchListTab + FilesListTab: render N items, Remove-completed flow,
  status/purpose filter, loading/empty states, sanitization
- Add tests/unit/dashboard/batch/sanitization.test.tsx (8 tests)
  covering NewBatchWizard + UploadFileModal + useBatchActions: each error path
  asserts zero stack-trace/path leakage into the UI (D14 / Hard Rule #12)
- Fix bug in validateJsonl.ts: body=array was not caught as invalid
  (typeof array === "object" is true — add Array.isArray guard, 1-line fix)

Local src/lib/batches/ coverage: 100% stmts / 93.7% branches / 100% funcs / 100% lines.
Global coverage gate: 75.96% stmts / 71.97% branches / 75.52% funcs (all above 75/75/75/70).
2026-05-27 23:14:17 -03:00
diegosouzapw
79797cd450 refactor(dashboard,acp): rename /dashboard/agents → /dashboard/acp-agents + use shared concept/comparison cards (plan 14 F7)
- git mv agents/ → acp-agents/ (preserves history)
- useTranslations("agents") → useTranslations("acpAgents")
- Replace inline architecture/comparison cards with <CliConceptCard currentType="acp" /> + <CliComparisonCard currentType="acp" />
- Update all cross-links from /dashboard/cli-tools → /dashboard/cli-code
- Update cliToolsRedirectCta/openCliTools keys → cliCodeRedirectCta
- Update sidebarVisibility: id "agents" → "acp-agents", href "/dashboard/agents" → "/dashboard/acp-agents", i18nKey "agents" → "acpAgents"
- Update HIDEABLE_SIDEBAR_ITEM_IDS and DEVELOPER_SHOWN preset: "agents" → "acp-agents"
- Add tests/unit/ui/AcpAgentsPage.test.tsx (6 vitest tests: smoke, namespace, concept card, comparison card, cross-link, agent grid)
2026-05-27 23:11:58 -03:00
diegosouzapw
ca6413917a test(playground): integration tests for improve-prompt and presets
49 integration tests covering:
- improve-prompt: happy paths (system+prompt, only system, only prompt), auth
  enforcement, upstream error sanitization, malformed body, missing fields
- presets CRUD: full lifecycle (POST→GET list→GET id→PUT partial→DELETE→404),
  params JSON round-trip, UUID validation, null system handling
- presets Zod: all invalid bodies → 400, system > 50000 chars boundary,
  UUID format validation across GET/PUT/DELETE
All error assertions verify no stack trace leakage (Hard Rule #12).
2026-05-27 23:08:09 -03:00
diegosouzapw
cb6a8c1641 merge(F4): Inspector core into Group A parent 2026-05-27 23:06:49 -03:00
diegosouzapw
d380883a6e test(search): integration coverage for providers catalog
- 14 tests covering all status transitions (configured/missing/rate_limited)
- Validates 12 search + 3 fetch = 15 provider total count
- Asserts kind field correctness per provider type
- Tests back-compat data array with legacy {id,object,created,name,search_types} shape
- Tests perplexity-search credential fallback to perplexity
- Validates response against SearchProviderCatalogResponseSchema (Zod)
- Tests 401 behavior when auth is required
2026-05-27 23:05:48 -03:00
diegosouzapw
4cf36ccdce feat(dashboard,cli): add /dashboard/cli-code page with smart status grid + concept/comparison cards (plan 14 F5)
- Server component page.tsx (minimal, passes machineId)
- CliCodePageClient: filters CLI_TOOLS by category=code+baseUrlSupport!=none (19 tools D15)
- Renders CliConceptCard + CliComparisonCard at top, header bar with search/detection/baseUrl
  filters, refresh button, empty-state amber banner when no active providers, 2-col grid
- useToolBatchStatuses (F4) for batch detection; CardSkeleton while loading
- Client-side filtering by name/vendor/description, detection status, baseUrl type
- Cardinality guard: console.warn if count != EXPECTED_CODE_COUNT (non-blocking)
- Test: 11 cases covering smoke, 19 cards, search filter, detection/loading skeleton,
  empty state, concept/comparison cards, refresh refetch, detailHref pattern
2026-05-27 23:05:21 -03:00
diegosouzapw
6236b604ec feat(memory): add shared foundation types, Zod schemas, and roundtrip tests (plan 21 F1)
- src/lib/memory/embedding/types.ts — EmbeddingSource, EmbeddingProviderListing, EmbeddingResolution, EmbeddingResult, EmbeddingError (verbatim §3.1)
- src/shared/schemas/memory.ts — 7 Zod schemas (MemorySettingsExtended, MemoryUpdatePut, RetrievePreview, MemoryReindex, MemorySummarize, EmbeddingProviderListing, MemoryEngineStatus, RetrievePreviewResult) + z.infer types (verbatim §3.2)
- src/shared/schemas/qdrant.ts — 4 Zod schemas (QdrantSettings, QdrantSettingsUpdate, QdrantSearch, QdrantHealthResult) + z.infer types (verbatim §3.3)
- tests/unit/memory-schemas-roundtrip.test.ts — 34 assertions (≥22 required); all pass
2026-05-27 22:54:18 -03:00
diegosouzapw
0a4a7fabce feat(batch): add action footer to BatchDetailModal (cancel/download/retry) + tests (F7) 2026-05-27 22:51:31 -03:00
diegosouzapw
e77544876e Merge branch 'feat/playground-search-db-F2' into feat/playground-api-F3 2026-05-27 22:44:18 -03:00
diegosouzapw
5847c3b50e Merge F4 into parent: shared CLI UI components + useToolBatchStatuses hook (plan 14) 2026-05-27 22:43:21 -03:00
diegosouzapw
b30a36fcf1 Merge F3 into parent: settings handlers for new custom configType tools (plan 14) 2026-05-27 22:43:21 -03:00
diegosouzapw
1196d08aad test(mitm): handlers + targets + detection unit tests (F3)
- mitm-handler-base: hookBufferStart returns InterceptedRequest with
  sanitized headers, extractSourceModel parses body.model, writeError
  emits JSON with sanitized message (Hard Rule #12).
- mitm-handler-<id>: nine per-agent happy-path tests (antigravity,
  kiro, copilot, codex, cursor, zed, claude-code, open-code) exercise
  full intercept() with mocked fetch via _mitmHandlerHarness.ts;
  asserts mapped model is forwarded and AgentBridge correlation
  headers are present. Trae test confirms intercept() rejects with a
  structured error.
- mitm-targets-resolve: ALL_TARGETS contains 9 entries; resolveTarget
  is case-insensitive and returns null for unknown hosts.
- mitm-targets-route: bypass > target > passthrough precedence
  validated against representative hostnames.
- mitm-detection: DETECTORS covers every AgentId; detectAgent never
  throws and returns DetectionResult-shaped objects for all probes.
2026-05-27 22:33:56 -03:00
diegosouzapw
1ca703657a feat(cli): add shared CLI UI components — CliToolCard/ConceptCard/ComparisonCard/BaseUrlSelect/ApiKeySelect/ManualConfigModal + useToolBatchStatuses hook (plan 14 F4) 2026-05-27 22:32:27 -03:00
diegosouzapw
f211fcf509 merge: F7 enforce wiring (chatCore PRE/POST + combo soft penalty + spendRecorder) 2026-05-27 22:23:33 -03:00
diegosouzapw
c04aec0550 merge: F5 ComplianceTab actor filter + CompressionLogTab namespace fix 2026-05-27 22:23:31 -03:00
diegosouzapw
d78e33858d test(quota): cover enforce 7 scenarios + spendRecorder fail-open (B/F7)
quota-enforce.test.ts — 8 assertions:
  - Scenarios 1/7: fail-open when DB unavailable (no pool, store errors).
  - Scenarios 2-6: generous/strict/soft/burst/cap-absolute via fairShare integration.
  - Extra: Promise.all with multiple inputs always resolves to valid kind shape.
quota-spend-recorder.test.ts — 5 assertions:
  - Fire-and-forget timing, silent no-op for unknown keys, rejection catch,
    no-logger path, usd cost type accepted.
2026-05-27 22:17:44 -03:00
diegosouzapw
2b47a81d54 merge(F7): integrate W3 frente F7 into base 2026-05-27 22:17:26 -03:00
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