cluttry 1.0.0 → 1.0.1

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "mcp__tavily__tavily-search"
5
+ ]
6
+ }
7
+ }
package/README.md CHANGED
@@ -74,8 +74,8 @@ cry init [--force]
74
74
  ```
75
75
 
76
76
  Creates:
77
- - `.vwt.json` — tracked config with defaults
78
- - `.vwt.local.json` — gitignored local overrides
77
+ - `.cry.json` — tracked config with defaults
78
+ - `.cry.local.json` — gitignored local overrides
79
79
  - Updates `.gitignore` to ignore local config and `.worktrees/`
80
80
 
81
81
  ### `cry spawn <branch>`
@@ -197,7 +197,7 @@ Checks:
197
197
 
198
198
  ## Configuration
199
199
 
200
- ### `.vwt.json` (tracked)
200
+ ### `.cry.json` (tracked)
201
201
 
202
202
  ```json
203
203
  {
@@ -219,7 +219,7 @@ Checks:
219
219
  | `hooks.postCreate` | Commands to run after spawning |
220
220
  | `agentCommand` | Command to launch AI agent |
221
221
 
222
- ### `.vwt.local.json` (gitignored)
222
+ ### `.cry.local.json` (gitignored)
223
223
 
224
224
  Machine-specific overrides:
225
225
 
@@ -287,7 +287,7 @@ Files must be explicitly ignored by git (in `.gitignore`) to be eligible for cop
287
287
  ```
288
288
 
289
289
  2. **Configure your secrets:**
290
- Edit `.vwt.json` to include your secret files:
290
+ Edit `.cry.json` to include your secret files:
291
291
  ```json
292
292
  {
293
293
  "include": [".env", ".env.local", "config/oauth*.json"]
@@ -344,8 +344,8 @@ Each agent works in an isolated worktree with its own copy of secrets.
344
344
  ├── feature-payments/ # Worktree for feature-payments branch
345
345
  └── bugfix-123/ # Worktree for bugfix-123 branch
346
346
 
347
- .vwt.json # Tracked config
348
- .vwt.local.json # Local overrides (gitignored)
347
+ .cry.json # Tracked config
348
+ .cry.local.json # Local overrides (gitignored)
349
349
  ```
350
350
 
351
351
  ## Troubleshooting
@@ -390,7 +390,7 @@ Install the AI agent CLI or update `agentCommand` in your config:
390
390
  # For Claude
391
391
  npm install -g @anthropic-ai/claude-code
392
392
 
393
- # Or override in .vwt.local.json
393
+ # Or override in .cry.local.json
394
394
  {
395
395
  "agentCommand": "your-agent-command"
396
396
  }
@@ -47,6 +47,6 @@ export async function open(branchOrPath, options) {
47
47
  // For shell integration hint
48
48
  out.newline();
49
49
  out.log(out.fmt.dim('Tip: Use command substitution in your shell:'));
50
- out.log(out.fmt.dim(` cd "$(vwt open ${branchOrPath} 2>/dev/null | grep "^Path:" | cut -d' ' -f2-)"`));
50
+ out.log(out.fmt.dim(` cd "$(cry open ${branchOrPath} 2>/dev/null | grep "^Path:" | cut -d' ' -f2-)"`));
51
51
  }
52
52
  //# sourceMappingURL=open.js.map
@@ -1,22 +1,22 @@
1
1
  /**
2
- * Configuration management for VWT
2
+ * Configuration management for cry
3
3
  */
4
- import type { MergedConfig, VwtConfig, VwtLocalConfig } from './types.js';
5
- export declare const CONFIG_FILE = ".vwt.json";
6
- export declare const LOCAL_CONFIG_FILE = ".vwt.local.json";
4
+ import type { MergedConfig, CryConfig, CryLocalConfig } from './types.js';
5
+ export declare const CONFIG_FILE = ".cry.json";
6
+ export declare const LOCAL_CONFIG_FILE = ".cry.local.json";
7
7
  export declare const WORKTREE_INCLUDE_FILE = ".worktreeinclude";
8
8
  /**
9
9
  * Load the main config file
10
10
  */
11
- export declare function loadConfig(repoRoot: string): VwtConfig | null;
11
+ export declare function loadConfig(repoRoot: string): CryConfig | null;
12
12
  /**
13
13
  * Load the local config file
14
14
  */
15
- export declare function loadLocalConfig(repoRoot: string): VwtLocalConfig | null;
15
+ export declare function loadLocalConfig(repoRoot: string): CryLocalConfig | null;
16
16
  /**
17
17
  * Merge main config with local overrides
18
18
  */
19
- export declare function mergeConfig(config: VwtConfig | null, localConfig: VwtLocalConfig | null): MergedConfig;
19
+ export declare function mergeConfig(config: CryConfig | null, localConfig: CryLocalConfig | null): MergedConfig;
20
20
  /**
21
21
  * Get merged configuration
22
22
  */
@@ -24,11 +24,11 @@ export declare function getMergedConfig(repoRoot: string): MergedConfig;
24
24
  /**
25
25
  * Save the main config file
26
26
  */
27
- export declare function saveConfig(repoRoot: string, config: VwtConfig): void;
27
+ export declare function saveConfig(repoRoot: string, config: CryConfig): void;
28
28
  /**
29
29
  * Save the local config file
30
30
  */
31
- export declare function saveLocalConfig(repoRoot: string, config: VwtLocalConfig): void;
31
+ export declare function saveLocalConfig(repoRoot: string, config: CryLocalConfig): void;
32
32
  /**
33
33
  * Check if config exists
34
34
  */
@@ -36,9 +36,9 @@ export declare function configExists(repoRoot: string): boolean;
36
36
  /**
37
37
  * Get default config
38
38
  */
39
- export declare function getDefaultConfig(): VwtConfig;
39
+ export declare function getDefaultConfig(): CryConfig;
40
40
  /**
41
41
  * Create default local config
42
42
  */
43
- export declare function getDefaultLocalConfig(): VwtLocalConfig;
43
+ export declare function getDefaultLocalConfig(): CryLocalConfig;
44
44
  //# sourceMappingURL=config.d.ts.map
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Configuration management for VWT
2
+ * Configuration management for cry
3
3
  */
4
4
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
5
5
  import path from 'node:path';
6
- export const CONFIG_FILE = '.vwt.json';
7
- export const LOCAL_CONFIG_FILE = '.vwt.local.json';
6
+ export const CONFIG_FILE = '.cry.json';
7
+ export const LOCAL_CONFIG_FILE = '.cry.local.json';
8
8
  export const WORKTREE_INCLUDE_FILE = '.worktreeinclude';
9
9
  const DEFAULT_CONFIG = {
10
10
  defaultMode: 'copy',
package/dist/lib/git.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Git operations for VWT
2
+ * Git operations for cry
3
3
  */
4
4
  import type { WorktreeInfo } from './types.js';
5
5
  /**
package/dist/lib/git.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Git operations for VWT
2
+ * Git operations for cry
3
3
  */
4
4
  import { execSync, spawn } from 'node:child_process';
5
5
  import path from 'node:path';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Output utilities for VWT
2
+ * Output utilities for cry
3
3
  *
4
4
  * Provides consistent, colorful terminal output without external dependencies.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Output utilities for VWT
2
+ * Output utilities for cry
3
3
  *
4
4
  * Provides consistent, colorful terminal output without external dependencies.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Path utilities for VWT
2
+ * Path utilities for cry
3
3
  */
4
4
  /**
5
5
  * Sanitize a branch name for use in filesystem paths
package/dist/lib/paths.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Path utilities for VWT
2
+ * Path utilities for cry
3
3
  */
4
4
  import path from 'node:path';
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Secret file handling for VWT
2
+ * Secret file handling for cry
3
3
  *
4
4
  * This module ensures that only git-ignored files are ever copied or symlinked.
5
5
  * It provides a safety layer to prevent accidentally exposing tracked files.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Secret file handling for VWT
2
+ * Secret file handling for cry
3
3
  *
4
4
  * This module ensures that only git-ignored files are ever copied or symlinked.
5
5
  * It provides a safety layer to prevent accidentally exposing tracked files.
@@ -1,7 +1,7 @@
1
1
  /**
2
- * VWT Configuration Types
2
+ * Cry Configuration Types
3
3
  */
4
- export interface VwtConfig {
4
+ export interface CryConfig {
5
5
  /** Base directory for worktrees (optional, defaults to .worktrees/) */
6
6
  worktreeBaseDir?: string;
7
7
  /** Default mode for secrets handling */
@@ -15,7 +15,7 @@ export interface VwtConfig {
15
15
  /** Default agent command */
16
16
  agentCommand?: string;
17
17
  }
18
- export interface VwtLocalConfig {
18
+ export interface CryLocalConfig {
19
19
  /** Machine-specific base directory override */
20
20
  worktreeBaseDir?: string;
21
21
  /** Additional include paths for this machine */
package/dist/lib/types.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * VWT Configuration Types
2
+ * Cry Configuration Types
3
3
  */
4
4
  export {};
5
5
  //# sourceMappingURL=types.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cluttry",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Cluttry - Git worktree management for parallel AI-agent sessions",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -21,7 +21,16 @@
21
21
  "format": "prettier --write 'src/**/*.ts'",
22
22
  "prepare": "npm run build"
23
23
  },
24
- "keywords": ["git", "worktree", "cli", "ai", "agent", "claude", "vibe", "bun"],
24
+ "keywords": [
25
+ "git",
26
+ "worktree",
27
+ "cli",
28
+ "ai",
29
+ "agent",
30
+ "claude",
31
+ "vibe",
32
+ "bun"
33
+ ],
25
34
  "license": "MIT",
26
35
  "engines": {
27
36
  "node": ">=18.0.0",
@@ -66,5 +66,5 @@ export async function open(branchOrPath: string, options: OpenOptions): Promise<
66
66
  // For shell integration hint
67
67
  out.newline();
68
68
  out.log(out.fmt.dim('Tip: Use command substitution in your shell:'));
69
- out.log(out.fmt.dim(` cd "$(vwt open ${branchOrPath} 2>/dev/null | grep "^Path:" | cut -d' ' -f2-)"`));
69
+ out.log(out.fmt.dim(` cd "$(cry open ${branchOrPath} 2>/dev/null | grep "^Path:" | cut -d' ' -f2-)"`));
70
70
  }
package/src/lib/config.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  /**
2
- * Configuration management for VWT
2
+ * Configuration management for cry
3
3
  */
4
4
 
5
5
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
6
  import path from 'node:path';
7
- import type { MergedConfig, VwtConfig, VwtLocalConfig } from './types.js';
7
+ import type { MergedConfig, CryConfig, CryLocalConfig } from './types.js';
8
8
 
9
- export const CONFIG_FILE = '.vwt.json';
10
- export const LOCAL_CONFIG_FILE = '.vwt.local.json';
9
+ export const CONFIG_FILE = '.cry.json';
10
+ export const LOCAL_CONFIG_FILE = '.cry.local.json';
11
11
  export const WORKTREE_INCLUDE_FILE = '.worktreeinclude';
12
12
 
13
- const DEFAULT_CONFIG: VwtConfig = {
13
+ const DEFAULT_CONFIG: CryConfig = {
14
14
  defaultMode: 'copy',
15
15
  include: ['.env', '.env.*', '.env.local'],
16
16
  hooks: {
@@ -22,14 +22,14 @@ const DEFAULT_CONFIG: VwtConfig = {
22
22
  /**
23
23
  * Load the main config file
24
24
  */
25
- export function loadConfig(repoRoot: string): VwtConfig | null {
25
+ export function loadConfig(repoRoot: string): CryConfig | null {
26
26
  const configPath = path.join(repoRoot, CONFIG_FILE);
27
27
  if (!existsSync(configPath)) {
28
28
  return null;
29
29
  }
30
30
  try {
31
31
  const content = readFileSync(configPath, 'utf-8');
32
- return JSON.parse(content) as VwtConfig;
32
+ return JSON.parse(content) as CryConfig;
33
33
  } catch (error) {
34
34
  throw new Error(`Failed to parse ${CONFIG_FILE}: ${(error as Error).message}`);
35
35
  }
@@ -38,14 +38,14 @@ export function loadConfig(repoRoot: string): VwtConfig | null {
38
38
  /**
39
39
  * Load the local config file
40
40
  */
41
- export function loadLocalConfig(repoRoot: string): VwtLocalConfig | null {
41
+ export function loadLocalConfig(repoRoot: string): CryLocalConfig | null {
42
42
  const configPath = path.join(repoRoot, LOCAL_CONFIG_FILE);
43
43
  if (!existsSync(configPath)) {
44
44
  return null;
45
45
  }
46
46
  try {
47
47
  const content = readFileSync(configPath, 'utf-8');
48
- return JSON.parse(content) as VwtLocalConfig;
48
+ return JSON.parse(content) as CryLocalConfig;
49
49
  } catch (error) {
50
50
  throw new Error(`Failed to parse ${LOCAL_CONFIG_FILE}: ${(error as Error).message}`);
51
51
  }
@@ -54,7 +54,7 @@ export function loadLocalConfig(repoRoot: string): VwtLocalConfig | null {
54
54
  /**
55
55
  * Merge main config with local overrides
56
56
  */
57
- export function mergeConfig(config: VwtConfig | null, localConfig: VwtLocalConfig | null): MergedConfig {
57
+ export function mergeConfig(config: CryConfig | null, localConfig: CryLocalConfig | null): MergedConfig {
58
58
  const base = config ?? DEFAULT_CONFIG;
59
59
 
60
60
  return {
@@ -83,7 +83,7 @@ export function getMergedConfig(repoRoot: string): MergedConfig {
83
83
  /**
84
84
  * Save the main config file
85
85
  */
86
- export function saveConfig(repoRoot: string, config: VwtConfig): void {
86
+ export function saveConfig(repoRoot: string, config: CryConfig): void {
87
87
  const configPath = path.join(repoRoot, CONFIG_FILE);
88
88
  writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
89
89
  }
@@ -91,7 +91,7 @@ export function saveConfig(repoRoot: string, config: VwtConfig): void {
91
91
  /**
92
92
  * Save the local config file
93
93
  */
94
- export function saveLocalConfig(repoRoot: string, config: VwtLocalConfig): void {
94
+ export function saveLocalConfig(repoRoot: string, config: CryLocalConfig): void {
95
95
  const configPath = path.join(repoRoot, LOCAL_CONFIG_FILE);
96
96
  writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
97
97
  }
@@ -106,14 +106,14 @@ export function configExists(repoRoot: string): boolean {
106
106
  /**
107
107
  * Get default config
108
108
  */
109
- export function getDefaultConfig(): VwtConfig {
109
+ export function getDefaultConfig(): CryConfig {
110
110
  return { ...DEFAULT_CONFIG };
111
111
  }
112
112
 
113
113
  /**
114
114
  * Create default local config
115
115
  */
116
- export function getDefaultLocalConfig(): VwtLocalConfig {
116
+ export function getDefaultLocalConfig(): CryLocalConfig {
117
117
  return {
118
118
  include: [],
119
119
  };
package/src/lib/git.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Git operations for VWT
2
+ * Git operations for cry
3
3
  */
4
4
 
5
5
  import { execSync, spawn } from 'node:child_process';
package/src/lib/output.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Output utilities for VWT
2
+ * Output utilities for cry
3
3
  *
4
4
  * Provides consistent, colorful terminal output without external dependencies.
5
5
  */
package/src/lib/paths.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Path utilities for VWT
2
+ * Path utilities for cry
3
3
  */
4
4
 
5
5
  import path from 'node:path';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Secret file handling for VWT
2
+ * Secret file handling for cry
3
3
  *
4
4
  * This module ensures that only git-ignored files are ever copied or symlinked.
5
5
  * It provides a safety layer to prevent accidentally exposing tracked files.
package/src/lib/types.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
- * VWT Configuration Types
2
+ * Cry Configuration Types
3
3
  */
4
4
 
5
- export interface VwtConfig {
5
+ export interface CryConfig {
6
6
  /** Base directory for worktrees (optional, defaults to .worktrees/) */
7
7
  worktreeBaseDir?: string;
8
8
  /** Default mode for secrets handling */
@@ -17,7 +17,7 @@ export interface VwtConfig {
17
17
  agentCommand?: string;
18
18
  }
19
19
 
20
- export interface VwtLocalConfig {
20
+ export interface CryLocalConfig {
21
21
  /** Machine-specific base directory override */
22
22
  worktreeBaseDir?: string;
23
23
  /** Additional include paths for this machine */
@@ -4,10 +4,10 @@
4
4
 
5
5
  import { describe, it, expect } from 'vitest';
6
6
  import { mergeConfig } from '../src/lib/config.js';
7
- import type { VwtConfig, VwtLocalConfig } from '../src/lib/types.js';
7
+ import type { CryConfig, CryLocalConfig } from '../src/lib/types.js';
8
8
 
9
9
  describe('mergeConfig', () => {
10
- const baseConfig: VwtConfig = {
10
+ const baseConfig: CryConfig = {
11
11
  defaultMode: 'copy',
12
12
  include: ['.env', '.env.local'],
13
13
  hooks: {
@@ -34,7 +34,7 @@ describe('mergeConfig', () => {
34
34
  });
35
35
 
36
36
  it('merges include arrays from both configs', () => {
37
- const localConfig: VwtLocalConfig = {
37
+ const localConfig: CryLocalConfig = {
38
38
  include: ['credentials.json', '.secrets'],
39
39
  };
40
40
  const result = mergeConfig(baseConfig, localConfig);
@@ -42,7 +42,7 @@ describe('mergeConfig', () => {
42
42
  });
43
43
 
44
44
  it('local worktreeBaseDir overrides base', () => {
45
- const localConfig: VwtLocalConfig = {
45
+ const localConfig: CryLocalConfig = {
46
46
  worktreeBaseDir: '/custom/local/path',
47
47
  };
48
48
  const result = mergeConfig(baseConfig, localConfig);
@@ -50,7 +50,7 @@ describe('mergeConfig', () => {
50
50
  });
51
51
 
52
52
  it('local agentCommand overrides base', () => {
53
- const localConfig: VwtLocalConfig = {
53
+ const localConfig: CryLocalConfig = {
54
54
  agentCommand: 'cursor',
55
55
  };
56
56
  const result = mergeConfig(baseConfig, localConfig);
@@ -58,7 +58,7 @@ describe('mergeConfig', () => {
58
58
  });
59
59
 
60
60
  it('merges postCreate hooks from both configs', () => {
61
- const localConfig: VwtLocalConfig = {
61
+ const localConfig: CryLocalConfig = {
62
62
  hooks: {
63
63
  postCreate: ['npm run dev', 'code .'],
64
64
  },
@@ -68,11 +68,11 @@ describe('mergeConfig', () => {
68
68
  });
69
69
 
70
70
  it('handles empty include arrays', () => {
71
- const config: VwtConfig = {
71
+ const config: CryConfig = {
72
72
  defaultMode: 'none',
73
73
  include: [],
74
74
  };
75
- const localConfig: VwtLocalConfig = {
75
+ const localConfig: CryLocalConfig = {
76
76
  include: [],
77
77
  };
78
78
  const result = mergeConfig(config, localConfig);
@@ -80,7 +80,7 @@ describe('mergeConfig', () => {
80
80
  });
81
81
 
82
82
  it('handles missing hooks in configs', () => {
83
- const config: VwtConfig = {
83
+ const config: CryConfig = {
84
84
  defaultMode: 'symlink',
85
85
  include: ['.env'],
86
86
  };
@@ -89,11 +89,11 @@ describe('mergeConfig', () => {
89
89
  });
90
90
 
91
91
  it('preserves defaultMode from base config', () => {
92
- const config: VwtConfig = {
92
+ const config: CryConfig = {
93
93
  defaultMode: 'symlink',
94
94
  include: [],
95
95
  };
96
- const localConfig: VwtLocalConfig = {
96
+ const localConfig: CryLocalConfig = {
97
97
  include: ['.env'],
98
98
  };
99
99
  const result = mergeConfig(config, localConfig);
package/.vwt.json DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "defaultMode": "copy",
3
- "include": [
4
- ".env",
5
- ".env.*",
6
- ".env.local"
7
- ],
8
- "hooks": {
9
- "postCreate": []
10
- },
11
- "agentCommand": "claude"
12
- }