From a361f742a1c476551b141add58347600ad7f4df0 Mon Sep 17 00:00:00 2001 From: AnobleSCM <211227905+AnobleSCM@users.noreply.github.com> Date: Sun, 2 Aug 2026 18:26:50 -0700 Subject: [PATCH 1/2] release: v0.2.0 prep Version bump and publish-readiness metadata for the standalone-first re-aim now on main. homepage flips to the GitHub repo since devcat.dev is offline; repository/bugs already pointed at the public repo. Adds a minimal CHANGELOG and fixes one stale cli_version sample in the README. Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 16 ++++++++++++++++ README.md | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- 4 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9d34c8d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project are documented in this file. + +## [0.2.0] + +Standalone-first re-aim: local stack report for Claude Code, Codex, and Cursor, including skills and subagents. + +- `--markdown` and `--json` output formats +- Truncation disclosure when a scan root hits its read ceiling +- Profile sync politely paused while devcat.dev is offline +- Skills and subagents are provably never sent off the machine + +## [0.1.x] + +Initial sync-focused release. diff --git a/README.md b/README.md index 94a7b1b..b281810 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ npx devcat-cli --json | jq '.clients[] | {label, total}' ```json { - "cli_version": "0.1.1", + "cli_version": "0.2.0", "total": 23, "project_scoped": 2, "user_scoped": 21, diff --git a/package-lock.json b/package-lock.json index e3bc104..6adfbb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "devcat-cli", - "version": "0.1.1", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "devcat-cli", - "version": "0.1.1", + "version": "0.2.0", "license": "MIT", "dependencies": { "@napi-rs/keyring": "^1.2.0", diff --git a/package.json b/package.json index 4e4cb1a..8a1177d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "devcat-cli", - "version": "0.1.1", + "version": "0.2.0", "description": "See your whole AI-coding stack in one command. npx devcat-cli scans this machine for the MCP servers, plugins, skills, and subagents installed across Claude Code, Codex, and Cursor and prints them grouped — locally, with no account and no network call.", "license": "MIT", "author": "Andrew Noble (https://github.com/AnobleSCM)", @@ -8,7 +8,7 @@ "type": "git", "url": "git+https://github.com/AnobleSCM/devcat-cli.git" }, - "homepage": "https://devcat.dev", + "homepage": "https://github.com/AnobleSCM/devcat-cli", "bugs": "https://github.com/AnobleSCM/devcat-cli/issues", "type": "commonjs", "engines": { From f8a184765150673a653f3d940bceba97a3f0ccc2 Mon Sep 17 00:00:00 2001 From: AnobleSCM <211227905+AnobleSCM@users.noreply.github.com> Date: Sun, 2 Aug 2026 18:39:01 -0700 Subject: [PATCH 2/2] fix: sync CLI_VERSION to 0.2.0, add parity test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/version.ts still said 0.1.1, which fed --version and the --json cli_version field — the tarball would have reported the old version. Bumped it and added a unit test that reads package.json at test time and asserts CLI_VERSION matches, so this can't drift silently again. Also updates the two pre-existing tests that hardcoded the old version as an expected literal (User-Agent header, device-flow client_metadata) — both broke against the bump and are required for npm test to pass, not scope creep. Co-Authored-By: Claude Sonnet 5 --- src/version.ts | 2 +- test/unit/api/client.test.ts | 2 +- test/unit/auth/deviceFlow.test.ts | 2 +- test/unit/version.parity.test.ts | 13 +++++++++++++ 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 test/unit/version.parity.test.ts diff --git a/src/version.ts b/src/version.ts index 0cdbeda..209908e 100644 --- a/src/version.ts +++ b/src/version.ts @@ -4,4 +4,4 @@ * Sent as cli_version on POST /api/device/token per Phase 40 D-06. * Server validates against semver regex /^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?$/. */ -export const CLI_VERSION = '0.1.1'; +export const CLI_VERSION = '0.2.0'; diff --git a/test/unit/api/client.test.ts b/test/unit/api/client.test.ts index 5e8d6b2..0c28a07 100644 --- a/test/unit/api/client.test.ts +++ b/test/unit/api/client.test.ts @@ -20,7 +20,7 @@ describe('authenticatedFetch', () => { }), ); await authenticatedFetch(`${API_BASE}/probe`); - expect(capturedUA).toMatch(/^devcat-cli\/0\.1\.1 \((darwin|linux|win32); node /); + expect(capturedUA).toMatch(/^devcat-cli\/0\.2\.0 \((darwin|linux|win32); node /); }); it('sets Authorization: Bearer when bearerToken passed', async () => { diff --git a/test/unit/auth/deviceFlow.test.ts b/test/unit/auth/deviceFlow.test.ts index b5e261c..90931e6 100644 --- a/test/unit/auth/deviceFlow.test.ts +++ b/test/unit/auth/deviceFlow.test.ts @@ -263,7 +263,7 @@ describe('pollForToken', () => { const body = capturedBody as { client_metadata?: { cli_version?: string; hostname?: string; platform?: string }; }; - expect(body.client_metadata?.cli_version).toBe('0.1.1'); + expect(body.client_metadata?.cli_version).toBe('0.2.0'); expect(['darwin', 'linux', 'win32']).toContain(body.client_metadata?.platform); expect(typeof body.client_metadata?.hostname).toBe('string'); }); diff --git a/test/unit/version.parity.test.ts b/test/unit/version.parity.test.ts new file mode 100644 index 0000000..243e258 --- /dev/null +++ b/test/unit/version.parity.test.ts @@ -0,0 +1,13 @@ +import { describe, it, expect } from 'vitest'; +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; +import { CLI_VERSION } from '../../src/version.js'; + +describe('CLI_VERSION parity', () => { + it('matches the version field in package.json', () => { + const packageJsonPath = join(__dirname, '..', '..', 'package.json'); + const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8')); + + expect(CLI_VERSION).toBe(packageJson.version); + }); +});