| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
test(daemon): deterministic breaker-trip → reset acceptance Trips a real breaker via a local 403×3 server (no test-only trip hook), then proves both reset paths clear it via getBreakerSnapshot(): the in-process resetBreakers() that doctor --fix calls, and the authed POST /admin/reset-breakers admin route on a running daemon. | 3 个月前 | |
feat(daemon): authed admin reset-breakers route Add POST /admin/reset-breakers gated by a random bearer token written owner-only (0600) to <dataDir>/daemon-admin.token at daemon start. The route rejects any browser-set Origin (403) and non-allowlisted Host (403, DNS-rebinding guard) before the token check (401). Loopback source IP is deliberately not the control. On success it clears every engine breaker and returns the snapshot. | 3 个月前 | |
fix(rest): cap concurrent running compat crawl jobs at 16 The job-store caps bound storage, not execution — rapid crawl POSTs could launch unbounded concurrent background crawls (each up to the max_pages clamp). Add a running-jobs cap (default 16, WIGOLO_SERVE_MAX_COMPAT_JOBS override) counting jobs in 'scraping'; an over-cap POST is refused with 429 {success:false} + Retry-After: 5, never queued. Capacity frees when a crawl settles (success, in-band error, or rejection). | 3 个月前 | |
feat: backend-aware health probe; core daemon reports healthy (D1) | 3 个月前 | |
fix(daemon): allow token-authenticated remote MCP clients | 3 个月前 | |
feat(daemon): add daemon CLI command and proxy module for stdio auto-connect | 6 个月前 | |
feat(rest): REST foundation module (router/auth/errors/limits/validate/dispatch) New lazy-loaded src/daemon/rest/: complete route table (POST /v1/{10 tools}, GET /v1/tools, GET /openapi.json+alias, /compat/firecrawl hook), two-mode auth (token bearer / open loopback / override), status-mapped error envelope with ssrf-code + search-shape adapters, body caps + deadlines + concurrency slots + param clamp table, lazy-ajv validation, target-guard SSRF seam, search+fetch dispatch (8 stubs → 501), openapi + firecrawl-compat stubs. ajv exact-pinned. | 3 个月前 | |
fix(rest): map StageResult failures on the machine code, not the prose statusForStageResult() looked its status tables up against `error_reason`, but tools put the machine code in `error` and a human sentence in `error_reason` — the inverse of the REST envelope convention. No lookup ever matched, so every tool failure fell through to 500: invalid input returned 500 instead of 400, upstream fetch failures 500 instead of 502, and a missing browser engine 500 instead of 503. Key the three lookups on `error`, and add the `http_<status>` codes that tools/fetch.ts emits (http_404, http_503, …) to the fetch-stage 502 branch — the existing 'http_error' entry never matched them. The match stays exact/anchored, so a reason sentence is still never substring-scanned. The existing unit tests passed only because they mirrored the bug, putting the code in `error_reason` — a shape no tool produces. They are re-pointed at producer-shaped failures, plus negative cases pinning that a code found only in the reason sentence does not match. | 2 个月前 | |
fix(rest): map StageResult failures on the machine code, not the prose statusForStageResult() looked its status tables up against `error_reason`, but tools put the machine code in `error` and a human sentence in `error_reason` — the inverse of the REST envelope convention. No lookup ever matched, so every tool failure fell through to 500: invalid input returned 500 instead of 400, upstream fetch failures 500 instead of 502, and a missing browser engine 500 instead of 503. Key the three lookups on `error`, and add the `http_<status>` codes that tools/fetch.ts emits (http_404, http_503, …) to the fetch-stage 502 branch — the existing 'http_error' entry never matched them. The match stays exact/anchored, so a reason sentence is still never substring-scanned. The existing unit tests passed only because they mirrored the bug, putting the code in `error_reason` — a shape no tool produces. They are re-pointed at producer-shaped failures, plus negative cases pinning that a code found only in the reason sentence does not match. | 2 个月前 | |
feat(rest): REST foundation module (router/auth/errors/limits/validate/dispatch) New lazy-loaded src/daemon/rest/: complete route table (POST /v1/{10 tools}, GET /v1/tools, GET /openapi.json+alias, /compat/firecrawl hook), two-mode auth (token bearer / open loopback / override), status-mapped error envelope with ssrf-code + search-shape adapters, body caps + deadlines + concurrency slots + param clamp table, lazy-ajv validation, target-guard SSRF seam, search+fetch dispatch (8 stubs → 501), openapi + firecrawl-compat stubs. ajv exact-pinned. | 3 个月前 | |
test(rest): OpenAPI 3.1 assembly + drift gate + capability grep Validate the assembled doc against the OpenAPI 3.1 meta-schema; assert all 10 POST paths + /v1/tools + openapi aliases present; served bounds equal the limits.ts clamp values (drift gate); imported *_TOOL_SCHEMA objects unmutated; capability-language grep over the doc + tools index; format:answer degradation note present; ErrorEnvelope + status codes; integration over a real DaemonHttpServer asserting /openapi.json === /v1/openapi.json and /v1/tools=10. | 3 个月前 | |
test(rest): pause-safe req mock for the router 413 path | 3 个月前 | |
feat(rest): REST foundation module (router/auth/errors/limits/validate/dispatch) New lazy-loaded src/daemon/rest/: complete route table (POST /v1/{10 tools}, GET /v1/tools, GET /openapi.json+alias, /compat/firecrawl hook), two-mode auth (token bearer / open loopback / override), status-mapped error envelope with ssrf-code + search-shape adapters, body caps + deadlines + concurrency slots + param clamp table, lazy-ajv validation, target-guard SSRF seam, search+fetch dispatch (8 stubs → 501), openapi + firecrawl-compat stubs. ajv exact-pinned. | 3 个月前 | |
feat(rest): REST foundation module (router/auth/errors/limits/validate/dispatch) New lazy-loaded src/daemon/rest/: complete route table (POST /v1/{10 tools}, GET /v1/tools, GET /openapi.json+alias, /compat/firecrawl hook), two-mode auth (token bearer / open loopback / override), status-mapped error envelope with ssrf-code + search-shape adapters, body caps + deadlines + concurrency slots + param clamp table, lazy-ajv validation, target-guard SSRF seam, search+fetch dispatch (8 stubs → 501), openapi + firecrawl-compat stubs. ajv exact-pinned. | 3 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 6 个月前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 | ||
| 3 个月前 |