diff --git a/.plaited/rules/accuracy.md b/.agents/rules/accuracy.md similarity index 94% rename from .plaited/rules/accuracy.md rename to .agents/rules/accuracy.md index 1cb99b4..e22bc33 100644 --- a/.plaited/rules/accuracy.md +++ b/.agents/rules/accuracy.md @@ -28,4 +28,4 @@ - Code review: Read files before commenting - Patterns: Confirm examples reflect actual usage -See .plaited/rules/testing.md for verification in test contexts. +See .agents/rules/testing.md for verification in test contexts. diff --git a/.plaited/rules/bun.md b/.agents/rules/bun.md similarity index 100% rename from .plaited/rules/bun.md rename to .agents/rules/bun.md diff --git a/.plaited/rules/core.md b/.agents/rules/core.md similarity index 100% rename from .plaited/rules/core.md rename to .agents/rules/core.md diff --git a/.plaited/rules/documentation.md b/.agents/rules/documentation.md similarity index 100% rename from .plaited/rules/documentation.md rename to .agents/rules/documentation.md diff --git a/.plaited/rules/modules.md b/.agents/rules/modules.md similarity index 100% rename from .plaited/rules/modules.md rename to .agents/rules/modules.md diff --git a/.plaited/rules/testing.md b/.agents/rules/testing.md similarity index 95% rename from .plaited/rules/testing.md rename to .agents/rules/testing.md index 65611b0..555261b 100644 --- a/.plaited/rules/testing.md +++ b/.agents/rules/testing.md @@ -14,7 +14,7 @@ **Use real dependencies** - Prefer installed packages over mocks when testing module resolution *Verify:* Review test imports for fake paths -*Fix:* Use actual package like `@modelcontextprotocol/sdk/client` +*Fix:* Use actual package like `typescript` **Organize with describe** - Group related tests in `describe('feature', () => {...})` *Verify:* Check for flat test structure diff --git a/.plaited/rules/workflow.md b/.agents/rules/workflow.md similarity index 100% rename from .plaited/rules/workflow.md rename to .agents/rules/workflow.md diff --git a/.plaited/skills/code-documentation/SKILL.md b/.agents/skills/code-documentation/SKILL.md similarity index 100% rename from .plaited/skills/code-documentation/SKILL.md rename to .agents/skills/code-documentation/SKILL.md diff --git a/.plaited/skills/code-documentation/references/internal-templates.md b/.agents/skills/code-documentation/references/internal-templates.md similarity index 100% rename from .plaited/skills/code-documentation/references/internal-templates.md rename to .agents/skills/code-documentation/references/internal-templates.md diff --git a/.plaited/skills/code-documentation/references/maintenance.md b/.agents/skills/code-documentation/references/maintenance.md similarity index 100% rename from .plaited/skills/code-documentation/references/maintenance.md rename to .agents/skills/code-documentation/references/maintenance.md diff --git a/.plaited/skills/code-documentation/references/public-api-templates.md b/.agents/skills/code-documentation/references/public-api-templates.md similarity index 100% rename from .plaited/skills/code-documentation/references/public-api-templates.md rename to .agents/skills/code-documentation/references/public-api-templates.md diff --git a/.plaited/skills/code-documentation/references/type-documentation.md b/.agents/skills/code-documentation/references/type-documentation.md similarity index 100% rename from .plaited/skills/code-documentation/references/type-documentation.md rename to .agents/skills/code-documentation/references/type-documentation.md diff --git a/.plaited/skills/code-documentation/references/workflow.md b/.agents/skills/code-documentation/references/workflow.md similarity index 100% rename from .plaited/skills/code-documentation/references/workflow.md rename to .agents/skills/code-documentation/references/workflow.md diff --git a/.plaited/skills/optimize-agents-md/SKILL.md b/.agents/skills/optimize-agents-md/SKILL.md similarity index 100% rename from .plaited/skills/optimize-agents-md/SKILL.md rename to .agents/skills/optimize-agents-md/SKILL.md diff --git a/.plaited/skills/scaffold-rules/SKILL.md b/.agents/skills/scaffold-rules/SKILL.md similarity index 78% rename from .plaited/skills/scaffold-rules/SKILL.md rename to .agents/skills/scaffold-rules/SKILL.md index e5b3318..f0a7383 100644 --- a/.plaited/skills/scaffold-rules/SKILL.md +++ b/.agents/skills/scaffold-rules/SKILL.md @@ -34,7 +34,7 @@ bunx @plaited/development-skills scaffold-rules ``` This will: -1. Copy rules to `.plaited/rules/` (canonical location) +1. Copy rules to `.agents/rules/` (canonical location) 2. Create symlinks in `.claude/rules` and `.cursor/rules` (if those directories exist) 3. Fallback: append links to `AGENTS.md` if no agent directories found @@ -52,23 +52,23 @@ Tell the user what was created based on the `actions` output. ## How It Works ``` -.plaited/rules/ ← Canonical location (files copied here) +.agents/rules/ ← Canonical location (files copied here) ├── testing.md ├── bun.md └── ... -.claude/rules -> ../.plaited/rules ← Symlink (if .claude/ exists) -.cursor/rules -> ../.plaited/rules ← Symlink (if .cursor/ exists) +.claude/rules -> ../.agents/rules ← Symlink (if .claude/ exists) +.cursor/rules -> ../.agents/rules ← Symlink (if .cursor/ exists) ``` | Project has... | Copy | Symlinks | AGENTS.md | |----------------|------|----------|-----------| -| `.plaited/` only | ✓ | None | No | +| `.agents/` only | ✓ | None | No | | `.claude/` only | ✓ | `.claude/rules` | No | | `.cursor/` only | ✓ | `.cursor/rules` | No | -| `.plaited/` + `.claude/` | ✓ | `.claude/rules` | No | -| `.plaited/` + `.cursor/` | ✓ | `.cursor/rules` | No | -| `.plaited/` + `.claude/` + `.cursor/` | ✓ | Both | No | +| `.agents/` + `.claude/` | ✓ | `.claude/rules` | No | +| `.agents/` + `.cursor/` | ✓ | `.cursor/rules` | No | +| `.agents/` + `.claude/` + `.cursor/` | ✓ | Both | No | | None of the above | ✓ | None | ✓ Append links | ## Related Skills diff --git a/.plaited/skills/typescript-lsp/SKILL.md b/.agents/skills/typescript-lsp/SKILL.md similarity index 100% rename from .plaited/skills/typescript-lsp/SKILL.md rename to .agents/skills/typescript-lsp/SKILL.md diff --git a/.plaited/skills/validate-skill/SKILL.md b/.agents/skills/validate-skill/SKILL.md similarity index 100% rename from .plaited/skills/validate-skill/SKILL.md rename to .agents/skills/validate-skill/SKILL.md diff --git a/.claude/rules b/.claude/rules index b188b1e..2d5c9a9 120000 --- a/.claude/rules +++ b/.claude/rules @@ -1 +1 @@ -../.plaited/rules \ No newline at end of file +../.agents/rules \ No newline at end of file diff --git a/.claude/skills b/.claude/skills index f1efcfb..2b7a412 120000 --- a/.claude/skills +++ b/.claude/skills @@ -1 +1 @@ -../.plaited/skills \ No newline at end of file +../.agents/skills \ No newline at end of file diff --git a/.cursor/rules b/.cursor/rules index b188b1e..2d5c9a9 120000 --- a/.cursor/rules +++ b/.cursor/rules @@ -1 +1 @@ -../.plaited/rules \ No newline at end of file +../.agents/rules \ No newline at end of file diff --git a/.cursor/skills b/.cursor/skills index f1efcfb..2b7a412 120000 --- a/.cursor/skills +++ b/.cursor/skills @@ -1 +1 @@ -../.plaited/skills \ No newline at end of file +../.agents/skills \ No newline at end of file diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml index ca5be38..767c0d9 100644 --- a/.github/workflows/claude-code-review.yml +++ b/.github/workflows/claude-code-review.yml @@ -15,6 +15,7 @@ jobs: steps: - name: Check author permission + id: author-permission env: GH_TOKEN: ${{ github.token }} run: | @@ -26,26 +27,32 @@ jobs: if [[ "$PERMISSION" != "admin" && "$PERMISSION" != "maintain" && "$PERMISSION" != "write" ]]; then echo "Skipping review: Only users with admin, maintain, or write permissions can trigger Claude Code Review" echo "Current permission level: $PERMISSION" + echo "authorized=false" >> "$GITHUB_OUTPUT" exit 0 fi echo "Author is authorized, proceeding with review" + echo "authorized=true" >> "$GITHUB_OUTPUT" - name: Checkout repository + if: steps.author-permission.outputs.authorized == 'true' uses: actions/checkout@v4 with: fetch-depth: 1 - name: Setup Bun + if: steps.author-permission.outputs.authorized == 'true' uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies + if: steps.author-permission.outputs.authorized == 'true' run: | bun install - name: Run Claude Code Review + if: steps.author-permission.outputs.authorized == 'true' id: claude-review uses: anthropics/claude-code-action@v1 with: @@ -54,6 +61,9 @@ jobs: REPO: ${{ github.repository }} PR NUMBER: ${{ github.event.pull_request.number }} + Before reviewing, gather existing PR feedback: + - `gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json comments,reviews,reviewThreads` + Please review this pull request and provide feedback on: - Code quality and best practices - Potential bugs or issues diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 45ce77c..527ff8a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -3,12 +3,19 @@ name: Publish on: workflow_dispatch: inputs: - version: - description: "New version tag (e.g., 1.0.0)" + bump: + description: "Version bump type" required: true - next: - description: "Next prerelease number (optional, will create a version like x.y.z-next.N)" + type: choice + options: + - patch + - minor + - major + prerelease: + description: "Prerelease number (optional, creates x.y.z-next.N)" required: false + type: string + jobs: publish: runs-on: ubuntu-22.04 @@ -17,69 +24,6 @@ jobs: id-token: write steps: - - name: Validate inputs - env: - INPUT_VERSION: ${{ github.event.inputs.version }} - INPUT_NEXT: ${{ github.event.inputs.next }} - run: | - # SECURITY: Validate all inputs before use to prevent injection - # Using env vars instead of direct interpolation to prevent shell injection - - # Validate version format (semver) - if ! echo "$INPUT_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then - echo "::error::Invalid version format: $INPUT_VERSION" - echo "::error::Expected: X.Y.Z (e.g., 1.0.0)" - exit 1 - fi - - # Validate next is a number if provided - if [[ -n "$INPUT_NEXT" ]] && ! echo "$INPUT_NEXT" | grep -qE '^[0-9]+$'; then - echo "::error::Invalid next value: $INPUT_NEXT" - echo "::error::Expected: number (e.g., 1, 2, 3)" - exit 1 - fi - - echo "✓ Input validation passed" - - - name: Set version - id: set_version - env: - INPUT_VERSION: ${{ github.event.inputs.version }} - INPUT_NEXT: ${{ github.event.inputs.next }} - run: | - base_version="$INPUT_VERSION" - next="$INPUT_NEXT" - - if [[ -n "$next" ]]; then - echo "version=${base_version}-next.${next}" >> $GITHUB_OUTPUT - echo "is_prerelease=true" >> $GITHUB_OUTPUT - else - echo "version=${base_version}" >> $GITHUB_OUTPUT - echo "is_prerelease=false" >> $GITHUB_OUTPUT - fi - - - name: Validate version format - env: - VERSION: ${{ steps.set_version.outputs.version }} - run: | - version="$VERSION" - - # Check for 'v' prefix (common mistake) - if [[ "$version" =~ ^v ]]; then - echo "::error::Version should not include 'v' prefix" - echo "::error::Enter '1.3.4' not 'v1.3.4'" - echo "::error::The workflow will automatically add 'v' for Git tags" - exit 1 - fi - - # Validate semver format (allows dots in prerelease suffix for formats like 1.0.0-next.1) - if [[ ! "$version" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([a-zA-Z0-9._-]+))?$ ]]; then - echo "::error::Version must have the format 'x.y.z' or 'x.y.z-', where x, y, and z are numbers." - exit 1 - fi - - echo "✅ Version format validated: $version" - - name: Checkout repository uses: actions/checkout@v4 with: @@ -98,6 +42,48 @@ jobs: run: | bun install + - name: Validate inputs + env: + INPUT_PRERELEASE: ${{ github.event.inputs.prerelease }} + run: | + # Validate prerelease is a number if provided + if [[ -n "$INPUT_PRERELEASE" ]] && ! echo "$INPUT_PRERELEASE" | grep -qE '^[0-9]+$'; then + echo "::error::Invalid prerelease value: $INPUT_PRERELEASE" + echo "::error::Expected: number (e.g., 1, 2, 3)" + exit 1 + fi + echo "✓ Input validation passed" + + - name: Compute version + id: compute_version + env: + INPUT_BUMP: ${{ github.event.inputs.bump }} + INPUT_PRERELEASE: ${{ github.event.inputs.prerelease }} + run: | + # Read current version from package.json + CURRENT=$(node -p "require('./package.json').version") + echo "Current version: $CURRENT" + + # Strip any existing prerelease suffix to get base semver + BASE=$(echo "$CURRENT" | grep -oE '^[0-9]+\.[0-9]+\.[0-9]+') + IFS='.' read -r MAJOR MINOR PATCH <<< "$BASE" + + case "$INPUT_BUMP" in + major) NEW_VERSION="$((MAJOR + 1)).0.0" ;; + minor) NEW_VERSION="${MAJOR}.$((MINOR + 1)).0" ;; + patch) NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))" ;; + esac + + if [[ -n "$INPUT_PRERELEASE" ]]; then + echo "version=${NEW_VERSION}-next.${INPUT_PRERELEASE}" >> "$GITHUB_OUTPUT" + echo "is_prerelease=true" >> "$GITHUB_OUTPUT" + else + echo "version=${NEW_VERSION}" >> "$GITHUB_OUTPUT" + echo "is_prerelease=false" >> "$GITHUB_OUTPUT" + fi + + echo "✅ Computed version: $(grep 'version=' "$GITHUB_OUTPUT" | head -1)" + - name: Configure Git env: GIT_AUTHOR_NAME: ${{ github.actor }} @@ -109,8 +95,8 @@ jobs: - name: Version env: GH_TOKEN: ${{ secrets.GH_PAT }} - VERSION: ${{ steps.set_version.outputs.version }} - IS_PRERELEASE: ${{ steps.set_version.outputs.is_prerelease }} + VERSION: ${{ steps.compute_version.outputs.version }} + IS_PRERELEASE: ${{ steps.compute_version.outputs.is_prerelease }} run: | npm version --no-git-tag-version "$VERSION" @@ -127,7 +113,7 @@ jobs: - name: Publish to NPM (Trusted Publishing) env: - IS_PRERELEASE: ${{ steps.set_version.outputs.is_prerelease }} + IS_PRERELEASE: ${{ steps.compute_version.outputs.is_prerelease }} run: | # NPM trusted publishing uses OIDC token automatically # Provenance attestations are generated automatically (npm >=11.5.1) diff --git a/AGENTS.md b/AGENTS.md index 404d38e..3d38ea7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -16,12 +16,12 @@ ``` bin/cli.ts # CLI entry point src/ # TypeScript source -.plaited/skills/ # Agent skills -.plaited/rules/ # Shared rules (bundled) +.agents/skills/ # Agent skills +.agents/rules/ # Shared rules (bundled) ``` **Test CLI:** `bun bin/cli.ts ` -**Install skills:** `curl -fsSL https://raw.githubusercontent.com/plaited/skills-installer/main/install.sh | bash -s -- --agent --project development-skills` +**Install skills:** `npx skills add plaited/development-skills` or `bunx skills add plaited/development-skills` ## Commands @@ -38,7 +38,7 @@ After code changes: 1. `bun run check` - Must pass 2. `bun test` - Must pass 3. `bun bin/cli.ts ` - Test CLI changes -4. For skills: `bunx @plaited/development-skills validate-skill .plaited/skills` +4. For skills: `bunx @plaited/development-skills validate-skill .agents/skills` **Rule compliance:** Read rules below, use verification patterns to self-check @@ -59,13 +59,13 @@ After code changes: Compressed rules with embedded verification patterns: -- @.plaited/rules/core.md - TypeScript conventions (type>interface, no any, arrow fns) -- @.plaited/rules/testing.md - Test patterns (test>it, no conditional assertions) -- @.plaited/rules/modules.md - Module organization (no index.ts, explicit .ts) -- @.plaited/rules/workflow.md - Git + GitHub CLI patterns -- @.plaited/rules/bun.md - Bun APIs over Node.js -- @.plaited/rules/accuracy.md - 95% confidence, verify before stating -- @.plaited/rules/documentation.md - TSDoc standards +- @.agents/rules/core.md - TypeScript conventions (type>interface, no any, arrow fns) +- @.agents/rules/testing.md - Test patterns (test>it, no conditional assertions) +- @.agents/rules/modules.md - Module organization (no index.ts, explicit .ts) +- @.agents/rules/workflow.md - Git + GitHub CLI patterns +- @.agents/rules/bun.md - Bun APIs over Node.js +- @.agents/rules/accuracy.md - 95% confidence, verify before stating +- @.agents/rules/documentation.md - TSDoc standards diff --git a/README.md b/README.md index 857ec6d..5d268fa 100644 --- a/README.md +++ b/README.md @@ -42,11 +42,11 @@ LSP understands re-exports, aliases, and type relationships. ## Install for AI Agents ```bash -curl -fsSL https://raw.githubusercontent.com/plaited/skills-installer/main/install.sh | bash -s -- --agents --project development-skills +npx skills add plaited/development-skills +# or +bunx skills add plaited/development-skills ``` -**Agents:** `claude` · `cursor` · `copilot` · `codex` · `gemini` · `windsurf` · `opencode` · `amp` · `goose` · `factory` - ## Commands | Command | What it does | diff --git a/bun.lock b/bun.lock index 940b147..e1745e8 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,6 @@ "name": "typescript-lsp", "devDependencies": { "@biomejs/biome": "2.3.11", - "@modelcontextprotocol/sdk": "1.22.0", "@types/bun": "1.3.6", "format-package": "7.0.0", "lint-staged": "16.2.7", @@ -47,8 +46,6 @@ "@hapi/topo": ["@hapi/topo@3.1.6", "", { "dependencies": { "@hapi/hoek": "^8.3.0" } }, "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ=="], - "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.22.0", "", { "dependencies": { "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.0.1", "express-rate-limit": "^7.5.0", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.23.8", "zod-to-json-schema": "^3.24.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-VUpl106XVTCpDmTBil2ehgJZjhyLY2QZikzF8NvTXtLRF1CvO5iEE2UNZdVIUer35vFOwMKYeUGbjJtvPWan3g=="], - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], @@ -59,12 +56,6 @@ "@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], - "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], - - "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - - "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], - "ansi-escapes": ["ansi-escapes@7.2.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -75,18 +66,10 @@ "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], - "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], - "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - "caller-callsite": ["caller-callsite@2.0.0", "", { "dependencies": { "callsites": "^2.0.0" } }, "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ=="], "caller-path": ["caller-path@2.0.0", "", { "dependencies": { "caller-callsite": "^2.0.0" } }, "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A=="], @@ -109,118 +92,48 @@ "commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="], - "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], - - "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], - - "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], - - "cors": ["cors@2.8.5", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="], - "cosmiconfig": ["cosmiconfig@5.2.1", "", { "dependencies": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", "js-yaml": "^3.13.1", "parse-json": "^4.0.0" } }, "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA=="], - "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], - - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], - "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], - "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], - "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], - "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], - "eventemitter3": ["eventemitter3@5.0.1", "", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="], - "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], - - "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], - - "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], - - "express-rate-limit": ["express-rate-limit@7.5.1", "", { "peerDependencies": { "express": ">= 4.11" } }, "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw=="], - - "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], - "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], - "format-package": ["format-package@7.0.0", "", { "dependencies": { "@hapi/joi": "^15.1.1", "chalk": "^4.1.2", "cosmiconfig": "^5.2.1", "fs-extra": "^10.0.0", "globby": "^11.0.4", "json5": "^2.2.0", "resolve-from": "^5.0.0", "sort-scripts": "^1.0.1", "yargs": "^17.3.1" }, "peerDependencies": { "prettier": "^2.0.0" }, "bin": { "format-package": "build/cli/index.js" } }, "sha512-XZ3OsNfo3I+Cy9/SBqqUFZUmXRgFaHK8MhRkSIUWIHRdG/WfGto7dyerbcDORR3GmzUwfYDYeyjC3tFBx8t7Jw=="], - "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], - - "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], - "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="], - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], - - "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], - "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "import-fresh": ["import-fresh@2.0.0", "", { "dependencies": { "caller-path": "^2.0.0", "resolve-from": "^3.0.0" } }, "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg=="], - "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], - - "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="], "is-directory": ["is-directory@0.3.1", "", {}, "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw=="], @@ -233,16 +146,10 @@ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], - - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], - "js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], "json-parse-better-errors": ["json-parse-better-errors@1.0.2", "", {}, "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="], - "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], @@ -253,70 +160,30 @@ "log-update": ["log-update@6.1.0", "", { "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w=="], - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], - - "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - - "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="], - "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "nano-spawn": ["nano-spawn@2.0.0", "", {}, "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw=="], - "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - - "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], - - "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], - "onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], "parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], - "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], - "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "pidtree": ["pidtree@0.6.0", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="], - "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], - "prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], - "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - - "qs": ["qs@6.14.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ=="], - "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], - - "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], - "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], "restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="], @@ -325,30 +192,8 @@ "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], - "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], - - "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], - - "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], - - "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], - - "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], - - "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], @@ -359,8 +204,6 @@ "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -371,10 +214,6 @@ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], - "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], - - "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "typescript-language-server": ["typescript-language-server@5.1.3", "", { "bin": { "typescript-language-server": "lib/cli.mjs" } }, "sha512-r+pAcYtWdN8tKlYZPwiiHNA2QPjXnI02NrW5Sf2cVM3TRtuQ3V9EKKwOxqwaQ0krsaEXk/CbN90I5erBuf84Vg=="], @@ -383,16 +222,8 @@ "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], - "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], - - "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], - - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], - "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], - "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], @@ -401,10 +232,6 @@ "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], - "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - - "zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="], - "cli-truncate/string-width": ["string-width@8.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.0", "strip-ansi": "^7.1.0" } }, "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg=="], "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], diff --git a/package.json b/package.json index 0b155e0..f0219f3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "files": [ "bin/", "src/", - ".plaited/" + ".agents/" ], "publishConfig": { "access": "public" @@ -48,7 +48,6 @@ }, "devDependencies": { "@biomejs/biome": "2.3.11", - "@modelcontextprotocol/sdk": "1.22.0", "@types/bun": "1.3.6", "format-package": "7.0.0", "lint-staged": "16.2.7", diff --git a/src/scaffold-rules.ts b/src/scaffold-rules.ts index b57313e..38c992f 100644 --- a/src/scaffold-rules.ts +++ b/src/scaffold-rules.ts @@ -2,7 +2,7 @@ /** * Scaffold development rules - Copy bundled rules and create symlinks * - * Copies rules from the package to `.plaited/rules/` (canonical location), + * Copies rules from the package to `.agents/rules/` (canonical location), * creates symlinks for `.claude/` and `.cursor/` agent directories, * and falls back to appending links in `AGENTS.md` if no agent dirs exist. * @@ -15,18 +15,18 @@ import { mkdir, readdir, readlink, stat, symlink } from 'node:fs/promises' import { join } from 'node:path' import { parseArgs } from 'node:util' -/** Agents that get symlinks to .plaited/rules (not .plaited itself) */ +/** Agents that get symlinks to .agents/rules (not .agents itself) */ const SYMLINK_AGENTS = ['.claude', '.cursor'] as const -/** All supported agent directories (including .plaited which gets direct copy) */ -const ALL_AGENTS = ['.plaited', ...SYMLINK_AGENTS] as const +/** All supported agent directories (including .agents which gets direct copy) */ +const ALL_AGENTS = ['.agents', ...SYMLINK_AGENTS] as const /** Canonical rules location */ -const TARGET_RULES = '.plaited/rules' as const +const TARGET_RULES = '.agents/rules' as const /** * NOTE: This tool only scaffolds RULES, not skills. - * Skills symlinks (.claude/skills -> ../.plaited/skills) are managed separately + * Skills symlinks (.claude/skills -> ../.agents/skills) are managed separately * via the skills-installer or manual setup. */ @@ -59,7 +59,7 @@ export const scaffoldRules = async (args: string[]): Promise => { const dryRun = values['dry-run'] as boolean | undefined const listOnly = values.list as boolean | undefined - const sourceRules = join(import.meta.dir, '../.plaited/rules') + const sourceRules = join(import.meta.dir, '../.agents/rules') const cwd = process.cwd() // Get available rules @@ -74,7 +74,7 @@ export const scaffoldRules = async (args: string[]): Promise => { const actions: string[] = [] - // Check for agent directories BEFORE copying (since copy creates .plaited/) + // Check for agent directories BEFORE copying (since copy creates .agents/) // This determines whether to fall back to AGENTS.md append let hadAgentDirBeforeScaffold = false for (const agent of ALL_AGENTS) { @@ -84,7 +84,7 @@ export const scaffoldRules = async (args: string[]): Promise => { } } - // 1. Copy rules to .plaited/rules/ (canonical location, serves .plaited agent) + // 1. Copy rules to .agents/rules/ (canonical location, serves .agents agent) const targetDir = join(cwd, TARGET_RULES) if (!dryRun) { await mkdir(targetDir, { recursive: true }) @@ -108,7 +108,7 @@ export const scaffoldRules = async (args: string[]): Promise => { // Check if symlink already exists and points to right place try { const existing = await readlink(rulesLink) - if (existing === '../.plaited/rules') { + if (existing === '../.agents/rules') { actions.push(`skip: ${agent}/rules (symlink exists)`) continue } @@ -117,9 +117,9 @@ export const scaffoldRules = async (args: string[]): Promise => { } if (!dryRun) { - await symlink('../.plaited/rules', rulesLink) + await symlink('../.agents/rules', rulesLink) } - actions.push(`symlink: ${agent}/rules -> ../.plaited/rules`) + actions.push(`symlink: ${agent}/rules -> ../.agents/rules`) } } @@ -130,7 +130,7 @@ export const scaffoldRules = async (args: string[]): Promise => { if (await agentsMd.exists()) { const content = await agentsMd.text() - if (content.includes('.plaited/rules')) { + if (content.includes('.agents/rules')) { actions.push('skip: AGENTS.md (already has rules)') } else { const links = rules.map((f) => `- [${f.replace('.md', '')}](${TARGET_RULES}/${f})`).join('\n') diff --git a/src/tests/resolve-file-path.spec.ts b/src/tests/resolve-file-path.spec.ts index 6870192..5626445 100644 --- a/src/tests/resolve-file-path.spec.ts +++ b/src/tests/resolve-file-path.spec.ts @@ -75,27 +75,6 @@ describe('resolveFilePath', () => { }) describe('scoped package specifiers', () => { - test('resolves scoped package subpath export', () => { - // @modelcontextprotocol/sdk/client is a defined export - const result = resolveFilePath('@modelcontextprotocol/sdk/client') - expect(result).toContain('node_modules/@modelcontextprotocol/sdk') - expect(result).toContain('client') - }) - - test('resolves scoped package server subpath', () => { - const result = resolveFilePath('@modelcontextprotocol/sdk/server') - expect(result).toContain('node_modules/@modelcontextprotocol/sdk') - expect(result).toContain('server') - }) - - test('resolves scoped package deep subpath with extension', () => { - // Deep subpath with .js extension via wildcard export "./*" - const path = '@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js' - const result = resolveFilePath(path) - expect(result).toContain('node_modules/@modelcontextprotocol/sdk') - expect(result).toContain('bearerAuth') - }) - test('falls back to cwd for non-existent scoped package', () => { const scopedPkg = '@nonexistent/pkg/src/file.ts' const result = resolveFilePath(scopedPkg) diff --git a/src/tests/scaffold-rules.spec.ts b/src/tests/scaffold-rules.spec.ts index c8cbcb6..f8a3843 100644 --- a/src/tests/scaffold-rules.spec.ts +++ b/src/tests/scaffold-rules.spec.ts @@ -63,7 +63,7 @@ describe('scaffold-rules', () => { const result: ScaffoldOutput = await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules --dry-run`.json() expect(result.dryRun).toBe(true) - expect(result.targetRules).toBe('.plaited/rules') + expect(result.targetRules).toBe('.agents/rules') expect(result.actions).toBeArray() }) @@ -81,7 +81,7 @@ describe('scaffold-rules', () => { test('does not create files in dry-run mode', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules --dry-run`.json() - const rulesDir = Bun.file(join(testDir, '.plaited/rules')) + const rulesDir = Bun.file(join(testDir, '.agents/rules')) expect(await rulesDir.exists()).toBe(false) }) @@ -93,10 +93,10 @@ describe('scaffold-rules', () => { }) describe('copy behavior', () => { - test('copies rules to .plaited/rules/', async () => { + test('copies rules to .agents/rules/', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() - const coreRule = Bun.file(join(testDir, '.plaited/rules/core.md')) + const coreRule = Bun.file(join(testDir, '.agents/rules/core.md')) expect(await coreRule.exists()).toBe(true) const content = await coreRule.text() @@ -109,15 +109,15 @@ describe('scaffold-rules', () => { const expectedRules = ['accuracy', 'bun', 'core', 'documentation', 'modules', 'testing', 'workflow'] for (const rule of expectedRules) { - const ruleFile = Bun.file(join(testDir, `.plaited/rules/${rule}.md`)) + const ruleFile = Bun.file(join(testDir, `.agents/rules/${rule}.md`)) expect(await ruleFile.exists()).toBe(true) } }) - test('creates .plaited/rules directory if missing', async () => { + test('creates .agents/rules directory if missing', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() - const rulesDir = await Bun.file(join(testDir, '.plaited/rules/core.md')).exists() + const rulesDir = await Bun.file(join(testDir, '.agents/rules/core.md')).exists() expect(rulesDir).toBe(true) }) }) @@ -131,7 +131,7 @@ describe('scaffold-rules', () => { // Check symlink exists and points to right place const linkTarget = await readlink(join(testDir, '.claude/rules')) - expect(linkTarget).toBe('../.plaited/rules') + expect(linkTarget).toBe('../.agents/rules') }) test('creates symlink for .cursor/rules when .cursor exists', async () => { @@ -141,7 +141,7 @@ describe('scaffold-rules', () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() const linkTarget = await readlink(join(testDir, '.cursor/rules')) - expect(linkTarget).toBe('../.plaited/rules') + expect(linkTarget).toBe('../.agents/rules') }) test('skips symlink if already exists with correct target', async () => { @@ -174,22 +174,22 @@ describe('scaffold-rules', () => { const content = await Bun.file(join(testDir, 'AGENTS.md')).text() expect(content).toContain('## Rules') - expect(content).toContain('.plaited/rules/') + expect(content).toContain('.agents/rules/') }) test('does not append if agent dir exists', async () => { await Bun.write(join(testDir, 'AGENTS.md'), '# AGENTS\n\nSome content\n') - await mkdir(join(testDir, '.plaited'), { recursive: true }) + await mkdir(join(testDir, '.agents'), { recursive: true }) await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() const content = await Bun.file(join(testDir, 'AGENTS.md')).text() - // Should not have appended rules section (since .plaited exists) + // Should not have appended rules section (since .agents exists) expect(content).not.toContain('## Rules') }) test('skips if AGENTS.md already has rules', async () => { - await Bun.write(join(testDir, 'AGENTS.md'), '# AGENTS\n\nSee .plaited/rules/ for rules\n') + await Bun.write(join(testDir, 'AGENTS.md'), '# AGENTS\n\nSee .agents/rules/ for rules\n') const result: ScaffoldOutput = await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.json() @@ -207,7 +207,7 @@ describe('scaffold-rules', () => { expect(result).toHaveProperty('actions') expect(result.dryRun).toBe(false) - expect(result.targetRules).toBe('.plaited/rules') + expect(result.targetRules).toBe('.agents/rules') expect(result.actions).toBeArray() }) }) @@ -248,7 +248,7 @@ describe('scaffold-rules', () => { test('core.md contains TypeScript conventions', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() - const content = await Bun.file(join(testDir, '.plaited/rules/core.md')).text() + const content = await Bun.file(join(testDir, '.agents/rules/core.md')).text() expect(content).toContain('Type over interface') expect(content).toContain('Arrow functions') }) @@ -256,7 +256,7 @@ describe('scaffold-rules', () => { test('testing.md contains test conventions', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() - const content = await Bun.file(join(testDir, '.plaited/rules/testing.md')).text() + const content = await Bun.file(join(testDir, '.agents/rules/testing.md')).text() expect(content).toContain('test not it') expect(content).toContain('No conditional assertions') }) @@ -264,7 +264,7 @@ describe('scaffold-rules', () => { test('rules include verification patterns', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() - const content = await Bun.file(join(testDir, '.plaited/rules/core.md')).text() + const content = await Bun.file(join(testDir, '.agents/rules/core.md')).text() expect(content).toContain('*Verify:*') expect(content).toContain('*Fix:*') }) @@ -272,7 +272,7 @@ describe('scaffold-rules', () => { test('rules are compressed (no verbose examples)', async () => { await $`cd ${testDir} && bun ${binDir}/cli.ts scaffold-rules`.quiet() - const content = await Bun.file(join(testDir, '.plaited/rules/core.md')).text() + const content = await Bun.file(join(testDir, '.agents/rules/core.md')).text() // Should not have verbose code blocks with Good/Avoid patterns expect(content).not.toContain('// ✅ Good')