@theokit/sdk 1.8.0 → 1.8.1
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/CHANGELOG.md +6 -0
- package/bin/init-claude.mjs +49 -15
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [1.8.1] - 2026-06-12
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- `theokit-init-claude` now merges into existing `.claude/` directories instead of refusing. Adds only missing files, preserves user customizations. Use `--force` to overwrite all files.
|
|
10
|
+
|
|
5
11
|
## [1.8.0] - 2026-06-12
|
|
6
12
|
|
|
7
13
|
### Added
|
package/bin/init-claude.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { cpSync, existsSync } from "node:fs";
|
|
2
|
+
import { cpSync, existsSync, mkdirSync, readdirSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
|
|
5
5
|
// EC-1: Node version guard (matches SDK engines.node)
|
|
@@ -14,21 +14,55 @@ const cwd = process.cwd();
|
|
|
14
14
|
const targetDir = join(cwd, ".claude");
|
|
15
15
|
const force = process.argv.includes("--force");
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Merge-copy: recursively copies src into dest, skipping files that already
|
|
19
|
+
* exist in dest. With --force, overwrites everything.
|
|
20
|
+
* Returns { added, skipped } counts.
|
|
21
|
+
*/
|
|
22
|
+
function mergeCopy(src, dest) {
|
|
23
|
+
let added = 0;
|
|
24
|
+
let skipped = 0;
|
|
25
|
+
mkdirSync(dest, { recursive: true });
|
|
26
|
+
for (const entry of readdirSync(src, { withFileTypes: true })) {
|
|
27
|
+
const srcPath = join(src, entry.name);
|
|
28
|
+
const destPath = join(dest, entry.name);
|
|
29
|
+
if (entry.isDirectory()) {
|
|
30
|
+
const sub = mergeCopy(srcPath, destPath);
|
|
31
|
+
added += sub.added;
|
|
32
|
+
skipped += sub.skipped;
|
|
33
|
+
} else if (force || !existsSync(destPath)) {
|
|
34
|
+
cpSync(srcPath, destPath);
|
|
35
|
+
added++;
|
|
36
|
+
} else {
|
|
37
|
+
skipped++;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return { added, skipped };
|
|
41
|
+
}
|
|
22
42
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
43
|
+
// Merge .claude/ directory (skills, rules, settings)
|
|
44
|
+
const dotClaude = mergeCopy(join(templateDir, "dot-claude"), targetDir);
|
|
45
|
+
|
|
46
|
+
// Merge root files (AGENTS.md, CLAUDE.md)
|
|
47
|
+
let rootAdded = 0;
|
|
48
|
+
let rootSkipped = 0;
|
|
49
|
+
for (const file of ["AGENTS.md", "CLAUDE.md"]) {
|
|
50
|
+
const dest = join(cwd, file);
|
|
51
|
+
if (force || !existsSync(dest)) {
|
|
52
|
+
cpSync(join(templateDir, file), dest);
|
|
53
|
+
rootAdded++;
|
|
54
|
+
} else {
|
|
55
|
+
rootSkipped++;
|
|
56
|
+
}
|
|
26
57
|
}
|
|
27
58
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
cpSync(join(templateDir, "CLAUDE.md"), join(cwd, "CLAUDE.md"));
|
|
59
|
+
const totalAdded = dotClaude.added + rootAdded;
|
|
60
|
+
const totalSkipped = dotClaude.skipped + rootSkipped;
|
|
31
61
|
|
|
32
|
-
|
|
33
|
-
console.log("
|
|
34
|
-
console.log("
|
|
62
|
+
if (totalAdded === 0) {
|
|
63
|
+
console.log("All TheoKit SDK files already present. Nothing to add.");
|
|
64
|
+
console.log("Use --force to overwrite existing files.");
|
|
65
|
+
} else {
|
|
66
|
+
console.log(`Added ${totalAdded} file(s). Skipped ${totalSkipped} existing file(s).`);
|
|
67
|
+
console.log("\nNext: open Claude Code and start building with TheoKit.");
|
|
68
|
+
}
|
package/package.json
CHANGED