Dashboard › cli › Session 1YFBlrgyVUrb
1YFBlrgyVUrbeaTj0Read-only exploration in the current getsentry/cli repository. Thoroughness: very thorough. Investigate the shell installer and any generation/check scripts, tests, docs, CI, and release workflows that encode getsentry/cli GitHub or GHCR source locations. Focus only on installer/release-script parity, not TypeScript upgrade internals. Identify exact files, symbols/line ranges, whether installer is generated, how tests mock HTTP and 404s, and a minimal way to guarantee the installer and TypeScript ordered source list cannot drift. Also identify package scripts used for validation. Do not edit files. Return evidence and risks.
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus</path> <type>directory</type> <entries> .craft.yml .git .github/ .gitignore .lore.md .nojekyll .npmrc .opencode/ .plans/ .ruff_cache/ AGENTS.md apps/ CHANGELOG.md codemods/ coverage/ dist-bin/ dist/ docs/ LICENSE.md node_modules/ package.json packages/ pnpm-lock.yaml pnpm-workspace.yaml README.md test-results.junit.xml (26 entries) </entries>
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/AGENTS.md /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/AGENTS.md /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/CONTRIBUTING.md
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/AGENTS.md</path> <type>file</type> <content> 1: <!-- This section is maintained by the coding agent via lore (https://github.com/BYK/loreai) --> 2: ## Long-term Knowledge 3: 4: For long-term knowledge entries managed by [lore](https://github.com/BYK/loreai) (gotchas, patterns, decisions, architecture), see [`.lore.md`](.lore.md) in the project root. 5: <!-- End lore-managed section --> (End of file - total 5 lines) </content>
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/AGENTS.md</path> <type>file</type> <content> 1: # AGENTS.md 2: 3: Guidelines for AI agents working in this codebase. 4: 5: ## Project Overview 6: 7: **Sentry CLI** is a command-line interface for [Sentry](https://sentry.io), built with Node.js, [pnpm](https://pnpm.io), and [Stricli](https://bloomberg.github.io/stricli/). It lives in `packages/cli` of a pnpm workspace; the docs site lives in `apps/cli-docs`. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/CONTRIBUTING.md</path> <type>file</type> <content> 1: # Contributing to Sentry CLI 2: 3: This guide documents the patterns and conventions used in this CLI for consistency. 4: 5: ## Command Patterns 6: 7: We follow [gh CLI](https://cli.github.com/) conventions for best-in-class developer experience. 8: 9: ### List Commands 10: 11: List commands use **optional positional arguments** for context with smart auto-detection. 12: 13: ```bash 14: sentry org list [--limit N] [--json] 15: sentry project list [org] [--limit N] [--json] 16: sentry issue list [<org>/<project>] [--json] 17: ``` 18: 19: **Target syntax**: 20: - `<org>/<project>` - Explicit organization and project (e.g., `my-org/frontend`) 21: - `<org>/` - All projects in the specified organization 22: - `<project>` - Search for project by name across all accessible organizations 23: - *(omit)* - Auto-detect ...
No files found
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/plugins/sentry-cli/skills/sentry-cli/references/release.md /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/api/releases.test.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/lint-rules/no-args-join-in-release.grit /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/install /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/release-parse.property.test.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/release-notes.test....
No files found
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github</path> <type>directory</type> <entries> assets/ workflows/ (2 entries) </entries>
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/eval-skill-fork.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/docs-preview.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/publish-codemod.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/sentry-release.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/release.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/cleanup-doc-previews.yml /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f...
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/bundle.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/check-patches.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/build.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/text-import-plugin.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/search-query.pegjs /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/require-shim.mjs /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/paths.ts /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/install</path> <type>file</type> <content> 1: #!/bin/bash 2: set -euo pipefail 3: 4: RED='\033[0;31m' 5: MUTED='\033[0;2m' 6: NC='\033[0m' 7: 8: # Sentry error telemetry — fire-and-forget error reporting via envelope API. 9: # Uses the CLI's public write-only DSN. No PII collected. 10: # Opt-out: SENTRY_CLI_NO_TELEMETRY=1 11: SENTRY_DSN_KEY="1188a86f3f8168f089450587b00bca66" 12: SENTRY_INGEST="https://o1.ingest.us.sentry.io" 13: SENTRY_PROJECT_ID="4510776311808000" 14: 15: # Generate a UUID for the event. Tries /proc, uuidgen, then awk fallback. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "toolkit-cli-workspace",
3: "version": "0.0.0",
4: "private": true,
5: "type": "module",
6: "packageManager": "pnpm@10.11.0",
7: "engines": {
8: "node": ">=18.0"
9: },
10: "scripts": {
11: "tsx": "pnpm --filter sentry run tsx",
12: "cli": "pnpm --filter sentry run cli",
13: "dev": "pnpm --filter sentry run dev",
14: "build": "pnpm --filter sentry run build",
15: "build:all": "pnpm --filter sentry run build:all",
16: "bundle": "pnpm --filter sentry run bundle",
17: "typecheck": "pnpm --filter sentry run typecheck",
18: "lint": "pnpm --filter sentry run lint",
19: "lint:fix": "pnpm --filter sentry run lint:fix",
20: "test": "pnpm --filter sentry run test",
21: "test:unit": "pnpm --filter sentry run test:unit",
22: "test:changed": "pnpm --filter sentry run ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "sentry",
3: "version": "0.40.0-dev.0",
4: "description": "Sentry CLI - A command-line interface for using Sentry built by robots and humans for robots and humans",
5: "repository": {
6: "type": "git",
7: "url": "git+https://github.com/getsentry/cli.git"
8: },
9: "main": "./dist/index.cjs",
10: "type": "module",
11: "types": "./dist/index.d.cts",
12: "exports": {
13: ".": {
14: "import": {
15: "types": "./dist/index.d.mts",
16: "default": "./dist/index.mjs"
17: },
18: "require": {
19: "types": "./dist/index.d.cts",
20: "default": "./dist/index.cjs"
21: }
22: }
23: },
24: "bin": {
25: "sentry": "./dist/bin.cjs"
26: },
27: "files": [
28: "dist/bin.cjs",
29: "dist/index.cjs",
30: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/install-script.test.ts</path>
<type>file</type>
<content>
1: /**
2: * Install Script Tests
3: *
4: * Exercises the shell installer with fake download tools so argument parsing and
5: * setup delegation can be validated without network access.
6: */
7:
8: import { spawn } from "node:child_process";
9: import {
10: chmodSync,
11: mkdirSync,
12: mkdtempSync,
13: readFileSync,
14: rmSync,
15: writeFileSync,
16: } from "node:fs";
17: import { tmpdir } from "node:os";
18: import { join } from "node:path";
19: import { afterEach, beforeEach, describe, expect, test } from "vitest";
20:
21: function noop(): void {
22: // Intentionally empty — absorbs async spawn errors
23: }
24:
25: const repoRoot = join(import.meta.dirname, "..", "..");
26: const installScript = join(repoRoot, "install");
27:
28: describe("install script", () => {
29: let ...
Found 100 matches (more matches available)
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/script/eval-provider.test.ts:
Line 73: vi.fn(async () => new Response("nope", { status: 404 }))
Line 78: ).rejects.toThrow(/OpenRouter 404/);
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/mocks/server.ts:
Line 181: status = 404;
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/mocks/routes.ts:
Line 141: return { status: 404, body: notFoundFixture };
Line 192: return { status: 404, body: notFoundFixture };
Line 221: return { status: 404, body: notFoundFixture };
Line 231: return { status: 404, body: notFoundFixture };
Line 241: return { status: 404, body: notFoundFixture };
Line 259: return { status: 404, body: ...
Found 2 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts: Line 571: * See: https://github.com/oven-sh/bun/issues/13237 Line 752: // See: https://github.com/oven-sh/bun/issues/13237
Found 17 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/binary.ts:
Line 152: return `https://github.com/getsentry/cli/releases/download/${version}/${getPlatformBinaryName()}`;
Line 157: "https://api.github.com/repos/getsentry/cli/releases";
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/input-validation.ts:
Line 15: * @see https://github.com/getsentry/cli/issues/350
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/ghcr.ts:
Line 5: * from ghcr.io/getsentry/cli. Nightly builds are pushed as OCI artifacts
Line 10: * standard ghcr.io anonymous token exchange.
Line 14: * - Redirect quirk: ghcr.io blob downloads return 307 to Azure Blob Storage.
Line 140: const GHCR_REGISTRY = "https://ghcr.io";
Line 184: * public `ghcr.io/getsentry/cli` ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/binary.ts</path>
<type>file</type>
<content>
1: /**
2: * Binary Management
3: *
4: * Shared utilities for installing, replacing, and managing the CLI binary.
5: * Used by both `setup --install` (fresh installs) and `upgrade` (self-updates).
6: */
7:
8: import { spawnSync } from "node:child_process";
9: import {
10: existsSync,
11: mkdirSync,
12: readFileSync,
13: renameSync,
14: unlinkSync,
15: writeFileSync,
16: } from "node:fs";
17: import { chmod, copyFile, mkdir, realpath, unlink } from "node:fs/promises";
18: import { delimiter, dirname, join, resolve } from "node:path";
19: import { compare as semverCompare } from "semver";
20: import { getUserAgent } from "./constants.js";
21: import {
22: buildTlsErrorDetail,
23: customFetch,
24: isTlsCertError,
25: } from "./custom-ca.js";
26: import { stringifyUnknown, UpgradeError } from ...
Found 100 matches (more matches available) /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/version-check.ts: Line 4: * For nightly builds (CLI_VERSION contains "-dev.<timestamp>"), checks GHCR for the Line 6: * checks GitHub Releases. Results are cached in the database and shown on Line 180: // Use GHCR for nightly channel; GitHub Releases for stable. /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/utils.ts: Line 26: * https://github.com/getsentry/sentry/blob/master/static/app/utils/slugify.tsx /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts: Line 50: } from "./ghcr.js"; Line 433: * Fetch the latest nightly version from GHCR. ...
Found 3 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/delta-upgrade.ts:
Line 18: githubReleaseSource,
Line 123: return githubReleaseSource({
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/custom-ca.ts:
Line 126: // Build the source list. getDefaultCaCert() reads SQLite — if the DB
Found 56 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/package.json: Line 7: "url": "git+https://github.com/getsentry/cli.git" /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts: Line 979: "https://github.com/getsentry/cli/releases/download/" /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/commands/repo/list.test.ts: Line 63: url: "https://github.com/getsentry/sentry", Line 74: url: "https://github.com/getsentry/sentry-javascript", /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/commands/issue/resolve-commit-spec.test.ts: Line 21: url: ...
Found 79 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml:
Line 5: branches: [main, release/**]
Line 31: # See: https://github.com/actions/runner-images/issues/13602
Line 58: skill: ${{ steps.filter.outputs.skill == 'true' || startsWith(github.ref, 'refs/heads/release/') }}
Line 59: code: ${{ steps.filter.outputs.code == 'true' || startsWith(github.ref, 'refs/heads/release/') }}
Line 60: codemod: ${{ steps.filter.outputs.codemod == 'true' || startsWith(github.ref, 'refs/heads/release/') }}
Line 104: # main, release/**, workflow_call: full cross-platform matrix.
Line 178: run: pnpm install --frozen-lockfile
Line 207: git config user.email "github-actions[bot]@users.noreply.github.com"
Line 236: run: pnpm install --frozen-lockfile
Line 270: run: pnpm install --frozen-lockfile
Line 287: # upload works ...
Found 17 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/astro.config.mjs: Line 62: href: "https://github.com/getsentry/cli", Line 108: var command = 'curl https://cli.sentry.dev/install -fsS | bash'; /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/src/content/docs/migrating-from-v3.md: Line 52: curl https://cli.sentry.dev/install -fsS | bash Line 312: [open an issue](https://github.com/getsentry/cli/issues). Line 383: git clone --depth 1 https://github.com/getsentry/cli /tmp/sentry-cli-src Line 402: [`codemods/sentry-v3-to-v4`](https://github.com/getsentry/cli/tree/main/codemods/sentry-v3-to-v4) Line 512: [open an issue](https://github.com/getsentry/cli/issues) — we want ...
No files found
Found 100 matches (more matches available) /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.lore.md: Line 35: * **getsentry/cli two dependabot endpoints: advisories empty, alerts source of truth**: GitHub Dependabot data sources for getsentry/cli: - \`/repos/getsentry/cli/security-advisories\` → empty array (no published advisories for this repo). - \`/repos/getsentry/cli/dependabot/alerts\` → source of truth: 13 open, 15 fixed as of 2026-08-01. Alert taxonomy in this repo: alerts reference lockfiles (stale entries with no source manifest) OR transitive deps (no direct upgrade path). pnpm.overrides (\`package.json\`) is the canonical fix mechanism for transitive vulns — direct dep upgrades cascade via lockfile only. Sibling surfaces: \`pnpm audit\` reports additional CVEs not surfaced by Dependabot (e.g. @ai-sdk/provider-utils@<=3.0.97 LOW CVE-2026-8769) — separate scope, requires package upgrade not override. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.lore.md</path> <type>file</type> <content> 135: * **bundle-sources exit code 1 anti-pattern reinforced; cosmetic progress is true never-throws**: Two never-throws contracts reinforced across repo: 1. \`bundle-sources.ts:145\` uses \`this.process.exitCode = 1\` directly for no-sources. Looks like a valid shortcut. Works today only because \`cli.ts:622-649\` never resets \`exitCode\` on clean return — fragile invariant. Correct pattern: \`OutputError\`(=60). Kept for \`check.ts\` consistency with a comment. 2. Progress bar rendering (\`packages/cli/src/lib/progress.ts\`) is "Cosmetic ONLY — a formatting/callback failure must never abort the work." Both \`onProgress\` and \`done()\` wrapped in try/catch. Removing the try/catch makes the never-throws test RED (mutation-verified). 136: 137: <!-- lore:019ef465-caa1-7e83-aa8b-4887246a1d55 --> 138: * **check.ts hasId() uses !== null but ...
Found 75 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/bundle.ts:
Line 73: release: VERSION,
Line 165: * it stays a runtime `require()` that fails in a real install (the driver is
Line 355: {let v=process.versions.node.split(".").map(Number);if(v[0]<18){console.error("Error: sentry requires Node.js 18 or later (found "+process.version+").\\n\\nEither upgrade Node.js, or install the standalone binary instead:\\n curl -fsSL https://cli.sentry.dev/install | bash\\n");process.exit(1)}}
Line 444: "Missing node-sqlite3-wasm WASM (node-sqlite3-wasm/dist/node-sqlite3-wasm.wasm). Run: pnpm install"
Line 449: `Missing node-sqlite3-wasm WASM at ${sqliteWasmSrc}. Run: pnpm install`
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/check-patches.ts:
Line 5: * Verifies that pnpm patchedDependencies target versions match ...
No files found
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/astro.config.mjs</path>
<type>file</type>
<content>
1: import starlight from "@astrojs/starlight";
2: import sentry from "@sentry/astro";
3: import sentryStarlightTheme, {
4: monochromeCodeTheme,
5: sentryAgentMarkdown,
6: } from "@sentry/starlight-theme";
7: import { defineConfig } from "astro/config";
8:
9: // Allow base path override via environment variable for PR previews
10: const base = process.env.DOCS_BASE_PATH || "/";
11:
12: export default defineConfig({
13: site: "https://cli.sentry.dev",
14: base,
15: markdown: {
16: smartypants: false,
17: shikiConfig: {
18: theme: monochromeCodeTheme,
19: },
20: },
21: // Generate sourcemaps for Sentry. "hidden" produces .map files without
22: // adding //# sourceMappingURL comments to the output (the debug IDs
23: // injected post-build by `sentry sourcemap inject` are used instead). ...
Found 26 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts:
Line 127: } from "../../src/lib/db/install-info.js";
Line 1022: // otherwise the upgrade would lock/install into a dead location.
Line 2097: const { getInstallInfo } = await import("../../src/lib/db/install-info.js");
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/docs-preview.yml:
Line 11: - 'packages/cli/install'
Line 55: - 'packages/cli/install'
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/commands/cli/upgrade.test.ts:
Line 34: } from "../../../src/lib/db/install-info.js";
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/commands/cli/uninstall.test.ts:
Line 19: } from ...
No files found
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "sentry-cli-docs",
3: "version": "1.0.0",
4: "private": true,
5: "scripts": {
6: "dev": "astro dev",
7: "build": "astro build",
8: "preview": "astro preview"
9: },
10: "dependencies": {
11: "@astrojs/starlight": "^0.39.2",
12: "@sentry/astro": "^10.38.0",
13: "@sentry/starlight-theme": "^0.8.0",
14: "astro": "^6.4.6",
15: "sharp": "^0.33.5",
16: "shiki": "^3.21.0"
17: }
18: }
(End of file - total 18 lines)
</content>
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs</path> <type>directory</type> <entries> astro.config.mjs node_modules/ package.json public/ sentry.client.config.js sentry.server.config.js src/ tsconfig.json (8 entries) </entries>
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/public</path> <type>directory</type> <entries> .well-known/ CNAME favicon.png favicon.svg glyph.svg install og-image-twitter.png og-image.png wordmark-light.svg wordmark.svg (10 entries) </entries>
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/public/install</path> <type>file</type> <content> 1: #!/bin/bash 2: set -euo pipefail 3: 4: RED='\033[0;31m' 5: MUTED='\033[0;2m' 6: NC='\033[0m' 7: 8: # Sentry error telemetry — fire-and-forget error reporting via envelope API. 9: # Uses the CLI's public write-only DSN. No PII collected. 10: # Opt-out: SENTRY_CLI_NO_TELEMETRY=1 11: SENTRY_DSN_KEY="1188a86f3f8168f089450587b00bca66" 12: SENTRY_INGEST="https://o1.ingest.us.sentry.io" 13: SENTRY_PROJECT_ID="4510776311808000" 14: 15: # Generate a UUID for the event. Tries /proc, uuidgen, then awk fallback. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.craft.yml</path> <type>file</type> <content> 1: minVersion: '2.21.1' 2: changelog: 3: policy: auto 4: versioning: 5: policy: auto 6: preReleaseCommand: bash -c 'cd packages/cli && node --experimental-strip-types script/bump-version.ts --pre' 7: postReleaseCommand: bash -c 'cd packages/cli && node --experimental-strip-types script/bump-version.ts --post' 8: artifactProvider: 9: name: github 10: config: 11: artifacts: 12: Build: 13: - '/^sentry-.*$/' 14: - 'npm-package' 15: - 'gh-pages' 16: targets: 17: - name: npm 18: - name: github 19: - name: gh-pages 20: - name: registry 21: apps: 22: 'app:sentry': 23: name: 'Sentry CLI' 24: packageUrl: 'https://www.npmjs.com/package/sentry' 25: mainDocsUrl: 'https://cli.sentry.dev' 26: urlTemplate: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/release.yml</path> <type>file</type> <content> 1: name: Release 2: on: 3: workflow_dispatch: 4: inputs: 5: version: 6: description: Version to release (or "auto") 7: required: false 8: force: 9: description: Force a release even when there are release-blockers 10: required: false 11: merge_target: 12: description: Target branch to merge into 13: required: false 14: permissions: 15: contents: write 16: pull-requests: write 17: 18: env: 19: # Pin Node to an exact patched version (single source of truth). A floating 20: # "22" can reuse the runner's pre-cached 22.23.0, which carries the 21: # ERR_STREAM_PREMATURE_CLOSE regression on keep-alive fetch reuse 22: # (nodejs/node#64004, fixed in 22.23.1). 23: NODE_VERSION_22: "22.23.1" 24: 25: jobs: 26: release: 27: runs-on: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/docs-preview.yml</path> <type>file</type> <content> 1: name: Docs Preview 2: 3: on: 4: push: 5: branches: [main] 6: paths: 7: - 'apps/cli-docs/**' 8: - 'packages/cli/src/**' 9: - 'packages/cli/script/generate-command-docs.ts' 10: - 'packages/cli/script/generate-skill.ts' 11: - 'packages/cli/install' 12: - '.github/workflows/docs-preview.yml' 13: pull_request: 14: # No paths filter here: the 'closed' event must ALWAYS fire so 15: # pr-preview-action can remove the deployed preview. A paths-filter step 16: # inside the job (below) skips the build/deploy for non-docs PRs. Without 17: # this, closed PRs never clean up and gh-pages bloats until GitHub Pages 18: # exceeds its build limits and starts failing. ...
packages/cli/install | type=regular file | inode=9979365 | size=12571 | mode=755 apps/cli-docs/public/install | type=symbolic link | inode=9979269 | size=29 | mode=777 cmp_exit=0 120000 c6850ca5ea9254ff1b25a1850d31de63cec527f6 0 apps/cli-docs/public/install 100755 ca2b6b8d77f1756239576a56297159a8076b2e31 0 packages/cli/install
../../../packages/cli/install ../../../packages/cli/install
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml</path>
<type>file</type>
<content>
1: name: Build
2:
3: on:
4: push:
5: branches: [main, release/**]
6: pull_request:
7: workflow_call:
8:
9: concurrency:
10: group: ci-${{ github.ref }}
11: cancel-in-progress: true
12:
13: # packages:write is needed for publish-nightly to push to GHCR
14: # issues:write is needed for generate-patches to file issues on failure
15: permissions:
16: contents: read
17: issues: write
18: packages: write
19:
20: env:
21: # Commit timestamp used for deterministic nightly version strings.
22: # Defined at workflow level so build-binary and publish-nightly always agree.
23: COMMIT_TIMESTAMP: ${{ github.event.head_commit.timestamp }}
24: # SENTRY_CLIENT_ID is baked into the binary at build time. Fork PRs can't
25: # read repo vars (getsentry org policy); fall back to a dummy. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml</path>
<type>file</type>
<content>
245: test-unit:
246: name: Unit Tests
247: needs: [changes]
248: if: needs.changes.outputs.code == 'true'
249: runs-on: ubuntu-latest
250: permissions:
251: contents: read
252: actions: read
253: pull-requests: write
254: statuses: write
255: steps:
256: - uses: actions/checkout@v6
257: - uses: pnpm/action-setup@v4
258: - uses: actions/setup-node@v6
259: with:
260: node-version: ${{ env.NODE_VERSION_24 }}
261: - uses: actions/cache@v5
262: id: cache
263: with:
264: path: |
265: node_modules
266: packages/*/node_modules
267: apps/*/node_modules
268: key: node-modules-${{ hashFiles('pnpm-lock.yaml', '.npmrc', 'packages/cli/patches/**') }}
269: - if: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml</path>
<type>file</type>
<content>
460: - name: Download current binaries
461: uses: actions/download-artifact@v8
462: with:
463: # Use sentry-*-* to match platform binaries (sentry-linux-x64, etc.)
464: # and their -gz variants, but not sentry-patches
465: pattern: sentry-*-*
466: path: new-binaries
467: merge-multiple: true
468:
469: - name: Download previous nightly binaries (main)
470: if: github.ref == 'refs/heads/main'
471: run: |
472: VERSION="${{ needs.changes.outputs.nightly-version }}"
473: REPO="ghcr.io/getsentry/cli"
474:
475: echo "${{ secrets.GITHUB_TOKEN }}" | oras login ghcr.io -u ${{ github.actor }} --password-stdin
476:
477: # Find previous nightly tag
478: TAGS=$(oras repo tags "${REPO}" ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml</path>
<type>file</type>
<content>
790: # PRs aren't affected. OpenRouter is preferred; ANTHROPIC_API_KEY is
791: # kept as a fallback for direct-Anthropic runs.
792: OPENROUTER_API_KEY: ${{ needs.changes.outputs.skill == 'true' && secrets.OPENROUTER_API_KEY || '' }}
793: ANTHROPIC_API_KEY: ${{ needs.changes.outputs.skill == 'true' && secrets.ANTHROPIC_API_KEY || '' }}
794: run: pnpm run test:e2e
795:
796: build-npm:
797: name: Build npm Package (smoke Node ${{ matrix.node }})
798: needs: [lint, test-unit]
799: runs-on: ubuntu-latest
800: environment: ${{ (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/heads/release/')) && 'production' || '' }}
801: strategy:
802: fail-fast: false
803: matrix:
804: node: ["20", "22", "24"]
805: steps:
806: - ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/ghcr.ts</path> <type>file</type> <content> 1: /** 2: * GHCR (GitHub Container Registry) Client 3: * 4: * Encapsulates the OCI download protocol for fetching nightly CLI binaries 5: * from ghcr.io/getsentry/cli. Nightly builds are pushed as OCI artifacts 6: * via ORAS with the version baked into the manifest annotation. 7: * 8: * Key design decisions: 9: * - Anonymous access: nightly package is public; no token needed beyond the 10: * standard ghcr.io anonymous token exchange. 11: * - Version discovery from manifest annotation: `annotations.version` in the 12: * OCI manifest holds the nightly version. Checking the latest version only 13: * requires a token exchange + manifest fetch (2 HTTP requests total). 14: * - Redirect quirk: ghcr.io blob downloads return 307 to Azure Blob Storage. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/ghcr.ts</path>
<type>file</type>
<content>
420: * Fetch a single page of tags from the GHCR registry.
421: *
422: * @param token - Bearer token for authentication
423: * @param lastTag - Last tag from previous page (for pagination), or undefined for the first page
424: * @returns Array of tag strings for this page
425: * @throws {UpgradeError} On network failure
426: */
427: async function fetchTagPage(
428: token: string,
429: lastTag?: string,
430: signal?: AbortSignal
431: ): Promise<string[]> {
432: let url = `${GHCR_REGISTRY}/v2/${GHCR_REPO}/tags/list?n=${TAGS_PAGE_SIZE}`;
433: if (lastTag) {
434: url += `&last=${encodeURIComponent(lastTag)}`;
435: }
436:
437: const response = await fetchWithRetry(
438: url,
439: {
440: headers: {
441: Authorization: `Bearer ${token}`,
442: "User-Agent": ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts</path>
<type>file</type>
<content>
1: /**
2: * Upgrade Module
3: *
4: * Detects how the CLI was installed and provides self-upgrade functionality.
5: * Binary management helpers (download URLs, locking, replacement) live in
6: * binary.ts and are shared with the setup --install flow.
7: */
8:
9: import { spawn } from "node:child_process";
10: import {
11: chmodSync,
12: createWriteStream,
13: existsSync,
14: realpathSync,
15: statSync,
16: unlinkSync,
17: } from "node:fs";
18: import { writeFile } from "node:fs/promises";
19: import { homedir } from "node:os";
20: import { dirname, join, sep } from "node:path";
21: import { setTimeout } from "node:timers/promises";
22: import {
23: acquireLock,
24: cleanupOldBinary,
25: fetchWithUpgradeError,
26: GITHUB_RELEASES_URL,
27: getBinaryDownloadUrl,
28: getBinaryFilename,
29: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts</path>
<type>file</type>
<content>
390:
391: const data = (await response.json()) as { tag_name?: string };
392:
393: if (!data.tag_name) {
394: throw new UpgradeError(
395: "network_error",
396: "No version found in GitHub release"
397: );
398: }
399:
400: return data.tag_name.replace(VERSION_PREFIX_REGEX, "");
401: }
402:
403: /**
404: * Fetch the latest version from npm registry.
405: *
406: * @returns Latest version string
407: * @throws {UpgradeError} When fetch fails or response is invalid
408: */
409: export async function fetchLatestFromNpm(): Promise<string> {
410: const response = await fetchWithUpgradeError(
411: `${NPM_REGISTRY_URL}/latest`,
412: { headers: { Accept: "application/json" } },
413: "npm registry"
414: );
415:
416: if (!response.ok) {
417: throw new UpgradeError(
418: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts</path>
<type>file</type>
<content>
340: const stored = getInstallInfo();
341: if (stored?.method) {
342: return stored.method;
343: }
344:
345: // Legacy detection for existing installs (pre-setup command)
346: const legacyMethod = await detectLegacyInstallationMethod();
347:
348: // Auto-save detected method for future runs (best-effort —
349: // a read-only or broken DB shouldn't block detection)
350: if (legacyMethod !== "unknown") {
351: try {
352: setInstallInfo({
353: method: legacyMethod,
354: path: process.execPath,
355: version: CLI_VERSION,
356: });
357: } catch {
358: log.debug("Failed to persist install info (DB may be read-only)");
359: }
360: }
361:
362: return legacyMethod;
363: }
364:
365: // Version Fetching
366:
367: /**
368: * Fetch the latest version ...
Found 2 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts: Line 896: await downloadFullBinary(version, downloadTag, tempPath, setMessage); Line 959: async function downloadFullBinary(
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/upgrade.ts</path>
<type>file</type>
<content>
930: * Uses the currently running binary as the base for patching.
931: * Returns null silently on any failure so the caller can fall back.
932: *
933: * @param version - Target version to upgrade to
934: * @param destPath - Path to write the patched binary
935: * @returns Delta result with SHA-256 and size info, or null if delta is unavailable
936: */
937: async function tryDeltaUpgrade(
938: version: string,
939: destPath: string,
940: offline?: boolean,
941: setMessage?: SetMessage
942: ): Promise<DeltaResult | null> {
943: return await attemptDeltaUpgrade(
944: version,
945: process.execPath,
946: destPath,
947: offline,
948: setMessage
949: );
950: }
951:
952: /**
953: * Download the full binary (non-delta path). ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/delta-upgrade.ts</path>
<type>file</type>
<content>
1: /** Delta upgrade discovery and application backed by binpatch. */
2:
3: import { join } from "node:path";
4: // biome-ignore lint/performance/noNamespaceImport: Sentry SDK recommends namespace import
5: import * as Sentry from "@sentry/node-core/light";
6: import {
7: applyPatchChainInMemory,
8: extractStableChain as binpatchExtractStableChain,
9: filterAndSortChainTags as binpatchFilterAndSortChainTags,
10: validateChainStep as binpatchValidateChainStep,
11: type DeltaTelemetry,
12: type DeltaUnavailableReason,
13: type ExtractStableChainOpts,
14: type GitHubRelease,
15: getPatchFromVersion,
16: getPatchTargetSha256,
17: ghcrSource,
18: githubReleaseSource,
19: type InstrumentHook,
20: MAX_NIGHTLY_CHAIN_DEPTH,
21: makeCache,
22: OciClient,
23: type OciManifest,
24: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts</path>
<type>file</type>
<content>
1: /**
2: * Upgrade Module Tests
3: *
4: * Tests for upgrade detection and logic.
5: *
6: * The `executeUpgrade` and `detectInstallationMethod` subprocess tests use
7: * `vi.mock("node:child_process", ...)` at the top of this file to
8: * intercept `spawn()` calls via a swappable `spawnImpl`. Non-spawn exports
9: * pass through to the real `node:child_process`. ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts</path>
<type>file</type>
<content>
450: mockFetch(
451: async () =>
452: new Response(JSON.stringify({ version: "2.0.0" }), {
453: status: 200,
454: headers: { "Content-Type": "application/json" },
455: })
456: );
457:
458: const version = await fetchLatestVersion("yarn");
459: expect(version).toBe("2.0.0");
460: });
461:
462: test("uses GitHub for brew method", async () => {
463: mockFetch(
464: async () =>
465: new Response(JSON.stringify({ tag_name: "v2.0.0" }), {
466: status: 200,
467: headers: { "Content-Type": "application/json" },
468: })
469: );
470:
471: const version = await fetchLatestVersion("brew");
472: expect(version).toBe("2.0.0");
473: });
474:
475: test("uses npm for unknown method", async () => {
476: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts</path>
<type>file</type>
<content>
940: // If DB says "yarn", respect it even if path says node_modules
941: setInstallInfo({ method: "yarn", path: "/old/path", version: "0.0.1" });
942: process.argv[1] = join(
943: "/usr/local/lib",
944: "node_modules",
945: "sentry",
946: "dist",
947: "bin.cjs"
948: );
949:
950: const method = await detectInstallationMethod();
951: expect(method).toBe("yarn");
952: });
953:
954: test("Homebrew still takes priority over node_modules path", async () => {
955: process.argv[1] = join(
956: "/usr/local/lib",
957: "node_modules",
958: "sentry",
959: "dist",
960: "bin.cjs"
961: );
962: Object.defineProperty(process, "execPath", {
963: value: "/opt/homebrew/Cellar/sentry/1.2.3/bin/sentry",
964: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts</path>
<type>file</type>
<content>
1260: }
1261:
1262: beforeEach(() => {
1263: // Redirect getCurlInstallPaths() to temp dir instead of ~/.sentry/bin/
1264: clearInstallInfo();
1265: mkdirSync(upgradeBinDir, { recursive: true });
1266: setInstallInfo({
1267: method: "curl",
1268: path: upgradeInstallPath,
1269: version: "0.0.0",
1270: });
1271: });
1272:
1273: afterEach(async () => {
1274: globalThis.fetch = originalFetch;
1275: // Clean up test files - get fresh paths in case DB changed
1276: const paths = getTestPaths();
1277: for (const path of [
1278: paths.installPath,
1279: paths.tempPath,
1280: paths.oldPath,
1281: paths.lockPath,
1282: ]) {
1283: try {
1284: await unlink(path);
1285: } catch {
1286: // Ignore
1287: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/ghcr.test.ts</path>
<type>file</type>
<content>
1: /**
2: * GHCR Client Tests
3: *
4: * Unit tests for the GHCR/OCI download protocol helpers.
5: * All HTTP calls are mocked via globalThis.fetch to avoid network access.
6: */
7:
8: import { afterEach, beforeEach, describe, expect, test } from "vitest";
9: import { UpgradeError } from "../../src/lib/errors.js";
10: import {
11: downloadLayerBlob,
12: downloadNightlyBlob,
13: fetchManifest,
14: fetchNightlyManifest,
15: findLayerByFilename,
16: GHCR_REPO,
17: GHCR_TAG,
18: getAnonymousToken,
19: getNightlyVersion,
20: listTags,
21: type OciManifest,
22: } from "../../src/lib/ghcr.js";
23:
24: /** Store original fetch for restoration */
25: let originalFetch: typeof globalThis.fetch;
26:
27: /** Helper to mock fetch without TypeScript errors about missing Bun-specific properties */
28: ...
Found 3 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/install-script.test.ts:
Line 2: * Install Script Tests
Line 26: const installScript = join(repoRoot, "install");
Line 28: describe("install script", () => {
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/binary.test.ts</path>
<type>file</type>
<content>
1: /**
2: * Binary Management Tests
3: *
4: * Tests for shared binary helpers: install directory selection, paths,
5: * download URLs, locking, and binary installation.
6: */
7:
8: import {
9: chmodSync,
10: mkdirSync,
11: readFileSync,
12: realpathSync,
13: rmSync,
14: symlinkSync,
15: writeFileSync,
16: } from "node:fs";
17: import { access, readFile, writeFile } from "node:fs/promises";
18: import { join } from "node:path";
19: import { afterEach, beforeEach, describe, expect, test } from "vitest";
20: import {
21: acquireLock,
22: compareVersions,
23: determineInstallDir,
24: fetchWithUpgradeError,
25: getBinaryDownloadUrl,
26: getBinaryFilename,
27: getBinaryPaths,
28: getPlatformBinaryName,
29: installBinary,
30: isDowngrade,
31: isMusl,
32: releaseLock,
33: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/check-stale-references.ts</path> <type>file</type> <content> 1: #!/usr/bin/env tsx 2: 3: /** 4: * Check for Stale Toolchain References 5: * 6: * Scans dev-facing documentation and scripts for references to package 7: * managers or runtimes that are no longer used by this project. The check 8: * is generic: it reads `packageManager` from package.json to determine 9: * the current PM, then flags any dev-facing file that references a 10: * a different PM's commands (e.g., `bun run`, `yarn remove`). 11: * 12: * If the project migrates from pnpm to another PM, simply updating the 13: * `packageManager` field in package.json will automatically make this 14: * check flag every `pnpm run` / `pnpm add` reference in dev docs. 15: * 16: * Usage: 17: * tsx script/check-stale-references.ts 18: * 19: * Exit codes: 20: * 0 - No stale references found 21: * ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/README.md</path> <type>file</type> <content> 1: <p align="center"> 2: <img src=".github/assets/banner.png" alt="Sentry CLI" /> 3: </p> 4: 5: <p align="center"> 6: The command-line interface for Sentry. Built for developers and AI agents. 7: </p> 8: 9: <p align="center"> 10: <a href="https://cli.sentry.dev">Documentation</a> | 11: <a href="https://cli.sentry.dev/getting-started/">Getting Started</a> | 12: <a href="https://cli.sentry.dev/commands/">Commands</a> 13: </p> 14: 15: --- 16: 17: ## Installation 18: 19: ### Install Script (Recommended) 20: 21: ```bash 22: curl https://cli.sentry.dev/install -fsS | bash 23: ``` 24: 25: ### Homebrew 26: 27: ```bash 28: brew install getsentry/tools/sentry 29: ``` 30: 31: ### Package Managers 32: 33: ```bash 34: npm install -g sentry 35: pnpm add -g sentry 36: yarn global add sentry 37: bun add -g sentry 38: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/src/content/docs/getting-started.mdx</path> <type>file</type> <content> 1: --- 2: title: Installation 3: description: How to install and set up the Sentry CLI 4: --- 5: 6: import PackageManagerCode from "../../components/PackageManagerCode.astro"; 7: 8: ## Install Script 9: 10: Install the latest stable release: 11: 12: ```bash 13: curl https://cli.sentry.dev/install -fsS | bash 14: ``` 15: 16: Install the nightly build (built from `main`, updated on every commit): 17: 18: ```bash 19: curl https://cli.sentry.dev/install -fsS | bash -s -- --version nightly 20: ``` 21: 22: You can also use the `SENTRY_VERSION` environment variable to pin a version, 23: which is especially useful in CI/CD pipelines and Dockerfiles: 24: 25: ```bash 26: # Pin to a specific stable version 27: SENTRY_VERSION=0.19.0 curl https://cli.sentry.dev/install -fsS | bash 28: 29: # Pin to ...
Found 20 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.gitignore: Line 1: # dependencies (bun install) Line 7: dist Line 8: dist-bin Line 9: dist-build Line 47: apps/cli-docs/dist Line 61: packages/cli/src/generated/ Line 62: packages/cli/src/sdk.generated.ts Line 63: packages/cli/src/sdk.generated.d.cts Line 67: !packages/cli/src/generated/banner-sixel.ts Line 80: # Throwaway documentation audit reports (bot-generated, not real docs) /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/.gitignore: Line 11: dist Line 12: dist-bin Line 13: dist-build Line 34: # generated files (rebuilt at build time) Line 35: src/generated/ Line 36: src/sdk.generated.ts Line 37: src/sdk.generated.d.cts Line 38: ...
cf165f5ba chore: pre-shape repo into pnpm-workspace monorepo layout cf165f5ba 2026-07-15 chore: pre-shape repo into pnpm-workspace monorepo layout
cf165f5ba 2026-07-15 chore: pre-shape repo into pnpm-workspace monorepo layout def5a353a 2026-05-05 fix(install): pass through no-agent-skills flag (#919) ff574c983 2026-04-23 chore: regenerate docs
...output truncated... Full output saved to: /home/byk/.local/share/opencode/tool-output/tool_082c3d20f0014ndxVy0gTjQXO5 src/lib/alias.ts | 322 +++ src/lib/api-client.ts | 157 ++ src/lib/api-schema.ts | 136 ++ src/lib/api-scope.ts | 128 + src/lib/api/dashboards.ts | 616 +++++ src/lib/api/events.ts | 263 ++ src/lib/api/infrastructure.ts | 403 ++++ src/lib/api/issues.ts | 694 ++++++ src/lib/api/logs.ts | 272 +++ src/lib/api/organizations.ts | 249 ++ src/lib/api/projects.ts | 520 ++++ src/lib/api/releases.ts | 565 +++++ src/lib/api/repositories.ts | 147 ++ src/lib/api/seer.ts | ...
Found 67 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml:
Line 13: # packages:write is needed for publish-nightly to push to GHCR
Line 22: # Defined at workflow level so build-binary and publish-nightly always agree.
Line 152: if: github.event.pull_request.head.repo.full_name == github.repository || github.event_name != 'pull_request'
Line 481: # Current tag may not exist yet (publish-nightly hasn't run),
Line 511: PREV_TAG=$(gh api "repos/${{ github.repository }}/releases?per_page=5" \
Line 526: gh release download "${PREV_TAG}" \
Line 527: --repo "${{ github.repository }}" \
Line 596: **Run:** ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}
Line 600: EXISTING=$(gh issue list --repo "$GITHUB_REPOSITORY" --state open --search "$TITLE" --json number --jq '.[0].number // ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/cleanup-nightlies.yml</path>
<type>file</type>
<content>
1: name: Cleanup Nightly Tags
2:
3: on:
4: schedule:
5: # Every Sunday at 06:00 UTC
6: - cron: "0 6 * * 0"
7: workflow_dispatch:
8:
9: permissions:
10: packages: write
11:
12: jobs:
13: cleanup:
14: name: Prune Old Nightly Tags
15: runs-on: ubuntu-latest
16: steps:
17: - name: Install ORAS CLI
18: run: |
19: VERSION=1.2.3
20: EXPECTED_SHA256="b4efc97a91f471f323f193ea4b4d63d8ff443ca3aab514151a30751330852827"
21: TARBALL="oras_${VERSION}_linux_amd64.tar.gz"
22: curl -sfLo "$TARBALL" "https://github.com/oras-project/oras/releases/download/v${VERSION}/${TARBALL}"
23: echo "${EXPECTED_SHA256} ${TARBALL}" | sha256sum -c -
24: tar -xz -C /usr/local/bin oras < "$TARBALL"
25: rm "$TARBALL"
26:
27: ...
Found 53 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts:
Line 169: expect(parseInstallationMethod("brew")).toBe("brew");
Line 462: test("uses GitHub for brew method", async () => {
Line 471: const version = await fetchLatestVersion("brew");
Line 589: test("checks GitHub for brew method - version exists", async () => {
Line 592: const exists = await versionExists("brew", "1.0.0");
Line 596: test("checks GitHub for brew method - version does not exist", async () => {
Line 599: const exists = await versionExists("brew", "99.99.99");
Line 734: // Set execPath to a non-Homebrew, non-known-curl path so detection falls
Line 773: describe("Homebrew detection (detectInstallationMethod)", () => {
Line 788: test("detects brew when execPath resolves through /Cellar/", async () => {
Line 790: value: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/delta-upgrade.test.ts</path>
<type>file</type>
<content>
1: /**
2: * Unit Tests for Delta Upgrade Module
3: *
4: * Tests the exported pure-computation functions that drive chain resolution
5: * for both stable (GitHub Releases) and nightly (GHCR) channels, plus
6: * async orchestration functions tested via fetch mocking.
7: */
8:
9: import { createHash } from "node:crypto";
10: import { existsSync, unlinkSync } from "node:fs";
11: import { access, readFile } from "node:fs/promises";
12: import { tmpdir } from "node:os";
13: import { join } from "node:path";
14: import { afterEach, beforeEach, describe, expect, test } from "vitest";
15: import { getPlatformBinaryName } from "../../src/lib/binary.js";
16: import {
17: applyPatchChain,
18: attemptDeltaUpgrade,
19: canAttemptDelta,
20: downloadStablePatch,
21: type ExtractStableChainOpts,
22: ...
Found 29 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/delta-upgrade.test.ts:
Line 799: /** Helper to mock globalThis.fetch */
Line 800: function mockFetch(
Line 803: globalThis.fetch = fn as typeof globalThis.fetch;
Line 807: let originalFetch: typeof globalThis.fetch;
Line 810: originalFetch = globalThis.fetch;
Line 814: globalThis.fetch = originalFetch;
Line 826: mockFetch(async (url) => {
Line 828: "api.github.com/repos/getsentry/cli/releases"
Line 840: mockFetch(async () => new Response("Server Error", { status: 500 }));
Line 847: mockFetch(async () => {
Line 862: mockFetch(async (url) => {
Line 875: mockFetch(async () => new Response("Not Found", { status: 404 }));
Line 882: mockFetch(async () => {
Line 909: mockFetch(async (url) => {
Line 920: return new Response("Not Found", { status: 404 });
Line 927: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/delta-upgrade.test.ts</path>
<type>file</type>
<content>
780: makeLayer(PATCH_LAYER_NAME, 500),
781: ]);
782: const result = validateChainStep(manifest, {
783: expectedFrom: "0.0.9",
784: patchLayerName: PATCH_LAYER_NAME,
785: sizeLimit: 100_000,
786: });
787: expect(result).toEqual({
788: ok: true,
789: digest: `sha256:${PATCH_LAYER_NAME.replace(/\W/g, "")}`,
790: size: 500,
791: });
792: });
793: });
794:
795: // ===================================================================
796: // Async functions (fetch-mocked)
797: // ===================================================================
798:
799: /** Helper to mock globalThis.fetch */
800: function mockFetch(
801: fn: (url: string | URL | Request, init?: RequestInit) => Promise<Response>
802: ): void {
803: globalThis.fetch = fn as ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/version-check.ts</path>
<type>file</type>
<content>
150: /**
151: * Start a background check for new versions.
152: * Does not block - fires a fetch and lets it complete in the background.
153: * Reports errors to Sentry in a detached span for visibility.
154: * Never throws - errors are caught and reported to Sentry.
155: */
156: function checkForUpdateInBackgroundImpl(): void {
157: try {
158: if (!shouldCheckForUpdate()) {
159: return;
160: }
161: } catch (error) {
162: // DB access failed - report to Sentry but don't crash CLI
163: Sentry.captureException(error);
164: return;
165: }
166:
167: pendingAbortController = new AbortController();
168: const { signal } = pendingAbortController;
169:
170: const channel = getReleaseChannel();
171:
172: Sentry.startSpanManual(
173: {
174: name: ...
No files found
M .lore.md chore/preshape-monorepo 605e8318d1f3
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/vitest.config.ts
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/vitest.config.ts</path>
<type>file</type>
<content>
1: import { existsSync } from "node:fs";
2: import { dirname, join } from "node:path";
3: import { defineConfig, type Plugin } from "vitest/config";
4:
5: const JS_EXT_RE = /\.js$/;
6:
7: /**
8: * Vite plugin to rewrite lazy `require("./relative/path.js")` calls in
9: * `.ts` source files to the corresponding `.ts` path when the `.ts` file
10: * exists on disk. Node.js `require()` bypasses Vite's resolve pipeline,
11: * so `resolve.extensions` doesn't apply.
12: */
13: function requireJsToTsPlugin(): Plugin {
14: return {
15: name: "require-js-to-ts",
16: enforce: "pre",
17: transform(code, id) {
18: if (!(id.endsWith(".ts") && code.includes("require("))) {
19: return;
20: }
21: let changed = false;
22: const transformed = code.replace(
23: ...
Found 3 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/generate-docs-sections.ts:
Line 361: `- [Node.js](https://nodejs.org/) v${extractDevNodeVersion()}+ installed`,
Line 362: `- [pnpm](https://pnpm.io/) v${extractPnpmVersion()}+ installed`,
Line 637: sectionName: "platform-support",
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/generate-docs-sections.ts</path>
<type>file</type>
<content>
600: generate: generateDevPrereqContributing,
601: },
602: {
603: filePath: "DEVELOPMENT.md",
604: sectionName: "dev-prereq",
605: generate: generateDevPrereqDevelopment,
606: },
607: {
608: filePath: "DEVELOPMENT.md",
609: sectionName: "build-toolchain",
610: generate: generateBuildToolchain,
611: },
612: {
613: filePath: `${DOCS_CONTENT}/contributing.md`,
614: sectionName: "build-commands",
615: generate: generateBuildCommands,
616: },
617: // -- Dev scripts (README.md) --
618: {
619: filePath: "README.md",
620: sectionName: "dev-scripts",
621: generate: generateDevScripts,
622: },
623: // -- Env var tables --
624: {
625: filePath: "DEVELOPMENT.md",
626: sectionName: "dev-env-vars",
627: generate: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/generate-skill.ts</path>
<type>file</type>
<content>
185: return null;
186: }
187: const content = await readFile(fullPath, "utf-8");
188: return stripMdxComponents(stripFrontmatter(content));
189: }
190:
191: /** Extract npm command from PackageManagerCode Astro component */
192: function extractPackageManagerCommand(rawContent: string): string | null {
193: const match = rawContent.match(PACKAGE_MANAGER_REGEX);
194: return match ? match[1] : null;
195: }
196:
197: /** Generate installation section from docs content */
198: function generateInstallSection(
199: installSection: string,
200: rawContent: string
201: ): string[] {
202: const lines: string[] = [];
203: lines.push("### Installation");
204: lines.push("");
205: const codeBlocks = extractCodeBlocks(installSection, "bash");
206: const npmCommand = ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/delta-upgrade.mocked.test.ts</path>
<type>file</type>
<content>
70: // Helpers
71: // ============================================================================
72:
73: const BINARY_NAME = getPlatformBinaryName();
74:
75: function versionHex(version: string): string {
76: return Array.from(version)
77: .map((c) => c.charCodeAt(0).toString(16).padStart(2, "0"))
78: .join("");
79: }
80:
81: function tempFile(name: string): string {
82: return join(
83: tmpdir(),
84: `delta-iso-${Date.now()}-${Math.random().toString(36).slice(2)}-${name}`
85: );
86: }
87:
88: // ============================================================================
89: // resolveStableDelta
90: // ============================================================================
91:
92: describe("resolveStableDelta", () => {
93: test("resolves and applies a stable ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/e2e/delta-upgrade.test.ts</path> <type>file</type> <content> 1: /** 2: * E2E Test: Delta Upgrade via Binary Patching 3: * 4: * Downloads two consecutive stable release binaries from GitHub, 5: * generates a TRDIFF10 patch using zig-bsdiff, and verifies that 6: * our `applyPatch()` produces byte-identical output. 7: * 8: * Requires: zig-bsdiff binary available at /tmp/bsdiff (or via ZIG_BSDIFF_PATH env). 9: * Skipped in CI unless ZIG_BSDIFF_PATH is set. ...
Found 11 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/preload.ts:
Line 103: // Real API calls are blocked by the global fetch mock below.
Line 113: // Mock global fetch to prevent any external network calls in unit tests
Line 114: // Tests that need real fetch should restore it in their setup
Line 115: const originalFetch = globalThis.fetch;
Line 129: console.error(`[TEST] Unexpected fetch call to: ${url}`);
Line 131: "[TEST] Tests should mock fetch or use SENTRY_TEST_* credentials for real API calls"
Line 133: throw new Error(`Unmocked fetch call to: ${url}`);
Line 136: // Cast via unknown to avoid Bun's extended fetch type (which includes preconnect)
Line 137: globalThis.fetch = mockFetch as unknown as typeof fetch;
Line 139: // Export original fetch for tests that need to restore it
Line 140: (globalThis as { __originalFetch?: typeof fetch }).__originalFetch =
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/preload.ts</path> <type>file</type> <content> 95: delete process.env.SENTRY_TOKEN; 96: delete process.env.SENTRY_CLIENT_ID; 97: delete process.env.SENTRY_URL; 98: delete process.env.SENTRY_HOST; 99: delete process.env.SENTRY_ORG; 100: delete process.env.SENTRY_PROJECT; 101: 102: // Set a fake auth token so buildCommand's auth guard passes in tests. 103: // Real API calls are blocked by the global fetch mock below. 104: // Tests that specifically verify unauthenticated behavior (e.g., auth status) 105: // mock getAuthConfig to return undefined. 106: process.env.SENTRY_AUTH_TOKEN = "sntrys_test-token-for-unit-tests_000000"; 107: 108: // Disable telemetry and background update checks in tests 109: // This prevents Sentry SDK from keeping the process alive and making external calls 110: process.env.SENTRY_CLI_NO_TELEMETRY = "1"; 111: ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/public/CNAME</path> <type>file</type> <content> 1: cli.sentry.dev (End of file - total 1 lines) </content>
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts</path>
<type>file</type>
<content>
1460:
1461: // Should not throw when called again
1462: expect(() => startCleanupOldBinary()).not.toThrow();
1463: });
1464: });
1465:
1466: describe("isNightlyVersion", () => {
1467: test("returns true for nightly version strings", () => {
1468: expect(isNightlyVersion("0.0.0-dev.1740000000")).toBe(true);
1469: expect(isNightlyVersion("0.0.0-dev.1")).toBe(true);
1470: });
1471:
1472: test("returns false for stable version strings", () => {
1473: expect(isNightlyVersion("1.0.0")).toBe(false);
1474: expect(isNightlyVersion("0.13.0")).toBe(false);
1475: expect(isNightlyVersion("2.0.0-beta.1")).toBe(false);
1476: expect(isNightlyVersion("0.0.0-dev")).toBe(false);
1477: });
1478: });
1479:
1480: describe("fetchLatestNightlyVersion", () => {
1481: test("returns version ...
Found 2 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/docs-preview.yml: Line 11: - 'packages/cli/install' Line 55: - 'packages/cli/install'
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/build.ts</path>
<type>file</type>
<content>
380: );
381: } catch (error) {
382: console.error(" Fossilize compilation failed:");
383: console.error(
384: ` ${error instanceof Error ? error.message : String(error)}`
385: );
386: return { successes: 0, failures: targets.length };
387: }
388:
389: // Post-process each target: rename Windows binary, gzip
390: let successes = 0;
391: let failures = 0;
392: for (const target of targets) {
393: try {
394: await postProcessTarget(target);
395: successes += 1;
396: } catch (error) {
397: console.error(
398: ` Post-processing ${getPackageName(target)} failed: ${error}`
399: );
400: failures += 1;
401: }
402: }
403: return { successes, failures };
404: }
405:
406: /**
407: * Post-process a single compiled binary: rename from ...
Found 6 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/build.ts:
Line 64: const ALL_TARGETS: BuildTarget[] = [
Line 73: function getPackageName(target: BuildTarget): string {
Line 455: const target = ALL_TARGETS.find((t) => t.os === os && t.arch === arch);
Line 487: `Valid targets: ${ALL_TARGETS.map((t) => `${t.os === "win32" ? "windows" : t.os}-${t.arch}`).join(", ")}`
Line 494: const currentTarget = ALL_TARGETS.find(
Line 508: targets = ALL_TARGETS;
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/build.ts</path> <type>file</type> <content> 45: 46: /** Pin to Node 22 LTS for SEA binaries */ 47: /** Node version for SEA binaries. "lts" resolves to the latest LTS via fossilize. */ 48: const NODE_VERSION = "lts"; 49: 50: /** Files that use _require() for lazy relative imports (circular dep breaking). */ 51: const REQUIRE_ALIAS_FILTER = 52: /(?:db[\\/](?:index|schema)|list-command|telemetry)\.ts$/; 53: const REQUIRE_ALIAS_RE = /\b_require\(/g; 54: 55: /** Build-time constants injected into the binary */ 56: const SENTRY_CLIENT_ID = process.env.SENTRY_CLIENT_ID ?? ...
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/dist-bin</path> <type>directory</type> <entries> sentry-linux-x64 (1 entries) </entries>
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/dist-bin</path> <type>directory</type> <entries> sentry-linux-x64 (1 entries) </entries>
Found 100 matches (more matches available) /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/pnpm-lock.yaml: Line 437: '@biomejs/cli-linux-arm64-musl@2.3.8': Line 449: '@biomejs/cli-linux-x64-musl@2.3.8': Line 799: '@img/sharp-libvips-linuxmusl-arm64@1.0.4': Line 804: '@img/sharp-libvips-linuxmusl-arm64@1.2.4': Line 809: '@img/sharp-libvips-linuxmusl-x64@1.0.4': Line 814: '@img/sharp-libvips-linuxmusl-x64@1.2.4': Line 879: '@img/sharp-linuxmusl-arm64@0.33.5': Line 885: '@img/sharp-linuxmusl-arm64@0.34.5': Line 891: '@img/sharp-linuxmusl-x64@0.33.5': Line 897: '@img/sharp-linuxmusl-x64@0.34.5': Line 1140: '@rolldown/binding-linux-arm64-musl@1.0.3': Line 1164: '@rolldown/binding-linux-x64-musl@1.0.3': Line 2796: lightningcss-linux-arm64-musl@1.32.0: Line 2808: lightningcss-linux-x64-musl@1.32.0: Line 4622: '@biomejs/cli-linux-arm64-musl': 2.3.8 Line 4624: ...
Found 2 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/generate-docs-sections.ts:
Line 521: ["Linux", "x64, arm64", "glibc and musl (Alpine)"],
Line 526: function generatePlatformSupport(): string {
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/script/generate-docs-sections.ts</path>
<type>file</type>
<content>
500: "| Variable | Description |",
501: "|----------|-------------|",
502: ];
503: for (const [name, desc] of SELF_HOSTED_TABLE_ENTRIES) {
504: lines.push(`| \`${name}\` | ${desc} |`);
505: }
506: return lines.join("\n");
507: }
508:
509: // ---------------------------------------------------------------------------
510: // Section: Platform Support (getting-started.mdx)
511: // ---------------------------------------------------------------------------
512:
513: /**
514: * Platform support table rows.
515: *
516: * Derived from ALL_TARGETS in script/build.ts. Update this when
517: * adding or removing build targets. ...
Found 31 matches /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/package.json: Line 7: "url": "git+https://github.com/getsentry/cli.git" /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/README.md: Line 133: git clone https://github.com/getsentry/cli.git /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/test/lib/upgrade.test.ts: Line 979: "https://github.com/getsentry/cli/releases/download/" /home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/src/lib/release-notes.ts: Line 662: const url = ...
Found 6 matches
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml:
Line 473: REPO="ghcr.io/getsentry/cli"
Line 688: oras push ghcr.io/getsentry/cli:nightly \
Line 690: --annotation "org.opencontainers.image.source=https://github.com/getsentry/cli" \
Line 699: oras tag ghcr.io/getsentry/cli:nightly "nightly-${VERSION}"
Line 709: REPO="ghcr.io/getsentry/cli"
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/cleanup-nightlies.yml:
Line 34: REPO="ghcr.io/getsentry/cli"
No files found
<path>/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/src/content/docs/index.mdx</path>
<type>file</type>
<content>
1: ---
2: title: The CLI for developers and agents
3: description: A CLI for developers and agents
4: template: splash
5: prev: false
6: next: false
7: hero:
8: title: |
9: The CLI for
10: developers and agents
11: tagline: No more flags. No more guessing. Just type what you mean and let the CLI figure out the rest. Built by humans and agents, for humans and agents.
12: ---
13:
14: import { Card, CardGrid } from '@astrojs/starlight/components';
15: import InstallSelector from '../../components/InstallSelector.astro';
16: import Terminal from '../../components/Terminal.astro';
17: import FeatureTerminal from '../../components/FeatureTerminal.astro';
18: import FeatureVisual from '../../components/FeatureVisual.astro';
19: import sectionBg1 from '../../assets/section-bg-1.png';
20: import ...
The current tree has no implemented UPGRADE_SOURCES list and no Toolkit fallback. Stable downloads, nightly downloads, delta metadata, and release publishing all point at one source: getsentry/cli.
The canonical installer is hand-written. The docs site exposes it through a symlink, so those two copies cannot diverge. Nothing checks parity between the shell installer and TypeScript source constants.
Canonical file:
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/install
repository:getsentry/cli:pull/v2/getsentry/cli/manifests/nightly/v2/getsentry/cli/blobs/${digest}/repos/getsentry/cli/releases/latestgithub.com/getsentry/cli/releases/download/.../home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/apps/cli-docs/public/install
This is a Git symlink, mode 120000, pointing to:
../../../packages/cli/install
The canonical installer is a regular executable file, mode 100755. Therefore:
The docs build packages apps/cli-docs/dist at:
/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/.github/workflows/ci.yml:883-960
There is no implementation symbol named UPGRADE_SOURCES.
Stable source ...
🟡 (21:01) Repository investigation found no implemented `UPGRADE_SOURCES` list and no Toolkit fallback; stable downloads, nightly downloads, delta metadata, and release publishing all use only `getsentry/cli`. 🟡 (21:01) Canonical shell installer is `/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/packages/cli/install`; nightly GHCR logic is at l…
🔴 (20:57) Repository search found exactly 6 references involving `ghcr.io/getsentry/cli`: `.github/workflows/ci.yml` line 473 sets `REPO="ghcr.io/getsentry/cli"`; line 688 runs `oras push ghcr.io/getsentry/cli:nightly \`; line 690 adds `--annotation "org.opencontainers.image.source=https://github.com/getsentry/cli" \`; line 699 runs `oras tag ghcr.io/getsentry/cli:nightly "nightly-${VERSION}"`; …
🔴 (20:51) `apps/cli-docs/public/CNAME` contains the single hostname `cli.sentry.dev`. 🔴 (20:51) `packages/cli/test/lib/upgrade.test.ts` tests `isNightlyVersion()` as true for `"0.0.0-dev.1740000000"` and `"0.0.0-dev.1"`, and false for `"1.0.0"`, `"0.13.0"`, `"2.0.0-beta.1"`, and `"0.0.0-dev"`. 🔴 (20:51) The `fetchLatestNightlyVersion` tests model 2 requests—GHCR token exchange followed by `/…
🔴 (20:47) In `packages/cli/src/lib/version-check.ts`, `checkForUpdateInBackgroundImpl(): void` is a non-blocking background version check. It never throws: errors are caught and reported to Sentry. 🔴 (20:47) `checkForUpdateInBackgroundImpl()` calls `shouldCheckForUpdate()` inside a synchronous `try`; DB-access failures are handled with `Sentry.captureException(error)` and an immediate return s…
🔴 (20:45) `packages/cli/test/lib/delta-upgrade.test.ts` is a 1,846-line Vitest suite for stable GitHub Releases and nightly GHCR delta-upgrade chain resolution, covering exported pure-computation functions and async orchestration through mocked `globalThis.fetch`. 🔴 (20:45) `packages/cli/test/lib/delta-upgrade.test.ts` imports `applyPatchChain`, `attemptDeltaUpgrade`, `canAttemptDelta`, `downl…
🔴 (20:44) A repository diff showed 791 files changed with exactly 217,091 insertions, creating the pre-monorepo root layout containing `.github/workflows/`, `docs/`, `plugins/`, `script/`, `src/`, and `test/`, along with Bun-era artifacts `bun.lock`, `bunfig.toml`, `docs/bun.lock`, and `.cursor/rules/bun-cli.mdc`. 🔴 (20:45) User stated that without closed-PR cleanup, previews “never clean up a…
🔴 (20:43) `packages/cli/script/check-stale-references.ts` is a 192-line `tsx` script that reads `packageManager` from `package.json`, derives `currentPM` by splitting at `"@"`, and exits `1` with `✗ Cannot determine package manager from package.json` when the field is absent or empty. 🔴 (20:43) `packages/cli/script/check-stale-references.ts` defines `ALL_PACKAGE_MANAGERS = ["bun", "yarn", "pnp…
🔴 (20:42) `packages/cli/test/lib/upgrade.test.ts` contains 2,118 lines of upgrade-module tests and mocks `node:child_process` with `vi.mock()` plus a mutable hoisted `spawnImpl.fn`; `fakeProcess(exitCode, stdoutData)` emits stdout chunks and then `close` on a microtask, while `fakeErrorProcess(message)` emits `error`. 🔴 (20:42) `packages/cli/test/lib/upgrade.test.ts` dynamically imports `../..…
🔴 (20:41) `packages/cli/src/lib/upgrade.ts` installation-method detection first returns `getInstallInfo().method` when present; otherwise it calls `detectLegacyInstallationMethod()` for pre-setup installs. 🔴 (20:41) When legacy installation detection returns anything other than `"unknown"`, `packages/cli/src/lib/upgrade.ts` best-effort persists `{ method: legacyMethod, path: process.execPath, …
🔴 (20:40) `.github/workflows/ci.yml` job `build-npm`, named `Build npm Package (smoke Node ${{ matrix.node }})`, needs `lint` and `test-unit`, runs on `ubuntu-latest`, uses `fail-fast: false`, and tests matrix Node majors `"20"`, `"22"`, and `"24"`. 🔴 (20:40) `build-npm` selects the `production` environment only on `main` or `release/` refs, builds under `${{ env.NODE_VERSION_22 }}` because `s…
🔴 (20:39) `.github/workflows/ci.yml` job `test-unit` needs `changes`, runs only when `needs.changes.outputs.code == 'true'`, uses Node `${{ env.NODE_VERSION_24 }}`, caches root/package/app `node_modules` under key `node-modules-${{ hashFiles('pnpm-lock.yaml', '.npmrc', 'packages/cli/patches/**') }}`, runs `pnpm run generate:schema` and `pnpm run test:unit`, then uploads `./coverage/lcov.info` th…
🔴 (20:37) User provided a repository search result with exactly 26 matches spanning installer references, `db/install-info.js`, upgrade/uninstall/setup code, docs-preview workflow paths, and `apps/cli-docs/astro.config.mjs`; a subsequent repository search returned `No files found`. 🔴 (20:37) `apps/cli-docs/package.json` defines private package `sentry-cli-docs` version `1.0.0`, with scripts `de…
🔴 (20:35) User provided a repository search result with exactly 79 matches under `/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/`, primarily across GitHub workflows. 🔴 (20:35) Search evidence showed `.github/workflows/ci.yml` runs on `main` and `release/**`, uses `pnpm install --frozen-lockfile`, enables full cross-platform `skill`, `code`, and…
🔴 (20:35) User provided a repository search result with exactly 56 matches under `/home/byk/.local/share/opencode/worktree/0e8c2f3bbe145a3280d6fb6ed900a5121f382cf0/glowing-cactus/`. 🔴 (20:35) Search evidence showed `packages/cli/package.json` line 7 sets the repository URL to `git+https://github.com/getsentry/cli.git`, and `packages/cli/README.md` line 133 documents `git clone https://github.co…
🔴 (20:34) User provided `packages/cli/src/lib/binary.ts` lines 1-350. The module is shared by `setup --install` and `upgrade` for installing, replacing, and managing the CLI binary. 🔴 (20:34) User provided `packages/cli/src/lib/binary.ts` installation metadata: `KNOWN_CURL_DIRS = [".local/bin", "bin", ".sentry/bin"]`; `InstallationMethod` supports `"curl" | "brew" | "npm" | "pnpm" | "bun" | "ya…
🔴 (20:33) User provided the current `packages/cli/install` implementation: a 354-line Bash installer using `set -euo pipefail`, supporting stable GitHub Release downloads and nightly GHCR OCI downloads, Linux glibc/musl detection, `darwin`/`linux`/`windows-x64`, optional PATH/completions/agent-skill setup, and optional `SENTRY_INIT=1` wizard launch through `/dev/tty`. 🔴 (20:33) User stated inst…
🔴 (20:32) User provided Sentry CLI project context: Node.js + pnpm + Stricli CLI in `packages/cli`; documentation site in `apps/cli-docs`; goals include zero-config DSN-based context detection, Seer AI debugging, `gh`-style UX, agent-friendly JSON output, native Node SEA binaries via fossilize, and SQLite API-response caching. 🔴 (20:32) User stated agents must read `.cursor/rules/ultracite.mdc`…
🔴 (20:32) User stated the project convention: always check `package.json` for the latest scripts; commands run from `packages/cli` or via `pnpm --filter sentry run <script>` from the repository root. 🔴 (20:32) User stated all packages must be added to `devDependencies`, never `dependencies`, because everything is bundled at build time via esbuild; CI enforces this with `pnpm run check:deps`. 🔴…
🟡 (20:31) User requested read-only exploration of the current getsentry/cli repository with “very thorough” depth; explicitly instructed not to edit files. 🟡 (20:31) User asked to investigate the shell installer plus any generation/check scripts, tests, documentation, CI configuration, and release workflows that encode getsentry/cli GitHub or GHCR source locations. 🟡 (20:31) User scoped the in…