Christian Krakau-Louis
1f8a80c125
New translations en.json (Czech)
2026-03-12 23:34:45 +01:00
Christian Krakau-Louis
f78e535cc3
New translations en.json (Catalan)
2026-03-12 23:34:44 +01:00
Christian Krakau-Louis
3abb66659c
New translations en.json (Arabic)
2026-03-12 23:34:43 +01:00
Christian Krakau-Louis
d0f8e21b41
New translations en.json (Afrikaans)
2026-03-12 23:34:42 +01:00
Christian Krakau-Louis
652c1d630b
New translations en.json (Spanish)
2026-03-12 23:34:41 +01:00
Christian Krakau-Louis
f65f1840d5
New translations en.json (French)
2026-03-12 23:34:40 +01:00
Christian Krakau-Louis
ab97c3a7f2
New translations en.json (Romanian)
2026-03-12 23:34:39 +01:00
github-actions[bot]
3201733a50
chore(release): update build metadata files [skip ci]
2026-03-12 22:06:57 +00:00
semantic-release
7cb82bb6ac
0.125.1
...
Automatically generated by python-semantic-release
2026-03-12 22:06:54 +00:00
Christian Krakau-Louis
2c36b7dc95
Merge pull request #609 from christianlouis/copilot/ensure-de-json-translations
...
fix(i18n): sync all translation files to match en.json key set
2026-03-12 23:06:30 +01:00
copilot-swe-agent[bot]
d3349e649e
fix(i18n): sync de.json keys with en.json — add 26 missing keys to en.json and all language files
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 21:57:31 +00:00
copilot-swe-agent[bot]
c9dd5cce11
Initial plan
2026-03-12 21:51:10 +00:00
github-actions[bot]
77f392b29b
chore(release): update build metadata files [skip ci]
2026-03-12 21:44:46 +00:00
semantic-release
4c81b1bd1f
0.125.0
...
Automatically generated by python-semantic-release
2026-03-12 21:44:42 +00:00
Christian Krakau-Louis
4345d5128f
Merge pull request #607 from christianlouis/copilot/add-user-settings-management
...
fix(tests): update whoami_handler call sites to pass required db argument
2026-03-12 22:44:13 +01:00
copilot-swe-agent[bot]
270e1a56b5
fix(tests): pass mock db to whoami_handler in test_api_auth_enabled.py
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 17:03:30 +00:00
copilot-swe-agent[bot]
9583d6d96f
fix(profile): address code review feedback - early size check, CSRF helper, test constants
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 13:10:46 +00:00
github-actions[bot]
01e27ac905
chore(release): update build metadata files [skip ci]
2026-03-12 13:08:52 +00:00
semantic-release
709964b207
0.124.0
...
Automatically generated by python-semantic-release
2026-03-12 13:08:48 +00:00
Christian Krakau-Louis
028f592817
Merge pull request #596 from christianlouis/copilot/refactor-template-localization
...
fix(i18n): wire _ into all Jinja2 instances, sync translation files, fix pipelines.html orphan tag
2026-03-12 14:08:26 +01:00
copilot-swe-agent[bot]
b0d6f1ab60
feat(profile): add user self-service profile settings page and API
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 13:00:19 +00:00
copilot-swe-agent[bot]
b483ed16fc
fix(i18n): register _ in all Jinja2 template instances, sync translation files, fix pipelines.html
...
- Register _() translation function in app/auth.py, app/api/local_auth.py, and
app/api/billing.py template env globals to fix jinja2.exceptions.UndefinedError
- Update test_settings_template_has_db_wizard_link to assert i18n key instead of
literal "DB Wizard" (template now uses {{ _("settings.db_wizard_btn") }})
- Add 418 missing en.json keys to all 30 non-English translation files as English
fallbacks to fix test_all_languages_have_same_keys
- Fix orphan </template> tag in pipelines.html by adding missing
<template x-if="pipelineModal.saving"> opening tag (fixes djlint H025)
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 12:46:11 +00:00
copilot-swe-agent[bot]
13161994da
Initial plan
2026-03-12 12:45:32 +00:00
Christian Krakau-Louis
dd7f7dfd97
Merge branch 'main' into copilot/refactor-template-localization
2026-03-12 12:44:33 +01:00
github-actions[bot]
5a546dc0f1
chore(release): update build metadata files [skip ci]
2026-03-12 11:43:33 +00:00
semantic-release
75b522e36c
0.123.1
...
Automatically generated by python-semantic-release
2026-03-12 11:43:30 +00:00
Christian Krakau-Louis
5d239e904b
Merge pull request #606 from christianlouis/copilot/fix-ruff-not-clearing-main
...
fix(tests): repair two broken tests — missing DB table and MagicMock ip_address
2026-03-12 12:43:08 +01:00
copilot-swe-agent[bot]
cdd1524def
fix(i18n): restore social providers block in login.html, fix escaped quotes
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 11:39:13 +00:00
copilot-swe-agent[bot]
be6b49c872
fix(tests): fix two failing tests - missing DB table and MagicMock IP address
...
- tests/test_database.py: add user_imap_accounts table to the regression
test's initial DB setup (migration 022 creates it before rev 026, so it
must exist for migration 032's ALTER TABLE to succeed)
- tests/test_local_auth.py: configure mock_request.headers.get to return
None and client=None so get_client_ip() returns "unknown" instead of an
un-serialisable MagicMock that broke the audit_logs INSERT in
test_local_login_success and test_local_login_by_email
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 10:49:49 +00:00
copilot-swe-agent[bot]
6de11e25bf
feat(i18n): localize 404, 500, billing_success, about, verify_email_sent templates
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 10:25:34 +00:00
copilot-swe-agent[bot]
8060a79b9c
style: fix ruff formatting in tests/test_imap_profiles.py
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 10:25:32 +00:00
copilot-swe-agent[bot]
bc94825877
Initial plan
2026-03-12 10:24:27 +00:00
github-actions[bot]
d7d0413bc8
chore(release): update build metadata files [skip ci]
2026-03-12 07:54:06 +00:00
semantic-release
d3443b034a
0.123.0
...
Automatically generated by python-semantic-release
2026-03-12 07:54:04 +00:00
Christian Krakau-Louis
7f644a2388
Merge pull request #604 from christianlouis/copilot/configure-attachment-ingestion
...
feat(imap): fine-grained attachment ingestion profiles with per-category selection
2026-03-12 08:53:45 +01:00
github-actions[bot]
338f4fa9bd
chore(release): update build metadata files [skip ci]
2026-03-12 07:51:39 +00:00
semantic-release
44cebeab2a
0.122.0
...
Automatically generated by python-semantic-release
2026-03-12 07:51:35 +00:00
Christian Krakau-Louis
87fca21c7f
Merge pull request #605 from christianlouis/copilot/enable-disable-storage-locations
...
feat(storage): explicit enable/disable flag per global storage destination
2026-03-12 08:51:14 +01:00
copilot-swe-agent[bot]
2e087731b9
fix(imap): address code review feedback on ingestion profiles
...
- Improve warning log in _resolve_categories_for_profile() to include
exception type name for better troubleshooting
- Add SQLAlchemy IS NULL comment to imap_profiles.py filter
- Pass default_categories from server to template to avoid hardcoded
category list in JS (now uses {{ default_categories | tojson }})
- Simplify view profiles query (remove redundant unauthenticated path)
- Update docs: ConfigurationGuide.md and EmailIngestion.md with
full profiles documentation including category table and API reference
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 01:19:32 +00:00
copilot-swe-agent[bot]
c9f554465d
feat(imap): add ImapIngestionProfile model, API, migration and UI
...
Replaces the simple binary attachment_filter string with a full
ingestion profiles system:
- Add FILE_TYPE_CATEGORIES dict to allowed_types.py (6 categories:
pdf, office, opendocument, text, web, images) + DEFAULT_CATEGORIES
/ ALL_CATEGORIES + get_allowed_types_for_categories() helper
- Add ImapIngestionProfile model (id, name, description, owner_id,
allowed_categories JSON, is_builtin)
- Update UserImapAccount: replace attachment_filter string with
profile_id FK to imap_ingestion_profiles
- Migration 033: creates profiles table, seeds 2 built-in profiles
(Documents Only, All Files), migrates attachment_filter → profile_id
- New /api/imap-profiles/ CRUD endpoints (list, create, get, update,
delete) with category validation
- Register imap_profiles router in app/api/__init__.py
- Update imap_tasks.py: replace attachment_filter string param with
profile-based allowed_categories; add _resolve_categories_for_profile()
- Update imap_accounts.py API to use profile_id instead of attachment_filter
- Update imap_accounts view to pass profiles + categories to template
- Full UI overhaul: profiles panel + profile create/edit modal with
category checkboxes; profile selector in account modal
- 17 new tests (141 total), all passing
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 01:14:19 +00:00
copilot-swe-agent[bot]
fd75961580
docs(storage): document explicit enable/disable flags in ConfigurationGuide and .env.demo
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 01:10:31 +00:00
copilot-swe-agent[bot]
b72ab3b318
feat(storage): add explicit enable/disable flag for each global storage destination
...
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 01:04:28 +00:00
copilot-swe-agent[bot]
554bb21d32
feat(imap): add attachment type filter for IMAP ingestion
...
Add a configurable switch to control which attachment types are ingested
via IMAP. Images are excluded by default; office files and PDFs are ingested.
- Add global `IMAP_ATTACHMENT_FILTER` config setting (default: `documents_only`)
- Add `attachment_filter` column to `UserImapAccount` model for per-user override
- Migration 032 adds the column to `user_imap_accounts` table
- Update `fetch_attachments_and_enqueue()` to respect filter (documents_only/all)
- Update `pull_inbox()`, `_pull_user_imap_accounts()`, and
`_pull_user_integration_imap()` to pass the resolved filter
- Update IMAP accounts API (schemas, create/update handlers, response serializer)
- Update IMAP accounts UI to show attachment filter dropdown in modal and
display filter badges on account cards
- Add 6 new tests covering attachment filter behaviour
- Update ConfigurationGuide.md, EmailIngestion.md, and .env.demo
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 00:59:54 +00:00
github-actions[bot]
8898d3ccc8
chore(release): update build metadata files [skip ci]
2026-03-12 00:56:46 +00:00
semantic-release
2c53d1cd4f
0.121.1
...
Automatically generated by python-semantic-release
2026-03-12 00:56:42 +00:00
Christian Krakau-Louis
d8957263ee
Merge pull request #603 from christianlouis/copilot/fix-duplicate-audit-log-menu
...
fix: remove duplicate Audit Logs nav entry and record login/logout events in audit log
2026-03-12 01:56:21 +01:00
github-actions[bot]
50ef607293
docs(changelog): update changelog [skip ci]
2026-03-12 00:56:10 +00:00
Christian Krakau-Louis
14b892b6d4
Merge pull request #601 from christianlouis/copilot/improve-code-test-coverage
...
test: improve coverage for app/utils/user_notification.py from ~50% to 100%
2026-03-12 01:55:49 +01:00
copilot-swe-agent[bot]
78204c2490
test(notifications): improve coverage for user_notification.py to 100%
...
Add 22 new unit tests in tests/test_user_notification_service.py covering
all previously-uncovered branches in app/utils/user_notification.py:
- create_in_app_notification: exception/rollback path
- _send_email_notification: SMTP success (TLS+creds, no-TLS, no-creds),
SMTP exception, sender_email fallbacks
- _send_webhook_notification: success with/without secret, HTTP errors
- dispatch_user_notification: email/webhook pref dispatch, no target_id
skip, inactive target skip, invalid JSON config, null config, outer
exception handling, push notification sent/exception, unknown channel_type
Combined coverage: 49.52% → 100%
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com >
2026-03-12 00:44:59 +00:00
github-actions[bot]
7fb534954e
chore(release): update build metadata files [skip ci]
2026-03-12 00:40:23 +00:00