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.
|
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 692 (v0.8.667):** `runDigestRelayHandoffCsvJourney`, `runArchivePeerExportMeshJourney`; bundle `test:agentctl-phase692-relay`.
|
||||||
|
|
||||||
**Phase 691 (v0.8.666):** `runHookFailureDigestCsvJourney`, `runComplianceSnapshotExportJourney`; bundle `test:agentctl-phase691-digest`.
|
**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 () {
|
async runForumPostSearchJourney () {
|
||||||
if (!this.platform) throw new Error('headless not started')
|
if (!this.platform) throw new Error('headless not started')
|
||||||
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })
|
await this.registerUser({ username: 'fm672', displayName: 'Forum 672' })
|
||||||
|
|||||||
Reference in New Issue
Block a user