aiblueprint-cli 1.4.49 → 1.4.51
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 +17 -17
- package/dist/cli.js +111 -206
- package/package.json +5 -4
- /package/{ai-config → ai-coding}/.claude-plugin/plugin.json +0 -0
- /package/{ai-config → ai-coding}/agents/action.md +0 -0
- /package/{ai-config → ai-coding}/agents/explore-codebase.md +0 -0
- /package/{ai-config → ai-coding}/agents/explore-docs.md +0 -0
- /package/{ai-config → ai-coding}/agents/websearch.md +0 -0
- /package/{ai-config → ai-coding}/scripts/.claude/commands/fix-on-my-computer.md +0 -0
- /package/{ai-config → ai-coding}/scripts/CLAUDE.md +0 -0
- /package/{ai-config → ai-coding}/scripts/biome.json +0 -0
- /package/{ai-config → ai-coding}/scripts/bun.lockb +0 -0
- /package/{ai-config → ai-coding}/scripts/package.json +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/CLAUDE.md +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/README.md +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/__tests__/context.test.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/__tests__/formatters.test.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/__tests__/statusline.test.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/data/.gitignore +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/data/.gitkeep +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/defaults.json +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/docs/ARCHITECTURE.md +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/fixtures/mock-transcript.jsonl +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/fixtures/test-input.json +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/index.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/config-types.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/config.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/context.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/formatters.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/git.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/menu-factories.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/presets.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/render-pure.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/types.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/lib/utils.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/src/tests/spend-v2.test.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/statusline.config.json +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/test-with-fixtures.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/test.ts +0 -0
- /package/{ai-config → ai-coding}/scripts/statusline/tsconfig.json +0 -0
- /package/{ai-config → ai-coding}/scripts/tsconfig.json +0 -0
- /package/{ai-config → ai-coding}/skills/apex/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/scripts/setup-templates.sh +0 -0
- /package/{ai-config → ai-coding}/skills/apex/scripts/update-progress.sh +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-00-init.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-00b-branch.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-00b-economy.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-00b-interactive.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-01-analyze.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-02-plan.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-03-execute.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/steps/step-04-validate.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/00-context.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/01-analyze.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/02-plan.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/03-execute.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/04-validate.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/README.md +0 -0
- /package/{ai-config → ai-coding}/skills/apex/templates/step-complete.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/references/comprehensive-example.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/references/optimize-guide.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/references/project-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/references/prompting-techniques.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/references/rules-directory-guide.md +0 -0
- /package/{ai-config → ai-coding}/skills/claude-memory/references/section-templates.md +0 -0
- /package/{ai-config → ai-coding}/skills/codex-environment/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/commit/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/create-pr/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/fix-errors/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/fix-grammar/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/fix-pr-comments/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/merge/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/oneshot/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/anthropic-best-practices.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/anti-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/clarity-principles.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/context-management.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/few-shot-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/openai-best-practices.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/prompt-templates.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/reasoning-techniques.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/system-prompt-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/prompt-creator/references/xml-structure.md +0 -0
- /package/{ai-config → ai-coding}/skills/ralph-loop/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/ralph-loop/scripts/setup.sh +0 -0
- /package/{ai-config → ai-coding}/skills/ralph-loop/steps/step-00-init.md +0 -0
- /package/{ai-config → ai-coding}/skills/ralph-loop/steps/step-01-interactive-prd.md +0 -0
- /package/{ai-config → ai-coding}/skills/ralph-loop/steps/step-02-create-stories.md +0 -0
- /package/{ai-config → ai-coding}/skills/ralph-loop/steps/step-03-finish.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/LICENSE.txt +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/package.json +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/output-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/progressive-disclosure-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/prompting-integration.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/real-world-examples.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/script-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/workflows.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/references/xml-tag-guide.md +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/scripts/init-skill.ts +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/scripts/package-skill.ts +0 -0
- /package/{ai-config → ai-coding}/skills/skill-creator/scripts/validate.ts +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/context-management.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/debugging-agents.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/error-handling-and-recovery.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/evaluation-and-testing.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/orchestration-patterns.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/subagents.md +0 -0
- /package/{ai-config → ai-coding}/skills/subagent-creator/references/writing-subagent-prompts.md +0 -0
- /package/{ai-config → ai-coding}/skills/ultrathink/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/SKILL.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/scripts/setup-templates.sh +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/scripts/update-progress.sh +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-00-init.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-00b-branch.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-00b-economy.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-00b-interactive.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-01-analyze.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-02-plan.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-03-execute.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/steps/step-04-validate.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/00-context.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/01-analyze.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/02-plan.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/03-execute.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/04-validate.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/README.md +0 -0
- /package/{ai-config → ai-coding}/skills/workflow-apex-free/templates/step-complete.md +0 -0
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Supercharge Claude Code with security hooks, custom commands, intelligent status
|
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
# Run setup (no installation required)
|
|
11
|
-
npx aiblueprint-cli@latest
|
|
11
|
+
npx aiblueprint-cli@latest ai-coding setup
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
## ✨ Features
|
|
@@ -32,7 +32,7 @@ npx aiblueprint-cli@latest claude-code setup
|
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# Run without installation
|
|
35
|
-
npx aiblueprint-cli@latest
|
|
35
|
+
npx aiblueprint-cli@latest ai-coding setup
|
|
36
36
|
|
|
37
37
|
# Or install globally
|
|
38
38
|
npm install -g aiblueprint-cli
|
|
@@ -44,13 +44,13 @@ npm install -g aiblueprint-cli
|
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
46
|
# Interactive setup
|
|
47
|
-
npx aiblueprint-cli@latest
|
|
47
|
+
npx aiblueprint-cli@latest ai-coding setup
|
|
48
48
|
|
|
49
49
|
# Install all features (no prompts)
|
|
50
|
-
npx aiblueprint-cli@latest
|
|
50
|
+
npx aiblueprint-cli@latest ai-coding setup --skip
|
|
51
51
|
|
|
52
52
|
# Custom location
|
|
53
|
-
npx aiblueprint-cli@latest
|
|
53
|
+
npx aiblueprint-cli@latest ai-coding setup --folder ~/.my-claude
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
### Statusline Scripts
|
|
@@ -59,16 +59,16 @@ Run utility scripts from anywhere:
|
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
# List available scripts
|
|
62
|
-
npx aiblueprint-cli@latest
|
|
62
|
+
npx aiblueprint-cli@latest ai-coding statusline --list
|
|
63
63
|
|
|
64
64
|
# Today's spending report
|
|
65
|
-
npx aiblueprint-cli@latest
|
|
65
|
+
npx aiblueprint-cli@latest ai-coding statusline spend:today
|
|
66
66
|
|
|
67
67
|
# Weekly usage analysis
|
|
68
|
-
npx aiblueprint-cli@latest
|
|
68
|
+
npx aiblueprint-cli@latest ai-coding statusline weekly
|
|
69
69
|
|
|
70
70
|
# Configure statusline
|
|
71
|
-
npx aiblueprint-cli@latest
|
|
71
|
+
npx aiblueprint-cli@latest ai-coding statusline config
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
**Available scripts:**
|
|
@@ -82,14 +82,14 @@ npx aiblueprint-cli@latest claude-code statusline config
|
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
84
|
# Add specific hooks
|
|
85
|
-
npx aiblueprint-cli@latest
|
|
85
|
+
npx aiblueprint-cli@latest ai-coding add hook post-edit-typescript
|
|
86
86
|
|
|
87
87
|
# Manage commands
|
|
88
|
-
npx aiblueprint-cli@latest
|
|
89
|
-
npx aiblueprint-cli@latest
|
|
88
|
+
npx aiblueprint-cli@latest ai-coding add commands
|
|
89
|
+
npx aiblueprint-cli@latest ai-coding add commands commit
|
|
90
90
|
|
|
91
91
|
# Create symlinks between tools
|
|
92
|
-
npx aiblueprint-cli@latest
|
|
92
|
+
npx aiblueprint-cli@latest ai-coding symlink
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
## 📚 What You Get
|
|
@@ -174,10 +174,10 @@ Unlock advanced features at [mlv.sh/claude-cli](https://mlv.sh/claude-cli)
|
|
|
174
174
|
|
|
175
175
|
```bash
|
|
176
176
|
# Activate premium
|
|
177
|
-
npx aiblueprint-cli@latest
|
|
177
|
+
npx aiblueprint-cli@latest ai-coding pro activate YOUR_TOKEN
|
|
178
178
|
|
|
179
179
|
# Setup premium configs
|
|
180
|
-
npx aiblueprint-cli@latest
|
|
180
|
+
npx aiblueprint-cli@latest ai-coding pro setup
|
|
181
181
|
```
|
|
182
182
|
|
|
183
183
|
## 🛠️ Development
|
|
@@ -189,8 +189,8 @@ cd aiblueprint-cli
|
|
|
189
189
|
bun install
|
|
190
190
|
|
|
191
191
|
# Development mode
|
|
192
|
-
bun run dev
|
|
193
|
-
bun run dev
|
|
192
|
+
bun run dev ai-coding setup
|
|
193
|
+
bun run dev ai-coding statusline --list
|
|
194
194
|
|
|
195
195
|
# Run tests
|
|
196
196
|
bun run test:run
|
package/dist/cli.js
CHANGED
|
@@ -847,7 +847,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
847
847
|
this._exitCallback = (err) => {
|
|
848
848
|
if (err.code !== "commander.executeSubCommandAsync") {
|
|
849
849
|
throw err;
|
|
850
|
-
}
|
|
850
|
+
}
|
|
851
851
|
};
|
|
852
852
|
}
|
|
853
853
|
return this;
|
|
@@ -26102,7 +26102,7 @@ var require_dbcs_codec = __commonJS((exports) => {
|
|
|
26102
26102
|
if (resCode !== undefined) {
|
|
26103
26103
|
dbcsCode = resCode;
|
|
26104
26104
|
nextChar = uCode;
|
|
26105
|
-
}
|
|
26105
|
+
}
|
|
26106
26106
|
}
|
|
26107
26107
|
seqObj = undefined;
|
|
26108
26108
|
} else if (uCode >= 0) {
|
|
@@ -26167,7 +26167,7 @@ var require_dbcs_codec = __commonJS((exports) => {
|
|
|
26167
26167
|
newBuf[j++] = dbcsCode >> 8;
|
|
26168
26168
|
newBuf[j++] = dbcsCode & 255;
|
|
26169
26169
|
}
|
|
26170
|
-
}
|
|
26170
|
+
}
|
|
26171
26171
|
this.seqObj = undefined;
|
|
26172
26172
|
}
|
|
26173
26173
|
if (this.leadSurrogate !== -1) {
|
|
@@ -33133,7 +33133,7 @@ async function cleanupRepository(repoPath) {
|
|
|
33133
33133
|
}
|
|
33134
33134
|
}
|
|
33135
33135
|
async function resolveConfigDir(repoPath) {
|
|
33136
|
-
const candidates =
|
|
33136
|
+
const candidates = CONFIG_FOLDER_CANDIDATES;
|
|
33137
33137
|
for (const name of candidates) {
|
|
33138
33138
|
const candidate = path6.join(repoPath, name);
|
|
33139
33139
|
if (await import_fs_extra4.default.pathExists(candidate)) {
|
|
@@ -33142,6 +33142,7 @@ async function resolveConfigDir(repoPath) {
|
|
|
33142
33142
|
}
|
|
33143
33143
|
return null;
|
|
33144
33144
|
}
|
|
33145
|
+
var CONFIG_FOLDER_CANDIDATES = ["ai-coding", "claude-code-config", "ai-config"];
|
|
33145
33146
|
|
|
33146
33147
|
// src/lib/version.ts
|
|
33147
33148
|
import { readFileSync as readFileSync2 } from "fs";
|
|
@@ -33654,9 +33655,9 @@ async function setupCommand(params = {}) {
|
|
|
33654
33655
|
let repoPath = null;
|
|
33655
33656
|
try {
|
|
33656
33657
|
console.log(source_default.blue.bold(`
|
|
33657
|
-
\uD83D\uDE80 AIBlueprint
|
|
33658
|
+
\uD83D\uDE80 AIBlueprint AI Coding Setup ${source_default.gray(`v${getVersion()}`)}
|
|
33658
33659
|
`));
|
|
33659
|
-
console.log(source_default.bgBlue(" Setting up your
|
|
33660
|
+
console.log(source_default.bgBlue(" Setting up your AI coding environment "));
|
|
33660
33661
|
let features;
|
|
33661
33662
|
if (skipInteractive) {
|
|
33662
33663
|
features = [
|
|
@@ -33752,7 +33753,7 @@ async function setupCommand(params = {}) {
|
|
|
33752
33753
|
const sourceDir = await resolveConfigDir(repoPath);
|
|
33753
33754
|
if (!sourceDir) {
|
|
33754
33755
|
await cleanupRepository(repoPath);
|
|
33755
|
-
throw new Error("Configuration directory not found in cloned repository (looked for ai-
|
|
33756
|
+
throw new Error("Configuration directory not found in cloned repository (looked for ai-coding/, claude-code-config/, and ai-config/)");
|
|
33756
33757
|
}
|
|
33757
33758
|
s.stop("Repository cloned successfully");
|
|
33758
33759
|
if (options.shellShortcuts) {
|
|
@@ -35089,6 +35090,7 @@ import { promisify as promisify2 } from "util";
|
|
|
35089
35090
|
var execAsync2 = promisify2(exec3);
|
|
35090
35091
|
var PREMIUM_REPO = "Melvynx/aiblueprint-cli-premium";
|
|
35091
35092
|
var PREMIUM_BRANCH = "main";
|
|
35093
|
+
var CONFIG_FOLDER_CANDIDATES2 = ["ai-coding", "claude-code-config", "ai-config"];
|
|
35092
35094
|
function resolveBaseDir(relativePath, claudeDir, agentsDir) {
|
|
35093
35095
|
const firstSeg = relativePath.split(path13.sep)[0];
|
|
35094
35096
|
if (isAgentCategory(firstSeg)) {
|
|
@@ -35123,13 +35125,13 @@ async function cloneOrUpdateRepo(token) {
|
|
|
35123
35125
|
await import_fs_extra10.default.ensureDir(path13.dirname(cacheDir));
|
|
35124
35126
|
await execGitWithAuth(`clone ${repoUrl} ${cacheDir}`, token, repoUrl);
|
|
35125
35127
|
}
|
|
35126
|
-
for (const candidate of
|
|
35128
|
+
for (const candidate of CONFIG_FOLDER_CANDIDATES2) {
|
|
35127
35129
|
const candidatePath = path13.join(cacheDir, candidate);
|
|
35128
35130
|
if (await import_fs_extra10.default.pathExists(candidatePath)) {
|
|
35129
35131
|
return candidatePath;
|
|
35130
35132
|
}
|
|
35131
35133
|
}
|
|
35132
|
-
throw new Error("Premium repo missing config folder (ai-
|
|
35134
|
+
throw new Error("Premium repo missing config folder (ai-coding or claude-code-config)");
|
|
35133
35135
|
}
|
|
35134
35136
|
async function copyConfigFromCache(cacheConfigDir, claudeDir, agentsDir, onProgress) {
|
|
35135
35137
|
const walk = async (dir, baseDir = dir) => {
|
|
@@ -35216,7 +35218,7 @@ async function downloadDirectoryFromPrivateGitHub(repo, branch, dirPath, targetD
|
|
|
35216
35218
|
for (const file of files) {
|
|
35217
35219
|
const relativePath = dirPath ? `${dirPath}/${file.name}` : file.name;
|
|
35218
35220
|
const targetPath = path13.join(targetDir, file.name);
|
|
35219
|
-
const displayPath = relativePath.replace(
|
|
35221
|
+
const displayPath = relativePath.replace(/^(ai-coding|claude-code-config|ai-config)\//, "");
|
|
35220
35222
|
if (file.type === "file") {
|
|
35221
35223
|
onProgress?.(displayPath, "file");
|
|
35222
35224
|
await downloadFromPrivateGitHub(repo, branch, relativePath, targetPath, githubToken);
|
|
@@ -35247,7 +35249,7 @@ async function installProConfigs(options) {
|
|
|
35247
35249
|
const tempDir = path13.join(os13.tmpdir(), `aiblueprint-premium-${Date.now()}`);
|
|
35248
35250
|
try {
|
|
35249
35251
|
let success = false;
|
|
35250
|
-
for (const candidate of
|
|
35252
|
+
for (const candidate of CONFIG_FOLDER_CANDIDATES2) {
|
|
35251
35253
|
success = await downloadDirectoryFromPrivateGitHub(PREMIUM_REPO, PREMIUM_BRANCH, candidate, tempDir, githubToken, onProgress);
|
|
35252
35254
|
if (success)
|
|
35253
35255
|
break;
|
|
@@ -35457,7 +35459,7 @@ async function proActivateCommand(userToken) {
|
|
|
35457
35459
|
M2.info(`Product: ${data.product.title}`);
|
|
35458
35460
|
M2.info(`Token saved to: ${tokenInfo.path}`);
|
|
35459
35461
|
M2.info(source_default.cyan(`
|
|
35460
|
-
\uD83D\uDCA1 Next step: Run 'npx aiblueprint-cli@latest
|
|
35462
|
+
\uD83D\uDCA1 Next step: Run 'npx aiblueprint-cli@latest ai-coding pro setup' to install premium configs`));
|
|
35461
35463
|
trackEvent("pro-activate");
|
|
35462
35464
|
Se(source_default.green("✅ Activation complete!"));
|
|
35463
35465
|
} catch (error) {
|
|
@@ -35476,7 +35478,7 @@ async function proStatusCommand() {
|
|
|
35476
35478
|
const token = await getToken();
|
|
35477
35479
|
if (!token) {
|
|
35478
35480
|
M2.warn("No token found");
|
|
35479
|
-
M2.info("Run: npx aiblueprint-cli@latest
|
|
35481
|
+
M2.info("Run: npx aiblueprint-cli@latest ai-coding pro activate <token>");
|
|
35480
35482
|
M2.info("Get your token at: https://mlv.sh/claude-cli");
|
|
35481
35483
|
Se(source_default.yellow("⚠️ Not activated"));
|
|
35482
35484
|
process.exit(0);
|
|
@@ -35500,7 +35502,7 @@ async function proSetupCommand(options = {}) {
|
|
|
35500
35502
|
const githubToken = await getToken();
|
|
35501
35503
|
if (!githubToken) {
|
|
35502
35504
|
M2.error("No token found");
|
|
35503
|
-
M2.info("Run: npx aiblueprint-cli@latest
|
|
35505
|
+
M2.info("Run: npx aiblueprint-cli@latest ai-coding pro activate <token>");
|
|
35504
35506
|
Se(source_default.red("❌ Not activated"));
|
|
35505
35507
|
process.exit(1);
|
|
35506
35508
|
}
|
|
@@ -35570,7 +35572,7 @@ async function proUpdateCommand(options = {}) {
|
|
|
35570
35572
|
const githubToken = await getToken();
|
|
35571
35573
|
if (!githubToken) {
|
|
35572
35574
|
M2.error("No token found");
|
|
35573
|
-
M2.info("Run: npx aiblueprint-cli@latest
|
|
35575
|
+
M2.info("Run: npx aiblueprint-cli@latest ai-coding pro activate <token>");
|
|
35574
35576
|
Se(source_default.red("❌ Not activated"));
|
|
35575
35577
|
process.exit(1);
|
|
35576
35578
|
}
|
|
@@ -35605,6 +35607,7 @@ import path16 from "path";
|
|
|
35605
35607
|
import crypto from "crypto";
|
|
35606
35608
|
var PREMIUM_REPO2 = "Melvynx/aiblueprint-cli-premium";
|
|
35607
35609
|
var PREMIUM_BRANCH2 = "main";
|
|
35610
|
+
var CONFIG_FOLDER_CANDIDATES3 = ["ai-coding", "claude-code-config", "ai-config"];
|
|
35608
35611
|
function computeFileSha(content) {
|
|
35609
35612
|
const size = content.length;
|
|
35610
35613
|
const header = `blob ${size}\x00`;
|
|
@@ -35615,7 +35618,7 @@ var resolvedConfigFolder = null;
|
|
|
35615
35618
|
async function resolveRemoteConfigFolder(githubToken) {
|
|
35616
35619
|
if (resolvedConfigFolder)
|
|
35617
35620
|
return resolvedConfigFolder;
|
|
35618
|
-
for (const candidate of
|
|
35621
|
+
for (const candidate of CONFIG_FOLDER_CANDIDATES3) {
|
|
35619
35622
|
const apiUrl = `https://api.github.com/repos/${PREMIUM_REPO2}/contents/${candidate}?ref=${PREMIUM_BRANCH2}`;
|
|
35620
35623
|
const response = await fetch(apiUrl, {
|
|
35621
35624
|
headers: {
|
|
@@ -35628,8 +35631,8 @@ async function resolveRemoteConfigFolder(githubToken) {
|
|
|
35628
35631
|
return candidate;
|
|
35629
35632
|
}
|
|
35630
35633
|
}
|
|
35631
|
-
resolvedConfigFolder = "ai-
|
|
35632
|
-
return "ai-
|
|
35634
|
+
resolvedConfigFolder = "ai-coding";
|
|
35635
|
+
return "ai-coding";
|
|
35633
35636
|
}
|
|
35634
35637
|
async function listRemoteDirectory(dirPath, githubToken) {
|
|
35635
35638
|
const configFolder = await resolveRemoteConfigFolder(githubToken);
|
|
@@ -35784,39 +35787,18 @@ async function analyzeCategory(category, claudeDir, agentsDir, githubToken) {
|
|
|
35784
35787
|
}
|
|
35785
35788
|
}
|
|
35786
35789
|
}
|
|
35787
|
-
const migrationTopLevels = new Set;
|
|
35788
35790
|
if (useAgents) {
|
|
35789
35791
|
const agentsTopLevels = new Set;
|
|
35790
35792
|
for (const localPath of localSet) {
|
|
35791
35793
|
agentsTopLevels.add(localPath.split("/")[0]);
|
|
35792
35794
|
}
|
|
35793
|
-
for (const top of agentsTopLevels) {
|
|
35794
|
-
if (remoteTopLevels.has(top))
|
|
35795
|
-
continue;
|
|
35796
|
-
if (migrationTopLevels.has(top))
|
|
35797
|
-
continue;
|
|
35798
|
-
const fullPath = path16.join(localDir, top);
|
|
35799
|
-
const stat = await import_fs_extra13.default.stat(fullPath).catch(() => null);
|
|
35800
|
-
if (!stat)
|
|
35801
|
-
continue;
|
|
35802
|
-
migrationTopLevels.add(top);
|
|
35803
|
-
items.push({
|
|
35804
|
-
name: top,
|
|
35805
|
-
relativePath: `${category}/${top}`,
|
|
35806
|
-
status: "migration",
|
|
35807
|
-
category,
|
|
35808
|
-
isFolder: stat.isDirectory(),
|
|
35809
|
-
migrationKind: "preserve-in-agents"
|
|
35810
|
-
});
|
|
35811
|
-
}
|
|
35812
35795
|
const claudeCategoryDir = path16.join(claudeDir, category);
|
|
35813
35796
|
const claudeRealEntries = await listClaudeRealTopLevel(claudeCategoryDir);
|
|
35814
35797
|
for (const top of claudeRealEntries) {
|
|
35815
|
-
if (
|
|
35798
|
+
if (!remoteTopLevels.has(top))
|
|
35816
35799
|
continue;
|
|
35817
|
-
if (
|
|
35800
|
+
if (agentsTopLevels.has(top))
|
|
35818
35801
|
continue;
|
|
35819
|
-
migrationTopLevels.add(top);
|
|
35820
35802
|
items.push({
|
|
35821
35803
|
name: top,
|
|
35822
35804
|
relativePath: `${category}/${top}`,
|
|
@@ -35827,39 +35809,6 @@ async function analyzeCategory(category, claudeDir, agentsDir, githubToken) {
|
|
|
35827
35809
|
});
|
|
35828
35810
|
}
|
|
35829
35811
|
}
|
|
35830
|
-
const deletedPaths = new Set;
|
|
35831
|
-
for (const localPath of localSet) {
|
|
35832
|
-
if (remoteSet.has(localPath))
|
|
35833
|
-
continue;
|
|
35834
|
-
const topLevel = localPath.split("/")[0];
|
|
35835
|
-
if (migrationTopLevels.has(topLevel))
|
|
35836
|
-
continue;
|
|
35837
|
-
const pathParts = localPath.split("/");
|
|
35838
|
-
const parentAlreadyDeleted = pathParts.some((_4, idx) => {
|
|
35839
|
-
if (idx === 0)
|
|
35840
|
-
return false;
|
|
35841
|
-
const parentPath = pathParts.slice(0, idx).join("/");
|
|
35842
|
-
return deletedPaths.has(parentPath);
|
|
35843
|
-
});
|
|
35844
|
-
if (parentAlreadyDeleted) {
|
|
35845
|
-
continue;
|
|
35846
|
-
}
|
|
35847
|
-
const fullPath = path16.join(localDir, localPath);
|
|
35848
|
-
const stat = await import_fs_extra13.default.stat(fullPath).catch(() => null);
|
|
35849
|
-
if (stat) {
|
|
35850
|
-
const isFolder = stat.isDirectory();
|
|
35851
|
-
items.push({
|
|
35852
|
-
name: localPath,
|
|
35853
|
-
relativePath: `${category}/${localPath}`,
|
|
35854
|
-
status: "deleted",
|
|
35855
|
-
category,
|
|
35856
|
-
isFolder
|
|
35857
|
-
});
|
|
35858
|
-
if (isFolder) {
|
|
35859
|
-
deletedPaths.add(localPath);
|
|
35860
|
-
}
|
|
35861
|
-
}
|
|
35862
|
-
}
|
|
35863
35812
|
return items;
|
|
35864
35813
|
}
|
|
35865
35814
|
async function analyzeSyncChanges(claudeDir, githubToken, agentsDir) {
|
|
@@ -35925,31 +35874,21 @@ async function syncSelectedItems(claudeDir, items, githubToken, agentsDir, onPro
|
|
|
35925
35874
|
const agentsTop = path16.join(agentsDir, item.category, topName);
|
|
35926
35875
|
const claudeTop = path16.join(claudeDir, item.category, topName);
|
|
35927
35876
|
try {
|
|
35928
|
-
|
|
35929
|
-
|
|
35930
|
-
|
|
35931
|
-
|
|
35932
|
-
|
|
35933
|
-
continue;
|
|
35934
|
-
}
|
|
35935
|
-
const agentsExists = await import_fs_extra13.default.pathExists(agentsTop);
|
|
35936
|
-
if (agentsExists) {
|
|
35937
|
-
onProgress?.(item.relativePath, "skipping (already in .agents)");
|
|
35938
|
-
failed++;
|
|
35939
|
-
continue;
|
|
35940
|
-
}
|
|
35941
|
-
onProgress?.(item.relativePath, "moving to .agents");
|
|
35942
|
-
await import_fs_extra13.default.ensureDir(path16.dirname(agentsTop));
|
|
35943
|
-
await import_fs_extra13.default.move(claudeTop, agentsTop);
|
|
35944
|
-
} else {
|
|
35945
|
-
const claudeStat = await import_fs_extra13.default.lstat(claudeTop).catch(() => null);
|
|
35946
|
-
if (claudeStat && !claudeStat.isSymbolicLink()) {
|
|
35947
|
-
onProgress?.(item.relativePath, "skipping (real dir in .claude)");
|
|
35948
|
-
failed++;
|
|
35949
|
-
continue;
|
|
35950
|
-
}
|
|
35951
|
-
onProgress?.(item.relativePath, "preserving in .agents");
|
|
35877
|
+
const claudeStat = await import_fs_extra13.default.lstat(claudeTop).catch(() => null);
|
|
35878
|
+
if (!claudeStat || claudeStat.isSymbolicLink()) {
|
|
35879
|
+
onProgress?.(item.relativePath, "skipping (no real dir to migrate)");
|
|
35880
|
+
failed++;
|
|
35881
|
+
continue;
|
|
35952
35882
|
}
|
|
35883
|
+
const agentsExists = await import_fs_extra13.default.pathExists(agentsTop);
|
|
35884
|
+
if (agentsExists) {
|
|
35885
|
+
onProgress?.(item.relativePath, "skipping (already in .agents)");
|
|
35886
|
+
failed++;
|
|
35887
|
+
continue;
|
|
35888
|
+
}
|
|
35889
|
+
onProgress?.(item.relativePath, "moving to .agents");
|
|
35890
|
+
await import_fs_extra13.default.ensureDir(path16.dirname(agentsTop));
|
|
35891
|
+
await import_fs_extra13.default.move(claudeTop, agentsTop);
|
|
35953
35892
|
migrated++;
|
|
35954
35893
|
touchedAgentCategories.add(item.category);
|
|
35955
35894
|
} catch {
|
|
@@ -36014,7 +35953,7 @@ function formatItem(item) {
|
|
|
36014
35953
|
migration: source_default.blue
|
|
36015
35954
|
};
|
|
36016
35955
|
const folderPrefix = item.isFolder ? "\uD83D\uDCC1 " : "";
|
|
36017
|
-
const suffix = item.status === "migration"
|
|
35956
|
+
const suffix = item.status === "migration" ? source_default.gray(" (move .claude → .agents)") : "";
|
|
36018
35957
|
return `${icons[item.status]} ${folderPrefix}${colors12[item.status](item.relativePath)}${suffix}`;
|
|
36019
35958
|
}
|
|
36020
35959
|
function groupByCategory(items) {
|
|
@@ -36141,7 +36080,7 @@ async function proSyncCommand(options = {}) {
|
|
|
36141
36080
|
const githubToken = await getToken();
|
|
36142
36081
|
if (!githubToken) {
|
|
36143
36082
|
M2.error("No token found");
|
|
36144
|
-
M2.info("Run: npx aiblueprint-cli@latest
|
|
36083
|
+
M2.info("Run: npx aiblueprint-cli@latest ai-coding pro activate <token>");
|
|
36145
36084
|
Se(source_default.red("❌ Not activated"));
|
|
36146
36085
|
process.exit(1);
|
|
36147
36086
|
}
|
|
@@ -36164,7 +36103,6 @@ async function proSyncCommand(options = {}) {
|
|
|
36164
36103
|
if (result.migrationCount > 0) {
|
|
36165
36104
|
summaryParts.push(source_default.blue(`${result.migrationCount} to migrate`));
|
|
36166
36105
|
}
|
|
36167
|
-
summaryParts.push(source_default.red(`${result.deletedCount} to remove`));
|
|
36168
36106
|
summaryParts.push(source_default.gray(`${result.unchangedCount} unchanged`));
|
|
36169
36107
|
M2.info(`Found: ${summaryParts.join(", ")}`);
|
|
36170
36108
|
M2.message("");
|
|
@@ -36189,9 +36127,7 @@ async function proSyncCommand(options = {}) {
|
|
|
36189
36127
|
const choices = createSelectionChoices(changedItems);
|
|
36190
36128
|
const newItems = changedItems.filter((i) => i.status === "new");
|
|
36191
36129
|
const modifiedItems = changedItems.filter((i) => i.status === "modified");
|
|
36192
|
-
const deletedItems = changedItems.filter((i) => i.status === "deleted");
|
|
36193
36130
|
const migrationItems = changedItems.filter((i) => i.status === "migration");
|
|
36194
|
-
const hasDeletions = deletedItems.length > 0;
|
|
36195
36131
|
const hasMigrations = migrationItems.length > 0;
|
|
36196
36132
|
const updatesHintParts = [
|
|
36197
36133
|
`add ${newItems.length}`,
|
|
@@ -36205,21 +36141,13 @@ async function proSyncCommand(options = {}) {
|
|
|
36205
36141
|
value: "updates",
|
|
36206
36142
|
label: "Import all updates",
|
|
36207
36143
|
hint: `${updatesHintParts.join(" + ")} files`
|
|
36144
|
+
},
|
|
36145
|
+
{
|
|
36146
|
+
value: "custom",
|
|
36147
|
+
label: "Custom choice",
|
|
36148
|
+
hint: "select specific files to sync"
|
|
36208
36149
|
}
|
|
36209
36150
|
];
|
|
36210
|
-
if (hasDeletions) {
|
|
36211
|
-
const deleteHintParts = [...updatesHintParts, `delete ${deletedItems.length}`];
|
|
36212
|
-
syncModeOptions.push({
|
|
36213
|
-
value: "updates_and_delete",
|
|
36214
|
-
label: "Import all updates and delete files",
|
|
36215
|
-
hint: `${deleteHintParts.join(" + ")} files`
|
|
36216
|
-
});
|
|
36217
|
-
}
|
|
36218
|
-
syncModeOptions.push({
|
|
36219
|
-
value: "custom",
|
|
36220
|
-
label: "Custom choice",
|
|
36221
|
-
hint: "select specific files to sync"
|
|
36222
|
-
});
|
|
36223
36151
|
const syncMode = await ve({
|
|
36224
36152
|
message: "How would you like to sync?",
|
|
36225
36153
|
options: syncModeOptions
|
|
@@ -36231,40 +36159,13 @@ async function proSyncCommand(options = {}) {
|
|
|
36231
36159
|
let selectedItems = [];
|
|
36232
36160
|
if (syncMode === "updates") {
|
|
36233
36161
|
selectedItems = [...newItems, ...modifiedItems, ...migrationItems];
|
|
36234
|
-
} else if (syncMode === "updates_and_delete") {
|
|
36235
|
-
M2.message("");
|
|
36236
|
-
M2.message(source_default.red.bold("⚠️ WARNING: DESTRUCTIVE ACTION"));
|
|
36237
|
-
M2.message(source_default.red("━".repeat(50)));
|
|
36238
|
-
M2.message(source_default.red(`${deletedItems.length} commands/agents/scripts not in the premium version`));
|
|
36239
|
-
M2.message(source_default.red("will be PERMANENTLY DELETED and replaced by the new version."));
|
|
36240
|
-
if (hasMigrations) {
|
|
36241
|
-
M2.message(source_default.gray(`(Skills are NOT deleted - they will be migrated to ~/.agents instead.)`));
|
|
36242
|
-
}
|
|
36243
|
-
M2.message(source_default.red("━".repeat(50)));
|
|
36244
|
-
M2.message("");
|
|
36245
|
-
const deleteConfirm = await ye({
|
|
36246
|
-
message: source_default.red.bold("Are you sure you want to delete and replace all files?"),
|
|
36247
|
-
initialValue: false
|
|
36248
|
-
});
|
|
36249
|
-
if (pD(deleteConfirm) || !deleteConfirm) {
|
|
36250
|
-
xe("Sync cancelled");
|
|
36251
|
-
process.exit(0);
|
|
36252
|
-
}
|
|
36253
|
-
selectedItems = [...newItems, ...modifiedItems, ...migrationItems, ...deletedItems];
|
|
36254
36162
|
} else {
|
|
36255
36163
|
const fileChoices = choices;
|
|
36256
|
-
const
|
|
36257
|
-
if (c.value.type === "file")
|
|
36258
|
-
return c.value.item.status !== "deleted";
|
|
36259
|
-
if (c.value.type === "folder")
|
|
36260
|
-
return !c.value.items.every((i) => i.status === "deleted");
|
|
36261
|
-
return true;
|
|
36262
|
-
});
|
|
36263
|
-
const nonDeleteInitialValues = nonDeleteChoices.map((c) => c.value);
|
|
36164
|
+
const initialValues = fileChoices.map((c) => c.value);
|
|
36264
36165
|
const customSelected = await fe({
|
|
36265
|
-
message: "Select files to sync
|
|
36166
|
+
message: "Select files to sync:",
|
|
36266
36167
|
options: fileChoices,
|
|
36267
|
-
initialValues
|
|
36168
|
+
initialValues,
|
|
36268
36169
|
required: false
|
|
36269
36170
|
});
|
|
36270
36171
|
if (pD(customSelected)) {
|
|
@@ -36281,7 +36182,6 @@ async function proSyncCommand(options = {}) {
|
|
|
36281
36182
|
}
|
|
36282
36183
|
const toAdd = selectedItems.filter((i) => i.status === "new").length;
|
|
36283
36184
|
const toUpdate = selectedItems.filter((i) => i.status === "modified").length;
|
|
36284
|
-
const toRemove = selectedItems.filter((i) => i.status === "deleted").length;
|
|
36285
36185
|
const toMigrate = selectedItems.filter((i) => i.status === "migration").length;
|
|
36286
36186
|
M2.message("");
|
|
36287
36187
|
M2.message(source_default.bold("What will happen:"));
|
|
@@ -36290,9 +36190,7 @@ async function proSyncCommand(options = {}) {
|
|
|
36290
36190
|
if (toUpdate > 0)
|
|
36291
36191
|
M2.message(source_default.yellow(` ✓ Update ${toUpdate} file${toUpdate > 1 ? "s" : ""}`));
|
|
36292
36192
|
if (toMigrate > 0)
|
|
36293
|
-
M2.message(source_default.blue(` ✓
|
|
36294
|
-
if (toRemove > 0)
|
|
36295
|
-
M2.message(source_default.red(` ✓ Delete ${toRemove} file${toRemove > 1 ? "s" : ""}`));
|
|
36193
|
+
M2.message(source_default.blue(` ✓ Move ${toMigrate} skill${toMigrate > 1 ? "s" : ""} from .claude to .agents`));
|
|
36296
36194
|
M2.message(source_default.gray(` ✓ Backup current config to ~/.config/aiblueprint/backup/`));
|
|
36297
36195
|
M2.message("");
|
|
36298
36196
|
const confirmResult = await ye({
|
|
@@ -36847,7 +36745,7 @@ async function executeScript(scriptName, claudeDir) {
|
|
|
36847
36745
|
const scriptsDir = path23.join(claudeDir, "scripts");
|
|
36848
36746
|
if (!await import_fs_extra18.default.pathExists(scriptsDir)) {
|
|
36849
36747
|
console.error(source_default.red(`Scripts directory not found at ${scriptsDir}`));
|
|
36850
|
-
console.log(source_default.gray("Run: aiblueprint
|
|
36748
|
+
console.log(source_default.gray("Run: aiblueprint ai-coding setup"));
|
|
36851
36749
|
return 1;
|
|
36852
36750
|
}
|
|
36853
36751
|
const packageJsonPath = path23.join(scriptsDir, "package.json");
|
|
@@ -36912,65 +36810,71 @@ import { homedir as homedir2 } from "os";
|
|
|
36912
36810
|
var __dirname3 = dirname3(fileURLToPath3(import.meta.url));
|
|
36913
36811
|
var packageJson = JSON.parse(readFileSync3(join2(__dirname3, "../package.json"), "utf8"));
|
|
36914
36812
|
var program2 = new Command;
|
|
36915
|
-
program2.name("aiblueprint").description("AIBlueprint CLI for setting up
|
|
36916
|
-
|
|
36917
|
-
|
|
36918
|
-
|
|
36919
|
-
|
|
36920
|
-
|
|
36921
|
-
|
|
36922
|
-
|
|
36923
|
-
|
|
36924
|
-
|
|
36813
|
+
program2.name("aiblueprint").description("AIBlueprint CLI for setting up AI coding configurations").version(packageJson.version);
|
|
36814
|
+
function registerAiCodingCommands(cmd) {
|
|
36815
|
+
cmd.option("-f, --folder <path>", "Specify custom Claude Code folder path (default: ~/.claude) - alias for --claudeCodeFolder").option("--claudeCodeFolder <path>", "Specify custom Claude Code folder path (default: ~/.claude)").option("--codexFolder <path>", "Specify custom Codex folder path (default: ~/.codex)").option("--openCodeFolder <path>", "Specify custom OpenCode folder path (default: ~/.config/opencode)").option("--factoryAiFolder <path>", "Specify custom FactoryAI folder path (default: ~/.factory)").option("--agentsFolder <path>", "Specify custom agents folder path (default: ~/.agents)").option("-s, --skip", "Skip interactive prompts and install all features");
|
|
36816
|
+
cmd.command("setup").description("Setup AI coding configuration with AIBlueprint defaults").action((options, command) => {
|
|
36817
|
+
const parentOptions = command.parent.opts();
|
|
36818
|
+
setupCommand({
|
|
36819
|
+
claudeCodeFolder: parentOptions.claudeCodeFolder || parentOptions.folder,
|
|
36820
|
+
codexFolder: parentOptions.codexFolder,
|
|
36821
|
+
openCodeFolder: parentOptions.openCodeFolder,
|
|
36822
|
+
agentsFolder: parentOptions.agentsFolder,
|
|
36823
|
+
skipInteractive: parentOptions.skip
|
|
36824
|
+
});
|
|
36925
36825
|
});
|
|
36926
|
-
|
|
36927
|
-
|
|
36928
|
-
|
|
36929
|
-
|
|
36930
|
-
|
|
36931
|
-
|
|
36826
|
+
cmd.command("setup-terminal").description("Setup terminal with Oh My ZSH, plugins, and a beautiful theme").action((options, command) => {
|
|
36827
|
+
const parentOptions = command.parent.opts();
|
|
36828
|
+
setupTerminalCommand({
|
|
36829
|
+
skipInteractive: parentOptions.skip,
|
|
36830
|
+
homeDir: parentOptions.claudeCodeFolder || parentOptions.folder
|
|
36831
|
+
});
|
|
36932
36832
|
});
|
|
36933
|
-
|
|
36934
|
-
|
|
36935
|
-
|
|
36936
|
-
|
|
36937
|
-
|
|
36938
|
-
|
|
36939
|
-
|
|
36940
|
-
|
|
36833
|
+
cmd.command("symlink").description("Create symlinks between different AI coding tools (Claude Code, Codex, OpenCode, FactoryAI)").action((options, command) => {
|
|
36834
|
+
const parentOptions = command.parent.opts();
|
|
36835
|
+
symlinkCommand({
|
|
36836
|
+
claudeCodeFolder: parentOptions.claudeCodeFolder || parentOptions.folder,
|
|
36837
|
+
codexFolder: parentOptions.codexFolder,
|
|
36838
|
+
openCodeFolder: parentOptions.openCodeFolder,
|
|
36839
|
+
factoryAiFolder: parentOptions.factoryAiFolder
|
|
36840
|
+
});
|
|
36941
36841
|
});
|
|
36942
|
-
|
|
36943
|
-
|
|
36944
|
-
|
|
36945
|
-
proActivateCommand(token);
|
|
36946
|
-
});
|
|
36947
|
-
proCmd.command("status").description("Check your Premium token status").action(() => {
|
|
36948
|
-
proStatusCommand();
|
|
36949
|
-
});
|
|
36950
|
-
proCmd.command("setup").description("Install premium configurations (requires activation)").action((options, command) => {
|
|
36951
|
-
const parentOptions = command.parent.parent.opts();
|
|
36952
|
-
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36953
|
-
proSetupCommand({ folder: claudeCodeFolder, agentsFolder: parentOptions.agentsFolder });
|
|
36954
|
-
});
|
|
36955
|
-
proCmd.command("update").description("Update premium configurations").action((options, command) => {
|
|
36956
|
-
const parentOptions = command.parent.parent.opts();
|
|
36957
|
-
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36958
|
-
proUpdateCommand({ folder: claudeCodeFolder, agentsFolder: parentOptions.agentsFolder });
|
|
36959
|
-
});
|
|
36960
|
-
proCmd.command("sync").description("Sync premium configurations with selective update").action((options, command) => {
|
|
36961
|
-
const parentOptions = command.parent.parent.opts();
|
|
36962
|
-
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36963
|
-
proSyncCommand({ folder: claudeCodeFolder, agentsFolder: parentOptions.agentsFolder });
|
|
36964
|
-
});
|
|
36965
|
-
var backupCmd = claudeCodeCmd.command("backup").description("Manage Claude Code configuration backups");
|
|
36966
|
-
backupCmd.command("load").description("Load a previous backup interactively").action((options, command) => {
|
|
36967
|
-
const parentOptions = command.parent.parent.opts();
|
|
36968
|
-
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36969
|
-
backupLoadCommand({
|
|
36970
|
-
folder: claudeCodeFolder,
|
|
36971
|
-
agentsFolder: parentOptions.agentsFolder
|
|
36842
|
+
const proCmd = cmd.command("pro").description("Manage AIBlueprint CLI Premium features");
|
|
36843
|
+
proCmd.command("activate [token]").description("Activate AIBlueprint CLI Premium with your access token").action((token) => {
|
|
36844
|
+
proActivateCommand(token);
|
|
36972
36845
|
});
|
|
36973
|
-
|
|
36846
|
+
proCmd.command("status").description("Check your Premium token status").action(() => {
|
|
36847
|
+
proStatusCommand();
|
|
36848
|
+
});
|
|
36849
|
+
proCmd.command("setup").description("Install premium configurations (requires activation)").action((options, command) => {
|
|
36850
|
+
const parentOptions = command.parent.parent.opts();
|
|
36851
|
+
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36852
|
+
proSetupCommand({ folder: claudeCodeFolder, agentsFolder: parentOptions.agentsFolder });
|
|
36853
|
+
});
|
|
36854
|
+
proCmd.command("update").description("Update premium configurations").action((options, command) => {
|
|
36855
|
+
const parentOptions = command.parent.parent.opts();
|
|
36856
|
+
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36857
|
+
proUpdateCommand({ folder: claudeCodeFolder, agentsFolder: parentOptions.agentsFolder });
|
|
36858
|
+
});
|
|
36859
|
+
proCmd.command("sync").description("Sync premium configurations with selective update").action((options, command) => {
|
|
36860
|
+
const parentOptions = command.parent.parent.opts();
|
|
36861
|
+
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36862
|
+
proSyncCommand({ folder: claudeCodeFolder, agentsFolder: parentOptions.agentsFolder });
|
|
36863
|
+
});
|
|
36864
|
+
const backupCmd = cmd.command("backup").description("Manage AI coding configuration backups");
|
|
36865
|
+
backupCmd.command("load").description("Load a previous backup interactively").action((options, command) => {
|
|
36866
|
+
const parentOptions = command.parent.parent.opts();
|
|
36867
|
+
const claudeCodeFolder = parentOptions.claudeCodeFolder || parentOptions.folder;
|
|
36868
|
+
backupLoadCommand({
|
|
36869
|
+
folder: claudeCodeFolder,
|
|
36870
|
+
agentsFolder: parentOptions.agentsFolder
|
|
36871
|
+
});
|
|
36872
|
+
});
|
|
36873
|
+
}
|
|
36874
|
+
var aiCodingCmd = program2.command("ai-coding").description("AI coding configuration commands");
|
|
36875
|
+
registerAiCodingCommands(aiCodingCmd);
|
|
36876
|
+
var claudeCodeCmd = program2.command("claude-code").description("Legacy alias for ai-coding configuration commands");
|
|
36877
|
+
registerAiCodingCommands(claudeCodeCmd);
|
|
36974
36878
|
var agentsCmd = program2.command("agents").description("Manage AIBlueprint configurations under ~/.agents (with ~/.claude symlinks)").option("-f, --folder <path>", "Specify custom Claude Code folder path (default: ~/.claude) - alias for --claudeCodeFolder").option("--claudeCodeFolder <path>", "Specify custom Claude Code folder path (default: ~/.claude)").option("--agentsFolder <path>", "Specify custom agents folder path (default: ~/.agents)");
|
|
36975
36879
|
var agentsProCmd = agentsCmd.command("pro").description("Manage AIBlueprint CLI Premium features");
|
|
36976
36880
|
agentsProCmd.command("activate [token]").description("Activate AIBlueprint CLI Premium with your access token").action((token) => {
|
|
@@ -37023,6 +36927,7 @@ openclawProCmd.command("update").description("Update OpenClaw Pro configurations
|
|
|
37023
36927
|
});
|
|
37024
36928
|
try {
|
|
37025
36929
|
const claudeDir = join2(homedir2(), ".claude");
|
|
36930
|
+
await registerDynamicScriptCommands(aiCodingCmd, claudeDir);
|
|
37026
36931
|
await registerDynamicScriptCommands(claudeCodeCmd, claudeDir);
|
|
37027
36932
|
} catch (error) {
|
|
37028
36933
|
if (process.env.DEBUG) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aiblueprint-cli",
|
|
3
|
-
"version": "1.4.
|
|
4
|
-
"description": "AIBlueprint CLI for setting up
|
|
3
|
+
"version": "1.4.51",
|
|
4
|
+
"description": "AIBlueprint CLI for setting up AI coding configurations",
|
|
5
5
|
"author": "AIBlueprint",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"scripts": {
|
|
16
16
|
"build": "bun build src/cli.ts --outdir dist --target node && chmod +x dist/cli.js",
|
|
17
17
|
"dev": "bun src/cli.ts",
|
|
18
|
-
"dev-test": "
|
|
18
|
+
"dev-test": "trash ./test-claude-config && bun src/cli.ts ai-coding -f ./test-claude-config --skip setup",
|
|
19
19
|
"test": "vitest",
|
|
20
20
|
"test:ui": "vitest --ui",
|
|
21
21
|
"test:watch": "vitest --watch",
|
|
@@ -47,10 +47,11 @@
|
|
|
47
47
|
},
|
|
48
48
|
"files": [
|
|
49
49
|
"dist",
|
|
50
|
-
"ai-
|
|
50
|
+
"ai-coding"
|
|
51
51
|
],
|
|
52
52
|
"keywords": [
|
|
53
53
|
"claude",
|
|
54
|
+
"ai-coding",
|
|
54
55
|
"claude-code",
|
|
55
56
|
"aiblueprint",
|
|
56
57
|
"developer-tools"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{ai-config → ai-coding}/skills/prompt-creator/references/anthropic-best-practices.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{ai-config → ai-coding}/skills/skill-creator/references/progressive-disclosure-patterns.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{ai-config → ai-coding}/skills/subagent-creator/references/error-handling-and-recovery.md
RENAMED
|
File without changes
|
/package/{ai-config → ai-coding}/skills/subagent-creator/references/evaluation-and-testing.md
RENAMED
|
File without changes
|
/package/{ai-config → ai-coding}/skills/subagent-creator/references/orchestration-patterns.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/{ai-config → ai-coding}/skills/subagent-creator/references/writing-subagent-prompts.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|