@resolveio/server-lib 22.3.194 → 22.3.195

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.
@@ -582,6 +582,46 @@ export interface ResolveIOAIManagerRecoveryExecutionDirective {
582
582
  releasePolicy?: ResolveIOAIManagerHotfixFirstReleasePolicy;
583
583
  createdAt: string;
584
584
  }
585
+ export type ResolveIOAIManagerRecoveryExecutionProofStatus = 'proof_ready' | 'waiting_for_execution' | 'waiting_for_new_evidence' | 'blocked_same_evidence' | 'manual_handoff';
586
+ export interface ResolveIOAIManagerRecoveryExecutionProofContractInput {
587
+ directive?: ResolveIOAIManagerRecoveryExecutionDirective;
588
+ previous?: ResolveIOAIManagerFailureRecord;
589
+ current?: ResolveIOAIManagerFailureRecord;
590
+ requiredEvidence?: any;
591
+ now?: Date | string;
592
+ }
593
+ export interface ResolveIOAIManagerRecoveryExecutionProofContract {
594
+ contractId: string;
595
+ directiveId: string;
596
+ surface: string;
597
+ dispatchAction: ResolveIOAIManagerRecoveryActionDispatchAction;
598
+ phase: ResolveIOAIManagerRecoveryExecutionPhase;
599
+ status: ResolveIOAIManagerRecoveryExecutionProofStatus;
600
+ canContinueRun: boolean;
601
+ canRunProductRepair: boolean;
602
+ canRunExpensiveModel: boolean;
603
+ canResetLoopBudget: boolean;
604
+ proofRequiredBeforeContinuation: boolean;
605
+ requiresNewEvidence: boolean;
606
+ newEvidence: boolean;
607
+ materialEvidence: boolean;
608
+ evidenceStrength: ResolveIOAIManagerEvidenceStrength;
609
+ evidenceSignals: string[];
610
+ startingFailureClass: string;
611
+ startingBlockerFingerprint: string;
612
+ startingEvidenceHash: string;
613
+ latestFailureClass: string;
614
+ latestBlockerFingerprint: string;
615
+ latestEvidenceHash: string;
616
+ requiredEvidence: string[];
617
+ missingEvidence: string[];
618
+ artifactPaths: string[];
619
+ changedFiles: string[];
620
+ blockers: string[];
621
+ nextAllowedAction: string;
622
+ forbiddenActions: string[];
623
+ createdAt: string;
624
+ }
585
625
  export interface ResolveIOAIManagerRecoveryCheckpointInput {
586
626
  plan: ResolveIOAIManagerRecoveryPlan;
587
627
  current?: ResolveIOAIManagerFailureRecord;
@@ -713,6 +753,13 @@ export declare function buildResolveIOAIManagerRecoveryActionPacket(input: Resol
713
753
  export declare function decideResolveIOAIManagerRecoveryActionDispatch(input: ResolveIOAIManagerRecoveryActionDispatchInput): ResolveIOAIManagerRecoveryActionDispatchDecision;
714
754
  export declare function appendResolveIOAIManagerRecoveryActionDispatch(history: ResolveIOAIManagerRecoveryActionDispatchRecord[] | undefined, record: ResolveIOAIManagerRecoveryActionDispatchRecord | undefined, limit?: number): ResolveIOAIManagerRecoveryActionDispatchRecord[];
715
755
  export declare function buildResolveIOAIManagerRecoveryExecutionDirective(input: ResolveIOAIManagerRecoveryExecutionDirectiveInput): ResolveIOAIManagerRecoveryExecutionDirective;
756
+ export declare function buildResolveIOAIManagerRecoveryExecutionProofContract(input?: ResolveIOAIManagerRecoveryExecutionProofContractInput): ResolveIOAIManagerRecoveryExecutionProofContract;
757
+ export declare function validateResolveIOAIManagerRecoveryExecutionProofContract(value: any): {
758
+ valid: boolean;
759
+ status: ResolveIOAIManagerRecoveryExecutionProofStatus | 'blocked';
760
+ blockers: string[];
761
+ normalized: ResolveIOAIManagerRecoveryExecutionProofContract;
762
+ };
716
763
  export declare function assessResolveIOAIManagerEvidenceChange(previous: (ResolveIOAIManagerFailureRecord | ResolveIOAIManagerRecoveryCheckpoint | undefined), current: ResolveIOAIManagerFailureRecord | undefined, fallbackObjective?: string): ResolveIOAIManagerEvidenceAssessment;
717
764
  export declare function decideResolveIOAIManagerRecoveryGate(input: ResolveIOAIManagerRecoveryGateInput): ResolveIOAIManagerRecoveryGateDecision;
718
765
  export declare function buildResolveIOAIManagerRecoveryPlan(input?: ResolveIOAIManagerRecoveryPlanInput): ResolveIOAIManagerRecoveryPlan;
@@ -67,6 +67,8 @@ exports.buildResolveIOAIManagerRecoveryActionPacket = buildResolveIOAIManagerRec
67
67
  exports.decideResolveIOAIManagerRecoveryActionDispatch = decideResolveIOAIManagerRecoveryActionDispatch;
68
68
  exports.appendResolveIOAIManagerRecoveryActionDispatch = appendResolveIOAIManagerRecoveryActionDispatch;
69
69
  exports.buildResolveIOAIManagerRecoveryExecutionDirective = buildResolveIOAIManagerRecoveryExecutionDirective;
70
+ exports.buildResolveIOAIManagerRecoveryExecutionProofContract = buildResolveIOAIManagerRecoveryExecutionProofContract;
71
+ exports.validateResolveIOAIManagerRecoveryExecutionProofContract = validateResolveIOAIManagerRecoveryExecutionProofContract;
70
72
  exports.assessResolveIOAIManagerEvidenceChange = assessResolveIOAIManagerEvidenceChange;
71
73
  exports.decideResolveIOAIManagerRecoveryGate = decideResolveIOAIManagerRecoveryGate;
72
74
  exports.buildResolveIOAIManagerRecoveryPlan = buildResolveIOAIManagerRecoveryPlan;
@@ -2320,6 +2322,178 @@ function buildResolveIOAIManagerRecoveryExecutionDirective(input) {
2320
2322
  'Do not run product-code repair from this directive unless canRunProductRepair is true.'
2321
2323
  ], __read((((_e = action === null || action === void 0 ? void 0 : action.releasePolicy) === null || _e === void 0 ? void 0 : _e.forbiddenActions) || [])), false))).slice(0, 20) }), (dispatchDecision.dispatchRecord ? { dispatchRecord: dispatchDecision.dispatchRecord } : {})), ((action === null || action === void 0 ? void 0 : action.releasePolicy) ? { releasePolicy: action.releasePolicy } : {})), { createdAt: now });
