aiblueprint-cli 1.4.108 → 1.4.110
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 +10 -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/arena/LICENSE +21 -0
- package/agents-config/skills/arena/SKILL.md +371 -0
- package/agents-config/skills/arena/agents/openai.yaml +9 -0
- package/agents-config/skills/arena/assets/codex-icon.svg +22 -0
- package/agents-config/skills/arena/bracket.py +1235 -0
- package/agents-config/skills/arena/rubric.md +79 -0
- package/agents-config/skills/arena/strategies.json +205 -0
- 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 +125 -78
- package/package.json +1 -1
|
@@ -1,58 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: use-style
|
|
3
3
|
description: Apply named visual style guides to landing pages, app shells, and UI. Use for $use-style, /useskill, list styles, or styles like ios-app, grid, vercel, black-grid, stripe, linear, raycast, gumroad, dusk, or luma.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
user-invocable: true
|
|
4
6
|
---
|
|
5
7
|
|
|
6
|
-
Load
|
|
8
|
+
Load a named style before designing or implementing UI. Parse the name from `$ARGUMENTS` or the message. Aliases: `ios`/`iphone`/`nowstack-mobile`/`ink & spark` → `ios-app`; `use-vercel`/`geist` → `vercel`; `old vercel`/`black grid` → `black-grid`; `testsprite`/`test sprite` → `testspirite`; `lu.ma`/`luma.com` → `luma`; `super simple`/`SUPER_SIMPLE` → `super-simple`.
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
Defaults: NowStack / Expo / NativeWind → `ios-app`. Codelynx product landings → `grid`. Vercel / Geist infrastructure marketing → `vercel`. Austere monochrome tools → `black-grid`. Linear / issue tracker shell → `linear`. Newspaper / magazine → `new-york-times`. Anthropic / Claude cream lab → `anthropic`. Neo-brutalist yellow/pink → `gumroad`. Glossy dark glow marketing → `raycast`. Attio twilight CRM → `dusk`. TestSprite paper dashboard → `testspirite`. Luma / events / RSVP → `luma`.
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
- Implicit: user references NowStack Mobile, Ink & Spark, an iOS app shell, Expo / React Native / NativeWind app UI, `/aiblueprint`, `/agents`, `/aibuilder`, "grid theme", Vercel, Geist, a minimalist dark tool UI, Stripe / fintech / checkout / dashboard UI, Linear / issue tracker / app-shell sidebar UI, NYT / newspaper / editorial / broadsheet / magazine layouts, Anthropic / Claude / warm cream AI-lab pages, Gumroad / neo-brutalist / loud commerce / bold yellow-pink pages, Raycast / glossy dark / glow gradients / floating glass nav / premium product marketing, Dusk / Attio / dark CRM dashboard floating on a twilight backdrop / blue data viz / colorful category pills, Luma / lu.ma / event timeline / calendar / RSVP / discover / a dark consumer events-and-calendar app with photo-led cards, a top teal aurora, and a white pill button, or TestSprite / TestSpirite / calm light dev-tool dashboard / warm paper canvas with one forest-green accent / grouped sidebar + promo rail / isometric line-art empty states
|
|
12
|
-
|
|
13
|
-
Parse the style name from `$ARGUMENTS` or the message. Treat `ios`, `ios app`, `ios-app`, `iphone app`, `nowstack-mobile`, `nowstack mobile`, and `ink & spark` as `ios-app`. Treat `use-vercel`, `vercel style`, and `current vercel` as `vercel`. Treat `vercel-simple`, `old vercel`, `black grid`, and `black-grid` as `black-grid`. Treat `testsprite`, `test-sprite`, and `test sprite` as `testspirite`. Treat `luma`, `lu.ma`, and `luma.com` as `luma`. Treat `list`, `styles`, `available styles`, and missing style names with no implicit match as a request to list available styles and ask the user to choose before designing. Default to `ios-app` when the user references NowStack Mobile, Ink & Spark, an iOS app shell, Expo, React Native, NativeWind, or OS-native tabs. Default to `grid` for Codelynx product landings. Default to `vercel` when the user references Vercel, the Vercel dashboard, Geist, Vercel's changelog, or black infrastructure marketing with large editorial whitespace. Default to `black-grid` for austere monochrome developer tools, calculators, indexes, or line-driven data products. Default to `linear` when the user references Linear, an issue tracker, or a dense sidebar + list + detail app shell. Default to `new-york-times` when the user references a newspaper, broadsheet, magazine, or serif editorial layout. Default to `anthropic` when the user references Anthropic, Claude, or a warm cream + serif AI-lab aesthetic. Default to `gumroad` when the user references Gumroad, neo-brutalism, hard offset shadows, or a loud yellow/pink bordered look. Default to `raycast` when the user references Raycast, a glossy dark page with glow gradients, a floating glass nav, or premium dark product marketing. Default to `dusk` when the user references Attio, a dark CRM/data dashboard floating on a twilight/aurora backdrop, vivid-blue charts, or colorful category pills. Default to `testspirite` when the user references TestSprite, a calm light dev-tool dashboard, a warm paper canvas with a single forest-green accent, a grouped sidebar with a free-trial/upgrade promo rail, or isometric line-art empty states. Default to `luma` when the user references Luma, lu.ma, an event timeline/feed, a calendar or RSVP/invite app, a discover page, or a dark consumer events UI with photo-led cards, a top teal aurora, and a white pill button.
|
|
14
|
-
|
|
15
|
-
If the parsed style is `list`, or if no style can be inferred, do not load a style file. Reply with the available styles table below, add one short line asking which style to use, and stop until the user chooses.
|
|
16
|
-
|
|
17
|
-
## Workflow
|
|
12
|
+
If the name is `list` or nothing matches, list the styles in `styles/` and stop until the user chooses.
|
|
18
13
|
|
|
19
14
|
1. Read `styles/<name>.md` from this skill directory.
|
|
20
|
-
2.
|
|
21
|
-
|
|
22
|
-
- `.agents/styles/<name>-theme.md`
|
|
23
|
-
- `.agents/styles/<name>-theme-migration.md` (migration playbooks only)
|
|
24
|
-
3. Treat the loaded style as hard constraints for layout, typography, color, borders, motion, and component choice.
|
|
25
|
-
4. Reuse existing primitives. In Codelynx repos, import `GridTheme*` components from `grid-theme-primitives.tsx` instead of reinventing patterns.
|
|
26
|
-
|
|
27
|
-
## Available styles
|
|
28
|
-
|
|
29
|
-
| Style | File | Vibe |
|
|
30
|
-
|-------|------|------|
|
|
31
|
-
| `ios-app` | `styles/ios-app.md` | NowStack Mobile Ink & Spark. iOS/Expo app UI with monochrome ink/paper, one yellow `#FFE040` spark, NativeWind tokens, OS-native tabs, flat hairline cards. |
|
|
32
|
-
| `grid` | `styles/grid.md` | Blueprint landing. Square geometry, 1px borders, mono data, condensed display type. |
|
|
33
|
-
| `vercel` | `styles/vercel.md` | Current Vercel product language. Black canvas, Geist Sans, hairline dashboard structure, dense deployment lists, vast editorial marketing space, restrained semantic color. |
|
|
34
|
-
| `black-grid` | `styles/black-grid.md` | Austere monochrome developer tools. Black canvas, Geist + mono, sharp line-defined indexes and calculators, no decoration. |
|
|
35
|
-
| `stripe` | `styles/stripe.md` | Stripe fintech UI. Pale `#f6f9fc` canvas, white cards on soft shadows, blurple `#635BFF` accent, green CTA, rounded geometry. |
|
|
36
|
-
| `linear` | `styles/linear.md` | Linear app shell. Near-black `#08090a` canvas, dense aligned sidebar + list + detail panes, indigo `#5e6ad2` accent, Inter Display headings, quiet line-defined chrome. |
|
|
37
|
-
| `new-york-times` | `styles/new-york-times.md` | Print-newspaper editorial. Paper-white, serif headlines (Cheltenham/Georgia), Franklin sans kickers, blackletter masthead, hairline rules, multi-column grid, red/blue accents only. |
|
|
38
|
-
| `anthropic` | `styles/anthropic.md` | Warm AI-lab. Cream `#f0efe9` paper, bold grotesque sans display + reading serif, clay-coral `#cc785c` accent, big soft-rounded dark panels, pill buttons. Light marketing + dark Claude app surfaces. |
|
|
39
|
-
| `gumroad` | `styles/gumroad.md` | Loud neo-brutalist commerce. Yellow `#ffc900` + pink `#ff90e8`, thick black borders, hard offset shadows `4px 4px 0 #000`, flat fills, bold geometric sans, pill buttons. Light marketplace + dark dashboard surfaces. |
|
|
40
|
-
| `raycast` | `styles/raycast.md` | Glossy dark product marketing. Near-black `#0a0a0a` + red `#ff6363` glow, floating glass nav (`backdrop-blur`), oversized bold pricing, large-radius `rounded-3xl` cards, soft glow over hard shadows. |
|
|
41
|
-
| `dusk` | `styles/dusk.md` | Refined dark data app (Attio-style). Rounded near-black window floating on a twilight gradient backdrop, vivid sky-blue `#38bdf8` charts, `#3b6eff` primary, colorful category pills, Inter + mono numbers. |
|
|
42
|
-
| `luma` | `styles/luma.md` | Dark consumer events + calendar app (Luma/lu.ma). Near-black `#0a0a0b` canvas with one soft teal aurora at the top, near-borderless `rounded-2xl` photo-led cards, white pill primary buttons, blue `#2f6bff` status pills, gold `#f5b13d` event times, centered timeline column. |
|
|
43
|
-
| `testspirite` | `styles/testspirite.md` | Calm light dev-tool app shell (TestSprite). Warm paper-white `#f7f7f3` canvas, one forest-green `#3d7c4e` accent, grouped sidebar + promo rail, soft `rounded-xl` cards on quiet borders, pale-green `#eaf3ea` status pills, isometric line-art empty states. |
|
|
44
|
-
|
|
45
|
-
Add new styles as `styles/<name>.md` and register them here.
|
|
46
|
-
|
|
47
|
-
## Output rules
|
|
48
|
-
|
|
49
|
-
- Match the style vibe precisely. Do not blend with generic SaaS aesthetics.
|
|
50
|
-
- Honor the anti-patterns section in the style file.
|
|
51
|
-
- When a project spec lists concrete tokens or components, use those over prose approximations.
|
|
52
|
-
- For landing pages, scaffold the page shell from the style first, then fill sections.
|
|
53
|
-
|
|
54
|
-
## Related skills
|
|
15
|
+
2. Prefer project overrides: `.agents/styles/<name>.md`, `<name>-theme.md`, `<name>-theme-migration.md`.
|
|
16
|
+
3. Treat the loaded style as hard constraints. Reuse existing primitives (Codelynx: `GridTheme*` from `grid-theme-primitives.tsx`).
|
|
55
17
|
|
|
56
|
-
|
|
57
|
-
- `use-feature`: reusable feature and UX implementation patterns that are not visual styles.
|
|
58
|
-
- `impeccable`: polish pass after the style is applied.
|
|
18
|
+
Match the vibe exactly. Honor the style file's anti-patterns. Scaffold the shell first on landing pages. `impeccable` is the polish pass after the style is applied.
|
package/dist/cli.js
CHANGED
|
@@ -30139,6 +30139,16 @@ __exportCjs(exports_commander, {
|
|
|
30139
30139
|
InvalidArgumentError: (value) => $InvalidArgumentError = value,
|
|
30140
30140
|
InvalidOptionArgumentError: (value) => $InvalidOptionArgumentError = value
|
|
30141
30141
|
});
|
|
30142
|
+
|
|
30143
|
+
// node_modules/ansi-escapes/index.js
|
|
30144
|
+
var exports_ansi_escapes = {};
|
|
30145
|
+
__exportCjs(exports_ansi_escapes, {
|
|
30146
|
+
default: () => $default
|
|
30147
|
+
}, {
|
|
30148
|
+
default: (value2) => $default = value2
|
|
30149
|
+
});
|
|
30150
|
+
|
|
30151
|
+
// node_modules/commander/index.js
|
|
30142
30152
|
var { Argument } = require_argument();
|
|
30143
30153
|
var { Command } = require_command();
|
|
30144
30154
|
var { CommanderError, InvalidArgumentError } = require_error();
|
|
@@ -30172,12 +30182,6 @@ var {
|
|
|
30172
30182
|
} = exports_commander;
|
|
30173
30183
|
|
|
30174
30184
|
// node_modules/ansi-escapes/index.js
|
|
30175
|
-
var exports_ansi_escapes = {};
|
|
30176
|
-
__exportCjs(exports_ansi_escapes, {
|
|
30177
|
-
default: () => $default
|
|
30178
|
-
}, {
|
|
30179
|
-
default: (value2) => $default = value2
|
|
30180
|
-
});
|
|
30181
30185
|
var ansiEscapes = exports_ansi_escapes;
|
|
30182
30186
|
var $default = ansiEscapes;
|
|
30183
30187
|
var ESC = "\x1B[";
|
|
@@ -32299,7 +32303,7 @@ var lib_default = inquirer;
|
|
|
32299
32303
|
// src/commands/setup.ts
|
|
32300
32304
|
var import_fs_extra9 = __toESM(require_lib4(), 1);
|
|
32301
32305
|
import path13 from "path";
|
|
32302
|
-
import
|
|
32306
|
+
import os12 from "os";
|
|
32303
32307
|
|
|
32304
32308
|
// node_modules/chalk/source/vendor/ansi-styles/index.js
|
|
32305
32309
|
var ANSI_BACKGROUND_OFFSET = 10;
|
|
@@ -33022,10 +33026,27 @@ async function installStatuslineDependencies(claudeDir) {
|
|
|
33022
33026
|
|
|
33023
33027
|
// src/commands/setup/settings.ts
|
|
33024
33028
|
var import_fs_extra2 = __toESM(require_lib4(), 1);
|
|
33029
|
+
import os5 from "os";
|
|
33025
33030
|
import path4 from "path";
|
|
33026
33031
|
function toPosixPath(p) {
|
|
33027
33032
|
return p.replace(/\\/g, "/");
|
|
33028
33033
|
}
|
|
33034
|
+
function expandHome(p) {
|
|
33035
|
+
return p.startsWith("~/") ? path4.join(os5.homedir(), p.slice(2)) : p;
|
|
33036
|
+
}
|
|
33037
|
+
function enableMods(env, mods, claudeDir) {
|
|
33038
|
+
env.CLAUDE_CODE_ENABLE_FUNCTION_HOOKS = "1";
|
|
33039
|
+
const dirs = (env.CLAUDE_CODE_PLUGIN_DIRS ?? "").split(path4.delimiter).filter(Boolean);
|
|
33040
|
+
const known = new Set(dirs.map((dir) => path4.resolve(expandHome(dir))));
|
|
33041
|
+
for (const mod of mods) {
|
|
33042
|
+
const dir = path4.join(claudeDir, "mods", mod);
|
|
33043
|
+
if (known.has(path4.resolve(dir)))
|
|
33044
|
+
continue;
|
|
33045
|
+
dirs.push(toPosixPath(dir));
|
|
33046
|
+
known.add(path4.resolve(dir));
|
|
33047
|
+
}
|
|
33048
|
+
env.CLAUDE_CODE_PLUGIN_DIRS = dirs.join(path4.delimiter);
|
|
33049
|
+
}
|
|
33029
33050
|
async function hasExistingStatusLine(claudeDir) {
|
|
33030
33051
|
const settingsPath = path4.join(claudeDir, "settings.json");
|
|
33031
33052
|
try {
|
|
@@ -33060,6 +33081,9 @@ async function updateSettings(options, claudeDir) {
|
|
|
33060
33081
|
delete settings.env.ANTHROPIC_DEFAULT_SONNET_MODEL;
|
|
33061
33082
|
}
|
|
33062
33083
|
settings.env.CLAUDE_CODE_DISABLE_1M_CONTEXT = "1";
|
|
33084
|
+
if (options.installedMods && options.installedMods.length > 0) {
|
|
33085
|
+
enableMods(settings.env, options.installedMods, claudeDir);
|
|
33086
|
+
}
|
|
33063
33087
|
if (!settings.permissions) {
|
|
33064
33088
|
settings.permissions = {};
|
|
33065
33089
|
}
|
|
@@ -33086,7 +33110,7 @@ async function updateSettings(options, claudeDir) {
|
|
|
33086
33110
|
// src/commands/setup/utils.ts
|
|
33087
33111
|
var import_fs_extra3 = __toESM(require_lib4(), 1);
|
|
33088
33112
|
import path5 from "path";
|
|
33089
|
-
import
|
|
33113
|
+
import os6 from "os";
|
|
33090
33114
|
import { exec } from "child_process";
|
|
33091
33115
|
import { promisify } from "util";
|
|
33092
33116
|
var execAsync = promisify(exec);
|
|
@@ -33103,7 +33127,7 @@ class SimpleSpinner {
|
|
|
33103
33127
|
}
|
|
33104
33128
|
var GITHUB_REPO = "https://github.com/Melvynx/aiblueprint.git";
|
|
33105
33129
|
async function cloneRepository() {
|
|
33106
|
-
const tmpDir = path5.join(
|
|
33130
|
+
const tmpDir = path5.join(os6.tmpdir(), `aiblueprint-${Date.now()}`);
|
|
33107
33131
|
try {
|
|
33108
33132
|
await import_fs_extra3.default.ensureDir(tmpDir);
|
|
33109
33133
|
await execAsync(`git clone --depth 1 --quiet ${GITHUB_REPO} "${tmpDir}"`);
|
|
@@ -33153,7 +33177,7 @@ function getVersion() {
|
|
|
33153
33177
|
|
|
33154
33178
|
// src/lib/platform.ts
|
|
33155
33179
|
var import_fs_extra4 = __toESM(require_lib4(), 1);
|
|
33156
|
-
import
|
|
33180
|
+
import os7 from "os";
|
|
33157
33181
|
import path6 from "path";
|
|
33158
33182
|
import { execSync as execSync2 } from "child_process";
|
|
33159
33183
|
function escapeShellArg(arg) {
|
|
@@ -33162,15 +33186,15 @@ function escapeShellArg(arg) {
|
|
|
33162
33186
|
var cachedPlatformInfo = null;
|
|
33163
33187
|
var cachedAudioPlayer = undefined;
|
|
33164
33188
|
function isWSL() {
|
|
33165
|
-
if (
|
|
33189
|
+
if (os7.platform() !== "linux")
|
|
33166
33190
|
return false;
|
|
33167
|
-
const release =
|
|
33191
|
+
const release = os7.release().toLowerCase();
|
|
33168
33192
|
return release.includes("microsoft") || release.includes("wsl");
|
|
33169
33193
|
}
|
|
33170
33194
|
function getPlatformInfo() {
|
|
33171
33195
|
if (cachedPlatformInfo)
|
|
33172
33196
|
return cachedPlatformInfo;
|
|
33173
|
-
const platform =
|
|
33197
|
+
const platform = os7.platform();
|
|
33174
33198
|
const wsl = isWSL();
|
|
33175
33199
|
cachedPlatformInfo = {
|
|
33176
33200
|
platform,
|
|
@@ -33178,14 +33202,14 @@ function getPlatformInfo() {
|
|
|
33178
33202
|
isMacOS: platform === "darwin",
|
|
33179
33203
|
isLinux: platform === "linux" && !wsl,
|
|
33180
33204
|
isWSL: wsl,
|
|
33181
|
-
homeDir:
|
|
33205
|
+
homeDir: os7.homedir()
|
|
33182
33206
|
};
|
|
33183
33207
|
return cachedPlatformInfo;
|
|
33184
33208
|
}
|
|
33185
33209
|
function detectAudioPlayer() {
|
|
33186
33210
|
if (cachedAudioPlayer !== undefined)
|
|
33187
33211
|
return cachedAudioPlayer;
|
|
33188
|
-
const platform =
|
|
33212
|
+
const platform = os7.platform();
|
|
33189
33213
|
if (platform === "darwin") {
|
|
33190
33214
|
cachedAudioPlayer = "afplay";
|
|
33191
33215
|
return cachedAudioPlayer;
|
|
@@ -33224,7 +33248,7 @@ function getPlaySoundCommand(soundPath) {
|
|
|
33224
33248
|
const player = detectAudioPlayer();
|
|
33225
33249
|
if (!player)
|
|
33226
33250
|
return null;
|
|
33227
|
-
const platform =
|
|
33251
|
+
const platform = os7.platform();
|
|
33228
33252
|
const safePath = escapeShellArg(soundPath);
|
|
33229
33253
|
if (platform === "darwin") {
|
|
33230
33254
|
return `afplay -v 0.1 ${safePath}`;
|
|
@@ -33336,12 +33360,11 @@ async function applyPathPlaceholders(target, claudeDir) {
|
|
|
33336
33360
|
}
|
|
33337
33361
|
}
|
|
33338
33362
|
function transformFileContent(content, claudeDir) {
|
|
33339
|
-
|
|
33340
|
-
|
|
33341
|
-
|
|
33342
|
-
|
|
33343
|
-
|
|
33344
|
-
transformed = transformed.replace(/\\/g, "/");
|
|
33363
|
+
const normalizedClaudeDir = claudeDir.replace(/\\/g, "/");
|
|
33364
|
+
const windowsPath = /C:[\\/]+Users[\\/]+[^\\/\r\n"'`]+[\\/]+\.claude[\\/]+([^\s"'`<>|]*)/;
|
|
33365
|
+
const claudePaths = new RegExp([windowsPath.source, ...KNOWN_CLAUDE_PATHS.map((pattern) => pattern.source)].join("|"), "gi");
|
|
33366
|
+
let transformed = content.replace(claudePaths, (_match, relativePath) => `${normalizedClaudeDir}/${relativePath?.replace(/\\+/g, "/") ?? ""}`);
|
|
33367
|
+
transformed = replaceClaudePathPlaceholder(transformed, normalizedClaudeDir);
|
|
33345
33368
|
const audioPatterns = [
|
|
33346
33369
|
/afplay\s+-v\s+[\d.]+\s+'[^']+'/g,
|
|
33347
33370
|
/afplay\s+'[^']+'/g,
|
|
@@ -33360,7 +33383,7 @@ function transformFileContent(content, claudeDir) {
|
|
|
33360
33383
|
}
|
|
33361
33384
|
|
|
33362
33385
|
// src/lib/telemetry.ts
|
|
33363
|
-
import
|
|
33386
|
+
import os8 from "os";
|
|
33364
33387
|
import fs5 from "fs";
|
|
33365
33388
|
import path7 from "path";
|
|
33366
33389
|
var TELEMETRY_URL = "https://codelynx.dev/api/cli/events";
|
|
@@ -33369,13 +33392,13 @@ var isDisabled = () => {
|
|
|
33369
33392
|
};
|
|
33370
33393
|
var getBasePayload = () => ({
|
|
33371
33394
|
cliVersion: getVersion(),
|
|
33372
|
-
platform:
|
|
33373
|
-
arch:
|
|
33395
|
+
platform: os8.platform(),
|
|
33396
|
+
arch: os8.arch(),
|
|
33374
33397
|
nodeVersion: process.version
|
|
33375
33398
|
});
|
|
33376
33399
|
function getTokenFilePath() {
|
|
33377
|
-
const homeDir =
|
|
33378
|
-
if (
|
|
33400
|
+
const homeDir = os8.homedir();
|
|
33401
|
+
if (os8.platform() === "win32") {
|
|
33379
33402
|
const appData = process.env.APPDATA || path7.join(homeDir, "AppData", "Roaming");
|
|
33380
33403
|
return path7.join(appData, "aiblueprint", "token.txt");
|
|
33381
33404
|
}
|
|
@@ -33388,12 +33411,12 @@ function getSystemInfo() {
|
|
|
33388
33411
|
hasProToken = fs5.existsSync(getTokenFilePath());
|
|
33389
33412
|
} catch {}
|
|
33390
33413
|
return {
|
|
33391
|
-
osVersion:
|
|
33392
|
-
osType:
|
|
33393
|
-
totalMemory: `${Math.round(
|
|
33394
|
-
cpus:
|
|
33414
|
+
osVersion: os8.release(),
|
|
33415
|
+
osType: os8.type(),
|
|
33416
|
+
totalMemory: `${Math.round(os8.totalmem() / (1024 * 1024 * 1024))}GB`,
|
|
33417
|
+
cpus: os8.cpus().length,
|
|
33395
33418
|
shell: process.env.SHELL || process.env.COMSPEC || "unknown",
|
|
33396
|
-
homeDir:
|
|
33419
|
+
homeDir: os8.homedir(),
|
|
33397
33420
|
locale: process.env.LANG || process.env.LC_ALL || "unknown",
|
|
33398
33421
|
hasProToken
|
|
33399
33422
|
};
|
|
@@ -33436,12 +33459,12 @@ async function flushTelemetry() {
|
|
|
33436
33459
|
|
|
33437
33460
|
// src/lib/agents-installer.ts
|
|
33438
33461
|
var import_fs_extra5 = __toESM(require_lib4(), 1);
|
|
33439
|
-
import
|
|
33462
|
+
import os9 from "os";
|
|
33440
33463
|
import path8 from "path";
|
|
33441
33464
|
var AGENT_CATEGORIES = ["skills", "agents"];
|
|
33442
33465
|
async function platformSymlink(source, target) {
|
|
33443
33466
|
await import_fs_extra5.default.ensureDir(path8.dirname(target));
|
|
33444
|
-
const isWindows =
|
|
33467
|
+
const isWindows = os9.platform() === "win32";
|
|
33445
33468
|
const sourceStat = await import_fs_extra5.default.stat(source).catch(() => null);
|
|
33446
33469
|
const isDir = sourceStat?.isDirectory() ?? false;
|
|
33447
33470
|
if (isWindows && isDir) {
|
|
@@ -33553,10 +33576,10 @@ function isAgentCategory(category) {
|
|
|
33553
33576
|
}
|
|
33554
33577
|
|
|
33555
33578
|
// src/lib/folder-paths.ts
|
|
33556
|
-
import
|
|
33579
|
+
import os10 from "os";
|
|
33557
33580
|
import path9 from "path";
|
|
33558
33581
|
function resolveFolders(options = {}) {
|
|
33559
|
-
const rootDir = options.folder ? path9.resolve(options.folder) :
|
|
33582
|
+
const rootDir = options.folder ? path9.resolve(options.folder) : os10.homedir();
|
|
33560
33583
|
const claudeDir = options.claudeCodeFolder ? path9.resolve(options.claudeCodeFolder) : path9.join(rootDir, ".claude");
|
|
33561
33584
|
const codexDir = options.codexFolder ? path9.resolve(options.codexFolder) : path9.join(rootDir, ".codex");
|
|
33562
33585
|
const agentsDir = options.agentsFolder ? path9.resolve(options.agentsFolder) : path9.join(rootDir, ".agents");
|
|
@@ -33727,7 +33750,7 @@ async function mergeCodexConfigFile(sourceConfigPath, codexDir) {
|
|
|
33727
33750
|
|
|
33728
33751
|
// src/lib/configs-store.ts
|
|
33729
33752
|
var import_fs_extra7 = __toESM(require_lib4(), 1);
|
|
33730
|
-
import
|
|
33753
|
+
import os11 from "os";
|
|
33731
33754
|
import path11 from "path";
|
|
33732
33755
|
var RETENTION_MANAGED_BACKUP_TRIGGERS = new Set(["setup", "sync", "load", "backup-load"]);
|
|
33733
33756
|
var DEFAULT_BACKUP_RETENTION_DAYS = 30;
|
|
@@ -33780,7 +33803,7 @@ async function hasContent(folderPath) {
|
|
|
33780
33803
|
async function copyManagedFolder(source, destination) {
|
|
33781
33804
|
await import_fs_extra7.default.copy(source, destination, {
|
|
33782
33805
|
overwrite: true,
|
|
33783
|
-
dereference:
|
|
33806
|
+
dereference: os11.platform() === "win32",
|
|
33784
33807
|
filter: async (sourcePath) => {
|
|
33785
33808
|
const stat = await import_fs_extra7.default.lstat(sourcePath);
|
|
33786
33809
|
return !(stat.isSocket() || stat.isFIFO() || stat.isCharacterDevice() || stat.isBlockDevice());
|
|
@@ -34340,7 +34363,8 @@ async function setupCommand(params = {}) {
|
|
|
34340
34363
|
"customStatusline",
|
|
34341
34364
|
"aiblueprintAgents",
|
|
34342
34365
|
"aiblueprintSkills",
|
|
34343
|
-
"installCodex"
|
|
34366
|
+
"installCodex",
|
|
34367
|
+
"claudeMods"
|
|
34344
34368
|
];
|
|
34345
34369
|
console.log(source_default.green("✓ Installing all features (--skip mode)"));
|
|
34346
34370
|
} else {
|
|
@@ -34374,6 +34398,11 @@ async function setupCommand(params = {}) {
|
|
|
34374
34398
|
value: "installCodex",
|
|
34375
34399
|
name: "Codex setup - Starter config + share skills/agents with ~/.codex",
|
|
34376
34400
|
checked: true
|
|
34401
|
+
},
|
|
34402
|
+
{
|
|
34403
|
+
value: "claudeMods",
|
|
34404
|
+
name: "Claude Code mods - aiblueprint usage band + agent4everything skills sync",
|
|
34405
|
+
checked: true
|
|
34377
34406
|
}
|
|
34378
34407
|
]
|
|
34379
34408
|
}
|
|
@@ -34390,6 +34419,7 @@ async function setupCommand(params = {}) {
|
|
|
34390
34419
|
aiblueprintAgents: features.includes("aiblueprintAgents"),
|
|
34391
34420
|
aiblueprintSkills: features.includes("aiblueprintSkills"),
|
|
34392
34421
|
installCodex: features.includes("installCodex"),
|
|
34422
|
+
claudeMods: features.includes("claudeMods"),
|
|
34393
34423
|
skipInteractive
|
|
34394
34424
|
};
|
|
34395
34425
|
const s = new SimpleSpinner;
|
|
@@ -34440,6 +34470,23 @@ async function setupCommand(params = {}) {
|
|
|
34440
34470
|
s.stop("Scripts not available in repository");
|
|
34441
34471
|
}
|
|
34442
34472
|
}
|
|
34473
|
+
if (options.claudeMods) {
|
|
34474
|
+
s.start("Setting up Claude Code mods");
|
|
34475
|
+
const modsSource = await resolveClaudeAssetPath(sourceDir, "mods");
|
|
34476
|
+
if (modsSource) {
|
|
34477
|
+
const entries = await import_fs_extra9.default.readdir(modsSource, { withFileTypes: true });
|
|
34478
|
+
const mods = entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
34479
|
+
for (const mod of mods) {
|
|
34480
|
+
await import_fs_extra9.default.copy(path13.join(modsSource, mod), path13.join(claudeDir, "mods", mod), {
|
|
34481
|
+
overwrite: true
|
|
34482
|
+
});
|
|
34483
|
+
}
|
|
34484
|
+
options.installedMods = mods;
|
|
34485
|
+
s.stop(`Mods installed (${mods.join(", ")})`);
|
|
34486
|
+
} else {
|
|
34487
|
+
s.stop("Mods not available in repository");
|
|
34488
|
+
}
|
|
34489
|
+
}
|
|
34443
34490
|
if (options.aiblueprintAgents) {
|
|
34444
34491
|
s.start("Setting up AIBlueprint agents");
|
|
34445
34492
|
const agentsSource = path13.join(sourceDir, "agents");
|
|
@@ -34544,7 +34591,7 @@ async function setupCommand(params = {}) {
|
|
|
34544
34591
|
console.log(source_default.gray(`
|
|
34545
34592
|
Next steps:`));
|
|
34546
34593
|
if (options.shellShortcuts) {
|
|
34547
|
-
const platform =
|
|
34594
|
+
const platform = os12.platform();
|
|
34548
34595
|
if (platform === "win32") {
|
|
34549
34596
|
console.log(source_default.gray(" • Restart PowerShell to load the new functions"));
|
|
34550
34597
|
} else {
|
|
@@ -34574,7 +34621,7 @@ Next steps:`));
|
|
|
34574
34621
|
// src/commands/setup-terminal.ts
|
|
34575
34622
|
var import_fs_extra10 = __toESM(require_lib4(), 1);
|
|
34576
34623
|
import path14 from "path";
|
|
34577
|
-
import
|
|
34624
|
+
import os13 from "os";
|
|
34578
34625
|
import { execSync as execSync3, exec as exec2 } from "child_process";
|
|
34579
34626
|
var OHMYZSH_INSTALL_URL = "https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh";
|
|
34580
34627
|
var INSTALL_TIMEOUT = 120000;
|
|
@@ -34741,7 +34788,7 @@ plugins=(${pluginsString})`;
|
|
|
34741
34788
|
}
|
|
34742
34789
|
async function setupTerminalCommand(options = {}) {
|
|
34743
34790
|
const { skipInteractive, homeDir: customHomeDir } = options;
|
|
34744
|
-
const homeDir = customHomeDir ||
|
|
34791
|
+
const homeDir = customHomeDir || os13.homedir();
|
|
34745
34792
|
try {
|
|
34746
34793
|
console.log(source_default.blue.bold(`
|
|
34747
34794
|
\uD83D\uDDA5️ AIBlueprint Terminal Setup ${source_default.gray(`v${getVersion()}`)}
|
|
@@ -34891,24 +34938,24 @@ Next steps:`));
|
|
|
34891
34938
|
// src/commands/setup/symlinks.ts
|
|
34892
34939
|
var import_fs_extra11 = __toESM(require_lib4(), 1);
|
|
34893
34940
|
import path15 from "path";
|
|
34894
|
-
import
|
|
34941
|
+
import os14 from "os";
|
|
34895
34942
|
async function getToolPaths(tool, customFolder) {
|
|
34896
34943
|
let baseDir;
|
|
34897
34944
|
switch (tool) {
|
|
34898
34945
|
case "claude-code":
|
|
34899
|
-
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(
|
|
34946
|
+
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os14.homedir(), ".claude");
|
|
34900
34947
|
return {
|
|
34901
34948
|
baseDir,
|
|
34902
34949
|
agentsPath: path15.join(baseDir, "agents")
|
|
34903
34950
|
};
|
|
34904
34951
|
case "codex":
|
|
34905
|
-
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(
|
|
34952
|
+
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os14.homedir(), ".codex");
|
|
34906
34953
|
return {
|
|
34907
34954
|
baseDir,
|
|
34908
34955
|
agentsPath: path15.join(baseDir, "agents")
|
|
34909
34956
|
};
|
|
34910
34957
|
case "factoryai":
|
|
34911
|
-
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(
|
|
34958
|
+
baseDir = customFolder ? path15.resolve(customFolder) : path15.join(os14.homedir(), ".factory");
|
|
34912
34959
|
return {
|
|
34913
34960
|
baseDir,
|
|
34914
34961
|
agentsPath: path15.join(baseDir, "droids")
|
|
@@ -34936,7 +34983,7 @@ async function createSymlink(sourcePath, targetPath, options = {}) {
|
|
|
34936
34983
|
return false;
|
|
34937
34984
|
}
|
|
34938
34985
|
}
|
|
34939
|
-
const isWindows =
|
|
34986
|
+
const isWindows = os14.platform() === "win32";
|
|
34940
34987
|
if (isWindows) {
|
|
34941
34988
|
await import_fs_extra11.default.symlink(sourcePath, targetPath, "junction");
|
|
34942
34989
|
} else {
|
|
@@ -35780,14 +35827,14 @@ var Y2 = ({ indicator: t = "dots" } = {}) => {
|
|
|
35780
35827
|
// src/lib/agents-unifier.ts
|
|
35781
35828
|
var import_fs_extra13 = __toESM(require_lib4(), 1);
|
|
35782
35829
|
import crypto from "crypto";
|
|
35783
|
-
import
|
|
35830
|
+
import os16 from "os";
|
|
35784
35831
|
import path17 from "path";
|
|
35785
35832
|
|
|
35786
35833
|
// src/lib/backup-utils.ts
|
|
35787
35834
|
var import_fs_extra12 = __toESM(require_lib4(), 1);
|
|
35788
35835
|
import path16 from "path";
|
|
35789
|
-
import
|
|
35790
|
-
var BACKUP_BASE_DIR = path16.join(
|
|
35836
|
+
import os15 from "os";
|
|
35837
|
+
var BACKUP_BASE_DIR = path16.join(os15.homedir(), ".config", "aiblueprint", "backup");
|
|
35791
35838
|
function getBackupDir() {
|
|
35792
35839
|
return process.env.AIBLUEPRINT_BACKUP_DIR || BACKUP_BASE_DIR;
|
|
35793
35840
|
}
|
|
@@ -35834,7 +35881,7 @@ var MANAGED_FOLDERS = [".claude", ".codex", ".agents"];
|
|
|
35834
35881
|
async function copyForBackup(sourcePath, destPath) {
|
|
35835
35882
|
await import_fs_extra12.default.copy(sourcePath, destPath, {
|
|
35836
35883
|
overwrite: true,
|
|
35837
|
-
dereference:
|
|
35884
|
+
dereference: os15.platform() === "win32"
|
|
35838
35885
|
});
|
|
35839
35886
|
}
|
|
35840
35887
|
async function hasMeaningfulContent(dir) {
|
|
@@ -36560,7 +36607,7 @@ async function ensureBackupPath(result, dryRun = false) {
|
|
|
36560
36607
|
}
|
|
36561
36608
|
async function createDirectorySymlink(source, target) {
|
|
36562
36609
|
await import_fs_extra13.default.ensureDir(path17.dirname(target));
|
|
36563
|
-
if (
|
|
36610
|
+
if (os16.platform() === "win32") {
|
|
36564
36611
|
await import_fs_extra13.default.symlink(source, target, "junction");
|
|
36565
36612
|
return;
|
|
36566
36613
|
}
|
|
@@ -36568,7 +36615,7 @@ async function createDirectorySymlink(source, target) {
|
|
|
36568
36615
|
}
|
|
36569
36616
|
async function createFileSymlink(source, target) {
|
|
36570
36617
|
await import_fs_extra13.default.ensureDir(path17.dirname(target));
|
|
36571
|
-
if (
|
|
36618
|
+
if (os16.platform() === "win32") {
|
|
36572
36619
|
await import_fs_extra13.default.symlink(source, target, "file");
|
|
36573
36620
|
return;
|
|
36574
36621
|
}
|
|
@@ -37274,7 +37321,7 @@ Codex agents render failed:`), error);
|
|
|
37274
37321
|
// src/lib/session-unifier.ts
|
|
37275
37322
|
var import_fs_extra14 = __toESM(require_lib4(), 1);
|
|
37276
37323
|
import crypto2 from "crypto";
|
|
37277
|
-
import
|
|
37324
|
+
import os17 from "os";
|
|
37278
37325
|
import path18 from "path";
|
|
37279
37326
|
var MANAGED_FOLDERS2 = [".claude", ".codex", ".agents"];
|
|
37280
37327
|
var SESSION_PATHS = {
|
|
@@ -37298,7 +37345,7 @@ async function collectSnapshotSources(folders) {
|
|
|
37298
37345
|
...await listSnapshotSources(storePaths.configsDir, "config"),
|
|
37299
37346
|
...await listSnapshotSources(storePaths.backupsDir, "backup")
|
|
37300
37347
|
];
|
|
37301
|
-
if (path18.resolve(folders.rootDir) ===
|
|
37348
|
+
if (path18.resolve(folders.rootDir) === os17.homedir()) {
|
|
37302
37349
|
sources.push(...await listSnapshotSources(getBackupDir(), "legacy-backup"));
|
|
37303
37350
|
}
|
|
37304
37351
|
return sources.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -37571,7 +37618,7 @@ import path21 from "path";
|
|
|
37571
37618
|
|
|
37572
37619
|
// src/lib/pro-installer.ts
|
|
37573
37620
|
var import_fs_extra15 = __toESM(require_lib4(), 1);
|
|
37574
|
-
import
|
|
37621
|
+
import os18 from "os";
|
|
37575
37622
|
import path19 from "path";
|
|
37576
37623
|
import { exec as exec3, execFile } from "child_process";
|
|
37577
37624
|
import { promisify as promisify2 } from "util";
|
|
@@ -37604,7 +37651,7 @@ function routePath(relativePath) {
|
|
|
37604
37651
|
return { kind: "claude", relativePath };
|
|
37605
37652
|
}
|
|
37606
37653
|
function getCacheRepoDir() {
|
|
37607
|
-
return path19.join(
|
|
37654
|
+
return path19.join(os18.homedir(), ".config", "aiblueprint", "pro-repos", "aiblueprint-cli-premium");
|
|
37608
37655
|
}
|
|
37609
37656
|
async function execGitWithAuth(command, token, repoUrl, cwd) {
|
|
37610
37657
|
const authenticatedUrl = `https://x-access-token:${token}@${repoUrl.replace(/^https?:\/\//, "")}`;
|
|
@@ -37775,7 +37822,7 @@ async function installProConfigs(options) {
|
|
|
37775
37822
|
} catch (error) {
|
|
37776
37823
|
console.warn("Git caching failed, falling back to API download");
|
|
37777
37824
|
}
|
|
37778
|
-
const tempDir = path19.join(
|
|
37825
|
+
const tempDir = path19.join(os18.tmpdir(), `aiblueprint-premium-${Date.now()}`);
|
|
37779
37826
|
try {
|
|
37780
37827
|
let success = false;
|
|
37781
37828
|
for (const candidate of CONFIG_FOLDER_CANDIDATES2) {
|
|
@@ -37809,7 +37856,7 @@ async function syncAllAgentSymlinks(agentsDir, claudeDir) {
|
|
|
37809
37856
|
}
|
|
37810
37857
|
}
|
|
37811
37858
|
function getAssistantProCacheDir() {
|
|
37812
|
-
return path19.join(
|
|
37859
|
+
return path19.join(os18.homedir(), ".config", "aiblueprint", "pro-repos", "assistant-pro-skills");
|
|
37813
37860
|
}
|
|
37814
37861
|
async function runAuthenticatedGit(args, token, cwd) {
|
|
37815
37862
|
const authorization = Buffer.from(`x-access-token:${token}`).toString("base64");
|
|
@@ -37880,7 +37927,7 @@ function isYamlContentLine(line) {
|
|
|
37880
37927
|
async function ensureHermesExternalSkillsDir(hermesDir, agentsSkillsDir) {
|
|
37881
37928
|
const configPath = path19.join(hermesDir, "config.yaml");
|
|
37882
37929
|
const resolvedSkillsDir = path19.resolve(agentsSkillsDir);
|
|
37883
|
-
const defaultSkillsDir = path19.join(
|
|
37930
|
+
const defaultSkillsDir = path19.join(os18.homedir(), ".agents", "skills");
|
|
37884
37931
|
const configuredPath = resolvedSkillsDir === defaultSkillsDir ? "~/.agents/skills" : resolvedSkillsDir;
|
|
37885
37932
|
const yamlEntry = ` - ${JSON.stringify(configuredPath)}`;
|
|
37886
37933
|
await import_fs_extra15.default.ensureDir(hermesDir);
|
|
@@ -37969,15 +38016,15 @@ async function configureAssistantProConsumers(options) {
|
|
|
37969
38016
|
|
|
37970
38017
|
// src/lib/token-storage.ts
|
|
37971
38018
|
var import_fs_extra16 = __toESM(require_lib4(), 1);
|
|
37972
|
-
import
|
|
38019
|
+
import os19 from "os";
|
|
37973
38020
|
import path20 from "path";
|
|
37974
38021
|
function getConfigDir() {
|
|
37975
|
-
const platform =
|
|
38022
|
+
const platform = os19.platform();
|
|
37976
38023
|
if (platform === "win32") {
|
|
37977
|
-
const appData = process.env.APPDATA || path20.join(
|
|
38024
|
+
const appData = process.env.APPDATA || path20.join(os19.homedir(), "AppData", "Roaming");
|
|
37978
38025
|
return path20.join(appData, "aiblueprint");
|
|
37979
38026
|
} else {
|
|
37980
|
-
const configHome = process.env.XDG_CONFIG_HOME || path20.join(
|
|
38027
|
+
const configHome = process.env.XDG_CONFIG_HOME || path20.join(os19.homedir(), ".config");
|
|
37981
38028
|
return path20.join(configHome, "aiblueprint");
|
|
37982
38029
|
}
|
|
37983
38030
|
}
|
|
@@ -38033,13 +38080,13 @@ async function getAssistantProToken() {
|
|
|
38033
38080
|
function getTokenInfo() {
|
|
38034
38081
|
return {
|
|
38035
38082
|
path: getTokenFilePath2(),
|
|
38036
|
-
platform:
|
|
38083
|
+
platform: os19.platform()
|
|
38037
38084
|
};
|
|
38038
38085
|
}
|
|
38039
38086
|
function getAssistantProTokenInfo() {
|
|
38040
38087
|
return {
|
|
38041
38088
|
path: getAssistantProTokenFilePath(),
|
|
38042
|
-
platform:
|
|
38089
|
+
platform: os19.platform()
|
|
38043
38090
|
};
|
|
38044
38091
|
}
|
|
38045
38092
|
|
|
@@ -39219,19 +39266,19 @@ async function configsBackupsCleanCommand(options = {}) {
|
|
|
39219
39266
|
}
|
|
39220
39267
|
|
|
39221
39268
|
// src/commands/openclaw-pro.ts
|
|
39222
|
-
import
|
|
39269
|
+
import os22 from "os";
|
|
39223
39270
|
import path25 from "path";
|
|
39224
39271
|
|
|
39225
39272
|
// src/lib/openclaw-installer.ts
|
|
39226
39273
|
var import_fs_extra19 = __toESM(require_lib4(), 1);
|
|
39227
|
-
import
|
|
39274
|
+
import os20 from "os";
|
|
39228
39275
|
import path23 from "path";
|
|
39229
39276
|
import { exec as exec4 } from "child_process";
|
|
39230
39277
|
import { promisify as promisify3 } from "util";
|
|
39231
39278
|
var execAsync3 = promisify3(exec4);
|
|
39232
39279
|
var OPENCLAW_PRO_REPO = "Melvynx/openclawpro";
|
|
39233
39280
|
function getCacheRepoDir2() {
|
|
39234
|
-
return path23.join(
|
|
39281
|
+
return path23.join(os20.homedir(), ".config", "openclaw", "pro-repos", "openclawpro");
|
|
39235
39282
|
}
|
|
39236
39283
|
async function execGitWithAuth2(command, token, repoUrl, cwd) {
|
|
39237
39284
|
const authenticatedUrl = `https://x-access-token:${token}@${repoUrl.replace(/^https?:\/\//, "")}`;
|
|
@@ -39280,7 +39327,7 @@ async function copyConfigFromCache2(cacheConfigDir, targetDir, onProgress) {
|
|
|
39280
39327
|
}
|
|
39281
39328
|
async function installOpenclawProConfigs(options) {
|
|
39282
39329
|
const { githubToken, openclawFolder, onProgress } = options;
|
|
39283
|
-
const targetFolder = openclawFolder || path23.join(
|
|
39330
|
+
const targetFolder = openclawFolder || path23.join(os20.homedir(), ".openclaw");
|
|
39284
39331
|
try {
|
|
39285
39332
|
const cacheConfigDir = await cloneOrUpdateRepo2(githubToken);
|
|
39286
39333
|
await copyConfigFromCache2(cacheConfigDir, targetFolder, onProgress);
|
|
@@ -39292,14 +39339,14 @@ async function installOpenclawProConfigs(options) {
|
|
|
39292
39339
|
|
|
39293
39340
|
// src/lib/openclaw-token-storage.ts
|
|
39294
39341
|
var import_fs_extra20 = __toESM(require_lib4(), 1);
|
|
39295
|
-
import
|
|
39342
|
+
import os21 from "os";
|
|
39296
39343
|
import path24 from "path";
|
|
39297
39344
|
function getConfigDir2() {
|
|
39298
|
-
const platform =
|
|
39345
|
+
const platform = os21.platform();
|
|
39299
39346
|
if (platform === "win32") {
|
|
39300
|
-
return path24.join(process.env.APPDATA ||
|
|
39347
|
+
return path24.join(process.env.APPDATA || os21.homedir(), "openclaw");
|
|
39301
39348
|
}
|
|
39302
|
-
return path24.join(
|
|
39349
|
+
return path24.join(os21.homedir(), ".config", "openclaw");
|
|
39303
39350
|
}
|
|
39304
39351
|
function getTokenPath() {
|
|
39305
39352
|
return path24.join(getConfigDir2(), "token.txt");
|
|
@@ -39320,7 +39367,7 @@ async function getOpenclawToken() {
|
|
|
39320
39367
|
function getOpenclawTokenInfo() {
|
|
39321
39368
|
return {
|
|
39322
39369
|
path: getTokenPath(),
|
|
39323
|
-
platform:
|
|
39370
|
+
platform: os21.platform()
|
|
39324
39371
|
};
|
|
39325
39372
|
}
|
|
39326
39373
|
|
|
@@ -39432,7 +39479,7 @@ async function openclawProSetupCommand(options = {}) {
|
|
|
39432
39479
|
Se(source_default.red("❌ Not activated"));
|
|
39433
39480
|
process.exit(1);
|
|
39434
39481
|
}
|
|
39435
|
-
const openclawDir = options.folder ? path25.resolve(options.folder) : path25.join(
|
|
39482
|
+
const openclawDir = options.folder ? path25.resolve(options.folder) : path25.join(os22.homedir(), ".openclaw");
|
|
39436
39483
|
const spinner = Y2();
|
|
39437
39484
|
const onProgress = (file, type) => {
|
|
39438
39485
|
spinner.message(`Installing: ${source_default.cyan(file)} ${source_default.gray(`(${type})`)}`);
|
|
@@ -39606,10 +39653,10 @@ var import_fs_extra23 = __toESM(require_lib4(), 1);
|
|
|
39606
39653
|
import { spawn as spawn2 } from "child_process";
|
|
39607
39654
|
import { execSync as execSync4 } from "child_process";
|
|
39608
39655
|
import path27 from "path";
|
|
39609
|
-
import
|
|
39656
|
+
import os23 from "os";
|
|
39610
39657
|
function checkCommand2(cmd) {
|
|
39611
39658
|
try {
|
|
39612
|
-
const isWindows =
|
|
39659
|
+
const isWindows = os23.platform() === "win32";
|
|
39613
39660
|
const whichCmd = isWindows ? `where ${cmd}` : `which ${cmd}`;
|
|
39614
39661
|
execSync4(whichCmd, { stdio: "ignore" });
|
|
39615
39662
|
return true;
|