mcpField
P
pub-package-explorer

pub-package-explorer

github.com/hexsis-llcDevelopment172 installsUpdated 1w ago
Repository

About pub-package-explorer

A workflow for inspecting Dart or Flutter package source, including packages not yet added to a project. It resolves installed package paths from package_config.json or downloads source with dart pub unpack.

Key features

  1. 01Resolve installed package paths
  2. 02Inspect package source files
  3. 03Unpack packages before adding them
  4. 04Handle package versions
  5. 05Guide missing-config recovery

Use cases

  1. 01Inspect a dependency's public API
  2. 02Review a package before adding it
  3. 03Check the version resolved by a project

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/hexsis-llc/skills --skill pub-package-explorer

After installing, type/pub-package-explorerin Claude Code to confirm it loaded.

Details

From the project README

Pub Package Explorer

Use this workflow to read package source code for Dart or Flutter, including packages not currently installed in the project.

Choose the Source Strategy

  1. Prefer .dart_tool/package_config.json when the package is already in the project dependency graph.
  2. Use dart pub unpack when the package is missing from package_config.json or when source needs inspection before adding the dependency.
  3. Prefer the installed package path when both are available to match the project-resolved version.

Resolve a Package Source Path

  1. Confirm the project contains .dart_tool/package_config.json.
  2. Read the package entry from packages[] by name.
  3. Extract:
  • rootUri (package root, usually in pub cache)
  • packageUri (usually lib/)
  1. Build source path as rootUri + packageUri.
  2. Convert file:// URI to a filesystem path before reading files.

Use this command pattern:

PACKAGE="analyzer"
CONFIG=".dart_tool/package_config.json"

SOURCE_URI="$(jq -r --arg pkg "$PACKAGE" '
  .packages[]
  | select(.name == $pkg)
  | (.rootUri + (if (.rootUri | endswith("/")) then "" else "/" end) + .packageUri)
' "$CONFIG")"

Convert the URI to a local path:

SOURCE_PATH="$(printf '%s\n' "$SOURCE_URI" | sed 's#^file://##')"

Then inspect source files under that directory (rg, ls, cat).

Unpack a Package That Is Not Installed

Use this path when the package is not in .dart_tool/package_config.json or when pre-install inspection is needed.

PACKAGE="analyzer"              # or "analyzer:7.4.0"
OUTPUT_DIR="/tmp/pub-unpack"

mkdir -p "$OUTPUT_DIR"
dart pub unpack "$PACKAGE" --output "$OUTPUT_DIR"

Find the extracted directory and inspect it:

PACKAGE_NAME="${PACKAGE%%:*}"
UNPACKED_DIR="$(find "$OUTPUT_DIR" -maxdepth 1 -type d -name "${PACKAGE_NAME}-*" | sort | tail -n 1)"

ls "$UNPACKED_DIR"
ls "$UNPACKED_DIR/lib"
rg --files "$UNPACKED_DIR/lib"

Notes:

  • dart pub unpack downloads and extracts a package even when it is not in the current project's dependencies.
  • Use --force if the output directory already contains an unpacked copy that must be overwritten.
  • --output controls where the extracted <package>-<version> folder is created.

Useful Variants

  • Return only the package root:
jq -r --arg pkg "$PACKAGE" '
  .packages[]
  | select(.name == $pkg)
  | .rootUri
' .dart_tool/package_config.json
  • Return both root and package URI:
jq -r --arg pkg "$PACKAGE" '
  .packages[]
  | select(.name == $pkg)
  | "\(.rootUri)\t\(.packageUri)"
' .dart_tool/package_config.json

Verification and Error Handling

  • If no package matches in package_config.json, switch to dart pub unpack instead of stopping.
  • If .dart_tool/package_config.json is missing, run dependency resolution first (dart pub get or flutter pub get) and retry.
  • Prefer reading from rootUri + packageUri because package APIs are exposed from that subpath, not always from the package root.
  • If dart pub unpack fails, report the exact failure (for example network access, invalid descriptor, or permissions for output path).

Comments

Markdown supported