Dashboard › cli › Distillation
352c8a8d-f030-4606-829e-d7483340032c["lore_tm_v1_voBwgLTaP2zmhVMw3PJzUmVotkJAhoYWtH5zdQkherE","lore_tm_v1_Y0-ti_zQL7JHweKX5qoRUuYYaWSIOncuTafiP4AC3OY","lore_tm_v1_CD7jYWWOEv5Bq9oy_resOZKfNzDVd3C1bDZ9DMqKhg4","lore_tm_v1_j2V-an5IJELjNrk75Jx3rNxbg_S91YWL9jzMzuhjarc","lore_tm_v1_9EwQeSWXKrlHTkFdqWCgOddtpdxYBVwu7FM5-uYHOlo","lore_tm_v1_vFOpbxYU4l5ptL-rpSRn-6hejxILRtaR8WEBkW0Zl5E","lore_tm_v1_m6zhc9AAlscG9DdlIGaFwKXT9x5UvsGrh07S7ZuM86Q","lore_tm_v1_Mu-D4Z9-bVCjLT35BG4LAIuCiXeiSmzyzR7YzqSLu3c","lore_tm_v1_wddIHdb8wYGuFD9Z5FqBMqROIIi5yG4Ox2SmPdl8a1w","lore_tm_v1_Mnaj9xawH8Vek9bJctlg7J39TL04hrHEteRaTMe_8ds","lore_tm_v1_nxEBRqtBw_cxs1rYNUxYkq2-QtS85PDQXsDsSQTlIHM"]
packages/cli/src/app.ts defines formatSynonymError(exc, ansiColor): it only handles CliError, obtains getSynonymSuggestionFromArgv(), returns undefined without a hint, and otherwise formats Error: ${exc.format()}\nTip: ${synonymHint} with errorColor()/warning() when ANSI color is enabled; known synonym mistakes skip Sentry capture.escapesToOuterMiddleware(exc) in packages/cli/src/app.ts returns true for every OutputError, for AuthError with reason "not_authenticated" or "expired", and for ApiError with HTTP status 401 or 403.customText.exceptionWhileParsingArguments in packages/cli/src/app.ts handles: Case A, UnsatisfiedPositionalError via detectBareRouteGroup(ansiColor); Case B/plural aliases, UnexpectedPositionalError via detectPluralAliasMisuse(ansiColor); and known synonyms consumed by defaultCommand: "view" via getSynonymSuggestionFromArgv(). If no special case matches, it returns text_en.exceptionWhileParsingArguments(exc, ansiColor).customText.noCommandRegisteredForInput in packages/cli/src/app.ts starts with Stricliβs text_en.noCommandRegisteredForInput(), derives routeContext from the first non-flag token in process.argv.slice(2), calls getCommandSuggestion(routeContext, input), and appends a Tip: using suggestion.explanation and suggestion.command; ANSI output resets bold-red with \x1B[39m\x1B[22m before applying warning().customText.exceptionWhileRunningCommand in packages/cli/src/app.ts rethrows errors accepted by escapesToOuterMiddleware() because OutputError has already rendered and authentication errors may trigger login plus one retry; the following Case C handles unknown tokens silently consumed by defaultCommand: "view" and subsequent domain-level failures.CommandDocumentation/OrgListCommandDocs found 18 matches: packages/cli/src/commands/team/list.ts lines 22 and 59; packages/cli/src/commands/repo/list.ts lines 21 and 58; packages/cli/src/commands/monitor/list.ts lines 20 and 72; packages/cli/src/lib/mutate-command.ts lines 22 and 335; packages/cli/src/lib/list-command.ts lines 25, 552, 631, and 688; and packages/cli/src/lib/command.ts lines 110, 154, 421, 424, 442, and 461.buildDeleteCommand usages found 6 command files: packages/cli/src/commands/dashboard/widget/delete.ts line 51, packages/cli/src/commands/cli/uninstall.ts line 423, packages/cli/src/commands/release/delete.ts line 81, packages/cli/src/commands/project/delete.ts line 132, packages/cli/src/commands/alert/metrics/delete.ts line 45, and packages/cli/src/commands/alert/issues/delete.ts line 48.packages/cli/src/commands/dashboard/widget/delete.ts defines deleteCommand = buildDeleteCommand(...) with brief "Delete a widget from a dashboard" and a fullDescription explaining dashboard lookup by numeric ID or title, widget lookup by --index (0-based) or --title, and three embedded examples in this order: 1. sentry dashboard widget delete 12345 --index 0; 2. sentry dashboard widget delete 'My Dashboard' --title 'Error Rate'; 3. sentry dashboard widget delete 12345 --index 0 --dry-run."org/project/dashboard" and brief "[<org/project>] <dashboard-id-or-title>"; flags are optional parsed index using numberParser with brief "Widget index (0-based)", and optional parsed title using String with brief "Widget title to match"; aliases are { i: "index", t: "title" }.ValidationError("Specify --index or --title to identify the widget to delete.", "index") when neither flags.index nor flags.title is supplied.{ dryRun: true, widgetTitle, widgetCount, url } for dry runs and { deleted: true, widgetTitle, widgetCount, url } otherwise; widgetCount is result.dashboard.widgets?.length ?? 0.customUsage found 4 matches: packages/cli/src/commands/project/create.ts line 609 uses customUsage: ["[<org>/]<name>:<platform>..."]; packages/cli/src/commands/agent-conversation/view.ts line 75 uses customUsage: [USAGE]; and packages/cli/src/lib/command.ts documents it at line 107 and reads docs.customUsage?.[0] into primaryUsage at line 464.apps/cli-docs/src/fragments/commands/agent-conversation.md is empty (0 lines).agent-conversation found 65 matches across source, tests, generated SDK/docs, completion configuration, changelog, and skill files.packages/cli/test/script/generate-skill-markdown.test.ts covers listCommand and viewCommand, including signatures sentry agent-conversation list and sentry agent-conversation view; canonical list examples include # Explicit organization\nsentry agent-conversation list my-org; canonical view examples are ordered: 1. # View full transcript (organization auto-detected)\nsentry agent-conversation view conv-123; 2. # Explicit organization\nsentry agent-conversation view my-org/conv-123; 3. # JSON output\nsentry agent-conversation view my-org/conv-123 --json.sentry agent-conversation view [<org>/]<conversation-id> in packages/cli/test/commands/agent-conversation/view.test.ts line 261 and sentry agent-conversation list [<org>] in packages/cli/test/commands/agent-conversation/list.test.ts line 292; the list pagination key is "agent-conversation-list" at line 469.packages/cli/src/sdk.generated.ts exposes "agent-conversation" operations: list invokes ["agent-conversation","list"] with { limit, query, period, cursor } and optional positional [params.org]; view invokes ["agent-conversation","view"] with optional positional [params.orgConversationId].packages/cli/src/lib/complete.ts includes completion entries "agent-conversation list" and "agent-conversation view" at lines 132β133.packages/cli/src/commands/agent-conversation/view.ts defines canonical examples in this order: 1. sentry agent-conversation view conv-123; 2. sentry agent-conversation view my-org/conv-123; 3. sentry agent-conversation view my-org/conv-123 --json.packages/cli/src/commands/agent-conversation/list.ts defines COMMAND_NAME = "agent-conversation list" and PAGINATION_KEY = "agent-conversation-list"; its canonical examples are ordered: 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.buildPaginationContextKey("agent-conversation", org, {...}) and provides hints sentry agent-conversation list ${org} -c next${flagSuffix} and sentry agent-conversation list ${org} -c prev${flagSuffix}.packages/cli/src/app.ts registers conversationRoute, imports conversationListCommand, maps synonym "agent-conversations" to "agent-conversation", and uses "agent-conversations" as an alias for the list command.packages/cli/plugins/sentry-cli/skills/sentry-cli/references/agent-conversation.md contains sections sentry agent-conversation list [<org>] and sentry agent-conversation view [<org>/]<conversation-id> plus all 5 list examples and all 3 view examples.packages/cli/plugins/sentry-cli/skills/sentry-cli/SKILL.md lists sentry agent-conversation list [<org>] as βList recent agent conversations,β sentry agent-conversation view [<org>/]<conversation-id> as βView an agent conversation transcript,β and points to references/agent-conversation.md for full flags and examples.packages/cli/package.json identifies package sentry version 0.45.0-dev.0, ESM package type, CLI binary sentry: ./dist/bin.cjs, Node engine >=20.0, development runtime Node >=22.15, and package manager pnpm@10.11.0.packages/cli/package.json are: "generate:docs": "pnpm run generate:banner && pnpm run generate:parser && pnpm run generate:command-docs && pnpm run generate:skill && pnpm run generate:docs-sections", "generate:command-docs": "pnpm tsx script/generate-command-docs.ts", "generate:skill": "pnpm tsx script/generate-skill.ts", and "check:fragments": "pnpm tsx script/check-fragments.ts".packages/cli/package.json test/typecheck workflows regenerate artifacts first: typecheck runs generate:docs, generate:sdk, then tsc --noEmit; test:unit runs generate:docs, generate:sdk, then vitest run test/lib test/commands test/types test/script --coverage; test:e2e runs the same generators then vitest run test/e2e.packages/cli/package.json include @stricli/core 1.2.8, @stricli/auto-complete ^1.2.8, TypeScript ^5.9.3, Vitest ^4.1.9, TSX ^4.22.4, Biome 2.3.8, and Node types ^22.20.0.@stricli/core@1.2.8 contains formatUsageLineForParameters(parameters, args) at line 1798, with call sites at lines 2016 and 2117.@stricli/core@1.2.8, usage formatting helpers produce required flags as (${text}), optional flags as [${text}], variadic flags as ${text}..., required positionals as <${text}>, optional positionals as [<${text}>], and variadic positionals as <${text}>....formatUsageLineForParameters() omits hidden flags; when args.config.onlyRequiredInUsageLine is true, it also omits flags for which isOptionalAtRuntime(flag) is true. isOptionalAtRuntime(flag) evaluates flag.optional ?? hasDefault(flag), where hasDefault() requires a defined default.useAliasInUsageLine is enabled, prints boolean flags without a value, prints enum values joined by | when no string placeholder exists, and otherwise uses flag.placeholder ?? "value".formatUsageLineForParameters() filters out optional/defaulted entries under onlyRequiredInUsageLine; otherwise each positional uses param.placeholder ?? \arg${i + 1}`and renders optional/defaulted parameters as[<name>]and required parameters as<name>. Array positionals always render as <placeholder>..., using "args"` as the fallback placeholder.formatUsageLineForParameters() returns the space-joined sequence [...args.prefix, ...flagsUsage, ...positionalUsage].