Dashboard › cli › Distillation
c575b414-9eb9-4acb-89e9-73cdc4f921ee["lore_tm_v1_dLU_VjpRRvgEikvfvUiq6h2sq2CeChfFxiV8hnp5q8E","lore_tm_v1_JRlB3Wtfm8gRkbhOUcu5mas_cH3UxyQRZemgxelX7qo","lore_tm_v1_BlRdA16IYxJ6BqzZmzgSJvQEoWAf0cFTXd9TZVuqoKY","lore_tm_v1_vOTDD7F8nboCuargknhH5hPXg1KSxNNGKKM4ajodjCw","lore_tm_v1_Sk7BFOvInILCCIRI7cXAFDcrsylAKeANjm-9yR7tJQ8","lore_tm_v1_gPMmpvG9pUqR7RBveaCIBRgMc3CEyf-zR6-i3TrOrIU","lore_tm_v1_iPQWi0KAtJDJjvpz4dNZV4uLimn-gLadPMK46V9327U","lore_tm_v1_vvdjLEfxFF8uIiWJIdinHGJ--il6BlohhuBmsFbdh7E","lore_tm_v1_C_eWoNWXVgSW7FH6dT0vwPxevKQNXih3ZHH9pUcgKek","lore_tm_v1_Ez_eqzeTpybP-g8xq3zaJ_EKfOOU-zChs8_7nAFy5j0","lore_tm_v1_57wHo3eILp3wt7afjBN_jdOO0PAO6jcy7xSRErIYTRs","lore_tm_v1_nJEQaO3MMO-gkWoJg5YJWSYJqrho-l4fuLveZXk12jo","lore_tm_v1_PXYWeK2hI34Bby1s8rSipV4Ob46OjCX5iV8xeT1xuyc"]
Date: September 9, 2026
packages/cli/src/commands/proguard/upload.ts configures uploadCommand with auth: false because --no-upload is a dry-run that does not require authentication; the actual upload path calls resolveOrgAndProject, which triggers authentication. Its docs state that org/project are auto-detected from DSN, environment variables, or config defaults.bbaa7b3b722b87f1bccfe84063269cbbcabe2741, value dfcceb584e52de2d477015a74dfe42ac1e26e5f44ede4bf5da2afc9e343179d8 -, and value 32; a preceding tool invocation produced no output.packages/cli/src/lib/command.ts:878-905 builds commands by passing docs: stricliDocs, parameters: mergedParams, and func: wrappedFunc to stricliCommand() through unknown and StricliBuilderArgs<CONTEXT> because injected parameters and the telemetry/output wrapper break Stricli’s original FLAGS/ARGS alignment enforced via NoInfer. It then calls attachDocumentationMetadata(cmd, builderArgs.docs), attaches outputConfig.schema as non-standard property __jsonSchema for introspect.ts, and exposes originalFunc as __rawFunc for internal dispatchers that must bypass telemetry, auth guard, rc-trust, and output processing.packages/cli/src/lib/introspect.ts defines extractRouteGroupCommands() to recursively collect visible commands while skipping entries with hidden; paths are formed as sentry ${routeName} ${subEntry.name.original}, and documentation examples are looked up by full path.extractAllRoutes() synchronously walks all visible top-level routes and returns RouteInfo[]; route maps use extractRouteGroupCommands(), while standalone commands use buildCommandInfo(target, \sentry ${routeName}`)`.resolveCommandPath() navigates nested route maps by path segments, returns null for empty paths or invalid traversal into a command, and returns an UnresolvedPath when a segment does not match. Fuzzy fallback uses fuzzyMatch(first, names, { maxResults: MAX_SUGGESTIONS }) with MAX_SUGGESTIONS = 3; recursion prepends parent route segments by replacing the ^sentry prefix via SENTRY_PREFIX_RE.apps/cli-docs/src/content/docs/commands/project.md documents: sentry project create [<org>/]<name>:<platform>... with argument [<name:platform...>], --team, and --dry-run; sentry project delete <org/project> with --yes, --force, and --dry-run; sentry project list [<org/project>] with --limit default "25", --platform, --fresh, and --cursor; and sentry project view [<org/project>].diff_quiet=1, checksum line dfcceb584e52de2d477015a74dfe42ac1e26e5f44ede4bf5da2afc9e343179d8 -, and value 32; another search returned No files found.kind: "array" matches: packages/cli/src/lib/introspect.ts:70; src/commands/cli/feedback.ts:41; cli/defaults.ts:308; trace/view.ts:484; trace/logs.ts:130; build/upload.ts:178; span/view.ts:384; span/list.ts:575; send-envelope.ts:26; schema.ts:324; replay/view.ts:360; monitor/run.ts:187; react-native/xcode.ts:491; log/view.ts:512; log/list.ts:730; local/run.ts:359; project/create.ts:637; proguard/upload.ts:172; issue/merge.ts:276; help.ts:36; event/view.ts:1073; event/send.ts:142; docs/query.ts:40; docs/list.ts:54; debug-files/upload.ts:567; debug-files/find.ts:131; dashboard/widget/edit.ts:212; dashboard/widget/delete.ts:85; dashboard/widget/add.ts:108; dashboard/view.ts:190; dashboard/revisions.ts:135; dashboard/restore.ts:72; dashboard/create.ts:157; and dashboard/list.ts:391.packages/cli/test/lib/introspect.test.ts found exactly 2 array-positional expectations: line 133 expects "<command...>", and line 141 expects "<args...>".packages/cli/test/lib/introspect.test.ts verifies getPositionalString() formatting: tuple placeholders become "<org> <project>"; an optional tuple element becomes "<required> [<optional>]"; unnamed tuple elements default to "<arg0> <arg1>"; an array with placeholder "command" becomes "<command...>"; and an unnamed array defaults to "<args...>".packages/cli/src/lib/command.ts establishes that all commands must import buildCommand from this module rather than @stricli/core, because direct Stricli imports bypass telemetry and global flag handling. The wrapper injects hidden --log-level and --verbose; injects --json and --fields when an OutputConfig exists; retains a command’s own --verbose or json flag; and records flag values and positional arguments as Sentry span context.BaseFlags is Readonly<Partial<Record<string, unknown>>>; BaseArgs is readonly unknown[]; CommandExample contains readonly description and complete command; and CommandDocumentation extends Stricli docs with optional readonly examples, while treating the first customUsage line as the canonical signature suffix and later lines as equivalent forms.CommandOutput<T> and may return { hint }; streaming yields render immediately, while JSON-capable commands must yield one aggregate value when callers need one parseable JSON document because individual chunks are pretty-printed rather than JSONL; void commands may return without yielding. Hints live exclusively on the CommandReturn, “never on individual yields.”LocalCommandBuilderArguments defaults to true: absence of both token and refresh token causes AuthError("not_authenticated"); expired tokens with a refresh token pass for silent API-client refresh. auth: false supports unauthenticated commands such as auth login, auth logout, auth status, help, and cli upgrade; auth: "dsn" skips both the bearer-token guard and .sentryclirc URL trust check for DSN-authenticated commands such as event send. skipRcUrlCheck: true is reserved for trust-establishing or trust-removing commands such as auth login and auth logout.--log-level flag is identified by const LOG_LEVEL_KEY = "log-level" and is “always stripped.”applyLoggingFlags(logLevel, verbose) gives --log-level priority over --verbose: a supplied level calls setLogLevel(parseLogLevel(logLevel)); otherwise verbose sets debug via setLogLevel(parseLogLevel("debug")); when neither is supplied, the environment/default level remains unchanged.applyOrgProjectFlags() writes injected --org and --project values to SENTRY_ORG and SENTRY_PROJECT before the command function executes, placing explicit CLI values at resolution priority #2 and overwriting existing environment values. It trims values and ignores empty/whitespace-only input; when a command owns its own org or project flag, that flag is passed through rather than applied as the compatibility shim.buildCommand is documented as the sole Sentry CLI command builder: it injects and applies hidden logging flags, strips injected flags before the original function runs, captures telemetry, injects and pre-parses output flags for OutputConfig, and enforces authentication by default. A command-owned verbose still affects logging but is not stripped and remains available to the original function.