Dashboard › cli › Distillation
4f2b89e1-90aa-4c56-acd2-fc215e528bb2["lore_tm_v1_vnK3bhv73k19RexsF65kpq3lKZBJRj1_f-6H25ZTxTQ","lore_tm_v1_AS3RvuaCyFFO2KStnHz0sBTUbxTMnNS1Ughp2smT0zo","lore_tm_v1_siuD216gOzaJb6Xo3IeSNT0F8l_2eqfE-FT3oMlfE5I","lore_tm_v1_9HsqUAhb2tM8ZpLHGQNI93YH2QiuBxTGnk2xhSvxejU","lore_tm_v1_S4DIkW7TrnCHPXcLSivTCKp6krAakbFLvcBobHpsoCk","lore_tm_v1_4OuSUpy-JSovyiJgLayhId60njJUzGcdhcrCaKT_1KQ","lore_tm_v1_cAlRr3dvjzj62ZKbzKfMgD_jKIVreQs_XYvnTu-YnWo","lore_tm_v1_CueSuvFnpsUhSraD8oERvaKa6QnYJlKPD43HugFGxP8","lore_tm_v1_3sryHD5uF3IIkQq0At6EAUEK6ZLyrWx-d_hlpsmfpJM","lore_tm_v1_FmtnRbXWoDAt0ZTl4jDcp7lY9LqN7-Ds3inAMTqWLYs","lore_tm_v1_PwlusRMizrlL8BylNHQuB_DwHsVZjWuj4J0mMEesYZU","lore_tm_v1_mWFpyNRTkxrZ_35JtBH9qUHe-UCZ3ZOzgLWE4jRbsVA","lore_tm_v1_PyDR_J42zWbWoce0jGHMkNPM2vBl6buxtx3yRtu5Gaw","lore_tm_v1_eDS3vcsSdUGmGcPiuG98fq2ae0QsWW3lHmZCan_zT84","lore_tm_v1_LjutXG5L3nZ31M8BWRa5YTDb0Dsdn72UK8R430coXzo","lore_tm_v1_HAejDbwxn2PIxRX0-9drNuvAgo-VEbFiba0F4q3fSaw","lore_tm_v1_4kmY1uBJdxYtyt471-qF7rjvIt2udcKiKtvHxrBWjvI","lore_tm_v1_UtHgEnsFVuAL05UitBnY9XLE5--ymSvBUdtoUOKOmJ8","lore_tm_v1_wJ-qubZdz6wcvLGFUYd0pp-4pfDDhZImyMkLXbsJM7M","lore_tm_v1_-rDdW7JPO09_QpZyNVroIHKiqxrpk4EGevQBD4b-Op8","lore_tm_v1_QDbGKJDgNxOf0ncPSFfLYUWi-4LKP_eO50ZSy350bFU","lore_tm_v1_l9-IEo_KiIuUr9SHm8r3LihMKj9iAtiNVwr60oOil-c","lore_tm_v1_BEEO66ra6h7eZ7IbZPJC8949eSwD-UzeKI2dttLa2aY"]
π΄ (09:34) packages/cli/src/commands/agent-conversation/list.ts defines listCommand with COMMAND_NAME = "agent-conversation list", PAGINATION_KEY = "agent-conversation-list", DEFAULT_PERIOD = "7d", and an optional positional org; the organization is resolved through resolveOrg({ org: target, cwd }), otherwise a ContextError("Organization", USAGE_HINT) is thrown.
π΄ (09:34) packages/cli/src/commands/agent-conversation/list.ts supports limit, query, and period flags, aliases n: "limit", q: "query", and ...PERIOD_ALIASES; parseLimit() validates against LIST_MIN_LIMIT and LIST_MAX_LIMIT, with default String(LIST_DEFAULT_LIMIT).
π΄ (09:34) Agent-conversation list pagination builds its context key with buildPaginationContextKey("agent-conversation", org, { q: flags.query, period: serializeTimeRange(flags.period) }), resolves next/prev cursors via resolveCursor(), advances state with advancePaginationState(), and emits hints using sentry agent-conversation list ${org} -c next|prev, preserving -q and non-default period filters.
π΄ (09:34) Agent-conversation list calls listConversations(org, { query: flags.query, limit: flags.limit, cursor, ...timeRangeToApiParams(flags.period) }) through withProgress() with message Fetching conversations (up to ${flags.limit})....
π΄ (09:34) Agent-conversation list JSON output is an envelope with data, hasMore, and boolean hasPrev, plus nextCursor only when present; requested fields are applied per conversation through filterFields(c, fields). Human output is No conversations on this page. when the current page is empty but hasMore, No agent conversations found. when no results remain, or an Agent conversations in ${org}: table.
π΄ (09:34) packages/cli/src/commands/agent-conversation/view.ts documents usage as [<org>/]<conversation-id> and accepts one positional with placeholder org/conversation-id; examples are sentry agent-conversation view conv-123, sentry agent-conversation view my-org/conv-123, and sentry agent-conversation view my-org/conv-123 --json.
π΄ (09:34) User stated agent conversation IDs are organization-scoped, not organization/project-scoped like trace or replay IDs, and never contain /; therefore the view target has at most one slash, with text before the first slash interpreted as the organization and the remainder as the conversation ID.
π΄ (09:34) parseConversationTarget(target) in packages/cli/src/commands/agent-conversation/view.ts trims the target, uses indexOf("/"), returns { conversationId: trimmed } when no slash exists, and otherwise returns { org, conversationId }; an empty organization or conversation-ID segment throws new ContextError("Conversation ID", USAGE_HINT, []).
π΄ (09:34) viewCommand.func applies applyFreshFlag(flags), rejects a missing or whitespace-only target with ContextError("Conversation ID", USAGE_HINT, []), auto-resolves the organization via resolveOrg({ org: orgArg, cwd }), and throws ContextError("Organization", USAGE_HINT) if resolution fails.
π΄ (09:34) Agent-conversation view fetches data through getConversationSpans(org, conversationId) wrapped by withProgress() using message Fetching conversation spans...; it constructs the result with buildTranscriptResult(conversationId, org, spans, title), assigns the APIβs truncated value, and yields CommandOutput<TranscriptResult>.
π΄ (09:35) packages/cli/test/commands/agent-conversation/view.test.ts tests: slash-separated organization and conversation-ID parsing; organization auto-resolution for an ID-only target; missing-argument ContextError; unresolved-organization ContextError; JSON transcript output; human transcript output; and propagation of both truncated: true and truncated: false.
π΄ (09:35) The view-command tests use ORG = "test-org" and CONVERSATION_ID = "conv-abc-123"; the JSON-result assertions require conversationId, org, spanCount === 2, and an array-valued turns. The explicit-target case verifies resolveOrg() receives ORG and getConversationSpans() receives (ORG, CONVERSATION_ID); the ID-only case verifies resolveOrg() receives org: undefined and the API receives "auto-org".
π΄ (09:35) A repository search found 10 matches for sentry agent-conversation view or its no-args coverage across packages/cli/test/script/generate-skill-markdown.test.ts and packages/cli/test/commands/agent-conversation/view.test.ts; skill-Markdown expectations include all 3 view examples and their description comments.
π‘ (09:35) Assistant stated the patch identity matched exactly and began checking the wrapper against Stricliβs runtime types/help renderer, followed by validation of both generators and the agent-conversation parser at command boundaries.
π΄ (09:36) The workspace contains Stricli installations @stricli/auto-complete@1.3.0, @stricli/core@1.3.0, and patched @stricli/core@1.2.8_patch_hash=892258f886d48063b409e0ac6141260023c396d1ed4f915231701f6a34edffcc; packages/cli/node_modules/@stricli/core is present with dist/, package.json, and README.md.
π΄ (09:37) In patched Stricli 1.2.8βs dist/index.d.ts, CommandDocumentation requires brief: string, optionally accepts fullDescription?: string, and accepts customUsage?: readonly (string | CustomUsage)[]; CustomUsage has input: string and brief: string.
π΄ (09:38) Patched Stricli 1.2.8βs generateCommandHelpLines() renders each string customUsage as ${prefix} ${usage} and each object usage as ${prefix} ${usage.input} followed by its brief; when customUsage is absent it uses formatUsageLineForParameters(parameters, args). Built-in help/version usage lines are emitted separately afterward.
π΄ (09:39) Patched Stricli 1.2.8βs buildCommand() checks reserved flags ["help", "helpAll", "help-all"], reserved alias ["h"], negation collisions, and invalid variadic separators; it exposes brief and fullDescription getters, delegates usage to formatUsageLineForParameters(), and formats help through generateCommandHelpLines(builderArgs.parameters, builderArgs.docs, args).