Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"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)",
"repository": {
"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": {
Expand Down
2 changes: 1 addition & 1 deletion src/version.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
2 changes: 1 addition & 1 deletion test/unit/api/client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down
2 changes: 1 addition & 1 deletion test/unit/auth/deviceFlow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});
Expand Down
13 changes: 13 additions & 0 deletions test/unit/version.parity.test.ts
Original file line number Diff line number Diff line change
@@ -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);
});
});
Loading