import { type AccessGrant, type GitHubRepository, type ResourceRef, type SessionAuthorizationActor, type WorkspaceMemoryPromptMode } from "@opengeni/contracts"; import { listSessionDiscoverySummaries, type SessionDiscoveryCursor, type SessionDiscoveryOrderBy, type MemoryAgentScope } from "@opengeni/db"; import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import type { ApiRouteDeps } from "@opengeni/core"; export type McpServerOptions = { requestOrigin?: string | null; workspaceMemoryEnabled?: boolean | undefined; workspaceMemoryPromptMode?: WorkspaceMemoryPromptMode | undefined; /** * The bound session's typed Memory selector (migration 0427), resolved by * the route from the session row. `off` registers no Memory tools; `user` * and `session` read the workspace layer plus their own private layer and * save into that private layer. Omitted/null keeps the workspace layer. */ sessionMemory?: MemoryAgentScope | null | undefined; }; export declare function buildOpenGeniMcpServer(deps: ApiRouteDeps, grant: AccessGrant, options?: McpServerOptions): McpServer; /** Only a prompt explicitly supplied through the human/API channel may redirect a user-paused goal. */ export declare function isHumanDirectedTurn(turn: { source: string; }): boolean; /** * Sacred user pause: a goal a human paused (pausedReason 'user_pause') must * never be resurrected by a MACHINE turn. Child-completion notification turns * carry a "resume it now" nudge; without this guard the agent processing one of * them would call goal_set and re-arm the exact autonomous loop the user just * paused (the runaway that made Pause feel broken). A genuine user message * still redirects freely (it is not a child-notification turn), and the * human-driven API resume path (PATCH /goal) is unaffected. * * Classification is by CALLER IDENTITY — `callerTurnId` is the turn that minted * this MCP token (signed into it by the worker at turn setup). We deliberately * do NOT read the session's live `active_turn_id`: that pointer can flip to a * different turn between reads (a machine turn ends and a human turn becomes * active mid-check), which would misclassify the caller and, worst case, refuse * a legitimate human `goal_set` — inverting the guard against the very human * power it must preserve. A caller turn's source/metadata are immutable, so this * read is race-free. No caller identity ⇒ fail OPEN (only a positively * identified machine child-notification caller is refused). */ export declare function assertGoalReactivationAllowed(deps: ApiRouteDeps, workspaceId: string, sessionId: string, callerTurnId: string | null): Promise; export declare function memorySlackPublicationActor(actor: Extract, sessionId: string, fallbackOwnerLabel: string | null): { actor: { kind: "human" | "service"; subjectId: string; initiatingHumanSubjectId: string | null; sessionId: string; turnId: string; attemptId: string; }; ownerLabel: string | null; }; /** * Project one allowlisted GitHub App repository into the resource an agent or * scheduled task attaches. Every listed repository is in the workspace * allowlist, public or private, so every resource carries the stable ids * that mint the scoped installation token; a bare URI would clone anonymously * and could never push. */ export declare function repositoryWithScheduledTaskResource(repository: GitHubRepository): GitHubRepository & { resource: ResourceRef; }; export declare function encodeSessionDiscoveryCursor(cursor: SessionDiscoveryCursor): string; export declare function decodeSessionDiscoveryCursor(value: string): SessionDiscoveryCursor; export declare function capSessionDiscoveryCompactPage(page: Awaited>, options?: { includeLastMessage?: boolean; includeRelatedWork?: boolean; }, maxBytes?: number): { sessions: ({ id: string; projectId?: string; title: string | null; status: "cancelled" | "failed" | "idle" | "queued" | "recovering" | "requires_action" | "running" | "waiting_capacity"; titleTruncated?: boolean; parentSessionId?: string; goal?: { status: "active" | "completed" | "paused"; summary: string | null; summaryTruncated?: boolean; }; pause?: { state: string; source?: { kind: "session" | "workspace"; sessionId?: string; displayName: string | null; displayNameTruncated?: boolean; reason?: string | null; reasonTruncated?: boolean; }; additionalBlockerCount?: number; }; attention?: { requiresActionDescendants?: number; pausedDescendants?: number; failedDescendants?: number; truncated?: boolean; }; relatedWork?: { claims: { id: string; sessionId: string; subject: { namespace: string; type: "artifact" | "branch" | "ci_run" | "issue" | "other" | "pull_request" | "release" | "repository"; canonicalKey: string; displayLabel: string | null; }; role: "delivering" | "monitoring" | "reviewing" | "working"; state: "active" | "released" | "stale" | "superseded"; revision: number; provenance: "explicit_agent" | "session_resource" | "system_lifecycle" | "trusted_integration" | "user_api"; version: { kind: "artifact_version" | "branch_head" | "ci_run" | "git_commit" | "other" | "pull_request_head" | "release_version"; value: string; } | null; observedAt: string; updatedAt: string; settledAt: string | null; }[]; claimsTruncated: boolean; match: { class: "exact_subject" | "fuzzy" | "goal" | "title"; field: "claim_key" | "claim_label" | "goal" | "subject" | "title"; scoreBand: "exact" | "related" | "strong"; claimId: string | null; } | null; possibleOverlap: boolean; advisoryOnly: true; noAdditionalAccess: true; }; updatedAt: string; queuedPromptCount?: number; } | { id: string; projectId?: string; title: string | null; status: "cancelled" | "failed" | "idle" | "queued" | "recovering" | "requires_action" | "running" | "waiting_capacity"; titleTruncated?: boolean; parentSessionId?: string; goal?: { status: "active" | "completed" | "paused"; summary: string | null; summaryTruncated?: boolean; }; pause?: { state: string; source?: { kind: "session" | "workspace"; sessionId?: string; displayName: string | null; displayNameTruncated?: boolean; reason?: string | null; reasonTruncated?: boolean; }; additionalBlockerCount?: number; }; attention?: { requiresActionDescendants?: number; pausedDescendants?: number; failedDescendants?: number; truncated?: boolean; }; relatedWork?: { claims: { id: string; sessionId: string; subject: { namespace: string; type: "artifact" | "branch" | "ci_run" | "issue" | "other" | "pull_request" | "release" | "repository"; canonicalKey: string; displayLabel: string | null; }; role: "delivering" | "monitoring" | "reviewing" | "working"; state: "active" | "released" | "stale" | "superseded"; revision: number; provenance: "explicit_agent" | "session_resource" | "system_lifecycle" | "trusted_integration" | "user_api"; version: { kind: "artifact_version" | "branch_head" | "ci_run" | "git_commit" | "other" | "pull_request_head" | "release_version"; value: string; } | null; observedAt: string; updatedAt: string; settledAt: string | null; }[]; claimsTruncated: boolean; match: { class: "exact_subject" | "fuzzy" | "goal" | "title"; field: "claim_key" | "claim_label" | "goal" | "subject" | "title"; scoreBand: "exact" | "related" | "strong"; claimId: string | null; } | null; possibleOverlap: boolean; advisoryOnly: true; noAdditionalAccess: true; }; updatedAt: string; queuedPromptCount?: number; latestMessage: { type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded"; previewOmitted: boolean; previewOmissionReason: "aggregatePreviewBudget"; previewDrillDownTool: "session_events"; previewDrillDownInput: { view: "debug"; direction: "before"; limit: 1; mode: "monitoring"; payloadMode: "summary"; sessionId: string; includeTypes: ("agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded")[]; }; } | { type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded"; preview: string | null; previewTruncated?: boolean; }; })[]; total: number; nextCursor: string | null; updatedThrough?: string | null; responseTruncated?: boolean; truncationReason?: string; }; export declare function capSessionDiscoveryPage(page: Awaited>, includeLastMessage: boolean): { sessions: { id: string; projectId?: string; title: string | null; titleTruncated: boolean; parentSessionId: string | null; isRoot: boolean; status: "cancelled" | "failed" | "idle" | "queued" | "recovering" | "requires_action" | "running" | "waiting_capacity"; pause: { state: import("@opengeni/db").EffectiveControlState; additionalBlockerCount: number; source: { kind: "session" | "workspace"; sessionId?: string; displayName: string | null; displayNameTruncated: boolean; } | null; }; goal: { status: "active" | "completed" | "paused"; summary: string | null; summaryTruncated: boolean; } | null; queuedPromptCount: number; children: { directChildren: number; totalDescendants: number; runningDescendants: number; queuedDescendants: number; waitingDescendants?: number | undefined; attentionDescendants: number; pausedDescendants: number; failedDescendants: number; unreadDescendants?: number | undefined; unreadFailedDescendants?: number | undefined; activelyWorkingDescendants?: number | undefined; attentionSince?: string | null | undefined; truncated: boolean; }; relatedWork: { claims: { id: string; sessionId: string; subject: { namespace: string; type: "artifact" | "branch" | "ci_run" | "issue" | "other" | "pull_request" | "release" | "repository"; canonicalKey: string; displayLabel: string | null; }; role: "delivering" | "monitoring" | "reviewing" | "working"; state: "active" | "released" | "stale" | "superseded"; revision: number; provenance: "explicit_agent" | "session_resource" | "system_lifecycle" | "trusted_integration" | "user_api"; version: { kind: "artifact_version" | "branch_head" | "ci_run" | "git_commit" | "other" | "pull_request_head" | "release_version"; value: string; } | null; observedAt: string; updatedAt: string; settledAt: string | null; }[]; claimsTruncated: boolean; match: { class: "exact_subject" | "fuzzy" | "goal" | "title"; field: "claim_key" | "claim_label" | "goal" | "subject" | "title"; scoreBand: "exact" | "related" | "strong"; claimId: string | null; } | null; possibleOverlap: boolean; advisoryOnly: true; noAdditionalAccess: true; }; latestMessage?: { type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded"; preview: string | null; previewTruncated: boolean; } | null; createdAt: string; updatedAt: string; }[]; total: number; hasMore: boolean; nextCursor: string | null; orderBy: SessionDiscoveryOrderBy; snapshotAt: string; snapshotRevision: string; updatedAfter: string | null; updatedThrough: string | null; latestMessagePreviewBudget?: { bytes: number; maxBytes: number; omittedCount: number; truncated: boolean; omissionReason: "aggregatePreviewBudget" | null; drillDownTool: "session_events"; drillDownInput: { view: "debug"; direction: "before"; limit: 1; mode: "monitoring"; payloadMode: "summary"; includeTypes: readonly ["user.message", "agent.message.completed"]; }; }; responseTruncated: boolean; truncationReason?: string; bytes: number; maxBytes: number; };