aiblueprint-cli 1.4.21 → 1.4.23

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.
@@ -31,7 +31,7 @@ The validator is configured as a PreToolUse hook in Claude Code settings:
31
31
  "hooks": [
32
32
  {
33
33
  "type": "command",
34
- "command": "bun /Users/melvynx/.claude/scripts/command-validator/src/cli.ts"
34
+ "command": "bun ~/.claude/scripts/command-validator/src/cli.ts"
35
35
  }
36
36
  ]
37
37
  }
@@ -81,7 +81,7 @@ The test suite includes:
81
81
  - Sensitive file access: /etc/passwd, /etc/shadow, /etc/sudoers
82
82
 
83
83
  ### Special Cases
84
- - rm -rf safety: Allows deletions in safe paths (/Users/melvynx/Developer/, /tmp/)
84
+ - rm -rf safety: Allows deletions in safe paths (~/Developer/, /tmp/)
85
85
  - Protected paths: Blocks dangerous operations on /etc, /usr, /bin, etc.
86
86
  - Binary content detection
87
87
  - Command length limits
@@ -22,7 +22,7 @@ Add to `~/.claude/settings.json`:
22
22
  {
23
23
  "statusLine": {
24
24
  "type": "command",
25
- "command": "bun /Users/melvynx/.claude/scripts/statusline/src/index.ts",
25
+ "command": "bun ~/.claude/scripts/statusline/src/index.ts",
26
26
  "padding": 0
27
27
  }
28
28
  }
@@ -159,7 +159,7 @@ Update your `~/.claude/settings.json`:
159
159
  {
160
160
  "statusLine": {
161
161
  "type": "command",
162
- "command": "bun /Users/melvynx/.claude/scripts/statusline/src/index.ts",
162
+ "command": "bun ~/.claude/scripts/statusline/src/index.ts",
163
163
  "padding": 0
164
164
  }
165
165
  }
@@ -1,4 +1,4 @@
1
- {"parentUuid":null,"isSidechain":false,"userType":"external","cwd":"/Users/melvynx/.claude/scripts/statusline","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:00:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_01","type":"message","role":"user","content":[{"type":"text","text":"Hello"}],"usage":{"input_tokens":1000,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":100}},"uuid":"uuid-1"}
2
- {"parentUuid":"uuid-1","isSidechain":false,"userType":"external","cwd":"/Users/melvynx/.claude/scripts/statusline","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:05:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_02","type":"message","role":"assistant","content":[{"type":"text","text":"Hi there!"}],"usage":{"input_tokens":50000,"cache_creation_input_tokens":30000,"cache_read_input_tokens":0,"output_tokens":200}},"uuid":"uuid-2"}
3
- {"parentUuid":"uuid-2","isSidechain":false,"userType":"external","cwd":"/Users/melvynx/.claude/scripts/statusline","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:10:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_03","type":"message","role":"user","content":[{"type":"text","text":"Can you help me?"}],"usage":{"input_tokens":20000,"cache_creation_input_tokens":0,"cache_read_input_tokens":40000,"output_tokens":150}},"uuid":"uuid-3"}
4
- {"parentUuid":"uuid-3","isSidechain":false,"userType":"external","cwd":"/Users/melvynx/.claude/scripts/statusline","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:15:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_04","type":"message","role":"assistant","content":[{"type":"text","text":"Of course! What do you need?"}],"usage":{"input_tokens":30000,"cache_creation_input_tokens":0,"cache_read_input_tokens":45000,"output_tokens":300}},"uuid":"uuid-4"}
1
+ {"parentUuid":null,"isSidechain":false,"userType":"external","cwd":"/tmp/test-project","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:00:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_01","type":"message","role":"user","content":[{"type":"text","text":"Hello"}],"usage":{"input_tokens":1000,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":100}},"uuid":"uuid-1"}
2
+ {"parentUuid":"uuid-1","isSidechain":false,"userType":"external","cwd":"/tmp/test-project","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:05:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_02","type":"message","role":"assistant","content":[{"type":"text","text":"Hi there!"}],"usage":{"input_tokens":50000,"cache_creation_input_tokens":30000,"cache_read_input_tokens":0,"output_tokens":200}},"uuid":"uuid-2"}
3
+ {"parentUuid":"uuid-2","isSidechain":false,"userType":"external","cwd":"/tmp/test-project","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:10:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_03","type":"message","role":"user","content":[{"type":"text","text":"Can you help me?"}],"usage":{"input_tokens":20000,"cache_creation_input_tokens":0,"cache_read_input_tokens":40000,"output_tokens":150}},"uuid":"uuid-3"}
4
+ {"parentUuid":"uuid-3","isSidechain":false,"userType":"external","cwd":"/tmp/test-project","sessionId":"demo-session","version":"2.0.31","gitBranch":"main","timestamp":"2025-11-11T10:15:00.000Z","message":{"model":"claude-sonnet-4-5-20250929","id":"msg_04","type":"message","role":"assistant","content":[{"type":"text","text":"Of course! What do you need?"}],"usage":{"input_tokens":30000,"cache_creation_input_tokens":0,"cache_read_input_tokens":45000,"output_tokens":300}},"uuid":"uuid-4"}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "session_id": "06a7b019-03f8-4083-a9db-410d95cb01e6",
3
- "transcript_path": "/Users/melvynx/.claude/scripts/statusline/fixtures/mock-transcript.jsonl",
4
- "cwd": "/Users/melvynx/.claude",
3
+ "transcript_path": "/tmp/test-fixtures/mock-transcript.jsonl",
4
+ "cwd": "/tmp/test-project",
5
5
  "model": {
6
6
  "id": "claude-sonnet-4-5-20250929",
7
7
  "display_name": "Sonnet 4.5"
8
8
  },