2322
2324
  }
2325
+ function failureRecordFromDirectiveStart(directive, previous) {
2326
+ if (previous) {
2327
+ return previous;
2328
+ }
2329
+ var dispatchRecord = directive === null || directive === void 0 ? void 0 : directive.dispatchRecord;
2330
+ return {
2331
+ lane: directive === null || directive === void 0 ? void 0 : directive.lane,
2332
+ stepType: directive === null || directive === void 0 ? void 0 : directive.stepType,
2333
+ failureClass: '',
2334
+ blockerFingerprint: dispatchRecord === null || dispatchRecord === void 0 ? void 0 : dispatchRecord.blockerFingerprint,
2335
+ evidenceHash: dispatchRecord === null || dispatchRecord === void 0 ? void 0 : dispatchRecord.evidenceHash,
2336
+ artifactPaths: (dispatchRecord === null || dispatchRecord === void 0 ? void 0 : dispatchRecord.artifactPaths) || [],
2337
+ recordedAt: (dispatchRecord === null || dispatchRecord === void 0 ? void 0 : dispatchRecord.createdAt) || (directive === null || directive === void 0 ? void 0 : directive.createdAt)
2338
+ };
2339
+ }
2340
+ function recoveryExecutionProofStatus(input) {
2341
+ var directive = input.directive;
2342
+ if (!directive || directive.allowed !== true || directive.dispatchAction === 'park_manual') {
2343
+ return 'manual_handoff';
2344
+ }
2345
+ if (!input.hasCurrent) {
2346
+ return 'waiting_for_execution';
2347
+ }
2348
+ if (directive.requiresNewEvidence === true && input.assessment.changed !== true) {
2349
+ return 'blocked_same_evidence';
2350
+ }
2351
+ if (directive.proofRequiredBeforeContinuation === true && input.assessment.material !== true) {
2352
+ return 'waiting_for_new_evidence';
2353
+ }
2354
+ return 'proof_ready';
2355
+ }
2356
+ function buildResolveIOAIManagerRecoveryExecutionProofContract(input) {
2357
+ if (input === void 0) { input = {}; }
2358
+ var directive = input.directive;
2359
+ var previous = failureRecordFromDirectiveStart(directive, input.previous);
2360
+ var current = input.current || {};
2361
+ var hasCurrent = !!input.current;
2362
+ var assessment = hasCurrent
2363
+ ? assessResolveIOAIManagerEvidenceChange(previous, current, directive === null || directive === void 0 ? void 0 : directive.requiredStateTransition)
2364
+ : {
2365
+ changed: false,
2366
+ material: false,
2367
+ strength: 'none',
2368
+ signals: [],
2369
+ evidenceHash: hashResolveIOAIManagerEvidence(previous),
2370
+ blockerFingerprint: resolveResolveIOAIManagerBlockerFingerprint(previous, directive === null || directive === void 0 ? void 0 : directive.requiredStateTransition)
2371
+ };
2372
+ var status = recoveryExecutionProofStatus({ directive: directive, hasCurrent: hasCurrent, assessment: assessment });
2373
+ var canContinueRun = status === 'proof_ready';
2374
+ var requiredEvidence = Array.from(new Set(__spreadArray(__spreadArray(__spreadArray([], __read(cleanList(input.requiredEvidence, 30, 500)), false), __read(cleanList(directive === null || directive === void 0 ? void 0 : directive.requiredArtifacts, 30, 500)), false), __read(cleanList(directive === null || directive === void 0 ? void 0 : directive.successCriteria, 30, 500)), false).filter(Boolean)));
2375
+ var missingEvidence = (directive === null || directive === void 0 ? void 0 : directive.proofRequiredBeforeContinuation) === true && status !== 'proof_ready'
2376
+ ? (requiredEvidence.length ? requiredEvidence : ['new material evidence or passed proof artifact'])
2377
+ : [];
2378
+ var artifactPaths = cleanList(current.artifactPaths || previous.artifactPaths, 80, 500);
2379
+ var changedFiles = cleanList(current.changedFiles, 80, 500);
2380
+ var startingFailureClass = normalizeResolveIOAIManagerFailureClass(previous.failureClass);
2381
+ var latestFailureClass = normalizeResolveIOAIManagerFailureClass(current.failureClass || previous.failureClass);
2382
+ var startingBlockerFingerprint = cleanText(previous.blockerFingerprint, 160)
2383
+ || resolveResolveIOAIManagerBlockerFingerprint(previous, directive === null || directive === void 0 ? void 0 : directive.requiredStateTransition);
2384
+ var startingEvidenceHash = cleanText(previous.evidenceHash, 160)
2385
+ || hashResolveIOAIManagerEvidence(previous);
2386
+ var blockers = [
2387
+ status === 'manual_handoff' ? ((directive === null || directive === void 0 ? void 0 : directive.reason) || 'recovery_execution_requires_manual_handoff') : '',
2388
+ status === 'waiting_for_execution' ? 'recovery_execution_waiting_for_current_evidence' : '',
2389
+ status === 'blocked_same_evidence' ? 'recovery_execution_same_evidence_after_dispatch' : '',
2390
+ status === 'waiting_for_new_evidence' ? 'recovery_execution_missing_material_evidence' : ''
2391
+ ].filter(Boolean);
2392
+ var createdAt = isoNow(input.now);
2393
+ return {
2394
+ contractId: stableHash('mgr-execution-proof', {
2395
+ directiveId: (directive === null || directive === void 0 ? void 0 : directive.directiveId) || '',
2396
+ dispatchAction: (directive === null || directive === void 0 ? void 0 : directive.dispatchAction) || 'park_manual',
2397
+ status: status,
2398
+ startingEvidenceHash: startingEvidenceHash,
2399
+ latestEvidenceHash: assessment.evidenceHash,
2400
+ createdAt: createdAt.slice(0, 16)
2401
+ }),
2402
+ directiveId: cleanText(directive === null || directive === void 0 ? void 0 : directive.directiveId, 180),
2403
+ surface: cleanText(directive === null || directive === void 0 ? void 0 : directive.surface, 120) || 'runner',
2404
+ dispatchAction: (directive === null || directive === void 0 ? void 0 : directive.dispatchAction) || 'park_manual',
2405
+ phase: (directive === null || directive === void 0 ? void 0 : directive.phase) || 'manual',
2406
+ status: status,
2407
+ canContinueRun: canContinueRun,
2408
+ canRunProductRepair: canContinueRun && (directive === null || directive === void 0 ? void 0 : directive.canRunProductRepair) === true,
2409
+ canRunExpensiveModel: canContinueRun && (directive === null || directive === void 0 ? void 0 : directive.canRunExpensiveModel) === true,
2410
+ canResetLoopBudget: canContinueRun && assessment.material === true,
2411
+ proofRequiredBeforeContinuation: (directive === null || directive === void 0 ? void 0 : directive.proofRequiredBeforeContinuation) === true,
2412
+ requiresNewEvidence: (directive === null || directive === void 0 ? void 0 : directive.requiresNewEvidence) === true,
2413
+ newEvidence: assessment.changed,
2414
+ materialEvidence: assessment.material,
2415
+ evidenceStrength: assessment.strength,
2416
+ evidenceSignals: assessment.signals,
2417
+ startingFailureClass: startingFailureClass,
2418
+ startingBlockerFingerprint: startingBlockerFingerprint,
2419
+ startingEvidenceHash: startingEvidenceHash,
2420
+ latestFailureClass: latestFailureClass,
2421
+ latestBlockerFingerprint: assessment.blockerFingerprint,
2422
+ latestEvidenceHash: assessment.evidenceHash,
2423
+ requiredEvidence: requiredEvidence,
2424
+ missingEvidence: missingEvidence,
2425
+ artifactPaths: artifactPaths,
2426
+ changedFiles: changedFiles,
2427
+ blockers: blockers,
2428
+ nextAllowedAction: canContinueRun ? ((directive === null || directive === void 0 ? void 0 : directive.nextCommands[0]) || 'continue_gate') : 'collect_required_recovery_proof',
2429
+ forbiddenActions: Array.from(new Set(__spreadArray([
2430
+ 'Do not continue product-code repair until recovery execution proof is proof_ready.'
2431
+ ], __read(cleanList(directive === null || directive === void 0 ? void 0 : directive.forbiddenActions, 30, 500)), false))),
2432
+ createdAt: createdAt
2433
+ };
2434
+ }
2435
+ function validateResolveIOAIManagerRecoveryExecutionProofContract(value) {
2436
+ var source = value || {};
2437
+ var validStatuses = [
2438
+ 'proof_ready',
2439
+ 'waiting_for_execution',
2440
+ 'waiting_for_new_evidence',
2441
+ 'blocked_same_evidence',
2442
+ 'manual_handoff'
2443
+ ];
2444
+ var status = cleanText(source.status, 120);
2445
+ var normalized = {
2446
+ contractId: cleanText(source.contractId || source.contract_id, 180),
2447
+ directiveId: cleanText(source.directiveId || source.directive_id, 180),
2448
+ surface: cleanText(source.surface, 120),
2449
+ dispatchAction: cleanText(source.dispatchAction || source.dispatch_action, 120),
2450
+ phase: cleanText(source.phase, 120),
2451
+ status: validStatuses.includes(status) ? status : 'manual_handoff',
2452
+ canContinueRun: source.canContinueRun === true || source.can_continue_run === true,
2453
+ canRunProductRepair: source.canRunProductRepair === true || source.can_run_product_repair === true,
2454
+ canRunExpensiveModel: source.canRunExpensiveModel === true || source.can_run_expensive_model === true,
2455
+ canResetLoopBudget: source.canResetLoopBudget === true || source.can_reset_loop_budget === true,
2456
+ proofRequiredBeforeContinuation: source.proofRequiredBeforeContinuation === true || source.proof_required_before_continuation === true,
2457
+ requiresNewEvidence: source.requiresNewEvidence === true || source.requires_new_evidence === true,
2458
+ newEvidence: source.newEvidence === true || source.new_evidence === true,
2459
+ materialEvidence: source.materialEvidence === true || source.material_evidence === true,
2460
+ evidenceStrength: cleanText(source.evidenceStrength || source.evidence_strength, 120),
2461
+ evidenceSignals: cleanList(source.evidenceSignals || source.evidence_signals, 30, 200),
2462
+ startingFailureClass: cleanText(source.startingFailureClass || source.starting_failure_class, 120),
2463
+ startingBlockerFingerprint: cleanText(source.startingBlockerFingerprint || source.starting_blocker_fingerprint, 180),
2464
+ startingEvidenceHash: cleanText(source.startingEvidenceHash || source.starting_evidence_hash, 180),
2465
+ latestFailureClass: cleanText(source.latestFailureClass || source.latest_failure_class, 120),
2466
+ latestBlockerFingerprint: cleanText(source.latestBlockerFingerprint || source.latest_blocker_fingerprint, 180),
2467
+ latestEvidenceHash: cleanText(source.latestEvidenceHash || source.latest_evidence_hash, 180),
2468
+ requiredEvidence: cleanList(source.requiredEvidence || source.required_evidence, 30, 500),
2469
+ missingEvidence: cleanList(source.missingEvidence || source.missing_evidence, 30, 500),
2470
+ artifactPaths: cleanList(source.artifactPaths || source.artifact_paths, 80, 500),
2471
+ changedFiles: cleanList(source.changedFiles || source.changed_files, 80, 500),
2472
+ blockers: cleanList(source.blockers, 30, 500),
2473
+ nextAllowedAction: cleanText(source.nextAllowedAction || source.next_allowed_action, 180),
2474
+ forbiddenActions: cleanList(source.forbiddenActions || source.forbidden_actions, 30, 500),
2475
+ createdAt: cleanText(source.createdAt || source.created_at, 120)
2476
+ };
2477
+ var blockers = [
2478
+ normalized.contractId ? '' : 'Recovery execution proof is missing contractId.',
2479
+ normalized.directiveId || normalized.status === 'manual_handoff' ? '' : 'Recovery execution proof is missing directiveId.',
2480
+ normalized.dispatchAction ? '' : 'Recovery execution proof is missing dispatchAction.',
2481
+ validStatuses.includes(status) ? '' : 'Recovery execution proof has an invalid status.',
2482
+ normalized.canContinueRun && normalized.status !== 'proof_ready' ? 'Recovery execution cannot continue unless status=proof_ready.' : '',
2483
+ normalized.status === 'proof_ready' && normalized.proofRequiredBeforeContinuation && !normalized.materialEvidence ? 'Proof-ready recovery requires materialEvidence=true when proof is required.' : '',
2484
+ normalized.status === 'proof_ready' && normalized.requiresNewEvidence && !normalized.newEvidence ? 'Proof-ready recovery requires newEvidence=true when new evidence is required.' : '',
2485
+ normalized.canRunProductRepair && !normalized.canContinueRun ? 'Product repair cannot run before recovery proof can continue.' : '',
2486
+ normalized.canRunExpensiveModel && !normalized.canContinueRun ? 'Expensive model cannot run before recovery proof can continue.' : '',
2487
+ normalized.status !== 'proof_ready' && normalized.missingEvidence.length === 0 && normalized.proofRequiredBeforeContinuation ? 'Blocked recovery proof must list missingEvidence.' : '',
2488
+ normalized.forbiddenActions.length ? '' : 'Recovery execution proof must include forbiddenActions.'
2489
+ ].filter(Boolean);
2490
+ return {
2491
+ valid: blockers.length === 0,
2492
+ status: blockers.length ? 'blocked' : normalized.status,
2493
+ blockers: blockers,
2494
+ normalized: normalized
2495
+ };
2496
+ }
2323
2497
  function newListEntries(current, previous) {
2324
2498
  var existing = new Set(previous.map(function (entry) { return cleanText(entry, 500); }).filter(Boolean));
2325
2499
  return current