Important
This document is the Source of Truth for AI Agents interacting with the ForgeTS repository. It defines capabilities, operational boundaries, and integration patterns.
The ForgeTS is a monorepo offering a complete image optimization toolchain.
graph TD
A[Source Images] -->|Scanner| B(Input Descriptor)
B -->|Classifier| C{Classification}
C -->|Photo| D[Planner]
C -->|Screenshot| D
C -->|Icon| D
D -->|Config & Presets| E[Transform Plan]
E -->|Executor (Sharp)| F[Optimized Assets]
F -->|Manifest Gen| G[manifest.json]
G -->|Source Updater| H[Updated Source Code]
```mermaid
sequenceDiagram
participant CLI
participant Scanner
participant Classifier
participant Planner
participant Executor
participant ManifestGen
participant FileSystem
CLI->>Scanner: Scan(glob)
Scanner->>FileSystem: List Files
FileSystem-->>Scanner: File Paths
Scanner-->>CLI: Input Descriptors
loop For each File
CLI->>Classifier: Classify(Input)
Classifier-->>CLI: Classification (Photo/Icon/etc)
CLI->>Planner: Plan(Input, Classification, Config)
Planner-->>CLI: TransformPlan
CLI->>Executor: Execute(Plan)
Executor->>FileSystem: Read/Write Images
Executor-->>CLI: Result (Optimized Assets)
end
CLI->>ManifestGen: Generate Manifest
ManifestGen-->>FileSystem: Write manifest.json
| Capability | Description | Core Component |
| :--- | :--- | :--- |
| **Scanning & Discovery** | Locates source images using `fast-glob`. Automatically respects ignore patterns (`node_modules`, `dist`, output dir). | `packages/node/src/cli.ts` |
| **Intelligent Classification** | Analyzes image stats and metadata to classify assets as `photo`, `screenshot`, `icon`, `vector`, `text`, or `unknown`. | `HeuristicClassifier` |
| **Adaptive Planning** | Generates a deterministic `TransformPlan` based on image classification and configuration presets (e.g., `web-2025-balanced`). | `packages/core/src/planning/planner.ts` |
| **Execution Engine** | Processes images using `sharp`. Handles resizing, format conversion (AVIF/WebP), and metadata stripping. | `SharpAdapter` |
| **Manifest Generation** | Produces a `manifest.json` mapping original file paths to optimized, hash-named output files for cache-busting and runtime lookup. | `manifest.ts` |
| **Web Runtime** | Client-side SDK that uses `MutationObserver` to automatically swap image `src` attributes with optimized variants. | `@forge-ts/web` |
| **Quality Gating** | Enforces minimum quality standards (SSIM, PSNR) per classification type to ensure visual fidelity. | `QualityMetrics` |
## 2. Operational Guidance
### 2.1. CLI Operations (`@forge-ts/node`)
The primary interface for build-time optimization.
**Command Syntax:**
```bash
forge build [glob-pattern] [options]
Arguments:
glob-pattern: (Optional) Pattern to match source images. Default:**/*.{jpg,jpeg,png}.
Options:
-o, --out <dir>: Output directory. Default:public/images/optimized.-c, --clean: Empty the output directory before processing.-v, --verbose: Enable detailed logging (classification results, compression metrics).
Example Usage:
# Build optimized variants
./packages/node/bin/forge.js build 'public/images/*.{jpg,png}' --out public/optimized
# Update source files
./packages/node/bin/forge.js update-source --source 'src/**/*.html' --manifest public/optimized/manifest.jsonUpdate Source Command:
forge update-source [options]Options:
-m, --manifest <path>: Path to generic manifest. Defaultpublic/images/optimized/manifest.json.-s, --source <glob>: Source files to update. Defaultsrc/**/*.{html,js,ts,jsx,tsx}.--dry-run: Simulate changes.
Agents modifying configuration should adhere to the OptimizerConfig interface.
Schema Definition:
interface OptimizerConfig {
quality: number; // Global quality (0-100)
lossless: boolean; // Force lossless compression
stripMetadata: boolean; // Remove EXIF/ICC data
effort: number; // CPU effort (0-9)
formats: ('avif' | 'webp' | 'jpeg' | 'png')[]; // Target formats
presets?: Record<string, string>; // Map classification -> preset name
definedPresets?: Record<string, OptimizationPreset>;
qualityGates?: Record<ImageClassification, QualityMetrics>;
}Default Presets:
photo->web-2025-balanced(AVIF/WebP, Q80)screenshot->ui-assets-crisp(Near-lossless WebP, Q90)
Integration Pattern:
import { AutoOptimizer } from '@forge-ts/web';
// Initialize with a resolver function
const optimizer = new AutoOptimizer((src, width, format) => {
// Logic to map source path to optimized path (e.g., using manifest)
return resolveOptimizedUrl(src, format);
});
// Start observing the DOM
optimizer.start();- Runtime: Node.js v24.13.0+ (Strict Requirement).
- Native Modules: Depends on
sharp. Ensure native bindings are valid for the current OS/Arch.
- Input:
- File Paths (via CLI)
- Buffers (via Core API)
- Output:
- Optimizes images to
[content-hash]-[width]w-[options-hash].[format]. - Manifest format:
{ "entries": { "src/img.jpg": { "inputPath": "src/img.jpg", "contentHash": "...", "classification": "photo", "outputs": [ { "format": "avif", "path": "...", "size": 1024, "metrics": { "ssim": 0.98 } } ] } } }
- Optimizes images to
- Concurrency: Default local queue concurrency is 4. High-volume runs may require adjustment via code (currently hardcoded in CLI).
- Format Order: The
formatsarray in config determines generation order. - Classification: Heuristics are based on file stats and basic metadata. Overrides via config are not yet supported per-file.
# Install dependencies
pnpm install
# Build all packages
pnpm build# Run all tests
pnpm test
# Run specific package tests
pnpm --filter @forge-ts/core testNote
AI Agents should always verify pnpm build success after modifying core interfaces or CLI logic.