9
9
  "workspace": {
10
- "current_dir": "/Users/melvynx/.claude",
11
- "project_dir": "/Users/melvynx/.claude"
10
+ "current_dir": "/tmp/test-project",
11
+ "project_dir": "/tmp/test-project"
12
12
  },
13
13
  "version": "2.0.68",
14
14
  "output_style": {
@@ -134,8 +134,9 @@ fi
134
134
 
135
135
  ```bash
136
136
  # Make script executable and run it
137
- chmod +x /Users/melvynx/.claude/skills/setup-ralph/scripts/setup.sh
138
- /Users/melvynx/.claude/skills/setup-ralph/scripts/setup.sh "{project_path}" "{feature_name}"
137
+ # Note: Use the skill_dir variable which resolves to ~/.claude/skills/setup-ralph
138
+ chmod +x {skill_dir}/scripts/setup.sh
139
+ {skill_dir}/scripts/setup.sh "{project_path}" "{feature_name}"
139
140
  ```
140
141
 
141
142
  The setup script creates:
package/dist/cli.js CHANGED
@@ -33100,6 +33100,43 @@ function transformHook(hook, claudeDir) {
33100
33100
  }
33101
33101
  return transformed;
33102
33102
  }
33103
+ var TEXT_FILE_EXTENSIONS = new Set([
33104
+ ".ts",
33105
+ ".tsx",
33106
+ ".js",
33107
+ ".jsx",
33108
+ ".mjs",
33109
+ ".cjs",
33110
+ ".json",
33111
+ ".jsonl",
33112
+ ".md",
33113
+ ".mdx",
33114
+ ".txt",
33115
+ ".sh",
33116
+ ".bash",
33117
+ ".zsh",
33118
+ ".yaml",
33119
+ ".yml",
33120
+ ".toml",
33121
+ ".ini",
33122
+ ".cfg",
33123
+ ".html",
33124
+ ".css",
33125
+ ".scss",
33126
+ ".less"
33127
+ ]);
33128
+ function isTextFile(filePath) {
33129
+ const ext = filePath.toLowerCase().slice(filePath.lastIndexOf("."));
33130
+ return TEXT_FILE_EXTENSIONS.has(ext);
33131
+ }
33132
+ function transformFileContent(content, claudeDir) {
33133
+ let transformed = content;
33134
+ for (const pattern of KNOWN_CLAUDE_PATHS) {
33135
+ transformed = transformed.replace(new RegExp(pattern.source, "g"), `${claudeDir}/`);
33136
+ }
33137
+ transformed = transformed.replace(/\\/g, "/");
33138
+ return transformed;
33139
+ }
33103
33140
 
33104
33141
  // src/commands/setup/settings.ts
33105
33142
  function toPosixPath(p) {
@@ -35389,7 +35426,7 @@ async function analyzeSyncChanges(claudeDir, githubToken) {
35389
35426
  unchangedCount: allItems.filter((i) => i.status === "unchanged").length
35390
35427
  };
35391
35428
  }
35392
- async function downloadFromPrivateGitHub2(relativePath, targetPath, githubToken) {
35429
+ async function downloadFromPrivateGitHub2(relativePath, targetPath, githubToken, claudeDir) {
35393
35430
  try {
35394
35431
  const url = `https://raw.githubusercontent.com/${PREMIUM_REPO2}/${PREMIUM_BRANCH2}/claude-code-config/${relativePath}`;
35395
35432
  const response = await fetch(url, {
@@ -35403,7 +35440,13 @@ async function downloadFromPrivateGitHub2(relativePath, targetPath, githubToken)
35403
35440
  }
35404
35441
  const content = await response.arrayBuffer();
35405
35442
  await import_fs_extra11.default.ensureDir(path13.dirname(targetPath));
35406
- await import_fs_extra11.default.writeFile(targetPath, Buffer.from(content));
35443
+ if (isTextFile(relativePath)) {
35444
+ const textContent = Buffer.from(content).toString("utf-8");
35445
+ const transformedContent = transformFileContent(textContent, claudeDir);
35446
+ await import_fs_extra11.default.writeFile(targetPath, transformedContent, "utf-8");
35447
+ } else {
35448
+ await import_fs_extra11.default.writeFile(targetPath, Buffer.from(content));
35449
+ }
35407
35450
  return true;
35408
35451
  } catch {
35409
35452
  return false;
@@ -35463,7 +35506,7 @@ async function syncSelectedItems(claudeDir, items, githubToken, onProgress) {
35463
35506
  }
35464
35507
  } else {
35465
35508
  onProgress?.(item.relativePath, item.status === "new" ? "adding" : "updating");
35466
- const ok = await downloadFromPrivateGitHub2(item.relativePath, targetPath, githubToken);
35509
+ const ok = await downloadFromPrivateGitHub2(item.relativePath, targetPath, githubToken, claudeDir);
35467
35510
  if (ok) {
35468
35511
  success++;
35469
35512
  } else {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiblueprint-cli",
3
- "version": "1.4.21",
3
+ "version": "1.4.23",
4
4
  "description": "AIBlueprint CLI for setting up Claude Code configurations",
5
5
  "author": "AIBlueprint",
6
6
  "license": "MIT",