diff --git a/CLAUDE.md b/CLAUDE.md index 1b4fef9e..f28c2c78 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -16,7 +16,6 @@ Output.ai is an AI framework for building reliable production-ready LLM workflow - HTTP: [sdk/http/README.md](sdk/http/README.md) - Credentials: [sdk/credentials/README.md](sdk/credentials/README.md) - Evals: [sdk/evals/README.md](sdk/evals/README.md) - - Framework: [sdk/framework/README.md](sdk/framework/README.md) - CLI: [sdk/cli/README.md](sdk/cli/README.md) - **Test examples**: See [test_workflows/](test_workflows/) directory diff --git a/RELEASING.md b/RELEASING.md index 6dc3b597..07dc26b8 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -14,7 +14,6 @@ This monorepo publishes the following packages to npm: | `@outputai/http` | `sdk/http` | HTTP client with tracing | | `@outputai/evals` | `sdk/evals` | Evaluation framework (LLM-as-judge) | | `@outputai/credentials` | `sdk/credentials` | Encrypted credential management | -| `@outputai/output` | `sdk/framework` | Umbrella package (re-exports all SDK packages) | | `output-api` | `api` | API server (private, Docker image only) | All `@outputai/*` packages and `output-api` are in a **fixed version group** — they always share the same version number and are bumped together. This is configured in `.changeset/config.json`. diff --git a/sdk/cli/src/commands/update.spec.ts b/sdk/cli/src/commands/update.spec.ts index a5d659b1..22a096e9 100644 --- a/sdk/cli/src/commands/update.spec.ts +++ b/sdk/cli/src/commands/update.spec.ts @@ -4,6 +4,7 @@ import Update from './update.js'; import { fetchLatestVersion, getGlobalInstalledVersion, + getLocalInstalledPackages, getLocalInstalledVersion, updateGlobal, updateLocal, @@ -15,6 +16,7 @@ import { confirm } from '#utils/prompt.js'; vi.mock( '#services/npm_update_service.js', () => ( { fetchLatestVersion: vi.fn(), getGlobalInstalledVersion: vi.fn(), + getLocalInstalledPackages: vi.fn(), getLocalInstalledVersion: vi.fn(), updateGlobal: vi.fn(), updateLocal: vi.fn(), @@ -44,6 +46,7 @@ describe( 'update command', () => { vi.clearAllMocks(); vi.mocked( fetchLatestVersion ).mockResolvedValue( '1.0.0' ); vi.mocked( getGlobalInstalledVersion ).mockResolvedValue( '0.8.4' ); + vi.mocked( getLocalInstalledPackages ).mockResolvedValue( [] ); vi.mocked( getLocalInstalledVersion ).mockResolvedValue( null ); vi.mocked( isOutdated ).mockReturnValue( true ); vi.mocked( confirm ).mockResolvedValue( true ); @@ -195,7 +198,50 @@ describe( 'update command', () => { } ); describe( 'local update', () => { - it( 'should prompt and update local install when outdated', async () => { + it( 'should prompt and update local SDK packages when outdated', async () => { + vi.mocked( getGlobalInstalledVersion ).mockResolvedValue( null ); + vi.mocked( getLocalInstalledPackages ) + .mockResolvedValueOnce( [ + { name: '@outputai/cli', version: '0.8.3' }, + { name: '@outputai/core', version: '0.8.3' }, + { name: '@outputai/http', version: '1.0.0' } + ] ) + .mockResolvedValueOnce( [ + { name: '@outputai/cli', version: '1.0.0' }, + { name: '@outputai/core', version: '1.0.0' }, + { name: '@outputai/http', version: '1.0.0' } + ] ); + vi.mocked( isOutdated ).mockImplementation( ( current, latest ) => current !== latest ); + + const cmd = createTestCommand( { cli: true } ); + await cmd.run(); + + expect( updateLocal ).toHaveBeenCalledWith( + process.cwd(), + [ '@outputai/cli', '@outputai/core', '@outputai/http' ], + '1.0.0' + ); + expect( confirm ).toHaveBeenCalledWith( + expect.objectContaining( { message: expect.stringContaining( 'Output SDK packages' ) } ) + ); + } ); + + it( 'should show local SDK packages as up to date', async () => { + vi.mocked( getGlobalInstalledVersion ).mockResolvedValue( null ); + vi.mocked( getLocalInstalledPackages ).mockResolvedValue( [ + { name: '@outputai/cli', version: '1.0.0' }, + { name: '@outputai/core', version: '1.0.0' } + ] ); + vi.mocked( isOutdated ).mockReturnValue( false ); + + const cmd = createTestCommand( { cli: true } ); + await cmd.run(); + + expect( updateLocal ).not.toHaveBeenCalled(); + expect( cmd.log ).toHaveBeenCalledWith( expect.stringContaining( 'up to date' ) ); + } ); + + it( 'should prompt and update legacy local install when outdated', async () => { vi.mocked( getLocalInstalledVersion ) .mockResolvedValueOnce( '0.8.3' ) .mockResolvedValueOnce( '1.0.0' ); diff --git a/sdk/cli/src/commands/update.ts b/sdk/cli/src/commands/update.ts index cb5189a0..7715a0c3 100644 --- a/sdk/cli/src/commands/update.ts +++ b/sdk/cli/src/commands/update.ts @@ -3,10 +3,12 @@ import { confirm } from '#utils/prompt.js'; import { fetchLatestVersion, getGlobalInstalledVersion, + getLocalInstalledPackages, getLocalInstalledVersion, updateGlobal, updateLocal, - isOutdated + isOutdated, + type LocalInstalledPackage } from '#services/npm_update_service.js'; import { ensureClaudePlugin } from '#services/coding_agents.js'; import { getErrorMessage } from '#utils/error_utils.js'; @@ -49,7 +51,7 @@ export default class Update extends Command { this.error( 'Could not fetch the latest version from npm. Check your network connection.' ); } - this.log( `\nLatest @outputai/cli version: v${latest}\n` ); + this.log( `\nLatest Output SDK version: v${latest}\n` ); await this.handleGlobalUpdate( latest ); await this.handleLocalUpdate( latest ); @@ -106,6 +108,12 @@ export default class Update extends Command { private async handleLocalUpdate( latest: string ): Promise { const cwd = process.cwd(); + const localPackages = await getLocalInstalledPackages( cwd ); + + if ( localPackages.length > 0 ) { + return this.handleLocalSdkPackageUpdate( cwd, latest, localPackages ); + } + const localVersion = await getLocalInstalledVersion( cwd ); if ( !localVersion ) { @@ -128,7 +136,7 @@ export default class Update extends Command { } try { - await updateLocal( cwd ); + await updateLocal( cwd, [ '@outputai/cli' ], latest ); const newLocalVersion = await getLocalInstalledVersion( cwd ); if ( newLocalVersion ) { @@ -136,8 +144,8 @@ export default class Update extends Command { if ( isOutdated( newLocalVersion, latest ) ) { this.warn( - `Your package.json constrains @outputai/output which limits @outputai/cli to v${newLocalVersion}. ` + - 'Update the @outputai/output version range in package.json to get the latest CLI.' + `Your package.json constrains @outputai/cli to v${newLocalVersion}. ` + + 'Update your Output SDK package version ranges to get the latest CLI.' ); } } else { @@ -150,4 +158,55 @@ export default class Update extends Command { return false; } } + + private async handleLocalSdkPackageUpdate( + cwd: string, + latest: string, + localPackages: LocalInstalledPackage[] + ): Promise { + const outdatedPackages = localPackages.filter( pkg => isOutdated( pkg.version, latest ) ); + + if ( outdatedPackages.length === 0 ) { + this.log( '\nLocal Output SDK packages: up to date' ); + return false; + } + + this.log( '\nLocal Output SDK packages:' ); + for ( const pkg of localPackages ) { + const suffix = isOutdated( pkg.version, latest ) ? ` -> v${latest}` : ' (up to date)'; + this.log( ` ${pkg.name}: v${pkg.version}${suffix}` ); + } + + const shouldUpdate = await confirm( { + message: `Update local Output SDK packages to v${latest}?` + } ); + + if ( !shouldUpdate ) { + return false; + } + + const packageNames = localPackages.map( pkg => pkg.name ); + + try { + await updateLocal( cwd, packageNames, latest ); + const newLocalPackages = await getLocalInstalledPackages( cwd ); + + if ( newLocalPackages.length > 0 ) { + this.log( `\nLocal Output SDK packages updated to v${latest}` ); + + const stalePackages = newLocalPackages.filter( pkg => isOutdated( pkg.version, latest ) ); + if ( stalePackages.length > 0 ) { + const staleNames = stalePackages.map( pkg => `${pkg.name}@${pkg.version}` ).join( ', ' ); + this.warn( `Some Output SDK packages are still behind v${latest}: ${staleNames}` ); + } + } else { + this.log( '\nLocal update completed (could not verify new versions)' ); + } + + return true; + } catch ( error: unknown ) { + this.warn( `Failed to update local install: ${getErrorMessage( error )}` ); + return false; + } + } } diff --git a/sdk/cli/src/services/npm_update_service.spec.ts b/sdk/cli/src/services/npm_update_service.spec.ts index d9eeda8b..5131cd5b 100644 --- a/sdk/cli/src/services/npm_update_service.spec.ts +++ b/sdk/cli/src/services/npm_update_service.spec.ts @@ -1,25 +1,37 @@ import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { EventEmitter } from 'node:events'; import { fetchLatestVersion, getGlobalInstalledVersion, + getLocalInstalledPackages, getLocalInstalledVersion, + updateLocal, isOutdated } from './npm_update_service.js'; -const { mockExecFile } = vi.hoisted( () => ( { mockExecFile: vi.fn() } ) ); +const { mockExecFile, mockReadFile, mockSpawn } = vi.hoisted( () => ( { + mockExecFile: vi.fn(), + mockReadFile: vi.fn(), + mockSpawn: vi.fn() +} ) ); vi.mock( 'node:child_process', () => ( { execFile: vi.fn(), - spawn: vi.fn() + spawn: mockSpawn } ) ); vi.mock( 'node:util', () => ( { promisify: vi.fn( () => mockExecFile ) } ) ); +vi.mock( 'node:fs/promises', () => ( { + readFile: mockReadFile +} ) ); + describe( 'npm_update_service', () => { beforeEach( () => { vi.clearAllMocks(); + mockReadFile.mockResolvedValue( JSON.stringify( { dependencies: {} } ) ); } ); describe( 'fetchLatestVersion', () => { @@ -28,7 +40,7 @@ describe( 'npm_update_service', () => { const result = await fetchLatestVersion(); expect( result ).toBe( '1.2.3' ); - expect( mockExecFile ).toHaveBeenCalledWith( 'npm', [ 'view', '@outputai/cli', 'version' ] ); + expect( mockExecFile ).toHaveBeenCalledWith( 'npm', [ 'view', '@outputai/core', 'version' ] ); } ); it( 'should return null on empty output', async () => { @@ -112,6 +124,72 @@ describe( 'npm_update_service', () => { } ); } ); + describe( 'getLocalInstalledPackages', () => { + it( 'should return directly installed Output SDK package versions', async () => { + mockReadFile.mockResolvedValue( JSON.stringify( { + dependencies: { + '@outputai/cli': '0.8.3', + '@outputai/core': '0.8.3', + 'other-package': '1.0.0' + }, + devDependencies: { + '@outputai/llm': '0.8.3' + } + } ) ); + mockExecFile.mockImplementation( async ( _command, args ) => { + const packageName = args[1]; + return { + stdout: JSON.stringify( { + dependencies: { [packageName]: { version: '0.8.3' } } + } ) + }; + } ); + + const result = await getLocalInstalledPackages( '/some/project' ); + + expect( result ).toEqual( [ + { name: '@outputai/cli', version: '0.8.3' }, + { name: '@outputai/core', version: '0.8.3' }, + { name: '@outputai/llm', version: '0.8.3' } + ] ); + expect( mockExecFile ).toHaveBeenCalledWith( + 'npm', [ 'ls', '@outputai/cli', '--json' ], { cwd: '/some/project' } + ); + expect( mockExecFile ).toHaveBeenCalledWith( + 'npm', [ 'ls', '@outputai/core', '--json' ], { cwd: '/some/project' } + ); + expect( mockExecFile ).toHaveBeenCalledWith( + 'npm', [ 'ls', '@outputai/llm', '--json' ], { cwd: '/some/project' } + ); + } ); + + it( 'should return an empty list when package.json cannot be read', async () => { + mockReadFile.mockRejectedValue( new Error( 'missing package.json' ) ); + + const result = await getLocalInstalledPackages( '/some/project' ); + + expect( result ).toEqual( [] ); + expect( mockExecFile ).not.toHaveBeenCalled(); + } ); + } ); + + describe( 'updateLocal', () => { + it( 'should install local packages at the target version exactly', async () => { + const proc = new EventEmitter(); + mockSpawn.mockReturnValue( proc ); + + const promise = updateLocal( '/some/project', [ '@outputai/cli', '@outputai/core' ], '1.0.0' ); + proc.emit( 'close', 0 ); + await promise; + + expect( mockSpawn ).toHaveBeenCalledWith( + 'npm', + [ 'install', '--ignore-scripts', '--save-exact', '@outputai/cli@1.0.0', '@outputai/core@1.0.0' ], + { cwd: '/some/project', stdio: 'inherit' } + ); + } ); + } ); + describe( 'isOutdated', () => { it( 'should return true when latest is newer', () => { expect( isOutdated( '0.8.4', '0.8.5' ) ).toBe( true ); diff --git a/sdk/cli/src/services/npm_update_service.ts b/sdk/cli/src/services/npm_update_service.ts index e64abbea..ef043cab 100644 --- a/sdk/cli/src/services/npm_update_service.ts +++ b/sdk/cli/src/services/npm_update_service.ts @@ -1,4 +1,6 @@ import { execFile as execFileCb, spawn } from 'node:child_process'; +import { readFile } from 'node:fs/promises'; +import path from 'node:path'; import { promisify } from 'node:util'; import debugFactory from 'debug'; import semver from 'semver'; @@ -7,21 +9,35 @@ import packageJson from '../../package.json' with { type: 'json' }; const execFile = promisify( execFileCb ); const debug = debugFactory( 'output-cli:npm-update' ); -const PACKAGE_NAME = packageJson.name; +const CLI_PACKAGE_NAME = packageJson.name; +const VERSION_SOURCE_PACKAGE_NAME = '@outputai/core'; +export const LOCAL_SDK_PACKAGE_NAMES = [ + '@outputai/cli', + '@outputai/core', + '@outputai/http', + '@outputai/llm', + '@outputai/credentials', + '@outputai/evals' +] as const; /* eslint-disable @typescript-eslint/no-explicit-any */ -function findVersionInTree( deps: Record | undefined ): string | null { +export interface LocalInstalledPackage { + name: string; + version: string; +} + +function findVersionInTree( deps: Record | undefined, packageName: string ): string | null { if ( !deps ) { return null; } - if ( deps[PACKAGE_NAME]?.version ) { - return deps[PACKAGE_NAME].version; + if ( deps[packageName]?.version ) { + return deps[packageName].version; } for ( const dep of Object.values( deps ) ) { - const found = findVersionInTree( dep.dependencies ); + const found = findVersionInTree( dep.dependencies, packageName ); if ( found ) { return found; } @@ -30,18 +46,35 @@ function findVersionInTree( deps: Record | undefined ): string | nu return null; } -function parseNpmLsVersion( output: string ): string | null { +function parseNpmLsVersion( output: string, packageName: string ): string | null { try { const parsed = JSON.parse( output ); - return findVersionInTree( parsed.dependencies ); + return findVersionInTree( parsed.dependencies, packageName ); } catch { return null; } } +async function readDirectOutputDependencies( cwd: string ): Promise> { + try { + const raw = await readFile( path.join( cwd, 'package.json' ), 'utf-8' ); + const pkg = JSON.parse( raw ) as { + dependencies?: Record; + devDependencies?: Record; + }; + return new Set( [ + ...Object.keys( pkg.dependencies ?? {} ), + ...Object.keys( pkg.devDependencies ?? {} ) + ] ); + } catch ( error ) { + debug( 'Failed to read local package.json: %O', error ); + return new Set(); + } +} + export async function fetchLatestVersion(): Promise { try { - const { stdout } = await execFile( 'npm', [ 'view', PACKAGE_NAME, 'version' ] ); + const { stdout } = await execFile( 'npm', [ 'view', VERSION_SOURCE_PACKAGE_NAME, 'version' ] ); const version = stdout.trim(); return version || null; } catch ( error ) { @@ -52,8 +85,8 @@ export async function fetchLatestVersion(): Promise { export async function getGlobalInstalledVersion(): Promise { try { - const { stdout } = await execFile( 'npm', [ 'ls', '-g', PACKAGE_NAME, '--json' ] ); - return parseNpmLsVersion( stdout ); + const { stdout } = await execFile( 'npm', [ 'ls', '-g', CLI_PACKAGE_NAME, '--json' ] ); + return parseNpmLsVersion( stdout, CLI_PACKAGE_NAME ); } catch ( error ) { debug( 'Failed to get global version: %O', error ); return null; @@ -62,14 +95,34 @@ export async function getGlobalInstalledVersion(): Promise { export async function getLocalInstalledVersion( cwd: string ): Promise { try { - const { stdout } = await execFile( 'npm', [ 'ls', PACKAGE_NAME, '--json' ], { cwd } ); - return parseNpmLsVersion( stdout ); + const { stdout } = await execFile( 'npm', [ 'ls', CLI_PACKAGE_NAME, '--json' ], { cwd } ); + return parseNpmLsVersion( stdout, CLI_PACKAGE_NAME ); } catch ( error ) { debug( 'Failed to get local version: %O', error ); return null; } } +export async function getLocalInstalledPackages( cwd: string ): Promise { + const directDeps = await readDirectOutputDependencies( cwd ); + const packageNames: string[] = LOCAL_SDK_PACKAGE_NAMES.filter( name => directDeps.has( name ) ); + + const versions = await Promise.all( + packageNames.map( async name => { + try { + const { stdout } = await execFile( 'npm', [ 'ls', name, '--json' ], { cwd } ); + const version = parseNpmLsVersion( stdout, name ); + return version ? { name, version } : null; + } catch ( error ) { + debug( 'Failed to get local version for %s: %O', name, error ); + return null; + } + } ) + ); + + return versions.filter( ( item ): item is LocalInstalledPackage => item !== null ); +} + function spawnInherit( command: string, args: string[], cwd?: string ): Promise { return new Promise( ( resolve, reject ) => { const proc = spawn( command, args, { cwd, stdio: 'inherit' } ); @@ -86,11 +139,12 @@ function spawnInherit( command: string, args: string[], cwd?: string ): Promise< } export async function updateGlobal(): Promise { - await spawnInherit( 'npm', [ 'install', '-g', '--ignore-scripts', `${PACKAGE_NAME}@latest` ] ); + await spawnInherit( 'npm', [ 'install', '-g', '--ignore-scripts', `${CLI_PACKAGE_NAME}@latest` ] ); } -export async function updateLocal( cwd: string ): Promise { - await spawnInherit( 'npm', [ 'update', '--ignore-scripts', PACKAGE_NAME ], cwd ); +export async function updateLocal( cwd: string, packageNames: string[], version: string ): Promise { + const packages = packageNames.map( name => `${name}@${version}` ); + await spawnInherit( 'npm', [ 'install', '--ignore-scripts', '--save-exact', ...packages ], cwd ); } export function isOutdated( current: string, latest: string ): boolean { diff --git a/sdk/cli/src/templates/project/package.json.template b/sdk/cli/src/templates/project/package.json.template index 0a7fd8a6..99441b09 100644 --- a/sdk/cli/src/templates/project/package.json.template +++ b/sdk/cli/src/templates/project/package.json.template @@ -13,7 +13,12 @@ "output:dev": "output dev" }, "dependencies": { - "@outputai/output": "{{frameworkVersion}}" + "@outputai/core": "{{frameworkVersion}}", + "@outputai/cli": "{{frameworkVersion}}", + "@outputai/http": "{{frameworkVersion}}", + "@outputai/llm": "{{frameworkVersion}}", + "@outputai/credentials": "{{frameworkVersion}}", + "@outputai/evals": "{{frameworkVersion}}" }, "devDependencies": { "@types/node": "24.5.2", diff --git a/sdk/framework/CHANGELOG.md b/sdk/framework/CHANGELOG.md deleted file mode 100644 index 7303b572..00000000 --- a/sdk/framework/CHANGELOG.md +++ /dev/null @@ -1,374 +0,0 @@ -# @outputai/output - -## 0.6.0 - -### Patch Changes - -- Updated dependencies [bdf47aa] -- Updated dependencies [69060d7] -- Updated dependencies [69060d7] - - @outputai/core@0.6.0 - - @outputai/cli@0.6.0 - - @outputai/credentials@0.6.0 - - @outputai/evals@0.6.0 - - @outputai/http@0.6.0 - - @outputai/llm@0.6.0 - -## 0.5.2 - -### Patch Changes - -- Updated dependencies [b54869d] -- Updated dependencies [17d8711] -- Updated dependencies [8738f60] -- Updated dependencies [93dd22e] -- Updated dependencies [cc8a372] - - @outputai/http@0.5.2 - - @outputai/core@0.5.2 - - @outputai/cli@0.5.2 - - @outputai/credentials@0.5.2 - - @outputai/evals@0.5.2 - - @outputai/llm@0.5.2 - -## 0.5.1 - -### Patch Changes - -- Updated dependencies [93f660c] -- Updated dependencies [8e45051] - - @outputai/core@0.5.1 - - @outputai/cli@0.5.1 - - @outputai/credentials@0.5.1 - - @outputai/evals@0.5.1 - - @outputai/http@0.5.1 - - @outputai/llm@0.5.1 - -## 0.5.0 - -### Patch Changes - -- Updated dependencies [43c9293] -- Updated dependencies [d085dde] -- Updated dependencies [d43aa3d] -- Updated dependencies [ae3ab85] -- Updated dependencies [6bc541c] -- Updated dependencies [d43aa3d] - - @outputai/core@0.5.0 - - @outputai/http@0.5.0 - - @outputai/llm@0.5.0 - - @outputai/cli@0.5.0 - - @outputai/credentials@0.5.0 - - @outputai/evals@0.5.0 - -## 0.4.0 - -### Patch Changes - -- Updated dependencies [6137ea6] -- Updated dependencies [b23002f] -- Updated dependencies [e8eff63] -- Updated dependencies [33928d3] -- Updated dependencies [32f4d87] -- Updated dependencies [b4a190e] -- Updated dependencies [2650161] -- Updated dependencies [7ccc4fe] - - @outputai/cli@0.4.0 - - @outputai/llm@0.4.0 - - @outputai/core@0.4.0 - - @outputai/credentials@0.4.0 - - @outputai/evals@0.4.0 - - @outputai/http@0.4.0 - -## 0.3.2 - -### Patch Changes - -- Updated dependencies [1282dcf] - - @outputai/cli@0.3.2 - - @outputai/core@0.3.2 - - @outputai/credentials@0.3.2 - - @outputai/evals@0.3.2 - - @outputai/http@0.3.2 - - @outputai/llm@0.3.2 - -## 0.3.1 - -### Patch Changes - -- Updated dependencies [00e0047] - - @outputai/llm@0.3.1 - - @outputai/cli@0.3.1 - - @outputai/core@0.3.1 - - @outputai/credentials@0.3.1 - - @outputai/evals@0.3.1 - - @outputai/http@0.3.1 - -## 0.3.0 - -### Patch Changes - -- b87b58f: ## Dependencies updates - - ### Vulnerabilities fixed: - - - uuid: Missing buffer bounds check in v3/v5/v6 when buf: (bump to `>=14.0.0`) - - postcss: PostCSS has XSS via Unescaped in its CSS Stringify Output (bump to `>=8.5.10`) - - @anthropic-ai/sdk: Claude SDK for TypeScript has Insecure Default File Permissions in Local Filesystem Memory Tool (bump to `>=0.91.1`) - - ### Root package.json updates - - - @changesets/cli: `2.30.0` -> `2.31.0` - - eslint: `10.2.0` -> `10.2.1` - - mintlify: `4.2.520` -> `4.2.536` - - typescript-eslint: `8.58.2` -> `8.59.1` - - vitest: `4.1.4` -> `4.1.5` - - ### pnpm-workspace.yaml (catalog) updates - - - @aws-sdk/client-s3: `3.1031.0` -> `3.1038.0` - - ### sdk/cli/package.json updates - - - @inquirer/prompts: `8.4.1` -> `8.4.2` - - @oclif/core: `4.10.5` -> `4.10.6` - - @oclif/plugin-help: `6.2.44` -> `6.2.45` - - undici: `8.0.2` -> `catalog:` - - orval: `8.8.0` -> `8.9.0` - - ### sdk/llm/package.json updates - - - @ai-sdk/amazon-bedrock: `4.0.95` -> `4.0.96` - - liquidjs: `10.25.5` -> `10.25.7` - -- Updated dependencies [8836247] -- Updated dependencies [2809e50] -- Updated dependencies [b87b58f] -- Updated dependencies [bc8ccee] -- Updated dependencies [05462f4] -- Updated dependencies [2ddcc3e] -- Updated dependencies [6cd5716] -- Updated dependencies [899ddaf] -- Updated dependencies [756d32d] -- Updated dependencies [7fd86e7] -- Updated dependencies [7e1c76d] -- Updated dependencies [52e960c] -- Updated dependencies [0cbee89] -- Updated dependencies [6499038] -- Updated dependencies [bd54540] -- Updated dependencies [23c3ed0] -- Updated dependencies [815b3a9] -- Updated dependencies [fd72d95] -- Updated dependencies [f1502fb] - - @outputai/cli@0.3.0 - - @outputai/core@0.3.0 - - @outputai/llm@0.3.0 - - @outputai/credentials@0.3.0 - - @outputai/evals@0.3.0 - - @outputai/http@0.3.0 - -## 0.2.0 - -### Patch Changes - -- f13723b: Updating dependencies: - - - @oclif/plugin-help - - dotenv - - json-schema-library - - react - - redis - - undici - - @noble/ciphers - - @ai-sdk/amazon-bedrock - - @ai-sdk/anthropic - - @ai-sdk/azure - - @ai-sdk/google-vertex - - @ai-sdk/openai - - @ai-sdk/perplexity - - ai - - liquidjs - - Adding version overrides to fix vulnerabilities: - - - vite@>=7.1.0 <=7.3.1: `>=7.3.2` - - hono@<4.12.12: `>=4.12.12` - - hono@>=4.0.0 <=4.12.11: `>=4.12.12` - - @hono/node-server@<1.19.13: `>=1.19.13` - - follow-redirects@<=1.15.11: `>=1.16.0` - - hono@<4.12.14: `>=4.12.14` - - axios@>=1.0.0 <1.15.0: `>=1.15.0` - - protobufjs@<7.5.5: `>=7.5.5` - -- Updated dependencies [91c5d78] -- Updated dependencies [455ac5e] -- Updated dependencies [b651368] -- Updated dependencies [cc1ead7] -- Updated dependencies [b3dea5c] -- Updated dependencies [0fd573d] -- Updated dependencies [4407119] -- Updated dependencies [320acd1] -- Updated dependencies [04243eb] -- Updated dependencies [f13723b] -- Updated dependencies [0bb44fb] -- Updated dependencies [ac8c0f7] - - @outputai/cli@0.2.0 - - @outputai/evals@0.2.0 - - @outputai/credentials@0.2.0 - - @outputai/core@0.2.0 - - @outputai/llm@0.2.0 - - @outputai/http@0.2.0 - -## 0.1.12 - -### Patch Changes - -- Updated dependencies [76bcede] -- Updated dependencies [5ef9a7c] -- Updated dependencies [3ed2168] -- Updated dependencies [0990e42] -- Updated dependencies [e3a6d72] - - @outputai/core@0.1.12 - - @outputai/llm@0.1.12 - - @outputai/cli@0.1.12 - - @outputai/credentials@0.1.12 - - @outputai/evals@0.1.12 - - @outputai/http@0.1.12 - -## 0.1.11 - -### Patch Changes - -- Updated dependencies [49171f5] -- Updated dependencies [7b8340c] -- Updated dependencies [e0a5d0f] -- Updated dependencies [c4f84d5] - - @outputai/cli@0.1.11 - - @outputai/core@0.1.11 - - @outputai/credentials@0.1.11 - - @outputai/evals@0.1.11 - - @outputai/http@0.1.11 - - @outputai/llm@0.1.11 - -## 0.1.10 - -### Patch Changes - -- 41ecc1b: Updating dependencies to latest and overriding version to fix vulnerabilities -- Updated dependencies [41ecc1b] - - @outputai/core@0.1.10 - - @outputai/cli@0.1.10 - - @outputai/llm@0.1.10 - - @outputai/credentials@0.1.10 - - @outputai/evals@0.1.10 - - @outputai/http@0.1.10 - -## 0.1.9 - -### Patch Changes - -- Updated dependencies [133551f] - - @outputai/cli@0.1.9 - - @outputai/core@0.1.9 - - @outputai/credentials@0.1.9 - - @outputai/evals@0.1.9 - - @outputai/http@0.1.9 - - @outputai/llm@0.1.9 - -## 0.1.8 - -### Patch Changes - -- Updated dependencies [f78154c] -- Updated dependencies [834d0aa] - - @outputai/llm@0.1.8 - - @outputai/cli@0.1.8 - - @outputai/core@0.1.8 - - @outputai/credentials@0.1.8 - - @outputai/evals@0.1.8 - - @outputai/http@0.1.8 - -## 0.1.7 - -### Patch Changes - -- ac7fc2b: Bumping dependecies minor, patch versions -- Updated dependencies [ac7fc2b] - - @outputai/core@0.1.7 - - @outputai/cli@0.1.7 - - @outputai/llm@0.1.7 - - @outputai/credentials@0.1.7 - - @outputai/evals@0.1.7 - - @outputai/http@0.1.7 - -## 0.1.6 - -### Patch Changes - -- Updated dependencies [2dba5c6] - - @outputai/cli@0.1.6 - - @outputai/core@0.1.6 - - @outputai/credentials@0.1.6 - - @outputai/evals@0.1.6 - - @outputai/http@0.1.6 - - @outputai/llm@0.1.6 - -## 0.1.5 - -### Patch Changes - -- Updated dependencies [a03318d] - - @outputai/cli@0.1.5 - - @outputai/core@0.1.5 - - @outputai/credentials@0.1.5 - - @outputai/evals@0.1.5 - - @outputai/http@0.1.5 - - @outputai/llm@0.1.5 - -## 0.1.4 - -### Patch Changes - -- b9b986d: Patching vulnerable dependencies -- Updated dependencies [b9b986d] - - @outputai/cli@0.1.4 - - @outputai/core@0.1.4 - - @outputai/credentials@0.1.4 - - @outputai/evals@0.1.4 - - @outputai/http@0.1.4 - - @outputai/llm@0.1.4 - -## 0.1.3 - -### Patch Changes - -- Updated dependencies [2547029] - - @outputai/core@0.1.3 - - @outputai/credentials@0.1.3 - - @outputai/cli@0.1.3 - - @outputai/evals@0.1.3 - - @outputai/http@0.1.3 - - @outputai/llm@0.1.3 - -## 0.1.2 - -### Patch Changes - -- Updated dependencies [5f1d559] - - @outputai/cli@0.1.2 - - @outputai/core@0.1.2 - - @outputai/credentials@0.1.2 - - @outputai/evals@0.1.2 - - @outputai/http@0.1.2 - - @outputai/llm@0.1.2 - -## 0.1.1 - -### Patch Changes - -- Updated dependencies [ec4c478] - - @outputai/core@0.1.1 - - @outputai/cli@0.1.1 - - @outputai/credentials@0.1.1 - - @outputai/evals@0.1.1 - - @outputai/http@0.1.1 - - @outputai/llm@0.1.1 diff --git a/sdk/framework/README.md b/sdk/framework/README.md deleted file mode 100644 index 9a7fcc6b..00000000 --- a/sdk/framework/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# @outputai/output - -Unified package for building durable LLM applications with the Output Framework. - -[![npm version](https://img.shields.io/npm/v/@outputai/output)](https://www.npmjs.com/package/@outputai/output) - -## Documentation -- [Getting Started](https://docs.output.ai/) -- [@outputai/core](https://docs.output.ai/packages/core) - Workflow orchestration and worker runtime -- [@outputai/llm](https://docs.output.ai/packages/llm) - LLM generation with prompt templating -- [@outputai/http](https://docs.output.ai/packages/http) - HTTP client with tracing -- [@outputai/cli](https://docs.output.ai/packages/cli) - CLI for creating and running workflows diff --git a/sdk/framework/package.json b/sdk/framework/package.json deleted file mode 100644 index b2f5bcf0..00000000 --- a/sdk/framework/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "@outputai/output", - "version": "0.6.0", - "description": "The Output.ai Framework", - "type": "module", - "dependencies": { - "@outputai/cli": "workspace:", - "@outputai/core": "workspace:", - "@outputai/credentials": "workspace:", - "@outputai/evals": "workspace:", - "@outputai/http": "workspace:", - "@outputai/llm": "workspace:" - }, - "license": "Apache-2.0", - "publishConfig": { - "access": "public" - }, - "repository": { - "type": "git", - "url": "https://github.com/growthxai/output" - }, - "keywords": [ - "temporal", - "workflow", - "llm", - "ai", - "sdk" - ] -}