226 lines
6.2 KiB
TypeScript
226 lines
6.2 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* Configuration for upstream merge automation
|
|
*/
|
|
|
|
export interface PackageMapping {
|
|
from: string
|
|
to: string
|
|
}
|
|
|
|
export interface MergeConfig {
|
|
/** Package name mappings from opencode to kilo */
|
|
packageMappings: PackageMapping[]
|
|
|
|
/** Files to always keep Kilo's version (never take upstream changes) */
|
|
keepOurs: string[]
|
|
|
|
/** Files to skip entirely (don't add from upstream, remove if added) */
|
|
skipFiles: string[]
|
|
|
|
/** Files that should take upstream version and apply Kilo branding transforms */
|
|
takeTheirsAndTransform: string[]
|
|
|
|
/** Tauri/Desktop config files with predictable branding patterns */
|
|
tauriFiles: string[]
|
|
|
|
/** Script files with GitHub API references */
|
|
scriptFiles: string[]
|
|
|
|
/** Extension files (Zed, etc.) */
|
|
extensionFiles: string[]
|
|
|
|
/** Web/docs files */
|
|
webFiles: string[]
|
|
|
|
/** Lock files to accept ours and regenerate after merge */
|
|
lockFiles: string[]
|
|
|
|
/** Directories that are Kilo-specific and should be preserved */
|
|
kiloDirectories: string[]
|
|
|
|
/** File patterns to exclude from codemods */
|
|
excludePatterns: string[]
|
|
|
|
/** Default branch to merge into */
|
|
baseBranch: string
|
|
|
|
/** Branch prefix for merge branches */
|
|
branchPrefix: string
|
|
|
|
/** Remote name for upstream */
|
|
upstreamRemote: string
|
|
|
|
/** Remote name for origin */
|
|
originRemote: string
|
|
|
|
/** i18n file patterns that need string transformation */
|
|
i18nPatterns: string[]
|
|
}
|
|
|
|
export const defaultConfig: MergeConfig = {
|
|
packageMappings: [
|
|
{ from: "opencode-ai", to: "@kilocode/cli" },
|
|
{ from: "@opencode-ai/cli", to: "@kilocode/cli" },
|
|
{ from: "@opencode-ai/sdk", to: "@kilocode/sdk" },
|
|
{ from: "@opencode-ai/plugin", to: "@kilocode/plugin" },
|
|
],
|
|
|
|
keepOurs: [
|
|
"README.md",
|
|
"CONTRIBUTING.md",
|
|
"CODE_OF_CONDUCT.md",
|
|
"PRIVACY.md",
|
|
"SECURITY.md",
|
|
"AGENTS.md",
|
|
// GitHub workflows - MANUAL REVIEW (can break CI/CD)
|
|
".github/workflows/publish-stable.yml",
|
|
".github/workflows/publish.yml",
|
|
".github/workflows/close-stale-prs.yml",
|
|
".github/pull_request_template.md",
|
|
// Kilo-specific command files
|
|
".opencode/command/commit.md",
|
|
// Kilo-specific publish scripts
|
|
"packages/opencode/script/publish-registries.ts",
|
|
// GitHub Action - Kilo version is fully ported and complete
|
|
"github/action.yml",
|
|
"github/README.md",
|
|
"github/.gitignore",
|
|
"github/script/release",
|
|
"github/script/publish",
|
|
],
|
|
|
|
// Files that only exist in upstream and should NOT be added to Kilo
|
|
// These are removed during merge if they appear
|
|
skipFiles: [
|
|
// Translated README files (Kilo doesn't have these)
|
|
"README.ar.md",
|
|
"README.br.md",
|
|
"README.bs.md",
|
|
"README.da.md",
|
|
"README.de.md",
|
|
"README.es.md",
|
|
"README.fr.md",
|
|
"README.it.md",
|
|
"README.ja.md",
|
|
"README.ko.md",
|
|
"README.no.md",
|
|
"README.pl.md",
|
|
"README.ru.md",
|
|
"README.th.md",
|
|
"README.tr.md",
|
|
"README.zh.md",
|
|
"README.zht.md",
|
|
// Stats file
|
|
"STATS.md",
|
|
// Workflows that don't exist in Kilo
|
|
".github/workflows/update-nix-hashes.yml",
|
|
".github/workflows/deploy.yml",
|
|
".github/workflows/docs-update.yml",
|
|
".github/workflows/docs-locale-sync.yml",
|
|
// Vouch files (Kilo doesn't use Vouch)
|
|
".github/VOUCHED.md",
|
|
".github/workflows/vouch-check-issue.yml",
|
|
".github/workflows/vouch-check-pr.yml",
|
|
".github/workflows/vouch-manage-by-issue.yml",
|
|
// SST infrastructure files (Kilo is CLI-only, no hosted platform)
|
|
"sst.config.ts",
|
|
"sst-env.d.ts",
|
|
// Hosted platform packages (not needed for CLI)
|
|
"infra/**",
|
|
"packages/console/**",
|
|
"packages/enterprise/**",
|
|
"packages/web/**",
|
|
"packages/slack/**",
|
|
"packages/function/**",
|
|
"packages/docs/**",
|
|
"packages/identity/**",
|
|
// GitHub Action - Kilo version is fully ported and complete
|
|
"github/index.ts",
|
|
"github/package.json",
|
|
"github/tsconfig.json",
|
|
"github/bun.lock",
|
|
"github/sst-env.d.ts",
|
|
],
|
|
|
|
// Files that should take upstream version and apply Kilo branding transforms
|
|
// These are files with only branding differences, no logic changes
|
|
takeTheirsAndTransform: [
|
|
// App components with branding only
|
|
"packages/app/src/components/**/*.tsx",
|
|
"packages/app/src/context/**/*.tsx",
|
|
"packages/app/src/pages/**/*.tsx",
|
|
// UI components
|
|
"packages/ui/src/components/**/*.tsx",
|
|
"packages/ui/src/context/**/*.tsx",
|
|
// Desktop TypeScript files (not Rust)
|
|
"packages/desktop/src/**/*.ts",
|
|
// E2E and test fixtures
|
|
"packages/app/e2e/**/*.ts",
|
|
"packages/app/script/**/*.ts",
|
|
],
|
|
|
|
// Tauri/Desktop config files with predictable branding patterns
|
|
tauriFiles: [
|
|
"packages/desktop/src-tauri/tauri.conf.json",
|
|
"packages/desktop/src-tauri/tauri.prod.conf.json",
|
|
"packages/desktop/src-tauri/Cargo.toml",
|
|
"packages/desktop/src-tauri/Cargo.lock",
|
|
"packages/desktop/src-tauri/src/*.rs",
|
|
],
|
|
|
|
// Script files with GitHub API references
|
|
scriptFiles: ["script/*.ts", "packages/opencode/script/*.ts"],
|
|
|
|
// Extension files
|
|
extensionFiles: ["packages/extensions/**/*"],
|
|
|
|
// Web/docs files
|
|
webFiles: [],
|
|
|
|
// Lock files and generated files to accept ours and regenerate after merge
|
|
// Note: nix/hashes.json is regenerated by CI (update-nix-hashes.yml), not locally
|
|
lockFiles: [
|
|
"bun.lock",
|
|
"**/bun.lock",
|
|
"package-lock.json",
|
|
"**/package-lock.json",
|
|
"yarn.lock",
|
|
"**/yarn.lock",
|
|
"pnpm-lock.yaml",
|
|
"**/pnpm-lock.yaml",
|
|
"Cargo.lock",
|
|
"**/Cargo.lock",
|
|
"nix/hashes.json",
|
|
],
|
|
|
|
kiloDirectories: [
|
|
"packages/opencode/src/kilocode",
|
|
"packages/opencode/test/kilocode",
|
|
"packages/kilo-gateway",
|
|
"packages/kilo-telemetry",
|
|
"script/upstream",
|
|
],
|
|
|
|
excludePatterns: [
|
|
"**/node_modules/**",
|
|
"**/dist/**",
|
|
"**/.git/**",
|
|
"**/bun.lock",
|
|
"**/package-lock.json",
|
|
"**/yarn.lock",
|
|
],
|
|
|
|
baseBranch: "dev",
|
|
branchPrefix: "upstream-merge",
|
|
upstreamRemote: "upstream",
|
|
originRemote: "origin",
|
|
|
|
// i18n translation files that need Kilo branding transforms
|
|
i18nPatterns: ["packages/*/src/i18n/*.ts", "packages/desktop/src/i18n/*.ts"],
|
|
}
|
|
|
|
export function loadConfig(overrides?: Partial<MergeConfig>): MergeConfig {
|
|
return { ...defaultConfig, ...overrides }
|
|
}
|