Dashboard › cli › Distillation
7a47a10f-b94b-4ee0-831b-a7bc87403d43["lore_tm_v1_4to9pO_3NUV5xh41dM2TNRqEzoMe4E5pU60V1lFb-ZI","lore_tm_v1_PIRel4rgWbAg8wWKBzay4fKGS6zcShabLWdRf0V56jk","lore_tm_v1_ouv4on5Ic9TLCaodurRtQgfCEl5AqN0hZm5zU2O-QEw"]
Date: Sep 9, 2026
/; [<org>/]<conversation-id> therefore permits at most one slash, with the prefix interpreted as the organization and the remainder as the conversation ID.field; unfielded validation errors collapse into one Sentry fingerprint.packages/cli/src/commands/agent-conversation/view.ts changed from importing only ContextError to importing ContextError, validationError; it now defines const USAGE = "[<org>/]<conversation-id>"; and derives const USAGE_HINT = \sentry agent-conversation view ${USAGE}`;`.parseConversationTarget(target) in packages/cli/src/commands/agent-conversation/view.ts now rejects multiple slashes by comparing trimmed.indexOf("/") with trimmed.lastIndexOf("/"); it throws validationError("Conversation target must contain at most one '/'.", [USAGE_HINT], "conversation-id").parseConversationTarget(target) now treats empty organization or conversation-ID segments around / as malformed input and throws validationError("Conversation target must include both an organization and conversation ID when using '/'.", [USAGE_HINT], "conversation-id"), replacing new ContextError("Conversation ID", USAGE_HINT, []).parseConversationTarget() JSDoc was updated to state it throws ValidationError for empty segments or multiple slashes, replacing the prior statement that it throws ContextError when the conversation-ID segment is empty.packages/cli/src/commands/agent-conversation/view.ts retains ContextError("Conversation ID", USAGE_HINT, []) for an entirely missing/blank positional target and ContextError("Organization", USAGE_HINT) when resolveOrg({ org: orgArg, cwd }) cannot determine an organization.customUsage: [USAGE]; prose-embedded examples were replaced by 3 structured examples in this exact order: 1. "View full transcript (organization auto-detected)" → sentry agent-conversation view conv-123; 2. "Explicit organization" → sentry agent-conversation view my-org/conv-123; 3. "JSON output" → sentry agent-conversation view my-org/conv-123 --json.packages/cli/src/commands/agent-conversation/list.ts now imports getPositionalString from ../../lib/introspect.js, defines reusable POSITIONAL as an optional tuple parameter with placeholder "org", brief "Organization slug", parser String, and optional: true, and derives USAGE_HINT as sentry ${COMMAND_NAME} ${getPositionalString(POSITIONAL)}.parameters.positional: POSITIONAL and uses new ContextError("Organization", USAGE_HINT) when organization resolution fails, replacing the hard-coded hint sentry ${COMMAND_NAME} <org>.customUsage: ["[<org>]"]; its full description now says the organization is auto-detected when omitted."List recent agent conversations" → sentry agent-conversation list; 2. "Explicit organization" → sentry agent-conversation list my-org; 3. "Show more, last 24 hours" → sentry agent-conversation list --limit 50 --period 24h; 4. "Filter conversations" → sentry agent-conversation list -q "has:errors"; 5. "Paginate through results" → sentry agent-conversation list my-org -c next.packages/cli/src/lib/errors.ts documents the error taxonomy: ContextError is for omitted required context, ResolutionError is for a provided value that cannot be matched, and ValidationError is for malformed input.ContextError behavior in packages/cli/src/lib/errors.ts: omitting alternatives means auto-detection was attempted and triggers the default DSN/project-detection alternatives plus a "Could not auto-detect ..." headline; explicitly passing alternatives, including [], produces an "is/are required" headline; [] is intended when defaults are irrelevant, such as missing positional IDs.ContextError enforces that command is a single-line CLI usage hint; if it contains \n, its constructor throws an Error directing the caller to use ResolutionError for resolution failures.packages/cli/src/lib/errors.ts defines buildValidationMessage(headline, examples, note?), which renders the headline, optional "Try:" lines for every example, and an optional separate "Note:" section; validationError(headline, examples, field?, note?) wraps that output in new ValidationError(..., field).