Compare commits
5 Commits
main
..
71489aebdd
| Author | SHA1 | Date | |
|---|---|---|---|
| 71489aebdd | |||
| 7495020a9c | |||
| 86ad783f82 | |||
| be993429c1 | |||
| 0443381aa0 |
@@ -32,6 +32,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: "10"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
|
with:
|
||||||
|
version: "10"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|||||||
@@ -7,5 +7,4 @@
|
|||||||
/skills/atlassian/*/scripts/.env
|
/skills/atlassian/*/scripts/.env
|
||||||
/skills/atlassian/*/scripts/node_modules/
|
/skills/atlassian/*/scripts/node_modules/
|
||||||
/skills/web-automation/*/scripts/node_modules/
|
/skills/web-automation/*/scripts/node_modules/
|
||||||
/skills/web-automation/shared/node_modules/
|
|
||||||
/pi-package/skills/*/scripts/node_modules/
|
/pi-package/skills/*/scripts/node_modules/
|
||||||
|
|||||||
+1
-22
@@ -43,7 +43,6 @@ pnpm run check
|
|||||||
| `pnpm run verify:docs` | markdownlint + offline link-check + docs-flow verifier |
|
| `pnpm run verify:docs` | markdownlint + offline link-check + docs-flow verifier |
|
||||||
| `pnpm run verify:docs:online` | Same as `verify:docs` but with full external link checking |
|
| `pnpm run verify:docs:online` | Same as `verify:docs` but with full external link checking |
|
||||||
| `pnpm run verify:generated` | Assert generated output freshness (stub; fleshed out in M3) |
|
| `pnpm run verify:generated` | Assert generated output freshness (stub; fleshed out in M3) |
|
||||||
| `pnpm run verify:ci` | Assert CI workflow files carry no pnpm version pins (see [pnpm version pinning](#pnpm-version-pinning)) |
|
|
||||||
| `pnpm run check` | Aggregate: run every gate above and report a summary |
|
| `pnpm run check` | Aggregate: run every gate above and report a summary |
|
||||||
|
|
||||||
## Quality tooling (added in M1)
|
## Quality tooling (added in M1)
|
||||||
@@ -168,7 +167,6 @@ PASS verify:pi
|
|||||||
PASS verify:reviewers
|
PASS verify:reviewers
|
||||||
PASS verify:docs
|
PASS verify:docs
|
||||||
PASS verify:generated
|
PASS verify:generated
|
||||||
PASS verify:ci
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This is the only acceptable state for merge. Any failure on a check not in
|
This is the only acceptable state for merge. Any failure on a check not in
|
||||||
@@ -417,8 +415,7 @@ Two GitHub Actions workflows live in `.github/workflows/`:
|
|||||||
2. Installs `shellcheck` via `apt-get` (Ubuntu) or `brew` (macOS).
|
2. Installs `shellcheck` via `apt-get` (Ubuntu) or `brew` (macOS).
|
||||||
3. Installs `ripgrep` via `apt-get` (Ubuntu only; pre-installed on macOS runners).
|
3. Installs `ripgrep` via `apt-get` (Ubuntu only; pre-installed on macOS runners).
|
||||||
4. Installs Node.js 22 via `actions/setup-node`.
|
4. Installs Node.js 22 via `actions/setup-node`.
|
||||||
5. Installs pnpm via `pnpm/action-setup@v4` — **no `version:` key is set**; the action reads the version from
|
5. Installs pnpm 10 via `pnpm/action-setup`.
|
||||||
`package.json#packageManager` (currently `pnpm@10.18.1+sha512…`), which is the single source of truth.
|
|
||||||
6. Runs `pnpm install --frozen-lockfile`.
|
6. Runs `pnpm install --frozen-lockfile`.
|
||||||
7. Runs `pnpm run check` (the same command contributors run locally).
|
7. Runs `pnpm run check` (the same command contributors run locally).
|
||||||
|
|
||||||
@@ -426,24 +423,6 @@ The matrix runs both `ubuntu-latest` and `macos-latest` to guard against
|
|||||||
platform-specific regressions. Because M2 made all shell scripts portable
|
platform-specific regressions. Because M2 made all shell scripts portable
|
||||||
across BSD and GNU coreutils, both runners should stay green.
|
across BSD and GNU coreutils, both runners should stay green.
|
||||||
|
|
||||||
### pnpm version pinning
|
|
||||||
|
|
||||||
The pnpm version is pinned **exclusively** in `package.json#packageManager`:
|
|
||||||
|
|
||||||
```json
|
|
||||||
"packageManager": "pnpm@10.18.1+sha512.77a884a..."
|
|
||||||
```
|
|
||||||
|
|
||||||
This field carries an exact version *and* an integrity hash, giving stronger
|
|
||||||
reproducibility than a floating major like `version: "10"`. The
|
|
||||||
`pnpm/action-setup@v4` step in `check.yml` reads this field automatically;
|
|
||||||
do **not** add a `with.version` key to that step.
|
|
||||||
|
|
||||||
`pnpm run verify:ci` (backed by `scripts/lib/assert-no-pnpm-version-pin.mjs`)
|
|
||||||
greps every `.github/workflows/*.yml` for `pnpm/action-setup` blocks that
|
|
||||||
carry a `version:` key and fails if any are found. This prevents
|
|
||||||
reintroduction of the conflict that caused `pnpm/action-setup@v4` to error.
|
|
||||||
|
|
||||||
### Adding new prerequisites to CI
|
### Adding new prerequisites to CI
|
||||||
|
|
||||||
If a new tool is required (e.g. a new binary called by a verify script),
|
If a new tool is required (e.g. a new binary called by a verify script),
|
||||||
|
|||||||
@@ -53,7 +53,6 @@
|
|||||||
"verify:docs": "markdownlint-cli2 ; R1=$?; node scripts/lib/run-link-check.mjs ; R2=$?; node scripts/verify-docs-flow.mjs ; R3=$?; [ $((R1+R2+R3)) -eq 0 ]",
|
"verify:docs": "markdownlint-cli2 ; R1=$?; node scripts/lib/run-link-check.mjs ; R2=$?; node scripts/verify-docs-flow.mjs ; R3=$?; [ $((R1+R2+R3)) -eq 0 ]",
|
||||||
"verify:docs:online": "markdownlint-cli2 ; R1=$?; node scripts/lib/run-link-check.mjs --online ; R2=$?; node scripts/verify-docs-flow.mjs ; R3=$?; [ $((R1+R2+R3)) -eq 0 ]",
|
"verify:docs:online": "markdownlint-cli2 ; R1=$?; node scripts/lib/run-link-check.mjs --online ; R2=$?; node scripts/verify-docs-flow.mjs ; R3=$?; [ $((R1+R2+R3)) -eq 0 ]",
|
||||||
"verify:generated": "node scripts/verify-generated.mjs",
|
"verify:generated": "node scripts/verify-generated.mjs",
|
||||||
"verify:ci": "node scripts/lib/assert-no-pnpm-version-pin.mjs",
|
|
||||||
"check": "node scripts/lib/run-check.mjs"
|
"check": "node scripts/lib/run-check.mjs"
|
||||||
},
|
},
|
||||||
"pi": {
|
"pi": {
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ async function clearGeneratedRoot(rootDir) {
|
|||||||
// Remove the directory only if nothing protected remains inside it.
|
// Remove the directory only if nothing protected remains inside it.
|
||||||
const remaining = await readdir(fullPath).catch(() => []);
|
const remaining = await readdir(fullPath).catch(() => []);
|
||||||
if (remaining.length === 0) {
|
if (remaining.length === 0) {
|
||||||
await rm(fullPath, { recursive: true, force: true });
|
await rm(fullPath, { force: true });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await rm(fullPath, { force: true });
|
await rm(fullPath, { force: true });
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
/**
|
|
||||||
* assert-no-pnpm-version-pin.mjs — CI regression guard (followup: fix pnpm version conflict)
|
|
||||||
*
|
|
||||||
* Ensures no .github/workflows/*.yml file pins pnpm via a `version:` key
|
|
||||||
* under a `pnpm/action-setup` step. The canonical version source is
|
|
||||||
* `package.json#packageManager`, which carries an exact version + integrity
|
|
||||||
* hash. Duplicating the version in the workflow creates a conflict that
|
|
||||||
* pnpm/action-setup@v4 treats as an error.
|
|
||||||
*
|
|
||||||
* Usage:
|
|
||||||
* node scripts/lib/assert-no-pnpm-version-pin.mjs
|
|
||||||
* pnpm run verify:ci
|
|
||||||
*
|
|
||||||
* Exit codes:
|
|
||||||
* 0 — no version pin found
|
|
||||||
* 1 — one or more violations found (details on stderr)
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { readFileSync, readdirSync } from "node:fs";
|
|
||||||
import path from "node:path";
|
|
||||||
import { fileURLToPath } from "node:url";
|
|
||||||
|
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
||||||
const REPO_ROOT = path.resolve(__dirname, "../..");
|
|
||||||
const WORKFLOWS_DIR = path.join(REPO_ROOT, ".github", "workflows");
|
|
||||||
|
|
||||||
let violations = 0;
|
|
||||||
|
|
||||||
// Read workflow files — silently pass if directory doesn't exist
|
|
||||||
let files;
|
|
||||||
try {
|
|
||||||
files = readdirSync(WORKFLOWS_DIR).filter(
|
|
||||||
(f) => f.endsWith(".yml") || f.endsWith(".yaml")
|
|
||||||
);
|
|
||||||
} catch {
|
|
||||||
process.stdout.write("OK: no .github/workflows directory found; nothing to check.\n");
|
|
||||||
process.exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const file of files) {
|
|
||||||
const fullPath = path.join(WORKFLOWS_DIR, file);
|
|
||||||
const content = readFileSync(fullPath, "utf8");
|
|
||||||
const lines = content.split("\n");
|
|
||||||
|
|
||||||
for (let i = 0; i < lines.length; i++) {
|
|
||||||
// Locate a step that uses pnpm/action-setup
|
|
||||||
if (!lines[i].includes("pnpm/action-setup")) continue;
|
|
||||||
|
|
||||||
// Look ahead up to 10 lines for a `version:` key in the same step
|
|
||||||
const end = Math.min(i + 10, lines.length);
|
|
||||||
for (let j = i + 1; j < end; j++) {
|
|
||||||
const ahead = lines[j];
|
|
||||||
// A new step begins at a `- name:` or `- uses:` list item → stop
|
|
||||||
if (/^\s*-\s+(name|uses)\s*:/.test(ahead)) break;
|
|
||||||
// `version:` key found inside this step → violation
|
|
||||||
if (/^\s+version\s*:/.test(ahead)) {
|
|
||||||
process.stderr.write(
|
|
||||||
`ERROR: ${file}:${j + 1}: 'version:' key found under pnpm/action-setup step.\n` +
|
|
||||||
` Remove 'with.version'; let package.json#packageManager be the single\n` +
|
|
||||||
` source of truth for the pnpm version (exact version + integrity hash).\n\n`
|
|
||||||
);
|
|
||||||
violations++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (violations > 0) {
|
|
||||||
process.stderr.write(`${violations} violation(s) found.\n`);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
process.stdout.write("OK: no pnpm version pins found in workflow files.\n");
|
|
||||||
process.exit(0);
|
|
||||||
@@ -33,7 +33,6 @@ const STEPS = [
|
|||||||
{ label: "verify:reviewers", cmd: "pnpm", args: ["run", "verify:reviewers"] },
|
{ label: "verify:reviewers", cmd: "pnpm", args: ["run", "verify:reviewers"] },
|
||||||
{ label: "verify:docs", cmd: "pnpm", args: ["run", "verify:docs"] },
|
{ label: "verify:docs", cmd: "pnpm", args: ["run", "verify:docs"] },
|
||||||
{ label: "verify:generated", cmd: "pnpm", args: ["run", "verify:generated"] },
|
{ label: "verify:generated", cmd: "pnpm", args: ["run", "verify:generated"] },
|
||||||
{ label: "verify:ci", cmd: "pnpm", args: ["run", "verify:ci"] },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// ── Runner ─────────────────────────────────────────────────────────────────
|
// ── Runner ─────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -203,15 +203,6 @@ async function interactiveAnswers({ dryRun = false } = {}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function readAnswers(source) {
|
|
||||||
if (source === "-") {
|
|
||||||
let content = "";
|
|
||||||
for await (const chunk of input) content += chunk;
|
|
||||||
return JSON.parse(content);
|
|
||||||
}
|
|
||||||
return JSON.parse(await readFile(path.resolve(source), "utf8"));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const args = parseArgs(process.argv.slice(2));
|
const args = parseArgs(process.argv.slice(2));
|
||||||
if (args.help) {
|
if (args.help) {
|
||||||
@@ -225,7 +216,7 @@ async function main() {
|
|||||||
|
|
||||||
let answers;
|
let answers;
|
||||||
if (args.answers) {
|
if (args.answers) {
|
||||||
answers = await readAnswers(args.answers);
|
answers = JSON.parse(await readFile(path.resolve(args.answers), "utf8"));
|
||||||
} else {
|
} else {
|
||||||
answers = await buildCliSelection(args);
|
answers = await buildCliSelection(args);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import assert from "node:assert/strict";
|
import assert from "node:assert/strict";
|
||||||
import { mkdtemp, mkdir, writeFile, rm, readFile } from "node:fs/promises";
|
import { mkdtemp, mkdir, writeFile, rm } from "node:fs/promises";
|
||||||
import crypto from "node:crypto";
|
import crypto from "node:crypto";
|
||||||
import { tmpdir } from "node:os";
|
import { tmpdir } from "node:os";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
@@ -25,7 +25,6 @@ const {
|
|||||||
makePackageJsonContent,
|
makePackageJsonContent,
|
||||||
getGeneratedRoots,
|
getGeneratedRoots,
|
||||||
buildManifest,
|
buildManifest,
|
||||||
generateSkills,
|
|
||||||
} = await import(`${SCRIPTS_DIR}/generate-skills.mjs`);
|
} = await import(`${SCRIPTS_DIR}/generate-skills.mjs`);
|
||||||
|
|
||||||
// ── detectFileType ────────────────────────────────────────────────────────
|
// ── detectFileType ────────────────────────────────────────────────────────
|
||||||
@@ -349,17 +348,3 @@ test("buildManifest: sha256 matches actual file content", async () => {
|
|||||||
await rm(dir, { recursive: true, force: true });
|
await rm(dir, { recursive: true, force: true });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("generateSkills: clears pre-existing empty generated directories without EISDIR", async () => {
|
|
||||||
const targetRoot = await mkdtemp(path.join(tmpdir(), "generate-skills-target-"));
|
|
||||||
try {
|
|
||||||
await mkdir(path.join(targetRoot, "skills", "create-plan", "claude-code", "templates"), { recursive: true });
|
|
||||||
|
|
||||||
await generateSkills(path.resolve(SCRIPTS_DIR, ".."), { targetRoot });
|
|
||||||
|
|
||||||
await readFile(path.join(targetRoot, "skills", "create-plan", "claude-code", "SKILL.md"), "utf8");
|
|
||||||
await readFile(path.join(targetRoot, "skills", "create-plan", "claude-code", "templates", "milestone-plan.md"), "utf8");
|
|
||||||
} finally {
|
|
||||||
await rm(targetRoot, { recursive: true, force: true });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ test("cli exits without confirmation when no operations are planned", () => {
|
|||||||
const output = execFileSync(process.execPath, [
|
const output = execFileSync(process.execPath, [
|
||||||
path.join(REPO_ROOT, "scripts", "manage-skills.mjs"),
|
path.join(REPO_ROOT, "scripts", "manage-skills.mjs"),
|
||||||
"--answers",
|
"--answers",
|
||||||
"-",
|
"/dev/stdin",
|
||||||
], {
|
], {
|
||||||
cwd: REPO_ROOT,
|
cwd: REPO_ROOT,
|
||||||
encoding: "utf8",
|
encoding: "utf8",
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
"path": "run-review.sh",
|
"path": "run-review.sh",
|
||||||
"kind": "file",
|
"kind": "file",
|
||||||
"mode": "755",
|
"mode": "755",
|
||||||
"sha256": "1af5076f0e4451c0870109216ee5780553ef7d402ec1359f38afefdaf53627c1"
|
"sha256": "c5e4fd082ee1a14059183d2cd2c45653e16d63821edf9cf82e548c9307d29e75"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ kill_child_process_group() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# shellcheck disable=SC2317,SC2329
|
# shellcheck disable=SC2329
|
||||||
handle_signal() {
|
handle_signal() {
|
||||||
local signal_name=$1
|
local signal_name=$1
|
||||||
INTERRUPTED=1
|
INTERRUPTED=1
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ kill_child_process_group() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# shellcheck disable=SC2317,SC2329
|
# shellcheck disable=SC2329
|
||||||
handle_signal() {
|
handle_signal() {
|
||||||
local signal_name=$1
|
local signal_name=$1
|
||||||
INTERRUPTED=1
|
INTERRUPTED=1
|
||||||
|
|||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$NODE_PATH" ]; then
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules/cloakbrowser/dist/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules/cloakbrowser/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules"
|
||||||
|
else
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules/cloakbrowser/dist/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules/cloakbrowser/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||||
|
fi
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../cloakbrowser/dist/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../cloakbrowser/dist/cli.js" "$@"
|
||||||
|
fi
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$NODE_PATH" ]; then
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/esbuild@0.27.0/node_modules/esbuild/bin/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/esbuild@0.27.0/node_modules/esbuild/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/esbuild@0.27.0/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules"
|
||||||
|
else
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/esbuild@0.27.0/node_modules/esbuild/bin/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/esbuild@0.27.0/node_modules/esbuild/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/esbuild@0.27.0/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||||
|
fi
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../esbuild/bin/esbuild" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../esbuild/bin/esbuild" "$@"
|
||||||
|
fi
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$NODE_PATH" ]; then
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/playwright-core@1.59.1/node_modules/playwright-core/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/playwright-core@1.59.1/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules"
|
||||||
|
else
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/playwright-core@1.59.1/node_modules/playwright-core/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/playwright-core@1.59.1/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||||
|
fi
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../playwright-core/cli.js" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../playwright-core/cli.js" "$@"
|
||||||
|
fi
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$NODE_PATH" ]; then
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules"
|
||||||
|
else
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||||
|
fi
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../typescript/bin/tsc" "$@"
|
||||||
|
fi
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$NODE_PATH" ]; then
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules"
|
||||||
|
else
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||||
|
fi
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../typescript/bin/tsserver" "$@"
|
||||||
|
fi
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
||||||
|
|
||||||
|
case `uname` in
|
||||||
|
*CYGWIN*|*MINGW*|*MSYS*)
|
||||||
|
if command -v cygpath > /dev/null 2>&1; then
|
||||||
|
basedir=`cygpath -w "$basedir"`
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -z "$NODE_PATH" ]; then
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/tsx@4.21.0/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules"
|
||||||
|
else
|
||||||
|
export NODE_PATH="/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/dist/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/tsx@4.21.0/node_modules/tsx/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/tsx@4.21.0/node_modules:/Users/stefano.fiorini/Documents/projects/ai-coding-skills-worktrees/2026-05-03-perform-code-optimization-and-document-cleanup/node_modules/.pnpm/node_modules:$NODE_PATH"
|
||||||
|
fi
|
||||||
|
if [ -x "$basedir/node" ]; then
|
||||||
|
exec "$basedir/node" "$basedir/../tsx/dist/cli.mjs" "$@"
|
||||||
|
else
|
||||||
|
exec node "$basedir/../tsx/dist/cli.mjs" "$@"
|
||||||
|
fi
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../../node_modules/.pnpm/@mozilla+readability@0.5.0/node_modules/@mozilla/readability
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../../node_modules/.pnpm/@types+jsdom@21.1.7/node_modules/@types/jsdom
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../../node_modules/.pnpm/@types+minimist@1.2.5/node_modules/@types/minimist
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../../node_modules/.pnpm/@types+turndown@5.0.6/node_modules/@types/turndown
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/better-sqlite3@12.9.0/node_modules/better-sqlite3
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/cloakbrowser@0.3.26_playwright-core@1.59.1/node_modules/cloakbrowser
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/esbuild@0.27.0/node_modules/esbuild
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/jsdom@24.1.3/node_modules/jsdom
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/minimist@1.2.8/node_modules/minimist
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/playwright-core@1.59.1/node_modules/playwright-core
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/tsx@4.21.0/node_modules/tsx
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/turndown@7.2.4/node_modules/turndown
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/turndown-plugin-gfm@1.0.2/node_modules/turndown-plugin-gfm
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript
|
||||||
Reference in New Issue
Block a user