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('./
|
|
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
|
package/lib/worktree-manager.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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
|