Dashboard › cli › Distillation
4836dd3c-a34a-4a10-9ce6-b39f900f4fd8["lore_tm_v1_2UI-IVgYW6a48muBQGKYtsMbNPjmSLGLXXWummbvf2s","lore_tm_v1_nWedeMs8RisYrsYurgmX5rQiw2CDpy5pidQdl3N0GX8","lore_tm_v1_XPtbo_vKYgq4o8cSIqA0lIOJPdLICwsYFNv4GlcYNGw","lore_tm_v1_9NoUtlIUAdk578gM6msL3YC9JFwSxhXa0Ukmx0WUf3s"]
packages/cli/src/lib/list-command.ts parses flags.period into a TimeRange object, so no manual time-range parsing is needed.getAllEntries() entries always have aliases present at runtime, using an empty array when there are none.buildListCommand() must always inject --fresh unless the command already defines it.buildListCommand() is always the target using the org/project pattern.packages/cli/src/lib/list-command.ts defines cursor navigation keywords next, prev, and first; the cursor flag also accepts a raw cursor string, while bare integers are rejected early.packages/cli/src/lib/list-command.ts defines FRESH_FLAG, FRESH_ALIASES mapping -f to --fresh, LIST_PERIOD_FLAG, PERIOD_ALIASES, paginationHint(), and buildListCommand().packages/cli/src/lib/list-command.ts dynamically loads ../app.js to inspect route subcommands; its fallback accounts for Nodeβs ESM resolver being unable to resolve .js to .ts for transitive imports.buildListCommand() intercepts a first positional value that matches a route subcommand, supports omitted-target auto-detection with a command-specific hint, injects common flags, and emits a returned pagination hint when result.hint is present.packages/cli/src/lib/mutate-command.ts lines 280-410 defines DeleteCommandOptions.noDryRunFlag to skip --dry-run/-n and DeleteCommandOptions.noNonInteractiveGuard to skip the non-interactive safety pre-hook.buildDeleteCommand() in packages/cli/src/lib/mutate-command.ts is a destructive-operation wrapper around buildCommand(): it auto-injects --yes, --force, and --dry-run unless already defined or disabled by options; injects -y, -f, and -n only when each alias key is free; and preserves existing parameters, flags, and aliases.buildDeleteCommand() always injects --yes when absent; --force can be suppressed with noForceFlag; --dry-run can be suppressed with noDryRunFlag. Alias injection maps y β yes, f β force, and n β dry-run, respecting opt-outs and existing alias keys.buildDeleteCommand() runs guardNonInteractive() before the original command function unless noNonInteractiveGuard is set. The guard refuses non-TTY execution unless --yes or --force was passed, while --dry-run bypasses it because no changes are made.buildDeleteCommand() still own their data-dependent confirmation prompts inside func(), using confirmByTyping() and isConfirmationBypassed().packages/cli/src/commands/agent-conversation/list.ts defines ListFlags as limit: number, optional query: string, period: TimeRange, json: boolean, optional cursor: string, fresh: boolean, and optional fields: string[].COMMAND_NAME = "agent-conversation list", PAGINATION_KEY = "agent-conversation-list", and DEFAULT_PERIOD = "7d"; its optional positional argument has placeholder org, brief Organization slug, and is parsed with String.packages/cli/src/commands/agent-conversation/list.ts uses buildListCommand("agent-conversation", ...); its explicit flags are limit, query, and period, with aliases from PERIOD_ALIASES plus n β limit and q β query.limit flag is parsed through validateLimit(value, LIST_MIN_LIMIT, LIST_MAX_LIMIT), defaults to String(LIST_DEFAULT_LIMIT), and is documented as Number of conversations (${LIST_MIN_LIMIT}-${LIST_MAX_LIMIT}).sentry agent-conversation list for auto-detected organization; 2. sentry agent-conversation list my-org for an explicit organization; 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.resolveOrg({ org: target, cwd }); failure throws new ContextError("Organization", USAGE_HINT).buildPaginationContextKey("agent-conversation", org, { q: flags.query, period: serializeTimeRange(flags.period) }), resolves navigation via resolveCursor(flags.cursor, PAGINATION_KEY, contextKey), and persists it using advancePaginationState(PAGINATION_KEY, contextKey, direction, nextCursor).flags.period using timeRangeToApiParams(), then calls listConversations(org, { query: flags.query, limit: flags.limit, cursor, ...timeParams }) through withProgress() with message Fetching conversations (up to ${flags.limit})....No conversations on this page. when the current page is empty but hasMore is true, No agent conversations found. when empty with no more pages, or Agent conversations in ${org}:\n\n${formatConversationTable(conversations)} otherwise.data, hasMore, and boolean hasPrev, conditionally adds nextCursor, and applies filterFields() to each conversation only when a non-empty fields array is supplied. Its output schema is ConversationListItemSchema.-q "${flags.query}" and preserve a non-default period through appendPeriodHint(parts, flags.period, DEFAULT_PERIOD); next/previous commands are sentry agent-conversation list ${org} -c next${flagSuffix} and sentry agent-conversation list ${org} -c prev${flagSuffix}.packages/cli/src/commands/agent-conversation/view.ts defines usage as [<org>/]<conversation-id> and the usage hint as sentry agent-conversation view [<org>/]<conversation-id>.parseConversationTarget() in packages/cli/src/commands/agent-conversation/view.ts trims the target; with no slash it treats the whole value as conversationId; with one slash it splits the organization before the slash and conversation ID after it. Conversation IDs are organization-scoped, not org/project-scoped, and never contain /.parseConversationTarget() rejects multiple slashes with validationError("Conversation target must contain at most one '/'.", [USAGE_HINT], "conversation-id"); it rejects an empty organization or conversation-ID segment with validationError("Conversation target must include both an organization and conversation ID when using '/'.", [USAGE_HINT], "conversation-id").buildCommand() rather than buildListCommand(), explicitly defines fresh: FRESH_FLAG and aliases: FRESH_ALIASES, and invokes applyFreshFlag(flags) at the start of execution.sentry agent-conversation view conv-123 with organization auto-detection; 2. sentry agent-conversation view my-org/conv-123 with explicit organization; 3. sentry agent-conversation view my-org/conv-123 --json.new ContextError("Conversation ID", USAGE_HINT, []), resolves the org using resolveOrg({ org: orgArg, cwd }), and throws new ContextError("Organization", USAGE_HINT) if resolution fails.getConversationSpans(org, conversationId) inside withProgress() with message Fetching conversation spans...; it builds output using buildTranscriptResult(conversationId, org, spans, title), assigns the APIβs truncated value to result.truncated, and yields new CommandOutput<TranscriptResult>(result) formatted by formatTranscriptResult.