aiblueprint-cli 1.4.82 → 1.4.83

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.
Files changed (31) hide show
  1. package/README.md +4 -1
  2. package/agents-config/skills/apex/SKILL.md +61 -0
  3. package/agents-config/skills/appstore-connect/SKILL.md +2 -2
  4. package/agents-config/skills/{appstore-connect-setup/SKILL.md → appstore-connect/references/setup.md} +3 -6
  5. package/agents-config/skills/ios-testflight/SKILL.md +2 -2
  6. package/dist/cli.js +39 -38
  7. package/package.json +1 -1
  8. package/agents-config/skills/create-vitejs-app/SKILL.md +0 -273
  9. package/agents-config/skills/nextjs-add-prisma-db/SKILL.md +0 -137
  10. package/agents-config/skills/nextjs-setup-better-auth/SKILL.md +0 -174
  11. package/agents-config/skills/nextjs-setup-project/SKILL.md +0 -201
  12. package/agents-config/skills/saas-challenge-idea/SKILL.md +0 -136
  13. package/agents-config/skills/saas-create-architecture/SKILL.md +0 -243
  14. package/agents-config/skills/saas-create-headline/SKILL.md +0 -133
  15. package/agents-config/skills/saas-create-landing-copywritting/SKILL.md +0 -268
  16. package/agents-config/skills/saas-create-legals-docs/SKILL.md +0 -177
  17. package/agents-config/skills/saas-create-logos/SKILL.md +0 -241
  18. package/agents-config/skills/saas-create-prd/SKILL.md +0 -196
  19. package/agents-config/skills/saas-create-tasks/SKILL.md +0 -241
  20. package/agents-config/skills/saas-define-pricing/SKILL.md +0 -294
  21. package/agents-config/skills/saas-find-domain-name/SKILL.md +0 -191
  22. package/agents-config/skills/saas-implement-landing-page/SKILL.md +0 -258
  23. package/agents-config/skills/setup-tmux/SKILL.md +0 -165
  24. /package/agents-config/skills/{agents-managers → agents-manager}/SKILL.md +0 -0
  25. /package/agents-config/skills/{agents-managers → agents-manager}/references/agents.md +0 -0
  26. /package/agents-config/skills/{agents-managers → agents-manager}/references/context-management.md +0 -0
  27. /package/agents-config/skills/{agents-managers → agents-manager}/references/debugging-agents.md +0 -0
  28. /package/agents-config/skills/{agents-managers → agents-manager}/references/error-handling-and-recovery.md +0 -0
  29. /package/agents-config/skills/{agents-managers → agents-manager}/references/evaluation-and-testing.md +0 -0
  30. /package/agents-config/skills/{agents-managers → agents-manager}/references/orchestration-patterns.md +0 -0
  31. /package/agents-config/skills/{agents-managers → agents-manager}/references/writing-agent-prompts.md +0 -0
package/README.md CHANGED
@@ -136,9 +136,12 @@ npx aiblueprint-cli@latest agents config unify sessions
136
136
 
137
137
  ### Skills
138
138
 
139
- Install individual skills directly into `~/.claude/skills/`:
139
+ Install skills directly into `~/.claude/skills/`:
140
140
 
