jettypod 4.4.18 → 4.4.21

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/jettypod.js CHANGED
@@ -674,7 +674,7 @@ async function generateClaude(options = {}) {
674
674
 
675
675
  // Initialize project (used by both 'jettypod init' and 'jettypod' with no args)
676
676
  async function initializeProject() {
677
- const { showLogo } = require('./features/terminal-logo');
677
+ const { showLogo } = require('./lib/terminal-logo');
678
678
  showLogo();
679
679
 
680
680
  if (!fs.existsSync('.jettypod')) {
@@ -0,0 +1,39 @@
1
+ // Terminal Logo - Unicode Box Drawing + Gradients
2
+ // Zero dependencies, pure ANSI escape codes
3
+
4
+ const colors = {
5
+ cyan1: '\x1b[38;5;51m', // Bright cyan
6
+ cyan2: '\x1b[38;5;45m', // Medium cyan
7
+ cyan3: '\x1b[38;5;39m', // Darker cyan
8
+ green1: '\x1b[38;5;48m', // Bright green
9
+ green2: '\x1b[38;5;42m', // Medium green
10
+ green3: '\x1b[38;5;36m', // Darker green
11
+ gray: '\x1b[38;5;244m', // Gray for subtitle
12
+ reset: '\x1b[0m', // Reset color
13
+ bold: '\x1b[1m' // Bold text
14
+ };
15
+
16
+ function showLogo() {
17
+ console.log(`
18
+ ${colors.cyan1} ██╗${colors.cyan2}███████╗${colors.cyan3}████████╗${colors.green1}████████╗${colors.green2}██╗ ██╗${colors.reset}
19
+ ${colors.cyan1} ██║${colors.cyan2}██╔════╝${colors.cyan3}╚══██╔══╝${colors.green1}╚══██╔══╝${colors.green2}╚██╗ ██╔╝${colors.reset}
20
+ ${colors.cyan1} ██║${colors.cyan2}█████╗ ${colors.cyan3} ██║ ${colors.green1} ██║ ${colors.green2} ╚████╔╝ ${colors.reset}
21
+ ${colors.cyan1}██ ██║${colors.cyan2}██╔══╝ ${colors.cyan3} ██║ ${colors.green1} ██║ ${colors.green2} ╚██╔╝ ${colors.reset}
22
+ ${colors.cyan1}╚█████╔╝${colors.cyan2}███████╗${colors.cyan3} ██║ ${colors.green1} ██║ ${colors.green2} ██║ ${colors.reset}
23
+ ${colors.cyan1} ╚════╝ ${colors.cyan2}╚══════╝${colors.cyan3} ╚═╝ ${colors.green1} ╚═╝ ${colors.green2} ╚═╝ ${colors.reset}
24
+
25
+ ${colors.green1}██████╗ ${colors.green2}██████╗ ${colors.green3}██████╗ ${colors.reset}
26
+ ${colors.green1}██╔══██╗${colors.green2}██╔═══██╗${colors.green3}██╔══██╗${colors.reset}
27
+ ${colors.green1}██████╔╝${colors.green2}██║ ██║${colors.green3}██║ ██║${colors.reset}
28
+ ${colors.green1}██╔═══╝ ${colors.green2}██║ ██║${colors.green3}██║ ██║${colors.reset}
29
+ ${colors.green1}██║ ${colors.green2}╚██████╔╝${colors.green3}██████╔╝${colors.reset}
30
+ ${colors.green1}╚═╝ ${colors.green2} ╚═════╝ ${colors.green3}╚═════╝ ${colors.reset}
31
+ `);
32
+
33
+ const pkg = require('../../package.json');
34
+ const version = pkg.version || '3.0.0';
35
+ console.log(colors.gray + ' AI Development Context Manager ' + colors.bold + 'v' + version + colors.reset);
36
+ console.log();
37
+ }
38
+
39
+ module.exports = { showLogo };
@@ -0,0 +1,30 @@
1
+ Feature: Terminal Logo Display
2
+ As a JettyPod user
3
+ I want to see a welcoming logo when I run jettypod init
4
+ So that the tool feels approachable and modern
5
+
6
+ Scenario: jettypod init displays unicode gradient logo
7
+ Given a new empty directory
8
+ When I run jettypod init
9
+ Then the output contains the unicode gradient logo
10
+ And the logo includes "DEV" and "POD" text
11
+ And the logo uses ANSI color codes
12
+
13
+ Scenario: Logo module exports showLogo function
14
+ Given the logo module exists
15
+ When I import it
16
+ Then it exports a "showLogo" function
17
+
18
+ Scenario: Logo output is properly formatted
19
+ When I call the showLogo function
20
+ Then it outputs 6 lines of logo art
21
+ And it includes the version subtitle
22
+
23
+ # Integration test
24
+ Scenario: jettypod init integrates with existing features
25
+ Given a new empty directory
26
+ When I run jettypod init
27
+ Then I see the unicode logo
28
+ And the .jettypod directory is created
29
+ And CLAUDE.md is created
30
+ And git hooks are installed
@@ -231,17 +231,11 @@ async function createWorktree(workItem, options = {}) {
231
231
  throw new Error(`Failed to create .jettypod symlink: ${symlinkErr.message}`);
232
232
  }
233
233
 
234
- // Step 4.5: Add .jettypod to worktree's local gitignore
234
+ // Step 4.5: Add .jettypod to MAIN repo's .git/info/exclude
235
+ // NOTE: Worktree-specific info/exclude does NOT work - must use main repo's exclude
235
236
  // This prevents the symlink from being committed when merging the worktree branch
236
237
  try {
237
- // Get the worktree's git directory (returns absolute path for worktrees)
238
- const gitDirOutput = execSync('git rev-parse --git-dir', {
239
- cwd: worktreePath,
240
- encoding: 'utf8'
241
- }).trim();
242
-
243
- // gitDirOutput is already absolute for worktrees (e.g., /path/to/.git/worktrees/name)
244
- const excludePath = path.join(gitDirOutput, 'info', 'exclude');
238
+ const excludePath = path.join(gitRoot, '.git', 'info', 'exclude');
245
239
 
246
240
  // Ensure the info directory exists
247
241
  const infoDir = path.dirname(excludePath);
@@ -249,7 +243,7 @@ async function createWorktree(workItem, options = {}) {
249
243
  fs.mkdirSync(infoDir, { recursive: true });
250
244
  }
251
245
 
252
- // Read existing exclude file or create empty
246
+ // Read existing exclude or create empty
253
247
  let excludeContent = '';
254
248
  if (fs.existsSync(excludePath)) {
255
249
  excludeContent = fs.readFileSync(excludePath, 'utf8');
@@ -264,7 +258,7 @@ async function createWorktree(workItem, options = {}) {
264
258
  }
265
259
  } catch (excludeErr) {
266
260
  // Non-fatal - log warning but continue
267
- console.warn(`Warning: Could not add .jettypod to exclude: ${excludeErr.message}`);
261
+ console.warn(`Warning: Could not add .jettypod to .git/info/exclude: ${excludeErr.message}`);
268
262
  }
269
263
 
270
264
  // Step 5: Symlink .env files from main repo
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jettypod",
3
- "version": "4.4.18",
3
+ "version": "4.4.21",
4
4
  "description": "AI-powered development workflow manager with TDD, BDD, and automatic test generation",
5
5
  "main": "jettypod.js",
6
6
  "bin": {