Langkau ke kandungan

Acara domain

DomainEventBus ialah bas terbit/langgan siaran dalam proses. Penerbit memanggil publish(event); pelanggan menggunakan strim on<T>() yang bertaip. Setiap acara melaksanakan DomainEvent dan membawa occurredAt.

Bas ini berjalan dalam cc_server. Setiap penerbit dan setiap pelanggan yang hidup berada di situ. Tiada klien melihat bas ini — pelayan memajukan subset terpilih sebagai bingkai JSON-RPC notifications/*, ditapis bagi setiap pelanggan mengikut keahlian ruang kerja.

Ukuran Bilangan
Kelas acara konkrit 54
Fail sumber (packages/cc_domain/lib/core/domain/events/) 14 (serta domain_event_bus.dart)
Asas abstrak yang tidak pernah diterbitkan secara langsung 1 (TaskLifecycleEvent, satu hierarki tertutup)

Setiap acara dalam katalog di bawah berada dalam direktori yang sama itu; tiada acara domain diisytiharkan di tempat lain.

Acara Muatan Tercetus apabila
WorkspaceCreated workspaceId Ruang kerja dicipta
AgentRunCompleted agentId, runId?, workspaceId?, conversationId? Ejen menamatkan satu larian (berjaya atau gagal)
AgentAwaitingInput workspaceId, kind, summary, spaceId?, conversationId?, agentId?, agentName? Ejen mula menunggu manusia: kelulusan, soalan ask_user atau larian yang tertahan pada kelayakan (kind ialah approval, question atau credential)
RepoAdded repoId, path, workspaceId Repo didaftarkan; mencetuskan pengindeksan kod latar belakang
SkillUpdated workspaceId, slug, origin, computedHash, scanVerdict? Kemahiran dipasang atau dikemas kini, sambil membawa keputusan imbasan rantaian bekalan

Blok pertama ialah kitaran hayat PR itu sendiri. Blok kedua ialah pemantauan PR yang ditulis sendiri: isyarat tentang PR yang anda buka, setiap satu membawa forUserId supaya pengundian boleh menghalakannya kepada orang yang berkenaan dan bukan menyiarkannya kepada semua orang.

Acara Muatan Tercetus apabila
PullRequestPublished prId, workspaceId, repoOwner, repoName Ejen membuka satu PR
PullRequestStatusChanged status, workspaceId, prId?, repoFullName?, prNumber? PR dicantum/ditutup/dibuka/dibuka semula/diluluskan
PrMerged prId, workspaceId, agentId PR dicantum — isyarat khusus cantuman yang disimpan untuk analitik/pemberitahuan
PrReviewRequested workspaceId, repoOwner, repoName, prNumber, prTitle GitHub meminta semakan daripada pengguna pelayan (pengundian pemberitahuan, review_requested)
PrMentioned workspaceId, repoOwner, repoName, prNumber, prTitle Pengguna pelayan disebut pada satu PR (pengundian pemberitahuan, mention)
ExternalPrMerged workspaceId, repoOwner, repoName, prNumber, prTitle, mergedByLogin? PR yang dipantau secara luaran (bukan ejen) dicantum, dikesan oleh pengundian pemberitahuan GitHub; memetakan kepada kategori pemberitahuan prMerged
ExternalPrDetected repoOwner, repoName, prNumber, prTitle, author, workspaceId? PR bukan ejen ditemui melalui pengundian — untuk pipeline sahaja (memacu external_pr_welcome), tidak menimbulkan sebarang pemberitahuan
PrHeadChanged repoOwner, repoName, prNumber, prTitle, previousHeadSha, headSha, workspaceId SHA kepala PR berubah — penulis membuat push
ReviewBecameStale workspaceId, spaceId, repoOwner, repoName, prNumber, prTitle, reviewedHeadSha, headSha Semakan AI yang sudah selesai tidak lagi menerangkan PR yang disemaknya. Hanya tercetus apabila wujud semakan bagi commit yang digantikan, jadi ia kekal sebagai isyarat dan bukan ping bagi setiap push

Kesemua enam membawa workspaceId, repoOwner, repoName, prNumber, prTitle dan forUserId yang pilihan.

Acara Muatan tambahan Tercetus apabila
PrMergeReadinessChanged ready, reason PR yang anda tulis menjadi boleh dicantum, atau tidak lagi
PrReviewDecisionChanged decision, reviewersRemaining, approverLogin? Penyemak meluluskan, meminta perubahan, atau kelulusannya ditolak
PrChecksStatusChanged failing, failingCheckName?, failingCheckUrl? CI menjadi merah, atau pulih semula
PrCommentMentioned commentId, authorLogin, bodyPreview, isReviewComment, threadId?, path?, line? Seseorang menyebut anda dalam ulasan PR atau ulasan semakan
PrThreadReplied commentId, authorLogin, bodyPreview, threadId?, path?, line? Seseorang membalas dalam benang semakan yang anda sertai
PrThreadResolved threadId, commentId?, path?, line? Seseorang menyelesaikan benang semakan yang anda sertai
Acara Muatan Tercetus apabila
MessageReceived spaceId, messageId, senderName, contentPreview, isAgentMessage, workspaceId?, mentions, requestedByUserId?, senderUserId? Mesej baharu tiba
SpaceCreated spaceId, workspaceId Ruang dicipta
SpaceDeleted spaceId, workspaceId Ruang dipadam
SpaceProvisioningChanged workspaceId, spaceId, status, step? Ruang kerja bagi ruang itu memasuki penyediaan, mencapai satu langkah (mengklon repo, checkout PR, menyediakan ejen), atau bertukar kepada sedia/gagal — jambatan sembang menceritakannya pada kad tugasnya
Acara Muatan Tercetus apabila
TicketCreated ticketId, workspaceId Tiket dicipta
TicketAssigned ticketId, ticketTitle, ticketBody?, ticketUrl?, assignedAgentId?, assigneeType, assignedTeamId?, workspaceId Tiket ditugaskan kepada prinsipal atau pasukan
TicketCompleted ticketId Kerja selesai (terminal)
TicketFailed ticketId, errorMessage Ejen gagal (terminal)
TicketCancelled ticketId Tiket dibatalkan (terminal)
TicketStatusChanged ticketId, workspaceId, from, to Sebarang perubahan status
TicketReassigned ticketId, workspaceId, fromAgentId?, toAgentId? Tiket ditugaskan semula
TicketDetailsUpdated ticketId, workspaceId Tajuk, perihalan, atau keutamaan berubah

Strim kitaran hayat tugas yang bersatu — satu larian ejen yang dihantar, dikunci oleh id log lariannya. Setiap acara membawa taskId, seq monotonik bagi setiap tugas, workspaceId?, agentId? dan satu phase; baris di bawah menyenaraikan medan tambahan sahaja.

Acara Muatan Tercetus apabila
TaskDispatched — Tugas diserahkan kepada bahagian belakang untuk dilaksanakan
TaskRunning — Tugas mula menghasilkan output
TaskWaitingLocalDirectory lockedPath, holderTaskId? Tugas diletakkan — tugas lain memiliki kunci laluan pada cakera yang diperlukannya
TaskProgress note? Titik semak kemajuan pertengahan larian
TaskMessage messageType, content Mesej yang distrim (text/thinking/tool_use/tool_result/error); dilaporkan di bawah fasa progress
TaskCompleted summary? Tugas selesai dengan jayanya
TaskFailed errorMessage Tugas tamat dengan ralat
TaskCancelled — Tugas dibatalkan sebelum selesai

Enum TaskPhase juga mempunyai ahli queued, tetapi tiada apa-apa menerbitkan acara queued — tiada kelas TaskQueued. Bingkai pertama yang boleh diperhatikan bagi sesuatu tugas ialah TaskDispatched.

Acara Muatan Tercetus apabila
PipelineRunCompleted workspaceId, pipelineRunId, templateId Larian selesai
PipelineRunCancelled workspaceId, pipelineRunId, templateId Larian dibatalkan (oleh pengguna atau sistem) — hentian yang disengajakan, bukan ralat
PipelineRunFailed workspaceId, pipelineRunId, templateId, errorMessage Larian gagal

Hanya peralihan terminal diterbitkan. Tiada PipelineRunStarted dan tiada acara bagi setiap langkah: kemajuan sesuatu langkah sampai kepada klien melalui baris larian itu sendiri dan strim kitaran hayat tugas bagi mana-mana ejen yang dihantarnya, bukan melalui bas.

Acara Muatan Tercetus apabila
ActivityLogged id, actorType, actorId?, action, entityType, entityId?, details?, workspaceId?, runId? Entri jejak audit dicipta
BudgetThresholdCrossed scopeType, scopeId, spentCents, budgetCents, isHardStop Perbelanjaan melebihi ambang
Acara Muatan Tercetus apabila
WorkspaceMemberAdded workspaceId, userId, role Pengguna menyertai ruang kerja (penebusan jemputan atau penambahan oleh pentadbir)
WorkspaceMemberRemoved workspaceId, userId Ahli dibuang — sesi hidup pengguna itu yang berskop kepada ruang kerja mesti menyemak semula akses dengan segera
WorkspaceMemberRoleChanged workspaceId, userId, role Peranan ahli berubah

Keahlian ialah keseluruhan permukaan identiti pada bas ini. Penciptaan pengguna dan pembatalan peranti berlaku, tetapi ia tidak diterbitkan sebagai acara domain — pembatalan dikuatkuasakan secara terus terhadap sesi hidup dan bukan dialihkan melalui bas.

Acara Muatan Tercetus apabila
CalendarAuthExpired workspaceId, accountEmail Token penyegaran OAuth bagi akaun yang bersambung menjadi tidak sah secara kekal (diterbitkan sekali bagi setiap episod pemutusan sambungan)
MeetingStartingSoon workspaceId, eventId, title, startTime, meetingUrl? Acara kalendar akan bermula dalam tetingkap amaran awal yang dikonfigurasikan
MeetingRecordingStopped workspaceId, meetingId, title, userNotes, transcript, summaryInstructions? Rakaman mesyuarat tamat dan mencetuskan pipeline meeting_summary terbina
Acara Muatan Tercetus apabila
RigClosedEvent workspaceId, rigId, reason Sebuah stesen hilang, berserta sebab penutupannya; pelanggan bertindak hanya pada backendFailure — setiap sebab lain diminta atau disertai oleh RigReaped
RigControlChanged workspaceId, rigId, controller? Seorang manusia mengambil kawalan eksklusif ke atas stesen atau memulangkannya (controller null apabila dilepaskan — acara ini tidak merekod siapa yang melepaskannya)
RigReaped workspaceId, rigId, reason, agentId? Sistem menuntut semula sebuah mesin: melahu, TTL, atau penyingkiran akibat tekanan memori (dilaporkan sebagai idleTimeout), berserta ejen pemandunya

Pembukaan stesen bukan satu acara. But selesai dan baris stesen bertukar kepada sedia; tiada apa-apa diterbitkan, jadi tiada RigOpened untuk dilanggan.

Beberapa subsistem yang kelihatan dipacu acara dari luar sebenarnya tidak. Ia disenaraikan di sini kerana ketiadaannya ialah keputusan reka bentuk yang wajar diketahui sebelum anda mencari sebarang cangkuk:

Subdomain Bagaimana keadaan bergerak sebaliknya
Memori record_memory_fact dan rakan-rakannya menulis dan kembali; dapatan semula membaca. Tiada apa-apa menerbitkan tentang sesuatu fakta atau konflik
Orkestrasi Cadangan, kelulusannya dan larian pipeline yang dijana ialah baris dan panggilan RPC
Dokumen pelan submit_plan menulis satu revisi; kelulusan mewujudkan satu orkestrasi. Kedua-duanya tidak diumumkan
Artifak publish_artifact / revise_artifact menulis revisi secara terus
Kelulusan Eskalasi dikendalikan dalam perkhidmatan aliran kerja kelulusan
Penyegerakan tiket Penyelaras vendor melanggan acara tiket di atas; webhook masuk digunakan secara terus
Penyegaran kalendar Satu penyegerakan upsert acara dan klien membaca semula; tiada siaran penyegaran
Cantuman worktree Direkodkan dalam worktree_merge_log dan dibaca dari situ

Setiap pelanggan di bawah dibina dalam runCcServer (atau perkhidmatan yang dibinanya). Tiada pelanggan di pihak klien.

Pelanggan Acara yang digunakannya
WorkspaceSeeder WorkspaceCreated
Penyemaian suite eval permulaan (sebaris) WorkspaceCreated
Penyediaan ruang sembang (sebaris) SpaceCreated
PipelineTriggerDispatcher Setiap DomainEvent; setiap pencetus yang didayakan menapis mengikut jenisnya sendiri
SubPipelineResumeListener PipelineRunCompleted, PipelineRunFailed
PipelineCostRollupListener AgentRunCompleted
BudgetEvaluationListener AgentRunCompleted
MeetingSummaryReconciler PipelineRunCompleted, PipelineRunFailed, PipelineRunCancelled (larian meeting_summary sahaja)
PipelineStepResumeListener AgentRunCompleted
AgentRunTaskCompleter AgentRunCompleted
GoalSupervisor AgentRunCompleted
CheckerDispatchListener AgentRunCompleted
TeamRoutingService AgentRunCompleted, TicketAssigned
OrchestrationRunListener PipelineRunCancelled, PipelineRunFailed
MultiVendorTicketSyncCoordinator TicketCreated, TicketAssigned, TicketReassigned, TicketStatusChanged, TicketDetailsUpdated
WorktreeGcListener TicketCompleted, TicketCancelled, SpaceDeleted, PrMerged, PullRequestStatusChanged
ChatBridgeService MessageReceived, SpaceProvisioningChanged
ActivityLogPersister ActivityLogged
RigEventListener RigControlChanged, RigReaped, RigClosedEvent — menyuntik notis dalam bahasa mudah ke lorong pemanduan ejen pemandunya
StaleReviewWatcher PrHeadChanged — menerbitkan ReviewBecameStale hanya apabila wujud semakan selesai bagi commit yang digantikan
GitHubPrConversationBridge AgentRunCompleted — balasan perbualan PR keluar
NotificationFeedRecorder Kedua puluh dua acara kelas pemberitahuan di bawah
RemoteEventForwarder Kedua puluh dua itu serta TicketReassigned dan setiap TaskLifecycleEvent. Tiga acara keahlian itu hanya membatalkan kesahihan cache keahlian bagi setiap ruang kerjanya; ia tidak dimajukan sebagai bingkai
LocalRpcServer / RemoteRelayHost WorkspaceMemberRemoved — menggugurkan langganan ruang kerja yang dilampirkan oleh pengguna itu; soket kekal terbuka

TicketAssigned ialah isyarat audit dan pemberitahuan serta pencetus pipeline. Penugasan kepada ejen merekodkan pemilikan dan tidak memulakan sebarang larian — tiada penghantar tiket. Penugasan kepada pasukan (assignedTeamId ditetapkan) ialah pengecualiannya: TeamRoutingService menghantar ketua pasukan.

TicketRemoteSyncHandler diisytiharkan tetapi tidak pernah dibina dalam kod pengeluaran, jadi ia tidak melanggan apa-apa hari ini. NotificationEventMapper di pihak klien dibina hanya dalam ujiannya sendiri — ia ialah sisa laluan dalam proses dari sebelum pemisahan klien/pelayan. Toast langsung datang daripada bingkai wayar di bawah.

Di pelayan, NotificationFeedRecorder dan RemoteEventForwarder menukar acara ini menjadi bingkai wayar notifications/* (notification_wire.dart). Di klien, RpcNotificationMapper → mapNotificationFrame menukar bingkai menjadi AppNotification.

Terdapat tepat tujuh belas kategori pemberitahuan. Beberapa acara memetakan kepada lebih daripada satu kaedah wayar, kerana bingkai membawa tepi itu (gagal berbanding pulih) manakala kategori membawa soalan (“apa yang sedang CI lakukan?”).

Kategori Acara sumber Kaedah wayar
newMessage MessageReceived notifications/message_received (menyebut anda)
agentRunCompleted MessageReceived notifications/message_received (is_agent_message, tidak menyebut anda)
agentAwaitingInput AgentAwaitingInput notifications/agent_awaiting_input
ticketAssigned TicketAssigned notifications/ticket_assigned
ticketStatusChanged TicketStatusChanged notifications/ticket_status_changed
pullRequestPublished PullRequestPublished notifications/pr_published
prMerged PrMerged notifications/pr_merged
prMerged ExternalPrMerged notifications/external_pr_merged
prMentioned PrMentioned notifications/pr_mentioned
prMentioned PrCommentMentioned notifications/pr_comment_mentioned
reviewRequested PrReviewRequested notifications/pr_review_requested
reviewStale ReviewBecameStale notifications/review_stale
prMergeReadiness PrMergeReadinessChanged notifications/pr_ready_to_merge / pr_merge_blocked
prReviewDecision PrReviewDecisionChanged notifications/pr_approved / pr_changes_requested / pr_review_dismissed
prChecksStatus PrChecksStatusChanged notifications/pr_checks_failed / pr_checks_recovered
prThreadActivity PrThreadReplied notifications/pr_thread_replied
prThreadActivity PrThreadResolved notifications/pr_thread_resolved
meetingStartsSoon MeetingStartingSoon notifications/meeting_starting_soon
calendarAuthExpired CalendarAuthExpired notifications/calendar_auth_expired
rigStatusChanged RigControlChanged notifications/rig_control_changed
rigStatusChanged RigReaped notifications/rig_reaped
rigStatusChanged RigClosedEvent notifications/rig_closed

Bingkai pengambilalihan stesen tidak dihantar kembali kepada sesiapa yang mengambil alihnya, pelepasan tidak ditapis (acara tidak merekod siapa yang melepaskannya), dan hanya penutupan backendFailure menghasilkan bingkai rig_closed — sebab-sebab lain sama ada diminta atau sudah diliputi oleh bingkai penuaian.

AgentAwaitingInput diterbitkan oleh AgentAwaitingInputPublisher, yang memerhati daftar kelulusan dan daftar sekatan kelayakan untuk entri baharu, dan dimaklumkan tentang setiap soalan ask_user oleh AgentQuestionService. Satu penantian ialah satu acara; tiada apa-apa diterbitkan apabila penantian berakhir.

Kelima-lima kategori PR yang ditulis sendiri membawa forUserId, jadi ia sampai kepada penulis dan bukan kepada semua orang dalam ruang kerja.

RemoteEventForwarder turut memajukan TicketReassigned sebagai notifications/ticket_reassigned dan setiap TaskLifecycleEvent sebagai notifications/task_<phase>. Kedua-duanya tidak memetakan kepada mana-mana kategori pemberitahuan — ia memacu UI langsung, bukan pusat pemberitahuan. Acara keahlian tidak dimajukan sebagai bingkai: ia membatalkan kesahihan cache pemaju itu, dan hos sesi menggugurkan langganan ruang kerja ahli yang dibuang.