141
141
  ```bash
142
+ # Install all skills
143
+ npx skills@latest add melvynx/aiblueprint
144
+
142
145
  # Install a single skill
143
146
  npx skills add Melvynx/aiblueprint --skill ultrathink
144
147
 
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: apex
3
+ description: Structured implementation using the APEX method (Analyze → Plan → Execute → eXamine). Use when implementing a feature or fixing a bug that benefits from a clear, deliberate workflow instead of jumping straight to code.
4
+ argument-hint: "[-x] <task-description>"
5
+ ---
6
+
7
+ # APEX
8
+
9
+ Implement `$ARGUMENTS` with a deliberate, four-phase workflow. Think before each phase.
10
+
11
+ Add `-x` to the request for an extra adversarial review pass after validation.
12
+
13
+ ## A — Analyze
14
+
15
+ Gather just enough context to act with confidence:
16
+
17
+ - Use `Glob`/`Grep` to find the files and patterns you'll touch
18
+ - Read the closest existing example and follow its conventions
19
+ - Restate the task as 2-4 concrete acceptance criteria
20
+ - Note open questions; ask only if a wrong assumption would be costly
21
+
22
+ ## P — Plan
23
+
24
+ Write a short, file-by-file plan before editing:
25
+
26
+ - List each file to create or change and what changes in it
27
+ - Pick the simplest approach that satisfies the criteria
28
+ - Order the steps so the code stays runnable along the way
29
+
30
+ ## E — Execute
31
+
32
+ Implement the plan:
33
+
34
+ - Match the surrounding code's naming, structure, and idioms
35
+ - Stay strictly in scope — no "while I'm here" refactors
36
+ - Comments only where intent is genuinely non-obvious
37
+ - Run the formatter if the project has one
38
+
39
+ ## X — eXamine
40
+
41
+ Validate, then optionally review:
42
+
43
+ 1. **Validate**: run `lint`, `typecheck`, and relevant tests. Fix only what you broke; re-run until clean.
44
+ 2. **Review** (only if `-x`): re-read the diff as a skeptic — check for bugs, security holes, missed edge cases, and overcomplication. Fix what you find.
45
+
46
+ ## Output
47
+
48
+ ```
49
+ ## APEX complete
50
+
51
+ **Task:** {what was implemented}
52
+ **Criteria:** {✓ per acceptance criterion}
53
+ **Files changed:** {list}
54
+ **Validation:** ✓ lint ✓ typecheck ✓ tests
55
+ ```
56
+
57
+ ## Rules
58
+
59
+ - One step at a time — finish each phase before the next
60
+ - Stay in scope; ship the smallest change that meets the criteria
61
+ - If blocked after 2 attempts, report the blocker and stop
@@ -8,7 +8,7 @@ description: Interact with App Store Connect via the asc CLI - apps, builds, Tes
8
8
  Read, manage, and ship any of the user's App Store apps through the **`asc`** CLI (App Store Connect CLI by Rork). `asc` covers nearly the entire ASC surface; reach for the raw API only for the rare gap.
9
9
 
10
10
  <auth>
11
- `asc` is already authenticated on this machine (a default keychain profile). Verify before doing real work:
11
+ `asc` is usually already authenticated on this machine (a default keychain profile). Verify before doing real work:
12
12
 
13
13
  ```bash
14
14
  asc auth status # shows stored credential profiles + which is default
