Dashboard › cli › Distillation
dfad674f-a992-4103-8393-8afa76bed1db["lore_tm_v1_0kf3HRXL1ARPgwkngzUeSHVi7Zr5pEsPsPuQiea7Y4M","lore_tm_v1_9QyzGM_WSxyND1AmFgS0ASMXNrUxJMe42VXlKfyExbk","lore_tm_v1_GW1wFV6fhZKxXFzKxM-0fLQn5RtLASK71vPhVCStSGo","lore_tm_v1_hvCrfX6OKfVSuoSuLNK7iJQH6es6uXGkjFEC0g4w2fw","lore_tm_v1_PjHcH4Yfth4-FsIO56F2EnDXz7h44JgGLFtTulmfNYk","lore_tm_v1_2Zy7uO66H-tzg1IkIKN9NNpx_BCuZKltAQkpnPG-PvU","lore_tm_v1_fWhkcP9B25dUfJycAOTUJAlOlJhgL-gm0yKFowbWnMM","lore_tm_v1_22ttad6FiRs3VKndld2zfAzro-awbNdpg0yjBwHKhGE","lore_tm_v1_u7N7Vkn6kGwCUsa_VBfMeBoNWPVAwq_l2CS3BOL1Gs8","lore_tm_v1_YcjtItiIJoUTj6doo3N7ei1W4a0emitt55ZkbVG59HI","lore_tm_v1_fLd96tC1B904Vn8q0WEIOBcJjVhvv0v82U9xQMHs-Nc"]
v4.1.10 runs in /home/byk/Code/getsentry/cli-pr-1558/packages/cli each passed exactly 1 test file and 9 tests. Start times/durations were: 17:34:28/4.85s, 17:34:35/3.86s, 17:34:41/4.06s, 17:34:46/3.93s, 17:34:52/4.72s, 17:34:58/5.07s, 17:35:05/4.61s, 17:35:11/5.19s, 17:35:18/3.76s, and 17:35:23/3.79s.was removed in Vitest 4. All previouspoolOptions are now top-level options, linking to https://vitest.dev/guide/migration#pool-rework./home/byk/Code/getsentry/cli-pr-1558/packages/cli/test/lib/introspect.property.test.ts, which uses fast-check, Vitest, and DEFAULT_NUM_RUNS from ../model-based/helpers.js.test/lib/introspect.property.test.ts defines flagKindArb from "boolean", "parsed", and "enum"; flagDefArb records kind, brief, hidden, optional, and variadic; nameArb generates 1–10 lowercase letters; flag and route-entry arrays each have maximum length 5.extractFlags invariant: it “always returns one FlagInfo per input entry”; the property checks extractFlags(flags) length equals Object.keys(flags).length.extractFlags preserves flag names; the property builds a Set from result.map((f) => f.name) and verifies every key in the input flags map is present.optional=true; the property expects flag.optional to be true when flag.kind === "boolean" and flags[flag.name].optional === undefined.getPositionalString() must include < and > for nonempty tuples and render each parameter as <placeholder> or [<placeholder>], defaulting absent placeholders to arg${index}.getPositionalString({ kind: "array", ... }) to contain ....extractAllRoutes “never includes hidden entries”; the property specifically excludes names that occur only in hidden entries while allowing a same-named visible entry.extractAllRoutes(routeMap).length with the count of entries where !e.hidden.resolveCommandPath(routeMap, []) to be null."sentry "; the property checks result.info.path.startsWith("sentry ") when result?.kind === "command".customUsage occurrences in command source: /home/byk/Code/getsentry/cli-pr-1558/packages/cli/src/commands/project/create.ts line 609 with customUsage: ["[<org>/]<name>:<platform>..."], and /home/byk/Code/getsentry/cli-pr-1558/packages/cli/src/commands/agent-conversation/view.ts line 75 with customUsage: [USAGE],.ripgrep execution failed; another file lookup at 17:54 returned No files found./home/byk/Code/getsentry/cli-pr-1558/packages/cli/node_modules/@stricli/core contains exactly dist/, package.json, and README.md.node_modules/@stricli/core/dist/index.cjs, dist/index.js, and dist/index.d.ts.node_modules/@stricli/core/dist/index.js, generateCommandHelpLines(parameters, docs, args) uses each customUsage entry instead of generated positional usage: string entries render as ${prefix} ${usage}, object entries render usage.input plus italicized usage.brief; without customUsage, it calls formatUsageLineForParameters(parameters, args).buildCommand(builderArgs) validates reserved flags help, helpAll, and help-all, reserved alias h, boolean-negation collisions, and variadic separators that are empty or contain whitespace.src/commands/agent-conversation/view.ts: parseConversationTarget(target) trims input, splits on the first /, returns { conversationId } when no slash exists, and throws ContextError("Conversation ID", USAGE_HINT, []) if either org or conversation-ID segment is empty.src/commands/agent-conversation/view.ts defines USAGE_HINT as "sentry agent-conversation view [<org>/]<conversation-id>"; its tuple positional placeholder is "org/conversation-id" with brief "[<org>/]<conversation-id> - Org (optional) and conversation ID".viewCommand applies applyFreshFlag(flags), resolves the optional org with resolveOrg({ org: orgArg, cwd }), fetches spans through withProgress({ message: "Fetching conversation spans...", json: flags.json }, () => getConversationSpans(org, conversationId)), builds a TranscriptResult, assigns result.truncated = truncated, and yields new CommandOutput<TranscriptResult>(result).src/lib/command.ts, whose project rule says all commands must import buildCommand from the local module rather than directly from @stricli/core, because direct Stricli use bypasses telemetry and global flag handling.src/lib/command.ts defines command functions as async generators returning CommandReturn | void; non-streaming commands yield one CommandOutput<T>, streaming commands render each yield immediately, JSON-capable streaming commands must yield one aggregate value when callers require one parseable JSON document, and hints belong only on the generator return value.buildCommand injects hidden global flags --log-level, --verbose, --org, and --project; output-enabled commands additionally receive --json and --fields. --fields is pre-parsed with parseFieldsList() into string[].applyLoggingFlags() gives explicit --log-level priority over --verbose; --verbose maps to debug logging.applyOrgProjectFlags() trims injected --org/--project values and writes nonempty values to SENTRY_ORG/SENTRY_PROJECT, unless the command owns the corresponding flag.buildFieldsFlag() and enrichDocsWithSchema() use extractSchemaFields(); when schema fields exist, --fields help lists available names and fullDescription receives a JSON-fields section from formatSchemaForHelp().mergeGlobalFlags() tracks injected keys in stripKeys, always strips log-level, preserves command-owned json, org, and project behavior, and derives short aliases from GLOBAL_FLAGS.SENTRY_OUTPUT_FORMAT=json, and disables interactive prompts when json, yes, or dry-run is true.src/lib/command.ts manually calls generator.next() so it can capture the final CommandReturn; execution and final rendering use tracing spans "cli.command.exec" and "cli.command.render".auth === false or auth === "dsn"; DSN-auth commands also skip .sentryclirc URL trust validation. Missing credentials throw AuthError("not_authenticated").maybeRecoverWithHelp() handles a failed command whose positional args contain "help", "--h", or "-help" by dynamically importing ./help.js, warning the user to use --help, and writing formatted help; it applies only to CliError and excludes OutputError.buildCommand preserves the first customUsage item as non-standard property __primaryUsage, stores an output schema as __jsonSchema, and exposes the original generator as __rawFunc.sentry cli completion <shell> to sentry cli completion [<shell>] in both command-list and detailed-heading locations.apply-label: ${{ github.event.pull_request.head.repo.full_name == github.repository }}, uses: actions/upload-artifact@v4, a new comment Complete command line, including the \sentry` executable., and auth: false`.new URL(dsn) in src/lib/api/projects.ts line 212; origin comparison using new URL(url).origin === new URL(regionUrl).origin in src/lib/api/preprod-artifacts.ts line 126; and new URLSearchParams(), apiRequestToRegion<T>, and apiRequestToRegionNoContent in src/lib/api/infrastructure.ts lines 329, 489, and 646.