AgentSkillsCN

tsp-model

在创建、修改或记录 TypeSpec 领域模型时使用此技能。触发条件包括新增实体、值对象、枚举,扩展基础类型,或当用户被要求创建“TSP 模型”、“领域模型”、“实体”,或在 tsp/ 目录中处理文件时使用此技能。

SKILL.md
--- frontmatter
name: tsp-model
description: Use when creating, modifying, or documenting TypeSpec domain models. Triggers include adding new entities, value objects, enums, extending base types, or when asked to create a "tsp model", "domain model", "entity", or work with files in the tsp/ directory.

TypeSpec Domain Model Generation

Generate TypeSpec domain models following this project's conventions for Clean Architecture entities.

Directory Structure

code
tsp/
├── common/           # Base types, scalars, enums
│   ├── base.tsp      # BaseEntity, SoftDeletableEntity, AuditableEntity
│   ├── scalars.tsp   # UUID scalar type
│   ├── ask.tsp       # Askable interface pattern
│   └── enums/        # One file per enum
├── domain/           # Domain entities
│   ├── entities/     # One file per entity
│   └── value-objects/# Embedded value objects
├── agents/           # Agent system models
└── deployment/       # Deployment configuration models

File Conventions

One model per file - Each entity/enum/value-object gets its own file.

Naming:

  • Files: kebab-case.tsp (e.g., action-item.tsp)
  • Models: PascalCase (e.g., ActionItem)
  • Enums: PascalCase with values in PascalCase (e.g., TaskStatus.InProgress)

Required Template

Every .tsp file MUST follow this structure:

typespec
/**
 * @module Shep.Domain.Entities.<EntityName>
 *
 * Brief description of the entity's purpose.
 *
 * ## Entity Relationships (if applicable)
 * ASCII diagram showing relationships
 *
 * @see docs/concepts/<relevant-doc>.md
 * @see <related-entity>.tsp
 */
import "../../common/base.tsp";
import "../../common/scalars.tsp";
// other imports...

/**
 * Entity Name
 *
 * Detailed description.
 *
 * ## Properties
 *
 * | Property | Type | Required | Description |
 * |----------|------|----------|-------------|
 * | ...      | ...  | ...      | ...         |
 *
 * @example
 * ```json
 * { ... }
 * ```
 */
@doc("One-line description for OpenAPI")
model EntityName extends BaseEntity {
  /**
   * Property description.
   * @example "example value"
   */
  @doc("One-line property description")
  propertyName: PropertyType;
}

Base Types

Choose the right base:

Base TypeUse When
BaseEntityStandard entity with id, createdAt, updatedAt
SoftDeletableEntityEntity that can be soft-deleted (adds deletedAt)
AuditableEntityEntity needing audit trail (adds createdBy, updatedBy)

Enum Definition Pattern

typespec
/**
 * @module Shep.Common.Enums.<EnumName>
 */
/**
 * Enum description
 */
@doc("One-line enum description")
enum EnumName {
  @doc("Description of this value")
  ValueOne,

  @doc("Description of this value")
  ValueTwo,
}

Documentation Requirements

  1. Module JSDoc at file top with @module, relationships, @see links
  2. Model JSDoc with property table and JSON examples
  3. Property JSDoc with @example tags
  4. @doc() decorator on every model and property (for OpenAPI)

Validation Commands

After creating/modifying TypeSpec:

bash
pnpm tsp:compile    # Verify compilation
pnpm tsp:format     # Format TypeSpec files

Quick Reference

TaskLocationExample
New entitytsp/domain/entities/<name>.tspfeature.tsp
New enumtsp/common/enums/<name>.tsplifecycle.tsp
New value objecttsp/domain/value-objects/<name>.tspgantt.tsp
Agent modeltsp/agents/<name>.tspfeature-agent.tsp

Common Mistakes

  • Missing @doc() decorators - Required for OpenAPI generation
  • Forgetting index.tsp exports - Add to directory's index.tsp
  • Wrong import paths - Use relative paths from current file
  • Missing examples - Always include @example with realistic JSON