@@ -17,7 +17,7 @@ asc doctor # diagnose auth/config issues
17
17
  ```
18
18
 
19
19
  - Multiple accounts/teams: `asc --profile <name> <command>` selects a profile.
20
- - A NEW account with no stored key: run the `appstore-connect-setup` skill (locates the `.p8`, key id, and issuer id, then `asc auth login`). Never print or commit `.p8` keys, key ids, or issuer ids.
20
+ - **Not authenticated / no working credential / a NEW account with no stored key:** read [references/setup.md](references/setup.md) and follow it — a battle-tested workflow to locate the `.p8`, key id, and issuer id, then `asc auth login`. Never print or commit `.p8` keys, key ids, or issuer ids.
21
21
  </auth>
22
22
 
23
23
  <how_to_drive>
@@ -1,12 +1,9 @@
1
- ---
2
- name: appstore-connect-setup
3
- description: Find and configure App Store Connect API credentials for asc auth. Use when asc auth is missing, credentials are unknown, the user says login to App Store Connect, or before TestFlight/App Store release work.
4
- ---
1
+ # App Store Connect Setup (asc auth)
5
2
 
6
- # App Store Connect Setup
3
+ Read this when `asc` is **not yet authenticated** — `asc auth status --validate` reports no working credential, the user asks to "log in to App Store Connect", or credentials are unknown before TestFlight/App Store release work.
7
4
 
8
5
  <objective>
9
- `asc auth login` needs three things: a **key ID**, an **issuer ID**, and a **.p8 private key file**. Users rarely remember where these are. This skill is a battle-tested workflow for finding all three without asking the user to dig through App Store Connect manually.
6
+ `asc auth login` needs three things: a **key ID**, an **issuer ID**, and a **.p8 private key file**. Users rarely remember where these are. This is a battle-tested workflow for finding all three without asking the user to dig through App Store Connect manually.
10
7
 
11
8
  Key insight from a real session: the `.p8` files and key IDs live on disk, but the **issuer ID is almost never stored locally** — it only exists in the App Store Connect web UI. The trick is to read it from the user's already-signed-in browser session via CDP, since Apple login requires 2FA and cannot be automated.
12
9
  </objective>
@@ -34,7 +34,7 @@ The key insight: interactive `eas build` credential setup requires Apple ID 2FA
34
34
  The user must have (ask once, as a group — these cannot be created by the agent):
35
35
 
36
36
  1. **Apple Developer Program membership** (paid, enrolled).
37
- 2. **App Store Connect API key**: the `AuthKey_<KEY_ID>.p8` file, its key ID, and the team issuer ID. If unknown, run the `appstore-connect-setup` skill, or point the user to App Store Connect > Users and Access > Integrations > App Store Connect API (key must have Admin or App Manager role).
37
+ 2. **App Store Connect API key**: the `AuthKey_<KEY_ID>.p8` file, its key ID, and the team issuer ID. If unknown, follow the `appstore-connect` skill's setup workflow (`references/setup.md`), or point the user to App Store Connect > Users and Access > Integrations > App Store Connect API (key must have Admin or App Manager role).
38
38
  3. **Expo account** logged in: `npx eas-cli@latest whoami` (else `npx eas-cli@latest login`).
39
39
  4. **App record in App Store Connect** for the bundle ID. The public API cannot create app records — if missing, the user creates it once at appstoreconnect.apple.com (My Apps > + > New App, selecting the bundle ID). Verify with Phase D step 1 and stop with clear instructions if absent.
40
40
  5. `asc` CLI installed (`brew install asc`) — used only for the final upload; everything else goes through `scripts/asc-api.mjs`.
@@ -47,7 +47,7 @@ The user must have (ask once, as a group — these cannot be created by the agen
47
47
  | `{bundle_id}` | `SiteConfig.bundleId` |
48
48
  | `{apple_team_id}` | `SiteConfig.appleTeamId` |
49
49
  | `{eas_project_id}` | output of `eas project:init`, then written to `site-config.ts` |
50
- | `{asc_key_id}` / `{asc_issuer_id}` / `{asc_p8_path}` | from the user / `appstore-connect-setup`. Never commit, never print. |
50
+ | `{asc_key_id}` / `{asc_issuer_id}` / `{asc_p8_path}` | from the user / the `appstore-connect` skill's `references/setup.md`. Never commit, never print. |
51
51
  | `{convex_prod_url}` / `{convex_prod_site_url}` | from `npx convex deploy` output / Convex dashboard |
52
52
  | `{asc_app_id}` | numeric app ID resolved from the bundle ID (Phase D) |
53
53
  | `{build_mode}` | default `local`; `expo` only when the user passes `--expo` |
package/dist/cli.js CHANGED
@@ -32265,7 +32265,7 @@ var lib_default = inquirer;
32265
32265
  // src/commands/setup.ts
32266
32266
  var import_fs_extra9 = __toESM(require_lib4(), 1);
32267
32267
  import path13 from "path";
32268
- import os10 from "os";
32268
+ import os11 from "os";
32269
32269
 
32270
32270
  // node_modules/chalk/source/vendor/ansi-styles/index.js
32271
32271
  var ANSI_BACKGROUND_OFFSET = 10;
@@ -33686,6 +33686,7 @@ async function mergeCodexConfigFile(sourceConfigPath, codexDir) {
33686
33686
 
33687
33687
  // src/lib/configs-store.ts
33688
33688
  var import_fs_extra7 = __toESM(require_lib4(), 1);
33689
+ import os10 from "os";
33689
33690
  import path11 from "path";
33690
33691
  var RETENTION_MANAGED_BACKUP_TRIGGERS = new Set(["setup", "sync", "load", "backup-load"]);
33691
33692
  var DEFAULT_BACKUP_RETENTION_DAYS = 30;
@@ -33738,7 +33739,7 @@ async function hasContent(folderPath) {
33738
33739
  async function copyManagedFolder(source, destination) {
33739
33740
  await import_fs_extra7.default.copy(source, destination, {
33740
33741
  overwrite: true,
33741
- dereference: false
33742
+ dereference: os10.platform() === "win32"
33742
33743
  });
33743
33744
  }
33744
33745
  async function writeMetadata(snapshotPath, metadata) {
@@ -34491,7 +34492,7 @@ async function setupCommand(params = {}) {
34491
34492
  console.log(source_default.gray(`
