diff --git a/infra/package.json b/infra/package.json index 6b45212dbe..59f86ad816 100644 --- a/infra/package.json +++ b/infra/package.json @@ -12,10 +12,10 @@ "test:watch": "vitest", "coverage": "vitest run --coverage", "format": "pnpm prettier --write .", - "release": "pdk release --tag-prefix 'pdk@' --push-tag --build --ignore-scripts --auto-create-release-branch", - "release:dryrun": "pdk release --tag-prefix 'pdk@' --push-tag --build --ignore-scripts --auto-create-release-branch --dry-run", - "release:canary": "pdk release --tag-prefix 'pdk@' --canary --push-tag --build --ignore-scripts --auto-create-release-branch", - "release:full": "pdk release --tag-prefix 'pdk@' --push-tag --build --ignore-scripts --create-github-release", + "release": "pdk release ", + "release:dryrun": "pdk release --dry-run", + "release:canary": "pdk release --canary", + "release:full": "pdk release --create-github-release", "github-release": "pdk github-release", "github-release:dryrun": "pdk github-release --dry-run", "changelog": "pdk changelog", diff --git a/infra/pdk.config.ts b/infra/pdk.config.ts new file mode 100644 index 0000000000..1b6142f4a3 --- /dev/null +++ b/infra/pdk.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'pnpm-dev-kit' + +export default defineConfig({ + autoCreateReleaseBranch: true, + build: true, + tagPrefix: 'pdk@', + pushTag: true, + ignoreScripts: true, +}); \ No newline at end of file diff --git a/infra/pdk/README.md b/infra/pdk/README.md index c1303d9496..ac02fadd07 100644 --- a/infra/pdk/README.md +++ b/infra/pdk/README.md @@ -5,128 +5,184 @@ npm downloads license

-

PDK - PNPM Dev Kit, An efficient PNPM workspace development and publishing tool.

+

Efficient PNPM workspace development and publishing toolkit

## Features -- 💻 **Dev Mode**: Quickly launch on-demand development builds for monorepo packages -- 🚀 **Release Management**: Automated version bumping and publishing -- 🔧 **Patch System**: Repair failed package publications -- 📝 **Changelog Generation**: Automatic, customizable changelog creation -- 🏷️ **GitHub Release**: Automatic GitHub release creation with changelog extraction +- **Dev Mode**: On-demand builds with file watching +- **Release**: Automated versioning and publishing +- **Patch**: Targeted fixes for failed releases +- **Changelog**: AI-powered or conventional changelog generation +- **GitHub Release**: Automatic GitHub releases with changelog -## Install +## Quick Start ```bash -# Using npm -npm install --save-dev pnpm-dev-kit +npm install -D pnpm-dev-kit +``` -# Using yarn -yarn add --dev pnpm-dev-kit +### Basic Usage -# Using pnpm -pnpm add -D pnpm-dev-kit +```bash +# Development mode +pdk dev + +# Release with changelog and GitHub release +pdk release --push-tag --create-github-release + +# Generate changelog +pdk changelog --use-ai --provider openai --model gpt-4o + +# Fix failed release +pdk patch --version 1.0.0 --tag latest ``` -For global installation: +## Configuration -```bash -npm install -g pnpm-dev-kit +Create `pdk.config.ts` in your project root: + +```typescript +import { defineConfig } from 'pnpm-dev-kit'; + +export default defineConfig({ + // Core options + tagPrefix: 'v', + dryRun: false, + runInBand: false, + ignoreScripts: false, + + // AI changelog + useAi: true, + model: 'gpt-4o', + provider: 'openai', + apiKey: process.env.OPENAI_API_KEY, + + // Changelog filters + filterTypes: ['feat', 'fix', 'perf'], + filterScopes: ['core', 'ui', 'api'], + + // Release defaults + changelog: true, + pushTag: true, + createGithubRelease: true, + autoCreateReleaseBranch: false, + + // Dev mode + exclude: ['@scope/package-to-exclude'], + packages: ['@scope/package-to-start'], +}); ``` -## Usage +### Configuration Options -### Development Mode +#### Core Options -Quickly start development mode to build packages on demand when files change: +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `cwd` | `string` | `process.cwd()` | Working directory | +| `dryRun` | `boolean` | `false` | Preview mode without changes | +| `runInBand` | `boolean` | `false` | Publish packages sequentially | +| `ignoreScripts` | `boolean` | `false` | Skip npm scripts | +| `tagPrefix` | `string` | `'v'` | Git tag prefix | -```bash -# Using the CLI -pdk dev +#### AI Options -# Or with npm script -npm run dev -``` +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `useAi` | `boolean` | `false` | Enable AI changelog generation | +| `model` | `string` | `'gpt-4o'` | LLM model | +| `provider` | `string` | `'openai'` | LLM provider | +| `apiKey` | `string` | - | API key (use env var) | +| `baseURL` | `string` | - | Custom API endpoint | -**Interactive Features:** +#### Filter Options -- Type `n` to select a package to build manually -- Type `ps` to list running processes -- Type package name to build a specific package +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `filterTypes` | `string[]` | `['feat', 'fix']` | Commit types to include | +| `filterScopes` | `string[]` | `[]` | Scopes to include (empty = all) | -### Release Process +#### Command-Specific Options -**Standard Release:** -```bash -# Complete release (recommended) -pdk release --push-tag --create-github-release +**Development (`dev`)**: +- `exclude`: Packages to exclude from startup +- `packages`: Packages to start by default -# Canary release for CI/CD -pdk release --canary -``` +**Release (`release`)**: +- `changelog`: Generate changelog (default: `true`) +- `build`: Build before publishing (`false` or script name) +- `pushTag`: Push git tags (default: `false`) +- `canary`: Canary release (default: `false`) +- `createGithubRelease`: Create GitHub release (default: `false`) +- `autoCreateReleaseBranch`: Auto-create release branch (default: `false`) -**Release Flow:** -1. Select version type (patch/minor/major/prerelease) -2. Choose NPM tag (latest/next/beta) -3. Update workspace dependencies -4. Publish packages to NPM -5. Create git tag and push to remote -6. Generate CHANGELOG.md -7. Create GitHub Release +**Changelog (`changelog`)**: +- `version`: Target version +- `beautify`: Format markdown (default: `false`) +- `commit`: Git commit changelog (default: `false`) +- `gitPush`: Push commit (default: `false`) +- `attachAuthor`: Include author info (default: `false`) +- `authorNameType`: Author format (`'name'` or `'email'`, default: `'name'`) -**Failed Release Recovery:** -```bash -pdk patch --version 1.0.0 --tag latest -``` +**Patch (`patch`)**: +- `version`: Version to patch +- `tag`: Distribution tag -**Changelog Generation:** -```bash -# Standard changelog -pdk changelog --version 1.0.0 --beautify --commit --git-push +**GitHub Release (`github-release`)**: +- `version`: Release version -# AI-powered changelog -pdk changelog --version 1.0.0 --use-ai --provider openai --model gpt-4o -``` +## Configuration vs CLI -**GitHub Release:** -```bash -pdk github-release --version 1.0.0 -pdk github-release --dry-run # Preview -``` +### Use Config File For -**Key Options:** -- `--dry-run`: Preview without changes -- `--run-in-band`: Publish packages in series -- `--build`: Custom build script before release -- `--ignore-scripts`: Skip npm scripts -- `--auto-create-release-branch`: Auto-create release branch -- `--filter-scopes`: Filter by scope (default: tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all) -- `--filter-types`: Filter by commit type (default: feat,fix) +- **Project conventions**: `tagPrefix`, `filterTypes`, `filterScopes` +- **Team preferences**: `useAi`, `model`, `provider`, `runInBand` +- **Workflow defaults**: `changelog`, `pushTag`, `createGithubRelease` -## Configuration +### Use CLI For + +- **Environment-specific**: `dryRun`, `cwd`, `version` +- **One-time operations**: `exclude`, `packages`, `build`, `canary` +- **Sensitive data**: `apiKey` (use environment variables) + +### Priority Order + +1. CLI arguments +2. Environment variables +3. Configuration file +4. Default values + +## API Usage + +```typescript +import { loadPDKConfig, dev, release } from 'pnpm-dev-kit'; + +// Load configuration +const config = await loadPDKConfig({ cwd: './my-project' }); + +// Use with commands +await dev(config.resolved); +await release(config.resolved); +``` + +## package.json Scripts -**package.json Scripts:** ```json { "scripts": { "dev": "pdk dev", - "release": "pdk release --push-tag", + "release": "pdk release", "release:full": "pdk release --push-tag --create-github-release", "release:canary": "pdk release --canary", - "github-release": "pdk github-release", "changelog": "pdk changelog", "patch": "pdk patch --version $(node -p \"require('./package.json').version\") --tag latest" } } ``` -**Workspace Setup:** -- Uses `pnpm-workspace.yaml` for package discovery -- Follows conventional commit standards -- Auto-updates internal workspace dependencies +## CI/CD Integration -**CI/CD Integration:** ```yaml # .github/workflows/release.yml name: Release @@ -150,14 +206,14 @@ jobs: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} ``` -**Best Practices:** -- Always release from latest main branch -- Ensure clean working directory -- Run tests before release +## Best Practices + +- Always release from clean `main` branch - Use `--dry-run` for testing - Canary format: `{version}-canary-{commitHash}-{timestamp}` -- Auto-rollback on publish failure +- Keep sensitive data in environment variables +- Review config changes in pull requests ## License -This project is licensed under the Apache License 2.0. +Apache License 2.0 \ No newline at end of file diff --git a/infra/pdk/bin/cli.js b/infra/pdk/bin/cli.js index 39ade61a27..518d41f1e7 100755 --- a/infra/pdk/bin/cli.js +++ b/infra/pdk/bin/cli.js @@ -1,3 +1,3 @@ #!/usr/bin/env node -require('../dist/cli').bootstrapCli(); +require('../dist/index').bootstrapCli(); diff --git a/infra/pdk/package.json b/infra/pdk/package.json index 203ae5ece1..f244c363c5 100644 --- a/infra/pdk/package.json +++ b/infra/pdk/package.json @@ -3,7 +3,6 @@ "description": "PDK (pnpm dev kit), an efficient pnpm workspace development and publishing tool", "version": "0.0.5", "main": "dist/index.js", - "module": "dist/index.mjs", "types": "dist/index.d.ts", "publishConfig": { "access": "public", @@ -19,9 +18,11 @@ "scripts": { "dev": "rslib build --watch", "build": "rslib build", + "test": "vitest run", "prepublishOnly": "pnpm run build" }, "dependencies": { + "@tarko/config-loader": "0.3.0", "@tarko/model-provider": "0.3.0", "boxen": "4", "cac": "^6.5.10", @@ -47,6 +48,7 @@ "@types/string-width": "^4.0.1", "@types/text-table": "^0.2.0", "rimraf": "4.1.0", - "typescript": "5.8.3" + "typescript": "5.8.3", + "vitest": "3.2.4" } } diff --git a/infra/pdk/src/cli.ts b/infra/pdk/src/cli.ts index bba96132af..58ad1dd4d3 100644 --- a/infra/pdk/src/cli.ts +++ b/infra/pdk/src/cli.ts @@ -4,25 +4,32 @@ */ /** - * CLI entry point for PTK + * CLI entry point for PDK */ import { cac } from 'cac'; import { dev, release, patch, changelog, githubRelease } from './commands'; import { logger } from './utils/logger'; +import { loadPDKConfig, mergeOptions } from './utils/config'; /** - * Wraps a command execution with error handling + * Wraps a command execution with error handling and config loading */ // eslint-disable-next-line @typescript-eslint/ban-types async function wrapCommand( // eslint-disable-next-line @typescript-eslint/ban-types command: Function, - options: Record, + cliOptions: Record, ) { - options.cwd = options.cwd || process.cwd(); + cliOptions.cwd = cliOptions.cwd || process.cwd(); try { - await command(options); + // Load configuration + const config = await loadPDKConfig({ cwd: cliOptions.cwd as string }); + + // Merge CLI options with configuration + const mergedOptions = mergeOptions(cliOptions, config); + + await command(mergedOptions); } catch (err) { console.log(); process.exitCode = 1; @@ -35,13 +42,11 @@ async function wrapCommand( * Bootstrap the CLI */ export function bootstrapCli() { - const cli = cac('ptk'); + const cli = cac('pdk'); const pkg = require('../package.json'); // Global options - cli.option('--cwd ', 'Current working directory', { - default: process.cwd(), - }); + cli.option('--cwd ', 'Current working directory'); // Dev command cli @@ -50,16 +55,10 @@ export function bootstrapCli() { .option( '--exclude ', 'Comma-separated list of packages to exclude', - { - default: '', - }, ) .option( '--packages, --pkg ', 'Comma-separated list of packages to start by default', - { - default: '', - }, ) .action((opts) => { if (opts.packages && typeof opts.packages === 'string') { @@ -80,41 +79,21 @@ export function bootstrapCli() { // Release command cli .command('r', 'Release your monorepo') - .option('--changelog', 'Whether to generate changelog', { - default: true, - }) - .option('--push-tag', 'Automatically push git tag to remote', { - default: false, - }) - .option('--build [build]', 'Execute custom build script before release', { - default: false, - }) - .option('--dry-run', 'Preview execution without making changes', { - default: false, - }) - .option('--run-in-band', 'Whether to publish package in series', { - default: false, - }) + .option('--changelog', 'Whether to generate changelog') + .option('--push-tag', 'Automatically push git tag to remote') + .option('--build [build]', 'Execute custom build script before release') + .option('--dry-run', 'Preview execution without making changes') + .option('--run-in-band', 'Whether to publish package in series') .option( '--ignore-scripts', 'Ignore npm scripts during release and patch process', - { - default: false, - }, ) - .option('--tag-prefix ', 'Prefix for git tags', { - default: 'v', - }) + .option('--tag-prefix ', 'Prefix for git tags') .option( '--canary', 'Skip version/tag selection and auto-generate canary version', - { - default: false, - }, ) - .option('--use-ai', 'Use AI to generate changelog', { - default: false, - }) + .option('--use-ai', 'Use AI to generate changelog') .option('--provider ', 'LLM provider to use (default: openai)') .option('--model ', 'LLM model to use (default: gpt-4o)') .option('--apiKey, --api-key ', 'Custom API key for LLM') @@ -122,30 +101,18 @@ export function bootstrapCli() { .option( '--filter-scopes ', 'Comma-separated list of scopes to include in changelog (empty for all)', - { - default: '', - }, ) .option( '--filter-types ', 'Comma-separated list of commit types to include in changelog', - { - default: 'feat,fix', - }, ) .option( '--create-github-release', 'Create GitHub release after successful release', - { - default: false, - }, ) .option( '--auto-create-release-branch', 'Automatically create release branch before release', - { - default: false, - }, ) .alias('release') .action((opts) => { @@ -176,12 +143,8 @@ export function bootstrapCli() { }, ) .option('--tag ', 'Tag (e.g. latest, next, beta)') - .option('--run-in-band', 'Whether to publish package in series', { - default: false, - }) - .option('--ignore-scripts', 'Ignore npm scripts under patch process', { - default: false, - }) + .option('--run-in-band', 'Whether to publish package in series') + .option('--ignore-scripts', 'Ignore npm scripts under patch process') .alias('patch') .action((opts) => { // Map patch-version to version for compatibility @@ -194,33 +157,17 @@ export function bootstrapCli() { // Changelog command cli .command('changelog', 'Create changelog') - .option('--dry-run', 'Preview execution without making changes', { - default: false, - }) + .option('--dry-run', 'Preview execution without making changes') .option('--changelog-version ', 'Version', { // There is no default value here, because the default is read from package.json }) - .option('--tag-prefix ', 'Prefix for git tags', { - default: 'v', - }) - .option('--beautify', 'Beautify changelog or not', { - default: false, - }) - .option('--commit', 'Create git commit or not', { - default: false, - }) - .option('--git-push', 'Execute git push or not', { - default: false, - }) - .option('--attach-author', 'Add author or not', { - default: false, - }) - .option('--author-name-type ', 'Type of author name: name or email', { - default: 'name', - }) - .option('--use-ai', 'Use AI to generate changelog', { - default: false, - }) + .option('--tag-prefix ', 'Prefix for git tags') + .option('--beautify', 'Beautify changelog or not') + .option('--commit', 'Create git commit or not') + .option('--git-push', 'Execute git push or not') + .option('--attach-author', 'Add author or not') + .option('--author-name-type ', 'Type of author name: name or email') + .option('--use-ai', 'Use AI to generate changelog') .option('--provider ', 'LLM provider to use (default: openai)') .option('--model ', 'LLM model to use (default: gpt-4o)') .option('--apiKey, --api-key ', 'Custom API key for LLM') @@ -228,16 +175,10 @@ export function bootstrapCli() { .option( '--filter-scopes ', 'Comma-separated list of scopes to include in changelog (empty for all)', - { - default: '', - }, ) .option( '--filter-types ', 'Comma-separated list of commit types to include in changelog', - { - default: 'feat,fix', - }, ) .action((opts) => { // Map changelog-version to version for compatibility @@ -267,12 +208,8 @@ export function bootstrapCli() { '--release-version ', 'Version to release (reads from package.json if not provided)', ) - .option('--tag-prefix ', 'Prefix for git tags', { - default: 'v', - }) - .option('--dry-run', 'Preview execution without creating actual release', { - default: false, - }) + .option('--tag-prefix ', 'Prefix for git tags') + .option('--dry-run', 'Preview execution without creating actual release') .alias('gh-release') .action((opts) => { // Map release-version to version for compatibility diff --git a/infra/pdk/src/config.ts b/infra/pdk/src/config.ts new file mode 100644 index 0000000000..b6adc9b723 --- /dev/null +++ b/infra/pdk/src/config.ts @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Configuration definition utilities for PDK + */ + +import type { PDKConfig } from './types'; + +/** + * Defines PDK configuration with TypeScript support + * CLI, Node.js API, and Config API are completely isomorphic + * + * @example + * ```typescript + * import { defineConfig } from 'pnpm-dev-kit'; + * + * export default defineConfig({ + * tagPrefix: 'v', + * useAi: true, + * model: 'gpt-4o', + * changelog: true, + * createGithubRelease: true + * }); + * ``` + */ +export function defineConfig(config: PDKConfig): PDKConfig { + return config; +} + +/** + * Type helper for configuration schema validation + */ +export type ConfigSchema = PDKConfig; \ No newline at end of file diff --git a/infra/pdk/src/index.ts b/infra/pdk/src/index.ts index 0c226e3e90..fc809b0e3f 100644 --- a/infra/pdk/src/index.ts +++ b/infra/pdk/src/index.ts @@ -5,3 +5,6 @@ export * from './commands'; export * from './cli'; +export * from './config'; +export * from './utils/config'; +export * from './types'; diff --git a/infra/pdk/src/types.ts b/infra/pdk/src/types.ts index 14e83125c3..585caa14a6 100644 --- a/infra/pdk/src/types.ts +++ b/infra/pdk/src/types.ts @@ -4,118 +4,392 @@ */ /** - * Type definitions for PDK + * Type definitions for PDK (PNPM Dev Kit) + * + * CLI, Node.js API, and Config API are completely isomorphic: + * - CLI: pdk release --changelog --use-ai --dry-run + * - Node.js: release({ changelog: true, useAi: true, dryRun: true }) + * - Config: { changelog: true, useAi: true, dryRun: true } */ -// Package.json interface with minimal required fields +// ============================================================================= +// WORKSPACE AND PACKAGE MANAGEMENT TYPES +// ============================================================================= + +/** + * Minimal package.json interface with only essential fields for PDK + */ export interface PackageJson { + /** + * Package name for identification and publishing + */ name: string; + /** + * Current semantic version + */ version: string; + /** + * Whether this package should be excluded from publishing + */ private?: boolean; + /** + * Workspace patterns for monorepo coordination + */ workspaces?: string[]; + /** + * Runtime dependencies that affect publishing order + */ dependencies?: Record; + /** + * Development dependencies (not published) + */ devDependencies?: Record; + /** + * Peer dependencies that require version coordination + */ peerDependencies?: Record; + /** + * Build and development scripts + */ scripts?: Record; + /** + * Allow other package.json extensions without type conflicts + */ [key: string]: unknown; } -// Represents a package in a workspace +/** + * Package information within a workspace + */ export interface WorkspacePackage { + /** + * Package identifier for publishing and dependency resolution + */ name: string; + /** + * Current version before release + */ version: string; + /** + * File system location relative to workspace root + */ dir: string; + /** + * Parsed package.json content for dependency analysis + */ packageJson: PackageJson; + /** + * Whether this package should be skipped during publishing + */ isPrivate: boolean; } -// Workspace configuration +/** + * Workspace configuration and metadata + */ export interface WorkspaceConfig { + /** + * Absolute path to workspace root directory + */ rootPath: string; + /** + * Root package.json containing workspace configuration + */ rootPackageJson: PackageJson; + /** + * Glob patterns used to discover workspace packages + */ patterns: string[]; } -// Package with remote version info +/** + * Package with remote version information from registry + */ export interface PackageWithRemoteInfo extends WorkspacePackage { + /** + * Version currently published to the remote registry + */ remoteVersion: string; } -// Base command options -export interface CommandOptions { - cwd?: string; -} +// ============================================================================= +// OPTION GROUP TYPES (COMPOSABLE BUILDING BLOCKS) +// ============================================================================= -// Dev command options -export interface DevOptions extends CommandOptions { - exclude?: string[]; - packages?: string[]; -} - -// Release command options -export interface ReleaseOptions extends CommandOptions { +/** + * Core operational options used across all commands + */ +export interface CoreOptions { + /** + * Working directory for all operations (default: process.cwd()) + */ + cwd?: string; + /** + * Preview mode without making actual changes (default: false) + */ dryRun?: boolean; - changelog?: boolean; + /** + * Publish packages sequentially instead of in parallel (default: false) + */ runInBand?: boolean; + /** + * Skip npm scripts during operations (default: false) + */ ignoreScripts?: boolean; - build?: boolean | string; - pushTag?: boolean; + /** + * Prefix for git tags like 'v' for v1.0.0 (default: 'v') + */ tagPrefix?: string; - canary?: boolean; +} + +/** + * AI-powered changelog generation options + */ +export interface AIOptions { + /** + * Enable AI-powered changelog generation (default: false) + */ useAi?: boolean; + /** + * LLM model for AI changelog generation (default: 'gpt-4o') + */ model?: string; + /** + * API key for LLM service (can be set via environment) + */ apiKey?: string; + /** + * Custom base URL for LLM API (for custom endpoints) + */ baseURL?: string; + /** + * LLM provider (default: 'openai') + */ provider?: string; +} + +/** + * Changelog filtering and formatting options + */ +export interface ChangelogFilterOptions { + /** + * Scopes to include in changelog (empty array = include all) + */ filterScopes?: string[]; + /** + * Commit types to include in changelog (default: ['feat', 'fix']) + */ filterTypes?: string[]; +} + +/** + * Development mode specific options + */ +export interface DevSpecificOptions { + /** + * Packages to exclude from development startup + */ + exclude?: string[]; + /** + * Packages to start by default (empty = start all packages) + */ + packages?: string[]; +} + +/** + * Release workflow specific options + */ +export interface ReleaseSpecificOptions { + /** + * Generate changelog during release (default: true) + */ + changelog?: boolean; + /** + * Execute build script before publishing (false = skip, string = custom script) + */ + build?: boolean | string; + /** + * Automatically push git tags to remote (default: false) + */ + pushTag?: boolean; + /** + * Generate canary version without prompts (default: false) + */ + canary?: boolean; + /** + * Create GitHub release after successful release (default: false) + */ createGithubRelease?: boolean; + /** + * Automatically create release branch before release (default: false) + */ autoCreateReleaseBranch?: boolean; } -// Patch command options -export interface PatchOptions extends CommandOptions { +/** + * Patch operation specific options + */ +export interface PatchSpecificOptions { + /** + * Specific version to patch (reads from package.json if not provided) + */ version?: string; + /** + * Distribution tag for patch release (e.g., latest, next, beta) + */ tag?: string; - runInBand?: boolean; - ignoreScripts?: boolean; } -// Changelog command options -export interface ChangelogOptions extends CommandOptions { +/** + * Changelog generation specific options + */ +export interface ChangelogSpecificOptions { + /** + * Target version for changelog generation + */ version?: string; + /** + * Format changelog with markdown enhancements (default: false) + */ beautify?: boolean; + /** + * Create git commit for generated changelog (default: false) + */ commit?: boolean; + /** + * Push changelog commit to remote (default: false) + */ gitPush?: boolean; + /** + * Include author information in changelog (default: false) + */ attachAuthor?: boolean; + /** + * Author name format: 'name' or 'email' (default: 'name') + */ authorNameType?: 'name' | 'email'; - useAi?: boolean; - model?: string; - apiKey?: string; - baseURL?: string; - tagPrefix?: string; - dryRun?: boolean; - provider?: string; - filterScopes?: string[]; - filterTypes?: string[]; } -// Commit author information +/** + * GitHub release specific options + */ +export interface GitHubReleaseSpecificOptions { + /** + * Version for GitHub release (reads from package.json if not provided) + */ + version?: string; +} + +// ============================================================================= +// COMMAND OPTION TYPES (COMPOSED FROM BUILDING BLOCKS) +// ============================================================================= + +/** + * Common options available across all commands + */ +export interface CommonOptions extends + CoreOptions, + AIOptions, + ChangelogFilterOptions {} + +/** + * Development mode command options for selective package development + */ +export interface DevOptions extends CommonOptions, DevSpecificOptions {} + +/** + * Release command options for version management and publishing + */ +export interface ReleaseOptions extends CommonOptions, ReleaseSpecificOptions {} + +/** + * Patch command options for fixing failed releases + */ +export interface PatchOptions extends CommonOptions, PatchSpecificOptions {} + +/** + * Changelog generation command options + */ +export interface ChangelogOptions extends CommonOptions, ChangelogSpecificOptions {} + +/** + * GitHub release command options + */ +export interface GitHubReleaseOptions extends CommonOptions, GitHubReleaseSpecificOptions {} + +// ============================================================================= +// CHANGELOG AND GIT TYPES +// ============================================================================= + +/** + * Commit author information extracted from git history + */ export interface CommitAuthor { + /** + * Full author name from git config + */ name: string; + /** + * Author email address + */ email: string; + /** + * Email portion before @ for display purposes + */ emailName: string; } +/** + * Changelog section grouping commits by type + */ export interface ChangelogSection { + /** + * Conventional commit type (feat, fix, perf, etc.) + */ type: string; + /** + * Human-readable section title + */ title: string; + /** + * Commits belonging to this section + */ commits: import('tiny-conventional-commits-parser').GitCommit[]; } -// GitHub Release command options -export interface GitHubReleaseOptions extends CommandOptions { - version?: string; - tagPrefix?: string; - dryRun?: boolean; -} +// ============================================================================= +// CONFIGURATION TYPES (COMPREHENSIVE COMPOSITION) +// ============================================================================= + +/** + * PDK Configuration interface + * + * CLI, Node.js API, and Config API are completely isomorphic. + * All three use identical option names and structures. + * + * Config file preferences: project conventions, team settings, AI configuration + * CLI preferences: environment-specific options, one-time operations, sensitive data + */ +export interface PDKConfig extends + CoreOptions, + AIOptions, + ChangelogFilterOptions, + DevSpecificOptions, + ReleaseSpecificOptions, + PatchSpecificOptions, + ChangelogSpecificOptions, + GitHubReleaseSpecificOptions {} + +/** + * Loaded configuration with resolved defaults + */ +export interface LoadedConfig extends PDKConfig { + /** + * The final configuration with all defaults applied + * + * This is what should be used for all actual operations. It contains + * the complete configuration with all optional fields filled in with + * their default values. + */ + resolved: PDKConfig; +} \ No newline at end of file diff --git a/infra/pdk/src/utils/config.ts b/infra/pdk/src/utils/config.ts new file mode 100644 index 0000000000..02938b2b12 --- /dev/null +++ b/infra/pdk/src/utils/config.ts @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2025 Bytedance, Inc. and its affiliates. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Configuration loader for PDK + */ + +import { loadConfig } from '@tarko/config-loader'; +import type { LoadConfigOptions } from '@tarko/config-loader'; +import { join } from 'path'; + +import type { PDKConfig, LoadedConfig } from '../types'; + +/** + * Default configuration values + */ +const DEFAULT_CONFIG: Partial = { + // Core operational defaults + cwd: process.cwd(), + dryRun: false, // Opt-in safety feature + runInBand: false, // Optimize for speed by default + ignoreScripts: false, // Respect build scripts by default + tagPrefix: 'v', // Most common git tag convention + + // AI defaults - opt-in for security and cost reasons + useAi: false, // Prevent unexpected API calls/costs + provider: 'openai', // Most common LLM provider + model: 'gpt-4o', // Current best general-purpose model + + // Chelog filtering defaults + filterScopes: [], // Include all scopes by default + filterTypes: ['feat', 'fix'], // Most important change types +}; + +/** + * Configuration loader options + */ +interface PDKConfigLoaderOptions extends Omit { + cwd?: string; +} + +/** + * Loads PDK configuration from the specified directory + * + * Priority: CLI > Environment > Config File > Defaults + */ +export async function loadPDKConfig( + options: PDKConfigLoaderOptions = {}, +): Promise { + const { cwd = process.cwd(), ...loaderOptions } = options; + + try { + const result = await loadConfig({ + ...loaderOptions, + configFiles: ['pdk.config.ts', 'pdk.config.js', 'pdk.config.mjs', 'pdk.config.cjs'], + cwd, + }); + + return resolveConfig(result.content, cwd); + } catch (error) { + if ((error as Error).message.includes('not found')) { + return resolveConfig({}, cwd); + } + throw error; + } +} + +/** + * Resolves configuration with defaults + */ +function resolveConfig(config: PDKConfig, cwd: string): LoadedConfig { + const resolved: PDKConfig = { + ...DEFAULT_CONFIG, + cwd, + ...config, + }; + + return { + ...config, + resolved, + }; +} + +/** + * Merges CLI options with loaded configuration + * + * CLI options override config file options + */ +export function mergeOptions>( + cliOptions: T, + config: LoadedConfig, +): T { + return { + ...config.resolved, + ...cliOptions, + } as T; +} \ No newline at end of file diff --git a/infra/pdk/tsconfig.json b/infra/pdk/tsconfig.json index 46e626716a..c206213946 100644 --- a/infra/pdk/tsconfig.json +++ b/infra/pdk/tsconfig.json @@ -1,11 +1,11 @@ { - "include": [ - "src", - ], + "include": ["src"], "compilerOptions": { - "module": "ESNext", - "target": "ESNext", + "module": "ES2022", + "target": "ES2022", + "moduleDetection": "force", "moduleResolution": "bundler", + "types": ["node"], "sourceMap": true, "declaration": true, "declarationMap": true, diff --git a/infra/pnpm-lock.yaml b/infra/pnpm-lock.yaml index 48a583867e..f71693ed8c 100644 --- a/infra/pnpm-lock.yaml +++ b/infra/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: pdk: dependencies: + '@tarko/config-loader': + specifier: 0.3.0 + version: 0.3.0 '@tarko/model-provider': specifier: 0.3.0 version: 0.3.0 @@ -96,6 +99,9 @@ importers: typescript: specifier: 5.8.3 version: 5.8.3 + vitest: + specifier: 3.2.4 + version: 3.2.4(@types/node@22.15.30)(jiti@2.6.1) packages: @@ -169,6 +175,162 @@ packages: '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@google/generative-ai@0.14.1': resolution: {integrity: sha512-pevEyZCb0Oc+dYNlSberW8oZBm4ofeTD5wN01TowQMhTwdAbGAnJMtQzoklh6Blq2AKsx8Ox6FWa44KioZLZiA==} engines: {node: '>=18.0.0'} @@ -182,6 +344,9 @@ packages: '@types/node': optional: true + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@mistralai/mistralai@0.5.0': resolution: {integrity: sha512-56xfoC/0CiT0RFHrRNoJYSKCNc922EyHzEPJYY6ttalQ5KZdrNVgXeOetIGX0lDx7IjbxAJrrae2MQgUIlL9+g==} @@ -228,6 +393,116 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + '@rsbuild/core@1.5.17': resolution: {integrity: sha512-tHa4puv+pEooQvSewu/K5sm270nkVPcP07Ioz1c+fbFCrFpiZWV5XumgznilS80097glUrieN+9xTbIHGXjThQ==} engines: {node: '>=18.12.0'} @@ -321,6 +596,9 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@tarko/config-loader@0.3.0': + resolution: {integrity: sha512-AvhSE0KRixOigb4udPYcx0e0I2ODV5UvTx5UtsaoTol+28OIN/hsSX0ICkYCxb1mpTTeX4Cf8HHZXLThg9uYVA==} + '@tarko/llm-client@0.3.0': resolution: {integrity: sha512-HsfLxYQx1rKSvDGAlBOBAG1wfCLmyNt0QK6U/RoeK+L+L+dXlb62XtpyZTMNYxatNi/8sZkO81VuFsFrFAULTg==} @@ -330,6 +608,15 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/fs-extra@11.0.2': resolution: {integrity: sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==} @@ -367,6 +654,35 @@ packages: '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -416,6 +732,10 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -464,6 +784,10 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chalk@2.4.1: resolution: {integrity: sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==} engines: {node: '>=4'} @@ -479,6 +803,10 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@3.4.0: resolution: {integrity: sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==} engines: {node: '>= 8.10.0'} @@ -556,6 +884,10 @@ packages: supports-color: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -589,6 +921,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -597,6 +932,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -604,6 +944,9 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -624,6 +967,10 @@ packages: resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + express-rate-limit@7.5.1: resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} engines: {node: '>= 16'} @@ -647,6 +994,15 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -691,6 +1047,11 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -812,6 +1173,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jiti@2.6.1: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true @@ -819,6 +1184,13 @@ packages: jose@6.1.3: resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -836,6 +1208,12 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -882,6 +1260,11 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@5.1.6: resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} engines: {node: ^18 || >=20} @@ -967,14 +1350,32 @@ packages: path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pkce-challenge@5.0.1: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} @@ -1029,6 +1430,11 @@ packages: deprecated: Please upgrade to 4.3.1 or higher to fix a potentially damaging issue regarding symbolic link following. See https://github.com/isaacs/rimraf/issues/259 for details. hasBin: true + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + 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'} @@ -1105,6 +1511,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -1112,10 +1521,20 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1131,6 +1550,9 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -1152,6 +1574,28 @@ packages: tiny-conventional-commits-parser@0.0.1: resolution: {integrity: sha512-N5+AZWdBeHNSgTIaxvx0+9mFrnW4H1BbjQ84H7i3TuWSkno8Hju886hLaHZhE/hYEKrfrfl/uHurqpZJHDuYGQ==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1208,6 +1652,79 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@7.2.7: + resolution: {integrity: sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -1230,6 +1747,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -1323,6 +1845,84 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + + '@esbuild/android-arm64@0.25.12': + optional: true + + '@esbuild/android-arm@0.25.12': + optional: true + + '@esbuild/android-x64@0.25.12': + optional: true + + '@esbuild/darwin-arm64@0.25.12': + optional: true + + '@esbuild/darwin-x64@0.25.12': + optional: true + + '@esbuild/freebsd-arm64@0.25.12': + optional: true + + '@esbuild/freebsd-x64@0.25.12': + optional: true + + '@esbuild/linux-arm64@0.25.12': + optional: true + + '@esbuild/linux-arm@0.25.12': + optional: true + + '@esbuild/linux-ia32@0.25.12': + optional: true + + '@esbuild/linux-loong64@0.25.12': + optional: true + + '@esbuild/linux-mips64el@0.25.12': + optional: true + + '@esbuild/linux-ppc64@0.25.12': + optional: true + + '@esbuild/linux-riscv64@0.25.12': + optional: true + + '@esbuild/linux-s390x@0.25.12': + optional: true + + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + + '@esbuild/netbsd-x64@0.25.12': + optional: true + + '@esbuild/openbsd-arm64@0.25.12': + optional: true + + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + + '@esbuild/sunos-x64@0.25.12': + optional: true + + '@esbuild/win32-arm64@0.25.12': + optional: true + + '@esbuild/win32-ia32@0.25.12': + optional: true + + '@esbuild/win32-x64@0.25.12': + optional: true + '@google/generative-ai@0.14.1': {} '@inquirer/external-editor@1.0.3(@types/node@22.15.30)': @@ -1332,6 +1932,8 @@ snapshots: optionalDependencies: '@types/node': 22.15.30 + '@jridgewell/sourcemap-codec@1.5.5': {} + '@mistralai/mistralai@0.5.0': dependencies: node-fetch: 2.7.0 @@ -1401,6 +2003,72 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + '@rsbuild/core@1.5.17': dependencies: '@rspack/core': 1.5.8(@swc/helpers@0.5.17) @@ -1481,6 +2149,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@tarko/config-loader@0.3.0': + dependencies: + jiti: 2.4.2 + js-yaml: 4.1.0 + '@tarko/llm-client@0.3.0(zod@3.25.36)': dependencies: '@anthropic-ai/sdk': 0.24.3 @@ -1512,6 +2185,15 @@ snapshots: tslib: 2.8.1 optional: true + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + '@types/fs-extra@11.0.2': dependencies: '@types/jsonfile': 6.1.4 @@ -1555,6 +2237,48 @@ snapshots: dependencies: '@types/node': 22.15.30 + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.2.4(vite@7.2.7(@types/node@22.15.30)(jiti@2.6.1))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.7(@types/node@22.15.30)(jiti@2.6.1) + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 + + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -1604,6 +2328,8 @@ snapshots: argparse@2.0.1: {} + assertion-error@2.0.1: {} + asynckit@0.4.0: {} base64-js@1.5.1: {} @@ -1666,6 +2392,14 @@ snapshots: camelcase@5.3.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chalk@2.4.1: dependencies: ansi-styles: 3.2.1 @@ -1684,6 +2418,8 @@ snapshots: chardet@2.1.1: {} + check-error@2.1.1: {} + chokidar@3.4.0: dependencies: anymatch: 3.1.3 @@ -1749,6 +2485,8 @@ snapshots: dependencies: ms: 2.1.3 + deep-eql@5.0.2: {} + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -1773,6 +2511,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -1784,10 +2524,43 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + etag@1.8.1: {} event-target-shim@5.0.1: {} @@ -1813,6 +2586,8 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.2 + expect-type@1.3.0: {} + express-rate-limit@7.5.1(express@5.2.1): dependencies: express: 5.2.1 @@ -1866,6 +2641,10 @@ snapshots: dependencies: reusify: 1.1.0 + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -1917,6 +2696,9 @@ snapshots: fsevents@2.1.3: optional: true + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} get-intrinsic@1.3.0: @@ -2036,10 +2818,18 @@ snapshots: isexe@2.0.0: {} + jiti@2.4.2: {} + jiti@2.6.1: {} jose@6.1.3: {} + js-tokens@9.0.1: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -2059,6 +2849,12 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + loupe@3.2.1: {} + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + math-intrinsics@1.1.0: {} media-typer@1.1.0: {} @@ -2090,6 +2886,8 @@ snapshots: mute-stream@0.0.8: {} + nanoid@3.3.11: {} + nanoid@5.1.6: {} negotiator@1.0.0: {} @@ -2159,10 +2957,24 @@ snapshots: path-to-regexp@8.3.0: {} + pathe@2.0.3: {} + + pathval@2.0.1: {} + + picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.3: {} + pkce-challenge@5.0.1: {} + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prettier@3.5.3: {} pretty-ms@9.3.0: @@ -2210,6 +3022,34 @@ snapshots: rimraf@4.1.0: {} + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + router@2.2.0: dependencies: debug: 4.4.3 @@ -2304,12 +3144,20 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} + source-map-js@1.2.1: {} + + stackback@0.0.2: {} + statuses@2.0.2: {} + std-env@3.10.0: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -2326,6 +3174,10 @@ snapshots: strip-final-newline@4.0.0: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -2342,6 +3194,21 @@ snapshots: tiny-conventional-commits-parser@0.0.1: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -2378,6 +3245,81 @@ snapshots: vary@1.1.2: {} + vite-node@3.2.4(@types/node@22.15.30)(jiti@2.6.1): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.2.7(@types/node@22.15.30)(jiti@2.6.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@7.2.7(@types/node@22.15.30)(jiti@2.6.1): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 22.15.30 + fsevents: 2.3.3 + jiti: 2.6.1 + + vitest@3.2.4(@types/node@22.15.30)(jiti@2.6.1): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(vite@7.2.7(@types/node@22.15.30)(jiti@2.6.1)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.2.7(@types/node@22.15.30)(jiti@2.6.1) + vite-node: 3.2.4(@types/node@22.15.30)(jiti@2.6.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 22.15.30 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -2397,6 +3339,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@3.1.0: dependencies: string-width: 4.2.3 diff --git a/infra/tsconfig.json b/infra/tsconfig.json new file mode 100644 index 0000000000..96841c58ab --- /dev/null +++ b/infra/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "module": "ES2022", + "target": "ES2022", + "moduleDetection": "force", + "moduleResolution": "bundler", + "types": ["node"], + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "noEmitOnError": true, + "skipLibCheck": true, + "esModuleInterop": true, + "jsx": "react", + "noEmit": false, + "baseUrl": "." + } +} \ No newline at end of file diff --git a/multimodal/package.json b/multimodal/package.json index 1484d0f4da..d63c656d5d 100644 --- a/multimodal/package.json +++ b/multimodal/package.json @@ -19,13 +19,13 @@ "test:watch": "vitest", "coverage": "vitest run --coverage", "format": "pnpm prettier --write .", - "release": "pdk release --push-tag --build --ignore-scripts --auto-create-release-branch --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all", - "release:dryrun": "pdk release --push-tag --build --ignore-scripts --auto-create-release-branch --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all --dry-run", - "release:canary": "pdk release --canary --push-tag --build --ignore-scripts --auto-create-release-branch --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all", - "release:full": "pdk release --push-tag --build --ignore-scripts --create-github-release --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all", - "release:ai": "pdk release --push-tag --build --ignore-scripts --use-ai --provider=azure-openai --model=aws_sdk_claude37_sonnet --baseURL=AWS_CLAUDE_API_BASE_URL --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all", - "release:ai:full": "pdk release --push-tag --build --ignore-scripts --use-ai --provider=azure-openai --model=aws_sdk_claude37_sonnet --baseURL=AWS_CLAUDE_API_BASE_URL --create-github-release --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all", - "release:ai:dryrun": "pdk release --push-tag --build --ignore-scripts --use-ai --provider=azure-openai --model=aws_sdk_claude37_sonnet --baseURL=AWS_CLAUDE_API_BASE_URL --filter-scopes=tars,agent,tarko,o-agent,tars-stack,browser,infra,mcp,all --dry-run", + "release": "pdk release", + "release:dryrun": "pdk release --dry-run", + "release:canary": "pdk release --canary", + "release:full": "pdk release --create-github-release", + "release:ai": "pdk release --use-ai", + "release:ai:full": "pdk release --use-ai --create-github-release", + "release:ai:dryrun": "pdk release --use-ai --dry-run", "github-release": "pdk github-release", "github-release:dryrun": "pdk github-release --dry-run", "changelog": "pdk changelog", @@ -36,7 +36,7 @@ "pnpm": "9" }, "devDependencies": { - "pnpm-dev-kit": "0.0.4", + "pnpm-dev-kit": "0.0.5-canary-7d05b7ce-20251213170600", "@types/node": "22.15.30", "@vitest/coverage-v8": "3.2.4", "doctoc": "2.2.1", diff --git a/multimodal/pdk.config.ts b/multimodal/pdk.config.ts new file mode 100644 index 0000000000..de4cfce6f8 --- /dev/null +++ b/multimodal/pdk.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from 'pnpm-dev-kit'; + +export default defineConfig({ + // Release defaults for multimodal workspace + pushTag: true, + build: true, + ignoreScripts: true, + autoCreateReleaseBranch: true, + + // Scope filtering for changelog + filterScopes: ['tars', 'agent', 'tarko', 'o-agent', 'tars-stack', 'browser', 'infra', 'mcp', 'all'], + + // AI changelog configuration (opt-in) + provider: 'azure-openai', + model: 'aws_sdk_claude37_sonnet', + baseURL: process.env.AWS_CLAUDE_API_BASE_URL, +}); \ No newline at end of file diff --git a/multimodal/pnpm-lock.yaml b/multimodal/pnpm-lock.yaml index e5de855d3e..5e3d4dc589 100644 --- a/multimodal/pnpm-lock.yaml +++ b/multimodal/pnpm-lock.yaml @@ -18,8 +18,8 @@ importers: specifier: 2.2.1 version: 2.2.1 pnpm-dev-kit: - specifier: 0.0.4 - version: 0.0.4(ws@8.18.3) + specifier: 0.0.5-canary-7d05b7ce-20251213170600 + version: 0.0.5-canary-7d05b7ce-20251213170600(ws@8.18.3) prettier: specifier: 3.5.3 version: 3.5.3 @@ -3259,12 +3259,6 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@manet/llm-client@0.0.4': - resolution: {integrity: sha512-Sbv/6RIBDlWbRaj5wIosXhgY108wcuiw3vb7+uZWa6puKIpORrv7nNdZWwM8/+MU2ryjNB0iew5p/y6vhF37mg==} - - '@manet/model-provider@0.0.4': - resolution: {integrity: sha512-2Av1pQs4wkwppyPF8SeN7T1w8d4wBTKZonP8kYOu8HGjlQv1GGokM7dNa2YyBbrkrn9p03f33XWnqBKGuuxZKA==} - '@mdx-js/loader@3.1.0': resolution: {integrity: sha512-xU/lwKdOyfXtQGqn3VnJjlDrmKXEvMi1mgYxVmukEUtVycIz1nh7oQ40bKTd4cA7rLStqu0740pnhGYxGoqsCg==} peerDependencies: @@ -5805,6 +5799,15 @@ packages: '@tanstack/virtual-core@3.13.12': resolution: {integrity: sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==} + '@tarko/config-loader@0.3.0': + resolution: {integrity: sha512-AvhSE0KRixOigb4udPYcx0e0I2ODV5UvTx5UtsaoTol+28OIN/hsSX0ICkYCxb1mpTTeX4Cf8HHZXLThg9uYVA==} + + '@tarko/llm-client@0.3.0': + resolution: {integrity: sha512-HsfLxYQx1rKSvDGAlBOBAG1wfCLmyNt0QK6U/RoeK+L+L+dXlb62XtpyZTMNYxatNi/8sZkO81VuFsFrFAULTg==} + + '@tarko/model-provider@0.3.0': + resolution: {integrity: sha512-QEwxbYpBmByWNBI4WrpjkqCPafIJHhaNm4EudHmgxb56b4r6MaE8oPDQhoGKeu1JK3GQTL0NOmu4PTn/nfDXVw==} + '@tavily/core@0.3.1': resolution: {integrity: sha512-7jyvPWG4Zjst0s4v0FMLO1f/dfHqs4FnqvKm86zOGYzXxSfxHu0isbLzlwjJad0csYwF0kifdlECTuNouHfr5A==} @@ -10339,8 +10342,8 @@ packages: engines: {node: '>=10'} hasBin: true - pnpm-dev-kit@0.0.4: - resolution: {integrity: sha512-ELwa0susr1SoleUkuEq5D8mwO0VaJ59Uolp1kQd2Bn/V1vNzfFv4LBDpsHuKHxanJB7rBRa7wFq66mpSYSVUTg==} + pnpm-dev-kit@0.0.5-canary-7d05b7ce-20251213170600: + resolution: {integrity: sha512-pdA+vl1fZE319wrSkY9cNFWq9DOx+zAN9nXjlhkggu7uwiBlYd7Ycba3ZzjjxBj2bkDj/g4pDKaom28J5MMwUA==} hasBin: true possible-typed-array-names@1.1.0: @@ -14705,31 +14708,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@manet/llm-client@0.0.4(ws@8.18.3)(zod@3.25.36)': - dependencies: - '@anthropic-ai/sdk': 0.24.3 - '@google/generative-ai': 0.14.1 - '@mistralai/mistralai': 0.5.0 - mime-types: 2.1.35 - nanoid: 5.1.5 - openai: 4.93.0(ws@8.18.3)(zod@3.25.36) - transitivePeerDependencies: - - encoding - - ws - - zod - - '@manet/model-provider@0.0.4(ws@8.18.3)': - dependencies: - '@manet/llm-client': 0.0.4(ws@8.18.3)(zod@3.25.36) - '@modelcontextprotocol/sdk': 1.16.0 - '@types/json-schema': 7.0.15 - openai: 4.93.0(ws@8.18.3)(zod@3.25.36) - zod: 3.25.36 - transitivePeerDependencies: - - encoding - - supports-color - - ws - '@mdx-js/loader@3.1.0(webpack@5.99.9)': dependencies: '@mdx-js/mdx': 3.1.1 @@ -20759,6 +20737,36 @@ snapshots: '@tanstack/virtual-core@3.13.12': {} + '@tarko/config-loader@0.3.0': + dependencies: + jiti: 2.4.2 + js-yaml: 4.1.0 + + '@tarko/llm-client@0.3.0(ws@8.18.3)(zod@3.25.36)': + dependencies: + '@anthropic-ai/sdk': 0.24.3 + '@google/generative-ai': 0.14.1 + '@mistralai/mistralai': 0.5.0 + mime-types: 2.1.35 + nanoid: 5.1.5 + openai: 4.93.0(ws@8.18.3)(zod@3.25.36) + transitivePeerDependencies: + - encoding + - ws + - zod + + '@tarko/model-provider@0.3.0(ws@8.18.3)': + dependencies: + '@modelcontextprotocol/sdk': 1.16.0 + '@tarko/llm-client': 0.3.0(ws@8.18.3)(zod@3.25.36) + '@types/json-schema': 7.0.15 + openai: 4.93.0(ws@8.18.3)(zod@3.25.36) + zod: 3.25.36 + transitivePeerDependencies: + - encoding + - supports-color + - ws + '@tavily/core@0.3.1': dependencies: axios: 1.9.0 @@ -25161,7 +25169,7 @@ snapshots: mcp-http-server@1.1.5: dependencies: - '@modelcontextprotocol/sdk': 1.12.1 + '@modelcontextprotocol/sdk': 1.16.0 express: 5.1.0 transitivePeerDependencies: - supports-color @@ -26569,9 +26577,10 @@ snapshots: bin-wrapper: 4.1.0 execa: 4.1.0 - pnpm-dev-kit@0.0.4(ws@8.18.3): + pnpm-dev-kit@0.0.5-canary-7d05b7ce-20251213170600(ws@8.18.3): dependencies: - '@manet/model-provider': 0.0.4(ws@8.18.3) + '@tarko/config-loader': 0.3.0 + '@tarko/model-provider': 0.3.0(ws@8.18.3) boxen: 4.2.0 cac: 6.7.14 chalk: 2.4.1