Commit Graph
15901 Commits
Author SHA1 Message Date
kolaente 0c7d32878c feat(projects): add project overview filters 2026-10-01 12:13:22 +02:00
Frederick [Bot] d6bb209512 [skip ci] Updated swagger docs 2026-09-30 09:09:47 +00:00
kolaenteandTink 5e1b48b297 docs(agents): describe the generated-client frontend conventions 2026-09-30 10:42:35 +02:00
kolaenteandTink e2f32c0b32 refactor(client): delete shared legacy infrastructure and Axios 2026-09-30 10:42:35 +02:00
kolaenteandTink 117f8be24e refactor(client): store the API base suffix-less and canonicalize v2 URLs 2026-09-30 10:42:35 +02:00
kolaenteandTink 00bec738fe refactor(client): move URL imports off the fetcher (mechanical)
Exact script:

python - <<'PY'
from pathlib import Path
for p in Path('frontend/src').rglob('*'):
 if p.suffix not in ('.ts','.vue'): continue
 s=p.read_text()
 if '@/helpers/fetcher' not in s: continue
 # Old factory mocks have no consumers left.
 if p.name in ('auth.renewToken.test.ts','auth.refreshUserInfo.test.ts','auth.linkShare.test.ts','base.test.ts'):
  a=s.index('function fakeHttp()');b=s.index('\n}\n',a)+3;s=s[:a]+s[b:]
  a=s.index("vi.mock('@/helpers/fetcher'");b=s.index('\n}))',a)+4;s=s[:a]+s[b:]
 elif p.name in ('App.test.ts','General.test.ts'):
  a=s.index("vi.mock('@/helpers/fetcher'");b=s.index('\n})',a)+3;s=s[:a]+s[b:]
 elif p.name=='auth.test.ts':
  s=s.replace("\n\tgetApiBaseUrl: () => '/api/v1/',",'').replace('\n\tHTTPFactory: () => ({post}),','')
 s=s.replace('@/helpers/fetcher','@/helpers/apiUrl').replace('getApiV2BaseUrl','getApiBaseUrl')
 s=s.replace('getApiBaseUrl, getApiBaseUrl','getApiBaseUrl')
 p.write_text(s)
PY
2026-09-30 10:42:35 +02:00
kolaenteandTink c189fc0d4d test(client): pin v2 URL upgrade and native request errors 2026-09-30 10:42:35 +02:00
kolaenteandTink 570e8b9a29 refactor(migrators): remove legacy migration services 2026-09-30 10:42:35 +02:00
kolaenteandTink 16fd30d2a6 refactor(migrators): subscribe views and background polling to v2 queries 2026-09-30 10:42:35 +02:00
kolaenteandTink 570f7499ff refactor(migrators): use generated credential body (mechanical)
Replace MigrationConfig with MigrationCredentialsBodyWritable and change the import from the deleted migration service to @/client/generated. No field or behavior changes.
2026-09-30 10:42:35 +02:00
kolaenteandTink bd442174dc refactor(migrators): add generated provider operations and status queries 2026-09-30 10:42:35 +02:00
kolaenteandTink b6c1ea8b86 test(migrators): cover cached progress and persistent CSV imports 2026-09-30 10:42:35 +02:00
kolaenteandTink e35a81286d refactor(admin): remove legacy resource stacks 2026-09-30 10:42:35 +02:00
kolaenteandTink e00b095080 refactor(admin): use query subscriptions for admin pages 2026-09-30 10:42:35 +02:00
kolaenteandTink f2877c1e25 refactor(admin): rename wire fields (mechanical)
Reproduce from repository root:

python3 - <<'PY'
from pathlib import Path
import re
p=Path('frontend/src/views/admin/UsersView.vue');s=p.read_text()
for old,new in [('isAdmin','is_admin'),('authProvider','auth_provider'),('skipEmailConfirm','skip_email_confirm')]:
 for root in ['u.','u?.','detailTarget.','detailTarget.value.','editable.','createForm.','body.','target.']:
  s=s.replace(root+old,root+new)
 s=re.sub(r'\b'+old+r'(?=:)',new,s)
p.write_text(s)
p=Path('frontend/src/views/admin/OverviewView.vue');s=p.read_text()
for old,new in [('linkShares','link_shares'),('teamShares','team_shares'),('userShares','user_shares'),('expiresAt','expires_at'),('validatedAt','validated_at'),('lastCheckFailed','last_check_failed'),('instanceId','instance_id')]:
 s=re.sub(r'\b'+old+r'\b',new,s)
p.write_text(s)
PY
2026-09-30 10:42:35 +02:00
kolaenteandTink b730b81cf3 refactor(admin): add generated queries and scoped mutation callbacks 2026-09-30 10:42:35 +02:00
kolaenteandTink 9122caf951 test(admin): cover mutation invalidation and runtime license gating 2026-09-30 10:42:35 +02:00
kolaenteandTink 3878caad4d refactor(webhooks): remove legacy resource stack 2026-09-30 10:42:35 +02:00
kolaenteandTink 8e8b9d9f1e refactor(webhooks): share query-backed subscription management 2026-09-30 10:42:35 +02:00
kolaenteandTink 930efd23e9 refactor(webhooks): rename wire fields (mechanical)
Reproduce from repository root:

python3 - <<'PY'
from pathlib import Path
p=Path('frontend/src/components/misc/WebhookManager.vue');s=p.read_text()
for old,new in [('targetUrl','target_url'),('basicAuthUser','basic_auth_user'),('basicAuthPassword','basic_auth_password'),('createdBy','created_by')]:
 for root in ['newWebhook.value.','newWebhook.','w.']:
  s=s.replace(root+old,root+new)
