claudekit-cli 3.41.4-dev.43 → 3.41.4-dev.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli-manifest.json +2128 -0
- package/dist/index.js +1744 -783
- package/package.json +8 -3
package/dist/index.js
CHANGED
|
@@ -6907,6 +6907,9 @@ var init_checksum_utils = __esm(() => {
|
|
|
6907
6907
|
function setTaxonomyOverrides(overrides) {
|
|
6908
6908
|
userOverrides = overrides;
|
|
6909
6909
|
}
|
|
6910
|
+
function getOpenCodeDefaultModelOverride() {
|
|
6911
|
+
return userOverrides?.opencode?.default?.model;
|
|
6912
|
+
}
|
|
6910
6913
|
function resolveModel(sourceModel, targetProvider) {
|
|
6911
6914
|
if (sourceModel === undefined || sourceModel === null) {
|
|
6912
6915
|
return { resolved: null };
|
|
@@ -6941,7 +6944,7 @@ function resolveModel(sourceModel, targetProvider) {
|
|
|
6941
6944
|
}
|
|
6942
6945
|
return { resolved: providerMap[tier] };
|
|
6943
6946
|
}
|
|
6944
|
-
var SOURCE_TIER_MAP, DEFAULT_PROVIDER_MODEL_MAP, userOverrides;
|
|
6947
|
+
var OPENCODE_DEFAULT_MODEL = "anthropic/claude-sonnet-4-6", SOURCE_TIER_MAP, DEFAULT_PROVIDER_MODEL_MAP, userOverrides;
|
|
6945
6948
|
var init_model_taxonomy = __esm(() => {
|
|
6946
6949
|
SOURCE_TIER_MAP = {
|
|
6947
6950
|
opus: "heavy",
|
|
@@ -60755,7 +60758,7 @@ var package_default;
|
|
|
60755
60758
|
var init_package = __esm(() => {
|
|
60756
60759
|
package_default = {
|
|
60757
60760
|
name: "claudekit-cli",
|
|
60758
|
-
version: "3.41.4-dev.
|
|
60761
|
+
version: "3.41.4-dev.45",
|
|
60759
60762
|
description: "CLI tool for bootstrapping and updating ClaudeKit projects",
|
|
60760
60763
|
type: "module",
|
|
60761
60764
|
repository: {
|
|
@@ -60772,7 +60775,8 @@ var init_package = __esm(() => {
|
|
|
60772
60775
|
files: [
|
|
60773
60776
|
"bin/ck.js",
|
|
60774
60777
|
"dist/index.js",
|
|
60775
|
-
"dist/ui/"
|
|
60778
|
+
"dist/ui/",
|
|
60779
|
+
"cli-manifest.json"
|
|
60776
60780
|
],
|
|
60777
60781
|
scripts: {
|
|
60778
60782
|
tauri: "tauri",
|
|
@@ -60807,7 +60811,11 @@ var init_package = __esm(() => {
|
|
|
60807
60811
|
metrics: "bun run scripts/workflow-metrics.ts",
|
|
60808
60812
|
validate: "bun run typecheck && bun run lint && bun run desktop:check-sync && bun run desktop:validate-config && bun run desktop:validate-icons && bun test && bun run ui:test && bun run build",
|
|
60809
60813
|
"install:hooks": "./.githooks/install.sh",
|
|
60810
|
-
prepare: `node -e "try{require('child_process').execSync('git rev-parse --git-dir',{stdio:'ignore'});require('child_process').execSync('bash .githooks/install.sh',{stdio:'inherit'})}catch(e){console.warn('[i] Hook install skipped:',e.message)}"
|
|
60814
|
+
prepare: `node -e "try{require('child_process').execSync('git rev-parse --git-dir',{stdio:'ignore'});require('child_process').execSync('bash .githooks/install.sh',{stdio:'inherit'})}catch(e){console.warn('[i] Hook install skipped:',e.message)}"`,
|
|
60815
|
+
"help:check-parity": "bun run scripts/check-help-parity.ts",
|
|
60816
|
+
"manifest:generate": "bun run scripts/generate-cli-manifest.ts",
|
|
60817
|
+
"docs:generate": "bun run scripts/generate-cli-reference.ts",
|
|
60818
|
+
prepublishOnly: "bun run help:check-parity && bun run manifest:generate && bun run docs:generate"
|
|
60811
60819
|
},
|
|
60812
60820
|
keywords: [
|
|
60813
60821
|
"cli",
|
|
@@ -71880,10 +71888,10 @@ __export(exports_worktree_manager, {
|
|
|
71880
71888
|
cleanupAllWorktrees: () => cleanupAllWorktrees
|
|
71881
71889
|
});
|
|
71882
71890
|
import { existsSync as existsSync67 } from "node:fs";
|
|
71883
|
-
import { readFile as
|
|
71884
|
-
import { join as
|
|
71891
|
+
import { readFile as readFile62, writeFile as writeFile34 } from "node:fs/promises";
|
|
71892
|
+
import { join as join149 } from "node:path";
|
|
71885
71893
|
async function createWorktree(projectDir, issueNumber, baseBranch) {
|
|
71886
|
-
const worktreePath =
|
|
71894
|
+
const worktreePath = join149(projectDir, WORKTREE_DIR, `issue-${issueNumber}`);
|
|
71887
71895
|
const branchName = `ck-watch/issue-${issueNumber}`;
|
|
71888
71896
|
await spawnAndCollect("git", ["fetch", "origin", baseBranch], projectDir).catch(() => {
|
|
71889
71897
|
logger.warning(`[worktree] Could not fetch origin/${baseBranch}, using local`);
|
|
@@ -71901,7 +71909,7 @@ async function createWorktree(projectDir, issueNumber, baseBranch) {
|
|
|
71901
71909
|
return worktreePath;
|
|
71902
71910
|
}
|
|
71903
71911
|
async function removeWorktree(projectDir, issueNumber) {
|
|
71904
|
-
const worktreePath =
|
|
71912
|
+
const worktreePath = join149(projectDir, WORKTREE_DIR, `issue-${issueNumber}`);
|
|
71905
71913
|
const branchName = `ck-watch/issue-${issueNumber}`;
|
|
71906
71914
|
try {
|
|
71907
71915
|
await spawnAndCollect("git", ["worktree", "remove", worktreePath, "--force"], projectDir);
|
|
@@ -71915,7 +71923,7 @@ async function listActiveWorktrees(projectDir) {
|
|
|
71915
71923
|
try {
|
|
71916
71924
|
const output2 = await spawnAndCollect("git", ["worktree", "list", "--porcelain"], projectDir);
|
|
71917
71925
|
const issueNumbers = [];
|
|
71918
|
-
const worktreePrefix =
|
|
71926
|
+
const worktreePrefix = join149(projectDir, WORKTREE_DIR, "issue-").replace(/\\/g, "/");
|
|
71919
71927
|
for (const line of output2.split(`
|
|
71920
71928
|
`)) {
|
|
71921
71929
|
if (line.startsWith("worktree ")) {
|
|
@@ -71943,16 +71951,16 @@ async function cleanupAllWorktrees(projectDir) {
|
|
|
71943
71951
|
await spawnAndCollect("git", ["worktree", "prune"], projectDir).catch(() => {});
|
|
71944
71952
|
}
|
|
71945
71953
|
async function ensureGitignore(projectDir) {
|
|
71946
|
-
const gitignorePath =
|
|
71954
|
+
const gitignorePath = join149(projectDir, ".gitignore");
|
|
71947
71955
|
try {
|
|
71948
|
-
const content = existsSync67(gitignorePath) ? await
|
|
71956
|
+
const content = existsSync67(gitignorePath) ? await readFile62(gitignorePath, "utf-8") : "";
|
|
71949
71957
|
if (!content.includes(".worktrees")) {
|
|
71950
71958
|
const newContent = content.endsWith(`
|
|
71951
71959
|
`) ? `${content}.worktrees/
|
|
71952
71960
|
` : `${content}
|
|
71953
71961
|
.worktrees/
|
|
71954
71962
|
`;
|
|
71955
|
-
await
|
|
71963
|
+
await writeFile34(gitignorePath, newContent, "utf-8");
|
|
71956
71964
|
logger.info("[worktree] Added .worktrees/ to .gitignore");
|
|
71957
71965
|
}
|
|
71958
71966
|
} catch (err) {
|
|
@@ -72048,9 +72056,9 @@ var init_content_validator = __esm(() => {
|
|
|
72048
72056
|
// src/commands/content/phases/context-cache-manager.ts
|
|
72049
72057
|
import { createHash as createHash8 } from "node:crypto";
|
|
72050
72058
|
import { existsSync as existsSync73, mkdirSync as mkdirSync5, readFileSync as readFileSync18, readdirSync as readdirSync10, statSync as statSync13 } from "node:fs";
|
|
72051
|
-
import { rename as rename12, writeFile as
|
|
72052
|
-
import { homedir as
|
|
72053
|
-
import { basename as basename30, join as
|
|
72059
|
+
import { rename as rename12, writeFile as writeFile36 } from "node:fs/promises";
|
|
72060
|
+
import { homedir as homedir49 } from "node:os";
|
|
72061
|
+
import { basename as basename30, join as join156 } from "node:path";
|
|
72054
72062
|
function getCachedContext(repoPath) {
|
|
72055
72063
|
const cachePath = getCacheFilePath(repoPath);
|
|
72056
72064
|
if (!existsSync73(cachePath))
|
|
@@ -72075,7 +72083,7 @@ async function saveCachedContext(repoPath, cache5) {
|
|
|
72075
72083
|
}
|
|
72076
72084
|
const cachePath = getCacheFilePath(repoPath);
|
|
72077
72085
|
const tmpPath = `${cachePath}.tmp`;
|
|
72078
|
-
await
|
|
72086
|
+
await writeFile36(tmpPath, JSON.stringify(cache5, null, 2), "utf-8");
|
|
72079
72087
|
await rename12(tmpPath, cachePath);
|
|
72080
72088
|
}
|
|
72081
72089
|
function computeSourceHash(repoPath) {
|
|
@@ -72093,25 +72101,25 @@ function computeSourceHash(repoPath) {
|
|
|
72093
72101
|
}
|
|
72094
72102
|
function getDocSourcePaths(repoPath) {
|
|
72095
72103
|
const paths = [];
|
|
72096
|
-
const docsDir =
|
|
72104
|
+
const docsDir = join156(repoPath, "docs");
|
|
72097
72105
|
if (existsSync73(docsDir)) {
|
|
72098
72106
|
try {
|
|
72099
72107
|
const files = readdirSync10(docsDir);
|
|
72100
72108
|
for (const f3 of files) {
|
|
72101
72109
|
if (f3.endsWith(".md"))
|
|
72102
|
-
paths.push(
|
|
72110
|
+
paths.push(join156(docsDir, f3));
|
|
72103
72111
|
}
|
|
72104
72112
|
} catch {}
|
|
72105
72113
|
}
|
|
72106
|
-
const readme =
|
|
72114
|
+
const readme = join156(repoPath, "README.md");
|
|
72107
72115
|
if (existsSync73(readme))
|
|
72108
72116
|
paths.push(readme);
|
|
72109
|
-
const stylesDir =
|
|
72117
|
+
const stylesDir = join156(repoPath, "assets", "writing-styles");
|
|
72110
72118
|
if (existsSync73(stylesDir)) {
|
|
72111
72119
|
try {
|
|
72112
72120
|
const files = readdirSync10(stylesDir);
|
|
72113
72121
|
for (const f3 of files) {
|
|
72114
|
-
paths.push(
|
|
72122
|
+
paths.push(join156(stylesDir, f3));
|
|
72115
72123
|
}
|
|
72116
72124
|
} catch {}
|
|
72117
72125
|
}
|
|
@@ -72120,11 +72128,11 @@ function getDocSourcePaths(repoPath) {
|
|
|
72120
72128
|
function getCacheFilePath(repoPath) {
|
|
72121
72129
|
const repoName = basename30(repoPath).replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
72122
72130
|
const pathHash = createHash8("sha256").update(repoPath).digest("hex").slice(0, 8);
|
|
72123
|
-
return
|
|
72131
|
+
return join156(CACHE_DIR, `${repoName}-${pathHash}-context-cache.json`);
|
|
72124
72132
|
}
|
|
72125
72133
|
var CACHE_DIR, CACHE_TTL_MS4;
|
|
72126
72134
|
var init_context_cache_manager = __esm(() => {
|
|
72127
|
-
CACHE_DIR =
|
|
72135
|
+
CACHE_DIR = join156(homedir49(), ".claudekit", "cache");
|
|
72128
72136
|
CACHE_TTL_MS4 = 24 * 60 * 60 * 1000;
|
|
72129
72137
|
});
|
|
72130
72138
|
|
|
@@ -72305,7 +72313,7 @@ function extractContentFromResponse(response) {
|
|
|
72305
72313
|
// src/commands/content/phases/docs-summarizer.ts
|
|
72306
72314
|
import { execSync as execSync7 } from "node:child_process";
|
|
72307
72315
|
import { existsSync as existsSync74, readFileSync as readFileSync19, readdirSync as readdirSync11 } from "node:fs";
|
|
72308
|
-
import { join as
|
|
72316
|
+
import { join as join157 } from "node:path";
|
|
72309
72317
|
async function summarizeProjectDocs(repoPath, contentLogger) {
|
|
72310
72318
|
const rawContent = collectRawDocs(repoPath);
|
|
72311
72319
|
if (rawContent.total.length < 200) {
|
|
@@ -72359,12 +72367,12 @@ function collectRawDocs(repoPath) {
|
|
|
72359
72367
|
return capped;
|
|
72360
72368
|
};
|
|
72361
72369
|
const docsContent = [];
|
|
72362
|
-
const docsDir =
|
|
72370
|
+
const docsDir = join157(repoPath, "docs");
|
|
72363
72371
|
if (existsSync74(docsDir)) {
|
|
72364
72372
|
try {
|
|
72365
72373
|
const files = readdirSync11(docsDir).filter((f3) => f3.endsWith(".md")).sort();
|
|
72366
72374
|
for (const f3 of files) {
|
|
72367
|
-
const content = readCapped(
|
|
72375
|
+
const content = readCapped(join157(docsDir, f3), 5000);
|
|
72368
72376
|
if (content) {
|
|
72369
72377
|
docsContent.push(`### ${f3}
|
|
72370
72378
|
${content}`);
|
|
@@ -72378,21 +72386,21 @@ ${content}`);
|
|
|
72378
72386
|
let brand = "";
|
|
72379
72387
|
const brandCandidates = ["docs/brand-guidelines.md", "docs/design-guidelines.md"];
|
|
72380
72388
|
for (const p of brandCandidates) {
|
|
72381
|
-
brand = readCapped(
|
|
72389
|
+
brand = readCapped(join157(repoPath, p), 3000);
|
|
72382
72390
|
if (brand)
|
|
72383
72391
|
break;
|
|
72384
72392
|
}
|
|
72385
72393
|
let styles3 = "";
|
|
72386
|
-
const stylesDir =
|
|
72394
|
+
const stylesDir = join157(repoPath, "assets", "writing-styles");
|
|
72387
72395
|
if (existsSync74(stylesDir)) {
|
|
72388
72396
|
try {
|
|
72389
72397
|
const files = readdirSync11(stylesDir).slice(0, 3);
|
|
72390
|
-
styles3 = files.map((f3) => readCapped(
|
|
72398
|
+
styles3 = files.map((f3) => readCapped(join157(stylesDir, f3), 1000)).filter(Boolean).join(`
|
|
72391
72399
|
|
|
72392
72400
|
`);
|
|
72393
72401
|
} catch {}
|
|
72394
72402
|
}
|
|
72395
|
-
const readme = readCapped(
|
|
72403
|
+
const readme = readCapped(join157(repoPath, "README.md"), 3000);
|
|
72396
72404
|
const total = [docs, brand, styles3, readme].join(`
|
|
72397
72405
|
`);
|
|
72398
72406
|
return { docs, brand, styles: styles3, readme, total };
|
|
@@ -72578,10 +72586,10 @@ IMPORTANT: Generate the image and output the path as JSON: {"imagePath": "/path/
|
|
|
72578
72586
|
// src/commands/content/phases/photo-generator.ts
|
|
72579
72587
|
import { execSync as execSync8 } from "node:child_process";
|
|
72580
72588
|
import { existsSync as existsSync75, mkdirSync as mkdirSync6, readdirSync as readdirSync12 } from "node:fs";
|
|
72581
|
-
import { homedir as
|
|
72582
|
-
import { join as
|
|
72589
|
+
import { homedir as homedir50 } from "node:os";
|
|
72590
|
+
import { join as join158 } from "node:path";
|
|
72583
72591
|
async function generatePhoto(_content, context, config, platform17, contentId, contentLogger) {
|
|
72584
|
-
const mediaDir =
|
|
72592
|
+
const mediaDir = join158(config.contentDir.replace(/^~/, homedir50()), "media", String(contentId));
|
|
72585
72593
|
if (!existsSync75(mediaDir)) {
|
|
72586
72594
|
mkdirSync6(mediaDir, { recursive: true });
|
|
72587
72595
|
}
|
|
@@ -72606,7 +72614,7 @@ async function generatePhoto(_content, context, config, platform17, contentId, c
|
|
|
72606
72614
|
const imageFile = files.find((f3) => /\.(png|jpg|jpeg|webp)$/i.test(f3));
|
|
72607
72615
|
if (imageFile) {
|
|
72608
72616
|
const ext2 = imageFile.split(".").pop() ?? "png";
|
|
72609
|
-
return { path:
|
|
72617
|
+
return { path: join158(mediaDir, imageFile), ...dimensions, format: ext2 };
|
|
72610
72618
|
}
|
|
72611
72619
|
contentLogger.warn(`Photo generation produced no image for content ${contentId}`);
|
|
72612
72620
|
return null;
|
|
@@ -72695,8 +72703,8 @@ var init_content_creator = __esm(() => {
|
|
|
72695
72703
|
|
|
72696
72704
|
// src/commands/content/phases/content-logger.ts
|
|
72697
72705
|
import { createWriteStream as createWriteStream4, existsSync as existsSync76, mkdirSync as mkdirSync7, statSync as statSync14 } from "node:fs";
|
|
72698
|
-
import { homedir as
|
|
72699
|
-
import { join as
|
|
72706
|
+
import { homedir as homedir51 } from "node:os";
|
|
72707
|
+
import { join as join159 } from "node:path";
|
|
72700
72708
|
|
|
72701
72709
|
class ContentLogger {
|
|
72702
72710
|
stream = null;
|
|
@@ -72704,7 +72712,7 @@ class ContentLogger {
|
|
|
72704
72712
|
logDir;
|
|
72705
72713
|
maxBytes;
|
|
72706
72714
|
constructor(maxBytes = 0) {
|
|
72707
|
-
this.logDir =
|
|
72715
|
+
this.logDir = join159(homedir51(), ".claudekit", "logs");
|
|
72708
72716
|
this.maxBytes = maxBytes;
|
|
72709
72717
|
}
|
|
72710
72718
|
init() {
|
|
@@ -72736,7 +72744,7 @@ class ContentLogger {
|
|
|
72736
72744
|
}
|
|
72737
72745
|
}
|
|
72738
72746
|
getLogPath() {
|
|
72739
|
-
return
|
|
72747
|
+
return join159(this.logDir, `content-${this.getDateStr()}.log`);
|
|
72740
72748
|
}
|
|
72741
72749
|
write(level, message) {
|
|
72742
72750
|
this.rotateIfNeeded();
|
|
@@ -72753,18 +72761,18 @@ class ContentLogger {
|
|
|
72753
72761
|
if (dateStr !== this.currentDate) {
|
|
72754
72762
|
this.close();
|
|
72755
72763
|
this.currentDate = dateStr;
|
|
72756
|
-
const logPath =
|
|
72764
|
+
const logPath = join159(this.logDir, `content-${dateStr}.log`);
|
|
72757
72765
|
this.stream = createWriteStream4(logPath, { flags: "a", mode: 384 });
|
|
72758
72766
|
return;
|
|
72759
72767
|
}
|
|
72760
72768
|
if (this.maxBytes > 0 && this.stream) {
|
|
72761
|
-
const logPath =
|
|
72769
|
+
const logPath = join159(this.logDir, `content-${this.currentDate}.log`);
|
|
72762
72770
|
try {
|
|
72763
72771
|
const stat25 = statSync14(logPath);
|
|
72764
72772
|
if (stat25.size >= this.maxBytes) {
|
|
72765
72773
|
this.close();
|
|
72766
72774
|
const suffix = Date.now();
|
|
72767
|
-
const rotatedPath =
|
|
72775
|
+
const rotatedPath = join159(this.logDir, `content-${this.currentDate}-${suffix}.log`);
|
|
72768
72776
|
import("node:fs/promises").then(({ rename: rename13 }) => rename13(logPath, rotatedPath).catch(() => {}));
|
|
72769
72777
|
this.stream = createWriteStream4(logPath, { flags: "w", mode: 384 });
|
|
72770
72778
|
}
|
|
@@ -72802,7 +72810,7 @@ var init_sqlite_client = () => {};
|
|
|
72802
72810
|
|
|
72803
72811
|
// src/commands/content/phases/db-manager.ts
|
|
72804
72812
|
import { existsSync as existsSync77, mkdirSync as mkdirSync8 } from "node:fs";
|
|
72805
|
-
import { dirname as
|
|
72813
|
+
import { dirname as dirname46 } from "node:path";
|
|
72806
72814
|
function initDatabase(dbPath) {
|
|
72807
72815
|
ensureParentDir(dbPath);
|
|
72808
72816
|
const db = openDatabase(dbPath);
|
|
@@ -72823,7 +72831,7 @@ function runRetentionCleanup(db, retentionDays = 90) {
|
|
|
72823
72831
|
db.prepare("DELETE FROM git_events WHERE processed = 1 AND created_at < ?").run(cutoff);
|
|
72824
72832
|
}
|
|
72825
72833
|
function ensureParentDir(dbPath) {
|
|
72826
|
-
const dir =
|
|
72834
|
+
const dir = dirname46(dbPath);
|
|
72827
72835
|
if (dir && !existsSync77(dir)) {
|
|
72828
72836
|
mkdirSync8(dir, { recursive: true });
|
|
72829
72837
|
}
|
|
@@ -72990,7 +72998,7 @@ function isNoiseCommit(title, author) {
|
|
|
72990
72998
|
// src/commands/content/phases/change-detector.ts
|
|
72991
72999
|
import { execSync as execSync10, spawnSync as spawnSync9 } from "node:child_process";
|
|
72992
73000
|
import { existsSync as existsSync78, readFileSync as readFileSync20, readdirSync as readdirSync13, statSync as statSync15 } from "node:fs";
|
|
72993
|
-
import { join as
|
|
73001
|
+
import { join as join160 } from "node:path";
|
|
72994
73002
|
function detectCommits(repo, since) {
|
|
72995
73003
|
try {
|
|
72996
73004
|
const fetchUrl = sshToHttps(repo.remoteUrl);
|
|
@@ -73099,7 +73107,7 @@ function detectTags(repo, since) {
|
|
|
73099
73107
|
}
|
|
73100
73108
|
}
|
|
73101
73109
|
function detectCompletedPlans(repo, since) {
|
|
73102
|
-
const plansDir =
|
|
73110
|
+
const plansDir = join160(repo.path, "plans");
|
|
73103
73111
|
if (!existsSync78(plansDir))
|
|
73104
73112
|
return [];
|
|
73105
73113
|
const sinceMs = new Date(since).getTime();
|
|
@@ -73109,7 +73117,7 @@ function detectCompletedPlans(repo, since) {
|
|
|
73109
73117
|
for (const entry of entries) {
|
|
73110
73118
|
if (!entry.isDirectory())
|
|
73111
73119
|
continue;
|
|
73112
|
-
const planFile =
|
|
73120
|
+
const planFile = join160(plansDir, entry.name, "plan.md");
|
|
73113
73121
|
if (!existsSync78(planFile))
|
|
73114
73122
|
continue;
|
|
73115
73123
|
try {
|
|
@@ -73187,7 +73195,7 @@ function classifyCommit(event) {
|
|
|
73187
73195
|
// src/commands/content/phases/repo-discoverer.ts
|
|
73188
73196
|
import { execSync as execSync11 } from "node:child_process";
|
|
73189
73197
|
import { readdirSync as readdirSync14 } from "node:fs";
|
|
73190
|
-
import { join as
|
|
73198
|
+
import { join as join161 } from "node:path";
|
|
73191
73199
|
function discoverRepos2(cwd2) {
|
|
73192
73200
|
const repos = [];
|
|
73193
73201
|
if (isGitRepoRoot(cwd2)) {
|
|
@@ -73200,7 +73208,7 @@ function discoverRepos2(cwd2) {
|
|
|
73200
73208
|
for (const entry of entries) {
|
|
73201
73209
|
if (!entry.isDirectory() || entry.name.startsWith("."))
|
|
73202
73210
|
continue;
|
|
73203
|
-
const dirPath =
|
|
73211
|
+
const dirPath = join161(cwd2, entry.name);
|
|
73204
73212
|
if (isGitRepoRoot(dirPath)) {
|
|
73205
73213
|
const info = getRepoInfo(dirPath);
|
|
73206
73214
|
if (info)
|
|
@@ -73867,12 +73875,12 @@ var init_types6 = __esm(() => {
|
|
|
73867
73875
|
});
|
|
73868
73876
|
|
|
73869
73877
|
// src/commands/content/phases/state-manager.ts
|
|
73870
|
-
import { readFile as
|
|
73871
|
-
import { join as
|
|
73878
|
+
import { readFile as readFile64, rename as rename13, writeFile as writeFile37 } from "node:fs/promises";
|
|
73879
|
+
import { join as join162 } from "node:path";
|
|
73872
73880
|
async function loadContentConfig(projectDir) {
|
|
73873
|
-
const configPath =
|
|
73881
|
+
const configPath = join162(projectDir, CK_CONFIG_FILE2);
|
|
73874
73882
|
try {
|
|
73875
|
-
const raw2 = await
|
|
73883
|
+
const raw2 = await readFile64(configPath, "utf-8");
|
|
73876
73884
|
const json = JSON.parse(raw2);
|
|
73877
73885
|
return ContentConfigSchema.parse(json.content ?? {});
|
|
73878
73886
|
} catch {
|
|
@@ -73880,15 +73888,15 @@ async function loadContentConfig(projectDir) {
|
|
|
73880
73888
|
}
|
|
73881
73889
|
}
|
|
73882
73890
|
async function saveContentConfig(projectDir, config) {
|
|
73883
|
-
const configPath =
|
|
73891
|
+
const configPath = join162(projectDir, CK_CONFIG_FILE2);
|
|
73884
73892
|
const json = await readJsonSafe(configPath);
|
|
73885
73893
|
json.content = { ...json.content, ...config };
|
|
73886
73894
|
await atomicWrite(configPath, json);
|
|
73887
73895
|
}
|
|
73888
73896
|
async function loadContentState(projectDir) {
|
|
73889
|
-
const configPath =
|
|
73897
|
+
const configPath = join162(projectDir, CK_CONFIG_FILE2);
|
|
73890
73898
|
try {
|
|
73891
|
-
const raw2 = await
|
|
73899
|
+
const raw2 = await readFile64(configPath, "utf-8");
|
|
73892
73900
|
const json = JSON.parse(raw2);
|
|
73893
73901
|
const contentBlock = json.content ?? {};
|
|
73894
73902
|
return ContentStateSchema.parse(contentBlock.state ?? {});
|
|
@@ -73897,7 +73905,7 @@ async function loadContentState(projectDir) {
|
|
|
73897
73905
|
}
|
|
73898
73906
|
}
|
|
73899
73907
|
async function saveContentState(projectDir, state) {
|
|
73900
|
-
const configPath =
|
|
73908
|
+
const configPath = join162(projectDir, CK_CONFIG_FILE2);
|
|
73901
73909
|
const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
|
|
73902
73910
|
for (const key of Object.keys(state.dailyPostCounts)) {
|
|
73903
73911
|
const dateStr = key.slice(-10);
|
|
@@ -73915,7 +73923,7 @@ async function saveContentState(projectDir, state) {
|
|
|
73915
73923
|
}
|
|
73916
73924
|
async function readJsonSafe(filePath) {
|
|
73917
73925
|
try {
|
|
73918
|
-
const raw2 = await
|
|
73926
|
+
const raw2 = await readFile64(filePath, "utf-8");
|
|
73919
73927
|
return JSON.parse(raw2);
|
|
73920
73928
|
} catch {
|
|
73921
73929
|
return {};
|
|
@@ -73923,7 +73931,7 @@ async function readJsonSafe(filePath) {
|
|
|
73923
73931
|
}
|
|
73924
73932
|
async function atomicWrite(filePath, data) {
|
|
73925
73933
|
const tmpPath = `${filePath}.tmp`;
|
|
73926
|
-
await
|
|
73934
|
+
await writeFile37(tmpPath, JSON.stringify(data, null, 2), "utf-8");
|
|
73927
73935
|
await rename13(tmpPath, filePath);
|
|
73928
73936
|
}
|
|
73929
73937
|
var CK_CONFIG_FILE2 = ".ck.json";
|
|
@@ -74179,7 +74187,7 @@ var init_platform_setup_x = __esm(() => {
|
|
|
74179
74187
|
|
|
74180
74188
|
// src/commands/content/phases/setup-wizard.ts
|
|
74181
74189
|
import { existsSync as existsSync79 } from "node:fs";
|
|
74182
|
-
import { join as
|
|
74190
|
+
import { join as join163 } from "node:path";
|
|
74183
74191
|
async function runSetupWizard2(cwd2, contentLogger) {
|
|
74184
74192
|
console.log();
|
|
74185
74193
|
oe(import_picocolors43.default.bgCyan(import_picocolors43.default.white(" CK Content — Multi-Channel Content Engine ")));
|
|
@@ -74247,8 +74255,8 @@ async function showRepoSummary(cwd2) {
|
|
|
74247
74255
|
function detectBrandAssets(cwd2, contentLogger) {
|
|
74248
74256
|
const repos = discoverRepos2(cwd2);
|
|
74249
74257
|
for (const repo of repos) {
|
|
74250
|
-
const hasGuidelines = existsSync79(
|
|
74251
|
-
const hasStyles = existsSync79(
|
|
74258
|
+
const hasGuidelines = existsSync79(join163(repo.path, "docs", "brand-guidelines.md"));
|
|
74259
|
+
const hasStyles = existsSync79(join163(repo.path, "assets", "writing-styles"));
|
|
74252
74260
|
if (!hasGuidelines) {
|
|
74253
74261
|
f2.warning(`${repo.name}: No docs/brand-guidelines.md — content will use generic tone.`);
|
|
74254
74262
|
contentLogger.warn(`${repo.name}: missing docs/brand-guidelines.md`);
|
|
@@ -74315,11 +74323,11 @@ var init_setup_wizard = __esm(() => {
|
|
|
74315
74323
|
|
|
74316
74324
|
// src/commands/content/content-review-commands.ts
|
|
74317
74325
|
import { existsSync as existsSync80 } from "node:fs";
|
|
74318
|
-
import { homedir as
|
|
74326
|
+
import { homedir as homedir52 } from "node:os";
|
|
74319
74327
|
async function queueContent() {
|
|
74320
74328
|
const cwd2 = process.cwd();
|
|
74321
74329
|
const config = await loadContentConfig(cwd2);
|
|
74322
|
-
const dbPath = config.dbPath.replace(/^~/,
|
|
74330
|
+
const dbPath = config.dbPath.replace(/^~/, homedir52());
|
|
74323
74331
|
if (!existsSync80(dbPath)) {
|
|
74324
74332
|
logger.info("No content database found. Run 'ck content setup' first.");
|
|
74325
74333
|
return;
|
|
@@ -74346,7 +74354,7 @@ async function queueContent() {
|
|
|
74346
74354
|
async function approveContentCmd(id) {
|
|
74347
74355
|
const cwd2 = process.cwd();
|
|
74348
74356
|
const config = await loadContentConfig(cwd2);
|
|
74349
|
-
const dbPath = config.dbPath.replace(/^~/,
|
|
74357
|
+
const dbPath = config.dbPath.replace(/^~/, homedir52());
|
|
74350
74358
|
const db = initDatabase(dbPath);
|
|
74351
74359
|
try {
|
|
74352
74360
|
approveContent(db, Number.parseInt(id, 10));
|
|
@@ -74358,7 +74366,7 @@ async function approveContentCmd(id) {
|
|
|
74358
74366
|
async function rejectContentCmd(id, reason) {
|
|
74359
74367
|
const cwd2 = process.cwd();
|
|
74360
74368
|
const config = await loadContentConfig(cwd2);
|
|
74361
|
-
const dbPath = config.dbPath.replace(/^~/,
|
|
74369
|
+
const dbPath = config.dbPath.replace(/^~/, homedir52());
|
|
74362
74370
|
const db = initDatabase(dbPath);
|
|
74363
74371
|
try {
|
|
74364
74372
|
rejectContent(db, Number.parseInt(id, 10), reason);
|
|
@@ -74389,10 +74397,10 @@ __export(exports_content_subcommands, {
|
|
|
74389
74397
|
approveContentCmd: () => approveContentCmd
|
|
74390
74398
|
});
|
|
74391
74399
|
import { existsSync as existsSync81, readFileSync as readFileSync21, unlinkSync as unlinkSync6 } from "node:fs";
|
|
74392
|
-
import { homedir as
|
|
74393
|
-
import { join as
|
|
74400
|
+
import { homedir as homedir53 } from "node:os";
|
|
74401
|
+
import { join as join164 } from "node:path";
|
|
74394
74402
|
function isDaemonRunning() {
|
|
74395
|
-
const lockFile =
|
|
74403
|
+
const lockFile = join164(LOCK_DIR, `${LOCK_NAME2}.lock`);
|
|
74396
74404
|
if (!existsSync81(lockFile))
|
|
74397
74405
|
return { running: false, pid: null };
|
|
74398
74406
|
try {
|
|
@@ -74424,7 +74432,7 @@ async function startContent(options2) {
|
|
|
74424
74432
|
await contentCommand(options2);
|
|
74425
74433
|
}
|
|
74426
74434
|
async function stopContent() {
|
|
74427
|
-
const lockFile =
|
|
74435
|
+
const lockFile = join164(LOCK_DIR, `${LOCK_NAME2}.lock`);
|
|
74428
74436
|
if (!existsSync81(lockFile)) {
|
|
74429
74437
|
logger.info("Content daemon is not running.");
|
|
74430
74438
|
return;
|
|
@@ -74463,9 +74471,9 @@ async function statusContent() {
|
|
|
74463
74471
|
} catch {}
|
|
74464
74472
|
}
|
|
74465
74473
|
async function logsContent(options2) {
|
|
74466
|
-
const logDir =
|
|
74474
|
+
const logDir = join164(homedir53(), ".claudekit", "logs");
|
|
74467
74475
|
const dateStr = new Date().toISOString().slice(0, 10).replace(/-/g, "");
|
|
74468
|
-
const logPath =
|
|
74476
|
+
const logPath = join164(logDir, `content-${dateStr}.log`);
|
|
74469
74477
|
if (!existsSync81(logPath)) {
|
|
74470
74478
|
logger.info("No content logs found for today.");
|
|
74471
74479
|
return;
|
|
@@ -74497,13 +74505,13 @@ var init_content_subcommands = __esm(() => {
|
|
|
74497
74505
|
init_setup_wizard();
|
|
74498
74506
|
init_state_manager();
|
|
74499
74507
|
init_content_review_commands();
|
|
74500
|
-
LOCK_DIR =
|
|
74508
|
+
LOCK_DIR = join164(homedir53(), ".claudekit", "locks");
|
|
74501
74509
|
});
|
|
74502
74510
|
|
|
74503
74511
|
// src/commands/content/content-command.ts
|
|
74504
74512
|
import { existsSync as existsSync82, mkdirSync as mkdirSync9, unlinkSync as unlinkSync7, writeFileSync as writeFileSync7 } from "node:fs";
|
|
74505
|
-
import { homedir as
|
|
74506
|
-
import { join as
|
|
74513
|
+
import { homedir as homedir54 } from "node:os";
|
|
74514
|
+
import { join as join165 } from "node:path";
|
|
74507
74515
|
async function contentCommand(options2) {
|
|
74508
74516
|
const cwd2 = process.cwd();
|
|
74509
74517
|
const contentLogger = new ContentLogger;
|
|
@@ -74535,7 +74543,7 @@ async function contentCommand(options2) {
|
|
|
74535
74543
|
if (!existsSync82(LOCK_DIR2))
|
|
74536
74544
|
mkdirSync9(LOCK_DIR2, { recursive: true });
|
|
74537
74545
|
writeFileSync7(LOCK_FILE, String(process.pid), "utf-8");
|
|
74538
|
-
const dbPath = config.dbPath.replace(/^~/,
|
|
74546
|
+
const dbPath = config.dbPath.replace(/^~/, homedir54());
|
|
74539
74547
|
const db = initDatabase(dbPath);
|
|
74540
74548
|
contentLogger.info(`Database initialised at ${dbPath}`);
|
|
74541
74549
|
const adapters = initializeAdapters(config);
|
|
@@ -74681,8 +74689,8 @@ var init_content_command = __esm(() => {
|
|
|
74681
74689
|
init_publisher();
|
|
74682
74690
|
init_review_manager();
|
|
74683
74691
|
init_state_manager();
|
|
74684
|
-
LOCK_DIR2 =
|
|
74685
|
-
LOCK_FILE =
|
|
74692
|
+
LOCK_DIR2 = join165(homedir54(), ".claudekit", "locks");
|
|
74693
|
+
LOCK_FILE = join165(LOCK_DIR2, "ck-content.lock");
|
|
74686
74694
|
});
|
|
74687
74695
|
|
|
74688
74696
|
// src/commands/content/index.ts
|
|
@@ -74703,59 +74711,21 @@ var init_content = __esm(() => {
|
|
|
74703
74711
|
init_content_subcommands();
|
|
74704
74712
|
});
|
|
74705
74713
|
|
|
74706
|
-
// src/domains/help/commands/
|
|
74707
|
-
var
|
|
74708
|
-
var
|
|
74709
|
-
|
|
74710
|
-
|
|
74711
|
-
|
|
74712
|
-
|
|
74713
|
-
flags: "--exclude <pattern>",
|
|
74714
|
-
description: "Exclude files matching glob pattern (can be used multiple times)"
|
|
74715
|
-
},
|
|
74716
|
-
{
|
|
74717
|
-
flags: "--beta",
|
|
74718
|
-
description: "Show beta versions in selection prompt"
|
|
74719
|
-
},
|
|
74720
|
-
{
|
|
74721
|
-
flags: "--refresh",
|
|
74722
|
-
description: "Bypass release cache to fetch latest versions from GitHub"
|
|
74723
|
-
}
|
|
74724
|
-
]
|
|
74725
|
-
};
|
|
74726
|
-
folderOptionsGroup = {
|
|
74727
|
-
title: "Folder Options",
|
|
74728
|
-
options: [
|
|
74729
|
-
{
|
|
74730
|
-
flags: "--docs-dir <name>",
|
|
74731
|
-
description: "Custom docs folder name to avoid conflicts with existing folders",
|
|
74732
|
-
defaultValue: "docs"
|
|
74733
|
-
},
|
|
74734
|
-
{
|
|
74735
|
-
flags: "--plans-dir <name>",
|
|
74736
|
-
description: "Custom plans folder name to avoid conflicts with existing folders",
|
|
74737
|
-
defaultValue: "plans"
|
|
74738
|
-
}
|
|
74739
|
-
]
|
|
74740
|
-
};
|
|
74741
|
-
});
|
|
74742
|
-
|
|
74743
|
-
// src/domains/help/commands/new-command-help.ts
|
|
74744
|
-
var newCommandHelp;
|
|
74745
|
-
var init_new_command_help = __esm(() => {
|
|
74746
|
-
init_common_options();
|
|
74747
|
-
newCommandHelp = {
|
|
74748
|
-
name: "new",
|
|
74749
|
-
description: "Bootstrap a new ClaudeKit project (with interactive version selection)",
|
|
74750
|
-
usage: "ck new [options]",
|
|
74714
|
+
// src/domains/help/commands/agents-command-help.ts
|
|
74715
|
+
var agentsCommandHelp;
|
|
74716
|
+
var init_agents_command_help = __esm(() => {
|
|
74717
|
+
agentsCommandHelp = {
|
|
74718
|
+
name: "agents",
|
|
74719
|
+
description: "Install, uninstall, and manage Claude Code agents across providers",
|
|
74720
|
+
usage: "ck agents [options]",
|
|
74751
74721
|
examples: [
|
|
74752
74722
|
{
|
|
74753
|
-
command: "ck
|
|
74754
|
-
description: "
|
|
74723
|
+
command: "ck agents --name maintainer --agent codex",
|
|
74724
|
+
description: "Install one agent to Codex"
|
|
74755
74725
|
},
|
|
74756
74726
|
{
|
|
74757
|
-
command: "ck
|
|
74758
|
-
description: "
|
|
74727
|
+
command: "ck agents --list --installed",
|
|
74728
|
+
description: "Show installed agents and locations"
|
|
74759
74729
|
}
|
|
74760
74730
|
],
|
|
74761
74731
|
optionGroups: [
|
|
@@ -74763,122 +74733,458 @@ var init_new_command_help = __esm(() => {
|
|
|
74763
74733
|
title: "Mode Options",
|
|
74764
74734
|
options: [
|
|
74765
74735
|
{
|
|
74766
|
-
flags: "-
|
|
74767
|
-
description: "
|
|
74768
|
-
},
|
|
74769
|
-
{
|
|
74770
|
-
flags: "--use-git",
|
|
74771
|
-
description: "Use git clone instead of GitHub API (uses SSH/HTTPS credentials)"
|
|
74772
|
-
}
|
|
74773
|
-
]
|
|
74774
|
-
},
|
|
74775
|
-
{
|
|
74776
|
-
title: "Project Options",
|
|
74777
|
-
options: [
|
|
74778
|
-
{
|
|
74779
|
-
flags: "--dir <directory>",
|
|
74780
|
-
description: "Target directory for the new project",
|
|
74781
|
-
defaultValue: "."
|
|
74736
|
+
flags: "-l, --list",
|
|
74737
|
+
description: "List available agents from source"
|
|
74782
74738
|
},
|
|
74783
74739
|
{
|
|
74784
|
-
flags: "--
|
|
74785
|
-
description: "
|
|
74740
|
+
flags: "--installed",
|
|
74741
|
+
description: "When used with --list, show installed agents instead"
|
|
74786
74742
|
},
|
|
74787
74743
|
{
|
|
74788
|
-
flags: "-
|
|
74789
|
-
description: "
|
|
74744
|
+
flags: "-u, --uninstall",
|
|
74745
|
+
description: "Uninstall agent(s) from providers"
|
|
74790
74746
|
},
|
|
74791
74747
|
{
|
|
74792
|
-
flags: "--
|
|
74793
|
-
description: "
|
|
74748
|
+
flags: "--sync",
|
|
74749
|
+
description: "Sync registry with filesystem (clean orphaned entries)"
|
|
74794
74750
|
}
|
|
74795
74751
|
]
|
|
74796
74752
|
},
|
|
74797
|
-
filterOptionsGroup,
|
|
74798
74753
|
{
|
|
74799
74754
|
title: "Installation Options",
|
|
74800
74755
|
options: [
|
|
74801
74756
|
{
|
|
74802
|
-
flags: "--
|
|
74803
|
-
description: "
|
|
74757
|
+
flags: "-n, --name <agent>",
|
|
74758
|
+
description: "Agent name to install or uninstall"
|
|
74804
74759
|
},
|
|
74805
74760
|
{
|
|
74806
|
-
flags: "--
|
|
74807
|
-
description: "
|
|
74761
|
+
flags: "-a, --agent <provider>",
|
|
74762
|
+
description: "Target provider(s), can be specified multiple times"
|
|
74808
74763
|
},
|
|
74809
74764
|
{
|
|
74810
|
-
flags: "--
|
|
74811
|
-
description: "Install
|
|
74765
|
+
flags: "-g, --global",
|
|
74766
|
+
description: "Install globally instead of project-level"
|
|
74812
74767
|
},
|
|
74813
74768
|
{
|
|
74814
|
-
flags: "--
|
|
74815
|
-
description: "
|
|
74769
|
+
flags: "--all",
|
|
74770
|
+
description: "Install to all supported providers"
|
|
74816
74771
|
},
|
|
74817
74772
|
{
|
|
74818
|
-
flags: "--
|
|
74819
|
-
description: "
|
|
74773
|
+
flags: "-y, --yes",
|
|
74774
|
+
description: "Skip confirmation prompts"
|
|
74820
74775
|
}
|
|
74821
74776
|
]
|
|
74822
74777
|
},
|
|
74823
|
-
|
|
74778
|
+
{
|
|
74779
|
+
title: "Uninstall Options",
|
|
74780
|
+
options: [
|
|
74781
|
+
{
|
|
74782
|
+
flags: "--force",
|
|
74783
|
+
description: "Force uninstall even if not tracked in registry"
|
|
74784
|
+
}
|
|
74785
|
+
]
|
|
74786
|
+
}
|
|
74824
74787
|
]
|
|
74825
74788
|
};
|
|
74826
74789
|
});
|
|
74827
74790
|
|
|
74828
|
-
// src/domains/help/commands/
|
|
74829
|
-
var
|
|
74830
|
-
var
|
|
74831
|
-
|
|
74832
|
-
name: "
|
|
74833
|
-
description: "
|
|
74834
|
-
usage: "ck
|
|
74791
|
+
// src/domains/help/commands/api-command-help.ts
|
|
74792
|
+
var apiCommandHelp;
|
|
74793
|
+
var init_api_command_help = __esm(() => {
|
|
74794
|
+
apiCommandHelp = {
|
|
74795
|
+
name: "api",
|
|
74796
|
+
description: "Interact with ClaudeKit API and proxy services",
|
|
74797
|
+
usage: "ck api [action] [service] [path] [options]",
|
|
74835
74798
|
examples: [
|
|
74836
74799
|
{
|
|
74837
|
-
command: "ck
|
|
74838
|
-
description: "
|
|
74800
|
+
command: "ck api status",
|
|
74801
|
+
description: "Validate your API key and check rate limit status"
|
|
74839
74802
|
},
|
|
74840
74803
|
{
|
|
74841
|
-
command: "ck
|
|
74842
|
-
description: "
|
|
74804
|
+
command: "ck api vidcap summary https://youtu.be/abc123",
|
|
74805
|
+
description: "Generate an AI summary of a YouTube video"
|
|
74843
74806
|
}
|
|
74844
74807
|
],
|
|
74845
74808
|
optionGroups: [
|
|
74846
74809
|
{
|
|
74847
|
-
title: "
|
|
74848
|
-
options: [
|
|
74810
|
+
title: "Output Options",
|
|
74811
|
+
options: [{ flags: "--json", description: "Output raw JSON instead of formatted display" }]
|
|
74812
|
+
}
|
|
74813
|
+
],
|
|
74814
|
+
subcommands: [
|
|
74815
|
+
{
|
|
74816
|
+
name: "status",
|
|
74817
|
+
description: "Validate API key and check rate limit",
|
|
74818
|
+
usage: "ck api status [--json]",
|
|
74819
|
+
examples: [],
|
|
74820
|
+
optionGroups: [
|
|
74849
74821
|
{
|
|
74850
|
-
|
|
74851
|
-
|
|
74852
|
-
|
|
74822
|
+
title: "Output Options",
|
|
74823
|
+
options: [
|
|
74824
|
+
{ flags: "--json", description: "Output raw JSON instead of formatted display" }
|
|
74825
|
+
]
|
|
74826
|
+
}
|
|
74827
|
+
]
|
|
74828
|
+
},
|
|
74829
|
+
{
|
|
74830
|
+
name: "services",
|
|
74831
|
+
description: "List available proxy services",
|
|
74832
|
+
usage: "ck api services [--json]",
|
|
74833
|
+
examples: [],
|
|
74834
|
+
optionGroups: [
|
|
74853
74835
|
{
|
|
74854
|
-
|
|
74855
|
-
|
|
74836
|
+
title: "Output Options",
|
|
74837
|
+
options: [
|
|
74838
|
+
{ flags: "--json", description: "Output raw JSON instead of formatted display" }
|
|
74839
|
+
]
|
|
74840
|
+
}
|
|
74841
|
+
]
|
|
74842
|
+
},
|
|
74843
|
+
{
|
|
74844
|
+
name: "setup",
|
|
74845
|
+
description: "Configure and store your ClaudeKit API key",
|
|
74846
|
+
usage: "ck api setup [--key <key>] [--force] [--json]",
|
|
74847
|
+
examples: [],
|
|
74848
|
+
optionGroups: [
|
|
74849
|
+
{
|
|
74850
|
+
title: "Setup Options",
|
|
74851
|
+
options: [
|
|
74852
|
+
{ flags: "--key <key>", description: "API key to store" },
|
|
74853
|
+
{ flags: "--force", description: "Force re-setup even if key already exists" }
|
|
74854
|
+
]
|
|
74856
74855
|
},
|
|
74857
74856
|
{
|
|
74858
|
-
|
|
74859
|
-
|
|
74857
|
+
title: "Output Options",
|
|
74858
|
+
options: [
|
|
74859
|
+
{ flags: "--json", description: "Output raw JSON instead of formatted display" }
|
|
74860
|
+
]
|
|
74860
74861
|
}
|
|
74861
74862
|
]
|
|
74862
74863
|
},
|
|
74863
74864
|
{
|
|
74864
|
-
|
|
74865
|
-
|
|
74866
|
-
|
|
74867
|
-
|
|
74868
|
-
|
|
74869
|
-
{
|
|
74870
|
-
|
|
74865
|
+
name: "proxy",
|
|
74866
|
+
description: "Generic HTTP proxy to any ClaudeKit-backed service",
|
|
74867
|
+
usage: "ck api proxy <service> <path> [options]",
|
|
74868
|
+
examples: [],
|
|
74869
|
+
optionGroups: [
|
|
74870
|
+
{
|
|
74871
|
+
title: "Proxy Options",
|
|
74872
|
+
options: [
|
|
74873
|
+
{
|
|
74874
|
+
flags: "--method <method>",
|
|
74875
|
+
description: "HTTP method for the request",
|
|
74876
|
+
defaultValue: "GET"
|
|
74877
|
+
},
|
|
74878
|
+
{ flags: "--body <json>", description: "Request body as JSON string" },
|
|
74879
|
+
{ flags: "--query <json>", description: "Query params as JSON string" }
|
|
74880
|
+
]
|
|
74881
|
+
},
|
|
74882
|
+
{
|
|
74883
|
+
title: "Output Options",
|
|
74884
|
+
options: [
|
|
74885
|
+
{ flags: "--json", description: "Output raw JSON instead of formatted display" }
|
|
74886
|
+
]
|
|
74887
|
+
}
|
|
74871
74888
|
]
|
|
74872
|
-
}
|
|
74873
|
-
],
|
|
74874
|
-
sections: [
|
|
74889
|
+
},
|
|
74875
74890
|
{
|
|
74876
|
-
|
|
74877
|
-
|
|
74891
|
+
name: "vidcap",
|
|
74892
|
+
description: "Video metadata and AI processing via YouTube",
|
|
74893
|
+
usage: "ck api vidcap <action> <url|query>",
|
|
74894
|
+
examples: [],
|
|
74895
|
+
optionGroups: [
|
|
74896
|
+
{
|
|
74897
|
+
title: "Vidcap Options",
|
|
74898
|
+
options: [
|
|
74899
|
+
{
|
|
74900
|
+
flags: "--locale <locale>",
|
|
74901
|
+
description: "Locale for summary/caption output",
|
|
74902
|
+
defaultValue: "en"
|
|
74903
|
+
},
|
|
74904
|
+
{ flags: "--max-results <n>", description: "Max results for search action" },
|
|
74905
|
+
{
|
|
74906
|
+
flags: "--second <s>",
|
|
74907
|
+
description: "Timestamp in seconds for screenshot action"
|
|
74908
|
+
},
|
|
74909
|
+
{
|
|
74910
|
+
flags: "--order <order>",
|
|
74911
|
+
description: "Sort order for comments (time/relevance)"
|
|
74912
|
+
}
|
|
74913
|
+
]
|
|
74914
|
+
},
|
|
74915
|
+
{
|
|
74916
|
+
title: "Output Options",
|
|
74917
|
+
options: [
|
|
74918
|
+
{ flags: "--json", description: "Output raw JSON instead of formatted display" }
|
|
74919
|
+
]
|
|
74920
|
+
}
|
|
74921
|
+
],
|
|
74922
|
+
subcommands: [
|
|
74923
|
+
{
|
|
74924
|
+
name: "info",
|
|
74925
|
+
description: "Fetch video metadata (title, duration, channel)",
|
|
74926
|
+
usage: "ck api vidcap info <url>",
|
|
74927
|
+
examples: [],
|
|
74928
|
+
optionGroups: [
|
|
74929
|
+
{
|
|
74930
|
+
title: "Output Options",
|
|
74931
|
+
options: [{ flags: "--json", description: "Output raw JSON" }]
|
|
74932
|
+
}
|
|
74933
|
+
]
|
|
74934
|
+
},
|
|
74935
|
+
{
|
|
74936
|
+
name: "search",
|
|
74937
|
+
description: "Search YouTube for videos matching a query",
|
|
74938
|
+
usage: "ck api vidcap search <query>",
|
|
74939
|
+
examples: [],
|
|
74940
|
+
optionGroups: [
|
|
74941
|
+
{
|
|
74942
|
+
title: "Search Options",
|
|
74943
|
+
options: [{ flags: "--max-results <n>", description: "Maximum number of results" }]
|
|
74944
|
+
}
|
|
74945
|
+
]
|
|
74946
|
+
},
|
|
74947
|
+
{
|
|
74948
|
+
name: "summary",
|
|
74949
|
+
description: "Generate an AI summary of a video",
|
|
74950
|
+
usage: "ck api vidcap summary <url>",
|
|
74951
|
+
examples: [],
|
|
74952
|
+
optionGroups: [
|
|
74953
|
+
{
|
|
74954
|
+
title: "Summary Options",
|
|
74955
|
+
options: [
|
|
74956
|
+
{
|
|
74957
|
+
flags: "--locale <locale>",
|
|
74958
|
+
description: "Locale for summary text",
|
|
74959
|
+
defaultValue: "en"
|
|
74960
|
+
}
|
|
74961
|
+
]
|
|
74962
|
+
}
|
|
74963
|
+
]
|
|
74964
|
+
},
|
|
74965
|
+
{
|
|
74966
|
+
name: "caption",
|
|
74967
|
+
description: "Extract captions/transcript from a video",
|
|
74968
|
+
usage: "ck api vidcap caption <url>",
|
|
74969
|
+
examples: [],
|
|
74970
|
+
optionGroups: [
|
|
74971
|
+
{
|
|
74972
|
+
title: "Caption Options",
|
|
74973
|
+
options: [
|
|
74974
|
+
{
|
|
74975
|
+
flags: "--locale <locale>",
|
|
74976
|
+
description: "Locale for caption text",
|
|
74977
|
+
defaultValue: "en"
|
|
74978
|
+
}
|
|
74979
|
+
]
|
|
74980
|
+
}
|
|
74981
|
+
]
|
|
74982
|
+
},
|
|
74983
|
+
{
|
|
74984
|
+
name: "screenshot",
|
|
74985
|
+
description: "Capture a frame from a video at a specific timestamp",
|
|
74986
|
+
usage: "ck api vidcap screenshot <url>",
|
|
74987
|
+
examples: [],
|
|
74988
|
+
optionGroups: [
|
|
74989
|
+
{
|
|
74990
|
+
title: "Screenshot Options",
|
|
74991
|
+
options: [{ flags: "--second <s>", description: "Timestamp in seconds" }]
|
|
74992
|
+
}
|
|
74993
|
+
]
|
|
74994
|
+
},
|
|
74995
|
+
{
|
|
74996
|
+
name: "comments",
|
|
74997
|
+
description: "Fetch comments for a video",
|
|
74998
|
+
usage: "ck api vidcap comments <url>",
|
|
74999
|
+
examples: [],
|
|
75000
|
+
optionGroups: [
|
|
75001
|
+
{
|
|
75002
|
+
title: "Comment Options",
|
|
75003
|
+
options: [
|
|
75004
|
+
{
|
|
75005
|
+
flags: "--order <order>",
|
|
75006
|
+
description: "Sort order: time or relevance"
|
|
75007
|
+
},
|
|
75008
|
+
{ flags: "--max-results <n>", description: "Maximum number of comments" }
|
|
75009
|
+
]
|
|
75010
|
+
}
|
|
75011
|
+
]
|
|
75012
|
+
},
|
|
75013
|
+
{
|
|
75014
|
+
name: "media",
|
|
75015
|
+
description: "Download media or extract media URLs from a video",
|
|
75016
|
+
usage: "ck api vidcap media <url>",
|
|
75017
|
+
examples: [],
|
|
75018
|
+
optionGroups: [
|
|
75019
|
+
{
|
|
75020
|
+
title: "Output Options",
|
|
75021
|
+
options: [{ flags: "--json", description: "Output raw JSON" }]
|
|
75022
|
+
}
|
|
75023
|
+
]
|
|
75024
|
+
}
|
|
75025
|
+
]
|
|
74878
75026
|
},
|
|
74879
75027
|
{
|
|
74880
|
-
|
|
74881
|
-
|
|
75028
|
+
name: "reviewweb",
|
|
75029
|
+
description: "Web scraping and SEO analysis via the ClaudeKit proxy",
|
|
75030
|
+
usage: "ck api reviewweb <action> <url|domain|keyword>",
|
|
75031
|
+
examples: [],
|
|
75032
|
+
optionGroups: [
|
|
75033
|
+
{
|
|
75034
|
+
title: "Review Options",
|
|
75035
|
+
options: [
|
|
75036
|
+
{
|
|
75037
|
+
flags: "--format <fmt>",
|
|
75038
|
+
description: "Summary format: bullet or paragraph"
|
|
75039
|
+
},
|
|
75040
|
+
{ flags: "--max-length <n>", description: "Maximum summary length in characters" },
|
|
75041
|
+
{
|
|
75042
|
+
flags: "--instructions <text>",
|
|
75043
|
+
description: "Extraction instructions (extract action)"
|
|
75044
|
+
},
|
|
75045
|
+
{ flags: "--template <json>", description: "JSON template for structured extraction" },
|
|
75046
|
+
{
|
|
75047
|
+
flags: "--type <type>",
|
|
75048
|
+
description: "Link type filter: web/image/file/all"
|
|
75049
|
+
},
|
|
75050
|
+
{ flags: "--country <code>", description: "Country code for SEO commands" }
|
|
75051
|
+
]
|
|
75052
|
+
},
|
|
75053
|
+
{
|
|
75054
|
+
title: "Output Options",
|
|
75055
|
+
options: [
|
|
75056
|
+
{ flags: "--json", description: "Output raw JSON instead of formatted display" }
|
|
75057
|
+
]
|
|
75058
|
+
}
|
|
75059
|
+
],
|
|
75060
|
+
subcommands: [
|
|
75061
|
+
{
|
|
75062
|
+
name: "scrape",
|
|
75063
|
+
description: "Scrape raw HTML content from a URL",
|
|
75064
|
+
usage: "ck api reviewweb scrape <url>",
|
|
75065
|
+
examples: [],
|
|
75066
|
+
optionGroups: [
|
|
75067
|
+
{
|
|
75068
|
+
title: "Output Options",
|
|
75069
|
+
options: [{ flags: "--json", description: "Output raw JSON" }]
|
|
75070
|
+
}
|
|
75071
|
+
]
|
|
75072
|
+
},
|
|
75073
|
+
{
|
|
75074
|
+
name: "summarize",
|
|
75075
|
+
description: "AI-generated summary of a web page",
|
|
75076
|
+
usage: "ck api reviewweb summarize <url>",
|
|
75077
|
+
examples: [],
|
|
75078
|
+
optionGroups: [
|
|
75079
|
+
{
|
|
75080
|
+
title: "Summary Options",
|
|
75081
|
+
options: [
|
|
75082
|
+
{ flags: "--format <fmt>", description: "Output format: bullet or paragraph" },
|
|
75083
|
+
{ flags: "--max-length <n>", description: "Maximum length in characters" }
|
|
75084
|
+
]
|
|
75085
|
+
}
|
|
75086
|
+
]
|
|
75087
|
+
},
|
|
75088
|
+
{
|
|
75089
|
+
name: "markdown",
|
|
75090
|
+
description: "Convert a web page to clean Markdown",
|
|
75091
|
+
usage: "ck api reviewweb markdown <url>",
|
|
75092
|
+
examples: [],
|
|
75093
|
+
optionGroups: [
|
|
75094
|
+
{
|
|
75095
|
+
title: "Output Options",
|
|
75096
|
+
options: [{ flags: "--json", description: "Output raw JSON" }]
|
|
75097
|
+
}
|
|
75098
|
+
]
|
|
75099
|
+
},
|
|
75100
|
+
{
|
|
75101
|
+
name: "extract",
|
|
75102
|
+
description: "Extract structured data from a web page",
|
|
75103
|
+
usage: "ck api reviewweb extract <url>",
|
|
75104
|
+
examples: [],
|
|
75105
|
+
optionGroups: [
|
|
75106
|
+
{
|
|
75107
|
+
title: "Extraction Options",
|
|
75108
|
+
options: [
|
|
75109
|
+
{ flags: "--instructions <text>", description: "Extraction instructions" },
|
|
75110
|
+
{ flags: "--template <json>", description: "JSON template for output shape" }
|
|
75111
|
+
]
|
|
75112
|
+
}
|
|
75113
|
+
]
|
|
75114
|
+
},
|
|
75115
|
+
{
|
|
75116
|
+
name: "links",
|
|
75117
|
+
description: "Extract all links from a web page",
|
|
75118
|
+
usage: "ck api reviewweb links <url>",
|
|
75119
|
+
examples: [],
|
|
75120
|
+
optionGroups: [
|
|
75121
|
+
{
|
|
75122
|
+
title: "Filter Options",
|
|
75123
|
+
options: [
|
|
75124
|
+
{
|
|
75125
|
+
flags: "--type <type>",
|
|
75126
|
+
description: "Link type: web/image/file/all",
|
|
75127
|
+
defaultValue: "all"
|
|
75128
|
+
}
|
|
75129
|
+
]
|
|
75130
|
+
}
|
|
75131
|
+
]
|
|
75132
|
+
},
|
|
75133
|
+
{
|
|
75134
|
+
name: "screenshot",
|
|
75135
|
+
description: "Capture a screenshot of a web page",
|
|
75136
|
+
usage: "ck api reviewweb screenshot <url>",
|
|
75137
|
+
examples: [],
|
|
75138
|
+
optionGroups: [
|
|
75139
|
+
{
|
|
75140
|
+
title: "Output Options",
|
|
75141
|
+
options: [{ flags: "--json", description: "Output raw JSON" }]
|
|
75142
|
+
}
|
|
75143
|
+
]
|
|
75144
|
+
},
|
|
75145
|
+
{
|
|
75146
|
+
name: "seo-traffic",
|
|
75147
|
+
description: "Fetch estimated organic traffic data for a domain",
|
|
75148
|
+
usage: "ck api reviewweb seo-traffic <domain>",
|
|
75149
|
+
examples: [],
|
|
75150
|
+
optionGroups: [
|
|
75151
|
+
{
|
|
75152
|
+
title: "SEO Options",
|
|
75153
|
+
options: [
|
|
75154
|
+
{ flags: "--country <code>", description: "Country code for traffic data" }
|
|
75155
|
+
]
|
|
75156
|
+
}
|
|
75157
|
+
]
|
|
75158
|
+
},
|
|
75159
|
+
{
|
|
75160
|
+
name: "seo-keywords",
|
|
75161
|
+
description: "Fetch top SEO keywords for a domain or keyword",
|
|
75162
|
+
usage: "ck api reviewweb seo-keywords <domain|keyword>",
|
|
75163
|
+
examples: [],
|
|
75164
|
+
optionGroups: [
|
|
75165
|
+
{
|
|
75166
|
+
title: "SEO Options",
|
|
75167
|
+
options: [
|
|
75168
|
+
{ flags: "--country <code>", description: "Country code for keyword data" }
|
|
75169
|
+
]
|
|
75170
|
+
}
|
|
75171
|
+
]
|
|
75172
|
+
},
|
|
75173
|
+
{
|
|
75174
|
+
name: "seo-backlinks",
|
|
75175
|
+
description: "Fetch backlink profile for a domain",
|
|
75176
|
+
usage: "ck api reviewweb seo-backlinks <domain>",
|
|
75177
|
+
examples: [],
|
|
75178
|
+
optionGroups: [
|
|
75179
|
+
{
|
|
75180
|
+
title: "SEO Options",
|
|
75181
|
+
options: [
|
|
75182
|
+
{ flags: "--country <code>", description: "Country code for backlink data" }
|
|
75183
|
+
]
|
|
75184
|
+
}
|
|
75185
|
+
]
|
|
75186
|
+
}
|
|
75187
|
+
]
|
|
74882
75188
|
}
|
|
74883
75189
|
]
|
|
74884
75190
|
};
|
|
@@ -74920,6 +75226,14 @@ var init_app_command_help = __esm(() => {
|
|
|
74920
75226
|
{
|
|
74921
75227
|
flags: "--uninstall",
|
|
74922
75228
|
description: "Remove the installed desktop app and exit"
|
|
75229
|
+
},
|
|
75230
|
+
{
|
|
75231
|
+
flags: "--dev",
|
|
75232
|
+
description: "Force dev channel for this invocation"
|
|
75233
|
+
},
|
|
75234
|
+
{
|
|
75235
|
+
flags: "--stable",
|
|
75236
|
+
description: "Force stable channel for this invocation"
|
|
74923
75237
|
}
|
|
74924
75238
|
]
|
|
74925
75239
|
}
|
|
@@ -74933,127 +75247,439 @@ var init_app_command_help = __esm(() => {
|
|
|
74933
75247
|
};
|
|
74934
75248
|
});
|
|
74935
75249
|
|
|
74936
|
-
// src/domains/help/commands/
|
|
74937
|
-
var
|
|
74938
|
-
var
|
|
74939
|
-
|
|
74940
|
-
|
|
74941
|
-
|
|
74942
|
-
|
|
74943
|
-
usage: "ck init [options]",
|
|
75250
|
+
// src/domains/help/commands/backups-command-help.ts
|
|
75251
|
+
var backupsCommandHelp;
|
|
75252
|
+
var init_backups_command_help = __esm(() => {
|
|
75253
|
+
backupsCommandHelp = {
|
|
75254
|
+
name: "backups",
|
|
75255
|
+
description: "List, restore, and prune ClaudeKit recovery backups",
|
|
75256
|
+
usage: "ck backups <list|restore|prune> [options]",
|
|
74944
75257
|
examples: [
|
|
74945
75258
|
{
|
|
74946
|
-
command: "ck
|
|
74947
|
-
description: "
|
|
75259
|
+
command: "ck backups list --limit 5",
|
|
75260
|
+
description: "Show the newest five recovery backups"
|
|
74948
75261
|
},
|
|
74949
75262
|
{
|
|
74950
|
-
command: "ck
|
|
74951
|
-
description: "
|
|
75263
|
+
command: "ck backups restore 2026-04-06T21-53-01-706-byrf --yes",
|
|
75264
|
+
description: "Restore a specific recovery backup without prompting"
|
|
74952
75265
|
}
|
|
74953
75266
|
],
|
|
74954
75267
|
optionGroups: [
|
|
74955
75268
|
{
|
|
74956
|
-
title: "
|
|
75269
|
+
title: "Subcommands",
|
|
74957
75270
|
options: [
|
|
74958
75271
|
{
|
|
74959
|
-
flags: "
|
|
74960
|
-
description: "
|
|
75272
|
+
flags: "list [--limit <n>] [--json]",
|
|
75273
|
+
description: "List recovery backups under ~/.claudekit/backups/"
|
|
74961
75274
|
},
|
|
74962
75275
|
{
|
|
74963
|
-
flags: "--
|
|
74964
|
-
description: "
|
|
75276
|
+
flags: "restore <id> [--yes] [--json]",
|
|
75277
|
+
description: "Restore a specific recovery backup to its original source root"
|
|
74965
75278
|
},
|
|
74966
75279
|
{
|
|
74967
|
-
flags: "--
|
|
74968
|
-
description: "
|
|
75280
|
+
flags: "prune [id] [--keep <n> | --all] [--yes] [--json]",
|
|
75281
|
+
description: "Delete one, many, or old recovery backups"
|
|
74969
75282
|
}
|
|
74970
75283
|
]
|
|
74971
75284
|
},
|
|
74972
75285
|
{
|
|
74973
|
-
title: "
|
|
75286
|
+
title: "Shared Options",
|
|
75287
|
+
options: [
|
|
75288
|
+
{ flags: "--limit <n>", description: "Show only the newest N backups" },
|
|
75289
|
+
{ flags: "--keep <n>", description: "Keep the newest N backups when pruning" },
|
|
75290
|
+
{ flags: "--all", description: "Delete all recovery backups" },
|
|
75291
|
+
{ flags: "-y, --yes", description: "Skip confirmation prompts" },
|
|
75292
|
+
{ flags: "--json", description: "Output machine-readable JSON" }
|
|
75293
|
+
]
|
|
75294
|
+
}
|
|
75295
|
+
],
|
|
75296
|
+
subcommands: [
|
|
75297
|
+
{
|
|
75298
|
+
name: "list",
|
|
75299
|
+
description: "List recovery backups under ~/.claudekit/backups/",
|
|
75300
|
+
usage: "ck backups list [--limit <n>] [--json]",
|
|
75301
|
+
examples: [],
|
|
75302
|
+
optionGroups: []
|
|
75303
|
+
},
|
|
75304
|
+
{
|
|
75305
|
+
name: "restore",
|
|
75306
|
+
description: "Restore a specific recovery backup to its original source root",
|
|
75307
|
+
usage: "ck backups restore <id> [--yes] [--json]",
|
|
75308
|
+
examples: [],
|
|
75309
|
+
optionGroups: []
|
|
75310
|
+
},
|
|
75311
|
+
{
|
|
75312
|
+
name: "prune",
|
|
75313
|
+
description: "Delete one, many, or old recovery backups",
|
|
75314
|
+
usage: "ck backups prune [id] [--keep <n> | --all] [--yes] [--json]",
|
|
75315
|
+
examples: [],
|
|
75316
|
+
optionGroups: []
|
|
75317
|
+
}
|
|
75318
|
+
],
|
|
75319
|
+
sections: [
|
|
75320
|
+
{
|
|
75321
|
+
title: "Backup Scope",
|
|
75322
|
+
content: "These backups contain only the ClaudeKit-managed files targeted by destructive operations, not the full ~/.claude/ directory."
|
|
75323
|
+
},
|
|
75324
|
+
{
|
|
75325
|
+
title: "Automatic Retention",
|
|
75326
|
+
content: "ClaudeKit keeps the newest recovery backups automatically and prunes older ones after successful destructive operations."
|
|
75327
|
+
}
|
|
75328
|
+
]
|
|
75329
|
+
};
|
|
75330
|
+
});
|
|
75331
|
+
|
|
75332
|
+
// src/domains/help/commands/commands-command-help.ts
|
|
75333
|
+
var commandsCommandHelp;
|
|
75334
|
+
var init_commands_command_help = __esm(() => {
|
|
75335
|
+
commandsCommandHelp = {
|
|
75336
|
+
name: "commands",
|
|
75337
|
+
description: "Install, uninstall, and manage Claude commands across providers",
|
|
75338
|
+
usage: "ck commands [options]",
|
|
75339
|
+
examples: [
|
|
75340
|
+
{
|
|
75341
|
+
command: "ck commands --name plan --agent codex",
|
|
75342
|
+
description: "Install one slash command to Codex"
|
|
75343
|
+
},
|
|
75344
|
+
{
|
|
75345
|
+
command: "ck commands --list",
|
|
75346
|
+
description: "List available commands from source"
|
|
75347
|
+
}
|
|
75348
|
+
],
|
|
75349
|
+
optionGroups: [
|
|
75350
|
+
{
|
|
75351
|
+
title: "Mode Options",
|
|
74974
75352
|
options: [
|
|
74975
75353
|
{
|
|
74976
|
-
flags: "--
|
|
74977
|
-
description: "
|
|
74978
|
-
defaultValue: "."
|
|
75354
|
+
flags: "-l, --list",
|
|
75355
|
+
description: "List available commands from source"
|
|
74979
75356
|
},
|
|
74980
75357
|
{
|
|
74981
|
-
flags: "--
|
|
74982
|
-
description: "
|
|
75358
|
+
flags: "--installed",
|
|
75359
|
+
description: "When used with --list, show installed commands instead"
|
|
74983
75360
|
},
|
|
74984
75361
|
{
|
|
74985
|
-
flags: "-
|
|
74986
|
-
description: "
|
|
75362
|
+
flags: "-u, --uninstall",
|
|
75363
|
+
description: "Uninstall command(s) from providers"
|
|
75364
|
+
},
|
|
75365
|
+
{
|
|
75366
|
+
flags: "--sync",
|
|
75367
|
+
description: "Sync registry with filesystem (clean orphaned entries)"
|
|
75368
|
+
}
|
|
75369
|
+
]
|
|
75370
|
+
},
|
|
75371
|
+
{
|
|
75372
|
+
title: "Installation Options",
|
|
75373
|
+
options: [
|
|
75374
|
+
{
|
|
75375
|
+
flags: "-n, --name <command>",
|
|
75376
|
+
description: "Command name to install or uninstall"
|
|
75377
|
+
},
|
|
75378
|
+
{
|
|
75379
|
+
flags: "-a, --agent <provider>",
|
|
75380
|
+
description: "Target provider(s), can be specified multiple times"
|
|
74987
75381
|
},
|
|
74988
75382
|
{
|
|
74989
75383
|
flags: "-g, --global",
|
|
74990
|
-
description: "
|
|
75384
|
+
description: "Install globally instead of project-level"
|
|
74991
75385
|
},
|
|
74992
75386
|
{
|
|
74993
|
-
flags: "--
|
|
74994
|
-
description: "
|
|
75387
|
+
flags: "--all",
|
|
75388
|
+
description: "Install to all supported providers"
|
|
74995
75389
|
},
|
|
75390
|
+
{
|
|
75391
|
+
flags: "-y, --yes",
|
|
75392
|
+
description: "Skip confirmation prompts"
|
|
75393
|
+
}
|
|
75394
|
+
]
|
|
75395
|
+
},
|
|
75396
|
+
{
|
|
75397
|
+
title: "Uninstall Options",
|
|
75398
|
+
options: [
|
|
74996
75399
|
{
|
|
74997
75400
|
flags: "--force",
|
|
74998
|
-
description: "Force
|
|
75401
|
+
description: "Force uninstall even if not tracked in registry"
|
|
74999
75402
|
}
|
|
75000
75403
|
]
|
|
75404
|
+
}
|
|
75405
|
+
]
|
|
75406
|
+
};
|
|
75407
|
+
});
|
|
75408
|
+
|
|
75409
|
+
// src/domains/help/commands/config-command-help.ts
|
|
75410
|
+
var configCommandHelp;
|
|
75411
|
+
var init_config_command_help = __esm(() => {
|
|
75412
|
+
configCommandHelp = {
|
|
75413
|
+
name: "config",
|
|
75414
|
+
description: "Manage ClaudeKit configuration and launch the config dashboard",
|
|
75415
|
+
usage: "ck config [action] [key] [value] [options]",
|
|
75416
|
+
examples: [
|
|
75417
|
+
{
|
|
75418
|
+
command: "ck config",
|
|
75419
|
+
description: "Launch the web dashboard (same as 'ck config ui')"
|
|
75001
75420
|
},
|
|
75002
75421
|
{
|
|
75003
|
-
|
|
75422
|
+
command: "ck config --host 0.0.0.0 --no-open",
|
|
75423
|
+
description: "Expose the dashboard to your network intentionally"
|
|
75424
|
+
},
|
|
75425
|
+
{
|
|
75426
|
+
command: "ck config set defaults.kit engineer",
|
|
75427
|
+
description: "Set a config value from the CLI"
|
|
75428
|
+
}
|
|
75429
|
+
],
|
|
75430
|
+
optionGroups: [
|
|
75431
|
+
{
|
|
75432
|
+
title: "Actions",
|
|
75004
75433
|
options: [
|
|
75005
75434
|
{
|
|
75006
|
-
flags: "
|
|
75007
|
-
description: "
|
|
75435
|
+
flags: "ui",
|
|
75436
|
+
description: "Launch config dashboard (default action when omitted)"
|
|
75008
75437
|
},
|
|
75009
75438
|
{
|
|
75010
|
-
flags: "
|
|
75011
|
-
description: "
|
|
75439
|
+
flags: "get <key>",
|
|
75440
|
+
description: "Read a config value"
|
|
75012
75441
|
},
|
|
75013
75442
|
{
|
|
75014
|
-
flags: "
|
|
75015
|
-
description: "
|
|
75443
|
+
flags: "set <key> <value>",
|
|
75444
|
+
description: "Write a config value"
|
|
75016
75445
|
},
|
|
75017
75446
|
{
|
|
75018
|
-
flags: "
|
|
75019
|
-
description: "
|
|
75447
|
+
flags: "show",
|
|
75448
|
+
description: "Print merged config"
|
|
75020
75449
|
}
|
|
75021
75450
|
]
|
|
75022
75451
|
},
|
|
75023
75452
|
{
|
|
75024
|
-
title: "
|
|
75453
|
+
title: "Scope Options",
|
|
75025
75454
|
options: [
|
|
75026
75455
|
{
|
|
75027
|
-
flags: "--
|
|
75028
|
-
description: "
|
|
75456
|
+
flags: "-g, --global",
|
|
75457
|
+
description: "Use global config (~/.claudekit/config.json)"
|
|
75029
75458
|
},
|
|
75030
75459
|
{
|
|
75031
|
-
flags: "--
|
|
75032
|
-
description: "
|
|
75460
|
+
flags: "-l, --local",
|
|
75461
|
+
description: "Use local config (.claude/.ck.json)"
|
|
75462
|
+
}
|
|
75463
|
+
]
|
|
75464
|
+
},
|
|
75465
|
+
{
|
|
75466
|
+
title: "Dashboard Options",
|
|
75467
|
+
options: [
|
|
75468
|
+
{
|
|
75469
|
+
flags: "--port <port>",
|
|
75470
|
+
description: "Port for dashboard server"
|
|
75033
75471
|
},
|
|
75034
75472
|
{
|
|
75035
|
-
flags: "--
|
|
75036
|
-
description: "
|
|
75473
|
+
flags: "--host <host>",
|
|
75474
|
+
description: "Bind dashboard host (default: 127.0.0.1)"
|
|
75037
75475
|
},
|
|
75038
75476
|
{
|
|
75039
|
-
flags: "--
|
|
75040
|
-
description: "
|
|
75477
|
+
flags: "--no-open",
|
|
75478
|
+
description: "Do not auto-open browser when launching dashboard"
|
|
75041
75479
|
},
|
|
75480
|
+
{
|
|
75481
|
+
flags: "--dev",
|
|
75482
|
+
description: "Run dashboard in development mode with HMR"
|
|
75483
|
+
}
|
|
75484
|
+
]
|
|
75485
|
+
},
|
|
75486
|
+
{
|
|
75487
|
+
title: "Output Options",
|
|
75488
|
+
options: [
|
|
75489
|
+
{
|
|
75490
|
+
flags: "--json",
|
|
75491
|
+
description: "Output machine-readable JSON for CLI actions"
|
|
75492
|
+
}
|
|
75493
|
+
]
|
|
75494
|
+
}
|
|
75495
|
+
],
|
|
75496
|
+
subcommands: [
|
|
75497
|
+
{
|
|
75498
|
+
name: "ui",
|
|
75499
|
+
description: "Launch config dashboard (default action when omitted)",
|
|
75500
|
+
usage: "ck config ui [--port <port>] [--host <host>] [--no-open] [--dev]",
|
|
75501
|
+
examples: [],
|
|
75502
|
+
optionGroups: []
|
|
75503
|
+
},
|
|
75504
|
+
{
|
|
75505
|
+
name: "get",
|
|
75506
|
+
description: "Read a config value",
|
|
75507
|
+
usage: "ck config get <key> [-g | -l] [--json]",
|
|
75508
|
+
examples: [],
|
|
75509
|
+
optionGroups: []
|
|
75510
|
+
},
|
|
75511
|
+
{
|
|
75512
|
+
name: "set",
|
|
75513
|
+
description: "Write a config value",
|
|
75514
|
+
usage: "ck config set <key> <value> [-g | -l]",
|
|
75515
|
+
examples: [],
|
|
75516
|
+
optionGroups: []
|
|
75517
|
+
},
|
|
75518
|
+
{
|
|
75519
|
+
name: "show",
|
|
75520
|
+
description: "Print merged config",
|
|
75521
|
+
usage: "ck config show [-g | -l] [--json]",
|
|
75522
|
+
examples: [],
|
|
75523
|
+
optionGroups: []
|
|
75524
|
+
}
|
|
75525
|
+
],
|
|
75526
|
+
sections: [
|
|
75527
|
+
{
|
|
75528
|
+
title: "Notes",
|
|
75529
|
+
content: "Run 'ck config --help' to see both CLI actions and dashboard flags. Running bare 'ck config' opens the dashboard directly. Use '--host' to expose the dashboard intentionally beyond localhost."
|
|
75530
|
+
}
|
|
75531
|
+
]
|
|
75532
|
+
};
|
|
75533
|
+
});
|
|
75534
|
+
|
|
75535
|
+
// src/domains/help/commands/content-command-help.ts
|
|
75536
|
+
var contentCommandHelp;
|
|
75537
|
+
var init_content_command_help = __esm(() => {
|
|
75538
|
+
contentCommandHelp = {
|
|
75539
|
+
name: "content",
|
|
75540
|
+
description: "Multi-channel content automation engine",
|
|
75541
|
+
usage: "ck content [action] [id] [options]",
|
|
75542
|
+
examples: [
|
|
75543
|
+
{
|
|
75544
|
+
command: "ck content start",
|
|
75545
|
+
description: "Start the content daemon (default action)"
|
|
75546
|
+
},
|
|
75547
|
+
{
|
|
75548
|
+
command: "ck content setup",
|
|
75549
|
+
description: "Interactive configuration wizard"
|
|
75550
|
+
},
|
|
75551
|
+
{
|
|
75552
|
+
command: "ck content queue",
|
|
75553
|
+
description: "List pending content items for review"
|
|
75554
|
+
}
|
|
75555
|
+
],
|
|
75556
|
+
optionGroups: [
|
|
75557
|
+
{
|
|
75558
|
+
title: "Actions",
|
|
75559
|
+
options: [
|
|
75560
|
+
{
|
|
75561
|
+
flags: "start",
|
|
75562
|
+
description: "Start the content daemon (default when no action specified)"
|
|
75563
|
+
},
|
|
75564
|
+
{
|
|
75565
|
+
flags: "stop",
|
|
75566
|
+
description: "Stop the running content daemon"
|
|
75567
|
+
},
|
|
75568
|
+
{
|
|
75569
|
+
flags: "status",
|
|
75570
|
+
description: "Show daemon status and recent activity"
|
|
75571
|
+
},
|
|
75572
|
+
{
|
|
75573
|
+
flags: "logs",
|
|
75574
|
+
description: "View content daemon logs"
|
|
75575
|
+
},
|
|
75576
|
+
{
|
|
75577
|
+
flags: "setup",
|
|
75578
|
+
description: "Interactive configuration wizard"
|
|
75579
|
+
},
|
|
75580
|
+
{
|
|
75581
|
+
flags: "queue",
|
|
75582
|
+
description: "List pending content items"
|
|
75583
|
+
},
|
|
75584
|
+
{
|
|
75585
|
+
flags: "approve <id>",
|
|
75586
|
+
description: "Approve a content item for publishing"
|
|
75587
|
+
},
|
|
75588
|
+
{
|
|
75589
|
+
flags: "reject <id>",
|
|
75590
|
+
description: "Reject a content item"
|
|
75591
|
+
}
|
|
75592
|
+
]
|
|
75593
|
+
},
|
|
75594
|
+
{
|
|
75595
|
+
title: "Options",
|
|
75596
|
+
options: [
|
|
75042
75597
|
{
|
|
75043
75598
|
flags: "--dry-run",
|
|
75044
|
-
description: "
|
|
75599
|
+
description: "Generate content without publishing"
|
|
75045
75600
|
},
|
|
75046
75601
|
{
|
|
75047
|
-
flags: "--
|
|
75048
|
-
description: "
|
|
75602
|
+
flags: "--verbose",
|
|
75603
|
+
description: "Enable verbose logging"
|
|
75049
75604
|
},
|
|
75050
75605
|
{
|
|
75051
|
-
flags: "--force
|
|
75052
|
-
description: "
|
|
75606
|
+
flags: "--force",
|
|
75607
|
+
description: "Kill existing process and start fresh"
|
|
75608
|
+
},
|
|
75609
|
+
{
|
|
75610
|
+
flags: "--tail",
|
|
75611
|
+
description: "Follow log output in real-time (for logs action)"
|
|
75612
|
+
},
|
|
75613
|
+
{
|
|
75614
|
+
flags: "--reason <reason>",
|
|
75615
|
+
description: "Rejection reason (for reject action)"
|
|
75053
75616
|
}
|
|
75054
75617
|
]
|
|
75618
|
+
}
|
|
75619
|
+
],
|
|
75620
|
+
subcommands: [
|
|
75621
|
+
{
|
|
75622
|
+
name: "start",
|
|
75623
|
+
description: "Start the content daemon (default when no action specified)",
|
|
75624
|
+
usage: "ck content start",
|
|
75625
|
+
examples: [],
|
|
75626
|
+
optionGroups: []
|
|
75055
75627
|
},
|
|
75056
|
-
|
|
75628
|
+
{
|
|
75629
|
+
name: "stop",
|
|
75630
|
+
description: "Stop the running content daemon",
|
|
75631
|
+
usage: "ck content stop",
|
|
75632
|
+
examples: [],
|
|
75633
|
+
optionGroups: []
|
|
75634
|
+
},
|
|
75635
|
+
{
|
|
75636
|
+
name: "status",
|
|
75637
|
+
description: "Show daemon status and recent activity",
|
|
75638
|
+
usage: "ck content status",
|
|
75639
|
+
examples: [],
|
|
75640
|
+
optionGroups: []
|
|
75641
|
+
},
|
|
75642
|
+
{
|
|
75643
|
+
name: "logs",
|
|
75644
|
+
description: "View content daemon logs",
|
|
75645
|
+
usage: "ck content logs [--tail]",
|
|
75646
|
+
examples: [],
|
|
75647
|
+
optionGroups: []
|
|
75648
|
+
},
|
|
75649
|
+
{
|
|
75650
|
+
name: "setup",
|
|
75651
|
+
description: "Interactive configuration wizard",
|
|
75652
|
+
usage: "ck content setup",
|
|
75653
|
+
examples: [],
|
|
75654
|
+
optionGroups: []
|
|
75655
|
+
},
|
|
75656
|
+
{
|
|
75657
|
+
name: "queue",
|
|
75658
|
+
description: "List pending content items",
|
|
75659
|
+
usage: "ck content queue",
|
|
75660
|
+
examples: [],
|
|
75661
|
+
optionGroups: []
|
|
75662
|
+
},
|
|
75663
|
+
{
|
|
75664
|
+
name: "approve",
|
|
75665
|
+
description: "Approve a content item for publishing",
|
|
75666
|
+
usage: "ck content approve <id>",
|
|
75667
|
+
examples: [],
|
|
75668
|
+
optionGroups: []
|
|
75669
|
+
},
|
|
75670
|
+
{
|
|
75671
|
+
name: "reject",
|
|
75672
|
+
description: "Reject a content item",
|
|
75673
|
+
usage: "ck content reject <id> [--reason <reason>]",
|
|
75674
|
+
examples: [],
|
|
75675
|
+
optionGroups: []
|
|
75676
|
+
}
|
|
75677
|
+
],
|
|
75678
|
+
sections: [
|
|
75679
|
+
{
|
|
75680
|
+
title: "Notes",
|
|
75681
|
+
content: "Requires content config in .ck.json. Run 'ck content setup' for guided configuration. Review mode can be 'auto' or 'manual' (default: manual)."
|
|
75682
|
+
}
|
|
75057
75683
|
]
|
|
75058
75684
|
};
|
|
75059
75685
|
});
|
|
@@ -75109,330 +75735,380 @@ var init_doctor_command_help = __esm(() => {
|
|
|
75109
75735
|
};
|
|
75110
75736
|
});
|
|
75111
75737
|
|
|
75112
|
-
// src/domains/help/commands/
|
|
75113
|
-
var
|
|
75114
|
-
var
|
|
75115
|
-
|
|
75116
|
-
|
|
75117
|
-
|
|
75118
|
-
|
|
75738
|
+
// src/domains/help/commands/common-options.ts
|
|
75739
|
+
var filterOptionsGroup, folderOptionsGroup;
|
|
75740
|
+
var init_common_options = __esm(() => {
|
|
75741
|
+
filterOptionsGroup = {
|
|
75742
|
+
title: "Filter Options",
|
|
75743
|
+
options: [
|
|
75744
|
+
{
|
|
75745
|
+
flags: "--exclude <pattern>",
|
|
75746
|
+
description: "Exclude files matching glob pattern (can be used multiple times)"
|
|
75747
|
+
},
|
|
75748
|
+
{
|
|
75749
|
+
flags: "--beta",
|
|
75750
|
+
description: "Show beta versions in selection prompt"
|
|
75751
|
+
},
|
|
75752
|
+
{
|
|
75753
|
+
flags: "--refresh",
|
|
75754
|
+
description: "Bypass release cache to fetch latest versions from GitHub"
|
|
75755
|
+
}
|
|
75756
|
+
]
|
|
75757
|
+
};
|
|
75758
|
+
folderOptionsGroup = {
|
|
75759
|
+
title: "Folder Options",
|
|
75760
|
+
options: [
|
|
75761
|
+
{
|
|
75762
|
+
flags: "--docs-dir <name>",
|
|
75763
|
+
description: "Custom docs folder name to avoid conflicts with existing folders",
|
|
75764
|
+
defaultValue: "docs"
|
|
75765
|
+
},
|
|
75766
|
+
{
|
|
75767
|
+
flags: "--plans-dir <name>",
|
|
75768
|
+
description: "Custom plans folder name to avoid conflicts with existing folders",
|
|
75769
|
+
defaultValue: "plans"
|
|
75770
|
+
}
|
|
75771
|
+
]
|
|
75772
|
+
};
|
|
75773
|
+
});
|
|
75774
|
+
|
|
75775
|
+
// src/domains/help/commands/init-command-help.ts
|
|
75776
|
+
var initCommandHelp;
|
|
75777
|
+
var init_init_command_help = __esm(() => {
|
|
75778
|
+
init_common_options();
|
|
75779
|
+
initCommandHelp = {
|
|
75780
|
+
name: "init",
|
|
75781
|
+
description: "Initialize or update ClaudeKit project (with interactive version selection)",
|
|
75782
|
+
usage: "ck init [options]",
|
|
75119
75783
|
examples: [
|
|
75120
75784
|
{
|
|
75121
|
-
command: "ck
|
|
75122
|
-
description: "
|
|
75785
|
+
command: "ck init --kit engineer",
|
|
75786
|
+
description: "Update local project with latest engineer kit"
|
|
75123
75787
|
},
|
|
75124
75788
|
{
|
|
75125
|
-
command: "ck
|
|
75126
|
-
description: "
|
|
75789
|
+
command: "ck init --use-git --release v2.1.0 -y",
|
|
75790
|
+
description: "Non-interactive with git clone (no GitHub API needed)"
|
|
75127
75791
|
}
|
|
75128
75792
|
],
|
|
75129
75793
|
optionGroups: [
|
|
75130
75794
|
{
|
|
75131
|
-
title: "
|
|
75795
|
+
title: "Mode Options",
|
|
75132
75796
|
options: [
|
|
75133
75797
|
{
|
|
75134
|
-
flags: "-
|
|
75135
|
-
description: "
|
|
75798
|
+
flags: "-y, --yes",
|
|
75799
|
+
description: "Non-interactive mode with sensible defaults (kit: engineer, dir: ., version: latest)"
|
|
75800
|
+
},
|
|
75801
|
+
{
|
|
75802
|
+
flags: "--use-git",
|
|
75803
|
+
description: "Use git clone instead of GitHub API (uses SSH/HTTPS credentials)"
|
|
75804
|
+
},
|
|
75805
|
+
{
|
|
75806
|
+
flags: "--sync",
|
|
75807
|
+
description: "Sync config files from upstream with interactive hunk-by-hunk merge"
|
|
75808
|
+
},
|
|
75809
|
+
{
|
|
75810
|
+
flags: "--archive <path>",
|
|
75811
|
+
description: "Use local archive file instead of downloading (zip/tar.gz)"
|
|
75812
|
+
},
|
|
75813
|
+
{
|
|
75814
|
+
flags: "--kit-path <path>",
|
|
75815
|
+
description: "Use local kit directory instead of downloading"
|
|
75816
|
+
}
|
|
75817
|
+
]
|
|
75818
|
+
},
|
|
75819
|
+
{
|
|
75820
|
+
title: "Project Options",
|
|
75821
|
+
options: [
|
|
75822
|
+
{
|
|
75823
|
+
flags: "--dir <directory>",
|
|
75824
|
+
description: "Target directory to initialize/update",
|
|
75825
|
+
defaultValue: "."
|
|
75826
|
+
},
|
|
75827
|
+
{
|
|
75828
|
+
flags: "--kit <kit>",
|
|
75829
|
+
description: "Kit to use (engineer, marketing)"
|
|
75830
|
+
},
|
|
75831
|
+
{
|
|
75832
|
+
flags: "-r, --release <version>",
|
|
75833
|
+
description: "Skip version selection, use specific version"
|
|
75136
75834
|
},
|
|
75137
75835
|
{
|
|
75138
75836
|
flags: "-g, --global",
|
|
75139
|
-
description: "
|
|
75837
|
+
description: "Use platform-specific user configuration directory"
|
|
75140
75838
|
},
|
|
75141
75839
|
{
|
|
75142
|
-
flags: "
|
|
75143
|
-
description: "
|
|
75840
|
+
flags: "--fresh",
|
|
75841
|
+
description: "Full reset: remove CK files, replace settings.json and CLAUDE.md, reinstall from scratch"
|
|
75144
75842
|
},
|
|
75145
75843
|
{
|
|
75146
|
-
flags: "
|
|
75147
|
-
description: "
|
|
75844
|
+
flags: "--force",
|
|
75845
|
+
description: "Force reinstall even if already at latest version (use with --yes; re-onboards missing files without full reset)"
|
|
75148
75846
|
}
|
|
75149
75847
|
]
|
|
75150
75848
|
},
|
|
75151
75849
|
{
|
|
75152
|
-
title: "
|
|
75850
|
+
title: "Filter Options",
|
|
75851
|
+
options: [
|
|
75852
|
+
{
|
|
75853
|
+
flags: "--exclude <pattern>",
|
|
75854
|
+
description: "Exclude files matching glob pattern (can be used multiple times)"
|
|
75855
|
+
},
|
|
75856
|
+
{
|
|
75857
|
+
flags: "--only <pattern>",
|
|
75858
|
+
description: "Include only files matching glob pattern (can be used multiple times)"
|
|
75859
|
+
},
|
|
75860
|
+
{
|
|
75861
|
+
flags: "--beta",
|
|
75862
|
+
description: "Show beta versions in selection prompt"
|
|
75863
|
+
},
|
|
75864
|
+
{
|
|
75865
|
+
flags: "--refresh",
|
|
75866
|
+
description: "Bypass release cache to fetch latest versions from GitHub"
|
|
75867
|
+
}
|
|
75868
|
+
]
|
|
75869
|
+
},
|
|
75870
|
+
{
|
|
75871
|
+
title: "Installation Options",
|
|
75153
75872
|
options: [
|
|
75873
|
+
{
|
|
75874
|
+
flags: "--install-skills",
|
|
75875
|
+
description: "Install skills dependencies (non-interactive mode)"
|
|
75876
|
+
},
|
|
75877
|
+
{
|
|
75878
|
+
flags: "--with-sudo",
|
|
75879
|
+
description: "Include system packages requiring sudo (Linux: ffmpeg, imagemagick)"
|
|
75880
|
+
},
|
|
75881
|
+
{
|
|
75882
|
+
flags: "--prefix",
|
|
75883
|
+
description: "Add /ck: prefix to all slash commands"
|
|
75884
|
+
},
|
|
75885
|
+
{
|
|
75886
|
+
flags: "--skip-setup",
|
|
75887
|
+
description: "Skip interactive configuration wizard"
|
|
75888
|
+
},
|
|
75154
75889
|
{
|
|
75155
75890
|
flags: "--dry-run",
|
|
75156
|
-
description: "Preview
|
|
75891
|
+
description: "Preview changes without applying them (requires --prefix)"
|
|
75157
75892
|
},
|
|
75158
75893
|
{
|
|
75159
75894
|
flags: "--force-overwrite",
|
|
75160
|
-
description: "
|
|
75895
|
+
description: "Override ownership protections and delete user-modified files"
|
|
75161
75896
|
},
|
|
75162
75897
|
{
|
|
75163
|
-
flags: "-
|
|
75164
|
-
description: "
|
|
75898
|
+
flags: "--force-overwrite-settings",
|
|
75899
|
+
description: "Fully replace settings.json instead of selective merge"
|
|
75165
75900
|
}
|
|
75166
75901
|
]
|
|
75167
|
-
}
|
|
75168
|
-
|
|
75169
|
-
sections: [
|
|
75170
|
-
{
|
|
75171
|
-
title: "Ownership-Aware Uninstall",
|
|
75172
|
-
content: "Uninstall preserves user customizations by default. Only CK-installed files that haven't been modified are removed. User-created files and modified files are preserved unless --force-overwrite is used."
|
|
75173
|
-
}
|
|
75902
|
+
},
|
|
75903
|
+
folderOptionsGroup
|
|
75174
75904
|
]
|
|
75175
75905
|
};
|
|
75176
75906
|
});
|
|
75177
75907
|
|
|
75178
|
-
// src/domains/help/commands/
|
|
75179
|
-
var
|
|
75180
|
-
var
|
|
75181
|
-
|
|
75182
|
-
name: "
|
|
75183
|
-
description: "
|
|
75184
|
-
usage: "ck
|
|
75908
|
+
// src/domains/help/commands/migrate-command-help.ts
|
|
75909
|
+
var migrateCommandHelp;
|
|
75910
|
+
var init_migrate_command_help = __esm(() => {
|
|
75911
|
+
migrateCommandHelp = {
|
|
75912
|
+
name: "migrate",
|
|
75913
|
+
description: "Migrate Claude Code agents, commands, skills, config, rules, and hooks to other providers",
|
|
75914
|
+
usage: "ck migrate [options]",
|
|
75185
75915
|
examples: [
|
|
75186
75916
|
{
|
|
75187
|
-
command: "ck
|
|
75188
|
-
description: "
|
|
75917
|
+
command: "ck migrate --agent codex --dry-run",
|
|
75918
|
+
description: "Preview the destination-aware migration plan before writing files"
|
|
75189
75919
|
},
|
|
75190
75920
|
{
|
|
75191
|
-
command: "ck
|
|
75192
|
-
description: "
|
|
75921
|
+
command: "ck migrate --agent codex -g",
|
|
75922
|
+
description: "Write to Codex global paths such as ~/.codex/ and ~/.agents/skills"
|
|
75923
|
+
},
|
|
75924
|
+
{
|
|
75925
|
+
command: "CK_FORCE_ASCII=1 ck migrate --agent codex",
|
|
75926
|
+
description: "Force ASCII borders on legacy Windows terminals (cmd.exe, older PowerShell)"
|
|
75193
75927
|
}
|
|
75194
75928
|
],
|
|
75195
75929
|
optionGroups: [
|
|
75196
75930
|
{
|
|
75197
|
-
title: "
|
|
75931
|
+
title: "Target Options",
|
|
75198
75932
|
options: [
|
|
75199
75933
|
{
|
|
75200
|
-
flags: "-
|
|
75201
|
-
description: "
|
|
75934
|
+
flags: "-a, --agent <provider>",
|
|
75935
|
+
description: "Target provider(s), can be specified multiple times"
|
|
75202
75936
|
},
|
|
75203
75937
|
{
|
|
75204
|
-
flags: "--
|
|
75205
|
-
description: "
|
|
75938
|
+
flags: "--all",
|
|
75939
|
+
description: "Migrate to all supported providers"
|
|
75940
|
+
},
|
|
75941
|
+
{
|
|
75942
|
+
flags: "-g, --global",
|
|
75943
|
+
description: "Install globally instead of the default project-level scope"
|
|
75206
75944
|
},
|
|
75207
75945
|
{
|
|
75208
75946
|
flags: "-y, --yes",
|
|
75209
|
-
description: "Skip
|
|
75947
|
+
description: "Skip confirmation prompts after the pre-flight summary"
|
|
75210
75948
|
},
|
|
75211
75949
|
{
|
|
75212
|
-
flags: "--
|
|
75213
|
-
description: "
|
|
75950
|
+
flags: "-f, --force",
|
|
75951
|
+
description: "Force reinstall deleted or edited managed items"
|
|
75214
75952
|
},
|
|
75215
75953
|
{
|
|
75216
|
-
flags: "--
|
|
75217
|
-
description: "
|
|
75954
|
+
flags: "--dry-run",
|
|
75955
|
+
description: "Preview plan, destinations, and next steps without writing files"
|
|
75218
75956
|
}
|
|
75219
75957
|
]
|
|
75220
75958
|
},
|
|
75221
75959
|
{
|
|
75222
|
-
title: "
|
|
75960
|
+
title: "Content Selection",
|
|
75223
75961
|
options: [
|
|
75224
75962
|
{
|
|
75225
|
-
flags: "--
|
|
75226
|
-
description: "
|
|
75227
|
-
deprecated: {
|
|
75228
|
-
message: "Use 'ck init --kit <kit>' to update kit installations",
|
|
75229
|
-
alternative: "ck init --kit <kit>"
|
|
75230
|
-
}
|
|
75963
|
+
flags: "--config",
|
|
75964
|
+
description: "Migrate CLAUDE.md config only"
|
|
75231
75965
|
},
|
|
75232
75966
|
{
|
|
75233
|
-
flags: "
|
|
75234
|
-
description: "
|
|
75235
|
-
|
|
75236
|
-
|
|
75237
|
-
|
|
75238
|
-
|
|
75967
|
+
flags: "--rules",
|
|
75968
|
+
description: "Migrate .claude/rules only"
|
|
75969
|
+
},
|
|
75970
|
+
{
|
|
75971
|
+
flags: "--hooks",
|
|
75972
|
+
description: "Migrate .claude/hooks only"
|
|
75973
|
+
},
|
|
75974
|
+
{
|
|
75975
|
+
flags: "--skip-config",
|
|
75976
|
+
description: "Skip config migration"
|
|
75977
|
+
},
|
|
75978
|
+
{
|
|
75979
|
+
flags: "--skip-rules",
|
|
75980
|
+
description: "Skip rules migration"
|
|
75981
|
+
},
|
|
75982
|
+
{
|
|
75983
|
+
flags: "--skip-hooks",
|
|
75984
|
+
description: "Skip hooks migration"
|
|
75985
|
+
},
|
|
75986
|
+
{
|
|
75987
|
+
flags: "--source <path>",
|
|
75988
|
+
description: "Custom CLAUDE.md source path"
|
|
75239
75989
|
}
|
|
75240
75990
|
]
|
|
75241
75991
|
}
|
|
75242
|
-
],
|
|
75243
|
-
sections: [
|
|
75244
|
-
{
|
|
75245
|
-
title: "Note",
|
|
75246
|
-
content: "'ck update' updates the CLI tool only and defaults to the latest stable release. Use '--beta' to opt into prerelease CLI builds. To update kit content (skills, commands, rules), use 'ck init' for local or 'ck init -g' for global. Use --yes to skip all prompts (both CLI and kit content update) for non-interactive/CI usage."
|
|
75247
|
-
}
|
|
75248
75992
|
]
|
|
75249
75993
|
};
|
|
75250
75994
|
});
|
|
75251
75995
|
|
|
75252
|
-
// src/domains/help/commands/
|
|
75253
|
-
var
|
|
75254
|
-
var
|
|
75255
|
-
|
|
75256
|
-
|
|
75257
|
-
|
|
75258
|
-
|
|
75996
|
+
// src/domains/help/commands/new-command-help.ts
|
|
75997
|
+
var newCommandHelp;
|
|
75998
|
+
var init_new_command_help = __esm(() => {
|
|
75999
|
+
init_common_options();
|
|
76000
|
+
newCommandHelp = {
|
|
76001
|
+
name: "new",
|
|
76002
|
+
description: "Bootstrap a new ClaudeKit project (with interactive version selection)",
|
|
76003
|
+
usage: "ck new [options]",
|
|
75259
76004
|
examples: [
|
|
75260
76005
|
{
|
|
75261
|
-
command: "ck
|
|
75262
|
-
description: "
|
|
76006
|
+
command: "ck new --kit engineer --dir ./my-project",
|
|
76007
|
+
description: "Create engineer kit project in specific directory"
|
|
75263
76008
|
},
|
|
75264
76009
|
{
|
|
75265
|
-
command: "ck
|
|
75266
|
-
description: "
|
|
76010
|
+
command: "ck new -y --use-git --release v2.1.0",
|
|
76011
|
+
description: "Non-interactive with git clone (no GitHub API needed)"
|
|
75267
76012
|
}
|
|
75268
76013
|
],
|
|
75269
76014
|
optionGroups: [
|
|
75270
76015
|
{
|
|
75271
|
-
title: "
|
|
76016
|
+
title: "Mode Options",
|
|
75272
76017
|
options: [
|
|
75273
76018
|
{
|
|
75274
|
-
flags: "--
|
|
75275
|
-
description: "
|
|
76019
|
+
flags: "-y, --yes",
|
|
76020
|
+
description: "Non-interactive mode (skip all prompts)"
|
|
75276
76021
|
},
|
|
75277
76022
|
{
|
|
75278
|
-
flags: "--
|
|
75279
|
-
description: "
|
|
75280
|
-
defaultValue: "30"
|
|
76023
|
+
flags: "--use-git",
|
|
76024
|
+
description: "Use git clone instead of GitHub API (uses SSH/HTTPS credentials)"
|
|
75281
76025
|
},
|
|
75282
76026
|
{
|
|
75283
|
-
flags: "--
|
|
75284
|
-
description: "
|
|
76027
|
+
flags: "--archive <path>",
|
|
76028
|
+
description: "Use local archive file instead of downloading (zip/tar.gz)"
|
|
76029
|
+
},
|
|
76030
|
+
{
|
|
76031
|
+
flags: "--kit-path <path>",
|
|
76032
|
+
description: "Use local kit directory instead of downloading"
|
|
75285
76033
|
}
|
|
75286
76034
|
]
|
|
75287
|
-
}
|
|
75288
|
-
]
|
|
75289
|
-
};
|
|
75290
|
-
});
|
|
75291
|
-
|
|
75292
|
-
// src/domains/help/commands/skills-command-help.ts
|
|
75293
|
-
var skillsCommandHelp;
|
|
75294
|
-
var init_skills_command_help = __esm(() => {
|
|
75295
|
-
skillsCommandHelp = {
|
|
75296
|
-
name: "skills",
|
|
75297
|
-
description: "Install, uninstall, and manage ClaudeKit skills across coding agents",
|
|
75298
|
-
usage: "ck skills [options]",
|
|
75299
|
-
examples: [
|
|
75300
|
-
{
|
|
75301
|
-
command: "ck skills --name frontend-design --agent claude-code -g",
|
|
75302
|
-
description: "Install skill to Claude Code globally"
|
|
75303
76035
|
},
|
|
75304
76036
|
{
|
|
75305
|
-
|
|
75306
|
-
description: "Show all installed skills with their locations"
|
|
75307
|
-
}
|
|
75308
|
-
],
|
|
75309
|
-
optionGroups: [
|
|
75310
|
-
{
|
|
75311
|
-
title: "Mode Options",
|
|
76037
|
+
title: "Project Options",
|
|
75312
76038
|
options: [
|
|
75313
76039
|
{
|
|
75314
|
-
flags: "
|
|
75315
|
-
description: "
|
|
76040
|
+
flags: "--dir <directory>",
|
|
76041
|
+
description: "Target directory for the new project",
|
|
76042
|
+
defaultValue: "."
|
|
75316
76043
|
},
|
|
75317
76044
|
{
|
|
75318
|
-
flags: "--
|
|
75319
|
-
description: "
|
|
76045
|
+
flags: "--kit <kit>",
|
|
76046
|
+
description: "Kit to use (engineer, marketing)"
|
|
75320
76047
|
},
|
|
75321
76048
|
{
|
|
75322
|
-
flags: "-
|
|
75323
|
-
description: "
|
|
76049
|
+
flags: "-r, --release <version>",
|
|
76050
|
+
description: "Skip version selection, use specific version (e.g., latest, v1.0.0)"
|
|
75324
76051
|
},
|
|
75325
76052
|
{
|
|
75326
|
-
flags: "--
|
|
75327
|
-
description: "
|
|
76053
|
+
flags: "--force",
|
|
76054
|
+
description: "Overwrite existing files without confirmation"
|
|
75328
76055
|
}
|
|
75329
76056
|
]
|
|
75330
76057
|
},
|
|
76058
|
+
filterOptionsGroup,
|
|
75331
76059
|
{
|
|
75332
76060
|
title: "Installation Options",
|
|
75333
76061
|
options: [
|
|
75334
76062
|
{
|
|
75335
|
-
flags: "
|
|
75336
|
-
description: "
|
|
76063
|
+
flags: "--opencode",
|
|
76064
|
+
description: "Install OpenCode CLI package (non-interactive mode)"
|
|
75337
76065
|
},
|
|
75338
76066
|
{
|
|
75339
|
-
flags: "
|
|
75340
|
-
description: "
|
|
76067
|
+
flags: "--gemini",
|
|
76068
|
+
description: "Install Google Gemini CLI package (non-interactive mode)"
|
|
75341
76069
|
},
|
|
75342
76070
|
{
|
|
75343
|
-
flags: "-
|
|
75344
|
-
description: "Install
|
|
76071
|
+
flags: "--install-skills",
|
|
76072
|
+
description: "Install skills dependencies (non-interactive mode)"
|
|
75345
76073
|
},
|
|
75346
76074
|
{
|
|
75347
|
-
flags: "--
|
|
75348
|
-
description: "
|
|
76075
|
+
flags: "--with-sudo",
|
|
76076
|
+
description: "Include system packages requiring sudo (Linux: ffmpeg, imagemagick)"
|
|
75349
76077
|
},
|
|
75350
76078
|
{
|
|
75351
|
-
flags: "
|
|
75352
|
-
description: "
|
|
75353
|
-
}
|
|
75354
|
-
]
|
|
75355
|
-
},
|
|
75356
|
-
{
|
|
75357
|
-
title: "Uninstall Options",
|
|
75358
|
-
options: [
|
|
75359
|
-
{
|
|
75360
|
-
flags: "-f, --force",
|
|
75361
|
-
description: "Force uninstall even if skill not in registry (requires --agent)"
|
|
76079
|
+
flags: "--prefix",
|
|
76080
|
+
description: "Add /ck: prefix to all slash commands"
|
|
75362
76081
|
}
|
|
75363
76082
|
]
|
|
75364
|
-
}
|
|
75365
|
-
],
|
|
75366
|
-
sections: [
|
|
75367
|
-
{
|
|
75368
|
-
title: "Supported Agents",
|
|
75369
|
-
content: ` claude-code Claude Code CLI
|
|
75370
|
-
cursor Cursor IDE
|
|
75371
|
-
codex Codex CLI
|
|
75372
|
-
opencode OpenCode
|
|
75373
|
-
goose Goose AI
|
|
75374
|
-
gemini-cli Gemini CLI
|
|
75375
|
-
antigravity Antigravity Agent
|
|
75376
|
-
github-copilot GitHub Copilot
|
|
75377
|
-
amp Amp
|
|
75378
|
-
kilo Kilo Code
|
|
75379
|
-
roo Roo Code
|
|
75380
|
-
windsurf Windsurf IDE
|
|
75381
|
-
cline Cline
|
|
75382
|
-
openhands OpenHands`
|
|
75383
76083
|
},
|
|
75384
|
-
|
|
75385
|
-
title: "Notes",
|
|
75386
|
-
content: ` • Skills are installed from ~/.claude/skills (ClaudeKit Engineer source)
|
|
75387
|
-
• OpenCode reuses Claude-compatible skill roots (.claude/skills, ~/.claude/skills), so installs may be a no-op
|
|
75388
|
-
• Registry stored at ~/.claudekit/skill-registry.json
|
|
75389
|
-
• Target paths vary by agent; some agents intentionally share a common skills directory`
|
|
75390
|
-
}
|
|
76084
|
+
folderOptionsGroup
|
|
75391
76085
|
]
|
|
75392
76086
|
};
|
|
75393
76087
|
});
|
|
75394
76088
|
|
|
75395
|
-
// src/domains/help/commands/
|
|
75396
|
-
var
|
|
75397
|
-
var
|
|
75398
|
-
|
|
75399
|
-
name: "
|
|
75400
|
-
description: "
|
|
75401
|
-
usage: "ck
|
|
76089
|
+
// src/domains/help/commands/plan-command-help.ts
|
|
76090
|
+
var planCommandHelp;
|
|
76091
|
+
var init_plan_command_help = __esm(() => {
|
|
76092
|
+
planCommandHelp = {
|
|
76093
|
+
name: "plan",
|
|
76094
|
+
description: "Plan management: parse, validate, status, kanban, create, check, uncheck, add-phase",
|
|
76095
|
+
usage: "ck plan [action] [target] [options]",
|
|
75402
76096
|
examples: [
|
|
75403
76097
|
{
|
|
75404
|
-
command: "ck
|
|
75405
|
-
description: "
|
|
75406
|
-
},
|
|
75407
|
-
{
|
|
75408
|
-
command: "ck config --host 0.0.0.0 --no-open",
|
|
75409
|
-
description: "Expose the dashboard to your network intentionally"
|
|
76098
|
+
command: "ck plan status",
|
|
76099
|
+
description: "Show progress summary for all plans in the current project"
|
|
75410
76100
|
},
|
|
75411
76101
|
{
|
|
75412
|
-
command: "ck
|
|
75413
|
-
description: "
|
|
76102
|
+
command: "ck plan create --title 'Auth feature' --phases setup,api,ui",
|
|
76103
|
+
description: "Scaffold a new plan directory with three phases"
|
|
75414
76104
|
}
|
|
75415
76105
|
],
|
|
75416
76106
|
optionGroups: [
|
|
75417
76107
|
{
|
|
75418
|
-
title: "
|
|
76108
|
+
title: "Output Options",
|
|
75419
76109
|
options: [
|
|
75420
|
-
{
|
|
75421
|
-
|
|
75422
|
-
description: "Launch config dashboard (default action when omitted)"
|
|
75423
|
-
},
|
|
75424
|
-
{
|
|
75425
|
-
flags: "get <key>",
|
|
75426
|
-
description: "Read a config value"
|
|
75427
|
-
},
|
|
75428
|
-
{
|
|
75429
|
-
flags: "set <key> <value>",
|
|
75430
|
-
description: "Write a config value"
|
|
75431
|
-
},
|
|
75432
|
-
{
|
|
75433
|
-
flags: "show",
|
|
75434
|
-
description: "Print merged config"
|
|
75435
|
-
}
|
|
76110
|
+
{ flags: "--json", description: "Output in JSON format" },
|
|
76111
|
+
{ flags: "--strict", description: "Strict validation mode (validate action)" }
|
|
75436
76112
|
]
|
|
75437
76113
|
},
|
|
75438
76114
|
{
|
|
@@ -75440,49 +76116,147 @@ var init_config_command_help = __esm(() => {
|
|
|
75440
76116
|
options: [
|
|
75441
76117
|
{
|
|
75442
76118
|
flags: "-g, --global",
|
|
75443
|
-
description: "Use global
|
|
75444
|
-
}
|
|
76119
|
+
description: "Use global plans scope (~/.claude/plans or configured global root)"
|
|
76120
|
+
}
|
|
76121
|
+
]
|
|
76122
|
+
}
|
|
76123
|
+
],
|
|
76124
|
+
subcommands: [
|
|
76125
|
+
{
|
|
76126
|
+
name: "parse",
|
|
76127
|
+
description: "Parse a plan.md and output an ASCII table or JSON of all phases",
|
|
76128
|
+
usage: "ck plan parse [target] [--json]",
|
|
76129
|
+
examples: [],
|
|
76130
|
+
optionGroups: [
|
|
75445
76131
|
{
|
|
75446
|
-
|
|
75447
|
-
description: "
|
|
76132
|
+
title: "Output Options",
|
|
76133
|
+
options: [{ flags: "--json", description: "Output machine-readable JSON" }]
|
|
75448
76134
|
}
|
|
75449
76135
|
]
|
|
75450
76136
|
},
|
|
75451
76137
|
{
|
|
75452
|
-
|
|
75453
|
-
|
|
76138
|
+
name: "validate",
|
|
76139
|
+
description: "Validate plan.md syntax and structure",
|
|
76140
|
+
usage: "ck plan validate [target] [--strict] [--json]",
|
|
76141
|
+
examples: [],
|
|
76142
|
+
optionGroups: [
|
|
75454
76143
|
{
|
|
75455
|
-
|
|
75456
|
-
|
|
75457
|
-
|
|
76144
|
+
title: "Validation Options",
|
|
76145
|
+
options: [
|
|
76146
|
+
{ flags: "--strict", description: "Fail on warnings in addition to errors" },
|
|
76147
|
+
{ flags: "--json", description: "Output results as JSON" }
|
|
76148
|
+
]
|
|
76149
|
+
}
|
|
76150
|
+
]
|
|
76151
|
+
},
|
|
76152
|
+
{
|
|
76153
|
+
name: "status",
|
|
76154
|
+
description: "Show progress for plans in scope",
|
|
76155
|
+
usage: "ck plan status [--json] [-g]",
|
|
76156
|
+
examples: [],
|
|
76157
|
+
optionGroups: [
|
|
75458
76158
|
{
|
|
75459
|
-
|
|
75460
|
-
description: "
|
|
76159
|
+
title: "Output Options",
|
|
76160
|
+
options: [{ flags: "--json", description: "Output in JSON format" }]
|
|
75461
76161
|
},
|
|
75462
76162
|
{
|
|
75463
|
-
|
|
75464
|
-
description: "
|
|
76163
|
+
title: "Scope Options",
|
|
76164
|
+
options: [{ flags: "-g, --global", description: "Show status for global plans scope" }]
|
|
76165
|
+
}
|
|
76166
|
+
]
|
|
76167
|
+
},
|
|
76168
|
+
{
|
|
76169
|
+
name: "kanban",
|
|
76170
|
+
description: "Launch interactive Kanban dashboard in the browser",
|
|
76171
|
+
usage: "ck plan kanban [--port <port>] [--no-open] [--dev]",
|
|
76172
|
+
examples: [],
|
|
76173
|
+
optionGroups: [
|
|
76174
|
+
{
|
|
76175
|
+
title: "Dashboard Options",
|
|
76176
|
+
options: [
|
|
76177
|
+
{ flags: "--port <port>", description: "Port to serve the Kanban dashboard on" },
|
|
76178
|
+
{ flags: "--no-open", description: "Do not auto-open the browser" },
|
|
76179
|
+
{ flags: "--dev", description: "Start dashboard in development mode" }
|
|
76180
|
+
]
|
|
76181
|
+
}
|
|
76182
|
+
]
|
|
76183
|
+
},
|
|
76184
|
+
{
|
|
76185
|
+
name: "create",
|
|
76186
|
+
description: "Scaffold a new plan directory with phase files",
|
|
76187
|
+
usage: "ck plan create [--title <title>] [--phases <phases>] [options]",
|
|
76188
|
+
examples: [],
|
|
76189
|
+
optionGroups: [
|
|
76190
|
+
{
|
|
76191
|
+
title: "Create Options",
|
|
76192
|
+
options: [
|
|
76193
|
+
{ flags: "--title <title>", description: "Plan title" },
|
|
76194
|
+
{
|
|
76195
|
+
flags: "--phases <phases>",
|
|
76196
|
+
description: "Comma-separated list of phase names"
|
|
76197
|
+
},
|
|
76198
|
+
{ flags: "--dir <dir>", description: "Plan output directory" },
|
|
76199
|
+
{
|
|
76200
|
+
flags: "--priority <priority>",
|
|
76201
|
+
description: "Priority level: P1, P2, or P3"
|
|
76202
|
+
},
|
|
76203
|
+
{ flags: "--issue <issue>", description: "GitHub issue number to link" },
|
|
76204
|
+
{
|
|
76205
|
+
flags: "--source <source>",
|
|
76206
|
+
description: "Creation source: skill | cli | dashboard"
|
|
76207
|
+
},
|
|
76208
|
+
{
|
|
76209
|
+
flags: "--session-id <id>",
|
|
76210
|
+
description: "Claude session ID for tracking"
|
|
76211
|
+
}
|
|
76212
|
+
]
|
|
75465
76213
|
},
|
|
75466
76214
|
{
|
|
75467
|
-
|
|
75468
|
-
description: "
|
|
76215
|
+
title: "Scope Options",
|
|
76216
|
+
options: [{ flags: "-g, --global", description: "Create plan in global plans scope" }]
|
|
75469
76217
|
}
|
|
75470
76218
|
]
|
|
75471
76219
|
},
|
|
75472
76220
|
{
|
|
75473
|
-
|
|
75474
|
-
|
|
76221
|
+
name: "check",
|
|
76222
|
+
description: "Mark a phase as completed (or in-progress with --start)",
|
|
76223
|
+
usage: "ck plan check <id> [--start]",
|
|
76224
|
+
examples: [],
|
|
76225
|
+
optionGroups: [
|
|
75475
76226
|
{
|
|
75476
|
-
|
|
75477
|
-
|
|
76227
|
+
title: "Check Options",
|
|
76228
|
+
options: [
|
|
76229
|
+
{
|
|
76230
|
+
flags: "--start",
|
|
76231
|
+
description: "Mark phase as in-progress instead of completed"
|
|
76232
|
+
}
|
|
76233
|
+
]
|
|
75478
76234
|
}
|
|
75479
76235
|
]
|
|
75480
|
-
}
|
|
75481
|
-
],
|
|
75482
|
-
sections: [
|
|
76236
|
+
},
|
|
75483
76237
|
{
|
|
75484
|
-
|
|
75485
|
-
|
|
76238
|
+
name: "uncheck",
|
|
76239
|
+
description: "Reset a phase back to pending status",
|
|
76240
|
+
usage: "ck plan uncheck <id>",
|
|
76241
|
+
examples: [],
|
|
76242
|
+
optionGroups: []
|
|
76243
|
+
},
|
|
76244
|
+
{
|
|
76245
|
+
name: "add-phase",
|
|
76246
|
+
description: "Append a new phase to an existing plan",
|
|
76247
|
+
usage: "ck plan add-phase [target] [--after <id>]",
|
|
76248
|
+
examples: [],
|
|
76249
|
+
optionGroups: [
|
|
76250
|
+
{
|
|
76251
|
+
title: "Phase Options",
|
|
76252
|
+
options: [
|
|
76253
|
+
{
|
|
76254
|
+
flags: "--after <after>",
|
|
76255
|
+
description: "Insert the new phase after this phase ID"
|
|
76256
|
+
}
|
|
76257
|
+
]
|
|
76258
|
+
}
|
|
76259
|
+
]
|
|
75486
76260
|
}
|
|
75487
76261
|
]
|
|
75488
76262
|
};
|
|
@@ -75543,6 +76317,10 @@ var init_projects_command_help = __esm(() => {
|
|
|
75543
76317
|
flags: "--alias <alias>",
|
|
75544
76318
|
description: "Custom alias for project (add)"
|
|
75545
76319
|
},
|
|
76320
|
+
{
|
|
76321
|
+
flags: "--pinned",
|
|
76322
|
+
description: "Pin this project (add)"
|
|
76323
|
+
},
|
|
75546
76324
|
{
|
|
75547
76325
|
flags: "--tags <tags>",
|
|
75548
76326
|
description: "Comma-separated tags (add)"
|
|
@@ -75553,6 +76331,31 @@ var init_projects_command_help = __esm(() => {
|
|
|
75553
76331
|
}
|
|
75554
76332
|
]
|
|
75555
76333
|
}
|
|
76334
|
+
],
|
|
76335
|
+
subcommands: [
|
|
76336
|
+
{
|
|
76337
|
+
name: "list",
|
|
76338
|
+
description: "List projects in registry",
|
|
76339
|
+
usage: "ck projects list [--json] [--pinned]",
|
|
76340
|
+
examples: [],
|
|
76341
|
+
optionGroups: [],
|
|
76342
|
+
aliases: ["ls"]
|
|
76343
|
+
},
|
|
76344
|
+
{
|
|
76345
|
+
name: "add",
|
|
76346
|
+
description: "Add project path to registry",
|
|
76347
|
+
usage: "ck projects add <path> [--alias <alias>] [--pinned] [--tags <tags>]",
|
|
76348
|
+
examples: [],
|
|
76349
|
+
optionGroups: []
|
|
76350
|
+
},
|
|
76351
|
+
{
|
|
76352
|
+
name: "remove",
|
|
76353
|
+
description: "Remove project by alias or ID",
|
|
76354
|
+
usage: "ck projects remove [alias] [--id <id>]",
|
|
76355
|
+
examples: [],
|
|
76356
|
+
optionGroups: [],
|
|
76357
|
+
aliases: ["rm"]
|
|
76358
|
+
}
|
|
75556
76359
|
]
|
|
75557
76360
|
};
|
|
75558
76361
|
});
|
|
@@ -75601,21 +76404,21 @@ var init_setup_command_help = __esm(() => {
|
|
|
75601
76404
|
};
|
|
75602
76405
|
});
|
|
75603
76406
|
|
|
75604
|
-
// src/domains/help/commands/
|
|
75605
|
-
var
|
|
75606
|
-
var
|
|
75607
|
-
|
|
75608
|
-
name: "
|
|
75609
|
-
description: "Install, uninstall, and manage
|
|
75610
|
-
usage: "ck
|
|
76407
|
+
// src/domains/help/commands/skills-command-help.ts
|
|
76408
|
+
var skillsCommandHelp;
|
|
76409
|
+
var init_skills_command_help = __esm(() => {
|
|
76410
|
+
skillsCommandHelp = {
|
|
76411
|
+
name: "skills",
|
|
76412
|
+
description: "Install, uninstall, and manage ClaudeKit skills across coding agents",
|
|
76413
|
+
usage: "ck skills [options]",
|
|
75611
76414
|
examples: [
|
|
75612
76415
|
{
|
|
75613
|
-
command: "ck
|
|
75614
|
-
description: "Install
|
|
76416
|
+
command: "ck skills --name frontend-design --agent claude-code -g",
|
|
76417
|
+
description: "Install skill to Claude Code globally"
|
|
75615
76418
|
},
|
|
75616
76419
|
{
|
|
75617
|
-
command: "ck
|
|
75618
|
-
description: "Show installed
|
|
76420
|
+
command: "ck skills --list --installed",
|
|
76421
|
+
description: "Show all installed skills with their locations"
|
|
75619
76422
|
}
|
|
75620
76423
|
],
|
|
75621
76424
|
optionGroups: [
|
|
@@ -75624,15 +76427,15 @@ var init_agents_command_help = __esm(() => {
|
|
|
75624
76427
|
options: [
|
|
75625
76428
|
{
|
|
75626
76429
|
flags: "-l, --list",
|
|
75627
|
-
description: "List available
|
|
76430
|
+
description: "List available skills from ClaudeKit source"
|
|
75628
76431
|
},
|
|
75629
76432
|
{
|
|
75630
76433
|
flags: "--installed",
|
|
75631
|
-
description: "When used with --list, show installed
|
|
76434
|
+
description: "When used with --list, show installed skills instead"
|
|
75632
76435
|
},
|
|
75633
76436
|
{
|
|
75634
76437
|
flags: "-u, --uninstall",
|
|
75635
|
-
description: "Uninstall
|
|
76438
|
+
description: "Uninstall skill(s) from agent(s)"
|
|
75636
76439
|
},
|
|
75637
76440
|
{
|
|
75638
76441
|
flags: "--sync",
|
|
@@ -75644,101 +76447,53 @@ var init_agents_command_help = __esm(() => {
|
|
|
75644
76447
|
title: "Installation Options",
|
|
75645
76448
|
options: [
|
|
75646
76449
|
{
|
|
75647
|
-
flags: "-n, --name <
|
|
75648
|
-
description: "
|
|
76450
|
+
flags: "-n, --name <skill>",
|
|
76451
|
+
description: "Skill name to install or uninstall"
|
|
75649
76452
|
},
|
|
75650
76453
|
{
|
|
75651
|
-
flags: "-a, --agent <
|
|
75652
|
-
description: "Target
|
|
76454
|
+
flags: "-a, --agent <agent>",
|
|
76455
|
+
description: "Target agent(s) - can be specified multiple times. Valid: claude-code, cursor, codex, opencode, goose, gemini-cli, antigravity, github-copilot, amp, kilo, roo, windsurf, cline, openhands"
|
|
75653
76456
|
},
|
|
75654
76457
|
{
|
|
75655
76458
|
flags: "-g, --global",
|
|
75656
|
-
description: "Install
|
|
76459
|
+
description: "Install to user's home directory (available across projects)"
|
|
75657
76460
|
},
|
|
75658
76461
|
{
|
|
75659
76462
|
flags: "--all",
|
|
75660
|
-
description: "Install to all supported
|
|
76463
|
+
description: "Install to all supported agents"
|
|
75661
76464
|
},
|
|
75662
76465
|
{
|
|
75663
76466
|
flags: "-y, --yes",
|
|
75664
|
-
description: "
|
|
75665
|
-
}
|
|
75666
|
-
]
|
|
75667
|
-
},
|
|
75668
|
-
{
|
|
75669
|
-
title: "Uninstall Options",
|
|
75670
|
-
options: [
|
|
75671
|
-
{
|
|
75672
|
-
flags: "--force",
|
|
75673
|
-
description: "Force uninstall even if not tracked in registry"
|
|
76467
|
+
description: "Non-interactive mode (skip confirmations)"
|
|
75674
76468
|
}
|
|
75675
76469
|
]
|
|
75676
|
-
}
|
|
75677
|
-
]
|
|
75678
|
-
};
|
|
75679
|
-
});
|
|
75680
|
-
|
|
75681
|
-
// src/domains/help/commands/commands-command-help.ts
|
|
75682
|
-
var commandsCommandHelp;
|
|
75683
|
-
var init_commands_command_help = __esm(() => {
|
|
75684
|
-
commandsCommandHelp = {
|
|
75685
|
-
name: "commands",
|
|
75686
|
-
description: "Install, uninstall, and manage Claude commands across providers",
|
|
75687
|
-
usage: "ck commands [options]",
|
|
75688
|
-
examples: [
|
|
75689
|
-
{
|
|
75690
|
-
command: "ck commands --name plan --agent codex",
|
|
75691
|
-
description: "Install one slash command to Codex"
|
|
75692
76470
|
},
|
|
75693
76471
|
{
|
|
75694
|
-
|
|
75695
|
-
description: "List available commands from source"
|
|
75696
|
-
}
|
|
75697
|
-
],
|
|
75698
|
-
optionGroups: [
|
|
75699
|
-
{
|
|
75700
|
-
title: "Mode Options",
|
|
76472
|
+
title: "Catalog Options",
|
|
75701
76473
|
options: [
|
|
75702
76474
|
{
|
|
75703
|
-
flags: "
|
|
75704
|
-
description: "
|
|
76475
|
+
flags: "--catalog",
|
|
76476
|
+
description: "Show skill catalog stats and metadata"
|
|
75705
76477
|
},
|
|
75706
76478
|
{
|
|
75707
|
-
flags: "--
|
|
75708
|
-
description: "
|
|
76479
|
+
flags: "--regenerate",
|
|
76480
|
+
description: "Force regenerate catalog (use with --catalog)"
|
|
75709
76481
|
},
|
|
75710
76482
|
{
|
|
75711
|
-
flags: "
|
|
75712
|
-
description: "
|
|
76483
|
+
flags: "--search <query>",
|
|
76484
|
+
description: "BM25 full-text search over skill catalog"
|
|
75713
76485
|
},
|
|
75714
76486
|
{
|
|
75715
|
-
flags: "--
|
|
75716
|
-
description: "
|
|
75717
|
-
}
|
|
75718
|
-
]
|
|
75719
|
-
},
|
|
75720
|
-
{
|
|
75721
|
-
title: "Installation Options",
|
|
75722
|
-
options: [
|
|
75723
|
-
{
|
|
75724
|
-
flags: "-n, --name <command>",
|
|
75725
|
-
description: "Command name to install or uninstall"
|
|
75726
|
-
},
|
|
75727
|
-
{
|
|
75728
|
-
flags: "-a, --agent <provider>",
|
|
75729
|
-
description: "Target provider(s), can be specified multiple times"
|
|
75730
|
-
},
|
|
75731
|
-
{
|
|
75732
|
-
flags: "-g, --global",
|
|
75733
|
-
description: "Install globally instead of project-level"
|
|
76487
|
+
flags: "--json",
|
|
76488
|
+
description: "Output search results as JSON (use with --search)"
|
|
75734
76489
|
},
|
|
75735
76490
|
{
|
|
75736
|
-
flags: "--
|
|
75737
|
-
description: "
|
|
76491
|
+
flags: "--limit <n>",
|
|
76492
|
+
description: "Max search results, default 10 (use with --search)"
|
|
75738
76493
|
},
|
|
75739
76494
|
{
|
|
75740
|
-
flags: "
|
|
75741
|
-
description: "
|
|
76495
|
+
flags: "--validate",
|
|
76496
|
+
description: "Validate SKILL.md frontmatter fields"
|
|
75742
76497
|
}
|
|
75743
76498
|
]
|
|
75744
76499
|
},
|
|
@@ -75746,190 +76501,222 @@ var init_commands_command_help = __esm(() => {
|
|
|
75746
76501
|
title: "Uninstall Options",
|
|
75747
76502
|
options: [
|
|
75748
76503
|
{
|
|
75749
|
-
flags: "--force",
|
|
75750
|
-
description: "Force uninstall even if not
|
|
76504
|
+
flags: "-f, --force",
|
|
76505
|
+
description: "Force uninstall even if skill not in registry (requires --agent)"
|
|
75751
76506
|
}
|
|
75752
76507
|
]
|
|
75753
76508
|
}
|
|
76509
|
+
],
|
|
76510
|
+
sections: [
|
|
76511
|
+
{
|
|
76512
|
+
title: "Supported Agents",
|
|
76513
|
+
content: ` claude-code Claude Code CLI
|
|
76514
|
+
cursor Cursor IDE
|
|
76515
|
+
codex Codex CLI
|
|
76516
|
+
opencode OpenCode
|
|
76517
|
+
goose Goose AI
|
|
76518
|
+
gemini-cli Gemini CLI
|
|
76519
|
+
antigravity Antigravity Agent
|
|
76520
|
+
github-copilot GitHub Copilot
|
|
76521
|
+
amp Amp
|
|
76522
|
+
kilo Kilo Code
|
|
76523
|
+
roo Roo Code
|
|
76524
|
+
windsurf Windsurf IDE
|
|
76525
|
+
cline Cline
|
|
76526
|
+
openhands OpenHands`
|
|
76527
|
+
},
|
|
76528
|
+
{
|
|
76529
|
+
title: "Notes",
|
|
76530
|
+
content: ` • Skills are installed from ~/.claude/skills (ClaudeKit Engineer source)
|
|
76531
|
+
• OpenCode reuses Claude-compatible skill roots (.claude/skills, ~/.claude/skills), so installs may be a no-op
|
|
76532
|
+
• Registry stored at ~/.claudekit/skill-registry.json
|
|
76533
|
+
• Target paths vary by agent; some agents intentionally share a common skills directory`
|
|
76534
|
+
}
|
|
75754
76535
|
]
|
|
75755
76536
|
};
|
|
75756
76537
|
});
|
|
75757
76538
|
|
|
75758
|
-
// src/domains/help/commands/
|
|
75759
|
-
var
|
|
75760
|
-
var
|
|
75761
|
-
|
|
75762
|
-
name: "
|
|
75763
|
-
description: "
|
|
75764
|
-
usage: "ck
|
|
76539
|
+
// src/domains/help/commands/uninstall-command-help.ts
|
|
76540
|
+
var uninstallCommandHelp;
|
|
76541
|
+
var init_uninstall_command_help = __esm(() => {
|
|
76542
|
+
uninstallCommandHelp = {
|
|
76543
|
+
name: "uninstall",
|
|
76544
|
+
description: "Remove ClaudeKit installations (ownership-aware)",
|
|
76545
|
+
usage: "ck uninstall [options]",
|
|
75765
76546
|
examples: [
|
|
75766
76547
|
{
|
|
75767
|
-
command: "ck
|
|
75768
|
-
description: "
|
|
75769
|
-
},
|
|
75770
|
-
{
|
|
75771
|
-
command: "ck content setup",
|
|
75772
|
-
description: "Interactive configuration wizard"
|
|
76548
|
+
command: "ck uninstall --local --yes",
|
|
76549
|
+
description: "Remove local installation without confirmation"
|
|
75773
76550
|
},
|
|
75774
76551
|
{
|
|
75775
|
-
command: "ck
|
|
75776
|
-
description: "
|
|
76552
|
+
command: "ck uninstall --dry-run",
|
|
76553
|
+
description: "Preview what would be removed without deleting"
|
|
75777
76554
|
}
|
|
75778
76555
|
],
|
|
75779
76556
|
optionGroups: [
|
|
75780
76557
|
{
|
|
75781
|
-
title: "
|
|
76558
|
+
title: "Scope Options",
|
|
75782
76559
|
options: [
|
|
75783
76560
|
{
|
|
75784
|
-
flags: "
|
|
75785
|
-
description: "
|
|
75786
|
-
},
|
|
75787
|
-
{
|
|
75788
|
-
flags: "stop",
|
|
75789
|
-
description: "Stop the running content daemon"
|
|
75790
|
-
},
|
|
75791
|
-
{
|
|
75792
|
-
flags: "status",
|
|
75793
|
-
description: "Show daemon status and recent activity"
|
|
75794
|
-
},
|
|
75795
|
-
{
|
|
75796
|
-
flags: "logs",
|
|
75797
|
-
description: "View content daemon logs"
|
|
75798
|
-
},
|
|
75799
|
-
{
|
|
75800
|
-
flags: "setup",
|
|
75801
|
-
description: "Interactive configuration wizard"
|
|
76561
|
+
flags: "-l, --local",
|
|
76562
|
+
description: "Uninstall only local installation (current project)"
|
|
75802
76563
|
},
|
|
75803
76564
|
{
|
|
75804
|
-
flags: "
|
|
75805
|
-
description: "
|
|
76565
|
+
flags: "-g, --global",
|
|
76566
|
+
description: "Uninstall only global installation (~/.claude/)"
|
|
75806
76567
|
},
|
|
75807
76568
|
{
|
|
75808
|
-
flags: "
|
|
75809
|
-
description: "
|
|
76569
|
+
flags: "-A, --all",
|
|
76570
|
+
description: "Uninstall from both local and global locations"
|
|
75810
76571
|
},
|
|
75811
76572
|
{
|
|
75812
|
-
flags: "
|
|
75813
|
-
description: "
|
|
76573
|
+
flags: "-k, --kit <type>",
|
|
76574
|
+
description: "Uninstall specific kit only (engineer, marketing)"
|
|
75814
76575
|
}
|
|
75815
76576
|
]
|
|
75816
76577
|
},
|
|
75817
76578
|
{
|
|
75818
|
-
title: "Options",
|
|
76579
|
+
title: "Safety Options",
|
|
75819
76580
|
options: [
|
|
75820
76581
|
{
|
|
75821
76582
|
flags: "--dry-run",
|
|
75822
|
-
description: "
|
|
75823
|
-
},
|
|
75824
|
-
{
|
|
75825
|
-
flags: "--verbose",
|
|
75826
|
-
description: "Enable verbose logging"
|
|
75827
|
-
},
|
|
75828
|
-
{
|
|
75829
|
-
flags: "--force",
|
|
75830
|
-
description: "Kill existing process and start fresh"
|
|
76583
|
+
description: "Preview what would be removed without deleting"
|
|
75831
76584
|
},
|
|
75832
76585
|
{
|
|
75833
|
-
flags: "--
|
|
75834
|
-
description: "
|
|
76586
|
+
flags: "--force-overwrite",
|
|
76587
|
+
description: "Delete even user-modified files (requires confirmation)"
|
|
75835
76588
|
},
|
|
75836
76589
|
{
|
|
75837
|
-
flags: "--
|
|
75838
|
-
description: "
|
|
76590
|
+
flags: "-y, --yes",
|
|
76591
|
+
description: "Skip confirmation prompt"
|
|
75839
76592
|
}
|
|
75840
76593
|
]
|
|
75841
76594
|
}
|
|
75842
76595
|
],
|
|
75843
76596
|
sections: [
|
|
75844
76597
|
{
|
|
75845
|
-
title: "
|
|
75846
|
-
content: "
|
|
76598
|
+
title: "Ownership-Aware Uninstall",
|
|
76599
|
+
content: "Uninstall preserves user customizations by default. Only CK-installed files that haven't been modified are removed. User-created files and modified files are preserved unless --force-overwrite is used."
|
|
75847
76600
|
}
|
|
75848
76601
|
]
|
|
75849
76602
|
};
|
|
75850
76603
|
});
|
|
75851
76604
|
|
|
75852
|
-
// src/domains/help/commands/
|
|
75853
|
-
var
|
|
75854
|
-
var
|
|
75855
|
-
|
|
75856
|
-
name: "
|
|
75857
|
-
description: "
|
|
75858
|
-
usage: "ck
|
|
76605
|
+
// src/domains/help/commands/update-command-help.ts
|
|
76606
|
+
var updateCommandHelp;
|
|
76607
|
+
var init_update_command_help = __esm(() => {
|
|
76608
|
+
updateCommandHelp = {
|
|
76609
|
+
name: "update",
|
|
76610
|
+
description: "Update ClaudeKit CLI tool only (not kit content)",
|
|
76611
|
+
usage: "ck update [options]",
|
|
75859
76612
|
examples: [
|
|
75860
76613
|
{
|
|
75861
|
-
command: "ck
|
|
75862
|
-
description: "
|
|
75863
|
-
},
|
|
75864
|
-
{
|
|
75865
|
-
command: "ck migrate --agent codex -g",
|
|
75866
|
-
description: "Write to Codex global paths such as ~/.codex/ and ~/.agents/skills"
|
|
76614
|
+
command: "ck update --check",
|
|
76615
|
+
description: "Check for CLI updates without installing"
|
|
75867
76616
|
},
|
|
75868
76617
|
{
|
|
75869
|
-
command: "
|
|
75870
|
-
description: "
|
|
76618
|
+
command: "ck update --dev --yes",
|
|
76619
|
+
description: "Update to latest dev version without confirmation"
|
|
75871
76620
|
}
|
|
75872
76621
|
],
|
|
75873
76622
|
optionGroups: [
|
|
75874
76623
|
{
|
|
75875
|
-
title: "
|
|
76624
|
+
title: "Update Options",
|
|
75876
76625
|
options: [
|
|
75877
76626
|
{
|
|
75878
|
-
flags: "-
|
|
75879
|
-
description: "
|
|
75880
|
-
},
|
|
75881
|
-
{
|
|
75882
|
-
flags: "--all",
|
|
75883
|
-
description: "Migrate to all supported providers"
|
|
76627
|
+
flags: "-r, --release <version>",
|
|
76628
|
+
description: "Update to a specific version"
|
|
75884
76629
|
},
|
|
75885
76630
|
{
|
|
75886
|
-
flags: "
|
|
75887
|
-
description: "
|
|
76631
|
+
flags: "--check",
|
|
76632
|
+
description: "Check for updates without installing"
|
|
75888
76633
|
},
|
|
75889
76634
|
{
|
|
75890
76635
|
flags: "-y, --yes",
|
|
75891
|
-
description: "Skip confirmation prompts
|
|
76636
|
+
description: "Skip all confirmation prompts (CLI and kit content update)"
|
|
75892
76637
|
},
|
|
75893
76638
|
{
|
|
75894
|
-
flags: "-
|
|
75895
|
-
description: "
|
|
76639
|
+
flags: "-d, --dev",
|
|
76640
|
+
description: "Update to the latest dev version"
|
|
75896
76641
|
},
|
|
75897
76642
|
{
|
|
75898
|
-
flags: "--
|
|
75899
|
-
description: "
|
|
76643
|
+
flags: "--registry <url>",
|
|
76644
|
+
description: "Custom npm registry URL"
|
|
75900
76645
|
}
|
|
75901
76646
|
]
|
|
75902
76647
|
},
|
|
75903
76648
|
{
|
|
75904
|
-
title: "
|
|
76649
|
+
title: "Deprecated Options",
|
|
75905
76650
|
options: [
|
|
75906
76651
|
{
|
|
75907
|
-
flags: "--
|
|
75908
|
-
description: "
|
|
75909
|
-
|
|
75910
|
-
|
|
75911
|
-
|
|
75912
|
-
|
|
76652
|
+
flags: "--beta",
|
|
76653
|
+
description: "(deprecated) Alias for --dev; use -d, --dev instead",
|
|
76654
|
+
deprecated: {
|
|
76655
|
+
message: "Use '-d, --dev' to update to the latest dev version",
|
|
76656
|
+
alternative: "-d, --dev"
|
|
76657
|
+
}
|
|
75913
76658
|
},
|
|
75914
76659
|
{
|
|
75915
|
-
flags: "--
|
|
75916
|
-
description: "
|
|
76660
|
+
flags: "--kit <kit>",
|
|
76661
|
+
description: "This option is no longer supported with 'ck update'",
|
|
76662
|
+
deprecated: {
|
|
76663
|
+
message: "Use 'ck init --kit <kit>' to update kit installations",
|
|
76664
|
+
alternative: "ck init --kit <kit>"
|
|
76665
|
+
}
|
|
75917
76666
|
},
|
|
75918
76667
|
{
|
|
75919
|
-
flags: "--
|
|
75920
|
-
description: "
|
|
75921
|
-
|
|
76668
|
+
flags: "-g, --global",
|
|
76669
|
+
description: "This option is no longer supported with 'ck update'",
|
|
76670
|
+
deprecated: {
|
|
76671
|
+
message: "Use 'ck init --global' to update global kit",
|
|
76672
|
+
alternative: "ck init --global"
|
|
76673
|
+
}
|
|
76674
|
+
}
|
|
76675
|
+
]
|
|
76676
|
+
}
|
|
76677
|
+
],
|
|
76678
|
+
sections: [
|
|
76679
|
+
{
|
|
76680
|
+
title: "Note",
|
|
76681
|
+
content: "'ck update' updates the CLI tool only and defaults to the latest stable release. Use '--beta' to opt into prerelease CLI builds. To update kit content (skills, commands, rules), use 'ck init' for local or 'ck init -g' for global. Use --yes to skip all prompts (both CLI and kit content update) for non-interactive/CI usage."
|
|
76682
|
+
}
|
|
76683
|
+
]
|
|
76684
|
+
};
|
|
76685
|
+
});
|
|
76686
|
+
|
|
76687
|
+
// src/domains/help/commands/versions-command-help.ts
|
|
76688
|
+
var versionsCommandHelp;
|
|
76689
|
+
var init_versions_command_help = __esm(() => {
|
|
76690
|
+
versionsCommandHelp = {
|
|
76691
|
+
name: "versions",
|
|
76692
|
+
description: "List available versions of ClaudeKit repositories",
|
|
76693
|
+
usage: "ck versions [options]",
|
|
76694
|
+
examples: [
|
|
76695
|
+
{
|
|
76696
|
+
command: "ck versions --kit engineer --limit 10",
|
|
76697
|
+
description: "Show latest 10 versions of engineer kit"
|
|
76698
|
+
},
|
|
76699
|
+
{
|
|
76700
|
+
command: "ck versions --all",
|
|
76701
|
+
description: "Show all releases including prereleases"
|
|
76702
|
+
}
|
|
76703
|
+
],
|
|
76704
|
+
optionGroups: [
|
|
76705
|
+
{
|
|
76706
|
+
title: "Filter Options",
|
|
76707
|
+
options: [
|
|
75922
76708
|
{
|
|
75923
|
-
flags: "--
|
|
75924
|
-
description: "
|
|
76709
|
+
flags: "--kit <kit>",
|
|
76710
|
+
description: "Filter by specific kit (engineer, marketing)"
|
|
75925
76711
|
},
|
|
75926
76712
|
{
|
|
75927
|
-
flags: "--
|
|
75928
|
-
description: "
|
|
76713
|
+
flags: "--limit <number>",
|
|
76714
|
+
description: "Number of releases to show",
|
|
76715
|
+
defaultValue: "30"
|
|
75929
76716
|
},
|
|
75930
76717
|
{
|
|
75931
|
-
flags: "--
|
|
75932
|
-
description: "
|
|
76718
|
+
flags: "--all",
|
|
76719
|
+
description: "Show all releases including prereleases"
|
|
75933
76720
|
}
|
|
75934
76721
|
]
|
|
75935
76722
|
}
|
|
@@ -75970,6 +76757,10 @@ var init_watch_command_help = __esm(() => {
|
|
|
75970
76757
|
{
|
|
75971
76758
|
flags: "--force",
|
|
75972
76759
|
description: "Kill existing watch process and start fresh"
|
|
76760
|
+
},
|
|
76761
|
+
{
|
|
76762
|
+
flags: "--verbose",
|
|
76763
|
+
description: "Enable verbose logging"
|
|
75973
76764
|
}
|
|
75974
76765
|
]
|
|
75975
76766
|
}
|
|
@@ -75979,22 +76770,24 @@ var init_watch_command_help = __esm(() => {
|
|
|
75979
76770
|
|
|
75980
76771
|
// src/domains/help/commands/index.ts
|
|
75981
76772
|
var init_commands2 = __esm(() => {
|
|
75982
|
-
|
|
75983
|
-
|
|
76773
|
+
init_agents_command_help();
|
|
76774
|
+
init_api_command_help();
|
|
75984
76775
|
init_app_command_help();
|
|
75985
|
-
|
|
76776
|
+
init_backups_command_help();
|
|
76777
|
+
init_commands_command_help();
|
|
76778
|
+
init_config_command_help();
|
|
76779
|
+
init_content_command_help();
|
|
75986
76780
|
init_doctor_command_help();
|
|
76781
|
+
init_init_command_help();
|
|
76782
|
+
init_migrate_command_help();
|
|
76783
|
+
init_new_command_help();
|
|
76784
|
+
init_plan_command_help();
|
|
76785
|
+
init_projects_command_help();
|
|
76786
|
+
init_setup_command_help();
|
|
76787
|
+
init_skills_command_help();
|
|
75987
76788
|
init_uninstall_command_help();
|
|
75988
76789
|
init_update_command_help();
|
|
75989
76790
|
init_versions_command_help();
|
|
75990
|
-
init_skills_command_help();
|
|
75991
|
-
init_config_command_help();
|
|
75992
|
-
init_projects_command_help();
|
|
75993
|
-
init_setup_command_help();
|
|
75994
|
-
init_agents_command_help();
|
|
75995
|
-
init_commands_command_help();
|
|
75996
|
-
init_content_command_help();
|
|
75997
|
-
init_migrate_command_help();
|
|
75998
76791
|
init_watch_command_help();
|
|
75999
76792
|
init_common_options();
|
|
76000
76793
|
});
|
|
@@ -76008,22 +76801,24 @@ var init_help_commands = __esm(() => {
|
|
|
76008
76801
|
init_commands2();
|
|
76009
76802
|
init_commands2();
|
|
76010
76803
|
HELP_REGISTRY = {
|
|
76011
|
-
|
|
76804
|
+
agents: agentsCommandHelp,
|
|
76805
|
+
api: apiCommandHelp,
|
|
76012
76806
|
app: appCommandHelp,
|
|
76013
76807
|
backups: backupsCommandHelp,
|
|
76014
|
-
|
|
76808
|
+
commands: commandsCommandHelp,
|
|
76015
76809
|
config: configCommandHelp,
|
|
76016
76810
|
content: contentCommandHelp,
|
|
76811
|
+
doctor: doctorCommandHelp,
|
|
76812
|
+
init: initCommandHelp,
|
|
76813
|
+
migrate: migrateCommandHelp,
|
|
76814
|
+
new: newCommandHelp,
|
|
76815
|
+
plan: planCommandHelp,
|
|
76017
76816
|
projects: projectsCommandHelp,
|
|
76018
76817
|
setup: setupCommandHelp,
|
|
76818
|
+
skills: skillsCommandHelp,
|
|
76819
|
+
uninstall: uninstallCommandHelp,
|
|
76019
76820
|
update: updateCommandHelp,
|
|
76020
76821
|
versions: versionsCommandHelp,
|
|
76021
|
-
doctor: doctorCommandHelp,
|
|
76022
|
-
uninstall: uninstallCommandHelp,
|
|
76023
|
-
skills: skillsCommandHelp,
|
|
76024
|
-
agents: agentsCommandHelp,
|
|
76025
|
-
commands: commandsCommandHelp,
|
|
76026
|
-
migrate: migrateCommandHelp,
|
|
76027
76822
|
watch: watchCommandHelp
|
|
76028
76823
|
};
|
|
76029
76824
|
});
|
|
@@ -76221,10 +77016,23 @@ function renderCommandHeader(help, theme) {
|
|
|
76221
77016
|
}
|
|
76222
77017
|
return parts.join(" ");
|
|
76223
77018
|
}
|
|
76224
|
-
function renderUsage(help, theme) {
|
|
77019
|
+
function renderUsage(help, theme, _parentName) {
|
|
76225
77020
|
return [theme.heading("Usage:"), ` ${theme.example(help.usage)}`, ""].join(`
|
|
76226
77021
|
`);
|
|
76227
77022
|
}
|
|
77023
|
+
function renderSubcommandList(subcommands, theme) {
|
|
77024
|
+
if (subcommands.length === 0)
|
|
77025
|
+
return "";
|
|
77026
|
+
const maxNameWidth = Math.max(...subcommands.map((s) => s.name.length));
|
|
77027
|
+
const lines = [theme.heading("Subcommands:")];
|
|
77028
|
+
for (const sub of subcommands) {
|
|
77029
|
+
const namePart = ` ${padEnd(theme.command(sub.name), maxNameWidth + 4)}`;
|
|
77030
|
+
lines.push(`${namePart}${theme.description(sub.description)}`);
|
|
77031
|
+
}
|
|
77032
|
+
lines.push("");
|
|
77033
|
+
return lines.join(`
|
|
77034
|
+
`);
|
|
77035
|
+
}
|
|
76228
77036
|
function renderExamples(help, options2) {
|
|
76229
77037
|
if (!options2.showExamples || help.examples.length === 0)
|
|
76230
77038
|
return "";
|
|
@@ -76299,13 +77107,15 @@ function renderDeprecationWarning(help, theme) {
|
|
|
76299
77107
|
function renderHelp(help, context = { globalHelp: false, options: DEFAULT_HELP_OPTIONS }) {
|
|
76300
77108
|
const options2 = { ...DEFAULT_HELP_OPTIONS, ...context.options };
|
|
76301
77109
|
const theme = options2.theme;
|
|
77110
|
+
const { parentName } = context;
|
|
76302
77111
|
const sections = [
|
|
76303
77112
|
renderBanner(options2),
|
|
76304
77113
|
renderDeprecationWarning(help, theme),
|
|
76305
77114
|
renderCommandHeader(help, theme),
|
|
76306
77115
|
"",
|
|
76307
|
-
renderUsage(help, theme),
|
|
77116
|
+
renderUsage(help, theme, parentName),
|
|
76308
77117
|
renderExamples(help, options2),
|
|
77118
|
+
help.subcommands?.length ? renderSubcommandList(help.subcommands, theme) : "",
|
|
76309
77119
|
renderOptionGroups(help, theme),
|
|
76310
77120
|
renderSections(help, theme)
|
|
76311
77121
|
];
|
|
@@ -76370,7 +77180,8 @@ var init_help_renderer = __esm(() => {
|
|
|
76370
77180
|
var exports_help_interceptor = {};
|
|
76371
77181
|
__export(exports_help_interceptor, {
|
|
76372
77182
|
isHelpRequested: () => isHelpRequested,
|
|
76373
|
-
handleHelp: () => handleHelp
|
|
77183
|
+
handleHelp: () => handleHelp,
|
|
77184
|
+
getCommandChainFromArgv: () => getCommandChainFromArgv
|
|
76374
77185
|
});
|
|
76375
77186
|
function getHelpOptions() {
|
|
76376
77187
|
const isTTY2 = process.stdout.isTTY ?? false;
|
|
@@ -76386,30 +77197,45 @@ function getHelpOptions() {
|
|
|
76386
77197
|
noColor
|
|
76387
77198
|
};
|
|
76388
77199
|
}
|
|
76389
|
-
function
|
|
77200
|
+
function getCommandChainFromArgv() {
|
|
76390
77201
|
const argv = process.argv.slice(2);
|
|
76391
|
-
|
|
76392
|
-
|
|
76393
|
-
|
|
76394
|
-
|
|
76395
|
-
if (hasCommand(arg)) {
|
|
76396
|
-
return arg;
|
|
76397
|
-
}
|
|
76398
|
-
return null;
|
|
77202
|
+
const tokens = argv.filter((arg) => !arg.startsWith("-"));
|
|
77203
|
+
const [first, second] = tokens;
|
|
77204
|
+
if (!first || !hasCommand(first)) {
|
|
77205
|
+
return [];
|
|
76399
77206
|
}
|
|
76400
|
-
|
|
77207
|
+
const chain = [first];
|
|
77208
|
+
if (second) {
|
|
77209
|
+
chain.push(second);
|
|
77210
|
+
}
|
|
77211
|
+
return chain;
|
|
76401
77212
|
}
|
|
76402
77213
|
async function handleHelp(_args) {
|
|
76403
77214
|
try {
|
|
76404
77215
|
const options2 = getHelpOptions();
|
|
76405
|
-
const
|
|
77216
|
+
const chain = getCommandChainFromArgv();
|
|
76406
77217
|
let output3;
|
|
76407
|
-
if (
|
|
77218
|
+
if (chain.length === 0) {
|
|
76408
77219
|
output3 = renderGlobalHelp(HELP_REGISTRY, options2);
|
|
76409
77220
|
} else {
|
|
76410
|
-
const
|
|
76411
|
-
|
|
76412
|
-
|
|
77221
|
+
const [parentCmd, subCmd] = chain;
|
|
77222
|
+
const parentHelp = HELP_REGISTRY[parentCmd];
|
|
77223
|
+
if (subCmd && parentHelp.subcommands) {
|
|
77224
|
+
const subHelp = parentHelp.subcommands.find((s) => s.name === subCmd);
|
|
77225
|
+
if (subHelp) {
|
|
77226
|
+
output3 = renderHelp(subHelp, {
|
|
77227
|
+
command: subCmd,
|
|
77228
|
+
globalHelp: false,
|
|
77229
|
+
options: options2,
|
|
77230
|
+
parentName: parentCmd
|
|
77231
|
+
});
|
|
77232
|
+
await displayHelp(output3, options2);
|
|
77233
|
+
process.exitCode = 0;
|
|
77234
|
+
return;
|
|
77235
|
+
}
|
|
77236
|
+
}
|
|
77237
|
+
output3 = renderHelp(parentHelp, {
|
|
77238
|
+
command: parentCmd,
|
|
76413
77239
|
globalHelp: false,
|
|
76414
77240
|
options: options2
|
|
76415
77241
|
});
|
|
@@ -104146,9 +104972,9 @@ async function initCommand(options2) {
|
|
|
104146
104972
|
init_dist2();
|
|
104147
104973
|
var import_picocolors30 = __toESM(require_picocolors(), 1);
|
|
104148
104974
|
import { existsSync as existsSync62 } from "node:fs";
|
|
104149
|
-
import { readFile as
|
|
104150
|
-
import { homedir as
|
|
104151
|
-
import { basename as basename26, join as
|
|
104975
|
+
import { readFile as readFile60, rm as rm15, unlink as unlink12 } from "node:fs/promises";
|
|
104976
|
+
import { homedir as homedir47 } from "node:os";
|
|
104977
|
+
import { basename as basename26, join as join140, resolve as resolve36 } from "node:path";
|
|
104152
104978
|
init_logger();
|
|
104153
104979
|
|
|
104154
104980
|
// src/ui/ck-cli-design/tokens.ts
|
|
@@ -104616,9 +105442,128 @@ init_converters();
|
|
|
104616
105442
|
init_hooks_settings_merger();
|
|
104617
105443
|
init_model_taxonomy();
|
|
104618
105444
|
|
|
105445
|
+
// src/commands/portable/opencode-config-installer.ts
|
|
105446
|
+
init_logger();
|
|
105447
|
+
init_dist2();
|
|
105448
|
+
init_model_taxonomy();
|
|
105449
|
+
import { mkdir as mkdir33, readFile as readFile59, writeFile as writeFile33 } from "node:fs/promises";
|
|
105450
|
+
import { homedir as homedir46 } from "node:os";
|
|
105451
|
+
import { dirname as dirname38, join as join139 } from "node:path";
|
|
105452
|
+
function getOpenCodeConfigPath(options2) {
|
|
105453
|
+
if (options2.global) {
|
|
105454
|
+
return join139(options2.homeDir ?? homedir46(), ".config", "opencode", "opencode.json");
|
|
105455
|
+
}
|
|
105456
|
+
return join139(options2.cwd ?? process.cwd(), "opencode.json");
|
|
105457
|
+
}
|
|
105458
|
+
async function detectAuthenticatedProviders(homeDir) {
|
|
105459
|
+
const authPath = join139(homeDir ?? homedir46(), ".local", "share", "opencode", "auth.json");
|
|
105460
|
+
try {
|
|
105461
|
+
const raw2 = await readFile59(authPath, "utf-8");
|
|
105462
|
+
const parsed = JSON.parse(raw2);
|
|
105463
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
105464
|
+
return Object.keys(parsed);
|
|
105465
|
+
}
|
|
105466
|
+
} catch {}
|
|
105467
|
+
return [];
|
|
105468
|
+
}
|
|
105469
|
+
async function suggestOpenCodeDefaultModel(homeDir) {
|
|
105470
|
+
const override = getOpenCodeDefaultModelOverride();
|
|
105471
|
+
if (override) {
|
|
105472
|
+
return { model: override, reason: ".ck.json override" };
|
|
105473
|
+
}
|
|
105474
|
+
return { model: OPENCODE_DEFAULT_MODEL, reason: "fallback default" };
|
|
105475
|
+
}
|
|
105476
|
+
var clackPrompter = async ({ suggestion, reason, detectedProviders }) => {
|
|
105477
|
+
const providersHint = detectedProviders.length > 0 ? `Authenticated providers in opencode: ${detectedProviders.join(", ")}` : "No authenticated providers detected in opencode.";
|
|
105478
|
+
const response = await ie({
|
|
105479
|
+
message: `No default model in opencode.json. ${providersHint}`,
|
|
105480
|
+
options: [
|
|
105481
|
+
{
|
|
105482
|
+
value: "accept",
|
|
105483
|
+
label: `Write "${suggestion}"`,
|
|
105484
|
+
hint: reason
|
|
105485
|
+
},
|
|
105486
|
+
{ value: "custom", label: "Enter a different model..." },
|
|
105487
|
+
{ value: "skip", label: "Skip — I'll configure opencode.json myself" }
|
|
105488
|
+
],
|
|
105489
|
+
initialValue: "accept"
|
|
105490
|
+
});
|
|
105491
|
+
if (lD(response) || response === "skip")
|
|
105492
|
+
return { action: "skip" };
|
|
105493
|
+
if (response === "accept")
|
|
105494
|
+
return { action: "accept" };
|
|
105495
|
+
const custom2 = await te({
|
|
105496
|
+
message: "Model (format: provider/model-id, e.g. openai/gpt-5)",
|
|
105497
|
+
placeholder: suggestion,
|
|
105498
|
+
validate: (value) => {
|
|
105499
|
+
if (!value || !value.includes("/"))
|
|
105500
|
+
return "Must be in 'provider/model-id' format";
|
|
105501
|
+
return;
|
|
105502
|
+
}
|
|
105503
|
+
});
|
|
105504
|
+
if (lD(custom2))
|
|
105505
|
+
return { action: "skip" };
|
|
105506
|
+
return { action: "custom", value: custom2 };
|
|
105507
|
+
};
|
|
105508
|
+
async function ensureOpenCodeModel(options2) {
|
|
105509
|
+
const configPath = getOpenCodeConfigPath(options2);
|
|
105510
|
+
let existing = null;
|
|
105511
|
+
try {
|
|
105512
|
+
const raw2 = await readFile59(configPath, "utf-8");
|
|
105513
|
+
const parsed = JSON.parse(raw2);
|
|
105514
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
105515
|
+
existing = parsed;
|
|
105516
|
+
} else {
|
|
105517
|
+
logger.warning(`ensureOpenCodeModel: ${configPath} is valid JSON but not an object; overwriting with default model`);
|
|
105518
|
+
}
|
|
105519
|
+
} catch (err) {
|
|
105520
|
+
const errno = err?.code;
|
|
105521
|
+
if (errno === "ENOENT") {} else if (err instanceof SyntaxError) {
|
|
105522
|
+
logger.warning(`ensureOpenCodeModel: ${configPath} is not valid JSON; overwriting with default model (existing contents will be lost)`);
|
|
105523
|
+
} else {
|
|
105524
|
+
logger.verbose(`ensureOpenCodeModel: failed to read ${configPath} (${errno ?? String(err)}); recreating`);
|
|
105525
|
+
}
|
|
105526
|
+
}
|
|
105527
|
+
if (existing && typeof existing.model === "string" && existing.model.trim().length > 0) {
|
|
105528
|
+
return { path: configPath, action: "existing", model: existing.model };
|
|
105529
|
+
}
|
|
105530
|
+
const suggestion = await suggestOpenCodeDefaultModel(options2.homeDir);
|
|
105531
|
+
let chosenModel = suggestion.model;
|
|
105532
|
+
if (options2.interactive) {
|
|
105533
|
+
const detectedProviders = await detectAuthenticatedProviders(options2.homeDir);
|
|
105534
|
+
const prompter = options2.prompter ?? clackPrompter;
|
|
105535
|
+
const response = await prompter({
|
|
105536
|
+
suggestion: suggestion.model,
|
|
105537
|
+
reason: suggestion.reason,
|
|
105538
|
+
detectedProviders
|
|
105539
|
+
});
|
|
105540
|
+
if (response.action === "skip") {
|
|
105541
|
+
return {
|
|
105542
|
+
path: configPath,
|
|
105543
|
+
action: "skipped",
|
|
105544
|
+
model: "",
|
|
105545
|
+
reason: "user declined"
|
|
105546
|
+
};
|
|
105547
|
+
}
|
|
105548
|
+
if (response.action === "custom") {
|
|
105549
|
+
chosenModel = response.value;
|
|
105550
|
+
}
|
|
105551
|
+
}
|
|
105552
|
+
const next = { ...existing ?? {}, model: chosenModel };
|
|
105553
|
+
await mkdir33(dirname38(configPath), { recursive: true });
|
|
105554
|
+
await writeFile33(configPath, `${JSON.stringify(next, null, 2)}
|
|
105555
|
+
`, "utf-8");
|
|
105556
|
+
return {
|
|
105557
|
+
path: configPath,
|
|
105558
|
+
action: existing ? "added" : "created",
|
|
105559
|
+
model: chosenModel,
|
|
105560
|
+
reason: suggestion.reason
|
|
105561
|
+
};
|
|
105562
|
+
}
|
|
105563
|
+
|
|
104619
105564
|
// src/commands/portable/plan-display.ts
|
|
104620
105565
|
var import_picocolors28 = __toESM(require_picocolors(), 1);
|
|
104621
|
-
import { basename as basename25, dirname as
|
|
105566
|
+
import { basename as basename25, dirname as dirname39, extname as extname7 } from "node:path";
|
|
104622
105567
|
var DEFAULT_MAX_PLAN_GROUP_ITEMS = 20;
|
|
104623
105568
|
var TYPE_ORDER = [
|
|
104624
105569
|
"agent",
|
|
@@ -104844,21 +105789,21 @@ function collectPlannedWhereLines(plan) {
|
|
|
104844
105789
|
return destinations.map((destination) => `${formatDisplayPath(destination)} -> ${formatCdHint(resolveCdTarget(destination))}`);
|
|
104845
105790
|
}
|
|
104846
105791
|
function resolveCdTarget(destination) {
|
|
104847
|
-
return extname7(destination).length > 0 ?
|
|
105792
|
+
return extname7(destination).length > 0 ? dirname39(destination) : destination;
|
|
104848
105793
|
}
|
|
104849
105794
|
function normalizeWhereDestination(path16, portableType) {
|
|
104850
105795
|
if (portableType === "agent" || portableType === "command" || portableType === "skill") {
|
|
104851
|
-
return
|
|
105796
|
+
return dirname39(path16);
|
|
104852
105797
|
}
|
|
104853
105798
|
if (portableType === "hooks") {
|
|
104854
|
-
return
|
|
105799
|
+
return dirname39(path16);
|
|
104855
105800
|
}
|
|
104856
105801
|
if (portableType === "rules") {
|
|
104857
105802
|
const fileName = basename25(path16).toLowerCase();
|
|
104858
105803
|
if (fileName === "agents.md" || fileName === "gemini.md" || fileName === ".goosehints" || fileName === "custom_modes.yaml" || fileName === "custom_modes.yml") {
|
|
104859
105804
|
return path16;
|
|
104860
105805
|
}
|
|
104861
|
-
return
|
|
105806
|
+
return dirname39(path16);
|
|
104862
105807
|
}
|
|
104863
105808
|
return path16;
|
|
104864
105809
|
}
|
|
@@ -105197,12 +106142,12 @@ async function executeDeleteAction(action, options2) {
|
|
|
105197
106142
|
async function processMetadataDeletions(skillSourcePath, installGlobally) {
|
|
105198
106143
|
if (!skillSourcePath)
|
|
105199
106144
|
return;
|
|
105200
|
-
const sourceMetadataPath =
|
|
106145
|
+
const sourceMetadataPath = join140(resolve36(skillSourcePath, ".."), "metadata.json");
|
|
105201
106146
|
if (!existsSync62(sourceMetadataPath))
|
|
105202
106147
|
return;
|
|
105203
106148
|
let sourceMetadata;
|
|
105204
106149
|
try {
|
|
105205
|
-
const content = await
|
|
106150
|
+
const content = await readFile60(sourceMetadataPath, "utf-8");
|
|
105206
106151
|
sourceMetadata = JSON.parse(content);
|
|
105207
106152
|
} catch (error) {
|
|
105208
106153
|
logger.debug(`[migrate] Failed to parse source metadata.json: ${error}`);
|
|
@@ -105210,7 +106155,7 @@ async function processMetadataDeletions(skillSourcePath, installGlobally) {
|
|
|
105210
106155
|
}
|
|
105211
106156
|
if (!sourceMetadata.deletions || sourceMetadata.deletions.length === 0)
|
|
105212
106157
|
return;
|
|
105213
|
-
const claudeDir3 = installGlobally ?
|
|
106158
|
+
const claudeDir3 = installGlobally ? join140(homedir47(), ".claude") : join140(process.cwd(), ".claude");
|
|
105214
106159
|
if (!existsSync62(claudeDir3))
|
|
105215
106160
|
return;
|
|
105216
106161
|
try {
|
|
@@ -105327,8 +106272,8 @@ async function migrateCommand(options2) {
|
|
|
105327
106272
|
let requestedGlobal = options2.global ?? false;
|
|
105328
106273
|
let installGlobally = requestedGlobal;
|
|
105329
106274
|
if (options2.global === undefined && !options2.yes) {
|
|
105330
|
-
const projectTarget =
|
|
105331
|
-
const globalTarget =
|
|
106275
|
+
const projectTarget = join140(process.cwd(), ".claude");
|
|
106276
|
+
const globalTarget = join140(homedir47(), ".claude");
|
|
105332
106277
|
const scopeChoice = await ie({
|
|
105333
106278
|
message: "Installation scope",
|
|
105334
106279
|
options: [
|
|
@@ -105457,7 +106402,7 @@ async function migrateCommand(options2) {
|
|
|
105457
106402
|
for (const action of conflictActions) {
|
|
105458
106403
|
if (!action.diff && action.targetPath && existsSync62(action.targetPath)) {
|
|
105459
106404
|
try {
|
|
105460
|
-
const targetContent = await
|
|
106405
|
+
const targetContent = await readFile60(action.targetPath, "utf-8");
|
|
105461
106406
|
const sourceItem = agents2.find((a3) => a3.name === action.item) || commands.find((c2) => c2.name === action.item) || (configItem?.name === action.item ? configItem : null) || ruleItems.find((r2) => r2.name === action.item) || hookItems.find((h2) => h2.name === action.item);
|
|
105462
106407
|
if (sourceItem) {
|
|
105463
106408
|
const providerConfig = providers[action.provider];
|
|
@@ -105577,6 +106522,22 @@ async function migrateCommand(options2) {
|
|
|
105577
106522
|
}
|
|
105578
106523
|
progressSink.tick(progressLabelForType(task.type));
|
|
105579
106524
|
}
|
|
106525
|
+
if (selectedProviders.includes("opencode")) {
|
|
106526
|
+
try {
|
|
106527
|
+
const result = await ensureOpenCodeModel({
|
|
106528
|
+
global: installGlobally,
|
|
106529
|
+
interactive: process.stdout.isTTY === true && !options2.yes
|
|
106530
|
+
});
|
|
106531
|
+
if (result.action === "created" || result.action === "added") {
|
|
106532
|
+
const reason = result.reason ? ` (${result.reason})` : "";
|
|
106533
|
+
f2.info(`Set default model "${result.model}" in ${result.path}${reason}`);
|
|
106534
|
+
} else if (result.action === "skipped") {
|
|
106535
|
+
f2.warn("Skipped writing default model to opencode.json. Migrated agents may fail with ProviderModelNotFoundError until you set one.");
|
|
106536
|
+
}
|
|
106537
|
+
} catch (err) {
|
|
106538
|
+
postProgressWarnings.push(`Could not update opencode.json model (${err instanceof Error ? err.message : String(err)}). Agents may fail with ProviderModelNotFoundError until a model is set.`);
|
|
106539
|
+
}
|
|
106540
|
+
}
|
|
105580
106541
|
for (const [hooksProvider, files] of successfulHookFiles) {
|
|
105581
106542
|
if (files.length === 0)
|
|
105582
106543
|
continue;
|
|
@@ -105805,7 +106766,7 @@ function buildDryRunFallbackResults(skills, selectedProviders, installGlobally,
|
|
|
105805
106766
|
results.push({
|
|
105806
106767
|
itemName: skill.name,
|
|
105807
106768
|
operation: "apply",
|
|
105808
|
-
path:
|
|
106769
|
+
path: join140(basePath, skill.name),
|
|
105809
106770
|
portableType: "skill",
|
|
105810
106771
|
provider,
|
|
105811
106772
|
providerDisplayName: providers[provider].displayName,
|
|
@@ -105965,7 +106926,7 @@ async function handleDirectorySetup(ctx) {
|
|
|
105965
106926
|
// src/commands/new/phases/project-creation.ts
|
|
105966
106927
|
init_config_manager();
|
|
105967
106928
|
init_github_client();
|
|
105968
|
-
import { join as
|
|
106929
|
+
import { join as join141 } from "node:path";
|
|
105969
106930
|
init_logger();
|
|
105970
106931
|
init_output_manager();
|
|
105971
106932
|
init_types3();
|
|
@@ -106091,7 +107052,7 @@ async function projectCreation(kit, resolvedDir, validOptions, isNonInteractive2
|
|
|
106091
107052
|
output.section("Installing");
|
|
106092
107053
|
logger.verbose("Installation target", { directory: resolvedDir });
|
|
106093
107054
|
const merger = new FileMerger;
|
|
106094
|
-
const claudeDir3 =
|
|
107055
|
+
const claudeDir3 = join141(resolvedDir, ".claude");
|
|
106095
107056
|
merger.setMultiKitContext(claudeDir3, kit);
|
|
106096
107057
|
if (validOptions.exclude && validOptions.exclude.length > 0) {
|
|
106097
107058
|
merger.addIgnorePatterns(validOptions.exclude);
|
|
@@ -106138,7 +107099,7 @@ async function handleProjectCreation(ctx) {
|
|
|
106138
107099
|
}
|
|
106139
107100
|
// src/commands/new/phases/post-setup.ts
|
|
106140
107101
|
init_projects_registry();
|
|
106141
|
-
import { join as
|
|
107102
|
+
import { join as join142 } from "node:path";
|
|
106142
107103
|
init_package_installer();
|
|
106143
107104
|
init_logger();
|
|
106144
107105
|
init_path_resolver();
|
|
@@ -106170,9 +107131,9 @@ async function postSetup(resolvedDir, validOptions, isNonInteractive2, prompts)
|
|
|
106170
107131
|
withSudo: validOptions.withSudo
|
|
106171
107132
|
});
|
|
106172
107133
|
}
|
|
106173
|
-
const claudeDir3 =
|
|
107134
|
+
const claudeDir3 = join142(resolvedDir, ".claude");
|
|
106174
107135
|
await promptSetupWizardIfNeeded({
|
|
106175
|
-
envPath:
|
|
107136
|
+
envPath: join142(claudeDir3, ".env"),
|
|
106176
107137
|
claudeDir: claudeDir3,
|
|
106177
107138
|
isGlobal: false,
|
|
106178
107139
|
isNonInteractive: isNonInteractive2,
|
|
@@ -106242,7 +107203,7 @@ Please use only one download method.`);
|
|
|
106242
107203
|
// src/commands/plan/plan-command.ts
|
|
106243
107204
|
init_output_manager();
|
|
106244
107205
|
import { existsSync as existsSync65, statSync as statSync11 } from "node:fs";
|
|
106245
|
-
import { dirname as
|
|
107206
|
+
import { dirname as dirname43, isAbsolute as isAbsolute11, join as join145, parse as parse7, resolve as resolve41 } from "node:path";
|
|
106246
107207
|
|
|
106247
107208
|
// src/commands/plan/plan-read-handlers.ts
|
|
106248
107209
|
init_config();
|
|
@@ -106252,18 +107213,18 @@ init_logger();
|
|
|
106252
107213
|
init_output_manager();
|
|
106253
107214
|
var import_picocolors32 = __toESM(require_picocolors(), 1);
|
|
106254
107215
|
import { existsSync as existsSync64, statSync as statSync10 } from "node:fs";
|
|
106255
|
-
import { basename as basename27, dirname as
|
|
107216
|
+
import { basename as basename27, dirname as dirname41, join as join144, relative as relative27, resolve as resolve39 } from "node:path";
|
|
106256
107217
|
|
|
106257
107218
|
// src/commands/plan/plan-dependencies.ts
|
|
106258
107219
|
init_config();
|
|
106259
107220
|
init_plan_parser();
|
|
106260
107221
|
init_plans_registry();
|
|
106261
107222
|
import { existsSync as existsSync63 } from "node:fs";
|
|
106262
|
-
import { dirname as
|
|
107223
|
+
import { dirname as dirname40, join as join143 } from "node:path";
|
|
106263
107224
|
async function resolvePlanDependencies(references, currentPlanFile, options2 = {}) {
|
|
106264
107225
|
if (references.length === 0)
|
|
106265
107226
|
return [];
|
|
106266
|
-
const currentPlanDir =
|
|
107227
|
+
const currentPlanDir = dirname40(currentPlanFile);
|
|
106267
107228
|
const projectRoot = findProjectRoot(currentPlanDir);
|
|
106268
107229
|
const config = options2.preloadedConfig ?? (await CkConfigManager.loadFull(projectRoot)).config;
|
|
106269
107230
|
const defaultScope = inferPlanScopeForDir(currentPlanDir, config);
|
|
@@ -106279,7 +107240,7 @@ async function resolvePlanDependencies(references, currentPlanFile, options2 = {
|
|
|
106279
107240
|
};
|
|
106280
107241
|
}
|
|
106281
107242
|
const scopeRoot = resolvePlanDirForScope(scope, projectRoot, config);
|
|
106282
|
-
const planFile =
|
|
107243
|
+
const planFile = join143(scopeRoot, planId, "plan.md");
|
|
106283
107244
|
const isSelfReference = planFile === currentPlanFile;
|
|
106284
107245
|
if (!existsSync63(planFile)) {
|
|
106285
107246
|
return {
|
|
@@ -106350,7 +107311,7 @@ async function handleParse(target, options2) {
|
|
|
106350
107311
|
console.log(JSON.stringify({ file: relative27(process.cwd(), planFile), frontmatter, phases }, null, 2));
|
|
106351
107312
|
return;
|
|
106352
107313
|
}
|
|
106353
|
-
const title = typeof frontmatter.title === "string" ? frontmatter.title : basename27(
|
|
107314
|
+
const title = typeof frontmatter.title === "string" ? frontmatter.title : basename27(dirname41(planFile));
|
|
106354
107315
|
console.log();
|
|
106355
107316
|
console.log(import_picocolors32.default.bold(` Plan: ${title}`));
|
|
106356
107317
|
console.log(` File: ${planFile}`);
|
|
@@ -106421,7 +107382,7 @@ async function handleStatus(target, options2) {
|
|
|
106421
107382
|
}
|
|
106422
107383
|
const effectiveTarget = !resolvedTarget && globalBaseDir ? globalBaseDir : resolvedTarget;
|
|
106423
107384
|
const t = effectiveTarget ? resolve39(effectiveTarget) : null;
|
|
106424
|
-
const plansDir = t && existsSync64(t) && statSync10(t).isDirectory() && !existsSync64(
|
|
107385
|
+
const plansDir = t && existsSync64(t) && statSync10(t).isDirectory() && !existsSync64(join144(t, "plan.md")) ? t : null;
|
|
106425
107386
|
if (plansDir) {
|
|
106426
107387
|
const planFiles = scanPlanDir(plansDir);
|
|
106427
107388
|
if (planFiles.length === 0) {
|
|
@@ -106461,7 +107422,7 @@ async function handleStatus(target, options2) {
|
|
|
106461
107422
|
const blockedBy2 = await resolvePlanDependencies(s.blockedBy, pf, { preloadedConfig });
|
|
106462
107423
|
const blocks2 = await resolvePlanDependencies(s.blocks, pf, { preloadedConfig });
|
|
106463
107424
|
const bar = progressBar(s.completed, s.totalPhases);
|
|
106464
|
-
const title2 = s.title ?? basename27(
|
|
107425
|
+
const title2 = s.title ?? basename27(dirname41(pf));
|
|
106465
107426
|
console.log(` ${import_picocolors32.default.bold(title2)}`);
|
|
106466
107427
|
console.log(` ${bar}`);
|
|
106467
107428
|
if (s.inProgress > 0)
|
|
@@ -106480,7 +107441,7 @@ async function handleStatus(target, options2) {
|
|
|
106480
107441
|
}
|
|
106481
107442
|
console.log();
|
|
106482
107443
|
} catch {
|
|
106483
|
-
console.log(` [X] Failed to read: ${basename27(
|
|
107444
|
+
console.log(` [X] Failed to read: ${basename27(dirname41(pf))}`);
|
|
106484
107445
|
console.log();
|
|
106485
107446
|
}
|
|
106486
107447
|
}
|
|
@@ -106507,7 +107468,7 @@ async function handleStatus(target, options2) {
|
|
|
106507
107468
|
console.log(JSON.stringify({ ...summary, dependencyStatus: { blockedBy, blocks } }, null, 2));
|
|
106508
107469
|
return;
|
|
106509
107470
|
}
|
|
106510
|
-
const title = summary.title ?? basename27(
|
|
107471
|
+
const title = summary.title ?? basename27(dirname41(planFile));
|
|
106511
107472
|
console.log();
|
|
106512
107473
|
console.log(import_picocolors32.default.bold(` ${title}`));
|
|
106513
107474
|
if (summary.status)
|
|
@@ -106570,7 +107531,7 @@ async function handleKanban(target, options2) {
|
|
|
106570
107531
|
process.exitCode = 1;
|
|
106571
107532
|
return;
|
|
106572
107533
|
}
|
|
106573
|
-
const route = `/plans?dir=${encodeURIComponent(
|
|
107534
|
+
const route = `/plans?dir=${encodeURIComponent(dirname41(dirname41(planFile)))}&view=kanban`;
|
|
106574
107535
|
const url = `http://localhost:${server.port}${route}`;
|
|
106575
107536
|
console.log();
|
|
106576
107537
|
console.log(import_picocolors32.default.bold(" ClaudeKit Dashboard — Plans"));
|
|
@@ -106605,7 +107566,7 @@ init_plan_parser();
|
|
|
106605
107566
|
init_plans_registry();
|
|
106606
107567
|
init_output_manager();
|
|
106607
107568
|
var import_picocolors33 = __toESM(require_picocolors(), 1);
|
|
106608
|
-
import { basename as basename28, dirname as
|
|
107569
|
+
import { basename as basename28, dirname as dirname42, relative as relative28, resolve as resolve40 } from "node:path";
|
|
106609
107570
|
async function handleCreate(target, options2) {
|
|
106610
107571
|
if (!options2.title) {
|
|
106611
107572
|
output.error("[X] --title is required for create");
|
|
@@ -106705,7 +107666,7 @@ async function handleCheck(target, options2) {
|
|
|
106705
107666
|
process.exitCode = 1;
|
|
106706
107667
|
return;
|
|
106707
107668
|
}
|
|
106708
|
-
const planDir =
|
|
107669
|
+
const planDir = dirname42(planFile);
|
|
106709
107670
|
let planStatus = "pending";
|
|
106710
107671
|
try {
|
|
106711
107672
|
const projectRoot = findProjectRoot(planDir);
|
|
@@ -106754,7 +107715,7 @@ async function handleUncheck(target, options2) {
|
|
|
106754
107715
|
process.exitCode = 1;
|
|
106755
107716
|
return;
|
|
106756
107717
|
}
|
|
106757
|
-
const planDir =
|
|
107718
|
+
const planDir = dirname42(planFile);
|
|
106758
107719
|
try {
|
|
106759
107720
|
const projectRoot = findProjectRoot(planDir);
|
|
106760
107721
|
const summary = buildPlanSummary(planFile);
|
|
@@ -106793,7 +107754,7 @@ async function handleAddPhase(target, options2) {
|
|
|
106793
107754
|
try {
|
|
106794
107755
|
const result = addPhase(planFile, target, options2.after);
|
|
106795
107756
|
try {
|
|
106796
|
-
const planDir =
|
|
107757
|
+
const planDir = dirname42(planFile);
|
|
106797
107758
|
const projectRoot = findProjectRoot(planDir);
|
|
106798
107759
|
updateRegistryAddPhase({
|
|
106799
107760
|
planDir,
|
|
@@ -106836,7 +107797,7 @@ function resolvePlanFile(target, baseDir) {
|
|
|
106836
107797
|
const stat23 = statSync11(t);
|
|
106837
107798
|
if (stat23.isFile())
|
|
106838
107799
|
return t;
|
|
106839
|
-
const candidate =
|
|
107800
|
+
const candidate = join145(t, "plan.md");
|
|
106840
107801
|
if (existsSync65(candidate))
|
|
106841
107802
|
return candidate;
|
|
106842
107803
|
}
|
|
@@ -106844,10 +107805,10 @@ function resolvePlanFile(target, baseDir) {
|
|
|
106844
107805
|
let dir = process.cwd();
|
|
106845
107806
|
const root = parse7(dir).root;
|
|
106846
107807
|
while (dir !== root) {
|
|
106847
|
-
const candidate =
|
|
107808
|
+
const candidate = join145(dir, "plan.md");
|
|
106848
107809
|
if (existsSync65(candidate))
|
|
106849
107810
|
return candidate;
|
|
106850
|
-
dir =
|
|
107811
|
+
dir = dirname43(dir);
|
|
106851
107812
|
}
|
|
106852
107813
|
}
|
|
106853
107814
|
return null;
|
|
@@ -107366,8 +108327,8 @@ init_skills_registry();
|
|
|
107366
108327
|
init_skills_uninstaller();
|
|
107367
108328
|
var import_gray_matter11 = __toESM(require_gray_matter(), 1);
|
|
107368
108329
|
var import_picocolors37 = __toESM(require_picocolors(), 1);
|
|
107369
|
-
import { readFile as
|
|
107370
|
-
import { join as
|
|
108330
|
+
import { readFile as readFile61 } from "node:fs/promises";
|
|
108331
|
+
import { join as join146 } from "node:path";
|
|
107371
108332
|
|
|
107372
108333
|
// src/commands/skills/types.ts
|
|
107373
108334
|
init_zod();
|
|
@@ -107489,9 +108450,9 @@ async function handleValidate2(sourcePath) {
|
|
|
107489
108450
|
spinner.stop(`Checked ${skills.length} skill(s)`);
|
|
107490
108451
|
let hasIssues = false;
|
|
107491
108452
|
for (const skill of skills) {
|
|
107492
|
-
const skillMdPath =
|
|
108453
|
+
const skillMdPath = join146(skill.path, "SKILL.md");
|
|
107493
108454
|
try {
|
|
107494
|
-
const content = await
|
|
108455
|
+
const content = await readFile61(skillMdPath, "utf-8");
|
|
107495
108456
|
const { data } = import_gray_matter11.default(content, {
|
|
107496
108457
|
engines: { javascript: { parse: () => ({}) } }
|
|
107497
108458
|
});
|
|
@@ -108047,7 +109008,7 @@ async function detectInstallations() {
|
|
|
108047
109008
|
|
|
108048
109009
|
// src/commands/uninstall/removal-handler.ts
|
|
108049
109010
|
import { readdirSync as readdirSync9, rmSync as rmSync6 } from "node:fs";
|
|
108050
|
-
import { basename as basename29, join as
|
|
109011
|
+
import { basename as basename29, join as join148, resolve as resolve43, sep as sep11 } from "node:path";
|
|
108051
109012
|
init_logger();
|
|
108052
109013
|
init_safe_prompts();
|
|
108053
109014
|
init_safe_spinner();
|
|
@@ -108056,7 +109017,7 @@ var import_fs_extra44 = __toESM(require_lib3(), 1);
|
|
|
108056
109017
|
// src/commands/uninstall/analysis-handler.ts
|
|
108057
109018
|
init_metadata_migration();
|
|
108058
109019
|
import { readdirSync as readdirSync8, rmSync as rmSync5 } from "node:fs";
|
|
108059
|
-
import { dirname as
|
|
109020
|
+
import { dirname as dirname44, join as join147 } from "node:path";
|
|
108060
109021
|
init_logger();
|
|
108061
109022
|
init_safe_prompts();
|
|
108062
109023
|
var import_fs_extra43 = __toESM(require_lib3(), 1);
|
|
@@ -108078,7 +109039,7 @@ function classifyFileByOwnership(ownership, forceOverwrite, deleteReason) {
|
|
|
108078
109039
|
}
|
|
108079
109040
|
async function cleanupEmptyDirectories3(filePath, installationRoot) {
|
|
108080
109041
|
let cleaned = 0;
|
|
108081
|
-
let currentDir =
|
|
109042
|
+
let currentDir = dirname44(filePath);
|
|
108082
109043
|
while (currentDir !== installationRoot && currentDir.startsWith(installationRoot)) {
|
|
108083
109044
|
try {
|
|
108084
109045
|
const entries = readdirSync8(currentDir);
|
|
@@ -108086,7 +109047,7 @@ async function cleanupEmptyDirectories3(filePath, installationRoot) {
|
|
|
108086
109047
|
rmSync5(currentDir, { recursive: true });
|
|
108087
109048
|
cleaned++;
|
|
108088
109049
|
logger.debug(`Removed empty directory: ${currentDir}`);
|
|
108089
|
-
currentDir =
|
|
109050
|
+
currentDir = dirname44(currentDir);
|
|
108090
109051
|
} else {
|
|
108091
109052
|
break;
|
|
108092
109053
|
}
|
|
@@ -108113,7 +109074,7 @@ async function analyzeInstallation(installation, forceOverwrite, kit) {
|
|
|
108113
109074
|
const remainingFiles = metadata.kits?.[remainingKit]?.files || [];
|
|
108114
109075
|
for (const file of remainingFiles) {
|
|
108115
109076
|
const relativePath = normalizeTrackedPath(file.path);
|
|
108116
|
-
if (await import_fs_extra43.pathExists(
|
|
109077
|
+
if (await import_fs_extra43.pathExists(join147(installation.path, relativePath))) {
|
|
108117
109078
|
result.retainedManifestPaths.push(relativePath);
|
|
108118
109079
|
}
|
|
108119
109080
|
}
|
|
@@ -108121,7 +109082,7 @@ async function analyzeInstallation(installation, forceOverwrite, kit) {
|
|
|
108121
109082
|
const kitFiles = metadata.kits[kit].files || [];
|
|
108122
109083
|
for (const trackedFile of kitFiles) {
|
|
108123
109084
|
const relativePath = normalizeTrackedPath(trackedFile.path);
|
|
108124
|
-
const filePath =
|
|
109085
|
+
const filePath = join147(installation.path, relativePath);
|
|
108125
109086
|
if (preservedPaths.has(relativePath)) {
|
|
108126
109087
|
result.toPreserve.push({ path: relativePath, reason: "shared with other kit" });
|
|
108127
109088
|
continue;
|
|
@@ -108154,7 +109115,7 @@ async function analyzeInstallation(installation, forceOverwrite, kit) {
|
|
|
108154
109115
|
}
|
|
108155
109116
|
for (const trackedFile of allTrackedFiles) {
|
|
108156
109117
|
const relativePath = normalizeTrackedPath(trackedFile.path);
|
|
108157
|
-
const filePath =
|
|
109118
|
+
const filePath = join147(installation.path, relativePath);
|
|
108158
109119
|
const ownershipResult = await OwnershipChecker.checkOwnership(filePath, metadata, installation.path);
|
|
108159
109120
|
if (!ownershipResult.exists)
|
|
108160
109121
|
continue;
|
|
@@ -108297,7 +109258,7 @@ async function removeInstallations(installations, options2) {
|
|
|
108297
109258
|
let removedCount = 0;
|
|
108298
109259
|
let cleanedDirs = 0;
|
|
108299
109260
|
for (const item of analysis.toDelete) {
|
|
108300
|
-
const filePath =
|
|
109261
|
+
const filePath = join148(installation.path, item.path);
|
|
108301
109262
|
if (!await import_fs_extra44.pathExists(filePath))
|
|
108302
109263
|
continue;
|
|
108303
109264
|
if (!await isPathSafeToRemove(filePath, installation.path)) {
|
|
@@ -108631,7 +109592,7 @@ ${import_picocolors40.default.bold(import_picocolors40.default.cyan(result.kitCo
|
|
|
108631
109592
|
init_logger();
|
|
108632
109593
|
import { existsSync as existsSync72 } from "node:fs";
|
|
108633
109594
|
import { rm as rm16 } from "node:fs/promises";
|
|
108634
|
-
import { join as
|
|
109595
|
+
import { join as join155 } from "node:path";
|
|
108635
109596
|
var import_picocolors41 = __toESM(require_picocolors(), 1);
|
|
108636
109597
|
|
|
108637
109598
|
// src/commands/watch/phases/implementation-runner.ts
|
|
@@ -109149,8 +110110,8 @@ function spawnAndCollect3(command, args) {
|
|
|
109149
110110
|
}
|
|
109150
110111
|
|
|
109151
110112
|
// src/commands/watch/phases/issue-processor.ts
|
|
109152
|
-
import { mkdir as
|
|
109153
|
-
import { join as
|
|
110113
|
+
import { mkdir as mkdir34, writeFile as writeFile35 } from "node:fs/promises";
|
|
110114
|
+
import { join as join151 } from "node:path";
|
|
109154
110115
|
|
|
109155
110116
|
// src/commands/watch/phases/approval-detector.ts
|
|
109156
110117
|
init_logger();
|
|
@@ -109528,9 +110489,9 @@ async function checkAwaitingApproval(state, setup, options2, watchLog, projectDi
|
|
|
109528
110489
|
|
|
109529
110490
|
// src/commands/watch/phases/plan-dir-finder.ts
|
|
109530
110491
|
import { readdir as readdir44, stat as stat23 } from "node:fs/promises";
|
|
109531
|
-
import { join as
|
|
110492
|
+
import { join as join150 } from "node:path";
|
|
109532
110493
|
async function findRecentPlanDir(cwd2, issueNumber, watchLog) {
|
|
109533
|
-
const plansRoot =
|
|
110494
|
+
const plansRoot = join150(cwd2, "plans");
|
|
109534
110495
|
try {
|
|
109535
110496
|
const entries = await readdir44(plansRoot);
|
|
109536
110497
|
const tenMinAgo = Date.now() - 10 * 60 * 1000;
|
|
@@ -109539,14 +110500,14 @@ async function findRecentPlanDir(cwd2, issueNumber, watchLog) {
|
|
|
109539
110500
|
for (const entry of entries) {
|
|
109540
110501
|
if (entry === "watch" || entry === "reports" || entry === "visuals")
|
|
109541
110502
|
continue;
|
|
109542
|
-
const dirPath =
|
|
110503
|
+
const dirPath = join150(plansRoot, entry);
|
|
109543
110504
|
const dirStat = await stat23(dirPath);
|
|
109544
110505
|
if (!dirStat.isDirectory())
|
|
109545
110506
|
continue;
|
|
109546
110507
|
if (dirStat.mtimeMs < tenMinAgo)
|
|
109547
110508
|
continue;
|
|
109548
110509
|
try {
|
|
109549
|
-
await stat23(
|
|
110510
|
+
await stat23(join150(dirPath, "plan.md"));
|
|
109550
110511
|
} catch {
|
|
109551
110512
|
continue;
|
|
109552
110513
|
}
|
|
@@ -109777,14 +110738,14 @@ async function handlePlanGeneration(issue, state, config, setup, options2, watch
|
|
|
109777
110738
|
stats.plansCreated++;
|
|
109778
110739
|
const detectedPlanDir = await findRecentPlanDir(projectDir, issue.number, watchLog);
|
|
109779
110740
|
if (detectedPlanDir) {
|
|
109780
|
-
state.activeIssues[numStr].planPath =
|
|
110741
|
+
state.activeIssues[numStr].planPath = join151(detectedPlanDir, "plan.md");
|
|
109781
110742
|
watchLog.info(`Plan directory detected: ${detectedPlanDir}`);
|
|
109782
110743
|
} else {
|
|
109783
110744
|
try {
|
|
109784
|
-
const planDir =
|
|
109785
|
-
await
|
|
109786
|
-
const planFilePath =
|
|
109787
|
-
await
|
|
110745
|
+
const planDir = join151(projectDir, "plans", "watch");
|
|
110746
|
+
await mkdir34(planDir, { recursive: true });
|
|
110747
|
+
const planFilePath = join151(planDir, `issue-${issue.number}-plan.md`);
|
|
110748
|
+
await writeFile35(planFilePath, planResult.planText, "utf-8");
|
|
109788
110749
|
state.activeIssues[numStr].planPath = planFilePath;
|
|
109789
110750
|
watchLog.info(`Plan saved (fallback) to ${planFilePath}`);
|
|
109790
110751
|
} catch (err) {
|
|
@@ -109929,15 +110890,15 @@ init_ck_config_manager();
|
|
|
109929
110890
|
init_file_io();
|
|
109930
110891
|
init_logger();
|
|
109931
110892
|
import { existsSync as existsSync68 } from "node:fs";
|
|
109932
|
-
import { mkdir as
|
|
109933
|
-
import { dirname as
|
|
110893
|
+
import { mkdir as mkdir35, readFile as readFile63 } from "node:fs/promises";
|
|
110894
|
+
import { dirname as dirname45 } from "node:path";
|
|
109934
110895
|
var PROCESSED_ISSUES_CAP = 500;
|
|
109935
110896
|
async function readCkJson(projectDir) {
|
|
109936
110897
|
const configPath = CkConfigManager.getProjectConfigPath(projectDir);
|
|
109937
110898
|
try {
|
|
109938
110899
|
if (!existsSync68(configPath))
|
|
109939
110900
|
return {};
|
|
109940
|
-
const content = await
|
|
110901
|
+
const content = await readFile63(configPath, "utf-8");
|
|
109941
110902
|
return JSON.parse(content);
|
|
109942
110903
|
} catch (error) {
|
|
109943
110904
|
logger.warning(`Failed to parse .ck.json: ${error instanceof Error ? error.message : "Unknown"}`);
|
|
@@ -109960,9 +110921,9 @@ async function loadWatchState(projectDir) {
|
|
|
109960
110921
|
}
|
|
109961
110922
|
async function saveWatchState(projectDir, state) {
|
|
109962
110923
|
const configPath = CkConfigManager.getProjectConfigPath(projectDir);
|
|
109963
|
-
const configDir =
|
|
110924
|
+
const configDir = dirname45(configPath);
|
|
109964
110925
|
if (!existsSync68(configDir)) {
|
|
109965
|
-
await
|
|
110926
|
+
await mkdir35(configDir, { recursive: true });
|
|
109966
110927
|
}
|
|
109967
110928
|
const raw2 = await readCkJson(projectDir);
|
|
109968
110929
|
const watchRaw = raw2.watch ?? {};
|
|
@@ -110090,18 +111051,18 @@ init_logger();
|
|
|
110090
111051
|
import { spawnSync as spawnSync7 } from "node:child_process";
|
|
110091
111052
|
import { existsSync as existsSync69 } from "node:fs";
|
|
110092
111053
|
import { readdir as readdir45, stat as stat24 } from "node:fs/promises";
|
|
110093
|
-
import { join as
|
|
111054
|
+
import { join as join152 } from "node:path";
|
|
110094
111055
|
async function scanForRepos(parentDir) {
|
|
110095
111056
|
const repos = [];
|
|
110096
111057
|
const entries = await readdir45(parentDir);
|
|
110097
111058
|
for (const entry of entries) {
|
|
110098
111059
|
if (entry.startsWith("."))
|
|
110099
111060
|
continue;
|
|
110100
|
-
const fullPath =
|
|
111061
|
+
const fullPath = join152(parentDir, entry);
|
|
110101
111062
|
const entryStat = await stat24(fullPath);
|
|
110102
111063
|
if (!entryStat.isDirectory())
|
|
110103
111064
|
continue;
|
|
110104
|
-
const gitDir =
|
|
111065
|
+
const gitDir = join152(fullPath, ".git");
|
|
110105
111066
|
if (!existsSync69(gitDir))
|
|
110106
111067
|
continue;
|
|
110107
111068
|
const result = spawnSync7("gh", ["repo", "view", "--json", "owner,name"], {
|
|
@@ -110127,8 +111088,8 @@ async function scanForRepos(parentDir) {
|
|
|
110127
111088
|
init_logger();
|
|
110128
111089
|
import { spawnSync as spawnSync8 } from "node:child_process";
|
|
110129
111090
|
import { existsSync as existsSync70 } from "node:fs";
|
|
110130
|
-
import { homedir as
|
|
110131
|
-
import { join as
|
|
111091
|
+
import { homedir as homedir48 } from "node:os";
|
|
111092
|
+
import { join as join153 } from "node:path";
|
|
110132
111093
|
async function validateSetup(cwd2) {
|
|
110133
111094
|
const workDir = cwd2 ?? process.cwd();
|
|
110134
111095
|
const ghVersion = spawnSync8("gh", ["--version"], { encoding: "utf-8", timeout: 1e4 });
|
|
@@ -110159,7 +111120,7 @@ Run this command from a directory with a GitHub remote.`);
|
|
|
110159
111120
|
} catch {
|
|
110160
111121
|
throw new Error(`Failed to parse repository info: ${ghRepo.stdout}`);
|
|
110161
111122
|
}
|
|
110162
|
-
const skillsPath =
|
|
111123
|
+
const skillsPath = join153(homedir48(), ".claude", "skills");
|
|
110163
111124
|
const skillsAvailable = existsSync70(skillsPath);
|
|
110164
111125
|
if (!skillsAvailable) {
|
|
110165
111126
|
logger.warning(`ClaudeKit Engineer skills not found at ${skillsPath}`);
|
|
@@ -110177,8 +111138,8 @@ init_logger();
|
|
|
110177
111138
|
init_path_resolver();
|
|
110178
111139
|
import { createWriteStream as createWriteStream3, statSync as statSync12 } from "node:fs";
|
|
110179
111140
|
import { existsSync as existsSync71 } from "node:fs";
|
|
110180
|
-
import { mkdir as
|
|
110181
|
-
import { join as
|
|
111141
|
+
import { mkdir as mkdir36, rename as rename11 } from "node:fs/promises";
|
|
111142
|
+
import { join as join154 } from "node:path";
|
|
110182
111143
|
|
|
110183
111144
|
class WatchLogger {
|
|
110184
111145
|
logStream = null;
|
|
@@ -110186,16 +111147,16 @@ class WatchLogger {
|
|
|
110186
111147
|
logPath = null;
|
|
110187
111148
|
maxBytes;
|
|
110188
111149
|
constructor(logDir, maxBytes = 0) {
|
|
110189
|
-
this.logDir = logDir ??
|
|
111150
|
+
this.logDir = logDir ?? join154(PathResolver.getClaudeKitDir(), "logs");
|
|
110190
111151
|
this.maxBytes = maxBytes;
|
|
110191
111152
|
}
|
|
110192
111153
|
async init() {
|
|
110193
111154
|
try {
|
|
110194
111155
|
if (!existsSync71(this.logDir)) {
|
|
110195
|
-
await
|
|
111156
|
+
await mkdir36(this.logDir, { recursive: true });
|
|
110196
111157
|
}
|
|
110197
111158
|
const dateStr = formatDate(new Date);
|
|
110198
|
-
this.logPath =
|
|
111159
|
+
this.logPath = join154(this.logDir, `watch-${dateStr}.log`);
|
|
110199
111160
|
this.logStream = createWriteStream3(this.logPath, { flags: "a", mode: 384 });
|
|
110200
111161
|
} catch (error) {
|
|
110201
111162
|
logger.warning(`Cannot create watch log file: ${error instanceof Error ? error.message : "Unknown"}`);
|
|
@@ -110377,7 +111338,7 @@ async function watchCommand(options2) {
|
|
|
110377
111338
|
}
|
|
110378
111339
|
async function discoverRepos(options2, watchLog) {
|
|
110379
111340
|
const cwd2 = process.cwd();
|
|
110380
|
-
const isGitRepo = existsSync72(
|
|
111341
|
+
const isGitRepo = existsSync72(join155(cwd2, ".git"));
|
|
110381
111342
|
if (options2.force) {
|
|
110382
111343
|
await forceRemoveLock(watchLog);
|
|
110383
111344
|
}
|
|
@@ -110636,7 +111597,7 @@ function registerCommands(cli) {
|
|
|
110636
111597
|
init_package();
|
|
110637
111598
|
init_config_version_checker();
|
|
110638
111599
|
import { existsSync as existsSync84, readFileSync as readFileSync22 } from "node:fs";
|
|
110639
|
-
import { join as
|
|
111600
|
+
import { join as join167 } from "node:path";
|
|
110640
111601
|
|
|
110641
111602
|
// src/domains/versioning/version-checker.ts
|
|
110642
111603
|
init_version_utils();
|
|
@@ -110650,15 +111611,15 @@ init_types3();
|
|
|
110650
111611
|
init_logger();
|
|
110651
111612
|
init_path_resolver();
|
|
110652
111613
|
import { existsSync as existsSync83 } from "node:fs";
|
|
110653
|
-
import { mkdir as
|
|
110654
|
-
import { join as
|
|
111614
|
+
import { mkdir as mkdir37, readFile as readFile65, writeFile as writeFile38 } from "node:fs/promises";
|
|
111615
|
+
import { join as join166 } from "node:path";
|
|
110655
111616
|
|
|
110656
111617
|
class VersionCacheManager {
|
|
110657
111618
|
static CACHE_FILENAME = "version-check.json";
|
|
110658
111619
|
static CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
110659
111620
|
static getCacheFile() {
|
|
110660
111621
|
const cacheDir = PathResolver.getCacheDir(false);
|
|
110661
|
-
return
|
|
111622
|
+
return join166(cacheDir, VersionCacheManager.CACHE_FILENAME);
|
|
110662
111623
|
}
|
|
110663
111624
|
static async load() {
|
|
110664
111625
|
const cacheFile = VersionCacheManager.getCacheFile();
|
|
@@ -110667,7 +111628,7 @@ class VersionCacheManager {
|
|
|
110667
111628
|
logger.debug("Version check cache not found");
|
|
110668
111629
|
return null;
|
|
110669
111630
|
}
|
|
110670
|
-
const content = await
|
|
111631
|
+
const content = await readFile65(cacheFile, "utf-8");
|
|
110671
111632
|
const cache5 = JSON.parse(content);
|
|
110672
111633
|
if (!cache5.lastCheck || !cache5.currentVersion || !cache5.latestVersion) {
|
|
110673
111634
|
logger.debug("Invalid cache structure, ignoring");
|
|
@@ -110685,9 +111646,9 @@ class VersionCacheManager {
|
|
|
110685
111646
|
const cacheDir = PathResolver.getCacheDir(false);
|
|
110686
111647
|
try {
|
|
110687
111648
|
if (!existsSync83(cacheDir)) {
|
|
110688
|
-
await
|
|
111649
|
+
await mkdir37(cacheDir, { recursive: true, mode: 448 });
|
|
110689
111650
|
}
|
|
110690
|
-
await
|
|
111651
|
+
await writeFile38(cacheFile, JSON.stringify(cache5, null, 2), "utf-8");
|
|
110691
111652
|
logger.debug(`Version check cache saved to ${cacheFile}`);
|
|
110692
111653
|
} catch (error) {
|
|
110693
111654
|
logger.debug(`Failed to save version check cache: ${error}`);
|
|
@@ -110969,9 +111930,9 @@ async function displayVersion() {
|
|
|
110969
111930
|
let localInstalledKits = [];
|
|
110970
111931
|
let globalInstalledKits = [];
|
|
110971
111932
|
const globalKitDir = PathResolver.getGlobalKitDir();
|
|
110972
|
-
const globalMetadataPath =
|
|
111933
|
+
const globalMetadataPath = join167(globalKitDir, "metadata.json");
|
|
110973
111934
|
const prefix = PathResolver.getPathPrefix(false);
|
|
110974
|
-
const localMetadataPath = prefix ?
|
|
111935
|
+
const localMetadataPath = prefix ? join167(process.cwd(), prefix, "metadata.json") : join167(process.cwd(), "metadata.json");
|
|
110975
111936
|
const isLocalSameAsGlobal = localMetadataPath === globalMetadataPath;
|
|
110976
111937
|
if (!isLocalSameAsGlobal && existsSync84(localMetadataPath)) {
|
|
110977
111938
|
try {
|