|
|
@@ -8,6 +8,37 @@ const pkg = await Bun.file(new URL('../package.json', import.meta.url)).json() a
|
|
|
|
|
|
const args = process.argv.slice(2)
|
|
|
const compile = args.includes('--compile')
|
|
|
+const dev = args.includes('--dev')
|
|
|
+
|
|
|
+function runCommand(cmd: string[]): string | null {
|
|
|
+ const proc = Bun.spawnSync({
|
|
|
+ cmd,
|
|
|
+ cwd: process.cwd(),
|
|
|
+ stdout: 'pipe',
|
|
|
+ stderr: 'pipe',
|
|
|
+ })
|
|
|
+
|
|
|
+ if (proc.exitCode !== 0) {
|
|
|
+ return null
|
|
|
+ }
|
|
|
+
|
|
|
+ return new TextDecoder().decode(proc.stdout).trim() || null
|
|
|
+}
|
|
|
+
|
|
|
+function getDevVersion(baseVersion: string): string {
|
|
|
+ const timestamp = new Date().toISOString()
|
|
|
+ const date = timestamp.slice(0, 10).replaceAll('-', '')
|
|
|
+ const time = timestamp.slice(11, 19).replaceAll(':', '')
|
|
|
+ const sha = runCommand(['git', 'rev-parse', '--short=8', 'HEAD']) ?? 'unknown'
|
|
|
+ return `${baseVersion}-dev.${date}.t${time}.sha${sha}`
|
|
|
+}
|
|
|
+
|
|
|
+function getVersionChangelog(): string {
|
|
|
+ return (
|
|
|
+ runCommand(['git', 'log', '--format=%h %s', '-20']) ??
|
|
|
+ 'Local development build'
|
|
|
+ )
|
|
|
+}
|
|
|
|
|
|
const features: string[] = []
|
|
|
for (let i = 0; i < args.length; i += 1) {
|
|
|
@@ -22,8 +53,15 @@ for (let i = 0; i < args.length; i += 1) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const outfile = compile ? './dist/cli' : './cli'
|
|
|
+const outfile = compile
|
|
|
+ ? dev
|
|
|
+ ? './dist/cli-dev'
|
|
|
+ : './dist/cli'
|
|
|
+ : dev
|
|
|
+ ? './cli-dev'
|
|
|
+ : './cli'
|
|
|
const buildTime = new Date().toISOString()
|
|
|
+const version = dev ? getDevVersion(pkg.version) : pkg.version
|
|
|
|
|
|
mkdirSync(dirname(outfile), { recursive: true })
|
|
|
|
|
|
@@ -37,8 +75,16 @@ const externals = [
|
|
|
|
|
|
const defines = {
|
|
|
'process.env.USER_TYPE': JSON.stringify('external'),
|
|
|
+ ...(dev
|
|
|
+ ? { 'process.env.NODE_ENV': JSON.stringify('development') }
|
|
|
+ : {}),
|
|
|
+ ...(dev
|
|
|
+ ? {
|
|
|
+ 'process.env.CLAUDE_CODE_EXPERIMENTAL_BUILD': JSON.stringify('true'),
|
|
|
+ }
|
|
|
+ : {}),
|
|
|
'process.env.CLAUDE_CODE_VERIFY_PLAN': JSON.stringify('false'),
|
|
|
- 'MACRO.VERSION': JSON.stringify(pkg.version),
|
|
|
+ 'MACRO.VERSION': JSON.stringify(version),
|
|
|
'MACRO.BUILD_TIME': JSON.stringify(buildTime),
|
|
|
'MACRO.PACKAGE_URL': JSON.stringify(pkg.name),
|
|
|
'MACRO.NATIVE_PACKAGE_URL': 'undefined',
|
|
|
@@ -47,7 +93,7 @@ const defines = {
|
|
|
'This reconstructed source snapshot does not include Anthropic internal issue routing.',
|
|
|
),
|
|
|
'MACRO.VERSION_CHANGELOG': JSON.stringify(
|
|
|
- 'https://github.com/paoloanzn/claude-code',
|
|
|
+ dev ? getVersionChangelog() : 'https://github.com/paoloanzn/claude-code',
|
|
|
),
|
|
|
} as const
|
|
|
|
|
|
@@ -74,6 +120,10 @@ for (const external of externals) {
|
|
|
cmd.push('--external', external)
|
|
|
}
|
|
|
|
|
|
+for (const feature of features) {
|
|
|
+ cmd.push(`--feature=${feature}`)
|
|
|
+}
|
|
|
+
|
|
|
for (const [key, value] of Object.entries(defines)) {
|
|
|
cmd.push('--define', `${key}=${value}`)
|
|
|
}
|