feat(phase707): screen share CSV & soundboard registry export mesh parity (v0.8.682)
Add signed guild screen share CSV mesh export and soundboard registry CSV export (RPC 132/133): screen-csv-ui.js, screen-csv-mixin.js, delivery-receipts collections, guild gossip handlers, ui-flow IPC, deep link ?screen-csv=1, screen-csv-errors dev filter, agentctl screen/soundboard journeys, and test:ci-phase707 regression bundle chaining phase706.
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
|
||||
Agent control plane for Pearcord — send the same IPC messages the UI sends, read `view` snapshots, and run scripted journeys against a **live worker** or an in-process **headless** session.
|
||||
|
||||
**Phase 707 (v0.8.682):** `runScreenShareCsvJourney`, `runSoundboardRegistryExportJourney`; bundle `test:agentctl-phase707-screen`.
|
||||
|
||||
**Phase 692 (v0.8.667):** `runDigestRelayHandoffCsvJourney`, `runArchivePeerExportMeshJourney`; bundle `test:agentctl-phase692-relay`.
|
||||
|
||||
**Phase 691 (v0.8.666):** `runHookFailureDigestCsvJourney`, `runComplianceSnapshotExportJourney`; bundle `test:agentctl-phase691-digest`.
|
||||
|
||||
+42
@@ -4066,6 +4066,48 @@ class HeadlessSession {
|
||||
}
|
||||
}
|
||||
|
||||
async runScreenShareCsvJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'sc707', displayName: 'Screen CSV 707' })
|
||||
await this.createGuild({ name: 'Screen CSV 707', publicListing: false })
|
||||
await this.wait({ mode: 'guild' }, 45000)
|
||||
await this.createGuildChannel('Voice Share', { type: 'voice' })
|
||||
await this.refreshView()
|
||||
const ch = this._lastView?.channels?.find((c) => c.type === 'voice')
|
||||
if (ch?.id) {
|
||||
await this.platform.joinVoiceChannel(ch.id).catch(() => {})
|
||||
await this.startGuildScreenShare('Phase707 screen export').catch(() => {})
|
||||
}
|
||||
const pushed = await this.platform.pushScreenShareCsvToMesh()
|
||||
const v = await this.refreshView()
|
||||
if (!pushed?.signature && !v.screenShareCsvMeta?.signature) {
|
||||
throw new Error('expected signed screen share CSV after mesh push')
|
||||
}
|
||||
return {
|
||||
guildScreenCsvCount: (v.screenShareCsvRows || []).length + (v.guildScreenShares || []).length,
|
||||
hasMeta: v.screenShareCsvMeta != null,
|
||||
shareCount: (v.guildScreenShares || []).length
|
||||
}
|
||||
}
|
||||
|
||||
async runSoundboardRegistryExportJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'sb707', displayName: 'Soundboard 707' })
|
||||
await this.createGuild({ name: 'Soundboard 707', publicListing: false })
|
||||
await this.wait({ mode: 'guild' }, 45000)
|
||||
await this.refreshView()
|
||||
const pushed = await this.platform.pushSoundboardRegistryExportToMesh()
|
||||
const v = await this.refreshView()
|
||||
if (!pushed?.signature) {
|
||||
throw new Error('expected signed soundboard registry CSV export')
|
||||
}
|
||||
return {
|
||||
guildScreenCsvCount: (v.soundboardRegistryExportCsvRows || []).length,
|
||||
hasSoundboardExport:
|
||||
v.lastSoundboardRegistryExport != null || (v.soundboardRegistryExportCsvRows || []).length > 0
|
||||
}
|
||||
}
|
||||
|
||||
async runForumPostSearchJourney () {
|
||||
if (!this.platform) throw new Error('headless not started')
|
||||
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })
|
||||
|
||||
Reference in New Issue
Block a user