Dashboard › cli › Distillation
d6a2ddc9-67e6-4942-a647-9c4e9e7784db["lore_tm_v1_yZa3BFQKaWxl3gnJAeQf3Rb8yamaA18nX3CeuJMdq7Y","lore_tm_v1_ckkSiqkhAotY8z5lYV5kLKtcnFmBQH4RH8IGN5H6aVE","lore_tm_v1_hxf0fvrHrPjXkRlocF70NZXHy284eB0wNGCFjM5oV90","lore_tm_v1_6K_zs3rMZG_XMjjPAZW25sti3Bl3fCnECDqNBGcvrsE","lore_tm_v1_1HrDC94BbxXiQ_WUZefU6FauvOtUkmJS1nnDUun_kKc","lore_tm_v1_ByxKIoydl7hs5V1R20i26oBhHHOYw3AMFc8qCYrcvzs","lore_tm_v1_ssbb7umVOS2N80GrgOvX0GfZKuegmJ4GHByP4hDU728","lore_tm_v1_xt_lQFktoXvohAe5riDx9rakfBI9Ype4kDi8Qs8u2Ts","lore_tm_v1_T_ptu6ktTqD6iOZutDiemjSyhbJQShCGF6Hbc2GuPI8"]
Date: September 9, 2026
/; unlike trace/replay IDs, they are not org/project-scoped. [<org>/]<conversation-id> therefore has at most one separator slash.sentry-cli proguard uuid byte-for-byte.packages/cli/src/commands/agent-conversation/view.ts defines parseConversationTarget(target): trims input, treats a no-slash value as conversationId with auto-detected org, or splits at the first / into org and the complete remaining conversationId; missing either segment throws new ContextError("Conversation ID", USAGE_HINT, []).packages/cli/src/commands/agent-conversation/view.ts initially defined USAGE = "[<org>/]<conversation-id>" and USAGE_HINT = \sentry agent-conversation view ${USAGE}`; its command docs used customUsage: [USAGE], brief "View an agent conversation transcript", and 3 structured examples in order: 1. sentry agent-conversation view conv-123(org auto-detected), 2.sentry agent-conversation view my-org/conv-123(explicit org), 3.sentry agent-conversation view my-org/conv-123 --json` (JSON output).viewCommand in packages/cli/src/commands/agent-conversation/view.ts uses positional placeholder "org/conversation-id" with brief "[<org>/]<conversation-id> - Org (optional) and conversation ID", supports FRESH_FLAG and FRESH_ALIASES, calls applyFreshFlag(flags), resolves the org through resolveOrg({ org: orgArg, cwd }), and throws ContextError("Organization", USAGE_HINT) when resolution fails.viewCommand fetches data through withProgress({ message: "Fetching conversation spans...", json: flags.json }, () => getConversationSpans(org, conversationId)), calls buildTranscriptResult(conversationId, org, spans, title), explicitly sets result.truncated = truncated, and yields new CommandOutput<TranscriptResult>(result).packages/cli/test/commands/agent-conversation/view.test.ts uses Vitest and partial module mocking for ../../../src/lib/api-client.js, ../../../src/lib/db/auth.js, ../../../src/lib/polling.js, and ../../../src/lib/resolve-target.js; function exports are wrapped with vi.fn(v), while namespace imports are retained for spyOn.packages/cli/test/commands/agent-conversation/view.test.ts define ORG = "test-org", CONVERSATION_ID = "conv-abc-123", context cwd: "/tmp", auth token "sntrys_test" with source "oauth", JSON_FLAGS = { json: true, fresh: false }, and HUMAN_FLAGS = { json: false, fresh: false }.makeSpan() in packages/cli/test/commands/agent-conversation/view.test.ts defaults to conversation ID "conv-abc-123", span ID "aabb112233445566", trace "00112233445566778899aabbccddeeff", project "my-project", project ID 42, span name "gen_ai.invoke_agent", status "ok", timestamps 1_716_500_000–1_716_500_010, operation type "ai_client", input "hi", output "hello", total tokens "100", and request/response model "gpt-4".sampleSpans contains 2 spans; the second uses span ID "ccdd112233445566", timestamps 1_716_500_020–1_716_500_030, user input "what is 2+2?", and assistant output "4".viewCommand.func tests cover: 1. slash-separated org and conversation ID resolution, 2. org auto-resolution when only the conversation ID is supplied, 3. missing-argument ContextError, 4. missing-argument message containing "Conversation ID", 5. unresolved-org ContextError, 6. unresolved-org message containing "organization", 7. JSON transcript output with conversationId, org, spanCount: 2, and array turns, 8. human output containing the conversation ID and org, 9. API truncated: true, 10. API truncated: false, and 11. a human-output truncation warning test beginning at line 357.No fixes applied./tmp/opencode/proguard-fragment-base.md had 19 lines, /tmp/opencode/proguard-reference-base.md had 37 lines, total 56./tmp/opencode/proguard-fragment-base.md documents 2 examples: 1. sentry proguard uuid ./app/build/outputs/mapping/release/mapping.txt to compute the UUID, 2. sentry proguard uuid mapping.txt --json for JSON output including the file path.sentry agent-conversation view produced: conv-123 → HTTP 403 Forbidden at /organizations/1/agents/conversations/conv-123/, exit code 30; my-org/conv-123 and whitespace-padded my-org/conv-123 → HTTP 403 Forbidden at /organizations/my-org/agents/conversations/conv-123/, exit code 30; my-org/ and /conv-123 → "Conversation ID is required" with usage sentry agent-conversation view [<org>/]<conversation-id>, exit code 22; my-org/conv/extra → HTTP 404 Not Found at /organizations/my-org/agents/conversations/conv%2Fextra/, exit code 30; whitespace-only input → "Conversation ID is required", exit code 22. Each run also warned repeatedly that .env.local was not found.packages/cli/src/commands/agent-conversation/list.ts defines COMMAND_NAME = "agent-conversation list", PAGINATION_KEY = "agent-conversation-list", DEFAULT_PERIOD = "7d", and an optional positional "org" described as "Organization slug".ConversationListResult contains conversations: ConversationListItem[], hasMore: boolean, optional hasPrev, optional nextCursor, and org: string; formatListHuman() returns "No conversations on this page." when an empty page still has more results, "No agent conversations found." when no results remain, or an "Agent conversations in ${org}:" heading plus formatConversationTable(conversations).jsonTransform() in packages/cli/src/commands/agent-conversation/list.ts optionally applies filterFields(c, fields) to each conversation and emits an envelope containing data, hasMore, Boolean hasPrev, and nextCursor only when present.listCommand documents 5 examples in order: 1. sentry agent-conversation list, 2. sentry agent-conversation list my-org, 3. sentry agent-conversation list --limit 50 --period 24h, 4. sentry agent-conversation list -q "has:errors", 5. sentry agent-conversation list my-org -c next.listCommand defines parsed limit through validateLimit(value, LIST_MIN_LIMIT, LIST_MAX_LIMIT) with default String(LIST_DEFAULT_LIMIT), optional parsed query, and period: LIST_PERIOD_FLAG; aliases combine PERIOD_ALIASES with n: "limit" and q: "query".buildPaginationContextKey("agent-conversation", org, { q: flags.query, period: serializeTimeRange(flags.period) }), resolveCursor(flags.cursor, PAGINATION_KEY, contextKey), advancePaginationState(...), hasPreviousPage(...), and hasMore = !!nextCursor.listConversations(org, { query: flags.query, limit: flags.limit, cursor, ...timeRangeToApiParams(flags.period) }) inside withProgress with message Fetching conversations (up to ${flags.limit})... and emits CommandOutput<ConversationListResult> containing conversations, hasMore, hasPrev, nextCursor, and org.-q "${flags.query}", append a nondefault period through appendPeriodHint(parts, flags.period, DEFAULT_PERIOD), and generate sentry agent-conversation list ${org} -c next${flagSuffix} and corresponding -c prev commands.packages/cli/src/commands/agent-conversation/view.ts replaces the earlier separate USAGE/customUsage and structured docs.examples setup with exact USAGE_HINT = "sentry agent-conversation view [<org>/]<conversation-id>"; its fullDescription embeds the 3 command examples as text while retaining the same parser, positional configuration, fresh flag handling, org resolution, API fetch, transcript construction, and truncation assignment.