Dashboard › cli › Distillation
c05bdeb1-3904-4c46-858a-0243f5cf02af["lore_tm_v1_WUCOwr_8mxMAAloGskVxTqb4k03TKxVcoJw69Q9_8Y0","lore_tm_v1_HjxbcIB8JJJ-pMQ7bPVuOWlgvyeialP_82BOgE1g_jA","lore_tm_v1_70gA4KxrZuDK5-DBd0g4M6WjE1kp_HQlZaXCvXyAIM8","lore_tm_v1_OOUfZHTdMlhrhH-ADaTh-V62NvWvjUzuIaxOT3lPHDY","lore_tm_v1_OHFEfWjnu4eOqWUCzyV_Bb806xUfWz_bNtJ0HydQk3c"]
Date: Sep 9, 2026
packages/cli/test/script/generate-skill-markdown.test.ts has 134 lines and tests extractCommandPathFromHeading(), formatCommandExamples(), and matchExampleToCommand() from packages/cli/script/generate-skill-markdown.js.extractCommandPathFromHeading() fixtures map `sentry issue view <issue-id>` to sentry issue view, `sentry project create [<org>/]<name>:<platform>...` to sentry project create, and `sentry auth status` to sentry auth status; descriptive heading Create a project returns undefined.buildCommandInfo() for listCommand and viewCommand: list has no __primaryUsage, positional syntax [<org>], and example # Explicit organization\nsentry agent-conversation list my-org; view has positional syntax [<org>/]<conversation-id> and exactly 3 ordered examples: 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.formatCommandExamples(view.examples) must render **Examples:**, a blank line, one fenced bash block, and the 3 view examples in their original order with blank lines between examples.matchExampleToCommand() behavior: a block containing sentry project create web:javascript api:python-django maps to sentry project create; bare sentry auth examples map to default subcommand sentry auth login; and longer path sentry auth login is preferred over shorter competing prefixes such as sentry auth status.: and must never use a space-separated form.plugins/sentry-cli/skills/sentry-cli/references/project.md to contain heading ### \sentry project create [<org>/]<name>:<platform>...`, examples sentry project create web:javascript api:python-django worker:nodeandsentry project create my-new-app:javascript-nextjs, and no occurrences of sentry project create "My New App":, sentry project create my-new-app javascript-nextjs, or sentry project create my-org/my-new-app javascript-nextjs`.packages/cli/test/lib/introspect.property.test.ts uses fast-check, Vitest, and DEFAULT_NUM_RUNS to property-test extractAllRoutes(), extractFlags(), getPositionalString(), and resolveCommandPath()."boolean", "parsed", or "enum"; lowercase-letter names of length 1β10; flag maps containing 0β5 entries; commands with parameters: { flags, aliases: {} }; and one-level route maps containing 0β5 command entries.extractFlags() always returns one FlagInfo per input entry.extractFlags() properties additionally require preservation of every input flag name and optional: true by default for boolean flags whose source definition has optional === undefined.getPositionalString() always produce angle-bracket placeholders.placeholder or fallback arg${index}; required parameters render as <placeholder> and optional parameters as [<placeholder>].getPositionalString() always include an ellipsis (...).extractAllRoutes() properties require hidden-only entries never to appear and require the returned route count to be less than or equal to the number of visible entries.resolveCommandPath(routeMap, []) always returns null.resolveCommandPath() property requires every successfully resolved commandβs result.info.path to begin with sentry .references/repo.md:14 β sentry repo list [<org/project>]; 2. references/release.md:14 β sentry release list [<org/project>]; 3. references/release.md:77 β sentry release deploy <org/version> <environment> [<name>]; 4. references/release.md:88 β sentry release deploys <org/version>; 5. references/replay.md:14 β sentry replay list [<org/project>]; 6. references/project.md:58 β sentry project list [<org/project>]; 7. references/project.md:68 β sentry project view [<org/project>]; 8. references/org.md:22 β sentry org view [<org>]; 9. references/cli.md:14 β sentry cli completion [<shell>]; 10. references/cli.md:175 β sentry cli upgrade [<version>]; 11. references/alert.md:14 β sentry alert issues list [<org/project>]; 12. references/alert.md:52 β sentry alert issues create [<target>]; 13. references/alert.md:115 β sentry alert metrics list [<target>]; 14. references/monitor.md:28 β sentry monitor list [<org/project>]; 15. references/feedback.md:14 β sentry feedback list [<org/project>]; 16. references/explore.md:14 β sentry explore [<target>]; 17. references/init.md:14 β sentry init [<target>] [<directory>]; 18. references/trial.md:14 β sentry trial list [<org>]; 19. references/trial.md:29 β sentry trial start <name> [<org>]; 20. references/trace.md:14 β sentry trace list [<org/project>]; 21. references/team.md:14 β sentry team list [<org/project>]; 22. references/issue.md:14 β sentry issue list [<org/project>].packages/cli/src/lib/error-reporting.ts centralizes CLI error silencing and Sentry grouping tags; fingerprint normalization is server-side through Settings β Issue Grouping β Fingerprint Rules rather than implemented in code.SilenceReason is exactly "output_error" | "auth_expected" | "api_user_error" | "network_error" | "process_exit".classifySilenced(error) maps OutputError to "output_error", isNetworkError(error) to "network_error", every AuthError reasonβincluding not_authenticated, expired, and invalidβto "auth_expected", ApiError statuses strictly greater than 400 and below 500 to "api_user_error", and a CliError whose message starts with Process exited with code to "process_exit"; otherwise it returns null.ContextError captured because omitted org/project/ID volume drives auto-detection and UX improvements under CLI-3B; TLS certificate failures wrapped as ApiError(status 0) also remain captured, while raw TypeError: "fetch failed" network failures under CLI-16W are silenced.400 Bad Request as a captured CLI defect; unparseable user --query errors are converted at the command boundary by toSearchQueryError into ValidationError, preserving actionable user output and the signal for CLI-authored malformed queries under CLI-FA.sentry local run or sentry monitor run when represented as CliError("Process exited with code N"), treating them as expected user-script failures under CLI-20G.recordSilencedError() emits Sentry.metrics.distribution("cli.error.silenced", 1, { attributes }) with error_class and reason, plus api_status for ApiError and auth_reason for AuthError; metric failures are caught so they never block error handling.recordSilencedError() additionally logs silenced API user errors through Sentry.logger.info("cli.api_error_silenced", { status, endpoint, detail }); logger failures are ignored when the logger is uninitialized.ENDPOINT_PATTERNS normalize 9 endpoint shapes: 1. /organizations/[^/]+ β /organizations/{org}, 2. /projects/[^/]+/[^/]+ β /projects/{org}/{project}, 3. /issues/[^/]+ β /issues/{id}, 4. /events/[^/]+ β /events/{id}, 5. /groups/[^/]+ β /groups/{id}, 6. /releases/[^/]+ β /releases/{version}, 7. /teams/[^/]+/[^/]+ β /teams/{org}/{team}, 8. /dashboards/[^/]+ β /dashboards/{id}, 9. /customers/[^/]+ β /customers/{org}.BARE_NUMERIC_SEGMENT_RE is /(?<=\/api\/0\/.*)\/\d+(?=\/|$)/g; normalizeEndpoint() applies all ENDPOINT_PATTERNS and then replaces remaining bare numeric path segments with /{id} while preserving the /api/0/ version prefix. The documented transformation is "/api/0/projects/my-org/my-project/events/abc123/" β "/api/0/projects/{org}/{project}/events/{id}/".packages/cli/src/lib/telemetry.ts:899 exports setArgsContext(args: readonly unknown[]): void.