Skip to content

Add Workspace CRUD client (7 RPCs) #32

Closed

Description

@rhuss

Proto Gap: Workspace Management

The upstream proto (openshell.proto lines 253-275) defines 7 workspace RPCs with no SDK implementation.

RPCs to implement

RPC Request/Response
CreateWorkspace CreateWorkspaceRequest / CreateWorkspaceResponse
GetWorkspace GetWorkspaceRequest / GetWorkspaceResponse
ListWorkspaces ListWorkspacesRequest / ListWorkspacesResponse
DeleteWorkspace DeleteWorkspaceRequest / DeleteWorkspaceResponse
AddWorkspaceMember AddWorkspaceMemberRequest / AddWorkspaceMemberResponse
RemoveWorkspaceMember RemoveWorkspaceMemberRequest / RemoveWorkspaceMemberResponse
ListWorkspaceMembers ListWorkspaceMembersRequest / ListWorkspaceMembersResponse

Proto types to map to SDK domain types

  • Workspace (in datamodel.proto): ObjectMeta + WorkspaceStatus
  • WorkspaceStatus: phase (WorkspacePhase enum) + conditions
  • WorkspacePhase enum: WORKSPACE_PHASE_UNSPECIFIED, WORKSPACE_PHASE_ACTIVE, WORKSPACE_PHASE_TERMINATING
  • WorkspaceMember: user_id, role (WorkspaceRole enum), added_at_ms
  • WorkspaceRole enum: WORKSPACE_ROLE_UNSPECIFIED, WORKSPACE_ROLE_ADMIN, WORKSPACE_ROLE_MEMBER, WORKSPACE_ROLE_VIEWER

Implementation scope

  • Add WorkspaceInterface to ClientInterface in client.go
  • Create domain types in types/workspace.go
  • Create workspace_client.go with gRPC client
  • Create converters in internal/converter/workspace.go
  • Add coverage tests for workspace proto messages
  • Add fake implementation in fake/workspace.go
  • Unit tests for client, converter, and fake

Target drop

Drop C (Provider + Profile + Config + Refresh + Workspace)

References

  • Upstream proto: proto/openshell.proto lines 253-275
  • Feature commit: NVIDIA/OpenShell@5952a5a2 feat(workspace): add workspace resource model

Activity

  1. added
    proto-gapProto API surface not yet covered by SDK
    drop-cTarget: Drop C (Provider + Workspace)
    on Jul 29, 2026
  2. rhuss commented on Jul 29, 2026

    @rhuss
    OwnerAuthor

    Implementation Hints

    This issue deserves a full spec (new sub-client, 7 RPCs, cross-cutting types).

    Setup spex (if not already initialized)

    specify --init      # Initialize spex in the repo (creates .specs/ directory)
    specify --refresh   # Update templates to latest version

    Or use the Claude Code skill:

    /spex:init
    

    Recommended workflow

    1. Specify: /spex:spec with a description of the workspace CRUD feature. This creates the spec in .specs/.
    2. Plan: /spex:plan to generate the implementation plan from the spec.
    3. Tasks: /spex:tasks to generate actionable tasks.
    4. Implement: /spex:implement to execute the tasks.
    5. Verify: /spex:verify to run final checks.

    Key design decisions the spec should address

    • WorkspaceInterface shape: CRUD + membership as sub-interface or flat methods?
    • How WorkspaceMember relates to Workspace (sub-resource pattern vs. standalone)
    • Domain type naming: WorkspacePhase vs. reusing Phase type
    • Converter pattern: follow SandboxFromProto/SandboxToProto convention
    • Fake implementation: in-memory workspace store with membership validation

    Related issues

  3. added a commit that references this issue on Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    drop-cTarget: Drop C (Provider + Workspace)proto-gapProto API surface not yet covered by SDK

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions