From faf67169e5cb0d87c7c41ce45cbbaa47de2bcaa3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 25 May 2026 20:17:32 +0000 Subject: [PATCH 1/3] Initial plan From 3ea9a7428d8236ebd436181f9e9131a5200ce7eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 25 May 2026 20:27:09 +0000 Subject: [PATCH 2/3] Bootstrap CLI entrypoint and scripts for issue #425 --- packages/cli/bin/sh1pt.js | 7 ++++++- packages/cli/package.json | 1 + packages/cli/src/index.ts | 18 ++++++++++++++---- packages/cli/src/lib/logger.ts | 3 +++ 4 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 packages/cli/src/lib/logger.ts diff --git a/packages/cli/bin/sh1pt.js b/packages/cli/bin/sh1pt.js index b1d5c53a..4e768895 100755 --- a/packages/cli/bin/sh1pt.js +++ b/packages/cli/bin/sh1pt.js @@ -1,2 +1,7 @@ #!/usr/bin/env node -import('../dist/index.js'); +import('../dist/index.js') + .then(({ run }) => run(process.argv.slice(2))) + .catch((err) => { + console.error(err?.message || err); + process.exit(1); + }); diff --git a/packages/cli/package.json b/packages/cli/package.json index 87ea6292..f8f2f0a2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -35,6 +35,7 @@ "scripts": { "build": "tsc -p tsconfig.json", "dev": "tsx src/index.ts", + "test": "cd ../.. && pnpm exec vitest run packages/cli/src/**/*.test.ts", "typecheck": "tsc -p tsconfig.json --noEmit", "prepublishOnly": "pnpm build" }, diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 0f14db17..e56d4d75 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,6 +1,8 @@ import { Command } from 'commander'; import kleur from 'kleur'; import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; +import { logError } from './lib/logger.js'; import { buildCmd } from './commands/build.js'; import { createActionsCmd } from './commands/build-actions.js'; import { promoteCmd } from './commands/promote.js'; @@ -66,7 +68,15 @@ for (const cat of CATEGORIES) { program.addCommand(makeCategoryCmd(cat)); } -program.parseAsync(process.argv).catch((err) => { - console.error(kleur.red(`error: ${err.message}`)); - process.exit(1); -}); +export function run(argv = process.argv.slice(2)): Promise { + return program.parseAsync(['node', 'sh1pt', ...argv]).then(() => undefined); +} + +const isDirectExecution = process.argv[1] === fileURLToPath(import.meta.url); +if (isDirectExecution) { + run().catch((err) => { + const message = err instanceof Error ? err.message : String(err); + logError(kleur.red(`error: ${message}`)); + process.exit(1); + }); +} diff --git a/packages/cli/src/lib/logger.ts b/packages/cli/src/lib/logger.ts new file mode 100644 index 00000000..20f9ff67 --- /dev/null +++ b/packages/cli/src/lib/logger.ts @@ -0,0 +1,3 @@ +export function logError(message: string): void { + console.error(message); +} From 1330e99a80028013207ba71b106251d7392a5521 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 25 May 2026 20:32:49 +0000 Subject: [PATCH 3/3] Refine CLI run entrypoint wiring for #425 --- packages/cli/src/index.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index e56d4d75..3bc0dc4a 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,6 +1,7 @@ import { Command } from 'commander'; import kleur from 'kleur'; import { createRequire } from 'node:module'; +import { resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { logError } from './lib/logger.js'; import { buildCmd } from './commands/build.js'; @@ -68,11 +69,13 @@ for (const cat of CATEGORIES) { program.addCommand(makeCategoryCmd(cat)); } -export function run(argv = process.argv.slice(2)): Promise { - return program.parseAsync(['node', 'sh1pt', ...argv]).then(() => undefined); +export async function run(argv = process.argv.slice(2)): Promise { + await program.parseAsync(argv, { from: 'user' }); } -const isDirectExecution = process.argv[1] === fileURLToPath(import.meta.url); +const invokedPath = process.argv[1] ? resolve(process.argv[1]) : ''; +const modulePath = fileURLToPath(import.meta.url); +const isDirectExecution = invokedPath !== '' && invokedPath === modulePath; if (isDirectExecution) { run().catch((err) => { const message = err instanceof Error ? err.message : String(err);