Method: projects.locations.apps.assistantSessions.streamChatAiAssistant

Menjalankan Arc, asisten AI, untuk sesi asisten yang ditentukan dalam mode streaming.

Permintaan HTTP

POST https://ces.googleapis.com/v1/{name=projects/*/locations/*/apps/*/assistantSessions/*}:streamChatAiAssistant

URL menggunakan sintaks gRPC Transcoding.

Parameter jalur

Parameter
name

string

Wajib. Sesi asisten yang akan digunakan untuk menjalankan asisten. Format: projects/{project}/locations/{location}/apps/{app}/assistantSessions/{assistantSession}

Isi permintaan

Isi permintaan memuat data dengan struktur berikut:

Representasi JSON
{
  "message": string,
  "attachedGcsUris": [
    string
  ],
  "contextToken": string,
  "confirmationResponse": {
    object (AssistantConfirmationResponse)
  },
  "clientCapabilities": [
    enum (StreamChatAiAssistantRequest.ClientCapability)
  ],
  "operationCompletedEvent": {
    object (OperationCompletedEvent)
  },
  "resumeFromSequenceNumber": string,
  "attachOnly": boolean
}
Kolom
message

string

Opsional. Pesan yang akan dikirim ke agen asisten. Dapat kosong jika confirmationResponse ditetapkan (menjawab konfirmasi yang tertunda tanpa menambahkan pesan baru); setidaknya salah satu dari keduanya harus diberikan.

attachedGcsUris[]

string

Opsional. Cloud Storage URI untuk file yang diupload oleh pengguna selama giliran ini. Contoh: "gs://cxas-transient-uploads/uuid/prd.pdf"

contextToken

string

Opsional. Token konteks orientasi buram yang ditampilkan oleh SessionService.GenerateOnboardingSuggestions. Jika ditetapkan dan masih baru, server akan menggunakan kembali snapshot orientasi yang dihitung untuk status nol, bukan menghitung ulang untuk giliran percakapan pertama.

confirmationResponse

object (AssistantConfirmationResponse)

Opsional. Jawaban pengguna untuk AssistantConfirmationRequest yang tertunda. Jika disetel, server akan melanjutkan agen yang dijeda dengan jawaban ini, bukan (atau selain) memulai giliran perintah baru.

clientCapabilities[]

enum (StreamChatAiAssistantRequest.ClientCapability)

Opsional. Fitur respons yang dapat dirender oleh klien ini. Server hanya memunculkan peristiwa yang memerlukan kemampuan (misalnya, confirmationRequest) saat kemampuan dideklarasikan, sehingga klien lama tidak akan pernah menerima peristiwa yang akan mereka hapus secara otomatis.

operationCompletedEvent

object (OperationCompletedEvent)

Opsional. Melanjutkan sesi asisten yang dijeda saat menunggu operasi yang berjalan lama dan dikelola klien selesai.

resumeFromSequenceNumber

string (int64 format)

Opsional. Kursor opsional untuk melanjutkan dan memutar ulang peristiwa dari giliran yang sedang berlangsung atau yang telah selesai.

attachOnly

boolean

Opsional. Flag opsional untuk dilampirkan ke giliran yang sedang berlangsung tanpa mengirimkan pesan baru.

Isi respons

Pesan respons untuk SessionService.StreamChatAiAssistant.

Jika berhasil, isi respons memuat data dengan struktur berikut:

Representasi JSON
{
  "eventId": string,
  "eventTime": string,
  "uiEvent": {
    object (UiEvent)
  },
  "turnMetadata": {
    object (TurnMetadata)
  },
  "sequenceNumber": string,
  "turnInProgress": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "textChunk": string,
  "status": {
    object (Status)
  },
  "thoughtChunk": string,
  "toolCall": {
    object (ToolCall)
  },
  "toolResponse": {
    object (ToolResponse)
  },
  "artifactChunk": {
    object (ArtifactChunk)
  },
  "optionQuestionsChunk": {
    object (OptionQuestionsChunk)
  },
  "confirmationRequest": {
    object (AssistantConfirmationRequest)
  },
  "sessionCheckpoint": {
    object (SessionCheckpoint)
  },
  "resumeSnapshot": {
    object (TurnResumeSnapshot)
  },
  "handoff": {
    object (TurnHandoffEvent)
  },
  "turnCompleted": {
    object (TurnCompletedEvent)
  }
  // End of mutually exclusive fields.
}
Kolom
eventId