34492
34493
  Next steps:`));
34493
34494
  if (options.shellShortcuts) {
34494
- const platform = os10.platform();
34495
+ const platform = os11.platform();
34495
34496
  if (platform === "win32") {
34496
34497
  console.log(source_default.gray(" • Restart PowerShell to load the new functions"));
34497
34498
  } else {
@@ -34521,7 +34522,7 @@ Next steps:`));
34521
34522
  // src/commands/setup-terminal.ts
34522
34523
  var import_fs_extra10 = __toESM(require_lib4(), 1);
34523
34524
  import path14 from "path";
34524
- import os11 from "os";
34525
+ import os12 from "os";
34525
34526
  import { execSync as execSync3, exec as exec2 } from "child_process";
34526
34527
  var OHMYZSH_INSTALL_URL = "https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh";
34527
34528
  var INSTALL_TIMEOUT = 120000;
@@ -34688,7 +34689,7 @@ plugins=(${pluginsString})`;
34688
34689
  }
34689
34690
  async function setupTerminalCommand(options = {}) {
34690
34691
  const { skipInteractive, homeDir: customHomeDir } = options;
34691
- const homeDir = customHomeDir || os11.homedir();
34692
+ const homeDir = customHomeDir || os12.homedir();
34692
34693
  try {
34693
34694
  console.log(source_default.blue.bold(`
34694
34695
  \uD83D\uDDA5️ AIBlueprint Terminal Setup ${source_default.gray(`v${getVersion()}`)}
