🔗 Package Dependencies
Every import relationship listed in this document is sourced from actual grep over the source code (not speculation) and reflects the real internal dependencies among the pkg/ and cmd/ packages.
Dependency Graph
pkg/domain is highlighted in yellow — it is the neutral hub, depended on by multiple SDK packages while itself depending on no project-internal package.
Verified Import Inventory
🖥️ Application Layer → SDK / Base Layer
| Package | Internal Dependencies |
|---|---|
cmd/composer-skills | pkg/client, pkg/composer, pkg/domain |
🔌 SDK Layer → Base Layer
| Package | Internal Dependencies |
|---|---|
pkg/composer | pkg/detector, pkg/installer |
pkg/client | pkg/domain |
pkg/repository | pkg/domain |
🧱 Base Layer → Base Layer
| Package | Internal Dependencies |
|---|---|
pkg/installer | pkg/composerutils, pkg/composerutils/mock, pkg/detector |
pkg/detector | None (standard library only) |
pkg/composerutils | None (standard library only) |
pkg/domain | None (standard library only) |
Key Observations 🔍
pkg/domainis the neutral hub 🎯 — Bothpkg/clientandpkg/repositorydepend on it for return types, yetpkg/domainitself depends on no project-internal package.pkg/composerdoes not depend onpkg/domain⚠️ — The structured types returned by the CLI wrapper (AuditInfo,OutdatedInfo, etc.) are defined insidepkg/composerand are a separate set of types from the API model inpkg/domain.pkg/installeris the most-dependent package in the base layer 📦 — It needs detection (detector), download and file operations (composerutils), and mocks for testing.- The application layer depends on only three packages ✅ —
cmd/composer-skillsgets the full capability surface throughpkg/composerandpkg/client, never touching the base layer directly.
How to Verify
The dependencies in this table can be reproduced with the following command:
bash
grep -rh 'github.com/scagogogo/composer-skills/pkg/' pkg/ cmd/ --include='*.go' | grep -v _test.go | sort -uNo Circular Dependencies
Dependencies point strictly downward (Application Layer → SDK Layer → Base Layer); the base layer never imports upper layers in reverse, and the entire project is free of circular imports — the Go compiler rejects any real cycle.