Skip to content

chore(vscode): prepare extension for release under patroza namespace#8

Open
patroza wants to merge 4 commits into
t3code/vscode-extension-prfrom
t3code/prepare-vscode-plugin-release
Open

chore(vscode): prepare extension for release under patroza namespace#8
patroza wants to merge 4 commits into
t3code/vscode-extension-prfrom
t3code/prepare-vscode-plugin-release

Conversation

@patroza

@patroza patroza commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Stacked on #3 — review that one first; this PR only contains the release-prep commit on top of it.

Prepares the VS Code extension to ship as patroza.t3-code on both the VS Code Marketplace and Open VSX, branded as an unofficial fork build of upstream pingdotgg/t3code.

What changed

Identity & branding

  • publisher: t3codepatroza, so the extension ID becomes patroza.t3-code.
  • Display name is now T3 Code (patroza build), and the description plus a README callout state it is an unofficial fork not supported by T3 Tools Inc., pointing issues at this fork's tracker.

Marketplace metadata vsce requires

  • 128×128 PNG icon at media/icon.png, downscaled from apps/desktop/resources/icon.png. The existing media/t3-code.svg can't serve here: it uses currentColor for the activity bar, and the marketplace rejects SVG icons.
  • repository (with directory), homepage, bugs, license, keywords, a LICENSE copy, and a CHANGELOG.md.

Packaging & publishing

  • Adds package, publish:vsce, publish:ovsx scripts, plus @vscode/vsce and ovsx devDeps, and a vscode:prepublish build hook.
  • --no-dependencies is deliberate: esbuild already bundles src/, so nothing from node_modules ships and vsce never has to resolve the workspace:* deps it cannot understand.
  • --baseContentUrl / --baseImagesUrl make the README's relative links resolve against apps/vscode/ — vsce can't infer that for an extension in a monorepo subdirectory, and would otherwise rewrite the screenshot to a 404 at the repo root.
  • *.vsix is gitignored; dev-only files are dropped from the package.

private: true is kept on purpose — vsce 3.9.2 has no private check (verified against its source), and it still guards against an accidental npm publish.

Verification

  • vsce package succeeds with no warnings: 11 files, 678 KB.
  • Inspected the generated extension.vsixmanifest: Publisher="patroza", Id="t3-code", icon asset present, marketplace links correct.
  • Confirmed the README screenshot rewrites to raw.githubusercontent.com/patroza/t3code/main/apps/vscode/media/screenshot.jpg.
  • pnpm --filter t3-code test (18 passed), typecheck, and fmt:check all pass. Lint warnings under apps/vscode/src are pre-existing and untouched.

Not included — needed before an actual publish

  • Creating the patroza publisher on the Marketplace and the namespace on Open VSX (ovsx create-namespace patroza).
  • VSCE_PAT / OVSX_PAT tokens. Per the chosen approach, publishing stays manual; no CI secrets or release workflow are added here. The README documents the full flow.
  • version is left at 0.0.37; bump it when you're ready to cut the first release.

🤖 Generated with Claude Code

Publishes the extension as `patroza.t3-code` to the VS Code Marketplace and
Open VSX, branded as an unofficial fork build of upstream pingdotgg/t3code.

- Set publisher to `patroza` and mark the display name/description/README as a
  fork build so it is not mistaken for the official upstream extension.
- Add the marketplace metadata vsce needs: 128x128 PNG icon (derived from the
  desktop app icon), repository/homepage/bugs, license, keywords, LICENSE, and
  a CHANGELOG.
- Add `package`/`publish:vsce`/`publish:ovsx` scripts plus @vscode/vsce and
  ovsx. Packaging passes --no-dependencies because esbuild already bundles
  src/, so vsce never has to resolve the workspace:* deps it cannot understand,
  and --baseContentUrl/--baseImagesUrl so the README's relative links resolve
  against apps/vscode/ rather than the repo root.
- Ignore *.vsix and drop dev-only files from the packaged extension.

`private: true` is retained deliberately: vsce ignores it, and it still guards
against an accidental `npm publish`.

Verified with `vsce package`: 678 KB, 11 files, no warnings; the vsix manifest
resolves to publisher `patroza`, id `t3-code`, and correct marketplace links.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Jul 14, 2026
patroza and others added 3 commits July 14, 2026 21:23
The README explained the connection model only in passing, inside the
Development section, and never stated the default server URL or how to change
it. The settings themselves were only reachable by knowing their names.

- Add "Connecting to a server" and "Settings" sections covering the
  http://127.0.0.1:3773 default, when to change it, the desktop-runtime
  precedence, machine scope, and every setting with its default.
- Add "T3 Code: Set Server URL", which prefills the current value and validates
  input, and "T3 Code: Open Settings", which filters the Settings UI to this
  extension.
- Expand the settings descriptions so the Settings UI is self-explanatory.

serverUrlValidationMessage lives in serverResolution.ts beside the
normalizeServerUrl call it guards: that parses with `new URL(...)`, so an
unparseable value used to surface as a connection failure rather than at entry.
Keeping it there also keeps it testable, since extension.ts imports `vscode`.

Also record the Dec 1 2026 Azure DevOps global PAT retirement and the correct
PAT scopes in the release docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
vsce rewrites the README's relative links against --baseContentUrl/--baseImagesUrl
because it cannot infer that this extension lives in a monorepo subdirectory.
Those were pointed at `main`, which meant the screenshot 404'd on the marketplace
until the extension reached main, and would break again if the file ever moved.

scripts/vsce.ts now resolves the current commit and pins both URLs to it, so a
published version's README refers to the tree it was built from. A published
README cannot be corrected without shipping a new version, so the script also
refuses to run when HEAD is not on a remote branch (the links would 404 for
everyone) and warns when the working tree is dirty. The GitHub slug and
subdirectory are derived from package.json's repository field rather than
duplicated in the scripts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
0.0.37 is already on the marketplace, and a published version cannot be
replaced, so the settings commands and docs ship as 0.0.38. This also repairs
the live listing: 0.0.37's README links pointed at main before the extension
existed there, so its screenshot 404s.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant