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 @@
- 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