string

ID unik untuk peristiwa.

eventTime

string (Timestamp format)

Stempel waktu saat peristiwa terjadi.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

uiEvent

object (UiEvent)

Opsional. Payload peristiwa UI.

turnMetadata

object (TurnMetadata)

Opsional. Metadata tingkat giliran dan kategorisasi intent.

sequenceNumber

string (int64 format)

Opsional. Nomor urut yang meningkat secara monoton untuk giliran sesi ini.

turnInProgress

boolean

Opsional. Menunjukkan apakah giliran masih aktif berjalan di latar belakang.

Payload peristiwa. Berikut adalah daftar kolom yang sama-sama bersifat eksklusif. Maksimal satu kolom akan ditetapkan dalam respons:
textChunk

string

Token Teks (untuk men-streaming respons Gemini kata demi kata).

status

object (Status)

Pembaruan status sederhana.

thoughtChunk

string

Penggalan teks pemikiran (penalaran agen sebelum membuat respons).

toolCall

object (ToolCall)

Peristiwa eksekusi panggilan alat.

toolResponse

object (ToolResponse)

Peristiwa respons panggilan alat.

artifactChunk

object (ArtifactChunk)

Peristiwa artefak dokumen yang dihasilkan (delta pratinjau langsung + pointer Cloud Storage akhir).

optionQuestionsChunk

object (OptionQuestionsChunk)

Opsi klarifikasi terstruktur yang diuraikan dari giliran model. Konsol merender ini sebagai daftar opsi yang dapat dipilih, bukan teks mentah.

confirmationRequest

object (AssistantConfirmationRequest)

Konfirmasi pemblokiran yang menyebabkan agen dijeda. Agen akan melanjutkan saat jawaban tiba di confirmationResponse permintaan berikutnya. Hanya dikirim ke klien yang mendeklarasikan kemampuan CONFIRMATION_CARDS pada permintaan.

sessionCheckpoint

object (SessionCheckpoint)

Peristiwa checkpoint/ringkasan pemadatan sesi yang berisi niat pengguna dan ringkasan berkelanjutan.

resumeSnapshot

object (TurnResumeSnapshot)

Pemutaran ulang yang dipadatkan dari giliran yang sedang berlangsung, dikirim sebagai peristiwa pertama dari setiap lampiran atau melanjutkan sebelum peristiwa live apa pun. Klien mengganti status yang dirender secara lokal untuk giliran ini dengan konten snapshot.

handoff

object (TurnHandoffEvent)

Memberi tahu klien untuk terhubung kembali secara otomatis dengan resumeFromSequenceNumber: tugas yang menyajikan streaming ini akan hilang dan giliran akan berlanjut di tempat lain. Bukan error; streaming selesai secara normal setelah peristiwa ini.

turnCompleted

object (TurnCompletedEvent)

Giliran telah berakhir. Dikirim sebagai peristiwa terakhir dari setiap giliran, pada streaming asli dan pada setiap streaming yang dilampirkan atau dilanjutkan, sehingga klien dapat mengakhiri giliran pada sinyal eksplisit, bukan menyimpulkannya dari penutupan streaming.

Akhir kolom yang saling eksklusif.

Cakupan otorisasi

Memerlukan salah satu cakupan OAuth berikut:

  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/ces

Untuk mengetahui informasi selengkapnya, lihat Authentication Overview.

Izin IAM

Memerlukan izin IAM berikut pada resource name:

  • ces.assistantSessions.get

Untuk mengetahui informasi selengkapnya, baca dokumentasi IAM.

AssistantConfirmationResponse

Jawaban pengguna untuk AssistantConfirmationRequest, yang dikirim pada panggilan SessionService.StreamChatAiAssistant berikutnya untuk melanjutkan agen yang dijeda.

Representasi JSON
{
  "confirmationId": string,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "confirmed": boolean,
  "answerText": string
  // End of mutually exclusive fields.
}
Kolom
confirmationId