@@ -34838,24 +34839,24 @@ Next steps:`));
34838
34839
  // src/commands/setup/symlinks.ts
34839
34840
  var import_fs_extra11 = __toESM(require_lib4(), 1);
34840
34841
  import path15 from "path";
34841
- import os12 from "os";
34842
+ import os13 from "os";
34842
34843
  async function getToolPaths(tool, customFolder) {
34843
34844
  let baseDir;
34844
34845
  switch (tool) {
34845
34846
  case "claude-code":
34846
- baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os12.homedir(), ".claude");
34847
+ baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os13.homedir(), ".claude");
34847
34848
  return {
34848
34849
  baseDir,
34849
34850
  agentsPath: path15.join(baseDir, "agents")
34850
34851
  };
34851
34852
  case "codex":
34852
- baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os12.homedir(), ".codex");
34853
+ baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os13.homedir(), ".codex");
34853
34854
  return {
34854
34855
  baseDir,
34855
34856
  agentsPath: path15.join(baseDir, "agents")
34856
34857
  };
34857
34858
  case "factoryai":
34858
- baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os12.homedir(), ".factory");
34859
+ baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os13.homedir(), ".factory");
34859
34860
  return {
34860
34861
  baseDir,
34861
34862
  agentsPath: path15.join(baseDir, "droids")
@@ -34883,7 +34884,7 @@ async function createSymlink(sourcePath, targetPath, options = {}) {
34883
34884
  return false;
34884
34885
  }
34885
34886
  }
34886
- const isWindows2 = os12.platform() === "win32";
34887
+ const isWindows2 = os13.platform() === "win32";
34887
34888
  if (isWindows2) {
34888
34889
  await import_fs_extra11.default.symlink(sourcePath, targetPath, "junction");
34889
34890
  } else {
@@ -35727,14 +35728,14 @@ var Y2 = ({ indicator: t = "dots" } = {}) => {
35727
35728
  // src/lib/agents-unifier.ts
35728
35729
  var import_fs_extra13 = __toESM(require_lib4(), 1);
35729
35730
  import crypto from "crypto";
35730
- import os14 from "os";
35731
+ import os15 from "os";
35731
35732
  import path17 from "path";
35732
35733
 
35733
35734
  // src/lib/backup-utils.ts
35734
35735
  var import_fs_extra12 = __toESM(require_lib4(), 1);
35735
35736
  import path16 from "path";
35736
- import os13 from "os";
35737
- var BACKUP_BASE_DIR = path16.join(os13.homedir(), ".config", "aiblueprint", "backup");
35737
+ import os14 from "os";
35738
+ var BACKUP_BASE_DIR = path16.join(os14.homedir(), ".config", "aiblueprint", "backup");
35738
35739
  function getBackupDir() {
35739
35740
  return process.env.AIBLUEPRINT_BACKUP_DIR || BACKUP_BASE_DIR;
35740
35741
  }
@@ -35781,7 +35782,7 @@ var MANAGED_FOLDERS = [".claude", ".codex", ".agents"];
35781
35782
  async function copyForBackup(sourcePath, destPath) {
35782
35783
  await import_fs_extra12.default.copy(sourcePath, destPath, {
35783
35784
  overwrite: true,
35784
- dereference: false
35785
+ dereference: os14.platform() === "win32"
35785
35786
  });
35786
35787
  }
35787
35788
  async function hasMeaningfulContent(dir) {
@@ -36507,7 +36508,7 @@ async function ensureBackupPath(result, dryRun = false) {
36507
36508
  }
36508
36509
  async function createDirectorySymlink(source, target) {
36509
36510
  await import_fs_extra13.default.ensureDir(path17.dirname(target));
36510
- if (os14.platform() === "win32") {
36511
+ if (os15.platform() === "win32") {
36511
36512
  await import_fs_extra13.default.symlink(source, target, "junction");
36512
36513
  return;
36513
36514
  }
@@ -36515,7 +36516,7 @@ async function createDirectorySymlink(source, target) {
36515
36516
  }
36516
36517
  async function createFileSymlink(source, target) {
36517
36518
  await import_fs_extra13.default.ensureDir(path17.dirname(target));
36518
- if (os14.platform() === "win32") {
36519
+ if (os15.platform() === "win32") {
36519
36520
  await import_fs_extra13.default.symlink(source, target, "file");
36520
36521
  return;
36521
36522
  }
@@ -37221,7 +37222,7 @@ Codex agents render failed:`), error);
37221
37222
  // src/lib/session-unifier.ts
37222
37223
  var import_fs_extra14 = __toESM(require_lib4(), 1);
37223
37224
  import crypto2 from "crypto";
37224
- import os15 from "os";
37225
+ import os16 from "os";
37225
37226
  import path18 from "path";
37226
37227
  var MANAGED_FOLDERS2 = [".claude", ".codex", ".agents"];