p.write_text(s)
PY
2026-09-30 10:42:35 +02:00
kolaenteandTink 3a46102399 refactor(webhooks): add scoped v2 queries and mutations 2026-09-30 10:42:35 +02:00
kolaenteandTink 434129bb80 test(webhooks): verify scoped cache and stored subscriptions 2026-09-30 10:42:35 +02:00
kolaenteandTink 94791debe4 fix(bots): allow owners to manage disabled bots 2026-09-30 10:42:35 +02:00
kolaenteandTink 1f8a45f6a3 test(bots): reproduce disabled bot management failures 2026-09-30 10:42:35 +02:00
kolaenteandTink ffc3186d64 refactor(bots): delete legacy service 2026-09-30 10:42:35 +02:00
kolaenteandTink c3c049bcac refactor(bots): subscribe settings to v2 query cache 2026-09-30 10:42:35 +02:00
kolaenteandTink 817a76b033 refactor(bots): add generated resource queries and mutations 2026-09-30 10:42:35 +02:00
kolaenteandTink 2dae9c44a6 test(bots): cover management persistence and token cache eviction 2026-09-30 10:42:35 +02:00
kolaenteandTink 2e8a337b2f refactor(api-tokens): delete legacy resource stack 2026-09-30 10:42:35 +02:00
kolaenteandTink 09ed43c776 refactor(api-tokens): share cached lists across settings consumers 2026-09-30 10:42:35 +02:00
kolaenteandTink a4a59384fa refactor(api-tokens): use generated fields and types (mechanical)
Reproduce from repository root:

python3 - <<'PY'
from pathlib import Path
paths=[Path('frontend/src/components/token/ApiTokenForm.vue'), *Path('frontend/src/views/user/settings').glob('*.vue')]
for p in paths:
 s=p.read_text()
 if "@/modelTypes/IApiToken" not in s: continue
 s=s.replace("import type {IApiToken} from '@/modelTypes/IApiToken'", "import type {ApiToken as IApiToken} from '@/client/generated'")
 s=s.replace("import type {IApiToken, IApiPermission} from '@/modelTypes/IApiToken'", "import type {ApiToken as IApiToken} from '@/client/generated'\ntype IApiPermission = NonNullable<IApiToken['permissions']>")
 s=s.replace("@/modelTypes/IApiTokenSettings", "@/helpers/apiToken")
 for root in ['tk', 'token', 'newToken.value']:
  s=s.replace(root+'.expiresAt',root+'.expires_at')
 s=s.replace('(newToken.value as IApiToken & {ownerId: number}).ownerId', '(newToken.value as IApiToken & {owner_id: number}).owner_id')
 p.write_text(s)
p=Path('frontend/src/views/user/settings/Mcp.test.ts');p.write_text(p.read_text().replace('@/modelTypes/IApiTokenSettings','@/helpers/apiToken'))
PY
2026-09-30 10:42:35 +02:00
kolaenteandTink b4aeb2c12b refactor(api-tokens): add generated queries and mutations 2026-09-30 10:42:35 +02:00
kolaenteandTink 4144021bf6 test(api-tokens): verify scoped token persistence and revocation 2026-09-30 10:42:35 +02:00
kolaenteandTink 2b2b7dbb06 refactor(notifications): remove legacy resource stack 2026-09-30 10:42:35 +02:00
kolaenteandTink 93096ad30f refactor(notifications): subscribe inbox to query cache 2026-09-30 10:42:35 +02:00
kolaenteandTink 69b4dbbcc2 refactor(notifications): rename read timestamp (mechanical)
Script: replace 'n.readAt' with 'n.read_at' in frontend/src/components/notifications/Notifications.vue.
2026-09-30 10:42:35 +02:00
kolaenteandTink e04a2898e1 refactor(notifications): add generated queries and display helpers 2026-09-30 10:42:35 +02:00
kolaenteandTink 0e0710d0c6 test(notifications): cover inbox persistence and cache events 2026-09-30 10:42:35 +02:00
kolaenteandTink 26e5899798 refactor(deletion): delete the legacy account service 2026-09-30 10:42:35 +02:00
kolaenteandTink ed6992129c refactor(deletion): reconcile scheduled deletion through queries 2026-09-30 10:42:35 +02:00
kolaenteandTink 5b4f88ce40 refactor(deletion): add generated account lifecycle mutations 2026-09-30 10:42:35 +02:00
kolaenteandTink 8701034b60 test(deletion): verify confirmation links and durable cancellation 2026-09-30 10:42:35 +02:00
kolaenteandTink d9bae609d1 refactor(export): delete the legacy export service 2026-09-30 10:42:34 +02:00
kolaenteandTink 3e8c2b92cd refactor(export): query status and download through generated actions 2026-09-30 10:42:34 +02:00
kolaenteandTink 561e013dad refactor(export): add metadata query and generated actions 2026-09-30 10:42:34 +02:00
kolaenteandTink 6690a0a8ef test(export): verify metadata invalidation and ZIP downloads 2026-09-30 10:42:34 +02:00
kolaenteandTink 723d8cbda8 refactor(caldav): delete the legacy token stack 2026-09-30 10:42:34 +02:00
kolaenteandTink 893915bb58 refactor(caldav): subscribe to tokens and scope creation secrets 2026-09-30 10:42:34 +02:00
kolaenteandTink 7d532fa9e2 refactor(caldav): switch token types (mechanical)
Replace the ICalDavToken import with generated Token and rename ICalDavToken references.
2026-09-30 10:42:34 +02:00
kolaenteandTink 7ce8ece668 refactor(caldav): add token queries and generated mutations 2026-09-30 10:42:34 +02:00