string

AssistantConfirmationRequest.confirmation_id yang dijawab.

Jawaban pengguna. Berikut adalah daftar kolom yang sama-sama bersifat eksklusif. Maksimal satu kolom akan ditetapkan dalam respons:
confirmed

boolean

Jawaban biner: true menyetujui tindakan yang dijeda, false menolaknya.

answerText

string

submitText dari opsi yang dipilih, atau teks pengguna dalam format bebas. Tindakan yang dijeda akan dibatalkan dan teks akan diserahkan kepada agen untuk ditindaklanjuti.

Akhir kolom yang saling eksklusif.

StreamChatAiAssistantRequest.ClientCapability

Fitur respons yang dapat dideklarasikan klien.

Enum
CLIENT_CAPABILITY_UNSPECIFIED Kemampuan tidak ditentukan; diabaikan.
CONFIRMATION_CARDS Klien merender kartu AssistantConfirmationRequest dan menjawabnya melalui confirmationResponse.
CLIENT_MANAGED_LRO Klien mengelola operasi yang berjalan lama secara out-of-band dengan melakukan polling operasi dan mengirimkan operationCompletedEvent untuk melanjutkan giliran. Jika tidak dideklarasikan, server akan mengelola polling LRO dan menyelesaikan giliran secara inline.
PROJECT_SCOPE Klien merender peristiwa cakupan project: Kartu typedPayload, targetApp pada panggilan alat dan respons, targets pada permintaan konfirmasi, dan touchedApps pada penyelesaian giliran.

OperationCompletedEvent

Peristiwa yang dikirim oleh klien atau pekerja latar belakang untuk melanjutkan sesi asisten setelah Operasi yang Berjalan Lama (LRO) asinkron selesai.

Representasi JSON
{
  "operationName": string,
  "targetResourceName": string,
  "operationType": string,
  "status": string,
  "deduplicationToken": string,
  "error": {
    object (Status)
  },
  "metadata": {
    object
  }
}
Kolom
operationName

string

Nama resource operasi (misalnya, operations/{op}).

targetResourceName

string

Resource utama yang ditargetkan atau dihasilkan oleh operasi (misalnya, ID operasi evaluasi, ID aplikasi, ID set data).

operationType

string

Jenis operasi atau nama alat (misalnya, "run_evaluation", "copy_app", "export_app").

status

string

Status operasi yang dijalankan (misalnya, "SUCCEEDED", "FAILED", "CANCELLED").

deduplicationToken

string

Token penghapusan duplikat opsional (misalnya, UUID) untuk mencegah eksekusi giliran duplikat dari tab browser serentak.

error

object (Status)

Status error kanonis opsional jika operasi gagal.

metadata

object (Struct format)

Metadata hasil terstruktur opsional (misalnya, pass_rate, total_examples, export_uri).

ArtifactChunk

Fragmen yang di-streaming dari artefak dokumen (misalnya, TDD markdown) yang sedang dibuat oleh asisten. Delta konten di-streaming saat dokumen sedang ditulis sehingga klien dapat merender pratinjau langsung; chunk FINALIZED membawa URI Cloud Storage setelah file dipertahankan.

Representasi JSON
{
  "artifactId": string,
  "displayName": string,
  "mimeType": string,
  "contentDelta": string,
  "gcsUri": string,
  "state": enum (ArtifactChunk.State),
  "targetApp": string
}
Kolom
artifactId

string

ID artefak, stabil di semua potongan satu artefak dalam streaming.

displayName

string

Nama file yang ditampilkan kepada pengguna, misalnya "hotel_booking_tdd.md". Ditetapkan pada STARTED (dan diulang pada FINALIZED).

mimeType

string

Jenis media IANA dari konten artefak, misalnya "text/markdown".

contentDelta

string

Konten artefak inkremental. Ditetapkan pada potongan DELTA.

gcsUri

string

Objek Cloud Storage tempat artefak dipertahankan. Ditetapkan pada potongan FINALIZED.

state

enum (ArtifactChunk.State)

Posisi siklus proses potongan ini.

targetApp

string

Hanya output. Aplikasi yang dibuat untuk artefak ini, jika dibuat untuk satu aplikasi. Format: projects/{project}/locations/{location}/apps/{app}

