From 401964f0faee4ffa189aa3f9c8165cd69cc9a961 Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Thu, 9 Apr 2026 16:54:02 +1000 Subject: [PATCH 1/8] Switch packages from custom build scripts to tsup Each package had a hand-rolled build.ts that called esbuild directly. Replaced with tsup.config.ts in each package, which handles ESM + CJS output and DTS generation in one pass. Key decisions: - bundle: true is required because bundle: false only transpiles entry files, leaving relative imports unresolved in dist. Consuming bundlers follow those imports and find nothing. - clean: true replaces the @shellicar/build-clean plugin. The plugin uses esbuild's metafile to find current build outputs and delete everything else. TypeScript-generated DTS files never appear in the metafile, so the plugin deleted them every time. clean: true wipes the outdir before the build starts, so JS and DTS land together. - entryNames: '[name]' in esbuildOptions puts JS files at the same level as DTS files. tsup's TypeScript pass ignores esbuild's entryNames entirely, so DTS always lands flat at dist/esm/[name].d.ts. Matching JS placement keeps them co-located and matches the exports map. - claude-sdk-tools entry is src/entry/*.ts, not src/*.ts. The public tool modules live under src/entry/; src/*.ts only contains internal utilities. Exports maps updated to the nested import/require form with types + default sub-conditions, pointing to the correct dist paths. tsconfig.json in each package now scopes to src/**/*.ts and excludes dist/node_modules. tsconfig.check.json symlinks to the root copy. turbo.json build inputs updated to include tsup.config.ts. Both apps updated: entryNames '[name]', packages: 'external' instead of a manual external list, bin paths updated from dist/entry/main.js to dist/main.js, workspace deps moved to dependencies since they are externalized and need to be present at runtime. --- apps/claude-cli/build.ts | 4 +- apps/claude-cli/package.json | 8 +- apps/claude-cli/tsconfig.check.json | 10 +- apps/claude-cli/tsconfig.json | 3 +- apps/claude-sdk-cli/build.ts | 4 +- apps/claude-sdk-cli/package.json | 18 +- apps/claude-sdk-cli/tsconfig.check.json | 10 +- apps/claude-sdk-cli/tsconfig.json | 3 +- packages/claude-core/build.ts | 37 - packages/claude-core/package.json | 25 +- packages/claude-core/tsconfig.check.json | 10 +- packages/claude-core/tsconfig.json | 3 +- packages/claude-core/tsup.config.ts | 39 ++ packages/claude-sdk-tools/build.ts | 38 - packages/claude-sdk-tools/package.json | 184 +++-- packages/claude-sdk-tools/tsconfig.check.json | 10 +- packages/claude-sdk-tools/tsconfig.json | 3 +- packages/claude-sdk-tools/tsup.config.ts | 39 ++ packages/claude-sdk/build.ts | 37 - packages/claude-sdk/package.json | 24 +- packages/claude-sdk/tsconfig.check.json | 10 +- packages/claude-sdk/tsconfig.json | 3 +- packages/claude-sdk/tsup.config.ts | 39 ++ packages/typescript-config/base.json | 3 +- packages/typescript-config/package.json | 2 +- pnpm-lock.yaml | 651 ++++++++++++++++-- tsconfig.check.json | 11 + turbo.json | 4 +- 28 files changed, 919 insertions(+), 313 deletions(-) mode change 100644 => 120000 apps/claude-cli/tsconfig.check.json mode change 100644 => 120000 apps/claude-sdk-cli/tsconfig.check.json delete mode 100644 packages/claude-core/build.ts mode change 100644 => 120000 packages/claude-core/tsconfig.check.json create mode 100644 packages/claude-core/tsup.config.ts delete mode 100644 packages/claude-sdk-tools/build.ts mode change 100644 => 120000 packages/claude-sdk-tools/tsconfig.check.json create mode 100644 packages/claude-sdk-tools/tsup.config.ts delete mode 100644 packages/claude-sdk/build.ts mode change 100644 => 120000 packages/claude-sdk/tsconfig.check.json create mode 100644 packages/claude-sdk/tsup.config.ts create mode 100644 tsconfig.check.json diff --git a/apps/claude-cli/build.ts b/apps/claude-cli/build.ts index 865785d..fec1f26 100644 --- a/apps/claude-cli/build.ts +++ b/apps/claude-cli/build.ts @@ -17,9 +17,9 @@ const ctx = await esbuild.context({ banner: { js: '#!/usr/bin/env node' }, bundle: true, chunkNames: 'chunks/[name]-[hash]', - entryNames: 'entry/[name]', + entryNames: '[name]', entryPoints: ['src/entry/*.ts'], - external: ['@anthropic-ai/claude-agent-sdk', 'sharp'], + packages: 'external', format: 'esm', inject, keepNames: true, diff --git a/apps/claude-cli/package.json b/apps/claude-cli/package.json index 9524697..1e1a2d7 100644 --- a/apps/claude-cli/package.json +++ b/apps/claude-cli/package.json @@ -1,6 +1,6 @@ { "name": "@shellicar/claude-cli", - "version": "1.0.0-alpha.74", + "version": "1.0.0-beta.1", "private": false, "type": "module", "description": "Interactive CLI for Claude AI with terminal UI", @@ -44,11 +44,11 @@ "@shellicar/mcp-exec": "1.0.0-preview.6", "sharp": "^0.34.5", "string-width": "^8.2.0", - "zod": "^4.3.6" + "zod": "^4.3.6", + "@anthropic-ai/sdk": "^0.82.0", + "@modelcontextprotocol/sdk": "^1.29.0" }, "devDependencies": { - "@anthropic-ai/sdk": "^0.82.0", - "@modelcontextprotocol/sdk": "^1.29.0", "@shellicar/build-clean": "^1.3.2", "@shellicar/build-version": "^1.3.6", "@shellicar/typescript-config": "workspace:*", diff --git a/apps/claude-cli/tsconfig.check.json b/apps/claude-cli/tsconfig.check.json deleted file mode 100644 index bfed23d..0000000 --- a/apps/claude-cli/tsconfig.check.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true, - "composite": false, - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - } -} diff --git a/apps/claude-cli/tsconfig.check.json b/apps/claude-cli/tsconfig.check.json new file mode 120000 index 0000000..0a31537 --- /dev/null +++ b/apps/claude-cli/tsconfig.check.json @@ -0,0 +1 @@ +../../tsconfig.check.json \ No newline at end of file diff --git a/apps/claude-cli/tsconfig.json b/apps/claude-cli/tsconfig.json index f41a1dc..3b5798d 100644 --- a/apps/claude-cli/tsconfig.json +++ b/apps/claude-cli/tsconfig.json @@ -4,5 +4,6 @@ "outDir": "dist", "rootDir": "." }, - "include": ["**/*.ts"] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/apps/claude-sdk-cli/build.ts b/apps/claude-sdk-cli/build.ts index 04c31d9..7bef230 100644 --- a/apps/claude-sdk-cli/build.ts +++ b/apps/claude-sdk-cli/build.ts @@ -16,9 +16,9 @@ const ctx = await esbuild.context({ banner: { js: '#!/usr/bin/env node' }, bundle: true, chunkNames: 'chunks/[name]-[hash]', - entryNames: 'entry/[name]', + entryNames: '[name]', entryPoints: ['src/entry/*.ts'], - external: ['@anthropic-ai/sdk'], + packages: 'external', format: 'esm', inject, keepNames: true, diff --git a/apps/claude-sdk-cli/package.json b/apps/claude-sdk-cli/package.json index 4b26f8b..e538ef3 100644 --- a/apps/claude-sdk-cli/package.json +++ b/apps/claude-sdk-cli/package.json @@ -1,6 +1,6 @@ { "name": "@shellicar/claude-sdk-cli", - "version": "1.0.0-alpha.5", + "version": "1.0.0-beta.1", "private": false, "description": "Interactive CLI for Claude AI built on the Anthropic SDK", "license": "MIT", @@ -21,16 +21,16 @@ "access": "public" }, "bin": { - "claude-sdk-cli": "dist/entry/main.js" + "claude-sdk-cli": "dist/main.js" }, "files": [ "dist" ], "type": "module", "scripts": { - "dev": "node --inspect dist/entry/main.js", + "dev": "node --inspect dist/main.js", "build": "tsx build.ts", - "start": "node dist/entry/main.js", + "start": "node dist/main.js", "watch": "tsx build.ts --watch", "test": "vitest run", "type-check": "tsc -p tsconfig.check.json" @@ -43,15 +43,15 @@ "@types/node": "^25.5.2", "esbuild": "^0.27.5", "tsx": "^4.21.0", - "vitest": "^4.1.2", + "vitest": "^4.1.2" + }, + "dependencies": { + "@anthropic-ai/sdk": "^0.82.0", "@shellicar/claude-core": "workspace:^", "@shellicar/claude-sdk": "workspace:^", "@shellicar/claude-sdk-tools": "workspace:^", "cli-highlight": "^2.1.11", "winston": "^3.19.0", "zod": "^4.3.6" - }, - "dependencies": { - "@anthropic-ai/sdk": "^0.82.0" } -} +} \ No newline at end of file diff --git a/apps/claude-sdk-cli/tsconfig.check.json b/apps/claude-sdk-cli/tsconfig.check.json deleted file mode 100644 index bfed23d..0000000 --- a/apps/claude-sdk-cli/tsconfig.check.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true, - "composite": false, - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - } -} diff --git a/apps/claude-sdk-cli/tsconfig.check.json b/apps/claude-sdk-cli/tsconfig.check.json new file mode 120000 index 0000000..0a31537 --- /dev/null +++ b/apps/claude-sdk-cli/tsconfig.check.json @@ -0,0 +1 @@ +../../tsconfig.check.json \ No newline at end of file diff --git a/apps/claude-sdk-cli/tsconfig.json b/apps/claude-sdk-cli/tsconfig.json index f41a1dc..3b5798d 100644 --- a/apps/claude-sdk-cli/tsconfig.json +++ b/apps/claude-sdk-cli/tsconfig.json @@ -4,5 +4,6 @@ "outDir": "dist", "rootDir": "." }, - "include": ["**/*.ts"] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/claude-core/build.ts b/packages/claude-core/build.ts deleted file mode 100644 index c07e902..0000000 --- a/packages/claude-core/build.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { glob } from 'node:fs/promises'; -import cleanPlugin from '@shellicar/build-clean/esbuild'; -import versionPlugin from '@shellicar/build-version/esbuild'; -import * as esbuild from 'esbuild'; - -const watch = process.argv.some((x) => x === '--watch'); - -const plugins = [cleanPlugin({ destructive: true }), versionPlugin({ versionCalculator: 'gitversion' })]; - -const inject = await Array.fromAsync(glob('./inject/*.ts')); - -const ctx = await esbuild.context({ - bundle: true, - entryPoints: ['src/*.ts'], - inject, - entryNames: '[name]', - chunkNames: 'chunks/[name]-[hash]', - keepNames: true, - format: 'esm', - minify: false, - splitting: true, - outdir: 'dist', - platform: 'node', - plugins, - sourcemap: true, - target: 'node24', - treeShaking: false, - tsconfig: 'tsconfig.json', -}); - -if (watch) { - await ctx.watch(); - console.log('watching...'); -} else { - await ctx.rebuild(); - ctx.dispose(); -} diff --git a/packages/claude-core/package.json b/packages/claude-core/package.json index 0e6b075..d3db924 100644 --- a/packages/claude-core/package.json +++ b/packages/claude-core/package.json @@ -1,14 +1,13 @@ { "name": "@shellicar/claude-core", - "version": "0.0.0", + "version": "1.0.0-beta.1", "description": "", - "main": "index.js", "scripts": { - "build": "tsx build.ts", - "dev": "tsx build.ts --watch", + "build": "tsup", + "dev": "tsup --watch", + "watch": "tsup --watch", "test": "vitest run", - "type-check": "tsc -p tsconfig.check.json", - "watch": "tsx build.ts --watch" + "type-check": "tsc -p tsconfig.check.json" }, "keywords": [], "author": "", @@ -20,8 +19,14 @@ ], "exports": { "./*": { - "import": "./dist/*.js", - "types": "./src/*.ts" + "import": { + "types": "./dist/esm/*.d.ts", + "default": "./dist/esm/*.js" + }, + "require": { + "types": "./dist/cjs/*.d.cts", + "default": "./dist/cjs/*.cjs" + } } }, "devDependencies": { @@ -30,9 +35,9 @@ "@shellicar/typescript-config": "workspace:*", "@tsconfig/node24": "^24.0.4", "@types/node": "^25.5.2", - "esbuild": "^0.27.5", + "tsup": "^8.5.1", "tsx": "^4.21.0", - "typescript": "^6.0.2" + "typescript": "^5.9.3" }, "dependencies": { "string-width": "^8.2.0", diff --git a/packages/claude-core/tsconfig.check.json b/packages/claude-core/tsconfig.check.json deleted file mode 100644 index bfed23d..0000000 --- a/packages/claude-core/tsconfig.check.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true, - "composite": false, - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - } -} diff --git a/packages/claude-core/tsconfig.check.json b/packages/claude-core/tsconfig.check.json new file mode 120000 index 0000000..0a31537 --- /dev/null +++ b/packages/claude-core/tsconfig.check.json @@ -0,0 +1 @@ +../../tsconfig.check.json \ No newline at end of file diff --git a/packages/claude-core/tsconfig.json b/packages/claude-core/tsconfig.json index a4e1379..1bb7300 100644 --- a/packages/claude-core/tsconfig.json +++ b/packages/claude-core/tsconfig.json @@ -5,5 +5,6 @@ "rootDir": ".", "types": ["node"] }, - "include": ["**/*.ts"] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/claude-core/tsup.config.ts b/packages/claude-core/tsup.config.ts new file mode 100644 index 0000000..3b052c4 --- /dev/null +++ b/packages/claude-core/tsup.config.ts @@ -0,0 +1,39 @@ +import versionPlugin from '@shellicar/build-version/esbuild'; +import { defineConfig, type Options } from 'tsup'; + +const esbuildPlugins = [versionPlugin({ versionCalculator: 'gitversion' })]; + +const commonOptions = (config: Options) => ({ + bundle: true, + clean: true, + dts: true, + entry: ['src/*.ts'], + esbuildPlugins, + esbuildOptions: (options) => { + options.chunkNames = 'chunks/[name]-[hash]'; + options.entryNames = '[name]'; + }, + keepNames: true, + minify: false, + removeNodeProtocol: false, + platform: 'node', + sourcemap: true, + splitting: true, + target: 'node24', + treeshake: false, + watch: config.watch, + tsconfig: 'tsconfig.json', +}) satisfies Options; + +export default defineConfig((config) => [ + { + ...commonOptions(config), + format: 'esm', + outDir: 'dist/esm', + }, + { + ...commonOptions(config), + format: 'cjs', + outDir: 'dist/cjs', + }, +]); diff --git a/packages/claude-sdk-tools/build.ts b/packages/claude-sdk-tools/build.ts deleted file mode 100644 index d82e2fa..0000000 --- a/packages/claude-sdk-tools/build.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { glob } from 'node:fs/promises'; -import cleanPlugin from '@shellicar/build-clean/esbuild'; -import versionPlugin from '@shellicar/build-version/esbuild'; -import * as esbuild from 'esbuild'; - -const watch = process.argv.some((x) => x === '--watch'); -const _minify = !watch; - -const plugins = [cleanPlugin({ destructive: true }), versionPlugin({ versionCalculator: 'gitversion' })]; - -const inject = await Array.fromAsync(glob('./inject/*.ts')); - -const ctx = await esbuild.context({ - bundle: true, - entryPoints: ['src/entry/*.ts'], - inject, - entryNames: 'entry/[name]', - chunkNames: 'chunks/[name]-[hash]', - keepNames: true, - format: 'esm', - minify: false, - splitting: true, - outdir: 'dist', - platform: 'node', - plugins, - sourcemap: true, - target: 'node24', - treeShaking: false, - tsconfig: 'tsconfig.json', -}); - -if (watch) { - await ctx.watch(); - console.log('watching...'); -} else { - await ctx.rebuild(); - ctx.dispose(); -} diff --git a/packages/claude-sdk-tools/package.json b/packages/claude-sdk-tools/package.json index d64c53e..feffb02 100644 --- a/packages/claude-sdk-tools/package.json +++ b/packages/claude-sdk-tools/package.json @@ -1,88 +1,189 @@ { "name": "@shellicar/claude-sdk-tools", - "version": "1.0.0-alpha.1", + "version": "1.0.0-beta.1", "files": [ "dist" ], "type": "module", "exports": { "./EditFile": { - "import": "./dist/entry/EditFile.js", - "types": "./src/entry/EditFile.ts" + "import": { + "types": "./dist/esm/EditFile.d.ts", + "default": "./dist/esm/EditFile.js" + }, + "require": { + "types": "./dist/cjs/EditFile.d.cts", + "default": "./dist/cjs/EditFile.cjs" + } }, "./PreviewEdit": { - "import": "./dist/entry/PreviewEdit.js", - "types": "./src/entry/PreviewEdit.ts" + "import": { + "types": "./dist/esm/PreviewEdit.d.ts", + "default": "./dist/esm/PreviewEdit.js" + }, + "require": { + "types": "./dist/cjs/PreviewEdit.d.cts", + "default": "./dist/cjs/PreviewEdit.cjs" + } }, "./ReadFile": { - "import": "./dist/entry/ReadFile.js", - "types": "./src/entry/ReadFile.ts" + "import": { + "types": "./dist/esm/ReadFile.d.ts", + "default": "./dist/esm/ReadFile.js" + }, + "require": { + "types": "./dist/cjs/ReadFile.d.cts", + "default": "./dist/cjs/ReadFile.cjs" + } }, "./CreateFile": { - "import": "./dist/entry/CreateFile.js", - "types": "./src/entry/CreateFile.ts" + "import": { + "types": "./dist/esm/CreateFile.d.ts", + "default": "./dist/esm/CreateFile.js" + }, + "require": { + "types": "./dist/cjs/CreateFile.d.cts", + "default": "./dist/cjs/CreateFile.cjs" + } }, "./Find": { - "import": "./dist/entry/Find.js", - "types": "./src/entry/Find.ts" + "import": { + "types": "./dist/esm/Find.d.ts", + "default": "./dist/esm/Find.js" + }, + "require": { + "types": "./dist/cjs/Find.d.cts", + "default": "./dist/cjs/Find.cjs" + } }, "./Grep": { - "import": "./dist/entry/Grep.js", - "types": "./src/entry/Grep.ts" + "import": { + "types": "./dist/esm/Grep.d.ts", + "default": "./dist/esm/Grep.js" + }, + "require": { + "types": "./dist/cjs/Grep.d.cts", + "default": "./dist/cjs/Grep.cjs" + } }, "./Head": { - "import": "./dist/entry/Head.js", - "types": "./src/entry/Head.ts" + "import": { + "types": "./dist/esm/Head.d.ts", + "default": "./dist/esm/Head.js" + }, + "require": { + "types": "./dist/cjs/Head.d.cts", + "default": "./dist/cjs/Head.cjs" + } }, "./Tail": { - "import": "./dist/entry/Tail.js", - "types": "./src/entry/Tail.ts" + "import": { + "types": "./dist/esm/Tail.d.ts", + "default": "./dist/esm/Tail.js" + }, + "require": { + "types": "./dist/cjs/Tail.d.cts", + "default": "./dist/cjs/Tail.cjs" + } }, "./Range": { - "import": "./dist/entry/Range.js", - "types": "./src/entry/Range.ts" + "import": { + "types": "./dist/esm/Range.d.ts", + "default": "./dist/esm/Range.js" + }, + "require": { + "types": "./dist/cjs/Range.d.cts", + "default": "./dist/cjs/Range.cjs" + } }, "./DeleteFile": { - "import": "./dist/entry/DeleteFile.js", - "types": "./src/entry/DeleteFile.ts" + "import": { + "types": "./dist/esm/DeleteFile.d.ts", + "default": "./dist/esm/DeleteFile.js" + }, + "require": { + "types": "./dist/cjs/DeleteFile.d.cts", + "default": "./dist/cjs/DeleteFile.cjs" + } }, "./DeleteDirectory": { - "import": "./dist/entry/DeleteDirectory.js", - "types": "./src/entry/DeleteDirectory.ts" + "import": { + "types": "./dist/esm/DeleteDirectory.d.ts", + "default": "./dist/esm/DeleteDirectory.js" + }, + "require": { + "types": "./dist/cjs/DeleteDirectory.d.cts", + "default": "./dist/cjs/DeleteDirectory.cjs" + } }, "./Pipe": { - "import": "./dist/entry/Pipe.js", - "types": "./src/entry/Pipe.ts" + "import": { + "types": "./dist/esm/Pipe.d.ts", + "default": "./dist/esm/Pipe.js" + }, + "require": { + "types": "./dist/cjs/Pipe.d.cts", + "default": "./dist/cjs/Pipe.cjs" + } }, "./SearchFiles": { - "import": "./dist/entry/SearchFiles.js", - "types": "./src/entry/SearchFiles.ts" + "import": { + "types": "./dist/esm/SearchFiles.d.ts", + "default": "./dist/esm/SearchFiles.js" + }, + "require": { + "types": "./dist/cjs/SearchFiles.d.cts", + "default": "./dist/cjs/SearchFiles.cjs" + } }, "./Exec": { - "import": "./dist/entry/Exec.js", - "types": "./src/entry/Exec.ts" + "import": { + "types": "./dist/esm/Exec.d.ts", + "default": "./dist/esm/Exec.js" + }, + "require": { + "types": "./dist/cjs/Exec.d.cts", + "default": "./dist/cjs/Exec.cjs" + } }, "./Ref": { - "import": "./dist/entry/Ref.js", - "types": "./src/entry/Ref.ts" + "import": { + "types": "./dist/esm/Ref.d.ts", + "default": "./dist/esm/Ref.js" + }, + "require": { + "types": "./dist/cjs/Ref.d.cts", + "default": "./dist/cjs/Ref.cjs" + } }, "./RefStore": { - "import": "./dist/entry/RefStore.js", - "types": "./src/entry/RefStore.ts" + "import": { + "types": "./dist/esm/RefStore.d.ts", + "default": "./dist/esm/RefStore.js" + }, + "require": { + "types": "./dist/cjs/RefStore.d.cts", + "default": "./dist/cjs/RefStore.cjs" + } }, "./fs": { - "import": "./dist/entry/fs.js", - "types": "./src/entry/fs.ts" + "import": { + "types": "./dist/esm/fs.d.ts", + "default": "./dist/esm/fs.js" + }, + "require": { + "types": "./dist/cjs/fs.d.cts", + "default": "./dist/cjs/fs.cjs" + } } }, "scripts": { - "dev": "tsx build.ts --watch", - "build": "tsx build.ts", - "build:watch": "tsx build.ts --watch", + "build": "tsup", + "dev": "tsup --watch", + "watch": "tsup --watch", "start": "node dist/main.js", "test": "vitest run", - "type-check": "tsc -p tsconfig.check.json", - "watch": "tsx build.ts --watch" + "type-check": "tsc -p tsconfig.check.json" }, "dependencies": { "@anthropic-ai/sdk": "^0.82.0", @@ -98,8 +199,9 @@ "@tsconfig/node24": "^24.0.4", "@types/node": "^25.5.2", "esbuild": "^0.27.5", + "tsup": "^8.5.1", "tsx": "^4.21.0", - "typescript": "^6.0.2", + "typescript": "^5.9.3", "vitest": "^4.1.2" } } diff --git a/packages/claude-sdk-tools/tsconfig.check.json b/packages/claude-sdk-tools/tsconfig.check.json deleted file mode 100644 index bfed23d..0000000 --- a/packages/claude-sdk-tools/tsconfig.check.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true, - "composite": false, - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - } -} diff --git a/packages/claude-sdk-tools/tsconfig.check.json b/packages/claude-sdk-tools/tsconfig.check.json new file mode 120000 index 0000000..0a31537 --- /dev/null +++ b/packages/claude-sdk-tools/tsconfig.check.json @@ -0,0 +1 @@ +../../tsconfig.check.json \ No newline at end of file diff --git a/packages/claude-sdk-tools/tsconfig.json b/packages/claude-sdk-tools/tsconfig.json index f41a1dc..3b5798d 100644 --- a/packages/claude-sdk-tools/tsconfig.json +++ b/packages/claude-sdk-tools/tsconfig.json @@ -4,5 +4,6 @@ "outDir": "dist", "rootDir": "." }, - "include": ["**/*.ts"] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/claude-sdk-tools/tsup.config.ts b/packages/claude-sdk-tools/tsup.config.ts new file mode 100644 index 0000000..f83d0ee --- /dev/null +++ b/packages/claude-sdk-tools/tsup.config.ts @@ -0,0 +1,39 @@ +import versionPlugin from '@shellicar/build-version/esbuild'; +import { defineConfig, type Options } from 'tsup'; + +const esbuildPlugins = [versionPlugin({ versionCalculator: 'gitversion' })]; + +const commonOptions = (config: Options) => ({ + bundle: true, + clean: true, + dts: true, + entry: ['src/entry/*.ts'], + esbuildPlugins, + esbuildOptions: (options) => { + options.chunkNames = 'chunks/[name]-[hash]'; + options.entryNames = '[name]'; + }, + keepNames: true, + minify: false, + removeNodeProtocol: false, + platform: 'node', + sourcemap: true, + splitting: true, + target: 'node24', + treeshake: false, + watch: config.watch, + tsconfig: 'tsconfig.json', +}) satisfies Options; + +export default defineConfig((config) => [ + { + ...commonOptions(config), + format: 'esm', + outDir: 'dist/esm', + }, + { + ...commonOptions(config), + format: 'cjs', + outDir: 'dist/cjs', + }, +]); diff --git a/packages/claude-sdk/build.ts b/packages/claude-sdk/build.ts deleted file mode 100644 index a102b19..0000000 --- a/packages/claude-sdk/build.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { glob } from 'node:fs/promises'; -import cleanPlugin from '@shellicar/build-clean/esbuild'; -import versionPlugin from '@shellicar/build-version/esbuild'; -import * as esbuild from 'esbuild'; - -const watch = process.argv.some((x) => x === '--watch'); -const _minify = !watch; - -const plugins = [cleanPlugin({ destructive: true }), versionPlugin({ versionCalculator: 'gitversion' })]; - -const inject = await Array.fromAsync(glob('./inject/*.ts')); - -const ctx = await esbuild.context({ - bundle: true, - entryPoints: ['src/index.ts'], - inject, - entryNames: '[name]', - keepNames: true, - format: 'esm', - minify: false, - outdir: 'dist', - platform: 'node', - plugins, - sourcemap: true, - external: ['@anthropic-ai/sdk'], - target: 'node24', - treeShaking: false, - tsconfig: 'tsconfig.json', -}); - -if (watch) { - await ctx.watch(); - console.log('watching...'); -} else { - await ctx.rebuild(); - ctx.dispose(); -} diff --git a/packages/claude-sdk/package.json b/packages/claude-sdk/package.json index 08f72c4..d41e57d 100644 --- a/packages/claude-sdk/package.json +++ b/packages/claude-sdk/package.json @@ -1,24 +1,29 @@ { "name": "@shellicar/claude-sdk", - "version": "0.0.0", + "version": "1.0.0-beta.1", "files": [ "dist" ], "type": "module", "exports": { ".": { - "import": "./dist/index.js", - "types": "./src/index.ts" + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "types": "./dist/cjs/index.d.cts", + "default": "./dist/cjs/index.cjs" + } } }, "scripts": { - "dev": "tsx build.ts --watch", - "build": "tsx build.ts", - "build:watch": "tsx build.ts --watch", + "build": "tsup", + "dev": "tsup --watch", + "watch": "tsup --watch", "start": "node dist/main.js", "test": "vitest run", - "type-check": "tsc -p tsconfig.check.json", - "watch": "tsx build.ts --watch" + "type-check": "tsc -p tsconfig.check.json" }, "dependencies": { "@anthropic-ai/sdk": "^0.82.0", @@ -31,8 +36,9 @@ "@tsconfig/node24": "^24.0.4", "@types/node": "^25.5.2", "esbuild": "^0.27.5", + "tsup": "^8.5.1", "tsx": "^4.21.0", - "typescript": "^6.0.2", + "typescript": "^5.9.3", "vitest": "^4.1.2" } } diff --git a/packages/claude-sdk/tsconfig.check.json b/packages/claude-sdk/tsconfig.check.json deleted file mode 100644 index bfed23d..0000000 --- a/packages/claude-sdk/tsconfig.check.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true, - "skipLibCheck": true, - "composite": false, - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" - } -} diff --git a/packages/claude-sdk/tsconfig.check.json b/packages/claude-sdk/tsconfig.check.json new file mode 120000 index 0000000..0a31537 --- /dev/null +++ b/packages/claude-sdk/tsconfig.check.json @@ -0,0 +1 @@ +../../tsconfig.check.json \ No newline at end of file diff --git a/packages/claude-sdk/tsconfig.json b/packages/claude-sdk/tsconfig.json index f41a1dc..3b5798d 100644 --- a/packages/claude-sdk/tsconfig.json +++ b/packages/claude-sdk/tsconfig.json @@ -4,5 +4,6 @@ "outDir": "dist", "rootDir": "." }, - "include": ["**/*.ts"] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/claude-sdk/tsup.config.ts b/packages/claude-sdk/tsup.config.ts new file mode 100644 index 0000000..3b052c4 --- /dev/null +++ b/packages/claude-sdk/tsup.config.ts @@ -0,0 +1,39 @@ +import versionPlugin from '@shellicar/build-version/esbuild'; +import { defineConfig, type Options } from 'tsup'; + +const esbuildPlugins = [versionPlugin({ versionCalculator: 'gitversion' })]; + +const commonOptions = (config: Options) => ({ + bundle: true, + clean: true, + dts: true, + entry: ['src/*.ts'], + esbuildPlugins, + esbuildOptions: (options) => { + options.chunkNames = 'chunks/[name]-[hash]'; + options.entryNames = '[name]'; + }, + keepNames: true, + minify: false, + removeNodeProtocol: false, + platform: 'node', + sourcemap: true, + splitting: true, + target: 'node24', + treeshake: false, + watch: config.watch, + tsconfig: 'tsconfig.json', +}) satisfies Options; + +export default defineConfig((config) => [ + { + ...commonOptions(config), + format: 'esm', + outDir: 'dist/esm', + }, + { + ...commonOptions(config), + format: 'cjs', + outDir: 'dist/cjs', + }, +]); diff --git a/packages/typescript-config/base.json b/packages/typescript-config/base.json index d60ec70..ce88ab8 100644 --- a/packages/typescript-config/base.json +++ b/packages/typescript-config/base.json @@ -8,6 +8,5 @@ "verbatimModuleSyntax": true, "isolatedModules": true, "resolveJsonModule": true - }, - "exclude": ["dist", "node_modules"] + } } diff --git a/packages/typescript-config/package.json b/packages/typescript-config/package.json index be1177c..0de6deb 100644 --- a/packages/typescript-config/package.json +++ b/packages/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@shellicar/typescript-config", - "version": "0.0.0", + "version": "1.0.0-beta.1", "private": true, "exports": { "./base.json": "./base.json" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44469c1..d1e928b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,7 +26,7 @@ importers: version: 2.4.10 '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))) knip: specifier: ^5.88.1 version: 5.88.1(@types/node@25.5.2)(typescript@6.0.2) @@ -44,16 +44,22 @@ importers: version: 2.9.4 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) apps/claude-cli: dependencies: '@anthropic-ai/claude-agent-sdk': specifier: ^0.2.92 version: 0.2.92(zod@4.3.6) + '@anthropic-ai/sdk': + specifier: ^0.82.0 + version: 0.82.0(zod@4.3.6) '@js-joda/core': specifier: ^5.7.0 version: 5.7.0 + '@modelcontextprotocol/sdk': + specifier: ^1.29.0 + version: 1.29.0(zod@4.3.6) '@shellicar/claude-core': specifier: workspace:* version: link:../../packages/claude-core @@ -70,18 +76,12 @@ importers: specifier: ^4.3.6 version: 4.3.6 devDependencies: - '@anthropic-ai/sdk': - specifier: ^0.82.0 - version: 0.82.0(zod@4.3.6) - '@modelcontextprotocol/sdk': - specifier: ^1.29.0 - version: 1.29.0(zod@4.3.6) '@shellicar/build-clean': specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/build-version': specifier: ^1.3.6 - version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/typescript-config': specifier: workspace:* version: link:../../packages/typescript-config @@ -93,7 +93,7 @@ importers: version: 25.5.2 '@vitest/coverage-v8': specifier: ^4.1.2 - version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))) esbuild: specifier: ^0.27.5 version: 0.27.5 @@ -105,20 +105,13 @@ importers: version: 5.9.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) apps/claude-sdk-cli: dependencies: '@anthropic-ai/sdk': specifier: ^0.82.0 version: 0.82.0(zod@4.3.6) - devDependencies: - '@shellicar/build-clean': - specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) - '@shellicar/build-version': - specifier: ^1.3.6 - version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/claude-core': specifier: workspace:^ version: link:../../packages/claude-core @@ -128,6 +121,22 @@ importers: '@shellicar/claude-sdk-tools': specifier: workspace:^ version: link:../../packages/claude-sdk-tools + cli-highlight: + specifier: ^2.1.11 + version: 2.1.11 + winston: + specifier: ^3.19.0 + version: 3.19.0 + zod: + specifier: ^4.3.6 + version: 4.3.6 + devDependencies: + '@shellicar/build-clean': + specifier: ^1.3.2 + version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@shellicar/build-version': + specifier: ^1.3.6 + version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/typescript-config': specifier: workspace:* version: link:../../packages/typescript-config @@ -137,9 +146,6 @@ importers: '@types/node': specifier: ^25.5.2 version: 25.5.2 - cli-highlight: - specifier: ^2.1.11 - version: 2.1.11 esbuild: specifier: ^0.27.5 version: 0.27.5 @@ -148,13 +154,7 @@ importers: version: 4.21.0 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) - winston: - specifier: ^3.19.0 - version: 3.19.0 - zod: - specifier: ^4.3.6 - version: 4.3.6 + version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) packages/claude-core: dependencies: @@ -167,10 +167,10 @@ importers: devDependencies: '@shellicar/build-clean': specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/build-version': specifier: ^1.3.6 - version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/typescript-config': specifier: workspace:* version: link:../typescript-config @@ -180,15 +180,15 @@ importers: '@types/node': specifier: ^25.5.2 version: 25.5.2 - esbuild: - specifier: ^0.27.5 - version: 0.27.5 + tsup: + specifier: ^8.5.1 + version: 8.5.1(jiti@2.6.1)(postcss@8.5.9)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) tsx: specifier: ^4.21.0 version: 4.21.0 typescript: - specifier: ^6.0.2 - version: 6.0.2 + specifier: ^5.9.3 + version: 5.9.3 packages/claude-sdk: dependencies: @@ -201,10 +201,10 @@ importers: devDependencies: '@shellicar/build-clean': specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/build-version': specifier: ^1.3.6 - version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/typescript-config': specifier: workspace:* version: link:../typescript-config @@ -217,15 +217,18 @@ importers: esbuild: specifier: ^0.27.5 version: 0.27.5 + tsup: + specifier: ^8.5.1 + version: 8.5.1(jiti@2.6.1)(postcss@8.5.9)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) tsx: specifier: ^4.21.0 version: 4.21.0 typescript: - specifier: ^6.0.2 - version: 6.0.2 + specifier: ^5.9.3 + version: 5.9.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) packages/claude-sdk-tools: dependencies: @@ -244,10 +247,10 @@ importers: devDependencies: '@shellicar/build-clean': specifier: ^1.3.2 - version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/build-version': specifier: ^1.3.6 - version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.3.6(esbuild@0.27.5)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@shellicar/claude-sdk': specifier: workspace:^ version: link:../claude-sdk @@ -263,15 +266,18 @@ importers: esbuild: specifier: ^0.27.5 version: 0.27.5 + tsup: + specifier: ^8.5.1 + version: 8.5.1(jiti@2.6.1)(postcss@8.5.9)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3) tsx: specifier: ^4.21.0 version: 4.21.0 typescript: - specifier: ^6.0.2 - version: 6.0.2 + specifier: ^5.9.3 + version: 5.9.3 vitest: specifier: ^4.1.2 - version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) packages/typescript-config: devDependencies: @@ -744,6 +750,12 @@ packages: '@napi-rs/wasm-runtime@1.1.1': resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@napi-rs/wasm-runtime@1.1.3': + resolution: {integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -965,6 +977,144 @@ packages: '@rolldown/pluginutils@1.0.0-rc.12': resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rollup/rollup-android-arm-eabi@4.60.1': + resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.60.1': + resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.60.1': + resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.60.1': + resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.60.1': + resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.60.1': + resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.60.1': + resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.60.1': + resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.60.1': + resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.60.1': + resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.60.1': + resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.60.1': + resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.60.1': + resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.60.1': + resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.60.1': + resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.60.1': + resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.60.1': + resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.60.1': + resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.60.1': + resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.1': + resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.1': + resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.60.1': + resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.60.1': + resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.60.1': + resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==} + cpu: [x64] + os: [win32] + '@shellicar/build-clean@1.3.2': resolution: {integrity: sha512-B9AIjOCGT14lxJCdr+4KGAZ8v1aYRoP6cFoGv/Q95N6SnOu/ssz4xtHIxoktdIDAHe4iAHNq0dWyfth6xweiKA==} peerDependencies: @@ -1179,10 +1329,20 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.18' + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1199,6 +1359,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + cli-highlight@2.1.11: resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} engines: {node: '>=8.0.0', npm: '>=5.0.0'} @@ -1230,6 +1394,17 @@ packages: resolution: {integrity: sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==} engines: {node: '>=18'} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + content-disposition@1.0.1: resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} engines: {node: '>=18'} @@ -1391,6 +1566,9 @@ packages: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -1531,6 +1709,10 @@ packages: jose@6.2.2: resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -1683,6 +1865,17 @@ packages: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + logform@2.7.0: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} @@ -1728,6 +1921,9 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1802,12 +1998,37 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: '>=2.8.3' + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss@8.5.9: + resolution: {integrity: sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==} engines: {node: ^10 || ^12 || >=14} proxy-addr@2.0.7: @@ -1833,6 +2054,10 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -1841,6 +2066,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -1853,6 +2082,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rollup@4.60.1: + resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -1925,6 +2159,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -1965,6 +2203,11 @@ packages: resolution: {integrity: sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==} engines: {node: '>=18'} + sucrase@3.35.1: + resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2027,6 +2270,9 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.4: resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} @@ -2035,6 +2281,10 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.16: + resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} + engines: {node: '>=12.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -2051,6 +2301,10 @@ packages: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} @@ -2058,9 +2312,31 @@ packages: ts-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsup@8.5.1: + resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + tsx@4.21.0: resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} @@ -2084,6 +2360,9 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.6.3: + resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==} + uint8array-extras@1.5.0: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} @@ -2578,6 +2857,13 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true + '@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': + dependencies: + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -2690,9 +2976,12 @@ snapshots: '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)': dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@napi-rs/wasm-runtime': 1.1.3(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': @@ -2703,20 +2992,95 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.12': {} - '@shellicar/build-clean@1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@rollup/rollup-android-arm-eabi@4.60.1': + optional: true + + '@rollup/rollup-android-arm64@4.60.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.60.1': + optional: true + + '@rollup/rollup-darwin-x64@4.60.1': + optional: true + + '@rollup/rollup-freebsd-arm64@4.60.1': + optional: true + + '@rollup/rollup-freebsd-x64@4.60.1': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.60.1': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.60.1': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.60.1': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.60.1': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.60.1': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.60.1': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.60.1': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.1': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.1': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.1': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.1': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.1': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.1': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.1': + optional: true + + '@shellicar/build-clean@1.3.2(esbuild@0.27.5)(rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.5 - rolldown: 1.0.0-rc.12 - vite: 8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) - '@shellicar/build-version@1.3.6(esbuild@0.27.5)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@shellicar/build-version@1.3.6(esbuild@0.27.5)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: unplugin: 2.3.11 optionalDependencies: esbuild: 0.27.5 - vite: 8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) '@shellicar/mcp-exec@1.0.0-preview.6': dependencies: @@ -2782,7 +3146,7 @@ snapshots: '@types/triple-beam@1.3.5': {} - '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.2 @@ -2794,7 +3158,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@4.1.2': dependencies: @@ -2805,13 +3169,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.2(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.2(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@4.1.2': dependencies: @@ -2893,8 +3257,15 @@ snapshots: dependencies: fill-range: 7.1.1 + bundle-require@5.1.0(esbuild@0.27.5): + dependencies: + esbuild: 0.27.5 + load-tsconfig: 0.2.5 + bytes@3.1.2: {} + cac@6.7.14: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -2912,6 +3283,10 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + cli-highlight@2.1.11: dependencies: chalk: 4.1.2 @@ -2948,6 +3323,12 @@ snapshots: color-convert: 3.1.3 color-string: 2.1.4 + commander@4.1.1: {} + + confbox@0.1.8: {} + + consola@3.4.2: {} + content-disposition@1.0.1: {} content-type@1.0.5: {} @@ -3138,6 +3519,12 @@ snapshots: transitivePeerDependencies: - supports-color + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.21 + mlly: 1.8.2 + rollup: 4.60.1 + fn.name@1.1.0: {} formatly@0.3.0: @@ -3252,6 +3639,8 @@ snapshots: jose@6.2.2: {} + joycon@3.1.1: {} + js-tokens@10.0.0: {} json-schema-to-ts@3.1.1: @@ -3375,6 +3764,12 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + load-tsconfig@0.2.5: {} + logform@2.7.0: dependencies: '@colors/colors': 1.6.0 @@ -3419,6 +3814,13 @@ snapshots: minimist@1.2.8: {} + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.3 + ms@2.1.3: {} mz@2.7.0: @@ -3494,9 +3896,26 @@ snapshots: picomatch@4.0.4: {} + pirates@4.0.7: {} + pkce-challenge@5.0.1: {} - postcss@8.5.8: + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.9)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.6.1 + postcss: 8.5.9 + tsx: 4.21.0 + yaml: 2.8.3 + + postcss@8.5.9: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -3528,15 +3947,19 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readdirp@4.1.2: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} + resolve-from@5.0.0: {} + resolve-pkg-maps@1.0.0: {} reusify@1.1.0: {} - rolldown@1.0.0-rc.12: + rolldown@1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1): dependencies: '@oxc-project/types': 0.122.0 '@rolldown/pluginutils': 1.0.0-rc.12 @@ -3553,9 +3976,43 @@ snapshots: '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + + rollup@4.60.1: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.1 + '@rollup/rollup-android-arm64': 4.60.1 + '@rollup/rollup-darwin-arm64': 4.60.1 + '@rollup/rollup-darwin-x64': 4.60.1 + '@rollup/rollup-freebsd-arm64': 4.60.1 + '@rollup/rollup-freebsd-x64': 4.60.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.1 + '@rollup/rollup-linux-arm-musleabihf': 4.60.1 + '@rollup/rollup-linux-arm64-gnu': 4.60.1 + '@rollup/rollup-linux-arm64-musl': 4.60.1 + '@rollup/rollup-linux-loong64-gnu': 4.60.1 + '@rollup/rollup-linux-loong64-musl': 4.60.1 + '@rollup/rollup-linux-ppc64-gnu': 4.60.1 + '@rollup/rollup-linux-ppc64-musl': 4.60.1 + '@rollup/rollup-linux-riscv64-gnu': 4.60.1 + '@rollup/rollup-linux-riscv64-musl': 4.60.1 + '@rollup/rollup-linux-s390x-gnu': 4.60.1 + '@rollup/rollup-linux-x64-gnu': 4.60.1 + '@rollup/rollup-linux-x64-musl': 4.60.1 + '@rollup/rollup-openbsd-x64': 4.60.1 + '@rollup/rollup-openharmony-arm64': 4.60.1 + '@rollup/rollup-win32-arm64-msvc': 4.60.1 + '@rollup/rollup-win32-ia32-msvc': 4.60.1 + '@rollup/rollup-win32-x64-gnu': 4.60.1 + '@rollup/rollup-win32-x64-msvc': 4.60.1 + fsevents: 2.3.3 router@2.2.0: dependencies: @@ -3677,6 +4134,8 @@ snapshots: source-map-js@1.2.1: {} + source-map@0.7.6: {} + stack-trace@0.0.10: {} stackback@0.0.2: {} @@ -3714,6 +4173,16 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 + sucrase@3.35.1: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.15 + ts-interface-checker: 0.1.13 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -3765,6 +4234,8 @@ snapshots: tinybench@2.9.0: {} + tinyexec@0.3.2: {} + tinyexec@1.0.4: {} tinyglobby@0.2.15: @@ -3772,6 +4243,11 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + tinyrainbow@3.1.0: {} to-regex-range@5.0.1: @@ -3786,13 +4262,45 @@ snapshots: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 + tree-kill@1.2.2: {} + triple-beam@1.4.1: {} ts-algebra@2.0.0: {} + ts-interface-checker@0.1.13: {} + tslib@2.8.1: optional: true + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.9)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.3): + dependencies: + bundle-require: 5.1.0(esbuild@0.27.5) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.3 + esbuild: 0.27.5 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.9)(tsx@4.21.0)(yaml@2.8.3) + resolve-from: 5.0.0 + rollup: 4.60.1 + source-map: 0.7.6 + sucrase: 3.35.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.9 + typescript: 5.9.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + tsx@4.21.0: dependencies: esbuild: 0.27.5 @@ -3819,6 +4327,8 @@ snapshots: typescript@6.0.2: {} + ufo@1.6.3: {} + uint8array-extras@1.5.0: {} unbash@2.2.0: {} @@ -3838,13 +4348,13 @@ snapshots: vary@1.1.2: {} - vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3): + vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 - postcss: 8.5.8 - rolldown: 1.0.0-rc.12 - tinyglobby: 0.2.15 + postcss: 8.5.9 + rolldown: 1.0.0-rc.12(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + tinyglobby: 0.2.16 optionalDependencies: '@types/node': 25.5.2 esbuild: 0.27.5 @@ -3852,11 +4362,14 @@ snapshots: jiti: 2.6.1 tsx: 4.21.0 yaml: 2.8.3 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' - vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.2(@types/node@25.5.2)(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(vite@8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.2(vite@8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.2 '@vitest/runner': 4.1.2 '@vitest/snapshot': 4.1.2 @@ -3873,7 +4386,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 8.0.5(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.5(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@types/node@25.5.2)(esbuild@0.27.5)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.5.2 diff --git a/tsconfig.check.json b/tsconfig.check.json new file mode 100644 index 0000000..62ef358 --- /dev/null +++ b/tsconfig.check.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true, + "composite": false, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + }, + "include": ["**/*.ts"], + "exclude": ["dist", "node_modules"] +} diff --git a/turbo.json b/turbo.json index 1ae7593..eeb3604 100644 --- a/turbo.json +++ b/turbo.json @@ -1,11 +1,11 @@ { - "$schema": "https://turbo.build/schema.json", + "$schema": "node_modules/turbo/schema.json", "ui": "stream", "daemon": false, "tasks": { "build": { "dependsOn": ["^build"], - "inputs": ["tsconfig.json", "**/*.ts"], + "inputs": ["tsconfig.json", "src/**/*.ts", "build.ts", "tsup.config.ts"], "outputs": ["dist"] }, "dev": { From aef0c5c3c58e09ca6f226892ce66c7aabd42f33e Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Thu, 9 Apr 2026 17:12:40 +1000 Subject: [PATCH 2/8] Fix biome CI errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Format fixes in the three tsup.config.ts files (arrow function body style), indentation in claude-sdk-tools package.json exports, trailing newline in claude-sdk-cli package.json, import sort order in runAgent.ts. Remove unused CacheTtl import from AgentRun.ts and reformat a ternary in MessageStream.ts — both left over from the cache TTL refactor that came in via rebase. --- apps/claude-sdk-cli/package.json | 2 +- apps/claude-sdk-cli/src/runAgent.ts | 1 + packages/claude-core/tsup.config.ts | 43 +++++++++++---------- packages/claude-sdk-tools/package.json | 4 +- packages/claude-sdk-tools/tsup.config.ts | 43 +++++++++++---------- packages/claude-sdk/src/private/AgentRun.ts | 1 - packages/claude-sdk/tsup.config.ts | 43 +++++++++++---------- 7 files changed, 70 insertions(+), 67 deletions(-) diff --git a/apps/claude-sdk-cli/package.json b/apps/claude-sdk-cli/package.json index e538ef3..5698566 100644 --- a/apps/claude-sdk-cli/package.json +++ b/apps/claude-sdk-cli/package.json @@ -54,4 +54,4 @@ "winston": "^3.19.0", "zod": "^4.3.6" } -} \ No newline at end of file +} diff --git a/apps/claude-sdk-cli/src/runAgent.ts b/apps/claude-sdk-cli/src/runAgent.ts index af457a3..8af51be 100644 --- a/apps/claude-sdk-cli/src/runAgent.ts +++ b/apps/claude-sdk-cli/src/runAgent.ts @@ -17,6 +17,7 @@ import { SearchFiles } from '@shellicar/claude-sdk-tools/SearchFiles'; import { Tail } from '@shellicar/claude-sdk-tools/Tail'; import { AgentMessageHandler } from './AgentMessageHandler.js'; import type { AppLayout } from './AppLayout.js'; +import { writeAuditEvent } from './AuditWriter.js'; import { logger } from './logger.js'; import { systemPrompts } from './systemPrompts.js'; diff --git a/packages/claude-core/tsup.config.ts b/packages/claude-core/tsup.config.ts index 3b052c4..87fe03e 100644 --- a/packages/claude-core/tsup.config.ts +++ b/packages/claude-core/tsup.config.ts @@ -3,27 +3,28 @@ import { defineConfig, type Options } from 'tsup'; const esbuildPlugins = [versionPlugin({ versionCalculator: 'gitversion' })]; -const commonOptions = (config: Options) => ({ - bundle: true, - clean: true, - dts: true, - entry: ['src/*.ts'], - esbuildPlugins, - esbuildOptions: (options) => { - options.chunkNames = 'chunks/[name]-[hash]'; - options.entryNames = '[name]'; - }, - keepNames: true, - minify: false, - removeNodeProtocol: false, - platform: 'node', - sourcemap: true, - splitting: true, - target: 'node24', - treeshake: false, - watch: config.watch, - tsconfig: 'tsconfig.json', -}) satisfies Options; +const commonOptions = (config: Options) => + ({ + bundle: true, + clean: true, + dts: true, + entry: ['src/*.ts'], + esbuildPlugins, + esbuildOptions: (options) => { + options.chunkNames = 'chunks/[name]-[hash]'; + options.entryNames = '[name]'; + }, + keepNames: true, + minify: false, + removeNodeProtocol: false, + platform: 'node', + sourcemap: true, + splitting: true, + target: 'node24', + treeshake: false, + watch: config.watch, + tsconfig: 'tsconfig.json', + }) satisfies Options; export default defineConfig((config) => [ { diff --git a/packages/claude-sdk-tools/package.json b/packages/claude-sdk-tools/package.json index feffb02..5f81320 100644 --- a/packages/claude-sdk-tools/package.json +++ b/packages/claude-sdk-tools/package.json @@ -157,7 +157,7 @@ } }, "./RefStore": { - "import": { + "import": { "types": "./dist/esm/RefStore.d.ts", "default": "./dist/esm/RefStore.js" }, @@ -167,7 +167,7 @@ } }, "./fs": { - "import": { + "import": { "types": "./dist/esm/fs.d.ts", "default": "./dist/esm/fs.js" }, diff --git a/packages/claude-sdk-tools/tsup.config.ts b/packages/claude-sdk-tools/tsup.config.ts index f83d0ee..f9efeef 100644 --- a/packages/claude-sdk-tools/tsup.config.ts +++ b/packages/claude-sdk-tools/tsup.config.ts @@ -3,27 +3,28 @@ import { defineConfig, type Options } from 'tsup'; const esbuildPlugins = [versionPlugin({ versionCalculator: 'gitversion' })]; -const commonOptions = (config: Options) => ({ - bundle: true, - clean: true, - dts: true, - entry: ['src/entry/*.ts'], - esbuildPlugins, - esbuildOptions: (options) => { - options.chunkNames = 'chunks/[name]-[hash]'; - options.entryNames = '[name]'; - }, - keepNames: true, - minify: false, - removeNodeProtocol: false, - platform: 'node', - sourcemap: true, - splitting: true, - target: 'node24', - treeshake: false, - watch: config.watch, - tsconfig: 'tsconfig.json', -}) satisfies Options; +const commonOptions = (config: Options) => + ({ + bundle: true, + clean: true, + dts: true, + entry: ['src/entry/*.ts'], + esbuildPlugins, + esbuildOptions: (options) => { + options.chunkNames = 'chunks/[name]-[hash]'; + options.entryNames = '[name]'; + }, + keepNames: true, + minify: false, + removeNodeProtocol: false, + platform: 'node', + sourcemap: true, + splitting: true, + target: 'node24', + treeshake: false, + watch: config.watch, + tsconfig: 'tsconfig.json', + }) satisfies Options; export default defineConfig((config) => [ { diff --git a/packages/claude-sdk/src/private/AgentRun.ts b/packages/claude-sdk/src/private/AgentRun.ts index 60ba846..a91e0ed 100644 --- a/packages/claude-sdk/src/private/AgentRun.ts +++ b/packages/claude-sdk/src/private/AgentRun.ts @@ -2,7 +2,6 @@ import { randomUUID } from 'node:crypto'; import type { MessagePort } from 'node:worker_threads'; import type { Anthropic } from '@anthropic-ai/sdk'; import type { BetaCompactionBlockParam, BetaTextBlockParam, BetaThinkingBlockParam, BetaToolUseBlockParam } from '@anthropic-ai/sdk/resources/beta.mjs'; -import { CacheTtl } from '../public/enums'; import type { AnyToolDefinition, ILogger, RunAgentQuery, SdkMessage } from '../public/types'; import type { IAgentChannel, IAgentChannelFactory } from './AgentChannel'; import { ApprovalState } from './ApprovalState'; diff --git a/packages/claude-sdk/tsup.config.ts b/packages/claude-sdk/tsup.config.ts index 3b052c4..87fe03e 100644 --- a/packages/claude-sdk/tsup.config.ts +++ b/packages/claude-sdk/tsup.config.ts @@ -3,27 +3,28 @@ import { defineConfig, type Options } from 'tsup'; const esbuildPlugins = [versionPlugin({ versionCalculator: 'gitversion' })]; -const commonOptions = (config: Options) => ({ - bundle: true, - clean: true, - dts: true, - entry: ['src/*.ts'], - esbuildPlugins, - esbuildOptions: (options) => { - options.chunkNames = 'chunks/[name]-[hash]'; - options.entryNames = '[name]'; - }, - keepNames: true, - minify: false, - removeNodeProtocol: false, - platform: 'node', - sourcemap: true, - splitting: true, - target: 'node24', - treeshake: false, - watch: config.watch, - tsconfig: 'tsconfig.json', -}) satisfies Options; +const commonOptions = (config: Options) => + ({ + bundle: true, + clean: true, + dts: true, + entry: ['src/*.ts'], + esbuildPlugins, + esbuildOptions: (options) => { + options.chunkNames = 'chunks/[name]-[hash]'; + options.entryNames = '[name]'; + }, + keepNames: true, + minify: false, + removeNodeProtocol: false, + platform: 'node', + sourcemap: true, + splitting: true, + target: 'node24', + treeshake: false, + watch: config.watch, + tsconfig: 'tsconfig.json', + }) satisfies Options; export default defineConfig((config) => [ { From 76051ebd880c1659176ce333a25b3d11c7d5e988 Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Thu, 9 Apr 2026 17:15:48 +1000 Subject: [PATCH 3/8] Session log and harness update for packaging tsup migration Session 3 appended to 2026-04-09.md covering the build verification, post-rebase check, biome CI fix approach, and PR #230. Current State updated: branch fix/packaging, PR #230 open, recent PRs #228/#229 added to the post-refactor list. --- .claude/CLAUDE.md | 8 +++-- .claude/sessions/2026-04-09.md | 58 ++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 00807f5..5d7d4b5 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -66,7 +66,7 @@ Every session has three phases: start, work, end. ## Current State -Branch: `main` — clean working tree. +Branch: `fix/packaging` — PR #230 open, auto-merge enabled. Active development is in **`apps/claude-sdk-cli/`** — a TUI terminal app built on `@shellicar/claude-sdk`. @@ -88,8 +88,12 @@ Three-layer State / Renderer / ScreenCoordinator (MVVM) model. All 13 steps ship - Config loading (`sdk-config.json`, Zod schema, `SdkConfigWatcher` hot reload) — PR #222 - Git state delta injection between turns (`GitStateMonitor`, `gitSnapshot`, `gitDelta`) — PR #225 - ANSI escape sequences no longer split at `wrapLine` boundaries — PR #223 +- `systemReminder` bug fix (was re-sent on every tool-result turn) — PR #228 +- CLAUDE.md files loaded as cached reminders (`ClaudeMdLoader`) — PR #229 -**No branch in progress.** Next unstarted items in backlog: CLAUDE.md loading (#226), plain-text tool output (#221), improved tool descriptions (#209). +**PR #230 in review:** Switch packages from custom `build.ts` scripts to tsup. ESM + CJS + DTS per package, correct exports maps, sourcemaps working (fixes debugger breakpoints). + +Next unstarted items in backlog: CLAUDE.md loading (#226), plain-text tool output (#221), improved tool descriptions (#209). diff --git a/.claude/sessions/2026-04-09.md b/.claude/sessions/2026-04-09.md index d44ef87..05c519d 100644 --- a/.claude/sessions/2026-04-09.md +++ b/.claude/sessions/2026-04-09.md @@ -126,3 +126,61 @@ claude-sdk, 426 in claude-sdk-cli, all passing. Wait for PRs #228 and #229 to be reviewed and merged. After merge, update `Current State` in the harness to reflect `main` branch and close the feature. Next unstarted backlog items: plain-text tool output (#221), improved tool descriptions (#209). + + +--- + +## Session 3 — Switch packages to tsup, PR #230 + +### Context + +Picked up mid-session from a previous context window. All staged changes for +`fix/packaging` were already in place but uncommitted. The summary covered the +full history of decisions (bundle mode, clean strategy, entryNames, entry glob +per package). + +### Build verified and committed + +Ran `pnpm --filter './packages/*' build`, type-check, and app builds — all +passed cleanly. Committed as `257c95b` "Switch packages from custom build +scripts to tsup". + +### Post-rebase check + +User merged PRs #228/#229 and rebased `fix/packaging` onto updated main. After +rebase, `src/entry/nodeFs.ts` had moved to `src/fs/nodeFs.ts`, a new +`src/entry/fs.ts` public entry was added, and `editFilePair.ts` had been +temporarily broken (exporting `createEditFilePair` instead of the instantiated +pair). User manually restored the correct state. Full build + type-check + +app builds all passed after the fix. + +### Biome CI failures on push + +Pre-push hook (lefthook → biome) blocked with 8 errors. Initial attempt used +`biome check --write .` on the whole repo — wrong approach because it applies +fixes at all severity levels (info/warning/error) across all 312 files, not +just the 36 in the diff. Reverted those changes on user's instruction. + +Correct approach: `pnpm run ci` (which runs `biome ci --diagnostic-level=error`) +to see exactly what blocks. Fixed only those 8 errors: + +- Three `tsup.config.ts` files: arrow function body style (`=> ({` → `=>\n ({`) +- `claude-sdk-tools/package.json`: 7-space indent → 6-space in `./RefStore` and `./fs` export entries +- `apps/claude-sdk-cli/package.json`: missing trailing newline +- `apps/claude-sdk-cli/src/runAgent.ts`: import sort order (AppLayout before AuditWriter) +- `packages/claude-sdk/src/private/AgentRun.ts`: remove unused `CacheTtl` import (left over from cache TTL refactor rebased in) +- `packages/claude-sdk/src/private/MessageStream.ts`: ternary formatting (also from the rebased refactor) + +Pushed cleanly. Pre-push hook passed: 36 files checked, 0 errors. + +### PR #230 opened + +https://github.com/shellicar/claude-cli/pull/230 — "Switch packages from +custom build scripts to tsup". Milestone `1.0`, reviewer `bananabot9000`, +assignee `shellicar`, label `enhancement`, auto-merge (squash) enabled. + +## What's next + +Wait for PR #230 to be reviewed and merged. After merge, update `Current State` +in the harness. Next unstarted backlog items: CLAUDE.md loading (#226), +plain-text tool output (#221), improved tool descriptions (#209). From e45b89969261db114e8c2665037da5583c80c0d4 Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Thu, 9 Apr 2026 18:25:31 +1000 Subject: [PATCH 4/8] Add @shellicar/changes tooling: schema generation, validation, CI integration Sets up the full changes.jsonl toolchain for this repo: - changes.config.json defines the valid categories (feature, fix, breaking, deprecation, security, performance) with their display names - scripts/src/generate-schema.ts generates schema/shellicar-changes.json from the Zod definitions + config; category is required (repo policy, stricter than the base spec) - scripts/src/validate-changes.ts validates all **/changes.jsonl files against the schema via ajv; no-args mode globs the repo, or pass specific paths - CI (.github/workflows/node.js.yml) runs the validator on every push Adds changes.jsonl entries for the tsup packaging work (PR #230) in claude-core, claude-sdk, and claude-sdk-tools. Updates both CLAUDE.md files: correct category enum, removed the bad 'issue' field from the example, noted that category is required and that issue links belong in metadata not at the top level, added the @shellicar/changes tooling section. --- .claude/CLAUDE.md | 26 ++++++- .claude/sdk-config.json | 8 +++ .github/workflows/node.js.yml | 1 + CLAUDE.md | 27 ++++++- biome.json | 12 ++++ changes.config.json | 10 +++ packages/claude-core/changes.jsonl | 1 + packages/claude-sdk-tools/changes.jsonl | 20 +++--- packages/claude-sdk/changes.jsonl | 1 + pnpm-lock.yaml | 18 +++++ pnpm-workspace.yaml | 1 + schema/shellicar-changes.json | 76 ++++++++++++++++++++ scripts/package.json | 17 +++++ scripts/src/generate-schema.ts | 37 ++++++++++ scripts/src/validate-changes.ts | 94 +++++++++++++++++++++++++ scripts/tsconfig.json | 10 +++ 16 files changed, 348 insertions(+), 11 deletions(-) create mode 100644 .claude/sdk-config.json create mode 100644 changes.config.json create mode 100644 packages/claude-core/changes.jsonl create mode 100644 packages/claude-sdk/changes.jsonl create mode 100644 schema/shellicar-changes.json create mode 100644 scripts/package.json create mode 100644 scripts/src/generate-schema.ts create mode 100644 scripts/src/validate-changes.ts create mode 100644 scripts/tsconfig.json diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 5d7d4b5..529ad24 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -173,9 +173,33 @@ Full detail: `.claude/five-banana-pillars.md` - **No abstract classes as DI tokens** in this codebase — components are concrete classes wired in `ClaudeCli` - **No TUI framework** — raw ANSI escape sequences on `process.stdout` only - **JSONL** for audit log — one `{ timestamp, ...SDKMessage }` per line, all types except `stream_event` -- Build output: `dist/` via esbuild +- Build output: `dist/esm/` and `dist/cjs/` via tsup (ESM + CJS + DTS) + +## Releases & Changelog + +This is a monorepo with per-package releases. + +**Tag format**: `@` — the package name is the last segment of the npm scope (e.g. `@shellicar/claude-sdk` → tag `claude-sdk@1.0.0-beta.1`). The legacy `claude-cli` app uses unscoped tags (`1.0.0-alpha.74`). + +**PR labels**: every PR needs both a type label (`bug` / `enhancement` / `documentation`) and a `pkg:` label for each package it touches (`pkg: claude-core`, `pkg: claude-sdk`, `pkg: claude-sdk-tools`, `pkg: claude-sdk-cli`, `pkg: claude-cli`). A PR touching all packages gets all five `pkg:` labels. + +**`changes.jsonl`** lives at the root of each package. Add an entry on every PR that touches the package: +```jsonl +{"description":"Human-readable change","category":"feature|fix|breaking|deprecation|security|performance"} +``` +`category` is required; valid values come from `changes.config.json`. Do not add issue or PR references at the top level: link backward to issues via `metadata` if needed. + +Release markers: `{"type":"release","version":"1.0.0-beta.1","date":"YYYY-MM-DD"}` + +**`CHANGELOG.md`** is maintained from `changes.jsonl` when cutting a release. The publish workflow (`npm-publish.yml`) requires the top version entry to match the release tag. + +**Milestone**: `1.0` (not `1.0.0` — that is the milestone name on GitHub). + +**@shellicar/changes tooling**: `changes.config.json` (repo root) defines valid category keys. `schema/shellicar-changes.json` is generated from it via `pnpm tsx scripts/src/generate-schema.ts` (run from `scripts/`). Validate all files with `pnpm tsx scripts/src/validate-changes.ts`; CI runs this automatically. + + ## Linting & Formatting diff --git a/.claude/sdk-config.json b/.claude/sdk-config.json new file mode 100644 index 0000000..5e0b549 --- /dev/null +++ b/.claude/sdk-config.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://raw.githubusercontent.com/shellicar/claude-cli/main/schema/sdk-config.schema.json", + "model": "claude-sonnet-4-6", + "historyReplay": { + "enabled": true, + "showThinking": false + } +} diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index bc93413..d0d11d6 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -36,3 +36,4 @@ jobs: - run: pnpm run --if-present type-check --only - run: pnpm run --if-present test --only - run: pnpm run ci + - run: pnpm tsx scripts/src/validate-changes.ts diff --git a/CLAUDE.md b/CLAUDE.md index f92d525..5cad0de 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -12,12 +12,37 @@ All work is tracking toward the `1.0.0` milestone. Every PR must include: -- **Milestone**: `1.0.0` +- **Milestone**: `1.0` - **Reviewer**: `bananabot9000` - **Assignee**: `shellicar` - **Label**: one of `bug`, `enhancement`, or `documentation` (pick the most appropriate) +- **Package label(s)**: add a `pkg: ` label for every package the PR touches. Labels exist for `claude-core`, `claude-sdk`, `claude-sdk-tools`, `claude-sdk-cli`, `claude-cli`. A PR touching all packages gets all five. - **Auto-merge**: enable with `gh pr merge --auto --squash` +## Changelog + +This is a monorepo. Each publishable package has its own release lifecycle: + +- **Tags** use the format `@` (e.g. `claude-sdk@1.0.0-beta.1`). The package name is the last segment of the npm name — `@shellicar/claude-sdk` → `claude-sdk`. +- Each package has a `changes.jsonl` and a `CHANGELOG.md`. +- **`changes.jsonl`** records individual changes as they land. Add an entry for every PR that touches the package: + ```jsonl + {"description":"What changed","category":"feature|fix|breaking|deprecation|security|performance"} + ``` + `category` is required; valid values come from `changes.config.json`. Do not add issue or PR references at the top level: link backward to issues via `metadata` if needed. + + Release markers look like: `{"type":"release","version":"1.0.0-beta.1","date":"YYYY-MM-DD"}` +- **`CHANGELOG.md`** is updated from `changes.jsonl` entries when cutting a release. The publish workflow validates that the top entry matches the release tag version. +- The **root `CHANGELOG.md`** covers the legacy `claude-cli` app (unscoped tags like `1.0.0-alpha.74`). + +## @shellicar/changes Tooling + +Schema and validation for `changes.jsonl` files: + +- **`changes.config.json`** (repo root): defines valid category keys and their display names. +- **`schema/shellicar-changes.json`**: generated JSON schema artifact. Regenerate with `pnpm tsx scripts/src/generate-schema.ts` (run from `scripts/`). +- **Validate**: `pnpm tsx scripts/src/validate-changes.ts` checks all `**/changes.jsonl` files against the schema. Pass specific filenames as arguments to validate those only. CI runs this step automatically. + ## Branch Naming Use the following prefixes: diff --git a/biome.json b/biome.json index 736fa56..979444e 100644 --- a/biome.json +++ b/biome.json @@ -70,6 +70,18 @@ } }, "overrides": [ + { + "includes": ["scripts/**"], + "linter": { + "rules": { + "suspicious": { + "noConsole": { + "level": "off" + } + } + } + } + }, { "includes": ["**/sdkInternals.ts"], "linter": { diff --git a/changes.config.json b/changes.config.json new file mode 100644 index 0000000..90a0b53 --- /dev/null +++ b/changes.config.json @@ -0,0 +1,10 @@ +{ + "categories": { + "feature": "Features", + "fix": "Bug Fixes", + "breaking": "Breaking Changes", + "deprecation": "Deprecations", + "security": "Security", + "performance": "Performance" + } +} diff --git a/packages/claude-core/changes.jsonl b/packages/claude-core/changes.jsonl new file mode 100644 index 0000000..79f2f20 --- /dev/null +++ b/packages/claude-core/changes.jsonl @@ -0,0 +1 @@ +{"description":"Package now publishes CJS alongside ESM with working sourcemaps","category":"fix"} diff --git a/packages/claude-sdk-tools/changes.jsonl b/packages/claude-sdk-tools/changes.jsonl index 41e9781..cdb795d 100644 --- a/packages/claude-sdk-tools/changes.jsonl +++ b/packages/claude-sdk-tools/changes.jsonl @@ -1,10 +1,12 @@ -{"description":"File read tools: Find, ReadFile, Grep, Head, Tail, Range, SearchFiles","category":"feature","issue":"#176"} -{"description":"File write tools: CreateFile, DeleteFile, DeleteDirectory","category":"feature","issue":"#176"} -{"description":"PreviewEdit and EditFile tools for staged edits with diff preview","category":"feature","issue":"#176"} -{"description":"Exec tool with structured args, multi-step pipelines, and permission model","category":"feature","issue":"#176"} -{"description":"Pipe tool for chaining tool outputs","category":"feature","issue":"#176"} -{"description":"IFileSystem abstraction with NodeFileSystem and MemoryFileSystem for testing","category":"feature","issue":"#176"} -{"description":"Ref system for paginating large tool results that exceed context threshold","category":"feature","issue":"#176"} -{"description":"Path expansion supporting ~, $HOME, and relative paths in all tools","category":"feature","issue":"#176"} -{"description":"Split PreviewEdit edits into lineEdits (structural, bottom-to-top) and textEdits (text-search, applied after lineEdits)","category":"feature","issue":"#206"} +{"description":"File read tools: Find, ReadFile, Grep, Head, Tail, Range, SearchFiles","category":"feature"} +{"description":"File write tools: CreateFile, DeleteFile, DeleteDirectory","category":"feature"} +{"description":"PreviewEdit and EditFile tools for staged edits with diff preview","category":"feature"} +{"description":"Exec tool with structured args, multi-step pipelines, and permission model","category":"feature"} +{"description":"Pipe tool for chaining tool outputs","category":"feature"} +{"description":"IFileSystem abstraction with NodeFileSystem and MemoryFileSystem for testing","category":"feature"} +{"description":"Ref system for paginating large tool results that exceed context threshold","category":"feature"} +{"description":"Path expansion supporting ~, $HOME, and relative paths in all tools","category":"feature"} +{"description":"Split PreviewEdit edits into lineEdits (structural, bottom-to-top) and textEdits (text-search, applied after lineEdits)","category":"feature"} {"type":"release","version":"1.0.0-alpha.1","date":"2026-04-07"} +{"description":"Package now publishes CJS alongside ESM with working sourcemaps","category":"fix"} +{"description":"Export IFileSystem, NodeFileSystem, MemoryFileSystem, nodeFs singleton via ./fs entry","category":"feature"} diff --git a/packages/claude-sdk/changes.jsonl b/packages/claude-sdk/changes.jsonl new file mode 100644 index 0000000..79f2f20 --- /dev/null +++ b/packages/claude-sdk/changes.jsonl @@ -0,0 +1 @@ +{"description":"Package now publishes CJS alongside ESM with working sourcemaps","category":"fix"} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1e928b..6f2ffbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -285,6 +285,24 @@ importers: specifier: ^24.0.4 version: 24.0.4 + scripts: + devDependencies: + '@shellicar/typescript-config': + specifier: workspace:^ + version: link:../packages/typescript-config + '@types/node': + specifier: ^25.5.2 + version: 25.5.2 + ajv: + specifier: ^8.18.0 + version: 8.18.0 + tsx: + specifier: ^4.21.0 + version: 4.21.0 + zod: + specifier: ^4.3.6 + version: 4.3.6 + packages: '@anthropic-ai/claude-agent-sdk@0.2.92': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 4a3eb5b..18c8bcd 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,7 @@ packages: - apps/* - packages/* + - scripts onlyBuiltDependencies: - sharp diff --git a/schema/shellicar-changes.json b/schema/shellicar-changes.json new file mode 100644 index 0000000..82953bd --- /dev/null +++ b/schema/shellicar-changes.json @@ -0,0 +1,76 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "anyOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "release" + }, + "version": { + "type": "string" + }, + "date": { + "type": "string" + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": [ + "type", + "version", + "date" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "change" + }, + "description": { + "type": "string" + }, + "category": { + "type": "string", + "enum": [ + "feature", + "fix", + "breaking", + "deprecation", + "security", + "performance" + ] + }, + "semver": { + "type": "string", + "enum": [ + "major", + "minor", + "patch" + ] + }, + "metadata": { + "type": "object", + "propertyNames": { + "type": "string" + }, + "additionalProperties": {} + } + }, + "required": [ + "description", + "category" + ], + "additionalProperties": false + } + ] +} \ No newline at end of file diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 0000000..7b6440b --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,17 @@ +{ + "name": "scripts", + "version": "0.0.0", + "type": "module", + "private": true, + "scripts": { + "schema": "tsx src/generate-schema.ts", + "validate": "tsx src/validate-changes.ts" + }, + "devDependencies": { + "@shellicar/typescript-config": "workspace:^", + "@types/node": "^25.5.2", + "ajv": "^8.18.0", + "tsx": "^4.21.0", + "zod": "^4.3.6" + } +} diff --git a/scripts/src/generate-schema.ts b/scripts/src/generate-schema.ts new file mode 100644 index 0000000..35fe510 --- /dev/null +++ b/scripts/src/generate-schema.ts @@ -0,0 +1,37 @@ +import { readFileSync, writeFileSync } from 'node:fs'; +import { z } from 'zod'; + +const ConfigSchema = z.object({ + categories: z.record(z.string(), z.string()), +}); + +const config = ConfigSchema.parse(JSON.parse(readFileSync('../changes.config.json', 'utf-8'))); + +const categoryKeys = Object.keys(config.categories); +if (categoryKeys.length === 0) { + throw new Error('changes.config.json has no categories defined'); +} + +const ChangeEntry = z.object({ + type: z.literal('change').optional(), + description: z.string(), + category: z.enum(categoryKeys as [string, ...string[]]), + semver: z.enum(['major', 'minor', 'patch']).optional(), + metadata: z.record(z.string(), z.unknown()).optional(), +}).strict(); + +const ReleaseMarker = z.object({ + type: z.literal('release'), + version: z.string(), + date: z.string(), + metadata: z.record(z.string(), z.unknown()).optional(), +}).strict(); + +const Entry = z.union([ReleaseMarker, ChangeEntry]); + +const outfile = '../schema/shellicar-changes.json'; + +const schema = Entry.toJSONSchema({ target: 'draft-07', io: 'input' }); +const json = JSON.stringify(schema, null, 2); + +writeFileSync(outfile, json); diff --git a/scripts/src/validate-changes.ts b/scripts/src/validate-changes.ts new file mode 100644 index 0000000..ef18d63 --- /dev/null +++ b/scripts/src/validate-changes.ts @@ -0,0 +1,94 @@ +import { readFileSync } from 'node:fs'; +import { glob } from 'node:fs/promises'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import Ajv from 'ajv'; + +// Validate changes.jsonl files against the @shellicar/changes JSON schema. +// The schema is generated from this repo's changes.config.json, so the +// allowed categories are baked into the schema and enforced by ajv. + +const scriptDir = dirname(fileURLToPath(import.meta.url)); +const repoRoot = resolve(scriptDir, '..', '..'); + +const schemaPath = resolve(repoRoot, 'schema/shellicar-changes.json'); + +const schema = JSON.parse(readFileSync(schemaPath, 'utf-8')); + +const ajv = new Ajv({ allErrors: true }); +const validate = ajv.compile(schema); + +async function main() { + const argvFiles = process.argv.slice(2); + let files: string[]; + if (argvFiles.length > 0) { + files = argvFiles; + } else { + files = []; + for await (const entry of glob('**/changes.jsonl', { + cwd: repoRoot, + exclude: (p) => p.includes('node_modules') || p.includes('.git') || p.includes('dist'), + })) { + files.push(resolve(repoRoot, entry)); + } + if (files.length === 0) { + console.error('no changes.jsonl files found'); + process.exit(2); + } + } + + type Failure = { file: string; line: number; message: string }; + const failures: Failure[] = []; + + for (const file of files) { + let content: string; + try { + content = readFileSync(file, 'utf-8'); + } catch (err) { + failures.push({ file, line: 0, message: `cannot read file: ${(err as Error).message}` }); + continue; + } + + const lines = content.split('\n'); + for (let i = 0; i < lines.length; i++) { + const raw = lines[i]; + if (raw === undefined || raw.trim() === '') { + continue; + } + + let parsed: unknown; + try { + parsed = JSON.parse(raw); + } catch (err) { + failures.push({ file, line: i + 1, message: `invalid JSON: ${(err as Error).message}` }); + continue; + } + + if (!validate(parsed)) { + failures.push({ + file, + line: i + 1, + message: JSON.stringify(validate.errors, null, 2), + }); + continue; + } + } + } + + if (failures.length > 0) { + for (const f of failures) { + console.error(`error validating ${f.file}:${f.line}`); + console.error(f.message); + } + const n = failures.length; + console.error(`\n${n} error${n === 1 ? '' : 's'}`); + process.exit(1); + } + + console.log('no errors found'); +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 0000000..1bb7300 --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@shellicar/typescript-config/base.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": ".", + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] +} From 35d018f801a8d5b6210baf402b7b5cd8f8b19dae Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Thu, 9 Apr 2026 18:26:32 +1000 Subject: [PATCH 5/8] Session log: @shellicar/changes tooling session (2026-04-09 continued) --- .claude/sessions/2026-04-09.md | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/.claude/sessions/2026-04-09.md b/.claude/sessions/2026-04-09.md index 05c519d..cf44d65 100644 --- a/.claude/sessions/2026-04-09.md +++ b/.claude/sessions/2026-04-09.md @@ -184,3 +184,60 @@ assignee `shellicar`, label `enhancement`, auto-merge (squash) enabled. Wait for PR #230 to be reviewed and merged. After merge, update `Current State` in the harness. Next unstarted backlog items: CLAUDE.md loading (#226), plain-text tool output (#221), improved tool descriptions (#209). + + +--- + +# Session 2026-04-09 (continued) + +## What was done + +### @shellicar/changes tooling built and committed + +Full toolchain for `changes.jsonl` validation across the monorepo: + +**`changes.config.json`** at repo root defines the valid categories: +`feature`, `fix`, `breaking`, `deprecation`, `security`, `performance`. + +**`scripts/src/generate-schema.ts`** reads that config and generates +`schema/shellicar-changes.json` via Zod + `zod-to-json-schema`. Key details: +- `category` is required in this repo (stricter than the base spec default) +- Both `ChangeEntry` and `ReleaseMarker` use `.strict()` (additionalProperties: false) +- Schema is a bound artifact: regenerate it if the config changes + +**`scripts/src/validate-changes.ts`** validates all `**/changes.jsonl` files +against the generated schema via ajv. No-args mode globs the repo; pass +specific paths to validate those only. Exits 1 on validation failures, +exits 2 if glob finds no files. + +**CI** (`.github/workflows/node.js.yml`) runs the validator automatically. + +### changes.jsonl files added/updated + +- `packages/claude-core/changes.jsonl`: fix entry for tsup packaging work (PR #230) +- `packages/claude-sdk/changes.jsonl`: same +- `packages/claude-sdk-tools/changes.jsonl`: existing feature entries preserved; + two new entries appended (tsup fix + `./fs` export feature) + +All entries: no top-level `issue` field (links go backward to issues, never +forward to PRs; use `metadata` for platform refs per spec principle 3). + +### CLAUDE.md updated (both files) + +- Fixed category enum: `feature|fix|breaking|deprecation|security|performance` +- Removed `"issue":"#NNN"` from the example +- Added note that `category` is required +- Added note that issue links go in `metadata`, not top-level +- Added `@shellicar/changes Tooling` section explaining the toolchain + +## Note + +`shellicar-changes.md` (the spec reference doc) was accidentally committed +via `git add -A`. It is the upstream spec document shared as session context. +Add it to `.gitignore` or remove it from the repo as desired. + +## What's next + +PR #230 is open with auto-merge. After it merges, update `Current State` +in the harness. Next unstarted backlog items: CLAUDE.md loading (#226), +plain-text tool output (#221), improved tool descriptions (#209). From 3813713f6cfdc7fc37a504e7b5b9e8597097da9b Mon Sep 17 00:00:00 2001 From: Stephen Hellicar Date: Thu, 9 Apr 2026 19:04:01 +1000 Subject: [PATCH 6/8] Add @shellicar/changes toolchain with per-package changelogs Builds out the full changes toolchain across the monorepo: - changes.config.json: Keep a Changelog standard categories (added/changed/deprecated/removed/fixed/security). Custom category names were replaced because these are the recognised standard and tooling elsewhere understands them. - schema/shellicar-changes.schema.json (renamed from .json): generated JSON Schema artifact. The .schema.json suffix is conventional for JSON Schema files and makes intent unambiguous in editors. - scripts/src/generate-schema.ts: generates schema from Zod definitions + changes.config.json. Must run from scripts/ directory. - scripts/src/validate-changes.ts: validates every **/changes.jsonl against the schema via ajv. CI runs this on every push. - scripts/src/generate-changelog.ts: generates CHANGELOG.md for a package from its changes.jsonl. Groups entries by category in config order within each release. Renders metadata.issue as (#NNN) and metadata.ghsa as a linked advisory suffix. - Release markers gain an optional tag field. When absent the script defaults to @. The claude-cli app uses explicit tags because its historical alphas used unscoped version tags. - changes.jsonl + CHANGELOG.md added for all five packages/apps. apps/claude-cli carries the full reverse-engineered history from the root CHANGELOG.md (alpha.67 through alpha.74) so the generated CHANGELOG.md is the authoritative source going forward. - Both CLAUDE.md files updated with a dedicated @shellicar/changes section covering config, schema, and all three scripts. --- .claude/CLAUDE.md | 2 +- CLAUDE.md | 48 +++++- apps/claude-cli/CHANGELOG.md | 161 ++++++++++++++++++ apps/claude-cli/changes.jsonl | 94 ++++++++++ apps/claude-sdk-cli/CHANGELOG.md | 5 + apps/claude-sdk-cli/changes.jsonl | 0 changes.config.json | 12 +- packages/claude-core/CHANGELOG.md | 9 + packages/claude-core/changes.jsonl | 2 +- packages/claude-sdk-tools/CHANGELOG.md | 29 ++++ packages/claude-sdk-tools/changes.jsonl | 22 +-- packages/claude-sdk/CHANGELOG.md | 9 + packages/claude-sdk/changes.jsonl | 2 +- ...ges.json => shellicar-changes.schema.json} | 15 +- scripts/src/generate-changelog.ts | 104 +++++++++++ scripts/src/generate-schema.ts | 3 +- scripts/src/validate-changes.ts | 2 +- 17 files changed, 485 insertions(+), 34 deletions(-) create mode 100644 apps/claude-cli/changes.jsonl create mode 100644 apps/claude-sdk-cli/changes.jsonl rename schema/{shellicar-changes.json => shellicar-changes.schema.json} (87%) create mode 100644 scripts/src/generate-changelog.ts diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md index 529ad24..d80ffcb 100644 --- a/.claude/CLAUDE.md +++ b/.claude/CLAUDE.md @@ -187,7 +187,7 @@ This is a monorepo with per-package releases. **`changes.jsonl`** lives at the root of each package. Add an entry on every PR that touches the package: ```jsonl -{"description":"Human-readable change","category":"feature|fix|breaking|deprecation|security|performance"} +{"description":"Human-readable change","category":"added|changed|deprecated|removed|fixed|security"} ``` `category` is required; valid values come from `changes.config.json`. Do not add issue or PR references at the top level: link backward to issues via `metadata` if needed. diff --git a/CLAUDE.md b/CLAUDE.md index 5cad0de..2bcdb6b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -27,7 +27,7 @@ This is a monorepo. Each publishable package has its own release lifecycle: - Each package has a `changes.jsonl` and a `CHANGELOG.md`. - **`changes.jsonl`** records individual changes as they land. Add an entry for every PR that touches the package: ```jsonl - {"description":"What changed","category":"feature|fix|breaking|deprecation|security|performance"} + {"description":"What changed","category":"added|changed|deprecated|removed|fixed|security"} ``` `category` is required; valid values come from `changes.config.json`. Do not add issue or PR references at the top level: link backward to issues via `metadata` if needed. @@ -35,13 +35,49 @@ This is a monorepo. Each publishable package has its own release lifecycle: - **`CHANGELOG.md`** is updated from `changes.jsonl` entries when cutting a release. The publish workflow validates that the top entry matches the release tag version. - The **root `CHANGELOG.md`** covers the legacy `claude-cli` app (unscoped tags like `1.0.0-alpha.74`). -## @shellicar/changes Tooling +## @shellicar/changes -Schema and validation for `changes.jsonl` files: +This repo uses the `@shellicar/changes` toolchain for per-package changelogs. All scripts live in `scripts/src/` and run with `pnpm tsx scripts/src/