feat(sync): add sync subsystem: SyncManager, OpsServer sync handlers, Sync UI and state, provider groupFilter support, and realtime sync log streaming via TypedSocket

This commit is contained in:
2026-02-28 16:33:53 +00:00
parent 2f050744bc
commit f7e16aa350
30 changed files with 2983 additions and 21 deletions

View File

@@ -62,6 +62,7 @@ export class GitopsViewConnections extends DeesElement {
Name: item.name,
Type: item.providerType,
URL: item.baseUrl,
'Group Filter': item.groupFilter || '-',
Status: item.status,
Created: new Date(item.createdAt).toLocaleDateString(),
})}
@@ -164,6 +165,9 @@ export class GitopsViewConnections extends DeesElement {
<div class="form-row">
<dees-input-text .label=${'API Token (leave empty to keep current)'} .key=${'token'} type="password"></dees-input-text>
</div>
<div class="form-row">
<dees-input-text .label=${'Group Filter (optional)'} .key=${'groupFilter'} .value=${item.groupFilter || ''} .description=${'Restricts which repos this connection can see (e.g. an org name or GitLab group path). Does not affect where synced repos are placed.'}></dees-input-text>
</div>
`,
menuOptions: [
{ name: 'Cancel', action: async (modal: any) => { modal.destroy(); } },
@@ -181,6 +185,7 @@ export class GitopsViewConnections extends DeesElement {
connectionId: item.id,
name: data.name,
baseUrl: data.baseUrl,
groupFilter: data.groupFilter,
...(data.token ? { token: data.token } : {}),
},
);
@@ -218,6 +223,9 @@ export class GitopsViewConnections extends DeesElement {
<div class="form-row">
<dees-input-text .label=${'API Token'} .key=${'token'} type="password"></dees-input-text>
</div>
<div class="form-row">
<dees-input-text .label=${'Group Filter (optional)'} .key=${'groupFilter'} .description=${'Restricts which repos this connection can see (e.g. an org name or GitLab group path). Does not affect where synced repos are placed.'}></dees-input-text>
</div>
`,
menuOptions: [
{ name: 'Cancel', action: async (modal: any) => { modal.destroy(); } },
@@ -240,6 +248,7 @@ export class GitopsViewConnections extends DeesElement {
providerType: data.providerType,
baseUrl: data.baseUrl,
token: data.token,
groupFilter: data.groupFilter || undefined,
},
);
modal.destroy();