ArtifactChunk.State

Posisi siklus proses potongan ini dalam aliran artefak.

Enum
STATE_UNSPECIFIED Default yang tidak digunakan.
STARTED Asisten mulai membuat artefak.
DELTA Penambahan konten; contentDelta ditetapkan.
FINALIZED Artefak dipertahankan; gcsUri ditetapkan.
FAILED Pembuatan atau persistensi gagal; artefak tidak disimpan.
CLOSED Dokumen selesai di-streaming: kontennya telah dikirimkan sepenuhnya melalui potongan contentDelta. Persistensi mungkin masih mengikuti; potongan FINALIZED dengan gcsUri dikirim jika dan saat artefak disimpan.

OptionQuestionsChunk

Opsi klarifikasi terstruktur yang diminta asisten untuk dipilih pengguna, ditransduksi di sisi server dari giliran model (blok opsi dihapus dari teks yang di-streaming dan dipertahankan). Konsol akan merender daftar opsi yang dapat diakses dengan keyboard yang diletakkan di atas composer.

Representasi JSON
{
  "questions": [
    {
      object (OptionQuestionsChunk.Question)
    }
  ]
}
Kolom
questions[]

object (OptionQuestionsChunk.Question)

Pertanyaan yang diajukan pada giliran ini. Lebih dari satu entri menggerakkan pager "1 dari N" konsol.

OptionQuestionsChunk.Question

Satu pertanyaan dengan opsinya.

Representasi JSON
{
  "question": string,
  "options": [
    {
      object (OptionQuestionsChunk.Option)
    }
  ]
}
Kolom
question

string

Teks header pertanyaan.

options[]

object (OptionQuestionsChunk.Option)

Opsi yang dapat dipilih, dalam urutan presentasi.

OptionQuestionsChunk.Option

Satu opsi yang dapat dipilih.

Representasi JSON
{
  "title": string,
  "details": string,
  "submitText": string
}
Kolom
title

string

Judul opsi teks biasa singkat (tanpa markdown, tanpa penomoran).

details

string

Detail kompromi opsional ditampilkan sebagai teks sekunder.

submitText

string

Teks pesan opsional yang akan dikirim saat opsi dipilih; defaultnya adalah title jika kosong.

AssistantConfirmationRequest

Pertanyaan atau konfirmasi pemblokiran yang perlu dijawab asisten sebelum tindakan agen dapat dilanjutkan. Agen yang meminta akan dijeda dan hanya akan dilanjutkan saat jawaban tiba di StreamChatAiAssistantRequest.confirmation_response berikutnya.

Representasi JSON
{
  "confirmationId": string,
  "context": string,
  "positiveLabel": string,
  "negativeLabel": string,
  "questions": [
    {
      object (OptionQuestionsChunk.Question)
    }
  ],
  "tool": string,
  "agentName": string,
  "expireTime": string,
  "targets": [
    {
      object (AssistantConfirmationRequest.Target)
    }
  ]
}
Kolom
confirmationId

string

ID yang menghubungkan permintaan ini dengan responsnya. Tidak terlihat oleh klien; harus diulang secara verbatim pada permintaan jawaban.

context

string

Konteks yang menjelaskan hal yang sedang dikonfirmasi (misalnya, tindakan yang ingin dilakukan agen, atau pertanyaan yang perlu dijawab). Dirender sebagai teks biasa, bukan Markdown.

positiveLabel

string

Label untuk tindakan persetujuan konfirmasi biner (misalnya, "Publikasikan"). Tidak ditetapkan saat questions diisi.

negativeLabel

string

Label untuk tindakan penolakan konfirmasi biner (misalnya, "Belum"). Tidak ditetapkan saat questions diisi.

questions[]

object (OptionQuestionsChunk.Question)

Bentuk konfirmasi pilihan ganda. Jika diisi, kartu akan merender daftar opsi yang dapat dipilih dan submitText opsi yang dipilih (atau teks pengguna bentuk bebas) akan ditampilkan sebagai AssistantConfirmationResponse.answer_text.

tool

string

