Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions packages/replay-port/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"@agent-device/ad-script": "workspace:*",
"@agent-device/capture-kit": "workspace:*",
"@agent-device/contracts": "workspace:*",
"@agent-device/host-kit": "workspace:*",
"@agent-device/kernel": "workspace:*",
"@agent-device/maestro": "workspace:*",
"@agent-device/replay-test": "workspace:*",
Expand All @@ -35,10 +36,38 @@
"types": "./src/daemon-port/session-replay-maestro-request.ts",
"default": "./src/daemon-port/session-replay-maestro-request.ts"
},
"./session-replay-report-action": {
"types": "./src/daemon-port/session-replay-report-action.ts",
"default": "./src/daemon-port/session-replay-report-action.ts"
},
"./session-replay-runtime-artifacts": {
"types": "./src/daemon-port/session-replay-runtime-artifacts.ts",
"default": "./src/daemon-port/session-replay-runtime-artifacts.ts"
},
"./session-replay-suggestion-ranking": {
"types": "./src/daemon-port/session-replay-suggestion-ranking.ts",
"default": "./src/daemon-port/session-replay-suggestion-ranking.ts"
},
"./session-replay-test-policy": {
"types": "./src/daemon-port/session-replay-test-policy.ts",
"default": "./src/daemon-port/session-replay-test-policy.ts"
},
"./session-replay-trace": {
"types": "./src/daemon-port/session-replay-trace.ts",
"default": "./src/daemon-port/session-replay-trace.ts"
},
"./session-replay-vars": {
"types": "./src/session-replay-vars.ts",
"default": "./src/session-replay-vars.ts"
},
"./session-test-infrastructure": {
"types": "./src/daemon-port/session-test-infrastructure.ts",
"default": "./src/daemon-port/session-test-infrastructure.ts"
},
"./session-test-outcome": {
"types": "./src/daemon-port/session-test-outcome.ts",
"default": "./src/daemon-port/session-test-outcome.ts"
},
"./target-classification": {
"types": "./src/daemon-port/target-classification.ts",
"default": "./src/daemon-port/target-classification.ts"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import fs from 'node:fs';
import path from 'node:path';
import { test } from 'vitest';
import { collectReplayActionArtifactPaths } from '../session-replay-runtime-artifacts.ts';
import { mkdtempForTestSync } from '../../../../__tests__/test-utils/tmp-dir.ts';
import { mkdtempForTestSync } from '../../tmp-dir.fixtures.ts';

test('collectReplayActionArtifactPaths includes existing failed action artifacts', () => {
const root = mkdtempForTestSync('agent-device-replay-artifacts-');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { test } from 'vitest';
import assert from 'node:assert/strict';
import { isReplayInfrastructureFailure } from '../session-test-infrastructure.ts';
import { ALLOCATOR_CLAIM_MISSING } from '../../../device/device-claim-conflict.ts';
import type { DaemonResponse } from '../../../daemon-request.ts';
import type { DaemonResponse } from '@agent-device/kernel/contracts';
import type { ReplaySuiteTestResult } from '@agent-device/contracts/replay';

test('isReplayInfrastructureFailure accepts shared boot diagnostic reasons', () => {
Expand Down Expand Up @@ -132,7 +131,7 @@ test('isReplayInfrastructureFailure does not retry a missing allocator-held clai
code: 'COMMAND_FAILED',
message:
'android device emulator-5554 is a managed identity with no allocator-held execution claim for this installation.',
details: { reason: ALLOCATOR_CLAIM_MISSING, retriable: false },
details: { reason: 'allocator-claim-missing', retriable: false },
},
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { expect, test } from 'vitest';
import { toReplayTestAttemptOutcome } from '../session-test-outcome.ts';
import type { DaemonResponse } from '../../../daemon-request.ts';
import type { DaemonResponse } from '@agent-device/kernel/contracts';

test('failed attempt outcome carries warnings from the error details (#2560)', () => {
const response: DaemonResponse = {
Expand Down
9 changes: 9 additions & 0 deletions packages/replay-port/src/tmp-dir.fixtures.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';

/** The unit suite redirects TMPDIR to a per-run directory removed after all workers finish. */
// fallow-ignore-next-line code-duplication
export function mkdtempForTestSync(prefix: string): string {
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.
return fs.mkdtempSync(path.join(os.tmpdir(), prefix));
}
3 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
splitReplayCommandRequest,
} from '@agent-device/replay-port/replay-dispatch-envelope';
import type { ReplayTestCommand } from '@agent-device/replay-port/command-types';
import { REPLAY_ONLY_TEST_FLAG_REJECTIONS } from '../session-replay-test-policy.ts';
import { REPLAY_ONLY_TEST_FLAG_REJECTIONS } from '@agent-device/replay-port/session-replay-test-policy';
import { replayCommandFamily } from '../../../../commands/replay/index.ts';
import { mkdtempForTestSync } from '../../../../__tests__/test-utils/tmp-dir.ts';
import type { DaemonInvokeFn, DaemonRequest } from '../../../daemon-request.ts';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
swipePayloadFromPositionals,
} from '@agent-device/contracts/gesture-normalization';
import { buildDisplayPositionals } from '@agent-device/session-journal/session-event-action';
import { appendReplayTraceEvent } from './session-replay-trace.ts';
import { appendReplayTraceEvent } from '@agent-device/replay-port/session-replay-trace';
import { inferFillText, readRecordedInputVariableName } from '@agent-device/ad-script';
import { type DaemonResponse } from '@agent-device/kernel/contracts';

Expand Down
4 changes: 2 additions & 2 deletions src/daemon/replay/internal/session-replay-divergence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import type {

import type { ReplayObservationEvidence } from '@agent-device/contracts/replay';
import { boundReplayDivergenceForSession } from './session-replay-divergence-publication.ts';
import type { ReplayReportAction } from './session-replay-report-action.ts';
import { rankAndDedupeReplaySuggestions } from './session-replay-suggestion-ranking.ts';
import type { ReplayReportAction } from '@agent-device/replay-port/session-replay-report-action';
import { rankAndDedupeReplaySuggestions } from '@agent-device/replay-port/session-replay-suggestion-ranking';

import {
type ReplayDivergence,
Expand Down
2 changes: 1 addition & 1 deletion src/daemon/replay/internal/session-replay-heal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import path from 'node:path';
import { uniqueStrings } from '@agent-device/kernel/collections';
import { readSelectorExpression } from '@agent-device/selectors';
import { isTouchTargetCommand } from '@agent-device/ad-script';
import type { ReplayReportAction } from './session-replay-report-action.ts';
import type { ReplayReportAction } from '@agent-device/replay-port/session-replay-report-action';

/**
* ADR 0012 decision 1 / migration step 6: `--update` retired as an actor —
Expand Down
4 changes: 2 additions & 2 deletions src/daemon/replay/internal/session-replay-maestro-failure.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ import type {
ReplaySessionState,
ReplaySessionStore,
} from '@agent-device/replay-port/command-types';
import type { ReplayReportAction } from './session-replay-report-action.ts';
import { rankAndDedupeReplaySuggestions } from './session-replay-suggestion-ranking.ts';
import type { ReplayReportAction } from '@agent-device/replay-port/session-replay-report-action';
import { rankAndDedupeReplaySuggestions } from '@agent-device/replay-port/session-replay-suggestion-ranking';
import {
buildReplayDivergenceSuggestionForNode,
buildDivergenceScreen,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import type {
import { AppError } from '@agent-device/kernel/errors';
import type { ReplayTestAttemptStepSink } from '@agent-device/replay-test';
import { stripUndefined } from '@agent-device/kernel/record';
import { appendReplayTraceEvent } from './session-replay-trace.ts';
import { appendReplayTraceEvent } from '@agent-device/replay-port/session-replay-trace';

export function createMaestroReplayObserver(params: {
filePath: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { withReplayFailureDiagnostics } from './session-replay-runtime-failure.t

import { invokeReplayAction } from './session-replay-action-runtime.ts';
import type { AdReplayStepFailure, AdReplayStepRuntime } from '@agent-device/ad-replay';
import { collectReplayActionArtifactPaths } from './session-replay-runtime-artifacts.ts';
import { collectReplayActionArtifactPaths } from '@agent-device/replay-port/session-replay-runtime-artifacts';
import {
applyReplayDispatchGuard,
classifyReplayDispatchFailure,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { DaemonWireRequest } from '@agent-device/contracts/command';
import { emitDiagnostic } from '@agent-device/host-kit/diagnostics';
import { sleep } from '@agent-device/host-kit/retry';

import { collectReplayActionArtifactPaths } from './session-replay-runtime-artifacts.ts';
import { collectReplayActionArtifactPaths } from '@agent-device/replay-port/session-replay-runtime-artifacts';
import type {
ReplayRecordVideoRequest,
ReplaySessionStore,
Expand Down
9 changes: 6 additions & 3 deletions src/daemon/replay/internal/test-command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
type ReplayTestSuiteRequest,
} from '@agent-device/replay-test';
import { runReplayCommand } from './native-command.ts';
import { collectReplayActionArtifactPaths } from './session-replay-runtime-artifacts.ts';
import { collectReplayActionArtifactPaths } from '@agent-device/replay-port/session-replay-runtime-artifacts';
import { AppError, asAppError } from '@agent-device/kernel/errors';
import {
emitRequestProgress,
Expand All @@ -37,13 +37,16 @@ import {
buildReplayTestShardTargetResolver,
readReplayTestShardSelection,
} from './session-test-shard-devices.ts';
import { toReplayTestAttemptOutcome, toReplayTestFinalizeFailure } from './session-test-outcome.ts';
import {
toReplayTestAttemptOutcome,
toReplayTestFinalizeFailure,
} from '@agent-device/replay-port/session-test-outcome';
import {
buildReplayTestVideoOpenLifecycle,
finalizeReplayTestVideoRecording,
startReplayTestVideoRecordingIfReady,
} from './session-replay-video-recording.ts';
import { REPLAY_ONLY_TEST_FLAG_REJECTIONS } from './session-replay-test-policy.ts';
import { REPLAY_ONLY_TEST_FLAG_REJECTIONS } from '@agent-device/replay-port/session-replay-test-policy';
import {
errorResponse,
type DaemonResponse,
Expand Down
Loading