37227
37228
  var SESSION_PATHS = {
@@ -37245,7 +37246,7 @@ async function collectSnapshotSources(folders) {
37245
37246
  ...await listSnapshotSources(storePaths.configsDir, "config"),
37246
37247
  ...await listSnapshotSources(storePaths.backupsDir, "backup")
37247
37248
  ];
37248
- if (path18.resolve(folders.rootDir) === os15.homedir()) {
37249
+ if (path18.resolve(folders.rootDir) === os16.homedir()) {
37249
37250
  sources.push(...await listSnapshotSources(getBackupDir(), "legacy-backup"));
37250
37251
  }
37251
37252
  return sources.sort((a, b3) => a.name.localeCompare(b3.name));
@@ -37518,7 +37519,7 @@ import path21 from "path";
37518
37519
 
37519
37520
  // src/lib/pro-installer.ts
37520
37521
  var import_fs_extra15 = __toESM(require_lib4(), 1);
37521
- import os16 from "os";
37522
+ import os17 from "os";
37522
37523
  import path19 from "path";
37523
37524
  import { exec as exec3 } from "child_process";
37524
37525
  import { promisify as promisify2 } from "util";
@@ -37548,7 +37549,7 @@ function routePath(relativePath) {
37548
37549
  return { kind: "claude", relativePath };
37549
37550
  }
37550
37551
  function getCacheRepoDir() {
37551
- return path19.join(os16.homedir(), ".config", "aiblueprint", "pro-repos", "aiblueprint-cli-premium");
37552
+ return path19.join(os17.homedir(), ".config", "aiblueprint", "pro-repos", "aiblueprint-cli-premium");
37552
37553
  }
37553
37554
  async function execGitWithAuth(command, token, repoUrl, cwd) {
37554
37555
  const authenticatedUrl = `https://x-access-token:${token}@${repoUrl.replace(/^https?:\/\//, "")}`;
@@ -37719,7 +37720,7 @@ async function installProConfigs(options) {
37719
37720
  } catch (error) {
37720
37721
  console.warn("Git caching failed, falling back to API download");
37721
37722
  }
37722
- const tempDir = path19.join(os16.tmpdir(), `aiblueprint-premium-${Date.now()}`);
37723
+ const tempDir = path19.join(os17.tmpdir(), `aiblueprint-premium-${Date.now()}`);
37723
37724
  try {
37724
37725
  let success = false;
37725
37726
  for (const candidate of CONFIG_FOLDER_CANDIDATES2) {
@@ -37755,15 +37756,15 @@ async function syncAllAgentSymlinks(agentsDir, claudeDir) {
37755
37756
 
37756
37757
  // src/lib/token-storage.ts
37757
37758
  var import_fs_extra16 = __toESM(require_lib4(), 1);
37758
- import os17 from "os";
37759
+ import os18 from "os";
37759
37760
  import path20 from "path";
37760
37761
  function getConfigDir() {
37761
- const platform = os17.platform();
37762
+ const platform = os18.platform();
37762
37763
  if (platform === "win32") {
37763
- const appData = process.env.APPDATA || path20.join(os17.homedir(), "AppData", "Roaming");
37764
+ const appData = process.env.APPDATA || path20.join(os18.homedir(), "AppData", "Roaming");
37764
37765
  return path20.join(appData, "aiblueprint");
37765
37766
  } else {
37766
- const configHome = process.env.XDG_CONFIG_HOME || path20.join(os17.homedir(), ".config");
37767
+ const configHome = process.env.XDG_CONFIG_HOME || path20.join(os18.homedir(), ".config");
37767
37768
  return path20.join(configHome, "aiblueprint");
37768
37769
  }
37769
37770
  }
@@ -37799,7 +37800,7 @@ async function getToken() {
37799
37800
  function getTokenInfo() {
37800
37801
  return {
37801
37802
  path: getTokenFilePath2(),
37802
- platform: os17.platform()
37803
+ platform: os18.platform()
37803
37804
  };
37804
37805
  }
37805
37806
 
@@ -38919,19 +38920,19 @@ async function configsBackupsCleanCommand(options = {}) {
38919
38920
  }
38920
38921
 
38921
38922
  // src/commands/openclaw-pro.ts
38922
- import os20 from "os";
38923
+ import os21 from "os";
38923
38924
  import path25 from "path";
38924
38925
 
38925
38926
  // src/lib/openclaw-installer.ts
38926
38927
  var import_fs_extra19 = __toESM(require_lib4(), 1);
38927
- import os18 from "os";
38928
+ import os19 from "os";
38928
38929
  import path23 from "path";
38929
38930
  import { exec as exec4 } from "child_process";
38930
38931
  import { promisify as promisify3 } from "util";
38931
38932
  var execAsync3 = promisify3(exec4);
38932
38933
  var OPENCLAW_PRO_REPO = "Melvynx/openclawpro";
38933
38934
  function getCacheRepoDir2() {
38934
- return path23.join(os18.homedir(), ".config", "openclaw", "pro-repos", "openclawpro");
38935
+ return path23.join(os19.homedir(), ".config", "openclaw", "pro-repos", "openclawpro");
38935
38936
  }
38936
38937
  async function execGitWithAuth2(command, token, repoUrl, cwd) {
38937
38938
  const authenticatedUrl = `https://x-access-token:${token}@${repoUrl.replace(/^https?:\/\//, "")}`;
@@ -38980,7 +38981,7 @@ async function copyConfigFromCache2(cacheConfigDir, targetDir, onProgress) {
38980
38981
  }
38981
38982
  async function installOpenclawProConfigs(options) {
38982
38983
  const { githubToken, openclawFolder, onProgress } = options;
38983
- const targetFolder = openclawFolder || path23.join(os18.homedir(), ".openclaw");
38984
+ const targetFolder = openclawFolder || path23.join(os19.homedir(), ".openclaw");
38984
38985
  try {
38985
38986
  const cacheConfigDir = await cloneOrUpdateRepo2(githubToken);
38986
38987
  await copyConfigFromCache2(cacheConfigDir, targetFolder, onProgress);
@@ -38992,14 +38993,14 @@ async function installOpenclawProConfigs(options) {
38992
38993
 
38993
38994
  // src/lib/openclaw-token-storage.ts
38994
38995
  var import_fs_extra20 = __toESM(require_lib4(), 1);
38995
- import os19 from "os";
38996
+ import os20 from "os";
38996
38997
  import path24 from "path";
38997
38998
  function getConfigDir2() {
38998
- const platform = os19.platform();
38999
+ const platform = os20.platform();
38999
39000
  if (platform === "win32") {
39000
- return path24.join(process.env.APPDATA || os19.homedir(), "openclaw");
39001
+ return path24.join(process.env.APPDATA || os20.homedir(), "openclaw");
39001
39002
  }
39002
- return path24.join(os19.homedir(), ".config", "openclaw");
39003
+ return path24.join(os20.homedir(), ".config", "openclaw");
39003
39004
  }
39004
39005
  function getTokenPath() {
39005
39006
  return path24.join(getConfigDir2(), "token.txt");
@@ -39020,7 +39021,7 @@ async function getOpenclawToken() {
39020
39021
  function getOpenclawTokenInfo() {
39021
39022
  return {
39022
39023
  path: getTokenPath(),
39023
- platform: os19.platform()
39024
+ platform: os20.platform()
39024
39025
  };
39025
39026
  }
39026
39027
 
@@ -39132,7 +39133,7 @@ async function openclawProSetupCommand(options = {}) {
39132
39133
  Se(source_default.red("❌ Not activated"));
39133
39134
  process.exit(1);
39134
39135
  }
39135
- const openclawDir = options.folder ? path25.resolve(options.folder) : path25.join(os20.homedir(), ".openclaw");
39136
+ const openclawDir = options.folder ? path25.resolve(options.folder) : path25.join(os21.homedir(), ".openclaw");
39136
39137
  const spinner = Y2();
39137
39138
  const onProgress = (file, type) => {
39138
39139
  spinner.message(`Installing: ${source_default.cyan(file)} ${source_default.gray(`(${type})`)}`);
@@ -39306,10 +39307,10 @@ var import_fs_extra23 = __toESM(require_lib4(), 1);
39306
39307
  import { spawn as spawn2 } from "child_process";
39307
39308
  import { execSync as execSync4 } from "child_process";
39308
39309
  import path27 from "path";
39309
- import os21 from "os";
39310
+ import os22 from "os";
39310
39311
  function checkCommand2(cmd) {
39311
39312
  try {
39312
- const isWindows2 = os21.platform() === "win32";
39313
+ const isWindows2 = os22.platform() === "win32";
39313
39314
  const whichCmd = isWindows2 ? `where ${cmd}` : `which ${cmd}`;
39314
39315
  execSync4(whichCmd, { stdio: "ignore" });
39315
39316
  return true;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiblueprint-cli",
3
- "version": "1.4.82",
3
+ "version": "1.4.83",
4
4
  "description": "AIBlueprint CLI for setting up AI coding configurations",
5
5
  "author": "AIBlueprint",
6
6
  "license": "MIT",