Nama panggilan alat yang dijeda agen (misalnya, "update_app"), untuk header kartu. Tidak ditetapkan untuk pertanyaan murni.

agentName

string

Label tampilan agen yang memunculkan konfirmasi (misalnya, "Contract Architect"), untuk header kartu.

expireTime

string (Timestamp format)

Waktu setelah konfirmasi ini tidak dapat lagi dijawab. Kartu yang sudah tidak berlaku akan ditampilkan sebagai tidak aktif, dan server akan menolak konfirmasi pada giliran berikutnya sehingga agen yang dijeda tidak menunggu tanpa batas waktu.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

targets[]

object (AssistantConfirmationRequest.Target)

Semua hal yang akan diubah oleh tindakan yang dikonfirmasi, sehingga konsol dapat merender "Update 2 aplikasi" dan satu badge per aplikasi. Kosong untuk kartu target tunggal lama.

AssistantConfirmationRequest.Target

Satu resource yang akan diubah oleh tindakan yang dikonfirmasi.

Representasi JSON
{
  "resource": string,
  "displayName": string,
  "action": string,
  "targetApp": string
}
Kolom
resource

string

Resource yang akan berubah, sebagai nama resource lengkap.

displayName

string

Nama tampilan resource atau aplikasi, untuk kartu.

action

string

Tindakan, misalnya, CREATE, UPDATE, DELETE, COPY, LINK.

targetApp

string

Aplikasi yang memiliki resource, atau kosong untuk tindakan yang tercakup dalam lokasi seperti membuat aplikasi. Format: projects/{project}/locations/{location}/apps/{app}

SessionCheckpoint

Checkpoint sesi yang berisi niat pengguna yang disimpulkan untuk judul sesi dan UI.

Representasi JSON
{
  "userIntent": string
}
Kolom
userIntent

string

Sasaran atau topik pengguna yang disimpulkan untuk sesi tersebut (misalnya, "Membangun Agen Dukungan E-Commerce").

TurnResumeSnapshot

Pemutaran ulang yang dipadatkan dari giliran yang sedang berlangsung: semua yang diperlukan untuk merender output giliran yang terlihat sejauh ini, ditambah posisi acara live yang dilanjutkan.

Representasi JSON
{
  "turnId": string,
  "resolvedSequenceNumber": string,
  "events": [
    {
      object (StreamChatAiAssistantResponse)
    }
  ],
  "orphanDeadlineTime": string
}
Kolom
turnId

string

Mengidentifikasi belokan yang dilampirkan.

resolvedSequenceNumber

string (int64 format)

Posisi yang diwakili oleh snapshot ini. Acara live mengikuti dengan sequenceNumber yang benar-benar lebih besar dari ini. Jika lebih rendah dari resumeFromSequenceNumber yang diminta klien, progres yang di-flush akan tertinggal dari yang telah dirender klien: klien harus menghapus konten yang dirender dari giliran ini di luar posisi ini sebelum menerapkan snapshot.

events[]

object (StreamChatAiAssistantResponse)

Peristiwa yang dipadatkan yang merekonstruksi output giliran yang terlihat, dalam urutan render, menggunakan bentuk peristiwa yang sama seperti live streaming.

orphanDeadlineTime

string (Timestamp format)

Waktu giliran akan dihentikan jika tidak ada klien yang tetap terhubung.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

TurnHandoffEvent

Dimunculkan sebelum tugas ini berhenti menyajikan streaming di tengah giliran (misalnya, mulai ulang server). Status giliran dipertahankan; koneksi ulang yang membawa resumeFromSequenceNumber akan melanjutkannya di tugas lain.

Representasi JSON
{
  "turnId": string,
  "reason": enum (TurnHandoffEvent.Reason)
}
Kolom
turnId

string

Mengidentifikasi belokan untuk melanjutkan.

reason

enum (TurnHandoffEvent.Reason)

Alasan streaming dialihkan.

TurnHandoffEvent.Reason

Alasan streaming dialihkan.

Enum
REASON_UNSPECIFIED Tidak ditentukan.
SERVER_RESTART Tugas penayangan sedang dinonaktifkan (push rilis atau penjadwalan ulang).

TurnCompletedEvent

