Expose Persona bridge mouth modes
This commit is contained in:
parent
b2e25b44e8
commit
928ec0333b
6 changed files with 177 additions and 3 deletions
|
|
@ -859,11 +859,29 @@ fn collect_coordinator_status(
|
|||
],
|
||||
)
|
||||
.unwrap_or_else(|_| json!({"latestArtifacts": []}));
|
||||
let latest_reddit_persona = status_cli::native_json(
|
||||
"epiphany-persona-reddit",
|
||||
&[
|
||||
"latest",
|
||||
"--artifact-dir",
|
||||
&persona_dir.to_string_lossy(),
|
||||
"--limit",
|
||||
"8",
|
||||
],
|
||||
)
|
||||
.unwrap_or_else(|_| json!({"latestArtifacts": []}));
|
||||
let mut latest_artifacts = latest_discord_persona
|
||||
.get("latestArtifacts")
|
||||
.and_then(Value::as_array)
|
||||
.cloned()
|
||||
.unwrap_or_default();
|
||||
latest_artifacts.extend(
|
||||
latest_reddit_persona
|
||||
.get("latestArtifacts")
|
||||
.and_then(Value::as_array)
|
||||
.cloned()
|
||||
.unwrap_or_default(),
|
||||
);
|
||||
latest_artifacts.extend(
|
||||
latest_other_persona
|
||||
.get("latestArtifacts")
|
||||
|
|
|
|||
|
|
@ -696,11 +696,31 @@ fn native_auxiliary_status(root: &Path) -> Result<NativeAuxiliaryStatus> {
|
|||
.unwrap_or_else(
|
||||
|error| json!({"status": "error", "error": error.to_string(), "latestArtifacts": []}),
|
||||
);
|
||||
let latest_reddit_persona = native_json(
|
||||
"epiphany-persona-reddit",
|
||||
&[
|
||||
"latest",
|
||||
"--artifact-dir",
|
||||
&persona_dir.to_string_lossy(),
|
||||
"--limit",
|
||||
"8",
|
||||
],
|
||||
)
|
||||
.unwrap_or_else(
|
||||
|error| json!({"status": "error", "error": error.to_string(), "latestArtifacts": []}),
|
||||
);
|
||||
let mut latest_artifacts = latest_discord_persona
|
||||
.get("latestArtifacts")
|
||||
.and_then(Value::as_array)
|
||||
.cloned()
|
||||
.unwrap_or_default();
|
||||
latest_artifacts.extend(
|
||||
latest_reddit_persona
|
||||
.get("latestArtifacts")
|
||||
.and_then(Value::as_array)
|
||||
.cloned()
|
||||
.unwrap_or_default(),
|
||||
);
|
||||
latest_artifacts.extend(
|
||||
latest_other_persona
|
||||
.get("latestArtifacts")
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ remembers doctrine; the branch remembers the blade.
|
|||
- Bifrost commit `30e5945` strengthens the future-surface bridge law: hosted bridge actions now persist `TargetSurfaceName`, `other-request` sends it from `--surface-name`, and Bifrost rejects `Other` Persona/agent actions unless the request names the future surface and the Heimdall capability reference matches it, such as `heimdall:bluesky:*`. This makes Epiphany's generic Persona mouth a client-side purity seal over server-side law instead of a trust assumption. Verified with focused `PlatformEndpointsTests|BridgeCliTests|ProviderAdvertisementTests` passing 71 tests, provider print/surface/binding smokes, and a temporary CultCache advertisement export/readback path.
|
||||
- Persona public mouth crossings now fail closed on missing or wrong-surface authority cargo before any Bifrost CLI invocation. `epiphany-persona-discord post` and `epiphany-persona-reddit post` require a Bifrost identity plus a Heimdall-backed `heimdall:discord:*` or `heimdall:reddit:*` capability/account reference, write blocked candidate artifacts with `missing-bifrost-identity`, `missing-heimdall-capability-ref`, or `wrong-heimdall-capability-surface`, and smokes prove the bridged path still carries identity, run/lane/agent, source, authority, and surface-shaped Heimdall provenance. Verified sequentially with `cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-discord -- smoke` and `cargo run --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-persona-reddit -- smoke`.
|
||||
- Epiphany now has the matching generic Persona mouth for future Bifrost surfaces. `epiphany-persona-other` supports `draft`, `request`, `latest`, and `smoke`; records the same parent-side `epiphany.persona_speech_audit.v0` and CultMesh audit as the Discord/Reddit mouths; requires Bifrost identity plus a target-shaped Heimdall reference such as `heimdall:bluesky:*`; refuses missing bridge, missing identity, missing Heimdall reference, wrong-surface authority cargo, and repeated target saturation before transport; and invokes Bifrost `tools/bifrost-bridge.mjs other-request` with Epiphany run/lane/agent provenance when eligible. Native MVP status/coordinator Persona action lists expose `otherWorldPersonaRequest` beside Discord/Reddit, and the local wrapper build list includes the new binary. Verified with `epiphany-persona-other -- smoke`, Discord/Reddit Persona smokes, and focused `cargo check` for the touched binaries. `epiphany-mvp-status-smoke` could not run because the vendored `codex-app-server.exe` prerequisite was absent; rebuilding `codex-app-server` timed out twice without producing the binary.
|
||||
- The local operator wrapper now exposes the advertised Persona outside-world mouth actions directly: `-Mode persona-discord`, `-Mode persona-reddit`, and `-Mode persona-other`. These modes call the native mouth binaries, write shared `.epiphany-persona` artifacts plus CultMesh speech audits, skip the Codex app-server compatibility build, and leave Bifrost/Heimdall as the crossing authority. Native status/coordinator readback now merges Discord, Reddit, and Other latest Persona artifacts instead of advertising Reddit while only reading Discord/Other. Verified with focused `cargo build --manifest-path .\epiphany-core\Cargo.toml --bin epiphany-mvp-status --bin epiphany-mvp-coordinator --bin epiphany-persona-discord --bin epiphany-persona-reddit --bin epiphany-persona-other`, PowerShell parser proof for `tools/epiphany_local_run.ps1`, draft wrapper runs for all three modes, and `-Mode status` readback showing `personaBubble,characterTurn,discordPersonaPost,redditPersonaPost,otherWorldPersonaRequest` plus recent shared Persona artifacts.
|
||||
- This Codex operator's own roadmap/todo posture has been retuned for this scale target, with the Epiphany Imagination specialist as an optional sub-agent rail rather than the whole point. `notes/epiphany-investor-readiness-roadmap.md` now says: make the local Mom MVP a repeatable proof bundle; build the Bifrost-first external-work bridge; add compute/review/accepted-artifact accounting; keep fresh-repo operation repeatable without supervisor contamination; keep public/operator-safe exports sealed; and treat angel capital as fuel for capacity, not command authority. The Imagination specialist prompt was also updated so investor-scale Objective Drafts must name Bifrost provenance, bounded Epiphany proof, maintainer review, receipts/ledger evidence, compute/output metrics, public/private export safety, consent, and legal/security gates.
|
||||
- Local operator status runs now write typed CultMesh operator witnesses into `.epiphany-run/cultmesh/local-verse.ccmp`: `epiphany-operator-run` records the run intent before acting, `epiphany-operator-snapshot` distills the operator-safe MVP status artifact, and `epiphany-operator-run` records the completion receipt after success. The final `local-verse-context.json` is queried after those witnesses exist, so the operator read path sees latest run intent, snapshot, and receipt from the same local Verse vessel instead of treating separate JSON artifacts or side stores as truth.
|
||||
- `epiphany-operator-snapshot from-status` also mirrors the latest native status `tools.invocations[]` row into the same local Verse as `epiphany.cultmesh.daemon_tool_invocation_intent.v0`, plus `epiphany.cultmesh.daemon_tool_invocation_receipt.v0` when runtime-spine has a receipt id. Runtime-spine remains the tool lifecycle owner and raw MCP JSON stays quarantined behind `epiphany.tool_invocation_intent.v0` / `epiphany.tool_invocation_receipt.v0`; the local Verse mirror is operator-safe routing/readback.
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -84,6 +84,7 @@ active_subgoals:
|
|||
- Bifrost provider advertisement truth is now synced with the bridge implementation and pushed upstream at Bifrost commit `718ae94`: `tools/provider-advertisement.mjs print` names the current bridge action ledger, GitHub webhook work/review sync, and Heimdall patron-support intake endpoints; schemas call bridge action/receipt and patron support current hosted contracts; command boundaries name GitHub draft PR/comment, future-surface `other-request`, and Heimdall-signed Patreon/PayPal support facts; `print-surface` and `print-binding` expose read-only Eve/operator capability sight including `github-bridge`, `github-work-sync`, `future-surface-bridge`, and `heimdall-patron-support-intake`. Focused Bifrost proof `ProviderAdvertisementTests|BridgeCliTests` passed 32 tests, and the CultCache export path wrote advertisement, operator surface, and interface binding to a temporary witness successfully.
|
||||
- Bifrost future-surface bridge policy is now hosted law, not only Epiphany mouth discipline, and is pushed upstream at Bifrost commit `30e5945`: bridge actions persist `TargetSurfaceName`; `tools/bifrost-bridge.mjs other-request` sends `targetSurfaceName` from `--surface-name`; hosted policy rejects `Other` Persona/agent actions without a named future surface; and the Heimdall capability reference must contain that named surface such as `heimdall:bluesky:*` before Bifrost authorizes the crossing. The provider advertisement now says future-surface requests require named-surface Heimdall capability matching. Focused Bifrost proof `PlatformEndpointsTests|BridgeCliTests|ProviderAdvertisementTests` passed 71 tests, provider print/surface/binding smokes succeeded, and the CultCache advertisement export path wrote then removed a temporary witness successfully.
|
||||
- Epiphany now has a generic Persona outside-world mouth for future surfaces. `epiphany-persona-other` supports `draft`, `request`, `latest`, and `smoke`; records the same parent-side `epiphany.persona_speech_audit.v0`/CultMesh audit as the Discord and Reddit mouths; requires Bifrost identity plus a surface-shaped Heimdall capability/account reference such as `heimdall:bluesky:*`; refuses missing bridge, missing identity, missing Heimdall reference, wrong Heimdall surface, and repeated target saturation before transport; and invokes Bifrost `tools/bifrost-bridge.mjs other-request` with Epiphany run/lane/agent provenance when eligible. MVP status/coordinator Persona action lists now expose `otherWorldPersonaRequest` beside Discord/Reddit public mouth actions, and the local wrapper build list includes the new binary. Verified with `epiphany-persona-other -- smoke`, Discord/Reddit Persona smokes, and focused `cargo check` for the touched status/coordinator/mouth binaries; `epiphany-mvp-status-smoke` could not run because the vendored `codex-app-server.exe` prerequisite was absent and rebuilding `codex-app-server` timed out twice without producing the binary.
|
||||
- The local operator wrapper now has first-class Persona mouth modes for Bifrost-owned outside-world crossings: `persona-discord`, `persona-reddit`, and `persona-other`. These modes invoke the native mouth binaries, write shared `.epiphany-persona` artifacts plus CultMesh speech audits, avoid the Codex app-server compatibility build, and surface compact operator proof rows without moving Discord/Reddit/future-provider authority into Epiphany. Native MVP status and coordinator readback now merge Discord, Reddit, and Other latest Persona artifacts while advertising `discordPersonaPost`, `redditPersonaPost`, and `otherWorldPersonaRequest`. Verified with focused `cargo build` for status/coordinator/Persona mouth binaries, PowerShell parse proof for `tools/epiphany_local_run.ps1`, local draft wrapper runs for all three Persona mouth modes, and `-Mode status` readback showing the advertised actions plus recent shared Persona artifacts.
|
||||
- Use `notes/epiphany-investor-readiness-roadmap.md` as this Codex operator's investor-scale todo rail and as the optional Epiphany Imagination sub-agent planning rail. Angel capital is fuel for compute, review capacity, legal diligence, infrastructure, and public proof, not a governance throne. The operator roadmap is now: make the local Mom MVP a repeatable proof bundle; build the Bifrost-first external-work bridge; add model-spend/review-load/accepted-artifact accounting; keep fresh-repo operation repeatable without supervisor contamination; and keep public/operator-safe exports sealed against private worker/operator/agent context. Imagination should translate world-scale Colossus pressure into Bifrost-first Objective Drafts with consent, maintainer review, receipts/ledger evidence, compute/output metrics, public/private export safety, and bounded proof artifacts.
|
||||
- The May 2026 teardown/rebuild migration is archived under `notes/archive/epiphany-ideal-architecture-rebuild-plan.md` unless a concrete regression reopens it. Preserve the new foundation: Epiphany view/coordinator policy lives in `epiphany-core`, runtime-spine owns job/result lifecycle identity through `runtime_links`, duplicate acceptance is receipt-keyed, public findings stay typed/sealed, view expansion requires a core contract, and app-server remains routing/adaptation rather than a second policy throne.
|
||||
- Treat Phase 5 update/distill/propose/promote/read/notification as complete enough unless a concrete regression appears.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
param(
|
||||
[ValidateSet("status", "plan", "smoke", "run", "mvp", "agent-state-soa", "swarm-status", "swarm-poke-down", "swarm-triage", "cluster-topology", "eve-surfaces", "eve-connect", "collaboration-feedback", "daemon-survival-rehearsal", "repo-swarm-mvp-gate", "repo-livefire-closure", "bifrost-publication", "bifrost-public-proof", "bifrost-artifact-acceptance", "bifrost-metrics", "bifrost-accounting-bundle", "bifrost-ledger", "receipt-directory", "tool-directory", "tool-invoke", "swarm-overview", "gjallar", "repo-persona-intake", "repo-swarm-run", "repo-work-queue-run", "repo-work-public-proof", "repo-work-readiness", "repo-work-readiness-review", "repo-deployment-config-audit", "repo-deployment-runbook", "repo-deployment-aftercare-audit", "repo-work-service-plan", "repo-work-service-runbook", "repo-work-service-launch", "repo-work-service-audit", "swarm-online-runbook", "service-policy-directory", "service-plan", "service-launch", "service-runbook", "cluster-service-runbook", "cluster-service-install-plan", "cluster-service-install-execute", "cluster-service-audit", "cluster-service-start-plan", "cluster-service-stop-plan", "cluster-service-start-execute", "cluster-service-stop-execute", "cluster-service-execution-readiness", "cluster-service-execution-runbook", "cluster-service-execution-audit", "service-execution-runbook", "service-install-plan", "service-install-execute", "service-tick", "service-status", "service-reconcile", "service-execution-readiness", "service-execution-audit", "service-start-plan", "service-stop-plan", "service-start-execute", "service-stop-execute")]
|
||||
[ValidateSet("status", "plan", "smoke", "run", "mvp", "agent-state-soa", "swarm-status", "swarm-poke-down", "swarm-triage", "cluster-topology", "eve-surfaces", "eve-connect", "collaboration-feedback", "persona-discord", "persona-reddit", "persona-other", "daemon-survival-rehearsal", "repo-swarm-mvp-gate", "repo-livefire-closure", "bifrost-publication", "bifrost-public-proof", "bifrost-artifact-acceptance", "bifrost-metrics", "bifrost-accounting-bundle", "bifrost-ledger", "receipt-directory", "tool-directory", "tool-invoke", "swarm-overview", "gjallar", "repo-persona-intake", "repo-swarm-run", "repo-work-queue-run", "repo-work-public-proof", "repo-work-readiness", "repo-work-readiness-review", "repo-deployment-config-audit", "repo-deployment-runbook", "repo-deployment-aftercare-audit", "repo-work-service-plan", "repo-work-service-runbook", "repo-work-service-launch", "repo-work-service-audit", "swarm-online-runbook", "service-policy-directory", "service-plan", "service-launch", "service-runbook", "cluster-service-runbook", "cluster-service-install-plan", "cluster-service-install-execute", "cluster-service-audit", "cluster-service-start-plan", "cluster-service-stop-plan", "cluster-service-start-execute", "cluster-service-stop-execute", "cluster-service-execution-readiness", "cluster-service-execution-runbook", "cluster-service-execution-audit", "service-execution-runbook", "service-install-plan", "service-install-execute", "service-tick", "service-status", "service-reconcile", "service-execution-readiness", "service-execution-audit", "service-start-plan", "service-stop-plan", "service-start-execute", "service-stop-execute")]
|
||||
[string]$Mode = "smoke",
|
||||
[string]$Root = (Resolve-Path ".").Path,
|
||||
[string]$Workspace = "",
|
||||
|
|
@ -95,6 +95,14 @@ param(
|
|||
[string]$RepoDeploymentAftercareReceiptRef = "",
|
||||
[switch]$RepoWorkDryRun,
|
||||
[string]$PersonaInput = "",
|
||||
[ValidateSet("draft", "bubble", "post", "request", "latest", "smoke")]
|
||||
[string]$PersonaMouthAction = "draft",
|
||||
[string]$PersonaTitle = "Epiphany Persona bridge request",
|
||||
[string]$PersonaTarget = "",
|
||||
[string]$PersonaSurfaceName = "future-surface",
|
||||
[string]$PersonaName = "",
|
||||
[string]$PersonaChannelId = "",
|
||||
[string]$PersonaSubreddit = "",
|
||||
[switch]$SkipBuild,
|
||||
[switch]$AutoReview,
|
||||
[switch]$SupersedeFailedResults,
|
||||
|
|
@ -357,6 +365,7 @@ $modelRuntimeExe = Join-Path $TargetDir "debug\epiphany-model-runtime.exe"
|
|||
$toolAdapterExe = Join-Path $TargetDir "debug\epiphany-tool-codex-mcp-spine.exe"
|
||||
$heartbeatExe = Join-Path $TargetDir "debug\epiphany-heartbeat-store.exe"
|
||||
$PersonaExe = Join-Path $TargetDir "debug\epiphany-persona-discord.exe"
|
||||
$PersonaRedditExe = Join-Path $TargetDir "debug\epiphany-persona-reddit.exe"
|
||||
$PersonaOtherExe = Join-Path $TargetDir "debug\epiphany-persona-other.exe"
|
||||
$characterLoopExe = Join-Path $TargetDir "debug\epiphany-character-loop.exe"
|
||||
$agentMemoryExe = Join-Path $TargetDir "debug\epiphany-agent-memory-store.exe"
|
||||
|
|
@ -391,7 +400,7 @@ $runtimeStore = Join-Path $Workspace "state\runtime-spine.msgpack"
|
|||
$liveRuntimeMode = @("run", "mvp") -contains $Mode
|
||||
|
||||
if (-not $SkipBuild) {
|
||||
if ($Mode -ne "status" -and $Mode -ne "agent-state-soa" -and $Mode -ne "swarm-status" -and $Mode -ne "swarm-poke-down" -and $Mode -ne "swarm-triage" -and $Mode -ne "cluster-topology" -and $Mode -ne "eve-surfaces" -and $Mode -ne "eve-connect" -and $Mode -ne "collaboration-feedback" -and $Mode -ne "daemon-survival-rehearsal" -and $Mode -ne "repo-swarm-mvp-gate" -and $Mode -ne "repo-livefire-closure" -and $Mode -ne "repo-work-public-proof" -and $Mode -ne "bifrost-publication" -and $Mode -ne "bifrost-public-proof" -and $Mode -ne "bifrost-artifact-acceptance" -and $Mode -ne "bifrost-metrics" -and $Mode -ne "bifrost-accounting-bundle" -and $Mode -ne "bifrost-ledger" -and $Mode -ne "receipt-directory" -and $Mode -ne "tool-directory" -and $Mode -ne "tool-invoke" -and $Mode -ne "swarm-overview" -and $Mode -ne "gjallar" -and $Mode -ne "repo-persona-intake" -and $Mode -ne "repo-swarm-run" -and $Mode -ne "repo-work-queue-run" -and $Mode -ne "repo-work-readiness" -and $Mode -ne "repo-work-readiness-review" -and $Mode -ne "repo-deployment-config-audit" -and $Mode -ne "repo-deployment-runbook" -and $Mode -ne "repo-deployment-aftercare-audit" -and $Mode -ne "repo-work-service-plan" -and $Mode -ne "repo-work-service-runbook" -and $Mode -ne "repo-work-service-launch" -and $Mode -ne "repo-work-service-audit" -and $Mode -ne "swarm-online-runbook" -and $Mode -ne "service-policy-directory" -and $Mode -ne "service-plan" -and $Mode -ne "service-launch" -and $Mode -ne "service-runbook" -and $Mode -ne "cluster-service-runbook" -and $Mode -ne "cluster-service-install-plan" -and $Mode -ne "cluster-service-install-execute" -and $Mode -ne "cluster-service-audit" -and $Mode -ne "cluster-service-start-plan" -and $Mode -ne "cluster-service-stop-plan" -and $Mode -ne "cluster-service-start-execute" -and $Mode -ne "cluster-service-stop-execute" -and $Mode -ne "cluster-service-execution-readiness" -and $Mode -ne "cluster-service-execution-runbook" -and $Mode -ne "cluster-service-execution-audit" -and $Mode -ne "service-execution-runbook" -and $Mode -ne "service-install-plan" -and $Mode -ne "service-install-execute" -and $Mode -ne "service-tick" -and $Mode -ne "service-status" -and $Mode -ne "service-reconcile" -and $Mode -ne "service-execution-readiness" -and $Mode -ne "service-execution-audit" -and $Mode -ne "service-start-plan" -and $Mode -ne "service-stop-plan" -and $Mode -ne "service-start-execute" -and $Mode -ne "service-stop-execute") {
|
||||
if ($Mode -ne "status" -and $Mode -ne "agent-state-soa" -and $Mode -ne "swarm-status" -and $Mode -ne "swarm-poke-down" -and $Mode -ne "swarm-triage" -and $Mode -ne "cluster-topology" -and $Mode -ne "eve-surfaces" -and $Mode -ne "eve-connect" -and $Mode -ne "collaboration-feedback" -and $Mode -ne "persona-discord" -and $Mode -ne "persona-reddit" -and $Mode -ne "persona-other" -and $Mode -ne "daemon-survival-rehearsal" -and $Mode -ne "repo-swarm-mvp-gate" -and $Mode -ne "repo-livefire-closure" -and $Mode -ne "repo-work-public-proof" -and $Mode -ne "bifrost-publication" -and $Mode -ne "bifrost-public-proof" -and $Mode -ne "bifrost-artifact-acceptance" -and $Mode -ne "bifrost-metrics" -and $Mode -ne "bifrost-accounting-bundle" -and $Mode -ne "bifrost-ledger" -and $Mode -ne "receipt-directory" -and $Mode -ne "tool-directory" -and $Mode -ne "tool-invoke" -and $Mode -ne "swarm-overview" -and $Mode -ne "gjallar" -and $Mode -ne "repo-persona-intake" -and $Mode -ne "repo-swarm-run" -and $Mode -ne "repo-work-queue-run" -and $Mode -ne "repo-work-readiness" -and $Mode -ne "repo-work-readiness-review" -and $Mode -ne "repo-deployment-config-audit" -and $Mode -ne "repo-deployment-runbook" -and $Mode -ne "repo-deployment-aftercare-audit" -and $Mode -ne "repo-work-service-plan" -and $Mode -ne "repo-work-service-runbook" -and $Mode -ne "repo-work-service-launch" -and $Mode -ne "repo-work-service-audit" -and $Mode -ne "swarm-online-runbook" -and $Mode -ne "service-policy-directory" -and $Mode -ne "service-plan" -and $Mode -ne "service-launch" -and $Mode -ne "service-runbook" -and $Mode -ne "cluster-service-runbook" -and $Mode -ne "cluster-service-install-plan" -and $Mode -ne "cluster-service-install-execute" -and $Mode -ne "cluster-service-audit" -and $Mode -ne "cluster-service-start-plan" -and $Mode -ne "cluster-service-stop-plan" -and $Mode -ne "cluster-service-start-execute" -and $Mode -ne "cluster-service-stop-execute" -and $Mode -ne "cluster-service-execution-readiness" -and $Mode -ne "cluster-service-execution-runbook" -and $Mode -ne "cluster-service-execution-audit" -and $Mode -ne "service-execution-runbook" -and $Mode -ne "service-install-plan" -and $Mode -ne "service-install-execute" -and $Mode -ne "service-tick" -and $Mode -ne "service-status" -and $Mode -ne "service-reconcile" -and $Mode -ne "service-execution-readiness" -and $Mode -ne "service-execution-audit" -and $Mode -ne "service-start-plan" -and $Mode -ne "service-stop-plan" -and $Mode -ne "service-start-execute" -and $Mode -ne "service-stop-execute") {
|
||||
Invoke-Checked `
|
||||
-Label "build Codex app-server compatibility organ" `
|
||||
-FilePath $cargoExe `
|
||||
|
|
@ -424,6 +433,7 @@ if (-not $SkipBuild) {
|
|||
"--bin", "epiphany-mvp-coordinator-smoke",
|
||||
"--bin", "epiphany-heartbeat-store",
|
||||
"--bin", "epiphany-persona-discord",
|
||||
"--bin", "epiphany-persona-reddit",
|
||||
"--bin", "epiphany-persona-other",
|
||||
"--bin", "epiphany-character-loop",
|
||||
"--bin", "epiphany-agent-memory-store",
|
||||
|
|
@ -465,7 +475,7 @@ if ($Mode -eq "repo-livefire-closure") {
|
|||
if ($Mode -eq "bifrost-accounting-bundle") {
|
||||
$requiredBinaries += @($bifrostAccountingBundleExe)
|
||||
}
|
||||
if ($Mode -ne "status" -and $Mode -ne "agent-state-soa" -and $Mode -ne "swarm-status" -and $Mode -ne "swarm-poke-down" -and $Mode -ne "swarm-triage" -and $Mode -ne "cluster-topology" -and $Mode -ne "eve-surfaces" -and $Mode -ne "eve-connect" -and $Mode -ne "collaboration-feedback" -and $Mode -ne "daemon-survival-rehearsal" -and $Mode -ne "repo-swarm-mvp-gate" -and $Mode -ne "repo-livefire-closure" -and $Mode -ne "repo-work-public-proof" -and $Mode -ne "bifrost-publication" -and $Mode -ne "bifrost-public-proof" -and $Mode -ne "bifrost-artifact-acceptance" -and $Mode -ne "bifrost-metrics" -and $Mode -ne "bifrost-accounting-bundle" -and $Mode -ne "bifrost-ledger" -and $Mode -ne "receipt-directory" -and $Mode -ne "tool-directory" -and $Mode -ne "tool-invoke" -and $Mode -ne "swarm-overview" -and $Mode -ne "gjallar" -and $Mode -ne "repo-persona-intake" -and $Mode -ne "repo-swarm-run" -and $Mode -ne "repo-work-queue-run" -and $Mode -ne "repo-work-readiness" -and $Mode -ne "repo-work-readiness-review" -and $Mode -ne "repo-deployment-config-audit" -and $Mode -ne "repo-deployment-runbook" -and $Mode -ne "repo-deployment-aftercare-audit" -and $Mode -ne "repo-work-service-plan" -and $Mode -ne "repo-work-service-runbook" -and $Mode -ne "repo-work-service-launch" -and $Mode -ne "repo-work-service-audit" -and $Mode -ne "swarm-online-runbook" -and $Mode -ne "service-policy-directory" -and $Mode -ne "service-plan" -and $Mode -ne "service-launch" -and $Mode -ne "service-runbook" -and $Mode -ne "cluster-service-runbook" -and $Mode -ne "cluster-service-install-plan" -and $Mode -ne "cluster-service-install-execute" -and $Mode -ne "cluster-service-audit" -and $Mode -ne "cluster-service-start-plan" -and $Mode -ne "cluster-service-stop-plan" -and $Mode -ne "cluster-service-start-execute" -and $Mode -ne "cluster-service-stop-execute" -and $Mode -ne "cluster-service-execution-readiness" -and $Mode -ne "cluster-service-execution-runbook" -and $Mode -ne "cluster-service-execution-audit" -and $Mode -ne "service-execution-runbook" -and $Mode -ne "service-install-plan" -and $Mode -ne "service-install-execute" -and $Mode -ne "service-tick" -and $Mode -ne "service-status" -and $Mode -ne "service-reconcile" -and $Mode -ne "service-execution-readiness" -and $Mode -ne "service-execution-audit" -and $Mode -ne "service-start-plan" -and $Mode -ne "service-stop-plan" -and $Mode -ne "service-start-execute" -and $Mode -ne "service-stop-execute") {
|
||||
if ($Mode -ne "status" -and $Mode -ne "agent-state-soa" -and $Mode -ne "swarm-status" -and $Mode -ne "swarm-poke-down" -and $Mode -ne "swarm-triage" -and $Mode -ne "cluster-topology" -and $Mode -ne "eve-surfaces" -and $Mode -ne "eve-connect" -and $Mode -ne "collaboration-feedback" -and $Mode -ne "persona-discord" -and $Mode -ne "persona-reddit" -and $Mode -ne "persona-other" -and $Mode -ne "daemon-survival-rehearsal" -and $Mode -ne "repo-swarm-mvp-gate" -and $Mode -ne "repo-livefire-closure" -and $Mode -ne "repo-work-public-proof" -and $Mode -ne "bifrost-publication" -and $Mode -ne "bifrost-public-proof" -and $Mode -ne "bifrost-artifact-acceptance" -and $Mode -ne "bifrost-metrics" -and $Mode -ne "bifrost-accounting-bundle" -and $Mode -ne "bifrost-ledger" -and $Mode -ne "receipt-directory" -and $Mode -ne "tool-directory" -and $Mode -ne "tool-invoke" -and $Mode -ne "swarm-overview" -and $Mode -ne "gjallar" -and $Mode -ne "repo-persona-intake" -and $Mode -ne "repo-swarm-run" -and $Mode -ne "repo-work-queue-run" -and $Mode -ne "repo-work-readiness" -and $Mode -ne "repo-work-readiness-review" -and $Mode -ne "repo-deployment-config-audit" -and $Mode -ne "repo-deployment-runbook" -and $Mode -ne "repo-deployment-aftercare-audit" -and $Mode -ne "repo-work-service-plan" -and $Mode -ne "repo-work-service-runbook" -and $Mode -ne "repo-work-service-launch" -and $Mode -ne "repo-work-service-audit" -and $Mode -ne "swarm-online-runbook" -and $Mode -ne "service-policy-directory" -and $Mode -ne "service-plan" -and $Mode -ne "service-launch" -and $Mode -ne "service-runbook" -and $Mode -ne "cluster-service-runbook" -and $Mode -ne "cluster-service-install-plan" -and $Mode -ne "cluster-service-install-execute" -and $Mode -ne "cluster-service-audit" -and $Mode -ne "cluster-service-start-plan" -and $Mode -ne "cluster-service-stop-plan" -and $Mode -ne "cluster-service-start-execute" -and $Mode -ne "cluster-service-stop-execute" -and $Mode -ne "cluster-service-execution-readiness" -and $Mode -ne "cluster-service-execution-runbook" -and $Mode -ne "cluster-service-execution-audit" -and $Mode -ne "service-execution-runbook" -and $Mode -ne "service-install-plan" -and $Mode -ne "service-install-execute" -and $Mode -ne "service-tick" -and $Mode -ne "service-status" -and $Mode -ne "service-reconcile" -and $Mode -ne "service-execution-readiness" -and $Mode -ne "service-execution-audit" -and $Mode -ne "service-start-plan" -and $Mode -ne "service-stop-plan" -and $Mode -ne "service-start-execute" -and $Mode -ne "service-stop-execute") {
|
||||
$requiredBinaries += @($codexAppServer, $coordinatorExe)
|
||||
}
|
||||
function Assert-SwarmBrakeAllowsLiveRun {
|
||||
|
|
@ -554,6 +564,15 @@ if (@("service-policy-directory", "service-plan", "service-launch", "service-tic
|
|||
if ($Mode -eq "mvp") {
|
||||
$requiredBinaries += @($heartbeatExe, $PersonaExe, $characterLoopExe)
|
||||
}
|
||||
if ($Mode -eq "persona-discord") {
|
||||
$requiredBinaries += @($PersonaExe)
|
||||
}
|
||||
if ($Mode -eq "persona-reddit") {
|
||||
$requiredBinaries += @($PersonaRedditExe)
|
||||
}
|
||||
if ($Mode -eq "persona-other") {
|
||||
$requiredBinaries += @($PersonaOtherExe)
|
||||
}
|
||||
$requiredBinaries += @($agentMemoryExe)
|
||||
foreach ($required in $requiredBinaries) {
|
||||
if (-not (Test-Path -LiteralPath $required)) {
|
||||
|
|
@ -843,6 +862,98 @@ if ($Mode -eq "collaboration-feedback") {
|
|||
-StderrPath (Join-Path $artifactRoot "collaboration-feedback.stderr.log")
|
||||
}
|
||||
|
||||
if (@("persona-discord", "persona-reddit", "persona-other") -contains $Mode) {
|
||||
$personaArtifactDir = Join-Path $Root ".epiphany-persona"
|
||||
if ($PersonaInput.Trim() -eq "") {
|
||||
$PersonaInput = "Epiphany Persona bridge mouth smoke: operator requested a Bifrost-owned outside-world crossing witness."
|
||||
}
|
||||
|
||||
if ($Mode -eq "persona-discord") {
|
||||
if (@("draft", "bubble", "post", "latest", "smoke") -notcontains $PersonaMouthAction) {
|
||||
throw "persona-discord supports PersonaMouthAction draft, bubble, post, latest, or smoke"
|
||||
}
|
||||
$resultPath = Join-Path $artifactRoot "persona-discord.stdout.json"
|
||||
$personaArgs = @(
|
||||
$PersonaMouthAction,
|
||||
"--artifact-dir", $personaArtifactDir,
|
||||
"--cultmesh-store", $localVerseStore,
|
||||
"--runtime-id", $LocalVerseRuntimeId
|
||||
)
|
||||
if (@("draft", "bubble", "post") -contains $PersonaMouthAction) {
|
||||
$personaArgs += @("--content", $PersonaInput)
|
||||
}
|
||||
if ($PersonaChannelId -ne "") {
|
||||
$personaArgs += @("--channel-id", $PersonaChannelId)
|
||||
}
|
||||
if ($PersonaName -ne "") {
|
||||
$personaArgs += @("--persona-name", $PersonaName)
|
||||
}
|
||||
Invoke-Checked `
|
||||
-Label "route Persona Discord mouth through Bifrost policy" `
|
||||
-FilePath $PersonaExe `
|
||||
-Arguments $personaArgs `
|
||||
-WorkingDirectory $Root `
|
||||
-StdoutPath $resultPath `
|
||||
-StderrPath (Join-Path $artifactRoot "persona-discord.stderr.log")
|
||||
} elseif ($Mode -eq "persona-reddit") {
|
||||
if (@("draft", "post", "latest", "smoke") -notcontains $PersonaMouthAction) {
|
||||
throw "persona-reddit supports PersonaMouthAction draft, post, latest, or smoke"
|
||||
}
|
||||
$resultPath = Join-Path $artifactRoot "persona-reddit.stdout.json"
|
||||
$personaArgs = @(
|
||||
$PersonaMouthAction,
|
||||
"--artifact-dir", $personaArtifactDir,
|
||||
"--cultmesh-store", $localVerseStore,
|
||||
"--runtime-id", $LocalVerseRuntimeId
|
||||
)
|
||||
if (@("draft", "post") -contains $PersonaMouthAction) {
|
||||
$personaArgs += @("--title", $PersonaTitle, "--content", $PersonaInput)
|
||||
}
|
||||
if ($PersonaSubreddit -ne "") {
|
||||
$personaArgs += @("--subreddit", $PersonaSubreddit)
|
||||
}
|
||||
if ($PersonaName -ne "") {
|
||||
$personaArgs += @("--persona-name", $PersonaName)
|
||||
}
|
||||
Invoke-Checked `
|
||||
-Label "route Persona Reddit mouth through Bifrost policy" `
|
||||
-FilePath $PersonaRedditExe `
|
||||
-Arguments $personaArgs `
|
||||
-WorkingDirectory $Root `
|
||||
-StdoutPath $resultPath `
|
||||
-StderrPath (Join-Path $artifactRoot "persona-reddit.stderr.log")
|
||||
} else {
|
||||
if (@("draft", "request", "latest", "smoke") -notcontains $PersonaMouthAction) {
|
||||
throw "persona-other supports PersonaMouthAction draft, request, latest, or smoke"
|
||||
}
|
||||
$resultPath = Join-Path $artifactRoot "persona-other.stdout.json"
|
||||
$personaArgs = @(
|
||||
$PersonaMouthAction,
|
||||
"--artifact-dir", $personaArtifactDir,
|
||||
"--cultmesh-store", $localVerseStore,
|
||||
"--runtime-id", $LocalVerseRuntimeId
|
||||
)
|
||||
if (@("draft", "request") -contains $PersonaMouthAction) {
|
||||
$personaArgs += @(
|
||||
"--surface-name", $PersonaSurfaceName,
|
||||
"--target-locator", $PersonaTarget,
|
||||
"--title", $PersonaTitle,
|
||||
"--content", $PersonaInput
|
||||
)
|
||||
}
|
||||
if ($PersonaName -ne "") {
|
||||
$personaArgs += @("--persona-name", $PersonaName)
|
||||
}
|
||||
Invoke-Checked `
|
||||
-Label "route Persona future-surface mouth through Bifrost policy" `
|
||||
-FilePath $PersonaOtherExe `
|
||||
-Arguments $personaArgs `
|
||||
-WorkingDirectory $Root `
|
||||
-StdoutPath $resultPath `
|
||||
-StderrPath (Join-Path $artifactRoot "persona-other.stderr.log")
|
||||
}
|
||||
}
|
||||
|
||||
if ($Mode -eq "bifrost-publication") {
|
||||
$resultPath = Join-Path $artifactRoot "bifrost-publication.stdout.json"
|
||||
Invoke-Checked `
|
||||
|
|
@ -2671,6 +2782,29 @@ if ($resultPath -ne "" -and (Test-Path -LiteralPath $resultPath)) {
|
|||
$candidateRefs = ($result.candidateActionRefs -join ",")
|
||||
}
|
||||
Write-Host "Collaboration feedback: status=$($result.status), feedback=$($result.feedbackId), consensus=$($result.consensusReceiptId), publicRefs=$publicRefs, candidateActions=$candidateRefs, consensusPacket=$($result.consensusPacketRef), adoptionGate=$($result.adoptionGate), feedbackRows=$feedbackRows, privateStateExposed=$($result.privateStateExposed)"
|
||||
} elseif (@("persona-discord", "persona-reddit", "persona-other") -contains $Mode) {
|
||||
$auditId = "none"
|
||||
if ($null -ne $result.speechAudit -and $null -ne $result.speechAudit.auditId) {
|
||||
$auditId = $result.speechAudit.auditId
|
||||
} elseif ($null -ne $result.auditId) {
|
||||
$auditId = $result.auditId
|
||||
}
|
||||
$decision = $result.decision
|
||||
if ($null -eq $decision -or $decision -eq "") {
|
||||
$decision = $result.status
|
||||
}
|
||||
$target = $result.target
|
||||
if ($null -eq $target -or $target -eq "") {
|
||||
$target = $result.requestedPublicTarget
|
||||
}
|
||||
if ($null -eq $target -or $target -eq "") {
|
||||
$target = "none"
|
||||
}
|
||||
$bridgeAction = $result.bridgeActionId
|
||||
if ($null -eq $bridgeAction -or $bridgeAction -eq "") {
|
||||
$bridgeAction = "none"
|
||||
}
|
||||
Write-Host "Persona mouth: mode=$Mode, action=$PersonaMouthAction, decision=$decision, audit=$auditId, target=$target, bridgeAction=$bridgeAction, artifact=$resultPath"
|
||||
} elseif ($Mode -eq "bifrost-publication") {
|
||||
Write-Host "Bifrost publication: status=$($result.status), intent=$($result.intentId), publication=$($result.publicationReceiptId), github=$($result.githubPublicationReceiptId), privateStateExposed=$($result.privateStateExposed)"
|
||||
} elseif ($Mode -eq "bifrost-public-proof") {
|
||||
|
|
|
|||
Reference in a new issue