Skip to content

Commit 61ce08e

Browse files
authored
chore: move the VS Code extension to the pymodel publisher (#72)
## Summary - Move the VS Code extension from the `pythoughts` Marketplace publisher to `pymodel`, matching the npm scope and GitHub org migration. - Update the publisher field, extension keyword, Marketplace links, site install snippets, and the release script Marketplace query. - Rename the Open VSX namespace fixtures in tests; the real namespace derives from the manifest publisher at publish time. ## Notes - CI workflows need no change: the publisher flows from `apps/vscode/package.json`; the publish jobs read `VSCE_PAT` / `OVSX_PAT` secrets, which must be rotated to the new `pymodel` accounts before the next extension release. - The publisher change creates a new Marketplace listing; the old `pythoughts.pythinker-code` listing does not migrate automatically. ## Testing - `pnpm --filter pythinker-code test` — 338 tests pass. - `tsgo -p apps/vscode/tsconfig.json --noEmit` — clean. - Full pre-push gate passed. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * The VS Code extension is now published under the `pymodel` publisher and Open VSX namespace. * Updated installation commands, marketplace links, and displayed extension identifiers. * **Documentation** * Updated extension installation guidance to reference the new publisher. * **Bug Fixes** * Release and validation workflows now use the updated extension identity consistently. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 73d7faa commit 61ce08e

8 files changed

Lines changed: 26 additions & 18 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pymodel/pythinker-code": patch
3+
---
4+
5+
Publish the VS Code extension under the pymodel Marketplace publisher and Open VSX namespace.

apps/site/src/App.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const terminalDemos = [
5757
},
5858
];
5959
60-
const vscodeInstallCommand = 'code --install-extension pythoughts.pythinker-code';
60+
const vscodeInstallCommand = 'code --install-extension pymodel.pythinker-code';
6161
6262
const copiedCommand = ref('');
6363
const mobileMenu = ref(null);
@@ -307,12 +307,12 @@ onUnmounted(() => {
307307
<li><strong>Thinking controls.</strong> Toggle reasoning or pick a model-supported thinking effort per task.</li>
308308
</ul>
309309
<div class="vscode-actions">
310-
<a class="button button-primary" href="https://marketplace.visualstudio.com/items?itemName=pythoughts.pythinker-code" target="_blank" rel="noopener">
310+
<a class="button button-primary" href="https://marketplace.visualstudio.com/items?itemName=pymodel.pythinker-code" target="_blank" rel="noopener">
311311
<img src="/brand/visualstudiocode.svg" alt="" width="16" height="16" />
312312
Get the extension
313313
</a>
314314
<div class="vscode-command">
315-
<code>code --install-extension pythoughts.pythinker-code</code>
315+
<code>code --install-extension pymodel.pythinker-code</code>
316316
<button class="row-copy" type="button" aria-label="Copy VS Code install command" @click="copyText(vscodeInstallCommand)">
317317
<svg v-if="copiedCommand === vscodeInstallCommand" aria-hidden="true" viewBox="0 0 20 20"><path d="m4 10 4 4 8-9" /></svg>
318318
<svg v-else aria-hidden="true" viewBox="0 0 20 20"><rect x="7" y="3" width="10" height="11" rx="2" /><rect x="3" y="7" width="10" height="10" rx="2" /></svg>
@@ -494,7 +494,7 @@ onUnmounted(() => {
494494
495495
<footer class="site-footer">
496496
<div class="container footer-inner">
497-
<div><div class="footer-brand"><PythinkerMascot :width="16" :height="20" /><p class="wordmark">Pythinker Code</p><span class="footer-version">v{{ version }}</span></div><p class="footer-caption">Built by Pythoughts. MIT License.</p></div>
497+
<div><div class="footer-brand"><PythinkerMascot :width="16" :height="20" /><p class="wordmark">Pythinker Code</p><span class="footer-version">v{{ version }}</span></div><p class="footer-caption">Built by Pymodel. MIT License.</p></div>
498498
<div class="footer-links">
499499
<a href="https://github.com/PyModel/pythinker-code" target="_blank" rel="noopener">GitHub</a>
500500
<a href="https://www.npmjs.com/package/@pymodel/pythinker-code" target="_blank" rel="noopener">npm</a>

apps/vscode/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ AI coding assistant for VS Code, built for long-context workflows and complex co
1515

1616
Pythinker Code requires VS Code 1.100.0 or later.
1717

18-
1. Install from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=pythoughts.pythinker-code)
18+
1. Install from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=pymodel.pythinker-code)
1919
2. Open a folder in VS Code
2020
3. Click the Pythinker icon in the Activity Bar
2121
4. Sign in, or use a provider already configured in the shared `config.toml`

apps/vscode/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pythinker-code",
3-
"publisher": "pythoughts",
3+
"publisher": "pymodel",
44
"displayName": "Pythinker Code",
55
"description": "Pythinker Code extension for VS Code",
66
"version": "0.9.0",
@@ -40,7 +40,7 @@
4040
"json",
4141
"autocomplete",
4242
"pythinker",
43-
"pythoughts"
43+
"pymodel"
4444
],
4545
"pricing": "Free",
4646
"activationEvents": [],

apps/vscode/scripts/release-extension.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ async function assertUnpublished(version) {
7070
const response = await fetch('https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery', {
7171
method: 'POST',
7272
headers: { 'Content-Type': 'application/json', Accept: 'application/json;api-version=7.1-preview.1' },
73-
body: JSON.stringify({ filters: [{ criteria: [{ filterType: 7, value: 'pythoughts.pythinker-code' }] }], flags: 914 }),
73+
body: JSON.stringify({ filters: [{ criteria: [{ filterType: 7, value: 'pymodel.pythinker-code' }] }], flags: 914 }),
7474
});
7575
if (!response.ok) {
7676
console.warn(`Could not reach the Marketplace to check for ${version}; continuing.`);

apps/vscode/test/extension-host/index.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const os = require("node:os");
44
const path = require("node:path");
55
const vscode = require("vscode");
66

7-
const EXTENSION_ID = "pythoughts.pythinker-code";
7+
const EXTENSION_ID = "pymodel.pythinker-code";
88
const EXPECTED_COMMANDS = [
99
"pythinker.clearAllState",
1010
"pythinker.focusInput",

apps/vscode/test/ovsx-namespace.test.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,30 @@ describe('ensureNamespace', () => {
1313
it('creates the namespace before any publish is attempted', () => {
1414
const run = vi.fn();
1515

16-
ensureNamespace('pythoughts', run);
16+
ensureNamespace('pymodel', run);
1717

1818
expect(run).toHaveBeenCalledTimes(1);
1919
const [pkg, bin, args] = run.mock.calls[0] as [string, string, string[]];
2020
expect([pkg, bin]).toEqual(['ovsx', 'ovsx']);
21-
expect(args).toEqual(['create-namespace', 'pythoughts']);
21+
expect(args).toEqual(['create-namespace', 'pymodel']);
2222
});
2323

2424
it('treats an existing namespace as success, so a re-run is safe', () => {
2525
const run = vi.fn(() => {
26-
throw new Error('Local ovsx exited with code 1:\nERROR Namespace already exists: pythoughts');
26+
throw new Error('Local ovsx exited with code 1:\nERROR Namespace already exists: pymodel');
2727
});
2828

29-
expect(() => ensureNamespace('pythoughts', run)).not.toThrow();
29+
expect(() => ensureNamespace('pymodel', run)).not.toThrow();
30+
expect(run).toHaveBeenCalledTimes(1);
31+
const [, , args] = run.mock.calls[0] as unknown as [string, string, string[]];
32+
expect(args).toEqual(['create-namespace', 'pymodel']);
3033
});
3134

3235
it('propagates a real failure instead of publishing into a broken namespace', () => {
3336
const run = vi.fn(() => {
3437
throw new Error('Local ovsx exited with code 1:\nERROR Response code 401 (Unauthorized)');
3538
});
3639

37-
expect(() => ensureNamespace('pythoughts', run)).toThrow(/401/u);
40+
expect(() => ensureNamespace('pymodel', run)).toThrow(/401/u);
3841
});
3942
});

apps/vscode/test/publish-retry.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ describe('summaryLine', () => {
5858
*/
5959
it('keeps the registry error that follows the CLI wrapper line', () => {
6060
const error = new Error(
61-
'Local ovsx exited with code 1:\nERROR Unknown namespace: pythoughts\n',
61+
'Local ovsx exited with code 1:\nERROR Unknown namespace: pymodel\n',
6262
);
6363

6464
const line = summaryLine(error);
6565

66-
expect(line).toContain('Unknown namespace: pythoughts');
66+
expect(line).toContain('Unknown namespace: pymodel');
6767
expect(line).toContain('exited with code 1');
6868
});
6969

@@ -85,7 +85,7 @@ describe('summaryLine', () => {
8585
describe('publishEachTarget', () => {
8686
it('reports the underlying cause for a failed target, not just the wrapper', async () => {
8787
const publishOne = vi.fn().mockRejectedValue(
88-
new Error('Local ovsx exited with code 1:\nERROR Unknown namespace: pythoughts'),
88+
new Error('Local ovsx exited with code 1:\nERROR Unknown namespace: pymodel'),
8989
);
9090
const logged: string[] = [];
9191
const log = vi.spyOn(console, 'log').mockImplementation((...args) => {
@@ -103,7 +103,7 @@ describe('publishEachTarget', () => {
103103
const failures = logged.filter((line) => line.includes('FAILED'));
104104
expect(failures).toHaveLength(3);
105105
for (const failure of failures) {
106-
expect(failure).toContain('Unknown namespace: pythoughts');
106+
expect(failure).toContain('Unknown namespace: pymodel');
107107
}
108108
});
109109

0 commit comments

Comments
 (0)