Complete roadmap optionals: Holesail, Swarm UI, GitOps, virtualization.
CI / test (push) Successful in 9m58s

Add tunnel persistence and container one-click tunnels with local
Holesail client bind, Swarm services/nodes/tasks view, GitOps stack
sync from git, deploy wizard step chrome, virtualized container lists,
and structure regression tests. Mark Tracks A–D and optional future done.
This commit is contained in:
2026-07-10 22:53:30 -04:00
parent 573298b836
commit 02f25e0981
26 changed files with 2458 additions and 121 deletions
+15
View File
@@ -73,6 +73,10 @@ export const MethodRoles = Object.freeze({
suggestResourceName: Roles.viewer,
suggestFromImage: Roles.viewer,
suggestDefaults: Roles.viewer,
// Holesail tunnels (gated by ENABLE_HOLESAIL)
listTunnels: Roles.viewer,
getTunnel: Roles.viewer,
getHolesailStatus: Roles.viewer,
// operator
startContainer: Roles.operator,
@@ -107,7 +111,10 @@ export const MethodRoles = Object.freeze({
connectNetwork: Roles.operator,
disconnectNetwork: Roles.operator,
deployContainer: Roles.operator,
createTunnel: Roles.operator,
closeTunnel: Roles.operator,
deployStack: Roles.operator,
syncStackFromGit: Roles.operator,
browseDirectory: Roles.operator,
waitContainer: Roles.operator,
stackPull: Roles.operator,
@@ -256,6 +263,7 @@ export const Methods = Object.freeze({
stackPs: 'stackPs',
stackLogs: 'stackLogs',
stackPull: 'stackPull',
syncStackFromGit: 'syncStackFromGit',
// System / host
getSystemInfo: 'getSystemInfo',
@@ -345,6 +353,13 @@ export const Methods = Object.freeze({
removePlugin: 'removePlugin',
inspectPlugin: 'inspectPlugin',
configurePlugin: 'configurePlugin',
// Holesail tunnels (gated by ENABLE_HOLESAIL)
listTunnels: 'listTunnels',
getTunnel: 'getTunnel',
createTunnel: 'createTunnel',
closeTunnel: 'closeTunnel',
getHolesailStatus: 'getHolesailStatus',
})
/**