AgentSkillsCN

aurora-sheets-sync

实现 Aurora YAML 架构与 Google Sheets 之间的双向同步。触发条件:在将架构同步至或从电子表格中同步、执行推送/拉取命令,或进行 Google Sheets 同步时。

SKILL.md
--- frontmatter
name: aurora-sheets-sync
description: >
  Bidirectional sync between Aurora YAML schemas and Google Sheets.
  Trigger: When syncing schemas to/from spreadsheets, push/pull commands, google sheets sync.
license: MIT
metadata:
  author: aurora
  version: "2.0"
  auto_invoke: "sync schemas, google sheets, push schemas, pull schemas, spreadsheet sync"
allowed-tools: Read, Edit, Write, Glob, Grep, Bash

When to Use

  • User wants to sync YAML schemas to Google Sheets (push)
  • User wants to sync Google Sheets to YAML schemas (pull)
  • User mentions "sincronizar", "spreadsheet", "google sheets", "exportar schemas"
  • Troubleshooting sync issues or configuration problems

Critical Patterns

1. Spreadsheet Structure

SheetPurpose
DATADropdown values, validations (don't modify)
TEMPLATETemplate duplicated for new modules
MODULESIndex with hyperlinks to module sheets
{module-name}One sheet per module (e.g., business-partner)

2. Module Sheet Format

  • Row 1: Headers (read dynamically)
  • Row 2+: Properties (one per row)
  • Booleans: (CHAR 9989) = true, empty = false

3. Pull is Idempotent

Rule: If no content changes in spreadsheet, YAML files must NOT be modified.

typescript
// Content comparison before writing
if (normalizeYamlForComparison(existing) === normalizeYamlForComparison(new)) {
  // Skip write - preserves original formatting
}

4. Preserve Fields Not in Spreadsheet

Fields in YAML without spreadsheet columns are preserved on pull:

  • relationship.singularName, relationship.aggregateName, relationship.modulePath
  • relationship.key, relationship.field, relationship.avoidConstraint
  • webComponent

5. Field Mappings

Sheet ColumnYAML FieldNotes
relationshiprelationship.type1:1, N:1, 1:N, N:N
masterrelationship.modulePathModule name only
subtypearrayOptions.typeWhen type=array
valuesMultipleenumOptions, decimals, or arrayOptions.enumOptions
hasAuthhasOAuthHeader mapping

6. Array Format in YAML

Inline format [A, B, C]:

  • enumOptions
  • decimals
  • defaultValue (when array)

Multi-line format (for readability):

  • excludedOperations
  • excludedFiles

7. Nullable and DefaultValue Rules

  • nullable: If not checked (✓), defaults to false (never undefined)
  • defaultValue: Wrapped in array [value] when type=array
  • description: Format preserved even when field is renamed (matched by content)

Commands

bash
# Navigate to tool directory
cd scripts/aurora-sheets-sync

# Install dependencies (first time)
npm install

# Push: YAML → Google Sheets
npx ts-node src/index.ts push --bc business-partner-portal
npx ts-node src/index.ts push --all
npx ts-node src/index.ts push --bc iam --dry-run

# Pull: Google Sheets → YAML
npx ts-node src/index.ts pull --bc business-partner-portal
npx ts-node src/index.ts pull --bc iam --no-backup
npx ts-node src/index.ts pull --all --dry-run

# Validate connection
npx ts-node src/index.ts validate --bc business-partner-portal

# List configured bounded contexts
npx ts-node src/index.ts list

Configuration

aurora-sheets.config.json

json
{
  "credentialsPath": "./scripts/aurora-sheets-sync/credentials/service-account.json",
  "boundedContexts": {
    "business-partner-portal": {
      "spreadsheetId": "1ABC123xyz...",
      "description": "Business Partner Portal"
    }
  },
  "backupsPath": "backups/aurora-schemas",
  "cliterPath": "cliter"
}

Google Cloud Setup (Quick Reference)

  1. Create project in Google Cloud Console
  2. Enable Google Sheets API (APIs & Services → Library)
  3. Create Service Account (APIs & Services → Credentials)
  4. Download JSON key → save to credentials/service-account.json
  5. Share spreadsheet with service account email (Editor role)

Troubleshooting

ErrorSolution
The caller does not have permissionShare spreadsheet with service account email
Google Sheets API has not been enabledEnable API in Google Cloud Console
Could not load credentialsCheck credentialsPath in config
Skipped: X (empty or invalid)Sheet missing headers or name/type columns
Pull shows "(no changes)"Idempotent - content unchanged, file preserved

Key Files

code
scripts/aurora-sheets-sync/
├── src/
│   ├── index.ts                    # CLI entry point
│   ├── sync/
│   │   ├── yaml-to-sheet.ts        # Push logic
│   │   └── sheet-to-yaml.ts        # Pull logic (idempotent)
│   └── transformers/
│       └── property-transformer.ts  # YAML ↔ Row conversion
├── credentials/
│   └── service-account.json        # Google credentials (gitignored)
├── CONTEXT.md                      # Technical documentation
└── README.md                       # User guide

Resources