@tryvira/mcp 0.1.0 → 0.1.1
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/cli.js +2 -1
- package/dist/cli.js.map +2 -2
- package/package.json +4 -4
package/dist/cli.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../domain/src/scope-composer.ts", "../../runtime/src/mcp-gateway.ts", "../../runtime/src/mcp-provenance.ts", "../../runtime/src/mcp-session.ts", "../../../apps/mcp-server/server.ts", "../../runtime/src/mcp-invocation-service.ts", "../../database/src/mcp-provenance-repository.ts", "../../../apps/mcp-server/vira-server.ts", "../../database/src/mcp-session-repository.ts", "../../../apps/mcp-server/official-stdio.ts", "../../database/src/postgres-adapter.ts", "../../database/src/postgres-migrations.ts", "../../database/src/postgres-runtime.ts", "../../database/src/production-sqlite.ts", "../../database/src/runtime-database.ts", "../../database/src/postgres-mcp-repository.ts", "../../../apps/mcp-server/start.ts", "../src/cli.ts"],
|
|
4
|
-
"sourcesContent": ["import {createHash} from 'node:crypto';\r\nfunction canonical(value: unknown): string { if (value === null || typeof value !== 'object') return JSON.stringify(value); if (Array.isArray(value)) return `[${value.map(canonical).join(',')}]`; return `{${Object.keys(value as Record<string, unknown>).sort().map(key => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(',')}}`; }\r\nconst digest=(value: unknown): string => createHash('sha256').update(canonical(value)).digest('hex');\r\nexport function scopeDigest(scope: unknown): string {\r\n // Match the reference scope-composer contract: identity is the canonical\r\n // scope kind/key/project tuple, never caller object insertion order.\r\n if (scope && typeof scope === 'object' && 'level' in scope && 'id' in scope) {\r\n const value = scope as {level: ScopeLevel; id: string; projectId?: string};\r\n return digest({kind: value.level, key: value.id, projectId: value.projectId ?? null});\r\n }\r\n return digest(scope);\r\n}\r\n\r\nexport type ScopeLevel = 'platform' | 'organization' | 'project' | 'application' | 'workspace' | 'user' | 'session';\r\nexport interface HierarchicalScope { level: ScopeLevel; id: string; parentId?: string; }\r\nexport interface ScopeDelegation { id: string; issuerId: string; subjectId: string; fromLevel: ScopeLevel; toLevel: ScopeLevel; permissions: readonly string[]; expiresAt: string; }\r\nexport interface CanonicalOrganizationScopeInput { applicationId?: string | null; workspaceId?: string | null; userId?: string | null; sessionId?: string | null; }\r\n/** Canonical serializer shared by organization intelligence and Teach boundaries. */\r\nexport function canonicalOrganizationScopeKeys(input: CanonicalOrganizationScopeInput): string[] {\r\n return ['project', ...(input.applicationId ? [`application_scope:${input.applicationId}`] : []), ...(input.workspaceId ? [`workspace:${input.workspaceId}`] : []), ...(input.userId ? [`user:${input.userId}`] : []), ...(input.sessionId ? [`session:${input.sessionId}`] : [])];\r\n}\r\nexport interface ReferenceScopeDelegation extends ScopeDelegation {\r\n stableKey: string;\r\n parentAuthorityLevel: ScopeLevel;\r\n childScopeKind: ScopeLevel;\r\n childScopeDigest: string;\r\n parentRevisionDigest: string;\r\n /** Reference programs may narrow an exception to explicit effect kinds. */\r\n exceptionEffectTypes?: readonly string[];\r\n when: {kind: 'all'; expressions: readonly []};\r\n}\r\nexport interface ScopeCompositionConflict { code: 'SCOPE_CHAIN_INVALID' | 'SCOPE_DELEGATION_CONFLICT' | 'SCOPE_REVISION_LEVEL_CONFLICT' | 'TEMPORAL_INVARIANT_CONFLICT' | 'TEMPORAL_TRANSITION_CONFLICT' | 'RECOVERY_CONFLICT' | 'ACTOR_OWNERSHIP_CONFLICT' | 'DEADLINE_CONFLICT'; delegationIds: readonly string[]; hard: true; }\r\nexport interface EffectiveRevisionBinding { id: string; digest: string; sourceRevisionSetDigest?: string; ancestorHardAuthorityDigest?: string; }\r\nexport interface ScopeBehaviorRevision { id: string; digest: string; level: ScopeLevel; hard: boolean; source: string; temporalInvariantDigest?: string; temporalTransitionDigest?: string; recoveryDigest?: string; temporalInvariantKeys?: Readonly<Record<string,string>>; temporalTransitionKeys?: Readonly<Record<string,string>>; recoveryKeys?: Readonly<Record<string,string>>; actorOwnershipDigest?: string; deadlineDigest?: string; }\r\nexport interface ScopeCompositionExplanation { revisionId: string; level: ScopeLevel; disposition: 'inherited'|'overridden'|'rejected'; reason: string; }\r\nexport interface ComposedScope { chain: readonly HierarchicalScope[]; permissions: readonly string[]; delegationIds?: readonly string[]; compositionDigest: string; conflictSetDigest: string; conflictSummary: {total:number; hard:number; soft:number; byCategory: Record<string,number>}; conflicts: readonly ScopeCompositionConflict[]; serveable: boolean; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]; sourceRevisionSetDigest?: string; ancestorHardAuthorityDigest?: string; effectiveProgramDigest?: string; explanations?: readonly ScopeCompositionExplanation[]; }\r\nexport function projectComposedScope(composed: ComposedScope): import('./vnext.ts').Scope {\r\n assertComposedScopeIntegrity(composed);\r\n const value = (level: ScopeLevel) => composed.chain.find(item => item.level === level)?.id ?? null;\r\n const organizationId = value('organization');\r\n const projectId = value('project');\r\n const environmentId = value('application') ?? value('session') ?? projectId;\r\n if (!organizationId || !projectId || !environmentId) throw new Error('SCOPE_RUNTIME_PROJECTION_INVALID');\r\n return Object.freeze({organizationId,projectId,environmentId,applicationId:value('application'),workspaceId:value('workspace'),userId:value('user'),sessionId:value('session'),authorityDigest:composed.compositionDigest});\r\n}\r\nconst order: ScopeLevel[] = ['platform','organization','project','application','workspace','user','session'];\r\nfunction canonicalChain(input: readonly HierarchicalScope[]): readonly HierarchicalScope[] {\r\n if (!input.length) throw new Error('SCOPE_CHAIN_REQUIRED');\r\n const chain = [...input].sort((left, right) => order.indexOf(left.level) - order.indexOf(right.level) || left.id.localeCompare(right.id));\r\n if (new Set(chain.map(item => item.level)).size !== chain.length) throw new Error('SCOPE_CHAIN_INVALID');\r\n if (new Set(chain.map(item => item.id)).size !== chain.length) throw new Error('SCOPE_CHAIN_INVALID');\r\n chain.forEach((item, index) => { if (!item.id?.trim() || (index > 0 && item.parentId !== chain[index - 1].id)) throw new Error('SCOPE_CHAIN_INVALID'); });\r\n return Object.freeze(chain);\r\n}\r\nfunction normalizeConflicts(conflicts: readonly ScopeCompositionConflict[]): readonly ScopeCompositionConflict[] {\r\n const unique = new Map<string, ScopeCompositionConflict>();\r\n for (const conflict of conflicts) {\r\n const delegationIds = [...new Set(conflict.delegationIds)].sort();\r\n const key = `${conflict.code}|${delegationIds.join(',')}`;\r\n unique.set(key, Object.freeze({...conflict, delegationIds: Object.freeze(delegationIds)}));\r\n }\r\n return Object.freeze([...unique.values()].sort((left, right) => `${left.code}|${left.delegationIds.join(',')}`.localeCompare(`${right.code}|${right.delegationIds.join(',')}`)));\r\n}\r\nfunction conflictSummary(conflicts: readonly ScopeCompositionConflict[]) { const byCategory:Record<string,number>={}; for(const conflict of conflicts) { const category=conflict.code.toLowerCase().replace(/_conflict$/,''); byCategory[category]=(byCategory[category]??0)+1; } return {total:conflicts.length,hard:conflicts.filter(item=>item.hard).length,soft:conflicts.filter(item=>!item.hard).length,byCategory:Object.freeze(byCategory)}; }\r\nexport function assertComposedScopeIntegrity(composed: ComposedScope): true {\r\n const conflictSetDigest = digest(composed.conflicts);\r\n if (conflictSetDigest !== composed.conflictSetDigest) throw new Error('SCOPE_CONFLICT_DIGEST_MISMATCH');\r\n const compositionDigest = digest({chain: composed.chain, permissions: composed.permissions, delegationIds: [...(composed.delegationIds ?? [])].sort(), conflictSetDigest, effectiveRevision: composed.effectiveRevision ?? null, sourceRevisionSetDigest: composed.sourceRevisionSetDigest ?? null, ancestorHardAuthorityDigest: composed.ancestorHardAuthorityDigest ?? null, effectiveProgramDigest: composed.effectiveProgramDigest ?? null});\r\n if (compositionDigest !== composed.compositionDigest) throw new Error('SCOPE_COMPOSITION_DIGEST_MISMATCH');\r\n return true;\r\n}\r\n\r\n/** Re-seals the existing canonical scope authority with effective-program lineage. */\r\nexport function bindEffectiveProgramAuthority(composed: ComposedScope, input: {effectiveProgramDigest: string; sourceRevisionSetDigest: string; ancestorHardAuthorityDigest: string}): ComposedScope {\r\n assertComposedScopeIntegrity(composed);\r\n for (const [name, value] of Object.entries(input)) if (!/^[a-f0-9]{64}$/.test(value)) throw new Error(`SCOPE_${name.toUpperCase()}_INVALID`);\r\n const bound = Object.freeze({...composed, effectiveProgramDigest: input.effectiveProgramDigest, sourceRevisionSetDigest: input.sourceRevisionSetDigest, ancestorHardAuthorityDigest: input.ancestorHardAuthorityDigest});\r\n const compositionDigest = digest({chain: bound.chain, permissions: bound.permissions, delegationIds: [...(bound.delegationIds ?? [])].sort(), conflictSetDigest: bound.conflictSetDigest, effectiveRevision: bound.effectiveRevision ?? null, sourceRevisionSetDigest: bound.sourceRevisionSetDigest, ancestorHardAuthorityDigest: bound.ancestorHardAuthorityDigest, effectiveProgramDigest: bound.effectiveProgramDigest});\r\n const resealed = Object.freeze({...bound, compositionDigest});\r\n assertComposedScopeIntegrity(resealed);\r\n return resealed;\r\n}\r\n\r\nexport interface ScopeCompositionRevalidation {\r\n stale: boolean;\r\n sourceRevisionSetChanged: boolean;\r\n ancestorHardAuthorityChanged: boolean;\r\n effectiveProgramChanged: boolean;\r\n effectiveRevisionChanged: boolean;\r\n conflictSetChanged: boolean;\r\n compatible: boolean;\r\n taintRequired: boolean;\r\n}\r\n\r\n/** Reference-equivalent dependency check for an already materialized scope. */\r\nexport function compositionDependencyStale(previous: ComposedScope, next: ComposedScope): boolean {\r\n assertComposedScopeIntegrity(previous);\r\n assertComposedScopeIntegrity(next);\r\n return previous.sourceRevisionSetDigest !== next.sourceRevisionSetDigest ||\r\n previous.ancestorHardAuthorityDigest !== next.ancestorHardAuthorityDigest ||\r\n previous.effectiveProgramDigest !== next.effectiveProgramDigest ||\r\n previous.effectiveRevision?.digest !== next.effectiveRevision?.digest ||\r\n previous.conflictSetDigest !== next.conflictSetDigest;\r\n}\r\n\r\n/** Revalidation must be explicit before a changed composition can be served. */\r\nexport function revalidateScopeComposition(previous: ComposedScope, next: ComposedScope): ScopeCompositionRevalidation {\r\n const sourceRevisionSetChanged = previous.sourceRevisionSetDigest !== next.sourceRevisionSetDigest;\r\n const ancestorHardAuthorityChanged = previous.ancestorHardAuthorityDigest !== next.ancestorHardAuthorityDigest;\r\n const effectiveProgramChanged = previous.effectiveProgramDigest !== next.effectiveProgramDigest;\r\n const effectiveRevisionChanged = previous.effectiveRevision?.digest !== next.effectiveRevision?.digest;\r\n const conflictSetChanged = previous.conflictSetDigest !== next.conflictSetDigest;\r\n const stale = sourceRevisionSetChanged || ancestorHardAuthorityChanged || effectiveProgramChanged || effectiveRevisionChanged || conflictSetChanged;\r\n const compatible = next.serveable;\r\n return {stale, sourceRevisionSetChanged, ancestorHardAuthorityChanged, effectiveProgramChanged, effectiveRevisionChanged, conflictSetChanged, compatible, taintRequired: stale && !compatible};\r\n}\r\nexport function composeScope(input: {chain: readonly HierarchicalScope[]; delegation?: ScopeDelegation | null; now?: string; availablePermissions?: readonly string[]; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]}): ComposedScope {\r\n const chain = canonicalChain(input.chain);\r\n const delegations = input.delegation ? [input.delegation] : [];\r\n let permissions: readonly string[] = [];\r\n for (const delegation of delegations) { const now = input.now ?? new Date().toISOString(); const expiresAt = Date.parse(delegation.expiresAt); const issuedAt = Date.parse(now); if (!delegation.id?.trim() || !delegation.issuerId?.trim() || !delegation.subjectId?.trim() || !Array.isArray(delegation.permissions) || !delegation.permissions.length || !Number.isFinite(expiresAt) || !Number.isFinite(issuedAt)) throw new Error('SCOPE_DELEGATION_INVALID'); if (order.indexOf(delegation.fromLevel) >= order.indexOf(delegation.toLevel)) throw new Error('SCOPE_DELEGATION_DIRECTION_INVALID'); if (chain.find(item => item.level === delegation.toLevel)?.id !== delegation.subjectId) throw new Error('SCOPE_DELEGATION_SUBJECT_MISMATCH'); if (expiresAt <= issuedAt) throw new Error('SCOPE_DELEGATION_EXPIRED'); if (!chain.some(item => item.id === delegation.issuerId && item.level === delegation.fromLevel)) throw new Error('SCOPE_DELEGATION_ISSUER_OUTSIDE_CHAIN'); const requested=[...new Set(delegation.permissions.map(value => value.trim()).filter(Boolean))]; if (!requested.length) throw new Error('SCOPE_DELEGATION_INVALID'); const available=input.availablePermissions; if (available && requested.some(permission=>!available.includes(permission))) throw new Error('SCOPE_DELEGATION_PERMISSION_WIDENING'); permissions = Object.freeze([...new Set([...permissions, ...requested])]); }\r\n const conflictNames = permissions.filter(value => value.startsWith('allow:')).map(value => value.slice('allow:'.length)).filter(name => permissions.includes(`deny:${name}`));\r\n const delegationConflicts: readonly ScopeCompositionConflict[] = conflictNames.length ? Object.freeze([{code:'SCOPE_DELEGATION_CONFLICT', delegationIds: delegations.map(item => item.id), hard:true}]) : Object.freeze([]);\r\n if (input.effectiveRevision && (!input.effectiveRevision.id || !/^[a-f0-9]{64}$/.test(input.effectiveRevision.digest))) throw new Error('EFFECTIVE_REVISION_BINDING_INVALID');\r\n const lineage = composeRevisionLineage(chain,input.sourceRevisions ?? [], delegations);\r\n const conflicts = normalizeConflicts([...delegationConflicts, ...(lineage.conflicts ?? [])]);\r\n const conflictSetDigest = digest(conflicts);\r\n const compositionDigest = digest({chain, permissions, delegationIds: delegations.map(item => item.id).sort(), conflictSetDigest, effectiveRevision: input.effectiveRevision ?? null, sourceRevisionSetDigest: lineage.sourceRevisionSetDigest ?? null, ancestorHardAuthorityDigest: lineage.ancestorHardAuthorityDigest ?? null, effectiveProgramDigest: lineage.effectiveProgramDigest ?? null});\r\n const {serveable: lineageServeable, conflicts: _lineageConflicts, ...lineageData}=lineage;\r\n return Object.freeze({chain: Object.freeze(chain), permissions, delegationIds: Object.freeze(delegations.map(item=>item.id).sort()), compositionDigest, conflictSetDigest, conflictSummary:conflictSummary(conflicts), conflicts, serveable: conflicts.length === 0 && lineageServeable, ...(input.effectiveRevision ? {effectiveRevision: Object.freeze({...input.effectiveRevision})} : {}), ...lineageData});\r\n}\r\n\r\nfunction composeRevisionLineage(chain: readonly HierarchicalScope[], revisions: readonly ScopeBehaviorRevision[], delegations: readonly ScopeDelegation[] = []): {serveable:boolean; sourceRevisions?:readonly ScopeBehaviorRevision[]; sourceRevisionSetDigest?:string; ancestorHardAuthorityDigest?:string; effectiveProgramDigest?:string; explanations?:readonly ScopeCompositionExplanation[]; conflicts?:readonly ScopeCompositionConflict[]} {\r\n if (!revisions.length) return {serveable:true};\r\n const delegatedChildIds=new Set(delegations.flatMap(item=>{const value=item as Partial<ReferenceScopeDelegation>;if(value.permissions?.includes('exception')&&value.parentAuthorityLevel===value.fromLevel&&value.childScopeKind===value.toLevel&&value.when?.kind==='all'&&value.when.expressions.length===0&&typeof value.parentRevisionDigest==='string'){const parent=revisions.find(revision=>revision.level===value.parentAuthorityLevel);const child=revisions.find(revision=>revision.level===value.childScopeKind);if(parent?.digest===value.parentRevisionDigest&&child?.id)return [child.id];}return []}));\r\n const effectiveRevisions=revisions.map(revision=>delegatedChildIds.has(revision.id)?{...revision,hard:false}:revision); const ids=new Set<string>(); const seenLevels=new Set<ScopeLevel>(); const explanations: ScopeCompositionExplanation[]=[]; const conflicts: ScopeCompositionConflict[]=[];\r\n for (const revision of effectiveRevisions) {\r\n if (!revision.id.trim() || !/^[a-f0-9]{64}$/.test(revision.digest) || !revision.source.trim() || ids.has(revision.id)) throw new Error('SCOPE_REVISION_LINEAGE_INVALID');\r\n const scope=chain.find(item=>item.level===revision.level); if (!scope) throw new Error('SCOPE_REVISION_OUTSIDE_CHAIN');\r\n if (seenLevels.has(revision.level)) { explanations.push({revisionId:revision.id,level:revision.level,disposition:'rejected',reason:'Multiple revisions at one scope level are not deterministically composable'}); conflicts.push({code:'SCOPE_REVISION_LEVEL_CONFLICT',delegationIds:[revision.id],hard:true}); continue; }\r\n ids.add(revision.id); seenLevels.add(revision.level); explanations.push({revisionId:revision.id,level:revision.level,disposition:revision.hard?'inherited':'overridden',reason:revision.hard?'Hard authority inherited into the effective scope':'Non-hard revision contributes an override candidate'});\r\n }\r\n const ordered=[...effectiveRevisions].filter(item=>ids.has(item.id)).sort((left,right)=>order.indexOf(left.level)-order.indexOf(right.level));\r\n const hard=ordered.filter(item=>item.hard);\r\n const compare=(field:keyof ScopeBehaviorRevision,code:ScopeCompositionConflict['code'])=>{const values=[...new Set(hard.map(item=>item[field]).filter(value=>typeof value==='string'))];if(values.length>1) conflicts.push({code,delegationIds:hard.filter(item=>typeof item[field]==='string').map(item=>item.id),hard:true});};\r\n const compareKeyed=(field:keyof ScopeBehaviorRevision,code:ScopeCompositionConflict['code'])=>{const byKey=new Map<string,{digest:string;ids:string[]}>();for(const item of hard){const value=item[field];if(!value||typeof value!=='object'||Array.isArray(value))continue;for(const [key,digestValue] of Object.entries(value as Record<string,string>)){const prior=byKey.get(key);if(prior){if(prior.digest!==digestValue) conflicts.push({code,delegationIds:[...new Set([...prior.ids,item.id])],hard:true});prior.ids.push(item.id);}else byKey.set(key,{digest:digestValue,ids:[item.id]});}}};\r\n compareKeyed('temporalInvariantKeys','TEMPORAL_INVARIANT_CONFLICT'); compareKeyed('temporalTransitionKeys','TEMPORAL_TRANSITION_CONFLICT'); compareKeyed('recoveryKeys','RECOVERY_CONFLICT');\r\n if (!hard.some(item=>item.temporalInvariantKeys)) compare('temporalInvariantDigest','TEMPORAL_INVARIANT_CONFLICT'); if (!hard.some(item=>item.temporalTransitionKeys)) compare('temporalTransitionDigest','TEMPORAL_TRANSITION_CONFLICT'); if (!hard.some(item=>item.recoveryKeys)) compare('recoveryDigest','RECOVERY_CONFLICT'); compare('actorOwnershipDigest','ACTOR_OWNERSHIP_CONFLICT'); compare('deadlineDigest','DEADLINE_CONFLICT');\r\n const sourceRevisionSetDigest=digest(ordered.map(item=>({id:item.id,digest:item.digest,level:item.level,hard:item.hard,source:item.source,temporalInvariantDigest:item.temporalInvariantDigest,temporalTransitionDigest:item.temporalTransitionDigest,recoveryDigest:item.recoveryDigest,actorOwnershipDigest:item.actorOwnershipDigest,deadlineDigest:item.deadlineDigest})));\r\n const ancestorHardAuthorityDigest=digest(ordered.filter(item=>item.hard).map(item=>item.digest));\r\n const effectiveProgramDigest=digest(ordered);\r\n return {serveable:conflicts.length===0&&!explanations.some(item=>item.disposition==='rejected'),sourceRevisions:Object.freeze(ordered),sourceRevisionSetDigest,ancestorHardAuthorityDigest,effectiveProgramDigest,explanations:Object.freeze(explanations),conflicts:Object.freeze(conflicts)};\r\n}\r\n\r\n/** Compose all supplied delegations, rejecting duplicate ids and preserving one digest for runtime checks. */\r\nexport function composeDelegatedScope(input: {chain: readonly HierarchicalScope[]; delegations: readonly ScopeDelegation[]; now?: string; availablePermissions?: readonly string[]; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]}): ComposedScope {\r\n const chain = canonicalChain(input.chain);\r\n const ids = input.delegations.map(item => item.id);\r\n if (new Set(ids).size !== ids.length) throw new Error('SCOPE_DELEGATION_CONFLICT');\r\n const results = input.delegations.map(delegation => {\r\n const candidate = delegation as Partial<ReferenceScopeDelegation>;\r\n const strictEnvelope = candidate.stableKey !== undefined || candidate.parentAuthorityLevel !== undefined || candidate.childScopeKind !== undefined || candidate.childScopeDigest !== undefined || candidate.parentRevisionDigest !== undefined || candidate.when !== undefined;\r\n return strictEnvelope\r\n ? composeReferenceDelegatedScope({chain, delegation: delegation as ReferenceScopeDelegation, now: input.now, availablePermissions: input.availablePermissions, sourceRevisions: input.sourceRevisions})\r\n : composeScope({chain, delegation, now: input.now, availablePermissions: input.availablePermissions});\r\n });\r\n const permissions = Object.freeze([...new Set(results.flatMap(result => result.permissions))].sort());\r\n const conflicts: ScopeCompositionConflict[] = [...results.flatMap(result => result.conflicts)];\r\n for (const permission of permissions.filter(value => value.startsWith('allow:')).map(value => value.slice('allow:'.length))) {\r\n if (permissions.includes(`allow:${permission}`) && permissions.includes(`deny:${permission}`)) conflicts.push({code:'SCOPE_DELEGATION_CONFLICT',delegationIds:ids.filter(id => input.delegations.some(item => item.id===id && item.permissions.some(value => value===`allow:${permission}` || value===`deny:${permission}`))),hard:true});\r\n }\r\n const normalizedConflicts = normalizeConflicts(conflicts);\r\n const conflictSetDigest = digest(normalizedConflicts);\r\n if (input.effectiveRevision && (!input.effectiveRevision.id || !/^[a-f0-9]{64}$/.test(input.effectiveRevision.digest))) throw new Error('EFFECTIVE_REVISION_BINDING_INVALID');\r\n const lineage=composeRevisionLineage(chain,input.sourceRevisions ?? [], input.delegations);\r\n const allConflicts = normalizeConflicts([...normalizedConflicts, ...(lineage.conflicts ?? [])]);\r\n const allConflictSetDigest = digest(allConflicts);\r\n const compositionDigest = digest({chain, permissions, delegationIds: [...ids].sort(), conflictSetDigest: allConflictSetDigest, effectiveRevision: input.effectiveRevision ?? null, sourceRevisionSetDigest: lineage.sourceRevisionSetDigest ?? null, ancestorHardAuthorityDigest: lineage.ancestorHardAuthorityDigest ?? null, effectiveProgramDigest: lineage.effectiveProgramDigest ?? null});\r\n const {serveable: lineageServeable, conflicts: _lineageConflicts, ...lineageData}=lineage;\r\n return Object.freeze({chain, permissions, delegationIds: Object.freeze([...ids].sort()), compositionDigest, conflictSetDigest: allConflictSetDigest, conflictSummary:conflictSummary(allConflicts), conflicts: allConflicts, serveable: allConflicts.length===0 && lineageServeable, ...(input.effectiveRevision ? {effectiveRevision: Object.freeze({...input.effectiveRevision})} : {}), ...lineageData});\r\n}\r\n\r\n/** Reference-shaped exception delegation: parent-authored, exact-child and digest-bound. */\r\nexport function composeReferenceDelegatedScope(input: {chain: readonly HierarchicalScope[]; delegation: ReferenceScopeDelegation; now?: string; availablePermissions?: readonly string[]; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]}): ComposedScope {\r\n const delegation = input.delegation;\r\n const allowedEffects = new Set(['allow','deny','require_approval','numeric_limit','redact','transform','escalate']);\r\n if (delegation.exceptionEffectTypes !== undefined &&\r\n (!Array.isArray(delegation.exceptionEffectTypes) ||\r\n delegation.exceptionEffectTypes.length > 7 ||\r\n new Set(delegation.exceptionEffectTypes).size !== delegation.exceptionEffectTypes.length ||\r\n delegation.exceptionEffectTypes.some(effect => !allowedEffects.has(effect)))) {\r\n throw new Error('SCOPE_DELEGATION_EXCEPTION_EFFECT_TYPES_INVALID');\r\n }\r\n if (delegation.parentAuthorityLevel !== delegation.fromLevel || delegation.childScopeKind !== delegation.toLevel) throw new Error('SCOPE_DELEGATION_AUTHORITY_LEVEL_MISMATCH');\r\n const child = input.chain.find(item => item.level === delegation.childScopeKind && item.id === delegation.subjectId);\r\n if (!child || !/^[a-f0-9]{64}$/.test(delegation.childScopeDigest)) throw new Error('SCOPE_DELEGATION_CHILD_DIGEST_REQUIRED');\r\n const childDigest = scopeDigest(child);\r\n if (childDigest !== delegation.childScopeDigest) throw new Error('SCOPE_DELEGATION_CHILD_DIGEST_MISMATCH');\r\n if (!/^[a-f0-9]{64}$/.test(delegation.parentRevisionDigest) || delegation.when.kind !== 'all' || delegation.when.expressions.length !== 0 || !delegation.permissions.includes('exception')) throw new Error('SCOPE_DELEGATION_ENVELOPE_INVALID');\r\n const parentRevision = input.sourceRevisions?.find(revision => revision.level === delegation.parentAuthorityLevel);\r\n if (parentRevision && parentRevision.digest !== delegation.parentRevisionDigest) throw new Error('SCOPE_DELEGATION_PARENT_REVISION_DIGEST_MISMATCH');\r\n return composeScope({chain: input.chain, delegation, now: input.now, availablePermissions: input.availablePermissions, effectiveRevision: input.effectiveRevision, sourceRevisions: input.sourceRevisions});\r\n}\r\n", "import {createHash} from 'node:crypto';\r\nexport const MCP_PROTOCOL_VERSIONS = ['2026-07-28','2025-11-25','2025-03-26'] as const;\r\nexport function negotiateMcpProtocolVersion(offered: unknown): string { const value=String(offered??''); return (MCP_PROTOCOL_VERSIONS as readonly string[]).includes(value) ? value : '2025-03-26'; }\r\nimport {isIP} from 'node:net';\r\nimport {assertComposedScopeIntegrity, type ComposedScope} from '../../domain/src/scope-composer.ts';\r\nimport type {Scope} from '../../domain/src/vnext.ts';\r\nexport interface McpInvocation extends Scope {id:string;server:string;tool:string;arguments:Record<string,unknown>;receiptId:string;idempotencyKey:string;authorityDigest?:string;composedScope?:ComposedScope}\r\nexport interface McpResult extends Scope {invocationId:string;ok:boolean;result?:unknown;error?:string;provenanceDigest:string;server:string;tool:string;receiptId:string;idempotencyKey:string;argumentsDigest:string;authorityDecisionDigest:string;authorityDigest?:string|null}\r\nexport interface McpTransport {call(input:{server:string;tool:string;arguments:Record<string,unknown>;signal?:AbortSignal}):Promise<{result?:unknown;error?:string}>}\r\nexport interface McpToolDefinition {name:string;description?:string;inputSchema:Record<string,unknown>;effectful?:boolean}\r\nexport interface McpResourceDefinition {uri:string;name:string;description?:string;mimeType?:string}\r\nexport interface McpPromptDefinition {name:string;description?:string;arguments?:readonly Record<string,unknown>[]}\r\nfunction assertPublicMcpHost(hostname:string):void { const host=hostname.toLowerCase().replace(/^\\[|\\]$/g,''); if(host==='localhost'||host.endsWith('.localhost')||host.endsWith('.local')) throw new Error('MCP_UPSTREAM_PRIVATE_HOST'); const version=isIP(host); if(version===4){const octets=host.split('.').map(Number);if(octets[0]===10||octets[0]===127||octets[0]===0||(octets[0]===172&&octets[1]>=16&&octets[1]<=31)||(octets[0]===192&&octets[1]===168)|| (octets[0]===169&&octets[1]===254)) throw new Error('MCP_UPSTREAM_PRIVATE_HOST');} if(version===6&&(['::1','::','fc','fd','fe8','fe9','fea','feb'].some(prefix=>host===prefix||host.startsWith(`${prefix}:`)))) throw new Error('MCP_UPSTREAM_PRIVATE_HOST'); }\r\nexport interface McpAuthorityDecision {allowed:boolean;decisionDigest:string;reason?:string}\r\nexport interface McpCancellationRegistry {register(requestId:string):AbortSignal;cancel(requestId:string):boolean;unregister(requestId:string,signal?:AbortSignal):void;}\r\nexport function canonicalMcpJson(value: unknown): string { if (value === null || typeof value !== 'object') return JSON.stringify(value); if (Array.isArray(value)) return `[${value.map(canonicalMcpJson).join(',')}]`; return `{${Object.keys(value as Record<string, unknown>).sort().map(key=>`${JSON.stringify(key)}:${canonicalMcpJson((value as Record<string, unknown>)[key])}`).join(',')}}`; }\r\nexport function verifyMcpResult(result:McpResult):true { const {provenanceDigest,...body}=result; const expected=createHash('sha256').update(canonicalMcpJson(body)).digest('hex'); if(provenanceDigest!==expected) throw new Error('MCP_PROVENANCE_DIGEST_INVALID'); return true; }\r\nexport function createMcpCancellationRegistry():McpCancellationRegistry {const controllers=new Map<string,AbortController>();return {register(requestId){if(!requestId.trim())throw new Error('MCP_REQUEST_ID_REQUIRED');const previous=controllers.get(requestId);previous?.abort();const controller=new AbortController();controllers.set(requestId,controller);return controller.signal;},cancel(requestId){const controller=controllers.get(requestId);if(!controller)return false;controller.abort();return true;},unregister(requestId,signal){const controller=controllers.get(requestId);if(controller&&(!signal||controller.signal===signal))controllers.delete(requestId);}};}\r\nfunction combineMcpAbortSignals(...signals:(AbortSignal|undefined)[]):AbortSignal|undefined { const active=signals.filter((signal):signal is AbortSignal=>Boolean(signal)); if(active.length===0)return undefined; if(active.length===1)return active[0]; const controller=new AbortController(); const abort=()=>controller.abort(); for(const signal of active){if(signal.aborted){controller.abort();break;} signal.addEventListener('abort',abort,{once:true});} return controller.signal; }\r\nexport function parseMcpEventStream(body:string,expectedId?:string):readonly string[] { const payloads:string[]=[]; for(const event of body.split(/\\r?\\n\\r?\\n/)){const data:string[]=[];for(const line of event.split(/\\r?\\n/)){if(!line||line.startsWith(':'))continue;const separator=line.indexOf(':');const field=separator<0?line:line.slice(0,separator);if(field!=='data')continue;const value=line.slice(separator+1).startsWith(' ')?line.slice(separator+2):line.slice(separator+1);data.push(value);}if(data.length)payloads.push(data.join('\\n'));}return payloads; }\r\nasync function readMcpResponseBody(response:Response):Promise<string>{if(!response.body)return response.text();const reader=response.body.getReader();const decoder=new TextDecoder();let body='';try{for(;;){const chunk=await reader.read();body+=decoder.decode(chunk.value??new Uint8Array(),{stream:!chunk.done});if(chunk.done)return body;}}finally{reader.releaseLock();}}\r\nfunction parseMcpResponseBody(body:string,contentType:string,expectedId?:string):{result?:unknown;error?:string} { const payloads=contentType.toLowerCase().includes('text/event-stream') ? parseMcpEventStream(body,expectedId) : [body]; let last:{id?:string|number;error?:{message?:string};result?:unknown}|undefined; for(const payload of payloads){try{const parsed=JSON.parse(payload) as {id?:string|number;error?:{message?:string};result?:unknown}; last=parsed;}catch{continue;}} if(!last)return {error:'MCP_UPSTREAM_RESPONSE_INVALID'}; if(last.id!==undefined&&String(last.id)!==expectedId)return {error:'MCP_UPSTREAM_RESPONSE_ID_MISMATCH'}; return last.error?{error:last.error.message??'MCP_UPSTREAM_ERROR'}:{result:last.result}; }\r\nexport function createRegisteredMcpTransport(input:{endpoint:string;allowedHosts:readonly string[];fetcher?:typeof fetch;timeoutMs?:number;protocolVersion?:string;headers?:Readonly<Record<string,string>>}):McpTransport {const url=new URL(input.endpoint);if(url.protocol!=='https:')throw new Error('MCP_UPSTREAM_HTTPS_REQUIRED');assertPublicMcpHost(url.hostname);if(!input.allowedHosts.includes(url.host))throw new Error('MCP_UPSTREAM_HOST_NOT_ALLOWED');const fetcher=input.fetcher??fetch;const timeoutMs=input.timeoutMs??10000;if(!Number.isInteger(timeoutMs)||timeoutMs<1||timeoutMs>60000)throw new Error('MCP_UPSTREAM_TIMEOUT_INVALID');const protocolVersion=input.protocolVersion??'2025-03-26';return {call:async({server,tool,arguments:args,signal})=>{const controller=new AbortController();const timer=setTimeout(()=>controller.abort(),timeoutMs);const abort=()=>controller.abort();if(signal?.aborted)controller.abort();else signal?.addEventListener('abort',abort,{once:true});try{const response=await fetcher(url,{method:'POST',headers:{'content-type':'application/json',accept:'application/json, text/event-stream','mcp-protocol-version':protocolVersion,...input.headers},signal:controller.signal,body:JSON.stringify({jsonrpc:'2.0',id:`${server}:${tool}`,method:'tools/call',params:{name:tool,arguments:args}})});if(!response.ok)return {error:`MCP_UPSTREAM_HTTP_${response.status}`};return parseMcpResponseBody(await readMcpResponseBody(response),response.headers.get('content-type')??'application/json',`${server}:${tool}`);}catch(error){return {error:error instanceof Error&&error.name==='AbortError'?(signal?.aborted?'MCP_REQUEST_CANCELLED':'MCP_UPSTREAM_TIMEOUT'):'MCP_UPSTREAM_TRANSPORT_ERROR'}}finally{clearTimeout(timer);signal?.removeEventListener('abort',abort)}}}}\r\nexport async function handleMcpJsonRpc(input:{request:{jsonrpc:'2.0';id?:string|number;method:string;params?:Record<string,unknown>};server:string;tools:readonly McpToolDefinition[];resources?:readonly McpResourceDefinition[];prompts?:readonly McpPromptDefinition[];readResource?:(uri:string)=>Promise<Record<string,unknown>|null>|Record<string,unknown>|null;getPrompt?:(name:string,args:Record<string,unknown>)=>Promise<Record<string,unknown>|null>|Record<string,unknown>|null;invocation:Omit<McpInvocation,'server'|'tool'|'arguments'>;transport:McpTransport;signal?:AbortSignal;cancellationRegistry?:McpCancellationRegistry;authorize?:(input:{invocation:McpInvocation;definition:McpToolDefinition})=>Promise<McpAuthorityDecision>|McpAuthorityDecision}):Promise<Record<string,unknown>|null>{const {request,server,tools,transport}=input;if(request.jsonrpc!=='2.0'||!request.method)throw new Error('MCP_JSONRPC_INVALID');if(request.method==='initialize')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{protocolVersion:'2025-03-26',serverInfo:{name:server,version:'1'},capabilities:{tools:{},resources:input.resources?{}:undefined,prompts:input.prompts?{}:undefined}}};if(request.method==='notifications/initialized')return null;if(request.method==='notifications/cancelled'){const requestId=String(request.params?.requestId??'');input.cancellationRegistry?.cancel(requestId);return null;}if(request.method==='tools/list')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{tools}};if(request.method==='resources/list')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{resources:input.resources??[]}};if(request.method==='prompts/list')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{prompts:input.prompts??[]}};if(request.method==='resources/read'){const value=input.readResource?await input.readResource(String(request.params?.uri??'')):null;return request.id===undefined?null:value?{jsonrpc:'2.0',id:request.id,result:value}:{jsonrpc:'2.0',id:request.id,error:{code:-32602,message:'RESOURCE_NOT_FOUND'}}}if(request.method==='prompts/get'){const value=input.getPrompt?await input.getPrompt(String(request.params?.name??''),(request.params?.arguments??{}) as Record<string,unknown>):null;return request.id===undefined?null:value?{jsonrpc:'2.0',id:request.id,result:value}:{jsonrpc:'2.0',id:request.id,error:{code:-32602,message:'PROMPT_NOT_FOUND'}}}if(request.method!=='tools/call')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,error:{code:-32601,message:'METHOD_NOT_FOUND'}};const tool=String(request.params?.name??'');const definition=tools.find(item=>item.name===tool);if(!definition)return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,error:{code:-32602,message:'TOOL_NOT_FOUND'}};const invocation={...input.invocation,server,tool,arguments:(request.params?.arguments??{}) as Record<string,unknown>};const authority=definition.effectful?(input.authorize?await input.authorize({invocation,definition}):{allowed:false,decisionDigest:'',reason:'MCP_AUTHORITY_REQUIRED'}):{allowed:true,decisionDigest:'read-only'};if(!authority.allowed)return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,error:{code:-32003,message:authority.reason??'MCP_AUTHORITY_DENIED',data:{decisionDigest:authority.decisionDigest}}};const requestId=String(request.id??'');const requestSignal=input.cancellationRegistry&&requestId?input.cancellationRegistry.register(requestId):undefined;try{const result=await invokeMcpTool({invocation,transport,authority,signal:combineMcpAbortSignals(input.signal,requestSignal)});return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{content:[{type:'text',text:JSON.stringify(result.result??result.error??null)}],isError:!result.ok,provenanceDigest:result.provenanceDigest}}}finally{if(requestSignal)input.cancellationRegistry?.unregister(requestId,requestSignal);}}\r\nexport async function invokeMcpTool(input:{invocation:McpInvocation;transport:McpTransport;authority?:McpAuthorityDecision;signal?:AbortSignal}):Promise<McpResult>{const {invocation,transport}=input;if(!invocation.id||!invocation.server||!invocation.tool||!invocation.receiptId||!invocation.idempotencyKey)throw new Error('MCP_INVOCATION_FIELDS_REQUIRED');if(invocation.authorityDigest!==undefined&&!/^[a-f0-9]{64}$/.test(invocation.authorityDigest))throw new Error('MCP_AUTHORITY_DIGEST_INVALID');if(invocation.composedScope){assertComposedScopeIntegrity(invocation.composedScope);if(invocation.authorityDigest!==undefined&&invocation.authorityDigest!==invocation.composedScope.compositionDigest)throw new Error('MCP_AUTHORITY_MISMATCH');if(!invocation.composedScope.serveable)throw new Error('MCP_SCOPE_COMPOSITION_CONFLICT');}if(input.authority&&!input.authority.allowed)throw new Error('MCP_AUTHORITY_DENIED');if(!transport||typeof transport.call!=='function')throw new Error('MCP_TRANSPORT_REQUIRED');let response:{result?:unknown;error?:string};try{response=await transport.call({server:invocation.server,tool:invocation.tool,arguments:structuredClone(invocation.arguments),signal:input.signal})}catch{if(input.signal?.aborted)throw new Error('MCP_INVOCATION_CANCELLED');response={error:'MCP_TRANSPORT_ERROR'}}const argumentsDigest=createHash('sha256').update(canonicalMcpJson(invocation.arguments)).digest('hex');const body={invocationId:invocation.id,organizationId:invocation.organizationId,projectId:invocation.projectId,environmentId:invocation.environmentId,server:invocation.server,tool:invocation.tool,receiptId:invocation.receiptId,idempotencyKey:invocation.idempotencyKey,argumentsDigest,authorityDecisionDigest:input.authority?.decisionDigest??'not-required',authorityDigest:invocation.authorityDigest??null,ok:!response.error,result:response.result,error:response.error};return Object.freeze({...body,provenanceDigest:createHash('sha256').update(canonicalMcpJson(body)).digest('hex')})}\r\n", "import {createHash} from 'node:crypto';\r\nimport {canonicalMcpJson, type McpAuthorityDecision, type McpInvocation, type McpResult} from './mcp-gateway.ts';\r\nexport function verifyMcpResult(result: McpResult): true { const {provenanceDigest: stored, ...body}=result; const expected=createHash('sha256').update(canonicalMcpJson(body)).digest('hex'); if(stored!==expected) throw new Error('MCP_PROVENANCE_DIGEST_MISMATCH'); return true; }\r\nexport function createMcpResultFromResponse(input:{invocation:McpInvocation;response:{result?:unknown;error?:string};authority?:McpAuthorityDecision}):McpResult { const argumentsDigest=createHash('sha256').update(canonicalMcpJson(input.invocation.arguments)).digest('hex'); const body={invocationId:input.invocation.id,organizationId:input.invocation.organizationId,projectId:input.invocation.projectId,environmentId:input.invocation.environmentId,server:input.invocation.server,tool:input.invocation.tool,receiptId:input.invocation.receiptId,idempotencyKey:input.invocation.idempotencyKey,argumentsDigest,authorityDecisionDigest:input.authority?.decisionDigest ?? 'not-required',authorityDigest:input.invocation.authorityDigest??null,ok:!input.response.error,result:input.response.result,error:input.response.error}; return Object.freeze({...body,provenanceDigest:createHash('sha256').update(canonicalMcpJson(body)).digest('hex')}); }\r\n", "import {createHash,randomUUID} from 'node:crypto';\r\nexport type McpSessionStatus='PENDING_AUTH'|'ACTIVE'|'RECONNECTING'|'CLOSED'|'FAILED';\r\nexport interface McpSession {id:string;organizationId:string;projectId:string;environmentId:string;server:string;endpoint:string;protocolVersion:string;status:McpSessionStatus;authDigest:string;generation:number;createdAt:string;updatedAt:string;sessionDigest:string;}\r\nconst canonical=(value:unknown):string=>value===null||typeof value!=='object'?JSON.stringify(value):Array.isArray(value)?`[${value.map(canonical).join(',')}]`:`{${Object.keys(value as Record<string,unknown>).sort().map(key=>`${JSON.stringify(key)}:${canonical((value as Record<string,unknown>)[key])}`).join(',')}}`;\r\nconst digest=(value:unknown)=>createHash('sha256').update(canonical(value)).digest('hex');\r\nconst valid=(value:string)=>typeof value==='string'&&value.trim().length>0;\r\nexport function startMcpSession(input:{id?:string;organizationId:string;projectId:string;environmentId:string;server:string;endpoint:string;protocolVersion:string;authDigest:string;now:string}):McpSession {if(!valid(input.organizationId)||!valid(input.projectId)||!valid(input.environmentId)||!valid(input.server)||!valid(input.endpoint)||!valid(input.protocolVersion)||!/^[a-f0-9]{64}$/.test(input.authDigest)||!Number.isFinite(Date.parse(input.now)))throw new Error('MCP_SESSION_INPUT_INVALID');const {now,...identity}=input;const base={id:identity.id??`mcp:${randomUUID()}`,...identity,status:'PENDING_AUTH' as const,generation:0,createdAt:now,updatedAt:now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nconst withoutDigest=(session:McpSession):Omit<McpSession,'sessionDigest'>=>{const {sessionDigest:_ignored,...base}=session;return base;};\r\nexport function completeMcpAuth(session:McpSession,input:{authDigest:string;selfTestPassed:boolean;now:string}):McpSession {assertMcpSession(session);if(session.status!=='PENDING_AUTH'&&session.status!=='RECONNECTING')throw new Error('MCP_SESSION_AUTH_STATE_INVALID');if(input.authDigest!==session.authDigest||input.selfTestPassed!==true)throw new Error('MCP_SESSION_AUTH_FAILED');const base={...withoutDigest(session),status:'ACTIVE' as const,updatedAt:input.now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nexport function reconnectMcpSession(session:McpSession,input:{endpoint:string;protocolVersion:string;authDigest:string;now:string}):McpSession {assertMcpSession(session);if(session.status!=='ACTIVE')throw new Error('MCP_SESSION_RECONNECT_INVALID');if(input.endpoint!==session.endpoint||input.protocolVersion!==session.protocolVersion||input.authDigest!==session.authDigest)throw new Error('MCP_SESSION_IDENTITY_MISMATCH');const base={...withoutDigest(session),status:'RECONNECTING' as const,generation:session.generation+1,updatedAt:input.now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nexport function closeMcpSession(session:McpSession,now:string):McpSession {assertMcpSession(session);const base={...withoutDigest(session),status:'CLOSED' as const,updatedAt:now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nexport function assertMcpSession(session:McpSession):true {const {sessionDigest,...base}=session;if(sessionDigest!==digest(base))throw new Error('MCP_SESSION_DIGEST_MISMATCH');return true;}\r\nexport function assertMcpSessionActive(session:McpSession):true {assertMcpSession(session); if(session.status!=='ACTIVE') throw new Error(`MCP_SESSION_NOT_ACTIVE:${session.status}`); return true;}\r\n", "import {\r\n createServer,\r\n type IncomingMessage,\r\n type ServerResponse,\r\n} from \"node:http\";\r\nimport { createInterface } from \"node:readline\";\r\nimport type { Readable } from \"node:stream\";\r\nimport {\r\n createMcpCancellationRegistry,\r\n handleMcpJsonRpc,\r\n verifyMcpResult,\r\n type McpAuthorityDecision,\r\n type McpCancellationRegistry,\r\n type McpInvocation,\r\n type McpPromptDefinition,\r\n type McpResourceDefinition,\r\n type McpResult,\r\n type McpToolDefinition,\r\n type McpTransport,\r\n} from \"../../packages/runtime/src/mcp-gateway.ts\";\r\nimport { createMcpResultFromResponse } from \"../../packages/runtime/src/mcp-provenance.ts\";\r\nimport { assertMcpSessionActive, type McpSession } from \"../../packages/runtime/src/mcp-session.ts\";\r\nexport interface McpServerOptions {\r\n serverName: string;\r\n tools: readonly McpToolDefinition[];\r\n resources?: readonly McpResourceDefinition[];\r\n prompts?: readonly McpPromptDefinition[];\r\n readResource?: (\r\n uri: string,\r\n ) => Promise<Record<string, unknown> | null> | Record<string, unknown> | null;\r\n getPrompt?: (\r\n name: string,\r\n args: Record<string, unknown>,\r\n ) => Promise<Record<string, unknown> | null> | Record<string, unknown> | null;\r\n invocation: Omit<McpInvocation, \"server\" | \"tool\" | \"arguments\">;\r\n transport: McpTransport;\r\n authorize?: (input: {\r\n invocation: McpInvocation;\r\n definition: McpToolDefinition;\r\n }) => Promise<McpAuthorityDecision> | McpAuthorityDecision;\r\n provenanceRepository?: {\r\n save: (result: McpResult) => unknown;\r\n claim?: (input: {\r\n invocationId: string;\r\n idempotencyKey: string;\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n }) => { status: \"CLAIMED\" | \"REPLAY\" | \"IN_FLIGHT\"; result?: McpResult } | Promise<{ status: \"CLAIMED\" | \"REPLAY\" | \"IN_FLIGHT\"; result?: McpResult }>;\r\n getByIdempotencyKey?: (\r\n key: string,\r\n scope: {\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n },\r\n ) => McpResult | null | Promise<McpResult | null>;\r\n };\r\n maxBodyBytes?: number;\r\n cancellationRegistry?: McpCancellationRegistry;\r\n sessionRepository?: { get: (id: string, scope: { organizationId: string; projectId: string; environmentId: string }) => McpSession | null | Promise<McpSession | null> };\r\n sessionHeader?: string;\r\n sessionId?: string;\r\n requestAuthToken?: string;\r\n invocationExecutor?: (input: {invocation: McpInvocation; authority: McpAuthorityDecision; signal?: AbortSignal}) => Promise<McpResult>;\r\n /** Production-like persisted provenance must use the central executor. */\r\n requireInvocationExecutor?: boolean;\r\n}\r\nconst requestToken = (value: string | number | undefined): string =>\r\n String(\r\n value ??\r\n `notification-${Date.now()}-${Math.random().toString(16).slice(2)}`,\r\n );\r\nconst claimInvocation = async (\r\n repository: NonNullable<McpServerOptions[\"provenanceRepository\"]>,\r\n invocation: Pick<McpInvocation, \"id\" | \"idempotencyKey\">,\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n): Promise<McpResult | null> => {\r\n const claim = await repository.claim?.({\r\n invocationId: invocation.id,\r\n idempotencyKey: invocation.idempotencyKey,\r\n ...scope,\r\n });\r\n if (claim?.status === \"IN_FLIGHT\")\r\n throw new Error(\"MCP_INVOCATION_IN_FLIGHT\");\r\n return (\r\n claim?.result ??\r\n (await repository.getByIdempotencyKey?.(invocation.idempotencyKey, scope)) ??\r\n null\r\n );\r\n};\r\nasync function assertConfiguredSession(options: McpServerOptions, sessionId: string | undefined, scope: { organizationId: string; projectId: string; environmentId: string }): Promise<void> {\r\n if (!options.sessionRepository) return;\r\n if (!sessionId?.trim()) throw new Error(\"MCP_SESSION_REQUIRED\");\r\n const session = await options.sessionRepository.get(sessionId, scope);\r\n if (!session) throw new Error(\"MCP_SESSION_NOT_FOUND\");\r\n assertMcpSessionActive(session);\r\n}\r\nasync function persistVerifiedMcpResult(repository: NonNullable<McpServerOptions[\"provenanceRepository\"]>, result: McpResult): Promise<void> {\r\n const persisted = await repository.save(result);\r\n if (persisted && typeof persisted === \"object\") verifyMcpResult(persisted as McpResult);\r\n}\r\nexport function createMcpServer(options: McpServerOptions) {\r\n if (options.requireInvocationExecutor && !options.invocationExecutor)\r\n throw new Error(\"MCP_INVOCATION_EXECUTOR_REQUIRED\");\r\n const maxBodyBytes = options.maxBodyBytes ?? 128 * 1024;\r\n const cancellationRegistry =\r\n options.cancellationRegistry ?? createMcpCancellationRegistry();\r\n return createServer(async (request, response) => {\r\n if (request.method !== \"POST\")\r\n return send(response, 405, { error: { code: \"METHOD_NOT_ALLOWED\" } });\r\n if (options.requestAuthToken) {\r\n const authorization = request.headers.authorization ?? \"\";\r\n const token = authorization.match(/^Bearer\\s+(.+)$/i)?.[1];\r\n if (token !== options.requestAuthToken)\r\n return send(response, 401, { error: { code: \"MCP_AUTHENTICATION_REQUIRED\" } });\r\n }\r\n const requestController = new AbortController();\r\n const onAborted = () => requestController.abort();\r\n request.once(\"aborted\", onAborted);\r\n try {\r\n const body = JSON.parse(await readBody(request, maxBodyBytes)) as {\r\n jsonrpc: \"2.0\";\r\n id?: string | number;\r\n method: string;\r\n params?: Record<string, unknown>;\r\n };\r\n const token = requestToken(body.id);\r\n const requestInvocation = {\r\n ...options.invocation,\r\n id: `${options.invocation.id}:${token}`,\r\n receiptId: `${options.invocation.receiptId}:${token}`,\r\n idempotencyKey: `${options.invocation.idempotencyKey}:${token}`,\r\n };\r\n const scope = {\r\n organizationId: requestInvocation.organizationId,\r\n projectId: requestInvocation.projectId,\r\n environmentId: requestInvocation.environmentId,\r\n };\r\n const sessionId = request.headers[(options.sessionHeader ?? \"x-mcp-session-id\").toLowerCase()];\r\n await assertConfiguredSession(options, typeof sessionId === \"string\" ? sessionId : undefined, scope);\r\n if (options.invocationExecutor && body.method === \"tools/call\") {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition) {\r\n const invocation = {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>};\r\n const authority = definition.effectful ? (await options.authorize?.({invocation, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"} : {allowed: true, decisionDigest: \"read-only\"};\r\n if (authority.allowed) {\r\n const result = await options.invocationExecutor({invocation, authority, signal: requestController.signal});\r\n if (!requestController.signal.aborted) send(response, 200, {jsonrpc: \"2.0\", id: body.id, result: {content: [{type: \"text\", text: JSON.stringify(result.result ?? result.error ?? null)}], isError: !result.ok, provenanceDigest: result.provenanceDigest}});\r\n return;\r\n }\r\n if (!requestController.signal.aborted) send(response, 403, {jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}});\r\n return;\r\n }\r\n }\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const replay = await claimInvocation(\r\n options.provenanceRepository,\r\n requestInvocation,\r\n scope,\r\n );\r\n if (replay) {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition?.effectful) {\r\n const authority = (await options.authorize?.({invocation: {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>}, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"};\r\n if (!authority.allowed) {\r\n if (!requestController.signal.aborted) send(response, 403, {jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}});\r\n return;\r\n }\r\n }\r\n if (!requestController.signal.aborted)\r\n send(response, 200, {\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n result: {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: JSON.stringify(replay.result ?? replay.error ?? null),\r\n },\r\n ],\r\n isError: !replay.ok,\r\n provenanceDigest: replay.provenanceDigest,\r\n },\r\n });\r\n return;\r\n }\r\n }\r\n let upstreamResponse: { result?: unknown; error?: string } | undefined;\r\n let authority: McpAuthorityDecision | undefined;\r\n const requestCancelled = new Promise<{\r\n result?: unknown;\r\n error?: string;\r\n }>((resolve) =>\r\n request.once(\"aborted\", () =>\r\n resolve({ error: \"MCP_REQUEST_CANCELLED\" }),\r\n ),\r\n );\r\n const transport: McpTransport = {\r\n call: async (input) => {\r\n upstreamResponse = await Promise.race([\r\n options.transport.call({\r\n ...input,\r\n signal: input.signal ?? requestController.signal,\r\n }),\r\n requestCancelled,\r\n ]);\r\n return upstreamResponse;\r\n },\r\n };\r\n const result = await handleMcpJsonRpc({\r\n request: body,\r\n server: options.serverName,\r\n tools: options.tools,\r\n resources: options.resources,\r\n prompts: options.prompts,\r\n readResource: options.readResource,\r\n getPrompt: options.getPrompt,\r\n invocation: requestInvocation,\r\n transport,\r\n cancellationRegistry,\r\n authorize: async (input) => {\r\n authority =\r\n (await options.authorize?.(input)) ??\r\n (input.definition.effectful\r\n ? {\r\n allowed: false,\r\n decisionDigest: \"\",\r\n reason: \"MCP_AUTHORITY_REQUIRED\",\r\n }\r\n : { allowed: true, decisionDigest: \"read-only\" });\r\n return authority;\r\n },\r\n });\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const tool = String(body.params?.name ?? \"\");\r\n await persistVerifiedMcpResult(options.provenanceRepository,\r\n createMcpResultFromResponse({\r\n invocation: {\r\n ...requestInvocation,\r\n server: options.serverName,\r\n tool,\r\n arguments: (body.params?.arguments ?? {}) as Record<\r\n string,\r\n unknown\r\n >,\r\n },\r\n response: upstreamResponse ?? {\r\n error: authority?.reason ?? \"MCP_AUTHORITY_DENIED\",\r\n },\r\n authority,\r\n }),\r\n );\r\n }\r\n if (!requestController.signal.aborted) send(response, 200, result);\r\n } catch {\r\n if (!requestController.signal.aborted)\r\n send(response, 400, {\r\n jsonrpc: \"2.0\",\r\n id: null,\r\n error: { code: -32600, message: \"INVALID_MCP_REQUEST\" },\r\n });\r\n } finally {\r\n request.removeListener(\"aborted\", onAborted);\r\n }\r\n });\r\n}\r\nexport function createMcpStdioServer(\r\n options: McpServerOptions,\r\n input: NodeJS.ReadableStream = process.stdin,\r\n output = process.stdout,\r\n) {\r\n const cancellationRegistry =\r\n options.cancellationRegistry ?? createMcpCancellationRegistry();\r\n const lines = createInterface({\r\n input: input as Readable,\r\n crlfDelay: Infinity,\r\n });\r\n let closed = false;\r\n const write = (body: unknown) => {\r\n if (!closed) output.write(`${JSON.stringify(body)}\\n`);\r\n };\r\n const processLine = async (line: string) => {\r\n if (!line.trim()) return;\r\n let body: {\r\n jsonrpc: \"2.0\";\r\n id?: string | number;\r\n method: string;\r\n params?: Record<string, unknown>;\r\n };\r\n try {\r\n body = JSON.parse(line) as typeof body;\r\n } catch {\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: null,\r\n error: { code: -32700, message: \"PARSE_ERROR\" },\r\n });\r\n return;\r\n }\r\n const token = requestToken(body.id);\r\n const requestInvocation = {\r\n ...options.invocation,\r\n id: `${options.invocation.id}:${token}`,\r\n receiptId: `${options.invocation.receiptId}:${token}`,\r\n idempotencyKey: `${options.invocation.idempotencyKey}:${token}`,\r\n };\r\n const scope = {\r\n organizationId: requestInvocation.organizationId,\r\n projectId: requestInvocation.projectId,\r\n environmentId: requestInvocation.environmentId,\r\n };\r\n try {\r\n await assertConfiguredSession(options, options.sessionId, scope);\r\n } catch {\r\n if (body.id !== undefined)\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n error: { code: -32001, message: \"MCP_SESSION_NOT_ACTIVE\" },\r\n });\r\n return;\r\n }\r\n if (options.invocationExecutor && body.method === \"tools/call\") {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition) {\r\n const invocation = {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>};\r\n const authority = definition.effectful ? (await options.authorize?.({invocation, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"} : {allowed: true, decisionDigest: \"read-only\"};\r\n if (authority.allowed) {\r\n const result = await options.invocationExecutor({invocation, authority});\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, result: {content: [{type: \"text\", text: JSON.stringify(result.result ?? result.error ?? null)}], isError: !result.ok, provenanceDigest: result.provenanceDigest}});\r\n return;\r\n }\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}});\r\n return;\r\n }\r\n }\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const replay = await claimInvocation(\r\n options.provenanceRepository,\r\n requestInvocation,\r\n scope,\r\n );\r\n if (replay) {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition?.effectful) {\r\n const authority = (await options.authorize?.({invocation: {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>}, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"};\r\n if (!authority.allowed) { write({jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}}); return; }\r\n }\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n result: {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: JSON.stringify(replay.result ?? replay.error ?? null),\r\n },\r\n ],\r\n isError: !replay.ok,\r\n provenanceDigest: replay.provenanceDigest,\r\n },\r\n });\r\n return;\r\n }\r\n }\r\n let upstreamResponse: { result?: unknown; error?: string } | undefined;\r\n let authority: McpAuthorityDecision | undefined;\r\n const transport: McpTransport = {\r\n call: async (value) => {\r\n upstreamResponse = await options.transport.call({\r\n ...value,\r\n signal: value.signal,\r\n });\r\n return upstreamResponse;\r\n },\r\n };\r\n try {\r\n if (body.method === \"server/discover\") {\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, result: {supportedProtocolVersions: [\"2026-07-28\", \"2025-11-25\", \"2025-03-26\"], serverInfo: {name: options.serverName, version: \"1.0.0\"}, capabilities: {tools: {}, resources: options.resources ? {} : undefined, prompts: options.prompts ? {} : undefined}}});\r\n return;\r\n }\r\n if (body.method === \"initialize\") {\r\n const requested = String(body.params?.protocolVersion ?? \"\");\r\n const protocolVersion = [\"2026-07-28\", \"2025-11-25\", \"2025-03-26\"].includes(requested) ? requested : \"2025-03-26\";\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, result: {protocolVersion, serverInfo: {name: options.serverName, version: \"1.0.0\"}, capabilities: {tools: {}, resources: options.resources ? {} : undefined, prompts: options.prompts ? {} : undefined}}});\r\n return;\r\n }\r\n const result = await handleMcpJsonRpc({\r\n request: body,\r\n server: options.serverName,\r\n tools: options.tools,\r\n resources: options.resources,\r\n prompts: options.prompts,\r\n readResource: options.readResource,\r\n getPrompt: options.getPrompt,\r\n invocation: requestInvocation,\r\n transport,\r\n cancellationRegistry,\r\n authorize: async (value) => {\r\n authority =\r\n (await options.authorize?.(value)) ??\r\n (value.definition.effectful\r\n ? {\r\n allowed: false,\r\n decisionDigest: \"\",\r\n reason: \"MCP_AUTHORITY_REQUIRED\",\r\n }\r\n : { allowed: true, decisionDigest: \"read-only\" });\r\n return authority;\r\n },\r\n });\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const tool = String(body.params?.name ?? \"\");\r\n await persistVerifiedMcpResult(options.provenanceRepository,\r\n createMcpResultFromResponse({\r\n invocation: {\r\n ...requestInvocation,\r\n server: options.serverName,\r\n tool,\r\n arguments: (body.params?.arguments ?? {}) as Record<\r\n string,\r\n unknown\r\n >,\r\n },\r\n response: upstreamResponse ?? {\r\n error: authority?.reason ?? \"MCP_AUTHORITY_DENIED\",\r\n },\r\n authority,\r\n }),\r\n );\r\n }\r\n if (result !== null) write(result);\r\n } catch {\r\n if (body.id !== undefined)\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n error: { code: -32600, message: \"INVALID_MCP_REQUEST\" },\r\n });\r\n }\r\n };\r\n lines.on(\"line\", (line) => {\r\n void processLine(line);\r\n });\r\n return {\r\n close: () => {\r\n closed = true;\r\n lines.close();\r\n },\r\n };\r\n}\r\nfunction send(response: ServerResponse, status: number, body: unknown): void {\r\n response.writeHead(status, {\r\n \"content-type\": \"application/json; charset=utf-8\",\r\n \"cache-control\": \"no-store\",\r\n });\r\n response.end(JSON.stringify(body));\r\n}\r\nfunction readBody(request: IncomingMessage, limit: number): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n let size = 0;\r\n const chunks: Buffer[] = [];\r\n request.on(\"data\", (chunk: Buffer) => {\r\n size += chunk.length;\r\n if (size > limit) {\r\n reject(new Error(\"PAYLOAD_TOO_LARGE\"));\r\n return;\r\n }\r\n chunks.push(chunk);\r\n });\r\n request.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf8\")));\r\n request.on(\"error\", reject);\r\n });\r\n}\r\n", "import {invokeMcpTool, verifyMcpResult, type McpAuthorityDecision, type McpInvocation, type McpResult, type McpTransport} from './mcp-gateway.ts';\r\nimport {createHash} from 'node:crypto';\r\nimport {canonicalMcpJson} from './mcp-gateway.ts';\r\n\r\nexport interface McpInvocationStore {\r\n claim(input: {invocationId:string;idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}): {status:'CLAIMED'|'REPLAY'|'IN_FLIGHT'; result?:McpResult} | Promise<{status:'CLAIMED'|'REPLAY'|'IN_FLIGHT'; result?:McpResult}>;\r\n save(result:McpResult):McpResult | Promise<McpResult>;\r\n releaseClaim?(input:{idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void | Promise<void>;\r\n}\r\n\r\nexport type McpInvocationObservation = {result:McpResult; replay:boolean; durationMs:number};\r\n\r\nfunction assertReplayIdentity(invocation:McpInvocation, authority:McpAuthorityDecision|undefined, result:McpResult):void {\r\n const argumentsDigest=createHash('sha256').update(canonicalMcpJson(invocation.arguments)).digest('hex');\r\n const expectedAuthorityDecisionDigest=authority?.decisionDigest ?? 'not-required';\r\n if(result.organizationId!==invocation.organizationId||result.projectId!==invocation.projectId||result.environmentId!==invocation.environmentId||result.server!==invocation.server||result.tool!==invocation.tool||result.receiptId!==invocation.receiptId||result.idempotencyKey!==invocation.idempotencyKey||result.argumentsDigest!==argumentsDigest||result.authorityDecisionDigest!==expectedAuthorityDecisionDigest||result.authorityDigest!==(invocation.authorityDigest??null)) throw new Error('MCP_INVOCATION_REPLAY_MISMATCH');\r\n}\r\n\r\n/** The only application boundary for effectful MCP invocation persistence. */\r\nexport async function executeMcpInvocation(input:{\r\n invocation:McpInvocation;\r\n transport:McpTransport;\r\n store:McpInvocationStore;\r\n authority?:McpAuthorityDecision;\r\n signal?:AbortSignal;\r\n observe?:(observation:McpInvocationObservation)=>void|Promise<void>;\r\n}):Promise<McpResult>{\r\n const started=Date.now();\r\n const claim=await input.store.claim({invocationId:input.invocation.id,idempotencyKey:input.invocation.idempotencyKey,organizationId:input.invocation.organizationId,projectId:input.invocation.projectId,environmentId:input.invocation.environmentId});\r\n if(claim.status==='REPLAY'&&claim.result){\r\n verifyMcpResult(claim.result);\r\n assertReplayIdentity(input.invocation,input.authority,claim.result);\r\n await input.observe?.({result:claim.result,replay:true,durationMs:Date.now()-started});\r\n return claim.result;\r\n }\r\n if(claim.status==='IN_FLIGHT') throw new Error('MCP_INVOCATION_IN_FLIGHT');\r\n try {\r\n const result=await invokeMcpTool({invocation:input.invocation,transport:input.transport,authority:input.authority,signal:input.signal});\r\n const persisted=await input.store.save(result);\r\n verifyMcpResult(persisted);\r\n await input.observe?.({result:persisted,replay:false,durationMs:Date.now()-started});\r\n return persisted;\r\n } catch(error) {\r\n if (input.signal?.aborted) await input.store.releaseClaim?.({idempotencyKey:input.invocation.idempotencyKey,organizationId:input.invocation.organizationId,projectId:input.invocation.projectId,environmentId:input.invocation.environmentId});\r\n throw error;\r\n }\r\n}\r\n", "import {verifyMcpResult} from \"../../runtime/src/mcp-provenance.ts\";\r\nimport type {McpResult} from \"../../runtime/src/mcp-gateway.ts\";\r\nimport {assertComposedScopeIntegrity, type ComposedScope} from '../../domain/src/scope-composer.ts';\r\nexport type McpClaim = {\r\n status: \"CLAIMED\" | \"REPLAY\" | \"IN_FLIGHT\";\r\n result?: McpResult;\r\n};\r\nconst assertClaimInput=(input:{invocationId:string;idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void=>{if(!input.invocationId?.trim()||!input.idempotencyKey?.trim()||!input.organizationId?.trim()||!input.projectId?.trim()||!input.environmentId?.trim())throw new Error('MCP_CLAIM_INPUT_INVALID');};\r\nexport class McpProvenanceRepository {\r\n #items = new Map<string, McpResult>();\r\n #claims = new Set<string>();\r\n claim(input: {\r\n invocationId: string;\r\n idempotencyKey: string;\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n }): McpClaim {\r\n assertClaimInput(input);\r\n const replay = this.getByIdempotencyKey(input.idempotencyKey, input);\r\n if (replay) return { status: \"REPLAY\", result: replay };\r\n const key = `${input.organizationId}:${input.projectId}:${input.environmentId}:${input.idempotencyKey}`;\r\n if (this.#claims.has(key)) return { status: \"IN_FLIGHT\" };\r\n this.#claims.add(key);\r\n return { status: \"CLAIMED\" };\r\n }\r\n save(result: McpResult): McpResult {\r\n verifyMcpResult(result);\r\n const prior = this.#items.get(result.invocationId);\r\n const byKey = this.getByIdempotencyKey(result.idempotencyKey, result);\r\n if (\r\n (prior && prior.provenanceDigest !== result.provenanceDigest) ||\r\n (byKey && byKey.provenanceDigest !== result.provenanceDigest)\r\n )\r\n throw new Error(\"MCP_PROVENANCE_CONFLICT\");\r\n this.#items.set(result.invocationId, structuredClone(result));\r\n this.#claims.delete(\r\n `${result.organizationId}:${result.projectId}:${result.environmentId}:${result.idempotencyKey}`,\r\n );\r\n return structuredClone(prior ?? byKey ?? result);\r\n }\r\n releaseClaim(input:{idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void { assertClaimInput({...input,invocationId:'release-claim'}); this.#claims.delete(`${input.organizationId}:${input.projectId}:${input.environmentId}:${input.idempotencyKey}`); }\r\n saveComposed(scope: ComposedScope, result: McpResult): McpResult { assertComposedScopeIntegrity(scope); const projected={organizationId:scope.chain.find(item=>item.level==='organization')?.id??'',projectId:scope.chain.find(item=>item.level==='project')?.id??'',environmentId:scope.chain.find(item=>item.level==='application')?.id??''}; if(result.organizationId!==projected.organizationId||result.projectId!==projected.projectId||result.environmentId!==projected.environmentId) throw new Error('MCP_SCOPE_MISMATCH'); if(result.authorityDigest!==scope.compositionDigest) throw new Error('MCP_AUTHORITY_MISMATCH'); return this.save(result); }\r\n get(invocationId: string): McpResult | null {\r\n const result = this.#items.get(invocationId);\r\n if (!result) return null;\r\n verifyMcpResult(result);\r\n return structuredClone(result);\r\n }\r\n getByIdempotencyKey(\r\n key: string,\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n ): McpResult | null {\r\n const result = [...this.#items.values()].find(\r\n (item) =>\r\n item.idempotencyKey === key &&\r\n item.organizationId === scope.organizationId &&\r\n item.projectId === scope.projectId &&\r\n item.environmentId === scope.environmentId,\r\n );\r\n if (!result) return null;\r\n verifyMcpResult(result);\r\n return structuredClone(result);\r\n }\r\n list(scope:{organizationId:string;projectId:string;environmentId:string}, limit=100):McpResult[]{return [...this.#items.values()].filter(item=>item.organizationId===scope.organizationId&&item.projectId===scope.projectId&&item.environmentId===scope.environmentId).slice(0,Math.max(0,Math.min(500,limit))).map(item=>{verifyMcpResult(item);return structuredClone(item);});}\r\n}\r\nexport interface McpProvenanceDb {\r\n exec(sql: string, params: unknown[]): { values: unknown[][] }[];\r\n run(sql: string, params: unknown[]): void;\r\n}\r\nexport class SqlMcpProvenanceRepository {\r\n private readonly db: McpProvenanceDb;\r\n constructor(db: McpProvenanceDb) {\r\n this.db = db;\r\n this.db.run(\r\n \"CREATE TABLE IF NOT EXISTS mcp_invocation_claims (organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, invocation_id TEXT NOT NULL, claimed_at TEXT NOT NULL, PRIMARY KEY (organization_id, project_id, environment_id, idempotency_key))\",\r\n [],\r\n );\r\n }\r\n releaseClaim(input:{idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void { assertClaimInput({...input,invocationId:'release-claim'}); this.db.run('DELETE FROM mcp_invocation_claims WHERE organization_id=? AND project_id=? AND environment_id=? AND idempotency_key=?',[input.organizationId,input.projectId,input.environmentId,input.idempotencyKey]); }\r\n claim(input: {\r\n invocationId: string;\r\n idempotencyKey: string;\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n }): McpClaim {\r\n assertClaimInput(input);\r\n const replay = this.getByIdempotencyKey(input.idempotencyKey, input);\r\n if (replay) return { status: \"REPLAY\", result: replay };\r\n try {\r\n this.db.run(\r\n \"INSERT INTO mcp_invocation_claims (organization_id, project_id, environment_id, idempotency_key, invocation_id, claimed_at) VALUES (?, ?, ?, ?, ?, ?)\",\r\n [\r\n input.organizationId,\r\n input.projectId,\r\n input.environmentId,\r\n input.idempotencyKey,\r\n input.invocationId,\r\n new Date().toISOString(),\r\n ],\r\n );\r\n return { status: \"CLAIMED\" };\r\n } catch {\r\n const after = this.getByIdempotencyKey(input.idempotencyKey, input);\r\n return after\r\n ? { status: \"REPLAY\", result: after }\r\n : { status: \"IN_FLIGHT\" };\r\n }\r\n }\r\n save(result: McpResult): McpResult {\r\n verifyMcpResult(result);\r\n const prior = this.getForScope(result, result.invocationId);\r\n const byKey = this.getByIdempotencyKey(result.idempotencyKey, result);\r\n const existing = prior ?? byKey;\r\n if (existing) {\r\n if (existing.provenanceDigest !== result.provenanceDigest)\r\n throw new Error(\"MCP_PROVENANCE_CONFLICT\");\r\n return existing;\r\n }\r\n this.db.run(\r\n \"DELETE FROM mcp_invocation_claims WHERE organization_id=? AND project_id=? AND environment_id=? AND idempotency_key=?\",\r\n [\r\n result.organizationId,\r\n result.projectId,\r\n result.environmentId,\r\n result.idempotencyKey,\r\n ],\r\n );\r\n this.db.run(\r\n \"INSERT INTO mcp_invocation_provenance (invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\",\r\n [\r\n result.invocationId,\r\n result.organizationId,\r\n result.projectId,\r\n result.environmentId,\r\n result.server,\r\n result.tool,\r\n result.receiptId,\r\n result.idempotencyKey,\r\n result.argumentsDigest,\r\n result.ok ? 1 : 0,\r\n result.result === undefined ? null : JSON.stringify(result.result),\r\n result.error ?? null,\r\n result.authorityDecisionDigest,\r\n result.authorityDigest ?? null,\r\n result.provenanceDigest,\r\n ],\r\n );\r\n const persisted=this.getForScope(result,result.invocationId);\r\n if(!persisted||persisted.provenanceDigest!==result.provenanceDigest||persisted.receiptId!==result.receiptId||persisted.argumentsDigest!==result.argumentsDigest||persisted.authorityDecisionDigest!==result.authorityDecisionDigest||persisted.authorityDigest!==result.authorityDigest) throw new Error('MCP_PROVENANCE_READBACK_MISMATCH');\r\n return persisted;\r\n }\r\n saveComposed(scope: ComposedScope, result: McpResult): McpResult { assertComposedScopeIntegrity(scope); const projected={organizationId:scope.chain.find(item=>item.level==='organization')?.id??'',projectId:scope.chain.find(item=>item.level==='project')?.id??'',environmentId:scope.chain.find(item=>item.level==='application')?.id??''}; if(result.organizationId!==projected.organizationId||result.projectId!==projected.projectId||result.environmentId!==projected.environmentId) throw new Error('MCP_SCOPE_MISMATCH'); if(result.authorityDigest!==scope.compositionDigest) throw new Error('MCP_AUTHORITY_MISMATCH'); return this.save(result); }\r\n get(invocationId: string): McpResult | null {\r\n const row = this.db.exec(\r\n \"SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE invocation_id = ?\",\r\n [invocationId],\r\n )[0]?.values[0];\r\n return row ? this.fromRow(row) : null;\r\n }\r\n getByIdempotencyKey(\r\n key: string,\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n ): McpResult | null {\r\n const row = this.db.exec(\r\n \"SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE idempotency_key = ? AND organization_id = ? AND project_id = ? AND environment_id = ?\",\r\n [key, scope.organizationId, scope.projectId, scope.environmentId],\r\n )[0]?.values[0];\r\n return row ? this.fromRow(row) : null;\r\n }\r\n getForScope(\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n invocationId: string,\r\n ): McpResult | null {\r\n const row = this.db.exec(\r\n \"SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE invocation_id = ? AND organization_id = ? AND project_id = ? AND environment_id = ?\",\r\n [\r\n invocationId,\r\n scope.organizationId,\r\n scope.projectId,\r\n scope.environmentId,\r\n ],\r\n )[0]?.values[0];\r\n return row ? this.fromRow(row) : null;\r\n }\r\n list(scope:{organizationId:string;projectId:string;environmentId:string}, limit=100):McpResult[]{const bounded=Math.max(0,Math.min(500,limit));const rows=this.db.exec('SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE organization_id=? AND project_id=? AND environment_id=? ORDER BY invocation_id DESC LIMIT ?',[scope.organizationId,scope.projectId,scope.environmentId,bounded])[0]?.values??[];return rows.map(row=>this.fromRow(row));}\r\n private fromRow(row: unknown[]): McpResult {\r\n const result: McpResult = {\r\n invocationId: String(row[0]),\r\n organizationId: String(row[1]),\r\n projectId: String(row[2]),\r\n environmentId: String(row[3]),\r\n server: String(row[4]),\r\n tool: String(row[5]),\r\n receiptId: String(row[6]),\r\n idempotencyKey: String(row[7]),\r\n argumentsDigest: String(row[8]),\r\n ok: Number(row[9]) === 1,\r\n result:\r\n row[10] === null || row[10] === undefined\r\n ? undefined\r\n : JSON.parse(String(row[10])),\r\n error:\r\n row[11] === null || row[11] === undefined ? undefined : String(row[11]),\r\n authorityDecisionDigest: String(row[12]),\r\n authorityDigest: row[13] === null || row[13] === undefined ? null : String(row[13]),\r\n provenanceDigest: String(row[14]),\r\n };\r\n verifyMcpResult(result);\r\n return result;\r\n }\r\n}\r\n", "import {createMcpServer, type McpServerOptions} from './server.ts';\r\nimport type {McpToolDefinition} from '../../packages/runtime/src/mcp-gateway.ts';\r\nimport {executeMcpInvocation} from '../../packages/runtime/src/mcp-invocation-service.ts';\r\nimport {McpProvenanceRepository} from '../../packages/database/src/mcp-provenance-repository.ts';\r\n\r\nexport interface ViraMcpConfig {baseUrl:string; apiKey:string; fetcher?:typeof fetch; serverName?:string; requestAuthToken?:string; authorityUrl?:string; scope:{organizationId:string;projectId:string;environmentId:string}; authorizeEffectful?: (input:{tool:string;arguments:Record<string,unknown>;scope:{organizationId:string;projectId:string;environmentId:string}})=>{allowed:boolean;decisionDigest:string;reason?:string}|Promise<{allowed:boolean;decisionDigest:string;reason?:string}>; provenanceRepository?: McpServerOptions['provenanceRepository']; sessionRepository?: McpServerOptions['sessionRepository']; sessionId?: string; invocationExecutor?: McpServerOptions['invocationExecutor'];}\r\n\r\nexport function resolveViraMcpConfig(environment:NodeJS.ProcessEnv=process.env):Omit<ViraMcpConfig,'scope'> {\r\n const baseUrl=(environment.VIRA_API_URL??'http://127.0.0.1:4185').replace(/\\/$/,'');\r\n const apiKey=environment.VIRA_API_KEY??(environment.NODE_ENV==='production'?'':'vira_dev_local.local-development-only-32chars');\r\n if(!apiKey) throw new Error('VIRA_API_KEY_REQUIRED_IN_PRODUCTION');\r\n const authorityUrl=environment.VIRA_MCP_AUTHORITY_URL;\r\n return {baseUrl,apiKey,authorityUrl,serverName:environment.VIRA_MCP_SERVER_NAME??'vira-behavior-control',requestAuthToken:environment.VIRA_MCP_AUTH_TOKEN,...(authorityUrl?{authorizeEffectful:async(input:{tool:string;arguments:Record<string,unknown>;scope:{organizationId:string;projectId:string;environmentId:string}})=>{const response=await fetch(`${authorityUrl}`,{method:'POST',headers:{authorization:`Bearer ${apiKey}`,'content-type':'application/json'},body:JSON.stringify(input)});const payload=await response.json().catch(()=>null) as {allowed?:boolean;decisionDigest?:string;reason?:string}|null;return {allowed:response.ok&&payload?.allowed===true,decisionDigest:payload?.decisionDigest??'',...(payload?.reason?{reason:payload.reason}:{})};}}:{})};\r\n}\r\n\r\nconst tools:readonly McpToolDefinition[] = Object.freeze([\r\n {name:'resolve_semantic',description:'Resolve input through the governed semantic runtime.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},input:{type:'string'},sessionId:{type:'string'},profile:{type:'object'},selection:{type:'object'},candidates:{type:'array'},timeoutMs:{type:'number'}},required:['organizationId','projectId','environmentId','input']}},\r\n {name:'resolve_runtime',description:'Resolve a persisted BehaviorPoint through the governed runtime boundary. behaviorPoint may be omitted when semanticContext supplies the selected canonical route.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},behaviorPoint:{type:'string'},executionBoundary:{type:'object'},semanticContext:{type:'object'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'create_signal_discovery_proposal',description:'Propose a discovered signal for scoped human review.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},signalStableKey:{type:'string'},evidenceEventIds:{type:'array',items:{type:'string'}},suggestedProducerType:{type:'string'},suggestedProducerKey:{type:'string'},confidence:{type:'number'}},required:['organizationId','projectId','environmentId','signalStableKey','evidenceEventIds']}},\r\n {name:'review_signal_discovery_proposal',description:'Approve or reject a discovered signal proposal.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},proposalId:{type:'string'},decision:{type:'string'}},required:['organizationId','projectId','environmentId','proposalId','decision']}},\r\n {name:'materialize_signal_discovery',description:'Materialize an approved signal into a definition and producer mapping.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},proposalId:{type:'string'},valueType:{type:'string'},description:{type:'string'}},required:['organizationId','projectId','environmentId','proposalId']}},\r\n {name:'create_signal_mapping',description:'Create a scoped signal producer mapping proposal.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},signalStableKey:{type:'string'},signalVersion:{type:'number'},producerType:{type:'string'},producerKey:{type:'string'},sourceEventType:{type:'string'},evidenceEventIds:{type:'array',items:{type:'string'}}},required:['organizationId','projectId','environmentId','signalStableKey','signalVersion','producerType','producerKey']}},\r\n {name:'get_signal_mapping',description:'Read one scoped signal producer mapping.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},mappingId:{type:'string'}},required:['organizationId','projectId','environmentId','mappingId']}},\r\n {name:'review_signal_mapping',description:'Approve or reject a scoped signal producer mapping.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},mappingId:{type:'string'},decision:{type:'string'},eventId:{type:'string'},definition:{type:'object'},teachConsentRecord:{type:'object'}},required:['organizationId','projectId','environmentId','mappingId','decision']}},\r\n {name:'list_behavior_programs',description:'Read scoped canonical behavior programs.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'list_behavior_strategies',description:'Read persisted immutable Behavior Strategy revisions in the configured scope.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'get_behavior_strategy',description:'Read one persisted Behavior Strategy definition and artifact binding.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},strategyId:{type:'string'}},required:['organizationId','projectId','environmentId','strategyId']}},\r\n {name:'simulate_behavior_strategy',description:'Run the explicit structural dry-run for a persisted Behavior Strategy.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},strategyId:{type:'string'},initialState:{type:'object'}},required:['organizationId','projectId','environmentId','strategyId']}},\r\n {name:'start_strategy_execution',description:'Start a persisted Strategy execution through the governed runtime boundary.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},behaviorPoint:{type:'string'},executionBoundary:{type:'object'},revisionId:{type:'string'},idempotencyKey:{type:'string'},nonce:{type:'string'},expiresAt:{type:'number'},decisionPlanId:{type:'string'},candidates:{type:'array',items:{type:'object'}},policy:{type:'string'},allowedIds:{type:'array',items:{type:'string'}},calibrationId:{type:'string'},postModelJudge:{type:'object'},shadow:{type:'object'},artifactDigest:{type:'string'},traceId:{type:'string'},executionId:{type:'string'},state:{type:'object'}},required:['organizationId','projectId','environmentId','revisionId','idempotencyKey','nonce','expiresAt','decisionPlanId','candidates','policy','artifactDigest']}},\r\n {name:'get_strategy_execution',description:'Read one scoped Strategy execution.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'get_strategy_execution_trace',description:'Read persisted Strategy step receipts and trace evidence.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'continue_strategy_execution',description:'Continue a waiting Strategy execution with the same pinned artifact, state, and external references.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'},authorityDigest:{type:'string'},state:{type:'object',additionalProperties:true},references:{type:'object',additionalProperties:true}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'cancel_strategy_execution',description:'Cancel a non-terminal scoped Strategy execution.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'list_ai_systems',description:'Read connected AI systems in the configured scope.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'list_discovery_candidates',description:'Read evidence-backed discovery candidates awaiting human review.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},reviewState:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'review_discovery_candidate',description:'Record a human review decision for a scoped discovery candidate.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},kind:{type:'string'},key:{type:'string'},decision:{type:'string'},payload:{type:'object'}},required:['organizationId','projectId','environmentId','kind','key','decision']}},\r\n {name:'create_observation',description:'Submit one scoped observation for discovery; it does not publish behavior.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},id:{type:'string'},content:{type:'object'},consent:{type:'boolean'}},required:['organizationId','projectId','environmentId','id','content','consent']}},\r\n {name:'start_evaluation',description:'Start a local evaluation for an existing artifact.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},id:{type:'string'},targetArtifact:{type:'string'},dataset:{type:'array'},assertions:{type:'array'}},required:['organizationId','projectId','environmentId','id','targetArtifact','dataset','assertions']}},\r\n {name:'compile_behavior_capsule',description:'Compile a persisted scoped Behavior VM capsule and return its receipt.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},programId:{type:'string'},input:{type:'string'},selection:{type:'object'},candidates:{type:'array'}},required:['organizationId','projectId','environmentId','programId','input']}},\r\n {name:'serve_behavior_projection',description:'Serve the active scoped behavior projection through the governed runtime boundary.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},programId:{type:'string'},input:{type:'string'},provider:{type:'string'},protocol:{type:'string'}},required:['organizationId','projectId','environmentId','input','provider']}},\r\n {name:'list_packs',description:'Read scoped behavior packs.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'import_pack',description:'Import and validate a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},manifest:{type:'object'},objects:{type:'object'},archiveBase64:{type:'string'},fileName:{type:'string'}},required:['organizationId','projectId','environmentId','manifest']}},\r\n {name:'install_pack',description:'Install a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'},variables:{type:'object'}},required:['organizationId','projectId','environmentId','packId']}},\r\n {name:'evaluate_pack',description:'Evaluate a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'},passed:{type:'boolean'},score:{type:'number'},runId:{type:'string'}},required:['organizationId','projectId','environmentId','packId','passed']}},\r\n {name:'approve_pack',description:'Approve a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'}},required:['organizationId','projectId','environmentId','packId']}},\r\n {name:'release_pack',description:'Release a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'}},required:['organizationId','projectId','environmentId','packId']}},\r\n {name:'preview_pack_upgrade',description:'Preview a scoped behavior pack upgrade.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'},incoming:{type:'object'}},required:['organizationId','projectId','environmentId','packId','incoming']}},\r\n]);\r\n\r\nfunction assertScope(input:Record<string,unknown>,scope:ViraMcpConfig['scope']):void { for(const key of ['organizationId','projectId','environmentId'] as const) if(input[key]!==scope[key]) throw new Error('MCP_VIRA_SCOPE_MISMATCH'); }\r\nexport function createViraMcpServer(config:ViraMcpConfig) {\r\n return createMcpServer(createViraMcpOptions(config));\r\n}\r\nexport function createViraMcpOptions(config:ViraMcpConfig): McpServerOptions {\r\n if(!config.baseUrl?.trim()||!config.apiKey?.trim()) throw new Error('VIRA_MCP_CONFIG_REQUIRED');\r\n const fetcher=config.fetcher??fetch;\r\n const api=async(path:string,body:Record<string,unknown>|undefined,requestId:string)=>{const response=await fetcher(`${config.baseUrl.replace(/\\/$/,'')}${path}`,{method:body?'POST':'GET',headers:{authorization:`Bearer ${config.apiKey}`,'content-type':'application/json','idempotency-key':requestId},...(body?{body:JSON.stringify(body)}:{})}); const payload=await response.json().catch(()=>null); if(!response.ok) return {error:`VIRA_API_${response.status}`,result:payload}; return {result:payload};};\r\n const options:McpServerOptions={serverName:config.serverName??'vira-behavior-control',requestAuthToken:config.requestAuthToken,tools,invocation:{...config.scope,id:'mcp-vira',receiptId:'mcp-vira',idempotencyKey:'mcp-vira'},transport:{call:async({tool,arguments:args})=>{assertScope(args,config.scope); const scopeQuery=`organizationId=${encodeURIComponent(config.scope.organizationId)}&projectId=${encodeURIComponent(config.scope.projectId)}&environmentId=${encodeURIComponent(config.scope.environmentId)}`; if(tool==='list_behavior_programs') return api(`/v1/behavior-programs?projectId=${encodeURIComponent(config.scope.projectId)}&environmentId=${encodeURIComponent(config.scope.environmentId)}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='list_behavior_strategies') return api(`/v1/behavior-strategies?${scopeQuery}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='get_behavior_strategy') return api(`/v1/behavior-strategies/${encodeURIComponent(String(args.strategyId))}?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.strategyId)}`); if(tool==='simulate_behavior_strategy') return api(`/v1/behavior-strategies/${encodeURIComponent(String(args.strategyId))}/simulate?${scopeQuery}`,{initialState:args.initialState??{}},`mcp:${tool}:${String(args.strategyId)}`); if(tool==='start_strategy_execution') return api('/v1/runtime/strategy-executions',args,`mcp:${tool}:${String(args.executionId??args.artifactDigest)}`); if(tool==='get_strategy_execution') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.executionId)}`); if(tool==='get_strategy_execution_trace') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/trace?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.executionId)}`); if(tool==='continue_strategy_execution') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/continue`,args.authorityDigest?{authorityDigest:args.authorityDigest}: {},`mcp:${tool}:${String(args.executionId)}`); if(tool==='cancel_strategy_execution') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/cancel`,{},`mcp:${tool}:${String(args.executionId)}`); if(tool==='list_ai_systems') return api(`/v1/ai-systems?${scopeQuery}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='list_discovery_candidates') return api(`/v1/discovery/candidates?${scopeQuery}${args.reviewState?`&reviewState=${encodeURIComponent(String(args.reviewState))}`:''}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='review_discovery_candidate') return api(`/v1/discovery/candidates/${encodeURIComponent(String(args.kind))}/${encodeURIComponent(String(args.key))}/review`,{...args},`mcp:${tool}:${String(args.kind)}:${String(args.key)}`); if(tool==='create_observation') return api('/v1/observations',args,`mcp:${tool}:${String(args.id)}`); if(tool==='start_evaluation') return api('/v1/evaluations',args,`mcp:${tool}:${String(args.id)}`); if(tool==='compile_behavior_capsule') return api('/v1/runtime/behavior-capsule',args,`mcp:${tool}:${String(args.programId)}`); if(tool==='serve_behavior_projection') return api('/v1/runtime/behavior-projection',args,`mcp:${tool}:${String(args.programId??'active')}`); throw new Error('MCP_TOOL_NOT_IMPLEMENTED');}},authorize:({invocation,definition})=>definition.effectful ? (config.authorizeEffectful ? config.authorizeEffectful({tool:definition.name,arguments:invocation.arguments,scope:{organizationId:invocation.organizationId,projectId:invocation.projectId,environmentId:invocation.environmentId}}) : {allowed:false,decisionDigest:'',reason:'MCP_AUTHORITY_REQUIRED'}) : {allowed:true,decisionDigest:'read-only'}, ...(config.provenanceRepository ? {provenanceRepository:config.provenanceRepository} : {}), ...(config.sessionRepository ? {sessionRepository:config.sessionRepository} : {}), ...(config.sessionId ? {sessionId:config.sessionId} : {}), ...(config.invocationExecutor ? {invocationExecutor:config.invocationExecutor} : {})};\r\n const originalTransport=options.transport;\r\n const originalCall=originalTransport.call;\r\n options.transport={...originalTransport,call:async(input)=>{const {tool,arguments:args}=input; if(tool==='list_packs') return api('/v1/packs',undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='import_pack') return api('/v1/packs/import',args,`mcp:${tool}:${config.scope.projectId}`); if(['install_pack','evaluate_pack','approve_pack','release_pack','preview_pack_upgrade'].includes(tool)){const action={install_pack:'install',evaluate_pack:'evaluate',approve_pack:'approve',release_pack:'release',preview_pack_upgrade:'upgrade-preview'}[tool]; const {packId,...body}=args; return api(`/v1/packs/${encodeURIComponent(String(packId))}/${action}`,body,`mcp:${tool}:${String(packId)}`);} return originalCall(input);}};\r\n originalTransport.call=options.transport.call;\r\n options.transport={...originalTransport,call:async(input)=>{if(input.tool==='resolve_semantic'||input.tool==='resolve_runtime') assertScope(input.arguments,config.scope); return input.tool==='resolve_semantic'?api('/v1/semantic/resolve',input.arguments,`mcp:resolve_semantic:${String(input.arguments.input)}`):input.tool==='resolve_runtime'?api('/v1/runtime/resolve',input.arguments,`mcp:resolve_runtime:${String(input.arguments.behaviorPoint)}`):originalTransport.call(input);}};\r\n const signalTransport=options.transport;\r\n options.transport={...signalTransport,call:async(input)=>{\r\n const {tool,arguments:args}=input;\r\n if(tool.startsWith('signal_') || tool==='create_signal_discovery_proposal' || tool==='review_signal_discovery_proposal' || tool==='materialize_signal_discovery' || tool==='create_signal_mapping' || tool==='get_signal_mapping' || tool==='review_signal_mapping') assertScope(args,config.scope);\r\n const scopeQuery=`organizationId=${encodeURIComponent(config.scope.organizationId)}&projectId=${encodeURIComponent(config.scope.projectId)}&environmentId=${encodeURIComponent(config.scope.environmentId)}`;\r\n if(tool==='create_signal_discovery_proposal') return api('/v1/signals/discovery-proposals',args,`mcp:${tool}:${String(args.signalStableKey)}`);\r\n if(tool==='review_signal_discovery_proposal') return api(`/v1/signals/discovery-proposals/${encodeURIComponent(String(args.proposalId))}/review`,{decision:args.decision},`mcp:${tool}:${String(args.proposalId)}`);\r\n if(tool==='materialize_signal_discovery'){const {proposalId,...body}=args;return api(`/v1/signals/discovery-proposals/${encodeURIComponent(String(proposalId))}/materialize`,body,`mcp:${tool}:${String(proposalId)}`);}\r\n if(tool==='create_signal_mapping') return api('/v1/signals/mappings',args,`mcp:${tool}:${String(args.signalStableKey)}`);\r\n if(tool==='get_signal_mapping') return api(`/v1/signals/mappings/${encodeURIComponent(String(args.mappingId))}?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.mappingId)}`);\r\n if(tool==='review_signal_mapping'){const {mappingId,...body}=args;return api(`/v1/signals/mappings/${encodeURIComponent(String(mappingId))}/review`,body,`mcp:${tool}:${String(mappingId)}`);}\r\n return signalTransport.call(input);\r\n }};\r\n const continuationTransport=options.transport;\r\n options.transport={...continuationTransport,call:async(input)=>{\r\n if(input.tool==='continue_strategy_execution'){\r\n const args=input.arguments;\r\n const body={\r\n ...(typeof args.authorityDigest==='string'?{authorityDigest:args.authorityDigest}:{}),\r\n ...(args.state&&typeof args.state==='object'&&!Array.isArray(args.state)?{state:args.state}:{}),\r\n ...(args.references&&typeof args.references==='object'&&!Array.isArray(args.references)?{references:args.references}:{}),\r\n };\r\n return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/continue`,body,`mcp:${input.tool}:${String(args.executionId)}`);\r\n }\r\n return continuationTransport.call(input);\r\n }};\r\n const configuredRepository=config.provenanceRepository;\r\n if(configuredRepository && typeof configuredRepository.claim!=='function') throw new Error('MCP_PROVENANCE_CLAIM_REQUIRED');\r\n const provenanceRepository=(configuredRepository ?? new McpProvenanceRepository()) as Parameters<typeof executeMcpInvocation>[0]['store'];\r\n options.provenanceRepository=provenanceRepository;\r\n options.invocationExecutor ??= ({invocation,authority,signal})=>executeMcpInvocation({invocation,authority,signal,transport:options.transport,store:provenanceRepository});\r\n options.requireInvocationExecutor=true;\r\n return options;\r\n}\r\n", "import {assertMcpSession, type McpSession} from '../../runtime/src/mcp-session.ts';\r\ntype Scope={organizationId:string;projectId:string;environmentId:string};\r\nexport class McpSessionRepository {\r\n #items=new Map<string,McpSession>();\r\n save(session:McpSession):McpSession { assertMcpSession(session); const prior=this.#items.get(session.id); if(prior){if(prior.organizationId!==session.organizationId||prior.projectId!==session.projectId||prior.environmentId!==session.environmentId)throw new Error('MCP_SESSION_SCOPE_CONFLICT'); if(prior.sessionDigest===session.sessionDigest)return structuredClone(prior); if(session.generation<prior.generation||session.generation===prior.generation&&prior.status==='CLOSED')throw new Error('MCP_SESSION_CONFLICT');} this.#items.set(session.id,structuredClone(session)); return structuredClone(session); }\r\n get(id:string,scope:Scope):McpSession|null { const value=this.#items.get(id); if(!value||value.organizationId!==scope.organizationId||value.projectId!==scope.projectId||value.environmentId!==scope.environmentId)return null; assertMcpSession(value); return structuredClone(value); }\r\n}\r\nexport interface McpSessionDb {exec(sql:string,params:unknown[]):{values:unknown[][]}[];run(sql:string,params:unknown[]):void;}\r\nexport class SqlMcpSessionRepository {\r\n private readonly db:McpSessionDb;\r\n constructor(db:McpSessionDb){this.db=db;}\r\n save(session:McpSession):McpSession { assertMcpSession(session); const row=this.db.exec('SELECT id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest FROM mcp_sessions WHERE id=?',[session.id])[0]?.values[0]; if(row){const prior=this.mapRow(row); if(prior.organizationId!==session.organizationId||prior.projectId!==session.projectId||prior.environmentId!==session.environmentId)throw new Error('MCP_SESSION_SCOPE_CONFLICT'); if(prior.sessionDigest===session.sessionDigest)return prior; if(session.generation<prior.generation||session.generation===prior.generation&&prior.status==='CLOSED')throw new Error('MCP_SESSION_CONFLICT'); this.db.run('UPDATE mcp_sessions SET server=?,endpoint=?,protocol_version=?,status=?,auth_digest=?,generation=?,updated_at=?,session_digest=? WHERE id=? AND organization_id=? AND project_id=? AND environment_id=?',[session.server,session.endpoint,session.protocolVersion,session.status,session.authDigest,session.generation,session.updatedAt,session.sessionDigest,session.id,session.organizationId,session.projectId,session.environmentId]); const persisted=this.get(session.id,{organizationId:session.organizationId,projectId:session.projectId,environmentId:session.environmentId});if(!persisted||persisted.sessionDigest!==session.sessionDigest||persisted.generation!==session.generation||persisted.status!==session.status)throw new Error('MCP_SESSION_READBACK_MISMATCH');return persisted;} this.db.run('INSERT INTO mcp_sessions (id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)',[session.id,session.organizationId,session.projectId,session.environmentId,session.server,session.endpoint,session.protocolVersion,session.status,session.authDigest,session.generation,session.createdAt,session.updatedAt,session.sessionDigest]); const persisted=this.get(session.id,{organizationId:session.organizationId,projectId:session.projectId,environmentId:session.environmentId});if(!persisted||persisted.sessionDigest!==session.sessionDigest)throw new Error('MCP_SESSION_READBACK_MISMATCH');return persisted; }\r\n private mapRow(row:readonly unknown[]):McpSession { const session={id:String(row[0]),organizationId:String(row[1]),projectId:String(row[2]),environmentId:String(row[3]),server:String(row[4]),endpoint:String(row[5]),protocolVersion:String(row[6]),authDigest:String(row[8]),status:String(row[7]) as McpSession['status'],generation:Number(row[9]),createdAt:String(row[10]),updatedAt:String(row[11]),sessionDigest:String(row[12])}; assertMcpSession(session); return session; }\r\n get(id:string,scope:Scope):McpSession|null { const row=this.db.exec('SELECT id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest FROM mcp_sessions WHERE id=? AND organization_id=? AND project_id=? AND environment_id=?',[id,scope.organizationId,scope.projectId,scope.environmentId])[0]?.values[0]; return row ? this.mapRow(row) : null; }\r\n}\r\n", "import {McpServer} from '@modelcontextprotocol/server';\r\nimport {serveStdio} from '@modelcontextprotocol/server/stdio';\r\nimport {z} from 'zod';\r\nimport {type McpServerOptions} from './server.ts';\r\nimport {invokeMcpTool, type McpAuthorityDecision} from '../../packages/runtime/src/mcp-gateway.ts';\r\n\r\n/**\r\n * Official MCP transport boundary. Vira keeps its authority/provenance\r\n * implementation, while protocol negotiation, server/discover and stdio\r\n * framing are owned by the official MCP SDK.\r\n */\r\nexport function serveOfficialViraMcp(options:McpServerOptions) {\r\n return serveStdio(() => {\r\n const server=new McpServer({name:options.serverName,version:'1.0.0'},{capabilities:{tools:{},resources:options.resources?{}:undefined,prompts:options.prompts?{}:undefined}});\r\n for(const definition of options.tools){\r\n server.registerTool(definition.name,{description:definition.description,inputSchema:z.record(z.string(),z.unknown())},async (argumentsValue)=>{\r\n const invocation={...options.invocation,server:options.serverName,tool:definition.name,arguments:argumentsValue as Record<string,unknown>};\r\n const authority:McpAuthorityDecision=definition.effectful\r\n ? await options.authorize?.({invocation,definition}) ?? {allowed:false,decisionDigest:'',reason:'MCP_AUTHORITY_REQUIRED'}\r\n : {allowed:true,decisionDigest:'read-only'};\r\n if(!authority.allowed) return {isError:true,content:[{type:'text' as const,text:authority.reason??'MCP_AUTHORITY_DENIED'}]};\r\n const result=options.invocationExecutor\r\n ? await options.invocationExecutor({invocation,authority})\r\n : await invokeMcpTool({invocation,authority,transport:options.transport});\r\n return {isError:!result.ok,content:[{type:'text' as const,text:JSON.stringify(result.result??result.error??null)}]};\r\n });\r\n }\r\n return server;\r\n });\r\n}\r\n", "export type PostgresQueryResult<Row extends Record<string, unknown> = Record<string, unknown>> = {rows: Row[]; rowCount: number};\r\nexport type PostgresClient = {query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgresQueryResult<Row>>; release(): void};\r\nexport type PostgresPool = {query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgresQueryResult<Row>>; connect(): Promise<PostgresClient>};\r\nexport type PostgresDatabase = {mode: 'production'; query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgresQueryResult<Row>>; transaction<T>(work: (client: PostgresClient) => Promise<T>): Promise<T>; health(): {ready: true; mode: 'production'}};\r\nfunction validateSql(sql: string): void {if (!sql.trim()) throw new Error('POSTGRES_SQL_REQUIRED'); if (sql.includes('\\u0000')) throw new Error('POSTGRES_SQL_INVALID');}\r\nexport function createPostgresDatabase(input: {pool: PostgresPool; databaseUrl?: string}): PostgresDatabase {\r\n if (!input.pool || typeof input.pool.query !== 'function' || typeof input.pool.connect !== 'function') throw new Error('POSTGRES_POOL_INVALID');\r\n if (!input.databaseUrl?.trim() && !process.env.DATABASE_URL?.trim()) throw new Error('DATABASE_URL_REQUIRED');\r\n return {mode: 'production', query: async <Row extends Record<string, unknown>>(sql: string, params: readonly unknown[] = []) => {validateSql(sql); return input.pool.query<Row>(sql, params);}, transaction: async <T>(work: (client: PostgresClient) => Promise<T>) => {if (typeof work !== 'function') throw new Error('DATABASE_WORK_REQUIRED'); const client = await input.pool.connect(); try {await client.query('BEGIN'); const result = await work(client); await client.query('COMMIT'); return result;} catch (error) {try {await client.query('ROLLBACK');} catch {} throw error;} finally {client.release();}}, health: () => ({ready: true, mode: 'production'})};\r\n}\r\nexport function requirePostgresDatabase(input: {pool: PostgresPool; databaseUrl?: string}): PostgresDatabase {return createPostgresDatabase(input);}\r\nimport {Pool, type PoolConfig} from 'pg';\r\n\r\n\r\nexport function createPostgresPool(input: {databaseUrl?: string; max?: number; ssl?: boolean} = {}): {pool: PostgresPool; close: () => Promise<void>} {\r\n const connectionString = input.databaseUrl ?? process.env.DATABASE_URL;\r\n if (!connectionString?.startsWith('postgres')) throw new Error('POSTGRES_DATABASE_URL_REQUIRED');\r\n const config: PoolConfig = {connectionString, max: input.max ?? 10, idleTimeoutMillis: 30_000, connectionTimeoutMillis: 10_000, ...(input.ssl ? {ssl: {rejectUnauthorized: false}} : {})};\r\n const pool = new Pool(config);\r\n return {pool: pool as unknown as PostgresPool, close: () => pool.end()};\r\n}\r\n", "import type {PostgresClient} from './postgres-adapter.ts';\r\nimport {createHash} from 'node:crypto';\r\n\r\nexport type PostgresMigration = {id: string; sql: string; codeVersion?: string};\r\n\r\nfunction splitSql(sql: string): string[] {\r\n const statements: string[] = [];\r\n let start = 0;\r\n let quote: \"'\" | '\"' | '`' | null = null;\r\n let dollarQuote: string | null = null;\r\n let lineComment = false;\r\n let blockComment = false;\r\n for (let i = 0; i < sql.length; i += 1) {\r\n const ch = sql[i];\r\n const next = sql[i + 1];\r\n if (dollarQuote) { if (sql.startsWith(dollarQuote, i)) { i += dollarQuote.length - 1; dollarQuote = null; } continue; }\r\n if (lineComment) { if (ch === '\\n') lineComment = false; continue; }\r\n if (blockComment) { if (ch === '*' && next === '/') { blockComment = false; i += 1; } continue; }\r\n if (!quote && ch === '-' && next === '-') { lineComment = true; i += 1; continue; }\r\n if (!quote && ch === '/' && next === '*') { blockComment = true; i += 1; continue; }\r\n if (quote) {\r\n if (ch === quote && sql[i - 1] !== '\\\\') quote = null;\r\n continue;\r\n }\r\n if (ch === \"'\" || ch === '\"' || ch === '`') { quote = ch; continue; }\r\n if (ch === '$') {\r\n const match = sql.slice(i).match(/^\\$[A-Za-z_0-9]*\\$/);\r\n if (match) { dollarQuote = match[0]; i += match[0].length - 1; continue; }\r\n }\r\n if (ch === ';') {\r\n const statement = sql.slice(start, i).trim();\r\n if (statement) statements.push(statement);\r\n start = i + 1;\r\n }\r\n }\r\n const tail = sql.slice(start).trim();\r\n if (tail) statements.push(tail);\r\n return statements;\r\n}\r\n\r\nexport function normalizePostgresMigrationSql(sql: string): string {\r\n if (!sql.trim()) throw new Error('POSTGRES_MIGRATION_SQL_REQUIRED');\r\n // Migrations are DDL only. Parameter binding belongs to repository queries;\r\n // accepting SQLite '?' or PostgreSQL '$1' here would make the migration\r\n // runner silently reinterpret a caller's SQL.\r\n if (/\\bINSERT\\s+OR\\s+(?:REPLACE|IGNORE)\\b/i.test(sql)) throw new Error('POSTGRES_MIGRATION_CONFLICT_SEMANTICS_UNSUPPORTED');\r\n if (/[?]|\\$\\d+/.test(sql)) throw new Error('POSTGRES_MIGRATION_PARAMETERS_UNSUPPORTED');\r\n if (/\\bPRAGMA\\b/i.test(sql)) throw new Error('POSTGRES_MIGRATION_SQLITE_PRAGMA_UNSUPPORTED');\r\n // The foundation migration has two SQLite triggers for worker lease\r\n // bookkeeping. Replace those exact triggers with equivalent PostgreSQL\r\n // functions/triggers; any other trigger remains fail-closed.\r\n const hasWorkerLeaseTriggers = /CREATE\\s+TRIGGER\\s+worker_jobs_assign_default_lease/i.test(sql)\r\n || /CREATE\\s+TRIGGER\\s+worker_jobs_clear_lease/i.test(sql);\r\n if (/\\bCREATE\\s+TRIGGER\\b/i.test(sql) && !hasWorkerLeaseTriggers) throw new Error('POSTGRES_MIGRATION_SQLITE_TRIGGER_UNSUPPORTED');\r\n // SQLite's common INTEGER PRIMARY KEY AUTOINCREMENT idiom has a direct,\r\n // explicit PostgreSQL identity equivalent. Reject any other AUTOINCREMENT\r\n // spelling instead of sending invalid SQL to the server.\r\n const normalized = sql.replace(/\\bINTEGER\\s+PRIMARY\\s+KEY\\s+AUTOINCREMENT\\b/gi, 'BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY');\r\n if (/\\bAUTOINCREMENT\\b/i.test(normalized)) throw new Error('POSTGRES_MIGRATION_AUTOINCREMENT_UNSUPPORTED');\r\n const withoutWorkerTriggers = normalized\r\n .replace(/CREATE\\s+TRIGGER\\s+worker_jobs_assign_default_lease[\\s\\S]*?END\\s*;?/i, '')\r\n .replace(/CREATE\\s+TRIGGER\\s+worker_jobs_clear_lease[\\s\\S]*?END\\s*;?/i, '');\r\n if (/\\b(?:INSERT|UPDATE|DELETE|UPSERT)\\b/i.test(withoutWorkerTriggers)) throw new Error('POSTGRES_MIGRATION_DML_UNSUPPORTED');\r\n if (!hasWorkerLeaseTriggers) return withoutWorkerTriggers;\r\n return `${withoutWorkerTriggers}\r\nCREATE OR REPLACE FUNCTION worker_jobs_assign_default_lease_fn() RETURNS trigger LANGUAGE plpgsql AS $$\r\nBEGIN\r\n IF NEW.state = 'RUNNING' AND NEW.lease_owner IS NULL THEN\r\n NEW.lease_owner := 'worker-default';\r\n NEW.lease_expires_at := CURRENT_TIMESTAMP + INTERVAL '60 seconds';\r\n END IF;\r\n RETURN NEW;\r\nEND;\r\n$$;\r\nDROP TRIGGER IF EXISTS worker_jobs_assign_default_lease ON worker_jobs;\r\nCREATE TRIGGER worker_jobs_assign_default_lease BEFORE UPDATE OF state ON worker_jobs\r\nFOR EACH ROW EXECUTE FUNCTION worker_jobs_assign_default_lease_fn();\r\nCREATE OR REPLACE FUNCTION worker_jobs_clear_lease_fn() RETURNS trigger LANGUAGE plpgsql AS $$\r\nBEGIN\r\n IF NEW.state <> 'RUNNING' THEN\r\n NEW.lease_owner := NULL;\r\n NEW.lease_expires_at := NULL;\r\n END IF;\r\n RETURN NEW;\r\nEND;\r\n$$;\r\nDROP TRIGGER IF EXISTS worker_jobs_clear_lease ON worker_jobs;\r\nCREATE TRIGGER worker_jobs_clear_lease BEFORE UPDATE OF state ON worker_jobs\r\nFOR EACH ROW EXECUTE FUNCTION worker_jobs_clear_lease_fn();`;\r\n}\r\n\r\nexport async function applyPostgresMigrations(client: PostgresClient, migrations: readonly PostgresMigration[]): Promise<void> {\r\n if (!client || typeof client.query !== 'function') throw new Error('POSTGRES_CLIENT_INVALID');\r\n await client.query('BEGIN');\r\n try {\r\n // Acquire the cross-process lock before the first DDL statement. PostgreSQL\r\n // creates a relation type for CREATE TABLE, so two concurrent starters can\r\n // race even when the statement says IF NOT EXISTS.\r\n await client.query('SELECT pg_advisory_xact_lock(hashtext($1))', ['vira:schema:migrations']);\r\n await client.query(`CREATE TABLE IF NOT EXISTS vira_schema_migrations (\r\n id TEXT PRIMARY KEY,\r\n applied_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,\r\n checksum TEXT,\r\n code_version TEXT\r\n )`);\r\n await client.query('ALTER TABLE vira_schema_migrations ADD COLUMN IF NOT EXISTS checksum TEXT');\r\n await client.query('ALTER TABLE vira_schema_migrations ADD COLUMN IF NOT EXISTS code_version TEXT');\r\n const applied = await client.query<{id: string; checksum: string|null}>('SELECT id, checksum FROM vira_schema_migrations');\r\n const appliedIds = new Map(applied.rows.map((row) => [row.id, row.checksum]));\r\n for (const migration of migrations) {\r\n if (!migration.id.trim() || !migration.sql.trim()) throw new Error('POSTGRES_MIGRATION_INVALID');\r\n const checksum = createHash('sha256').update(normalizePostgresMigrationSql(migration.sql)).digest('hex');\r\n if (appliedIds.has(migration.id)) {\r\n const previous = appliedIds.get(migration.id);\r\n if (previous && previous !== checksum) throw new Error(`POSTGRES_MIGRATION_CHECKSUM_MISMATCH:${migration.id}`);\r\n if (!previous) await client.query('UPDATE vira_schema_migrations SET checksum=$1, code_version=$2 WHERE id=$3', [checksum, migration.codeVersion ?? process.env.VIRA_VERSION ?? null, migration.id]);\r\n continue;\r\n }\r\n for (const statement of splitSql(normalizePostgresMigrationSql(migration.sql))) await client.query(statement);\r\n await client.query('INSERT INTO vira_schema_migrations (id, checksum, code_version) VALUES ($1, $2, $3)', [migration.id, checksum, migration.codeVersion ?? process.env.VIRA_VERSION ?? null]);\r\n }\r\n await client.query('COMMIT');\r\n } catch (error) {\r\n try { await client.query('ROLLBACK'); } catch { /* preserve migration error */ }\r\n throw error;\r\n }\r\n}\r\n\r\nexport const splitPostgresMigrationSql = splitSql;\r\n", "import {readFile} from 'node:fs/promises';\r\nimport {dirname, resolve} from 'node:path';\r\nimport {fileURLToPath} from 'node:url';\r\nimport {createPostgresDatabase, createPostgresPool, type PostgresDatabase} from './postgres-adapter.ts';\r\nimport {applyPostgresMigrations, type PostgresMigration} from './postgres-migrations.ts';\r\n\r\nexport type OpenPostgresOptions = {databaseUrl?: string; migrationPaths?: readonly string[]; maxConnections?: number; ssl?: boolean};\r\nexport type PostgresRuntime = PostgresDatabase & {close(): Promise<void>};\r\n\r\nconst here = dirname(fileURLToPath(import.meta.url));\r\nconst defaultMigrationPaths = [\r\n resolve(here, '../migrations/001_vnext_foundation.sql'),\r\n resolve(here, '../migrations/002_session_handoff_approvals.sql'),\r\n resolve(here, '../migrations/003_mfa_totp.sql'),\r\n resolve(here, '../migrations/004_behavior_strategy_execution.sql'),\r\n resolve(here, '../migrations/005_postgres_runtime_completeness.sql'),\r\n resolve(here, '../migrations/007_postgres_native_support_repositories.sql'),\r\n resolve(here, '../migrations/008_postgres_identity_session_repositories.sql'),\r\n resolve(here, '../migrations/009_postgres_runtime_repair.sql'),\r\n resolve(here, '../migrations/010_postgres_receipt_lineage_repair.sql'),\r\n resolve(here, '../migrations/011_postgres_semantic_activation_receipts.sql'),\r\n resolve(here, '../migrations/012_strategy_release_lineage.sql'),\r\n resolve(here, '../migrations/013_strategy_variant_definition.sql'),\r\n resolve(here, '../migrations/014_strategy_step_recovery_action.sql'),\r\n resolve(here, '../migrations/015_strategy_total_recoveries.sql'),\r\n];\r\n\r\nexport async function openPostgresRuntime(options: OpenPostgresOptions = {}): Promise<PostgresRuntime> {\r\n const {pool, close} = createPostgresPool({databaseUrl: options.databaseUrl, max: options.maxConnections, ssl: options.ssl});\r\n const database = createPostgresDatabase({pool, databaseUrl: options.databaseUrl});\r\n try {\r\n const migrations: PostgresMigration[] = [];\r\n const migrationPaths = options.migrationPaths ?? [...defaultMigrationPaths, resolve(here, '../migrations/006_postgres_control_plane_repositories.sql')];\r\n for (const path of migrationPaths) migrations.push({id: path.split(/[\\\\/]/).pop()!.replace(/\\.sql$/i, ''), sql: await readFile(path, 'utf8')});\r\n const client = await pool.connect();\r\n try { await applyPostgresMigrations(client, migrations); } finally { client.release(); }\r\n return {...database, close};\r\n } catch (error) {\r\n await close();\r\n throw error;\r\n }\r\n}\r\n", "import { access, readFile, writeFile } from 'node:fs/promises';\r\nimport { existsSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from 'node:fs';\r\nimport { dirname, resolve } from 'node:path';\r\nimport { createRequire } from 'node:module';\r\nimport { fileURLToPath, pathToFileURL } from 'node:url';\r\n// sql.js ships runtime types through its package but its default export is CommonJS-shaped.\r\n// @ts-expect-error sql.js has no compatible declaration for the ESM default import.\r\nimport initSqlJs from 'sql.js';\r\nimport type { Database } from './runtime-adapter.ts';\r\n\r\ninterface SqlDatabase { run(sql: string, params?: unknown[]): unknown; exec(sql: string, params?: unknown[]): {columns: string[]; values: unknown[][]}[]; export(): Uint8Array; close(): void; }\r\ninterface SqlModule { Database: new (data?: Uint8Array) => SqlDatabase; }\r\ninterface ProductionOptions { databaseUrl?: string; }\r\nexport interface ProductionDatabase extends Database { mode: 'production'; exec(sql: string, params?: unknown[]): {columns: string[]; values: unknown[][]}[]; transaction<T>(work: (db: Database) => T | Promise<T>): Promise<T>; transactionSync<T>(work: (db: Database) => T): T; health(): {ready: true; mode: 'production'; storage: 'file'}; persist(): Promise<void>; reloadFromDisk(): Promise<void>; backup(destination: string): Promise<string>; close(): void; }\r\n\r\nconst root = dirname(fileURLToPath(import.meta.url));\r\nconst require = createRequire(import.meta.url);\r\nconst migrationCandidates = [\r\n resolve(root, '../migrations/001_vnext_foundation.sql'),\r\n resolve(root, 'migrations/001_vnext_foundation.sql'),\r\n];\r\nfunction ensureColumn(database: SqlDatabase, table: string, column: string, definition: string): void {\r\n try { database.run(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`); }\r\n catch (error) {\r\n const message = String(error);\r\n if (!message.includes('duplicate column name')) throw error;\r\n }\r\n}\r\n\r\nfunction reconcilePackSchema(database: SqlDatabase): void {\r\n // Existing local volumes may predate the current pack materializer. Keep the\r\n // canonical contract intact and add only additive, nullable/defaulted fields.\r\n database.run(`CREATE TABLE IF NOT EXISTS control_point_tasks (\r\n control_point_id TEXT NOT NULL, task_id TEXT NOT NULL,\r\n organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL,\r\n PRIMARY KEY (control_point_id, task_id)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS behavior_packs (\r\n id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, digest TEXT NOT NULL, status TEXT NOT NULL,\r\n payload_json TEXT NOT NULL, updated_at TEXT NOT NULL\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS execution_receipts (\r\n id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, revision_id TEXT NOT NULL, actor_id TEXT NOT NULL,\r\n idempotency_key TEXT NOT NULL, decision TEXT NOT NULL, reason TEXT NOT NULL,\r\n created_at TEXT NOT NULL,\r\n UNIQUE (organization_id, project_id, environment_id, idempotency_key)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS execution_receipt_authority (\r\n receipt_id TEXT PRIMARY KEY, authority_digest TEXT NOT NULL,\r\n FOREIGN KEY (receipt_id) REFERENCES execution_receipts(id)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS execution_receipt_semantic (\r\n receipt_id TEXT PRIMARY KEY, semantic_task_ref TEXT NOT NULL,\r\n semantic_task_version INTEGER NOT NULL, semantic_task_digest TEXT NOT NULL,\r\n FOREIGN KEY (receipt_id) REFERENCES execution_receipts(id)\r\n )`);\r\n // Existing local volumes may predate the runtime decision-plan migration.\r\n // Pack installation persists plans as part of the same authority chain, so\r\n // reconcile both tables before wiring the SQL repositories.\r\n database.run(`CREATE TABLE IF NOT EXISTS runtime_decision_plans (\r\n id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, plan_json TEXT NOT NULL, decision_right_json TEXT NOT NULL,\r\n provider_health TEXT NOT NULL, fallback TEXT NOT NULL, authority_digest TEXT,\r\n plan_digest TEXT NOT NULL, created_at TEXT NOT NULL,\r\n UNIQUE (organization_id, project_id, environment_id, id)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS runtime_decisions (\r\n request_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, decision_json TEXT NOT NULL, created_at TEXT NOT NULL,\r\n PRIMARY KEY (organization_id, project_id, environment_id, request_id)\r\n )`);\r\n const columns: readonly [string, string, string][] = [\r\n ['behavior_programs', 'modules_json', \"TEXT NOT NULL DEFAULT '[]'\"],\r\n ['behavior_programs', 'provenance_json', 'TEXT'],\r\n ['behavior_programs', 'temporal_contract_digest', 'TEXT'],\r\n ['behavior_programs', 'temporal_contracts_json', 'TEXT'],\r\n ['behavior_programs', 'recovery_plans_json', 'TEXT'],\r\n ['ai_system_connections', 'config_json', \"TEXT NOT NULL DEFAULT '{}'\"],\r\n ];\r\n for (const [table, column, definition] of columns) ensureColumn(database, table, column, definition);\r\n}\r\nfunction reconcileStrategySchema(database: SqlDatabase): void {\r\n const columns: readonly [string,string,string][] = [\r\n ['behavior_strategies','definition_json','TEXT'], ['behavior_strategies','definition_digest','TEXT'], ['behavior_strategies','control_point_id','TEXT'],\r\n ['behavior_variants','content_type',\"TEXT NOT NULL DEFAULT 'legacy'\"],\r\n ['behavior_variants','definition_schema_version','INTEGER'], ['behavior_variants','revision_number','INTEGER'],\r\n ['behavior_variants','definition_digest','TEXT'], ['behavior_variants','program_id','TEXT'], ['behavior_variants','program_digest','TEXT'],\r\n ['behavior_variants','provenance_json','TEXT'], ['behavior_variants','definition_json','TEXT'], ['behavior_variants','immutable','INTEGER NOT NULL DEFAULT 1'],\r\n ];\r\n for (const [table,column,definition] of columns) ensureColumn(database,table,column,definition);\r\n database.run('CREATE UNIQUE INDEX IF NOT EXISTS behavior_variants_strategy_revision ON behavior_variants(strategy_id, revision_number) WHERE revision_number IS NOT NULL');\r\n database.run(`CREATE TABLE IF NOT EXISTS strategy_executions (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, trace_id TEXT NOT NULL, behavior_point_id TEXT NOT NULL, canonical_revision_id TEXT NOT NULL, program_id TEXT NOT NULL, program_digest TEXT NOT NULL, strategy_id TEXT NOT NULL, variant_id TEXT NOT NULL, strategy_digest TEXT NOT NULL, behavior_artifact_digest TEXT, strategy_artifact_digest TEXT, composition_digest TEXT, authority_digest TEXT NOT NULL, mode TEXT NOT NULL, status TEXT NOT NULL, current_step_key TEXT, state_json TEXT NOT NULL, references_json TEXT NOT NULL DEFAULT '{}', state_digest TEXT NOT NULL, step_executions INTEGER NOT NULL DEFAULT 0, model_calls INTEGER NOT NULL DEFAULT 0, tool_calls INTEGER NOT NULL DEFAULT 0, decision_calls INTEGER NOT NULL DEFAULT 0, repair_attempts INTEGER NOT NULL DEFAULT 0, cost_micros INTEGER NOT NULL DEFAULT 0, sequence INTEGER NOT NULL DEFAULT 0, idempotency_key TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, expires_at TEXT, UNIQUE(organization_id,project_id,environment_id,idempotency_key))`);\r\n ensureColumn(database,'strategy_executions','references_json',\"TEXT NOT NULL DEFAULT '{}'\");\r\n database.run(`CREATE TABLE IF NOT EXISTS strategy_step_receipts (id TEXT PRIMARY KEY, execution_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, step_key TEXT NOT NULL, step_type TEXT NOT NULL, attempt INTEGER NOT NULL, status TEXT NOT NULL, input_state_digest TEXT NOT NULL, output_digest TEXT, verification_digest TEXT, transition_key TEXT, next_step_key TEXT, model_request_id TEXT, tool_invocation_id TEXT, decision_receipt_digest TEXT, recovery_action TEXT, usage_json TEXT NOT NULL DEFAULT '{}', latency_ms INTEGER, receipt_digest TEXT NOT NULL UNIQUE, created_at TEXT NOT NULL, FOREIGN KEY(execution_id) REFERENCES strategy_executions(id), UNIQUE(execution_id,step_key,attempt))`);\r\n try { database.run('ALTER TABLE strategy_step_receipts ADD COLUMN recovery_action TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run(`CREATE TABLE IF NOT EXISTS strategy_artifact_blobs (artifact_digest TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, strategy_digest TEXT NOT NULL, bytes TEXT NOT NULL, created_at TEXT NOT NULL)`);\r\n}\r\nfunction persistFile(filePath: string, data: Uint8Array): void {\r\n const maxBytes = Number(process.env.VIRA_SQLITE_MAX_BYTES ?? 5 * 1024 * 1024 * 1024);\r\n if (!Number.isFinite(maxBytes) || maxBytes < 64 * 1024 * 1024) throw new Error('SQLITE_STORAGE_LIMIT_INVALID');\r\n if (data.byteLength > maxBytes) throw new Error('SQLITE_STORAGE_LIMIT_EXCEEDED');\r\n // A process can be terminated between the temp write and atomic rename.\r\n // Remove only our own stale export files; never touch the database itself.\r\n const directory = dirname(filePath);\r\n const prefix = `${filePath}.tmp-`;\r\n const staleBefore = Date.now() - 60 * 60 * 1000;\r\n for (const name of readdirSync(directory)) {\r\n const candidate = resolve(directory, name);\r\n if (!candidate.startsWith(prefix)) continue;\r\n try { if (statSync(candidate).mtimeMs < staleBefore) unlinkSync(candidate); } catch {}\r\n }\r\n // Containers commonly run with PID 1 and share the SQLite volume. Include a\r\n // per-write nonce so concurrent service startups never target the same temp\r\n // file before the atomic rename.\r\n const temporaryPath = `${filePath}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;\r\n writeFileSync(temporaryPath, Buffer.from(data));\r\n renameSync(temporaryPath, filePath);\r\n}\r\n\r\nexport async function openProductionSqlite({ databaseUrl = process.env.DATABASE_URL }: ProductionOptions = {}): Promise<ProductionDatabase> {\r\n if (typeof databaseUrl !== 'string' || !databaseUrl.startsWith('file:')) throw new Error('DATABASE_URL_FILE_REQUIRED');\r\n const filePath = fileURLToPath(new URL(databaseUrl));\r\n if (!filePath || filePath === '/') throw new Error('DATABASE_PATH_REQUIRED');\r\n const migrationPath = migrationCandidates.find((candidate) => existsSync(candidate));\r\n if (!migrationPath) throw new Error('DATABASE_MIGRATION_ASSET_MISSING');\r\n const SQL = await (initSqlJs as unknown as (options: {locateFile: (file: string) => string}) => Promise<SqlModule>)({locateFile: (file) => {\r\n const moduleAsset = resolve(dirname(require.resolve('sql.js')), file);\r\n if (existsSync(moduleAsset)) return moduleAsset;\r\n const dependency = resolve(root, '../../../node_modules/sql.js/dist', file);\r\n if (existsSync(dependency)) return dependency;\r\n const packagedDependency = resolve(root, '../../../sql.js/dist', file);\r\n if (existsSync(packagedDependency)) return packagedDependency;\r\n const packaged = resolve(root, 'sql.js', file);\r\n if (existsSync(packaged)) return packaged;\r\n return dependency;\r\n }});\r\n let database: SqlDatabase;\r\n let existing = true;\r\n try { await access(filePath); database = new SQL.Database(new Uint8Array(await readFile(filePath))); }\r\n catch { existing = false; database = new SQL.Database(); }\r\n if (!existing) database.run(await readFile(migrationPath, 'utf8'));\r\n reconcilePackSchema(database);\r\n reconcileStrategySchema(database);\r\n try { database.run('ALTER TABLE session_states ADD COLUMN application_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE behavior_programs ADD COLUMN provenance_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE worker_jobs ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE worker_jobs ADD COLUMN trace_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE worker_jobs ADD COLUMN available_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE strategy_executions ADD COLUMN total_recoveries INTEGER NOT NULL DEFAULT 0'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE learning_evidence ADD COLUMN outcome TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE learning_evidence ADD COLUMN provenance_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE mcp_invocation_provenance ADD COLUMN idempotency_key TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE mcp_invocation_provenance ADD COLUMN arguments_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE ai_system_connections ADD COLUMN config_json TEXT NOT NULL DEFAULT \\'{}\\''); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS session_handoff_approvals (id TEXT PRIMARY KEY, source_session_id TEXT NOT NULL, target_session_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, environment_id TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN (\\'PENDING\\',\\'APPROVED\\',\\'REJECTED\\',\\'CONSUMED\\')), requested_at TEXT NOT NULL, decided_at TEXT, expires_at TEXT NOT NULL, decision_digest TEXT NOT NULL UNIQUE)');\r\n database.run(`CREATE TABLE IF NOT EXISTS release_manifests (\r\n id TEXT PRIMARY KEY,\r\n surfaces_json TEXT NOT NULL,\r\n content_digest TEXT NOT NULL,\r\n approved_by TEXT NOT NULL,\r\n approved_at TEXT NOT NULL,\r\n status TEXT NOT NULL,\r\n organization_id TEXT,\r\n project_id TEXT,\r\n environment_id TEXT,\r\n authority_digest TEXT,\r\n artifact_id TEXT,\r\n promotion_version INTEGER\r\n )`);\r\n for (const statement of [\r\n 'ALTER TABLE release_manifests ADD COLUMN authority_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN artifact_id TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN promotion_version INTEGER',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_id TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_variant_id TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_artifact_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN program_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN evaluation_digest TEXT'\r\n ]) { try { database.run(statement); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; } }\r\n database.run('CREATE TABLE IF NOT EXISTS telemetry_release_markers (organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, release_id TEXT NOT NULL, service TEXT NOT NULL, deployment_environment TEXT NOT NULL, revision TEXT NOT NULL, deployment_id TEXT NOT NULL, occurred_at TEXT NOT NULL, trace_id TEXT, marker_digest TEXT NOT NULL, PRIMARY KEY (organization_id,project_id,environment_id,release_id,service,deployment_id))');\r\n database.run(`CREATE TABLE IF NOT EXISTS optimization_artifacts (\r\n id TEXT PRIMARY KEY,\r\n idempotency_key TEXT UNIQUE,\r\n organization_id TEXT NOT NULL,\r\n project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL,\r\n canonical_digest TEXT NOT NULL,\r\n policy_digest TEXT NOT NULL,\r\n target_model TEXT NOT NULL,\r\n dataset_digest TEXT NOT NULL,\r\n metric TEXT NOT NULL,\r\n baseline REAL NOT NULL,\r\n optimized_result REAL NOT NULL,\r\n provenance TEXT NOT NULL,\r\n status TEXT NOT NULL,\r\n payload_json TEXT NOT NULL DEFAULT '{}'\r\n )`);\r\n for (const [column, definition] of [['stable_key', 'TEXT'], ['parent_authority_level', 'TEXT'], ['child_scope_kind', 'TEXT'], ['child_scope_digest', 'TEXT'], ['parent_revision_digest', 'TEXT'], ['exception_effect_types_json', 'TEXT'], ['when_json', 'TEXT']] as const) {\r\n try { database.run(`ALTER TABLE scope_delegations ADD COLUMN ${column} ${definition}`); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n }\r\n database.run('CREATE TABLE IF NOT EXISTS evaluation_artifacts (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, target_artifact TEXT NOT NULL, dataset_digest TEXT NOT NULL, evaluator_version TEXT NOT NULL, score REAL NOT NULL, threshold REAL NOT NULL, status TEXT NOT NULL, failed_assertions_json TEXT NOT NULL, created_at TEXT NOT NULL)');\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN holdout_commitment_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN grader_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN suite_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN suite_version TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN suite_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE artifact_shadow_evidence ADD COLUMN release_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE artifact_shadow_evidence ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS gtm_funnel_events (event_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, event_digest TEXT NOT NULL, source TEXT NOT NULL, stage TEXT NOT NULL, journey_key TEXT NOT NULL, occurred_at TEXT NOT NULL, event_json TEXT NOT NULL, PRIMARY KEY (organization_id, project_id, environment_id, event_id))');\r\n database.run('CREATE INDEX IF NOT EXISTS gtm_funnel_events_window ON gtm_funnel_events (organization_id, project_id, environment_id, occurred_at)');\r\n for (const column of ['organization_id', 'project_id', 'environment_id']) { try { database.run(`ALTER TABLE release_manifests ADD COLUMN ${column} TEXT`); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; } }\r\n try { database.run('ALTER TABLE release_manifests ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE accelerator_residency_leases ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE trace_events ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n for (const column of ['authority_digest', 'evidence_json']) { try { database.run(`ALTER TABLE decision_evidence ADD COLUMN ${column} TEXT`); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; } }\r\n try { database.run('ALTER TABLE mcp_invocation_provenance ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE activation_decisions ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE impact_attributions ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE decision_calibration_snapshots ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE optimization_artifacts ADD COLUMN idempotency_key TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE optimization_artifacts ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN selection_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN expansion_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN provider_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN provider_request_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN provider_usage_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN semantic_stages_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS scope_bindings (id TEXT PRIMARY KEY, level TEXT NOT NULL, parent_id TEXT, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, workspace_id TEXT, user_id TEXT, session_id TEXT, created_at TEXT NOT NULL)');\r\n database.run('CREATE TABLE IF NOT EXISTS organization_intelligence_snapshots (snapshot_digest TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, as_of TEXT NOT NULL, evidence_digest TEXT NOT NULL, payload_json TEXT NOT NULL, created_at TEXT NOT NULL)');\r\n database.run('CREATE TABLE IF NOT EXISTS mcp_sessions (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, server TEXT NOT NULL, endpoint TEXT NOT NULL, protocol_version TEXT NOT NULL, status TEXT NOT NULL, auth_digest TEXT NOT NULL, generation INTEGER NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, session_digest TEXT NOT NULL UNIQUE)');\r\n database.run('CREATE TABLE IF NOT EXISTS oauth_states (state TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, provider TEXT NOT NULL, redirect_uri TEXT NOT NULL, scopes_json TEXT NOT NULL, expires_at TEXT NOT NULL, consumed_at TEXT)');\r\n database.run('CREATE TABLE IF NOT EXISTS optimization_runs (id TEXT PRIMARY KEY, idempotency_key TEXT NOT NULL UNIQUE, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, canonical_digest TEXT NOT NULL, policy_digest TEXT NOT NULL, dataset_digest TEXT NOT NULL, engine TEXT NOT NULL, status TEXT NOT NULL, attempts INTEGER NOT NULL DEFAULT 0, cancel_requested INTEGER NOT NULL DEFAULT 0, lease_owner TEXT, lease_expires_at TEXT, search_result_digest TEXT, error_code TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, authority_digest TEXT)');\r\n try { database.run('ALTER TABLE optimization_runs ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS optimization_run_attempts (id TEXT PRIMARY KEY, run_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, attempt INTEGER NOT NULL, worker_id TEXT NOT NULL, status TEXT NOT NULL, request_digest TEXT, response_digest TEXT, error_code TEXT, claimed_at TEXT NOT NULL, finished_at TEXT, authority_digest TEXT)');\r\n try { database.run('ALTER TABLE optimization_run_attempts ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS optimization_cost_reservations (run_id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, reserved_micros INTEGER NOT NULL, actual_micros INTEGER, state TEXT NOT NULL, created_at TEXT NOT NULL, settled_at TEXT, authority_digest TEXT)');\r\n try { database.run('ALTER TABLE optimization_cost_reservations ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS recovery_runtime_states (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, environment_id TEXT NOT NULL, trajectory_key TEXT NOT NULL, recovery_plan_key TEXT NOT NULL, recovery_plan_digest TEXT NOT NULL, attempt INTEGER NOT NULL, next_step_index INTEGER NOT NULL, total_execution_attempts INTEGER NOT NULL, status TEXT NOT NULL, started_at TEXT NOT NULL, updated_at TEXT NOT NULL, step_results_json TEXT NOT NULL, pending_approval_json TEXT, authority_digest TEXT, state_digest TEXT NOT NULL UNIQUE)');\r\n try { database.run('ALTER TABLE recovery_runtime_states ADD COLUMN pending_approval_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS recovery_runtime_receipts (id TEXT PRIMARY KEY, runtime_state_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, environment_id TEXT NOT NULL, status TEXT NOT NULL, attempt INTEGER NOT NULL, step_results_json TEXT NOT NULL, recovery_plan_digest TEXT NOT NULL, authority_digest TEXT, completed_at TEXT NOT NULL, receipt_digest TEXT NOT NULL UNIQUE)');\r\n database.run('CREATE TABLE IF NOT EXISTS behavior_artifact_blobs (artifact_digest TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, bytes TEXT NOT NULL)');\r\n try { database.run('ALTER TABLE recovery_runtime_states ADD COLUMN application_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE recovery_runtime_states ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS conflict_resolutions (inspection_digest TEXT PRIMARY KEY, resolution_digest TEXT NOT NULL, payload_json TEXT NOT NULL)');\r\n try { database.run('ALTER TABLE conflict_inspections ADD COLUMN payload_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n const persist = async () => { persistFile(filePath, database.export()); };\r\n let transactionDepth = 0;\r\n const runtime: ProductionDatabase = {\r\n mode: 'production',\r\n exec: (sql, params) => { const result = database.exec(sql, params); if (transactionDepth === 0 && /^\\s*(INSERT|UPDATE|DELETE|REPLACE)\\b/i.test(sql)) persistFile(filePath, database.export()); return result; },\r\n run: (sql, params) => { const result = database.run(sql, params); if (transactionDepth === 0) persistFile(filePath, database.export()); return result; },\r\n async transaction<T>(work: (db: Database) => T | Promise<T>): Promise<T> { if (typeof work !== 'function') throw new Error('DATABASE_WORK_REQUIRED'); transactionDepth += 1; database.run('BEGIN'); try { const result = await work(runtime); database.run('COMMIT'); transactionDepth -= 1; await persist(); return result; } catch (error) { try { database.run('ROLLBACK'); } catch {} transactionDepth = Math.max(0, transactionDepth - 1); throw error; } },\r\n transactionSync<T>(work: (db: Database) => T): T { if (typeof work !== 'function') throw new Error('DATABASE_WORK_REQUIRED'); transactionDepth += 1; database.run('BEGIN'); try { const result = work(runtime); database.run('COMMIT'); transactionDepth -= 1; persistFile(filePath, database.export()); return result; } catch (error) { try { database.run('ROLLBACK'); } catch {} transactionDepth = Math.max(0, transactionDepth - 1); throw error; } },\r\n async persist() { await persist(); },\r\n async reloadFromDisk() { const bytes = new Uint8Array(await readFile(filePath)); database.close(); database = new SQL.Database(bytes); },\r\n async backup(destination) { if (!destination?.trim()) throw new Error('BACKUP_PATH_REQUIRED'); await writeFile(destination, Buffer.from(database.export())); return destination; },\r\n health: () => ({ready: true, mode: 'production', storage: 'file'}),\r\n close: () => database.close(),\r\n };\r\n return runtime;\r\n}\r\n", "import {openPostgresRuntime, type OpenPostgresOptions, type PostgresRuntime} from './postgres-runtime.ts';\r\nimport {openProductionSqlite, type ProductionDatabase} from './production-sqlite.ts';\r\n\r\nexport type RuntimeDatabaseMode = 'sqlite' | 'postgres';\r\nexport type RuntimeDatabase = {\r\n mode: RuntimeDatabaseMode;\r\n database: ProductionDatabase | PostgresRuntime;\r\n health(): {ready: true; mode: RuntimeDatabaseMode};\r\n close(): Promise<void>;\r\n};\r\n\r\nexport type OpenRuntimeDatabaseOptions = {\r\n databaseUrl?: string;\r\n sqlite?: Omit<Parameters<typeof openProductionSqlite>[0], 'databaseUrl'>;\r\n postgres?: Omit<OpenPostgresOptions, 'databaseUrl'>;\r\n};\r\n\r\n/** Canonical production database boundary. Production never selects SQLite. */\r\nexport async function createProductionDatabase(options: Omit<OpenRuntimeDatabaseOptions, 'sqlite'> = {}): Promise<RuntimeDatabase> {\r\n const databaseUrl = options.databaseUrl ?? process.env.DATABASE_URL;\r\n if (typeof databaseUrl !== 'string' || !/^postgres(?:ql)?:\\/\\//.test(databaseUrl)) throw new Error('PRODUCTION_POSTGRES_DATABASE_REQUIRED');\r\n return openRuntimeDatabase({...options, databaseUrl});\r\n}\r\n\r\n/** Selects the durable runtime from the URL while keeping local SQLite unchanged. */\r\nexport async function openRuntimeDatabase(options: OpenRuntimeDatabaseOptions = {}): Promise<RuntimeDatabase> {\r\n const databaseUrl = options.databaseUrl ?? process.env.DATABASE_URL;\r\n if (typeof databaseUrl !== 'string' || !databaseUrl.trim()) throw new Error('DATABASE_URL_REQUIRED');\r\n if (databaseUrl.startsWith('file:')) {\r\n if (process.env.NODE_ENV === 'production' || process.env.VIRA_STACK_PROFILE === 'production') throw new Error('SQLITE_FORBIDDEN_IN_PRODUCTION');\r\n const database = await openProductionSqlite({databaseUrl, ...options.sqlite});\r\n return {\r\n mode: 'sqlite',\r\n database,\r\n health: () => ({ready: true, mode: 'sqlite'}),\r\n close: async () => { database.close(); },\r\n };\r\n }\r\n if (databaseUrl.startsWith('postgres://') || databaseUrl.startsWith('postgresql://')) {\r\n const database = await openPostgresRuntime({databaseUrl, ...options.postgres});\r\n return {\r\n mode: 'postgres',\r\n database,\r\n health: () => ({ready: true, mode: 'postgres'}),\r\n close: async () => { await database.close(); },\r\n };\r\n }\r\n throw new Error('DATABASE_URL_UNSUPPORTED');\r\n}\r\n", "import type {PostgresDatabase} from './postgres-adapter.ts';\r\nimport {verifyMcpResult} from '../../runtime/src/mcp-provenance.ts';\r\nimport type {McpResult} from '../../runtime/src/mcp-gateway.ts';\r\nimport {assertMcpSession, type McpSession} from '../../runtime/src/mcp-session.ts';\r\n\r\ntype Scope={organizationId:string;projectId:string;environmentId:string};\r\ntype Claim={status:'CLAIMED'|'REPLAY'|'IN_FLIGHT';result?:McpResult};\r\n\r\nconst provenanceSelect=`SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance`;\r\n\r\nexport class PostgresMcpProvenanceRepository {\r\n constructor(private readonly db:PostgresDatabase) {}\r\n async init():Promise<void>{\r\n await this.db.query(`CREATE TABLE IF NOT EXISTS mcp_invocation_claims (organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, invocation_id TEXT NOT NULL, claimed_at TIMESTAMPTZ NOT NULL, PRIMARY KEY (organization_id, project_id, environment_id, idempotency_key))`);\r\n await this.db.query(`CREATE TABLE IF NOT EXISTS mcp_invocation_provenance (invocation_id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, server TEXT NOT NULL, tool TEXT NOT NULL, receipt_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, arguments_digest TEXT NOT NULL, ok BOOLEAN NOT NULL, result_json JSONB, error TEXT, authority_decision_digest TEXT NOT NULL, authority_digest TEXT, provenance_digest TEXT NOT NULL, UNIQUE (organization_id, project_id, environment_id, idempotency_key))`);\r\n }\r\n async claim(input:{invocationId:string;idempotencyKey:string}&Scope):Promise<Claim>{\r\n const replay=await this.getByIdempotencyKey(input.idempotencyKey,input); if(replay)return {status:'REPLAY',result:replay};\r\n try { await this.db.query(`INSERT INTO mcp_invocation_claims (organization_id,project_id,environment_id,idempotency_key,invocation_id,claimed_at) VALUES ($1,$2,$3,$4,$5,NOW())`,[input.organizationId,input.projectId,input.environmentId,input.idempotencyKey,input.invocationId]); return {status:'CLAIMED'}; } catch { const after=await this.getByIdempotencyKey(input.idempotencyKey,input); return after?{status:'REPLAY',result:after}:{status:'IN_FLIGHT'}; }\r\n }\r\n async releaseClaim(input:Scope&{idempotencyKey:string}):Promise<void>{await this.db.query(`DELETE FROM mcp_invocation_claims WHERE organization_id=$1 AND project_id=$2 AND environment_id=$3 AND idempotency_key=$4`,[input.organizationId,input.projectId,input.environmentId,input.idempotencyKey]);}\r\n async save(result:McpResult):Promise<McpResult>{verifyMcpResult(result);const existing=await this.get(result.invocationId);const byKey=await this.getByIdempotencyKey(result.idempotencyKey,result);if(existing||byKey){const prior=existing??byKey!;if(prior.provenanceDigest!==result.provenanceDigest)throw new Error('MCP_PROVENANCE_CONFLICT');return prior;}await this.db.query(`DELETE FROM mcp_invocation_claims WHERE organization_id=$1 AND project_id=$2 AND environment_id=$3 AND idempotency_key=$4`,[result.organizationId,result.projectId,result.environmentId,result.idempotencyKey]);await this.db.query(`INSERT INTO mcp_invocation_provenance (invocation_id,organization_id,project_id,environment_id,server,tool,receipt_id,idempotency_key,arguments_digest,ok,result_json,error,authority_decision_digest,authority_digest,provenance_digest) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15)`,[result.invocationId,result.organizationId,result.projectId,result.environmentId,result.server,result.tool,result.receiptId,result.idempotencyKey,result.argumentsDigest,result.ok,result.result===undefined?null:JSON.stringify(result.result),result.error??null,result.authorityDecisionDigest,result.authorityDigest,result.provenanceDigest]);const persisted=await this.get(result.invocationId);if(!persisted||persisted.provenanceDigest!==result.provenanceDigest)throw new Error('MCP_PROVENANCE_READBACK_MISMATCH');return persisted;}\r\n async get(invocationId:string):Promise<McpResult|null>{const row=(await this.db.query(`${provenanceSelect} WHERE invocation_id=$1`,[invocationId])).rows[0];return row?this.fromRow(row):null;}\r\n async getByIdempotencyKey(key:string,scope:Scope):Promise<McpResult|null>{const row=(await this.db.query(`${provenanceSelect} WHERE idempotency_key=$1 AND organization_id=$2 AND project_id=$3 AND environment_id=$4`,[key,scope.organizationId,scope.projectId,scope.environmentId])).rows[0];return row?this.fromRow(row):null;}\r\n private fromRow(row:Record<string,unknown>):McpResult{const result={invocationId:String(row.invocation_id),organizationId:String(row.organization_id),projectId:String(row.project_id),environmentId:String(row.environment_id),server:String(row.server),tool:String(row.tool),receiptId:String(row.receipt_id),idempotencyKey:String(row.idempotency_key),argumentsDigest:String(row.arguments_digest),ok:Boolean(row.ok),result:row.result_json??undefined,error:row.error==null?undefined:String(row.error),authorityDecisionDigest:String(row.authority_decision_digest),authorityDigest:row.authority_digest==null?null:String(row.authority_digest),provenanceDigest:String(row.provenance_digest)} as McpResult;verifyMcpResult(result);return result;}\r\n}\r\n\r\nexport class PostgresMcpSessionRepository {\r\n constructor(private readonly db:PostgresDatabase) {}\r\n async init():Promise<void>{await this.db.query(`CREATE TABLE IF NOT EXISTS mcp_sessions (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, server TEXT NOT NULL, endpoint TEXT NOT NULL, protocol_version TEXT NOT NULL, status TEXT NOT NULL, auth_digest TEXT NOT NULL, generation INTEGER NOT NULL, created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL, session_digest TEXT NOT NULL)`);}\r\n async get(id:string,scope:Scope):Promise<McpSession|null>{const row=(await this.db.query(`SELECT id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest FROM mcp_sessions WHERE id=$1 AND organization_id=$2 AND project_id=$3 AND environment_id=$4`,[id,scope.organizationId,scope.projectId,scope.environmentId])).rows[0];if(!row)return null;const session={id:String(row.id),organizationId:String(row.organization_id),projectId:String(row.project_id),environmentId:String(row.environment_id),server:String(row.server),endpoint:String(row.endpoint),protocolVersion:String(row.protocol_version),status:String(row.status) as McpSession['status'],authDigest:String(row.auth_digest),generation:Number(row.generation),createdAt:new Date(String(row.created_at)).toISOString(),updatedAt:new Date(String(row.updated_at)).toISOString(),sessionDigest:String(row.session_digest)};assertMcpSession(session);return session;}\r\n}\r\n", "import { createMcpStdioServer } from './server.ts';\r\nimport { createViraMcpOptions, resolveViraMcpConfig } from './vira-server.ts';\r\nimport { SqlMcpSessionRepository } from '../../packages/database/src/mcp-session-repository.ts';\r\nimport { SqlMcpProvenanceRepository } from '../../packages/database/src/mcp-provenance-repository.ts';\r\nimport { McpProvenanceRepository } from '../../packages/database/src/mcp-provenance-repository.ts';\r\nimport { executeMcpInvocation } from '../../packages/runtime/src/mcp-invocation-service.ts';\r\nimport { serveOfficialViraMcp } from './official-stdio.ts';\r\nimport type { PostgresRuntime } from '../../packages/database/src/postgres-runtime.ts';\r\n\r\nexport async function startMcpStdio(): Promise<void> {\r\n const base = resolveViraMcpConfig();\r\n const required = ['VIRA_ORGANIZATION_ID', 'VIRA_PROJECT_ID', 'VIRA_ENVIRONMENT_ID'] as const;\r\n const missing = required.filter((name) => !process.env[name]?.trim());\r\n if (missing.length) throw new Error(`VIRA_MCP_SCOPE_REQUIRED:${missing.join(',')}`);\r\n const organizationId = process.env.VIRA_ORGANIZATION_ID as string;\r\n const projectId = process.env.VIRA_PROJECT_ID as string;\r\n const environmentId = process.env.VIRA_ENVIRONMENT_ID as string;\r\n // Keep the publishable MCP executable free of the optional PostgreSQL\r\n // driver. It is loaded only when the user explicitly configures a database.\r\n const runtime = process.env.DATABASE_URL\r\n ? await (await import('../../packages/database/src/runtime-database.ts')).openRuntimeDatabase()\r\n : null;\r\n const database = runtime?.mode === 'sqlite' ? runtime.database as import('../../packages/database/src/production-sqlite.ts').ProductionDatabase : null;\r\n const postgres = runtime?.mode === 'postgres' ? runtime.database as import('../../packages/database/src/postgres-runtime.ts').PostgresRuntime : null;\r\n // The executor boundary is mandatory in every environment. Local runs use\r\n // the same repository contract in memory when SQL is intentionally absent;\r\n // they must not fall back to direct effectful transport.\r\n const postgresRepositories = postgres ? await import('../../packages/database/src/postgres-mcp-repository.ts') : null;\r\n const provenanceRepository = database ? new SqlMcpProvenanceRepository(database) : postgres && postgresRepositories ? new postgresRepositories.PostgresMcpProvenanceRepository(postgres) : new McpProvenanceRepository();\r\n if (postgres && postgresRepositories) { await new postgresRepositories.PostgresMcpProvenanceRepository(postgres).init(); }\r\n const options = createViraMcpOptions({\r\n ...base,\r\n scope: {\r\n organizationId,\r\n projectId,\r\n environmentId,\r\n },\r\n ...((database || postgres) ? {\r\n provenanceRepository: provenanceRepository!,\r\n sessionRepository: database ? new SqlMcpSessionRepository(database) : new postgresRepositories!.PostgresMcpSessionRepository(postgres!),\r\n sessionId: process.env.VIRA_MCP_SESSION_ID,\r\n } : {}),\r\n });\r\n options.invocationExecutor = ({invocation, authority, signal}) => executeMcpInvocation({invocation, authority, signal, transport: options.transport, store: provenanceRepository});\r\n options.requireInvocationExecutor = true;\r\n const useLegacy = process.env.VIRA_MCP_PROTOCOL_MODE === 'legacy';\r\n const stdio = useLegacy ? createMcpStdioServer(options) : serveOfficialViraMcp(options);\r\n const close = () => { stdio.close(); void runtime?.close(); };\r\n process.once('SIGTERM', close);\r\n process.once('SIGINT', close);\r\n}\r\n", "#!/usr/bin/env node\r\nimport {createViraMcpServer, resolveViraMcpConfig} from '../../../apps/mcp-server/vira-server.ts';\r\n\r\n// MCP clients use stdio by default. HTTP is explicit so installation never\r\n// accidentally exposes a listener.\r\nif (process.argv.includes('--http') || process.env.VIRA_MCP_TRANSPORT === 'http') {\r\n await startHttp();\r\n} else {\r\n const {startMcpStdio} = await import('../../../apps/mcp-server/start.ts');\r\n await startMcpStdio();\r\n}\r\n\r\nasync function startHttp(): Promise<void> {\r\n\r\nconst base=resolveViraMcpConfig();\r\nif(!base.requestAuthToken?.trim()) throw new Error('VIRA_MCP_AUTH_TOKEN_REQUIRED');\r\nconst scope={organizationId:process.env.VIRA_ORGANIZATION_ID??'',projectId:process.env.VIRA_PROJECT_ID??'',environmentId:process.env.VIRA_ENVIRONMENT_ID??''};\r\nfor(const value of Object.values(scope)) if(!value.trim()) throw new Error('VIRA_MCP_SCOPE_REQUIRED');\r\nconst allowLocalEffects=process.env.VIRA_MCP_ALLOW_EFFECTFUL==='true' && process.env.NODE_ENV!=='production';\r\nconst server=createViraMcpServer({...base,scope,...(allowLocalEffects?{authorizeEffectful:()=>({allowed:true,decisionDigest:'explicit-local-opt-in'})}:{})});\r\nconst port = Number(process.env.PORT ?? 4195);\r\nconst host = process.env.VIRA_MCP_BIND_PUBLIC==='true' ? (process.env.HOST ?? '0.0.0.0') : (process.env.HOST ?? '127.0.0.1');\r\nserver.listen(port, host, () => console.error(JSON.stringify({status:'VIRA_MCP_STARTED',port,host,upstream:base.baseUrl,effectful:allowLocalEffects})));\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {createHash} from 'node:crypto';\r\nfunction canonical(value: unknown): string { if (value === null || typeof value !== 'object') return JSON.stringify(value); if (Array.isArray(value)) return `[${value.map(canonical).join(',')}]`; return `{${Object.keys(value as Record<string, unknown>).sort().map(key => `${JSON.stringify(key)}:${canonical((value as Record<string, unknown>)[key])}`).join(',')}}`; }\r\nconst digest=(value: unknown): string => createHash('sha256').update(canonical(value)).digest('hex');\r\nexport function scopeDigest(scope: unknown): string {\r\n // Match the reference scope-composer contract: identity is the canonical\r\n // scope kind/key/project tuple, never caller object insertion order.\r\n if (scope && typeof scope === 'object' && 'level' in scope && 'id' in scope) {\r\n const value = scope as {level: ScopeLevel; id: string; projectId?: string};\r\n return digest({kind: value.level, key: value.id, projectId: value.projectId ?? null});\r\n }\r\n return digest(scope);\r\n}\r\n\r\nexport type ScopeLevel = 'platform' | 'organization' | 'project' | 'application' | 'workspace' | 'user' | 'session';\r\nexport interface HierarchicalScope { level: ScopeLevel; id: string; parentId?: string; }\r\nexport interface ScopeDelegation { id: string; issuerId: string; subjectId: string; fromLevel: ScopeLevel; toLevel: ScopeLevel; permissions: readonly string[]; expiresAt: string; }\r\nexport interface CanonicalOrganizationScopeInput { applicationId?: string | null; workspaceId?: string | null; userId?: string | null; sessionId?: string | null; }\r\n/** Canonical serializer shared by organization intelligence and Teach boundaries. */\r\nexport function canonicalOrganizationScopeKeys(input: CanonicalOrganizationScopeInput): string[] {\r\n return ['project', ...(input.applicationId ? [`application_scope:${input.applicationId}`] : []), ...(input.workspaceId ? [`workspace:${input.workspaceId}`] : []), ...(input.userId ? [`user:${input.userId}`] : []), ...(input.sessionId ? [`session:${input.sessionId}`] : [])];\r\n}\r\nexport interface ReferenceScopeDelegation extends ScopeDelegation {\r\n stableKey: string;\r\n parentAuthorityLevel: ScopeLevel;\r\n childScopeKind: ScopeLevel;\r\n childScopeDigest: string;\r\n parentRevisionDigest: string;\r\n /** Reference programs may narrow an exception to explicit effect kinds. */\r\n exceptionEffectTypes?: readonly string[];\r\n when: {kind: 'all'; expressions: readonly []};\r\n}\r\nexport interface ScopeCompositionConflict { code: 'SCOPE_CHAIN_INVALID' | 'SCOPE_DELEGATION_CONFLICT' | 'SCOPE_REVISION_LEVEL_CONFLICT' | 'TEMPORAL_INVARIANT_CONFLICT' | 'TEMPORAL_TRANSITION_CONFLICT' | 'RECOVERY_CONFLICT' | 'ACTOR_OWNERSHIP_CONFLICT' | 'DEADLINE_CONFLICT'; delegationIds: readonly string[]; hard: true; }\r\nexport interface EffectiveRevisionBinding { id: string; digest: string; sourceRevisionSetDigest?: string; ancestorHardAuthorityDigest?: string; }\r\nexport interface ScopeBehaviorRevision { id: string; digest: string; level: ScopeLevel; hard: boolean; source: string; temporalInvariantDigest?: string; temporalTransitionDigest?: string; recoveryDigest?: string; temporalInvariantKeys?: Readonly<Record<string,string>>; temporalTransitionKeys?: Readonly<Record<string,string>>; recoveryKeys?: Readonly<Record<string,string>>; actorOwnershipDigest?: string; deadlineDigest?: string; }\r\nexport interface ScopeCompositionExplanation { revisionId: string; level: ScopeLevel; disposition: 'inherited'|'overridden'|'rejected'; reason: string; }\r\nexport interface ComposedScope { chain: readonly HierarchicalScope[]; permissions: readonly string[]; delegationIds?: readonly string[]; compositionDigest: string; conflictSetDigest: string; conflictSummary: {total:number; hard:number; soft:number; byCategory: Record<string,number>}; conflicts: readonly ScopeCompositionConflict[]; serveable: boolean; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]; sourceRevisionSetDigest?: string; ancestorHardAuthorityDigest?: string; effectiveProgramDigest?: string; explanations?: readonly ScopeCompositionExplanation[]; }\r\nexport function projectComposedScope(composed: ComposedScope): import('./vnext.ts').Scope {\r\n assertComposedScopeIntegrity(composed);\r\n const value = (level: ScopeLevel) => composed.chain.find(item => item.level === level)?.id ?? null;\r\n const organizationId = value('organization');\r\n const projectId = value('project');\r\n const environmentId = value('application') ?? value('session') ?? projectId;\r\n if (!organizationId || !projectId || !environmentId) throw new Error('SCOPE_RUNTIME_PROJECTION_INVALID');\r\n return Object.freeze({organizationId,projectId,environmentId,applicationId:value('application'),workspaceId:value('workspace'),userId:value('user'),sessionId:value('session'),authorityDigest:composed.compositionDigest});\r\n}\r\nconst order: ScopeLevel[] = ['platform','organization','project','application','workspace','user','session'];\r\nfunction canonicalChain(input: readonly HierarchicalScope[]): readonly HierarchicalScope[] {\r\n if (!input.length) throw new Error('SCOPE_CHAIN_REQUIRED');\r\n const chain = [...input].sort((left, right) => order.indexOf(left.level) - order.indexOf(right.level) || left.id.localeCompare(right.id));\r\n if (new Set(chain.map(item => item.level)).size !== chain.length) throw new Error('SCOPE_CHAIN_INVALID');\r\n if (new Set(chain.map(item => item.id)).size !== chain.length) throw new Error('SCOPE_CHAIN_INVALID');\r\n chain.forEach((item, index) => { if (!item.id?.trim() || (index > 0 && item.parentId !== chain[index - 1].id)) throw new Error('SCOPE_CHAIN_INVALID'); });\r\n return Object.freeze(chain);\r\n}\r\nfunction normalizeConflicts(conflicts: readonly ScopeCompositionConflict[]): readonly ScopeCompositionConflict[] {\r\n const unique = new Map<string, ScopeCompositionConflict>();\r\n for (const conflict of conflicts) {\r\n const delegationIds = [...new Set(conflict.delegationIds)].sort();\r\n const key = `${conflict.code}|${delegationIds.join(',')}`;\r\n unique.set(key, Object.freeze({...conflict, delegationIds: Object.freeze(delegationIds)}));\r\n }\r\n return Object.freeze([...unique.values()].sort((left, right) => `${left.code}|${left.delegationIds.join(',')}`.localeCompare(`${right.code}|${right.delegationIds.join(',')}`)));\r\n}\r\nfunction conflictSummary(conflicts: readonly ScopeCompositionConflict[]) { const byCategory:Record<string,number>={}; for(const conflict of conflicts) { const category=conflict.code.toLowerCase().replace(/_conflict$/,''); byCategory[category]=(byCategory[category]??0)+1; } return {total:conflicts.length,hard:conflicts.filter(item=>item.hard).length,soft:conflicts.filter(item=>!item.hard).length,byCategory:Object.freeze(byCategory)}; }\r\nexport function assertComposedScopeIntegrity(composed: ComposedScope): true {\r\n const conflictSetDigest = digest(composed.conflicts);\r\n if (conflictSetDigest !== composed.conflictSetDigest) throw new Error('SCOPE_CONFLICT_DIGEST_MISMATCH');\r\n const compositionDigest = digest({chain: composed.chain, permissions: composed.permissions, delegationIds: [...(composed.delegationIds ?? [])].sort(), conflictSetDigest, effectiveRevision: composed.effectiveRevision ?? null, sourceRevisionSetDigest: composed.sourceRevisionSetDigest ?? null, ancestorHardAuthorityDigest: composed.ancestorHardAuthorityDigest ?? null, effectiveProgramDigest: composed.effectiveProgramDigest ?? null});\r\n if (compositionDigest !== composed.compositionDigest) throw new Error('SCOPE_COMPOSITION_DIGEST_MISMATCH');\r\n return true;\r\n}\r\n\r\n/** Re-seals the existing canonical scope authority with effective-program lineage. */\r\nexport function bindEffectiveProgramAuthority(composed: ComposedScope, input: {effectiveProgramDigest: string; sourceRevisionSetDigest: string; ancestorHardAuthorityDigest: string}): ComposedScope {\r\n assertComposedScopeIntegrity(composed);\r\n for (const [name, value] of Object.entries(input)) if (!/^[a-f0-9]{64}$/.test(value)) throw new Error(`SCOPE_${name.toUpperCase()}_INVALID`);\r\n const bound = Object.freeze({...composed, effectiveProgramDigest: input.effectiveProgramDigest, sourceRevisionSetDigest: input.sourceRevisionSetDigest, ancestorHardAuthorityDigest: input.ancestorHardAuthorityDigest});\r\n const compositionDigest = digest({chain: bound.chain, permissions: bound.permissions, delegationIds: [...(bound.delegationIds ?? [])].sort(), conflictSetDigest: bound.conflictSetDigest, effectiveRevision: bound.effectiveRevision ?? null, sourceRevisionSetDigest: bound.sourceRevisionSetDigest, ancestorHardAuthorityDigest: bound.ancestorHardAuthorityDigest, effectiveProgramDigest: bound.effectiveProgramDigest});\r\n const resealed = Object.freeze({...bound, compositionDigest});\r\n assertComposedScopeIntegrity(resealed);\r\n return resealed;\r\n}\r\n\r\nexport interface ScopeCompositionRevalidation {\r\n stale: boolean;\r\n sourceRevisionSetChanged: boolean;\r\n ancestorHardAuthorityChanged: boolean;\r\n effectiveProgramChanged: boolean;\r\n effectiveRevisionChanged: boolean;\r\n conflictSetChanged: boolean;\r\n compatible: boolean;\r\n taintRequired: boolean;\r\n}\r\n\r\n/** Reference-equivalent dependency check for an already materialized scope. */\r\nexport function compositionDependencyStale(previous: ComposedScope, next: ComposedScope): boolean {\r\n assertComposedScopeIntegrity(previous);\r\n assertComposedScopeIntegrity(next);\r\n return previous.sourceRevisionSetDigest !== next.sourceRevisionSetDigest ||\r\n previous.ancestorHardAuthorityDigest !== next.ancestorHardAuthorityDigest ||\r\n previous.effectiveProgramDigest !== next.effectiveProgramDigest ||\r\n previous.effectiveRevision?.digest !== next.effectiveRevision?.digest ||\r\n previous.conflictSetDigest !== next.conflictSetDigest;\r\n}\r\n\r\n/** Revalidation must be explicit before a changed composition can be served. */\r\nexport function revalidateScopeComposition(previous: ComposedScope, next: ComposedScope): ScopeCompositionRevalidation {\r\n const sourceRevisionSetChanged = previous.sourceRevisionSetDigest !== next.sourceRevisionSetDigest;\r\n const ancestorHardAuthorityChanged = previous.ancestorHardAuthorityDigest !== next.ancestorHardAuthorityDigest;\r\n const effectiveProgramChanged = previous.effectiveProgramDigest !== next.effectiveProgramDigest;\r\n const effectiveRevisionChanged = previous.effectiveRevision?.digest !== next.effectiveRevision?.digest;\r\n const conflictSetChanged = previous.conflictSetDigest !== next.conflictSetDigest;\r\n const stale = sourceRevisionSetChanged || ancestorHardAuthorityChanged || effectiveProgramChanged || effectiveRevisionChanged || conflictSetChanged;\r\n const compatible = next.serveable;\r\n return {stale, sourceRevisionSetChanged, ancestorHardAuthorityChanged, effectiveProgramChanged, effectiveRevisionChanged, conflictSetChanged, compatible, taintRequired: stale && !compatible};\r\n}\r\nexport function composeScope(input: {chain: readonly HierarchicalScope[]; delegation?: ScopeDelegation | null; now?: string; availablePermissions?: readonly string[]; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]}): ComposedScope {\r\n const chain = canonicalChain(input.chain);\r\n const delegations = input.delegation ? [input.delegation] : [];\r\n let permissions: readonly string[] = [];\r\n for (const delegation of delegations) { const now = input.now ?? new Date().toISOString(); const expiresAt = Date.parse(delegation.expiresAt); const issuedAt = Date.parse(now); if (!delegation.id?.trim() || !delegation.issuerId?.trim() || !delegation.subjectId?.trim() || !Array.isArray(delegation.permissions) || !delegation.permissions.length || !Number.isFinite(expiresAt) || !Number.isFinite(issuedAt)) throw new Error('SCOPE_DELEGATION_INVALID'); if (order.indexOf(delegation.fromLevel) >= order.indexOf(delegation.toLevel)) throw new Error('SCOPE_DELEGATION_DIRECTION_INVALID'); if (chain.find(item => item.level === delegation.toLevel)?.id !== delegation.subjectId) throw new Error('SCOPE_DELEGATION_SUBJECT_MISMATCH'); if (expiresAt <= issuedAt) throw new Error('SCOPE_DELEGATION_EXPIRED'); if (!chain.some(item => item.id === delegation.issuerId && item.level === delegation.fromLevel)) throw new Error('SCOPE_DELEGATION_ISSUER_OUTSIDE_CHAIN'); const requested=[...new Set(delegation.permissions.map(value => value.trim()).filter(Boolean))]; if (!requested.length) throw new Error('SCOPE_DELEGATION_INVALID'); const available=input.availablePermissions; if (available && requested.some(permission=>!available.includes(permission))) throw new Error('SCOPE_DELEGATION_PERMISSION_WIDENING'); permissions = Object.freeze([...new Set([...permissions, ...requested])]); }\r\n const conflictNames = permissions.filter(value => value.startsWith('allow:')).map(value => value.slice('allow:'.length)).filter(name => permissions.includes(`deny:${name}`));\r\n const delegationConflicts: readonly ScopeCompositionConflict[] = conflictNames.length ? Object.freeze([{code:'SCOPE_DELEGATION_CONFLICT', delegationIds: delegations.map(item => item.id), hard:true}]) : Object.freeze([]);\r\n if (input.effectiveRevision && (!input.effectiveRevision.id || !/^[a-f0-9]{64}$/.test(input.effectiveRevision.digest))) throw new Error('EFFECTIVE_REVISION_BINDING_INVALID');\r\n const lineage = composeRevisionLineage(chain,input.sourceRevisions ?? [], delegations);\r\n const conflicts = normalizeConflicts([...delegationConflicts, ...(lineage.conflicts ?? [])]);\r\n const conflictSetDigest = digest(conflicts);\r\n const compositionDigest = digest({chain, permissions, delegationIds: delegations.map(item => item.id).sort(), conflictSetDigest, effectiveRevision: input.effectiveRevision ?? null, sourceRevisionSetDigest: lineage.sourceRevisionSetDigest ?? null, ancestorHardAuthorityDigest: lineage.ancestorHardAuthorityDigest ?? null, effectiveProgramDigest: lineage.effectiveProgramDigest ?? null});\r\n const {serveable: lineageServeable, conflicts: _lineageConflicts, ...lineageData}=lineage;\r\n return Object.freeze({chain: Object.freeze(chain), permissions, delegationIds: Object.freeze(delegations.map(item=>item.id).sort()), compositionDigest, conflictSetDigest, conflictSummary:conflictSummary(conflicts), conflicts, serveable: conflicts.length === 0 && lineageServeable, ...(input.effectiveRevision ? {effectiveRevision: Object.freeze({...input.effectiveRevision})} : {}), ...lineageData});\r\n}\r\n\r\nfunction composeRevisionLineage(chain: readonly HierarchicalScope[], revisions: readonly ScopeBehaviorRevision[], delegations: readonly ScopeDelegation[] = []): {serveable:boolean; sourceRevisions?:readonly ScopeBehaviorRevision[]; sourceRevisionSetDigest?:string; ancestorHardAuthorityDigest?:string; effectiveProgramDigest?:string; explanations?:readonly ScopeCompositionExplanation[]; conflicts?:readonly ScopeCompositionConflict[]} {\r\n if (!revisions.length) return {serveable:true};\r\n const delegatedChildIds=new Set(delegations.flatMap(item=>{const value=item as Partial<ReferenceScopeDelegation>;if(value.permissions?.includes('exception')&&value.parentAuthorityLevel===value.fromLevel&&value.childScopeKind===value.toLevel&&value.when?.kind==='all'&&value.when.expressions.length===0&&typeof value.parentRevisionDigest==='string'){const parent=revisions.find(revision=>revision.level===value.parentAuthorityLevel);const child=revisions.find(revision=>revision.level===value.childScopeKind);if(parent?.digest===value.parentRevisionDigest&&child?.id)return [child.id];}return []}));\r\n const effectiveRevisions=revisions.map(revision=>delegatedChildIds.has(revision.id)?{...revision,hard:false}:revision); const ids=new Set<string>(); const seenLevels=new Set<ScopeLevel>(); const explanations: ScopeCompositionExplanation[]=[]; const conflicts: ScopeCompositionConflict[]=[];\r\n for (const revision of effectiveRevisions) {\r\n if (!revision.id.trim() || !/^[a-f0-9]{64}$/.test(revision.digest) || !revision.source.trim() || ids.has(revision.id)) throw new Error('SCOPE_REVISION_LINEAGE_INVALID');\r\n const scope=chain.find(item=>item.level===revision.level); if (!scope) throw new Error('SCOPE_REVISION_OUTSIDE_CHAIN');\r\n if (seenLevels.has(revision.level)) { explanations.push({revisionId:revision.id,level:revision.level,disposition:'rejected',reason:'Multiple revisions at one scope level are not deterministically composable'}); conflicts.push({code:'SCOPE_REVISION_LEVEL_CONFLICT',delegationIds:[revision.id],hard:true}); continue; }\r\n ids.add(revision.id); seenLevels.add(revision.level); explanations.push({revisionId:revision.id,level:revision.level,disposition:revision.hard?'inherited':'overridden',reason:revision.hard?'Hard authority inherited into the effective scope':'Non-hard revision contributes an override candidate'});\r\n }\r\n const ordered=[...effectiveRevisions].filter(item=>ids.has(item.id)).sort((left,right)=>order.indexOf(left.level)-order.indexOf(right.level));\r\n const hard=ordered.filter(item=>item.hard);\r\n const compare=(field:keyof ScopeBehaviorRevision,code:ScopeCompositionConflict['code'])=>{const values=[...new Set(hard.map(item=>item[field]).filter(value=>typeof value==='string'))];if(values.length>1) conflicts.push({code,delegationIds:hard.filter(item=>typeof item[field]==='string').map(item=>item.id),hard:true});};\r\n const compareKeyed=(field:keyof ScopeBehaviorRevision,code:ScopeCompositionConflict['code'])=>{const byKey=new Map<string,{digest:string;ids:string[]}>();for(const item of hard){const value=item[field];if(!value||typeof value!=='object'||Array.isArray(value))continue;for(const [key,digestValue] of Object.entries(value as Record<string,string>)){const prior=byKey.get(key);if(prior){if(prior.digest!==digestValue) conflicts.push({code,delegationIds:[...new Set([...prior.ids,item.id])],hard:true});prior.ids.push(item.id);}else byKey.set(key,{digest:digestValue,ids:[item.id]});}}};\r\n compareKeyed('temporalInvariantKeys','TEMPORAL_INVARIANT_CONFLICT'); compareKeyed('temporalTransitionKeys','TEMPORAL_TRANSITION_CONFLICT'); compareKeyed('recoveryKeys','RECOVERY_CONFLICT');\r\n if (!hard.some(item=>item.temporalInvariantKeys)) compare('temporalInvariantDigest','TEMPORAL_INVARIANT_CONFLICT'); if (!hard.some(item=>item.temporalTransitionKeys)) compare('temporalTransitionDigest','TEMPORAL_TRANSITION_CONFLICT'); if (!hard.some(item=>item.recoveryKeys)) compare('recoveryDigest','RECOVERY_CONFLICT'); compare('actorOwnershipDigest','ACTOR_OWNERSHIP_CONFLICT'); compare('deadlineDigest','DEADLINE_CONFLICT');\r\n const sourceRevisionSetDigest=digest(ordered.map(item=>({id:item.id,digest:item.digest,level:item.level,hard:item.hard,source:item.source,temporalInvariantDigest:item.temporalInvariantDigest,temporalTransitionDigest:item.temporalTransitionDigest,recoveryDigest:item.recoveryDigest,actorOwnershipDigest:item.actorOwnershipDigest,deadlineDigest:item.deadlineDigest})));\r\n const ancestorHardAuthorityDigest=digest(ordered.filter(item=>item.hard).map(item=>item.digest));\r\n const effectiveProgramDigest=digest(ordered);\r\n return {serveable:conflicts.length===0&&!explanations.some(item=>item.disposition==='rejected'),sourceRevisions:Object.freeze(ordered),sourceRevisionSetDigest,ancestorHardAuthorityDigest,effectiveProgramDigest,explanations:Object.freeze(explanations),conflicts:Object.freeze(conflicts)};\r\n}\r\n\r\n/** Compose all supplied delegations, rejecting duplicate ids and preserving one digest for runtime checks. */\r\nexport function composeDelegatedScope(input: {chain: readonly HierarchicalScope[]; delegations: readonly ScopeDelegation[]; now?: string; availablePermissions?: readonly string[]; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]}): ComposedScope {\r\n const chain = canonicalChain(input.chain);\r\n const ids = input.delegations.map(item => item.id);\r\n if (new Set(ids).size !== ids.length) throw new Error('SCOPE_DELEGATION_CONFLICT');\r\n const results = input.delegations.map(delegation => {\r\n const candidate = delegation as Partial<ReferenceScopeDelegation>;\r\n const strictEnvelope = candidate.stableKey !== undefined || candidate.parentAuthorityLevel !== undefined || candidate.childScopeKind !== undefined || candidate.childScopeDigest !== undefined || candidate.parentRevisionDigest !== undefined || candidate.when !== undefined;\r\n return strictEnvelope\r\n ? composeReferenceDelegatedScope({chain, delegation: delegation as ReferenceScopeDelegation, now: input.now, availablePermissions: input.availablePermissions, sourceRevisions: input.sourceRevisions})\r\n : composeScope({chain, delegation, now: input.now, availablePermissions: input.availablePermissions});\r\n });\r\n const permissions = Object.freeze([...new Set(results.flatMap(result => result.permissions))].sort());\r\n const conflicts: ScopeCompositionConflict[] = [...results.flatMap(result => result.conflicts)];\r\n for (const permission of permissions.filter(value => value.startsWith('allow:')).map(value => value.slice('allow:'.length))) {\r\n if (permissions.includes(`allow:${permission}`) && permissions.includes(`deny:${permission}`)) conflicts.push({code:'SCOPE_DELEGATION_CONFLICT',delegationIds:ids.filter(id => input.delegations.some(item => item.id===id && item.permissions.some(value => value===`allow:${permission}` || value===`deny:${permission}`))),hard:true});\r\n }\r\n const normalizedConflicts = normalizeConflicts(conflicts);\r\n const conflictSetDigest = digest(normalizedConflicts);\r\n if (input.effectiveRevision && (!input.effectiveRevision.id || !/^[a-f0-9]{64}$/.test(input.effectiveRevision.digest))) throw new Error('EFFECTIVE_REVISION_BINDING_INVALID');\r\n const lineage=composeRevisionLineage(chain,input.sourceRevisions ?? [], input.delegations);\r\n const allConflicts = normalizeConflicts([...normalizedConflicts, ...(lineage.conflicts ?? [])]);\r\n const allConflictSetDigest = digest(allConflicts);\r\n const compositionDigest = digest({chain, permissions, delegationIds: [...ids].sort(), conflictSetDigest: allConflictSetDigest, effectiveRevision: input.effectiveRevision ?? null, sourceRevisionSetDigest: lineage.sourceRevisionSetDigest ?? null, ancestorHardAuthorityDigest: lineage.ancestorHardAuthorityDigest ?? null, effectiveProgramDigest: lineage.effectiveProgramDigest ?? null});\r\n const {serveable: lineageServeable, conflicts: _lineageConflicts, ...lineageData}=lineage;\r\n return Object.freeze({chain, permissions, delegationIds: Object.freeze([...ids].sort()), compositionDigest, conflictSetDigest: allConflictSetDigest, conflictSummary:conflictSummary(allConflicts), conflicts: allConflicts, serveable: allConflicts.length===0 && lineageServeable, ...(input.effectiveRevision ? {effectiveRevision: Object.freeze({...input.effectiveRevision})} : {}), ...lineageData});\r\n}\r\n\r\n/** Reference-shaped exception delegation: parent-authored, exact-child and digest-bound. */\r\nexport function composeReferenceDelegatedScope(input: {chain: readonly HierarchicalScope[]; delegation: ReferenceScopeDelegation; now?: string; availablePermissions?: readonly string[]; effectiveRevision?: EffectiveRevisionBinding; sourceRevisions?: readonly ScopeBehaviorRevision[]}): ComposedScope {\r\n const delegation = input.delegation;\r\n const allowedEffects = new Set(['allow','deny','require_approval','numeric_limit','redact','transform','escalate']);\r\n if (delegation.exceptionEffectTypes !== undefined &&\r\n (!Array.isArray(delegation.exceptionEffectTypes) ||\r\n delegation.exceptionEffectTypes.length > 7 ||\r\n new Set(delegation.exceptionEffectTypes).size !== delegation.exceptionEffectTypes.length ||\r\n delegation.exceptionEffectTypes.some(effect => !allowedEffects.has(effect)))) {\r\n throw new Error('SCOPE_DELEGATION_EXCEPTION_EFFECT_TYPES_INVALID');\r\n }\r\n if (delegation.parentAuthorityLevel !== delegation.fromLevel || delegation.childScopeKind !== delegation.toLevel) throw new Error('SCOPE_DELEGATION_AUTHORITY_LEVEL_MISMATCH');\r\n const child = input.chain.find(item => item.level === delegation.childScopeKind && item.id === delegation.subjectId);\r\n if (!child || !/^[a-f0-9]{64}$/.test(delegation.childScopeDigest)) throw new Error('SCOPE_DELEGATION_CHILD_DIGEST_REQUIRED');\r\n const childDigest = scopeDigest(child);\r\n if (childDigest !== delegation.childScopeDigest) throw new Error('SCOPE_DELEGATION_CHILD_DIGEST_MISMATCH');\r\n if (!/^[a-f0-9]{64}$/.test(delegation.parentRevisionDigest) || delegation.when.kind !== 'all' || delegation.when.expressions.length !== 0 || !delegation.permissions.includes('exception')) throw new Error('SCOPE_DELEGATION_ENVELOPE_INVALID');\r\n const parentRevision = input.sourceRevisions?.find(revision => revision.level === delegation.parentAuthorityLevel);\r\n if (parentRevision && parentRevision.digest !== delegation.parentRevisionDigest) throw new Error('SCOPE_DELEGATION_PARENT_REVISION_DIGEST_MISMATCH');\r\n return composeScope({chain: input.chain, delegation, now: input.now, availablePermissions: input.availablePermissions, effectiveRevision: input.effectiveRevision, sourceRevisions: input.sourceRevisions});\r\n}\r\n", "import {createHash} from 'node:crypto';\r\nexport const MCP_PROTOCOL_VERSIONS = ['2026-07-28','2025-11-25','2025-03-26'] as const;\r\nexport function negotiateMcpProtocolVersion(offered: unknown): string { const value=String(offered??''); return (MCP_PROTOCOL_VERSIONS as readonly string[]).includes(value) ? value : '2025-03-26'; }\r\nimport {isIP} from 'node:net';\r\nimport {assertComposedScopeIntegrity, type ComposedScope} from '../../domain/src/scope-composer.ts';\r\nimport type {Scope} from '../../domain/src/vnext.ts';\r\nexport interface McpInvocation extends Scope {id:string;server:string;tool:string;arguments:Record<string,unknown>;receiptId:string;idempotencyKey:string;authorityDigest?:string;composedScope?:ComposedScope}\r\nexport interface McpResult extends Scope {invocationId:string;ok:boolean;result?:unknown;error?:string;provenanceDigest:string;server:string;tool:string;receiptId:string;idempotencyKey:string;argumentsDigest:string;authorityDecisionDigest:string;authorityDigest?:string|null}\r\nexport interface McpTransport {call(input:{server:string;tool:string;arguments:Record<string,unknown>;signal?:AbortSignal}):Promise<{result?:unknown;error?:string}>}\r\nexport interface McpToolDefinition {name:string;description?:string;inputSchema:Record<string,unknown>;effectful?:boolean}\r\nexport interface McpResourceDefinition {uri:string;name:string;description?:string;mimeType?:string}\r\nexport interface McpPromptDefinition {name:string;description?:string;arguments?:readonly Record<string,unknown>[]}\r\nfunction assertPublicMcpHost(hostname:string):void { const host=hostname.toLowerCase().replace(/^\\[|\\]$/g,''); if(host==='localhost'||host.endsWith('.localhost')||host.endsWith('.local')) throw new Error('MCP_UPSTREAM_PRIVATE_HOST'); const version=isIP(host); if(version===4){const octets=host.split('.').map(Number);if(octets[0]===10||octets[0]===127||octets[0]===0||(octets[0]===172&&octets[1]>=16&&octets[1]<=31)||(octets[0]===192&&octets[1]===168)|| (octets[0]===169&&octets[1]===254)) throw new Error('MCP_UPSTREAM_PRIVATE_HOST');} if(version===6&&(['::1','::','fc','fd','fe8','fe9','fea','feb'].some(prefix=>host===prefix||host.startsWith(`${prefix}:`)))) throw new Error('MCP_UPSTREAM_PRIVATE_HOST'); }\r\nexport interface McpAuthorityDecision {allowed:boolean;decisionDigest:string;reason?:string}\r\nexport interface McpCancellationRegistry {register(requestId:string):AbortSignal;cancel(requestId:string):boolean;unregister(requestId:string,signal?:AbortSignal):void;}\r\nexport function canonicalMcpJson(value: unknown): string { if (value === null || typeof value !== 'object') return JSON.stringify(value); if (Array.isArray(value)) return `[${value.map(canonicalMcpJson).join(',')}]`; return `{${Object.keys(value as Record<string, unknown>).sort().map(key=>`${JSON.stringify(key)}:${canonicalMcpJson((value as Record<string, unknown>)[key])}`).join(',')}}`; }\r\nexport function verifyMcpResult(result:McpResult):true { const {provenanceDigest,...body}=result; const expected=createHash('sha256').update(canonicalMcpJson(body)).digest('hex'); if(provenanceDigest!==expected) throw new Error('MCP_PROVENANCE_DIGEST_INVALID'); return true; }\r\nexport function createMcpCancellationRegistry():McpCancellationRegistry {const controllers=new Map<string,AbortController>();return {register(requestId){if(!requestId.trim())throw new Error('MCP_REQUEST_ID_REQUIRED');const previous=controllers.get(requestId);previous?.abort();const controller=new AbortController();controllers.set(requestId,controller);return controller.signal;},cancel(requestId){const controller=controllers.get(requestId);if(!controller)return false;controller.abort();return true;},unregister(requestId,signal){const controller=controllers.get(requestId);if(controller&&(!signal||controller.signal===signal))controllers.delete(requestId);}};}\r\nfunction combineMcpAbortSignals(...signals:(AbortSignal|undefined)[]):AbortSignal|undefined { const active=signals.filter((signal):signal is AbortSignal=>Boolean(signal)); if(active.length===0)return undefined; if(active.length===1)return active[0]; const controller=new AbortController(); const abort=()=>controller.abort(); for(const signal of active){if(signal.aborted){controller.abort();break;} signal.addEventListener('abort',abort,{once:true});} return controller.signal; }\r\nexport function parseMcpEventStream(body:string,expectedId?:string):readonly string[] { const payloads:string[]=[]; for(const event of body.split(/\\r?\\n\\r?\\n/)){const data:string[]=[];for(const line of event.split(/\\r?\\n/)){if(!line||line.startsWith(':'))continue;const separator=line.indexOf(':');const field=separator<0?line:line.slice(0,separator);if(field!=='data')continue;const value=line.slice(separator+1).startsWith(' ')?line.slice(separator+2):line.slice(separator+1);data.push(value);}if(data.length)payloads.push(data.join('\\n'));}return payloads; }\r\nasync function readMcpResponseBody(response:Response):Promise<string>{if(!response.body)return response.text();const reader=response.body.getReader();const decoder=new TextDecoder();let body='';try{for(;;){const chunk=await reader.read();body+=decoder.decode(chunk.value??new Uint8Array(),{stream:!chunk.done});if(chunk.done)return body;}}finally{reader.releaseLock();}}\r\nfunction parseMcpResponseBody(body:string,contentType:string,expectedId?:string):{result?:unknown;error?:string} { const payloads=contentType.toLowerCase().includes('text/event-stream') ? parseMcpEventStream(body,expectedId) : [body]; let last:{id?:string|number;error?:{message?:string};result?:unknown}|undefined; for(const payload of payloads){try{const parsed=JSON.parse(payload) as {id?:string|number;error?:{message?:string};result?:unknown}; last=parsed;}catch{continue;}} if(!last)return {error:'MCP_UPSTREAM_RESPONSE_INVALID'}; if(last.id!==undefined&&String(last.id)!==expectedId)return {error:'MCP_UPSTREAM_RESPONSE_ID_MISMATCH'}; return last.error?{error:last.error.message??'MCP_UPSTREAM_ERROR'}:{result:last.result}; }\r\nexport function createRegisteredMcpTransport(input:{endpoint:string;allowedHosts:readonly string[];fetcher?:typeof fetch;timeoutMs?:number;protocolVersion?:string;headers?:Readonly<Record<string,string>>}):McpTransport {const url=new URL(input.endpoint);if(url.protocol!=='https:')throw new Error('MCP_UPSTREAM_HTTPS_REQUIRED');assertPublicMcpHost(url.hostname);if(!input.allowedHosts.includes(url.host))throw new Error('MCP_UPSTREAM_HOST_NOT_ALLOWED');const fetcher=input.fetcher??fetch;const timeoutMs=input.timeoutMs??10000;if(!Number.isInteger(timeoutMs)||timeoutMs<1||timeoutMs>60000)throw new Error('MCP_UPSTREAM_TIMEOUT_INVALID');const protocolVersion=input.protocolVersion??'2025-03-26';return {call:async({server,tool,arguments:args,signal})=>{const controller=new AbortController();const timer=setTimeout(()=>controller.abort(),timeoutMs);const abort=()=>controller.abort();if(signal?.aborted)controller.abort();else signal?.addEventListener('abort',abort,{once:true});try{const response=await fetcher(url,{method:'POST',headers:{'content-type':'application/json',accept:'application/json, text/event-stream','mcp-protocol-version':protocolVersion,...input.headers},signal:controller.signal,body:JSON.stringify({jsonrpc:'2.0',id:`${server}:${tool}`,method:'tools/call',params:{name:tool,arguments:args}})});if(!response.ok)return {error:`MCP_UPSTREAM_HTTP_${response.status}`};return parseMcpResponseBody(await readMcpResponseBody(response),response.headers.get('content-type')??'application/json',`${server}:${tool}`);}catch(error){return {error:error instanceof Error&&error.name==='AbortError'?(signal?.aborted?'MCP_REQUEST_CANCELLED':'MCP_UPSTREAM_TIMEOUT'):'MCP_UPSTREAM_TRANSPORT_ERROR'}}finally{clearTimeout(timer);signal?.removeEventListener('abort',abort)}}}}\r\nexport async function handleMcpJsonRpc(input:{request:{jsonrpc:'2.0';id?:string|number;method:string;params?:Record<string,unknown>};server:string;tools:readonly McpToolDefinition[];resources?:readonly McpResourceDefinition[];prompts?:readonly McpPromptDefinition[];readResource?:(uri:string)=>Promise<Record<string,unknown>|null>|Record<string,unknown>|null;getPrompt?:(name:string,args:Record<string,unknown>)=>Promise<Record<string,unknown>|null>|Record<string,unknown>|null;invocation:Omit<McpInvocation,'server'|'tool'|'arguments'>;transport:McpTransport;signal?:AbortSignal;cancellationRegistry?:McpCancellationRegistry;authorize?:(input:{invocation:McpInvocation;definition:McpToolDefinition})=>Promise<McpAuthorityDecision>|McpAuthorityDecision}):Promise<Record<string,unknown>|null>{const {request,server,tools,transport}=input;if(request.jsonrpc!=='2.0'||!request.method)throw new Error('MCP_JSONRPC_INVALID');if(request.method==='initialize')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{protocolVersion:'2025-03-26',serverInfo:{name:server,version:'1'},capabilities:{tools:{},resources:input.resources?{}:undefined,prompts:input.prompts?{}:undefined}}};if(request.method==='notifications/initialized')return null;if(request.method==='notifications/cancelled'){const requestId=String(request.params?.requestId??'');input.cancellationRegistry?.cancel(requestId);return null;}if(request.method==='tools/list')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{tools}};if(request.method==='resources/list')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{resources:input.resources??[]}};if(request.method==='prompts/list')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{prompts:input.prompts??[]}};if(request.method==='resources/read'){const value=input.readResource?await input.readResource(String(request.params?.uri??'')):null;return request.id===undefined?null:value?{jsonrpc:'2.0',id:request.id,result:value}:{jsonrpc:'2.0',id:request.id,error:{code:-32602,message:'RESOURCE_NOT_FOUND'}}}if(request.method==='prompts/get'){const value=input.getPrompt?await input.getPrompt(String(request.params?.name??''),(request.params?.arguments??{}) as Record<string,unknown>):null;return request.id===undefined?null:value?{jsonrpc:'2.0',id:request.id,result:value}:{jsonrpc:'2.0',id:request.id,error:{code:-32602,message:'PROMPT_NOT_FOUND'}}}if(request.method!=='tools/call')return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,error:{code:-32601,message:'METHOD_NOT_FOUND'}};const tool=String(request.params?.name??'');const definition=tools.find(item=>item.name===tool);if(!definition)return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,error:{code:-32602,message:'TOOL_NOT_FOUND'}};const invocation={...input.invocation,server,tool,arguments:(request.params?.arguments??{}) as Record<string,unknown>};const authority=definition.effectful?(input.authorize?await input.authorize({invocation,definition}):{allowed:false,decisionDigest:'',reason:'MCP_AUTHORITY_REQUIRED'}):{allowed:true,decisionDigest:'read-only'};if(!authority.allowed)return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,error:{code:-32003,message:authority.reason??'MCP_AUTHORITY_DENIED',data:{decisionDigest:authority.decisionDigest}}};const requestId=String(request.id??'');const requestSignal=input.cancellationRegistry&&requestId?input.cancellationRegistry.register(requestId):undefined;try{const result=await invokeMcpTool({invocation,transport,authority,signal:combineMcpAbortSignals(input.signal,requestSignal)});return request.id===undefined?null:{jsonrpc:'2.0',id:request.id,result:{content:[{type:'text',text:JSON.stringify(result.result??result.error??null)}],isError:!result.ok,provenanceDigest:result.provenanceDigest}}}finally{if(requestSignal)input.cancellationRegistry?.unregister(requestId,requestSignal);}}\r\nexport async function invokeMcpTool(input:{invocation:McpInvocation;transport:McpTransport;authority?:McpAuthorityDecision;signal?:AbortSignal}):Promise<McpResult>{const {invocation,transport}=input;if(!invocation.id||!invocation.server||!invocation.tool||!invocation.receiptId||!invocation.idempotencyKey)throw new Error('MCP_INVOCATION_FIELDS_REQUIRED');if(invocation.authorityDigest!==undefined&&!/^[a-f0-9]{64}$/.test(invocation.authorityDigest))throw new Error('MCP_AUTHORITY_DIGEST_INVALID');if(invocation.composedScope){assertComposedScopeIntegrity(invocation.composedScope);if(invocation.authorityDigest!==undefined&&invocation.authorityDigest!==invocation.composedScope.compositionDigest)throw new Error('MCP_AUTHORITY_MISMATCH');if(!invocation.composedScope.serveable)throw new Error('MCP_SCOPE_COMPOSITION_CONFLICT');}if(input.authority&&!input.authority.allowed)throw new Error('MCP_AUTHORITY_DENIED');if(!transport||typeof transport.call!=='function')throw new Error('MCP_TRANSPORT_REQUIRED');let response:{result?:unknown;error?:string};try{response=await transport.call({server:invocation.server,tool:invocation.tool,arguments:structuredClone(invocation.arguments),signal:input.signal})}catch{if(input.signal?.aborted)throw new Error('MCP_INVOCATION_CANCELLED');response={error:'MCP_TRANSPORT_ERROR'}}const argumentsDigest=createHash('sha256').update(canonicalMcpJson(invocation.arguments)).digest('hex');const body={invocationId:invocation.id,organizationId:invocation.organizationId,projectId:invocation.projectId,environmentId:invocation.environmentId,server:invocation.server,tool:invocation.tool,receiptId:invocation.receiptId,idempotencyKey:invocation.idempotencyKey,argumentsDigest,authorityDecisionDigest:input.authority?.decisionDigest??'not-required',authorityDigest:invocation.authorityDigest??null,ok:!response.error,result:response.result,error:response.error};return Object.freeze({...body,provenanceDigest:createHash('sha256').update(canonicalMcpJson(body)).digest('hex')})}\r\n", "import {createHash} from 'node:crypto';\r\nimport {canonicalMcpJson, type McpAuthorityDecision, type McpInvocation, type McpResult} from './mcp-gateway.ts';\r\nexport function verifyMcpResult(result: McpResult): true { const {provenanceDigest: stored, ...body}=result; const expected=createHash('sha256').update(canonicalMcpJson(body)).digest('hex'); if(stored!==expected) throw new Error('MCP_PROVENANCE_DIGEST_MISMATCH'); return true; }\r\nexport function createMcpResultFromResponse(input:{invocation:McpInvocation;response:{result?:unknown;error?:string};authority?:McpAuthorityDecision}):McpResult { const argumentsDigest=createHash('sha256').update(canonicalMcpJson(input.invocation.arguments)).digest('hex'); const body={invocationId:input.invocation.id,organizationId:input.invocation.organizationId,projectId:input.invocation.projectId,environmentId:input.invocation.environmentId,server:input.invocation.server,tool:input.invocation.tool,receiptId:input.invocation.receiptId,idempotencyKey:input.invocation.idempotencyKey,argumentsDigest,authorityDecisionDigest:input.authority?.decisionDigest ?? 'not-required',authorityDigest:input.invocation.authorityDigest??null,ok:!input.response.error,result:input.response.result,error:input.response.error}; return Object.freeze({...body,provenanceDigest:createHash('sha256').update(canonicalMcpJson(body)).digest('hex')}); }\r\n", "import {createHash,randomUUID} from 'node:crypto';\r\nexport type McpSessionStatus='PENDING_AUTH'|'ACTIVE'|'RECONNECTING'|'CLOSED'|'FAILED';\r\nexport interface McpSession {id:string;organizationId:string;projectId:string;environmentId:string;server:string;endpoint:string;protocolVersion:string;status:McpSessionStatus;authDigest:string;generation:number;createdAt:string;updatedAt:string;sessionDigest:string;}\r\nconst canonical=(value:unknown):string=>value===null||typeof value!=='object'?JSON.stringify(value):Array.isArray(value)?`[${value.map(canonical).join(',')}]`:`{${Object.keys(value as Record<string,unknown>).sort().map(key=>`${JSON.stringify(key)}:${canonical((value as Record<string,unknown>)[key])}`).join(',')}}`;\r\nconst digest=(value:unknown)=>createHash('sha256').update(canonical(value)).digest('hex');\r\nconst valid=(value:string)=>typeof value==='string'&&value.trim().length>0;\r\nexport function startMcpSession(input:{id?:string;organizationId:string;projectId:string;environmentId:string;server:string;endpoint:string;protocolVersion:string;authDigest:string;now:string}):McpSession {if(!valid(input.organizationId)||!valid(input.projectId)||!valid(input.environmentId)||!valid(input.server)||!valid(input.endpoint)||!valid(input.protocolVersion)||!/^[a-f0-9]{64}$/.test(input.authDigest)||!Number.isFinite(Date.parse(input.now)))throw new Error('MCP_SESSION_INPUT_INVALID');const {now,...identity}=input;const base={id:identity.id??`mcp:${randomUUID()}`,...identity,status:'PENDING_AUTH' as const,generation:0,createdAt:now,updatedAt:now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nconst withoutDigest=(session:McpSession):Omit<McpSession,'sessionDigest'>=>{const {sessionDigest:_ignored,...base}=session;return base;};\r\nexport function completeMcpAuth(session:McpSession,input:{authDigest:string;selfTestPassed:boolean;now:string}):McpSession {assertMcpSession(session);if(session.status!=='PENDING_AUTH'&&session.status!=='RECONNECTING')throw new Error('MCP_SESSION_AUTH_STATE_INVALID');if(input.authDigest!==session.authDigest||input.selfTestPassed!==true)throw new Error('MCP_SESSION_AUTH_FAILED');const base={...withoutDigest(session),status:'ACTIVE' as const,updatedAt:input.now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nexport function reconnectMcpSession(session:McpSession,input:{endpoint:string;protocolVersion:string;authDigest:string;now:string}):McpSession {assertMcpSession(session);if(session.status!=='ACTIVE')throw new Error('MCP_SESSION_RECONNECT_INVALID');if(input.endpoint!==session.endpoint||input.protocolVersion!==session.protocolVersion||input.authDigest!==session.authDigest)throw new Error('MCP_SESSION_IDENTITY_MISMATCH');const base={...withoutDigest(session),status:'RECONNECTING' as const,generation:session.generation+1,updatedAt:input.now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nexport function closeMcpSession(session:McpSession,now:string):McpSession {assertMcpSession(session);const base={...withoutDigest(session),status:'CLOSED' as const,updatedAt:now};return Object.freeze({...base,sessionDigest:digest(base)});}\r\nexport function assertMcpSession(session:McpSession):true {const {sessionDigest,...base}=session;if(sessionDigest!==digest(base))throw new Error('MCP_SESSION_DIGEST_MISMATCH');return true;}\r\nexport function assertMcpSessionActive(session:McpSession):true {assertMcpSession(session); if(session.status!=='ACTIVE') throw new Error(`MCP_SESSION_NOT_ACTIVE:${session.status}`); return true;}\r\n", "import {\r\n createServer,\r\n type IncomingMessage,\r\n type ServerResponse,\r\n} from \"node:http\";\r\nimport { createInterface } from \"node:readline\";\r\nimport type { Readable } from \"node:stream\";\r\nimport {\r\n createMcpCancellationRegistry,\r\n handleMcpJsonRpc,\r\n verifyMcpResult,\r\n type McpAuthorityDecision,\r\n type McpCancellationRegistry,\r\n type McpInvocation,\r\n type McpPromptDefinition,\r\n type McpResourceDefinition,\r\n type McpResult,\r\n type McpToolDefinition,\r\n type McpTransport,\r\n} from \"../../packages/runtime/src/mcp-gateway.ts\";\r\nimport { createMcpResultFromResponse } from \"../../packages/runtime/src/mcp-provenance.ts\";\r\nimport { assertMcpSessionActive, type McpSession } from \"../../packages/runtime/src/mcp-session.ts\";\r\nexport interface McpServerOptions {\r\n serverName: string;\r\n tools: readonly McpToolDefinition[];\r\n resources?: readonly McpResourceDefinition[];\r\n prompts?: readonly McpPromptDefinition[];\r\n readResource?: (\r\n uri: string,\r\n ) => Promise<Record<string, unknown> | null> | Record<string, unknown> | null;\r\n getPrompt?: (\r\n name: string,\r\n args: Record<string, unknown>,\r\n ) => Promise<Record<string, unknown> | null> | Record<string, unknown> | null;\r\n invocation: Omit<McpInvocation, \"server\" | \"tool\" | \"arguments\">;\r\n transport: McpTransport;\r\n authorize?: (input: {\r\n invocation: McpInvocation;\r\n definition: McpToolDefinition;\r\n }) => Promise<McpAuthorityDecision> | McpAuthorityDecision;\r\n provenanceRepository?: {\r\n save: (result: McpResult) => unknown;\r\n claim?: (input: {\r\n invocationId: string;\r\n idempotencyKey: string;\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n }) => { status: \"CLAIMED\" | \"REPLAY\" | \"IN_FLIGHT\"; result?: McpResult } | Promise<{ status: \"CLAIMED\" | \"REPLAY\" | \"IN_FLIGHT\"; result?: McpResult }>;\r\n getByIdempotencyKey?: (\r\n key: string,\r\n scope: {\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n },\r\n ) => McpResult | null | Promise<McpResult | null>;\r\n };\r\n maxBodyBytes?: number;\r\n cancellationRegistry?: McpCancellationRegistry;\r\n sessionRepository?: { get: (id: string, scope: { organizationId: string; projectId: string; environmentId: string }) => McpSession | null | Promise<McpSession | null> };\r\n sessionHeader?: string;\r\n sessionId?: string;\r\n requestAuthToken?: string;\r\n invocationExecutor?: (input: {invocation: McpInvocation; authority: McpAuthorityDecision; signal?: AbortSignal}) => Promise<McpResult>;\r\n /** Production-like persisted provenance must use the central executor. */\r\n requireInvocationExecutor?: boolean;\r\n}\r\nconst requestToken = (value: string | number | undefined): string =>\r\n String(\r\n value ??\r\n `notification-${Date.now()}-${Math.random().toString(16).slice(2)}`,\r\n );\r\nconst claimInvocation = async (\r\n repository: NonNullable<McpServerOptions[\"provenanceRepository\"]>,\r\n invocation: Pick<McpInvocation, \"id\" | \"idempotencyKey\">,\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n): Promise<McpResult | null> => {\r\n const claim = await repository.claim?.({\r\n invocationId: invocation.id,\r\n idempotencyKey: invocation.idempotencyKey,\r\n ...scope,\r\n });\r\n if (claim?.status === \"IN_FLIGHT\")\r\n throw new Error(\"MCP_INVOCATION_IN_FLIGHT\");\r\n return (\r\n claim?.result ??\r\n (await repository.getByIdempotencyKey?.(invocation.idempotencyKey, scope)) ??\r\n null\r\n );\r\n};\r\nasync function assertConfiguredSession(options: McpServerOptions, sessionId: string | undefined, scope: { organizationId: string; projectId: string; environmentId: string }): Promise<void> {\r\n if (!options.sessionRepository) return;\r\n if (!sessionId?.trim()) throw new Error(\"MCP_SESSION_REQUIRED\");\r\n const session = await options.sessionRepository.get(sessionId, scope);\r\n if (!session) throw new Error(\"MCP_SESSION_NOT_FOUND\");\r\n assertMcpSessionActive(session);\r\n}\r\nasync function persistVerifiedMcpResult(repository: NonNullable<McpServerOptions[\"provenanceRepository\"]>, result: McpResult): Promise<void> {\r\n const persisted = await repository.save(result);\r\n if (persisted && typeof persisted === \"object\") verifyMcpResult(persisted as McpResult);\r\n}\r\nexport function createMcpServer(options: McpServerOptions) {\r\n if (options.requireInvocationExecutor && !options.invocationExecutor)\r\n throw new Error(\"MCP_INVOCATION_EXECUTOR_REQUIRED\");\r\n const maxBodyBytes = options.maxBodyBytes ?? 128 * 1024;\r\n const cancellationRegistry =\r\n options.cancellationRegistry ?? createMcpCancellationRegistry();\r\n return createServer(async (request, response) => {\r\n if (request.method !== \"POST\")\r\n return send(response, 405, { error: { code: \"METHOD_NOT_ALLOWED\" } });\r\n if (options.requestAuthToken) {\r\n const authorization = request.headers.authorization ?? \"\";\r\n const token = authorization.match(/^Bearer\\s+(.+)$/i)?.[1];\r\n if (token !== options.requestAuthToken)\r\n return send(response, 401, { error: { code: \"MCP_AUTHENTICATION_REQUIRED\" } });\r\n }\r\n const requestController = new AbortController();\r\n const onAborted = () => requestController.abort();\r\n request.once(\"aborted\", onAborted);\r\n try {\r\n const body = JSON.parse(await readBody(request, maxBodyBytes)) as {\r\n jsonrpc: \"2.0\";\r\n id?: string | number;\r\n method: string;\r\n params?: Record<string, unknown>;\r\n };\r\n const token = requestToken(body.id);\r\n const requestInvocation = {\r\n ...options.invocation,\r\n id: `${options.invocation.id}:${token}`,\r\n receiptId: `${options.invocation.receiptId}:${token}`,\r\n idempotencyKey: `${options.invocation.idempotencyKey}:${token}`,\r\n };\r\n const scope = {\r\n organizationId: requestInvocation.organizationId,\r\n projectId: requestInvocation.projectId,\r\n environmentId: requestInvocation.environmentId,\r\n };\r\n const sessionId = request.headers[(options.sessionHeader ?? \"x-mcp-session-id\").toLowerCase()];\r\n await assertConfiguredSession(options, typeof sessionId === \"string\" ? sessionId : undefined, scope);\r\n if (options.invocationExecutor && body.method === \"tools/call\") {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition) {\r\n const invocation = {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>};\r\n const authority = definition.effectful ? (await options.authorize?.({invocation, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"} : {allowed: true, decisionDigest: \"read-only\"};\r\n if (authority.allowed) {\r\n const result = await options.invocationExecutor({invocation, authority, signal: requestController.signal});\r\n if (!requestController.signal.aborted) send(response, 200, {jsonrpc: \"2.0\", id: body.id, result: {content: [{type: \"text\", text: JSON.stringify(result.result ?? result.error ?? null)}], isError: !result.ok, provenanceDigest: result.provenanceDigest}});\r\n return;\r\n }\r\n if (!requestController.signal.aborted) send(response, 403, {jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}});\r\n return;\r\n }\r\n }\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const replay = await claimInvocation(\r\n options.provenanceRepository,\r\n requestInvocation,\r\n scope,\r\n );\r\n if (replay) {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition?.effectful) {\r\n const authority = (await options.authorize?.({invocation: {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>}, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"};\r\n if (!authority.allowed) {\r\n if (!requestController.signal.aborted) send(response, 403, {jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}});\r\n return;\r\n }\r\n }\r\n if (!requestController.signal.aborted)\r\n send(response, 200, {\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n result: {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: JSON.stringify(replay.result ?? replay.error ?? null),\r\n },\r\n ],\r\n isError: !replay.ok,\r\n provenanceDigest: replay.provenanceDigest,\r\n },\r\n });\r\n return;\r\n }\r\n }\r\n let upstreamResponse: { result?: unknown; error?: string } | undefined;\r\n let authority: McpAuthorityDecision | undefined;\r\n const requestCancelled = new Promise<{\r\n result?: unknown;\r\n error?: string;\r\n }>((resolve) =>\r\n request.once(\"aborted\", () =>\r\n resolve({ error: \"MCP_REQUEST_CANCELLED\" }),\r\n ),\r\n );\r\n const transport: McpTransport = {\r\n call: async (input) => {\r\n upstreamResponse = await Promise.race([\r\n options.transport.call({\r\n ...input,\r\n signal: input.signal ?? requestController.signal,\r\n }),\r\n requestCancelled,\r\n ]);\r\n return upstreamResponse;\r\n },\r\n };\r\n const result = await handleMcpJsonRpc({\r\n request: body,\r\n server: options.serverName,\r\n tools: options.tools,\r\n resources: options.resources,\r\n prompts: options.prompts,\r\n readResource: options.readResource,\r\n getPrompt: options.getPrompt,\r\n invocation: requestInvocation,\r\n transport,\r\n cancellationRegistry,\r\n authorize: async (input) => {\r\n authority =\r\n (await options.authorize?.(input)) ??\r\n (input.definition.effectful\r\n ? {\r\n allowed: false,\r\n decisionDigest: \"\",\r\n reason: \"MCP_AUTHORITY_REQUIRED\",\r\n }\r\n : { allowed: true, decisionDigest: \"read-only\" });\r\n return authority;\r\n },\r\n });\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const tool = String(body.params?.name ?? \"\");\r\n await persistVerifiedMcpResult(options.provenanceRepository,\r\n createMcpResultFromResponse({\r\n invocation: {\r\n ...requestInvocation,\r\n server: options.serverName,\r\n tool,\r\n arguments: (body.params?.arguments ?? {}) as Record<\r\n string,\r\n unknown\r\n >,\r\n },\r\n response: upstreamResponse ?? {\r\n error: authority?.reason ?? \"MCP_AUTHORITY_DENIED\",\r\n },\r\n authority,\r\n }),\r\n );\r\n }\r\n if (!requestController.signal.aborted) send(response, 200, result);\r\n } catch {\r\n if (!requestController.signal.aborted)\r\n send(response, 400, {\r\n jsonrpc: \"2.0\",\r\n id: null,\r\n error: { code: -32600, message: \"INVALID_MCP_REQUEST\" },\r\n });\r\n } finally {\r\n request.removeListener(\"aborted\", onAborted);\r\n }\r\n });\r\n}\r\nexport function createMcpStdioServer(\r\n options: McpServerOptions,\r\n input: NodeJS.ReadableStream = process.stdin,\r\n output = process.stdout,\r\n) {\r\n const cancellationRegistry =\r\n options.cancellationRegistry ?? createMcpCancellationRegistry();\r\n const lines = createInterface({\r\n input: input as Readable,\r\n crlfDelay: Infinity,\r\n });\r\n let closed = false;\r\n const write = (body: unknown) => {\r\n if (!closed) output.write(`${JSON.stringify(body)}\\n`);\r\n };\r\n const processLine = async (line: string) => {\r\n if (!line.trim()) return;\r\n let body: {\r\n jsonrpc: \"2.0\";\r\n id?: string | number;\r\n method: string;\r\n params?: Record<string, unknown>;\r\n };\r\n try {\r\n body = JSON.parse(line) as typeof body;\r\n } catch {\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: null,\r\n error: { code: -32700, message: \"PARSE_ERROR\" },\r\n });\r\n return;\r\n }\r\n const token = requestToken(body.id);\r\n const requestInvocation = {\r\n ...options.invocation,\r\n id: `${options.invocation.id}:${token}`,\r\n receiptId: `${options.invocation.receiptId}:${token}`,\r\n idempotencyKey: `${options.invocation.idempotencyKey}:${token}`,\r\n };\r\n const scope = {\r\n organizationId: requestInvocation.organizationId,\r\n projectId: requestInvocation.projectId,\r\n environmentId: requestInvocation.environmentId,\r\n };\r\n try {\r\n await assertConfiguredSession(options, options.sessionId, scope);\r\n } catch {\r\n if (body.id !== undefined)\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n error: { code: -32001, message: \"MCP_SESSION_NOT_ACTIVE\" },\r\n });\r\n return;\r\n }\r\n if (options.invocationExecutor && body.method === \"tools/call\") {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition) {\r\n const invocation = {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>};\r\n const authority = definition.effectful ? (await options.authorize?.({invocation, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"} : {allowed: true, decisionDigest: \"read-only\"};\r\n if (authority.allowed) {\r\n const result = await options.invocationExecutor({invocation, authority});\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, result: {content: [{type: \"text\", text: JSON.stringify(result.result ?? result.error ?? null)}], isError: !result.ok, provenanceDigest: result.provenanceDigest}});\r\n return;\r\n }\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}});\r\n return;\r\n }\r\n }\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const replay = await claimInvocation(\r\n options.provenanceRepository,\r\n requestInvocation,\r\n scope,\r\n );\r\n if (replay) {\r\n const definition = options.tools.find((item) => item.name === String(body.params?.name ?? \"\"));\r\n if (definition?.effectful) {\r\n const authority = (await options.authorize?.({invocation: {...requestInvocation, server: options.serverName, tool: definition.name, arguments: (body.params?.arguments ?? {}) as Record<string, unknown>}, definition})) ?? {allowed: false, decisionDigest: \"\", reason: \"MCP_AUTHORITY_REQUIRED\"};\r\n if (!authority.allowed) { write({jsonrpc: \"2.0\", id: body.id, error: {code: -32003, message: authority.reason ?? \"MCP_AUTHORITY_DENIED\", data: {decisionDigest: authority.decisionDigest}}}); return; }\r\n }\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n result: {\r\n content: [\r\n {\r\n type: \"text\",\r\n text: JSON.stringify(replay.result ?? replay.error ?? null),\r\n },\r\n ],\r\n isError: !replay.ok,\r\n provenanceDigest: replay.provenanceDigest,\r\n },\r\n });\r\n return;\r\n }\r\n }\r\n let upstreamResponse: { result?: unknown; error?: string } | undefined;\r\n let authority: McpAuthorityDecision | undefined;\r\n const transport: McpTransport = {\r\n call: async (value) => {\r\n upstreamResponse = await options.transport.call({\r\n ...value,\r\n signal: value.signal,\r\n });\r\n return upstreamResponse;\r\n },\r\n };\r\n try {\r\n if (body.method === \"server/discover\") {\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, result: {supportedProtocolVersions: [\"2026-07-28\", \"2025-11-25\", \"2025-03-26\"], serverInfo: {name: options.serverName, version: \"1.0.0\"}, capabilities: {tools: {}, resources: options.resources ? {} : undefined, prompts: options.prompts ? {} : undefined}}});\r\n return;\r\n }\r\n if (body.method === \"initialize\") {\r\n const requested = String(body.params?.protocolVersion ?? \"\");\r\n const protocolVersion = [\"2026-07-28\", \"2025-11-25\", \"2025-03-26\"].includes(requested) ? requested : \"2025-03-26\";\r\n if (body.id !== undefined) write({jsonrpc: \"2.0\", id: body.id, result: {protocolVersion, serverInfo: {name: options.serverName, version: \"1.0.0\"}, capabilities: {tools: {}, resources: options.resources ? {} : undefined, prompts: options.prompts ? {} : undefined}}});\r\n return;\r\n }\r\n const result = await handleMcpJsonRpc({\r\n request: body,\r\n server: options.serverName,\r\n tools: options.tools,\r\n resources: options.resources,\r\n prompts: options.prompts,\r\n readResource: options.readResource,\r\n getPrompt: options.getPrompt,\r\n invocation: requestInvocation,\r\n transport,\r\n cancellationRegistry,\r\n authorize: async (value) => {\r\n authority =\r\n (await options.authorize?.(value)) ??\r\n (value.definition.effectful\r\n ? {\r\n allowed: false,\r\n decisionDigest: \"\",\r\n reason: \"MCP_AUTHORITY_REQUIRED\",\r\n }\r\n : { allowed: true, decisionDigest: \"read-only\" });\r\n return authority;\r\n },\r\n });\r\n if (options.provenanceRepository && body.method === \"tools/call\") {\r\n const tool = String(body.params?.name ?? \"\");\r\n await persistVerifiedMcpResult(options.provenanceRepository,\r\n createMcpResultFromResponse({\r\n invocation: {\r\n ...requestInvocation,\r\n server: options.serverName,\r\n tool,\r\n arguments: (body.params?.arguments ?? {}) as Record<\r\n string,\r\n unknown\r\n >,\r\n },\r\n response: upstreamResponse ?? {\r\n error: authority?.reason ?? \"MCP_AUTHORITY_DENIED\",\r\n },\r\n authority,\r\n }),\r\n );\r\n }\r\n if (result !== null) write(result);\r\n } catch {\r\n if (body.id !== undefined)\r\n write({\r\n jsonrpc: \"2.0\",\r\n id: body.id,\r\n error: { code: -32600, message: \"INVALID_MCP_REQUEST\" },\r\n });\r\n }\r\n };\r\n lines.on(\"line\", (line) => {\r\n void processLine(line);\r\n });\r\n return {\r\n close: () => {\r\n closed = true;\r\n lines.close();\r\n },\r\n };\r\n}\r\nfunction send(response: ServerResponse, status: number, body: unknown): void {\r\n response.writeHead(status, {\r\n \"content-type\": \"application/json; charset=utf-8\",\r\n \"cache-control\": \"no-store\",\r\n });\r\n response.end(JSON.stringify(body));\r\n}\r\nfunction readBody(request: IncomingMessage, limit: number): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n let size = 0;\r\n const chunks: Buffer[] = [];\r\n request.on(\"data\", (chunk: Buffer) => {\r\n size += chunk.length;\r\n if (size > limit) {\r\n reject(new Error(\"PAYLOAD_TOO_LARGE\"));\r\n return;\r\n }\r\n chunks.push(chunk);\r\n });\r\n request.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf8\")));\r\n request.on(\"error\", reject);\r\n });\r\n}\r\n", "import {invokeMcpTool, verifyMcpResult, type McpAuthorityDecision, type McpInvocation, type McpResult, type McpTransport} from './mcp-gateway.ts';\r\nimport {createHash} from 'node:crypto';\r\nimport {canonicalMcpJson} from './mcp-gateway.ts';\r\n\r\nexport interface McpInvocationStore {\r\n claim(input: {invocationId:string;idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}): {status:'CLAIMED'|'REPLAY'|'IN_FLIGHT'; result?:McpResult} | Promise<{status:'CLAIMED'|'REPLAY'|'IN_FLIGHT'; result?:McpResult}>;\r\n save(result:McpResult):McpResult | Promise<McpResult>;\r\n releaseClaim?(input:{idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void | Promise<void>;\r\n}\r\n\r\nexport type McpInvocationObservation = {result:McpResult; replay:boolean; durationMs:number};\r\n\r\nfunction assertReplayIdentity(invocation:McpInvocation, authority:McpAuthorityDecision|undefined, result:McpResult):void {\r\n const argumentsDigest=createHash('sha256').update(canonicalMcpJson(invocation.arguments)).digest('hex');\r\n const expectedAuthorityDecisionDigest=authority?.decisionDigest ?? 'not-required';\r\n if(result.organizationId!==invocation.organizationId||result.projectId!==invocation.projectId||result.environmentId!==invocation.environmentId||result.server!==invocation.server||result.tool!==invocation.tool||result.receiptId!==invocation.receiptId||result.idempotencyKey!==invocation.idempotencyKey||result.argumentsDigest!==argumentsDigest||result.authorityDecisionDigest!==expectedAuthorityDecisionDigest||result.authorityDigest!==(invocation.authorityDigest??null)) throw new Error('MCP_INVOCATION_REPLAY_MISMATCH');\r\n}\r\n\r\n/** The only application boundary for effectful MCP invocation persistence. */\r\nexport async function executeMcpInvocation(input:{\r\n invocation:McpInvocation;\r\n transport:McpTransport;\r\n store:McpInvocationStore;\r\n authority?:McpAuthorityDecision;\r\n signal?:AbortSignal;\r\n observe?:(observation:McpInvocationObservation)=>void|Promise<void>;\r\n}):Promise<McpResult>{\r\n const started=Date.now();\r\n const claim=await input.store.claim({invocationId:input.invocation.id,idempotencyKey:input.invocation.idempotencyKey,organizationId:input.invocation.organizationId,projectId:input.invocation.projectId,environmentId:input.invocation.environmentId});\r\n if(claim.status==='REPLAY'&&claim.result){\r\n verifyMcpResult(claim.result);\r\n assertReplayIdentity(input.invocation,input.authority,claim.result);\r\n await input.observe?.({result:claim.result,replay:true,durationMs:Date.now()-started});\r\n return claim.result;\r\n }\r\n if(claim.status==='IN_FLIGHT') throw new Error('MCP_INVOCATION_IN_FLIGHT');\r\n try {\r\n const result=await invokeMcpTool({invocation:input.invocation,transport:input.transport,authority:input.authority,signal:input.signal});\r\n const persisted=await input.store.save(result);\r\n verifyMcpResult(persisted);\r\n await input.observe?.({result:persisted,replay:false,durationMs:Date.now()-started});\r\n return persisted;\r\n } catch(error) {\r\n if (input.signal?.aborted) await input.store.releaseClaim?.({idempotencyKey:input.invocation.idempotencyKey,organizationId:input.invocation.organizationId,projectId:input.invocation.projectId,environmentId:input.invocation.environmentId});\r\n throw error;\r\n }\r\n}\r\n", "import {verifyMcpResult} from \"../../runtime/src/mcp-provenance.ts\";\r\nimport type {McpResult} from \"../../runtime/src/mcp-gateway.ts\";\r\nimport {assertComposedScopeIntegrity, type ComposedScope} from '../../domain/src/scope-composer.ts';\r\nexport type McpClaim = {\r\n status: \"CLAIMED\" | \"REPLAY\" | \"IN_FLIGHT\";\r\n result?: McpResult;\r\n};\r\nconst assertClaimInput=(input:{invocationId:string;idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void=>{if(!input.invocationId?.trim()||!input.idempotencyKey?.trim()||!input.organizationId?.trim()||!input.projectId?.trim()||!input.environmentId?.trim())throw new Error('MCP_CLAIM_INPUT_INVALID');};\r\nexport class McpProvenanceRepository {\r\n #items = new Map<string, McpResult>();\r\n #claims = new Set<string>();\r\n claim(input: {\r\n invocationId: string;\r\n idempotencyKey: string;\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n }): McpClaim {\r\n assertClaimInput(input);\r\n const replay = this.getByIdempotencyKey(input.idempotencyKey, input);\r\n if (replay) return { status: \"REPLAY\", result: replay };\r\n const key = `${input.organizationId}:${input.projectId}:${input.environmentId}:${input.idempotencyKey}`;\r\n if (this.#claims.has(key)) return { status: \"IN_FLIGHT\" };\r\n this.#claims.add(key);\r\n return { status: \"CLAIMED\" };\r\n }\r\n save(result: McpResult): McpResult {\r\n verifyMcpResult(result);\r\n const prior = this.#items.get(result.invocationId);\r\n const byKey = this.getByIdempotencyKey(result.idempotencyKey, result);\r\n if (\r\n (prior && prior.provenanceDigest !== result.provenanceDigest) ||\r\n (byKey && byKey.provenanceDigest !== result.provenanceDigest)\r\n )\r\n throw new Error(\"MCP_PROVENANCE_CONFLICT\");\r\n this.#items.set(result.invocationId, structuredClone(result));\r\n this.#claims.delete(\r\n `${result.organizationId}:${result.projectId}:${result.environmentId}:${result.idempotencyKey}`,\r\n );\r\n return structuredClone(prior ?? byKey ?? result);\r\n }\r\n releaseClaim(input:{idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void { assertClaimInput({...input,invocationId:'release-claim'}); this.#claims.delete(`${input.organizationId}:${input.projectId}:${input.environmentId}:${input.idempotencyKey}`); }\r\n saveComposed(scope: ComposedScope, result: McpResult): McpResult { assertComposedScopeIntegrity(scope); const projected={organizationId:scope.chain.find(item=>item.level==='organization')?.id??'',projectId:scope.chain.find(item=>item.level==='project')?.id??'',environmentId:scope.chain.find(item=>item.level==='application')?.id??''}; if(result.organizationId!==projected.organizationId||result.projectId!==projected.projectId||result.environmentId!==projected.environmentId) throw new Error('MCP_SCOPE_MISMATCH'); if(result.authorityDigest!==scope.compositionDigest) throw new Error('MCP_AUTHORITY_MISMATCH'); return this.save(result); }\r\n get(invocationId: string): McpResult | null {\r\n const result = this.#items.get(invocationId);\r\n if (!result) return null;\r\n verifyMcpResult(result);\r\n return structuredClone(result);\r\n }\r\n getByIdempotencyKey(\r\n key: string,\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n ): McpResult | null {\r\n const result = [...this.#items.values()].find(\r\n (item) =>\r\n item.idempotencyKey === key &&\r\n item.organizationId === scope.organizationId &&\r\n item.projectId === scope.projectId &&\r\n item.environmentId === scope.environmentId,\r\n );\r\n if (!result) return null;\r\n verifyMcpResult(result);\r\n return structuredClone(result);\r\n }\r\n list(scope:{organizationId:string;projectId:string;environmentId:string}, limit=100):McpResult[]{return [...this.#items.values()].filter(item=>item.organizationId===scope.organizationId&&item.projectId===scope.projectId&&item.environmentId===scope.environmentId).slice(0,Math.max(0,Math.min(500,limit))).map(item=>{verifyMcpResult(item);return structuredClone(item);});}\r\n}\r\nexport interface McpProvenanceDb {\r\n exec(sql: string, params: unknown[]): { values: unknown[][] }[];\r\n run(sql: string, params: unknown[]): void;\r\n}\r\nexport class SqlMcpProvenanceRepository {\r\n private readonly db: McpProvenanceDb;\r\n constructor(db: McpProvenanceDb) {\r\n this.db = db;\r\n this.db.run(\r\n \"CREATE TABLE IF NOT EXISTS mcp_invocation_claims (organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, invocation_id TEXT NOT NULL, claimed_at TEXT NOT NULL, PRIMARY KEY (organization_id, project_id, environment_id, idempotency_key))\",\r\n [],\r\n );\r\n }\r\n releaseClaim(input:{idempotencyKey:string;organizationId:string;projectId:string;environmentId:string}):void { assertClaimInput({...input,invocationId:'release-claim'}); this.db.run('DELETE FROM mcp_invocation_claims WHERE organization_id=? AND project_id=? AND environment_id=? AND idempotency_key=?',[input.organizationId,input.projectId,input.environmentId,input.idempotencyKey]); }\r\n claim(input: {\r\n invocationId: string;\r\n idempotencyKey: string;\r\n organizationId: string;\r\n projectId: string;\r\n environmentId: string;\r\n }): McpClaim {\r\n assertClaimInput(input);\r\n const replay = this.getByIdempotencyKey(input.idempotencyKey, input);\r\n if (replay) return { status: \"REPLAY\", result: replay };\r\n try {\r\n this.db.run(\r\n \"INSERT INTO mcp_invocation_claims (organization_id, project_id, environment_id, idempotency_key, invocation_id, claimed_at) VALUES (?, ?, ?, ?, ?, ?)\",\r\n [\r\n input.organizationId,\r\n input.projectId,\r\n input.environmentId,\r\n input.idempotencyKey,\r\n input.invocationId,\r\n new Date().toISOString(),\r\n ],\r\n );\r\n return { status: \"CLAIMED\" };\r\n } catch {\r\n const after = this.getByIdempotencyKey(input.idempotencyKey, input);\r\n return after\r\n ? { status: \"REPLAY\", result: after }\r\n : { status: \"IN_FLIGHT\" };\r\n }\r\n }\r\n save(result: McpResult): McpResult {\r\n verifyMcpResult(result);\r\n const prior = this.getForScope(result, result.invocationId);\r\n const byKey = this.getByIdempotencyKey(result.idempotencyKey, result);\r\n const existing = prior ?? byKey;\r\n if (existing) {\r\n if (existing.provenanceDigest !== result.provenanceDigest)\r\n throw new Error(\"MCP_PROVENANCE_CONFLICT\");\r\n return existing;\r\n }\r\n this.db.run(\r\n \"DELETE FROM mcp_invocation_claims WHERE organization_id=? AND project_id=? AND environment_id=? AND idempotency_key=?\",\r\n [\r\n result.organizationId,\r\n result.projectId,\r\n result.environmentId,\r\n result.idempotencyKey,\r\n ],\r\n );\r\n this.db.run(\r\n \"INSERT INTO mcp_invocation_provenance (invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\",\r\n [\r\n result.invocationId,\r\n result.organizationId,\r\n result.projectId,\r\n result.environmentId,\r\n result.server,\r\n result.tool,\r\n result.receiptId,\r\n result.idempotencyKey,\r\n result.argumentsDigest,\r\n result.ok ? 1 : 0,\r\n result.result === undefined ? null : JSON.stringify(result.result),\r\n result.error ?? null,\r\n result.authorityDecisionDigest,\r\n result.authorityDigest ?? null,\r\n result.provenanceDigest,\r\n ],\r\n );\r\n const persisted=this.getForScope(result,result.invocationId);\r\n if(!persisted||persisted.provenanceDigest!==result.provenanceDigest||persisted.receiptId!==result.receiptId||persisted.argumentsDigest!==result.argumentsDigest||persisted.authorityDecisionDigest!==result.authorityDecisionDigest||persisted.authorityDigest!==result.authorityDigest) throw new Error('MCP_PROVENANCE_READBACK_MISMATCH');\r\n return persisted;\r\n }\r\n saveComposed(scope: ComposedScope, result: McpResult): McpResult { assertComposedScopeIntegrity(scope); const projected={organizationId:scope.chain.find(item=>item.level==='organization')?.id??'',projectId:scope.chain.find(item=>item.level==='project')?.id??'',environmentId:scope.chain.find(item=>item.level==='application')?.id??''}; if(result.organizationId!==projected.organizationId||result.projectId!==projected.projectId||result.environmentId!==projected.environmentId) throw new Error('MCP_SCOPE_MISMATCH'); if(result.authorityDigest!==scope.compositionDigest) throw new Error('MCP_AUTHORITY_MISMATCH'); return this.save(result); }\r\n get(invocationId: string): McpResult | null {\r\n const row = this.db.exec(\r\n \"SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE invocation_id = ?\",\r\n [invocationId],\r\n )[0]?.values[0];\r\n return row ? this.fromRow(row) : null;\r\n }\r\n getByIdempotencyKey(\r\n key: string,\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n ): McpResult | null {\r\n const row = this.db.exec(\r\n \"SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE idempotency_key = ? AND organization_id = ? AND project_id = ? AND environment_id = ?\",\r\n [key, scope.organizationId, scope.projectId, scope.environmentId],\r\n )[0]?.values[0];\r\n return row ? this.fromRow(row) : null;\r\n }\r\n getForScope(\r\n scope: { organizationId: string; projectId: string; environmentId: string },\r\n invocationId: string,\r\n ): McpResult | null {\r\n const row = this.db.exec(\r\n \"SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE invocation_id = ? AND organization_id = ? AND project_id = ? AND environment_id = ?\",\r\n [\r\n invocationId,\r\n scope.organizationId,\r\n scope.projectId,\r\n scope.environmentId,\r\n ],\r\n )[0]?.values[0];\r\n return row ? this.fromRow(row) : null;\r\n }\r\n list(scope:{organizationId:string;projectId:string;environmentId:string}, limit=100):McpResult[]{const bounded=Math.max(0,Math.min(500,limit));const rows=this.db.exec('SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance WHERE organization_id=? AND project_id=? AND environment_id=? ORDER BY invocation_id DESC LIMIT ?',[scope.organizationId,scope.projectId,scope.environmentId,bounded])[0]?.values??[];return rows.map(row=>this.fromRow(row));}\r\n private fromRow(row: unknown[]): McpResult {\r\n const result: McpResult = {\r\n invocationId: String(row[0]),\r\n organizationId: String(row[1]),\r\n projectId: String(row[2]),\r\n environmentId: String(row[3]),\r\n server: String(row[4]),\r\n tool: String(row[5]),\r\n receiptId: String(row[6]),\r\n idempotencyKey: String(row[7]),\r\n argumentsDigest: String(row[8]),\r\n ok: Number(row[9]) === 1,\r\n result:\r\n row[10] === null || row[10] === undefined\r\n ? undefined\r\n : JSON.parse(String(row[10])),\r\n error:\r\n row[11] === null || row[11] === undefined ? undefined : String(row[11]),\r\n authorityDecisionDigest: String(row[12]),\r\n authorityDigest: row[13] === null || row[13] === undefined ? null : String(row[13]),\r\n provenanceDigest: String(row[14]),\r\n };\r\n verifyMcpResult(result);\r\n return result;\r\n }\r\n}\r\n", "import {createMcpServer, type McpServerOptions} from './server.ts';\r\nimport type {McpToolDefinition} from '../../packages/runtime/src/mcp-gateway.ts';\r\nimport {executeMcpInvocation} from '../../packages/runtime/src/mcp-invocation-service.ts';\r\nimport {McpProvenanceRepository} from '../../packages/database/src/mcp-provenance-repository.ts';\r\n\r\nexport interface ViraMcpConfig {baseUrl:string; apiKey:string; fetcher?:typeof fetch; serverName?:string; requestAuthToken?:string; authorityUrl?:string; scope:{organizationId:string;projectId:string;environmentId:string}; authorizeEffectful?: (input:{tool:string;arguments:Record<string,unknown>;scope:{organizationId:string;projectId:string;environmentId:string}})=>{allowed:boolean;decisionDigest:string;reason?:string}|Promise<{allowed:boolean;decisionDigest:string;reason?:string}>; provenanceRepository?: McpServerOptions['provenanceRepository']; sessionRepository?: McpServerOptions['sessionRepository']; sessionId?: string; invocationExecutor?: McpServerOptions['invocationExecutor'];}\r\n\r\nexport function resolveViraMcpConfig(environment:NodeJS.ProcessEnv=process.env):Omit<ViraMcpConfig,'scope'> {\r\n const baseUrl=(environment.VIRA_API_URL??'http://127.0.0.1:4185').replace(/\\/$/,'');\r\n const apiKey=environment.VIRA_API_KEY??(environment.NODE_ENV==='production'?'':'vira_dev_local.local-development-only-32chars');\r\n if(!apiKey) throw new Error('VIRA_API_KEY_REQUIRED_IN_PRODUCTION');\r\n const authorityUrl=environment.VIRA_MCP_AUTHORITY_URL;\r\n return {baseUrl,apiKey,authorityUrl,serverName:environment.VIRA_MCP_SERVER_NAME??'vira-behavior-control',requestAuthToken:environment.VIRA_MCP_AUTH_TOKEN,...(authorityUrl?{authorizeEffectful:async(input:{tool:string;arguments:Record<string,unknown>;scope:{organizationId:string;projectId:string;environmentId:string}})=>{const response=await fetch(`${authorityUrl}`,{method:'POST',headers:{authorization:`Bearer ${apiKey}`,'content-type':'application/json'},body:JSON.stringify(input)});const payload=await response.json().catch(()=>null) as {allowed?:boolean;decisionDigest?:string;reason?:string}|null;return {allowed:response.ok&&payload?.allowed===true,decisionDigest:payload?.decisionDigest??'',...(payload?.reason?{reason:payload.reason}:{})};}}:{})};\r\n}\r\n\r\nconst tools:readonly McpToolDefinition[] = Object.freeze([\r\n {name:'resolve_semantic',description:'Resolve input through the governed semantic runtime.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},input:{type:'string'},sessionId:{type:'string'},profile:{type:'object'},selection:{type:'object'},candidates:{type:'array'},timeoutMs:{type:'number'}},required:['organizationId','projectId','environmentId','input']}},\r\n {name:'resolve_runtime',description:'Resolve a persisted BehaviorPoint through the governed runtime boundary. behaviorPoint may be omitted when semanticContext supplies the selected canonical route.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},behaviorPoint:{type:'string'},executionBoundary:{type:'object'},semanticContext:{type:'object'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'create_signal_discovery_proposal',description:'Propose a discovered signal for scoped human review.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},signalStableKey:{type:'string'},evidenceEventIds:{type:'array',items:{type:'string'}},suggestedProducerType:{type:'string'},suggestedProducerKey:{type:'string'},confidence:{type:'number'}},required:['organizationId','projectId','environmentId','signalStableKey','evidenceEventIds']}},\r\n {name:'review_signal_discovery_proposal',description:'Approve or reject a discovered signal proposal.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},proposalId:{type:'string'},decision:{type:'string'}},required:['organizationId','projectId','environmentId','proposalId','decision']}},\r\n {name:'materialize_signal_discovery',description:'Materialize an approved signal into a definition and producer mapping.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},proposalId:{type:'string'},valueType:{type:'string'},description:{type:'string'}},required:['organizationId','projectId','environmentId','proposalId']}},\r\n {name:'create_signal_mapping',description:'Create a scoped signal producer mapping proposal.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},signalStableKey:{type:'string'},signalVersion:{type:'number'},producerType:{type:'string'},producerKey:{type:'string'},sourceEventType:{type:'string'},evidenceEventIds:{type:'array',items:{type:'string'}}},required:['organizationId','projectId','environmentId','signalStableKey','signalVersion','producerType','producerKey']}},\r\n {name:'get_signal_mapping',description:'Read one scoped signal producer mapping.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},mappingId:{type:'string'}},required:['organizationId','projectId','environmentId','mappingId']}},\r\n {name:'review_signal_mapping',description:'Approve or reject a scoped signal producer mapping.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},mappingId:{type:'string'},decision:{type:'string'},eventId:{type:'string'},definition:{type:'object'},teachConsentRecord:{type:'object'}},required:['organizationId','projectId','environmentId','mappingId','decision']}},\r\n {name:'list_behavior_programs',description:'Read scoped canonical behavior programs.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'list_behavior_strategies',description:'Read persisted immutable Behavior Strategy revisions in the configured scope.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'get_behavior_strategy',description:'Read one persisted Behavior Strategy definition and artifact binding.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},strategyId:{type:'string'}},required:['organizationId','projectId','environmentId','strategyId']}},\r\n {name:'simulate_behavior_strategy',description:'Run the explicit structural dry-run for a persisted Behavior Strategy.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},strategyId:{type:'string'},initialState:{type:'object'}},required:['organizationId','projectId','environmentId','strategyId']}},\r\n {name:'start_strategy_execution',description:'Start a persisted Strategy execution through the governed runtime boundary.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},behaviorPoint:{type:'string'},executionBoundary:{type:'object'},revisionId:{type:'string'},idempotencyKey:{type:'string'},nonce:{type:'string'},expiresAt:{type:'number'},decisionPlanId:{type:'string'},candidates:{type:'array',items:{type:'object'}},policy:{type:'string'},allowedIds:{type:'array',items:{type:'string'}},calibrationId:{type:'string'},postModelJudge:{type:'object'},shadow:{type:'object'},artifactDigest:{type:'string'},traceId:{type:'string'},executionId:{type:'string'},state:{type:'object'}},required:['organizationId','projectId','environmentId','revisionId','idempotencyKey','nonce','expiresAt','decisionPlanId','candidates','policy','artifactDigest']}},\r\n {name:'get_strategy_execution',description:'Read one scoped Strategy execution.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'get_strategy_execution_trace',description:'Read persisted Strategy step receipts and trace evidence.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'continue_strategy_execution',description:'Continue a waiting Strategy execution with the same pinned artifact, state, and external references.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'},authorityDigest:{type:'string'},state:{type:'object',additionalProperties:true},references:{type:'object',additionalProperties:true}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'cancel_strategy_execution',description:'Cancel a non-terminal scoped Strategy execution.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},executionId:{type:'string'}},required:['organizationId','projectId','environmentId','executionId']}},\r\n {name:'list_ai_systems',description:'Read connected AI systems in the configured scope.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'list_discovery_candidates',description:'Read evidence-backed discovery candidates awaiting human review.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},reviewState:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'review_discovery_candidate',description:'Record a human review decision for a scoped discovery candidate.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},kind:{type:'string'},key:{type:'string'},decision:{type:'string'},payload:{type:'object'}},required:['organizationId','projectId','environmentId','kind','key','decision']}},\r\n {name:'create_observation',description:'Submit one scoped observation for discovery; it does not publish behavior.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},id:{type:'string'},content:{type:'object'},consent:{type:'boolean'}},required:['organizationId','projectId','environmentId','id','content','consent']}},\r\n {name:'start_evaluation',description:'Start a local evaluation for an existing artifact.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},id:{type:'string'},targetArtifact:{type:'string'},dataset:{type:'array'},assertions:{type:'array'}},required:['organizationId','projectId','environmentId','id','targetArtifact','dataset','assertions']}},\r\n {name:'compile_behavior_capsule',description:'Compile a persisted scoped Behavior VM capsule and return its receipt.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},programId:{type:'string'},input:{type:'string'},selection:{type:'object'},candidates:{type:'array'}},required:['organizationId','projectId','environmentId','programId','input']}},\r\n {name:'serve_behavior_projection',description:'Serve the active scoped behavior projection through the governed runtime boundary.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},programId:{type:'string'},input:{type:'string'},provider:{type:'string'},protocol:{type:'string'}},required:['organizationId','projectId','environmentId','input','provider']}},\r\n {name:'list_packs',description:'Read scoped behavior packs.',inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'}},required:['organizationId','projectId','environmentId']}},\r\n {name:'import_pack',description:'Import and validate a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},manifest:{type:'object'},objects:{type:'object'},archiveBase64:{type:'string'},fileName:{type:'string'}},required:['organizationId','projectId','environmentId','manifest']}},\r\n {name:'install_pack',description:'Install a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'},variables:{type:'object'}},required:['organizationId','projectId','environmentId','packId']}},\r\n {name:'evaluate_pack',description:'Evaluate a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'},passed:{type:'boolean'},score:{type:'number'},runId:{type:'string'}},required:['organizationId','projectId','environmentId','packId','passed']}},\r\n {name:'approve_pack',description:'Approve a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'}},required:['organizationId','projectId','environmentId','packId']}},\r\n {name:'release_pack',description:'Release a scoped behavior pack.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'}},required:['organizationId','projectId','environmentId','packId']}},\r\n {name:'preview_pack_upgrade',description:'Preview a scoped behavior pack upgrade.',effectful:true,inputSchema:{type:'object',properties:{organizationId:{type:'string'},projectId:{type:'string'},environmentId:{type:'string'},packId:{type:'string'},incoming:{type:'object'}},required:['organizationId','projectId','environmentId','packId','incoming']}},\r\n]);\r\n\r\nfunction assertScope(input:Record<string,unknown>,scope:ViraMcpConfig['scope']):void { for(const key of ['organizationId','projectId','environmentId'] as const) if(input[key]!==scope[key]) throw new Error('MCP_VIRA_SCOPE_MISMATCH'); }\r\nexport function createViraMcpServer(config:ViraMcpConfig) {\r\n return createMcpServer(createViraMcpOptions(config));\r\n}\r\nexport function createViraMcpOptions(config:ViraMcpConfig): McpServerOptions {\r\n if(!config.baseUrl?.trim()||!config.apiKey?.trim()) throw new Error('VIRA_MCP_CONFIG_REQUIRED');\r\n const fetcher=config.fetcher??fetch;\r\n const api=async(path:string,body:Record<string,unknown>|undefined,requestId:string)=>{const response=await fetcher(`${config.baseUrl.replace(/\\/$/,'')}${path}`,{method:body?'POST':'GET',headers:{authorization:`Bearer ${config.apiKey}`,'content-type':'application/json','idempotency-key':requestId},...(body?{body:JSON.stringify(body)}:{})}); const payload=await response.json().catch(()=>null); if(!response.ok) return {error:`VIRA_API_${response.status}`,result:payload}; return {result:payload};};\r\n const options:McpServerOptions={serverName:config.serverName??'vira-behavior-control',requestAuthToken:config.requestAuthToken,tools,invocation:{...config.scope,id:'mcp-vira',receiptId:'mcp-vira',idempotencyKey:'mcp-vira'},transport:{call:async({tool,arguments:args})=>{assertScope(args,config.scope); const scopeQuery=`organizationId=${encodeURIComponent(config.scope.organizationId)}&projectId=${encodeURIComponent(config.scope.projectId)}&environmentId=${encodeURIComponent(config.scope.environmentId)}`; if(tool==='list_behavior_programs') return api(`/v1/behavior-programs?projectId=${encodeURIComponent(config.scope.projectId)}&environmentId=${encodeURIComponent(config.scope.environmentId)}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='list_behavior_strategies') return api(`/v1/behavior-strategies?${scopeQuery}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='get_behavior_strategy') return api(`/v1/behavior-strategies/${encodeURIComponent(String(args.strategyId))}?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.strategyId)}`); if(tool==='simulate_behavior_strategy') return api(`/v1/behavior-strategies/${encodeURIComponent(String(args.strategyId))}/simulate?${scopeQuery}`,{initialState:args.initialState??{}},`mcp:${tool}:${String(args.strategyId)}`); if(tool==='start_strategy_execution') return api('/v1/runtime/strategy-executions',args,`mcp:${tool}:${String(args.executionId??args.artifactDigest)}`); if(tool==='get_strategy_execution') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.executionId)}`); if(tool==='get_strategy_execution_trace') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/trace?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.executionId)}`); if(tool==='continue_strategy_execution') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/continue`,args.authorityDigest?{authorityDigest:args.authorityDigest}: {},`mcp:${tool}:${String(args.executionId)}`); if(tool==='cancel_strategy_execution') return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/cancel`,{},`mcp:${tool}:${String(args.executionId)}`); if(tool==='list_ai_systems') return api(`/v1/ai-systems?${scopeQuery}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='list_discovery_candidates') return api(`/v1/discovery/candidates?${scopeQuery}${args.reviewState?`&reviewState=${encodeURIComponent(String(args.reviewState))}`:''}`,undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='review_discovery_candidate') return api(`/v1/discovery/candidates/${encodeURIComponent(String(args.kind))}/${encodeURIComponent(String(args.key))}/review`,{...args},`mcp:${tool}:${String(args.kind)}:${String(args.key)}`); if(tool==='create_observation') return api('/v1/observations',args,`mcp:${tool}:${String(args.id)}`); if(tool==='start_evaluation') return api('/v1/evaluations',args,`mcp:${tool}:${String(args.id)}`); if(tool==='compile_behavior_capsule') return api('/v1/runtime/behavior-capsule',args,`mcp:${tool}:${String(args.programId)}`); if(tool==='serve_behavior_projection') return api('/v1/runtime/behavior-projection',args,`mcp:${tool}:${String(args.programId??'active')}`); throw new Error('MCP_TOOL_NOT_IMPLEMENTED');}},authorize:({invocation,definition})=>definition.effectful ? (config.authorizeEffectful ? config.authorizeEffectful({tool:definition.name,arguments:invocation.arguments,scope:{organizationId:invocation.organizationId,projectId:invocation.projectId,environmentId:invocation.environmentId}}) : {allowed:false,decisionDigest:'',reason:'MCP_AUTHORITY_REQUIRED'}) : {allowed:true,decisionDigest:'read-only'}, ...(config.provenanceRepository ? {provenanceRepository:config.provenanceRepository} : {}), ...(config.sessionRepository ? {sessionRepository:config.sessionRepository} : {}), ...(config.sessionId ? {sessionId:config.sessionId} : {}), ...(config.invocationExecutor ? {invocationExecutor:config.invocationExecutor} : {})};\r\n const originalTransport=options.transport;\r\n const originalCall=originalTransport.call;\r\n options.transport={...originalTransport,call:async(input)=>{const {tool,arguments:args}=input; if(tool==='list_packs') return api('/v1/packs',undefined,`mcp:${tool}:${config.scope.projectId}`); if(tool==='import_pack') return api('/v1/packs/import',args,`mcp:${tool}:${config.scope.projectId}`); if(['install_pack','evaluate_pack','approve_pack','release_pack','preview_pack_upgrade'].includes(tool)){const action={install_pack:'install',evaluate_pack:'evaluate',approve_pack:'approve',release_pack:'release',preview_pack_upgrade:'upgrade-preview'}[tool]; const {packId,...body}=args; return api(`/v1/packs/${encodeURIComponent(String(packId))}/${action}`,body,`mcp:${tool}:${String(packId)}`);} return originalCall(input);}};\r\n originalTransport.call=options.transport.call;\r\n options.transport={...originalTransport,call:async(input)=>{if(input.tool==='resolve_semantic'||input.tool==='resolve_runtime') assertScope(input.arguments,config.scope); return input.tool==='resolve_semantic'?api('/v1/semantic/resolve',input.arguments,`mcp:resolve_semantic:${String(input.arguments.input)}`):input.tool==='resolve_runtime'?api('/v1/runtime/resolve',input.arguments,`mcp:resolve_runtime:${String(input.arguments.behaviorPoint)}`):originalTransport.call(input);}};\r\n const signalTransport=options.transport;\r\n options.transport={...signalTransport,call:async(input)=>{\r\n const {tool,arguments:args}=input;\r\n if(tool.startsWith('signal_') || tool==='create_signal_discovery_proposal' || tool==='review_signal_discovery_proposal' || tool==='materialize_signal_discovery' || tool==='create_signal_mapping' || tool==='get_signal_mapping' || tool==='review_signal_mapping') assertScope(args,config.scope);\r\n const scopeQuery=`organizationId=${encodeURIComponent(config.scope.organizationId)}&projectId=${encodeURIComponent(config.scope.projectId)}&environmentId=${encodeURIComponent(config.scope.environmentId)}`;\r\n if(tool==='create_signal_discovery_proposal') return api('/v1/signals/discovery-proposals',args,`mcp:${tool}:${String(args.signalStableKey)}`);\r\n if(tool==='review_signal_discovery_proposal') return api(`/v1/signals/discovery-proposals/${encodeURIComponent(String(args.proposalId))}/review`,{decision:args.decision},`mcp:${tool}:${String(args.proposalId)}`);\r\n if(tool==='materialize_signal_discovery'){const {proposalId,...body}=args;return api(`/v1/signals/discovery-proposals/${encodeURIComponent(String(proposalId))}/materialize`,body,`mcp:${tool}:${String(proposalId)}`);}\r\n if(tool==='create_signal_mapping') return api('/v1/signals/mappings',args,`mcp:${tool}:${String(args.signalStableKey)}`);\r\n if(tool==='get_signal_mapping') return api(`/v1/signals/mappings/${encodeURIComponent(String(args.mappingId))}?${scopeQuery}`,undefined,`mcp:${tool}:${String(args.mappingId)}`);\r\n if(tool==='review_signal_mapping'){const {mappingId,...body}=args;return api(`/v1/signals/mappings/${encodeURIComponent(String(mappingId))}/review`,body,`mcp:${tool}:${String(mappingId)}`);}\r\n return signalTransport.call(input);\r\n }};\r\n const continuationTransport=options.transport;\r\n options.transport={...continuationTransport,call:async(input)=>{\r\n if(input.tool==='continue_strategy_execution'){\r\n const args=input.arguments;\r\n const body={\r\n ...(typeof args.authorityDigest==='string'?{authorityDigest:args.authorityDigest}:{}),\r\n ...(args.state&&typeof args.state==='object'&&!Array.isArray(args.state)?{state:args.state}:{}),\r\n ...(args.references&&typeof args.references==='object'&&!Array.isArray(args.references)?{references:args.references}:{}),\r\n };\r\n return api(`/v1/runtime/strategy-executions/${encodeURIComponent(String(args.executionId))}/continue`,body,`mcp:${input.tool}:${String(args.executionId)}`);\r\n }\r\n return continuationTransport.call(input);\r\n }};\r\n const configuredRepository=config.provenanceRepository;\r\n if(configuredRepository && typeof configuredRepository.claim!=='function') throw new Error('MCP_PROVENANCE_CLAIM_REQUIRED');\r\n const provenanceRepository=(configuredRepository ?? new McpProvenanceRepository()) as Parameters<typeof executeMcpInvocation>[0]['store'];\r\n options.provenanceRepository=provenanceRepository;\r\n options.invocationExecutor ??= ({invocation,authority,signal})=>executeMcpInvocation({invocation,authority,signal,transport:options.transport,store:provenanceRepository});\r\n options.requireInvocationExecutor=true;\r\n return options;\r\n}\r\n", "import {assertMcpSession, type McpSession} from '../../runtime/src/mcp-session.ts';\r\ntype Scope={organizationId:string;projectId:string;environmentId:string};\r\nexport class McpSessionRepository {\r\n #items=new Map<string,McpSession>();\r\n save(session:McpSession):McpSession { assertMcpSession(session); const prior=this.#items.get(session.id); if(prior){if(prior.organizationId!==session.organizationId||prior.projectId!==session.projectId||prior.environmentId!==session.environmentId)throw new Error('MCP_SESSION_SCOPE_CONFLICT'); if(prior.sessionDigest===session.sessionDigest)return structuredClone(prior); if(session.generation<prior.generation||session.generation===prior.generation&&prior.status==='CLOSED')throw new Error('MCP_SESSION_CONFLICT');} this.#items.set(session.id,structuredClone(session)); return structuredClone(session); }\r\n get(id:string,scope:Scope):McpSession|null { const value=this.#items.get(id); if(!value||value.organizationId!==scope.organizationId||value.projectId!==scope.projectId||value.environmentId!==scope.environmentId)return null; assertMcpSession(value); return structuredClone(value); }\r\n}\r\nexport interface McpSessionDb {exec(sql:string,params:unknown[]):{values:unknown[][]}[];run(sql:string,params:unknown[]):void;}\r\nexport class SqlMcpSessionRepository {\r\n private readonly db:McpSessionDb;\r\n constructor(db:McpSessionDb){this.db=db;}\r\n save(session:McpSession):McpSession { assertMcpSession(session); const row=this.db.exec('SELECT id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest FROM mcp_sessions WHERE id=?',[session.id])[0]?.values[0]; if(row){const prior=this.mapRow(row); if(prior.organizationId!==session.organizationId||prior.projectId!==session.projectId||prior.environmentId!==session.environmentId)throw new Error('MCP_SESSION_SCOPE_CONFLICT'); if(prior.sessionDigest===session.sessionDigest)return prior; if(session.generation<prior.generation||session.generation===prior.generation&&prior.status==='CLOSED')throw new Error('MCP_SESSION_CONFLICT'); this.db.run('UPDATE mcp_sessions SET server=?,endpoint=?,protocol_version=?,status=?,auth_digest=?,generation=?,updated_at=?,session_digest=? WHERE id=? AND organization_id=? AND project_id=? AND environment_id=?',[session.server,session.endpoint,session.protocolVersion,session.status,session.authDigest,session.generation,session.updatedAt,session.sessionDigest,session.id,session.organizationId,session.projectId,session.environmentId]); const persisted=this.get(session.id,{organizationId:session.organizationId,projectId:session.projectId,environmentId:session.environmentId});if(!persisted||persisted.sessionDigest!==session.sessionDigest||persisted.generation!==session.generation||persisted.status!==session.status)throw new Error('MCP_SESSION_READBACK_MISMATCH');return persisted;} this.db.run('INSERT INTO mcp_sessions (id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)',[session.id,session.organizationId,session.projectId,session.environmentId,session.server,session.endpoint,session.protocolVersion,session.status,session.authDigest,session.generation,session.createdAt,session.updatedAt,session.sessionDigest]); const persisted=this.get(session.id,{organizationId:session.organizationId,projectId:session.projectId,environmentId:session.environmentId});if(!persisted||persisted.sessionDigest!==session.sessionDigest)throw new Error('MCP_SESSION_READBACK_MISMATCH');return persisted; }\r\n private mapRow(row:readonly unknown[]):McpSession { const session={id:String(row[0]),organizationId:String(row[1]),projectId:String(row[2]),environmentId:String(row[3]),server:String(row[4]),endpoint:String(row[5]),protocolVersion:String(row[6]),authDigest:String(row[8]),status:String(row[7]) as McpSession['status'],generation:Number(row[9]),createdAt:String(row[10]),updatedAt:String(row[11]),sessionDigest:String(row[12])}; assertMcpSession(session); return session; }\r\n get(id:string,scope:Scope):McpSession|null { const row=this.db.exec('SELECT id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest FROM mcp_sessions WHERE id=? AND organization_id=? AND project_id=? AND environment_id=?',[id,scope.organizationId,scope.projectId,scope.environmentId])[0]?.values[0]; return row ? this.mapRow(row) : null; }\r\n}\r\n", "import {McpServer} from '@modelcontextprotocol/server';\r\nimport {serveStdio} from '@modelcontextprotocol/server/stdio';\r\nimport {z} from 'zod';\r\nimport {type McpServerOptions} from './server.ts';\r\nimport {invokeMcpTool, type McpAuthorityDecision} from '../../packages/runtime/src/mcp-gateway.ts';\r\n\r\n/**\r\n * Official MCP transport boundary. Vira keeps its authority/provenance\r\n * implementation, while protocol negotiation, server/discover and stdio\r\n * framing are owned by the official MCP SDK.\r\n */\r\nexport function serveOfficialViraMcp(options:McpServerOptions) {\r\n return serveStdio(() => {\r\n const server=new McpServer({name:options.serverName,version:'1.0.0'},{capabilities:{tools:{},resources:options.resources?{}:undefined,prompts:options.prompts?{}:undefined}});\r\n for(const definition of options.tools){\r\n server.registerTool(definition.name,{description:definition.description,inputSchema:z.record(z.string(),z.unknown())},async (argumentsValue)=>{\r\n const invocation={...options.invocation,server:options.serverName,tool:definition.name,arguments:argumentsValue as Record<string,unknown>};\r\n const authority:McpAuthorityDecision=definition.effectful\r\n ? await options.authorize?.({invocation,definition}) ?? {allowed:false,decisionDigest:'',reason:'MCP_AUTHORITY_REQUIRED'}\r\n : {allowed:true,decisionDigest:'read-only'};\r\n if(!authority.allowed) return {isError:true,content:[{type:'text' as const,text:authority.reason??'MCP_AUTHORITY_DENIED'}]};\r\n const result=options.invocationExecutor\r\n ? await options.invocationExecutor({invocation,authority})\r\n : await invokeMcpTool({invocation,authority,transport:options.transport});\r\n return {isError:!result.ok,content:[{type:'text' as const,text:JSON.stringify(result.result??result.error??null)}]};\r\n });\r\n }\r\n return server;\r\n });\r\n}\r\n", "export type PostgresQueryResult<Row extends Record<string, unknown> = Record<string, unknown>> = {rows: Row[]; rowCount: number};\r\nexport type PostgresClient = {query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgresQueryResult<Row>>; release(): void};\r\nexport type PostgresPool = {query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgresQueryResult<Row>>; connect(): Promise<PostgresClient>};\r\nexport type PostgresDatabase = {mode: 'production'; query<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<PostgresQueryResult<Row>>; transaction<T>(work: (client: PostgresClient) => Promise<T>): Promise<T>; health(): {ready: true; mode: 'production'}};\r\nfunction validateSql(sql: string): void {if (!sql.trim()) throw new Error('POSTGRES_SQL_REQUIRED'); if (sql.includes('\\u0000')) throw new Error('POSTGRES_SQL_INVALID');}\r\nexport function createPostgresDatabase(input: {pool: PostgresPool; databaseUrl?: string}): PostgresDatabase {\r\n if (!input.pool || typeof input.pool.query !== 'function' || typeof input.pool.connect !== 'function') throw new Error('POSTGRES_POOL_INVALID');\r\n if (!input.databaseUrl?.trim() && !process.env.DATABASE_URL?.trim()) throw new Error('DATABASE_URL_REQUIRED');\r\n return {mode: 'production', query: async <Row extends Record<string, unknown>>(sql: string, params: readonly unknown[] = []) => {validateSql(sql); return input.pool.query<Row>(sql, params);}, transaction: async <T>(work: (client: PostgresClient) => Promise<T>) => {if (typeof work !== 'function') throw new Error('DATABASE_WORK_REQUIRED'); const client = await input.pool.connect(); try {await client.query('BEGIN'); const result = await work(client); await client.query('COMMIT'); return result;} catch (error) {try {await client.query('ROLLBACK');} catch {} throw error;} finally {client.release();}}, health: () => ({ready: true, mode: 'production'})};\r\n}\r\nexport function requirePostgresDatabase(input: {pool: PostgresPool; databaseUrl?: string}): PostgresDatabase {return createPostgresDatabase(input);}\r\nimport {Pool, type PoolConfig} from 'pg';\r\n\r\n\r\nexport function createPostgresPool(input: {databaseUrl?: string; max?: number; ssl?: boolean} = {}): {pool: PostgresPool; close: () => Promise<void>} {\r\n const connectionString = input.databaseUrl ?? process.env.DATABASE_URL;\r\n if (!connectionString?.startsWith('postgres')) throw new Error('POSTGRES_DATABASE_URL_REQUIRED');\r\n const config: PoolConfig = {connectionString, max: input.max ?? 10, idleTimeoutMillis: 30_000, connectionTimeoutMillis: 10_000, ...(input.ssl ? {ssl: {rejectUnauthorized: false}} : {})};\r\n const pool = new Pool(config);\r\n return {pool: pool as unknown as PostgresPool, close: () => pool.end()};\r\n}\r\n", "import type {PostgresClient} from './postgres-adapter.ts';\r\nimport {createHash} from 'node:crypto';\r\n\r\nexport type PostgresMigration = {id: string; sql: string; codeVersion?: string};\r\n\r\nfunction splitSql(sql: string): string[] {\r\n const statements: string[] = [];\r\n let start = 0;\r\n let quote: \"'\" | '\"' | '`' | null = null;\r\n let dollarQuote: string | null = null;\r\n let lineComment = false;\r\n let blockComment = false;\r\n for (let i = 0; i < sql.length; i += 1) {\r\n const ch = sql[i];\r\n const next = sql[i + 1];\r\n if (dollarQuote) { if (sql.startsWith(dollarQuote, i)) { i += dollarQuote.length - 1; dollarQuote = null; } continue; }\r\n if (lineComment) { if (ch === '\\n') lineComment = false; continue; }\r\n if (blockComment) { if (ch === '*' && next === '/') { blockComment = false; i += 1; } continue; }\r\n if (!quote && ch === '-' && next === '-') { lineComment = true; i += 1; continue; }\r\n if (!quote && ch === '/' && next === '*') { blockComment = true; i += 1; continue; }\r\n if (quote) {\r\n if (ch === quote && sql[i - 1] !== '\\\\') quote = null;\r\n continue;\r\n }\r\n if (ch === \"'\" || ch === '\"' || ch === '`') { quote = ch; continue; }\r\n if (ch === '$') {\r\n const match = sql.slice(i).match(/^\\$[A-Za-z_0-9]*\\$/);\r\n if (match) { dollarQuote = match[0]; i += match[0].length - 1; continue; }\r\n }\r\n if (ch === ';') {\r\n const statement = sql.slice(start, i).trim();\r\n if (statement) statements.push(statement);\r\n start = i + 1;\r\n }\r\n }\r\n const tail = sql.slice(start).trim();\r\n if (tail) statements.push(tail);\r\n return statements;\r\n}\r\n\r\nexport function normalizePostgresMigrationSql(sql: string): string {\r\n if (!sql.trim()) throw new Error('POSTGRES_MIGRATION_SQL_REQUIRED');\r\n // Migrations are DDL only. Parameter binding belongs to repository queries;\r\n // accepting SQLite '?' or PostgreSQL '$1' here would make the migration\r\n // runner silently reinterpret a caller's SQL.\r\n if (/\\bINSERT\\s+OR\\s+(?:REPLACE|IGNORE)\\b/i.test(sql)) throw new Error('POSTGRES_MIGRATION_CONFLICT_SEMANTICS_UNSUPPORTED');\r\n if (/[?]|\\$\\d+/.test(sql)) throw new Error('POSTGRES_MIGRATION_PARAMETERS_UNSUPPORTED');\r\n if (/\\bPRAGMA\\b/i.test(sql)) throw new Error('POSTGRES_MIGRATION_SQLITE_PRAGMA_UNSUPPORTED');\r\n // The foundation migration has two SQLite triggers for worker lease\r\n // bookkeeping. Replace those exact triggers with equivalent PostgreSQL\r\n // functions/triggers; any other trigger remains fail-closed.\r\n const hasWorkerLeaseTriggers = /CREATE\\s+TRIGGER\\s+worker_jobs_assign_default_lease/i.test(sql)\r\n || /CREATE\\s+TRIGGER\\s+worker_jobs_clear_lease/i.test(sql);\r\n if (/\\bCREATE\\s+TRIGGER\\b/i.test(sql) && !hasWorkerLeaseTriggers) throw new Error('POSTGRES_MIGRATION_SQLITE_TRIGGER_UNSUPPORTED');\r\n // SQLite's common INTEGER PRIMARY KEY AUTOINCREMENT idiom has a direct,\r\n // explicit PostgreSQL identity equivalent. Reject any other AUTOINCREMENT\r\n // spelling instead of sending invalid SQL to the server.\r\n const normalized = sql.replace(/\\bINTEGER\\s+PRIMARY\\s+KEY\\s+AUTOINCREMENT\\b/gi, 'BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY');\r\n if (/\\bAUTOINCREMENT\\b/i.test(normalized)) throw new Error('POSTGRES_MIGRATION_AUTOINCREMENT_UNSUPPORTED');\r\n const withoutWorkerTriggers = normalized\r\n .replace(/CREATE\\s+TRIGGER\\s+worker_jobs_assign_default_lease[\\s\\S]*?END\\s*;?/i, '')\r\n .replace(/CREATE\\s+TRIGGER\\s+worker_jobs_clear_lease[\\s\\S]*?END\\s*;?/i, '');\r\n if (/\\b(?:INSERT|UPDATE|DELETE|UPSERT)\\b/i.test(withoutWorkerTriggers)) throw new Error('POSTGRES_MIGRATION_DML_UNSUPPORTED');\r\n if (!hasWorkerLeaseTriggers) return withoutWorkerTriggers;\r\n return `${withoutWorkerTriggers}\r\nCREATE OR REPLACE FUNCTION worker_jobs_assign_default_lease_fn() RETURNS trigger LANGUAGE plpgsql AS $$\r\nBEGIN\r\n IF NEW.state = 'RUNNING' AND NEW.lease_owner IS NULL THEN\r\n NEW.lease_owner := 'worker-default';\r\n NEW.lease_expires_at := CURRENT_TIMESTAMP + INTERVAL '60 seconds';\r\n END IF;\r\n RETURN NEW;\r\nEND;\r\n$$;\r\nDROP TRIGGER IF EXISTS worker_jobs_assign_default_lease ON worker_jobs;\r\nCREATE TRIGGER worker_jobs_assign_default_lease BEFORE UPDATE OF state ON worker_jobs\r\nFOR EACH ROW EXECUTE FUNCTION worker_jobs_assign_default_lease_fn();\r\nCREATE OR REPLACE FUNCTION worker_jobs_clear_lease_fn() RETURNS trigger LANGUAGE plpgsql AS $$\r\nBEGIN\r\n IF NEW.state <> 'RUNNING' THEN\r\n NEW.lease_owner := NULL;\r\n NEW.lease_expires_at := NULL;\r\n END IF;\r\n RETURN NEW;\r\nEND;\r\n$$;\r\nDROP TRIGGER IF EXISTS worker_jobs_clear_lease ON worker_jobs;\r\nCREATE TRIGGER worker_jobs_clear_lease BEFORE UPDATE OF state ON worker_jobs\r\nFOR EACH ROW EXECUTE FUNCTION worker_jobs_clear_lease_fn();`;\r\n}\r\n\r\nexport async function applyPostgresMigrations(client: PostgresClient, migrations: readonly PostgresMigration[]): Promise<void> {\r\n if (!client || typeof client.query !== 'function') throw new Error('POSTGRES_CLIENT_INVALID');\r\n await client.query('BEGIN');\r\n try {\r\n // Acquire the cross-process lock before the first DDL statement. PostgreSQL\r\n // creates a relation type for CREATE TABLE, so two concurrent starters can\r\n // race even when the statement says IF NOT EXISTS.\r\n await client.query('SELECT pg_advisory_xact_lock(hashtext($1))', ['vira:schema:migrations']);\r\n await client.query(`CREATE TABLE IF NOT EXISTS vira_schema_migrations (\r\n id TEXT PRIMARY KEY,\r\n applied_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,\r\n checksum TEXT,\r\n code_version TEXT\r\n )`);\r\n await client.query('ALTER TABLE vira_schema_migrations ADD COLUMN IF NOT EXISTS checksum TEXT');\r\n await client.query('ALTER TABLE vira_schema_migrations ADD COLUMN IF NOT EXISTS code_version TEXT');\r\n const applied = await client.query<{id: string; checksum: string|null}>('SELECT id, checksum FROM vira_schema_migrations');\r\n const appliedIds = new Map(applied.rows.map((row) => [row.id, row.checksum]));\r\n for (const migration of migrations) {\r\n if (!migration.id.trim() || !migration.sql.trim()) throw new Error('POSTGRES_MIGRATION_INVALID');\r\n const checksum = createHash('sha256').update(normalizePostgresMigrationSql(migration.sql)).digest('hex');\r\n if (appliedIds.has(migration.id)) {\r\n const previous = appliedIds.get(migration.id);\r\n if (previous && previous !== checksum) throw new Error(`POSTGRES_MIGRATION_CHECKSUM_MISMATCH:${migration.id}`);\r\n if (!previous) await client.query('UPDATE vira_schema_migrations SET checksum=$1, code_version=$2 WHERE id=$3', [checksum, migration.codeVersion ?? process.env.VIRA_VERSION ?? null, migration.id]);\r\n continue;\r\n }\r\n for (const statement of splitSql(normalizePostgresMigrationSql(migration.sql))) await client.query(statement);\r\n await client.query('INSERT INTO vira_schema_migrations (id, checksum, code_version) VALUES ($1, $2, $3)', [migration.id, checksum, migration.codeVersion ?? process.env.VIRA_VERSION ?? null]);\r\n }\r\n await client.query('COMMIT');\r\n } catch (error) {\r\n try { await client.query('ROLLBACK'); } catch { /* preserve migration error */ }\r\n throw error;\r\n }\r\n}\r\n\r\nexport const splitPostgresMigrationSql = splitSql;\r\n", "import {readFile} from 'node:fs/promises';\r\nimport {dirname, resolve} from 'node:path';\r\nimport {fileURLToPath} from 'node:url';\r\nimport {createPostgresDatabase, createPostgresPool, type PostgresDatabase} from './postgres-adapter.ts';\r\nimport {applyPostgresMigrations, type PostgresMigration} from './postgres-migrations.ts';\r\n\r\nexport type OpenPostgresOptions = {databaseUrl?: string; migrationPaths?: readonly string[]; maxConnections?: number; ssl?: boolean};\r\nexport type PostgresRuntime = PostgresDatabase & {close(): Promise<void>};\r\n\r\nconst here = dirname(fileURLToPath(import.meta.url));\r\nconst defaultMigrationPaths = [\r\n resolve(here, '../migrations/001_vnext_foundation.sql'),\r\n resolve(here, '../migrations/002_session_handoff_approvals.sql'),\r\n resolve(here, '../migrations/003_mfa_totp.sql'),\r\n resolve(here, '../migrations/004_behavior_strategy_execution.sql'),\r\n resolve(here, '../migrations/005_postgres_runtime_completeness.sql'),\r\n resolve(here, '../migrations/007_postgres_native_support_repositories.sql'),\r\n resolve(here, '../migrations/008_postgres_identity_session_repositories.sql'),\r\n resolve(here, '../migrations/009_postgres_runtime_repair.sql'),\r\n resolve(here, '../migrations/010_postgres_receipt_lineage_repair.sql'),\r\n resolve(here, '../migrations/011_postgres_semantic_activation_receipts.sql'),\r\n resolve(here, '../migrations/012_strategy_release_lineage.sql'),\r\n resolve(here, '../migrations/013_strategy_variant_definition.sql'),\r\n resolve(here, '../migrations/014_strategy_step_recovery_action.sql'),\r\n resolve(here, '../migrations/015_strategy_total_recoveries.sql'),\r\n resolve(here, '../migrations/016_postgres_studio_tenant_auth.sql'),\r\n];\r\n\r\nexport async function openPostgresRuntime(options: OpenPostgresOptions = {}): Promise<PostgresRuntime> {\r\n const {pool, close} = createPostgresPool({databaseUrl: options.databaseUrl, max: options.maxConnections, ssl: options.ssl});\r\n const database = createPostgresDatabase({pool, databaseUrl: options.databaseUrl});\r\n try {\r\n const migrations: PostgresMigration[] = [];\r\n const migrationPaths = options.migrationPaths ?? [...defaultMigrationPaths, resolve(here, '../migrations/006_postgres_control_plane_repositories.sql')];\r\n for (const path of migrationPaths) migrations.push({id: path.split(/[\\\\/]/).pop()!.replace(/\\.sql$/i, ''), sql: await readFile(path, 'utf8')});\r\n const client = await pool.connect();\r\n try { await applyPostgresMigrations(client, migrations); } finally { client.release(); }\r\n return {...database, close};\r\n } catch (error) {\r\n await close();\r\n throw error;\r\n }\r\n}\r\n", "import { access, readFile, writeFile } from 'node:fs/promises';\r\nimport { existsSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from 'node:fs';\r\nimport { dirname, resolve } from 'node:path';\r\nimport { createRequire } from 'node:module';\r\nimport { fileURLToPath, pathToFileURL } from 'node:url';\r\n// sql.js ships runtime types through its package but its default export is CommonJS-shaped.\r\n// @ts-expect-error sql.js has no compatible declaration for the ESM default import.\r\nimport initSqlJs from 'sql.js';\r\nimport type { Database } from './runtime-adapter.ts';\r\n\r\ninterface SqlDatabase { run(sql: string, params?: unknown[]): unknown; exec(sql: string, params?: unknown[]): {columns: string[]; values: unknown[][]}[]; export(): Uint8Array; close(): void; }\r\ninterface SqlModule { Database: new (data?: Uint8Array) => SqlDatabase; }\r\ninterface ProductionOptions { databaseUrl?: string; }\r\nexport interface ProductionDatabase extends Database { mode: 'production'; exec(sql: string, params?: unknown[]): {columns: string[]; values: unknown[][]}[]; transaction<T>(work: (db: Database) => T | Promise<T>): Promise<T>; transactionSync<T>(work: (db: Database) => T): T; health(): {ready: true; mode: 'production'; storage: 'file'}; persist(): Promise<void>; reloadFromDisk(): Promise<void>; backup(destination: string): Promise<string>; close(): void; }\r\n\r\nconst root = dirname(fileURLToPath(import.meta.url));\r\nconst require = createRequire(import.meta.url);\r\nconst migrationCandidates = [\r\n resolve(root, '../migrations/001_vnext_foundation.sql'),\r\n resolve(root, 'migrations/001_vnext_foundation.sql'),\r\n];\r\nfunction ensureColumn(database: SqlDatabase, table: string, column: string, definition: string): void {\r\n try { database.run(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`); }\r\n catch (error) {\r\n const message = String(error);\r\n if (!message.includes('duplicate column name')) throw error;\r\n }\r\n}\r\n\r\nfunction reconcilePackSchema(database: SqlDatabase): void {\r\n // Existing local volumes may predate the current pack materializer. Keep the\r\n // canonical contract intact and add only additive, nullable/defaulted fields.\r\n database.run(`CREATE TABLE IF NOT EXISTS control_point_tasks (\r\n control_point_id TEXT NOT NULL, task_id TEXT NOT NULL,\r\n organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL,\r\n PRIMARY KEY (control_point_id, task_id)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS behavior_packs (\r\n id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, digest TEXT NOT NULL, status TEXT NOT NULL,\r\n payload_json TEXT NOT NULL, updated_at TEXT NOT NULL\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS execution_receipts (\r\n id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, revision_id TEXT NOT NULL, actor_id TEXT NOT NULL,\r\n idempotency_key TEXT NOT NULL, decision TEXT NOT NULL, reason TEXT NOT NULL,\r\n created_at TEXT NOT NULL,\r\n UNIQUE (organization_id, project_id, environment_id, idempotency_key)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS execution_receipt_authority (\r\n receipt_id TEXT PRIMARY KEY, authority_digest TEXT NOT NULL,\r\n FOREIGN KEY (receipt_id) REFERENCES execution_receipts(id)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS execution_receipt_semantic (\r\n receipt_id TEXT PRIMARY KEY, semantic_task_ref TEXT NOT NULL,\r\n semantic_task_version INTEGER NOT NULL, semantic_task_digest TEXT NOT NULL,\r\n FOREIGN KEY (receipt_id) REFERENCES execution_receipts(id)\r\n )`);\r\n // Existing local volumes may predate the runtime decision-plan migration.\r\n // Pack installation persists plans as part of the same authority chain, so\r\n // reconcile both tables before wiring the SQL repositories.\r\n database.run(`CREATE TABLE IF NOT EXISTS runtime_decision_plans (\r\n id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, plan_json TEXT NOT NULL, decision_right_json TEXT NOT NULL,\r\n provider_health TEXT NOT NULL, fallback TEXT NOT NULL, authority_digest TEXT,\r\n plan_digest TEXT NOT NULL, created_at TEXT NOT NULL,\r\n UNIQUE (organization_id, project_id, environment_id, id)\r\n )`);\r\n database.run(`CREATE TABLE IF NOT EXISTS runtime_decisions (\r\n request_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL, decision_json TEXT NOT NULL, created_at TEXT NOT NULL,\r\n PRIMARY KEY (organization_id, project_id, environment_id, request_id)\r\n )`);\r\n const columns: readonly [string, string, string][] = [\r\n ['behavior_programs', 'modules_json', \"TEXT NOT NULL DEFAULT '[]'\"],\r\n ['behavior_programs', 'provenance_json', 'TEXT'],\r\n ['behavior_programs', 'temporal_contract_digest', 'TEXT'],\r\n ['behavior_programs', 'temporal_contracts_json', 'TEXT'],\r\n ['behavior_programs', 'recovery_plans_json', 'TEXT'],\r\n ['ai_system_connections', 'config_json', \"TEXT NOT NULL DEFAULT '{}'\"],\r\n ];\r\n for (const [table, column, definition] of columns) ensureColumn(database, table, column, definition);\r\n}\r\nfunction reconcileStrategySchema(database: SqlDatabase): void {\r\n const columns: readonly [string,string,string][] = [\r\n ['behavior_strategies','definition_json','TEXT'], ['behavior_strategies','definition_digest','TEXT'], ['behavior_strategies','control_point_id','TEXT'],\r\n ['behavior_variants','content_type',\"TEXT NOT NULL DEFAULT 'legacy'\"],\r\n ['behavior_variants','definition_schema_version','INTEGER'], ['behavior_variants','revision_number','INTEGER'],\r\n ['behavior_variants','definition_digest','TEXT'], ['behavior_variants','program_id','TEXT'], ['behavior_variants','program_digest','TEXT'],\r\n ['behavior_variants','provenance_json','TEXT'], ['behavior_variants','definition_json','TEXT'], ['behavior_variants','immutable','INTEGER NOT NULL DEFAULT 1'],\r\n ];\r\n for (const [table,column,definition] of columns) ensureColumn(database,table,column,definition);\r\n database.run('CREATE UNIQUE INDEX IF NOT EXISTS behavior_variants_strategy_revision ON behavior_variants(strategy_id, revision_number) WHERE revision_number IS NOT NULL');\r\n database.run(`CREATE TABLE IF NOT EXISTS strategy_executions (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, trace_id TEXT NOT NULL, behavior_point_id TEXT NOT NULL, canonical_revision_id TEXT NOT NULL, program_id TEXT NOT NULL, program_digest TEXT NOT NULL, strategy_id TEXT NOT NULL, variant_id TEXT NOT NULL, strategy_digest TEXT NOT NULL, behavior_artifact_digest TEXT, strategy_artifact_digest TEXT, composition_digest TEXT, authority_digest TEXT NOT NULL, mode TEXT NOT NULL, status TEXT NOT NULL, current_step_key TEXT, state_json TEXT NOT NULL, references_json TEXT NOT NULL DEFAULT '{}', state_digest TEXT NOT NULL, step_executions INTEGER NOT NULL DEFAULT 0, model_calls INTEGER NOT NULL DEFAULT 0, tool_calls INTEGER NOT NULL DEFAULT 0, decision_calls INTEGER NOT NULL DEFAULT 0, repair_attempts INTEGER NOT NULL DEFAULT 0, cost_micros INTEGER NOT NULL DEFAULT 0, sequence INTEGER NOT NULL DEFAULT 0, idempotency_key TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, expires_at TEXT, UNIQUE(organization_id,project_id,environment_id,idempotency_key))`);\r\n ensureColumn(database,'strategy_executions','references_json',\"TEXT NOT NULL DEFAULT '{}'\");\r\n database.run(`CREATE TABLE IF NOT EXISTS strategy_step_receipts (id TEXT PRIMARY KEY, execution_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, step_key TEXT NOT NULL, step_type TEXT NOT NULL, attempt INTEGER NOT NULL, status TEXT NOT NULL, input_state_digest TEXT NOT NULL, output_digest TEXT, verification_digest TEXT, transition_key TEXT, next_step_key TEXT, model_request_id TEXT, tool_invocation_id TEXT, decision_receipt_digest TEXT, recovery_action TEXT, usage_json TEXT NOT NULL DEFAULT '{}', latency_ms INTEGER, receipt_digest TEXT NOT NULL UNIQUE, created_at TEXT NOT NULL, FOREIGN KEY(execution_id) REFERENCES strategy_executions(id), UNIQUE(execution_id,step_key,attempt))`);\r\n try { database.run('ALTER TABLE strategy_step_receipts ADD COLUMN recovery_action TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run(`CREATE TABLE IF NOT EXISTS strategy_artifact_blobs (artifact_digest TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, strategy_digest TEXT NOT NULL, bytes TEXT NOT NULL, created_at TEXT NOT NULL)`);\r\n}\r\nfunction persistFile(filePath: string, data: Uint8Array): void {\r\n const maxBytes = Number(process.env.VIRA_SQLITE_MAX_BYTES ?? 5 * 1024 * 1024 * 1024);\r\n if (!Number.isFinite(maxBytes) || maxBytes < 64 * 1024 * 1024) throw new Error('SQLITE_STORAGE_LIMIT_INVALID');\r\n if (data.byteLength > maxBytes) throw new Error('SQLITE_STORAGE_LIMIT_EXCEEDED');\r\n // A process can be terminated between the temp write and atomic rename.\r\n // Remove only our own stale export files; never touch the database itself.\r\n const directory = dirname(filePath);\r\n const prefix = `${filePath}.tmp-`;\r\n const staleBefore = Date.now() - 60 * 60 * 1000;\r\n for (const name of readdirSync(directory)) {\r\n const candidate = resolve(directory, name);\r\n if (!candidate.startsWith(prefix)) continue;\r\n try { if (statSync(candidate).mtimeMs < staleBefore) unlinkSync(candidate); } catch {}\r\n }\r\n // Containers commonly run with PID 1 and share the SQLite volume. Include a\r\n // per-write nonce so concurrent service startups never target the same temp\r\n // file before the atomic rename.\r\n const temporaryPath = `${filePath}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;\r\n writeFileSync(temporaryPath, Buffer.from(data));\r\n renameSync(temporaryPath, filePath);\r\n}\r\n\r\nexport async function openProductionSqlite({ databaseUrl = process.env.DATABASE_URL }: ProductionOptions = {}): Promise<ProductionDatabase> {\r\n if (typeof databaseUrl !== 'string' || !databaseUrl.startsWith('file:')) throw new Error('DATABASE_URL_FILE_REQUIRED');\r\n const filePath = fileURLToPath(new URL(databaseUrl));\r\n if (!filePath || filePath === '/') throw new Error('DATABASE_PATH_REQUIRED');\r\n const migrationPath = migrationCandidates.find((candidate) => existsSync(candidate));\r\n if (!migrationPath) throw new Error('DATABASE_MIGRATION_ASSET_MISSING');\r\n const SQL = await (initSqlJs as unknown as (options: {locateFile: (file: string) => string}) => Promise<SqlModule>)({locateFile: (file) => {\r\n const moduleAsset = resolve(dirname(require.resolve('sql.js')), file);\r\n if (existsSync(moduleAsset)) return moduleAsset;\r\n const dependency = resolve(root, '../../../node_modules/sql.js/dist', file);\r\n if (existsSync(dependency)) return dependency;\r\n const packagedDependency = resolve(root, '../../../sql.js/dist', file);\r\n if (existsSync(packagedDependency)) return packagedDependency;\r\n const packaged = resolve(root, 'sql.js', file);\r\n if (existsSync(packaged)) return packaged;\r\n return dependency;\r\n }});\r\n let database: SqlDatabase;\r\n let existing = true;\r\n try { await access(filePath); database = new SQL.Database(new Uint8Array(await readFile(filePath))); }\r\n catch { existing = false; database = new SQL.Database(); }\r\n if (!existing) database.run(await readFile(migrationPath, 'utf8'));\r\n reconcilePackSchema(database);\r\n reconcileStrategySchema(database);\r\n try { database.run('ALTER TABLE session_states ADD COLUMN application_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE behavior_programs ADD COLUMN provenance_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE worker_jobs ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE worker_jobs ADD COLUMN trace_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE worker_jobs ADD COLUMN available_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE strategy_executions ADD COLUMN total_recoveries INTEGER NOT NULL DEFAULT 0'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE learning_evidence ADD COLUMN outcome TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE learning_evidence ADD COLUMN provenance_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE mcp_invocation_provenance ADD COLUMN idempotency_key TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE mcp_invocation_provenance ADD COLUMN arguments_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE ai_system_connections ADD COLUMN config_json TEXT NOT NULL DEFAULT \\'{}\\''); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS session_handoff_approvals (id TEXT PRIMARY KEY, source_session_id TEXT NOT NULL, target_session_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, environment_id TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN (\\'PENDING\\',\\'APPROVED\\',\\'REJECTED\\',\\'CONSUMED\\')), requested_at TEXT NOT NULL, decided_at TEXT, expires_at TEXT NOT NULL, decision_digest TEXT NOT NULL UNIQUE)');\r\n database.run(`CREATE TABLE IF NOT EXISTS release_manifests (\r\n id TEXT PRIMARY KEY,\r\n surfaces_json TEXT NOT NULL,\r\n content_digest TEXT NOT NULL,\r\n approved_by TEXT NOT NULL,\r\n approved_at TEXT NOT NULL,\r\n status TEXT NOT NULL,\r\n organization_id TEXT,\r\n project_id TEXT,\r\n environment_id TEXT,\r\n authority_digest TEXT,\r\n artifact_id TEXT,\r\n promotion_version INTEGER\r\n )`);\r\n for (const statement of [\r\n 'ALTER TABLE release_manifests ADD COLUMN authority_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN artifact_id TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN promotion_version INTEGER',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_id TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_variant_id TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN strategy_artifact_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN program_digest TEXT',\r\n 'ALTER TABLE release_manifests ADD COLUMN evaluation_digest TEXT'\r\n ]) { try { database.run(statement); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; } }\r\n database.run('CREATE TABLE IF NOT EXISTS telemetry_release_markers (organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, release_id TEXT NOT NULL, service TEXT NOT NULL, deployment_environment TEXT NOT NULL, revision TEXT NOT NULL, deployment_id TEXT NOT NULL, occurred_at TEXT NOT NULL, trace_id TEXT, marker_digest TEXT NOT NULL, PRIMARY KEY (organization_id,project_id,environment_id,release_id,service,deployment_id))');\r\n database.run(`CREATE TABLE IF NOT EXISTS optimization_artifacts (\r\n id TEXT PRIMARY KEY,\r\n idempotency_key TEXT UNIQUE,\r\n organization_id TEXT NOT NULL,\r\n project_id TEXT NOT NULL,\r\n environment_id TEXT NOT NULL,\r\n canonical_digest TEXT NOT NULL,\r\n policy_digest TEXT NOT NULL,\r\n target_model TEXT NOT NULL,\r\n dataset_digest TEXT NOT NULL,\r\n metric TEXT NOT NULL,\r\n baseline REAL NOT NULL,\r\n optimized_result REAL NOT NULL,\r\n provenance TEXT NOT NULL,\r\n status TEXT NOT NULL,\r\n payload_json TEXT NOT NULL DEFAULT '{}'\r\n )`);\r\n for (const [column, definition] of [['stable_key', 'TEXT'], ['parent_authority_level', 'TEXT'], ['child_scope_kind', 'TEXT'], ['child_scope_digest', 'TEXT'], ['parent_revision_digest', 'TEXT'], ['exception_effect_types_json', 'TEXT'], ['when_json', 'TEXT']] as const) {\r\n try { database.run(`ALTER TABLE scope_delegations ADD COLUMN ${column} ${definition}`); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n }\r\n database.run('CREATE TABLE IF NOT EXISTS evaluation_artifacts (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, target_artifact TEXT NOT NULL, dataset_digest TEXT NOT NULL, evaluator_version TEXT NOT NULL, score REAL NOT NULL, threshold REAL NOT NULL, status TEXT NOT NULL, failed_assertions_json TEXT NOT NULL, created_at TEXT NOT NULL)');\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN holdout_commitment_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN grader_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN suite_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN suite_version TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE evaluation_artifacts ADD COLUMN suite_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE artifact_shadow_evidence ADD COLUMN release_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE artifact_shadow_evidence ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS gtm_funnel_events (event_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, event_digest TEXT NOT NULL, source TEXT NOT NULL, stage TEXT NOT NULL, journey_key TEXT NOT NULL, occurred_at TEXT NOT NULL, event_json TEXT NOT NULL, PRIMARY KEY (organization_id, project_id, environment_id, event_id))');\r\n database.run('CREATE INDEX IF NOT EXISTS gtm_funnel_events_window ON gtm_funnel_events (organization_id, project_id, environment_id, occurred_at)');\r\n for (const column of ['organization_id', 'project_id', 'environment_id']) { try { database.run(`ALTER TABLE release_manifests ADD COLUMN ${column} TEXT`); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; } }\r\n try { database.run('ALTER TABLE release_manifests ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE accelerator_residency_leases ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE trace_events ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n for (const column of ['authority_digest', 'evidence_json']) { try { database.run(`ALTER TABLE decision_evidence ADD COLUMN ${column} TEXT`); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; } }\r\n try { database.run('ALTER TABLE mcp_invocation_provenance ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE activation_decisions ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE impact_attributions ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE decision_calibration_snapshots ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE optimization_artifacts ADD COLUMN idempotency_key TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE optimization_artifacts ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN selection_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN expansion_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN provider_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN provider_request_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN provider_usage_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE teach_runs ADD COLUMN semantic_stages_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS scope_bindings (id TEXT PRIMARY KEY, level TEXT NOT NULL, parent_id TEXT, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, workspace_id TEXT, user_id TEXT, session_id TEXT, created_at TEXT NOT NULL)');\r\n database.run('CREATE TABLE IF NOT EXISTS organization_intelligence_snapshots (snapshot_digest TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, as_of TEXT NOT NULL, evidence_digest TEXT NOT NULL, payload_json TEXT NOT NULL, created_at TEXT NOT NULL)');\r\n database.run('CREATE TABLE IF NOT EXISTS mcp_sessions (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, server TEXT NOT NULL, endpoint TEXT NOT NULL, protocol_version TEXT NOT NULL, status TEXT NOT NULL, auth_digest TEXT NOT NULL, generation INTEGER NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, session_digest TEXT NOT NULL UNIQUE)');\r\n database.run('CREATE TABLE IF NOT EXISTS oauth_states (state TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, provider TEXT NOT NULL, redirect_uri TEXT NOT NULL, scopes_json TEXT NOT NULL, expires_at TEXT NOT NULL, consumed_at TEXT)');\r\n database.run('CREATE TABLE IF NOT EXISTS optimization_runs (id TEXT PRIMARY KEY, idempotency_key TEXT NOT NULL UNIQUE, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, canonical_digest TEXT NOT NULL, policy_digest TEXT NOT NULL, dataset_digest TEXT NOT NULL, engine TEXT NOT NULL, status TEXT NOT NULL, attempts INTEGER NOT NULL DEFAULT 0, cancel_requested INTEGER NOT NULL DEFAULT 0, lease_owner TEXT, lease_expires_at TEXT, search_result_digest TEXT, error_code TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL, authority_digest TEXT)');\r\n try { database.run('ALTER TABLE optimization_runs ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS optimization_run_attempts (id TEXT PRIMARY KEY, run_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, attempt INTEGER NOT NULL, worker_id TEXT NOT NULL, status TEXT NOT NULL, request_digest TEXT, response_digest TEXT, error_code TEXT, claimed_at TEXT NOT NULL, finished_at TEXT, authority_digest TEXT)');\r\n try { database.run('ALTER TABLE optimization_run_attempts ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS optimization_cost_reservations (run_id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, reserved_micros INTEGER NOT NULL, actual_micros INTEGER, state TEXT NOT NULL, created_at TEXT NOT NULL, settled_at TEXT, authority_digest TEXT)');\r\n try { database.run('ALTER TABLE optimization_cost_reservations ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS recovery_runtime_states (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, environment_id TEXT NOT NULL, trajectory_key TEXT NOT NULL, recovery_plan_key TEXT NOT NULL, recovery_plan_digest TEXT NOT NULL, attempt INTEGER NOT NULL, next_step_index INTEGER NOT NULL, total_execution_attempts INTEGER NOT NULL, status TEXT NOT NULL, started_at TEXT NOT NULL, updated_at TEXT NOT NULL, step_results_json TEXT NOT NULL, pending_approval_json TEXT, authority_digest TEXT, state_digest TEXT NOT NULL UNIQUE)');\r\n try { database.run('ALTER TABLE recovery_runtime_states ADD COLUMN pending_approval_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS recovery_runtime_receipts (id TEXT PRIMARY KEY, runtime_state_id TEXT NOT NULL, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, application_id TEXT, environment_id TEXT NOT NULL, status TEXT NOT NULL, attempt INTEGER NOT NULL, step_results_json TEXT NOT NULL, recovery_plan_digest TEXT NOT NULL, authority_digest TEXT, completed_at TEXT NOT NULL, receipt_digest TEXT NOT NULL UNIQUE)');\r\n database.run('CREATE TABLE IF NOT EXISTS behavior_artifact_blobs (artifact_digest TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, bytes TEXT NOT NULL)');\r\n try { database.run('ALTER TABLE recovery_runtime_states ADD COLUMN application_id TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n try { database.run('ALTER TABLE recovery_runtime_states ADD COLUMN authority_digest TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n database.run('CREATE TABLE IF NOT EXISTS conflict_resolutions (inspection_digest TEXT PRIMARY KEY, resolution_digest TEXT NOT NULL, payload_json TEXT NOT NULL)');\r\n try { database.run('ALTER TABLE conflict_inspections ADD COLUMN payload_json TEXT'); } catch (error) { if (!String(error).includes('duplicate column name')) throw error; }\r\n const persist = async () => { persistFile(filePath, database.export()); };\r\n let transactionDepth = 0;\r\n const runtime: ProductionDatabase = {\r\n mode: 'production',\r\n exec: (sql, params) => { const result = database.exec(sql, params); if (transactionDepth === 0 && /^\\s*(INSERT|UPDATE|DELETE|REPLACE)\\b/i.test(sql)) persistFile(filePath, database.export()); return result; },\r\n run: (sql, params) => { const result = database.run(sql, params); if (transactionDepth === 0) persistFile(filePath, database.export()); return result; },\r\n async transaction<T>(work: (db: Database) => T | Promise<T>): Promise<T> { if (typeof work !== 'function') throw new Error('DATABASE_WORK_REQUIRED'); transactionDepth += 1; database.run('BEGIN'); try { const result = await work(runtime); database.run('COMMIT'); transactionDepth -= 1; await persist(); return result; } catch (error) { try { database.run('ROLLBACK'); } catch {} transactionDepth = Math.max(0, transactionDepth - 1); throw error; } },\r\n transactionSync<T>(work: (db: Database) => T): T { if (typeof work !== 'function') throw new Error('DATABASE_WORK_REQUIRED'); transactionDepth += 1; database.run('BEGIN'); try { const result = work(runtime); database.run('COMMIT'); transactionDepth -= 1; persistFile(filePath, database.export()); return result; } catch (error) { try { database.run('ROLLBACK'); } catch {} transactionDepth = Math.max(0, transactionDepth - 1); throw error; } },\r\n async persist() { await persist(); },\r\n async reloadFromDisk() { const bytes = new Uint8Array(await readFile(filePath)); database.close(); database = new SQL.Database(bytes); },\r\n async backup(destination) { if (!destination?.trim()) throw new Error('BACKUP_PATH_REQUIRED'); await writeFile(destination, Buffer.from(database.export())); return destination; },\r\n health: () => ({ready: true, mode: 'production', storage: 'file'}),\r\n close: () => database.close(),\r\n };\r\n return runtime;\r\n}\r\n", "import {openPostgresRuntime, type OpenPostgresOptions, type PostgresRuntime} from './postgres-runtime.ts';\r\nimport {openProductionSqlite, type ProductionDatabase} from './production-sqlite.ts';\r\n\r\nexport type RuntimeDatabaseMode = 'sqlite' | 'postgres';\r\nexport type RuntimeDatabase = {\r\n mode: RuntimeDatabaseMode;\r\n database: ProductionDatabase | PostgresRuntime;\r\n health(): {ready: true; mode: RuntimeDatabaseMode};\r\n close(): Promise<void>;\r\n};\r\n\r\nexport type OpenRuntimeDatabaseOptions = {\r\n databaseUrl?: string;\r\n sqlite?: Omit<Parameters<typeof openProductionSqlite>[0], 'databaseUrl'>;\r\n postgres?: Omit<OpenPostgresOptions, 'databaseUrl'>;\r\n};\r\n\r\n/** Canonical production database boundary. Production never selects SQLite. */\r\nexport async function createProductionDatabase(options: Omit<OpenRuntimeDatabaseOptions, 'sqlite'> = {}): Promise<RuntimeDatabase> {\r\n const databaseUrl = options.databaseUrl ?? process.env.DATABASE_URL;\r\n if (typeof databaseUrl !== 'string' || !/^postgres(?:ql)?:\\/\\//.test(databaseUrl)) throw new Error('PRODUCTION_POSTGRES_DATABASE_REQUIRED');\r\n return openRuntimeDatabase({...options, databaseUrl});\r\n}\r\n\r\n/** Selects the durable runtime from the URL while keeping local SQLite unchanged. */\r\nexport async function openRuntimeDatabase(options: OpenRuntimeDatabaseOptions = {}): Promise<RuntimeDatabase> {\r\n const databaseUrl = options.databaseUrl ?? process.env.DATABASE_URL;\r\n if (typeof databaseUrl !== 'string' || !databaseUrl.trim()) throw new Error('DATABASE_URL_REQUIRED');\r\n if (databaseUrl.startsWith('file:')) {\r\n if (process.env.NODE_ENV === 'production' || process.env.VIRA_STACK_PROFILE === 'production') throw new Error('SQLITE_FORBIDDEN_IN_PRODUCTION');\r\n const database = await openProductionSqlite({databaseUrl, ...options.sqlite});\r\n return {\r\n mode: 'sqlite',\r\n database,\r\n health: () => ({ready: true, mode: 'sqlite'}),\r\n close: async () => { database.close(); },\r\n };\r\n }\r\n if (databaseUrl.startsWith('postgres://') || databaseUrl.startsWith('postgresql://')) {\r\n const database = await openPostgresRuntime({databaseUrl, ...options.postgres});\r\n return {\r\n mode: 'postgres',\r\n database,\r\n health: () => ({ready: true, mode: 'postgres'}),\r\n close: async () => { await database.close(); },\r\n };\r\n }\r\n throw new Error('DATABASE_URL_UNSUPPORTED');\r\n}\r\n", "import type {PostgresDatabase} from './postgres-adapter.ts';\r\nimport {verifyMcpResult} from '../../runtime/src/mcp-provenance.ts';\r\nimport type {McpResult} from '../../runtime/src/mcp-gateway.ts';\r\nimport {assertMcpSession, type McpSession} from '../../runtime/src/mcp-session.ts';\r\n\r\ntype Scope={organizationId:string;projectId:string;environmentId:string};\r\ntype Claim={status:'CLAIMED'|'REPLAY'|'IN_FLIGHT';result?:McpResult};\r\n\r\nconst provenanceSelect=`SELECT invocation_id, organization_id, project_id, environment_id, server, tool, receipt_id, idempotency_key, arguments_digest, ok, result_json, error, authority_decision_digest, authority_digest, provenance_digest FROM mcp_invocation_provenance`;\r\n\r\nexport class PostgresMcpProvenanceRepository {\r\n constructor(private readonly db:PostgresDatabase) {}\r\n async init():Promise<void>{\r\n await this.db.query(`CREATE TABLE IF NOT EXISTS mcp_invocation_claims (organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, invocation_id TEXT NOT NULL, claimed_at TIMESTAMPTZ NOT NULL, PRIMARY KEY (organization_id, project_id, environment_id, idempotency_key))`);\r\n await this.db.query(`CREATE TABLE IF NOT EXISTS mcp_invocation_provenance (invocation_id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, server TEXT NOT NULL, tool TEXT NOT NULL, receipt_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, arguments_digest TEXT NOT NULL, ok BOOLEAN NOT NULL, result_json JSONB, error TEXT, authority_decision_digest TEXT NOT NULL, authority_digest TEXT, provenance_digest TEXT NOT NULL, UNIQUE (organization_id, project_id, environment_id, idempotency_key))`);\r\n }\r\n async claim(input:{invocationId:string;idempotencyKey:string}&Scope):Promise<Claim>{\r\n const replay=await this.getByIdempotencyKey(input.idempotencyKey,input); if(replay)return {status:'REPLAY',result:replay};\r\n try { await this.db.query(`INSERT INTO mcp_invocation_claims (organization_id,project_id,environment_id,idempotency_key,invocation_id,claimed_at) VALUES ($1,$2,$3,$4,$5,NOW())`,[input.organizationId,input.projectId,input.environmentId,input.idempotencyKey,input.invocationId]); return {status:'CLAIMED'}; } catch { const after=await this.getByIdempotencyKey(input.idempotencyKey,input); return after?{status:'REPLAY',result:after}:{status:'IN_FLIGHT'}; }\r\n }\r\n async releaseClaim(input:Scope&{idempotencyKey:string}):Promise<void>{await this.db.query(`DELETE FROM mcp_invocation_claims WHERE organization_id=$1 AND project_id=$2 AND environment_id=$3 AND idempotency_key=$4`,[input.organizationId,input.projectId,input.environmentId,input.idempotencyKey]);}\r\n async save(result:McpResult):Promise<McpResult>{verifyMcpResult(result);const existing=await this.get(result.invocationId);const byKey=await this.getByIdempotencyKey(result.idempotencyKey,result);if(existing||byKey){const prior=existing??byKey!;if(prior.provenanceDigest!==result.provenanceDigest)throw new Error('MCP_PROVENANCE_CONFLICT');return prior;}await this.db.query(`DELETE FROM mcp_invocation_claims WHERE organization_id=$1 AND project_id=$2 AND environment_id=$3 AND idempotency_key=$4`,[result.organizationId,result.projectId,result.environmentId,result.idempotencyKey]);await this.db.query(`INSERT INTO mcp_invocation_provenance (invocation_id,organization_id,project_id,environment_id,server,tool,receipt_id,idempotency_key,arguments_digest,ok,result_json,error,authority_decision_digest,authority_digest,provenance_digest) VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15)`,[result.invocationId,result.organizationId,result.projectId,result.environmentId,result.server,result.tool,result.receiptId,result.idempotencyKey,result.argumentsDigest,result.ok,result.result===undefined?null:JSON.stringify(result.result),result.error??null,result.authorityDecisionDigest,result.authorityDigest,result.provenanceDigest]);const persisted=await this.get(result.invocationId);if(!persisted||persisted.provenanceDigest!==result.provenanceDigest)throw new Error('MCP_PROVENANCE_READBACK_MISMATCH');return persisted;}\r\n async get(invocationId:string):Promise<McpResult|null>{const row=(await this.db.query(`${provenanceSelect} WHERE invocation_id=$1`,[invocationId])).rows[0];return row?this.fromRow(row):null;}\r\n async getByIdempotencyKey(key:string,scope:Scope):Promise<McpResult|null>{const row=(await this.db.query(`${provenanceSelect} WHERE idempotency_key=$1 AND organization_id=$2 AND project_id=$3 AND environment_id=$4`,[key,scope.organizationId,scope.projectId,scope.environmentId])).rows[0];return row?this.fromRow(row):null;}\r\n private fromRow(row:Record<string,unknown>):McpResult{const result={invocationId:String(row.invocation_id),organizationId:String(row.organization_id),projectId:String(row.project_id),environmentId:String(row.environment_id),server:String(row.server),tool:String(row.tool),receiptId:String(row.receipt_id),idempotencyKey:String(row.idempotency_key),argumentsDigest:String(row.arguments_digest),ok:Boolean(row.ok),result:row.result_json??undefined,error:row.error==null?undefined:String(row.error),authorityDecisionDigest:String(row.authority_decision_digest),authorityDigest:row.authority_digest==null?null:String(row.authority_digest),provenanceDigest:String(row.provenance_digest)} as McpResult;verifyMcpResult(result);return result;}\r\n}\r\n\r\nexport class PostgresMcpSessionRepository {\r\n constructor(private readonly db:PostgresDatabase) {}\r\n async init():Promise<void>{await this.db.query(`CREATE TABLE IF NOT EXISTS mcp_sessions (id TEXT PRIMARY KEY, organization_id TEXT NOT NULL, project_id TEXT NOT NULL, environment_id TEXT NOT NULL, server TEXT NOT NULL, endpoint TEXT NOT NULL, protocol_version TEXT NOT NULL, status TEXT NOT NULL, auth_digest TEXT NOT NULL, generation INTEGER NOT NULL, created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL, session_digest TEXT NOT NULL)`);}\r\n async get(id:string,scope:Scope):Promise<McpSession|null>{const row=(await this.db.query(`SELECT id,organization_id,project_id,environment_id,server,endpoint,protocol_version,status,auth_digest,generation,created_at,updated_at,session_digest FROM mcp_sessions WHERE id=$1 AND organization_id=$2 AND project_id=$3 AND environment_id=$4`,[id,scope.organizationId,scope.projectId,scope.environmentId])).rows[0];if(!row)return null;const session={id:String(row.id),organizationId:String(row.organization_id),projectId:String(row.project_id),environmentId:String(row.environment_id),server:String(row.server),endpoint:String(row.endpoint),protocolVersion:String(row.protocol_version),status:String(row.status) as McpSession['status'],authDigest:String(row.auth_digest),generation:Number(row.generation),createdAt:new Date(String(row.created_at)).toISOString(),updatedAt:new Date(String(row.updated_at)).toISOString(),sessionDigest:String(row.session_digest)};assertMcpSession(session);return session;}\r\n}\r\n", "import { createMcpStdioServer } from './server.ts';\r\nimport { createViraMcpOptions, resolveViraMcpConfig } from './vira-server.ts';\r\nimport { SqlMcpSessionRepository } from '../../packages/database/src/mcp-session-repository.ts';\r\nimport { SqlMcpProvenanceRepository } from '../../packages/database/src/mcp-provenance-repository.ts';\r\nimport { McpProvenanceRepository } from '../../packages/database/src/mcp-provenance-repository.ts';\r\nimport { executeMcpInvocation } from '../../packages/runtime/src/mcp-invocation-service.ts';\r\nimport { serveOfficialViraMcp } from './official-stdio.ts';\r\nimport type { PostgresRuntime } from '../../packages/database/src/postgres-runtime.ts';\r\n\r\nexport async function startMcpStdio(): Promise<void> {\r\n const base = resolveViraMcpConfig();\r\n const required = ['VIRA_ORGANIZATION_ID', 'VIRA_PROJECT_ID', 'VIRA_ENVIRONMENT_ID'] as const;\r\n const missing = required.filter((name) => !process.env[name]?.trim());\r\n if (missing.length) throw new Error(`VIRA_MCP_SCOPE_REQUIRED:${missing.join(',')}`);\r\n const organizationId = process.env.VIRA_ORGANIZATION_ID as string;\r\n const projectId = process.env.VIRA_PROJECT_ID as string;\r\n const environmentId = process.env.VIRA_ENVIRONMENT_ID as string;\r\n // Keep the publishable MCP executable free of the optional PostgreSQL\r\n // driver. It is loaded only when the user explicitly configures a database.\r\n const runtime = process.env.DATABASE_URL\r\n ? await (await import('../../packages/database/src/runtime-database.ts')).openRuntimeDatabase()\r\n : null;\r\n const database = runtime?.mode === 'sqlite' ? runtime.database as import('../../packages/database/src/production-sqlite.ts').ProductionDatabase : null;\r\n const postgres = runtime?.mode === 'postgres' ? runtime.database as import('../../packages/database/src/postgres-runtime.ts').PostgresRuntime : null;\r\n // The executor boundary is mandatory in every environment. Local runs use\r\n // the same repository contract in memory when SQL is intentionally absent;\r\n // they must not fall back to direct effectful transport.\r\n const postgresRepositories = postgres ? await import('../../packages/database/src/postgres-mcp-repository.ts') : null;\r\n const provenanceRepository = database ? new SqlMcpProvenanceRepository(database) : postgres && postgresRepositories ? new postgresRepositories.PostgresMcpProvenanceRepository(postgres) : new McpProvenanceRepository();\r\n if (postgres && postgresRepositories) { await new postgresRepositories.PostgresMcpProvenanceRepository(postgres).init(); }\r\n const options = createViraMcpOptions({\r\n ...base,\r\n scope: {\r\n organizationId,\r\n projectId,\r\n environmentId,\r\n },\r\n ...((database || postgres) ? {\r\n provenanceRepository: provenanceRepository!,\r\n sessionRepository: database ? new SqlMcpSessionRepository(database) : new postgresRepositories!.PostgresMcpSessionRepository(postgres!),\r\n sessionId: process.env.VIRA_MCP_SESSION_ID,\r\n } : {}),\r\n });\r\n options.invocationExecutor = ({invocation, authority, signal}) => executeMcpInvocation({invocation, authority, signal, transport: options.transport, store: provenanceRepository});\r\n options.requireInvocationExecutor = true;\r\n const useLegacy = process.env.VIRA_MCP_PROTOCOL_MODE === 'legacy';\r\n const stdio = useLegacy ? createMcpStdioServer(options) : serveOfficialViraMcp(options);\r\n const close = () => { stdio.close(); void runtime?.close(); };\r\n process.once('SIGTERM', close);\r\n process.once('SIGINT', close);\r\n}\r\n", "#!/usr/bin/env node\r\nimport {createViraMcpServer, resolveViraMcpConfig} from '../../../apps/mcp-server/vira-server.ts';\r\n\r\n// MCP clients use stdio by default. HTTP is explicit so installation never\r\n// accidentally exposes a listener.\r\nif (process.argv.includes('--http') || process.env.VIRA_MCP_TRANSPORT === 'http') {\r\n await startHttp();\r\n} else {\r\n const {startMcpStdio} = await import('../../../apps/mcp-server/start.ts');\r\n await startMcpStdio();\r\n}\r\n\r\nasync function startHttp(): Promise<void> {\r\n\r\nconst base=resolveViraMcpConfig();\r\nif(!base.requestAuthToken?.trim()) throw new Error('VIRA_MCP_AUTH_TOKEN_REQUIRED');\r\nconst scope={organizationId:process.env.VIRA_ORGANIZATION_ID??'',projectId:process.env.VIRA_PROJECT_ID??'',environmentId:process.env.VIRA_ENVIRONMENT_ID??''};\r\nfor(const value of Object.values(scope)) if(!value.trim()) throw new Error('VIRA_MCP_SCOPE_REQUIRED');\r\nconst allowLocalEffects=process.env.VIRA_MCP_ALLOW_EFFECTFUL==='true' && process.env.NODE_ENV!=='production';\r\nconst server=createViraMcpServer({...base,scope,...(allowLocalEffects?{authorizeEffectful:()=>({allowed:true,decisionDigest:'explicit-local-opt-in'})}:{})});\r\nconst port = Number(process.env.PORT ?? 4195);\r\nconst host = process.env.VIRA_MCP_BIND_PUBLIC==='true' ? (process.env.HOST ?? '0.0.0.0') : (process.env.HOST ?? '127.0.0.1');\r\nserver.listen(port, host, () => console.error(JSON.stringify({status:'VIRA_MCP_STARTED',port,host,upstream:base.baseUrl,effectful:allowLocalEffects})));\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["createHash", "tools", "requestId", "createHash", "verifyMcpResult", "createHash", "digest", "canonical", "authority", "result", "resolve", "createHash", "verifyMcpResult", "persisted", "createHash", "readFile", "dirname", "resolve", "fileURLToPath", "require", "verifyMcpResult", "startMcpStdio"]
|
|
7
7
|
}
|