User Request
Add all proto definitions needed for the Port Exposure feature. This is the foundation that all other implementation streams depend on.
Specification
New files
1. proto/agynio/api/expose/v1/expose.proto
- New
ExposeService with RPCs: AddExposure, RemoveExposure, ListExposures
Exposure resource with fields: id (via EntityMeta), workload_id, agent_id, port, openziti_service_id, openziti_bind_policy_id, openziti_dial_policy_id, url, status
ExposureStatus enum: UNSPECIFIED, PROVISIONING, ACTIVE, FAILED, REMOVING
- Pagination on ListExposures (page_size, page_token)
2. proto/agynio/api/gateway/v1/expose.proto
- New
ExposeGateway service with same 3 RPCs, importing and reusing types from expose/v1
Modified files
3. proto/agynio/api/ziti_management/v1/ziti_management.proto
- Add 5 new RPCs:
CreateServicePolicy, DeleteServicePolicy, DeleteService, CreateDeviceIdentity, DeleteDeviceIdentity
- Add
ServicePolicyType enum (UNSPECIFIED, BIND, DIAL)
- Add config messages:
HostV1Config, InterceptV1Config, PortRange
- Extend
CreateServiceRequest with optional host_v1_config (field 3) and intercept_v1_config (field 4)
- Add all corresponding request/response messages
4. proto/agynio/api/users/v1/users.proto
- Add
DeviceStatus enum (UNSPECIFIED, PENDING, ENROLLED)
- Add
Device message (meta, user_identity_id, name, openziti_identity_id, status)
- Add 3 RPCs to
UsersService: CreateDevice, ListDevices, DeleteDevice
CreateDeviceResponse includes enrollment_jwt
5. proto/agynio/api/gateway/v1/users.proto
- Add 3 RPCs to
UsersGateway: CreateDevice, ListDevices, DeleteDevice
Conventions
- Follow existing patterns: EntityMeta, ENUM_PREFIX naming, package
agynio.api.<service>.v1, Go package format
- Gateway protos import from internal protos — never duplicate messages
- Must pass
buf lint and buf breaking --against main
Architecture references
agynio/architecture: changes/2025-07-25-port-exposure.md, architecture/expose-service.md, architecture/users.md#devices, architecture/openziti.md, architecture/gateway.md
User Request
Add all proto definitions needed for the Port Exposure feature. This is the foundation that all other implementation streams depend on.
Specification
New files
1.
proto/agynio/api/expose/v1/expose.protoExposeServicewith RPCs:AddExposure,RemoveExposure,ListExposuresExposureresource with fields: id (via EntityMeta), workload_id, agent_id, port, openziti_service_id, openziti_bind_policy_id, openziti_dial_policy_id, url, statusExposureStatusenum: UNSPECIFIED, PROVISIONING, ACTIVE, FAILED, REMOVING2.
proto/agynio/api/gateway/v1/expose.protoExposeGatewayservice with same 3 RPCs, importing and reusing types fromexpose/v1Modified files
3.
proto/agynio/api/ziti_management/v1/ziti_management.protoCreateServicePolicy,DeleteServicePolicy,DeleteService,CreateDeviceIdentity,DeleteDeviceIdentityServicePolicyTypeenum (UNSPECIFIED, BIND, DIAL)HostV1Config,InterceptV1Config,PortRangeCreateServiceRequestwith optionalhost_v1_config(field 3) andintercept_v1_config(field 4)4.
proto/agynio/api/users/v1/users.protoDeviceStatusenum (UNSPECIFIED, PENDING, ENROLLED)Devicemessage (meta, user_identity_id, name, openziti_identity_id, status)UsersService:CreateDevice,ListDevices,DeleteDeviceCreateDeviceResponseincludesenrollment_jwt5.
proto/agynio/api/gateway/v1/users.protoUsersGateway:CreateDevice,ListDevices,DeleteDeviceConventions
agynio.api.<service>.v1, Go package formatbuf lintandbuf breaking --against mainArchitecture references
agynio/architecture:changes/2025-07-25-port-exposure.md,architecture/expose-service.md,architecture/users.md#devices,architecture/openziti.md,architecture/gateway.md