Peristiwa terminal dari giliran (lihat StreamChatAiAssistantResponse.turn_completed).

Representasi JSON
{
  "turnId": string,
  "reason": enum (TurnCompletedEvent.Reason),
  "finalSequenceNumber": string,
  "touchedApps": [
    string
  ]
}
Kolom
turnId

string

ID belokan yang berakhir; cocok dengan TurnResumeSnapshot.turn_id dan ActiveTurnInfo.turn_id.

reason

enum (TurnCompletedEvent.Reason)

Alasan giliran berakhir.

finalSequenceNumber

string (int64 format)

Nomor urut peristiwa terakhir yang dihasilkan giliran. Klien yang kursornya lebih rendah akan melewatkan konten dan harus memuat ulang sesi untuk melihatnya.

touchedApps[]

string

Aplikasi yang ditargetkan atau diubah pada giliran ini, sehingga konsol dapat memperbarui penyimpanan aplikasi tersebut secara tepat. Hanya sesi lingkup project. Format: projects/{project}/locations/{location}/apps/{app}

TurnCompletedEvent.Reason

Alasan giliran berakhir, sehingga klien yang bergabung terlambat dapat merumuskan hasilnya, bukan menebak dari streaming kosong.

Enum
REASON_UNSPECIFIED Tidak ditentukan.
COMPLETED Giliran berjalan hingga selesai; sesi menyimpan output yang di-commit.
ABANDONED Tidak ada tugas yang mendorong giliran lagi; tugas tersebut disegel ke parsial yang di-commit dan tidak dapat dilanjutkan.
RESUME_UNAVAILABLE Server ini tidak melayani lampiran atau melanjutkan sesi, sehingga tidak ada yang di-tail; klien harus memuat ulang sesi.

UiEvent

Mewakili payload peristiwa UI.

Representasi JSON
{
  "mimeType": string,
  "jsonPayload": string
}
Kolom
mimeType

string

Jenis media (jenis MIME) yang menunjukkan format payload peristiwa UI (misalnya, "application/json+a2ui").

jsonPayload

string

Payload JSON yang merepresentasikan platform A2UI.

TurnMetadata

Metadata tingkat giliran dan kategorisasi intent.

Representasi JSON
{
  "contractRelated": boolean,
  "contractFinalized": boolean,
  "contractStreamingPhase": enum (TurnMetadata.ContractStreamingPhase),
  "contractDraftComplete": boolean
}
Kolom
contractFinalized

boolean

Ditetapkan pada peristiwa artefak akhir dari giliran yang draf kontraknya dipublikasikan (revisi diaktifkan). Terminal untuk alur klarifikasi draf ini: contractProgress bersifat otoritatif dan lengkap.

contractStreamingPhase

enum (TurnMetadata.ContractStreamingPhase)

Hanya ditetapkan pada estimasi progres dalam proses yang dikeluarkan saat pagar artefak kontrak sedang di-streaming, dan pada peristiwa revision-turn-start. Tidak ditetapkan pada payload otoritatif.

contractDraftComplete

boolean

Ditetapkan pada peristiwa terminal draf kontrak yang setiap placeholder-nya telah diselesaikan (contractProgress adalah 100%), baik draf tersebut dipublikasikan atau tidak. Klien menyelesaikan dan menutup tampilan progres kontrak di dalamnya; publikasi dilaporkan secara terpisah oleh contractFinalized.

TurnMetadata.ContractStreamingPhase

Fase streaming payload progres kontrak.

Enum
CONTRACT_STREAMING_PHASE_UNSPECIFIED Payload bersifat otoritatif (dihitung dari dokumen kontrak lengkap, snapshot yang dipertahankan, atau status pra-draf). Klien harus mengganti progres yang diterima sebelumnya dengan progres ini.
DRAFTING Draf kontrak awal sedang di-streaming. contractProgress adalah estimasi dalam proses: tidak menurun dalam satu batas artefak, dibatasi di bawah rentang otoritatif, dengan pillarBreakdowns yang membawa totalItemCount == 0 untuk menandai estimasi status pilar.
REVISING Revisi kontrak yang ada sedang di-streaming (misalnya setelah pengiriman anotasi). Semantik estimasi yang sama dengan DRAFTING.