Files
automaker/libs/model-resolver
Kacper 49a5a7448c fix: Address PR review feedback for shared packages
This commit addresses all "Should Fix" items from the PR review:

1. Security Documentation (platform package)
   - Added comprehensive inline documentation in security.ts explaining
     why path validation is disabled
   - Added Security Model section to platform README.md
   - Documented rationale, implications, and future re-enabling steps

2. Model Resolver Tests
   - Created comprehensive test suite (34 tests, 100% coverage)
   - Added vitest configuration with strict coverage thresholds
   - Tests cover: alias resolution, full model strings, priority handling,
     edge cases, and integration scenarios
   - Updated package.json with test scripts and vitest dependency

3. Feature Loader Logging Migration
   - Replaced all console.log/warn/error calls with @automaker/utils logger
   - Consistent with rest of codebase logging pattern
   - Updated corresponding tests to match new logger format

4. Module Format Consistency
   - Verified all packages use consistent module formats (ESM)
   - No changes needed

All tests passing (632 tests across 31 test files).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 00:05:42 +01:00
..

@automaker/model-resolver

Claude model resolution and mapping utilities.

Overview

This package handles Claude model resolution, converting user-friendly aliases to actual Claude model identifiers and providing default model configurations.

Installation

npm install @automaker/model-resolver

Exports

Model Resolution

Convert model aliases to full model identifiers.

import { resolveModelString, DEFAULT_MODELS } from '@automaker/model-resolver';
import { CLAUDE_MODEL_MAP } from '@automaker/types';

// Resolve model string
const model = resolveModelString('sonnet');
// Returns: 'claude-sonnet-4-20250514'

const model2 = resolveModelString('haiku');
// Returns: 'claude-haiku-4-5'

const model3 = resolveModelString('opus');
// Returns: 'claude-opus-4-5-20251101'

// Use with custom default
const model4 = resolveModelString(undefined, 'claude-sonnet-4-20250514');
// Returns: 'claude-sonnet-4-20250514' (default)

// Direct model ID passthrough
const model5 = resolveModelString('claude-opus-4-5-20251101');
// Returns: 'claude-opus-4-5-20251101' (unchanged)

Get Effective Model

Get the actual model that will be used.

import { getEffectiveModel } from '@automaker/model-resolver';

// Get effective model with fallback chain
const model = getEffectiveModel({
  requestedModel: 'sonnet',
  featureModel: undefined,
  defaultModel: 'claude-sonnet-4-20250514'
});

Model Constants

Access model mappings and defaults.

import { DEFAULT_MODELS } from '@automaker/model-resolver';
import { CLAUDE_MODEL_MAP } from '@automaker/types';

// Default models for different contexts
console.log(DEFAULT_MODELS.claude);     // 'claude-sonnet-4-20250514'
console.log(DEFAULT_MODELS.autoMode);   // 'claude-sonnet-4-20250514'
console.log(DEFAULT_MODELS.chat);       // 'claude-sonnet-4-20250514'

// Model alias mappings
console.log(CLAUDE_MODEL_MAP.haiku);    // 'claude-haiku-4-5'
console.log(CLAUDE_MODEL_MAP.sonnet);   // 'claude-sonnet-4-20250514'
console.log(CLAUDE_MODEL_MAP.opus);     // 'claude-opus-4-5-20251101'

Usage Example

import { resolveModelString, DEFAULT_MODELS } from '@automaker/model-resolver';
import type { Feature } from '@automaker/types';

function prepareFeatureExecution(feature: Feature) {
  // Resolve model from feature or use default
  const model = resolveModelString(
    feature.model,
    DEFAULT_MODELS.autoMode
  );

  console.log(`Executing feature with model: ${model}`);

  return {
    featureId: feature.id,
    model,
    // ... other options
  };
}

// Example usage
const feature: Feature = {
  id: 'auth-feature',
  category: 'backend',
  description: 'Add authentication',
  model: 'opus' // User-friendly alias
};

prepareFeatureExecution(feature);
// Output: Executing feature with model: claude-opus-4-5-20251101

Supported Models

Current Model Aliases

  • haikuclaude-haiku-4-5
  • sonnetclaude-sonnet-4-20250514
  • opusclaude-opus-4-5-20251101

Model Selection Guide

  • Haiku: Fast responses, simple tasks, lower cost
  • Sonnet: Balanced performance, most tasks (recommended default)
  • Opus: Maximum capability, complex reasoning, highest cost

Dependencies

  • @automaker/types - Model type definitions and constants

Used By

  • @automaker/server - Feature execution, agent chat, enhancement

Notes

  • Model strings that don't match aliases are passed through unchanged
  • This allows direct use of specific model versions like claude-sonnet-4-20250514
  • Always falls back to a sensible default if no model is specified