Skip to content

feat(device): add dcd device artifacts - #234

Merged
riglar merged 8 commits into
feature/agent-devicesfrom
feat/device-artifacts
Oct 19, 2026
Merged

riglar merged 8 commits into
feature/agent-devicesfrom
feat/device-artifacts

Conversation

@riglar

@riglar riglar commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Stacked on #232. Stage 5.3 of Agent Devices (dcd docs/device-v1-plan.md).

dcd device artifacts [id] [-o dir] [--links]

Downloads what a session left behind, from GET /device/sessions/:id/artifacts:

<session>-artifacts/
  recording.mp4
  device.log
  actions/001-screenshot.jpg
  actions/001-screen.json
  actions/002-screenshot.jpg
  ...
  • Actions are numbered oldest first, so the folder reads in order. The API pages newest first; the CLI follows next_before through every page (200 at a time).
  • The file extension comes from the content type.
  • Four downloads at a time. A file that can't be fetched, or has no link (already cleaned up), is reported by name and reason. The rest still download, and the command exits 2.
  • --links lists the signed links instead of downloading.
  • --json data: { dir, files: [{ kind, file, url, bytes, command_id?, created_at }], failed: [{ file, reason }] }.
  • It works on ended sessions until back-office cleanup removes the files. On an open session it notes that the video and log are saved when the session ends.

Tests

test/unit/device-artifacts.test.ts: paging, file naming and order, and partial download failure. pnpm lint, pnpm typecheck, pnpm test:unit (387 passing) and pnpm build pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_018tQfgpTsA9UhcopKoDezUA

riglar and others added 5 commits October 19, 2026 10:30
…ch and models

The first stages of the Agent Devices CLI (dcd plan 3.1 and 3.2).

- --json prints one envelope, {ok, session, data, error}, on success
  and on failure.
- Exit codes: 0 ok, 1 usage, 2 failed, 3 limit, 4 session ended or
  not found.
- The session id may be left out when exactly one session is open.
- start --app uploads a local build first; an https URL goes to the
  API's install-from-URL.
- Progress goes to stderr, with no spinner unless at a terminal.

Hidden from dcd --help until the API reaches production.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018tQfgpTsA9UhcopKoDezUA
Stage 3.3 of the Agent Devices CLI.

- inspect prints the compact screen; screenshot saves the frame to a
  file and reports its path.
- run sends one flow (a file or --yaml) with optional --env KEY=VALUE,
  and polls a flow that outlasts the API's wait. A failed flow exits 2.
- logs prints the app's recent log lines; --follow keeps printing new
  ones until the session ends.
- open opens the monitor at a terminal, and prints its URL otherwise.

Running a directory of flows needs an API change first and is refused
for now. openBrowser moves out of login.ts so device can share it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018tQfgpTsA9UhcopKoDezUA
Stage 5.3 of Agent Devices. Downloads what a session left behind into
./<session>-artifacts (or -o dir): recording.mp4, device.log, and per
action actions/NNN-screenshot.jpg and NNN-screen.json, numbered oldest
first. Follows every page. --links lists the signed links instead.
Files that cannot be fetched are reported, and the command exits 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018tQfgpTsA9UhcopKoDezUA
logs --follow, a long run and start --wait reused the token resolved at
the start. A dcd login access token lasts about an hour, so a poll past
that failed with an auth error. Each poll now calls refreshAuth first;
an API key is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018tQfgpTsA9UhcopKoDezUA
@claude

claude Bot commented Oct 19, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

🤖 Generated with Claude Code

@claude

claude Bot commented Oct 19, 2026

Copy link
Copy Markdown

Code review

No issues found. Checked for bugs and CLAUDE.md compliance.

…/device-inspect-run

# Conflicts:
#	src/commands/device.ts
#	src/gateways/device-gateway.ts
#	src/types/domain/device-session.types.ts
#	test/unit/device-command.test.ts
Base automatically changed from feat/device-inspect-run to feature/agent-devices October 19, 2026 11:37
…/device-artifacts

# Conflicts:
#	src/commands/device.ts
#	src/gateways/device-gateway.ts
#	src/types/domain/device-session.types.ts
@riglar
riglar merged commit 16e24c2 into feature/agent-devices Oct 19, 2026
3 checks passed
@riglar
riglar deleted the feat/device-artifacts branch October 19, 2026 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant