Files
automaker/libs/model-resolver
webdevcody 4b0d1399b1 feat: implement cursor model migration and enhance auto mode functionality
This commit introduces significant updates to the cursor model handling and auto mode features. The cursor model IDs have been standardized to a canonical format, ensuring backward compatibility while migrating legacy IDs. New endpoints for starting and stopping the auto mode loop have been added, allowing for better control over project-specific auto mode operations.

Key changes:
- Updated cursor model IDs to use the 'cursor-' prefix for consistency.
- Added new API endpoints: `/start` and `/stop` for managing auto mode.
- Enhanced the status endpoint to provide detailed project-specific auto mode information.
- Improved error handling and logging throughout the auto mode service.
- Migrated legacy model IDs to their canonical counterparts in various components.

This update aims to streamline the user experience and ensure a smooth transition for existing users while providing new functionalities.
2026-01-18 18:42:52 -05: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