oh-my-customcode 1.1.100 → 1.1.101
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/dist/cli/index.js +169 -162
- package/dist/index.js +30 -30
- package/package.json +1 -1
- package/templates/manifest.json +1 -1
package/dist/index.js
CHANGED
|
@@ -206,7 +206,7 @@ var init_fs = () => {};
|
|
|
206
206
|
|
|
207
207
|
// src/utils/home.ts
|
|
208
208
|
import { homedir, userInfo } from "node:os";
|
|
209
|
-
import { isAbsolute as isAbsolute2, parse, sep as sep2 } from "node:path";
|
|
209
|
+
import { basename as basename3, dirname as dirname4, isAbsolute as isAbsolute2, join as join6, parse, sep as sep2 } from "node:path";
|
|
210
210
|
function readEnvHome() {
|
|
211
211
|
return process.env.HOME;
|
|
212
212
|
}
|
|
@@ -246,7 +246,7 @@ var init_home = () => {};
|
|
|
246
246
|
import { realpathSync } from "node:fs";
|
|
247
247
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
248
248
|
import { tmpdir } from "node:os";
|
|
249
|
-
import { basename as
|
|
249
|
+
import { basename as basename4, join as join7, resolve as resolve2, sep as sep3 } from "node:path";
|
|
250
250
|
function isTempPath(projectPath) {
|
|
251
251
|
const normalized = resolve2(projectPath);
|
|
252
252
|
const candidates = new Set;
|
|
@@ -281,10 +281,10 @@ function registryDir(home) {
|
|
|
281
281
|
if (resolved === "") {
|
|
282
282
|
throw new Error("Could not determine the home directory for the project registry");
|
|
283
283
|
}
|
|
284
|
-
return
|
|
284
|
+
return join7(resolved, ".oh-my-customcode");
|
|
285
285
|
}
|
|
286
286
|
function registryPath() {
|
|
287
|
-
return
|
|
287
|
+
return join7(registryDir(), "projects.json");
|
|
288
288
|
}
|
|
289
289
|
function emptyRegistry() {
|
|
290
290
|
return { projects: {} };
|
|
@@ -2807,14 +2807,14 @@ async function detectProvider(_options = {}) {
|
|
|
2807
2807
|
};
|
|
2808
2808
|
}
|
|
2809
2809
|
// src/core/updater.ts
|
|
2810
|
-
import { join as
|
|
2810
|
+
import { join as join8 } from "node:path";
|
|
2811
2811
|
// package.json
|
|
2812
2812
|
var package_default = {
|
|
2813
2813
|
name: "oh-my-customcode",
|
|
2814
2814
|
workspaces: [
|
|
2815
2815
|
"packages/*"
|
|
2816
2816
|
],
|
|
2817
|
-
version: "1.1.
|
|
2817
|
+
version: "1.1.101",
|
|
2818
2818
|
description: "Batteries-included agent harness for Claude Code",
|
|
2819
2819
|
type: "module",
|
|
2820
2820
|
bin: {
|
|
@@ -5587,7 +5587,7 @@ function resolveCustomizations(customizations, configPreserveFiles, targetDir) {
|
|
|
5587
5587
|
}
|
|
5588
5588
|
async function updateEntryDoc(targetDir, config, options) {
|
|
5589
5589
|
const layout = getProviderLayout();
|
|
5590
|
-
const entryPath =
|
|
5590
|
+
const entryPath = join8(targetDir, layout.entryFile);
|
|
5591
5591
|
const templateName = getEntryTemplateName2(config.language);
|
|
5592
5592
|
const templatePath = resolveTemplatePath(templateName);
|
|
5593
5593
|
if (!await fileExists(templatePath)) {
|
|
@@ -5625,7 +5625,7 @@ async function backfillStatusLineRefreshInterval(targetDir, options) {
|
|
|
5625
5625
|
return;
|
|
5626
5626
|
}
|
|
5627
5627
|
const layout = getProviderLayout();
|
|
5628
|
-
const settingsPath =
|
|
5628
|
+
const settingsPath = join8(targetDir, layout.rootDir, "settings.local.json");
|
|
5629
5629
|
if (!await fileExists(settingsPath)) {
|
|
5630
5630
|
return;
|
|
5631
5631
|
}
|
|
@@ -5651,7 +5651,7 @@ async function migrateHookCommandsInSettingsLocal(targetDir, options) {
|
|
|
5651
5651
|
return;
|
|
5652
5652
|
}
|
|
5653
5653
|
const layout = getProviderLayout();
|
|
5654
|
-
const settingsPath =
|
|
5654
|
+
const settingsPath = join8(targetDir, layout.rootDir, "settings.local.json");
|
|
5655
5655
|
if (!await fileExists(settingsPath)) {
|
|
5656
5656
|
return;
|
|
5657
5657
|
}
|
|
@@ -5746,7 +5746,7 @@ async function regenerateLockfile(targetDir, result) {
|
|
|
5746
5746
|
}
|
|
5747
5747
|
}
|
|
5748
5748
|
async function shouldSkipSelfUpdate(targetDir, result) {
|
|
5749
|
-
const targetPkgPath =
|
|
5749
|
+
const targetPkgPath = join8(targetDir, "package.json");
|
|
5750
5750
|
if (await fileExists(targetPkgPath)) {
|
|
5751
5751
|
const targetPkg = await readJsonFile(targetPkgPath);
|
|
5752
5752
|
if (targetPkg.name === "oh-my-customcode") {
|
|
@@ -5839,8 +5839,8 @@ async function checkForUpdates(targetDir) {
|
|
|
5839
5839
|
async function applyUpdates(targetDir, updates) {
|
|
5840
5840
|
const fs = await import("node:fs/promises");
|
|
5841
5841
|
for (const update of updates) {
|
|
5842
|
-
const fullPath =
|
|
5843
|
-
await ensureDirectory(
|
|
5842
|
+
const fullPath = join8(targetDir, update.path);
|
|
5843
|
+
await ensureDirectory(join8(fullPath, ".."));
|
|
5844
5844
|
await fs.writeFile(fullPath, update.content, "utf-8");
|
|
5845
5845
|
debug("update.file_applied", { path: update.path });
|
|
5846
5846
|
}
|
|
@@ -5849,7 +5849,7 @@ async function preserveCustomizations(targetDir, customizations) {
|
|
|
5849
5849
|
const preserved = new Map;
|
|
5850
5850
|
const fs = await import("node:fs/promises");
|
|
5851
5851
|
for (const filePath of customizations) {
|
|
5852
|
-
const fullPath =
|
|
5852
|
+
const fullPath = join8(targetDir, filePath);
|
|
5853
5853
|
if (await fileExists(fullPath)) {
|
|
5854
5854
|
const content = await fs.readFile(fullPath, "utf-8");
|
|
5855
5855
|
preserved.set(filePath, content);
|
|
@@ -5906,11 +5906,11 @@ async function collectProtectedSkipPaths(srcPath, destPath, componentPath, force
|
|
|
5906
5906
|
const warnedPaths = [];
|
|
5907
5907
|
const updatedPaths = [];
|
|
5908
5908
|
for (const p of protectedRelative) {
|
|
5909
|
-
const targetFilePath =
|
|
5909
|
+
const targetFilePath = join8(targetDir, componentPath, p);
|
|
5910
5910
|
const lockfileKey = `${componentPath}/${p}`.replace(/\\/g, "/");
|
|
5911
5911
|
const shouldSkip = await shouldSkipProtectedFile(targetFilePath, lockfileKey, lockfile);
|
|
5912
5912
|
if (shouldSkip) {
|
|
5913
|
-
skipPaths.push(path.relative(destPath,
|
|
5913
|
+
skipPaths.push(path.relative(destPath, join8(destPath, p)));
|
|
5914
5914
|
warnedPaths.push(p);
|
|
5915
5915
|
} else {
|
|
5916
5916
|
updatedPaths.push(p);
|
|
@@ -5956,7 +5956,7 @@ async function updateComponent(targetDir, component, customizations, options, co
|
|
|
5956
5956
|
const preservedFiles = [];
|
|
5957
5957
|
const componentPath = getComponentPath2(component);
|
|
5958
5958
|
const srcPath = resolveTemplatePath(componentPath);
|
|
5959
|
-
const destPath =
|
|
5959
|
+
const destPath = join8(targetDir, componentPath);
|
|
5960
5960
|
const customComponents = config.customComponents || [];
|
|
5961
5961
|
const skipPaths = [];
|
|
5962
5962
|
if (customizations && !options.forceOverwriteAll) {
|
|
@@ -5998,7 +5998,7 @@ async function updateComponent(targetDir, component, customizations, options, co
|
|
|
5998
5998
|
}
|
|
5999
5999
|
skipPaths.push(...protectedSkipPaths);
|
|
6000
6000
|
const path = await import("node:path");
|
|
6001
|
-
const normalizedSkipPaths = skipPaths.map((p) => path.relative(destPath,
|
|
6001
|
+
const normalizedSkipPaths = skipPaths.map((p) => path.relative(destPath, join8(targetDir, p)));
|
|
6002
6002
|
const uniqueSkipPaths = [...new Set(normalizedSkipPaths)];
|
|
6003
6003
|
await copyDirectory(srcPath, destPath, {
|
|
6004
6004
|
overwrite: true,
|
|
@@ -6027,7 +6027,7 @@ async function syncRootLevelFiles(targetDir, options, customizations) {
|
|
|
6027
6027
|
const preserved = [];
|
|
6028
6028
|
const preserveSet = new Set(customizations && !options.forceOverwriteAll ? customizations.preserveFiles : []);
|
|
6029
6029
|
for (const fileName of ROOT_LEVEL_FILES) {
|
|
6030
|
-
const srcPath = resolveTemplatePath(
|
|
6030
|
+
const srcPath = resolveTemplatePath(join8(layout.rootDir, fileName));
|
|
6031
6031
|
if (!await fileExists(srcPath)) {
|
|
6032
6032
|
continue;
|
|
6033
6033
|
}
|
|
@@ -6036,8 +6036,8 @@ async function syncRootLevelFiles(targetDir, options, customizations) {
|
|
|
6036
6036
|
preserved.push(relPath);
|
|
6037
6037
|
continue;
|
|
6038
6038
|
}
|
|
6039
|
-
const destPath =
|
|
6040
|
-
await ensureDirectory(
|
|
6039
|
+
const destPath = join8(targetDir, layout.rootDir, fileName);
|
|
6040
|
+
await ensureDirectory(join8(destPath, ".."));
|
|
6041
6041
|
await fs.copyFile(srcPath, destPath);
|
|
6042
6042
|
if (fileName.endsWith(".sh")) {
|
|
6043
6043
|
await fs.chmod(destPath, 493);
|
|
@@ -6072,7 +6072,7 @@ async function removeDeprecatedFiles(targetDir, options) {
|
|
|
6072
6072
|
});
|
|
6073
6073
|
continue;
|
|
6074
6074
|
}
|
|
6075
|
-
const fullPath =
|
|
6075
|
+
const fullPath = join8(targetDir, entry.path);
|
|
6076
6076
|
if (await fileExists(fullPath)) {
|
|
6077
6077
|
await fs.unlink(fullPath);
|
|
6078
6078
|
removed.push(entry.path);
|
|
@@ -6113,7 +6113,7 @@ async function syncNamespaceInFile(targetFilePath, upstreamFilePath) {
|
|
|
6113
6113
|
async function processNamespaceSyncEntry(entry, relPath, fullSrcPath, destPath, componentPath, lockfile) {
|
|
6114
6114
|
if (!entry.isFile() || !entry.name.endsWith(".md"))
|
|
6115
6115
|
return null;
|
|
6116
|
-
const targetFilePath =
|
|
6116
|
+
const targetFilePath = join8(destPath, relPath);
|
|
6117
6117
|
const lockfileKey = `${componentPath}/${relPath}`.replace(/\\/g, "/");
|
|
6118
6118
|
const shouldSkip = await shouldSkipProtectedFile(targetFilePath, lockfileKey, lockfile);
|
|
6119
6119
|
if (shouldSkip)
|
|
@@ -6128,7 +6128,7 @@ async function applyNamespaceSync(targetDir, component, lockfile) {
|
|
|
6128
6128
|
return [];
|
|
6129
6129
|
const componentPath = getComponentPath2(component);
|
|
6130
6130
|
const srcPath = resolveTemplatePath(componentPath);
|
|
6131
|
-
const destPath =
|
|
6131
|
+
const destPath = join8(targetDir, componentPath);
|
|
6132
6132
|
const fs = await import("node:fs/promises");
|
|
6133
6133
|
const synced = [];
|
|
6134
6134
|
const queue = [{ dir: srcPath, relDir: "" }];
|
|
@@ -6142,7 +6142,7 @@ async function applyNamespaceSync(targetDir, component, lockfile) {
|
|
|
6142
6142
|
}
|
|
6143
6143
|
for (const entry of entries) {
|
|
6144
6144
|
const relPath = relDir ? `${relDir}/${entry.name}` : entry.name;
|
|
6145
|
-
const fullSrcPath =
|
|
6145
|
+
const fullSrcPath = join8(dir, entry.name);
|
|
6146
6146
|
if (entry.isDirectory()) {
|
|
6147
6147
|
queue.push({ dir: fullSrcPath, relDir: relPath });
|
|
6148
6148
|
continue;
|
|
@@ -6165,26 +6165,26 @@ function getComponentPath2(component) {
|
|
|
6165
6165
|
}
|
|
6166
6166
|
async function backupInstallation(targetDir) {
|
|
6167
6167
|
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
6168
|
-
const backupDir =
|
|
6168
|
+
const backupDir = join8(targetDir, `.omcustom-backup-${timestamp}`);
|
|
6169
6169
|
const fs = await import("node:fs/promises");
|
|
6170
6170
|
await ensureDirectory(backupDir);
|
|
6171
6171
|
const layout = getProviderLayout();
|
|
6172
6172
|
const dirsToBackup = [layout.rootDir, "guides"];
|
|
6173
6173
|
for (const dir of dirsToBackup) {
|
|
6174
|
-
const srcPath =
|
|
6174
|
+
const srcPath = join8(targetDir, dir);
|
|
6175
6175
|
if (await fileExists(srcPath)) {
|
|
6176
|
-
const destPath =
|
|
6176
|
+
const destPath = join8(backupDir, dir);
|
|
6177
6177
|
await copyDirectory(srcPath, destPath, { overwrite: true });
|
|
6178
6178
|
}
|
|
6179
6179
|
}
|
|
6180
|
-
const entryPath =
|
|
6180
|
+
const entryPath = join8(targetDir, layout.entryFile);
|
|
6181
6181
|
if (await fileExists(entryPath)) {
|
|
6182
|
-
await fs.copyFile(entryPath,
|
|
6182
|
+
await fs.copyFile(entryPath, join8(backupDir, layout.entryFile));
|
|
6183
6183
|
}
|
|
6184
6184
|
return backupDir;
|
|
6185
6185
|
}
|
|
6186
6186
|
async function loadCustomizationManifest(targetDir) {
|
|
6187
|
-
const manifestPath =
|
|
6187
|
+
const manifestPath = join8(targetDir, CUSTOMIZATION_MANIFEST_FILE);
|
|
6188
6188
|
if (await fileExists(manifestPath)) {
|
|
6189
6189
|
return readJsonFile(manifestPath);
|
|
6190
6190
|
}
|
package/package.json
CHANGED
package/templates/manifest.json
CHANGED