Alphaus Luster API

(ALPHA) Luster API. Base URL: https://api.alphaus.cloud/m/blue/luster

OpenAPI Specification

alphaus-luster-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: Blue API reference Admin Luster API
  description: 'Alphaus provides an API for interacting with its services. Blue API is a RESTful API that
    can be accessed by an HTTP client such as `curl`, or any HTTP library which is part of most modern
    programming languages. This API reference is autogenerated from [protocol buffers](https://developers.google.com/protocol-buffers)
    defined in this [repository](https://github.com/alphauslabs/blueapi), together with our supported
    [client libraries](https://alphauslabs.github.io/docs/blueapi/client-sdks/). See the official [documentation](https://alphauslabs.github.io/docs/blueapi/overview/)
    for more information.


    You may encounter the following feature maturity indicators:

    - **(WORK-IN-PROGRESS)** - Development is ongoing, don''t use yet;

    - **(BETA)** - New or experimental features, subject to changes; and

    - **(DEPRECATED)** - Outdated or replaced features.


    Some endpoints, especially those that return lists of resources, have streaming responses; newline-separated
    stream of “chunks”. Each chunk is an envelope that can contain either a response message or an error.
    Only the last chunk will include an error, if any.'
  version: v1
host: api.alphaus.cloud
basePath: /m/blue
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: Luster
  description: '(ALPHA) Luster API. Base URL: https://api.alphaus.cloud/m/blue/luster'
  externalDocs:
    description: Luster is a service that manages user contexts.
    url: https://github.com/alphauslabs/blueapi/tree/main/luster/
paths:
  /v1/contexts/label:
    post:
      summary: (ALPHA) [LABEL] Creates label.
      operationId: Luster_CreateLabel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/apiLusterLabel'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Luster.CreateLabel rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1CreateLabelRequest'
      tags:
      - Luster
  /v1/contexts/label/{id}:
    delete:
      summary: (ALPHA) [LABEL] Deletes label.
      operationId: Luster_DeleteLabel
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. the label id.
        in: path
        required: true
        type: string
      tags:
      - Luster
    put:
      summary: (ALPHA) [LABEL] Updates label.
      operationId: Luster_UpdateLabel
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/apiLusterLabel'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. the label id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterUpdateLabelBody'
      tags:
      - Luster
  /v1/contexts/label:read:
    post:
      summary: (ALPHA) [LABEL] Reads labels.
      operationId: Luster_ReadLabels
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/apiLusterLabel'
              error:
                $ref: '#/definitions/rpcStatus'
            title: Stream result of apiLusterLabel
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Luster.ReadLabels rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1ReadLabelsRequest'
      tags:
      - Luster
  /v1/contexts/{spaceId}/context:
    post:
      summary: (ALPHA) [CONTEXT] Creates context.
      operationId: Luster_CreateContext
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterContext'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. The space id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterCreateContextBody'
      tags:
      - Luster
  /v1/contexts/{spaceId}/context/{contextId}/comment:
    post:
      summary: (ALPHA) [COMMENT] Creates comment in context.
      operationId: Luster_CreateContextComment
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterComment'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. the space id.
        in: path
        required: true
        type: string
      - name: contextId
        description: Required. the context id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterCreateContextCommentBody'
      tags:
      - Luster
  /v1/contexts/{spaceId}/context/{contextId}/comment/{id}:
    delete:
      summary: (ALPHA) [COMMENT] Deletes comment in context.
      operationId: Luster_DeleteContextComment
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. the space id.
        in: path
        required: true
        type: string
      - name: contextId
        description: Required. the context id.
        in: path
        required: true
        type: string
      - name: id
        description: Required. the comment id.
        in: path
        required: true
        type: string
      tags:
      - Luster
    put:
      summary: (ALPHA) [COMMENT] Updates comment in context.
      operationId: Luster_UpdateContextComment
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterComment'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. the space id.
        in: path
        required: true
        type: string
      - name: contextId
        description: Required. the context id.
        in: path
        required: true
        type: string
      - name: id
        description: Required. the comment id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterUpdateContextCommentBody'
      tags:
      - Luster
  /v1/contexts/{spaceId}/context/{id}:
    get:
      summary: (ALPHA [CONTEXT]) Gets context.
      operationId: Luster_GetContext
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/v1GetContextResponse'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. The space id.
        in: path
        required: true
        type: string
      - name: id
        description: the context id.
        in: path
        required: true
        type: string
      - name: fieldMask
        description: 'Optional. field_mask

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
        in: query
        required: false
        type: string
      tags:
      - Luster
    delete:
      summary: (ALPHA) [CONTEXT] Deletes context.
      operationId: Luster_DeleteContext
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. The space id.
        in: path
        required: true
        type: string
      - name: id
        description: Required. the context id.
        in: path
        required: true
        type: string
      tags:
      - Luster
    put:
      summary: (ALPHA) [CONTEXT] Updates context.
      operationId: Luster_UpdateContext
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterContext'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. The space id.
        in: path
        required: true
        type: string
      - name: id
        description: Required. the context id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterUpdateContextBody'
      tags:
      - Luster
  /v1/contexts/{spaceId}:read:
    post:
      summary: (ALPHA) [CONTEXT] Reads contexts.
      operationId: Luster_ReadContexts
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/lusterContext'
              error:
                $ref: '#/definitions/rpcStatus'
            title: Stream result of lusterContext
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: spaceId
        description: Required. The space id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterReadContextsBody'
      tags:
      - Luster
  /v1/hubs/{hubType}:
    get:
      summary: (ALPHA) [HUB] Gets hub.
      operationId: Luster_GetHub
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterHub'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: hubType
        description: Required. the hub type.
        in: path
        required: true
        type: string
      - name: fieldMask
        description: 'Optional. field_mask

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
        in: query
        required: false
        type: string
      tags:
      - Luster
  /v1/hubs:read:
    post:
      summary: (ALPHA) [HUB] Reads hubs.
      operationId: Luster_ReadHubs
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/lusterHub'
              error:
                $ref: '#/definitions/rpcStatus'
            title: Stream result of lusterHub
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Luster.ReadHubs rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1ReadHubsRequest'
      tags:
      - Luster
  /v1/spaces:
    post:
      summary: (ALPHA) [SPACE] Creates space.
      operationId: Luster_CreateSpace
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterSpace'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Luster.CreateSpace rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1CreateSpaceRequest'
      tags:
      - Luster
  /v1/spaces/{id}:
    get:
      summary: (ALPHA) [SPACE] Gets space.
      operationId: Luster_GetSpace
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterSpace'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: the space id.
        in: path
        required: true
        type: string
      - name: fieldMask
        description: 'Optional. field_mask

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
        in: query
        required: false
        type: string
      tags:
      - Luster
    delete:
      summary: (ALPHA) [SPACE] Deletes space.
      description: When deleted, contexts created within the space will also be deleted and cannot be
        viewed.
      operationId: Luster_DeleteSpace
      responses:
        '200':
          description: A successful response.
          schema:
            type: object
            properties: {}
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: the space id.
        in: path
        required: true
        type: string
      tags:
      - Luster
    put:
      summary: (ALPHA) [SPACE] Updates space.
      operationId: Luster_UpdateSpace
      responses:
        '200':
          description: A successful response.
          schema:
            $ref: '#/definitions/lusterSpace'
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: id
        description: Required. the space id.
        in: path
        required: true
        type: string
      - name: body
        in: body
        required: true
        schema:
          $ref: '#/definitions/LusterUpdateSpaceBody'
      tags:
      - Luster
  /v1/spaces:read:
    post:
      summary: (ALPHA) [SPACE] Reads spaces.
      operationId: Luster_ReadSpaces
      responses:
        '200':
          description: A successful response.(streaming responses)
          schema:
            type: object
            properties:
              result:
                $ref: '#/definitions/lusterSpace'
              error:
                $ref: '#/definitions/rpcStatus'
            title: Stream result of lusterSpace
        default:
          description: An unexpected error response.
          schema:
            $ref: '#/definitions/rpcStatus'
      parameters:
      - name: body
        description: Request message for the Luster.ReadSpaces rpc.
        in: body
        required: true
        schema:
          $ref: '#/definitions/v1ReadSpacesRequest'
      tags:
      - Luster
definitions:
  lusterContextState:
    type: string
    enum:
    - OPEN
    - IN_PROGRESS
    - CLOSED
    default: OPEN
    description: "The context state.\n\n - OPEN: open\nInitial state when context is created.\n - IN_PROGRESS:\
      \ in progress\nIndicates work is in progress.\n - CLOSED: closed\nFinal state indicating work is\
      \ completed."
  LusterUpdateContextBody:
    type: object
    properties:
      title:
        type: string
        title: 'Optional. The context title.

          String length 1-500 characters'
      content:
        type: string
        title: 'Optional. The context content.

          String length 0-10000 characters'
      labels:
        type: array
        items:
          type: string
        title: 'Optional. The context labels.

          "labels": ["bug" "documentation"]'
      assignees:
        type: array
        items:
          type: string
        title: 'Optional. The context assignees.

          "assignees": ["username1" "username2"]'
      contextType:
        $ref: '#/definitions/lusterContextType'
        title: 'Optional. The context type.

          if not set, default: `any`'
      state:
        $ref: '#/definitions/lusterContextState'
        description: Optional. The context state.
      updateMask:
        type: string
        title: 'Required.

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
    description: Request message for the Luster.UpdateContext rpc.
    required:
    - updateMask
  LusterUpdateLabelBody:
    type: object
    properties:
      name:
        type: string
        description: Optional. the label name.
      color:
        type: string
        title: 'The label color.

          Optional. format: HEX color code (#RRGGBB).

          Example: #FF5733 (valid), #FFF (invalid - must be 6 digits), rgb(255, 87, 51) (invalid format)'
      description:
        type: string
        title: 'Optional. the description.

          String length 0-500 characters'
      updateMask:
        type: string
        title: 'Required.

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
    description: Request message for the Luster.UpdateLabel rpc.
    required:
    - updateMask
  LusterCreateContextCommentBody:
    type: object
    properties:
      content:
        type: string
        title: 'Required. The comment content.

          String length 1-10000 characters'
    description: Request message for the Luster.CreateContextComment rpc.
  v1ReadLabelsRequest:
    type: object
    properties:
      fieldMask:
        type: string
        title: Optional. field_mask
    description: Request message for the Luster.ReadLabels rpc.
  LusterUpdateContextCommentBody:
    type: object
    properties:
      content:
        type: string
        title: 'Required. The comment content.

          String length 1-10000 characters'
      updateMask:
        type: string
        title: 'Required.

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
    description: Request message for the Luster.UpdateContextComment rpc.
    required:
    - updateMask
  lusterSpace:
    type: object
    properties:
      id:
        type: string
        description: The space id.
      name:
        type: string
        description: The space name.
      description:
        type: string
        description: The space description.
      members:
        type: array
        items:
          type: string
        description: The members in space.
      createdAt:
        type: string
        title: 'The space created_at.

          "created_at": "2023-10-27T10:00:00Z"'
        readOnly: true
      updatedAt:
        type: string
        title: 'The space updated_at.

          "updated_at": "2023-10-27T10:00:00Z"'
        readOnly: true
    title: The message defines the space
  v1GetContextResponse:
    type: object
    properties:
      space:
        $ref: '#/definitions/lusterSpace'
      context:
        $ref: '#/definitions/lusterContext'
      comment:
        type: array
        items:
          type: object
          $ref: '#/definitions/lusterComment'
    description: Response message for the Luster.GetContextResponse rpc.
  rpcStatus:
    type: object
    properties:
      code:
        type: integer
        format: int32
        description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
      message:
        type: string
        description: 'A developer-facing error message, which should be in English. Any

          user-facing error message should be localized and sent in the

          [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.'
      details:
        type: array
        items:
          type: object
          $ref: '#/definitions/protobufAny'
        description: 'A list of messages that carry the error details.  There is a common set of

          message types for APIs to use.'
    description: 'The `Status` type defines a logical error model that is suitable for

      different programming environments, including REST APIs and RPC APIs. It is

      used by [gRPC](https://github.com/grpc). Each `Status` message contains

      three pieces of data: error code, error message, and error details.


      You can find out more about this error model and how to work with it in the

      [API Design Guide](https://cloud.google.com/apis/design/errors).'
  v1CreateSpaceRequest:
    type: object
    properties:
      name:
        type: string
        title: 'Required. the space name.

          String length 1-60 characters'
      description:
        type: string
        title: 'Optional. the space description.

          String length 0-1000 characters'
      members:
        type: array
        items:
          type: string
        description: Optional. the member ids.
    description: Request message for the Luster.CreateSpace rpc.
  LusterReadContextsBody:
    type: object
    properties:
      fieldMask:
        type: string
        title: Optional. field_mask
    description: Request message for the Luster.ReadContexts rpc.
  LusterUpdateSpaceBody:
    type: object
    properties:
      name:
        type: string
        title: 'Optional. the space name.

          String length 1-60 characters'
      description:
        type: string
        title: 'Optional. the space description.

          String length 0-1000 characters'
      members:
        type: array
        items:
          type: string
        description: Optional. the member ids.
      updateMask:
        type: string
        title: 'Required.

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
    description: Request message for the Luster.UpdateSpace rpc.
    required:
    - updateMask
  v1ReadSpacesRequest:
    type: object
    properties:
      fieldMask:
        type: string
        title: 'Optional. field_mask

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto

          Available fields: id,name,description,members,created_at,updated_at'
    description: Request message for the Luster.ReadSpaces rpc.
  protobufAny:
    type: object
    properties:
      '@type':
        type: string
        description: "A URL/resource name that uniquely identifies the type of the serialized\nprotocol\
          \ buffer message. This string must contain at least\none \"/\" character. The last segment of\
          \ the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`).\
          \ The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice,\
          \ teams usually precompile into the binary all types that they\nexpect it to use in the context\
          \ of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally\
          \ set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme\
          \ is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n\
          \  value in binary format, or produce an error.\n* Applications are allowed to cache lookup\
          \ results based on the\n  URL, or have them precompiled into a binary to avoid any\n  lookup.\
          \ Therefore, binary compatibility needs to be preserved\n  on changes to types. (Use versioned\
          \ type names to manage\n  breaking changes.)\n\nNote: this functionality is not currently available\
          \ in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\
          \ As of May 2023, there are no widely used type server\nimplementations and no plans to implement\
          \ one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation\
          \ specific semantics."
    additionalProperties: {}
    description: "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that\
      \ describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack\
      \ Any values in the form\nof utility functions or additional generated methods of the Any type.\n\
      \nExample 1: Pack and unpack a message in C++.\n\n    Foo foo = ...;\n    Any any;\n    any.PackFrom(foo);\n\
      \    ...\n    if (any.UnpackTo(&foo)) {\n      ...\n    }\n\nExample 2: Pack and unpack a message\
      \ in Java.\n\n    Foo foo = ...;\n    Any any = Any.pack(foo);\n    ...\n    if (any.is(Foo.class))\
      \ {\n      foo = any.unpack(Foo.class);\n    }\n    // or ...\n    if (any.isSameTypeAs(Foo.getDefaultInstance()))\
      \ {\n      foo = any.unpack(Foo.getDefaultInstance());\n    }\n\n Example 3: Pack and unpack a message\
      \ in Python.\n\n    foo = Foo(...)\n    any = Any()\n    any.Pack(foo)\n    ...\n    if any.Is(Foo.DESCRIPTOR):\n\
      \      any.Unpack(foo)\n      ...\n\n Example 4: Pack and unpack a message in Go\n\n     foo :=\
      \ &pb.Foo{...}\n     any, err := anypb.New(foo)\n     if err != nil {\n       ...\n     }\n    \
      \ ...\n     foo := &pb.Foo{}\n     if err := any.UnmarshalTo(foo); err != nil {\n       ...\n  \
      \   }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name'\
      \ as the type URL and the unpack\nmethods only use the fully qualified type name after the last\
      \ '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n\
      ====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized,\
      \ embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n\
      \    package google.profile;\n    message Person {\n      string first_name = 1;\n      string last_name\
      \ = 2;\n    }\n\n    {\n      \"@type\": \"type.googleapis.com/google.profile.Person\",\n      \"\
      firstName\": <string>,\n      \"lastName\": <string>\n    }\n\nIf the embedded message type is well-known\
      \ and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value`\
      \ which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\
      \n    {\n      \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n      \"value\": \"\
      1.212s\"\n    }"
  v1CreateLabelRequest:
    type: object
    properties:
      name:
        type: string
        title: 'The label name.

          String length 1-100 characters'
      color:
        type: string
        title: 'The label color.

          Required format: HEX color code (#RRGGBB).

          Example: #FF5733 (valid), #FFF (invalid - must be 6 digits), rgb(255, 87, 51) (invalid format)'
      description:
        type: string
        title: 'The label description.

          String length 0-500 characters'
    description: Request message for the Luster.CreateLabel rpc.
  v1ReadHubsRequest:
    type: object
    properties:
      fieldMask:
        type: string
        title: 'Optional. field_mask

          see more info: https://github.com/protocolbuffers/protobuf/blob/main/src/google/protobuf/field_mask.proto'
    description: Request message for the Luster.ReadHubs rpc.
  lusterComment:
    type: object
    properties:
      id:
        type: string
        description: The comment id.
      name:
        type: string
        description: The comment name.
      content:
        type: string
        description: The comment content.
      userId:
        type: string
        description: The comment user_id.
        readOnly: true
      createdAt:
        type: string
        title: 'The comment created_at.

          "created_at": "2023-10-27T10:00:00Z"'
        readOnly: true
      updatedAt:
        type: string
        title: 'The comment updated_at.

          "updated_at": "2023-10-27T10:00:00Z"'
        readOnly: true
    title: The message defines the comment
  LusterCreateContextBody:
    type: object
    properties:
      title:
        type: string
        title: 'Required. The context title.

          String length 1-500 characters'
      content:
        type: string
        title: 'Required. The context content.

          String length 0-10000 characters'
      labels:
        type: array
        items:
          type: string
        title: 'Optional. The context labels.

          "labels": ["bug" "documentation"]'
      assignees:
        type: array
        items:
          type: string
        title: 'Optional. The context assignees.

          "assignees": ["username1" "username2"]'
      contextType:
        $ref: '#/definitions/lusterContextType'
        title: 'Optional. The context type.

          if not set, default: `any`'
    description: Request message for the Luster.CreateContext rpc.
  lusterHub:
    type: object
    properties:
      id:
        type: string
        description: The hub id.
      name:
        type: string
        description: The hub name.
      cost:
        type: array
        items:
          type: string
        description: The cost in hub.
      recommendation:
        type: array
        items:
          type: string
        description: The recommendation in hub.
    title: The message defines the hub
  lusterContextType:
    type: string
    enum:
    - ANY
    - SPACE
    - ACCOUNT
    - COST
    default: ANY
    description: "The context type.\n\n - ANY: Any type of context.\n - SPACE: Space-related context.\n\
      \ - ACCOUNT: Account-related context.\n - COST: Cost-related context."
  lusterContext:
    type: object
    properties:
      id:
        type: string
        description: The context id.
      name:
        type: string
        description: The context name.
      number:
        type: string
        description: 'The context number.

          Sequential number assigned to the context.'
      title:
        type: string
        description: The context title.
      content:
        type: string
        description: 'The context content.

          Detailed content or description of the context.'
      contextType:
        $ref: '#/definitions/lusterContextType'
        description: The context type.
      state:
        $ref: '#/definitions/lusterContextState'
        description: The context state.
      labels:
        type: array
        items:
          type: string
        title: 'The context labels.

          "labels": ["bug" "documentation"]'
      assignees:
        type: array
        items:
          type: string
        title: 'The context assignees.

          "assignees": ["username1" "username2"]'
      commentsCount:
        type: string
        format: int64
        title: 'The context comments_count.

          "comments_count": 0'
        readOnly: true
      createdAt:
        type: string
        title: 'The context created_at.

          "created_at": "2023-10-27T10:00:00Z"'
        readOnly: true
      updatedAt:
        type: string
        title: 'The context updated_at.

          "up

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/alphaus/refs/heads/main/openapi/alphaus-luster-api-openapi.yml