7582 Commits

Author SHA1 Message Date
Ehsan 10bacd499f fix(metrics): persist the provider-reported total token count (#5623) 2026-08-22 10:57:10 +02:00
Atirna c38d50daea fix(settings): validate imported values (#5597)
* fix(settings): validate imported values

* test(settings): derive import validation expectations from shipped schema

Hardcoded literals broke when a key's max was null or the default
moved off "all". Read min/max and the current default from the
loaded schema so the bounds branch still has coverage.

* style(settings): apply ruff formatting

Signed-off-by: Atirna <288419661+atirna@users.noreply.github.com>

---------

Signed-off-by: Atirna <288419661+atirna@users.noreply.github.com>
Co-authored-by: LearningCircuit <185559241+LearningCircuit@users.noreply.github.com>
2026-08-22 09:28:36 +02:00
Chanhyo Jung 2b39a8d000 test(library-deletion): harden lock and race-log contracts (#5639) 2026-08-22 07:55:07 +02:00
Ehsan cc4b30be82 fix(searxng): skip in-use locks when the rate-limit tracker evicts at capacity (#5607)
* fix(searxng): skip in-use locks when the rate-limit tracker evicts at capacity

* docs(searxng): note the residual fetch-then-acquire eviction window

_get_url_lock returns the lock under _meta_lock and respect_rate_limit
acquires it afterwards, so a lock reports locked() == False between those
two steps and stays evictable. Record that the locked() check does not
cover that window, and why closing it would mean holding _meta_lock
across time.sleep.

---------

Co-authored-by: LearningCircuit <185559241+LearningCircuit@users.noreply.github.com>
2026-08-21 17:02:05 +02:00
github-actions[bot] d522ebb1e2 🤖 Update dependencies (#5640)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-21 12:10:27 +02:00
github-actions[bot] bedd2f1ae6 🤖 Update dependencies (#5641)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.co
2026-08-21 12:00:53 +02:00
github-actions[bot] 3a4c620d46 🤖 Update dependencies (#5642)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-21 11:59:38 +02:00
dependabot[bot] e462418881 chore(deps): bump puppeteer from 25.7.0 to 25.8.0 in /tests/ui_tests (#5652)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.7.0 to 25.8.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.7.0...puppeteer-v25.8.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-21 11:50:47 +02:00
dependabot[bot] 6c4db232c1 chore(deps-dev): bump puppeteer in /tests/api_tests_with_login (#5653)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.7.0 to 25.8.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.7.0...puppeteer-v25.8.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-21 11:48:20 +02:00
dependabot[bot] 7d8c1fbdd2 chore(deps): bump puppeteer from 25.7.0 to 25.8.0 in /tests (#5651)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.7.0 to 25.8.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.7.0...puppeteer-v25.8.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-21 11:45:31 +02:00
dependabot[bot] 055a3b2707 chore(deps): bump puppeteer from 25.7.0 to 25.8.0 in /tests/puppeteer (#5650)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.7.0 to 25.8.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.7.0...puppeteer-v25.8.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-21 11:44:36 +02:00
github-actions[bot] 956f4f99c5 🤖 Update dependencies (#5643)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-20 21:53:39 +02:00
github-actions[bot] 9a4945fde6 🤖 Update dependencies (#5644)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-20 21:52:58 +02:00
github-actions[bot] aa30afed0f 🤖 Update dependencies (#5635)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-20 20:19:27 +02:00
dependabot[bot] c80d325ec7 chore(deps-dev): bump puppeteer in /tests/api_tests_with_login (#5611)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.6.0 to 25.7.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.6.0...puppeteer-v25.7.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 20:17:39 +02:00
dependabot[bot] 1f157f8f75 chore(deps): bump step-security/harden-runner from 2.20.1 to 2.21.0 (#5615)
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.20.1 to 2.21.0.
- [Release notes](https://github.com/step-security/harden-runner/releases)
- [Commits](https://github.com/step-security/harden-runner/compare/b09bb98e06d4d774595224525879c09bc6e98c40...05e31511f85b41b11d1cf0ef85d0992719546e2c)

---
updated-dependencies:
- dependency-name: step-security/harden-runner
  dependency-version: 2.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: LearningCircuit <185559241+LearningCircuit@users.noreply.github.com>
2026-08-17 19:43:28 +02:00
dependabot[bot] 54da9c04c5 chore(deps): bump puppeteer from 25.5.0 to 25.7.0 in /tests/ui_tests (#5610)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.5.0 to 25.7.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.5.0...puppeteer-v25.7.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 18:29:55 +02:00
dependabot[bot] b64bdfe1f8 chore(deps): bump puppeteer from 25.5.0 to 25.7.0 in /tests/puppeteer (#5608)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.5.0 to 25.7.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.5.0...puppeteer-v25.7.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 18:25:23 +02:00
dependabot[bot] fa14cfd925 chore(deps): bump puppeteer from 25.6.0 to 25.7.0 in /tests (#5609)
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 25.6.0 to 25.7.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.6.0...puppeteer-v25.7.0)

---
updated-dependencies:
- dependency-name: puppeteer
  dependency-version: 25.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 18:22:13 +02:00
dependabot[bot] fbddec70ba chore(deps): bump the codeql-action group with 3 updates (#5613)
Bumps the codeql-action group with 3 updates: [github/codeql-action/upload-sarif](https://github.com/github/codeql-action), [github/codeql-action/init](https://github.com/github/codeql-action) and [github/codeql-action/analyze](https://github.com/github/codeql-action).


Updates `github/codeql-action/upload-sarif` from 4.37.6 to 4.37.7
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/5595ccaf912efad79be6eef63a5619ff05969be3...ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd)

Updates `github/codeql-action/init` from 4.37.6 to 4.37.7
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/5595ccaf912efad79be6eef63a5619ff05969be3...ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd)

Updates `github/codeql-action/analyze` from 4.37.6 to 4.37.7
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/5595ccaf912efad79be6eef63a5619ff05969be3...ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd)

---
updated-dependencies:
- dependency-name: github/codeql-action/upload-sarif
  dependency-version: 4.37.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/init
  dependency-version: 4.37.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
- dependency-name: github/codeql-action/analyze
  dependency-version: 4.37.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: codeql-action
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 18:21:10 +02:00
dependabot[bot] 8a2d35fb74 chore(deps): bump pdm-project/setup-pdm from 4.5 to 4.6 (#5614)
Bumps [pdm-project/setup-pdm](https://github.com/pdm-project/setup-pdm) from 4.5 to 4.6.
- [Release notes](https://github.com/pdm-project/setup-pdm/releases)
- [Commits](https://github.com/pdm-project/setup-pdm/compare/973541a5febeafcfdadf8a51211435be6ecfd90f...544d7237314ee09c256785bd360f6b30add38b37)

---
updated-dependencies:
- dependency-name: pdm-project/setup-pdm
  dependency-version: '4.6'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 18:19:39 +02:00
github-actions[bot] 28168963d7 chore: clear changelog fragments for 1.10.5 (#5606) 2026-08-16 20:49:41 +02:00
github-actions[bot] 02b48f0493 chore: auto-bump version to 1.10.5 (#5605) v1.10.5 2026-08-16 18:07:16 +02:00
LearningCircuit 8ade42367a feat(egress): per-origin private engine-URL allowlist, misconfiguration banners, and docs for the v1.10.3 SearXNG guard (#5604) 2026-08-16 17:53:00 +02:00
LearningCircuit 10f0964ae4 fix(security): resolve DevSkim code-scanning alerts (3 false positives + 1 TLS note) (#5599)
- test_notification_webhook_dns_pin.py: use ssl.create_default_context(
  ssl.Purpose.CLIENT_AUTH) for the test HTTPS server instead of a hard-coded
  ssl.PROTOCOL_TLS_SERVER (DS440072).
- test_password_verifier_primitive.py: suppress DS101155 on a test whose name
  contains 'trusted' — it has no TLS/certificate code; the rule matched the word.
- ai-code-reviewer.yml: suppress DS173237 on the pinned reviewer commit SHA and
  its integrity SHA-256 checksum — public integrity constants, not secrets.
2026-08-16 16:20:56 +02:00
github-actions[bot] cc623a579a chore: clear changelog fragments for 1.10.4 (#5601) 2026-08-16 16:09:04 +02:00
github-actions[bot] ccf9b86d16 chore: auto-bump version to 1.10.4 (#5593) v1.10.4 2026-08-16 13:13:03 +02:00
LearningCircuit 5f29e62916 fix(security): verify the password on a cached database connection (#5596) 2026-08-16 12:53:28 +02:00
github-actions[bot] 32db3e115a chore: clear changelog fragments for 1.10.3 (#5598) 2026-08-16 11:44:25 +02:00
LearningCircuit 72f36e743c chore(test): correct latent unprotected palette entry and document same-value select dependency (#5595)
Follow-ups from the #5592 review:

- SCOPE_PALETTE.unprotected claimed a red card border, but base.html
  deliberately applies no card accent for that scope (the red cue is on
  .ldr-privacy-panel[data-scope=unprotected]). The value was copied from
  the panel border and would make a future selectScope('unprotected')
  hang until the 10s waitForFunction timeout. Entry is dead code today
  (test 2 asserts the option is absent), so no behavior change.
- Document that same-value selectScope calls rely on Puppeteer
  dispatching change unconditionally plus the app handler saving on
  every change; a no-op guard in either would time out the PUT barrier.
2026-08-16 09:44:46 +02:00
Ziyang Guo cf2c072a0b fix(notifications): parse service URL boundaries safely (#5394)
Preserve embedded commas without relying on Apprise internal parser APIs, and reject scheme-less boundary fragments before subset dispatch.

Keep snapshot-less egress filtering backward compatible and record only redacted fragment context in audit logs.

Fixes #5135
2026-08-16 00:00:01 +02:00
LearningCircuit 73f2680beb fix(test): await egress scope save before navigation (#5592) v1.10.3 2026-08-15 23:53:22 +02:00
LearningCircuit 34756532ae harden(notifications): pin resolved IPs and block private resolution for the Apprise send (#5575) 2026-08-15 16:02:09 +02:00
github-actions[bot] aa95e7b7db chore: auto-bump version to 1.10.3 (#5458) 2026-08-15 12:38:39 +02:00
LearningCircuit 4a5f46d3e1 security(ci): pin ai-reviewer script to commit SHA with SHA-256 verification (#5553)
Replace the mutable @main ref with an immutable commit SHA (e7fe618a,
Friendly-AI-Reviewer v0.0.1) and verify the SHA-256 checksum before
execution. This closes a supply-chain gap where a compromised scoped
credential on Friendly-AI-Reviewer, or an accidental upstream change,
would execute arbitrary code with GITHUB_TOKEN and OPENROUTER_API_KEY
in CI.

Using commit SHA instead of tag because tags can be deleted or
force-moved — only commits are permanent in Git.

To update the reviewer script:
1. Cut a new release on Friendly-AI-Reviewer
2. Update REVIEWER_COMMIT and REVIEWER_SHA256 in this workflow
3. Commit
2026-08-15 11:40:41 +02:00
Ziyang Guo da057e15e2 test(connected): detect active research leaks (#5482) 2026-08-15 11:16:12 +02:00
Ziyang Guo 64341e3f1b fix(journals): parse list-form reputation responses (#5460)
Refs #5411
2026-08-15 11:10:50 +02:00
Ziyang Guo 8a0fede61b test(search): cover cross-collection dedup tiebreak (#5557)
Pin that semantic search sorts by full-precision similarity before deduplicating the same document across collections.

Refs #5515
2026-08-15 11:09:19 +02:00
Ziyang Guo e5b2eef2b2 fix(collections): validate identity field types (#5459)
Closes #5412
2026-08-15 11:08:12 +02:00
LearningCircuit 1340381c82 fix(search): honor search.time_period in Tavily; default to "all" (#4936) (#4978) 2026-08-15 09:42:40 +02:00
LearningCircuit 2a2d127b86 chore(rag): follow-up nits from ORM typing review (#5329) (#5586)
- assert the constructed index status is RAGIndexStatus.ACTIVE, not just
  that it is some RAGIndexStatus member (REBUILDING would have passed)
- drop the last cast(int, ...) on RAGIndex.id, obsolete since the model
  moved to Mapped[int] in #5329 (same rationale as the legacy_rekey
  casts removed there)
2026-08-15 09:13:59 +02:00
Ehsan 2d30607be9 fix(questions): handle list-form LLM content in question generation and evidence extraction (#5559)
Eight call sites across the question-generation family and the evidence
evaluator read response.content directly and then apply string methods to it.
When a provider returns .content as a list of blocks (Anthropic extended
thinking or tool use) each raises AttributeError:

- standard_question.py:46 and :100 (.split / .strip().split)
- atomic_fact_question.py:84 and :154 (.strip().split)
- browsecomp_question.py:98 and :284 (.strip().split)
- flexible_browsecomp_question.py:63 (.strip().split)
- evidence/evaluator.py:61, via _parse_evidence_response (.strip().split)

StandardQuestionGenerator is the default question generator, so this fails the
main research loop on every iteration rather than only an exotic strategy.

Route all eight through get_llm_response_text, which extracts the text from the
blocks. This is the same routing #4644 applied to decomposition_question.py and
#5422 applied to news, GitHub search and topic organisation.

Refs #4615
2026-08-15 08:20:32 +02:00
LearningCircuit 99c07fe97f harden(socket): re-validate session after room join to close connect/teardown race (#5572) 2026-08-14 21:58:02 +02:00
LearningCircuit fbefcca783 harden(session): move logging outside SessionManager._lock to avoid re-entrancy (#5571) 2026-08-14 21:43:00 +02:00
LearningCircuit 6eb1b7ad9c chore(test-tooling): enforce Node engines floor via engine-strict npmrc (#5573)
Add an engine-strict .npmrc under tests/accessibility_tests/ so the
existing engines.node >=22.19 floor fails fast instead of only warning.
Whitelist and un-ignore the new dot-config file per the repo conventions.
2026-08-14 21:37:02 +02:00
LearningCircuit fb8e03fd2c fix(egress): follow-up nits from searxng egress guard review (#5574) 2026-08-14 21:35:11 +02:00
LearningCircuit a961ce5760 harden(search): validate engine instance URLs against egress scope (#5560) 2026-08-14 20:57:14 +02:00
LearningCircuit 778688295e fix(security): disconnect sockets and drop subscriptions on logout (#5535) 2026-08-14 20:33:37 +02:00
LearningCircuit fb49985aa8 fix(security): gate unencrypted filesystem PDF storage behind an operator setting (#5537) 2026-08-14 20:28:27 +02:00
LearningCircuit 4dbf31567c fix(security): remove vulnerable extract-zip dependency (#5569) 2026-08-14 20:22:53 +02:00