@overdeck/contracts 0.45.19 → 0.45.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/types.ts","../src/memory.ts","../src/events.ts","../src/editor.ts","../src/flywheel.ts","../src/rpc.ts","../src/event-reducers.ts","../src/flywheel-stats.ts","../src/context-layers.ts","../src/artifacts.ts","../src/feature-registry.ts","../src/harness-behavior.ts","../src/hygiene.ts","../src/update.ts"],"sourcesContent":["import { Schema } from \"effect\"\n\n// ─── Primitives ───────────────────────────────────────────────────────────────\n\nexport const IssueId = Schema.String\nexport type IssueId = typeof IssueId.Type\n\nexport const AgentId = Schema.String\nexport type AgentId = typeof AgentId.Type\n\nexport const SequenceNumber = Schema.Number\nexport type SequenceNumber = typeof SequenceNumber.Type\n\n// ─── Strict literal types (PAN-433) ──────────────────────────────────────────\n// Safe because the read model only contains values from typed events or\n// explicitly cleaned bootstrap data.\n\nexport const AgentStatus = Schema.Literals([\"starting\", \"running\", \"stopped\", \"error\", \"unknown\"])\nexport type AgentStatus = typeof AgentStatus.Type\n\nexport const Role = Schema.Literals([\"plan\", \"work\", \"review\", \"test\", \"ship\", \"flywheel\", \"strike\", \"sequencer\", \"knowledge\"])\nexport type Role = typeof Role.Type\n\nexport const AgentResolution = Schema.Literals([\"working\", \"done\", \"needs_input\", \"stuck\", \"completed\", \"unclear\", \"abandoned\", \"api_error\"])\nexport type AgentResolution = typeof AgentResolution.Type\n\nexport const ReviewStatusValue = Schema.Literals([\"pending\", \"reviewing\", \"passed\", \"failed\", \"blocked\", \"skipped\"])\nexport type ReviewStatusValue = typeof ReviewStatusValue.Type\n\nexport const TestStatusValue = Schema.Literals([\"pending\", \"testing\", \"passed\", \"failed\", \"skipped\", \"dispatch_failed\"])\nexport type TestStatusValue = typeof TestStatusValue.Type\n\nexport const UatStatusValue = Schema.Literals([\"pending\", \"testing\", \"passed\", \"failed\"])\nexport type UatStatusValue = typeof UatStatusValue.Type\n\nexport const MergeStatusValue = Schema.Literals([\"pending\", \"queued\", \"merging\", \"verifying\", \"merged\", \"failed\"])\nexport type MergeStatusValue = typeof MergeStatusValue.Type\n\nexport const ReleaseStatusValue = Schema.Literals([\"pending\", \"releasing\", \"passed\", \"failed\", \"partial\", \"rolled_back\", \"skipped\"])\nexport type ReleaseStatusValue = typeof ReleaseStatusValue.Type\n\nexport const VerificationStatusValue = Schema.Literals([\"pending\", \"running\", \"passed\", \"failed\", \"skipped\"])\nexport type VerificationStatusValue = typeof VerificationStatusValue.Type\n\n// ─── Harness (PAN-636, PAN-1989) ─────────────────────────────────────────────\n// Identifies which coding-agent harness an agent is running under.\n// AgentSnapshot.runtime is left as Schema.optional(Schema.String) for forward\n// compatibility (events from older readers may carry unknown values), but every\n// consumer that branches on harness MUST go through getHarness() so unknown or\n// legacy values normalize to 'claude-code'.\n//\n// PAN-1989: narrowed to 3-value set — 'pi' retired; legacy DB rows read as\n// 'ohmypi' via getHarness(). All new write sites use 'ohmypi'.\n\nexport type Harness = 'claude-code' | 'ohmypi' | 'codex'\n\nconst KNOWN_HARNESSES: ReadonlySet<string> = new Set<Harness>(['claude-code', 'ohmypi', 'codex'])\n\n/**\n * Normalize a snapshot's runtime field to a known Harness value.\n * Unknown or missing values fall back to 'claude-code' (the default harness).\n * Legacy 'pi' values are normalized to 'ohmypi' on read (PAN-1989).\n */\nexport function getHarness(snapshot: { runtime?: string | undefined } | null | undefined): Harness {\n const raw = snapshot?.runtime\n if (raw === 'pi') return 'ohmypi'\n if (raw && KNOWN_HARNESSES.has(raw)) {\n return raw as Harness\n }\n return 'claude-code'\n}\n\n// ─── Agent Runtime (PAN-800) ─────────────────────────────────────────────────\n// High-frequency per-tool-call surface. Kept separate from AgentSnapshot because\n// AgentSnapshot is the low-frequency lifecycle projection (config, status, cost)\n// and merging them means every tool call re-diffs a giant object on the frontend.\n\nexport const Activity = Schema.Literals([\n \"working\", // tool in flight, or tool completed <30s ago\n \"thinking\", // no tool in flight, waiting for model\n \"waiting\", // needs human (permission, answer, disambiguation)\n \"idle\", // Stop hook fired, waiting for next turn\n \"stopped\", // session ended\n])\nexport type Activity = typeof Activity.Type\n\nexport const WaitingReason = Schema.Literals([\n \"tool_permission\",\n \"user_question\",\n \"disambiguation\",\n \"other\",\n])\nexport type WaitingReason = typeof WaitingReason.Type\n\nexport const ClaudeChannelPermissionBehavior = Schema.Literals([\n \"allow\",\n \"deny\",\n])\nexport type ClaudeChannelPermissionBehavior = typeof ClaudeChannelPermissionBehavior.Type\n\nexport const ThinkingState = Schema.Struct({\n since: Schema.String, // ISO timestamp\n lastToolAt: Schema.String, // timestamp of the tool that preceded this thinking state\n})\nexport type ThinkingState = typeof ThinkingState.Type\n\nexport const WaitingState = Schema.Struct({\n reason: WaitingReason,\n startedAt: Schema.String,\n message: Schema.optional(Schema.String),\n notificationSent: Schema.optional(Schema.Boolean),\n})\nexport type WaitingState = typeof WaitingState.Type\n\nexport const CHANNEL_REPLY_KIND_VALUES = [\"status\", \"done\", \"needs_input\"] as const\nexport const MAX_CHANNEL_REPLY_SUMMARY_LENGTH = 4 * 1024\nexport const MAX_CHANNEL_REPLY_ARTIFACT_REFS = 20\nexport const MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH = 512\nexport const MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH = 512\nconst CHANNEL_REPLY_ARTIFACT_URI_PATTERN = /^(?:file:\\/\\/|https:\\/\\/|\\/)/\n\nexport const ChannelReplyKind = Schema.Literals(CHANNEL_REPLY_KIND_VALUES)\nexport type ChannelReplyKind = typeof ChannelReplyKind.Type\n\nexport function isChannelReplyKind(value: unknown): value is ChannelReplyKind {\n return typeof value === 'string' && CHANNEL_REPLY_KIND_VALUES.includes(value as ChannelReplyKind)\n}\n\nexport const ChannelReplyArtifactRef = Schema.Struct({\n uri: Schema.String,\n label: Schema.optional(Schema.String),\n})\nexport type ChannelReplyArtifactRef = typeof ChannelReplyArtifactRef.Type\n\nexport const AgentChannelReply = Schema.Struct({\n kind: ChannelReplyKind,\n summary: Schema.String,\n artifactRefs: Schema.Array(ChannelReplyArtifactRef),\n reportedAt: Schema.String,\n})\nexport type AgentChannelReply = typeof AgentChannelReply.Type\n\nexport function normalizeChannelReplyPayload(\n payload: unknown,\n fieldPrefix = 'channel_reply',\n): {\n kind: ChannelReplyKind\n summary: string\n artifactRefs: ChannelReplyArtifactRef[]\n} {\n if (payload === null || typeof payload !== 'object') {\n throw new Error(`${fieldPrefix} payload must be an object`)\n }\n\n const source = payload as {\n kind?: unknown\n summary?: unknown\n artifactRefs?: unknown\n }\n\n if (!isChannelReplyKind(source.kind)) {\n throw new Error(`${fieldPrefix}.kind must be one of: ${CHANNEL_REPLY_KIND_VALUES.join(', ')}`)\n }\n\n if (typeof source.summary !== 'string') {\n throw new Error(`${fieldPrefix}.summary must be a non-empty string`)\n }\n const summary = source.summary.trim()\n if (summary.length === 0) {\n throw new Error(`${fieldPrefix}.summary must be a non-empty string`)\n }\n if (summary.length > MAX_CHANNEL_REPLY_SUMMARY_LENGTH) {\n throw new Error(\n `${fieldPrefix}.summary must be at most ${MAX_CHANNEL_REPLY_SUMMARY_LENGTH} characters`,\n )\n }\n\n if (source.artifactRefs !== undefined && !Array.isArray(source.artifactRefs)) {\n throw new Error(`${fieldPrefix}.artifactRefs must be an array when provided`)\n }\n const rawArtifactRefs = source.artifactRefs ?? []\n if (rawArtifactRefs.length > MAX_CHANNEL_REPLY_ARTIFACT_REFS) {\n throw new Error(\n `${fieldPrefix}.artifactRefs must contain at most ${MAX_CHANNEL_REPLY_ARTIFACT_REFS} entries`,\n )\n }\n\n const artifactRefs = rawArtifactRefs.map((item, index) => {\n if (item === null || typeof item !== 'object') {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}] must be an object`)\n }\n const ref = item as { uri?: unknown; label?: unknown }\n if (typeof ref.uri !== 'string') {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be a non-empty string`)\n }\n const uri = ref.uri.trim()\n if (uri.length === 0) {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be a non-empty string`)\n }\n if (uri.length > MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH) {\n throw new Error(\n `${fieldPrefix}.artifactRefs[${index}].uri must be at most ${MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH} characters`,\n )\n }\n if (!CHANNEL_REPLY_ARTIFACT_URI_PATTERN.test(uri)) {\n throw new Error(\n `${fieldPrefix}.artifactRefs[${index}].uri must start with file://, https://, or /`,\n )\n }\n\n if (ref.label !== undefined && typeof ref.label !== 'string') {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}].label must be a string when provided`)\n }\n const label = typeof ref.label === 'string' ? ref.label.trim() : undefined\n if (label !== undefined && label.length > MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH) {\n throw new Error(\n `${fieldPrefix}.artifactRefs[${index}].label must be at most ${MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH} characters`,\n )\n }\n\n return {\n uri,\n ...(label ? { label } : {}),\n }\n })\n\n return {\n kind: source.kind,\n summary,\n artifactRefs,\n }\n}\n\nexport const AgentRuntimeSnapshot = Schema.Struct({\n id: AgentId,\n activity: Activity,\n lastActivity: Schema.String, // ISO timestamp of last event for this agent\n currentTool: Schema.optional(Schema.String), // set when activity === \"working\"\n thinking: Schema.optional(ThinkingState), // set when activity === \"thinking\"\n waiting: Schema.optional(WaitingState), // set when activity === \"waiting\"\n claudeSessionId: Schema.optional(Schema.String),\n sessionModel: Schema.optional(Schema.String),\n sessionHarness: Schema.optional(Schema.String),\n model: Schema.optional(Schema.String),\n lastMessageAt: Schema.optional(Schema.String), // last user→agent message delivered\n // Last structured Claude Code Channels reply emitted by the work agent.\n channelReply: Schema.optional(AgentChannelReply),\n // Lifecycle resolution signal emitted by work-agent-stop-hook. Values mirror\n // AgentResolution so the enrichment poller can consume this as input.\n resolution: Schema.optional(AgentResolution),\n resolutionCount: Schema.optional(Schema.Number),\n resolutionUpdatedAt: Schema.optional(Schema.String),\n // For specialists: the issue currently being processed.\n currentIssue: Schema.optional(IssueId),\n // Set while the agent's recent terminal tail shows a hard context-window overflow.\n contextSaturatedAt: Schema.optional(Schema.String),\n updatedAtSequence: SequenceNumber, // event sequence that produced this snapshot\n})\nexport type AgentRuntimeSnapshot = typeof AgentRuntimeSnapshot.Type\n\nexport const ChannelPermissionRequestSnapshot = Schema.Struct({\n requestId: Schema.String,\n agentId: AgentId,\n issueId: Schema.optional(IssueId),\n toolName: Schema.String,\n description: Schema.String,\n inputPreview: Schema.String,\n createdAt: Schema.String,\n})\nexport type ChannelPermissionRequestSnapshot = typeof ChannelPermissionRequestSnapshot.Type\n\n// ─── Agent ────────────────────────────────────────────────────────────────────\n\nexport const AgentSnapshot = Schema.Struct({\n id: AgentId,\n issueId: IssueId,\n workspace: Schema.optional(Schema.String),\n runtime: Schema.optional(Schema.String),\n model: Schema.optional(Schema.String),\n status: AgentStatus,\n startedAt: Schema.optional(Schema.String),\n lastActivity: Schema.optional(Schema.String),\n branch: Schema.optional(Schema.String),\n costSoFar: Schema.optional(Schema.Number),\n sessionId: Schema.optional(Schema.String),\n role: Schema.optional(Role),\n phase: Schema.optional(Schema.String),\n workType: Schema.optional(Schema.String),\n roleRunHead: Schema.optional(Schema.String),\n hasLiveTmuxSession: Schema.optional(Schema.Boolean),\n stoppedByUser: Schema.optional(Schema.Boolean),\n paused: Schema.optional(Schema.Boolean),\n pausedReason: Schema.optional(Schema.String),\n pausedAt: Schema.optional(Schema.String),\n troubled: Schema.optional(Schema.Boolean),\n troubledAt: Schema.optional(Schema.String),\n consecutiveFailures: Schema.optional(Schema.Number),\n firstFailureInRunAt: Schema.optional(Schema.String),\n lastFailureAt: Schema.optional(Schema.String),\n lastFailureReason: Schema.optional(Schema.String),\n lastFailureNextRetryAt: Schema.optional(Schema.String),\n runtimeState: Schema.optional(Schema.String),\n // Enrichment fields (PAN-440)\n hasPendingQuestion: Schema.optional(Schema.Boolean),\n pendingQuestionCount: Schema.optional(Schema.Number),\n pendingQuestionPrompt: Schema.optional(Schema.String),\n pendingQuestionReason: Schema.optional(Schema.String),\n // PAN-1520 — unified pending-input surfaces. `pendingInputKinds` lists every\n // active blocking surface (askUserQuestion, permissionRequest, exitPlanMode,\n // enterPlanMode, sessionResume). `pendingInputCount` is the count.\n pendingInputCount: Schema.optional(Schema.Number),\n pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),\n // PAN-1520 — payload for an active AskUserQuestion the operator can answer\n // by clicking an option button in the conversation panel.\n pendingAskUserQuestion: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n questions: Schema.Array(Schema.Struct({\n question: Schema.String,\n header: Schema.optional(Schema.String),\n multiSelect: Schema.optional(Schema.Boolean),\n options: Schema.Array(Schema.Struct({\n label: Schema.String,\n description: Schema.optional(Schema.String),\n })),\n })),\n })),\n // PAN-1520 (FR-1) — plan markdown for a pending ExitPlanMode so the operator\n // can approve/reject from a dashboard modal instead of only the terminal.\n pendingProposedPlan: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n plan: Schema.String,\n })),\n resolution: Schema.optional(AgentResolution),\n resolutionCount: Schema.optional(Schema.Number),\n // PAN-800 — bumped on every runtime event so subscribers can cheaply detect\n // a change without diffing the full AgentRuntimeSnapshot.\n runtimeSnapshotSequence: Schema.optional(SequenceNumber),\n})\nexport type AgentSnapshot = typeof AgentSnapshot.Type\n\n// ─── Review / Pipeline ────────────────────────────────────────────────────────\n\nexport const ReviewStatusSnapshot = Schema.Struct({\n issueId: IssueId,\n reviewStatus: Schema.optional(ReviewStatusValue),\n testStatus: Schema.optional(TestStatusValue),\n uatStatus: Schema.optional(UatStatusValue),\n uatNotes: Schema.optional(Schema.String),\n mergeStatus: Schema.optional(MergeStatusValue),\n releaseStatus: Schema.optional(ReleaseStatusValue),\n releaseNotes: Schema.optional(Schema.String),\n verificationStatus: Schema.optional(VerificationStatusValue),\n verificationNotes: Schema.optional(Schema.String),\n verificationCycleCount: Schema.optional(Schema.Number),\n readyForMerge: Schema.optional(Schema.Boolean),\n updatedAt: Schema.optional(Schema.String),\n prUrl: Schema.optional(Schema.String),\n /** Persistent stuck flag — set by divergence guard, cleared by /unstick */\n stuck: Schema.optional(Schema.Boolean),\n stuckReason: Schema.optional(Schema.String),\n stuckAt: Schema.optional(Schema.String),\n stuckDetails: Schema.optional(Schema.String),\n /** Commit SHA at which review passed; deacon uses this to detect new pushes after review */\n reviewedAtCommit: Schema.optional(Schema.String),\n /** Commit SHA at which the pre-review verification gate last passed */\n lastVerifiedCommit: Schema.optional(Schema.String),\n /** Current merge pipeline step (granular visibility for the merge step tracker) */\n mergeStep: Schema.optional(Schema.String),\n /** PAN-699: timestamp when review agents were dispatched */\n reviewSpawnedAt: Schema.optional(Schema.String),\n /** PAN-699: number of test-agent dispatch retries */\n testRetryCount: Schema.optional(Schema.Number),\n /** PAN-794: parallel-review re-dispatch retry counter (current recovery cycle) */\n reviewRetryCount: Schema.optional(Schema.Number),\n /** PAN-796: review auto-requeue count (circuit breaker threshold) */\n autoRequeueCount: Schema.optional(Schema.Number),\n /** PAN-794: ISO timestamp marking the start of the current recovery cycle */\n recoveryStartedAt: Schema.optional(Schema.String),\n /** Human-requested patrol opt-out — when true, Deacon ignores this issue. */\n deaconIgnored: Schema.optional(Schema.Boolean),\n deaconIgnoredAt: Schema.optional(Schema.String),\n deaconIgnoredReason: Schema.optional(Schema.String),\n /** PAN-1691: per-issue auto-merge routing key. undefined = project default, true = auto-merge (fast lane), false = hold for UAT. */\n autoMerge: Schema.optional(Schema.Boolean),\n /** Active review orchestrator tmux session name (e.g. agent-pan-540-review). */\n reviewCoordinatorSessionName: Schema.optional(Schema.String),\n /** Active review sub-role tmux session names (e.g. agent-pan-540-review-correctness). Discovered at emission time. */\n reviewSessionNames: Schema.optional(Schema.Array(Schema.String)),\n /** Per-role review completion status (keyed by role: 'correctness' | 'security' | ...) */\n reviewSubStatuses: Schema.optional(Schema.Record(Schema.String, Schema.Literals([\"running\", \"done\"]))),\n /** PAN-905: queue position in the merge queue */\n queuePosition: Schema.optional(Schema.Number),\n /** PAN-905: currently active specialist (e.g. 'merge-agent') */\n activeSpecialist: Schema.optional(Schema.String),\n /** PAN-905: number of merge retries attempted */\n mergeRetryCount: Schema.optional(Schema.Number),\n /** PAN-905: free-form notes about the merge attempt */\n mergeNotes: Schema.optional(Schema.String),\n /** PAN-905: GitHub-native merge blocker reasons */\n blockerReasons: Schema.optional(Schema.Array(Schema.Struct({\n type: Schema.Literals(['failing_checks', 'merge_conflict', 'unresolved_conversations', 'changes_requested', 'draft_pr', 'not_mergeable']),\n summary: Schema.String,\n details: Schema.optional(Schema.String),\n detectedAt: Schema.String,\n }))),\n})\nexport type ReviewStatusSnapshot = typeof ReviewStatusSnapshot.Type\n\n// ─── Turn Diff ───────────────────────────────────────────────────────────────\n\nexport const TurnDiffFileChange = Schema.Struct({\n path: Schema.String,\n kind: Schema.optional(Schema.String),\n additions: Schema.optional(Schema.Number),\n deletions: Schema.optional(Schema.Number),\n})\nexport type TurnDiffFileChange = typeof TurnDiffFileChange.Type\n\nexport const TurnDiffSummary = Schema.Struct({\n turnId: Schema.String,\n completedAt: Schema.String,\n status: Schema.optional(Schema.String),\n files: Schema.Array(TurnDiffFileChange),\n checkpointRef: Schema.optional(Schema.String),\n assistantMessageId: Schema.optional(Schema.String),\n checkpointTurnCount: Schema.optional(Schema.Number),\n})\nexport type TurnDiffSummary = typeof TurnDiffSummary.Type\n\n// ─── Dashboard Snapshot ──────────────────────────────────────────────────────\n\nexport const ScanProgressSnapshot = Schema.Struct({\n active: Schema.Boolean,\n mode: Schema.Literals(['targeted', 'watched', 'system']),\n dirs: Schema.Array(Schema.String),\n dirsProcessed: Schema.Number,\n dirsTotal: Schema.Number,\n sessionsFound: Schema.Number,\n elapsedMs: Schema.Number,\n inserted: Schema.Number,\n updated: Schema.Number,\n skipped: Schema.Number,\n errors: Schema.Number,\n durationMs: Schema.Number,\n})\nexport type ScanProgressSnapshot = typeof ScanProgressSnapshot.Type\n\nexport const EnrichStatsSnapshot = Schema.Struct({\n processed: Schema.Number,\n totalCost: Schema.Number,\n failures: Schema.Number,\n durationMs: Schema.Number,\n})\nexport type EnrichStatsSnapshot = typeof EnrichStatsSnapshot.Type\n\nexport const EnrichProgressSnapshot = Schema.Struct({\n sessionId: Schema.Number,\n level: Schema.Number,\n model: Schema.String,\n cost: Schema.Number,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n timestamp: Schema.String,\n})\nexport type EnrichProgressSnapshot = typeof EnrichProgressSnapshot.Type\n\nexport const EmbedProgressSnapshot = Schema.Struct({\n sessionId: Schema.Number,\n model: Schema.String,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n timestamp: Schema.String,\n})\nexport type EmbedProgressSnapshot = typeof EmbedProgressSnapshot.Type\n\n// ─── Dashboard Snapshot ──────────────────────────────────────────────────────\n\nexport const DashboardSnapshot = Schema.Struct({\n sequence: SequenceNumber,\n agents: Schema.Array(AgentSnapshot),\n specialists: Schema.Array(Schema.Unknown),\n reviewStatuses: Schema.Array(ReviewStatusSnapshot),\n issues: Schema.Array(Schema.Unknown), // Issues are complex — pass through unvalidated\n recentActivity: Schema.optional(Schema.Array(Schema.Unknown)),\n resources: Schema.optional(Schema.Unknown),\n memory: Schema.optional(Schema.Unknown),\n agentRuntimeById: Schema.optional(Schema.Record(Schema.String, AgentRuntimeSnapshot)),\n channelPermissionRequests: Schema.optional(Schema.Array(ChannelPermissionRequestSnapshot)),\n scanProgress: Schema.optional(Schema.NullOr(ScanProgressSnapshot)),\n enrichStats: Schema.optional(Schema.NullOr(EnrichStatsSnapshot)),\n enrichProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EnrichProgressSnapshot)),\n embedProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EmbedProgressSnapshot)),\n timestamp: Schema.String,\n})\nexport type DashboardSnapshot = typeof DashboardSnapshot.Type\n\n// ─── Workspace Detail ────────────────────────────────────────────────────────\n\nexport const WorkspaceDetail = Schema.Struct({\n workspace: Schema.Unknown,\n reviewStatus: Schema.Unknown,\n planning: Schema.Unknown,\n costs: Schema.Unknown,\n agentOutput: Schema.Array(Schema.String),\n})\nexport type WorkspaceDetail = typeof WorkspaceDetail.Type\n\n// ─── Resource Stats ──────────────────────────────────────────────────────────\n\nexport const ResourceStats = Schema.Struct({\n containers: Schema.Array(Schema.Struct({\n name: Schema.String,\n cpu: Schema.optional(Schema.String),\n mem: Schema.optional(Schema.String),\n status: Schema.optional(Schema.String),\n })),\n})\nexport type ResourceStats = typeof ResourceStats.Type\n\n// ─── Session Tree (PAN-821) ──────────────────────────────────────────────────\n\nexport const SessionNodePresence = Schema.Literals([\"active\", \"idle\", \"suspended\", \"ended\"])\nexport type SessionNodePresence = typeof SessionNodePresence.Type\n\nexport const SessionNodeType = Schema.Literals([\n \"planning\",\n \"work\",\n \"knowledge\",\n \"strike\",\n \"lint\",\n \"review\",\n \"reviewer\",\n \"test\",\n \"ship\",\n \"merge\",\n \"legacy\",\n])\nexport type SessionNodeType = typeof SessionNodeType.Type\n\nexport const ReviewerRoundSummary = Schema.Struct({\n round: Schema.Number,\n status: Schema.optional(Schema.String),\n reviewResult: Schema.optional(Schema.String),\n startedAt: Schema.optional(Schema.String),\n endedAt: Schema.optional(Schema.String),\n durationSec: Schema.optional(Schema.Number),\n cost: Schema.optional(Schema.Number),\n findings: Schema.optional(Schema.Number),\n summary: Schema.optional(Schema.String),\n})\nexport type ReviewerRoundSummary = typeof ReviewerRoundSummary.Type\n\nexport const ReviewerRoundMetadata = Schema.Struct({\n roundCount: Schema.Number,\n latestRound: Schema.Number,\n latestStatus: Schema.optional(Schema.String),\n latestReviewResult: Schema.optional(Schema.String),\n history: Schema.Array(ReviewerRoundSummary),\n})\nexport type ReviewerRoundMetadata = typeof ReviewerRoundMetadata.Type\n\n// One row of a percentage-distribution model origin (PAN-2053). `lo`/`hi` are the\n// half-open bucket band [lo, hi) the entry owns; `chosen` marks the selected one.\nexport const ModelOriginEntry = Schema.Struct({\n model: Schema.String,\n weight: Schema.Number,\n lo: Schema.Number,\n hi: Schema.Number,\n chosen: Schema.Boolean,\n})\nexport type ModelOriginEntry = typeof ModelOriginEntry.Type\n\n// Read-only \"which model & why\" derivation shown in the agent right-click MODEL\n// inspector (PAN-2053). Present only when the agent's role uses a percentage\n// distribution; absent for scalar/single-model roles.\nexport const ModelOrigin = Schema.Struct({\n // The exact spawn key whose bucket selected the model (`${role}:${issueId}`).\n spawnKey: Schema.String,\n // The chosen model id.\n resolved: Schema.String,\n // Deterministic bucket for this key, in [0, total).\n bucket: Schema.Number,\n // Number of buckets = sum of weights (100 when the distribution is percentages).\n total: Schema.Number,\n distribution: Schema.Array(ModelOriginEntry),\n})\nexport type ModelOrigin = typeof ModelOrigin.Type\n\nexport const SessionNode = Schema.Struct({\n type: SessionNodeType,\n role: Schema.optional(Schema.String),\n sessionId: Schema.String,\n tmuxSession: Schema.optional(Schema.String),\n model: Schema.String,\n // Harness that spawned the session (claude-code | pi | codex). Pi/codex run\n // `--mode rpc` with no TUI, so their terminal pane streams raw RPC protocol —\n // the SessionPanel uses this to show a notice instead, and to gate live\n // message streaming. Optional for backward compatibility with older payloads.\n harness: Schema.optional(Schema.String),\n startedAt: Schema.String,\n endedAt: Schema.optional(Schema.String),\n duration: Schema.NullOr(Schema.Number),\n status: AgentStatus,\n hasJsonl: Schema.optional(Schema.Boolean),\n transcript: Schema.optional(Schema.String),\n presence: SessionNodePresence,\n awaitingInput: Schema.optional(Schema.Boolean),\n awaitingInputPrompt: Schema.optional(Schema.String),\n awaitingInputReason: Schema.optional(Schema.String),\n roundMetadata: Schema.optional(ReviewerRoundMetadata),\n deliveryMethod: Schema.optional(Schema.Literals(['auto', 'channels', 'tmux'])),\n // Pause gate (PAN-1779 issue-tree redesign): a paused agent is deliberately\n // suppressed from deacon auto-resume — the tree must show it as paused with\n // the reason, never as a generic \"stopped\".\n paused: Schema.optional(Schema.Boolean),\n pausedReason: Schema.optional(Schema.String),\n pausedAt: Schema.optional(Schema.String),\n // Troubled gate (PAN-2257): message delivery queues mail while this is true,\n // so session-tree rows need the gate state and its queue count.\n troubled: Schema.optional(Schema.Boolean),\n troubledAt: Schema.optional(Schema.String),\n troubledReason: Schema.optional(Schema.String),\n consecutiveFailures: Schema.optional(Schema.Number),\n queuedMailCount: Schema.optional(Schema.Number),\n // PAN-2053: read-only model-origin for the right-click MODEL inspector. Set\n // only when the agent's role uses a weighted model distribution.\n modelOrigin: Schema.optional(ModelOrigin),\n})\nexport type SessionNode = typeof SessionNode.Type\n\nexport const FeatureNode = Schema.Struct({\n issueId: IssueId,\n title: Schema.String,\n sessions: Schema.Array(SessionNode),\n})\nexport type FeatureNode = typeof FeatureNode.Type\n\nexport const ProjectSessionTree = Schema.Struct({\n projectKey: Schema.String,\n features: Schema.Array(FeatureNode),\n})\nexport type ProjectSessionTree = typeof ProjectSessionTree.Type\n\n// ─── Discovered Sessions (PAN-457) ───────────────────────────────────────────\n\n/** Snapshot of a discovered session for RPC responses and frontend display */\nexport const DiscoveredSessionSnapshot = Schema.Struct({\n id: Schema.Number,\n jsonlPath: Schema.String,\n harness: Schema.optional(Schema.String),\n sessionId: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n workspaceHash: Schema.optional(Schema.String),\n messageCount: Schema.Number,\n firstTs: Schema.optional(Schema.String),\n lastTs: Schema.optional(Schema.String),\n modelsUsed: Schema.Array(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n tokenInput: Schema.Number,\n tokenOutput: Schema.Number,\n estimatedCost: Schema.Number,\n toolsUsed: Schema.Array(Schema.String),\n filesTouched: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n summary: Schema.optional(Schema.String),\n summaryDetailed: Schema.optional(Schema.String),\n // Tracked conversation this session belongs to, when the session id matches a\n // conversation in the DB (joined via conversation_files).\n conversationId: Schema.optional(Schema.String),\n conversationName: Schema.optional(Schema.String),\n conversationTitle: Schema.optional(Schema.String),\n enrichmentLevel: Schema.Number,\n enrichmentModel: Schema.optional(Schema.String),\n enrichedAt: Schema.optional(Schema.String),\n enrichmentFailed: Schema.Boolean,\n overdeckManaged: Schema.Boolean,\n panIssueId: Schema.optional(Schema.String),\n panAgentId: Schema.optional(Schema.String),\n scannedAt: Schema.String,\n})\nexport type DiscoveredSessionSnapshot = typeof DiscoveredSessionSnapshot.Type\n\n// ─── Unified Sessions Feed (PAN-1917) ────────────────────────────────────────\n\nexport const SessionsFeedSource = Schema.Literals(['discovered', 'managed-archived'])\nexport type SessionsFeedSource = typeof SessionsFeedSource.Type\n\nexport const SessionsFeedRowSnapshot = Schema.Struct({\n id: Schema.Number,\n source: SessionsFeedSource,\n discoveredId: Schema.optional(Schema.Number),\n jsonlPath: Schema.optional(Schema.String),\n sessionId: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n messageCount: Schema.Number,\n firstTs: Schema.optional(Schema.String),\n lastTs: Schema.optional(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n tokenInput: Schema.Number,\n tokenOutput: Schema.Number,\n estimatedCost: Schema.Number,\n tags: Schema.Array(Schema.String),\n summary: Schema.optional(Schema.String),\n enrichmentLevel: Schema.Number,\n enrichmentFailed: Schema.Boolean,\n overdeckManaged: Schema.Boolean,\n panIssueId: Schema.optional(Schema.String),\n archivedAt: Schema.optional(Schema.String),\n conversationId: Schema.optional(Schema.String),\n conversationName: Schema.optional(Schema.String),\n conversationTitle: Schema.optional(Schema.String),\n harness: Schema.optional(Schema.String),\n})\nexport type SessionsFeedRowSnapshot = typeof SessionsFeedRowSnapshot.Type\n\nconst SessionsFeedFacetBucketString = Schema.Struct({\n value: Schema.String,\n count: Schema.Number,\n})\n\nconst SessionsFeedFacetBucketNumber = Schema.Struct({\n value: Schema.Number,\n count: Schema.Number,\n})\n\nexport const SessionsFeedFacetsSnapshot = Schema.Struct({\n primaryModels: Schema.Array(SessionsFeedFacetBucketString),\n tags: Schema.Array(SessionsFeedFacetBucketString),\n tools: Schema.Array(SessionsFeedFacetBucketString),\n files: Schema.Array(SessionsFeedFacetBucketString),\n enrichmentLevels: Schema.Array(SessionsFeedFacetBucketNumber),\n timeBuckets: Schema.Array(Schema.Struct({\n value: Schema.Literals(['24h', '7d', '30d', 'older']),\n count: Schema.Number,\n })),\n costBuckets: Schema.Array(Schema.Struct({\n value: Schema.Literals(['<$0.10', '$0.10-1', '$1-10', '>$10']),\n count: Schema.Number,\n })),\n sources: Schema.Array(Schema.Struct({\n value: SessionsFeedSource,\n count: Schema.Number,\n })),\n})\nexport type SessionsFeedFacetsSnapshot = typeof SessionsFeedFacetsSnapshot.Type\n\n/** Filter parameters for conversation search */\nexport const ConversationFilter = Schema.Struct({\n harness: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n managed: Schema.optional(Schema.Boolean),\n unmanaged: Schema.optional(Schema.Boolean),\n since: Schema.optional(Schema.String),\n before: Schema.optional(Schema.String),\n after: Schema.optional(Schema.String),\n minCost: Schema.optional(Schema.Number),\n maxCost: Schema.optional(Schema.Number),\n minMessages: Schema.optional(Schema.Number),\n tags: Schema.optional(Schema.Array(Schema.String)),\n tools: Schema.optional(Schema.Array(Schema.String)),\n files: Schema.optional(Schema.Array(Schema.String)),\n issueId: Schema.optional(Schema.String),\n enrichmentLevel: Schema.optional(Schema.Number),\n enriched: Schema.optional(Schema.Boolean),\n notEnriched: Schema.optional(Schema.Boolean),\n query: Schema.optional(Schema.String),\n semantic: Schema.optional(Schema.Boolean),\n similarTo: Schema.optional(Schema.Number),\n limit: Schema.optional(Schema.Number),\n offset: Schema.optional(Schema.Number),\n format: Schema.optional(Schema.Literals(['table', 'json', 'brief', 'ids'])),\n})\nexport type ConversationFilter = typeof ConversationFilter.Type\n\n/** Aggregate cost breakdown for conversations */\nexport const ConversationCostSummary = Schema.Struct({\n groupBy: Schema.Literals(['workspace', 'model', 'day', 'month']),\n entries: Schema.Array(Schema.Struct({\n key: Schema.String,\n totalCost: Schema.Number,\n sessionCount: Schema.Number,\n totalTokensIn: Schema.Number,\n totalTokensOut: Schema.Number,\n })),\n grandTotal: Schema.Number,\n totalTokensIn: Schema.Number,\n totalTokensOut: Schema.Number,\n})\nexport type ConversationCostSummary = typeof ConversationCostSummary.Type\n\n/** Scan result summary */\nexport const ScanResult = Schema.Struct({\n inserted: Schema.Number,\n updated: Schema.Number,\n skipped: Schema.Number,\n errors: Schema.Number,\n durationMs: Schema.Number,\n})\nexport type ScanResult = typeof ScanResult.Type\n","import { Schema } from \"effect\"\nimport { IssueId, Role } from \"./types\"\n\nexport const MemoryIdentity = Schema.Struct({\n projectId: Schema.String,\n workspaceId: Schema.String,\n issueId: IssueId,\n runId: Schema.String,\n sessionId: Schema.String,\n agentRole: Role,\n agentHarness: Schema.String,\n})\nexport type MemoryIdentity = typeof MemoryIdentity.Type\n\nexport const MemoryTokenUsage = Schema.Struct({\n prompt: Schema.Number,\n completion: Schema.Number,\n total: Schema.Number,\n})\nexport type MemoryTokenUsage = typeof MemoryTokenUsage.Type\n\nexport const MemoryObservation = Schema.Struct({\n id: Schema.String,\n timestamp: Schema.String,\n projectId: Schema.String,\n workspaceId: Schema.String,\n issueId: IssueId,\n runId: Schema.String,\n sessionId: Schema.String,\n agentRole: Role,\n agentHarness: Schema.String,\n gitBranch: Schema.String,\n sourceTranscriptOffset: Schema.Number,\n actionStatus: Schema.NullOr(Schema.String),\n narrative: Schema.String,\n summary: Schema.String,\n files: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n tokens: MemoryTokenUsage,\n model: Schema.String,\n})\nexport type MemoryObservation = typeof MemoryObservation.Type\n\nexport const MemoryStatusPhase = Schema.Literals([\n \"exploring\",\n \"planning\",\n \"building\",\n \"verifying\",\n \"cleaning\",\n \"shipping\",\n])\nexport type MemoryStatusPhase = typeof MemoryStatusPhase.Type\n\nexport const MemoryStatus = Schema.Struct({\n name: Schema.String,\n headline: Schema.String,\n summary: Schema.String,\n goal: Schema.NullOr(Schema.String),\n phase: MemoryStatusPhase,\n accomplished: Schema.Array(Schema.String),\n decided: Schema.Array(Schema.String),\n open: Schema.Array(Schema.String),\n nextSteps: Schema.Array(Schema.String),\n confidence: Schema.Number,\n workingSet: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n})\nexport type MemoryStatus = typeof MemoryStatus.Type\n\nexport const PendingTurn = Schema.Struct({\n id: Schema.String,\n createdAt: Schema.String,\n identity: MemoryIdentity,\n trigger: Schema.Literals([\"stop-hook\", \"poller\", \"reconciliation\", \"manual\"]),\n transcriptPath: Schema.String,\n fromOffset: Schema.Number,\n toOffset: Schema.Number,\n lastFullLineOffset: Schema.Number,\n eventsConsumed: Schema.Number,\n compressedText: Schema.String,\n})\nexport type PendingTurn = typeof PendingTurn.Type\n\nexport const ResetMarkerScope = Schema.Literals([\"project\", \"workspace\", \"issue\", \"session\"])\nexport type ResetMarkerScope = typeof ResetMarkerScope.Type\n\nexport const ResetMarker = Schema.Struct({\n id: Schema.String,\n scope: ResetMarkerScope,\n scopeId: Schema.String,\n fromTimestamp: Schema.String,\n reason: Schema.String,\n createdAt: Schema.String,\n})\nexport type ResetMarker = typeof ResetMarker.Type\n\nexport const RagDecisionSource = Schema.Struct({\n id: Schema.String,\n docType: Schema.Literals([\"observation\", \"summary\", \"status\", \"sibling\", \"knowledge\"]),\n scope: Schema.String,\n score: Schema.Number,\n tokens: Schema.Number,\n})\nexport type RagDecisionSource = typeof RagDecisionSource.Type\n\nexport const RagDecision = Schema.Struct({\n id: Schema.String,\n timestamp: Schema.String,\n identity: MemoryIdentity,\n surface: Schema.Literals([\"spawn\", \"user-prompt\"]),\n outcome: Schema.Literals([\n \"injected\",\n \"skipped\",\n \"no-hits\",\n \"expansion-failed\",\n \"context-too-large\",\n \"budget-truncated\",\n ]),\n query: Schema.String,\n expandedTerms: Schema.Array(Schema.String),\n allocations: Schema.Struct({\n status: Schema.Number,\n observations: Schema.Number,\n summaries: Schema.Number,\n sibling: Schema.Number,\n knowledgeIndex: Schema.Number,\n }),\n sources: Schema.Array(RagDecisionSource),\n reason: Schema.NullOr(Schema.String),\n})\nexport type RagDecision = typeof RagDecision.Type\n\nexport const ExtractionProviderTarget = Schema.Struct({\n provider: Schema.String,\n model: Schema.String,\n})\nexport type ExtractionProviderTarget = typeof ExtractionProviderTarget.Type\n\nexport const ExtractionProviderConfig = Schema.Struct({\n provider: Schema.String,\n model: Schema.String,\n providerEnvVar: Schema.optional(Schema.String),\n modelEnvVar: Schema.optional(Schema.String),\n perDayCostCapUsd: Schema.Number,\n fallbackChain: Schema.Array(ExtractionProviderTarget),\n})\nexport type ExtractionProviderConfig = typeof ExtractionProviderConfig.Type\n","import { Schema } from \"effect\"\nimport {\n Activity,\n AgentChannelReply,\n AgentId,\n AgentResolution,\n AgentRuntimeSnapshot,\n AgentSnapshot,\n AgentStatus,\n ChannelPermissionRequestSnapshot,\n ClaudeChannelPermissionBehavior,\n IssueId,\n ResourceStats,\n ReviewStatusSnapshot,\n Role,\n SequenceNumber,\n WaitingReason,\n} from \"./types\"\nimport {\n MemoryObservation,\n MemoryStatus,\n RagDecision,\n ResetMarker,\n} from \"./memory\"\n\n// ─── System Events ────────────────────────────────────────────────────────────\n\n/** App-level liveness frame for the /ws/rpc domain-events stream. */\nexport const SystemHeartbeatEvent = Schema.Struct({\n type: Schema.Literal(\"system.heartbeat\"),\n timestamp: Schema.String,\n payload: Schema.Struct({ ts: Schema.Number }),\n})\nexport type SystemHeartbeatEvent = typeof SystemHeartbeatEvent.Type\n\n/** The canonical local Dolt head advanced after a background remote pull. */\nexport const BeadsFreshnessChangedEvent = Schema.Struct({\n type: Schema.Literal(\"beads.freshness_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n projectKey: Schema.String,\n localHead: Schema.String,\n lastSyncedAt: Schema.String,\n }),\n})\nexport type BeadsFreshnessChangedEvent = typeof BeadsFreshnessChangedEvent.Type\n\n// ─── Agent Events ─────────────────────────────────────────────────────────────\n\n/** Replaces socket.io `agents:changed` (event: 'started') */\nexport const AgentStartedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: IssueId, agent: AgentSnapshot }),\n})\nexport type AgentStartedEvent = typeof AgentStartedEvent.Type\n\n/** Replaces socket.io `agents:changed` (event: 'stopped') */\nexport const AgentStoppedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.stopped\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: IssueId, sessionId: Schema.optional(Schema.String) }),\n})\nexport type AgentStoppedEvent = typeof AgentStoppedEvent.Type\n\nexport const AgentHeartbeatDeadEvent = Schema.Struct({\n type: Schema.Literal(\"agent.heartbeat_dead\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: Schema.optional(IssueId), sessionId: Schema.optional(Schema.String) }),\n})\nexport type AgentHeartbeatDeadEvent = typeof AgentHeartbeatDeadEvent.Type\n\n/** Role lifecycle — work agent completed implementation and is ready for review. */\nexport const WorkCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"work.completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, agentId: Schema.optional(AgentId) }),\n})\nexport type WorkCompletedEvent = typeof WorkCompletedEvent.Type\n\n/** Role lifecycle — generic agent completion signal, normalized by Cloister by role. */\nexport const AgentCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, agentId: Schema.optional(AgentId), role: Schema.optional(Role) }),\n})\nexport type AgentCompletedEvent = typeof AgentCompletedEvent.Type\n\n/** Role lifecycle — review approved the branch and testing should start. */\nexport const ReviewApprovedEvent = Schema.Struct({\n type: Schema.Literal(\"review.approved\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type ReviewApprovedEvent = typeof ReviewApprovedEvent.Type\n\n/** Role lifecycle — tests passed and shipping should prepare the branch. */\nexport const TestPassedEvent = Schema.Struct({\n type: Schema.Literal(\"test.passed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type TestPassedEvent = typeof TestPassedEvent.Type\n\n/** Replaces socket.io `godview:status-change` */\nexport const AgentStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n issueId: Schema.optional(IssueId),\n status: AgentStatus,\n previousStatus: Schema.optional(AgentStatus),\n hasLiveTmuxSession: Schema.optional(Schema.Boolean),\n stoppedByUser: Schema.optional(Schema.Boolean),\n stoppedByPause: Schema.optional(Schema.Boolean),\n paused: Schema.optional(Schema.Boolean),\n pausedReason: Schema.optional(Schema.NullOr(Schema.String)),\n pausedAt: Schema.optional(Schema.NullOr(Schema.String)),\n troubled: Schema.optional(Schema.Boolean),\n troubledAt: Schema.optional(Schema.NullOr(Schema.String)),\n consecutiveFailures: Schema.optional(Schema.Number),\n firstFailureInRunAt: Schema.optional(Schema.NullOr(Schema.String)),\n lastFailureAt: Schema.optional(Schema.NullOr(Schema.String)),\n lastFailureReason: Schema.optional(Schema.NullOr(Schema.String)),\n lastFailureNextRetryAt: Schema.optional(Schema.NullOr(Schema.String)),\n kickoffDelivered: Schema.optional(Schema.Boolean),\n hostOverride: Schema.optional(Schema.Boolean),\n role: Schema.optional(Role),\n model: Schema.optional(Schema.String),\n workspace: Schema.optional(Schema.String),\n sessionId: Schema.optional(Schema.String),\n lastActivity: Schema.optional(Schema.String),\n lastResumeAt: Schema.optional(Schema.String),\n stoppedAt: Schema.optional(Schema.String),\n branch: Schema.optional(Schema.String),\n costSoFar: Schema.optional(Schema.Number),\n phase: Schema.optional(Schema.String),\n workType: Schema.optional(Schema.String),\n roleRunHead: Schema.optional(Schema.String),\n flywheelRunId: Schema.optional(Schema.String),\n reviewSubRole: Schema.optional(Schema.String),\n reviewRunId: Schema.optional(Schema.String),\n reviewOutputPath: Schema.optional(Schema.String),\n reviewSynthesisAgentId: Schema.optional(Schema.String),\n reviewDeadlineAt: Schema.optional(Schema.String),\n reviewMonitorSignaled: Schema.optional(Schema.String),\n reviewRetryAttempt: Schema.optional(Schema.Number),\n inspectSubRole: Schema.optional(Schema.String),\n deliveryMethod: Schema.optional(Schema.String),\n supervisorEnabled: Schema.optional(Schema.Boolean),\n channelsEnabled: Schema.optional(Schema.Boolean),\n }),\n})\nexport type AgentStatusChangedEvent = typeof AgentStatusChangedEvent.Type\n\n/** Replaces socket.io `godview:agent-output` */\nexport const AgentOutputReceivedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.output_received\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, lines: Schema.Array(Schema.String) }),\n})\nexport type AgentOutputReceivedEvent = typeof AgentOutputReceivedEvent.Type\n\n/** New — agent enrichment fields updated (PAN-440) */\nexport const AgentEnrichmentChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.enrichment_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n role: Schema.optional(Role),\n // Optional because this event type predates these fields (PAN-440). The event\n // store is append-only, so older persisted events lack them — a required schema\n // makes those events fail replay decode (\"Missing key\").\n hasPendingQuestion: Schema.optional(Schema.Boolean),\n pendingQuestionCount: Schema.optional(Schema.Number),\n pendingQuestionPrompt: Schema.optional(Schema.String),\n pendingQuestionReason: Schema.optional(Schema.String),\n // PAN-1520 — unified pending-input surfaces\n pendingInputCount: Schema.optional(Schema.Number),\n pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),\n pendingAskUserQuestion: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n questions: Schema.Array(Schema.Struct({\n question: Schema.String,\n header: Schema.optional(Schema.String),\n multiSelect: Schema.optional(Schema.Boolean),\n options: Schema.Array(Schema.Struct({\n label: Schema.String,\n description: Schema.optional(Schema.String),\n })),\n })),\n })),\n // PAN-1520 (FR-1) — pending ExitPlanMode plan payload for the approval modal.\n pendingProposedPlan: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n plan: Schema.String,\n })),\n resolution: Schema.optional(AgentResolution),\n resolutionCount: Schema.optional(Schema.Number),\n }),\n})\nexport type AgentEnrichmentChangedEvent = typeof AgentEnrichmentChangedEvent.Type\n\n/** New — agent created in database */\nexport const AgentCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: IssueId, agent: AgentSnapshot }),\n})\nexport type AgentCreatedEvent = typeof AgentCreatedEvent.Type\n\n// ─── Agent Runtime Events (PAN-800) ───────────────────────────────────────────\n// Canonical per-tool-call runtime signals. Fold into ReadModelState.agentRuntimeById\n// via the shared reducer. Server AgentStateService ref is derived from the same fold.\n\nexport const AgentActivityChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.activity_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n activity: Activity,\n currentTool: Schema.optional(Schema.String),\n }),\n})\nexport type AgentActivityChangedEvent = typeof AgentActivityChangedEvent.Type\n\nexport const AgentThinkingStartedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.thinking_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n lastToolAt: Schema.String,\n }),\n})\nexport type AgentThinkingStartedEvent = typeof AgentThinkingStartedEvent.Type\n\nexport const AgentThinkingStoppedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.thinking_stopped\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n resolvedBy: Schema.Literals([\"tool\", \"waiting\", \"idle\", \"stopped\"]),\n }),\n})\nexport type AgentThinkingStoppedEvent = typeof AgentThinkingStoppedEvent.Type\n\nexport const AgentWaitingStartedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.waiting_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n reason: WaitingReason,\n message: Schema.optional(Schema.String),\n }),\n})\nexport type AgentWaitingStartedEvent = typeof AgentWaitingStartedEvent.Type\n\nexport const AgentWaitingClearedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.waiting_cleared\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n clearedBy: Schema.Literals([\"user_response\", \"timeout\", \"stopped\", \"tool_resumed\"]),\n }),\n})\nexport type AgentWaitingClearedEvent = typeof AgentWaitingClearedEvent.Type\n\nexport const AgentPermissionRequestedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.permission_requested\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: ChannelPermissionRequestSnapshot,\n})\nexport type AgentPermissionRequestedEvent = typeof AgentPermissionRequestedEvent.Type\n\nexport const AgentPermissionResolvedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.permission_resolved\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n requestId: Schema.String,\n agentId: AgentId,\n issueId: Schema.optional(IssueId),\n behavior: ClaudeChannelPermissionBehavior,\n }),\n})\nexport type AgentPermissionResolvedEvent = typeof AgentPermissionResolvedEvent.Type\n\nexport const AgentMessageReceivedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.message_received\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n direction: Schema.Literals([\"to_agent\", \"from_agent\"]),\n source: Schema.Literals([\"user\", \"cloister\", \"specialist\", \"automated\"]),\n }),\n})\nexport type AgentMessageReceivedEvent = typeof AgentMessageReceivedEvent.Type\n\nexport const AgentChannelReplyEvent = Schema.Struct({\n type: Schema.Literal(\"agent.channel_reply\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n reply: AgentChannelReply,\n }),\n})\nexport type AgentChannelReplyEvent = typeof AgentChannelReplyEvent.Type\n\nexport const AgentModelSetEvent = Schema.Struct({\n type: Schema.Literal(\"agent.model_set\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n model: Schema.String,\n claudeSessionId: Schema.optional(Schema.String),\n sessionModel: Schema.optional(Schema.String),\n sessionHarness: Schema.optional(Schema.String),\n }),\n})\nexport type AgentModelSetEvent = typeof AgentModelSetEvent.Type\n\nexport const AgentCurrentIssueSetEvent = Schema.Struct({\n type: Schema.Literal(\"agent.current_issue_set\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n currentIssue: Schema.optional(IssueId),\n }),\n})\nexport type AgentCurrentIssueSetEvent = typeof AgentCurrentIssueSetEvent.Type\n\nexport const AgentContextSaturationChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.context_saturation_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n contextSaturatedAt: Schema.optional(Schema.String),\n }),\n})\nexport type AgentContextSaturationChangedEvent = typeof AgentContextSaturationChangedEvent.Type\n\nexport const AgentResolutionChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.resolution_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n resolution: AgentResolution,\n resolutionCount: Schema.Number,\n }),\n})\nexport type AgentResolutionChangedEvent = typeof AgentResolutionChangedEvent.Type\n\n/**\n * Bootstrap-only event emitted by AgentStateService when it seeds a runtime\n * snapshot during bootstrap (reconstruction from sources, PAN-1920). Not\n * emitted by hooks.\n */\nexport const AgentStateRestoredEvent = Schema.Struct({\n type: Schema.Literal(\"agent.state_restored\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n snapshot: AgentRuntimeSnapshot,\n }),\n})\nexport type AgentStateRestoredEvent = typeof AgentStateRestoredEvent.Type\n\n/** Emitted when a turn diff checkpoint is captured and diff computed */\nexport const AgentTurnDiffCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.turn_diff_completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n turnId: Schema.String,\n completedAt: Schema.String,\n files: Schema.Array(Schema.Struct({\n path: Schema.String,\n kind: Schema.optional(Schema.String),\n additions: Schema.optional(Schema.Number),\n deletions: Schema.optional(Schema.Number),\n })),\n checkpointRef: Schema.optional(Schema.String),\n assistantMessageId: Schema.optional(Schema.String),\n checkpointTurnCount: Schema.optional(Schema.Number),\n }),\n})\nexport type AgentTurnDiffCompletedEvent = typeof AgentTurnDiffCompletedEvent.Type\n\n// ─── Planning Events ──────────────────────────────────────────────────────────\n\n/** Replaces socket.io `planning:started` */\nexport const PlanningStartedEvent = Schema.Struct({\n type: Schema.Literal(\"planning.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, sessionName: Schema.String, harness: Schema.optional(Schema.String) }),\n})\nexport type PlanningStartedEvent = typeof PlanningStartedEvent.Type\n\n/** Replaces socket.io `planning:failed` */\nexport const PlanningFailedEvent = Schema.Struct({\n type: Schema.Literal(\"planning.failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, error: Schema.String }),\n})\nexport type PlanningFailedEvent = typeof PlanningFailedEvent.Type\n\n/** Replaces socket.io `planning:sync` */\nexport const PlanningSyncEvent = Schema.Struct({\n type: Schema.Literal(\"planning.sync\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n status: Schema.String,\n progress: Schema.optional(Schema.Number),\n message: Schema.optional(Schema.String),\n }),\n})\nexport type PlanningSyncEvent = typeof PlanningSyncEvent.Type\n\n// ─── Plan Item Events ─────────────────────────────────────────────────────────\n\n/** Replaces socket.io `plan:item-status-changed` */\nexport const PlanItemStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"plan.item_status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, itemId: Schema.String, status: Schema.String }),\n})\nexport type PlanItemStatusChangedEvent = typeof PlanItemStatusChangedEvent.Type\n\n/** Replaces socket.io `plan:subitem-status-changed` */\nexport const PlanSubitemStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"plan.subitem_status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n itemId: Schema.String,\n subItemId: Schema.String,\n status: Schema.String,\n }),\n})\nexport type PlanSubitemStatusChangedEvent = typeof PlanSubitemStatusChangedEvent.Type\n\n/** Replaces socket.io `plan:items-unblocked` */\nexport const PlanItemsUnblockedEvent = Schema.Struct({\n type: Schema.Literal(\"plan.items_unblocked\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, items: Schema.Array(Schema.String) }),\n})\nexport type PlanItemsUnblockedEvent = typeof PlanItemsUnblockedEvent.Type\n\n// ─── Pipeline / Merge Events ──────────────────────────────────────────────────\n\n/** Replaces socket.io `pipeline:status` */\nexport const PipelineStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, status: ReviewStatusSnapshot }),\n})\nexport type PipelineStatusChangedEvent = typeof PipelineStatusChangedEvent.Type\n\n/** Replaces socket.io `merge:ready` */\nexport const MergeReadyEvent = Schema.Struct({\n type: Schema.Literal(\"merge.ready\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type MergeReadyEvent = typeof MergeReadyEvent.Type\n\n/** New — review status changed */\nexport const ReviewStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"review.status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, status: ReviewStatusSnapshot }),\n})\nexport type ReviewStatusChangedEvent = typeof ReviewStatusChangedEvent.Type\n\n/** New — review specialist dispatched */\nexport const PipelineReviewStartedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.review-started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type PipelineReviewStartedEvent = typeof PipelineReviewStartedEvent.Type\n\n/** New — review specialist finished (passed or failed) */\nexport const PipelineReviewCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.review-completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, passed: Schema.Boolean }),\n})\nexport type PipelineReviewCompletedEvent = typeof PipelineReviewCompletedEvent.Type\n\n/** New — test specialist dispatched */\nexport const PipelineTestStartedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.test-started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type PipelineTestStartedEvent = typeof PipelineTestStartedEvent.Type\n\n/** New — test specialist finished (passed or failed) */\nexport const PipelineTestCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.test-completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, passed: Schema.Boolean }),\n})\nexport type PipelineTestCompletedEvent = typeof PipelineTestCompletedEvent.Type\n\n/** New — verification gate dispatched (review-pipeline verify step) */\nexport const PipelineVerificationStartedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.verification-started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type PipelineVerificationStartedEvent = typeof PipelineVerificationStartedEvent.Type\n\n/** New — verification gate failed (carries failedCheck for gate failures, message for infra errors) */\nexport const PipelineVerificationFailedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.verification-failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n failedCheck: Schema.optional(Schema.String),\n message: Schema.optional(Schema.String),\n }),\n})\nexport type PipelineVerificationFailedEvent = typeof PipelineVerificationFailedEvent.Type\n\n/** New — issue lifecycle transition (single source: IssueLifecycle.transitionTo).\n * `state` stays an open string so new server-side lifecycle states can never\n * poison the domain-event stream (the failure mode behind this event's addition). */\nexport const IssueTransitionedEvent = Schema.Struct({\n type: Schema.Literal(\"issue.transitioned\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, state: Schema.String }),\n})\nexport type IssueTransitionedEvent = typeof IssueTransitionedEvent.Type\n\nexport const OperatorInterventionEvent = Schema.Struct({\n type: Schema.Literal(\"operator.intervention\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n kind: Schema.Literals([\"tell\", \"pause\", \"restart\", \"manual_edit\", \"deep_wipe\", \"unpause\", \"untroubled\"]),\n source: Schema.String,\n }),\n})\nexport type OperatorInterventionEvent = typeof OperatorInterventionEvent.Type\n\nexport const SubstrateBugFiledEvent = Schema.Struct({\n type: Schema.Literal(\"substrate.bug_filed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n runId: Schema.optional(Schema.String),\n filedBy: Schema.Literals([\"agent\", \"operator\"]),\n discoveredIn: Schema.optional(IssueId),\n severity: Schema.Literals([\"P0\", \"P1\", \"P2\"]),\n }),\n})\nexport type SubstrateBugFiledEvent = typeof SubstrateBugFiledEvent.Type\n\n/**\n * PAN-915 — reviewer session received a new prompt (spawn or resume of a\n * canonical PAN-830 session). Drives event-driven `reviewSubStatuses[role] =\n * 'running'` and tracking of `reviewSessionNames` without polling tmux.\n */\nexport const ReviewReviewerStartedEvent = Schema.Struct({\n type: Schema.Literal(\"review.reviewer_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n role: Schema.String,\n sessionName: Schema.String,\n }),\n})\nexport type ReviewReviewerStartedEvent = typeof ReviewReviewerStartedEvent.Type\n\n/**\n * PAN-915 — reviewer wrote its output file (round complete for that role).\n * Updates `reviewSubStatuses[role] = 'done'` event-driven.\n */\nexport const ReviewReviewerCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"review.reviewer_completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n role: Schema.String,\n }),\n})\nexport type ReviewReviewerCompletedEvent = typeof ReviewReviewerCompletedEvent.Type\n\n/**\n * Review specialist timeout telemetry. Emitted once per timed-out reviewer wait\n * attempt so operators can distinguish transient auto-retries from terminal\n * review failures.\n */\nexport const ReviewSpecialistTimedOutEvent = Schema.Struct({\n type: Schema.Literal(\"review.specialist.timed_out\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n role: Schema.String,\n sessionName: Schema.String,\n attempt: Schema.Number,\n maxRetries: Schema.Number,\n willRetry: Schema.Boolean,\n }),\n})\nexport type ReviewSpecialistTimedOutEvent = typeof ReviewSpecialistTimedOutEvent.Type\n\n/**\n * PAN-915 — review coordinator session spawned. Surfaces in the dashboard so\n * the kanban card can show \"review in progress\" the instant the coordinator\n * starts, not after the first reviewer finishes.\n */\nexport const ReviewCoordinatorStartedEvent = Schema.Struct({\n type: Schema.Literal(\"review.coordinator_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n sessionName: Schema.String,\n }),\n})\nexport type ReviewCoordinatorStartedEvent = typeof ReviewCoordinatorStartedEvent.Type\n\n/** Review coordinator died before writing a terminal exit marker. */\nexport const ReviewCoordinatorDiedEvent = Schema.Struct({\n type: Schema.Literal(\"review.coordinator.died\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n sessionName: Schema.String,\n reason: Schema.String,\n }),\n})\nexport type ReviewCoordinatorDiedEvent = typeof ReviewCoordinatorDiedEvent.Type\n\n// ─── Specialist Events ────────────────────────────────────────────────────────\n\nconst SpecialistLifecycleState = Schema.Literals([\"active\", \"sleeping\", \"uninitialized\"])\n\n/** New — role-backed specialist became active */\nexport const SpecialistStartedEvent = Schema.Struct({\n type: Schema.Literal(\"specialist.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n name: Role,\n state: SpecialistLifecycleState,\n isRunning: Schema.Boolean,\n currentIssue: Schema.optional(Schema.String),\n lastWake: Schema.optional(Schema.String),\n }),\n})\nexport type SpecialistStartedEvent = typeof SpecialistStartedEvent.Type\n\n/** New — role-backed specialist completed work */\nexport const SpecialistCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"specialist.completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ name: Role, issueId: Schema.optional(IssueId) }),\n})\nexport type SpecialistCompletedEvent = typeof SpecialistCompletedEvent.Type\n\n/** New — role-backed specialist failed */\nexport const SpecialistFailedEvent = Schema.Struct({\n type: Schema.Literal(\"specialist.failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n name: Role,\n issueId: Schema.optional(IssueId),\n error: Schema.String,\n }),\n})\nexport type SpecialistFailedEvent = typeof SpecialistFailedEvent.Type\n\n// ─── Resource Events ──────────────────────────────────────────────────────────\n\n/** Replaces socket.io `resources:updated` */\nexport const ResourcesUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"resources.updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ resources: ResourceStats }),\n})\nexport type ResourcesUpdatedEvent = typeof ResourcesUpdatedEvent.Type\n\nexport const SystemHealthSeverityChangedEvent = Schema.Struct({\n type: Schema.Literal(\"system.health_severity_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n previousSeverity: Schema.String,\n severity: Schema.String,\n reasons: Schema.Array(Schema.String),\n leakedSpecialistCount: Schema.Number,\n }),\n})\nexport type SystemHealthSeverityChangedEvent = typeof SystemHealthSeverityChangedEvent.Type\n\n// ─── Issue Events ─────────────────────────────────────────────────────────────\n\n/** Replaces socket.io `issues:snapshot` */\nexport const IssuesSnapshotEvent = Schema.Struct({\n type: Schema.Literal(\"issues.snapshot\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issues: Schema.Array(Schema.Unknown) }),\n})\nexport type IssuesSnapshotEvent = typeof IssuesSnapshotEvent.Type\n\n/** Replaces socket.io `issues:updated` */\nexport const IssuesUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"issues.updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: Schema.optional(IssueId) }),\n})\nexport type IssuesUpdatedEvent = typeof IssuesUpdatedEvent.Type\n\n/** Patch a single issue's status in the read model without a full snapshot refresh. */\nexport const IssueStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"issue.statusChanged\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n status: Schema.String,\n canonicalStatus: Schema.String,\n labels: Schema.optional(Schema.Array(Schema.String)),\n }),\n})\nexport type IssueStatusChangedEvent = typeof IssueStatusChangedEvent.Type\n\n// ─── Activity Events ──────────────────────────────────────────────────────────\n\n/** Replaces socket.io `godview:activity` */\nexport const ActivityUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"activity.updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ events: Schema.Array(Schema.Unknown) }),\n})\nexport type ActivityUpdatedEvent = typeof ActivityUpdatedEvent.Type\n\n/** Individual activity log entry — emitted by merge-agent, cloister, specialists (PAN-520) */\nexport const ActivityEntryEvent = Schema.Struct({\n type: Schema.Literal(\"activity.entry\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n id: Schema.String,\n source: Schema.String,\n level: Schema.String,\n message: Schema.String,\n details: Schema.optional(Schema.String),\n issueId: Schema.optional(IssueId),\n /** Dashboard route the feed navigates to on click (e.g. /conv/<name>, /flywheel). */\n link: Schema.optional(Schema.String),\n /** PAN-1862 (FR-12): fire a desktop notification for this entry (operator-facing warnings). */\n desktop: Schema.optional(Schema.Boolean),\n }),\n})\nexport type ActivityEntryEvent = typeof ActivityEntryEvent.Type\n\n/** Detailed activity log — auto-generated from domain state changes */\nexport const ActivityDetailedEvent = Schema.Struct({\n type: Schema.Literal(\"activity.detailed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n id: Schema.String,\n source: Schema.String,\n level: Schema.String,\n message: Schema.String,\n details: Schema.optional(Schema.String),\n issueId: Schema.optional(IssueId),\n triggeringEvent: Schema.optional(Schema.String),\n }),\n})\nexport type ActivityDetailedEvent = typeof ActivityDetailedEvent.Type\n\n/** TTS activity log — upleveled utterances for text-to-speech */\nexport const ActivityTtsEvent = Schema.Struct({\n type: Schema.Literal(\"activity.tts\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n id: Schema.String,\n utterance: Schema.String,\n priority: Schema.optional(Schema.Number),\n issueId: Schema.optional(IssueId),\n source: Schema.optional(Schema.String),\n eventType: Schema.optional(Schema.String),\n }),\n})\nexport type ActivityTtsEvent = typeof ActivityTtsEvent.Type\n\n// ─── Dashboard Lifecycle Events ─────────────────────────────────────────────────\n\n/** Dashboard is restarting (post-merge deploy, pan restart, etc.) (PAN-520) */\nexport const DashboardLifecycleStartedEvent = Schema.Struct({\n type: Schema.Literal(\"dashboard.lifecycle_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n reason: Schema.String,\n issueId: Schema.optional(IssueId),\n trigger: Schema.String,\n }),\n})\nexport type DashboardLifecycleStartedEvent = typeof DashboardLifecycleStartedEvent.Type\n\n/** Dashboard restarted successfully after a lifecycle event (PAN-520) */\nexport const DashboardLifecycleCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"dashboard.lifecycle_completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n reason: Schema.String,\n issueId: Schema.optional(IssueId),\n durationMs: Schema.Number,\n }),\n})\nexport type DashboardLifecycleCompletedEvent = typeof DashboardLifecycleCompletedEvent.Type\n\n/** Dashboard restart failed (PAN-520) */\nexport const DashboardLifecycleFailedEvent = Schema.Struct({\n type: Schema.Literal(\"dashboard.lifecycle_failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n reason: Schema.String,\n issueId: Schema.optional(IssueId),\n error: Schema.String,\n }),\n})\nexport type DashboardLifecycleFailedEvent = typeof DashboardLifecycleFailedEvent.Type\n\n/** Replaces socket.io `shadow:inference-update` */\nexport const ShadowInferenceUpdateEvent = Schema.Struct({\n type: Schema.Literal(\"shadow.inference_update\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, content: Schema.String }),\n})\nexport type ShadowInferenceUpdateEvent = typeof ShadowInferenceUpdateEvent.Type\n\n// ─── Workspace Lifecycle Events ───────────────────────────────────────────────\n\n/** New — workspace worktree created (before planning.started) */\nexport const WorkspaceCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, workspacePath: Schema.String }),\n})\nexport type WorkspaceCreatedEvent = typeof WorkspaceCreatedEvent.Type\n\n/** New — deep-wipe started (transitional state for UI spinner) */\nexport const WorkspaceWipeStartedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.wipe_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type WorkspaceWipeStartedEvent = typeof WorkspaceWipeStartedEvent.Type\n\n/** New — deep-wipe completed, workspace fully destroyed */\nexport const WorkspaceDestroyedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.destroyed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type WorkspaceDestroyedEvent = typeof WorkspaceDestroyedEvent.Type\n\n/** New — cleanup-workspace completed, workspace directory removed */\nexport const WorkspaceDeletedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.deleted\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type WorkspaceDeletedEvent = typeof WorkspaceDeletedEvent.Type\n\n/** New — planning aborted, workspace returned to idle state */\nexport const WorkspaceAbortedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.aborted\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, sessionName: Schema.optional(Schema.String) }),\n})\nexport type WorkspaceAbortedEvent = typeof WorkspaceAbortedEvent.Type\n\n// ─── Memory Events ────────────────────────────────────────────────────────────\n\nexport const MemoryObservationCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.observation_created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ observation: MemoryObservation }),\n})\nexport type MemoryObservationCreatedEvent = typeof MemoryObservationCreatedEvent.Type\n\nexport const MemoryStatusUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.status_updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n identity: Schema.Struct({ projectId: Schema.String, workspaceId: Schema.String, issueId: IssueId }),\n status: MemoryStatus,\n previousStatus: Schema.optional(MemoryStatus),\n }),\n})\nexport type MemoryStatusUpdatedEvent = typeof MemoryStatusUpdatedEvent.Type\n\nexport const MemoryRollupTriggeredEvent = Schema.Struct({\n type: Schema.Literal(\"memory.rollup_triggered\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n projectId: Schema.String,\n workspaceId: Schema.String,\n issueId: IssueId,\n pendingCount: Schema.Number,\n turnIds: Schema.Array(Schema.String),\n threshold: Schema.Number,\n }),\n})\nexport type MemoryRollupTriggeredEvent = typeof MemoryRollupTriggeredEvent.Type\n\nexport const MemoryResetMarkerCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.reset_marker_created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ marker: ResetMarker }),\n})\nexport type MemoryResetMarkerCreatedEvent = typeof MemoryResetMarkerCreatedEvent.Type\n\nexport const MemoryHealthChangedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.health_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n projectId: Schema.String,\n issueId: IssueId,\n status: Schema.Literals([\"healthy\", \"degraded\", \"failing\"]),\n reason: Schema.NullOr(Schema.String),\n // Human-readable cause of the most recent failure (e.g. the provider error\n // message). Distinct from `reason`, which is a coarse machine code like\n // \"extraction-failed\". Surfaced verbatim in the UI so the operator can see\n // *why* memory extraction is failing without reading server logs.\n detail: Schema.optional(Schema.String),\n ragDecision: Schema.optional(RagDecision),\n }),\n})\nexport type MemoryHealthChangedEvent = typeof MemoryHealthChangedEvent.Type\n\n// ─── Cost Events ──────────────────────────────────────────────────────────────\n\n/** New — cost event recorded in the store */\nexport const CostEventRecordedEvent = Schema.Struct({\n type: Schema.Literal(\"cost.event_recorded\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n issueId: IssueId,\n cost: Schema.Number,\n inputTokens: Schema.Number,\n outputTokens: Schema.Number,\n }),\n})\nexport type CostEventRecordedEvent = typeof CostEventRecordedEvent.Type\n\n// ─── Conversation Events ──────────────────────────────────────────────────────\n\n/** Emitted (in-memory only, not persisted) when a Overdeck-native compaction starts or completes. */\nexport const ConversationCompactingChangedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.compacting_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n compacting: Schema.Boolean,\n }),\n})\nexport type ConversationCompactingChangedEvent = typeof ConversationCompactingChangedEvent.Type\n\n/** Emitted (in-memory only) when a new conversation row is created, so the\n * sidebar list can refresh immediately instead of waiting for its poll tick. */\nexport const ConversationCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n }),\n})\nexport type ConversationCreatedEvent = typeof ConversationCreatedEvent.Type\n\n/** Emitted (in-memory only) when a conversation title changes, so the sidebar\n * list can refresh immediately instead of waiting for its poll tick. */\nexport const ConversationTitleChangedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.title_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n title: Schema.String,\n titleSource: Schema.String,\n }),\n})\nexport type ConversationTitleChangedEvent = typeof ConversationTitleChangedEvent.Type\n\n/** Emitted (in-memory only) when a PermissionRequest hook fires or resolves for a conversation. */\nexport const ConversationPermissionChangedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.permission_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n waiting: Schema.Boolean,\n toolName: Schema.optional(Schema.String),\n }),\n})\nexport type ConversationPermissionChangedEvent = typeof ConversationPermissionChangedEvent.Type\n\n// ─── Conversation Discovery Events (PAN-457) ──────────────────────────────────\n\n/** Scan started */\nexport const ScanStartedEvent = Schema.Struct({\n type: Schema.Literal(\"scan.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n mode: Schema.Literals(['targeted', 'watched', 'system']),\n dirs: Schema.Array(Schema.String),\n }),\n})\nexport type ScanStartedEvent = typeof ScanStartedEvent.Type\n\n/** Scan progress tick */\nexport const ScanProgressEvent = Schema.Struct({\n type: Schema.Literal(\"scan.progress\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n dirsProcessed: Schema.Number,\n dirsTotal: Schema.Number,\n sessionsFound: Schema.Number,\n elapsedMs: Schema.Number,\n }),\n})\nexport type ScanProgressEvent = typeof ScanProgressEvent.Type\n\n/** Scan completed */\nexport const ScanCompleteEvent = Schema.Struct({\n type: Schema.Literal(\"scan.complete\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n inserted: Schema.Number,\n updated: Schema.Number,\n skipped: Schema.Number,\n errors: Schema.Number,\n durationMs: Schema.Number,\n }),\n})\nexport type ScanCompleteEvent = typeof ScanCompleteEvent.Type\n\n/** Per-session enrichment progress */\nexport const EnrichProgressEvent = Schema.Struct({\n type: Schema.Literal(\"enrich.progress\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n sessionId: Schema.Number,\n level: Schema.Number,\n model: Schema.String,\n cost: Schema.Number,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n }),\n})\nexport type EnrichProgressEvent = typeof EnrichProgressEvent.Type\n\n/** Enrichment batch completed */\nexport const EnrichCompleteEvent = Schema.Struct({\n type: Schema.Literal(\"enrich.complete\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n processed: Schema.Number,\n totalCost: Schema.Number,\n failures: Schema.Number,\n durationMs: Schema.Number,\n }),\n})\nexport type EnrichCompleteEvent = typeof EnrichCompleteEvent.Type\n\n/** Per-session embedding progress */\nexport const EmbedProgressEvent = Schema.Struct({\n type: Schema.Literal(\"embed.progress\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n sessionId: Schema.Number,\n model: Schema.String,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n }),\n})\nexport type EmbedProgressEvent = typeof EmbedProgressEvent.Type\n\n// ─── Union ────────────────────────────────────────────────────────────────────\n\n/** All domain events — the shape streamed via subscribeDomainEvents RPC */\nexport const DomainEvent = Schema.Union([\n SystemHeartbeatEvent,\n BeadsFreshnessChangedEvent,\n AgentCreatedEvent,\n AgentEnrichmentChangedEvent,\n AgentStartedEvent,\n AgentStoppedEvent,\n AgentHeartbeatDeadEvent,\n WorkCompletedEvent,\n AgentCompletedEvent,\n ReviewApprovedEvent,\n TestPassedEvent,\n AgentStatusChangedEvent,\n AgentOutputReceivedEvent,\n // PAN-800 runtime events\n AgentActivityChangedEvent,\n AgentThinkingStartedEvent,\n AgentThinkingStoppedEvent,\n AgentWaitingStartedEvent,\n AgentWaitingClearedEvent,\n AgentPermissionRequestedEvent,\n AgentPermissionResolvedEvent,\n AgentMessageReceivedEvent,\n AgentChannelReplyEvent,\n AgentModelSetEvent,\n AgentCurrentIssueSetEvent,\n AgentContextSaturationChangedEvent,\n AgentResolutionChangedEvent,\n AgentStateRestoredEvent,\n AgentTurnDiffCompletedEvent,\n PlanningStartedEvent,\n PlanningFailedEvent,\n PlanningSyncEvent,\n PlanItemStatusChangedEvent,\n PlanSubitemStatusChangedEvent,\n PlanItemsUnblockedEvent,\n PipelineStatusChangedEvent,\n MergeReadyEvent,\n ReviewStatusChangedEvent,\n PipelineReviewStartedEvent,\n PipelineReviewCompletedEvent,\n PipelineTestStartedEvent,\n PipelineTestCompletedEvent,\n PipelineVerificationStartedEvent,\n PipelineVerificationFailedEvent,\n IssueTransitionedEvent,\n OperatorInterventionEvent,\n SubstrateBugFiledEvent,\n ReviewReviewerStartedEvent,\n ReviewReviewerCompletedEvent,\n ReviewSpecialistTimedOutEvent,\n ReviewCoordinatorStartedEvent,\n ReviewCoordinatorDiedEvent,\n SpecialistStartedEvent,\n SpecialistCompletedEvent,\n SpecialistFailedEvent,\n ResourcesUpdatedEvent,\n SystemHealthSeverityChangedEvent,\n IssuesSnapshotEvent,\n IssuesUpdatedEvent,\n IssueStatusChangedEvent,\n ActivityUpdatedEvent,\n ActivityEntryEvent,\n ActivityDetailedEvent,\n ActivityTtsEvent,\n ShadowInferenceUpdateEvent,\n MemoryObservationCreatedEvent,\n MemoryStatusUpdatedEvent,\n MemoryRollupTriggeredEvent,\n MemoryResetMarkerCreatedEvent,\n MemoryHealthChangedEvent,\n CostEventRecordedEvent,\n WorkspaceCreatedEvent,\n WorkspaceWipeStartedEvent,\n WorkspaceDestroyedEvent,\n WorkspaceDeletedEvent,\n WorkspaceAbortedEvent,\n DashboardLifecycleStartedEvent,\n DashboardLifecycleCompletedEvent,\n DashboardLifecycleFailedEvent,\n ConversationCompactingChangedEvent,\n ConversationCreatedEvent,\n ConversationTitleChangedEvent,\n ConversationPermissionChangedEvent,\n ScanStartedEvent,\n ScanProgressEvent,\n ScanCompleteEvent,\n EnrichProgressEvent,\n EnrichCompleteEvent,\n EmbedProgressEvent,\n])\nexport type DomainEvent = typeof DomainEvent.Type\n","import { Schema } from \"effect\"\n\nexport const EDITORS = [\n { id: \"cursor\", label: \"Cursor\", command: \"cursor\", supportsGoto: true },\n { id: \"windsurf\", label: \"Windsurf\", command: \"windsurf\", supportsGoto: true },\n { id: \"trae\", label: \"Trae\", command: \"trae\", supportsGoto: true },\n { id: \"kiro\", label: \"Kiro\", command: \"kiro\", supportsGoto: true },\n { id: \"vscode\", label: \"VS Code\", command: \"code\", supportsGoto: true },\n { id: \"vscode-insiders\", label: \"VS Code Insiders\", command: \"code-insiders\", supportsGoto: true },\n { id: \"vscodium\", label: \"VSCodium\", command: \"codium\", supportsGoto: true },\n { id: \"zed\", label: \"Zed\", command: \"zed\", supportsGoto: false },\n { id: \"antigravity\", label: \"Antigravity\", command: \"agy\", supportsGoto: false },\n { id: \"idea\", label: \"IntelliJ IDEA\", command: \"idea\", supportsGoto: true },\n { id: \"aqua\", label: \"Aqua\", command: \"aqua\", supportsGoto: true },\n { id: \"clion\", label: \"CLion\", command: \"clion\", supportsGoto: true },\n { id: \"datagrip\", label: \"DataGrip\", command: \"datagrip\", supportsGoto: true },\n { id: \"dataspell\", label: \"DataSpell\", command: \"dataspell\", supportsGoto: true },\n { id: \"goland\", label: \"GoLand\", command: \"goland\", supportsGoto: true },\n { id: \"phpstorm\", label: \"PhpStorm\", command: \"phpstorm\", supportsGoto: true },\n { id: \"pycharm\", label: \"PyCharm\", command: \"pycharm\", supportsGoto: true },\n { id: \"rider\", label: \"Rider\", command: \"rider\", supportsGoto: true },\n { id: \"rubymine\", label: \"RubyMine\", command: \"rubymine\", supportsGoto: true },\n { id: \"rustrover\", label: \"RustRover\", command: \"rustrover\", supportsGoto: true },\n { id: \"webstorm\", label: \"WebStorm\", command: \"webstorm\", supportsGoto: true },\n { id: \"file-manager\", label: \"File Manager\", command: null, supportsGoto: false },\n] as const\n\nexport type EditorEntry = (typeof EDITORS)[number]\nexport type EditorId = EditorEntry[\"id\"]\n\nconst EDITOR_IDS: [EditorId, ...EditorId[]] = [\n \"cursor\",\n \"windsurf\",\n \"trae\",\n \"kiro\",\n \"vscode\",\n \"vscode-insiders\",\n \"vscodium\",\n \"zed\",\n \"antigravity\",\n \"idea\",\n \"aqua\",\n \"clion\",\n \"datagrip\",\n \"dataspell\",\n \"goland\",\n \"phpstorm\",\n \"pycharm\",\n \"rider\",\n \"rubymine\",\n \"rustrover\",\n \"webstorm\",\n \"file-manager\",\n]\nexport const EditorIdSchema = Schema.Literals(EDITOR_IDS)\n\nexport const OpenInEditorInput = Schema.Struct({\n cwd: Schema.String,\n editor: EditorIdSchema,\n})\nexport type OpenInEditorInput = typeof OpenInEditorInput.Type\n","import { Effect, Schema } from \"effect\"\n\nexport const FlywheelRunId = Schema.String.check(Schema.isPattern(/^RUN-\\d+$/))\nexport type FlywheelRunId = typeof FlywheelRunId.Type\n\nexport const FlywheelHttpUrl = Schema.String.check(Schema.isPattern(/^https?:\\/\\/\\S+$/i))\nexport type FlywheelHttpUrl = typeof FlywheelHttpUrl.Type\n\nexport const FlywheelHarness = Schema.Literals([\"claude-code\", \"pi\", \"ohmypi\", \"codex\"])\nexport interface FlywheelOrchestrator {\n harness: typeof FlywheelHarness.Type\n model: string\n effort: \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"\n ctxPercent: number\n}\n\nexport const FlywheelEffort = Schema.Literals([\"low\", \"medium\", \"high\", \"xhigh\", \"max\"])\nexport const FlywheelOrchestrator = Schema.Struct({\n harness: FlywheelHarness,\n model: Schema.String,\n effort: FlywheelEffort,\n ctxPercent: Schema.Number,\n})\n\nexport interface FlywheelHeadline {\n bugsFixed: number\n swarmItemsMerged: number\n swarmItemsTotal: number\n prsMerged: number\n awaitingUat: number\n}\n\nexport const FlywheelHeadline = Schema.Struct({\n bugsFixed: Schema.Number,\n swarmItemsMerged: Schema.Number,\n swarmItemsTotal: Schema.Number,\n prsMerged: Schema.Number,\n awaitingUat: Schema.Number,\n})\n\n/**\n * Pipeline verbs and the merge-queue contract (PAN-1736):\n *\n * `computeMergeQueue` treats an item as AT THE MERGE GATE when its verb is\n * \"shipping\" OR \"merging\" — both are natural emissions for a merge-ready\n * issue, and orchestrators have used each. Emitting any OTHER verb for an\n * issue that is ready_for_merge in the review DB silently drops it from the\n * merge queue and from UAT batch assembly (PAN-1737). RUN-18 shipped an\n * empty queue with five ready issues exactly this way.\n *\n * If you add a verb that can describe a merge-ready issue, extend\n * MERGE_GATE_VERBS in src/lib/flywheel-merge-order.ts in the same change.\n */\nexport const FlywheelPipelineVerb = Schema.Literals([\n \"planning\",\n \"working\",\n \"reviewing\",\n \"testing\",\n \"shipping\",\n \"merging\",\n \"blocked\",\n \"parked\",\n])\n\nexport const FlywheelPipelineStatus = Schema.Literals([\n \"queued\",\n \"running\",\n \"blocked\",\n \"passed\",\n \"failed\",\n \"merged\",\n \"parked\",\n])\n\nexport interface FlywheelPipelineItem {\n issueId: string\n title: string\n verb: typeof FlywheelPipelineVerb.Type\n status: typeof FlywheelPipelineStatus.Type\n progressPercent?: number | undefined\n agentId?: string | undefined\n pr?: number | undefined\n mergeOrder?: number | undefined\n conflictsWith?: readonly string[] | undefined\n}\n\nexport const FlywheelPipelineItem = Schema.Struct({\n issueId: Schema.String,\n title: Schema.String,\n verb: FlywheelPipelineVerb,\n status: FlywheelPipelineStatus,\n progressPercent: Schema.optional(Schema.Number),\n agentId: Schema.optional(Schema.String),\n pr: Schema.optional(Schema.Number),\n mergeOrder: Schema.optional(Schema.Number),\n conflictsWith: Schema.optional(Schema.Array(Schema.String)),\n})\n\nexport const FlywheelSubstrateBugStatus = Schema.Literals([\"filed\", \"fixed\", \"workaround\"])\n\nexport interface FlywheelSubstrateBug {\n issueId: string\n title: string\n status: typeof FlywheelSubstrateBugStatus.Type\n commitSha?: string | undefined\n url?: FlywheelHttpUrl | undefined\n}\n\nexport const FlywheelSubstrateBug = Schema.Struct({\n issueId: Schema.String,\n title: Schema.String,\n status: FlywheelSubstrateBugStatus,\n commitSha: Schema.optional(Schema.String),\n url: Schema.optional(FlywheelHttpUrl),\n})\n\nexport const FlywheelAgentStatus = Schema.Literals([\n \"starting\",\n \"running\",\n \"waiting\",\n \"idle\",\n \"stopped\",\n \"error\",\n])\n\nexport interface FlywheelAgent {\n id: string\n label: string\n status: typeof FlywheelAgentStatus.Type\n issueId?: string | undefined\n role?: string | undefined\n model?: string | undefined\n ctxPercent?: number | undefined\n currentAction?: string | undefined\n}\n\nexport const FlywheelAgent = Schema.Struct({\n id: Schema.String,\n label: Schema.String,\n status: FlywheelAgentStatus,\n issueId: Schema.optional(Schema.String),\n role: Schema.optional(Schema.String),\n model: Schema.optional(Schema.String),\n ctxPercent: Schema.optional(Schema.Number),\n currentAction: Schema.optional(Schema.String),\n})\n\nexport interface FlywheelParkedItem {\n issueId: string\n title: string\n reason: string\n parkedAt?: string | undefined\n}\n\nexport const FlywheelParkedItem = Schema.Struct({\n issueId: Schema.String,\n title: Schema.String,\n reason: Schema.String,\n parkedAt: Schema.optional(Schema.String),\n})\n\nexport const FlywheelSuggestionAction = Schema.Literals([\n \"start\",\n \"resume\",\n \"plan\",\n \"review\",\n \"merge\",\n \"unblock\",\n \"park\",\n \"investigate\",\n \"wait\",\n])\nexport type FlywheelSuggestionAction = typeof FlywheelSuggestionAction.Type\n\nexport const FlywheelSuggestionPriority = Schema.Literals([\"urgent\", \"high\", \"medium\", \"low\"])\nexport type FlywheelSuggestionPriority = typeof FlywheelSuggestionPriority.Type\n\nexport interface FlywheelSuggestion {\n action: FlywheelSuggestionAction\n issueId?: string | undefined\n rationale: string\n priority: FlywheelSuggestionPriority\n}\n\nexport const FlywheelSuggestion = Schema.Struct({\n action: FlywheelSuggestionAction,\n issueId: Schema.optional(Schema.String),\n rationale: Schema.String,\n priority: FlywheelSuggestionPriority,\n})\n\nexport interface FlywheelSystemStatus {\n mainHead: string\n ramUsedMb: number\n ramTotalMb: number\n swapUsedMb: number\n swapTotalMb: number\n agentsActive: number\n agentsCap: number\n}\n\nexport const FlywheelSystemStatus = Schema.Struct({\n mainHead: Schema.String,\n ramUsedMb: Schema.Number,\n ramTotalMb: Schema.Number,\n swapUsedMb: Schema.Number,\n swapTotalMb: Schema.Number,\n agentsActive: Schema.Number,\n agentsCap: Schema.Number,\n})\n\nexport interface FlywheelStatus {\n runId: FlywheelRunId\n startedAt: string\n elapsedMs: number\n orchestrator: FlywheelOrchestrator\n headline: FlywheelHeadline\n activePipeline: ReadonlyArray<FlywheelPipelineItem>\n substrateBugs: ReadonlyArray<FlywheelSubstrateBug>\n agents: ReadonlyArray<FlywheelAgent>\n parked: ReadonlyArray<FlywheelParkedItem>\n suggestions: ReadonlyArray<FlywheelSuggestion>\n system: FlywheelSystemStatus\n openQuestions: ReadonlyArray<string>\n ticks: number\n lastTickAt: string\n}\n\nexport const FlywheelStatus = Schema.Struct({\n runId: FlywheelRunId,\n startedAt: Schema.String,\n elapsedMs: Schema.Number,\n orchestrator: FlywheelOrchestrator,\n headline: FlywheelHeadline,\n activePipeline: Schema.Array(FlywheelPipelineItem),\n substrateBugs: Schema.Array(FlywheelSubstrateBug),\n agents: Schema.Array(FlywheelAgent),\n parked: Schema.Array(FlywheelParkedItem),\n suggestions: Schema.Array(FlywheelSuggestion).pipe(\n Schema.withDecodingDefaultKey(Effect.succeed([])),\n ),\n system: FlywheelSystemStatus,\n openQuestions: Schema.Array(Schema.String),\n ticks: Schema.Number,\n lastTickAt: Schema.String,\n})\n","import { Schema } from \"effect\"\nimport * as Rpc from \"effect/unstable/rpc/Rpc\"\nimport * as RpcGroup from \"effect/unstable/rpc/RpcGroup\"\nimport { DomainEvent } from \"./events\"\nimport {\n AgentStatus,\n ConversationCostSummary,\n ConversationFilter,\n DashboardSnapshot,\n DiscoveredSessionSnapshot,\n IssueId,\n ScanResult,\n SequenceNumber,\n SessionNodePresence,\n SessionsFeedFacetsSnapshot,\n SessionsFeedRowSnapshot,\n WorkspaceDetail,\n} from \"./types\"\nimport { EditorIdSchema, OpenInEditorInput } from \"./editor\"\nimport { FlywheelStatus } from \"./flywheel\"\n\n// ─── RPC method names ─────────────────────────────────────────────────────────\n\nexport const WS_METHODS = {\n // Conversations (PAN-457)\n scanConversations: \"pan.scanConversations\",\n searchConversations: \"pan.searchConversations\",\n listDiscoveredSessions: \"pan.listDiscoveredSessions\",\n listSessionsFeed: \"pan.listSessionsFeed\",\n getSessionsFeedFacets: \"pan.getSessionsFeedFacets\",\n getDiscoveredSession: \"pan.getDiscoveredSession\",\n enrichSessions: \"pan.enrichSessions\",\n embedSessions: \"pan.embedSessions\",\n getConversationCost: \"pan.getConversationCost\",\n getConversationCostByWorkspace: \"pan.getConversationCostByWorkspace\",\n getConversationStats: \"pan.getConversationStats\",\n\n // Streaming subscriptions\n subscribeDomainEvents: \"pan.subscribeDomainEvents\",\n subscribeIssueEvents: \"pan.subscribeIssueEvents\",\n subscribeTerminal: \"pan.subscribeTerminal\",\n subscribeAgentOutput: \"pan.subscribeAgentOutput\",\n subscribeConversationMessages: \"pan.subscribeConversationMessages\",\n subscribeProjectSessionTree: \"pan.subscribeProjectSessionTree\",\n subscribeFlywheelStatus: \"pan.subscribeFlywheelStatus\",\n\n // Snapshot / replay\n getSnapshot: \"pan.getSnapshot\",\n replayEvents: \"pan.replayEvents\",\n\n // Workspace detail (batched)\n getWorkspaceDetail: \"pan.getWorkspaceDetail\",\n readWorkspaceFile: \"pan.readWorkspaceFile\",\n\n // File-path existence (PAN-1457) — used by MarkdownFileLink to decide\n // whether a path candidate in chat markdown should render as a chip.\n resolveFilePathExists: \"pan.resolveFilePathExists\",\n\n // Terminal control\n terminalOpen: \"pan.terminalOpen\",\n terminalWrite: \"pan.terminalWrite\",\n terminalResize: \"pan.terminalResize\",\n terminalClose: \"pan.terminalClose\",\n\n // Commands (trigger mutations via RPC)\n startPlanning: \"pan.startPlanning\",\n startAgent: \"pan.startAgent\",\n deepWipe: \"pan.deepWipe\",\n sendTerminalInput: \"pan.sendTerminalInput\",\n resizeTerminal: \"pan.resizeTerminal\",\n\n // Editor integration (PAN-966)\n shellOpenInEditor: \"pan.shellOpenInEditor\",\n getAvailableEditors: \"pan.getAvailableEditors\",\n} as const\n\n// ─── Error types ──────────────────────────────────────────────────────────────\n\nexport class PanRpcError extends Schema.TaggedErrorClass<PanRpcError>()(\"PanRpcError\", {\n message: Schema.String,\n code: Schema.optional(Schema.String),\n}) {}\n\n// ─── Terminal types ───────────────────────────────────────────────────────────\n\nexport const TerminalOutput = Schema.Struct({\n sessionName: Schema.String,\n data: Schema.String,\n})\nexport type TerminalOutput = typeof TerminalOutput.Type\n\nexport const AgentOutput = Schema.Struct({\n agentId: Schema.String,\n line: Schema.String,\n})\nexport type AgentOutput = typeof AgentOutput.Type\n\n// ─── Plan mode types ─────────────────────────────────────────────────────────\n\nexport const ProposedPlan = Schema.Struct({\n id: Schema.String,\n plan: Schema.String,\n planFilePath: Schema.optional(Schema.String),\n status: Schema.Literals(['pending', 'approved', 'rejected']),\n createdAt: Schema.String,\n resolvedAt: Schema.optional(Schema.String),\n})\nexport type ProposedPlan = typeof ProposedPlan.Type\n\n// ─── Compact boundary types ──────────────────────────────────────────────────\n\nexport const CompactBoundary = Schema.Struct({\n id: Schema.String,\n timestamp: Schema.String,\n trigger: Schema.optional(Schema.String),\n preTokens: Schema.optional(Schema.Number),\n model: Schema.optional(Schema.String),\n})\nexport type CompactBoundary = typeof CompactBoundary.Type\n\nexport const ContextUsage = Schema.Struct({\n activeBytes: Schema.Number,\n estimatedTokens: Schema.Number,\n contextWindow: Schema.Number,\n percentUsed: Schema.Number,\n /**\n * Optional breakdown of the last assistant turn — surfaced by the click\n * popover on the ContextWindowMeter so users can see WHY the meter says\n * what it does. Computed by `computeContextUsage()` from JSONL `usage`.\n */\n lastInputTokens: Schema.optional(Schema.Number),\n lastCacheReadTokens: Schema.optional(Schema.Number),\n lastCacheCreationTokens: Schema.optional(Schema.Number),\n /** Highest input_tokens ever observed in this window — triggers 1M detection. */\n maxObservedInputTokens: Schema.optional(Schema.Number),\n /** Model the most recent assistant turn ran under (from JSONL). */\n lastModel: Schema.optional(Schema.NullOr(Schema.String)),\n /** ISO timestamp of the most recent assistant turn. */\n lastTurnAt: Schema.optional(Schema.NullOr(Schema.String)),\n})\nexport type ContextUsage = typeof ContextUsage.Type\n\n// ─── Chat / conversation message types (PAN-451) ──────────────────────────────\n\nexport const ChatMessage = Schema.Struct({\n id: Schema.String,\n role: Schema.Literals(['user', 'assistant', 'system']),\n text: Schema.String,\n turnId: Schema.optional(Schema.String),\n createdAt: Schema.String,\n completedAt: Schema.optional(Schema.String),\n streaming: Schema.optional(Schema.Boolean),\n sequence: Schema.optional(Schema.Number),\n})\nexport type ChatMessage = typeof ChatMessage.Type\n\nexport const WorkLogEntry = Schema.Struct({\n id: Schema.String,\n createdAt: Schema.String,\n label: Schema.String,\n detail: Schema.optional(Schema.String),\n /** Tool result output (populated when tool_result is received). */\n result: Schema.optional(Schema.String),\n command: Schema.optional(Schema.String),\n changedFiles: Schema.optional(Schema.Array(Schema.String)),\n tone: Schema.Literals(['thinking', 'tool', 'info', 'error']),\n toolTitle: Schema.optional(Schema.String),\n /** Raw tool_use input dict — drives per-tool expanded rendering (PAN-1459). */\n toolInput: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n sequence: Schema.optional(Schema.Number),\n})\nexport type WorkLogEntry = typeof WorkLogEntry.Type\n\n/**\n * Response shape for GET /api/agents/:id/conversation.\n * Shared between the dashboard server route and the frontend TerminalPanel.\n */\nexport interface ConversationResponse {\n messages: ChatMessage[];\n workLog: WorkLogEntry[];\n streaming: boolean;\n totalCost: number;\n /** Total token throughput (input + output + cache read + cache write). */\n totalTokens?: number;\n byteOffset: number;\n proposedPlan?: ProposedPlan;\n compactBoundaries?: CompactBoundary[];\n contextUsage?: ContextUsage | null;\n}\n\nexport const ConversationEvent = Schema.Union([\n Schema.Struct({\n kind: Schema.Literal('messages'),\n messages: Schema.Array(ChatMessage),\n workLog: Schema.Array(WorkLogEntry),\n streaming: Schema.Boolean,\n snapshot: Schema.optional(Schema.Boolean),\n proposedPlan: Schema.optional(ProposedPlan),\n compactBoundaries: Schema.optional(Schema.Array(CompactBoundary)),\n contextUsage: Schema.optional(Schema.NullOr(ContextUsage)),\n }),\n Schema.Struct({\n kind: Schema.Literal('discovering'),\n }),\n])\nexport type ConversationEvent = typeof ConversationEvent.Type\n\n// ─── Session Tree Delta (PAN-821) ─────────────────────────────────────────────\n\nexport const SessionTreeDelta = Schema.Struct({\n kind: Schema.Literals(['session_added', 'session_removed', 'presence_changed', 'status_changed']),\n issueId: Schema.String,\n sessionId: Schema.String,\n presence: Schema.optional(SessionNodePresence),\n status: Schema.optional(AgentStatus),\n timestamp: Schema.String,\n})\nexport type SessionTreeDelta = typeof SessionTreeDelta.Type\n\n// ─── RPC definitions ──────────────────────────────────────────────────────────\n\n/** 1. Subscribe to the live domain event stream (stream) */\nexport const SubscribeDomainEventsRpc = Rpc.make(WS_METHODS.subscribeDomainEvents, {\n payload: Schema.Struct({}),\n success: DomainEvent,\n stream: true,\n})\n\n/** 1b. Subscribe to the live domain event stream for one issue (stream) */\nexport const SubscribeIssueEventsRpc = Rpc.make(WS_METHODS.subscribeIssueEvents, {\n payload: Schema.Struct({ issueId: IssueId }),\n success: DomainEvent,\n stream: true,\n})\n\n/** 2. Subscribe to raw terminal output for a tmux session (stream) */\nexport const SubscribeTerminalRpc = Rpc.make(WS_METHODS.subscribeTerminal, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n success: TerminalOutput,\n error: PanRpcError,\n stream: true,\n})\n\n/** 3. Subscribe to buffered agent stdout (stream) */\nexport const SubscribeAgentOutputRpc = Rpc.make(WS_METHODS.subscribeAgentOutput, {\n payload: Schema.Struct({ agentId: Schema.String }),\n success: AgentOutput,\n error: PanRpcError,\n stream: true,\n})\n\n/** 4. Get current dashboard snapshot (unary) */\nexport const GetSnapshotRpc = Rpc.make(WS_METHODS.getSnapshot, {\n payload: Schema.Struct({}),\n success: DashboardSnapshot,\n error: PanRpcError,\n})\n\n/** 5. Replay events since a given sequence number (unary) */\nexport const ReplayEventsRpc = Rpc.make(WS_METHODS.replayEvents, {\n payload: Schema.Struct({ fromSequence: SequenceNumber }),\n success: Schema.Array(DomainEvent),\n error: PanRpcError,\n})\n\n/** 6. Open a terminal session / attach PTY (unary) */\nexport const TerminalOpenRpc = Rpc.make(WS_METHODS.terminalOpen, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n success: Schema.Struct({ sessionName: Schema.String }),\n error: PanRpcError,\n})\n\n/** 7. Write data to a terminal session (unary) */\nexport const TerminalWriteRpc = Rpc.make(WS_METHODS.terminalWrite, {\n payload: Schema.Struct({ sessionName: Schema.String, data: Schema.String }),\n error: PanRpcError,\n})\n\n/** 8. Resize a terminal session (unary) */\nexport const TerminalResizeRpc = Rpc.make(WS_METHODS.terminalResize, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n error: PanRpcError,\n})\n\n/** 9. Close a terminal session (unary) */\nexport const TerminalCloseRpc = Rpc.make(WS_METHODS.terminalClose, {\n payload: Schema.Struct({ sessionName: Schema.String }),\n error: PanRpcError,\n})\n\n/** 10. Get batched workspace detail (unary) — replaces 5 separate HTTP calls */\nexport const GetWorkspaceDetailRpc = Rpc.make(WS_METHODS.getWorkspaceDetail, {\n payload: Schema.Struct({ issueId: IssueId }),\n success: WorkspaceDetail,\n error: PanRpcError,\n})\n\nexport const ReadWorkspaceFileInput = Schema.Struct({\n issueId: IssueId,\n relativePath: Schema.String,\n line: Schema.optional(Schema.Number),\n contextLines: Schema.optional(Schema.Number),\n})\nexport type ReadWorkspaceFileInput = typeof ReadWorkspaceFileInput.Type\n\nexport const ReadWorkspaceFileResult = Schema.Struct({\n text: Schema.String,\n lang: Schema.String,\n truncated: Schema.Boolean,\n totalLines: Schema.Number,\n})\nexport type ReadWorkspaceFileResult = typeof ReadWorkspaceFileResult.Type\n\n/** 10b. Read a workspace file for inline previews (unary) */\nexport const ReadWorkspaceFileRpc = Rpc.make(WS_METHODS.readWorkspaceFile, {\n payload: ReadWorkspaceFileInput,\n success: ReadWorkspaceFileResult,\n error: PanRpcError,\n})\n\n/**\n * 10c. Resolve whether a file path candidate exists on disk (PAN-1457).\n *\n * Used by MarkdownFileLink to decide whether a path-like token in chat\n * markdown should render as a clickable chip. Returns exists=false for\n * phantom paths (`conv/2209`, `users/foo`) and exists=true with kind for\n * real files and directories (including bare directory references like\n * `src/components/Foo` that the regex heuristic alone cannot validate).\n *\n * Security:\n * - Pure stat — never reads file contents, never enumerates directories.\n * - Relative paths resolve under cwd; absolute paths are statted directly.\n * - Caller is responsible for sending only paths surfaced from their own\n * conversation context; the resolver does not gate by issueId because\n * chat happens outside any single workspace.\n */\nexport const ResolveFilePathExistsInput = Schema.Struct({\n cwd: Schema.String,\n path: Schema.String,\n})\nexport type ResolveFilePathExistsInput = typeof ResolveFilePathExistsInput.Type\n\nexport const ResolveFilePathExistsResult = Schema.Struct({\n exists: Schema.Boolean,\n kind: Schema.NullOr(Schema.Literals(['file', 'dir'])),\n})\nexport type ResolveFilePathExistsResult = typeof ResolveFilePathExistsResult.Type\n\nexport const ResolveFilePathExistsRpc = Rpc.make(WS_METHODS.resolveFilePathExists, {\n payload: ResolveFilePathExistsInput,\n success: ResolveFilePathExistsResult,\n error: PanRpcError,\n})\n\n/** 11. Start planning for an issue (command) */\nexport const StartPlanningRpc = Rpc.make(WS_METHODS.startPlanning, {\n payload: Schema.Struct({ issueId: IssueId, options: Schema.optional(Schema.Unknown) }),\n success: Schema.Struct({ queued: Schema.Boolean }),\n error: PanRpcError,\n})\n\n/** 12. Start a work agent for an issue (command) */\nexport const StartAgentRpc = Rpc.make(WS_METHODS.startAgent, {\n payload: Schema.Struct({ issueId: IssueId, options: Schema.optional(Schema.Unknown) }),\n success: Schema.Struct({ agentId: Schema.String }),\n error: PanRpcError,\n})\n\n/** 13. Deep-wipe a workspace (destructive command — requires explicit confirmation) */\nexport const DeepWipeRpc = Rpc.make(WS_METHODS.deepWipe, {\n payload: Schema.Struct({ issueId: IssueId, deleteWorkspace: Schema.optional(Schema.Boolean) }),\n success: Schema.Struct({ wiped: Schema.Boolean }),\n error: PanRpcError,\n})\n\n/** 14. Send input to a terminal session (command) */\nexport const SendTerminalInputRpc = Rpc.make(WS_METHODS.sendTerminalInput, {\n payload: Schema.Struct({ sessionName: Schema.String, data: Schema.String }),\n error: PanRpcError,\n})\n\n/** 15. Resize a terminal session (command) */\nexport const ResizeTerminalRpc = Rpc.make(WS_METHODS.resizeTerminal, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n error: PanRpcError,\n})\n\n/** 16. Subscribe to structured conversation messages from a JSONL session file (stream, PAN-451) */\nexport const SubscribeConversationMessagesRpc = Rpc.make(WS_METHODS.subscribeConversationMessages, {\n payload: Schema.Struct({ conversationName: Schema.String }),\n success: ConversationEvent,\n error: PanRpcError,\n stream: true,\n})\n\n/** 17. Subscribe to live session tree deltas for a project (stream, PAN-821) */\nexport const SubscribeProjectSessionTreeRpc = Rpc.make(WS_METHODS.subscribeProjectSessionTree, {\n payload: Schema.Struct({ projectKey: Schema.String }),\n success: SessionTreeDelta,\n error: PanRpcError,\n stream: true,\n})\n\n/** 18. Subscribe to latest Flywheel status snapshots (stream) */\nexport const SubscribeFlywheelStatusRpc = Rpc.make(WS_METHODS.subscribeFlywheelStatus, {\n payload: Schema.Struct({}),\n success: Schema.NullOr(FlywheelStatus),\n error: PanRpcError,\n stream: true,\n})\n\n/** 19. Open a workspace in an editor (PAN-966) */\nexport const ShellOpenInEditorRpc = Rpc.make(WS_METHODS.shellOpenInEditor, {\n payload: OpenInEditorInput,\n error: PanRpcError,\n})\n\n/** 19. Get available (installed) editors (PAN-966) */\nexport const GetAvailableEditorsRpc = Rpc.make(WS_METHODS.getAvailableEditors, {\n success: Schema.Struct({\n editors: Schema.Array(EditorIdSchema),\n /**\n * Default cwd to open when no project/workspace is selected — the\n * \"devroot\" fallback. `~/Projects` if it exists, else `$HOME`.\n */\n defaultCwd: Schema.String,\n }),\n error: PanRpcError,\n})\n\n// ─── Conversation Discovery RPC procs (PAN-457) ───────────────────────────────\n\nconst DiscoveredSessionListResult = Schema.Struct({\n sessions: Schema.Array(DiscoveredSessionSnapshot),\n count: Schema.Number,\n total: Schema.Number,\n})\n\nconst SessionsFeedPayload = Schema.Struct({\n harness: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n managed: Schema.optional(Schema.Boolean),\n unmanaged: Schema.optional(Schema.Boolean),\n since: Schema.optional(Schema.String),\n before: Schema.optional(Schema.String),\n after: Schema.optional(Schema.String),\n minCost: Schema.optional(Schema.Number),\n maxCost: Schema.optional(Schema.Number),\n minMessages: Schema.optional(Schema.Number),\n tags: Schema.optional(Schema.Array(Schema.String)),\n tools: Schema.optional(Schema.Array(Schema.String)),\n files: Schema.optional(Schema.Array(Schema.String)),\n issueId: Schema.optional(Schema.String),\n enrichmentLevel: Schema.optional(Schema.Number),\n enriched: Schema.optional(Schema.Boolean),\n notEnriched: Schema.optional(Schema.Boolean),\n query: Schema.optional(Schema.String),\n semantic: Schema.optional(Schema.Boolean),\n similarTo: Schema.optional(Schema.Number),\n limit: Schema.optional(Schema.Number),\n offset: Schema.optional(Schema.Number),\n cursor: Schema.optional(Schema.String),\n source: Schema.optional(Schema.Literals(['discovered', 'managed-archived'])),\n})\n\nconst SessionsFeedListResult = Schema.Struct({\n rows: Schema.Array(SessionsFeedRowSnapshot),\n nextCursor: Schema.NullOr(Schema.String),\n})\n\nconst DiscoveredSessionSearchResult = Schema.Struct({\n sessions: Schema.Array(DiscoveredSessionSnapshot),\n total: Schema.Number,\n mode: Schema.String,\n durationMs: Schema.Number,\n error: Schema.optional(Schema.String),\n})\n\nconst DiscoveredSessionStatsResult = Schema.Struct({\n total: Schema.Number,\n enriched: Schema.Number,\n embedded: Schema.Number,\n managedCount: Schema.Number,\n embeddingModels: Schema.optional(Schema.Array(Schema.Struct({\n model: Schema.String,\n embedded: Schema.Number,\n }))),\n})\n\nconst ConversationCostTotals = Schema.Struct({\n sessionCount: Schema.Number,\n totalCost: Schema.Number,\n totalTokensIn: Schema.Number,\n totalTokensOut: Schema.Number,\n})\n\n/** Scan conversations (trigger discovery) */\nexport const ScanConversationsRpc = Rpc.make(WS_METHODS.scanConversations, {\n payload: Schema.Struct({\n mode: Schema.Literals(['targeted', 'watched', 'system']),\n dirs: Schema.optional(Schema.Array(Schema.String)),\n dryRun: Schema.optional(Schema.Boolean),\n }),\n success: ScanResult,\n error: PanRpcError,\n})\n\n/** Search discovered sessions with filters + optional FTS query */\nexport const SearchConversationsRpc = Rpc.make(WS_METHODS.searchConversations, {\n payload: ConversationFilter,\n success: DiscoveredSessionSearchResult,\n error: PanRpcError,\n})\n\n/** List discovered sessions (recent, with optional managed/unmanaged filter) */\nexport const ListDiscoveredSessionsRpc = Rpc.make(WS_METHODS.listDiscoveredSessions, {\n payload: ConversationFilter,\n success: DiscoveredSessionListResult,\n error: PanRpcError,\n})\n\n/** List the unified discovered + managed archived sessions feed */\nexport const ListSessionsFeedRpc = Rpc.make(WS_METHODS.listSessionsFeed, {\n payload: SessionsFeedPayload,\n success: SessionsFeedListResult,\n error: PanRpcError,\n})\n\n/** Get facet buckets for the unified sessions feed */\nexport const GetSessionsFeedFacetsRpc = Rpc.make(WS_METHODS.getSessionsFeedFacets, {\n payload: SessionsFeedPayload,\n success: SessionsFeedFacetsSnapshot,\n error: PanRpcError,\n})\n\n/** Get a single discovered session by ID */\nexport const GetDiscoveredSessionRpc = Rpc.make(WS_METHODS.getDiscoveredSession, {\n payload: Schema.Struct({ id: Schema.Number }),\n success: DiscoveredSessionSnapshot,\n error: PanRpcError,\n})\n\n/** Enrich sessions by ID or filter */\nexport const EnrichSessionsRpc = Rpc.make(WS_METHODS.enrichSessions, {\n payload: Schema.Struct({\n ids: Schema.optional(Schema.Array(Schema.Number)),\n filter: Schema.optional(ConversationFilter),\n level: Schema.Literals([1, 2, 3]),\n model: Schema.optional(Schema.String),\n fullTranscript: Schema.optional(Schema.Boolean),\n customPrompt: Schema.optional(Schema.String),\n upgrade: Schema.optional(Schema.Boolean),\n limit: Schema.optional(Schema.Number),\n confirmed: Schema.optional(Schema.Boolean),\n force: Schema.optional(Schema.Boolean),\n }),\n success: Schema.Struct({\n processed: Schema.Number,\n totalCost: Schema.Number,\n failures: Schema.Number,\n }),\n error: PanRpcError,\n})\n\n/** Generate or update embeddings for enriched sessions */\nexport const EmbedSessionsRpc = Rpc.make(WS_METHODS.embedSessions, {\n payload: Schema.Struct({\n ids: Schema.optional(Schema.Array(Schema.Number)),\n regenerate: Schema.optional(Schema.Boolean),\n }),\n success: Schema.Struct({\n total: Schema.Number,\n embedded: Schema.Number,\n model: Schema.String,\n }),\n error: PanRpcError,\n})\n\n/** Aggregate cost totals for discovered sessions */\nexport const GetConversationCostRpc = Rpc.make(WS_METHODS.getConversationCost, {\n payload: ConversationFilter,\n success: ConversationCostTotals,\n error: PanRpcError,\n})\n\n/** Aggregate workspace cost totals for the full filtered corpus */\nexport const GetConversationCostByWorkspaceRpc = Rpc.make(WS_METHODS.getConversationCostByWorkspace, {\n payload: ConversationFilter,\n success: ConversationCostSummary,\n error: PanRpcError,\n})\n\n/** Discovery index statistics */\nexport const GetConversationStatsRpc = Rpc.make(WS_METHODS.getConversationStats, {\n payload: Schema.Struct({}),\n success: DiscoveredSessionStatsResult,\n error: PanRpcError,\n})\n\n// ─── RPC Group ────────────────────────────────────────────────────────────────\n\n/** All Overdeck WebSocket RPC methods */\nexport const PanRpcGroup = RpcGroup.make(\n SubscribeDomainEventsRpc,\n SubscribeIssueEventsRpc,\n SubscribeTerminalRpc,\n SubscribeAgentOutputRpc,\n GetSnapshotRpc,\n ReplayEventsRpc,\n GetWorkspaceDetailRpc,\n ReadWorkspaceFileRpc,\n ResolveFilePathExistsRpc,\n TerminalOpenRpc,\n TerminalWriteRpc,\n TerminalResizeRpc,\n TerminalCloseRpc,\n StartPlanningRpc,\n StartAgentRpc,\n DeepWipeRpc,\n SendTerminalInputRpc,\n ResizeTerminalRpc,\n SubscribeConversationMessagesRpc,\n SubscribeProjectSessionTreeRpc,\n SubscribeFlywheelStatusRpc,\n ShellOpenInEditorRpc,\n GetAvailableEditorsRpc,\n ScanConversationsRpc,\n SearchConversationsRpc,\n ListDiscoveredSessionsRpc,\n ListSessionsFeedRpc,\n GetSessionsFeedFacetsRpc,\n GetDiscoveredSessionRpc,\n EnrichSessionsRpc,\n EmbedSessionsRpc,\n GetConversationCostRpc,\n GetConversationCostByWorkspaceRpc,\n GetConversationStatsRpc,\n)\nexport type PanRpcGroup = typeof PanRpcGroup\n","/**\n * Shared event reducers — pure functions for applying domain events to state (PAN-433)\n *\n * Used by:\n * - Server read model (src/dashboard/server/read-model.ts)\n * - Frontend Zustand store (src/dashboard/frontend/src/lib/store.ts)\n *\n * Both produce identical results for the same event, keeping server and client\n * eventually consistent (the T3Code pattern).\n */\n\nimport type {\n AgentRuntimeSnapshot,\n AgentSnapshot,\n ChannelPermissionRequestSnapshot,\n DashboardSnapshot,\n EmbedProgressSnapshot,\n EnrichProgressSnapshot,\n EnrichStatsSnapshot,\n ResourceStats,\n ReviewStatusSnapshot,\n ScanProgressSnapshot,\n TurnDiffSummary,\n} from './types'\nimport type {\n MemoryObservation,\n MemoryStatus,\n PendingTurn,\n RagDecision,\n ResetMarker,\n} from './memory'\nimport type { DomainEvent } from './events'\n\n// ─── Read model state shape ──────────────────────────────────────────────────\n\nexport interface ResolvedChannelPermissionDecision {\n requestId: string\n agentId: string\n issueId?: string\n behavior: 'allow' | 'deny'\n}\n\nexport interface MemoryHealthSnapshot {\n projectId: string\n issueId: string\n status: 'healthy' | 'degraded' | 'failing'\n reason: string | null\n /** Human-readable cause of the most recent failure (provider error text). */\n detail?: string\n ragDecision?: RagDecision\n updatedAt: string\n}\n\nexport interface MemoryRollupTriggerSnapshot {\n projectId: string\n workspaceId: string\n issueId: string\n pendingTurns: PendingTurn[]\n pendingCount: number\n threshold: number\n triggeredAt: string\n}\n\nexport interface MemoryReadModelState {\n observationsByIssueId: Record<string, MemoryObservation[]>\n statusByIssueId: Record<string, MemoryStatus>\n rollupsByIssueId: Record<string, MemoryRollupTriggerSnapshot[]>\n resetMarkersByScopeId: Record<string, ResetMarker[]>\n healthByIssueId: Record<string, MemoryHealthSnapshot>\n}\n\nexport interface ReadModelState {\n sequence: number\n agentsById: Record<string, AgentSnapshot>\n /**\n * PAN-800 — per-agent runtime state derived from agent.* runtime events.\n * Kept separate from agentsById because it updates on every tool call; merging\n * would cause the whole AgentSnapshot to re-diff on the frontend.\n */\n agentRuntimeById: Record<string, AgentRuntimeSnapshot>\n reviewStatusByIssueId: Record<string, ReviewStatusSnapshot>\n resources: ResourceStats | null\n agentOutputById: Record<string, string[]>\n issuesRaw: unknown[]\n recentActivity: unknown[]\n detailedActivity: unknown[]\n ttsActivity: unknown[]\n shadowInferenceByIssueId: Record<string, string>\n turnDiffSummariesByAgentId: Record<string, TurnDiffSummary[]>\n channelPermissionRequestsById: Record<string, ChannelPermissionRequestSnapshot>\n channelPermissionRequestIdsByAgentId: Record<string, string[]>\n resolvedChannelPermissionDecisionsById: Record<string, ResolvedChannelPermissionDecision>\n resolvedChannelPermissionDecisionIdsByAgentId: Record<string, string[]>\n dashboardLifecycle: DashboardLifecycleState\n /** Conversation names currently undergoing Overdeck-native compaction. */\n conversationsCompactingByName: Record<string, boolean>\n /** Conversation names currently waiting for user permission (PermissionRequest hook). */\n conversationsAwaitingPermissionByName: Record<string, boolean>\n /** Bumped whenever a conversation is created, so the sidebar list can refresh\n * immediately instead of waiting for its poll tick. */\n conversationsListRevision: number\n observationsByIssueId: Record<string, MemoryObservation[]>\n statusByIssueId: Record<string, MemoryStatus>\n rollupsByIssueId: Record<string, MemoryRollupTriggerSnapshot[]>\n resetMarkersByScopeId: Record<string, ResetMarker[]>\n healthByIssueId: Record<string, MemoryHealthSnapshot>\n /** PAN-457 — active scan progress snapshot */\n scanProgress: ScanProgressSnapshot | null\n /** PAN-457 — latest enrichment stats */\n enrichStats: EnrichStatsSnapshot | null\n /** PAN-457 — latest per-session enrichment progress */\n enrichProgressBySessionId: Record<number, EnrichProgressSnapshot>\n /** PAN-457 — latest per-session embedding progress */\n embedProgressBySessionId: Record<number, EmbedProgressSnapshot>\n /** sessionId (from agent snapshot or runtime claudeSessionId) → agentId index */\n agentIdBySessionId: Record<string, string>\n}\n\nexport interface DashboardLifecycleState {\n active: boolean\n reason: string | null\n issueId: string | null\n trigger: string | null\n startedAt: string | null\n completedAt: string | null\n failedAt: string | null\n error: string | null\n}\n\nexport const INITIAL_READ_MODEL_STATE: ReadModelState = {\n sequence: 0,\n agentsById: {},\n agentRuntimeById: {},\n reviewStatusByIssueId: {},\n resources: null,\n agentOutputById: {},\n issuesRaw: [],\n recentActivity: [],\n detailedActivity: [],\n ttsActivity: [],\n shadowInferenceByIssueId: {},\n turnDiffSummariesByAgentId: {},\n channelPermissionRequestsById: {},\n channelPermissionRequestIdsByAgentId: {},\n resolvedChannelPermissionDecisionsById: {},\n resolvedChannelPermissionDecisionIdsByAgentId: {},\n conversationsCompactingByName: {},\n conversationsAwaitingPermissionByName: {},\n conversationsListRevision: 0,\n observationsByIssueId: {},\n statusByIssueId: {},\n rollupsByIssueId: {},\n resetMarkersByScopeId: {},\n healthByIssueId: {},\n scanProgress: null,\n enrichStats: null,\n enrichProgressBySessionId: {},\n embedProgressBySessionId: {},\n agentIdBySessionId: {},\n dashboardLifecycle: {\n active: false,\n reason: null,\n issueId: null,\n trigger: null,\n startedAt: null,\n completedAt: null,\n failedAt: null,\n error: null,\n },\n}\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst MAX_AGENT_OUTPUT_LINES = 200\nconst MAX_ACTIVITY_ENTRIES = 50\nconst MAX_DETAILED_ENTRIES = 200\nconst MAX_TTS_ENTRIES = 50\nconst MAX_SESSION_PROGRESS_ENTRIES = 100\nexport const DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT = 200\nexport const DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE = 50\n\nexport function getMaxMemoryObservationsPerIssue(): number {\n const raw = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env?.OVERDECK_MEMORY_OBSERVATION_LIMIT\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN\n return Number.isInteger(parsed) && parsed > 0 ? parsed : DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE\n}\n\nexport function trimMemoryObservations(observations: MemoryObservation[]): MemoryObservation[] {\n const max = getMaxMemoryObservationsPerIssue()\n return observations.length > max ? observations.slice(-max) : observations\n}\n\nexport function getMaxTurnDiffSummariesPerAgent(): number {\n const raw = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env?.OVERDECK_TURN_DIFF_SUMMARY_LIMIT\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN\n return Number.isInteger(parsed) && parsed > 0 ? parsed : DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT\n}\n\nexport function isTerminalTurnDiffSummaryStatus(status: unknown): boolean {\n return status === 'stopped' || status === 'done' || status === 'archived' || status === 'closed'\n}\n\nexport function trimTurnDiffSummaries(summaries: TurnDiffSummary[]): TurnDiffSummary[] {\n const max = getMaxTurnDiffSummariesPerAgent()\n return summaries.length > max ? summaries.slice(-max) : summaries\n}\n\nfunction upsertBoundedSessionProgress<T extends { sessionId: number; timestamp: string }>(\n bySessionId: Record<number, T>,\n progress: T,\n): Record<number, T> {\n const existing = bySessionId[progress.sessionId]\n const entries = Object.values(bySessionId)\n if (existing || entries.length < MAX_SESSION_PROGRESS_ENTRIES) {\n return { ...bySessionId, [progress.sessionId]: progress }\n }\n const keep = entries\n .sort((a, b) => a.timestamp.localeCompare(b.timestamp))\n .slice(-(MAX_SESSION_PROGRESS_ENTRIES - 1))\n const next: Record<number, T> = {}\n for (const entry of [...keep, progress]) next[entry.sessionId] = entry\n return next\n}\n\nexport function omitTurnDiffSummariesForAgent(\n turnDiffSummariesByAgentId: ReadModelState['turnDiffSummariesByAgentId'] | undefined,\n agentId: string,\n): ReadModelState['turnDiffSummariesByAgentId'] {\n const { [agentId]: _removed, ...rest } = turnDiffSummariesByAgentId ?? {}\n return rest\n}\n\n/** Remove all entries in agentIdBySessionId that point to the given agentId. */\nfunction removeAgentFromSessionIndex(\n agentIdBySessionId: ReadModelState['agentIdBySessionId'] | undefined,\n agentId: string,\n): ReadModelState['agentIdBySessionId'] {\n const next: Record<string, string> = {}\n for (const [sessionId, id] of Object.entries(agentIdBySessionId ?? {})) {\n if (id !== agentId) next[sessionId] = id\n }\n return next\n}\n\n// ─── PAN-800 runtime helpers ─────────────────────────────────────────────────\n\nfunction defaultRuntimeSnapshot(agentId: string, timestamp: string, sequence: number): AgentRuntimeSnapshot {\n return {\n id: agentId,\n activity: 'idle',\n lastActivity: timestamp,\n updatedAtSequence: sequence,\n }\n}\n\n/**\n * Bump runtimeSnapshotSequence on the corresponding AgentSnapshot (if present)\n * so low-frequency subscribers can cheaply detect a runtime change. No-op if\n * the agent has no lifecycle snapshot yet (a runtime event arrived before\n * agent.created — unusual but defensive).\n */\nfunction bumpRuntimeSnapshotSequence(\n agentsById: Record<string, AgentSnapshot>,\n agentId: string,\n sequence: number,\n): Record<string, AgentSnapshot> {\n const agent = agentsById[agentId]\n if (!agent) return agentsById\n return { ...agentsById, [agentId]: { ...agent, runtimeSnapshotSequence: sequence } }\n}\n\n// ─── syncSnapshot — bootstrap from a full DashboardSnapshot ──────────────────\n\nexport function syncSnapshot(state: ReadModelState, snapshot: DashboardSnapshot): ReadModelState {\n const agentsById: Record<string, AgentSnapshot> = {}\n for (const agent of snapshot.agents) {\n agentsById[agent.id] = agent\n }\n\n const reviewStatusByIssueId: Record<string, ReviewStatusSnapshot> = {}\n for (const rs of snapshot.reviewStatuses) {\n reviewStatusByIssueId[rs.issueId] = rs\n }\n\n const channelPermissionRequestsById: Record<string, ChannelPermissionRequestSnapshot> = {}\n const channelPermissionRequestIdsByAgentId: Record<string, string[]> = {}\n for (const request of snapshot.channelPermissionRequests ?? []) {\n channelPermissionRequestsById[request.requestId] = request\n const existing = channelPermissionRequestIdsByAgentId[request.agentId] ?? []\n channelPermissionRequestIdsByAgentId[request.agentId] = [...existing, request.requestId]\n }\n\n const memory = snapshot.memory as Partial<MemoryReadModelState> | undefined\n\n // Rebuild sessionId → agentId index from snapshot\n const agentIdBySessionId: Record<string, string> = {}\n for (const agent of snapshot.agents) {\n if (agent.sessionId) agentIdBySessionId[agent.sessionId] = agent.id\n }\n for (const [agentId, runtime] of Object.entries(snapshot.agentRuntimeById ?? {})) {\n if (runtime.claudeSessionId) agentIdBySessionId[runtime.claudeSessionId] = agentId\n }\n\n return {\n ...state,\n sequence: snapshot.sequence,\n agentsById,\n reviewStatusByIssueId,\n agentRuntimeById: snapshot.agentRuntimeById ?? state.agentRuntimeById,\n channelPermissionRequestsById,\n channelPermissionRequestIdsByAgentId,\n resolvedChannelPermissionDecisionsById: {},\n resolvedChannelPermissionDecisionIdsByAgentId: {},\n resources: (snapshot.resources as ResourceStats | undefined) ?? null,\n issuesRaw: (snapshot as any).issues ?? state.issuesRaw,\n recentActivity: snapshot.recentActivity ? [...snapshot.recentActivity] : state.recentActivity,\n observationsByIssueId: memory?.observationsByIssueId ?? state.observationsByIssueId,\n statusByIssueId: memory?.statusByIssueId ?? state.statusByIssueId,\n rollupsByIssueId: memory?.rollupsByIssueId ?? state.rollupsByIssueId,\n resetMarkersByScopeId: memory?.resetMarkersByScopeId ?? state.resetMarkersByScopeId,\n healthByIssueId: memory?.healthByIssueId ?? state.healthByIssueId,\n scanProgress: snapshot.scanProgress ?? null,\n enrichStats: snapshot.enrichStats ?? null,\n enrichProgressBySessionId: snapshot.enrichProgressBySessionId ?? {},\n embedProgressBySessionId: snapshot.embedProgressBySessionId ?? {},\n agentIdBySessionId,\n }\n}\n\n// ─── applyEvent — apply a single domain event ───────────────────────────────\n\nexport function applyEvent(state: ReadModelState, event: DomainEvent): ReadModelState {\n switch (event.type) {\n case 'agent.created': {\n const existing = state.agentsById[event.payload.agentId]\n const agent = event.payload.agent\n const nextAgentIdBySessionId = agent.sessionId\n ? { ...state.agentIdBySessionId, [agent.sessionId]: agent.id }\n : state.agentIdBySessionId\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: existing\n ? { ...existing, ...agent }\n : agent,\n },\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'agent.started': {\n const agent = event.payload.agent\n const nextAgentIdBySessionId = agent.sessionId\n ? { ...state.agentIdBySessionId, [agent.sessionId]: agent.id }\n : state.agentIdBySessionId\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: agent,\n },\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'agent.enrichment_changed': {\n const agent = state.agentsById[event.payload.agentId]\n if (!agent) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: {\n ...agent,\n role: event.payload.role ?? agent.role,\n hasPendingQuestion: event.payload.hasPendingQuestion ?? false,\n pendingQuestionCount: event.payload.pendingQuestionCount ?? 0,\n pendingQuestionPrompt: event.payload.pendingQuestionPrompt,\n pendingQuestionReason: event.payload.pendingQuestionReason,\n pendingInputCount: event.payload.pendingInputCount,\n pendingInputKinds: event.payload.pendingInputKinds,\n pendingAskUserQuestion: event.payload.pendingAskUserQuestion,\n pendingProposedPlan: event.payload.pendingProposedPlan,\n resolution: event.payload.resolution,\n resolutionCount: event.payload.resolutionCount,\n },\n },\n }\n }\n\n case 'agent.stopped': {\n const { [event.payload.agentId]: _removed, ...rest } = state.agentsById\n // PAN-800 — mark the runtime snapshot stopped too. pan kill bypasses the\n // Stop hook, so without this fold a killed agent shows activity: \"idle\"\n // forever. Retain the row (don't delete) so the projection cache has the\n // last-known snapshot for forensics.\n const runtimeById = state.agentRuntimeById ?? {}\n const prevRuntime = runtimeById[event.payload.agentId]\n const nextRuntimeById = prevRuntime\n ? {\n ...runtimeById,\n [event.payload.agentId]: {\n ...prevRuntime,\n activity: 'stopped' as const,\n currentTool: undefined,\n thinking: undefined,\n waiting: undefined,\n channelReply: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n },\n }\n : runtimeById\n const permissionRequestIdsByAgentId = state.channelPermissionRequestIdsByAgentId ?? {}\n const pendingIds = permissionRequestIdsByAgentId[event.payload.agentId] ?? []\n const nextPermissionRequestsById = { ...state.channelPermissionRequestsById }\n for (const requestId of pendingIds) {\n delete nextPermissionRequestsById[requestId]\n }\n const { [event.payload.agentId]: _removedPendingIds, ...restPendingIds } =\n permissionRequestIdsByAgentId\n\n const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {}\n const resolvedIds = resolvedDecisionIdsByAgentId[event.payload.agentId] ?? []\n const nextResolvedDecisionsById = { ...(state.resolvedChannelPermissionDecisionsById ?? {}) }\n for (const requestId of resolvedIds) {\n delete nextResolvedDecisionsById[requestId]\n }\n const { [event.payload.agentId]: _removedResolvedIds, ...restResolvedIds } =\n resolvedDecisionIdsByAgentId\n\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: rest,\n agentRuntimeById: nextRuntimeById,\n channelPermissionRequestsById: nextPermissionRequestsById,\n channelPermissionRequestIdsByAgentId: restPendingIds,\n resolvedChannelPermissionDecisionsById: nextResolvedDecisionsById,\n resolvedChannelPermissionDecisionIdsByAgentId: restResolvedIds,\n turnDiffSummariesByAgentId: omitTurnDiffSummariesForAgent(state.turnDiffSummariesByAgentId, event.payload.agentId),\n agentIdBySessionId: removeAgentFromSessionIndex(state.agentIdBySessionId, event.payload.agentId),\n }\n }\n\n case 'agent.status_changed': {\n const agent = state.agentsById[event.payload.agentId] ?? (\n event.payload.role === 'strike' && event.payload.issueId\n ? {\n id: event.payload.agentId,\n issueId: event.payload.issueId,\n status: event.payload.status,\n role: 'strike' as const,\n startedAt: event.timestamp,\n }\n : undefined\n )\n if (!agent) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const nextTurnDiffSummariesByAgentId = isTerminalTurnDiffSummaryStatus(event.payload.status)\n ? omitTurnDiffSummariesForAgent(state.turnDiffSummariesByAgentId, event.payload.agentId)\n : state.turnDiffSummariesByAgentId\n const nextAgent: AgentSnapshot = (() => {\n const base: Record<string, unknown> = { ...agent, status: event.payload.status }\n const optionalFields = [\n 'hasLiveTmuxSession', 'stoppedByUser', 'stoppedByPause', 'paused', 'pausedReason', 'pausedAt',\n 'troubled', 'troubledAt', 'consecutiveFailures',\n 'firstFailureInRunAt', 'lastFailureAt', 'lastFailureReason', 'lastFailureNextRetryAt',\n 'kickoffDelivered', 'hostOverride', 'role', 'model', 'workspace', 'sessionId',\n 'lastActivity', 'lastResumeAt', 'stoppedAt', 'branch', 'costSoFar',\n 'phase', 'workType', 'roleRunHead',\n 'flywheelRunId', 'reviewSubRole', 'reviewRunId', 'reviewOutputPath',\n 'reviewSynthesisAgentId', 'reviewDeadlineAt', 'reviewMonitorSignaled', 'reviewRetryAttempt',\n 'inspectSubRole', 'deliveryMethod', 'supervisorEnabled', 'channelsEnabled',\n ] as const\n for (const field of optionalFields) {\n if (field in event.payload) {\n const value = (event.payload as Record<string, unknown>)[field]\n if (value === null || value === undefined) {\n delete base[field]\n } else {\n base[field] = value\n }\n }\n }\n // PAN-1520 (fixes #339) — clear stale pending-input fields whenever the\n // agent transitions out of an actively-running state. The enrichment\n // poller stops emitting events for non-running agents, so without this\n // a paused or stopped agent would keep showing INPUT/AskUserQuestion\n // forever from the operator's perspective.\n if (event.payload.status !== 'running' && event.payload.status !== 'starting') {\n delete base['hasPendingQuestion']\n delete base['pendingQuestionCount']\n delete base['pendingQuestionPrompt']\n delete base['pendingQuestionReason']\n delete base['pendingInputCount']\n delete base['pendingInputKinds']\n delete base['pendingAskUserQuestion']\n delete base['pendingProposedPlan']\n }\n return base as AgentSnapshot\n })()\n\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: nextAgent,\n },\n turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,\n agentIdBySessionId: event.payload.sessionId\n ? { ...state.agentIdBySessionId, [event.payload.sessionId]: event.payload.agentId }\n : state.agentIdBySessionId,\n }\n }\n\n case 'agent.heartbeat_dead': {\n const agent = state.agentsById[event.payload.agentId]\n if (!agent) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const runtimeById = state.agentRuntimeById ?? {}\n const prevRuntime = runtimeById[event.payload.agentId]\n const nextRuntimeById = prevRuntime\n ? {\n ...runtimeById,\n [event.payload.agentId]: {\n ...prevRuntime,\n activity: 'stopped' as const,\n currentTool: undefined,\n thinking: undefined,\n waiting: undefined,\n channelReply: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n },\n }\n : runtimeById\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: { ...agent, status: 'error' as const },\n },\n agentRuntimeById: nextRuntimeById,\n }\n }\n\n case 'agent.output_received': {\n const existing = state.agentOutputById[event.payload.agentId] ?? []\n const updated = [...existing, ...event.payload.lines].slice(-MAX_AGENT_OUTPUT_LINES)\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentOutputById: {\n ...state.agentOutputById,\n [event.payload.agentId]: updated,\n },\n }\n }\n\n case 'pipeline.status_changed':\n case 'review.status_changed':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: {\n ...state.reviewStatusByIssueId,\n [event.payload.issueId]: event.payload.status,\n },\n }\n\n // PAN-915 — event-driven reviewer sub-status. Avoids tmux polling in\n // enrichReviewStatusFromSessions for the common case (reviewer dispatched).\n case 'review.reviewer_started': {\n const { issueId, role, sessionName } = event.payload\n const existing = state.reviewStatusByIssueId[issueId]\n const prevSubs = existing?.reviewSubStatuses ?? {}\n const prevNames = existing?.reviewSessionNames ?? []\n const nextNames = prevNames.includes(sessionName) ? prevNames : [...prevNames, sessionName]\n const nextStatus: ReviewStatusSnapshot = {\n ...(existing ?? { issueId }),\n reviewSubStatuses: { ...prevSubs, [role]: 'running' },\n reviewSessionNames: nextNames,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: { ...state.reviewStatusByIssueId, [issueId]: nextStatus },\n }\n }\n\n case 'review.reviewer_completed': {\n const { issueId, role } = event.payload\n const existing = state.reviewStatusByIssueId[issueId]\n if (!existing) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const prevSubs = existing.reviewSubStatuses ?? {}\n const nextStatus: ReviewStatusSnapshot = {\n ...existing,\n reviewSubStatuses: { ...prevSubs, [role]: 'done' },\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: { ...state.reviewStatusByIssueId, [issueId]: nextStatus },\n }\n }\n\n case 'review.specialist.timed_out':\n // Telemetry-only event. Sequence update lets clients observe the event\n // stream without mutating the durable review-status snapshot.\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'review.coordinator_started': {\n const { issueId, sessionName } = event.payload\n const existing = state.reviewStatusByIssueId[issueId]\n const nextStatus: ReviewStatusSnapshot = {\n ...(existing ?? { issueId }),\n reviewCoordinatorSessionName: sessionName,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: { ...state.reviewStatusByIssueId, [issueId]: nextStatus },\n }\n }\n\n case 'review.coordinator.died':\n // Telemetry-only. The durable review-status row is updated by recovery\n // checks; keep clients in sequence so event stream subscribers can alert.\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'pipeline.review-started':\n case 'pipeline.review-completed':\n case 'pipeline.test-started':\n case 'pipeline.test-completed':\n // Handled by review.status_changed; sequence-only update keeps clients in lockstep.\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'merge.ready':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n // PAN-1048 — specialist.* events still flow but no longer feed a separate\n // projection. The same lifecycle is now visible via agent.started /\n // agent.stopped + role-filtered agentsById. Sequence-only update keeps\n // clients in lockstep.\n case 'specialist.started':\n case 'specialist.completed':\n case 'specialist.failed':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'resources.updated':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n resources: event.payload.resources,\n }\n\n case 'issues.snapshot':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n issuesRaw: event.payload.issues as unknown[],\n }\n\n case 'issues.updated':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'issue.statusChanged': {\n const { issueId, status, canonicalStatus, labels } = event.payload\n const updatedIssues = (state.issuesRaw as Array<Record<string, unknown>>).map(issue => {\n if (issue['identifier'] === issueId || issue['id'] === issueId) {\n const patch: Record<string, unknown> = { ...issue, status, canonicalStatus, state: canonicalStatus }\n if (labels) patch.labels = labels\n return patch\n }\n return issue\n })\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n issuesRaw: updatedIssues,\n }\n }\n\n case 'activity.updated':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n recentActivity: (event.payload.events as unknown[]).slice(0, MAX_ACTIVITY_ENTRIES),\n }\n\n case 'shadow.inference_update':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n shadowInferenceByIssueId: {\n ...state.shadowInferenceByIssueId,\n [event.payload.issueId]: event.payload.content,\n },\n }\n\n case 'planning.started': {\n const sessionName = event.payload.sessionName as string\n const issueId = event.payload.issueId as string\n if (sessionName) {\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [sessionName]: {\n ...state.agentsById[sessionName],\n id: sessionName,\n issueId,\n status: 'running',\n startedAt: event.timestamp,\n runtime: (event.payload.harness as 'claude-code' | 'pi' | 'codex') ?? 'claude-code',\n role: 'plan' as const,\n },\n },\n }\n }\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n }\n case 'workspace.created':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'workspace.wipe_started': {\n const { issueId } = event.payload\n const updatedIssues = (state.issuesRaw as Array<Record<string, unknown>>).map(issue => {\n if (issue['identifier'] === issueId || issue['id'] === issueId) {\n return { ...issue, canonicalStatus: 'wiping', state: 'wiping' }\n }\n return issue\n })\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n issuesRaw: updatedIssues,\n }\n }\n\n case 'workspace.destroyed':\n case 'workspace.deleted': {\n const { issueId } = event.payload\n const removedAgentIds = Object.entries(state.agentsById)\n .filter(([, agent]) => agent.issueId === issueId)\n .map(([agentId]) => agentId)\n const updatedAgents = Object.fromEntries(\n Object.entries(state.agentsById).filter(([, agent]) => agent.issueId !== issueId)\n )\n let nextTurnDiffSummariesByAgentId = state.turnDiffSummariesByAgentId\n let nextAgentIdBySessionId = state.agentIdBySessionId\n for (const agentId of removedAgentIds) {\n nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, agentId)\n nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, agentId)\n }\n const updatedIssues = (state.issuesRaw as Array<Record<string, unknown>>).map(issue => {\n if (issue['identifier'] === issueId || issue['id'] === issueId) {\n return { ...issue, status: 'Todo', canonicalStatus: 'todo', state: 'todo' }\n }\n return issue\n })\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: updatedAgents,\n turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,\n agentIdBySessionId: nextAgentIdBySessionId,\n issuesRaw: updatedIssues,\n }\n }\n\n case 'workspace.aborted': {\n const { issueId, sessionName } = event.payload\n let updatedAgents: typeof state.agentsById\n let nextTurnDiffSummariesByAgentId = state.turnDiffSummariesByAgentId\n let nextAgentIdBySessionId = state.agentIdBySessionId\n if (sessionName) {\n const { [sessionName]: _removed, ...rest } = state.agentsById\n updatedAgents = rest\n nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, sessionName)\n nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, sessionName)\n } else {\n const removedAgentIds = Object.entries(state.agentsById)\n .filter(([, agent]) => agent.issueId === issueId)\n .map(([agentId]) => agentId)\n updatedAgents = Object.fromEntries(\n Object.entries(state.agentsById).filter(([, agent]) => agent.issueId !== issueId)\n )\n for (const agentId of removedAgentIds) {\n nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, agentId)\n nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, agentId)\n }\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: updatedAgents,\n turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'planning.failed':\n case 'planning.sync':\n case 'plan.item_status_changed':\n case 'plan.subitem_status_changed':\n case 'plan.items_unblocked':\n case 'operator.intervention':\n case 'substrate.bug_filed':\n case 'cost.event_recorded':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'memory.observation_created': {\n const observation = event.payload.observation\n const existing = state.observationsByIssueId[observation.issueId] ?? []\n const index = existing.findIndex(entry => entry.id === observation.id)\n const updated = trimMemoryObservations(index === -1\n ? [...existing, observation]\n : existing.map((entry, entryIndex) => entryIndex === index ? observation : entry))\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n observationsByIssueId: {\n ...state.observationsByIssueId,\n [observation.issueId]: updated,\n },\n }\n }\n\n case 'memory.status_updated': {\n const { identity, status } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n statusByIssueId: {\n ...state.statusByIssueId,\n [identity.issueId]: status,\n },\n }\n }\n\n case 'memory.rollup_triggered': {\n const trigger: MemoryRollupTriggerSnapshot = {\n projectId: event.payload.projectId,\n workspaceId: event.payload.workspaceId,\n issueId: event.payload.issueId,\n pendingTurns: [],\n pendingCount: event.payload.pendingCount,\n threshold: event.payload.threshold,\n triggeredAt: event.timestamp,\n }\n const existing = state.rollupsByIssueId[event.payload.issueId] ?? []\n const updated = [...existing, trigger].slice(-10)\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n rollupsByIssueId: {\n ...state.rollupsByIssueId,\n [event.payload.issueId]: updated,\n },\n }\n }\n\n case 'memory.reset_marker_created': {\n const { marker } = event.payload\n const key = `${marker.scope}:${marker.scopeId}`\n const existing = state.resetMarkersByScopeId[key] ?? []\n const index = existing.findIndex(entry => entry.id === marker.id)\n const updated = index === -1\n ? [...existing, marker]\n : existing.map((entry, entryIndex) => entryIndex === index ? marker : entry)\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n resetMarkersByScopeId: {\n ...state.resetMarkersByScopeId,\n [key]: updated,\n },\n }\n }\n\n case 'memory.health_changed': {\n const health: MemoryHealthSnapshot = {\n projectId: event.payload.projectId,\n issueId: event.payload.issueId,\n status: event.payload.status,\n reason: event.payload.reason,\n // Omit absent optionals entirely — an explicit `key: undefined` is not a\n // valid JSON value and makes the whole DashboardSnapshot fail the\n // Schema.Json codec used for the `memory` field, breaking the RPC bootstrap.\n ...(event.payload.detail !== undefined ? { detail: event.payload.detail } : {}),\n ...(event.payload.ragDecision !== undefined ? { ragDecision: event.payload.ragDecision } : {}),\n updatedAt: event.timestamp,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n healthByIssueId: {\n ...state.healthByIssueId,\n [event.payload.issueId]: health,\n },\n }\n }\n\n // ─── PAN-800 Agent Runtime Events ──────────────────────────────────────\n case 'agent.activity_changed': {\n const { agentId, activity, currentTool } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n activity,\n currentTool: activity === 'working' ? currentTool : undefined,\n // Clear thinking/waiting on transitions away from those activities.\n thinking: activity === 'thinking' ? prev.thinking : undefined,\n waiting: activity === 'waiting' ? prev.waiting : undefined,\n channelReply: activity === 'working' ? undefined : prev.channelReply,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.thinking_started': {\n const { agentId, lastToolAt } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n activity: 'thinking',\n currentTool: undefined,\n thinking: { since: event.timestamp, lastToolAt },\n waiting: undefined,\n channelReply: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.thinking_stopped': {\n const { agentId } = event.payload\n const prev = state.agentRuntimeById[agentId]\n if (!prev) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n // Clear the thinking state but leave activity for the follow-up event\n // (agent.activity_changed / waiting_started / stopped) to set.\n const next: AgentRuntimeSnapshot = {\n ...prev,\n thinking: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.waiting_started': {\n const { agentId, reason, message } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n activity: 'waiting',\n currentTool: undefined,\n thinking: undefined,\n waiting: {\n reason,\n startedAt: event.timestamp,\n message,\n },\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.waiting_cleared': {\n const { agentId } = event.payload\n const prev = state.agentRuntimeById[agentId]\n if (!prev) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const next: AgentRuntimeSnapshot = {\n ...prev,\n waiting: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.permission_requested': {\n const request = event.payload\n const permissionRequestIdsByAgentId = state.channelPermissionRequestIdsByAgentId ?? {}\n const resolvedDecisionsById = state.resolvedChannelPermissionDecisionsById ?? {}\n const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {}\n const nextPendingIds = permissionRequestIdsByAgentId[request.agentId] ?? []\n const resolvedDecision = resolvedDecisionsById[request.requestId]\n const nextResolvedDecisionsById = { ...resolvedDecisionsById }\n const nextResolvedIdsByAgentId = { ...resolvedDecisionIdsByAgentId }\n if (resolvedDecision) {\n delete nextResolvedDecisionsById[request.requestId]\n const prevResolvedIds = nextResolvedIdsByAgentId[resolvedDecision.agentId] ?? []\n const filteredResolvedIds = prevResolvedIds.filter((id) => id !== request.requestId)\n if (filteredResolvedIds.length > 0) {\n nextResolvedIdsByAgentId[resolvedDecision.agentId] = filteredResolvedIds\n } else {\n delete nextResolvedIdsByAgentId[resolvedDecision.agentId]\n }\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n channelPermissionRequestsById: {\n ...state.channelPermissionRequestsById,\n [request.requestId]: request,\n },\n channelPermissionRequestIdsByAgentId: {\n ...permissionRequestIdsByAgentId,\n [request.agentId]: nextPendingIds.includes(request.requestId)\n ? nextPendingIds\n : [...nextPendingIds, request.requestId],\n },\n resolvedChannelPermissionDecisionsById: nextResolvedDecisionsById,\n resolvedChannelPermissionDecisionIdsByAgentId: nextResolvedIdsByAgentId,\n }\n }\n\n case 'agent.permission_resolved': {\n const { [event.payload.requestId]: _removed, ...rest } = state.channelPermissionRequestsById\n const nextPendingIdsByAgentId = { ...(state.channelPermissionRequestIdsByAgentId ?? {}) }\n const prevPendingIds = nextPendingIdsByAgentId[event.payload.agentId] ?? []\n const filteredPendingIds = prevPendingIds.filter((id) => id !== event.payload.requestId)\n if (filteredPendingIds.length > 0) {\n nextPendingIdsByAgentId[event.payload.agentId] = filteredPendingIds\n } else {\n delete nextPendingIdsByAgentId[event.payload.agentId]\n }\n\n const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {}\n const nextResolvedIds = resolvedDecisionIdsByAgentId[event.payload.agentId] ?? []\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n channelPermissionRequestsById: rest,\n channelPermissionRequestIdsByAgentId: nextPendingIdsByAgentId,\n resolvedChannelPermissionDecisionsById: {\n ...(state.resolvedChannelPermissionDecisionsById ?? {}),\n [event.payload.requestId]: {\n requestId: event.payload.requestId,\n agentId: event.payload.agentId,\n issueId: event.payload.issueId,\n behavior: event.payload.behavior,\n },\n },\n resolvedChannelPermissionDecisionIdsByAgentId: {\n ...resolvedDecisionIdsByAgentId,\n [event.payload.agentId]: nextResolvedIds.includes(event.payload.requestId)\n ? nextResolvedIds\n : [...nextResolvedIds, event.payload.requestId],\n },\n }\n }\n\n case 'agent.message_received': {\n const { agentId, direction } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n lastMessageAt: event.timestamp,\n channelReply: direction === 'to_agent' ? undefined : prev.channelReply,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.channel_reply': {\n const { agentId, reply } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n channelReply: {\n ...reply,\n reportedAt: event.timestamp,\n },\n resolution:\n reply.kind === 'done'\n ? 'done'\n : reply.kind === 'needs_input'\n ? 'needs_input'\n : prev.resolution,\n resolutionUpdatedAt:\n reply.kind === 'done' || reply.kind === 'needs_input'\n ? event.timestamp\n : prev.resolutionUpdatedAt,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.model_set': {\n const { agentId, model, claudeSessionId, sessionModel, sessionHarness } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n model,\n claudeSessionId: claudeSessionId ?? prev.claudeSessionId,\n sessionModel: sessionModel ?? prev.sessionModel,\n sessionHarness: sessionHarness ?? prev.sessionHarness,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n let nextAgentIdBySessionId = state.agentIdBySessionId\n if (claudeSessionId && claudeSessionId !== prev.claudeSessionId) {\n nextAgentIdBySessionId = { ...state.agentIdBySessionId, [claudeSessionId]: agentId }\n if (prev.claudeSessionId && state.agentIdBySessionId[prev.claudeSessionId] === agentId) {\n const { [prev.claudeSessionId]: _removed, ...rest } = state.agentIdBySessionId\n nextAgentIdBySessionId = { ...rest, [claudeSessionId]: agentId }\n }\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'agent.current_issue_set': {\n const { agentId, currentIssue } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n currentIssue,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.context_saturation_changed': {\n const { agentId, contextSaturatedAt } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n contextSaturatedAt,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.resolution_changed': {\n const { agentId, resolution, resolutionCount } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n resolution,\n resolutionCount,\n resolutionUpdatedAt: event.timestamp,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.state_restored': {\n const { agentId, snapshot } = event.payload\n // Seed directly from the restored snapshot but use the new event's sequence\n // so downstream consumers key off a monotonic value.\n const next: AgentRuntimeSnapshot = {\n ...snapshot,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'activity.entry': {\n const entry = event.payload as Record<string, unknown>;\n const newEntry = { id: entry.id, timestamp: event.timestamp, ...entry };\n const updated = [newEntry, ...(state.recentActivity as Array<Record<string, unknown>>)].slice(0, MAX_ACTIVITY_ENTRIES);\n return { ...state, sequence: Math.max(state.sequence, event.sequence), recentActivity: updated };\n }\n\n case 'activity.detailed': {\n const entry = event.payload as Record<string, unknown>;\n const newEntry = { id: entry.id, timestamp: event.timestamp, ...entry };\n const updated = [newEntry, ...(state.detailedActivity as Array<Record<string, unknown>>)].slice(0, MAX_DETAILED_ENTRIES);\n return { ...state, sequence: Math.max(state.sequence, event.sequence), detailedActivity: updated };\n }\n\n case 'activity.tts': {\n const entry = event.payload as Record<string, unknown>;\n const newEntry = { id: entry.id, timestamp: event.timestamp, ...entry };\n const updated = [newEntry, ...(state.ttsActivity as Array<Record<string, unknown>>)].slice(0, MAX_TTS_ENTRIES);\n return { ...state, sequence: Math.max(state.sequence, event.sequence), ttsActivity: updated };\n }\n\n case 'dashboard.lifecycle_started': {\n const { reason, issueId, trigger } = event.payload as { reason: string; issueId: string | null; trigger: string };\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n dashboardLifecycle: {\n active: true,\n reason,\n issueId,\n trigger,\n startedAt: event.timestamp,\n completedAt: null,\n failedAt: null,\n error: null,\n },\n };\n }\n\n case 'dashboard.lifecycle_completed': {\n const { reason, issueId } = event.payload as { reason: string; issueId: string | null; durationMs: number };\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n dashboardLifecycle: {\n ...state.dashboardLifecycle,\n active: false,\n reason: reason ?? state.dashboardLifecycle.reason,\n issueId: issueId ?? state.dashboardLifecycle.issueId,\n completedAt: event.timestamp,\n },\n };\n }\n\n case 'dashboard.lifecycle_failed': {\n const { reason, issueId, error } = event.payload as { reason: string; issueId: string | null; error: string };\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n dashboardLifecycle: {\n ...state.dashboardLifecycle,\n active: false,\n reason: reason ?? state.dashboardLifecycle.reason,\n issueId: issueId ?? state.dashboardLifecycle.issueId,\n failedAt: event.timestamp,\n error,\n },\n };\n }\n\n case 'agent.turn_diff_completed': {\n const p = event.payload as {\n agentId: string\n turnId: string\n completedAt: string\n files: Array<{ path: string; kind?: string; additions?: number; deletions?: number }>\n checkpointRef?: string\n assistantMessageId?: string\n checkpointTurnCount?: number\n }\n const existing = state.turnDiffSummariesByAgentId[p.agentId] ?? []\n const summary: TurnDiffSummary = {\n turnId: p.turnId,\n completedAt: p.completedAt,\n files: p.files,\n checkpointRef: p.checkpointRef,\n assistantMessageId: p.assistantMessageId ?? undefined,\n checkpointTurnCount: p.checkpointTurnCount,\n }\n // Deduplicate by turnId — replace if exists, append otherwise\n const idx = existing.findIndex(s => s.turnId === p.turnId)\n const updated = trimTurnDiffSummaries(\n idx >= 0\n ? existing.map((s, i) => i === idx ? summary : s)\n : [...existing, summary]\n )\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n turnDiffSummariesByAgentId: {\n ...state.turnDiffSummariesByAgentId,\n [p.agentId]: updated,\n },\n }\n }\n\n case 'conversation.compacting_changed': {\n const { conversationName, compacting } = event.payload\n if (!compacting) {\n const { [conversationName]: _removed, ...rest } = state.conversationsCompactingByName\n return { ...state, conversationsCompactingByName: rest }\n }\n return {\n ...state,\n conversationsCompactingByName: { ...state.conversationsCompactingByName, [conversationName]: true },\n }\n }\n\n case 'conversation.created': {\n return { ...state, conversationsListRevision: state.conversationsListRevision + 1 }\n }\n\n case 'conversation.title_changed': {\n return { ...state, conversationsListRevision: state.conversationsListRevision + 1 }\n }\n\n case 'conversation.permission_changed': {\n const { conversationName, waiting } = event.payload\n if (!waiting) {\n const { [conversationName]: _removed, ...rest } = state.conversationsAwaitingPermissionByName\n return { ...state, conversationsAwaitingPermissionByName: rest }\n }\n return {\n ...state,\n conversationsAwaitingPermissionByName: { ...state.conversationsAwaitingPermissionByName, [conversationName]: true },\n }\n }\n\n // ─── Scan events (PAN-457) ───────────────────────────────────────────────\n\n case 'scan.started': {\n const { mode, dirs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n scanProgress: {\n active: true,\n mode,\n dirs,\n dirsProcessed: 0,\n dirsTotal: 0,\n sessionsFound: 0,\n elapsedMs: 0,\n inserted: 0,\n updated: 0,\n skipped: 0,\n errors: 0,\n durationMs: 0,\n },\n }\n }\n\n case 'scan.progress': {\n if (!state.scanProgress) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const { dirsProcessed, dirsTotal, sessionsFound, elapsedMs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n scanProgress: {\n ...state.scanProgress,\n dirsProcessed,\n dirsTotal,\n sessionsFound,\n elapsedMs,\n },\n }\n }\n\n case 'scan.complete': {\n if (!state.scanProgress) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const { inserted, updated, skipped, errors, durationMs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n scanProgress: {\n ...state.scanProgress,\n active: false,\n inserted,\n updated,\n skipped,\n errors,\n durationMs,\n },\n }\n }\n\n // ─── Enrich events (PAN-457) ─────────────────────────────────────────────\n\n case 'enrich.progress': {\n const { sessionId, level, model, cost, success, error } = event.payload\n const prev = state.enrichStats ?? { processed: 0, totalCost: 0, failures: 0, durationMs: 0 }\n const progress = { sessionId, level, model, cost, success, error, timestamp: event.timestamp }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n enrichStats: {\n processed: prev.processed + 1,\n totalCost: prev.totalCost + (success ? cost : 0),\n failures: prev.failures + (success ? 0 : 1),\n durationMs: 0,\n },\n enrichProgressBySessionId: upsertBoundedSessionProgress(state.enrichProgressBySessionId, progress),\n }\n }\n\n case 'enrich.complete': {\n const { processed, totalCost, failures, durationMs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n enrichStats: { processed, totalCost, failures, durationMs },\n enrichProgressBySessionId: {},\n }\n }\n\n case 'embed.progress': {\n const { sessionId, model, success, error } = event.payload\n const progress = { sessionId, model, success, error, timestamp: event.timestamp }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n embedProgressBySessionId: upsertBoundedSessionProgress(state.embedProgressBySessionId, progress),\n }\n }\n\n default: {\n void (event as never)\n return state\n }\n }\n}\n\n// ─── applyEvents — batch apply ───────────────────────────────────────────────\n\nexport function applyEvents(state: ReadModelState, events: DomainEvent[]): ReadModelState {\n return events.reduce(applyEvent, state)\n}\n","import { Schema } from \"effect\"\n\nexport const FlywheelStatsCriterionStatus = Schema.Literals([\n \"green\",\n \"yellow\",\n \"red\",\n \"insufficient_data\",\n])\nexport type FlywheelStatsCriterionStatus = typeof FlywheelStatsCriterionStatus.Type\n\nexport const FlywheelStatsTrend = Schema.Literals([\"up\", \"down\", \"flat\"])\nexport type FlywheelStatsTrend = typeof FlywheelStatsTrend.Type\n\nexport const FlywheelStatsCriterionValueObject = Schema.Record(Schema.String, Schema.Json)\nexport type FlywheelStatsCriterionValueObject = typeof FlywheelStatsCriterionValueObject.Type\n\nexport const FlywheelStatsCriterionValue = Schema.Union([\n Schema.Number,\n FlywheelStatsCriterionValueObject,\n])\nexport type FlywheelStatsCriterionValue = typeof FlywheelStatsCriterionValue.Type\n\nexport interface FlywheelStatsCriterion {\n label: string\n value: FlywheelStatsCriterionValue\n target: FlywheelStatsCriterionValue\n status: FlywheelStatsCriterionStatus\n trend?: FlywheelStatsTrend | undefined\n sampleSize: number\n dataSufficient: boolean\n}\n\nexport const FlywheelStatsCriterion = Schema.Struct({\n label: Schema.String,\n value: FlywheelStatsCriterionValue,\n target: FlywheelStatsCriterionValue,\n status: FlywheelStatsCriterionStatus,\n trend: Schema.optional(FlywheelStatsTrend),\n sampleSize: Schema.Number,\n dataSufficient: Schema.Boolean,\n})\n\nexport interface FlywheelStatsCriteria {\n c1_bugRate: FlywheelStatsCriterion\n c2_p0Bugs: FlywheelStatsCriterion\n c3_passRate: FlywheelStatsCriterion\n c4_mttr: FlywheelStatsCriterion\n c5_intervention: FlywheelStatsCriterion\n c6_timeConsistency: FlywheelStatsCriterion\n c7_flake: FlywheelStatsCriterion\n}\n\nexport const FlywheelStatsCriteria = Schema.Struct({\n c1_bugRate: FlywheelStatsCriterion,\n c2_p0Bugs: FlywheelStatsCriterion,\n c3_passRate: FlywheelStatsCriterion,\n c4_mttr: FlywheelStatsCriterion,\n c5_intervention: FlywheelStatsCriterion,\n c6_timeConsistency: FlywheelStatsCriterion,\n c7_flake: FlywheelStatsCriterion,\n})\n\nexport interface FlywheelStats {\n window: string\n generatedAt: string\n criteria: FlywheelStatsCriteria\n}\n\nexport const FlywheelStats = Schema.Struct({\n window: Schema.String,\n generatedAt: Schema.String,\n criteria: FlywheelStatsCriteria,\n})\n\nexport const decodeFlywheelStats = Schema.decodeUnknownSync(FlywheelStats)\nexport const encodeFlywheelStats = Schema.encodeSync(FlywheelStats)\n","import { Schema } from \"effect\"\nimport type { Harness } from \"./types\"\n\nexport const CONTEXT_LAYER_KINDS = [\"global\", \"project\", \"workspace\"] as const\nexport const CONTEXT_PREVIEW_HARNESSES = [\"claude-code\", \"ohmypi\", \"codex\"] as const satisfies readonly Harness[]\n\nexport const ContextLayerKind = Schema.Literals(CONTEXT_LAYER_KINDS)\nexport type ContextLayerKind = typeof ContextLayerKind.Type\n\nexport const ContextPreviewHarness = Schema.Literals(CONTEXT_PREVIEW_HARNESSES)\nexport type ContextPreviewHarness = typeof ContextPreviewHarness.Type\n\nexport const ContextProjectSummary = Schema.Struct({\n projectKey: Schema.String,\n name: Schema.String,\n path: Schema.String,\n issuePrefix: Schema.optional(Schema.String),\n tracker: Schema.optional(Schema.Literals([\"linear\", \"github\", \"gitlab\", \"rally\"])),\n workspaceRoot: Schema.optional(Schema.String),\n})\nexport type ContextProjectSummary = typeof ContextProjectSummary.Type\n\nexport const ContextWorkspaceSummary = Schema.Struct({\n projectKey: Schema.String,\n path: Schema.String,\n name: Schema.String,\n issueId: Schema.optional(Schema.String),\n branch: Schema.optional(Schema.String),\n})\nexport type ContextWorkspaceSummary = typeof ContextWorkspaceSummary.Type\n\nconst ContextLayerBase = {\n file: Schema.String,\n exists: Schema.Boolean,\n content: Schema.String,\n editable: Schema.Boolean,\n}\n\nexport const GlobalContextLayerRecord = Schema.Struct({\n kind: Schema.Literal(\"global\"),\n ...ContextLayerBase,\n})\nexport type GlobalContextLayerRecord = typeof GlobalContextLayerRecord.Type\n\nexport const ProjectContextLayerRecord = Schema.Struct({\n kind: Schema.Literal(\"project\"),\n projectKey: Schema.String,\n ...ContextLayerBase,\n})\nexport type ProjectContextLayerRecord = typeof ProjectContextLayerRecord.Type\n\nexport const WorkspaceContextLayerRecord = Schema.Struct({\n kind: Schema.Literal(\"workspace\"),\n projectKey: Schema.String,\n workspacePath: Schema.String,\n ...ContextLayerBase,\n})\nexport type WorkspaceContextLayerRecord = typeof WorkspaceContextLayerRecord.Type\n\nexport const ContextEditableLayerRecord = Schema.Union([\n GlobalContextLayerRecord,\n ProjectContextLayerRecord,\n WorkspaceContextLayerRecord,\n])\nexport type ContextEditableLayerRecord = typeof ContextEditableLayerRecord.Type\n\nexport const GlobalContextLayerTarget = Schema.Struct({\n kind: Schema.Literal(\"global\"),\n})\nexport type GlobalContextLayerTarget = typeof GlobalContextLayerTarget.Type\n\nexport const ProjectContextLayerTarget = Schema.Struct({\n kind: Schema.Literal(\"project\"),\n projectKey: Schema.String,\n})\nexport type ProjectContextLayerTarget = typeof ProjectContextLayerTarget.Type\n\nexport const WorkspaceContextLayerTarget = Schema.Struct({\n kind: Schema.Literal(\"workspace\"),\n projectKey: Schema.String,\n workspacePath: Schema.String,\n})\nexport type WorkspaceContextLayerTarget = typeof WorkspaceContextLayerTarget.Type\n\nexport const ContextLayerTarget = Schema.Union([\n GlobalContextLayerTarget,\n ProjectContextLayerTarget,\n WorkspaceContextLayerTarget,\n])\nexport type ContextLayerTarget = typeof ContextLayerTarget.Type\n\nexport const ContextLayerDraft = Schema.Struct({\n target: ContextLayerTarget,\n content: Schema.String,\n})\nexport type ContextLayerDraft = typeof ContextLayerDraft.Type\n\n/**\n * A rendered output file `pan sync` writes a Overdeck-managed region into\n * (e.g. ~/.claude/CLAUDE.md, a project's CLAUDE.md or AGENTS.md). Distinct from\n * the editable *layer source* files — this describes the injection *target* so\n * the dashboard can show the user exactly where context lands and reassure them\n * their own content is preserved.\n */\nexport const ContextSyncTarget = Schema.Struct({\n harness: ContextPreviewHarness,\n layerKind: Schema.Literals([\"global\", \"project\"]),\n projectKey: Schema.optional(Schema.String),\n /** Short human label, e.g. \"Claude Code · global\". */\n label: Schema.String,\n /** Resolved absolute path of the target file. */\n path: Schema.String,\n exists: Schema.Boolean,\n /** True when the file already contains a Overdeck-managed region. */\n hasManagedRegion: Schema.Boolean,\n /** True when the file has hand-authored content outside the managed region. */\n hasUserContent: Schema.Boolean,\n})\nexport type ContextSyncTarget = typeof ContextSyncTarget.Type\n\nexport const ContextLayersResponse = Schema.Struct({\n operation: Schema.Literal(\"load\"),\n projects: Schema.Array(ContextProjectSummary),\n workspaces: Schema.Array(ContextWorkspaceSummary),\n layers: Schema.Array(ContextEditableLayerRecord),\n /** Injection targets `pan sync` writes managed regions into. */\n targets: Schema.Array(ContextSyncTarget),\n})\nexport type ContextLayersResponse = typeof ContextLayersResponse.Type\n\nexport const ContextPreviewRequest = Schema.Struct({\n operation: Schema.Literal(\"preview\"),\n selectedLayer: ContextLayerTarget,\n drafts: Schema.Array(ContextLayerDraft),\n})\nexport type ContextPreviewRequest = typeof ContextPreviewRequest.Type\n\nexport const ContextHarnessPreviews = Schema.Struct({\n \"claude-code\": Schema.String,\n ohmypi: Schema.String,\n codex: Schema.String,\n fullPrompt: Schema.String,\n})\nexport type ContextHarnessPreviews = typeof ContextHarnessPreviews.Type\n\nexport const ContextPreviewDiagnostic = Schema.Struct({\n level: Schema.Literals([\"info\", \"warning\", \"error\"]),\n message: Schema.String,\n layer: Schema.optional(ContextLayerTarget),\n})\nexport type ContextPreviewDiagnostic = typeof ContextPreviewDiagnostic.Type\n\nexport const ContextPreviewResponse = Schema.Struct({\n operation: Schema.Literal(\"preview\"),\n previews: ContextHarnessPreviews,\n diagnostics: Schema.Array(ContextPreviewDiagnostic),\n})\nexport type ContextPreviewResponse = typeof ContextPreviewResponse.Type\n\nexport const ContextLayerSaveRequest = Schema.Struct({\n operation: Schema.Literal(\"save\"),\n target: ContextLayerTarget,\n content: Schema.String,\n})\nexport type ContextLayerSaveRequest = typeof ContextLayerSaveRequest.Type\n\nexport const ContextLayerSaveResponse = Schema.Struct({\n operation: Schema.Literal(\"save\"),\n layer: ContextEditableLayerRecord,\n savedAt: Schema.String,\n})\nexport type ContextLayerSaveResponse = typeof ContextLayerSaveResponse.Type\n\nexport const ContextSyncRequest = Schema.Struct({\n operation: Schema.Literal(\"sync\"),\n})\nexport type ContextSyncRequest = typeof ContextSyncRequest.Type\n\nexport const ContextSyncResponse = Schema.Struct({\n operation: Schema.Literal(\"sync\"),\n success: Schema.Boolean,\n exitCode: Schema.optional(Schema.Number),\n stdout: Schema.String,\n stderr: Schema.String,\n syncedAt: Schema.String,\n})\nexport type ContextSyncResponse = typeof ContextSyncResponse.Type\n","import { Schema } from \"effect\"\n\nexport const ArtifactId = Schema.String\nexport type ArtifactId = typeof ArtifactId.Type\n\nexport const ArtifactSlug = Schema.String\nexport type ArtifactSlug = typeof ArtifactSlug.Type\n\nexport const ArtifactHash = Schema.String\nexport type ArtifactHash = typeof ArtifactHash.Type\n\nexport const ArtifactAgentRole = Schema.Literals([\"plan\", \"work\", \"review\", \"test\", \"ship\", \"flywheel\", \"user\"])\nexport type ArtifactAgentRole = typeof ArtifactAgentRole.Type\n\nexport const ArtifactAgentHarness = Schema.Literals([\"claude-code\", \"pi\", \"ohmypi\", \"codex\", \"user\"])\nexport type ArtifactAgentHarness = typeof ArtifactAgentHarness.Type\n\nexport const ArtifactLifecycleState = Schema.Literals([\n \"published\",\n \"pending_changes\",\n \"unshared\",\n])\nexport type ArtifactLifecycleState = typeof ArtifactLifecycleState.Type\n\nexport const ArtifactValidationCode = Schema.Literals([\n \"invalid_file_type\",\n \"not_a_file\",\n \"size_limit_exceeded\",\n \"forbidden_asset_url\",\n \"secret_detected\",\n \"secret_allowed\",\n \"high_entropy_string\",\n \"inline_event_handler\",\n \"missing_image_alt\",\n])\nexport type ArtifactValidationCode = typeof ArtifactValidationCode.Type\n\nexport const ArtifactValidationFinding = Schema.Struct({\n code: ArtifactValidationCode,\n message: Schema.String,\n line: Schema.optional(Schema.Number),\n column: Schema.optional(Schema.Number),\n rule: Schema.optional(Schema.String),\n strict: Schema.optional(Schema.Boolean),\n})\nexport type ArtifactValidationFinding = typeof ArtifactValidationFinding.Type\n\nexport const ArtifactValidationResult = Schema.Struct({\n ok: Schema.Boolean,\n filePath: Schema.optional(Schema.String),\n size: Schema.Number,\n hash: ArtifactHash,\n strict: Schema.Boolean,\n errors: Schema.Array(ArtifactValidationFinding),\n warnings: Schema.Array(ArtifactValidationFinding),\n})\nexport type ArtifactValidationResult = typeof ArtifactValidationResult.Type\n\nexport const ArtifactMetadata = Schema.Struct({\n artifactId: ArtifactId,\n slug: ArtifactSlug,\n issueId: Schema.optional(Schema.NullOr(Schema.String)),\n workspaceId: Schema.optional(Schema.NullOr(Schema.String)),\n agentRole: Schema.optional(Schema.NullOr(ArtifactAgentRole)),\n agentHarness: Schema.optional(Schema.NullOr(ArtifactAgentHarness)),\n runId: Schema.optional(Schema.NullOr(Schema.String)),\n sessionId: Schema.optional(Schema.NullOr(Schema.String)),\n filePath: Schema.String,\n currentHash: ArtifactHash,\n lastPublishedHash: Schema.optional(Schema.NullOr(ArtifactHash)),\n supersedes: Schema.optional(Schema.NullOr(ArtifactId)),\n title: Schema.optional(Schema.NullOr(Schema.String)),\n description: Schema.optional(Schema.NullOr(Schema.String)),\n createdAt: Schema.String,\n publishedAt: Schema.optional(Schema.NullOr(Schema.String)),\n unsharedAt: Schema.optional(Schema.NullOr(Schema.String)),\n})\nexport type ArtifactMetadata = typeof ArtifactMetadata.Type\n\nexport const ArtifactUrls = Schema.Struct({\n wrapperUrl: Schema.String,\n rawUrl: Schema.String,\n})\nexport type ArtifactUrls = typeof ArtifactUrls.Type\n\nexport const ArtifactStatusResponse = Schema.Struct({\n artifact: Schema.optional(ArtifactMetadata),\n filePath: Schema.String,\n currentHash: ArtifactHash,\n lastPublishedHash: Schema.optional(Schema.NullOr(ArtifactHash)),\n pendingChanges: Schema.Boolean,\n validation: Schema.optional(ArtifactValidationResult),\n})\nexport type ArtifactStatusResponse = typeof ArtifactStatusResponse.Type\n\nexport const ArtifactCreateResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n validation: ArtifactValidationResult,\n published: Schema.Boolean,\n})\nexport type ArtifactCreateResponse = typeof ArtifactCreateResponse.Type\n\nexport const ArtifactPublishResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n validation: ArtifactValidationResult,\n published: Schema.Boolean,\n pendingChanges: Schema.Boolean,\n})\nexport type ArtifactPublishResponse = typeof ArtifactPublishResponse.Type\n\nexport const ArtifactUnshareResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n unshared: Schema.Boolean,\n})\nexport type ArtifactUnshareResponse = typeof ArtifactUnshareResponse.Type\n\nexport const ArtifactListEntry = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n status: ArtifactLifecycleState,\n pendingChanges: Schema.Boolean,\n thumbnailUrl: Schema.optional(Schema.String),\n})\nexport type ArtifactListEntry = typeof ArtifactListEntry.Type\n\nexport const ArtifactListResponse = Schema.Struct({\n artifacts: Schema.Array(ArtifactListEntry),\n})\nexport type ArtifactListResponse = typeof ArtifactListResponse.Type\n\nexport const ArtifactDetailResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n status: ArtifactLifecycleState,\n pendingChanges: Schema.Boolean,\n})\nexport type ArtifactDetailResponse = typeof ArtifactDetailResponse.Type\n\nexport const WorkspaceArtifactsResponse = Schema.Struct({\n issueId: Schema.optional(Schema.String),\n workspaceId: Schema.optional(Schema.String),\n artifacts: Schema.Array(ArtifactListEntry),\n})\nexport type WorkspaceArtifactsResponse = typeof WorkspaceArtifactsResponse.Type\n","import { Schema } from \"effect\"\n\nexport const FeatureRegistryStatus = Schema.Literals([\n \"active\",\n \"archived\",\n \"merged\",\n \"deferred\",\n])\nexport type FeatureRegistryStatus = typeof FeatureRegistryStatus.Type\n\nexport const FeatureRegistryEntry = Schema.Struct({\n featureId: Schema.String,\n featureName: Schema.String,\n description: Schema.NullOr(Schema.String),\n owningWorkspaceId: Schema.NullOr(Schema.String),\n owningIssueId: Schema.NullOr(Schema.String),\n owningAgentId: Schema.NullOr(Schema.String),\n status: FeatureRegistryStatus,\n createdAt: Schema.String,\n updatedAt: Schema.String,\n tags: Schema.Array(Schema.String),\n})\nexport type FeatureRegistryEntry = typeof FeatureRegistryEntry.Type\n\nexport interface FeatureRegistryListFilter {\n featureName?: string\n issueId?: string\n workspaceId?: string\n agentId?: string\n status?: FeatureRegistryStatus\n tags?: string[]\n limit?: number\n}\n\nexport interface FeatureRegistryTagInput {\n issueId: string\n featureName: string\n description?: string\n workspaceId?: string | null\n agentId?: string | null\n status?: FeatureRegistryStatus\n tags?: string[]\n now?: string\n}\n\nexport interface FeatureRegistryUntagInput {\n issueId: string\n featureName: string\n}\n\nexport interface FeatureRegistryOwnershipUpdate {\n featureName?: string\n issueId?: string | null\n workspaceId?: string | null\n agentId?: string | null\n status?: FeatureRegistryStatus\n tags?: string[]\n now?: string\n}\n","import type { Harness } from \"./types\"\n\nexport type RuntimeName = Harness\nexport type HarnessName = RuntimeName | \"pi\"\n\nexport type HarnessLaunchCommandKind = \"claude-code\" | \"ohmypi-rpc\" | \"codex-work-tui\"\nexport type HarnessDeliveryKind = \"pty-supervisor\" | \"rpc-fifo\" | \"codex-exec-resume\" | \"tmux-paste\"\nexport type HarnessReadinessKind = \"claude-session-signal\" | \"ohmypi-ready-file\" | \"codex-tui-prompt\"\nexport type HarnessTranscriptKind = \"claude-jsonl\" | \"ohmypi-jsonl\" | \"codex-rollout-jsonl\"\nexport type HarnessSessionIdSource = \"launcher-session-id\" | \"transcript-jsonl\" | \"codex-thread-id\"\nexport type HarnessContextLayerKind = \"claude\" | \"pi\" | \"codex\"\nexport type HarnessFeedKind = \"claude_code\" | \"pi\" | \"codex\"\n\nexport interface HarnessBehavior {\n readonly displayName: string\n readonly executableName: string\n readonly processNames: readonly string[]\n readonly launchCommandKind: HarnessLaunchCommandKind\n readonly deliveryKind: HarnessDeliveryKind\n readonly readinessKind: HarnessReadinessKind\n readonly transcriptKind: HarnessTranscriptKind\n readonly sessionIdSource: HarnessSessionIdSource\n readonly contextLayerKind: HarnessContextLayerKind\n readonly feedKind: HarnessFeedKind\n readonly supportsPtySupervisor: boolean\n readonly supportsChannelsBridge: boolean\n readonly supportsConversationStreaming: boolean\n readonly supportsPatchProjection: boolean\n readonly usesRpcFifo: boolean\n readonly usesCodexHome: boolean\n readonly injectsPromptTimeMemory: boolean\n readonly workAgentMode: \"claude-code\" | \"ohmypi-rpc\" | \"codex-work-tui\"\n readonly readyTimeoutSeconds: number\n}\n\nexport const CLAUDE_CODE_BEHAVIOR: HarnessBehavior = {\n displayName: \"Claude Code\",\n executableName: \"claude\",\n processNames: [\"claude\"],\n launchCommandKind: \"claude-code\",\n deliveryKind: \"pty-supervisor\",\n readinessKind: \"claude-session-signal\",\n transcriptKind: \"claude-jsonl\",\n sessionIdSource: \"launcher-session-id\",\n contextLayerKind: \"claude\",\n feedKind: \"claude_code\",\n supportsPtySupervisor: true,\n supportsChannelsBridge: true,\n supportsConversationStreaming: false,\n supportsPatchProjection: true,\n usesRpcFifo: false,\n usesCodexHome: false,\n injectsPromptTimeMemory: false,\n workAgentMode: \"claude-code\",\n readyTimeoutSeconds: 30,\n}\n\nexport const OHMYPI_BEHAVIOR: HarnessBehavior = {\n displayName: \"Pi\",\n executableName: \"omp\",\n processNames: [\"omp\"],\n launchCommandKind: \"ohmypi-rpc\",\n deliveryKind: \"rpc-fifo\",\n readinessKind: \"ohmypi-ready-file\",\n transcriptKind: \"ohmypi-jsonl\",\n sessionIdSource: \"transcript-jsonl\",\n contextLayerKind: \"pi\",\n feedKind: \"pi\",\n supportsPtySupervisor: false,\n supportsChannelsBridge: false,\n supportsConversationStreaming: true,\n supportsPatchProjection: false,\n usesRpcFifo: true,\n usesCodexHome: false,\n injectsPromptTimeMemory: true,\n workAgentMode: \"ohmypi-rpc\",\n readyTimeoutSeconds: 120,\n}\n\nexport const CODEX_BEHAVIOR: HarnessBehavior = {\n displayName: \"Codex\",\n executableName: \"codex\",\n processNames: [\"codex\"],\n launchCommandKind: \"codex-work-tui\",\n deliveryKind: \"codex-exec-resume\",\n readinessKind: \"codex-tui-prompt\",\n transcriptKind: \"codex-rollout-jsonl\",\n sessionIdSource: \"codex-thread-id\",\n contextLayerKind: \"codex\",\n feedKind: \"codex\",\n supportsPtySupervisor: true,\n supportsChannelsBridge: false,\n supportsConversationStreaming: true,\n supportsPatchProjection: true,\n usesRpcFifo: false,\n usesCodexHome: true,\n injectsPromptTimeMemory: false,\n workAgentMode: \"codex-work-tui\",\n readyTimeoutSeconds: 30,\n}\n\nconst BEHAVIORS: Record<RuntimeName, HarnessBehavior> = {\n \"claude-code\": CLAUDE_CODE_BEHAVIOR,\n ohmypi: OHMYPI_BEHAVIOR,\n codex: CODEX_BEHAVIOR,\n}\n\nexport function getHarnessBehavior(harness: HarnessName | undefined | null): HarnessBehavior {\n if (harness === \"ohmypi\" || harness === \"pi\") return OHMYPI_BEHAVIOR\n if (harness === \"codex\") return CODEX_BEHAVIOR\n return CLAUDE_CODE_BEHAVIOR\n}\n\nexport function getRuntimeBehavior(runtime: RuntimeName): HarnessBehavior {\n return BEHAVIORS[runtime]\n}\n","import { Schema } from \"effect\"\n\nexport const HygieneFinding = Schema.Struct({\n id: Schema.String,\n summary: Schema.String,\n detail: Schema.optional(Schema.String),\n urgent: Schema.optional(Schema.Boolean),\n})\nexport type HygieneFinding = typeof HygieneFinding.Type\n\nexport const HygienePullRequest = Schema.Struct({\n number: Schema.Number,\n branch: Schema.String,\n url: Schema.String,\n blocking: Schema.Literals([\"review-pending\", \"test-pending\", \"failing-checks\", \"awaiting-UAT\", \"clean\"]),\n})\n\nexport const HygieneReport = Schema.Struct({\n generatedAt: Schema.String,\n root: Schema.String,\n needsAttention: Schema.Boolean,\n skipped: Schema.Array(Schema.String),\n push: Schema.Struct({ ahead: Schema.Number, commits: Schema.Array(Schema.String) }),\n tree: Schema.Struct({ files: Schema.Array(Schema.String), backups: Schema.Array(Schema.String) }),\n prs: Schema.Array(HygienePullRequest),\n agents: Schema.Struct({\n counts: Schema.Record(Schema.String, Schema.Number),\n problems: Schema.Array(HygieneFinding),\n }),\n sessions: Schema.Struct({ total: Schema.Number, zombies: Schema.Array(Schema.String) }),\n branches: Schema.Struct({ stale: Schema.Array(Schema.String) }),\n workspaces: Schema.Struct({ stale: Schema.Array(Schema.String) }),\n disk: Schema.Struct({ availableGb: Schema.Number, thresholdGb: Schema.Number, urgent: Schema.Boolean }),\n fixes: Schema.Struct({\n branchesDeleted: Schema.Array(Schema.String),\n workspacesRemoved: Schema.Array(Schema.Struct({ path: Schema.String, freedBytes: Schema.Number })),\n errors: Schema.Array(Schema.String),\n }),\n})\nexport type HygieneReport = typeof HygieneReport.Type\n","export const OVERDECK_DASHBOARD_PROTOCOL_VERSION = 1;\nexport const OVERDECK_AGENT_PROTOCOL_VERSION = 1;\n\nexport type UpdateChannel = 'stable' | 'canary';\nexport type UpdatePhase =\n | 'idle'\n | 'checking'\n | 'current'\n | 'available'\n | 'downloading'\n | 'installing'\n | 'ready'\n | 'error';\nexport type UpdateInstallMode = 'desktop' | 'npm-global' | 'development';\nexport type UpdateCompatibility = 'compatible' | 'active-agents-block' | 'unknown';\n\nexport interface UpdateSnapshot {\n phase: UpdatePhase;\n installMode: UpdateInstallMode;\n channel: UpdateChannel;\n currentVersion: string;\n targetVersion: string | null;\n releaseName: string | null;\n releaseNotes: string | null;\n releaseUrl: string | null;\n publishedAt: string | null;\n progressPercent: number | null;\n error: string | null;\n lastCheckedAt: string | null;\n compatibility: UpdateCompatibility;\n currentDashboardProtocol: number;\n currentAgentProtocol: number;\n targetDashboardProtocol: number | null;\n targetAgentProtocol: number | null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/types.ts","../src/memory.ts","../src/events.ts","../src/editor.ts","../src/flywheel.ts","../src/rpc.ts","../src/event-reducers.ts","../src/flywheel-stats.ts","../src/context-layers.ts","../src/artifacts.ts","../src/feature-registry.ts","../src/harness-behavior.ts","../src/hygiene.ts","../src/update.ts"],"sourcesContent":["import { Schema } from \"effect\"\n\n// ─── Primitives ───────────────────────────────────────────────────────────────\n\nexport const IssueId = Schema.String\nexport type IssueId = typeof IssueId.Type\n\nexport const AgentId = Schema.String\nexport type AgentId = typeof AgentId.Type\n\nexport const SequenceNumber = Schema.Number\nexport type SequenceNumber = typeof SequenceNumber.Type\n\n// ─── Strict literal types (PAN-433) ──────────────────────────────────────────\n// Safe because the read model only contains values from typed events or\n// explicitly cleaned bootstrap data.\n\nexport const AgentStatus = Schema.Literals([\"starting\", \"running\", \"stopped\", \"error\", \"unknown\"])\nexport type AgentStatus = typeof AgentStatus.Type\n\nexport const Role = Schema.Literals([\"plan\", \"work\", \"review\", \"test\", \"ship\", \"flywheel\", \"strike\", \"sequencer\", \"knowledge\"])\nexport type Role = typeof Role.Type\n\nexport const AgentResolution = Schema.Literals([\"working\", \"done\", \"needs_input\", \"stuck\", \"completed\", \"unclear\", \"abandoned\", \"api_error\"])\nexport type AgentResolution = typeof AgentResolution.Type\n\nexport const ReviewStatusValue = Schema.Literals([\"pending\", \"reviewing\", \"passed\", \"failed\", \"blocked\", \"skipped\"])\nexport type ReviewStatusValue = typeof ReviewStatusValue.Type\n\nexport const TestStatusValue = Schema.Literals([\"pending\", \"testing\", \"passed\", \"failed\", \"skipped\", \"dispatch_failed\"])\nexport type TestStatusValue = typeof TestStatusValue.Type\n\nexport const UatStatusValue = Schema.Literals([\"pending\", \"testing\", \"passed\", \"failed\"])\nexport type UatStatusValue = typeof UatStatusValue.Type\n\nexport const MergeStatusValue = Schema.Literals([\"pending\", \"queued\", \"merging\", \"verifying\", \"merged\", \"failed\"])\nexport type MergeStatusValue = typeof MergeStatusValue.Type\n\nexport const ReleaseStatusValue = Schema.Literals([\"pending\", \"releasing\", \"passed\", \"failed\", \"partial\", \"rolled_back\", \"skipped\"])\nexport type ReleaseStatusValue = typeof ReleaseStatusValue.Type\n\nexport const VerificationStatusValue = Schema.Literals([\"pending\", \"running\", \"passed\", \"failed\", \"skipped\"])\nexport type VerificationStatusValue = typeof VerificationStatusValue.Type\n\n// ─── Harness (PAN-636, PAN-1989) ─────────────────────────────────────────────\n// Identifies which coding-agent harness an agent is running under.\n// AgentSnapshot.runtime is left as Schema.optional(Schema.String) for forward\n// compatibility (events from older readers may carry unknown values), but every\n// consumer that branches on harness MUST go through getHarness() so unknown or\n// legacy values normalize to 'claude-code'.\n//\n// PAN-1989: narrowed to 3-value set — 'pi' retired; legacy DB rows read as\n// 'ohmypi' via getHarness(). All new write sites use 'ohmypi'.\n\nexport type Harness = 'claude-code' | 'ohmypi' | 'codex'\n\nconst KNOWN_HARNESSES: ReadonlySet<string> = new Set<Harness>(['claude-code', 'ohmypi', 'codex'])\n\n/**\n * Normalize a snapshot's runtime field to a known Harness value.\n * Unknown or missing values fall back to 'claude-code' (the default harness).\n * Legacy 'pi' values are normalized to 'ohmypi' on read (PAN-1989).\n */\nexport function getHarness(snapshot: { runtime?: string | undefined } | null | undefined): Harness {\n const raw = snapshot?.runtime\n if (raw === 'pi') return 'ohmypi'\n if (raw && KNOWN_HARNESSES.has(raw)) {\n return raw as Harness\n }\n return 'claude-code'\n}\n\n// ─── Agent Runtime (PAN-800) ─────────────────────────────────────────────────\n// High-frequency per-tool-call surface. Kept separate from AgentSnapshot because\n// AgentSnapshot is the low-frequency lifecycle projection (config, status, cost)\n// and merging them means every tool call re-diffs a giant object on the frontend.\n\nexport const Activity = Schema.Literals([\n \"working\", // tool in flight, or tool completed <30s ago\n \"thinking\", // no tool in flight, waiting for model\n \"waiting\", // needs human (permission, answer, disambiguation)\n \"idle\", // Stop hook fired, waiting for next turn\n \"stopped\", // session ended\n])\nexport type Activity = typeof Activity.Type\n\nexport const WaitingReason = Schema.Literals([\n \"tool_permission\",\n \"user_question\",\n \"disambiguation\",\n \"other\",\n])\nexport type WaitingReason = typeof WaitingReason.Type\n\nexport const ClaudeChannelPermissionBehavior = Schema.Literals([\n \"allow\",\n \"deny\",\n])\nexport type ClaudeChannelPermissionBehavior = typeof ClaudeChannelPermissionBehavior.Type\n\nexport const ThinkingState = Schema.Struct({\n since: Schema.String, // ISO timestamp\n lastToolAt: Schema.String, // timestamp of the tool that preceded this thinking state\n})\nexport type ThinkingState = typeof ThinkingState.Type\n\nexport const WaitingState = Schema.Struct({\n reason: WaitingReason,\n startedAt: Schema.String,\n message: Schema.optional(Schema.String),\n notificationSent: Schema.optional(Schema.Boolean),\n})\nexport type WaitingState = typeof WaitingState.Type\n\nexport const CHANNEL_REPLY_KIND_VALUES = [\"status\", \"done\", \"needs_input\"] as const\nexport const MAX_CHANNEL_REPLY_SUMMARY_LENGTH = 4 * 1024\nexport const MAX_CHANNEL_REPLY_ARTIFACT_REFS = 20\nexport const MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH = 512\nexport const MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH = 512\nconst CHANNEL_REPLY_ARTIFACT_URI_PATTERN = /^(?:file:\\/\\/|https:\\/\\/|\\/)/\n\nexport const ChannelReplyKind = Schema.Literals(CHANNEL_REPLY_KIND_VALUES)\nexport type ChannelReplyKind = typeof ChannelReplyKind.Type\n\nexport function isChannelReplyKind(value: unknown): value is ChannelReplyKind {\n return typeof value === 'string' && CHANNEL_REPLY_KIND_VALUES.includes(value as ChannelReplyKind)\n}\n\nexport const ChannelReplyArtifactRef = Schema.Struct({\n uri: Schema.String,\n label: Schema.optional(Schema.String),\n})\nexport type ChannelReplyArtifactRef = typeof ChannelReplyArtifactRef.Type\n\nexport const AgentChannelReply = Schema.Struct({\n kind: ChannelReplyKind,\n summary: Schema.String,\n artifactRefs: Schema.Array(ChannelReplyArtifactRef),\n reportedAt: Schema.String,\n})\nexport type AgentChannelReply = typeof AgentChannelReply.Type\n\nexport function normalizeChannelReplyPayload(\n payload: unknown,\n fieldPrefix = 'channel_reply',\n): {\n kind: ChannelReplyKind\n summary: string\n artifactRefs: ChannelReplyArtifactRef[]\n} {\n if (payload === null || typeof payload !== 'object') {\n throw new Error(`${fieldPrefix} payload must be an object`)\n }\n\n const source = payload as {\n kind?: unknown\n summary?: unknown\n artifactRefs?: unknown\n }\n\n if (!isChannelReplyKind(source.kind)) {\n throw new Error(`${fieldPrefix}.kind must be one of: ${CHANNEL_REPLY_KIND_VALUES.join(', ')}`)\n }\n\n if (typeof source.summary !== 'string') {\n throw new Error(`${fieldPrefix}.summary must be a non-empty string`)\n }\n const summary = source.summary.trim()\n if (summary.length === 0) {\n throw new Error(`${fieldPrefix}.summary must be a non-empty string`)\n }\n if (summary.length > MAX_CHANNEL_REPLY_SUMMARY_LENGTH) {\n throw new Error(\n `${fieldPrefix}.summary must be at most ${MAX_CHANNEL_REPLY_SUMMARY_LENGTH} characters`,\n )\n }\n\n if (source.artifactRefs !== undefined && !Array.isArray(source.artifactRefs)) {\n throw new Error(`${fieldPrefix}.artifactRefs must be an array when provided`)\n }\n const rawArtifactRefs = source.artifactRefs ?? []\n if (rawArtifactRefs.length > MAX_CHANNEL_REPLY_ARTIFACT_REFS) {\n throw new Error(\n `${fieldPrefix}.artifactRefs must contain at most ${MAX_CHANNEL_REPLY_ARTIFACT_REFS} entries`,\n )\n }\n\n const artifactRefs = rawArtifactRefs.map((item, index) => {\n if (item === null || typeof item !== 'object') {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}] must be an object`)\n }\n const ref = item as { uri?: unknown; label?: unknown }\n if (typeof ref.uri !== 'string') {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be a non-empty string`)\n }\n const uri = ref.uri.trim()\n if (uri.length === 0) {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be a non-empty string`)\n }\n if (uri.length > MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH) {\n throw new Error(\n `${fieldPrefix}.artifactRefs[${index}].uri must be at most ${MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH} characters`,\n )\n }\n if (!CHANNEL_REPLY_ARTIFACT_URI_PATTERN.test(uri)) {\n throw new Error(\n `${fieldPrefix}.artifactRefs[${index}].uri must start with file://, https://, or /`,\n )\n }\n\n if (ref.label !== undefined && typeof ref.label !== 'string') {\n throw new Error(`${fieldPrefix}.artifactRefs[${index}].label must be a string when provided`)\n }\n const label = typeof ref.label === 'string' ? ref.label.trim() : undefined\n if (label !== undefined && label.length > MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH) {\n throw new Error(\n `${fieldPrefix}.artifactRefs[${index}].label must be at most ${MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH} characters`,\n )\n }\n\n return {\n uri,\n ...(label ? { label } : {}),\n }\n })\n\n return {\n kind: source.kind,\n summary,\n artifactRefs,\n }\n}\n\nexport const AgentRuntimeSnapshot = Schema.Struct({\n id: AgentId,\n activity: Activity,\n lastActivity: Schema.String, // ISO timestamp of last event for this agent\n currentTool: Schema.optional(Schema.String), // set when activity === \"working\"\n thinking: Schema.optional(ThinkingState), // set when activity === \"thinking\"\n waiting: Schema.optional(WaitingState), // set when activity === \"waiting\"\n claudeSessionId: Schema.optional(Schema.String),\n sessionModel: Schema.optional(Schema.String),\n sessionHarness: Schema.optional(Schema.String),\n model: Schema.optional(Schema.String),\n lastMessageAt: Schema.optional(Schema.String), // last user→agent message delivered\n // Last structured Claude Code Channels reply emitted by the work agent.\n channelReply: Schema.optional(AgentChannelReply),\n // Lifecycle resolution signal emitted by work-agent-stop-hook. Values mirror\n // AgentResolution so the enrichment poller can consume this as input.\n resolution: Schema.optional(AgentResolution),\n resolutionCount: Schema.optional(Schema.Number),\n resolutionUpdatedAt: Schema.optional(Schema.String),\n // For specialists: the issue currently being processed.\n currentIssue: Schema.optional(IssueId),\n // Set while the agent's recent terminal tail shows a hard context-window overflow.\n contextSaturatedAt: Schema.optional(Schema.String),\n updatedAtSequence: SequenceNumber, // event sequence that produced this snapshot\n})\nexport type AgentRuntimeSnapshot = typeof AgentRuntimeSnapshot.Type\n\nexport const ChannelPermissionRequestSnapshot = Schema.Struct({\n requestId: Schema.String,\n agentId: AgentId,\n issueId: Schema.optional(IssueId),\n toolName: Schema.String,\n description: Schema.String,\n inputPreview: Schema.String,\n createdAt: Schema.String,\n})\nexport type ChannelPermissionRequestSnapshot = typeof ChannelPermissionRequestSnapshot.Type\n\n// ─── Agent ────────────────────────────────────────────────────────────────────\n\nexport const AgentSnapshot = Schema.Struct({\n id: AgentId,\n issueId: IssueId,\n workspace: Schema.optional(Schema.String),\n runtime: Schema.optional(Schema.String),\n model: Schema.optional(Schema.String),\n status: AgentStatus,\n startedAt: Schema.optional(Schema.String),\n lastActivity: Schema.optional(Schema.String),\n branch: Schema.optional(Schema.String),\n costSoFar: Schema.optional(Schema.Number),\n sessionId: Schema.optional(Schema.String),\n role: Schema.optional(Role),\n phase: Schema.optional(Schema.String),\n workType: Schema.optional(Schema.String),\n roleRunHead: Schema.optional(Schema.String),\n hasLiveTmuxSession: Schema.optional(Schema.Boolean),\n stoppedByUser: Schema.optional(Schema.Boolean),\n paused: Schema.optional(Schema.Boolean),\n pausedReason: Schema.optional(Schema.String),\n pausedAt: Schema.optional(Schema.String),\n troubled: Schema.optional(Schema.Boolean),\n troubledAt: Schema.optional(Schema.String),\n consecutiveFailures: Schema.optional(Schema.Number),\n firstFailureInRunAt: Schema.optional(Schema.String),\n lastFailureAt: Schema.optional(Schema.String),\n lastFailureReason: Schema.optional(Schema.String),\n lastFailureNextRetryAt: Schema.optional(Schema.String),\n runtimeState: Schema.optional(Schema.String),\n // Enrichment fields (PAN-440)\n hasPendingQuestion: Schema.optional(Schema.Boolean),\n pendingQuestionCount: Schema.optional(Schema.Number),\n pendingQuestionPrompt: Schema.optional(Schema.String),\n pendingQuestionReason: Schema.optional(Schema.String),\n // PAN-1520 — unified pending-input surfaces. `pendingInputKinds` lists every\n // active blocking surface (askUserQuestion, permissionRequest, exitPlanMode,\n // enterPlanMode, sessionResume). `pendingInputCount` is the count.\n pendingInputCount: Schema.optional(Schema.Number),\n pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),\n // PAN-1520 — payload for an active AskUserQuestion the operator can answer\n // by clicking an option button in the conversation panel.\n pendingAskUserQuestion: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n questions: Schema.Array(Schema.Struct({\n question: Schema.String,\n header: Schema.optional(Schema.String),\n multiSelect: Schema.optional(Schema.Boolean),\n options: Schema.Array(Schema.Struct({\n label: Schema.String,\n description: Schema.optional(Schema.String),\n })),\n })),\n })),\n // PAN-1520 (FR-1) — plan markdown for a pending ExitPlanMode so the operator\n // can approve/reject from a dashboard modal instead of only the terminal.\n pendingProposedPlan: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n plan: Schema.String,\n })),\n resolution: Schema.optional(AgentResolution),\n resolutionCount: Schema.optional(Schema.Number),\n // PAN-800 — bumped on every runtime event so subscribers can cheaply detect\n // a change without diffing the full AgentRuntimeSnapshot.\n runtimeSnapshotSequence: Schema.optional(SequenceNumber),\n})\nexport type AgentSnapshot = typeof AgentSnapshot.Type\n\n// ─── Review / Pipeline ────────────────────────────────────────────────────────\n\nexport const ReviewStatusSnapshot = Schema.Struct({\n issueId: IssueId,\n reviewStatus: Schema.optional(ReviewStatusValue),\n testStatus: Schema.optional(TestStatusValue),\n uatStatus: Schema.optional(UatStatusValue),\n uatNotes: Schema.optional(Schema.String),\n mergeStatus: Schema.optional(MergeStatusValue),\n releaseStatus: Schema.optional(ReleaseStatusValue),\n releaseNotes: Schema.optional(Schema.String),\n verificationStatus: Schema.optional(VerificationStatusValue),\n verificationNotes: Schema.optional(Schema.String),\n verificationCycleCount: Schema.optional(Schema.Number),\n readyForMerge: Schema.optional(Schema.Boolean),\n updatedAt: Schema.optional(Schema.String),\n prUrl: Schema.optional(Schema.String),\n /** Persistent stuck flag — set by divergence guard, cleared by /unstick */\n stuck: Schema.optional(Schema.Boolean),\n stuckReason: Schema.optional(Schema.String),\n stuckAt: Schema.optional(Schema.String),\n stuckDetails: Schema.optional(Schema.String),\n /** Commit SHA at which review passed; deacon uses this to detect new pushes after review */\n reviewedAtCommit: Schema.optional(Schema.String),\n /** Commit SHA at which the pre-review verification gate last passed */\n lastVerifiedCommit: Schema.optional(Schema.String),\n /** Current merge pipeline step (granular visibility for the merge step tracker) */\n mergeStep: Schema.optional(Schema.String),\n /** PAN-699: timestamp when review agents were dispatched */\n reviewSpawnedAt: Schema.optional(Schema.String),\n /** PAN-699: number of test-agent dispatch retries */\n testRetryCount: Schema.optional(Schema.Number),\n /** PAN-794: parallel-review re-dispatch retry counter (current recovery cycle) */\n reviewRetryCount: Schema.optional(Schema.Number),\n /** PAN-796: review auto-requeue count (circuit breaker threshold) */\n autoRequeueCount: Schema.optional(Schema.Number),\n /** PAN-794: ISO timestamp marking the start of the current recovery cycle */\n recoveryStartedAt: Schema.optional(Schema.String),\n /** Human-requested patrol opt-out — when true, Deacon ignores this issue. */\n deaconIgnored: Schema.optional(Schema.Boolean),\n deaconIgnoredAt: Schema.optional(Schema.String),\n deaconIgnoredReason: Schema.optional(Schema.String),\n /** PAN-1691: per-issue auto-merge routing key. undefined = project default, true = auto-merge (fast lane), false = hold for UAT. */\n autoMerge: Schema.optional(Schema.Boolean),\n /** Active review orchestrator tmux session name (e.g. agent-pan-540-review). */\n reviewCoordinatorSessionName: Schema.optional(Schema.String),\n /** Active review sub-role tmux session names (e.g. agent-pan-540-review-correctness). Discovered at emission time. */\n reviewSessionNames: Schema.optional(Schema.Array(Schema.String)),\n /** Per-role review completion status (keyed by role: 'correctness' | 'security' | ...) */\n reviewSubStatuses: Schema.optional(Schema.Record(Schema.String, Schema.Literals([\"running\", \"done\"]))),\n /** PAN-905: queue position in the merge queue */\n queuePosition: Schema.optional(Schema.Number),\n /** PAN-905: currently active specialist (e.g. 'merge-agent') */\n activeSpecialist: Schema.optional(Schema.String),\n /** PAN-905: number of merge retries attempted */\n mergeRetryCount: Schema.optional(Schema.Number),\n /** PAN-905: free-form notes about the merge attempt */\n mergeNotes: Schema.optional(Schema.String),\n /** PAN-905: GitHub-native merge blocker reasons */\n blockerReasons: Schema.optional(Schema.Array(Schema.Struct({\n type: Schema.Literals(['failing_checks', 'merge_conflict', 'unresolved_conversations', 'changes_requested', 'draft_pr', 'not_mergeable']),\n summary: Schema.String,\n details: Schema.optional(Schema.String),\n detectedAt: Schema.String,\n }))),\n})\nexport type ReviewStatusSnapshot = typeof ReviewStatusSnapshot.Type\n\n// ─── Turn Diff ───────────────────────────────────────────────────────────────\n\nexport const TurnDiffFileChange = Schema.Struct({\n path: Schema.String,\n kind: Schema.optional(Schema.String),\n additions: Schema.optional(Schema.Number),\n deletions: Schema.optional(Schema.Number),\n})\nexport type TurnDiffFileChange = typeof TurnDiffFileChange.Type\n\nexport const TurnDiffSummary = Schema.Struct({\n turnId: Schema.String,\n completedAt: Schema.String,\n status: Schema.optional(Schema.String),\n files: Schema.Array(TurnDiffFileChange),\n checkpointRef: Schema.optional(Schema.String),\n assistantMessageId: Schema.optional(Schema.String),\n checkpointTurnCount: Schema.optional(Schema.Number),\n})\nexport type TurnDiffSummary = typeof TurnDiffSummary.Type\n\n// ─── Dashboard Snapshot ──────────────────────────────────────────────────────\n\nexport const ScanProgressSnapshot = Schema.Struct({\n active: Schema.Boolean,\n mode: Schema.Literals(['targeted', 'watched', 'system']),\n dirs: Schema.Array(Schema.String),\n dirsProcessed: Schema.Number,\n dirsTotal: Schema.Number,\n sessionsFound: Schema.Number,\n elapsedMs: Schema.Number,\n inserted: Schema.Number,\n updated: Schema.Number,\n skipped: Schema.Number,\n errors: Schema.Number,\n durationMs: Schema.Number,\n})\nexport type ScanProgressSnapshot = typeof ScanProgressSnapshot.Type\n\nexport const EnrichStatsSnapshot = Schema.Struct({\n processed: Schema.Number,\n totalCost: Schema.Number,\n failures: Schema.Number,\n durationMs: Schema.Number,\n})\nexport type EnrichStatsSnapshot = typeof EnrichStatsSnapshot.Type\n\nexport const EnrichProgressSnapshot = Schema.Struct({\n sessionId: Schema.Number,\n level: Schema.Number,\n model: Schema.String,\n cost: Schema.Number,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n timestamp: Schema.String,\n})\nexport type EnrichProgressSnapshot = typeof EnrichProgressSnapshot.Type\n\nexport const EmbedProgressSnapshot = Schema.Struct({\n sessionId: Schema.Number,\n model: Schema.String,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n timestamp: Schema.String,\n})\nexport type EmbedProgressSnapshot = typeof EmbedProgressSnapshot.Type\n\n// ─── Dashboard Snapshot ──────────────────────────────────────────────────────\n\nexport const DashboardSnapshot = Schema.Struct({\n sequence: SequenceNumber,\n agents: Schema.Array(AgentSnapshot),\n specialists: Schema.Array(Schema.Unknown),\n reviewStatuses: Schema.Array(ReviewStatusSnapshot),\n issues: Schema.Array(Schema.Unknown), // Issues are complex — pass through unvalidated\n recentActivity: Schema.optional(Schema.Array(Schema.Unknown)),\n resources: Schema.optional(Schema.Unknown),\n memory: Schema.optional(Schema.Unknown),\n agentRuntimeById: Schema.optional(Schema.Record(Schema.String, AgentRuntimeSnapshot)),\n channelPermissionRequests: Schema.optional(Schema.Array(ChannelPermissionRequestSnapshot)),\n scanProgress: Schema.optional(Schema.NullOr(ScanProgressSnapshot)),\n enrichStats: Schema.optional(Schema.NullOr(EnrichStatsSnapshot)),\n enrichProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EnrichProgressSnapshot)),\n embedProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EmbedProgressSnapshot)),\n timestamp: Schema.String,\n})\nexport type DashboardSnapshot = typeof DashboardSnapshot.Type\n\n// ─── Workspace Detail ────────────────────────────────────────────────────────\n\nexport const WorkspaceDetail = Schema.Struct({\n workspace: Schema.Unknown,\n reviewStatus: Schema.Unknown,\n planning: Schema.Unknown,\n costs: Schema.Unknown,\n agentOutput: Schema.Array(Schema.String),\n})\nexport type WorkspaceDetail = typeof WorkspaceDetail.Type\n\n// ─── Resource Stats ──────────────────────────────────────────────────────────\n\nexport const ResourceStats = Schema.Struct({\n containers: Schema.Array(Schema.Struct({\n name: Schema.String,\n cpu: Schema.optional(Schema.String),\n mem: Schema.optional(Schema.String),\n status: Schema.optional(Schema.String),\n })),\n})\nexport type ResourceStats = typeof ResourceStats.Type\n\n// ─── Session Tree (PAN-821) ──────────────────────────────────────────────────\n\nexport const SessionNodePresence = Schema.Literals([\"active\", \"idle\", \"suspended\", \"ended\"])\nexport type SessionNodePresence = typeof SessionNodePresence.Type\n\nexport const SessionNodeType = Schema.Literals([\n \"planning\",\n \"work\",\n \"knowledge\",\n \"strike\",\n \"lint\",\n \"review\",\n \"reviewer\",\n \"test\",\n \"ship\",\n \"merge\",\n \"legacy\",\n])\nexport type SessionNodeType = typeof SessionNodeType.Type\n\nexport const ReviewerRoundSummary = Schema.Struct({\n round: Schema.Number,\n status: Schema.optional(Schema.String),\n reviewResult: Schema.optional(Schema.String),\n startedAt: Schema.optional(Schema.String),\n endedAt: Schema.optional(Schema.String),\n durationSec: Schema.optional(Schema.Number),\n cost: Schema.optional(Schema.Number),\n findings: Schema.optional(Schema.Number),\n summary: Schema.optional(Schema.String),\n})\nexport type ReviewerRoundSummary = typeof ReviewerRoundSummary.Type\n\nexport const ReviewerRoundMetadata = Schema.Struct({\n roundCount: Schema.Number,\n latestRound: Schema.Number,\n latestStatus: Schema.optional(Schema.String),\n latestReviewResult: Schema.optional(Schema.String),\n history: Schema.Array(ReviewerRoundSummary),\n})\nexport type ReviewerRoundMetadata = typeof ReviewerRoundMetadata.Type\n\n// One row of a percentage-distribution model origin (PAN-2053). `lo`/`hi` are the\n// half-open bucket band [lo, hi) the entry owns; `chosen` marks the selected one.\nexport const ModelOriginEntry = Schema.Struct({\n model: Schema.String,\n weight: Schema.Number,\n lo: Schema.Number,\n hi: Schema.Number,\n chosen: Schema.Boolean,\n})\nexport type ModelOriginEntry = typeof ModelOriginEntry.Type\n\n// Read-only \"which model & why\" derivation shown in the agent right-click MODEL\n// inspector (PAN-2053). Present only when the agent's role uses a percentage\n// distribution; absent for scalar/single-model roles.\nexport const ModelOrigin = Schema.Struct({\n // The exact spawn key whose bucket selected the model (`${role}:${issueId}`).\n spawnKey: Schema.String,\n // The chosen model id.\n resolved: Schema.String,\n // Deterministic bucket for this key, in [0, total).\n bucket: Schema.Number,\n // Number of buckets = sum of weights (100 when the distribution is percentages).\n total: Schema.Number,\n distribution: Schema.Array(ModelOriginEntry),\n})\nexport type ModelOrigin = typeof ModelOrigin.Type\n\nexport const SessionNode = Schema.Struct({\n type: SessionNodeType,\n role: Schema.optional(Schema.String),\n sessionId: Schema.String,\n tmuxSession: Schema.optional(Schema.String),\n model: Schema.String,\n // Harness that spawned the session (claude-code | pi | codex). Pi/codex run\n // `--mode rpc` with no TUI, so their terminal pane streams raw RPC protocol —\n // the SessionPanel uses this to show a notice instead, and to gate live\n // message streaming. Optional for backward compatibility with older payloads.\n harness: Schema.optional(Schema.String),\n startedAt: Schema.String,\n endedAt: Schema.optional(Schema.String),\n planningComplete: Schema.optional(Schema.Boolean),\n duration: Schema.NullOr(Schema.Number),\n status: AgentStatus,\n hasJsonl: Schema.optional(Schema.Boolean),\n transcript: Schema.optional(Schema.String),\n presence: SessionNodePresence,\n awaitingInput: Schema.optional(Schema.Boolean),\n awaitingInputPrompt: Schema.optional(Schema.String),\n awaitingInputReason: Schema.optional(Schema.String),\n roundMetadata: Schema.optional(ReviewerRoundMetadata),\n deliveryMethod: Schema.optional(Schema.Literals(['auto', 'channels', 'tmux'])),\n // Pause gate (PAN-1779 issue-tree redesign): a paused agent is deliberately\n // suppressed from deacon auto-resume — the tree must show it as paused with\n // the reason, never as a generic \"stopped\".\n paused: Schema.optional(Schema.Boolean),\n pausedReason: Schema.optional(Schema.String),\n pausedAt: Schema.optional(Schema.String),\n // Troubled gate (PAN-2257): message delivery queues mail while this is true,\n // so session-tree rows need the gate state and its queue count.\n troubled: Schema.optional(Schema.Boolean),\n troubledAt: Schema.optional(Schema.String),\n troubledReason: Schema.optional(Schema.String),\n consecutiveFailures: Schema.optional(Schema.Number),\n queuedMailCount: Schema.optional(Schema.Number),\n // PAN-2053: read-only model-origin for the right-click MODEL inspector. Set\n // only when the agent's role uses a weighted model distribution.\n modelOrigin: Schema.optional(ModelOrigin),\n})\nexport type SessionNode = typeof SessionNode.Type\n\nexport const FeatureNode = Schema.Struct({\n issueId: IssueId,\n title: Schema.String,\n sessions: Schema.Array(SessionNode),\n})\nexport type FeatureNode = typeof FeatureNode.Type\n\nexport const ProjectSessionTree = Schema.Struct({\n projectKey: Schema.String,\n features: Schema.Array(FeatureNode),\n})\nexport type ProjectSessionTree = typeof ProjectSessionTree.Type\n\n// ─── Discovered Sessions (PAN-457) ───────────────────────────────────────────\n\n/** Snapshot of a discovered session for RPC responses and frontend display */\nexport const DiscoveredSessionSnapshot = Schema.Struct({\n id: Schema.Number,\n jsonlPath: Schema.String,\n harness: Schema.optional(Schema.String),\n sessionId: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n workspaceHash: Schema.optional(Schema.String),\n messageCount: Schema.Number,\n firstTs: Schema.optional(Schema.String),\n lastTs: Schema.optional(Schema.String),\n modelsUsed: Schema.Array(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n tokenInput: Schema.Number,\n tokenOutput: Schema.Number,\n estimatedCost: Schema.Number,\n toolsUsed: Schema.Array(Schema.String),\n filesTouched: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n summary: Schema.optional(Schema.String),\n summaryDetailed: Schema.optional(Schema.String),\n // Tracked conversation this session belongs to, when the session id matches a\n // conversation in the DB (joined via conversation_files).\n conversationId: Schema.optional(Schema.String),\n conversationName: Schema.optional(Schema.String),\n conversationTitle: Schema.optional(Schema.String),\n enrichmentLevel: Schema.Number,\n enrichmentModel: Schema.optional(Schema.String),\n enrichedAt: Schema.optional(Schema.String),\n enrichmentFailed: Schema.Boolean,\n overdeckManaged: Schema.Boolean,\n panIssueId: Schema.optional(Schema.String),\n panAgentId: Schema.optional(Schema.String),\n scannedAt: Schema.String,\n})\nexport type DiscoveredSessionSnapshot = typeof DiscoveredSessionSnapshot.Type\n\n// ─── Unified Sessions Feed (PAN-1917) ────────────────────────────────────────\n\nexport const SessionsFeedSource = Schema.Literals(['discovered', 'managed-archived'])\nexport type SessionsFeedSource = typeof SessionsFeedSource.Type\n\nexport const SessionsFeedRowSnapshot = Schema.Struct({\n id: Schema.Number,\n source: SessionsFeedSource,\n discoveredId: Schema.optional(Schema.Number),\n jsonlPath: Schema.optional(Schema.String),\n sessionId: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n messageCount: Schema.Number,\n firstTs: Schema.optional(Schema.String),\n lastTs: Schema.optional(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n tokenInput: Schema.Number,\n tokenOutput: Schema.Number,\n estimatedCost: Schema.Number,\n tags: Schema.Array(Schema.String),\n summary: Schema.optional(Schema.String),\n enrichmentLevel: Schema.Number,\n enrichmentFailed: Schema.Boolean,\n overdeckManaged: Schema.Boolean,\n panIssueId: Schema.optional(Schema.String),\n archivedAt: Schema.optional(Schema.String),\n conversationId: Schema.optional(Schema.String),\n conversationName: Schema.optional(Schema.String),\n conversationTitle: Schema.optional(Schema.String),\n harness: Schema.optional(Schema.String),\n})\nexport type SessionsFeedRowSnapshot = typeof SessionsFeedRowSnapshot.Type\n\nconst SessionsFeedFacetBucketString = Schema.Struct({\n value: Schema.String,\n count: Schema.Number,\n})\n\nconst SessionsFeedFacetBucketNumber = Schema.Struct({\n value: Schema.Number,\n count: Schema.Number,\n})\n\nexport const SessionsFeedFacetsSnapshot = Schema.Struct({\n primaryModels: Schema.Array(SessionsFeedFacetBucketString),\n tags: Schema.Array(SessionsFeedFacetBucketString),\n tools: Schema.Array(SessionsFeedFacetBucketString),\n files: Schema.Array(SessionsFeedFacetBucketString),\n enrichmentLevels: Schema.Array(SessionsFeedFacetBucketNumber),\n timeBuckets: Schema.Array(Schema.Struct({\n value: Schema.Literals(['24h', '7d', '30d', 'older']),\n count: Schema.Number,\n })),\n costBuckets: Schema.Array(Schema.Struct({\n value: Schema.Literals(['<$0.10', '$0.10-1', '$1-10', '>$10']),\n count: Schema.Number,\n })),\n sources: Schema.Array(Schema.Struct({\n value: SessionsFeedSource,\n count: Schema.Number,\n })),\n})\nexport type SessionsFeedFacetsSnapshot = typeof SessionsFeedFacetsSnapshot.Type\n\n/** Filter parameters for conversation search */\nexport const ConversationFilter = Schema.Struct({\n harness: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n managed: Schema.optional(Schema.Boolean),\n unmanaged: Schema.optional(Schema.Boolean),\n since: Schema.optional(Schema.String),\n before: Schema.optional(Schema.String),\n after: Schema.optional(Schema.String),\n minCost: Schema.optional(Schema.Number),\n maxCost: Schema.optional(Schema.Number),\n minMessages: Schema.optional(Schema.Number),\n tags: Schema.optional(Schema.Array(Schema.String)),\n tools: Schema.optional(Schema.Array(Schema.String)),\n files: Schema.optional(Schema.Array(Schema.String)),\n issueId: Schema.optional(Schema.String),\n enrichmentLevel: Schema.optional(Schema.Number),\n enriched: Schema.optional(Schema.Boolean),\n notEnriched: Schema.optional(Schema.Boolean),\n query: Schema.optional(Schema.String),\n semantic: Schema.optional(Schema.Boolean),\n similarTo: Schema.optional(Schema.Number),\n limit: Schema.optional(Schema.Number),\n offset: Schema.optional(Schema.Number),\n format: Schema.optional(Schema.Literals(['table', 'json', 'brief', 'ids'])),\n})\nexport type ConversationFilter = typeof ConversationFilter.Type\n\n/** Aggregate cost breakdown for conversations */\nexport const ConversationCostSummary = Schema.Struct({\n groupBy: Schema.Literals(['workspace', 'model', 'day', 'month']),\n entries: Schema.Array(Schema.Struct({\n key: Schema.String,\n totalCost: Schema.Number,\n sessionCount: Schema.Number,\n totalTokensIn: Schema.Number,\n totalTokensOut: Schema.Number,\n })),\n grandTotal: Schema.Number,\n totalTokensIn: Schema.Number,\n totalTokensOut: Schema.Number,\n})\nexport type ConversationCostSummary = typeof ConversationCostSummary.Type\n\n/** Scan result summary */\nexport const ScanResult = Schema.Struct({\n inserted: Schema.Number,\n updated: Schema.Number,\n skipped: Schema.Number,\n errors: Schema.Number,\n durationMs: Schema.Number,\n})\nexport type ScanResult = typeof ScanResult.Type\n","import { Schema } from \"effect\"\nimport { IssueId, Role } from \"./types\"\n\nexport const MemoryIdentity = Schema.Struct({\n projectId: Schema.String,\n workspaceId: Schema.String,\n issueId: IssueId,\n runId: Schema.String,\n sessionId: Schema.String,\n agentRole: Role,\n agentHarness: Schema.String,\n})\nexport type MemoryIdentity = typeof MemoryIdentity.Type\n\nexport const MemoryTokenUsage = Schema.Struct({\n prompt: Schema.Number,\n completion: Schema.Number,\n total: Schema.Number,\n})\nexport type MemoryTokenUsage = typeof MemoryTokenUsage.Type\n\nexport const MemoryObservation = Schema.Struct({\n id: Schema.String,\n timestamp: Schema.String,\n projectId: Schema.String,\n workspaceId: Schema.String,\n issueId: IssueId,\n runId: Schema.String,\n sessionId: Schema.String,\n agentRole: Role,\n agentHarness: Schema.String,\n gitBranch: Schema.String,\n sourceTranscriptOffset: Schema.Number,\n actionStatus: Schema.NullOr(Schema.String),\n narrative: Schema.String,\n summary: Schema.String,\n files: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n tokens: MemoryTokenUsage,\n model: Schema.String,\n})\nexport type MemoryObservation = typeof MemoryObservation.Type\n\nexport const MemoryStatusPhase = Schema.Literals([\n \"exploring\",\n \"planning\",\n \"building\",\n \"verifying\",\n \"cleaning\",\n \"shipping\",\n])\nexport type MemoryStatusPhase = typeof MemoryStatusPhase.Type\n\nexport const MemoryStatus = Schema.Struct({\n name: Schema.String,\n headline: Schema.String,\n summary: Schema.String,\n goal: Schema.NullOr(Schema.String),\n phase: MemoryStatusPhase,\n accomplished: Schema.Array(Schema.String),\n decided: Schema.Array(Schema.String),\n open: Schema.Array(Schema.String),\n nextSteps: Schema.Array(Schema.String),\n confidence: Schema.Number,\n workingSet: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n})\nexport type MemoryStatus = typeof MemoryStatus.Type\n\nexport const PendingTurn = Schema.Struct({\n id: Schema.String,\n createdAt: Schema.String,\n identity: MemoryIdentity,\n trigger: Schema.Literals([\"stop-hook\", \"poller\", \"reconciliation\", \"manual\"]),\n transcriptPath: Schema.String,\n fromOffset: Schema.Number,\n toOffset: Schema.Number,\n lastFullLineOffset: Schema.Number,\n eventsConsumed: Schema.Number,\n compressedText: Schema.String,\n})\nexport type PendingTurn = typeof PendingTurn.Type\n\nexport const ResetMarkerScope = Schema.Literals([\"project\", \"workspace\", \"issue\", \"session\"])\nexport type ResetMarkerScope = typeof ResetMarkerScope.Type\n\nexport const ResetMarker = Schema.Struct({\n id: Schema.String,\n scope: ResetMarkerScope,\n scopeId: Schema.String,\n fromTimestamp: Schema.String,\n reason: Schema.String,\n createdAt: Schema.String,\n})\nexport type ResetMarker = typeof ResetMarker.Type\n\nexport const RagDecisionSource = Schema.Struct({\n id: Schema.String,\n docType: Schema.Literals([\"observation\", \"summary\", \"status\", \"sibling\", \"knowledge\"]),\n scope: Schema.String,\n score: Schema.Number,\n tokens: Schema.Number,\n})\nexport type RagDecisionSource = typeof RagDecisionSource.Type\n\nexport const RagDecision = Schema.Struct({\n id: Schema.String,\n timestamp: Schema.String,\n identity: MemoryIdentity,\n surface: Schema.Literals([\"spawn\", \"user-prompt\"]),\n outcome: Schema.Literals([\n \"injected\",\n \"skipped\",\n \"no-hits\",\n \"expansion-failed\",\n \"context-too-large\",\n \"budget-truncated\",\n ]),\n query: Schema.String,\n expandedTerms: Schema.Array(Schema.String),\n allocations: Schema.Struct({\n status: Schema.Number,\n observations: Schema.Number,\n summaries: Schema.Number,\n sibling: Schema.Number,\n knowledgeIndex: Schema.Number,\n }),\n sources: Schema.Array(RagDecisionSource),\n reason: Schema.NullOr(Schema.String),\n})\nexport type RagDecision = typeof RagDecision.Type\n\nexport const ExtractionProviderTarget = Schema.Struct({\n provider: Schema.String,\n model: Schema.String,\n})\nexport type ExtractionProviderTarget = typeof ExtractionProviderTarget.Type\n\nexport const ExtractionProviderConfig = Schema.Struct({\n provider: Schema.String,\n model: Schema.String,\n providerEnvVar: Schema.optional(Schema.String),\n modelEnvVar: Schema.optional(Schema.String),\n perDayCostCapUsd: Schema.Number,\n fallbackChain: Schema.Array(ExtractionProviderTarget),\n})\nexport type ExtractionProviderConfig = typeof ExtractionProviderConfig.Type\n","import { Schema } from \"effect\"\nimport {\n Activity,\n AgentChannelReply,\n AgentId,\n AgentResolution,\n AgentRuntimeSnapshot,\n AgentSnapshot,\n AgentStatus,\n ChannelPermissionRequestSnapshot,\n ClaudeChannelPermissionBehavior,\n IssueId,\n ResourceStats,\n ReviewStatusSnapshot,\n Role,\n SequenceNumber,\n WaitingReason,\n} from \"./types\"\nimport {\n MemoryObservation,\n MemoryStatus,\n RagDecision,\n ResetMarker,\n} from \"./memory\"\n\n// ─── System Events ────────────────────────────────────────────────────────────\n\n/** App-level liveness frame for the /ws/rpc domain-events stream. */\nexport const SystemHeartbeatEvent = Schema.Struct({\n type: Schema.Literal(\"system.heartbeat\"),\n timestamp: Schema.String,\n payload: Schema.Struct({ ts: Schema.Number }),\n})\nexport type SystemHeartbeatEvent = typeof SystemHeartbeatEvent.Type\n\n/** The canonical local Dolt head advanced after a background remote pull. */\nexport const BeadsFreshnessChangedEvent = Schema.Struct({\n type: Schema.Literal(\"beads.freshness_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n projectKey: Schema.String,\n localHead: Schema.String,\n lastSyncedAt: Schema.String,\n }),\n})\nexport type BeadsFreshnessChangedEvent = typeof BeadsFreshnessChangedEvent.Type\n\n// ─── Agent Events ─────────────────────────────────────────────────────────────\n\n/** Replaces socket.io `agents:changed` (event: 'started') */\nexport const AgentStartedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: IssueId, agent: AgentSnapshot }),\n})\nexport type AgentStartedEvent = typeof AgentStartedEvent.Type\n\n/** Replaces socket.io `agents:changed` (event: 'stopped') */\nexport const AgentStoppedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.stopped\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: IssueId, sessionId: Schema.optional(Schema.String) }),\n})\nexport type AgentStoppedEvent = typeof AgentStoppedEvent.Type\n\nexport const AgentHeartbeatDeadEvent = Schema.Struct({\n type: Schema.Literal(\"agent.heartbeat_dead\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: Schema.optional(IssueId), sessionId: Schema.optional(Schema.String) }),\n})\nexport type AgentHeartbeatDeadEvent = typeof AgentHeartbeatDeadEvent.Type\n\n/** Role lifecycle — work agent completed implementation and is ready for review. */\nexport const WorkCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"work.completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, agentId: Schema.optional(AgentId) }),\n})\nexport type WorkCompletedEvent = typeof WorkCompletedEvent.Type\n\n/** Role lifecycle — generic agent completion signal, normalized by Cloister by role. */\nexport const AgentCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, agentId: Schema.optional(AgentId), role: Schema.optional(Role) }),\n})\nexport type AgentCompletedEvent = typeof AgentCompletedEvent.Type\n\n/** Role lifecycle — review approved the branch and testing should start. */\nexport const ReviewApprovedEvent = Schema.Struct({\n type: Schema.Literal(\"review.approved\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type ReviewApprovedEvent = typeof ReviewApprovedEvent.Type\n\n/** Role lifecycle — tests passed and shipping should prepare the branch. */\nexport const TestPassedEvent = Schema.Struct({\n type: Schema.Literal(\"test.passed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type TestPassedEvent = typeof TestPassedEvent.Type\n\n/** Replaces socket.io `godview:status-change` */\nexport const AgentStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n issueId: Schema.optional(IssueId),\n status: AgentStatus,\n previousStatus: Schema.optional(AgentStatus),\n hasLiveTmuxSession: Schema.optional(Schema.Boolean),\n stoppedByUser: Schema.optional(Schema.Boolean),\n stoppedByPause: Schema.optional(Schema.Boolean),\n paused: Schema.optional(Schema.Boolean),\n pausedReason: Schema.optional(Schema.NullOr(Schema.String)),\n pausedAt: Schema.optional(Schema.NullOr(Schema.String)),\n troubled: Schema.optional(Schema.Boolean),\n troubledAt: Schema.optional(Schema.NullOr(Schema.String)),\n consecutiveFailures: Schema.optional(Schema.Number),\n firstFailureInRunAt: Schema.optional(Schema.NullOr(Schema.String)),\n lastFailureAt: Schema.optional(Schema.NullOr(Schema.String)),\n lastFailureReason: Schema.optional(Schema.NullOr(Schema.String)),\n lastFailureNextRetryAt: Schema.optional(Schema.NullOr(Schema.String)),\n kickoffDelivered: Schema.optional(Schema.Boolean),\n hostOverride: Schema.optional(Schema.Boolean),\n role: Schema.optional(Role),\n model: Schema.optional(Schema.String),\n workspace: Schema.optional(Schema.String),\n sessionId: Schema.optional(Schema.String),\n lastActivity: Schema.optional(Schema.String),\n lastResumeAt: Schema.optional(Schema.String),\n stoppedAt: Schema.optional(Schema.String),\n branch: Schema.optional(Schema.String),\n costSoFar: Schema.optional(Schema.Number),\n phase: Schema.optional(Schema.String),\n workType: Schema.optional(Schema.String),\n roleRunHead: Schema.optional(Schema.String),\n flywheelRunId: Schema.optional(Schema.String),\n reviewSubRole: Schema.optional(Schema.String),\n reviewRunId: Schema.optional(Schema.String),\n reviewOutputPath: Schema.optional(Schema.String),\n reviewSynthesisAgentId: Schema.optional(Schema.String),\n reviewDeadlineAt: Schema.optional(Schema.String),\n reviewMonitorSignaled: Schema.optional(Schema.String),\n reviewRetryAttempt: Schema.optional(Schema.Number),\n inspectSubRole: Schema.optional(Schema.String),\n deliveryMethod: Schema.optional(Schema.String),\n supervisorEnabled: Schema.optional(Schema.Boolean),\n channelsEnabled: Schema.optional(Schema.Boolean),\n }),\n})\nexport type AgentStatusChangedEvent = typeof AgentStatusChangedEvent.Type\n\n/** Replaces socket.io `godview:agent-output` */\nexport const AgentOutputReceivedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.output_received\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, lines: Schema.Array(Schema.String) }),\n})\nexport type AgentOutputReceivedEvent = typeof AgentOutputReceivedEvent.Type\n\n/** New — agent enrichment fields updated (PAN-440) */\nexport const AgentEnrichmentChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.enrichment_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n role: Schema.optional(Role),\n // Optional because this event type predates these fields (PAN-440). The event\n // store is append-only, so older persisted events lack them — a required schema\n // makes those events fail replay decode (\"Missing key\").\n hasPendingQuestion: Schema.optional(Schema.Boolean),\n pendingQuestionCount: Schema.optional(Schema.Number),\n pendingQuestionPrompt: Schema.optional(Schema.String),\n pendingQuestionReason: Schema.optional(Schema.String),\n // PAN-1520 — unified pending-input surfaces\n pendingInputCount: Schema.optional(Schema.Number),\n pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),\n pendingAskUserQuestion: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n questions: Schema.Array(Schema.Struct({\n question: Schema.String,\n header: Schema.optional(Schema.String),\n multiSelect: Schema.optional(Schema.Boolean),\n options: Schema.Array(Schema.Struct({\n label: Schema.String,\n description: Schema.optional(Schema.String),\n })),\n })),\n })),\n // PAN-1520 (FR-1) — pending ExitPlanMode plan payload for the approval modal.\n pendingProposedPlan: Schema.optional(Schema.Struct({\n toolUseId: Schema.String,\n askedAt: Schema.String,\n plan: Schema.String,\n })),\n resolution: Schema.optional(AgentResolution),\n resolutionCount: Schema.optional(Schema.Number),\n }),\n})\nexport type AgentEnrichmentChangedEvent = typeof AgentEnrichmentChangedEvent.Type\n\n/** New — agent created in database */\nexport const AgentCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ agentId: AgentId, issueId: IssueId, agent: AgentSnapshot }),\n})\nexport type AgentCreatedEvent = typeof AgentCreatedEvent.Type\n\n// ─── Agent Runtime Events (PAN-800) ───────────────────────────────────────────\n// Canonical per-tool-call runtime signals. Fold into ReadModelState.agentRuntimeById\n// via the shared reducer. Server AgentStateService ref is derived from the same fold.\n\nexport const AgentActivityChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.activity_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n activity: Activity,\n currentTool: Schema.optional(Schema.String),\n }),\n})\nexport type AgentActivityChangedEvent = typeof AgentActivityChangedEvent.Type\n\nexport const AgentThinkingStartedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.thinking_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n lastToolAt: Schema.String,\n }),\n})\nexport type AgentThinkingStartedEvent = typeof AgentThinkingStartedEvent.Type\n\nexport const AgentThinkingStoppedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.thinking_stopped\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n resolvedBy: Schema.Literals([\"tool\", \"waiting\", \"idle\", \"stopped\"]),\n }),\n})\nexport type AgentThinkingStoppedEvent = typeof AgentThinkingStoppedEvent.Type\n\nexport const AgentWaitingStartedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.waiting_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n reason: WaitingReason,\n message: Schema.optional(Schema.String),\n }),\n})\nexport type AgentWaitingStartedEvent = typeof AgentWaitingStartedEvent.Type\n\nexport const AgentWaitingClearedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.waiting_cleared\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n clearedBy: Schema.Literals([\"user_response\", \"timeout\", \"stopped\", \"tool_resumed\"]),\n }),\n})\nexport type AgentWaitingClearedEvent = typeof AgentWaitingClearedEvent.Type\n\nexport const AgentPermissionRequestedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.permission_requested\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: ChannelPermissionRequestSnapshot,\n})\nexport type AgentPermissionRequestedEvent = typeof AgentPermissionRequestedEvent.Type\n\nexport const AgentPermissionResolvedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.permission_resolved\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n requestId: Schema.String,\n agentId: AgentId,\n issueId: Schema.optional(IssueId),\n behavior: ClaudeChannelPermissionBehavior,\n }),\n})\nexport type AgentPermissionResolvedEvent = typeof AgentPermissionResolvedEvent.Type\n\nexport const AgentMessageReceivedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.message_received\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n direction: Schema.Literals([\"to_agent\", \"from_agent\"]),\n source: Schema.Literals([\"user\", \"cloister\", \"specialist\", \"automated\"]),\n }),\n})\nexport type AgentMessageReceivedEvent = typeof AgentMessageReceivedEvent.Type\n\nexport const AgentChannelReplyEvent = Schema.Struct({\n type: Schema.Literal(\"agent.channel_reply\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n reply: AgentChannelReply,\n }),\n})\nexport type AgentChannelReplyEvent = typeof AgentChannelReplyEvent.Type\n\nexport const AgentModelSetEvent = Schema.Struct({\n type: Schema.Literal(\"agent.model_set\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n model: Schema.String,\n claudeSessionId: Schema.optional(Schema.String),\n sessionModel: Schema.optional(Schema.String),\n sessionHarness: Schema.optional(Schema.String),\n }),\n})\nexport type AgentModelSetEvent = typeof AgentModelSetEvent.Type\n\nexport const AgentCurrentIssueSetEvent = Schema.Struct({\n type: Schema.Literal(\"agent.current_issue_set\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n currentIssue: Schema.optional(IssueId),\n }),\n})\nexport type AgentCurrentIssueSetEvent = typeof AgentCurrentIssueSetEvent.Type\n\nexport const AgentContextSaturationChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.context_saturation_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n contextSaturatedAt: Schema.optional(Schema.String),\n }),\n})\nexport type AgentContextSaturationChangedEvent = typeof AgentContextSaturationChangedEvent.Type\n\nexport const AgentResolutionChangedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.resolution_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n resolution: AgentResolution,\n resolutionCount: Schema.Number,\n }),\n})\nexport type AgentResolutionChangedEvent = typeof AgentResolutionChangedEvent.Type\n\n/**\n * Bootstrap-only event emitted by AgentStateService when it seeds a runtime\n * snapshot during bootstrap (reconstruction from sources, PAN-1920). Not\n * emitted by hooks.\n */\nexport const AgentStateRestoredEvent = Schema.Struct({\n type: Schema.Literal(\"agent.state_restored\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n snapshot: AgentRuntimeSnapshot,\n }),\n})\nexport type AgentStateRestoredEvent = typeof AgentStateRestoredEvent.Type\n\n/** Emitted when a turn diff checkpoint is captured and diff computed */\nexport const AgentTurnDiffCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"agent.turn_diff_completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n turnId: Schema.String,\n completedAt: Schema.String,\n files: Schema.Array(Schema.Struct({\n path: Schema.String,\n kind: Schema.optional(Schema.String),\n additions: Schema.optional(Schema.Number),\n deletions: Schema.optional(Schema.Number),\n })),\n checkpointRef: Schema.optional(Schema.String),\n assistantMessageId: Schema.optional(Schema.String),\n checkpointTurnCount: Schema.optional(Schema.Number),\n }),\n})\nexport type AgentTurnDiffCompletedEvent = typeof AgentTurnDiffCompletedEvent.Type\n\n// ─── Planning Events ──────────────────────────────────────────────────────────\n\n/** Replaces socket.io `planning:started` */\nexport const PlanningStartedEvent = Schema.Struct({\n type: Schema.Literal(\"planning.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, sessionName: Schema.String, harness: Schema.optional(Schema.String) }),\n})\nexport type PlanningStartedEvent = typeof PlanningStartedEvent.Type\n\n/** Replaces socket.io `planning:failed` */\nexport const PlanningFailedEvent = Schema.Struct({\n type: Schema.Literal(\"planning.failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, error: Schema.String }),\n})\nexport type PlanningFailedEvent = typeof PlanningFailedEvent.Type\n\n/** Replaces socket.io `planning:sync` */\nexport const PlanningSyncEvent = Schema.Struct({\n type: Schema.Literal(\"planning.sync\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n status: Schema.String,\n progress: Schema.optional(Schema.Number),\n message: Schema.optional(Schema.String),\n }),\n})\nexport type PlanningSyncEvent = typeof PlanningSyncEvent.Type\n\n// ─── Plan Item Events ─────────────────────────────────────────────────────────\n\n/** Replaces socket.io `plan:item-status-changed` */\nexport const PlanItemStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"plan.item_status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, itemId: Schema.String, status: Schema.String }),\n})\nexport type PlanItemStatusChangedEvent = typeof PlanItemStatusChangedEvent.Type\n\n/** Replaces socket.io `plan:subitem-status-changed` */\nexport const PlanSubitemStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"plan.subitem_status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n itemId: Schema.String,\n subItemId: Schema.String,\n status: Schema.String,\n }),\n})\nexport type PlanSubitemStatusChangedEvent = typeof PlanSubitemStatusChangedEvent.Type\n\n/** Replaces socket.io `plan:items-unblocked` */\nexport const PlanItemsUnblockedEvent = Schema.Struct({\n type: Schema.Literal(\"plan.items_unblocked\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, items: Schema.Array(Schema.String) }),\n})\nexport type PlanItemsUnblockedEvent = typeof PlanItemsUnblockedEvent.Type\n\n// ─── Pipeline / Merge Events ──────────────────────────────────────────────────\n\n/** Replaces socket.io `pipeline:status` */\nexport const PipelineStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, status: ReviewStatusSnapshot }),\n})\nexport type PipelineStatusChangedEvent = typeof PipelineStatusChangedEvent.Type\n\n/** Replaces socket.io `merge:ready` */\nexport const MergeReadyEvent = Schema.Struct({\n type: Schema.Literal(\"merge.ready\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type MergeReadyEvent = typeof MergeReadyEvent.Type\n\n/** New — review status changed */\nexport const ReviewStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"review.status_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, status: ReviewStatusSnapshot }),\n})\nexport type ReviewStatusChangedEvent = typeof ReviewStatusChangedEvent.Type\n\n/** New — review specialist dispatched */\nexport const PipelineReviewStartedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.review-started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type PipelineReviewStartedEvent = typeof PipelineReviewStartedEvent.Type\n\n/** New — review specialist finished (passed or failed) */\nexport const PipelineReviewCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.review-completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, passed: Schema.Boolean }),\n})\nexport type PipelineReviewCompletedEvent = typeof PipelineReviewCompletedEvent.Type\n\n/** New — test specialist dispatched */\nexport const PipelineTestStartedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.test-started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type PipelineTestStartedEvent = typeof PipelineTestStartedEvent.Type\n\n/** New — test specialist finished (passed or failed) */\nexport const PipelineTestCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.test-completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, passed: Schema.Boolean }),\n})\nexport type PipelineTestCompletedEvent = typeof PipelineTestCompletedEvent.Type\n\n/** New — verification gate dispatched (review-pipeline verify step) */\nexport const PipelineVerificationStartedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.verification-started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type PipelineVerificationStartedEvent = typeof PipelineVerificationStartedEvent.Type\n\n/** New — verification gate failed (carries failedCheck for gate failures, message for infra errors) */\nexport const PipelineVerificationFailedEvent = Schema.Struct({\n type: Schema.Literal(\"pipeline.verification-failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n failedCheck: Schema.optional(Schema.String),\n message: Schema.optional(Schema.String),\n }),\n})\nexport type PipelineVerificationFailedEvent = typeof PipelineVerificationFailedEvent.Type\n\n/** New — issue lifecycle transition (single source: IssueLifecycle.transitionTo).\n * `state` stays an open string so new server-side lifecycle states can never\n * poison the domain-event stream (the failure mode behind this event's addition). */\nexport const IssueTransitionedEvent = Schema.Struct({\n type: Schema.Literal(\"issue.transitioned\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, state: Schema.String }),\n})\nexport type IssueTransitionedEvent = typeof IssueTransitionedEvent.Type\n\nexport const OperatorInterventionEvent = Schema.Struct({\n type: Schema.Literal(\"operator.intervention\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n kind: Schema.Literals([\"tell\", \"pause\", \"restart\", \"manual_edit\", \"deep_wipe\", \"unpause\", \"untroubled\"]),\n source: Schema.String,\n }),\n})\nexport type OperatorInterventionEvent = typeof OperatorInterventionEvent.Type\n\nexport const SubstrateBugFiledEvent = Schema.Struct({\n type: Schema.Literal(\"substrate.bug_filed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n runId: Schema.optional(Schema.String),\n filedBy: Schema.Literals([\"agent\", \"operator\"]),\n discoveredIn: Schema.optional(IssueId),\n severity: Schema.Literals([\"P0\", \"P1\", \"P2\"]),\n }),\n})\nexport type SubstrateBugFiledEvent = typeof SubstrateBugFiledEvent.Type\n\n/**\n * PAN-915 — reviewer session received a new prompt (spawn or resume of a\n * canonical PAN-830 session). Drives event-driven `reviewSubStatuses[role] =\n * 'running'` and tracking of `reviewSessionNames` without polling tmux.\n */\nexport const ReviewReviewerStartedEvent = Schema.Struct({\n type: Schema.Literal(\"review.reviewer_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n role: Schema.String,\n sessionName: Schema.String,\n }),\n})\nexport type ReviewReviewerStartedEvent = typeof ReviewReviewerStartedEvent.Type\n\n/**\n * PAN-915 — reviewer wrote its output file (round complete for that role).\n * Updates `reviewSubStatuses[role] = 'done'` event-driven.\n */\nexport const ReviewReviewerCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"review.reviewer_completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n role: Schema.String,\n }),\n})\nexport type ReviewReviewerCompletedEvent = typeof ReviewReviewerCompletedEvent.Type\n\n/**\n * Review specialist timeout telemetry. Emitted once per timed-out reviewer wait\n * attempt so operators can distinguish transient auto-retries from terminal\n * review failures.\n */\nexport const ReviewSpecialistTimedOutEvent = Schema.Struct({\n type: Schema.Literal(\"review.specialist.timed_out\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n role: Schema.String,\n sessionName: Schema.String,\n attempt: Schema.Number,\n maxRetries: Schema.Number,\n willRetry: Schema.Boolean,\n }),\n})\nexport type ReviewSpecialistTimedOutEvent = typeof ReviewSpecialistTimedOutEvent.Type\n\n/**\n * PAN-915 — review coordinator session spawned. Surfaces in the dashboard so\n * the kanban card can show \"review in progress\" the instant the coordinator\n * starts, not after the first reviewer finishes.\n */\nexport const ReviewCoordinatorStartedEvent = Schema.Struct({\n type: Schema.Literal(\"review.coordinator_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n sessionName: Schema.String,\n }),\n})\nexport type ReviewCoordinatorStartedEvent = typeof ReviewCoordinatorStartedEvent.Type\n\n/** Review coordinator died before writing a terminal exit marker. */\nexport const ReviewCoordinatorDiedEvent = Schema.Struct({\n type: Schema.Literal(\"review.coordinator.died\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n sessionName: Schema.String,\n reason: Schema.String,\n }),\n})\nexport type ReviewCoordinatorDiedEvent = typeof ReviewCoordinatorDiedEvent.Type\n\n// ─── Specialist Events ────────────────────────────────────────────────────────\n\nconst SpecialistLifecycleState = Schema.Literals([\"active\", \"sleeping\", \"uninitialized\"])\n\n/** New — role-backed specialist became active */\nexport const SpecialistStartedEvent = Schema.Struct({\n type: Schema.Literal(\"specialist.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n name: Role,\n state: SpecialistLifecycleState,\n isRunning: Schema.Boolean,\n currentIssue: Schema.optional(Schema.String),\n lastWake: Schema.optional(Schema.String),\n }),\n})\nexport type SpecialistStartedEvent = typeof SpecialistStartedEvent.Type\n\n/** New — role-backed specialist completed work */\nexport const SpecialistCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"specialist.completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ name: Role, issueId: Schema.optional(IssueId) }),\n})\nexport type SpecialistCompletedEvent = typeof SpecialistCompletedEvent.Type\n\n/** New — role-backed specialist failed */\nexport const SpecialistFailedEvent = Schema.Struct({\n type: Schema.Literal(\"specialist.failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n name: Role,\n issueId: Schema.optional(IssueId),\n error: Schema.String,\n }),\n})\nexport type SpecialistFailedEvent = typeof SpecialistFailedEvent.Type\n\n// ─── Resource Events ──────────────────────────────────────────────────────────\n\n/** Replaces socket.io `resources:updated` */\nexport const ResourcesUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"resources.updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ resources: ResourceStats }),\n})\nexport type ResourcesUpdatedEvent = typeof ResourcesUpdatedEvent.Type\n\nexport const SystemHealthSeverityChangedEvent = Schema.Struct({\n type: Schema.Literal(\"system.health_severity_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n previousSeverity: Schema.String,\n severity: Schema.String,\n reasons: Schema.Array(Schema.String),\n leakedSpecialistCount: Schema.Number,\n }),\n})\nexport type SystemHealthSeverityChangedEvent = typeof SystemHealthSeverityChangedEvent.Type\n\n// ─── Issue Events ─────────────────────────────────────────────────────────────\n\n/** Replaces socket.io `issues:snapshot` */\nexport const IssuesSnapshotEvent = Schema.Struct({\n type: Schema.Literal(\"issues.snapshot\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issues: Schema.Array(Schema.Unknown) }),\n})\nexport type IssuesSnapshotEvent = typeof IssuesSnapshotEvent.Type\n\n/** Replaces socket.io `issues:updated` */\nexport const IssuesUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"issues.updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: Schema.optional(IssueId) }),\n})\nexport type IssuesUpdatedEvent = typeof IssuesUpdatedEvent.Type\n\n/** Patch a single issue's status in the read model without a full snapshot refresh. */\nexport const IssueStatusChangedEvent = Schema.Struct({\n type: Schema.Literal(\"issue.statusChanged\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n issueId: IssueId,\n status: Schema.String,\n canonicalStatus: Schema.String,\n labels: Schema.optional(Schema.Array(Schema.String)),\n }),\n})\nexport type IssueStatusChangedEvent = typeof IssueStatusChangedEvent.Type\n\n// ─── Activity Events ──────────────────────────────────────────────────────────\n\n/** Replaces socket.io `godview:activity` */\nexport const ActivityUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"activity.updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ events: Schema.Array(Schema.Unknown) }),\n})\nexport type ActivityUpdatedEvent = typeof ActivityUpdatedEvent.Type\n\n/** Individual activity log entry — emitted by merge-agent, cloister, specialists (PAN-520) */\nexport const ActivityEntryEvent = Schema.Struct({\n type: Schema.Literal(\"activity.entry\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n id: Schema.String,\n source: Schema.String,\n level: Schema.String,\n message: Schema.String,\n details: Schema.optional(Schema.String),\n issueId: Schema.optional(IssueId),\n /** Dashboard route the feed navigates to on click (e.g. /conv/<name>, /flywheel). */\n link: Schema.optional(Schema.String),\n /** PAN-1862 (FR-12): fire a desktop notification for this entry (operator-facing warnings). */\n desktop: Schema.optional(Schema.Boolean),\n }),\n})\nexport type ActivityEntryEvent = typeof ActivityEntryEvent.Type\n\n/** Detailed activity log — auto-generated from domain state changes */\nexport const ActivityDetailedEvent = Schema.Struct({\n type: Schema.Literal(\"activity.detailed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n id: Schema.String,\n source: Schema.String,\n level: Schema.String,\n message: Schema.String,\n details: Schema.optional(Schema.String),\n issueId: Schema.optional(IssueId),\n triggeringEvent: Schema.optional(Schema.String),\n }),\n})\nexport type ActivityDetailedEvent = typeof ActivityDetailedEvent.Type\n\n/** TTS activity log — upleveled utterances for text-to-speech */\nexport const ActivityTtsEvent = Schema.Struct({\n type: Schema.Literal(\"activity.tts\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n id: Schema.String,\n utterance: Schema.String,\n priority: Schema.optional(Schema.Number),\n issueId: Schema.optional(IssueId),\n source: Schema.optional(Schema.String),\n eventType: Schema.optional(Schema.String),\n }),\n})\nexport type ActivityTtsEvent = typeof ActivityTtsEvent.Type\n\n// ─── Dashboard Lifecycle Events ─────────────────────────────────────────────────\n\n/** Dashboard is restarting (post-merge deploy, pan restart, etc.) (PAN-520) */\nexport const DashboardLifecycleStartedEvent = Schema.Struct({\n type: Schema.Literal(\"dashboard.lifecycle_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n reason: Schema.String,\n issueId: Schema.optional(IssueId),\n trigger: Schema.String,\n }),\n})\nexport type DashboardLifecycleStartedEvent = typeof DashboardLifecycleStartedEvent.Type\n\n/** Dashboard restarted successfully after a lifecycle event (PAN-520) */\nexport const DashboardLifecycleCompletedEvent = Schema.Struct({\n type: Schema.Literal(\"dashboard.lifecycle_completed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n reason: Schema.String,\n issueId: Schema.optional(IssueId),\n durationMs: Schema.Number,\n }),\n})\nexport type DashboardLifecycleCompletedEvent = typeof DashboardLifecycleCompletedEvent.Type\n\n/** Dashboard restart failed (PAN-520) */\nexport const DashboardLifecycleFailedEvent = Schema.Struct({\n type: Schema.Literal(\"dashboard.lifecycle_failed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n reason: Schema.String,\n issueId: Schema.optional(IssueId),\n error: Schema.String,\n }),\n})\nexport type DashboardLifecycleFailedEvent = typeof DashboardLifecycleFailedEvent.Type\n\n/** Replaces socket.io `shadow:inference-update` */\nexport const ShadowInferenceUpdateEvent = Schema.Struct({\n type: Schema.Literal(\"shadow.inference_update\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, content: Schema.String }),\n})\nexport type ShadowInferenceUpdateEvent = typeof ShadowInferenceUpdateEvent.Type\n\n// ─── Workspace Lifecycle Events ───────────────────────────────────────────────\n\n/** New — workspace worktree created (before planning.started) */\nexport const WorkspaceCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, workspacePath: Schema.String }),\n})\nexport type WorkspaceCreatedEvent = typeof WorkspaceCreatedEvent.Type\n\n/** New — deep-wipe started (transitional state for UI spinner) */\nexport const WorkspaceWipeStartedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.wipe_started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type WorkspaceWipeStartedEvent = typeof WorkspaceWipeStartedEvent.Type\n\n/** New — deep-wipe completed, workspace fully destroyed */\nexport const WorkspaceDestroyedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.destroyed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type WorkspaceDestroyedEvent = typeof WorkspaceDestroyedEvent.Type\n\n/** New — cleanup-workspace completed, workspace directory removed */\nexport const WorkspaceDeletedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.deleted\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId }),\n})\nexport type WorkspaceDeletedEvent = typeof WorkspaceDeletedEvent.Type\n\n/** New — planning aborted, workspace returned to idle state */\nexport const WorkspaceAbortedEvent = Schema.Struct({\n type: Schema.Literal(\"workspace.aborted\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ issueId: IssueId, sessionName: Schema.optional(Schema.String) }),\n})\nexport type WorkspaceAbortedEvent = typeof WorkspaceAbortedEvent.Type\n\n// ─── Memory Events ────────────────────────────────────────────────────────────\n\nexport const MemoryObservationCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.observation_created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ observation: MemoryObservation }),\n})\nexport type MemoryObservationCreatedEvent = typeof MemoryObservationCreatedEvent.Type\n\nexport const MemoryStatusUpdatedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.status_updated\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n identity: Schema.Struct({ projectId: Schema.String, workspaceId: Schema.String, issueId: IssueId }),\n status: MemoryStatus,\n previousStatus: Schema.optional(MemoryStatus),\n }),\n})\nexport type MemoryStatusUpdatedEvent = typeof MemoryStatusUpdatedEvent.Type\n\nexport const MemoryRollupTriggeredEvent = Schema.Struct({\n type: Schema.Literal(\"memory.rollup_triggered\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n projectId: Schema.String,\n workspaceId: Schema.String,\n issueId: IssueId,\n pendingCount: Schema.Number,\n turnIds: Schema.Array(Schema.String),\n threshold: Schema.Number,\n }),\n})\nexport type MemoryRollupTriggeredEvent = typeof MemoryRollupTriggeredEvent.Type\n\nexport const MemoryResetMarkerCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.reset_marker_created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({ marker: ResetMarker }),\n})\nexport type MemoryResetMarkerCreatedEvent = typeof MemoryResetMarkerCreatedEvent.Type\n\nexport const MemoryHealthChangedEvent = Schema.Struct({\n type: Schema.Literal(\"memory.health_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n projectId: Schema.String,\n issueId: IssueId,\n status: Schema.Literals([\"healthy\", \"degraded\", \"failing\"]),\n reason: Schema.NullOr(Schema.String),\n // Human-readable cause of the most recent failure (e.g. the provider error\n // message). Distinct from `reason`, which is a coarse machine code like\n // \"extraction-failed\". Surfaced verbatim in the UI so the operator can see\n // *why* memory extraction is failing without reading server logs.\n detail: Schema.optional(Schema.String),\n ragDecision: Schema.optional(RagDecision),\n }),\n})\nexport type MemoryHealthChangedEvent = typeof MemoryHealthChangedEvent.Type\n\n// ─── Cost Events ──────────────────────────────────────────────────────────────\n\n/** New — cost event recorded in the store */\nexport const CostEventRecordedEvent = Schema.Struct({\n type: Schema.Literal(\"cost.event_recorded\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n agentId: AgentId,\n issueId: IssueId,\n cost: Schema.Number,\n inputTokens: Schema.Number,\n outputTokens: Schema.Number,\n }),\n})\nexport type CostEventRecordedEvent = typeof CostEventRecordedEvent.Type\n\n// ─── Conversation Events ──────────────────────────────────────────────────────\n\n/** Emitted (in-memory only, not persisted) when a Overdeck-native compaction starts or completes. */\nexport const ConversationCompactingChangedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.compacting_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n compacting: Schema.Boolean,\n }),\n})\nexport type ConversationCompactingChangedEvent = typeof ConversationCompactingChangedEvent.Type\n\n/** Emitted (in-memory only) when a new conversation row is created, so the\n * sidebar list can refresh immediately instead of waiting for its poll tick. */\nexport const ConversationCreatedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.created\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n }),\n})\nexport type ConversationCreatedEvent = typeof ConversationCreatedEvent.Type\n\n/** Emitted (in-memory only) when a conversation title changes, so the sidebar\n * list can refresh immediately instead of waiting for its poll tick. */\nexport const ConversationTitleChangedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.title_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n title: Schema.String,\n titleSource: Schema.String,\n }),\n})\nexport type ConversationTitleChangedEvent = typeof ConversationTitleChangedEvent.Type\n\n/** Emitted (in-memory only) when a PermissionRequest hook fires or resolves for a conversation. */\nexport const ConversationPermissionChangedEvent = Schema.Struct({\n type: Schema.Literal(\"conversation.permission_changed\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n conversationName: Schema.String,\n waiting: Schema.Boolean,\n toolName: Schema.optional(Schema.String),\n }),\n})\nexport type ConversationPermissionChangedEvent = typeof ConversationPermissionChangedEvent.Type\n\n// ─── Conversation Discovery Events (PAN-457) ──────────────────────────────────\n\n/** Scan started */\nexport const ScanStartedEvent = Schema.Struct({\n type: Schema.Literal(\"scan.started\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n mode: Schema.Literals(['targeted', 'watched', 'system']),\n dirs: Schema.Array(Schema.String),\n }),\n})\nexport type ScanStartedEvent = typeof ScanStartedEvent.Type\n\n/** Scan progress tick */\nexport const ScanProgressEvent = Schema.Struct({\n type: Schema.Literal(\"scan.progress\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n dirsProcessed: Schema.Number,\n dirsTotal: Schema.Number,\n sessionsFound: Schema.Number,\n elapsedMs: Schema.Number,\n }),\n})\nexport type ScanProgressEvent = typeof ScanProgressEvent.Type\n\n/** Scan completed */\nexport const ScanCompleteEvent = Schema.Struct({\n type: Schema.Literal(\"scan.complete\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n inserted: Schema.Number,\n updated: Schema.Number,\n skipped: Schema.Number,\n errors: Schema.Number,\n durationMs: Schema.Number,\n }),\n})\nexport type ScanCompleteEvent = typeof ScanCompleteEvent.Type\n\n/** Per-session enrichment progress */\nexport const EnrichProgressEvent = Schema.Struct({\n type: Schema.Literal(\"enrich.progress\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n sessionId: Schema.Number,\n level: Schema.Number,\n model: Schema.String,\n cost: Schema.Number,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n }),\n})\nexport type EnrichProgressEvent = typeof EnrichProgressEvent.Type\n\n/** Enrichment batch completed */\nexport const EnrichCompleteEvent = Schema.Struct({\n type: Schema.Literal(\"enrich.complete\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n processed: Schema.Number,\n totalCost: Schema.Number,\n failures: Schema.Number,\n durationMs: Schema.Number,\n }),\n})\nexport type EnrichCompleteEvent = typeof EnrichCompleteEvent.Type\n\n/** Per-session embedding progress */\nexport const EmbedProgressEvent = Schema.Struct({\n type: Schema.Literal(\"embed.progress\"),\n sequence: SequenceNumber,\n timestamp: Schema.String,\n payload: Schema.Struct({\n sessionId: Schema.Number,\n model: Schema.String,\n success: Schema.Boolean,\n error: Schema.optional(Schema.String),\n }),\n})\nexport type EmbedProgressEvent = typeof EmbedProgressEvent.Type\n\n// ─── Union ────────────────────────────────────────────────────────────────────\n\n/** All domain events — the shape streamed via subscribeDomainEvents RPC */\nexport const DomainEvent = Schema.Union([\n SystemHeartbeatEvent,\n BeadsFreshnessChangedEvent,\n AgentCreatedEvent,\n AgentEnrichmentChangedEvent,\n AgentStartedEvent,\n AgentStoppedEvent,\n AgentHeartbeatDeadEvent,\n WorkCompletedEvent,\n AgentCompletedEvent,\n ReviewApprovedEvent,\n TestPassedEvent,\n AgentStatusChangedEvent,\n AgentOutputReceivedEvent,\n // PAN-800 runtime events\n AgentActivityChangedEvent,\n AgentThinkingStartedEvent,\n AgentThinkingStoppedEvent,\n AgentWaitingStartedEvent,\n AgentWaitingClearedEvent,\n AgentPermissionRequestedEvent,\n AgentPermissionResolvedEvent,\n AgentMessageReceivedEvent,\n AgentChannelReplyEvent,\n AgentModelSetEvent,\n AgentCurrentIssueSetEvent,\n AgentContextSaturationChangedEvent,\n AgentResolutionChangedEvent,\n AgentStateRestoredEvent,\n AgentTurnDiffCompletedEvent,\n PlanningStartedEvent,\n PlanningFailedEvent,\n PlanningSyncEvent,\n PlanItemStatusChangedEvent,\n PlanSubitemStatusChangedEvent,\n PlanItemsUnblockedEvent,\n PipelineStatusChangedEvent,\n MergeReadyEvent,\n ReviewStatusChangedEvent,\n PipelineReviewStartedEvent,\n PipelineReviewCompletedEvent,\n PipelineTestStartedEvent,\n PipelineTestCompletedEvent,\n PipelineVerificationStartedEvent,\n PipelineVerificationFailedEvent,\n IssueTransitionedEvent,\n OperatorInterventionEvent,\n SubstrateBugFiledEvent,\n ReviewReviewerStartedEvent,\n ReviewReviewerCompletedEvent,\n ReviewSpecialistTimedOutEvent,\n ReviewCoordinatorStartedEvent,\n ReviewCoordinatorDiedEvent,\n SpecialistStartedEvent,\n SpecialistCompletedEvent,\n SpecialistFailedEvent,\n ResourcesUpdatedEvent,\n SystemHealthSeverityChangedEvent,\n IssuesSnapshotEvent,\n IssuesUpdatedEvent,\n IssueStatusChangedEvent,\n ActivityUpdatedEvent,\n ActivityEntryEvent,\n ActivityDetailedEvent,\n ActivityTtsEvent,\n ShadowInferenceUpdateEvent,\n MemoryObservationCreatedEvent,\n MemoryStatusUpdatedEvent,\n MemoryRollupTriggeredEvent,\n MemoryResetMarkerCreatedEvent,\n MemoryHealthChangedEvent,\n CostEventRecordedEvent,\n WorkspaceCreatedEvent,\n WorkspaceWipeStartedEvent,\n WorkspaceDestroyedEvent,\n WorkspaceDeletedEvent,\n WorkspaceAbortedEvent,\n DashboardLifecycleStartedEvent,\n DashboardLifecycleCompletedEvent,\n DashboardLifecycleFailedEvent,\n ConversationCompactingChangedEvent,\n ConversationCreatedEvent,\n ConversationTitleChangedEvent,\n ConversationPermissionChangedEvent,\n ScanStartedEvent,\n ScanProgressEvent,\n ScanCompleteEvent,\n EnrichProgressEvent,\n EnrichCompleteEvent,\n EmbedProgressEvent,\n])\nexport type DomainEvent = typeof DomainEvent.Type\n","import { Schema } from \"effect\"\n\nexport const EDITORS = [\n { id: \"cursor\", label: \"Cursor\", command: \"cursor\", supportsGoto: true },\n { id: \"windsurf\", label: \"Windsurf\", command: \"windsurf\", supportsGoto: true },\n { id: \"trae\", label: \"Trae\", command: \"trae\", supportsGoto: true },\n { id: \"kiro\", label: \"Kiro\", command: \"kiro\", supportsGoto: true },\n { id: \"vscode\", label: \"VS Code\", command: \"code\", supportsGoto: true },\n { id: \"vscode-insiders\", label: \"VS Code Insiders\", command: \"code-insiders\", supportsGoto: true },\n { id: \"vscodium\", label: \"VSCodium\", command: \"codium\", supportsGoto: true },\n { id: \"zed\", label: \"Zed\", command: \"zed\", supportsGoto: false },\n { id: \"antigravity\", label: \"Antigravity\", command: \"agy\", supportsGoto: false },\n { id: \"idea\", label: \"IntelliJ IDEA\", command: \"idea\", supportsGoto: true },\n { id: \"aqua\", label: \"Aqua\", command: \"aqua\", supportsGoto: true },\n { id: \"clion\", label: \"CLion\", command: \"clion\", supportsGoto: true },\n { id: \"datagrip\", label: \"DataGrip\", command: \"datagrip\", supportsGoto: true },\n { id: \"dataspell\", label: \"DataSpell\", command: \"dataspell\", supportsGoto: true },\n { id: \"goland\", label: \"GoLand\", command: \"goland\", supportsGoto: true },\n { id: \"phpstorm\", label: \"PhpStorm\", command: \"phpstorm\", supportsGoto: true },\n { id: \"pycharm\", label: \"PyCharm\", command: \"pycharm\", supportsGoto: true },\n { id: \"rider\", label: \"Rider\", command: \"rider\", supportsGoto: true },\n { id: \"rubymine\", label: \"RubyMine\", command: \"rubymine\", supportsGoto: true },\n { id: \"rustrover\", label: \"RustRover\", command: \"rustrover\", supportsGoto: true },\n { id: \"webstorm\", label: \"WebStorm\", command: \"webstorm\", supportsGoto: true },\n { id: \"file-manager\", label: \"File Manager\", command: null, supportsGoto: false },\n] as const\n\nexport type EditorEntry = (typeof EDITORS)[number]\nexport type EditorId = EditorEntry[\"id\"]\n\nconst EDITOR_IDS: [EditorId, ...EditorId[]] = [\n \"cursor\",\n \"windsurf\",\n \"trae\",\n \"kiro\",\n \"vscode\",\n \"vscode-insiders\",\n \"vscodium\",\n \"zed\",\n \"antigravity\",\n \"idea\",\n \"aqua\",\n \"clion\",\n \"datagrip\",\n \"dataspell\",\n \"goland\",\n \"phpstorm\",\n \"pycharm\",\n \"rider\",\n \"rubymine\",\n \"rustrover\",\n \"webstorm\",\n \"file-manager\",\n]\nexport const EditorIdSchema = Schema.Literals(EDITOR_IDS)\n\nexport const OpenInEditorInput = Schema.Struct({\n cwd: Schema.String,\n editor: EditorIdSchema,\n})\nexport type OpenInEditorInput = typeof OpenInEditorInput.Type\n","import { Effect, Schema } from \"effect\"\n\nexport const FlywheelRunId = Schema.String.check(Schema.isPattern(/^RUN-\\d+$/))\nexport type FlywheelRunId = typeof FlywheelRunId.Type\n\nexport const FlywheelHttpUrl = Schema.String.check(Schema.isPattern(/^https?:\\/\\/\\S+$/i))\nexport type FlywheelHttpUrl = typeof FlywheelHttpUrl.Type\n\nexport const FlywheelHarness = Schema.Literals([\"claude-code\", \"pi\", \"ohmypi\", \"codex\"])\nexport interface FlywheelOrchestrator {\n harness: typeof FlywheelHarness.Type\n model: string\n effort: \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\"\n ctxPercent: number\n}\n\nexport const FlywheelEffort = Schema.Literals([\"low\", \"medium\", \"high\", \"xhigh\", \"max\"])\nexport const FlywheelOrchestrator = Schema.Struct({\n harness: FlywheelHarness,\n model: Schema.String,\n effort: FlywheelEffort,\n ctxPercent: Schema.Number,\n})\n\nexport interface FlywheelHeadline {\n bugsFixed: number\n swarmItemsMerged: number\n swarmItemsTotal: number\n prsMerged: number\n awaitingUat: number\n}\n\nexport const FlywheelHeadline = Schema.Struct({\n bugsFixed: Schema.Number,\n swarmItemsMerged: Schema.Number,\n swarmItemsTotal: Schema.Number,\n prsMerged: Schema.Number,\n awaitingUat: Schema.Number,\n})\n\n/**\n * Pipeline verbs and the merge-queue contract (PAN-1736):\n *\n * `computeMergeQueue` treats an item as AT THE MERGE GATE when its verb is\n * \"shipping\" OR \"merging\" — both are natural emissions for a merge-ready\n * issue, and orchestrators have used each. Emitting any OTHER verb for an\n * issue that is ready_for_merge in the review DB silently drops it from the\n * merge queue and from UAT batch assembly (PAN-1737). RUN-18 shipped an\n * empty queue with five ready issues exactly this way.\n *\n * If you add a verb that can describe a merge-ready issue, extend\n * MERGE_GATE_VERBS in src/lib/flywheel-merge-order.ts in the same change.\n */\nexport const FlywheelPipelineVerb = Schema.Literals([\n \"planning\",\n \"working\",\n \"reviewing\",\n \"testing\",\n \"shipping\",\n \"merging\",\n \"blocked\",\n \"parked\",\n])\n\nexport const FlywheelPipelineStatus = Schema.Literals([\n \"queued\",\n \"running\",\n \"blocked\",\n \"passed\",\n \"failed\",\n \"merged\",\n \"parked\",\n])\n\nexport interface FlywheelPipelineItem {\n issueId: string\n title: string\n verb: typeof FlywheelPipelineVerb.Type\n status: typeof FlywheelPipelineStatus.Type\n progressPercent?: number | undefined\n agentId?: string | undefined\n pr?: number | undefined\n mergeOrder?: number | undefined\n conflictsWith?: readonly string[] | undefined\n}\n\nexport const FlywheelPipelineItem = Schema.Struct({\n issueId: Schema.String,\n title: Schema.String,\n verb: FlywheelPipelineVerb,\n status: FlywheelPipelineStatus,\n progressPercent: Schema.optional(Schema.Number),\n agentId: Schema.optional(Schema.String),\n pr: Schema.optional(Schema.Number),\n mergeOrder: Schema.optional(Schema.Number),\n conflictsWith: Schema.optional(Schema.Array(Schema.String)),\n})\n\nexport const FlywheelSubstrateBugStatus = Schema.Literals([\"filed\", \"fixed\", \"workaround\"])\n\nexport interface FlywheelSubstrateBug {\n issueId: string\n title: string\n status: typeof FlywheelSubstrateBugStatus.Type\n commitSha?: string | undefined\n url?: FlywheelHttpUrl | undefined\n}\n\nexport const FlywheelSubstrateBug = Schema.Struct({\n issueId: Schema.String,\n title: Schema.String,\n status: FlywheelSubstrateBugStatus,\n commitSha: Schema.optional(Schema.String),\n url: Schema.optional(FlywheelHttpUrl),\n})\n\nexport const FlywheelAgentStatus = Schema.Literals([\n \"starting\",\n \"running\",\n \"waiting\",\n \"idle\",\n \"stopped\",\n \"error\",\n])\n\nexport interface FlywheelAgent {\n id: string\n label: string\n status: typeof FlywheelAgentStatus.Type\n issueId?: string | undefined\n role?: string | undefined\n model?: string | undefined\n ctxPercent?: number | undefined\n currentAction?: string | undefined\n}\n\nexport const FlywheelAgent = Schema.Struct({\n id: Schema.String,\n label: Schema.String,\n status: FlywheelAgentStatus,\n issueId: Schema.optional(Schema.String),\n role: Schema.optional(Schema.String),\n model: Schema.optional(Schema.String),\n ctxPercent: Schema.optional(Schema.Number),\n currentAction: Schema.optional(Schema.String),\n})\n\nexport interface FlywheelParkedItem {\n issueId: string\n title: string\n reason: string\n parkedAt?: string | undefined\n}\n\nexport const FlywheelParkedItem = Schema.Struct({\n issueId: Schema.String,\n title: Schema.String,\n reason: Schema.String,\n parkedAt: Schema.optional(Schema.String),\n})\n\nexport const FlywheelSuggestionAction = Schema.Literals([\n \"start\",\n \"resume\",\n \"plan\",\n \"review\",\n \"merge\",\n \"unblock\",\n \"park\",\n \"investigate\",\n \"wait\",\n])\nexport type FlywheelSuggestionAction = typeof FlywheelSuggestionAction.Type\n\nexport const FlywheelSuggestionPriority = Schema.Literals([\"urgent\", \"high\", \"medium\", \"low\"])\nexport type FlywheelSuggestionPriority = typeof FlywheelSuggestionPriority.Type\n\nexport interface FlywheelSuggestion {\n action: FlywheelSuggestionAction\n issueId?: string | undefined\n rationale: string\n priority: FlywheelSuggestionPriority\n}\n\nexport const FlywheelSuggestion = Schema.Struct({\n action: FlywheelSuggestionAction,\n issueId: Schema.optional(Schema.String),\n rationale: Schema.String,\n priority: FlywheelSuggestionPriority,\n})\n\nexport interface FlywheelSystemStatus {\n mainHead: string\n ramUsedMb: number\n ramTotalMb: number\n swapUsedMb: number\n swapTotalMb: number\n agentsActive: number\n agentsCap: number\n}\n\nexport const FlywheelSystemStatus = Schema.Struct({\n mainHead: Schema.String,\n ramUsedMb: Schema.Number,\n ramTotalMb: Schema.Number,\n swapUsedMb: Schema.Number,\n swapTotalMb: Schema.Number,\n agentsActive: Schema.Number,\n agentsCap: Schema.Number,\n})\n\nexport interface FlywheelStatus {\n runId: FlywheelRunId\n startedAt: string\n elapsedMs: number\n orchestrator: FlywheelOrchestrator\n headline: FlywheelHeadline\n activePipeline: ReadonlyArray<FlywheelPipelineItem>\n substrateBugs: ReadonlyArray<FlywheelSubstrateBug>\n agents: ReadonlyArray<FlywheelAgent>\n parked: ReadonlyArray<FlywheelParkedItem>\n suggestions: ReadonlyArray<FlywheelSuggestion>\n system: FlywheelSystemStatus\n openQuestions: ReadonlyArray<string>\n ticks: number\n lastTickAt: string\n}\n\nexport const FlywheelStatus = Schema.Struct({\n runId: FlywheelRunId,\n startedAt: Schema.String,\n elapsedMs: Schema.Number,\n orchestrator: FlywheelOrchestrator,\n headline: FlywheelHeadline,\n activePipeline: Schema.Array(FlywheelPipelineItem),\n substrateBugs: Schema.Array(FlywheelSubstrateBug),\n agents: Schema.Array(FlywheelAgent),\n parked: Schema.Array(FlywheelParkedItem),\n suggestions: Schema.Array(FlywheelSuggestion).pipe(\n Schema.withDecodingDefaultKey(Effect.succeed([])),\n ),\n system: FlywheelSystemStatus,\n openQuestions: Schema.Array(Schema.String),\n ticks: Schema.Number,\n lastTickAt: Schema.String,\n})\n","import { Schema } from \"effect\"\nimport * as Rpc from \"effect/unstable/rpc/Rpc\"\nimport * as RpcGroup from \"effect/unstable/rpc/RpcGroup\"\nimport { DomainEvent } from \"./events\"\nimport {\n AgentStatus,\n ConversationCostSummary,\n ConversationFilter,\n DashboardSnapshot,\n DiscoveredSessionSnapshot,\n IssueId,\n ScanResult,\n SequenceNumber,\n SessionNodePresence,\n SessionsFeedFacetsSnapshot,\n SessionsFeedRowSnapshot,\n WorkspaceDetail,\n} from \"./types\"\nimport { EditorIdSchema, OpenInEditorInput } from \"./editor\"\nimport { FlywheelStatus } from \"./flywheel\"\n\n// ─── RPC method names ─────────────────────────────────────────────────────────\n\nexport const WS_METHODS = {\n // Conversations (PAN-457)\n scanConversations: \"pan.scanConversations\",\n searchConversations: \"pan.searchConversations\",\n listDiscoveredSessions: \"pan.listDiscoveredSessions\",\n listSessionsFeed: \"pan.listSessionsFeed\",\n getSessionsFeedFacets: \"pan.getSessionsFeedFacets\",\n getDiscoveredSession: \"pan.getDiscoveredSession\",\n enrichSessions: \"pan.enrichSessions\",\n embedSessions: \"pan.embedSessions\",\n getConversationCost: \"pan.getConversationCost\",\n getConversationCostByWorkspace: \"pan.getConversationCostByWorkspace\",\n getConversationStats: \"pan.getConversationStats\",\n\n // Streaming subscriptions\n subscribeDomainEvents: \"pan.subscribeDomainEvents\",\n subscribeIssueEvents: \"pan.subscribeIssueEvents\",\n subscribeTerminal: \"pan.subscribeTerminal\",\n subscribeAgentOutput: \"pan.subscribeAgentOutput\",\n subscribeConversationMessages: \"pan.subscribeConversationMessages\",\n subscribeProjectSessionTree: \"pan.subscribeProjectSessionTree\",\n subscribeFlywheelStatus: \"pan.subscribeFlywheelStatus\",\n\n // Snapshot / replay\n getSnapshot: \"pan.getSnapshot\",\n replayEvents: \"pan.replayEvents\",\n\n // Workspace detail (batched)\n getWorkspaceDetail: \"pan.getWorkspaceDetail\",\n readWorkspaceFile: \"pan.readWorkspaceFile\",\n\n // File-path existence (PAN-1457) — used by MarkdownFileLink to decide\n // whether a path candidate in chat markdown should render as a chip.\n resolveFilePathExists: \"pan.resolveFilePathExists\",\n\n // Terminal control\n terminalOpen: \"pan.terminalOpen\",\n terminalWrite: \"pan.terminalWrite\",\n terminalResize: \"pan.terminalResize\",\n terminalClose: \"pan.terminalClose\",\n\n // Commands (trigger mutations via RPC)\n startPlanning: \"pan.startPlanning\",\n startAgent: \"pan.startAgent\",\n deepWipe: \"pan.deepWipe\",\n sendTerminalInput: \"pan.sendTerminalInput\",\n resizeTerminal: \"pan.resizeTerminal\",\n\n // Editor integration (PAN-966)\n shellOpenInEditor: \"pan.shellOpenInEditor\",\n getAvailableEditors: \"pan.getAvailableEditors\",\n} as const\n\n// ─── Error types ──────────────────────────────────────────────────────────────\n\nexport class PanRpcError extends Schema.TaggedErrorClass<PanRpcError>()(\"PanRpcError\", {\n message: Schema.String,\n code: Schema.optional(Schema.String),\n}) {}\n\n// ─── Terminal types ───────────────────────────────────────────────────────────\n\nexport const TerminalOutput = Schema.Struct({\n sessionName: Schema.String,\n data: Schema.String,\n})\nexport type TerminalOutput = typeof TerminalOutput.Type\n\nexport const AgentOutput = Schema.Struct({\n agentId: Schema.String,\n line: Schema.String,\n})\nexport type AgentOutput = typeof AgentOutput.Type\n\n// ─── Plan mode types ─────────────────────────────────────────────────────────\n\nexport const ProposedPlan = Schema.Struct({\n id: Schema.String,\n plan: Schema.String,\n planFilePath: Schema.optional(Schema.String),\n status: Schema.Literals(['pending', 'approved', 'rejected']),\n createdAt: Schema.String,\n resolvedAt: Schema.optional(Schema.String),\n})\nexport type ProposedPlan = typeof ProposedPlan.Type\n\n// ─── Compact boundary types ──────────────────────────────────────────────────\n\nexport const CompactBoundary = Schema.Struct({\n id: Schema.String,\n timestamp: Schema.String,\n trigger: Schema.optional(Schema.String),\n preTokens: Schema.optional(Schema.Number),\n model: Schema.optional(Schema.String),\n})\nexport type CompactBoundary = typeof CompactBoundary.Type\n\nexport const ContextUsage = Schema.Struct({\n activeBytes: Schema.Number,\n estimatedTokens: Schema.Number,\n contextWindow: Schema.Number,\n percentUsed: Schema.Number,\n /**\n * Optional breakdown of the last assistant turn — surfaced by the click\n * popover on the ContextWindowMeter so users can see WHY the meter says\n * what it does. Computed by `computeContextUsage()` from JSONL `usage`.\n */\n lastInputTokens: Schema.optional(Schema.Number),\n lastCacheReadTokens: Schema.optional(Schema.Number),\n lastCacheCreationTokens: Schema.optional(Schema.Number),\n /** Highest input_tokens ever observed in this window — triggers 1M detection. */\n maxObservedInputTokens: Schema.optional(Schema.Number),\n /** Model the most recent assistant turn ran under (from JSONL). */\n lastModel: Schema.optional(Schema.NullOr(Schema.String)),\n /** ISO timestamp of the most recent assistant turn. */\n lastTurnAt: Schema.optional(Schema.NullOr(Schema.String)),\n})\nexport type ContextUsage = typeof ContextUsage.Type\n\n// ─── Chat / conversation message types (PAN-451) ──────────────────────────────\n\nexport const ChatMessage = Schema.Struct({\n id: Schema.String,\n role: Schema.Literals(['user', 'assistant', 'system']),\n text: Schema.String,\n turnId: Schema.optional(Schema.String),\n createdAt: Schema.String,\n completedAt: Schema.optional(Schema.String),\n streaming: Schema.optional(Schema.Boolean),\n sequence: Schema.optional(Schema.Number),\n})\nexport type ChatMessage = typeof ChatMessage.Type\n\nexport const WorkLogEntry = Schema.Struct({\n id: Schema.String,\n createdAt: Schema.String,\n label: Schema.String,\n detail: Schema.optional(Schema.String),\n /** Tool result output (populated when tool_result is received). */\n result: Schema.optional(Schema.String),\n command: Schema.optional(Schema.String),\n changedFiles: Schema.optional(Schema.Array(Schema.String)),\n tone: Schema.Literals(['thinking', 'tool', 'info', 'error']),\n toolTitle: Schema.optional(Schema.String),\n /** Raw tool_use input dict — drives per-tool expanded rendering (PAN-1459). */\n toolInput: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n sequence: Schema.optional(Schema.Number),\n})\nexport type WorkLogEntry = typeof WorkLogEntry.Type\n\n/**\n * Response shape for GET /api/agents/:id/conversation.\n * Shared between the dashboard server route and the frontend TerminalPanel.\n */\nexport interface ConversationResponse {\n messages: ChatMessage[];\n workLog: WorkLogEntry[];\n streaming: boolean;\n totalCost: number;\n /** Total token throughput (input + output + cache read + cache write). */\n totalTokens?: number;\n byteOffset: number;\n proposedPlan?: ProposedPlan;\n compactBoundaries?: CompactBoundary[];\n contextUsage?: ContextUsage | null;\n}\n\nexport const ConversationEvent = Schema.Union([\n Schema.Struct({\n kind: Schema.Literal('messages'),\n messages: Schema.Array(ChatMessage),\n workLog: Schema.Array(WorkLogEntry),\n streaming: Schema.Boolean,\n snapshot: Schema.optional(Schema.Boolean),\n proposedPlan: Schema.optional(ProposedPlan),\n compactBoundaries: Schema.optional(Schema.Array(CompactBoundary)),\n contextUsage: Schema.optional(Schema.NullOr(ContextUsage)),\n }),\n Schema.Struct({\n kind: Schema.Literal('discovering'),\n }),\n])\nexport type ConversationEvent = typeof ConversationEvent.Type\n\n// ─── Session Tree Delta (PAN-821) ─────────────────────────────────────────────\n\nexport const SessionTreeDelta = Schema.Struct({\n kind: Schema.Literals(['session_added', 'session_removed', 'presence_changed', 'status_changed']),\n issueId: Schema.String,\n sessionId: Schema.String,\n presence: Schema.optional(SessionNodePresence),\n status: Schema.optional(AgentStatus),\n timestamp: Schema.String,\n})\nexport type SessionTreeDelta = typeof SessionTreeDelta.Type\n\n// ─── RPC definitions ──────────────────────────────────────────────────────────\n\n/** 1. Subscribe to the live domain event stream (stream) */\nexport const SubscribeDomainEventsRpc = Rpc.make(WS_METHODS.subscribeDomainEvents, {\n payload: Schema.Struct({}),\n success: DomainEvent,\n stream: true,\n})\n\n/** 1b. Subscribe to the live domain event stream for one issue (stream) */\nexport const SubscribeIssueEventsRpc = Rpc.make(WS_METHODS.subscribeIssueEvents, {\n payload: Schema.Struct({ issueId: IssueId }),\n success: DomainEvent,\n stream: true,\n})\n\n/** 2. Subscribe to raw terminal output for a tmux session (stream) */\nexport const SubscribeTerminalRpc = Rpc.make(WS_METHODS.subscribeTerminal, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n success: TerminalOutput,\n error: PanRpcError,\n stream: true,\n})\n\n/** 3. Subscribe to buffered agent stdout (stream) */\nexport const SubscribeAgentOutputRpc = Rpc.make(WS_METHODS.subscribeAgentOutput, {\n payload: Schema.Struct({ agentId: Schema.String }),\n success: AgentOutput,\n error: PanRpcError,\n stream: true,\n})\n\n/** 4. Get current dashboard snapshot (unary) */\nexport const GetSnapshotRpc = Rpc.make(WS_METHODS.getSnapshot, {\n payload: Schema.Struct({}),\n success: DashboardSnapshot,\n error: PanRpcError,\n})\n\n/** 5. Replay events since a given sequence number (unary) */\nexport const ReplayEventsRpc = Rpc.make(WS_METHODS.replayEvents, {\n payload: Schema.Struct({ fromSequence: SequenceNumber }),\n success: Schema.Array(DomainEvent),\n error: PanRpcError,\n})\n\n/** 6. Open a terminal session / attach PTY (unary) */\nexport const TerminalOpenRpc = Rpc.make(WS_METHODS.terminalOpen, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n success: Schema.Struct({ sessionName: Schema.String }),\n error: PanRpcError,\n})\n\n/** 7. Write data to a terminal session (unary) */\nexport const TerminalWriteRpc = Rpc.make(WS_METHODS.terminalWrite, {\n payload: Schema.Struct({ sessionName: Schema.String, data: Schema.String }),\n error: PanRpcError,\n})\n\n/** 8. Resize a terminal session (unary) */\nexport const TerminalResizeRpc = Rpc.make(WS_METHODS.terminalResize, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n error: PanRpcError,\n})\n\n/** 9. Close a terminal session (unary) */\nexport const TerminalCloseRpc = Rpc.make(WS_METHODS.terminalClose, {\n payload: Schema.Struct({ sessionName: Schema.String }),\n error: PanRpcError,\n})\n\n/** 10. Get batched workspace detail (unary) — replaces 5 separate HTTP calls */\nexport const GetWorkspaceDetailRpc = Rpc.make(WS_METHODS.getWorkspaceDetail, {\n payload: Schema.Struct({ issueId: IssueId }),\n success: WorkspaceDetail,\n error: PanRpcError,\n})\n\nexport const ReadWorkspaceFileInput = Schema.Struct({\n issueId: IssueId,\n relativePath: Schema.String,\n line: Schema.optional(Schema.Number),\n contextLines: Schema.optional(Schema.Number),\n})\nexport type ReadWorkspaceFileInput = typeof ReadWorkspaceFileInput.Type\n\nexport const ReadWorkspaceFileResult = Schema.Struct({\n text: Schema.String,\n lang: Schema.String,\n truncated: Schema.Boolean,\n totalLines: Schema.Number,\n})\nexport type ReadWorkspaceFileResult = typeof ReadWorkspaceFileResult.Type\n\n/** 10b. Read a workspace file for inline previews (unary) */\nexport const ReadWorkspaceFileRpc = Rpc.make(WS_METHODS.readWorkspaceFile, {\n payload: ReadWorkspaceFileInput,\n success: ReadWorkspaceFileResult,\n error: PanRpcError,\n})\n\n/**\n * 10c. Resolve whether a file path candidate exists on disk (PAN-1457).\n *\n * Used by MarkdownFileLink to decide whether a path-like token in chat\n * markdown should render as a clickable chip. Returns exists=false for\n * phantom paths (`conv/2209`, `users/foo`) and exists=true with kind for\n * real files and directories (including bare directory references like\n * `src/components/Foo` that the regex heuristic alone cannot validate).\n *\n * Security:\n * - Pure stat — never reads file contents, never enumerates directories.\n * - Relative paths resolve under cwd; absolute paths are statted directly.\n * - Caller is responsible for sending only paths surfaced from their own\n * conversation context; the resolver does not gate by issueId because\n * chat happens outside any single workspace.\n */\nexport const ResolveFilePathExistsInput = Schema.Struct({\n cwd: Schema.String,\n path: Schema.String,\n})\nexport type ResolveFilePathExistsInput = typeof ResolveFilePathExistsInput.Type\n\nexport const ResolveFilePathExistsResult = Schema.Struct({\n exists: Schema.Boolean,\n kind: Schema.NullOr(Schema.Literals(['file', 'dir'])),\n})\nexport type ResolveFilePathExistsResult = typeof ResolveFilePathExistsResult.Type\n\nexport const ResolveFilePathExistsRpc = Rpc.make(WS_METHODS.resolveFilePathExists, {\n payload: ResolveFilePathExistsInput,\n success: ResolveFilePathExistsResult,\n error: PanRpcError,\n})\n\n/** 11. Start planning for an issue (command) */\nexport const StartPlanningRpc = Rpc.make(WS_METHODS.startPlanning, {\n payload: Schema.Struct({ issueId: IssueId, options: Schema.optional(Schema.Unknown) }),\n success: Schema.Struct({ queued: Schema.Boolean }),\n error: PanRpcError,\n})\n\n/** 12. Start a work agent for an issue (command) */\nexport const StartAgentRpc = Rpc.make(WS_METHODS.startAgent, {\n payload: Schema.Struct({ issueId: IssueId, options: Schema.optional(Schema.Unknown) }),\n success: Schema.Struct({ agentId: Schema.String }),\n error: PanRpcError,\n})\n\n/** 13. Deep-wipe a workspace (destructive command — requires explicit confirmation) */\nexport const DeepWipeRpc = Rpc.make(WS_METHODS.deepWipe, {\n payload: Schema.Struct({ issueId: IssueId, deleteWorkspace: Schema.optional(Schema.Boolean) }),\n success: Schema.Struct({ wiped: Schema.Boolean }),\n error: PanRpcError,\n})\n\n/** 14. Send input to a terminal session (command) */\nexport const SendTerminalInputRpc = Rpc.make(WS_METHODS.sendTerminalInput, {\n payload: Schema.Struct({ sessionName: Schema.String, data: Schema.String }),\n error: PanRpcError,\n})\n\n/** 15. Resize a terminal session (command) */\nexport const ResizeTerminalRpc = Rpc.make(WS_METHODS.resizeTerminal, {\n payload: Schema.Struct({ sessionName: Schema.String, cols: Schema.Number, rows: Schema.Number }),\n error: PanRpcError,\n})\n\n/** 16. Subscribe to structured conversation messages from a JSONL session file (stream, PAN-451) */\nexport const SubscribeConversationMessagesRpc = Rpc.make(WS_METHODS.subscribeConversationMessages, {\n payload: Schema.Struct({ conversationName: Schema.String }),\n success: ConversationEvent,\n error: PanRpcError,\n stream: true,\n})\n\n/** 17. Subscribe to live session tree deltas for a project (stream, PAN-821) */\nexport const SubscribeProjectSessionTreeRpc = Rpc.make(WS_METHODS.subscribeProjectSessionTree, {\n payload: Schema.Struct({ projectKey: Schema.String }),\n success: SessionTreeDelta,\n error: PanRpcError,\n stream: true,\n})\n\n/** 18. Subscribe to latest Flywheel status snapshots (stream) */\nexport const SubscribeFlywheelStatusRpc = Rpc.make(WS_METHODS.subscribeFlywheelStatus, {\n payload: Schema.Struct({}),\n success: Schema.NullOr(FlywheelStatus),\n error: PanRpcError,\n stream: true,\n})\n\n/** 19. Open a workspace in an editor (PAN-966) */\nexport const ShellOpenInEditorRpc = Rpc.make(WS_METHODS.shellOpenInEditor, {\n payload: OpenInEditorInput,\n error: PanRpcError,\n})\n\n/** 19. Get available (installed) editors (PAN-966) */\nexport const GetAvailableEditorsRpc = Rpc.make(WS_METHODS.getAvailableEditors, {\n success: Schema.Struct({\n editors: Schema.Array(EditorIdSchema),\n /**\n * Default cwd to open when no project/workspace is selected — the\n * \"devroot\" fallback. `~/Projects` if it exists, else `$HOME`.\n */\n defaultCwd: Schema.String,\n }),\n error: PanRpcError,\n})\n\n// ─── Conversation Discovery RPC procs (PAN-457) ───────────────────────────────\n\nconst DiscoveredSessionListResult = Schema.Struct({\n sessions: Schema.Array(DiscoveredSessionSnapshot),\n count: Schema.Number,\n total: Schema.Number,\n})\n\nconst SessionsFeedPayload = Schema.Struct({\n harness: Schema.optional(Schema.String),\n workspacePath: Schema.optional(Schema.String),\n primaryModel: Schema.optional(Schema.String),\n managed: Schema.optional(Schema.Boolean),\n unmanaged: Schema.optional(Schema.Boolean),\n since: Schema.optional(Schema.String),\n before: Schema.optional(Schema.String),\n after: Schema.optional(Schema.String),\n minCost: Schema.optional(Schema.Number),\n maxCost: Schema.optional(Schema.Number),\n minMessages: Schema.optional(Schema.Number),\n tags: Schema.optional(Schema.Array(Schema.String)),\n tools: Schema.optional(Schema.Array(Schema.String)),\n files: Schema.optional(Schema.Array(Schema.String)),\n issueId: Schema.optional(Schema.String),\n enrichmentLevel: Schema.optional(Schema.Number),\n enriched: Schema.optional(Schema.Boolean),\n notEnriched: Schema.optional(Schema.Boolean),\n query: Schema.optional(Schema.String),\n semantic: Schema.optional(Schema.Boolean),\n similarTo: Schema.optional(Schema.Number),\n limit: Schema.optional(Schema.Number),\n offset: Schema.optional(Schema.Number),\n cursor: Schema.optional(Schema.String),\n source: Schema.optional(Schema.Literals(['discovered', 'managed-archived'])),\n})\n\nconst SessionsFeedListResult = Schema.Struct({\n rows: Schema.Array(SessionsFeedRowSnapshot),\n nextCursor: Schema.NullOr(Schema.String),\n})\n\nconst DiscoveredSessionSearchResult = Schema.Struct({\n sessions: Schema.Array(DiscoveredSessionSnapshot),\n total: Schema.Number,\n mode: Schema.String,\n durationMs: Schema.Number,\n error: Schema.optional(Schema.String),\n})\n\nconst DiscoveredSessionStatsResult = Schema.Struct({\n total: Schema.Number,\n enriched: Schema.Number,\n embedded: Schema.Number,\n managedCount: Schema.Number,\n embeddingModels: Schema.optional(Schema.Array(Schema.Struct({\n model: Schema.String,\n embedded: Schema.Number,\n }))),\n})\n\nconst ConversationCostTotals = Schema.Struct({\n sessionCount: Schema.Number,\n totalCost: Schema.Number,\n totalTokensIn: Schema.Number,\n totalTokensOut: Schema.Number,\n})\n\n/** Scan conversations (trigger discovery) */\nexport const ScanConversationsRpc = Rpc.make(WS_METHODS.scanConversations, {\n payload: Schema.Struct({\n mode: Schema.Literals(['targeted', 'watched', 'system']),\n dirs: Schema.optional(Schema.Array(Schema.String)),\n dryRun: Schema.optional(Schema.Boolean),\n }),\n success: ScanResult,\n error: PanRpcError,\n})\n\n/** Search discovered sessions with filters + optional FTS query */\nexport const SearchConversationsRpc = Rpc.make(WS_METHODS.searchConversations, {\n payload: ConversationFilter,\n success: DiscoveredSessionSearchResult,\n error: PanRpcError,\n})\n\n/** List discovered sessions (recent, with optional managed/unmanaged filter) */\nexport const ListDiscoveredSessionsRpc = Rpc.make(WS_METHODS.listDiscoveredSessions, {\n payload: ConversationFilter,\n success: DiscoveredSessionListResult,\n error: PanRpcError,\n})\n\n/** List the unified discovered + managed archived sessions feed */\nexport const ListSessionsFeedRpc = Rpc.make(WS_METHODS.listSessionsFeed, {\n payload: SessionsFeedPayload,\n success: SessionsFeedListResult,\n error: PanRpcError,\n})\n\n/** Get facet buckets for the unified sessions feed */\nexport const GetSessionsFeedFacetsRpc = Rpc.make(WS_METHODS.getSessionsFeedFacets, {\n payload: SessionsFeedPayload,\n success: SessionsFeedFacetsSnapshot,\n error: PanRpcError,\n})\n\n/** Get a single discovered session by ID */\nexport const GetDiscoveredSessionRpc = Rpc.make(WS_METHODS.getDiscoveredSession, {\n payload: Schema.Struct({ id: Schema.Number }),\n success: DiscoveredSessionSnapshot,\n error: PanRpcError,\n})\n\n/** Enrich sessions by ID or filter */\nexport const EnrichSessionsRpc = Rpc.make(WS_METHODS.enrichSessions, {\n payload: Schema.Struct({\n ids: Schema.optional(Schema.Array(Schema.Number)),\n filter: Schema.optional(ConversationFilter),\n level: Schema.Literals([1, 2, 3]),\n model: Schema.optional(Schema.String),\n fullTranscript: Schema.optional(Schema.Boolean),\n customPrompt: Schema.optional(Schema.String),\n upgrade: Schema.optional(Schema.Boolean),\n limit: Schema.optional(Schema.Number),\n confirmed: Schema.optional(Schema.Boolean),\n force: Schema.optional(Schema.Boolean),\n }),\n success: Schema.Struct({\n processed: Schema.Number,\n totalCost: Schema.Number,\n failures: Schema.Number,\n }),\n error: PanRpcError,\n})\n\n/** Generate or update embeddings for enriched sessions */\nexport const EmbedSessionsRpc = Rpc.make(WS_METHODS.embedSessions, {\n payload: Schema.Struct({\n ids: Schema.optional(Schema.Array(Schema.Number)),\n regenerate: Schema.optional(Schema.Boolean),\n }),\n success: Schema.Struct({\n total: Schema.Number,\n embedded: Schema.Number,\n model: Schema.String,\n }),\n error: PanRpcError,\n})\n\n/** Aggregate cost totals for discovered sessions */\nexport const GetConversationCostRpc = Rpc.make(WS_METHODS.getConversationCost, {\n payload: ConversationFilter,\n success: ConversationCostTotals,\n error: PanRpcError,\n})\n\n/** Aggregate workspace cost totals for the full filtered corpus */\nexport const GetConversationCostByWorkspaceRpc = Rpc.make(WS_METHODS.getConversationCostByWorkspace, {\n payload: ConversationFilter,\n success: ConversationCostSummary,\n error: PanRpcError,\n})\n\n/** Discovery index statistics */\nexport const GetConversationStatsRpc = Rpc.make(WS_METHODS.getConversationStats, {\n payload: Schema.Struct({}),\n success: DiscoveredSessionStatsResult,\n error: PanRpcError,\n})\n\n// ─── RPC Group ────────────────────────────────────────────────────────────────\n\n/** All Overdeck WebSocket RPC methods */\nexport const PanRpcGroup = RpcGroup.make(\n SubscribeDomainEventsRpc,\n SubscribeIssueEventsRpc,\n SubscribeTerminalRpc,\n SubscribeAgentOutputRpc,\n GetSnapshotRpc,\n ReplayEventsRpc,\n GetWorkspaceDetailRpc,\n ReadWorkspaceFileRpc,\n ResolveFilePathExistsRpc,\n TerminalOpenRpc,\n TerminalWriteRpc,\n TerminalResizeRpc,\n TerminalCloseRpc,\n StartPlanningRpc,\n StartAgentRpc,\n DeepWipeRpc,\n SendTerminalInputRpc,\n ResizeTerminalRpc,\n SubscribeConversationMessagesRpc,\n SubscribeProjectSessionTreeRpc,\n SubscribeFlywheelStatusRpc,\n ShellOpenInEditorRpc,\n GetAvailableEditorsRpc,\n ScanConversationsRpc,\n SearchConversationsRpc,\n ListDiscoveredSessionsRpc,\n ListSessionsFeedRpc,\n GetSessionsFeedFacetsRpc,\n GetDiscoveredSessionRpc,\n EnrichSessionsRpc,\n EmbedSessionsRpc,\n GetConversationCostRpc,\n GetConversationCostByWorkspaceRpc,\n GetConversationStatsRpc,\n)\nexport type PanRpcGroup = typeof PanRpcGroup\n","/**\n * Shared event reducers — pure functions for applying domain events to state (PAN-433)\n *\n * Used by:\n * - Server read model (src/dashboard/server/read-model.ts)\n * - Frontend Zustand store (src/dashboard/frontend/src/lib/store.ts)\n *\n * Both produce identical results for the same event, keeping server and client\n * eventually consistent (the T3Code pattern).\n */\n\nimport type {\n AgentRuntimeSnapshot,\n AgentSnapshot,\n ChannelPermissionRequestSnapshot,\n DashboardSnapshot,\n EmbedProgressSnapshot,\n EnrichProgressSnapshot,\n EnrichStatsSnapshot,\n ResourceStats,\n ReviewStatusSnapshot,\n ScanProgressSnapshot,\n TurnDiffSummary,\n} from './types'\nimport type {\n MemoryObservation,\n MemoryStatus,\n PendingTurn,\n RagDecision,\n ResetMarker,\n} from './memory'\nimport type { DomainEvent } from './events'\n\n// ─── Read model state shape ──────────────────────────────────────────────────\n\nexport interface ResolvedChannelPermissionDecision {\n requestId: string\n agentId: string\n issueId?: string\n behavior: 'allow' | 'deny'\n}\n\nexport interface MemoryHealthSnapshot {\n projectId: string\n issueId: string\n status: 'healthy' | 'degraded' | 'failing'\n reason: string | null\n /** Human-readable cause of the most recent failure (provider error text). */\n detail?: string\n ragDecision?: RagDecision\n updatedAt: string\n}\n\nexport interface MemoryRollupTriggerSnapshot {\n projectId: string\n workspaceId: string\n issueId: string\n pendingTurns: PendingTurn[]\n pendingCount: number\n threshold: number\n triggeredAt: string\n}\n\nexport interface MemoryReadModelState {\n observationsByIssueId: Record<string, MemoryObservation[]>\n statusByIssueId: Record<string, MemoryStatus>\n rollupsByIssueId: Record<string, MemoryRollupTriggerSnapshot[]>\n resetMarkersByScopeId: Record<string, ResetMarker[]>\n healthByIssueId: Record<string, MemoryHealthSnapshot>\n}\n\nexport interface ReadModelState {\n sequence: number\n agentsById: Record<string, AgentSnapshot>\n /**\n * PAN-800 — per-agent runtime state derived from agent.* runtime events.\n * Kept separate from agentsById because it updates on every tool call; merging\n * would cause the whole AgentSnapshot to re-diff on the frontend.\n */\n agentRuntimeById: Record<string, AgentRuntimeSnapshot>\n reviewStatusByIssueId: Record<string, ReviewStatusSnapshot>\n resources: ResourceStats | null\n agentOutputById: Record<string, string[]>\n issuesRaw: unknown[]\n recentActivity: unknown[]\n detailedActivity: unknown[]\n ttsActivity: unknown[]\n shadowInferenceByIssueId: Record<string, string>\n turnDiffSummariesByAgentId: Record<string, TurnDiffSummary[]>\n channelPermissionRequestsById: Record<string, ChannelPermissionRequestSnapshot>\n channelPermissionRequestIdsByAgentId: Record<string, string[]>\n resolvedChannelPermissionDecisionsById: Record<string, ResolvedChannelPermissionDecision>\n resolvedChannelPermissionDecisionIdsByAgentId: Record<string, string[]>\n dashboardLifecycle: DashboardLifecycleState\n /** Conversation names currently undergoing Overdeck-native compaction. */\n conversationsCompactingByName: Record<string, boolean>\n /** Conversation names currently waiting for user permission (PermissionRequest hook). */\n conversationsAwaitingPermissionByName: Record<string, boolean>\n /** Bumped whenever a conversation is created, so the sidebar list can refresh\n * immediately instead of waiting for its poll tick. */\n conversationsListRevision: number\n observationsByIssueId: Record<string, MemoryObservation[]>\n statusByIssueId: Record<string, MemoryStatus>\n rollupsByIssueId: Record<string, MemoryRollupTriggerSnapshot[]>\n resetMarkersByScopeId: Record<string, ResetMarker[]>\n healthByIssueId: Record<string, MemoryHealthSnapshot>\n /** PAN-457 — active scan progress snapshot */\n scanProgress: ScanProgressSnapshot | null\n /** PAN-457 — latest enrichment stats */\n enrichStats: EnrichStatsSnapshot | null\n /** PAN-457 — latest per-session enrichment progress */\n enrichProgressBySessionId: Record<number, EnrichProgressSnapshot>\n /** PAN-457 — latest per-session embedding progress */\n embedProgressBySessionId: Record<number, EmbedProgressSnapshot>\n /** sessionId (from agent snapshot or runtime claudeSessionId) → agentId index */\n agentIdBySessionId: Record<string, string>\n}\n\nexport interface DashboardLifecycleState {\n active: boolean\n reason: string | null\n issueId: string | null\n trigger: string | null\n startedAt: string | null\n completedAt: string | null\n failedAt: string | null\n error: string | null\n}\n\nexport const INITIAL_READ_MODEL_STATE: ReadModelState = {\n sequence: 0,\n agentsById: {},\n agentRuntimeById: {},\n reviewStatusByIssueId: {},\n resources: null,\n agentOutputById: {},\n issuesRaw: [],\n recentActivity: [],\n detailedActivity: [],\n ttsActivity: [],\n shadowInferenceByIssueId: {},\n turnDiffSummariesByAgentId: {},\n channelPermissionRequestsById: {},\n channelPermissionRequestIdsByAgentId: {},\n resolvedChannelPermissionDecisionsById: {},\n resolvedChannelPermissionDecisionIdsByAgentId: {},\n conversationsCompactingByName: {},\n conversationsAwaitingPermissionByName: {},\n conversationsListRevision: 0,\n observationsByIssueId: {},\n statusByIssueId: {},\n rollupsByIssueId: {},\n resetMarkersByScopeId: {},\n healthByIssueId: {},\n scanProgress: null,\n enrichStats: null,\n enrichProgressBySessionId: {},\n embedProgressBySessionId: {},\n agentIdBySessionId: {},\n dashboardLifecycle: {\n active: false,\n reason: null,\n issueId: null,\n trigger: null,\n startedAt: null,\n completedAt: null,\n failedAt: null,\n error: null,\n },\n}\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst MAX_AGENT_OUTPUT_LINES = 200\nconst MAX_ACTIVITY_ENTRIES = 50\nconst MAX_DETAILED_ENTRIES = 200\nconst MAX_TTS_ENTRIES = 50\nconst MAX_SESSION_PROGRESS_ENTRIES = 100\nexport const DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT = 200\nexport const DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE = 50\n\nexport function getMaxMemoryObservationsPerIssue(): number {\n const raw = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env?.OVERDECK_MEMORY_OBSERVATION_LIMIT\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN\n return Number.isInteger(parsed) && parsed > 0 ? parsed : DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE\n}\n\nexport function trimMemoryObservations(observations: MemoryObservation[]): MemoryObservation[] {\n const max = getMaxMemoryObservationsPerIssue()\n return observations.length > max ? observations.slice(-max) : observations\n}\n\nexport function getMaxTurnDiffSummariesPerAgent(): number {\n const raw = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process?.env?.OVERDECK_TURN_DIFF_SUMMARY_LIMIT\n const parsed = raw ? Number.parseInt(raw, 10) : Number.NaN\n return Number.isInteger(parsed) && parsed > 0 ? parsed : DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT\n}\n\nexport function isTerminalTurnDiffSummaryStatus(status: unknown): boolean {\n return status === 'stopped' || status === 'done' || status === 'archived' || status === 'closed'\n}\n\nexport function trimTurnDiffSummaries(summaries: TurnDiffSummary[]): TurnDiffSummary[] {\n const max = getMaxTurnDiffSummariesPerAgent()\n return summaries.length > max ? summaries.slice(-max) : summaries\n}\n\nfunction upsertBoundedSessionProgress<T extends { sessionId: number; timestamp: string }>(\n bySessionId: Record<number, T>,\n progress: T,\n): Record<number, T> {\n const existing = bySessionId[progress.sessionId]\n const entries = Object.values(bySessionId)\n if (existing || entries.length < MAX_SESSION_PROGRESS_ENTRIES) {\n return { ...bySessionId, [progress.sessionId]: progress }\n }\n const keep = entries\n .sort((a, b) => a.timestamp.localeCompare(b.timestamp))\n .slice(-(MAX_SESSION_PROGRESS_ENTRIES - 1))\n const next: Record<number, T> = {}\n for (const entry of [...keep, progress]) next[entry.sessionId] = entry\n return next\n}\n\nexport function omitTurnDiffSummariesForAgent(\n turnDiffSummariesByAgentId: ReadModelState['turnDiffSummariesByAgentId'] | undefined,\n agentId: string,\n): ReadModelState['turnDiffSummariesByAgentId'] {\n const { [agentId]: _removed, ...rest } = turnDiffSummariesByAgentId ?? {}\n return rest\n}\n\n/** Remove all entries in agentIdBySessionId that point to the given agentId. */\nfunction removeAgentFromSessionIndex(\n agentIdBySessionId: ReadModelState['agentIdBySessionId'] | undefined,\n agentId: string,\n): ReadModelState['agentIdBySessionId'] {\n const next: Record<string, string> = {}\n for (const [sessionId, id] of Object.entries(agentIdBySessionId ?? {})) {\n if (id !== agentId) next[sessionId] = id\n }\n return next\n}\n\n// ─── PAN-800 runtime helpers ─────────────────────────────────────────────────\n\nfunction defaultRuntimeSnapshot(agentId: string, timestamp: string, sequence: number): AgentRuntimeSnapshot {\n return {\n id: agentId,\n activity: 'idle',\n lastActivity: timestamp,\n updatedAtSequence: sequence,\n }\n}\n\n/**\n * Bump runtimeSnapshotSequence on the corresponding AgentSnapshot (if present)\n * so low-frequency subscribers can cheaply detect a runtime change. No-op if\n * the agent has no lifecycle snapshot yet (a runtime event arrived before\n * agent.created — unusual but defensive).\n */\nfunction bumpRuntimeSnapshotSequence(\n agentsById: Record<string, AgentSnapshot>,\n agentId: string,\n sequence: number,\n): Record<string, AgentSnapshot> {\n const agent = agentsById[agentId]\n if (!agent) return agentsById\n return { ...agentsById, [agentId]: { ...agent, runtimeSnapshotSequence: sequence } }\n}\n\n// ─── syncSnapshot — bootstrap from a full DashboardSnapshot ──────────────────\n\nexport function syncSnapshot(state: ReadModelState, snapshot: DashboardSnapshot): ReadModelState {\n const agentsById: Record<string, AgentSnapshot> = {}\n for (const agent of snapshot.agents) {\n agentsById[agent.id] = agent\n }\n\n const reviewStatusByIssueId: Record<string, ReviewStatusSnapshot> = {}\n for (const rs of snapshot.reviewStatuses) {\n reviewStatusByIssueId[rs.issueId] = rs\n }\n\n const channelPermissionRequestsById: Record<string, ChannelPermissionRequestSnapshot> = {}\n const channelPermissionRequestIdsByAgentId: Record<string, string[]> = {}\n for (const request of snapshot.channelPermissionRequests ?? []) {\n channelPermissionRequestsById[request.requestId] = request\n const existing = channelPermissionRequestIdsByAgentId[request.agentId] ?? []\n channelPermissionRequestIdsByAgentId[request.agentId] = [...existing, request.requestId]\n }\n\n const memory = snapshot.memory as Partial<MemoryReadModelState> | undefined\n\n // Rebuild sessionId → agentId index from snapshot\n const agentIdBySessionId: Record<string, string> = {}\n for (const agent of snapshot.agents) {\n if (agent.sessionId) agentIdBySessionId[agent.sessionId] = agent.id\n }\n for (const [agentId, runtime] of Object.entries(snapshot.agentRuntimeById ?? {})) {\n if (runtime.claudeSessionId) agentIdBySessionId[runtime.claudeSessionId] = agentId\n }\n\n return {\n ...state,\n sequence: snapshot.sequence,\n agentsById,\n reviewStatusByIssueId,\n agentRuntimeById: snapshot.agentRuntimeById ?? state.agentRuntimeById,\n channelPermissionRequestsById,\n channelPermissionRequestIdsByAgentId,\n resolvedChannelPermissionDecisionsById: {},\n resolvedChannelPermissionDecisionIdsByAgentId: {},\n resources: (snapshot.resources as ResourceStats | undefined) ?? null,\n issuesRaw: (snapshot as any).issues ?? state.issuesRaw,\n recentActivity: snapshot.recentActivity ? [...snapshot.recentActivity] : state.recentActivity,\n observationsByIssueId: memory?.observationsByIssueId ?? state.observationsByIssueId,\n statusByIssueId: memory?.statusByIssueId ?? state.statusByIssueId,\n rollupsByIssueId: memory?.rollupsByIssueId ?? state.rollupsByIssueId,\n resetMarkersByScopeId: memory?.resetMarkersByScopeId ?? state.resetMarkersByScopeId,\n healthByIssueId: memory?.healthByIssueId ?? state.healthByIssueId,\n scanProgress: snapshot.scanProgress ?? null,\n enrichStats: snapshot.enrichStats ?? null,\n enrichProgressBySessionId: snapshot.enrichProgressBySessionId ?? {},\n embedProgressBySessionId: snapshot.embedProgressBySessionId ?? {},\n agentIdBySessionId,\n }\n}\n\n// ─── applyEvent — apply a single domain event ───────────────────────────────\n\nexport function applyEvent(state: ReadModelState, event: DomainEvent): ReadModelState {\n switch (event.type) {\n case 'agent.created': {\n const existing = state.agentsById[event.payload.agentId]\n const agent = event.payload.agent\n const nextAgentIdBySessionId = agent.sessionId\n ? { ...state.agentIdBySessionId, [agent.sessionId]: agent.id }\n : state.agentIdBySessionId\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: existing\n ? { ...existing, ...agent }\n : agent,\n },\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'agent.started': {\n const agent = event.payload.agent\n const nextAgentIdBySessionId = agent.sessionId\n ? { ...state.agentIdBySessionId, [agent.sessionId]: agent.id }\n : state.agentIdBySessionId\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: agent,\n },\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'agent.enrichment_changed': {\n const agent = state.agentsById[event.payload.agentId]\n if (!agent) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: {\n ...agent,\n role: event.payload.role ?? agent.role,\n hasPendingQuestion: event.payload.hasPendingQuestion ?? false,\n pendingQuestionCount: event.payload.pendingQuestionCount ?? 0,\n pendingQuestionPrompt: event.payload.pendingQuestionPrompt,\n pendingQuestionReason: event.payload.pendingQuestionReason,\n pendingInputCount: event.payload.pendingInputCount,\n pendingInputKinds: event.payload.pendingInputKinds,\n pendingAskUserQuestion: event.payload.pendingAskUserQuestion,\n pendingProposedPlan: event.payload.pendingProposedPlan,\n resolution: event.payload.resolution,\n resolutionCount: event.payload.resolutionCount,\n },\n },\n }\n }\n\n case 'agent.stopped': {\n const { [event.payload.agentId]: _removed, ...rest } = state.agentsById\n // PAN-800 — mark the runtime snapshot stopped too. pan kill bypasses the\n // Stop hook, so without this fold a killed agent shows activity: \"idle\"\n // forever. Retain the row (don't delete) so the projection cache has the\n // last-known snapshot for forensics.\n const runtimeById = state.agentRuntimeById ?? {}\n const prevRuntime = runtimeById[event.payload.agentId]\n const nextRuntimeById = prevRuntime\n ? {\n ...runtimeById,\n [event.payload.agentId]: {\n ...prevRuntime,\n activity: 'stopped' as const,\n currentTool: undefined,\n thinking: undefined,\n waiting: undefined,\n channelReply: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n },\n }\n : runtimeById\n const permissionRequestIdsByAgentId = state.channelPermissionRequestIdsByAgentId ?? {}\n const pendingIds = permissionRequestIdsByAgentId[event.payload.agentId] ?? []\n const nextPermissionRequestsById = { ...state.channelPermissionRequestsById }\n for (const requestId of pendingIds) {\n delete nextPermissionRequestsById[requestId]\n }\n const { [event.payload.agentId]: _removedPendingIds, ...restPendingIds } =\n permissionRequestIdsByAgentId\n\n const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {}\n const resolvedIds = resolvedDecisionIdsByAgentId[event.payload.agentId] ?? []\n const nextResolvedDecisionsById = { ...(state.resolvedChannelPermissionDecisionsById ?? {}) }\n for (const requestId of resolvedIds) {\n delete nextResolvedDecisionsById[requestId]\n }\n const { [event.payload.agentId]: _removedResolvedIds, ...restResolvedIds } =\n resolvedDecisionIdsByAgentId\n\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: rest,\n agentRuntimeById: nextRuntimeById,\n channelPermissionRequestsById: nextPermissionRequestsById,\n channelPermissionRequestIdsByAgentId: restPendingIds,\n resolvedChannelPermissionDecisionsById: nextResolvedDecisionsById,\n resolvedChannelPermissionDecisionIdsByAgentId: restResolvedIds,\n turnDiffSummariesByAgentId: omitTurnDiffSummariesForAgent(state.turnDiffSummariesByAgentId, event.payload.agentId),\n agentIdBySessionId: removeAgentFromSessionIndex(state.agentIdBySessionId, event.payload.agentId),\n }\n }\n\n case 'agent.status_changed': {\n const agent = state.agentsById[event.payload.agentId] ?? (\n event.payload.role === 'strike' && event.payload.issueId\n ? {\n id: event.payload.agentId,\n issueId: event.payload.issueId,\n status: event.payload.status,\n role: 'strike' as const,\n startedAt: event.timestamp,\n }\n : undefined\n )\n if (!agent) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const nextTurnDiffSummariesByAgentId = isTerminalTurnDiffSummaryStatus(event.payload.status)\n ? omitTurnDiffSummariesForAgent(state.turnDiffSummariesByAgentId, event.payload.agentId)\n : state.turnDiffSummariesByAgentId\n const nextAgent: AgentSnapshot = (() => {\n const base: Record<string, unknown> = { ...agent, status: event.payload.status }\n const optionalFields = [\n 'hasLiveTmuxSession', 'stoppedByUser', 'stoppedByPause', 'paused', 'pausedReason', 'pausedAt',\n 'troubled', 'troubledAt', 'consecutiveFailures',\n 'firstFailureInRunAt', 'lastFailureAt', 'lastFailureReason', 'lastFailureNextRetryAt',\n 'kickoffDelivered', 'hostOverride', 'role', 'model', 'workspace', 'sessionId',\n 'lastActivity', 'lastResumeAt', 'stoppedAt', 'branch', 'costSoFar',\n 'phase', 'workType', 'roleRunHead',\n 'flywheelRunId', 'reviewSubRole', 'reviewRunId', 'reviewOutputPath',\n 'reviewSynthesisAgentId', 'reviewDeadlineAt', 'reviewMonitorSignaled', 'reviewRetryAttempt',\n 'inspectSubRole', 'deliveryMethod', 'supervisorEnabled', 'channelsEnabled',\n ] as const\n for (const field of optionalFields) {\n if (field in event.payload) {\n const value = (event.payload as Record<string, unknown>)[field]\n if (value === null || value === undefined) {\n delete base[field]\n } else {\n base[field] = value\n }\n }\n }\n // PAN-1520 (fixes #339) — clear stale pending-input fields whenever the\n // agent transitions out of an actively-running state. The enrichment\n // poller stops emitting events for non-running agents, so without this\n // a paused or stopped agent would keep showing INPUT/AskUserQuestion\n // forever from the operator's perspective.\n if (event.payload.status !== 'running' && event.payload.status !== 'starting') {\n delete base['hasPendingQuestion']\n delete base['pendingQuestionCount']\n delete base['pendingQuestionPrompt']\n delete base['pendingQuestionReason']\n delete base['pendingInputCount']\n delete base['pendingInputKinds']\n delete base['pendingAskUserQuestion']\n delete base['pendingProposedPlan']\n }\n return base as AgentSnapshot\n })()\n\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: nextAgent,\n },\n turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,\n agentIdBySessionId: event.payload.sessionId\n ? { ...state.agentIdBySessionId, [event.payload.sessionId]: event.payload.agentId }\n : state.agentIdBySessionId,\n }\n }\n\n case 'agent.heartbeat_dead': {\n const agent = state.agentsById[event.payload.agentId]\n if (!agent) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const runtimeById = state.agentRuntimeById ?? {}\n const prevRuntime = runtimeById[event.payload.agentId]\n const nextRuntimeById = prevRuntime\n ? {\n ...runtimeById,\n [event.payload.agentId]: {\n ...prevRuntime,\n activity: 'stopped' as const,\n currentTool: undefined,\n thinking: undefined,\n waiting: undefined,\n channelReply: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n },\n }\n : runtimeById\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [event.payload.agentId]: { ...agent, status: 'error' as const },\n },\n agentRuntimeById: nextRuntimeById,\n }\n }\n\n case 'agent.output_received': {\n const existing = state.agentOutputById[event.payload.agentId] ?? []\n const updated = [...existing, ...event.payload.lines].slice(-MAX_AGENT_OUTPUT_LINES)\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentOutputById: {\n ...state.agentOutputById,\n [event.payload.agentId]: updated,\n },\n }\n }\n\n case 'pipeline.status_changed':\n case 'review.status_changed':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: {\n ...state.reviewStatusByIssueId,\n [event.payload.issueId]: event.payload.status,\n },\n }\n\n // PAN-915 — event-driven reviewer sub-status. Avoids tmux polling in\n // enrichReviewStatusFromSessions for the common case (reviewer dispatched).\n case 'review.reviewer_started': {\n const { issueId, role, sessionName } = event.payload\n const existing = state.reviewStatusByIssueId[issueId]\n const prevSubs = existing?.reviewSubStatuses ?? {}\n const prevNames = existing?.reviewSessionNames ?? []\n const nextNames = prevNames.includes(sessionName) ? prevNames : [...prevNames, sessionName]\n const nextStatus: ReviewStatusSnapshot = {\n ...(existing ?? { issueId }),\n reviewSubStatuses: { ...prevSubs, [role]: 'running' },\n reviewSessionNames: nextNames,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: { ...state.reviewStatusByIssueId, [issueId]: nextStatus },\n }\n }\n\n case 'review.reviewer_completed': {\n const { issueId, role } = event.payload\n const existing = state.reviewStatusByIssueId[issueId]\n if (!existing) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const prevSubs = existing.reviewSubStatuses ?? {}\n const nextStatus: ReviewStatusSnapshot = {\n ...existing,\n reviewSubStatuses: { ...prevSubs, [role]: 'done' },\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: { ...state.reviewStatusByIssueId, [issueId]: nextStatus },\n }\n }\n\n case 'review.specialist.timed_out':\n // Telemetry-only event. Sequence update lets clients observe the event\n // stream without mutating the durable review-status snapshot.\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'review.coordinator_started': {\n const { issueId, sessionName } = event.payload\n const existing = state.reviewStatusByIssueId[issueId]\n const nextStatus: ReviewStatusSnapshot = {\n ...(existing ?? { issueId }),\n reviewCoordinatorSessionName: sessionName,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n reviewStatusByIssueId: { ...state.reviewStatusByIssueId, [issueId]: nextStatus },\n }\n }\n\n case 'review.coordinator.died':\n // Telemetry-only. The durable review-status row is updated by recovery\n // checks; keep clients in sequence so event stream subscribers can alert.\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'pipeline.review-started':\n case 'pipeline.review-completed':\n case 'pipeline.test-started':\n case 'pipeline.test-completed':\n // Handled by review.status_changed; sequence-only update keeps clients in lockstep.\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'merge.ready':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n // PAN-1048 — specialist.* events still flow but no longer feed a separate\n // projection. The same lifecycle is now visible via agent.started /\n // agent.stopped + role-filtered agentsById. Sequence-only update keeps\n // clients in lockstep.\n case 'specialist.started':\n case 'specialist.completed':\n case 'specialist.failed':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'resources.updated':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n resources: event.payload.resources,\n }\n\n case 'issues.snapshot':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n issuesRaw: event.payload.issues as unknown[],\n }\n\n case 'issues.updated':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'issue.statusChanged': {\n const { issueId, status, canonicalStatus, labels } = event.payload\n const updatedIssues = (state.issuesRaw as Array<Record<string, unknown>>).map(issue => {\n if (issue['identifier'] === issueId || issue['id'] === issueId) {\n const patch: Record<string, unknown> = { ...issue, status, canonicalStatus, state: canonicalStatus }\n if (labels) patch.labels = labels\n return patch\n }\n return issue\n })\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n issuesRaw: updatedIssues,\n }\n }\n\n case 'activity.updated':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n recentActivity: (event.payload.events as unknown[]).slice(0, MAX_ACTIVITY_ENTRIES),\n }\n\n case 'shadow.inference_update':\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n shadowInferenceByIssueId: {\n ...state.shadowInferenceByIssueId,\n [event.payload.issueId]: event.payload.content,\n },\n }\n\n case 'planning.started': {\n const sessionName = event.payload.sessionName as string\n const issueId = event.payload.issueId as string\n if (sessionName) {\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: {\n ...state.agentsById,\n [sessionName]: {\n ...state.agentsById[sessionName],\n id: sessionName,\n issueId,\n status: 'running',\n startedAt: event.timestamp,\n runtime: (event.payload.harness as 'claude-code' | 'pi' | 'codex') ?? 'claude-code',\n role: 'plan' as const,\n },\n },\n }\n }\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n }\n case 'workspace.created':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'workspace.wipe_started': {\n const { issueId } = event.payload\n const updatedIssues = (state.issuesRaw as Array<Record<string, unknown>>).map(issue => {\n if (issue['identifier'] === issueId || issue['id'] === issueId) {\n return { ...issue, canonicalStatus: 'wiping', state: 'wiping' }\n }\n return issue\n })\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n issuesRaw: updatedIssues,\n }\n }\n\n case 'workspace.destroyed':\n case 'workspace.deleted': {\n const { issueId } = event.payload\n const removedAgentIds = Object.entries(state.agentsById)\n .filter(([, agent]) => agent.issueId === issueId)\n .map(([agentId]) => agentId)\n const updatedAgents = Object.fromEntries(\n Object.entries(state.agentsById).filter(([, agent]) => agent.issueId !== issueId)\n )\n let nextTurnDiffSummariesByAgentId = state.turnDiffSummariesByAgentId\n let nextAgentIdBySessionId = state.agentIdBySessionId\n for (const agentId of removedAgentIds) {\n nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, agentId)\n nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, agentId)\n }\n const updatedIssues = (state.issuesRaw as Array<Record<string, unknown>>).map(issue => {\n if (issue['identifier'] === issueId || issue['id'] === issueId) {\n return { ...issue, status: 'Todo', canonicalStatus: 'todo', state: 'todo' }\n }\n return issue\n })\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: updatedAgents,\n turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,\n agentIdBySessionId: nextAgentIdBySessionId,\n issuesRaw: updatedIssues,\n }\n }\n\n case 'workspace.aborted': {\n const { issueId, sessionName } = event.payload\n let updatedAgents: typeof state.agentsById\n let nextTurnDiffSummariesByAgentId = state.turnDiffSummariesByAgentId\n let nextAgentIdBySessionId = state.agentIdBySessionId\n if (sessionName) {\n const { [sessionName]: _removed, ...rest } = state.agentsById\n updatedAgents = rest\n nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, sessionName)\n nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, sessionName)\n } else {\n const removedAgentIds = Object.entries(state.agentsById)\n .filter(([, agent]) => agent.issueId === issueId)\n .map(([agentId]) => agentId)\n updatedAgents = Object.fromEntries(\n Object.entries(state.agentsById).filter(([, agent]) => agent.issueId !== issueId)\n )\n for (const agentId of removedAgentIds) {\n nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, agentId)\n nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, agentId)\n }\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentsById: updatedAgents,\n turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'planning.failed':\n case 'planning.sync':\n case 'plan.item_status_changed':\n case 'plan.subitem_status_changed':\n case 'plan.items_unblocked':\n case 'operator.intervention':\n case 'substrate.bug_filed':\n case 'cost.event_recorded':\n return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n\n case 'memory.observation_created': {\n const observation = event.payload.observation\n const existing = state.observationsByIssueId[observation.issueId] ?? []\n const index = existing.findIndex(entry => entry.id === observation.id)\n const updated = trimMemoryObservations(index === -1\n ? [...existing, observation]\n : existing.map((entry, entryIndex) => entryIndex === index ? observation : entry))\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n observationsByIssueId: {\n ...state.observationsByIssueId,\n [observation.issueId]: updated,\n },\n }\n }\n\n case 'memory.status_updated': {\n const { identity, status } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n statusByIssueId: {\n ...state.statusByIssueId,\n [identity.issueId]: status,\n },\n }\n }\n\n case 'memory.rollup_triggered': {\n const trigger: MemoryRollupTriggerSnapshot = {\n projectId: event.payload.projectId,\n workspaceId: event.payload.workspaceId,\n issueId: event.payload.issueId,\n pendingTurns: [],\n pendingCount: event.payload.pendingCount,\n threshold: event.payload.threshold,\n triggeredAt: event.timestamp,\n }\n const existing = state.rollupsByIssueId[event.payload.issueId] ?? []\n const updated = [...existing, trigger].slice(-10)\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n rollupsByIssueId: {\n ...state.rollupsByIssueId,\n [event.payload.issueId]: updated,\n },\n }\n }\n\n case 'memory.reset_marker_created': {\n const { marker } = event.payload\n const key = `${marker.scope}:${marker.scopeId}`\n const existing = state.resetMarkersByScopeId[key] ?? []\n const index = existing.findIndex(entry => entry.id === marker.id)\n const updated = index === -1\n ? [...existing, marker]\n : existing.map((entry, entryIndex) => entryIndex === index ? marker : entry)\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n resetMarkersByScopeId: {\n ...state.resetMarkersByScopeId,\n [key]: updated,\n },\n }\n }\n\n case 'memory.health_changed': {\n const health: MemoryHealthSnapshot = {\n projectId: event.payload.projectId,\n issueId: event.payload.issueId,\n status: event.payload.status,\n reason: event.payload.reason,\n // Omit absent optionals entirely — an explicit `key: undefined` is not a\n // valid JSON value and makes the whole DashboardSnapshot fail the\n // Schema.Json codec used for the `memory` field, breaking the RPC bootstrap.\n ...(event.payload.detail !== undefined ? { detail: event.payload.detail } : {}),\n ...(event.payload.ragDecision !== undefined ? { ragDecision: event.payload.ragDecision } : {}),\n updatedAt: event.timestamp,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n healthByIssueId: {\n ...state.healthByIssueId,\n [event.payload.issueId]: health,\n },\n }\n }\n\n // ─── PAN-800 Agent Runtime Events ──────────────────────────────────────\n case 'agent.activity_changed': {\n const { agentId, activity, currentTool } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n activity,\n currentTool: activity === 'working' ? currentTool : undefined,\n // Clear thinking/waiting on transitions away from those activities.\n thinking: activity === 'thinking' ? prev.thinking : undefined,\n waiting: activity === 'waiting' ? prev.waiting : undefined,\n channelReply: activity === 'working' ? undefined : prev.channelReply,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.thinking_started': {\n const { agentId, lastToolAt } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n activity: 'thinking',\n currentTool: undefined,\n thinking: { since: event.timestamp, lastToolAt },\n waiting: undefined,\n channelReply: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.thinking_stopped': {\n const { agentId } = event.payload\n const prev = state.agentRuntimeById[agentId]\n if (!prev) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n // Clear the thinking state but leave activity for the follow-up event\n // (agent.activity_changed / waiting_started / stopped) to set.\n const next: AgentRuntimeSnapshot = {\n ...prev,\n thinking: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.waiting_started': {\n const { agentId, reason, message } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n activity: 'waiting',\n currentTool: undefined,\n thinking: undefined,\n waiting: {\n reason,\n startedAt: event.timestamp,\n message,\n },\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.waiting_cleared': {\n const { agentId } = event.payload\n const prev = state.agentRuntimeById[agentId]\n if (!prev) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const next: AgentRuntimeSnapshot = {\n ...prev,\n waiting: undefined,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.permission_requested': {\n const request = event.payload\n const permissionRequestIdsByAgentId = state.channelPermissionRequestIdsByAgentId ?? {}\n const resolvedDecisionsById = state.resolvedChannelPermissionDecisionsById ?? {}\n const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {}\n const nextPendingIds = permissionRequestIdsByAgentId[request.agentId] ?? []\n const resolvedDecision = resolvedDecisionsById[request.requestId]\n const nextResolvedDecisionsById = { ...resolvedDecisionsById }\n const nextResolvedIdsByAgentId = { ...resolvedDecisionIdsByAgentId }\n if (resolvedDecision) {\n delete nextResolvedDecisionsById[request.requestId]\n const prevResolvedIds = nextResolvedIdsByAgentId[resolvedDecision.agentId] ?? []\n const filteredResolvedIds = prevResolvedIds.filter((id) => id !== request.requestId)\n if (filteredResolvedIds.length > 0) {\n nextResolvedIdsByAgentId[resolvedDecision.agentId] = filteredResolvedIds\n } else {\n delete nextResolvedIdsByAgentId[resolvedDecision.agentId]\n }\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n channelPermissionRequestsById: {\n ...state.channelPermissionRequestsById,\n [request.requestId]: request,\n },\n channelPermissionRequestIdsByAgentId: {\n ...permissionRequestIdsByAgentId,\n [request.agentId]: nextPendingIds.includes(request.requestId)\n ? nextPendingIds\n : [...nextPendingIds, request.requestId],\n },\n resolvedChannelPermissionDecisionsById: nextResolvedDecisionsById,\n resolvedChannelPermissionDecisionIdsByAgentId: nextResolvedIdsByAgentId,\n }\n }\n\n case 'agent.permission_resolved': {\n const { [event.payload.requestId]: _removed, ...rest } = state.channelPermissionRequestsById\n const nextPendingIdsByAgentId = { ...(state.channelPermissionRequestIdsByAgentId ?? {}) }\n const prevPendingIds = nextPendingIdsByAgentId[event.payload.agentId] ?? []\n const filteredPendingIds = prevPendingIds.filter((id) => id !== event.payload.requestId)\n if (filteredPendingIds.length > 0) {\n nextPendingIdsByAgentId[event.payload.agentId] = filteredPendingIds\n } else {\n delete nextPendingIdsByAgentId[event.payload.agentId]\n }\n\n const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {}\n const nextResolvedIds = resolvedDecisionIdsByAgentId[event.payload.agentId] ?? []\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n channelPermissionRequestsById: rest,\n channelPermissionRequestIdsByAgentId: nextPendingIdsByAgentId,\n resolvedChannelPermissionDecisionsById: {\n ...(state.resolvedChannelPermissionDecisionsById ?? {}),\n [event.payload.requestId]: {\n requestId: event.payload.requestId,\n agentId: event.payload.agentId,\n issueId: event.payload.issueId,\n behavior: event.payload.behavior,\n },\n },\n resolvedChannelPermissionDecisionIdsByAgentId: {\n ...resolvedDecisionIdsByAgentId,\n [event.payload.agentId]: nextResolvedIds.includes(event.payload.requestId)\n ? nextResolvedIds\n : [...nextResolvedIds, event.payload.requestId],\n },\n }\n }\n\n case 'agent.message_received': {\n const { agentId, direction } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n lastMessageAt: event.timestamp,\n channelReply: direction === 'to_agent' ? undefined : prev.channelReply,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.channel_reply': {\n const { agentId, reply } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n channelReply: {\n ...reply,\n reportedAt: event.timestamp,\n },\n resolution:\n reply.kind === 'done'\n ? 'done'\n : reply.kind === 'needs_input'\n ? 'needs_input'\n : prev.resolution,\n resolutionUpdatedAt:\n reply.kind === 'done' || reply.kind === 'needs_input'\n ? event.timestamp\n : prev.resolutionUpdatedAt,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.model_set': {\n const { agentId, model, claudeSessionId, sessionModel, sessionHarness } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n model,\n claudeSessionId: claudeSessionId ?? prev.claudeSessionId,\n sessionModel: sessionModel ?? prev.sessionModel,\n sessionHarness: sessionHarness ?? prev.sessionHarness,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n let nextAgentIdBySessionId = state.agentIdBySessionId\n if (claudeSessionId && claudeSessionId !== prev.claudeSessionId) {\n nextAgentIdBySessionId = { ...state.agentIdBySessionId, [claudeSessionId]: agentId }\n if (prev.claudeSessionId && state.agentIdBySessionId[prev.claudeSessionId] === agentId) {\n const { [prev.claudeSessionId]: _removed, ...rest } = state.agentIdBySessionId\n nextAgentIdBySessionId = { ...rest, [claudeSessionId]: agentId }\n }\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n agentIdBySessionId: nextAgentIdBySessionId,\n }\n }\n\n case 'agent.current_issue_set': {\n const { agentId, currentIssue } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n currentIssue,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.context_saturation_changed': {\n const { agentId, contextSaturatedAt } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n contextSaturatedAt,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.resolution_changed': {\n const { agentId, resolution, resolutionCount } = event.payload\n const prev = state.agentRuntimeById[agentId]\n ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence)\n const next: AgentRuntimeSnapshot = {\n ...prev,\n resolution,\n resolutionCount,\n resolutionUpdatedAt: event.timestamp,\n lastActivity: event.timestamp,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'agent.state_restored': {\n const { agentId, snapshot } = event.payload\n // Seed directly from the restored snapshot but use the new event's sequence\n // so downstream consumers key off a monotonic value.\n const next: AgentRuntimeSnapshot = {\n ...snapshot,\n updatedAtSequence: event.sequence,\n }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n agentRuntimeById: { ...state.agentRuntimeById, [agentId]: next },\n agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),\n }\n }\n\n case 'activity.entry': {\n const entry = event.payload as Record<string, unknown>;\n const newEntry = { id: entry.id, timestamp: event.timestamp, ...entry };\n const updated = [newEntry, ...(state.recentActivity as Array<Record<string, unknown>>)].slice(0, MAX_ACTIVITY_ENTRIES);\n return { ...state, sequence: Math.max(state.sequence, event.sequence), recentActivity: updated };\n }\n\n case 'activity.detailed': {\n const entry = event.payload as Record<string, unknown>;\n const newEntry = { id: entry.id, timestamp: event.timestamp, ...entry };\n const updated = [newEntry, ...(state.detailedActivity as Array<Record<string, unknown>>)].slice(0, MAX_DETAILED_ENTRIES);\n return { ...state, sequence: Math.max(state.sequence, event.sequence), detailedActivity: updated };\n }\n\n case 'activity.tts': {\n const entry = event.payload as Record<string, unknown>;\n const newEntry = { id: entry.id, timestamp: event.timestamp, ...entry };\n const updated = [newEntry, ...(state.ttsActivity as Array<Record<string, unknown>>)].slice(0, MAX_TTS_ENTRIES);\n return { ...state, sequence: Math.max(state.sequence, event.sequence), ttsActivity: updated };\n }\n\n case 'dashboard.lifecycle_started': {\n const { reason, issueId, trigger } = event.payload as { reason: string; issueId: string | null; trigger: string };\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n dashboardLifecycle: {\n active: true,\n reason,\n issueId,\n trigger,\n startedAt: event.timestamp,\n completedAt: null,\n failedAt: null,\n error: null,\n },\n };\n }\n\n case 'dashboard.lifecycle_completed': {\n const { reason, issueId } = event.payload as { reason: string; issueId: string | null; durationMs: number };\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n dashboardLifecycle: {\n ...state.dashboardLifecycle,\n active: false,\n reason: reason ?? state.dashboardLifecycle.reason,\n issueId: issueId ?? state.dashboardLifecycle.issueId,\n completedAt: event.timestamp,\n },\n };\n }\n\n case 'dashboard.lifecycle_failed': {\n const { reason, issueId, error } = event.payload as { reason: string; issueId: string | null; error: string };\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n dashboardLifecycle: {\n ...state.dashboardLifecycle,\n active: false,\n reason: reason ?? state.dashboardLifecycle.reason,\n issueId: issueId ?? state.dashboardLifecycle.issueId,\n failedAt: event.timestamp,\n error,\n },\n };\n }\n\n case 'agent.turn_diff_completed': {\n const p = event.payload as {\n agentId: string\n turnId: string\n completedAt: string\n files: Array<{ path: string; kind?: string; additions?: number; deletions?: number }>\n checkpointRef?: string\n assistantMessageId?: string\n checkpointTurnCount?: number\n }\n const existing = state.turnDiffSummariesByAgentId[p.agentId] ?? []\n const summary: TurnDiffSummary = {\n turnId: p.turnId,\n completedAt: p.completedAt,\n files: p.files,\n checkpointRef: p.checkpointRef,\n assistantMessageId: p.assistantMessageId ?? undefined,\n checkpointTurnCount: p.checkpointTurnCount,\n }\n // Deduplicate by turnId — replace if exists, append otherwise\n const idx = existing.findIndex(s => s.turnId === p.turnId)\n const updated = trimTurnDiffSummaries(\n idx >= 0\n ? existing.map((s, i) => i === idx ? summary : s)\n : [...existing, summary]\n )\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n turnDiffSummariesByAgentId: {\n ...state.turnDiffSummariesByAgentId,\n [p.agentId]: updated,\n },\n }\n }\n\n case 'conversation.compacting_changed': {\n const { conversationName, compacting } = event.payload\n if (!compacting) {\n const { [conversationName]: _removed, ...rest } = state.conversationsCompactingByName\n return { ...state, conversationsCompactingByName: rest }\n }\n return {\n ...state,\n conversationsCompactingByName: { ...state.conversationsCompactingByName, [conversationName]: true },\n }\n }\n\n case 'conversation.created': {\n return { ...state, conversationsListRevision: state.conversationsListRevision + 1 }\n }\n\n case 'conversation.title_changed': {\n return { ...state, conversationsListRevision: state.conversationsListRevision + 1 }\n }\n\n case 'conversation.permission_changed': {\n const { conversationName, waiting } = event.payload\n if (!waiting) {\n const { [conversationName]: _removed, ...rest } = state.conversationsAwaitingPermissionByName\n return { ...state, conversationsAwaitingPermissionByName: rest }\n }\n return {\n ...state,\n conversationsAwaitingPermissionByName: { ...state.conversationsAwaitingPermissionByName, [conversationName]: true },\n }\n }\n\n // ─── Scan events (PAN-457) ───────────────────────────────────────────────\n\n case 'scan.started': {\n const { mode, dirs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n scanProgress: {\n active: true,\n mode,\n dirs,\n dirsProcessed: 0,\n dirsTotal: 0,\n sessionsFound: 0,\n elapsedMs: 0,\n inserted: 0,\n updated: 0,\n skipped: 0,\n errors: 0,\n durationMs: 0,\n },\n }\n }\n\n case 'scan.progress': {\n if (!state.scanProgress) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const { dirsProcessed, dirsTotal, sessionsFound, elapsedMs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n scanProgress: {\n ...state.scanProgress,\n dirsProcessed,\n dirsTotal,\n sessionsFound,\n elapsedMs,\n },\n }\n }\n\n case 'scan.complete': {\n if (!state.scanProgress) return { ...state, sequence: Math.max(state.sequence, event.sequence) }\n const { inserted, updated, skipped, errors, durationMs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n scanProgress: {\n ...state.scanProgress,\n active: false,\n inserted,\n updated,\n skipped,\n errors,\n durationMs,\n },\n }\n }\n\n // ─── Enrich events (PAN-457) ─────────────────────────────────────────────\n\n case 'enrich.progress': {\n const { sessionId, level, model, cost, success, error } = event.payload\n const prev = state.enrichStats ?? { processed: 0, totalCost: 0, failures: 0, durationMs: 0 }\n const progress = { sessionId, level, model, cost, success, error, timestamp: event.timestamp }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n enrichStats: {\n processed: prev.processed + 1,\n totalCost: prev.totalCost + (success ? cost : 0),\n failures: prev.failures + (success ? 0 : 1),\n durationMs: 0,\n },\n enrichProgressBySessionId: upsertBoundedSessionProgress(state.enrichProgressBySessionId, progress),\n }\n }\n\n case 'enrich.complete': {\n const { processed, totalCost, failures, durationMs } = event.payload\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n enrichStats: { processed, totalCost, failures, durationMs },\n enrichProgressBySessionId: {},\n }\n }\n\n case 'embed.progress': {\n const { sessionId, model, success, error } = event.payload\n const progress = { sessionId, model, success, error, timestamp: event.timestamp }\n return {\n ...state,\n sequence: Math.max(state.sequence, event.sequence),\n embedProgressBySessionId: upsertBoundedSessionProgress(state.embedProgressBySessionId, progress),\n }\n }\n\n default: {\n void (event as never)\n return state\n }\n }\n}\n\n// ─── applyEvents — batch apply ───────────────────────────────────────────────\n\nexport function applyEvents(state: ReadModelState, events: DomainEvent[]): ReadModelState {\n return events.reduce(applyEvent, state)\n}\n","import { Schema } from \"effect\"\n\nexport const FlywheelStatsCriterionStatus = Schema.Literals([\n \"green\",\n \"yellow\",\n \"red\",\n \"insufficient_data\",\n])\nexport type FlywheelStatsCriterionStatus = typeof FlywheelStatsCriterionStatus.Type\n\nexport const FlywheelStatsTrend = Schema.Literals([\"up\", \"down\", \"flat\"])\nexport type FlywheelStatsTrend = typeof FlywheelStatsTrend.Type\n\nexport const FlywheelStatsCriterionValueObject = Schema.Record(Schema.String, Schema.Json)\nexport type FlywheelStatsCriterionValueObject = typeof FlywheelStatsCriterionValueObject.Type\n\nexport const FlywheelStatsCriterionValue = Schema.Union([\n Schema.Number,\n FlywheelStatsCriterionValueObject,\n])\nexport type FlywheelStatsCriterionValue = typeof FlywheelStatsCriterionValue.Type\n\nexport interface FlywheelStatsCriterion {\n label: string\n value: FlywheelStatsCriterionValue\n target: FlywheelStatsCriterionValue\n status: FlywheelStatsCriterionStatus\n trend?: FlywheelStatsTrend | undefined\n sampleSize: number\n dataSufficient: boolean\n}\n\nexport const FlywheelStatsCriterion = Schema.Struct({\n label: Schema.String,\n value: FlywheelStatsCriterionValue,\n target: FlywheelStatsCriterionValue,\n status: FlywheelStatsCriterionStatus,\n trend: Schema.optional(FlywheelStatsTrend),\n sampleSize: Schema.Number,\n dataSufficient: Schema.Boolean,\n})\n\nexport interface FlywheelStatsCriteria {\n c1_bugRate: FlywheelStatsCriterion\n c2_p0Bugs: FlywheelStatsCriterion\n c3_passRate: FlywheelStatsCriterion\n c4_mttr: FlywheelStatsCriterion\n c5_intervention: FlywheelStatsCriterion\n c6_timeConsistency: FlywheelStatsCriterion\n c7_flake: FlywheelStatsCriterion\n}\n\nexport const FlywheelStatsCriteria = Schema.Struct({\n c1_bugRate: FlywheelStatsCriterion,\n c2_p0Bugs: FlywheelStatsCriterion,\n c3_passRate: FlywheelStatsCriterion,\n c4_mttr: FlywheelStatsCriterion,\n c5_intervention: FlywheelStatsCriterion,\n c6_timeConsistency: FlywheelStatsCriterion,\n c7_flake: FlywheelStatsCriterion,\n})\n\nexport interface FlywheelStats {\n window: string\n generatedAt: string\n criteria: FlywheelStatsCriteria\n}\n\nexport const FlywheelStats = Schema.Struct({\n window: Schema.String,\n generatedAt: Schema.String,\n criteria: FlywheelStatsCriteria,\n})\n\nexport const decodeFlywheelStats = Schema.decodeUnknownSync(FlywheelStats)\nexport const encodeFlywheelStats = Schema.encodeSync(FlywheelStats)\n","import { Schema } from \"effect\"\nimport type { Harness } from \"./types\"\n\nexport const CONTEXT_LAYER_KINDS = [\"global\", \"project\", \"workspace\"] as const\nexport const CONTEXT_PREVIEW_HARNESSES = [\"claude-code\", \"ohmypi\", \"codex\"] as const satisfies readonly Harness[]\n\nexport const ContextLayerKind = Schema.Literals(CONTEXT_LAYER_KINDS)\nexport type ContextLayerKind = typeof ContextLayerKind.Type\n\nexport const ContextPreviewHarness = Schema.Literals(CONTEXT_PREVIEW_HARNESSES)\nexport type ContextPreviewHarness = typeof ContextPreviewHarness.Type\n\nexport const ContextProjectSummary = Schema.Struct({\n projectKey: Schema.String,\n name: Schema.String,\n path: Schema.String,\n issuePrefix: Schema.optional(Schema.String),\n tracker: Schema.optional(Schema.Literals([\"linear\", \"github\", \"gitlab\", \"rally\"])),\n workspaceRoot: Schema.optional(Schema.String),\n})\nexport type ContextProjectSummary = typeof ContextProjectSummary.Type\n\nexport const ContextWorkspaceSummary = Schema.Struct({\n projectKey: Schema.String,\n path: Schema.String,\n name: Schema.String,\n issueId: Schema.optional(Schema.String),\n branch: Schema.optional(Schema.String),\n})\nexport type ContextWorkspaceSummary = typeof ContextWorkspaceSummary.Type\n\nconst ContextLayerBase = {\n file: Schema.String,\n exists: Schema.Boolean,\n content: Schema.String,\n editable: Schema.Boolean,\n}\n\nexport const GlobalContextLayerRecord = Schema.Struct({\n kind: Schema.Literal(\"global\"),\n ...ContextLayerBase,\n})\nexport type GlobalContextLayerRecord = typeof GlobalContextLayerRecord.Type\n\nexport const ProjectContextLayerRecord = Schema.Struct({\n kind: Schema.Literal(\"project\"),\n projectKey: Schema.String,\n ...ContextLayerBase,\n})\nexport type ProjectContextLayerRecord = typeof ProjectContextLayerRecord.Type\n\nexport const WorkspaceContextLayerRecord = Schema.Struct({\n kind: Schema.Literal(\"workspace\"),\n projectKey: Schema.String,\n workspacePath: Schema.String,\n ...ContextLayerBase,\n})\nexport type WorkspaceContextLayerRecord = typeof WorkspaceContextLayerRecord.Type\n\nexport const ContextEditableLayerRecord = Schema.Union([\n GlobalContextLayerRecord,\n ProjectContextLayerRecord,\n WorkspaceContextLayerRecord,\n])\nexport type ContextEditableLayerRecord = typeof ContextEditableLayerRecord.Type\n\nexport const GlobalContextLayerTarget = Schema.Struct({\n kind: Schema.Literal(\"global\"),\n})\nexport type GlobalContextLayerTarget = typeof GlobalContextLayerTarget.Type\n\nexport const ProjectContextLayerTarget = Schema.Struct({\n kind: Schema.Literal(\"project\"),\n projectKey: Schema.String,\n})\nexport type ProjectContextLayerTarget = typeof ProjectContextLayerTarget.Type\n\nexport const WorkspaceContextLayerTarget = Schema.Struct({\n kind: Schema.Literal(\"workspace\"),\n projectKey: Schema.String,\n workspacePath: Schema.String,\n})\nexport type WorkspaceContextLayerTarget = typeof WorkspaceContextLayerTarget.Type\n\nexport const ContextLayerTarget = Schema.Union([\n GlobalContextLayerTarget,\n ProjectContextLayerTarget,\n WorkspaceContextLayerTarget,\n])\nexport type ContextLayerTarget = typeof ContextLayerTarget.Type\n\nexport const ContextLayerDraft = Schema.Struct({\n target: ContextLayerTarget,\n content: Schema.String,\n})\nexport type ContextLayerDraft = typeof ContextLayerDraft.Type\n\n/**\n * A rendered output file `pan sync` writes a Overdeck-managed region into\n * (e.g. ~/.claude/CLAUDE.md, a project's CLAUDE.md or AGENTS.md). Distinct from\n * the editable *layer source* files — this describes the injection *target* so\n * the dashboard can show the user exactly where context lands and reassure them\n * their own content is preserved.\n */\nexport const ContextSyncTarget = Schema.Struct({\n harness: ContextPreviewHarness,\n layerKind: Schema.Literals([\"global\", \"project\"]),\n projectKey: Schema.optional(Schema.String),\n /** Short human label, e.g. \"Claude Code · global\". */\n label: Schema.String,\n /** Resolved absolute path of the target file. */\n path: Schema.String,\n exists: Schema.Boolean,\n /** True when the file already contains a Overdeck-managed region. */\n hasManagedRegion: Schema.Boolean,\n /** True when the file has hand-authored content outside the managed region. */\n hasUserContent: Schema.Boolean,\n})\nexport type ContextSyncTarget = typeof ContextSyncTarget.Type\n\nexport const ContextLayersResponse = Schema.Struct({\n operation: Schema.Literal(\"load\"),\n projects: Schema.Array(ContextProjectSummary),\n workspaces: Schema.Array(ContextWorkspaceSummary),\n layers: Schema.Array(ContextEditableLayerRecord),\n /** Injection targets `pan sync` writes managed regions into. */\n targets: Schema.Array(ContextSyncTarget),\n})\nexport type ContextLayersResponse = typeof ContextLayersResponse.Type\n\nexport const ContextPreviewRequest = Schema.Struct({\n operation: Schema.Literal(\"preview\"),\n selectedLayer: ContextLayerTarget,\n drafts: Schema.Array(ContextLayerDraft),\n})\nexport type ContextPreviewRequest = typeof ContextPreviewRequest.Type\n\nexport const ContextHarnessPreviews = Schema.Struct({\n \"claude-code\": Schema.String,\n ohmypi: Schema.String,\n codex: Schema.String,\n fullPrompt: Schema.String,\n})\nexport type ContextHarnessPreviews = typeof ContextHarnessPreviews.Type\n\nexport const ContextPreviewDiagnostic = Schema.Struct({\n level: Schema.Literals([\"info\", \"warning\", \"error\"]),\n message: Schema.String,\n layer: Schema.optional(ContextLayerTarget),\n})\nexport type ContextPreviewDiagnostic = typeof ContextPreviewDiagnostic.Type\n\nexport const ContextPreviewResponse = Schema.Struct({\n operation: Schema.Literal(\"preview\"),\n previews: ContextHarnessPreviews,\n diagnostics: Schema.Array(ContextPreviewDiagnostic),\n})\nexport type ContextPreviewResponse = typeof ContextPreviewResponse.Type\n\nexport const ContextLayerSaveRequest = Schema.Struct({\n operation: Schema.Literal(\"save\"),\n target: ContextLayerTarget,\n content: Schema.String,\n})\nexport type ContextLayerSaveRequest = typeof ContextLayerSaveRequest.Type\n\nexport const ContextLayerSaveResponse = Schema.Struct({\n operation: Schema.Literal(\"save\"),\n layer: ContextEditableLayerRecord,\n savedAt: Schema.String,\n})\nexport type ContextLayerSaveResponse = typeof ContextLayerSaveResponse.Type\n\nexport const ContextSyncRequest = Schema.Struct({\n operation: Schema.Literal(\"sync\"),\n})\nexport type ContextSyncRequest = typeof ContextSyncRequest.Type\n\nexport const ContextSyncResponse = Schema.Struct({\n operation: Schema.Literal(\"sync\"),\n success: Schema.Boolean,\n exitCode: Schema.optional(Schema.Number),\n stdout: Schema.String,\n stderr: Schema.String,\n syncedAt: Schema.String,\n})\nexport type ContextSyncResponse = typeof ContextSyncResponse.Type\n","import { Schema } from \"effect\"\n\nexport const ArtifactId = Schema.String\nexport type ArtifactId = typeof ArtifactId.Type\n\nexport const ArtifactSlug = Schema.String\nexport type ArtifactSlug = typeof ArtifactSlug.Type\n\nexport const ArtifactHash = Schema.String\nexport type ArtifactHash = typeof ArtifactHash.Type\n\nexport const ArtifactAgentRole = Schema.Literals([\"plan\", \"work\", \"review\", \"test\", \"ship\", \"flywheel\", \"user\"])\nexport type ArtifactAgentRole = typeof ArtifactAgentRole.Type\n\nexport const ArtifactAgentHarness = Schema.Literals([\"claude-code\", \"pi\", \"ohmypi\", \"codex\", \"user\"])\nexport type ArtifactAgentHarness = typeof ArtifactAgentHarness.Type\n\nexport const ArtifactLifecycleState = Schema.Literals([\n \"published\",\n \"pending_changes\",\n \"unshared\",\n])\nexport type ArtifactLifecycleState = typeof ArtifactLifecycleState.Type\n\nexport const ArtifactValidationCode = Schema.Literals([\n \"invalid_file_type\",\n \"not_a_file\",\n \"size_limit_exceeded\",\n \"forbidden_asset_url\",\n \"secret_detected\",\n \"secret_allowed\",\n \"high_entropy_string\",\n \"inline_event_handler\",\n \"missing_image_alt\",\n])\nexport type ArtifactValidationCode = typeof ArtifactValidationCode.Type\n\nexport const ArtifactValidationFinding = Schema.Struct({\n code: ArtifactValidationCode,\n message: Schema.String,\n line: Schema.optional(Schema.Number),\n column: Schema.optional(Schema.Number),\n rule: Schema.optional(Schema.String),\n strict: Schema.optional(Schema.Boolean),\n})\nexport type ArtifactValidationFinding = typeof ArtifactValidationFinding.Type\n\nexport const ArtifactValidationResult = Schema.Struct({\n ok: Schema.Boolean,\n filePath: Schema.optional(Schema.String),\n size: Schema.Number,\n hash: ArtifactHash,\n strict: Schema.Boolean,\n errors: Schema.Array(ArtifactValidationFinding),\n warnings: Schema.Array(ArtifactValidationFinding),\n})\nexport type ArtifactValidationResult = typeof ArtifactValidationResult.Type\n\nexport const ArtifactMetadata = Schema.Struct({\n artifactId: ArtifactId,\n slug: ArtifactSlug,\n issueId: Schema.optional(Schema.NullOr(Schema.String)),\n workspaceId: Schema.optional(Schema.NullOr(Schema.String)),\n agentRole: Schema.optional(Schema.NullOr(ArtifactAgentRole)),\n agentHarness: Schema.optional(Schema.NullOr(ArtifactAgentHarness)),\n runId: Schema.optional(Schema.NullOr(Schema.String)),\n sessionId: Schema.optional(Schema.NullOr(Schema.String)),\n filePath: Schema.String,\n currentHash: ArtifactHash,\n lastPublishedHash: Schema.optional(Schema.NullOr(ArtifactHash)),\n supersedes: Schema.optional(Schema.NullOr(ArtifactId)),\n title: Schema.optional(Schema.NullOr(Schema.String)),\n description: Schema.optional(Schema.NullOr(Schema.String)),\n createdAt: Schema.String,\n publishedAt: Schema.optional(Schema.NullOr(Schema.String)),\n unsharedAt: Schema.optional(Schema.NullOr(Schema.String)),\n})\nexport type ArtifactMetadata = typeof ArtifactMetadata.Type\n\nexport const ArtifactUrls = Schema.Struct({\n wrapperUrl: Schema.String,\n rawUrl: Schema.String,\n})\nexport type ArtifactUrls = typeof ArtifactUrls.Type\n\nexport const ArtifactStatusResponse = Schema.Struct({\n artifact: Schema.optional(ArtifactMetadata),\n filePath: Schema.String,\n currentHash: ArtifactHash,\n lastPublishedHash: Schema.optional(Schema.NullOr(ArtifactHash)),\n pendingChanges: Schema.Boolean,\n validation: Schema.optional(ArtifactValidationResult),\n})\nexport type ArtifactStatusResponse = typeof ArtifactStatusResponse.Type\n\nexport const ArtifactCreateResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n validation: ArtifactValidationResult,\n published: Schema.Boolean,\n})\nexport type ArtifactCreateResponse = typeof ArtifactCreateResponse.Type\n\nexport const ArtifactPublishResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n validation: ArtifactValidationResult,\n published: Schema.Boolean,\n pendingChanges: Schema.Boolean,\n})\nexport type ArtifactPublishResponse = typeof ArtifactPublishResponse.Type\n\nexport const ArtifactUnshareResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n unshared: Schema.Boolean,\n})\nexport type ArtifactUnshareResponse = typeof ArtifactUnshareResponse.Type\n\nexport const ArtifactListEntry = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n status: ArtifactLifecycleState,\n pendingChanges: Schema.Boolean,\n thumbnailUrl: Schema.optional(Schema.String),\n})\nexport type ArtifactListEntry = typeof ArtifactListEntry.Type\n\nexport const ArtifactListResponse = Schema.Struct({\n artifacts: Schema.Array(ArtifactListEntry),\n})\nexport type ArtifactListResponse = typeof ArtifactListResponse.Type\n\nexport const ArtifactDetailResponse = Schema.Struct({\n artifact: ArtifactMetadata,\n urls: ArtifactUrls,\n status: ArtifactLifecycleState,\n pendingChanges: Schema.Boolean,\n})\nexport type ArtifactDetailResponse = typeof ArtifactDetailResponse.Type\n\nexport const WorkspaceArtifactsResponse = Schema.Struct({\n issueId: Schema.optional(Schema.String),\n workspaceId: Schema.optional(Schema.String),\n artifacts: Schema.Array(ArtifactListEntry),\n})\nexport type WorkspaceArtifactsResponse = typeof WorkspaceArtifactsResponse.Type\n","import { Schema } from \"effect\"\n\nexport const FeatureRegistryStatus = Schema.Literals([\n \"active\",\n \"archived\",\n \"merged\",\n \"deferred\",\n])\nexport type FeatureRegistryStatus = typeof FeatureRegistryStatus.Type\n\nexport const FeatureRegistryEntry = Schema.Struct({\n featureId: Schema.String,\n featureName: Schema.String,\n description: Schema.NullOr(Schema.String),\n owningWorkspaceId: Schema.NullOr(Schema.String),\n owningIssueId: Schema.NullOr(Schema.String),\n owningAgentId: Schema.NullOr(Schema.String),\n status: FeatureRegistryStatus,\n createdAt: Schema.String,\n updatedAt: Schema.String,\n tags: Schema.Array(Schema.String),\n})\nexport type FeatureRegistryEntry = typeof FeatureRegistryEntry.Type\n\nexport interface FeatureRegistryListFilter {\n featureName?: string\n issueId?: string\n workspaceId?: string\n agentId?: string\n status?: FeatureRegistryStatus\n tags?: string[]\n limit?: number\n}\n\nexport interface FeatureRegistryTagInput {\n issueId: string\n featureName: string\n description?: string\n workspaceId?: string | null\n agentId?: string | null\n status?: FeatureRegistryStatus\n tags?: string[]\n now?: string\n}\n\nexport interface FeatureRegistryUntagInput {\n issueId: string\n featureName: string\n}\n\nexport interface FeatureRegistryOwnershipUpdate {\n featureName?: string\n issueId?: string | null\n workspaceId?: string | null\n agentId?: string | null\n status?: FeatureRegistryStatus\n tags?: string[]\n now?: string\n}\n","import type { Harness } from \"./types\"\n\nexport type RuntimeName = Harness\nexport type HarnessName = RuntimeName | \"pi\"\n\nexport type HarnessLaunchCommandKind = \"claude-code\" | \"ohmypi-rpc\" | \"codex-work-tui\" | \"codex-app-server\"\nexport type HarnessDeliveryKind =\n | \"pty-supervisor\"\n | \"rpc-fifo\"\n | \"codex-exec-resume\"\n | \"codex-app-server-rpc\"\n | \"tmux-paste\"\nexport type HarnessReadinessKind =\n | \"claude-session-signal\"\n | \"ohmypi-ready-file\"\n | \"codex-tui-prompt\"\n | \"codex-app-server-ready\"\nexport type HarnessTranscriptKind = \"claude-jsonl\" | \"ohmypi-jsonl\" | \"codex-rollout-jsonl\"\nexport type HarnessSessionIdSource = \"launcher-session-id\" | \"transcript-jsonl\" | \"codex-thread-id\"\nexport type HarnessContextLayerKind = \"claude\" | \"pi\" | \"codex\"\nexport type HarnessFeedKind = \"claude_code\" | \"pi\" | \"codex\"\n\nexport interface HarnessBehavior {\n readonly displayName: string\n readonly executableName: string\n readonly processNames: readonly string[]\n readonly launchCommandKind: HarnessLaunchCommandKind\n readonly deliveryKind: HarnessDeliveryKind\n readonly readinessKind: HarnessReadinessKind\n readonly transcriptKind: HarnessTranscriptKind\n readonly sessionIdSource: HarnessSessionIdSource\n readonly contextLayerKind: HarnessContextLayerKind\n readonly feedKind: HarnessFeedKind\n readonly supportsPtySupervisor: boolean\n readonly supportsChannelsBridge: boolean\n readonly supportsConversationStreaming: boolean\n readonly supportsPatchProjection: boolean\n readonly usesRpcFifo: boolean\n readonly usesCodexHome: boolean\n readonly injectsPromptTimeMemory: boolean\n readonly workAgentMode: \"claude-code\" | \"ohmypi-rpc\" | \"codex-work-tui\" | \"codex-app-server\"\n readonly readyTimeoutSeconds: number\n}\n\nexport const CLAUDE_CODE_BEHAVIOR: HarnessBehavior = {\n displayName: \"Claude Code\",\n executableName: \"claude\",\n processNames: [\"claude\"],\n launchCommandKind: \"claude-code\",\n deliveryKind: \"pty-supervisor\",\n readinessKind: \"claude-session-signal\",\n transcriptKind: \"claude-jsonl\",\n sessionIdSource: \"launcher-session-id\",\n contextLayerKind: \"claude\",\n feedKind: \"claude_code\",\n supportsPtySupervisor: true,\n supportsChannelsBridge: true,\n supportsConversationStreaming: false,\n supportsPatchProjection: true,\n usesRpcFifo: false,\n usesCodexHome: false,\n injectsPromptTimeMemory: false,\n workAgentMode: \"claude-code\",\n readyTimeoutSeconds: 30,\n}\n\nexport const OHMYPI_BEHAVIOR: HarnessBehavior = {\n displayName: \"Pi\",\n executableName: \"omp\",\n processNames: [\"omp\"],\n launchCommandKind: \"ohmypi-rpc\",\n deliveryKind: \"rpc-fifo\",\n readinessKind: \"ohmypi-ready-file\",\n transcriptKind: \"ohmypi-jsonl\",\n sessionIdSource: \"transcript-jsonl\",\n contextLayerKind: \"pi\",\n feedKind: \"pi\",\n supportsPtySupervisor: false,\n supportsChannelsBridge: false,\n supportsConversationStreaming: true,\n supportsPatchProjection: false,\n usesRpcFifo: true,\n usesCodexHome: false,\n injectsPromptTimeMemory: true,\n workAgentMode: \"ohmypi-rpc\",\n readyTimeoutSeconds: 120,\n}\n\nexport const CODEX_BEHAVIOR: HarnessBehavior = {\n displayName: \"Codex\",\n executableName: \"codex\",\n processNames: [\"codex\"],\n launchCommandKind: \"codex-work-tui\",\n deliveryKind: \"codex-exec-resume\",\n readinessKind: \"codex-tui-prompt\",\n transcriptKind: \"codex-rollout-jsonl\",\n sessionIdSource: \"codex-thread-id\",\n contextLayerKind: \"codex\",\n feedKind: \"codex\",\n supportsPtySupervisor: true,\n supportsChannelsBridge: false,\n supportsConversationStreaming: true,\n supportsPatchProjection: true,\n usesRpcFifo: false,\n usesCodexHome: true,\n injectsPromptTimeMemory: false,\n workAgentMode: \"codex-work-tui\",\n readyTimeoutSeconds: 30,\n}\n\nconst BEHAVIORS: Record<RuntimeName, HarnessBehavior> = {\n \"claude-code\": CLAUDE_CODE_BEHAVIOR,\n ohmypi: OHMYPI_BEHAVIOR,\n codex: CODEX_BEHAVIOR,\n}\n\nexport function getHarnessBehavior(harness: HarnessName | undefined | null): HarnessBehavior {\n if (harness === \"ohmypi\" || harness === \"pi\") return OHMYPI_BEHAVIOR\n if (harness === \"codex\") return CODEX_BEHAVIOR\n return CLAUDE_CODE_BEHAVIOR\n}\n\nexport function getRuntimeBehavior(runtime: RuntimeName): HarnessBehavior {\n return BEHAVIORS[runtime]\n}\n","import { Schema } from \"effect\"\n\nexport const HygieneFinding = Schema.Struct({\n id: Schema.String,\n summary: Schema.String,\n detail: Schema.optional(Schema.String),\n urgent: Schema.optional(Schema.Boolean),\n})\nexport type HygieneFinding = typeof HygieneFinding.Type\n\nexport const HygienePullRequest = Schema.Struct({\n number: Schema.Number,\n branch: Schema.String,\n url: Schema.String,\n blocking: Schema.Literals([\"review-pending\", \"test-pending\", \"failing-checks\", \"awaiting-UAT\", \"clean\"]),\n})\n\nexport const HygieneReport = Schema.Struct({\n generatedAt: Schema.String,\n root: Schema.String,\n needsAttention: Schema.Boolean,\n skipped: Schema.Array(Schema.String),\n push: Schema.Struct({ ahead: Schema.Number, commits: Schema.Array(Schema.String) }),\n tree: Schema.Struct({ files: Schema.Array(Schema.String), backups: Schema.Array(Schema.String) }),\n prs: Schema.Array(HygienePullRequest),\n agents: Schema.Struct({\n counts: Schema.Record(Schema.String, Schema.Number),\n problems: Schema.Array(HygieneFinding),\n }),\n sessions: Schema.Struct({ total: Schema.Number, zombies: Schema.Array(Schema.String) }),\n branches: Schema.Struct({ stale: Schema.Array(Schema.String) }),\n workspaces: Schema.Struct({ stale: Schema.Array(Schema.String) }),\n disk: Schema.Struct({ availableGb: Schema.Number, thresholdGb: Schema.Number, urgent: Schema.Boolean }),\n fixes: Schema.Struct({\n branchesDeleted: Schema.Array(Schema.String),\n workspacesRemoved: Schema.Array(Schema.Struct({ path: Schema.String, freedBytes: Schema.Number })),\n errors: Schema.Array(Schema.String),\n }),\n})\nexport type HygieneReport = typeof HygieneReport.Type\n","export const OVERDECK_DASHBOARD_PROTOCOL_VERSION = 1;\nexport const OVERDECK_AGENT_PROTOCOL_VERSION = 1;\n\nexport type UpdateChannel = 'stable' | 'canary';\nexport type UpdatePhase =\n | 'idle'\n | 'checking'\n | 'current'\n | 'available'\n | 'downloading'\n | 'installing'\n | 'ready'\n | 'error';\nexport type UpdateInstallMode = 'desktop' | 'npm-global' | 'development';\nexport type UpdateCompatibility = 'compatible' | 'active-agents-block' | 'unknown';\n\nexport interface UpdateSnapshot {\n phase: UpdatePhase;\n installMode: UpdateInstallMode;\n channel: UpdateChannel;\n currentVersion: string;\n targetVersion: string | null;\n releaseName: string | null;\n releaseNotes: string | null;\n releaseUrl: string | null;\n publishedAt: string | null;\n progressPercent: number | null;\n error: string | null;\n lastCheckedAt: string | null;\n compatibility: UpdateCompatibility;\n currentDashboardProtocol: number;\n currentAgentProtocol: number;\n targetDashboardProtocol: number | null;\n targetAgentProtocol: number | null;\n}\n"],"mappings":"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"}
|