aiblueprint-cli 1.4.108 → 1.4.109
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/README.md +9 -0
- package/agents-config/claude-config/mods/agent4everything/.claude-plugin/plugin.json +5 -0
- package/agents-config/claude-config/mods/agent4everything/hooks/hooks.json +1 -0
- package/agents-config/claude-config/mods/agent4everything/hooks/register.ts +96 -0
- package/agents-config/claude-config/mods/aiblueprint/.claude-plugin/plugin.json +71 -0
- package/agents-config/claude-config/mods/aiblueprint/hooks/hooks.json +1 -0
- package/agents-config/claude-config/mods/aiblueprint/hooks/register.tsx +309 -0
- package/agents-config/claude-config/mods/aiblueprint/tests/band.test.tsx +74 -0
- package/agents-config/claude-config/mods/aiblueprint/types/index.d.ts +14 -0
- package/agents-config/claude-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +8 -74
- package/agents-config/claude-config/scripts/statusline/src/index.ts +1 -0
- package/agents-config/scripts/.claude/skills/fix-on-my-computer/SKILL.md +8 -74
- package/agents-config/scripts/statusline/src/index.ts +1 -0
- package/agents-config/skills/agents-manager/SKILL.md +15 -453
- package/agents-config/skills/apex/SKILL.md +14 -110
- package/agents-config/skills/app-icon/SKILL.md +22 -117
- package/agents-config/skills/appstore-connect/SKILL.md +22 -85
- package/agents-config/skills/audit-memories/SKILL.md +13 -139
- package/agents-config/skills/audit-skills/SKILL.md +6 -65
- package/agents-config/skills/environments-manager/SKILL.md +14 -238
- package/agents-config/skills/grill-me/SKILL.md +8 -22
- package/agents-config/skills/hooks-manager/SKILL.md +8 -54
- package/agents-config/skills/rules-manager/SKILL.md +11 -192
- package/agents-config/skills/skill-manager/SKILL.md +19 -158
- package/agents-config/skills/skill-manager/references/description-recommandation.md +15 -85
- package/agents-config/skills/test-audit/CAMPAIGN.md +117 -0
- package/agents-config/skills/test-audit/LICENSE +23 -0
- package/agents-config/skills/test-audit/SKILL.md +169 -0
- package/agents-config/skills/test-audit/agents/openai.yaml +10 -0
- package/agents-config/skills/test-audit/assets/codex-icon.svg +1 -0
- package/agents-config/skills/use-style/SKILL.md +8 -48
- package/dist/cli.js +115 -72
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -32299,7 +32299,7 @@ var lib_default = inquirer;
|
|
|
32299
32299
|
// src/commands/setup.ts
|
|
32300
32300
|
var import_fs_extra9 = __toESM(require_lib4(), 1);
|
|
32301
32301
|
import path13 from "path";
|
|
32302
|
-
import
|
|
32302
|
+
import os12 from "os";
|
|
32303
32303
|
|
|
32304
32304
|
// node_modules/chalk/source/vendor/ansi-styles/index.js
|
|
32305
32305
|
var ANSI_BACKGROUND_OFFSET = 10;
|
|
@@ -33022,10 +33022,27 @@ async function installStatuslineDependencies(claudeDir) {
|
|
|
33022
33022
|
|
|
33023
33023
|
// src/commands/setup/settings.ts
|
|
33024
33024
|
var import_fs_extra2 = __toESM(require_lib4(), 1);
|
|
33025
|
+
import os5 from "os";
|
|
33025
33026
|
import path4 from "path";
|
|
33026
33027
|
function toPosixPath(p) {
|
|
33027
33028
|
return p.replace(/\\/g, "/");
|
|
33028
33029
|
}
|
|
33030
|
+
function expandHome(p) {
|
|
33031
|
+
return p.startsWith("~/") ? path4.join(os5.homedir(), p.slice(2)) : p;
|
|
33032
|
+
}
|
|
33033
|
+
function enableMods(env, mods, claudeDir) {
|
|
33034
|
+
env.CLAUDE_CODE_ENABLE_FUNCTION_HOOKS = "1";
|
|
33035
|
+
const dirs = (env.CLAUDE_CODE_PLUGIN_DIRS ?? "").split(path4.delimiter).filter(Boolean);
|
|
33036
|
+
const known = new Set(dirs.map((dir) => path4.resolve(expandHome(dir))));
|
|
33037
|
+
for (const mod of mods) {
|
|
33038
|
+
const dir = path4.join(claudeDir, "mods", mod);
|
|
33039
|
+
if (known.has(path4.resolve(dir)))
|
|
33040
|
+
continue;
|
|
33041
|
+
dirs.push(toPosixPath(dir));
|
|
33042
|
+
known.add(path4.resolve(dir));
|
|
33043
|
+
}
|
|
33044
|
+
env.CLAUDE_CODE_PLUGIN_DIRS = dirs.join(path4.delimiter);
|
|
33045
|
+
}
|
|
33029
33046
|
async function hasExistingStatusLine(claudeDir) {
|
|
33030
33047
|
const settingsPath = path4.join(claudeDir, "settings.json");
|
|
33031
33048
|
try {
|
|
@@ -33060,6 +33077,9 @@ async function updateSettings(options, claudeDir) {
|
|
|
33060
33077
|
delete settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL;
|
|
33061
33078
|
}
|
|
33062
33079
|
settings.env.CLAUDE_CODE_DISABLE_1M_CONTEXT = "1";
|
|
33080
|
+
if (options.installedMods && options.installedMods.length > 0) {
|
|
33081
|
+
enableMods(settings.env, options.installedMods, claudeDir);
|
|
33082
|
+
}
|
|
33063
33083
|
if (!settings.permissions) {
|
|
33064
33084
|
settings.permissions = {};
|
|
33065
33085
|
}
|
|
@@ -33086,7 +33106,7 @@ async function updateSettings(options, claudeDir) {
|
|
|
33086
33106
|
// src/commands/setup/utils.ts
|
|
33087
33107
|
var import_fs_extra3 = __toESM(require_lib4(), 1);
|
|
33088
33108
|
import path5 from "path";
|
|
33089
|
-
import
|
|
33109
|
+
import os6 from "os";
|
|
33090
33110
|
import { exec } from "child_process";
|
|
33091
33111
|
import { promisify } from "util";
|
|
33092
33112
|
var execAsync = promisify(exec);
|
|
@@ -33103,7 +33123,7 @@ class SimpleSpinner {
|
|
|
33103
33123
|
}
|
|
33104
33124
|
var GITHUB_REPO = "https://github.com/Melvynx/aiblueprint.git";
|
|
33105
33125
|
async function cloneRepository() {
|
|
33106
|
-
const tmpDir = path5.join(
|
|
33126
|
+
const tmpDir = path5.join(os6.tmpdir(), `aiblueprint-${Date.now()}`);
|
|
33107
33127
|
try {
|
|
33108
33128
|
await import_fs_extra3.default.ensureDir(tmpDir);
|
|
33109
33129
|
await execAsync(`git clone --depth 1 --quiet ${GITHUB_REPO} "${tmpDir}"`);
|
|
@@ -33153,7 +33173,7 @@ function getVersion() {
|
|
|
33153
33173
|
|
|
33154
33174
|
// src/lib/platform.ts
|
|
33155
33175
|
var import_fs_extra4 = __toESM(require_lib4(), 1);
|
|
33156
|
-
import
|
|
33176
|
+
import os7 from "os";
|
|
33157
33177
|
import path6 from "path";
|
|
33158
33178
|
import { execSync as execSync2 } from "child_process";
|
|
33159
33179
|
function escapeShellArg(arg) {
|
|
@@ -33162,15 +33182,15 @@ function escapeShellArg(arg) {
|
|
|
33162
33182
|
var cachedPlatformInfo = null;
|
|
33163
33183
|
var cachedAudioPlayer = undefined;
|
|
33164
33184
|
function isWSL() {
|
|
33165
|
-
if (
|
|
33185
|
+
if (os7.platform() !== "linux")
|
|
33166
33186
|
return false;
|
|
33167
|
-
const release =
|
|
33187
|
+
const release = os7.release().toLowerCase();
|
|
33168
33188
|
return release.includes("microsoft") || release.includes("wsl");
|
|
33169
33189
|
}
|
|
33170
33190
|
function getPlatformInfo() {
|
|
33171
33191
|
if (cachedPlatformInfo)
|
|
33172
33192
|
return cachedPlatformInfo;
|
|
33173
|
-
const platform =
|
|
33193
|
+
const platform = os7.platform();
|
|
33174
33194
|
const wsl = isWSL();
|
|
33175
33195
|
cachedPlatformInfo = {
|
|
33176
33196
|
platform,
|
|
@@ -33178,14 +33198,14 @@ function getPlatformInfo() {
|
|
|
33178
33198
|
isMacOS: platform === "darwin",
|
|
33179
33199
|
isLinux: platform === "linux" && !wsl,
|
|
33180
33200
|
isWSL: wsl,
|
|
33181
|
-
homeDir:
|
|
33201
|
+
homeDir: os7.homedir()
|
|
33182
33202
|
};
|
|
33183
33203
|
return cachedPlatformInfo;
|
|
33184
33204
|
}
|
|
33185
33205
|
function detectAudioPlayer() {
|
|
33186
33206
|
if (cachedAudioPlayer !== undefined)
|
|
33187
33207
|
return cachedAudioPlayer;
|
|
33188
|
-
const platform =
|
|
33208
|
+
const platform = os7.platform();
|
|
33189
33209
|
if (platform === "darwin") {
|
|
33190
33210
|
cachedAudioPlayer = "afplay";
|
|
33191
33211
|
return cachedAudioPlayer;
|
|
@@ -33224,7 +33244,7 @@ function getPlaySoundCommand(soundPath) {
|
|
|
33224
33244
|
const player = detectAudioPlayer();
|
|
33225
33245
|
if (!player)
|
|
33226
33246
|
return null;
|
|
33227
|
-
const platform =
|
|
33247
|
+
const platform = os7.platform();
|
|
33228
33248
|
const safePath = escapeShellArg(soundPath);
|
|
33229
33249
|
if (platform === "darwin") {
|
|
33230
33250
|
return `afplay -v 0.1 ${safePath}`;
|
|
@@ -33336,12 +33356,11 @@ async function applyPathPlaceholders(target, claudeDir) {
|
|
|
33336
33356
|
}
|
|
33337
33357
|
}
|
|
33338
33358
|
function transformFileContent(content, claudeDir) {
|
|
33339
|
-
|
|
33340
|
-
|
|
33341
|
-
|
|
33342
|
-
|
|
33343
|
-
|
|
33344
|
-
transformed = transformed.replace(/\\/g, "/");
|
|
33359
|
+
const normalizedClaudeDir = claudeDir.replace(/\\/g, "/");
|
|
33360
|
+
const windowsPath = /C:[\\/]+Users[\\/]+[^\\/\r\n"'`]+[\\/]+\.claude[\\/]+([^\s"'`<>|]*)/;
|
|
33361
|
+
const claudePaths = new RegExp([windowsPath.source, ...KNOWN_CLAUDE_PATHS.map((pattern) => pattern.source)].join("|"), "gi");
|
|
33362
|
+
let transformed = content.replace(claudePaths, (_match, relativePath) => `${normalizedClaudeDir}/${relativePath?.replace(/\\+/g, "/") ?? ""}`);
|
|
33363
|
+
transformed = replaceClaudePathPlaceholder(transformed, normalizedClaudeDir);
|
|
33345
33364
|
const audioPatterns = [
|
|
33346
33365
|
/afplay\s+-v\s+[\d.]+\s+'[^']+'/g,
|
|
33347
33366
|
/afplay\s+'[^']+'/g,
|
|
@@ -33360,7 +33379,7 @@ function transformFileContent(content, claudeDir) {
|
|
|
33360
33379
|
}
|
|
33361
33380
|
|
|
33362
33381
|
// src/lib/telemetry.ts
|
|
33363
|
-
import
|
|
33382
|
+
import os8 from "os";
|
|
33364
33383
|
import fs5 from "fs";
|
|
33365
33384
|
import path7 from "path";
|
|
33366
33385
|
var TELEMETRY_URL = "https://codelynx.dev/api/cli/events";
|
|
@@ -33369,13 +33388,13 @@ var isDisabled = () => {
|
|
|
33369
33388
|
};
|
|
33370
33389
|
var getBasePayload = () => ({
|
|
33371
33390
|
cliVersion: getVersion(),
|
|
33372
|
-
platform:
|
|
33373
|
-
arch:
|
|
33391
|
+
platform: os8.platform(),
|
|
33392
|
+
arch: os8.arch(),
|
|
33374
33393
|
nodeVersion: process.version
|
|
33375
33394
|
});
|
|
33376
33395
|
function getTokenFilePath() {
|
|
33377
|
-
const homeDir =
|
|
33378
|
-
if (
|
|
33396
|
+
const homeDir = os8.homedir();
|
|
33397
|
+
if (os8.platform() === "win32") {
|
|
33379
33398
|
const appData = process.env.APPDATA || path7.join(homeDir, "AppData", "Roaming");
|
|
33380
33399
|
return path7.join(appData, "aiblueprint", "token.txt");
|
|
33381
33400
|
}
|
|
@@ -33388,12 +33407,12 @@ function getSystemInfo() {
|
|
|
33388
33407
|
hasProToken = fs5.existsSync(getTokenFilePath());
|
|
33389
33408
|
} catch {}
|
|
33390
33409
|
return {
|
|
33391
|
-
osVersion:
|
|
33392
|
-
osType:
|
|
33393
|
-
totalMemory: `${Math.round(
|
|
33394
|
-
cpus:
|
|
33410
|
+
osVersion: os8.release(),
|
|
33411
|
+
osType: os8.type(),
|
|
33412
|
+
totalMemory: `${Math.round(os8.totalmem() / (1024 * 1024 * 1024))}GB`,
|
|
33413
|
+
cpus: os8.cpus().length,
|
|
33395
33414
|
shell: process.env.SHELL || process.env.COMSPEC || "unknown",
|
|
33396
|
-
homeDir:
|
|
33415
|
+
homeDir: os8.homedir(),
|
|
33397
33416
|
locale: process.env.LANG || process.env.LC_ALL || "unknown",
|
|
33398
33417
|
hasProToken
|
|
33399
33418
|
};
|
|
@@ -33436,12 +33455,12 @@ async function flushTelemetry() {
|
|
|
33436
33455
|
|
|
33437
33456
|
// src/lib/agents-installer.ts
|
|
33438
33457
|
var import_fs_extra5 = __toESM(require_lib4(), 1);
|
|
33439
|
-
import
|
|
33458
|
+
import os9 from "os";
|
|
33440
33459
|
import path8 from "path";
|
|
33441
33460
|
var AGENT_CATEGORIES = ["skills", "agents"];
|
|
33442
33461
|
async function platformSymlink(source, target) {
|
|
33443
33462
|
await import_fs_extra5.default.ensureDir(path8.dirname(target));
|
|
33444
|
-
const isWindows =
|
|
33463
|
+
const isWindows = os9.platform() === "win32";
|
|
33445
33464
|
const sourceStat = await import_fs_extra5.default.stat(source).catch(() => null);
|
|
33446
33465
|
const isDir = sourceStat?.isDirectory() ?? false;
|
|
33447
33466
|
if (isWindows && isDir) {
|
|
@@ -33553,10 +33572,10 @@ function isAgentCategory(category) {
|
|
|
33553
33572
|
}
|
|
33554
33573
|
|
|
33555
33574
|
// src/lib/folder-paths.ts
|
|
33556
|
-
import
|
|
33575
|
+
import os10 from "os";
|
|
33557
33576
|
import path9 from "path";
|
|
33558
33577
|
function resolveFolders(options = {}) {
|
|
33559
|
-
const rootDir = options.folder ? path9.resolve(options.folder) :
|
|
33578
|
+
const rootDir = options.folder ? path9.resolve(options.folder) : os10.homedir();
|
|
33560
33579
|
const claudeDir = options.claudeCodeFolder ? path9.resolve(options.claudeCodeFolder) : path9.join(rootDir, ".claude");
|
|
33561
33580
|
const codexDir = options.codexFolder ? path9.resolve(options.codexFolder) : path9.join(rootDir, ".codex");
|
|
33562
33581
|
const agentsDir = options.agentsFolder ? path9.resolve(options.agentsFolder) : path9.join(rootDir, ".agents");
|
|
@@ -33727,7 +33746,7 @@ async function mergeCodexConfigFile(sourceConfigPath, codexDir) {
|
|
|
33727
33746
|
|
|
33728
33747
|
// src/lib/configs-store.ts
|
|
33729
33748
|
var import_fs_extra7 = __toESM(require_lib4(), 1);
|
|
33730
|
-
import
|
|
33749
|
+
import os11 from "os";
|
|
33731
33750
|
import path11 from "path";
|
|
33732
33751
|
var RETENTION_MANAGED_BACKUP_TRIGGERS = new Set(["setup", "sync", "load", "backup-load"]);
|
|
33733
33752
|
var DEFAULT_BACKUP_RETENTION_DAYS = 30;
|
|
@@ -33780,7 +33799,7 @@ async function hasContent(folderPath) {
|
|
|
33780
33799
|
async function copyManagedFolder(source, destination) {
|
|
33781
33800
|
await import_fs_extra7.default.copy(source, destination, {
|
|
33782
33801
|
overwrite: true,
|
|
33783
|
-
dereference:
|
|
33802
|
+
dereference: os11.platform() === "win32",
|
|
33784
33803
|
filter: async (sourcePath) => {
|
|
33785
33804
|
const stat = await import_fs_extra7.default.lstat(sourcePath);
|
|
33786
33805
|
return !(stat.isSocket() || stat.isFIFO() || stat.isCharacterDevice() || stat.isBlockDevice());
|
|
@@ -34340,7 +34359,8 @@ async function setupCommand(params = {}) {
|
|
|
34340
34359
|
"customStatusline",
|
|
34341
34360
|
"aiblueprintAgents",
|
|
34342
34361
|
"aiblueprintSkills",
|
|
34343
|
-
"installCodex"
|
|
34362
|
+
"installCodex",
|
|
34363
|
+
"claudeMods"
|
|
34344
34364
|
];
|
|
34345
34365
|
console.log(source_default.green("✓ Installing all features (--skip mode)"));
|
|
34346
34366
|
} else {
|
|
@@ -34374,6 +34394,11 @@ async function setupCommand(params = {}) {
|
|
|
34374
34394
|
value: "installCodex",
|
|
34375
34395
|
name: "Codex setup - Starter config + share skills/agents with ~/.codex",
|
|
34376
34396
|
checked: true
|
|
34397
|
+
},
|
|
34398
|
+
{
|
|
34399
|
+
value: "claudeMods",
|
|
34400
|
+
name: "Claude Code mods - aiblueprint usage band + agent4everything skills sync",
|
|
34401
|
+
checked: true
|
|
34377
34402
|
}
|
|
34378
34403
|
]
|
|
34379
34404
|
}
|
|
@@ -34390,6 +34415,7 @@ async function setupCommand(params = {}) {
|
|
|
34390
34415
|
aiblueprintAgents: features.includes("aiblueprintAgents"),
|
|
34391
34416
|
aiblueprintSkills: features.includes("aiblueprintSkills"),
|
|
34392
34417
|
installCodex: features.includes("installCodex"),
|
|
34418
|
+
claudeMods: features.includes("claudeMods"),
|
|
34393
34419
|
skipInteractive
|
|
34394
34420
|
};
|
|
34395
34421
|
const s = new SimpleSpinner;
|
|
@@ -34440,6 +34466,23 @@ async function setupCommand(params = {}) {
|
|
|
34440
34466
|
s.stop("Scripts not available in repository");
|
|
34441
34467
|
}
|
|
34442
34468
|
}
|
|
34469
|
+
if (options.claudeMods) {
|
|
34470
|
+
s.start("Setting up Claude Code mods");
|
|
34471
|
+
const modsSource = await resolveClaudeAssetPath(sourceDir, "mods");
|
|
34472
|
+
if (modsSource) {
|
|
34473
|
+
const entries = await import_fs_extra9.default.readdir(modsSource, { withFileTypes: true });
|
|
34474
|
+
const mods = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
34475
|
+
for (const mod of mods) {
|
|
34476
|
+
await import_fs_extra9.default.copy(path13.join(modsSource, mod), path13.join(claudeDir, "mods", mod), {
|
|
34477
|
+
overwrite: true
|
|
34478
|
+
});
|
|
34479
|
+
}
|
|
34480
|
+
options.installedMods = mods;
|
|
34481
|
+
s.stop(`Mods installed (${mods.join(", ")})`);
|
|
34482
|
+
} else {
|
|
34483
|
+
s.stop("Mods not available in repository");
|
|
34484
|
+
}
|
|
34485
|
+
}
|
|
34443
34486
|
if (options.aiblueprintAgents) {
|
|
34444
34487
|
s.start("Setting up AIBlueprint agents");
|
|
34445
34488
|
const agentsSource = path13.join(sourceDir, "agents");
|
|
@@ -34544,7 +34587,7 @@ async function setupCommand(params = {}) {
|
|
|
34544
34587
|
console.log(source_default.gray(`
|
|
34545
34588
|
Next steps:`));
|
|
34546
34589
|
if (options.shellShortcuts) {
|
|
34547
|
-
const platform =
|
|
34590
|
+
const platform = os12.platform();
|
|
34548
34591
|
if (platform === "win32") {
|
|
34549
34592
|
console.log(source_default.gray(" • Restart PowerShell to load the new functions"));
|
|
34550
34593
|
} else {
|
|
@@ -34574,7 +34617,7 @@ Next steps:`));
|
|
|
34574
34617
|
// src/commands/setup-terminal.ts
|
|
34575
34618
|
var import_fs_extra10 = __toESM(require_lib4(), 1);
|
|
34576
34619
|
import path14 from "path";
|
|
34577
|
-
import
|
|
34620
|
+
import os13 from "os";
|
|
34578
34621
|
import { execSync as execSync3, exec as exec2 } from "child_process";
|
|
34579
34622
|
var OHMYZSH_INSTALL_URL = "https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh";
|
|
34580
34623
|
var INSTALL_TIMEOUT = 120000;
|
|
@@ -34741,7 +34784,7 @@ plugins=(${pluginsString})`;
|
|
|
34741
34784
|
}
|
|
34742
34785
|
async function setupTerminalCommand(options = {}) {
|
|
34743
34786
|
const { skipInteractive, homeDir: customHomeDir } = options;
|
|
34744
|
-
const homeDir = customHomeDir ||
|
|
34787
|
+
const homeDir = customHomeDir || os13.homedir();
|
|
34745
34788
|
try {
|
|
34746
34789
|
console.log(source_default.blue.bold(`
|
|
34747
34790
|
\uD83D\uDDA5️ AIBlueprint Terminal Setup ${source_default.gray(`v${getVersion()}`)}
|
|
@@ -34891,24 +34934,24 @@ Next steps:`));
|
|
|
34891
34934
|
// src/commands/setup/symlinks.ts
|
|
34892
34935
|
var import_fs_extra11 = __toESM(require_lib4(), 1);
|
|
34893
34936
|
import path15 from "path";
|
|
34894
|
-
import
|
|
34937
|
+
import os14 from "os";
|
|
34895
34938
|
async function getToolPaths(tool, customFolder) {
|
|
34896
34939
|
let baseDir;
|
|
34897
34940
|
switch (tool) {
|
|
34898
34941
|
case "claude-code":
|
|
34899
|
-
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(
|
|
34942
|
+
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os14.homedir(), ".claude");
|
|
34900
34943
|
return {
|
|
34901
34944
|
baseDir,
|
|
34902
34945
|
agentsPath: path15.join(baseDir, "agents")
|
|
34903
34946
|
};
|
|
34904
34947
|
case "codex":
|
|
34905
|
-
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(
|
|
34948
|
+
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os14.homedir(), ".codex");
|
|
34906
34949
|
return {
|
|
34907
34950
|
baseDir,
|
|
34908
34951
|
agentsPath: path15.join(baseDir, "agents")
|
|
34909
34952
|
};
|
|
34910
34953
|
case "factoryai":
|
|
34911
|
-
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(
|
|
34954
|
+
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os14.homedir(), ".factory");
|
|
34912
34955
|
return {
|
|
34913
34956
|
baseDir,
|
|
34914
34957
|
agentsPath: path15.join(baseDir, "droids")
|
|
@@ -34936,7 +34979,7 @@ async function createSymlink(sourcePath, targetPath, options = {}) {
|
|
|
34936
34979
|
return false;
|
|
34937
34980
|
}
|
|
34938
34981
|
}
|
|
34939
|
-
const isWindows =
|
|
34982
|
+
const isWindows = os14.platform() === "win32";
|
|
34940
34983
|
if (isWindows) {
|
|
34941
34984
|
await import_fs_extra11.default.symlink(sourcePath, targetPath, "junction");
|
|
34942
34985
|
} else {
|
|
@@ -35780,14 +35823,14 @@ var Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
|
35780
35823
|
// src/lib/agents-unifier.ts
|
|
35781
35824
|
var import_fs_extra13 = __toESM(require_lib4(), 1);
|
|
35782
35825
|
import crypto from "crypto";
|
|
35783
|
-
import
|
|
35826
|
+
import os16 from "os";
|
|
35784
35827
|
import path17 from "path";
|
|
35785
35828
|
|
|
35786
35829
|
// src/lib/backup-utils.ts
|
|
35787
35830
|
var import_fs_extra12 = __toESM(require_lib4(), 1);
|
|
35788
35831
|
import path16 from "path";
|
|
35789
|
-
import
|
|
35790
|
-
var BACKUP_BASE_DIR = path16.join(
|
|
35832
|
+
import os15 from "os";
|
|
35833
|
+
var BACKUP_BASE_DIR = path16.join(os15.homedir(), ".config", "aiblueprint", "backup");
|
|
35791
35834
|
function getBackupDir() {
|
|
35792
35835
|
return process.env.AIBLUEPRINT_BACKUP_DIR || BACKUP_BASE_DIR;
|
|
35793
35836
|
}
|
|
@@ -35834,7 +35877,7 @@ var MANAGED_FOLDERS = [".claude", ".codex", ".agents"];
|
|
|
35834
35877
|
async function copyForBackup(sourcePath, destPath) {
|
|
35835
35878
|
await import_fs_extra12.default.copy(sourcePath, destPath, {
|
|
35836
35879
|
overwrite: true,
|
|
35837
|
-
dereference:
|
|
35880
|
+
dereference: os15.platform() === "win32"
|
|
35838
35881
|
});
|
|
35839
35882
|
}
|
|
35840
35883
|
async function hasMeaningfulContent(dir) {
|
|
@@ -36560,7 +36603,7 @@ async function ensureBackupPath(result, dryRun = false) {
|
|
|
36560
36603
|
}
|
|
36561
36604
|
async function createDirectorySymlink(source, target) {
|
|
36562
36605
|
await import_fs_extra13.default.ensureDir(path17.dirname(target));
|
|
36563
|
-
if (
|
|
36606
|
+
if (os16.platform() === "win32") {
|
|
36564
36607
|
await import_fs_extra13.default.symlink(source, target, "junction");
|
|
36565
36608
|
return;
|
|
36566
36609
|
}
|
|
@@ -36568,7 +36611,7 @@ async function createDirectorySymlink(source, target) {
|
|
|
36568
36611
|
}
|
|
36569
36612
|
async function createFileSymlink(source, target) {
|
|
36570
36613
|
await import_fs_extra13.default.ensureDir(path17.dirname(target));
|
|
36571
|
-
if (
|
|
36614
|
+
if (os16.platform() === "win32") {
|
|
36572
36615
|
await import_fs_extra13.default.symlink(source, target, "file");
|
|
36573
36616
|
return;
|
|
36574
36617
|
}
|
|
@@ -37274,7 +37317,7 @@ Codex agents render failed:`), error);
|
|
|
37274
37317
|
// src/lib/session-unifier.ts
|
|
37275
37318
|
var import_fs_extra14 = __toESM(require_lib4(), 1);
|
|
37276
37319
|
import crypto2 from "crypto";
|
|
37277
|
-
import
|
|
37320
|
+
import os17 from "os";
|
|
37278
37321
|
import path18 from "path";
|
|
37279
37322
|
var MANAGED_FOLDERS2 = [".claude", ".codex", ".agents"];
|
|
37280
37323
|
var SESSION_PATHS = {
|
|
@@ -37298,7 +37341,7 @@ async function collectSnapshotSources(folders) {
|
|
|
37298
37341
|
...await listSnapshotSources(storePaths.configsDir, "config"),
|
|
37299
37342
|
...await listSnapshotSources(storePaths.backupsDir, "backup")
|
|
37300
37343
|
];
|
|
37301
|
-
if (path18.resolve(folders.rootDir) ===
|
|
37344
|
+
if (path18.resolve(folders.rootDir) === os17.homedir()) {
|
|
37302
37345
|
sources.push(...await listSnapshotSources(getBackupDir(), "legacy-backup"));
|
|
37303
37346
|
}
|
|
37304
37347
|
return sources.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -37571,7 +37614,7 @@ import path21 from "path";
|
|
|
37571
37614
|
|
|
37572
37615
|
// src/lib/pro-installer.ts
|
|
37573
37616
|
var import_fs_extra15 = __toESM(require_lib4(), 1);
|
|
37574
|
-
import
|
|
37617
|
+
import os18 from "os";
|
|
37575
37618
|
import path19 from "path";
|
|
37576
37619
|
import { exec as exec3, execFile } from "child_process";
|
|
37577
37620
|
import { promisify as promisify2 } from "util";
|
|
@@ -37604,7 +37647,7 @@ function routePath(relativePath) {
|
|
|
37604
37647
|
return { kind: "claude", relativePath };
|
|
37605
37648
|
}
|
|
37606
37649
|
function getCacheRepoDir() {
|
|
37607
|
-
return path19.join(
|
|
37650
|
+
return path19.join(os18.homedir(), ".config", "aiblueprint", "pro-repos", "aiblueprint-cli-premium");
|
|
37608
37651
|
}
|
|
37609
37652
|
async function execGitWithAuth(command, token, repoUrl, cwd) {
|
|
37610
37653
|
const authenticatedUrl = `https://x-access-token:${token}@${repoUrl.replace(/^https?:\/\//, "")}`;
|
|
@@ -37775,7 +37818,7 @@ async function installProConfigs(options) {
|
|
|
37775
37818
|
} catch (error) {
|
|
37776
37819
|
console.warn("Git caching failed, falling back to API download");
|
|
37777
37820
|
}
|
|
37778
|
-
const tempDir = path19.join(
|
|
37821
|
+
const tempDir = path19.join(os18.tmpdir(), `aiblueprint-premium-${Date.now()}`);
|
|
37779
37822
|
try {
|
|
37780
37823
|
let success = false;
|
|
37781
37824
|
for (const candidate of CONFIG_FOLDER_CANDIDATES2) {
|
|
@@ -37809,7 +37852,7 @@ async function syncAllAgentSymlinks(agentsDir, claudeDir) {
|
|
|
37809
37852
|
}
|
|
37810
37853
|
}
|
|
37811
37854
|
function getAssistantProCacheDir() {
|
|
37812
|
-
return path19.join(
|
|
37855
|
+
return path19.join(os18.homedir(), ".config", "aiblueprint", "pro-repos", "assistant-pro-skills");
|
|
37813
37856
|
}
|
|
37814
37857
|
async function runAuthenticatedGit(args, token, cwd) {
|
|
37815
37858
|
const authorization = Buffer.from(`x-access-token:${token}`).toString("base64");
|
|
@@ -37880,7 +37923,7 @@ function isYamlContentLine(line) {
|
|
|
37880
37923
|
async function ensureHermesExternalSkillsDir(hermesDir, agentsSkillsDir) {
|
|
37881
37924
|
const configPath = path19.join(hermesDir, "config.yaml");
|
|
37882
37925
|
const resolvedSkillsDir = path19.resolve(agentsSkillsDir);
|
|
37883
|
-
const defaultSkillsDir = path19.join(
|
|
37926
|
+
const defaultSkillsDir = path19.join(os18.homedir(), ".agents", "skills");
|
|
37884
37927
|
const configuredPath = resolvedSkillsDir === defaultSkillsDir ? "~/.agents/skills" : resolvedSkillsDir;
|
|
37885
37928
|
const yamlEntry = ` - ${JSON.stringify(configuredPath)}`;
|
|
37886
37929
|
await import_fs_extra15.default.ensureDir(hermesDir);
|
|
@@ -37969,15 +38012,15 @@ async function configureAssistantProConsumers(options) {
|
|
|
37969
38012
|
|
|
37970
38013
|
// src/lib/token-storage.ts
|
|
37971
38014
|
var import_fs_extra16 = __toESM(require_lib4(), 1);
|
|
37972
|
-
import
|
|
38015
|
+
import os19 from "os";
|
|
37973
38016
|
import path20 from "path";
|
|
37974
38017
|
function getConfigDir() {
|
|
37975
|
-
const platform =
|
|
38018
|
+
const platform = os19.platform();
|
|
37976
38019
|
if (platform === "win32") {
|
|
37977
|
-
const appData = process.env.APPDATA || path20.join(
|
|
38020
|
+
const appData = process.env.APPDATA || path20.join(os19.homedir(), "AppData", "Roaming");
|
|
37978
38021
|
return path20.join(appData, "aiblueprint");
|
|
37979
38022
|
} else {
|
|
37980
|
-
const configHome = process.env.XDG_CONFIG_HOME || path20.join(
|
|
38023
|
+
const configHome = process.env.XDG_CONFIG_HOME || path20.join(os19.homedir(), ".config");
|
|
37981
38024
|
return path20.join(configHome, "aiblueprint");
|
|
37982
38025
|
}
|
|
37983
38026
|
}
|
|
@@ -38033,13 +38076,13 @@ async function getAssistantProToken() {
|
|
|
38033
38076
|
function getTokenInfo() {
|
|
38034
38077
|
return {
|
|
38035
38078
|
path: getTokenFilePath2(),
|
|
38036
|
-
platform:
|
|
38079
|
+
platform: os19.platform()
|
|
38037
38080
|
};
|
|
38038
38081
|
}
|
|
38039
38082
|
function getAssistantProTokenInfo() {
|
|
38040
38083
|
return {
|
|
38041
38084
|
path: getAssistantProTokenFilePath(),
|
|
38042
|
-
platform:
|
|
38085
|
+
platform: os19.platform()
|
|
38043
38086
|
};
|
|
38044
38087
|
}
|
|
38045
38088
|
|
|
@@ -39219,19 +39262,19 @@ async function configsBackupsCleanCommand(options = {}) {
|
|
|
39219
39262
|
}
|
|
39220
39263
|
|
|
39221
39264
|
// src/commands/openclaw-pro.ts
|
|
39222
|
-
import
|
|
39265
|
+
import os22 from "os";
|
|
39223
39266
|
import path25 from "path";
|
|
39224
39267
|
|
|
39225
39268
|
// src/lib/openclaw-installer.ts
|
|
39226
39269
|
var import_fs_extra19 = __toESM(require_lib4(), 1);
|
|
39227
|
-
import
|
|
39270
|
+
import os20 from "os";
|
|
39228
39271
|
import path23 from "path";
|
|
39229
39272
|
import { exec as exec4 } from "child_process";
|
|
39230
39273
|
import { promisify as promisify3 } from "util";
|
|
39231
39274
|
var execAsync3 = promisify3(exec4);
|
|
39232
39275
|
var OPENCLAW_PRO_REPO = "Melvynx/openclawpro";
|
|
39233
39276
|
function getCacheRepoDir2() {
|
|
39234
|
-
return path23.join(
|
|
39277
|
+
return path23.join(os20.homedir(), ".config", "openclaw", "pro-repos", "openclawpro");
|
|
39235
39278
|
}
|
|
39236
39279
|
async function execGitWithAuth2(command, token, repoUrl, cwd) {
|
|
39237
39280
|
const authenticatedUrl = `https://x-access-token:${token}@${repoUrl.replace(/^https?:\/\//, "")}`;
|
|
@@ -39280,7 +39323,7 @@ async function copyConfigFromCache2(cacheConfigDir, targetDir, onProgress) {
|
|
|
39280
39323
|
}
|
|
39281
39324
|
async function installOpenclawProConfigs(options) {
|
|
39282
39325
|
const { githubToken, openclawFolder, onProgress } = options;
|
|
39283
|
-
const targetFolder = openclawFolder || path23.join(
|
|
39326
|
+
const targetFolder = openclawFolder || path23.join(os20.homedir(), ".openclaw");
|
|
39284
39327
|
try {
|
|
39285
39328
|
const cacheConfigDir = await cloneOrUpdateRepo2(githubToken);
|
|
39286
39329
|
await copyConfigFromCache2(cacheConfigDir, targetFolder, onProgress);
|
|
@@ -39292,14 +39335,14 @@ async function installOpenclawProConfigs(options) {
|
|
|
39292
39335
|
|
|
39293
39336
|
// src/lib/openclaw-token-storage.ts
|
|
39294
39337
|
var import_fs_extra20 = __toESM(require_lib4(), 1);
|
|
39295
|
-
import
|
|
39338
|
+
import os21 from "os";
|
|
39296
39339
|
import path24 from "path";
|
|
39297
39340
|
function getConfigDir2() {
|
|
39298
|
-
const platform =
|
|
39341
|
+
const platform = os21.platform();
|
|
39299
39342
|
if (platform === "win32") {
|
|
39300
|
-
return path24.join(process.env.APPDATA ||
|
|
39343
|
+
return path24.join(process.env.APPDATA || os21.homedir(), "openclaw");
|
|
39301
39344
|
}
|
|
39302
|
-
return path24.join(
|
|
39345
|
+
return path24.join(os21.homedir(), ".config", "openclaw");
|
|
39303
39346
|
}
|
|
39304
39347
|
function getTokenPath() {
|
|
39305
39348
|
return path24.join(getConfigDir2(), "token.txt");
|
|
@@ -39320,7 +39363,7 @@ async function getOpenclawToken() {
|
|
|
39320
39363
|
function getOpenclawTokenInfo() {
|
|
39321
39364
|
return {
|
|
39322
39365
|
path: getTokenPath(),
|
|
39323
|
-
platform:
|
|
39366
|
+
platform: os21.platform()
|
|
39324
39367
|
};
|
|
39325
39368
|
}
|
|
39326
39369
|
|
|
@@ -39432,7 +39475,7 @@ async function openclawProSetupCommand(options = {}) {
|
|
|
39432
39475
|
Se(source_default.red("❌ Not activated"));
|
|
39433
39476
|
process.exit(1);
|
|
39434
39477
|
}
|
|
39435
|
-
const openclawDir = options.folder ? path25.resolve(options.folder) : path25.join(
|
|
39478
|
+
const openclawDir = options.folder ? path25.resolve(options.folder) : path25.join(os22.homedir(), ".openclaw");
|
|
39436
39479
|
const spinner = Y2();
|
|
39437
39480
|
const onProgress = (file, type) => {
|
|
39438
39481
|
spinner.message(`Installing: ${source_default.cyan(file)} ${source_default.gray(`(${type})`)}`);
|
|
@@ -39606,10 +39649,10 @@ var import_fs_extra23 = __toESM(require_lib4(), 1);
|
|
|
39606
39649
|
import { spawn as spawn2 } from "child_process";
|
|
39607
39650
|
import { execSync as execSync4 } from "child_process";
|
|
39608
39651
|
import path27 from "path";
|
|
39609
|
-
import
|
|
39652
|
+
import os23 from "os";
|
|
39610
39653
|
function checkCommand2(cmd) {
|
|
39611
39654
|
try {
|
|
39612
|
-
const isWindows =
|
|
39655
|
+
const isWindows = os23.platform() === "win32";
|
|
39613
39656
|
const whichCmd = isWindows ? `where ${cmd}` : `which ${cmd}`;
|
|
39614
39657
|
execSync4(whichCmd, { stdio: "ignore" });
|
|
39615
39658
|
return true;
|