| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(agent): enforce max_tokens_out across full response (result+sources+evidence) | 4 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
chore: remove internal dev-process references from tracked files Strip development breadcrumbs (codename, slice/phase/wave/flaw and audit-item tags, internal design-doc pointers) from source comments, SQL migration headers, tests, CHANGELOG, and a benchmark baseline. Correct stale diff/watch tool-schema comments that described them as unimplemented stubs. Reword to preserve the real rationale; no code, control-flow, or test-assertion changes. | 3 个月前 | |
feat(crawl): route map strategy to URL-only discovery in crawl tool handler | 5 个月前 | |
feat(crawl): surface challenge_class/solve_method provenance on crawl output | 2 个月前 | |
chore: remove internal dev-process references from tracked files Strip development breadcrumbs (codename, slice/phase/wave/flaw and audit-item tags, internal design-doc pointers) from source comments, SQL migration headers, tests, CHANGELOG, and a benchmark baseline. Correct stale diff/watch tool-schema comments that described them as unimplemented stubs. Reword to preserve the real rationale; no code, control-flow, or test-assertion changes. | 3 个月前 | |
test(extract): proportional budget-trim contract for tables + arrays Cover the live P0 repro where a small max_tokens_out silently trims tables to data:[]. Adds must-pass cases (26-row table keeps headers+rows, structured multi-array partial fill, degenerate budget) and must-not-fire negatives (no budget, generous budget, metadata under budget, strings-only). | 2 个月前 | |
test(extract): proportional budget-trim contract for tables + arrays Cover the live P0 repro where a small max_tokens_out silently trims tables to data:[]. Adds must-pass cases (26-row table keeps headers+rows, structured multi-array partial fill, degenerate budget) and must-not-fire negatives (no budget, generous budget, metadata under budget, strings-only). | 2 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor: tighten all tool handlers to StageResult<T> return type | 4 个月前 | |
feat(fetch): solve-ladder orchestrator — wire classify/auto-pass/ai-solve/human + enforce clearance route-gate + solve provenance Add src/fetch/solve-ladder.ts, a pure injected orchestrator that sequences the in-band solve rungs per challenge class (behavioral/none run nothing; interactive → auto-pass then human; image → ai-vision then human). Wire it into the browser tier's challenge-fail point with concrete injected callbacks (trusted CDP input for auto-pass, clipped screenshot + vision LLM for ai-solve, headful window + consent for human), harvesting clearance on a solve and falling through to normal hydration. Enforce the P6 clearance route-identity gate in router.clearanceFor (a proxy-solved clearance is refused on the direct route and vice-versa). Thread challenge_class/solve_method provenance onto ChallengeBlockedError, the browser RawFetchResult returns, the router's blocked_by_challenge mapping, and the fetch tool result. cdp-direct and scraping-browser remain dark (CEO GO-gated / opt-in). | 2 个月前 | |
fix(fetch): surface HTTP 4xx/5xx as fetch errors for plain-text endpoints Bench v0.1.12 stress test: GET on a missing raw.githubusercontent.com path returned '404: Not Found' as markdown content. Now plain-text/JSON/markdown 4xx/5xx responses bubble up as http_<code> errors with a hint, while HTML 4xx landing pages continue through extraction (often useful nav). | 4 个月前 | |
fix(fetch): preserve challenge-block http_status through the tool boundary handleFetch reconstructed the StageError { ok:false } envelope reading stageErr.statusCode, but a blocked_by_challenge StageError carries its upstream anti-bot status as http_status (see StageError in types.ts). The status was silently dropped, so the crawl adaptive-cooldown never fired on the headline scenario (a crawl hitting a managed challenge). Read http_status ?? statusCode so the status survives; never invent one. - de-vacuum the crawler cooldown test: drive the real handleFetch handoff (mocked router.fetch StageError -> r.http_status -> crawl closure -> Crawler -> recordResponse) instead of fabricating FetchOutput.http_status - add a tool-boundary regression test asserting http_status:403 surfaces and a statusless StageError stays unset - cover the non-thrown guarded still-challenge reblock path (proxy retry reblocks -> falls through preserving http_status from raw.statusCode) - clamp WIGOLO_CRAWL_COOLDOWN_FACTOR to >= 1 (a factor <= 1 disables the adaptive cooldown / risks a degenerate decay divide) | 2 个月前 | |
fix(fetch): stealth mode bypasses cache read (never replay a stale 403) | 2 个月前 | |
fix(fetch): preserve full-page cache for section requests - 背景 / Background:section 请求会把裁剪后的 Markdown 写入 canonical cache,并触发整页删除误报 / Section requests persisted scoped Markdown and produced false full-page deletion diffs. - 改动 / Changes:完整 extraction 专供 change detection、cache、embedding 与 content_hash;section 和预算仅整形响应,并统一 fresh/cache 的资源范围 / Keep canonical operations full-page and apply section/budgets only to response shaping with consistent scoped assets. - 文件 / Files:src/tools/fetch.ts, tests/unit/tools/fetch.test.ts, tests/integration/change-detection.test.ts - 验证 / Verification:63 targeted tests passed; npm run lint passed; npm run build passed. Full suite: 7836 passed, 16 unrelated REPL readline failures under the inherited production environment; targeted rerun remains green. | 2 个月前 | |
fix(security): close SSRF gap on find_similar seed + discovered links find_similar fetches its url seed and 1-hop discovered links raw via router.fetch, bypassing handleFetch's guard. Guard the seed at the handler top (refusal returns a StageError) and guard each discovered link before fetching (per-link skip-not-fail so one hostile link doesn't fail the run). | 2 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
feat(search): orchestrator ranking rescue — error-token atomicity, dictionary demotion, domain-scoped backfill, undated news demotion, starvation re-dispatch Fixes four core retrieval failures where wigolo scored last on a blind benchmark: - Error-code queries: detect all-caps status/error tokens (ERR_*, ENOENT, SQLSTATE, TypeError-style class names) and quote each in place so engines match the code as one atom instead of a bare substring that lets glossary junk rank. Error tokens no longer route into the docs vertical. - Dictionary demotion: per-result gate in domainQualityScore — a dictionary/ glossary host is dropped to 0.25 ONLY when the query carries an error token. A normal query leaves the same host at 1.0 (hit/miss, never query-wide). - Domain scoping + backfill: inject a site: operator into the dispatched query for a small include_domains set (engines that honour it narrow at source); applyDomainFilters stays the hard post-filter. When the on-domain survivors fall short of max_results, a broad backfill wave refills with on-domain hits. - News undated demotion: on a recency-bound news query, undated results are demoted (x0.3) rather than dropped so dated in-window pages win top slots without collapsing recall. - Per-result starvation re-dispatch: a thin non-general vertical that fuses fewer than the floor pulls the general pool with the same query, RRF-merges per-result, and re-scores. Gated on post-fusion COUNT, distinct from the query-wide degraded fallback. Adds SearchOutput.engine_pool { healthy, total, degraded, reasons? } as the single pool-health surface, populated from engine telemetry + dispatch degrade reasons (starvation_redispatch). | 3 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor: tighten all tool handlers to StageResult<T> return type | 4 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor(tests): mock extract-provider directly, drop dead pipeline shims Phase 6.3 layered a vi.mock of getExtractProvider on top of a vi.mock of extractContent so callers could migrate without rewriting 33 test files. With extractContent now a @deprecated facade with no production callers, the indirection adds nothing — replace the dual mock with a top-level extractMock spy wired straight into getExtractProvider(). Drops the pipeline.js mocks + stale extractContent imports across 33 files; behaviour unchanged. | 4 个月前 | |
refactor: tighten all tool handlers to StageResult<T> return type | 4 个月前 | |
chore: remove internal dev-process references from tracked files Strip development breadcrumbs (codename, slice/phase/wave/flaw and audit-item tags, internal design-doc pointers) from source comments, SQL migration headers, tests, CHANGELOG, and a benchmark baseline. Correct stale diff/watch tool-schema comments that described them as unimplemented stubs. Reword to preserve the real rationale; no code, control-flow, or test-assertion changes. | 3 个月前 | |
chore: remove internal dev-process references from tracked files Strip development breadcrumbs (codename, slice/phase/wave/flaw and audit-item tags, internal design-doc pointers) from source comments, SQL migration headers, tests, CHANGELOG, and a benchmark baseline. Correct stale diff/watch tool-schema comments that described them as unimplemented stubs. Reword to preserve the real rationale; no code, control-flow, or test-assertion changes. | 3 个月前 | |
chore: remove internal dev-process references from tracked files Strip development breadcrumbs (codename, slice/phase/wave/flaw and audit-item tags, internal design-doc pointers) from source comments, SQL migration headers, tests, CHANGELOG, and a benchmark baseline. Correct stale diff/watch tool-schema comments that described them as unimplemented stubs. Reword to preserve the real rationale; no code, control-flow, or test-assertion changes. | 3 个月前 | |
feat(search): harden search-phase fetch enrichment (item 7) Narrow candidate sets, cold browser pools, and empty-on-timeout content starved search enrichment. Three pattern-level fixes on the fetch path: - Narrow-set per-URL budget scaling: when few candidates are hydrated, each gets a proportionally larger per-URL budget (narrowSetBudgetMs / candidateCount), floored at the base and clamped to the stage budget. Keys on candidateCount (structural), never a domain allowlist. Computed at the core-provider fetch call site from items.length. - Snippet fallback on timeout: a per-URL/stage/total timeout now promotes the result's own snippet into markdown_content (content_from_snippet flag) instead of leaving it empty. Scoped to timeout-class failures; never fabricates; the failure stays recorded in fetch_failed. - Browser pool pre-warm: SmartRouter.prewarmBrowser() -> MultiBrowserPool .warm() pre-launches the default browser type before enrichment on balanced/deep with include_content, so the first hydration fetch does not pay the cold start inline. Idempotent + best-effort. The per-URL budget is enforced via the existing per-URL timeout signal already threaded through every SmartRouter.fetch tier (stealth, TLS- impersonation, browser, HTTP) — no new fetch option is threaded. Config knobs searchNarrowSetBudgetMs + searchPrewarmBrowser default to today's behavior for legacy paths (the legacy orchestrator omits the new context fields, so its enrichment is unchanged). | 3 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 个月前 | ||
| 4 个月前 | ||
| 3 个月前 | ||
| 5 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 3 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 4 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 |