eae-skill-router
npx skills add https://github.com/sapiencezk/eae-skills --skill eae-skill-router
Agent 安装分布
Skill 文档
EAE Skills Router
Router skill for EAE (EcoStruxure Automation Expert) development.
CRITICAL RULE – NEVER BYPASS SKILLS:
- ALWAYS use an EAE skill for ANY operation on EAE files (
.fbt,.adp,.dt,.cfg,.dfbproj, etc.)- This applies to BOTH creating AND modifying existing blocks
- NEVER directly read, edit, or write EAE files outside of a skill context
- When modifying an existing block, invoke the appropriate skill with the modification request
- The skill will handle reading, validating, and updating all related files correctly
What Are You Doing?
| Action | Use This Skill |
|---|---|
| Create OR modify a CAT block | /eae-cat |
| Create OR modify a Basic FB | /eae-basic-fb |
| Create OR modify a Composite FB | /eae-composite-fb |
| Create OR modify a DataType | /eae-datatype |
| Create OR modify an Adapter | /eae-adapter |
| Fork block from SE library to custom library | /eae-fork |
| Find/use Runtime.Base standard blocks | /eae-runtime-base |
| Find/use SE process blocks (motors, valves, PID) | /eae-se-process |
| Analyze project overview, quality, protocols | /eae-sln-overview |
| Validate naming conventions | /eae-naming-validator |
| Analyze performance/event storms | /eae-performance-analyzer |
What Are You Creating?
| Need | Block Type | Use This Skill |
|---|---|---|
| Full-featured block with HMI + OPC-UA + persistence | CAT Block | /eae-cat |
| State machine with algorithms (ST code) | Basic FB | /eae-basic-fb |
| Network of existing FBs wired together | Composite FB | /eae-composite-fb |
| Custom data structure (struct/enum/array) | DataType | /eae-datatype |
| Reusable bidirectional interface | Adapter | /eae-adapter |
Quick Decision Tree
What are you doing?
â
âââ Forking/copying block from SE library to custom library?
â âââ YES â /eae-fork (handles namespace migration)
â
âââ Creating a NEW block from scratch?
â â
â âââ Full block with HMI visualization, OPC-UA, or persistence?
â â âââ YES â /eae-cat (most common)
â â
â âââ Need algorithms or state logic?
â â âââ YES â /eae-basic-fb
â â
â âââ Composing existing FBs together (no HMI)?
â â âââ YES â /eae-composite-fb
â â
â âââ Custom data type (enum, struct, array)?
â â âââ YES â /eae-datatype
â â
â âââ Reusable interface pattern (socket/plug)?
â âââ YES â /eae-adapter
â
âââ Looking up existing blocks?
âââ Runtime.Base library â /eae-runtime-base
âââ SE process blocks â /eae-se-process
Triggers
Block Creation/Modification
/eae-cat– Create CAT block with HMI (most common)/eae-basic-fb– Create Basic FB/eae-composite-fb– Create Composite FB/eae-datatype– Create DataType/eae-adapter– Create Adapter/eae-fork– Fork block from SE library to custom library with namespace migration
Library Reference
/eae-runtime-base– Find/reference Runtime.Base standard library blocks/eae-se-process– Find/reference SE.App2Base and SE.App2CommonProcess blocks
Analysis & Validation
/eae-sln-overview– Project overview, quality score, protocols, libraries/eae-naming-validator– Validate SE naming conventions/eae-performance-analyzer– Detect event storms, analyze performance
Router
/eae-skill-router– This router (shows decision tree)
Quick Reference
| Type | Extension | Location | IEC61499Type | Features |
|---|---|---|---|---|
| CAT | .cfg |
IEC61499/{Name}/ |
CAT |
HMI + OPC-UA + Persistence |
| Basic FB | .fbt |
IEC61499/ |
Basic |
ECC + Algorithms |
| Composite FB | .fbt |
IEC61499/ |
Composite |
FBNetwork |
| DataType | .dt |
IEC61499/DataType/ |
DataType |
Struct/Enum/Array |
| Adapter | .adp |
IEC61499/ |
Adapter |
Socket/Plug Interface |
Common Rules
These rules apply to ALL block types. See common-rules.md for full details.
ID Generation
All Events and VarDeclarations need 16-character hex IDs:
# Generate GUID for FBType
[guid]::NewGuid()
# Generate hex ID for elements (16 chars)
[guid]::NewGuid().ToString("N").Substring(0,16).ToUpper()
dfbproj Registration
Every block must be registered in the library’s .dfbproj file:
<ItemGroup>
<Compile Include="BlockName.fbt">
<IEC61499Type>Basic</IEC61499Type>
</Compile>
</ItemGroup>
Critical XML Rules
| Rule | Applies To |
|---|---|
NO xmlns on root element |
FBType, AdapterType, DataType |
| DOCTYPE must reference correct DTD | All blocks |
Format="2.0" required |
Composite FB, CAT FB only |
| GUID required | All except DataType |
Troubleshooting
| Issue | Solution |
|---|---|
<FBType xmlns=...> was not expected |
Remove xmlns attribute from FBType |
| Block not in Solution Explorer | Register in .dfbproj file |
| DataType not found | Must be in DataType/ subfolder with .dt extension |
| Adapter won’t load | Use .adp extension, not .fbt |
| CAT block broken | Ensure all files in {Name}/ subfolder |
Scripts
Helper scripts for agentic operation are in scripts/. These are shared infrastructure used by all child skills.
Register Block in dfbproj (Universal)
Register any block type in the library’s dfbproj file. All child skills should use this script.
# Register with explicit type
python scripts/register_dfbproj.py MyBlock MyLib --type cat
python scripts/register_dfbproj.py MyBlock MyLib --type composite
python scripts/register_dfbproj.py MyBlock MyLib --type basic
python scripts/register_dfbproj.py MyBlock MyLib --type adapter
python scripts/register_dfbproj.py MyBlock MyLib --type datatype
# Auto-detect type from existing files
python scripts/register_dfbproj.py MyBlock MyLib
# Verify registration
python scripts/register_dfbproj.py MyBlock MyLib --verify
# Dry run (show what would happen)
python scripts/register_dfbproj.py MyBlock MyLib --dry-run
# Output as JSON
python scripts/register_dfbproj.py MyBlock MyLib --json
Supported types:
| Type | IEC61499Type | Extension | Subfolder |
|---|---|---|---|
cat |
CAT | .fbt + .cfg |
{Name}/ |
composite |
Composite | .fbt |
{Name}/ |
basic |
Basic | .fbt |
{Name}/ |
adapter |
Adapter | .adp |
{Name}/ |
datatype |
DataType | .dt |
DataType/ |
Exit codes:
0– Registration successful1– General error11– Registration issue
Generate IDs
Generate GUIDs and hex IDs for blocks:
# Generate 1 GUID + 1 hex ID (default)
python scripts/generate_ids.py
# Generate 5 hex IDs for Events/VarDeclarations
python scripts/generate_ids.py --hex 5
# Generate 2 GUIDs for multiple blocks
python scripts/generate_ids.py --guid 2
# Output as JSON for automation
python scripts/generate_ids.py --hex 4 --guid 1 --json
Validate Block
Validate .fbt, .adp, .dt files against EAE rules:
# Auto-detect block type and validate
python scripts/validate_block.py MyBlock.fbt
# Validate a CAT folder
python scripts/validate_block.py IEC61499/MyCAT/
# Specify block type explicitly
python scripts/validate_block.py --type basic MyBasicFB.fbt
# Output as JSON
python scripts/validate_block.py --json MyBlock.fbt
Exit codes:
0– Validation passed1– Error running validation10– Validation failed (errors found)
Cross-Validate Consistency
Verify consistency between files on disk and dfbproj registration:
# Validate a single block
python scripts/validate_consistency.py MyBlock SE.ScadapackWWW
# Validate all blocks in a library
python scripts/validate_consistency.py --all SE.ScadapackWWW
# Show fix commands for issues
python scripts/validate_consistency.py --fix --all SE.ScadapackWWW
# Output as JSON
python scripts/validate_consistency.py --json --all SE.ScadapackWWW
# Specify expected block type
python scripts/validate_consistency.py --type cat MyCAT SE.ScadapackWWW
What it checks:
| Check | Description |
|---|---|
| Files exist | Required files present for block type |
| Registration | Block registered in dfbproj |
| Type match | File type matches registration type |
| Orphans | Blocks in one location but not other |
Exit codes:
0– Validation passed (all consistent)1– Error running validation10– Validation failed (inconsistencies found)11– Registration issues (missing or wrong entries)
Track Blocks (State Management)
Track blocks created/forked during a session for rollback and audit:
# Add a block to tracking
python scripts/track_block.py add MyBlock SE.ScadapackWWW --type cat --operation fork --source SE.App2CommonProcess
# Add a created block
python scripts/track_block.py add MyBlock SE.ScadapackWWW --type basic --operation create
# Check block status
python scripts/track_block.py status MyBlock SE.ScadapackWWW
# Update status (e.g., mark as failed)
python scripts/track_block.py update MyBlock SE.ScadapackWWW --status failed --error "Build failed"
# Remove from tracking
python scripts/track_block.py remove MyBlock SE.ScadapackWWW
List Tracked Blocks
View all tracked blocks with filtering:
# List all tracked blocks
python scripts/list_tracked_blocks.py SE.ScadapackWWW
# Filter by status
python scripts/list_tracked_blocks.py SE.ScadapackWWW --status failed
# Filter by type
python scripts/list_tracked_blocks.py SE.ScadapackWWW --type cat
# Filter by operation
python scripts/list_tracked_blocks.py SE.ScadapackWWW --operation fork
# Show summary only
python scripts/list_tracked_blocks.py SE.ScadapackWWW --summary
# Clear tracking (start fresh)
python scripts/list_tracked_blocks.py SE.ScadapackWWW --clear
# JSON output
python scripts/list_tracked_blocks.py SE.ScadapackWWW --json
Tracking manifest location: {Library}/IEC61499/.eae-tracking/manifest.json
Rollback Operations
Undo failed or unwanted fork/create operations:
# Rollback a single block
python scripts/rollback_operation.py MyBlock SE.ScadapackWWW
# Rollback all failed blocks
python scripts/rollback_operation.py --all-failed SE.ScadapackWWW
# Preview without making changes
python scripts/rollback_operation.py --dry-run MyBlock SE.ScadapackWWW
# Skip confirmation prompt
python scripts/rollback_operation.py --force MyBlock SE.ScadapackWWW
# Specify block type if not tracked
python scripts/rollback_operation.py --type cat MyBlock SE.ScadapackWWW
# JSON output
python scripts/rollback_operation.py --json MyBlock SE.ScadapackWWW
What rollback does:
| Action | Description |
|---|---|
| Delete folders | IEC61499/{Block}/ and HMI/{Block}/ |
| Delete files | For DataTypes: .dt and .doc.xml files |
| Remove dfbproj | Removes ItemGroup entries |
| Remove csproj | For CAT blocks: removes HMI entries |
| Update tracking | Marks block as “rolled_back” |
Exit codes:
0– Rollback successful1– Error10– Block not found in tracking11– Rollback partially failed
Related Skills
| Skill | Description |
|---|---|
| eae-cat | CAT blocks with HMI, OPC-UA, persistence |
| eae-basic-fb | Basic FB with ECC and algorithms |
| eae-composite-fb | Composite FB with FBNetwork |
| eae-datatype | DataTypes (struct, enum, array, subrange) |
| eae-adapter | Adapter interfaces |
| eae-fork | Fork blocks from SE libraries with namespace migration |
| eae-runtime-base | Runtime.Base standard library reference |
| eae-se-process | SE.App2Base and SE.App2CommonProcess reference |