@fractary/core 0.1.0 → 0.2.0

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.
Files changed (50) hide show
  1. package/README.md +183 -30
  2. package/dist/common/config.d.ts +22 -6
  3. package/dist/common/config.d.ts.map +1 -1
  4. package/dist/common/config.js +43 -14
  5. package/dist/common/config.js.map +1 -1
  6. package/dist/common/exec-file-no-throw.d.ts +42 -0
  7. package/dist/common/exec-file-no-throw.d.ts.map +1 -0
  8. package/dist/common/exec-file-no-throw.js +54 -0
  9. package/dist/common/exec-file-no-throw.js.map +1 -0
  10. package/dist/common/types.d.ts +15 -0
  11. package/dist/common/types.d.ts.map +1 -1
  12. package/dist/common/yaml-config.d.ts +198 -0
  13. package/dist/common/yaml-config.d.ts.map +1 -0
  14. package/dist/common/yaml-config.js +300 -0
  15. package/dist/common/yaml-config.js.map +1 -0
  16. package/dist/common/yaml-config.test.d.ts +5 -0
  17. package/dist/common/yaml-config.test.d.ts.map +1 -0
  18. package/dist/common/yaml-config.test.js +551 -0
  19. package/dist/common/yaml-config.test.js.map +1 -0
  20. package/dist/repo/config.d.ts +112 -0
  21. package/dist/repo/config.d.ts.map +1 -0
  22. package/dist/repo/config.js +202 -0
  23. package/dist/repo/config.js.map +1 -0
  24. package/dist/repo/config.test.d.ts +7 -0
  25. package/dist/repo/config.test.d.ts.map +1 -0
  26. package/dist/repo/config.test.js +173 -0
  27. package/dist/repo/config.test.js.map +1 -0
  28. package/dist/repo/manager.d.ts +20 -1
  29. package/dist/repo/manager.d.ts.map +1 -1
  30. package/dist/repo/manager.js +68 -2
  31. package/dist/repo/manager.js.map +1 -1
  32. package/dist/repo/organization.d.ts +46 -0
  33. package/dist/repo/organization.d.ts.map +1 -0
  34. package/dist/repo/organization.js +119 -0
  35. package/dist/repo/organization.js.map +1 -0
  36. package/dist/repo/organization.test.d.ts +7 -0
  37. package/dist/repo/organization.test.d.ts.map +1 -0
  38. package/dist/repo/organization.test.js +241 -0
  39. package/dist/repo/organization.test.js.map +1 -0
  40. package/dist/repo/path-generator.d.ts +53 -0
  41. package/dist/repo/path-generator.d.ts.map +1 -0
  42. package/dist/repo/path-generator.js +126 -0
  43. package/dist/repo/path-generator.js.map +1 -0
  44. package/dist/repo/path-generator.test.d.ts +7 -0
  45. package/dist/repo/path-generator.test.d.ts.map +1 -0
  46. package/dist/repo/path-generator.test.js +278 -0
  47. package/dist/repo/path-generator.test.js.map +1 -0
  48. package/dist/spec/manager.js +1 -1
  49. package/dist/spec/manager.js.map +1 -1
  50. package/package.json +3 -2
@@ -0,0 +1,112 @@
1
+ import { RepoConfig as BaseRepoConfig } from '../common/yaml-config.js';
2
+ /**
3
+ * Worktree configuration options
4
+ */
5
+ export interface WorktreeConfig {
6
+ /** Default location for worktrees (e.g., "~/.claude-worktrees/") */
7
+ defaultLocation: string;
8
+ /** Path pattern template (e.g., "{organization}-{project}-{work-id}") */
9
+ pathPattern: string;
10
+ }
11
+ /**
12
+ * Extended repository configuration with worktree support
13
+ */
14
+ export interface RepoConfigExtended extends BaseRepoConfig {
15
+ worktree?: WorktreeConfig;
16
+ }
17
+ /**
18
+ * Get default worktree configuration
19
+ *
20
+ * @returns Default worktree configuration with SPEC-00030 path pattern
21
+ */
22
+ export declare function getDefaultWorktreeConfig(): WorktreeConfig;
23
+ /**
24
+ * Load repository configuration with worktree support
25
+ *
26
+ * Loads from `.fractary/core/config.yaml` and returns the repo section
27
+ * with worktree configuration. Falls back to defaults if not configured.
28
+ *
29
+ * @param cwd Working directory to start searching for config (default: process.cwd())
30
+ * @returns Repository configuration with worktree settings
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const config = await loadRepoConfig('/path/to/project');
35
+ * const worktreePath = config.worktree.defaultLocation;
36
+ * ```
37
+ */
38
+ export declare function loadRepoConfig(cwd?: string): Promise<RepoConfigExtended>;
39
+ /**
40
+ * Save repository configuration with worktree support
41
+ *
42
+ * Saves to `.fractary/core/config.yaml`, merging with existing configuration.
43
+ *
44
+ * @param cwd Working directory to save config to
45
+ * @param config Repository configuration to save
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * await saveRepoConfig('/path/to/project', {
50
+ * active_handler: 'github',
51
+ * handlers: {},
52
+ * worktree: {
53
+ * defaultLocation: '~/my-worktrees',
54
+ * pathPattern: '{organization}-{project}-{work-id}',
55
+ * legacySupport: true,
56
+ * autoMigrate: false
57
+ * }
58
+ * });
59
+ * ```
60
+ */
61
+ export declare function saveRepoConfig(cwd: string, config: RepoConfigExtended): Promise<void>;
62
+ /**
63
+ * Expand tilde (~) in paths to home directory
64
+ *
65
+ * @param filePath Path that may contain tilde prefix
66
+ * @returns Expanded absolute path
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * expandTilde('~/worktrees') // Returns '/Users/username/worktrees'
71
+ * expandTilde('/absolute/path') // Returns '/absolute/path'
72
+ * ```
73
+ */
74
+ export declare function expandTilde(filePath: string): string;
75
+ /**
76
+ * Apply a path pattern template with substitutions
77
+ *
78
+ * Replaces placeholders in the pattern:
79
+ * - {organization} → organization name
80
+ * - {project} → project name
81
+ * - {work-id} → work item ID
82
+ *
83
+ * @param pattern Path pattern template
84
+ * @param substitutions Values to substitute
85
+ * @returns Path with substitutions applied
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * applyPathPattern('{organization}-{project}-{work-id}', {
90
+ * organization: 'fractary',
91
+ * project: 'core',
92
+ * 'work-id': '258'
93
+ * });
94
+ * // Returns 'fractary-core-258'
95
+ * ```
96
+ */
97
+ export declare function applyPathPattern(pattern: string, substitutions: Record<string, string>): string;
98
+ /**
99
+ * Validate that a path pattern contains all required placeholders
100
+ *
101
+ * @param pattern Path pattern to validate
102
+ * @param requiredPlaceholders Required placeholder names
103
+ * @returns Array of missing placeholder names (empty if valid)
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * validatePathPattern('{organization}-{project}', ['organization', 'project', 'work-id']);
108
+ * // Returns ['work-id']
109
+ * ```
110
+ */
111
+ export declare function validatePathPattern(pattern: string, requiredPlaceholders: string[]): string[];
112
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/repo/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmC,UAAU,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEzG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAKzD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0B7F;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,CASR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,MAAM,EAAE,GAC7B,MAAM,EAAE,CAUV"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getDefaultWorktreeConfig = getDefaultWorktreeConfig;
37
+ exports.loadRepoConfig = loadRepoConfig;
38
+ exports.saveRepoConfig = saveRepoConfig;
39
+ exports.expandTilde = expandTilde;
40
+ exports.applyPathPattern = applyPathPattern;
41
+ exports.validatePathPattern = validatePathPattern;
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const yaml_config_js_1 = require("../common/yaml-config.js");
45
+ /**
46
+ * Get default worktree configuration
47
+ *
48
+ * @returns Default worktree configuration with SPEC-00030 path pattern
49
+ */
50
+ function getDefaultWorktreeConfig() {
51
+ return {
52
+ defaultLocation: path.join(os.homedir(), '.claude-worktrees'),
53
+ pathPattern: '{organization}-{project}-{work-id}'
54
+ };
55
+ }
56
+ /**
57
+ * Load repository configuration with worktree support
58
+ *
59
+ * Loads from `.fractary/core/config.yaml` and returns the repo section
60
+ * with worktree configuration. Falls back to defaults if not configured.
61
+ *
62
+ * @param cwd Working directory to start searching for config (default: process.cwd())
63
+ * @returns Repository configuration with worktree settings
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const config = await loadRepoConfig('/path/to/project');
68
+ * const worktreePath = config.worktree.defaultLocation;
69
+ * ```
70
+ */
71
+ async function loadRepoConfig(cwd = process.cwd()) {
72
+ try {
73
+ const yamlConfig = (0, yaml_config_js_1.loadYamlConfig)({ projectRoot: cwd });
74
+ if (yamlConfig?.repo) {
75
+ // Merge with defaults to ensure all fields are present
76
+ const worktreeConfig = {
77
+ ...getDefaultWorktreeConfig(),
78
+ ...yamlConfig.repo.worktree
79
+ };
80
+ return {
81
+ ...yamlConfig.repo,
82
+ worktree: worktreeConfig
83
+ };
84
+ }
85
+ }
86
+ catch (error) {
87
+ // Config doesn't exist or is invalid, use defaults
88
+ }
89
+ // Return default configuration
90
+ return {
91
+ active_handler: 'github',
92
+ handlers: {},
93
+ worktree: getDefaultWorktreeConfig()
94
+ };
95
+ }
96
+ /**
97
+ * Save repository configuration with worktree support
98
+ *
99
+ * Saves to `.fractary/core/config.yaml`, merging with existing configuration.
100
+ *
101
+ * @param cwd Working directory to save config to
102
+ * @param config Repository configuration to save
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * await saveRepoConfig('/path/to/project', {
107
+ * active_handler: 'github',
108
+ * handlers: {},
109
+ * worktree: {
110
+ * defaultLocation: '~/my-worktrees',
111
+ * pathPattern: '{organization}-{project}-{work-id}',
112
+ * legacySupport: true,
113
+ * autoMigrate: false
114
+ * }
115
+ * });
116
+ * ```
117
+ */
118
+ async function saveRepoConfig(cwd, config) {
119
+ // Load existing config to preserve other plugin settings
120
+ let yamlConfig = (0, yaml_config_js_1.loadYamlConfig)({ projectRoot: cwd });
121
+ if (!yamlConfig) {
122
+ // Create minimal config structure if doesn't exist
123
+ yamlConfig = {
124
+ version: '2.0'
125
+ };
126
+ }
127
+ // Update repo section
128
+ yamlConfig.repo = config;
129
+ // Write back to file
130
+ (0, yaml_config_js_1.writeYamlConfig)(yamlConfig, cwd);
131
+ }
132
+ /**
133
+ * Expand tilde (~) in paths to home directory
134
+ *
135
+ * @param filePath Path that may contain tilde prefix
136
+ * @returns Expanded absolute path
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * expandTilde('~/worktrees') // Returns '/Users/username/worktrees'
141
+ * expandTilde('/absolute/path') // Returns '/absolute/path'
142
+ * ```
143
+ */
144
+ function expandTilde(filePath) {
145
+ if (filePath.startsWith('~/') || filePath === '~') {
146
+ return path.join(os.homedir(), filePath.slice(1));
147
+ }
148
+ return filePath;
149
+ }
150
+ /**
151
+ * Apply a path pattern template with substitutions
152
+ *
153
+ * Replaces placeholders in the pattern:
154
+ * - {organization} → organization name
155
+ * - {project} → project name
156
+ * - {work-id} → work item ID
157
+ *
158
+ * @param pattern Path pattern template
159
+ * @param substitutions Values to substitute
160
+ * @returns Path with substitutions applied
161
+ *
162
+ * @example
163
+ * ```typescript
164
+ * applyPathPattern('{organization}-{project}-{work-id}', {
165
+ * organization: 'fractary',
166
+ * project: 'core',
167
+ * 'work-id': '258'
168
+ * });
169
+ * // Returns 'fractary-core-258'
170
+ * ```
171
+ */
172
+ function applyPathPattern(pattern, substitutions) {
173
+ let result = pattern;
174
+ for (const [key, value] of Object.entries(substitutions)) {
175
+ const placeholder = `{${key}}`;
176
+ result = result.replace(new RegExp(placeholder.replace(/[{}]/g, '\\$&'), 'g'), value);
177
+ }
178
+ return result;
179
+ }
180
+ /**
181
+ * Validate that a path pattern contains all required placeholders
182
+ *
183
+ * @param pattern Path pattern to validate
184
+ * @param requiredPlaceholders Required placeholder names
185
+ * @returns Array of missing placeholder names (empty if valid)
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * validatePathPattern('{organization}-{project}', ['organization', 'project', 'work-id']);
190
+ * // Returns ['work-id']
191
+ * ```
192
+ */
193
+ function validatePathPattern(pattern, requiredPlaceholders) {
194
+ const missing = [];
195
+ for (const placeholder of requiredPlaceholders) {
196
+ if (!pattern.includes(`{${placeholder}}`)) {
197
+ missing.push(placeholder);
198
+ }
199
+ }
200
+ return missing;
201
+ }
202
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/repo/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fractary/sdk - Configuration Tests
3
+ *
4
+ * Tests for repo configuration management.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/repo/config.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ /**
3
+ * @fractary/sdk - Configuration Tests
4
+ *
5
+ * Tests for repo configuration management.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const vitest_1 = require("vitest");
9
+ const config_js_1 = require("./config.js");
10
+ (0, vitest_1.describe)('expandTilde', () => {
11
+ const originalHome = process.env.HOME;
12
+ (0, vitest_1.beforeEach)(() => {
13
+ process.env.HOME = '/home/testuser';
14
+ });
15
+ (0, vitest_1.afterEach)(() => {
16
+ process.env.HOME = originalHome;
17
+ });
18
+ (0, vitest_1.it)('should expand ~ to HOME directory', () => {
19
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('~/projects/repo')).toBe('/home/testuser/projects/repo');
20
+ });
21
+ (0, vitest_1.it)('should expand ~/ at start of path', () => {
22
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('~/.claude-worktrees/fractary-core-258')).toBe('/home/testuser/.claude-worktrees/fractary-core-258');
23
+ });
24
+ (0, vitest_1.it)('should not expand ~ in middle of path', () => {
25
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('/path/~/projects')).toBe('/path/~/projects');
26
+ });
27
+ (0, vitest_1.it)('should not expand ~ at end of path', () => {
28
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('/path/to/~')).toBe('/path/to/~');
29
+ });
30
+ (0, vitest_1.it)('should handle paths without tilde', () => {
31
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('/absolute/path/to/file')).toBe('/absolute/path/to/file');
32
+ });
33
+ (0, vitest_1.it)('should handle relative paths without tilde', () => {
34
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('../relative/path')).toBe('../relative/path');
35
+ });
36
+ (0, vitest_1.it)('should handle empty string', () => {
37
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('')).toBe('');
38
+ });
39
+ (0, vitest_1.it)('should fallback to ~ if HOME is undefined', () => {
40
+ delete process.env.HOME;
41
+ (0, vitest_1.expect)((0, config_js_1.expandTilde)('~/projects')).toBe('~/projects');
42
+ });
43
+ });
44
+ (0, vitest_1.describe)('applyPathPattern', () => {
45
+ (0, vitest_1.it)('should substitute single placeholder', () => {
46
+ const result = (0, config_js_1.applyPathPattern)('{work-id}', {
47
+ 'work-id': '258',
48
+ });
49
+ (0, vitest_1.expect)(result).toBe('258');
50
+ });
51
+ (0, vitest_1.it)('should substitute multiple placeholders', () => {
52
+ const result = (0, config_js_1.applyPathPattern)('{organization}-{project}-{work-id}', {
53
+ organization: 'fractary',
54
+ project: 'core',
55
+ 'work-id': '258',
56
+ });
57
+ (0, vitest_1.expect)(result).toBe('fractary-core-258');
58
+ });
59
+ (0, vitest_1.it)('should handle pattern with literal text', () => {
60
+ const result = (0, config_js_1.applyPathPattern)('issue-{work-id}-branch', {
61
+ 'work-id': '258',
62
+ });
63
+ (0, vitest_1.expect)(result).toBe('issue-258-branch');
64
+ });
65
+ (0, vitest_1.it)('should handle pattern with slashes', () => {
66
+ const result = (0, config_js_1.applyPathPattern)('{project}/{work-id}', {
67
+ project: 'core',
68
+ 'work-id': '258',
69
+ });
70
+ (0, vitest_1.expect)(result).toBe('core/258');
71
+ });
72
+ (0, vitest_1.it)('should leave unknown placeholders unchanged', () => {
73
+ const result = (0, config_js_1.applyPathPattern)('{organization}-{project}-{unknown}', {
74
+ organization: 'fractary',
75
+ project: 'core',
76
+ });
77
+ (0, vitest_1.expect)(result).toBe('fractary-core-{unknown}');
78
+ });
79
+ (0, vitest_1.it)('should handle empty pattern', () => {
80
+ const result = (0, config_js_1.applyPathPattern)('', {
81
+ organization: 'fractary',
82
+ });
83
+ (0, vitest_1.expect)(result).toBe('');
84
+ });
85
+ (0, vitest_1.it)('should handle pattern with no placeholders', () => {
86
+ const result = (0, config_js_1.applyPathPattern)('static-path', {
87
+ organization: 'fractary',
88
+ });
89
+ (0, vitest_1.expect)(result).toBe('static-path');
90
+ });
91
+ (0, vitest_1.it)('should handle repeated placeholders', () => {
92
+ const result = (0, config_js_1.applyPathPattern)('{project}-{project}-{work-id}', {
93
+ project: 'core',
94
+ 'work-id': '258',
95
+ });
96
+ (0, vitest_1.expect)(result).toBe('core-core-258');
97
+ });
98
+ (0, vitest_1.it)('should handle special characters in substitution values', () => {
99
+ const result = (0, config_js_1.applyPathPattern)('{organization}-{project}', {
100
+ organization: 'my-company',
101
+ project: 'web_app',
102
+ });
103
+ (0, vitest_1.expect)(result).toBe('my-company-web_app');
104
+ });
105
+ });
106
+ (0, vitest_1.describe)('getDefaultWorktreeConfig', () => {
107
+ (0, vitest_1.it)('should return default configuration', () => {
108
+ const config = (0, config_js_1.getDefaultWorktreeConfig)();
109
+ (0, vitest_1.expect)(config).toEqual({
110
+ defaultLocation: '~/.claude-worktrees/',
111
+ pathPattern: '{organization}-{project}-{work-id}',
112
+ legacySupport: true,
113
+ autoMigrate: false,
114
+ });
115
+ });
116
+ (0, vitest_1.it)('should return a new object each time', () => {
117
+ const config1 = (0, config_js_1.getDefaultWorktreeConfig)();
118
+ const config2 = (0, config_js_1.getDefaultWorktreeConfig)();
119
+ (0, vitest_1.expect)(config1).not.toBe(config2);
120
+ (0, vitest_1.expect)(config1).toEqual(config2);
121
+ });
122
+ });
123
+ (0, vitest_1.describe)('loadRepoConfig', () => {
124
+ // These tests would require mocking the yaml-config module
125
+ // Skipping for now as the actual implementation uses the unified config system
126
+ (0, vitest_1.it)('should load config from .fractary/core/config.yaml', async () => {
127
+ // Would need to mock loadUnifiedConfig
128
+ });
129
+ (0, vitest_1.it)('should merge with defaults if config is partial', async () => {
130
+ // Would need to mock loadUnifiedConfig
131
+ });
132
+ (0, vitest_1.it)('should return defaults if config file does not exist', async () => {
133
+ // Would need to mock loadUnifiedConfig
134
+ });
135
+ });
136
+ (0, vitest_1.describe)('Integration tests', () => {
137
+ (0, vitest_1.describe)('Path generation with config', () => {
138
+ (0, vitest_1.it)('should generate correct path with default config', () => {
139
+ const config = (0, config_js_1.getDefaultWorktreeConfig)();
140
+ const pattern = (0, config_js_1.applyPathPattern)(config.pathPattern, {
141
+ organization: 'fractary',
142
+ project: 'core',
143
+ 'work-id': '258',
144
+ });
145
+ const location = (0, config_js_1.expandTilde)(config.defaultLocation);
146
+ (0, vitest_1.expect)(location).toContain('.claude-worktrees');
147
+ (0, vitest_1.expect)(pattern).toBe('fractary-core-258');
148
+ });
149
+ (0, vitest_1.it)('should generate correct path with custom config', () => {
150
+ const customConfig = {
151
+ defaultLocation: '~/my-worktrees/',
152
+ pathPattern: '{project}/{work-id}',
153
+ legacySupport: true,
154
+ autoMigrate: false,
155
+ };
156
+ const pattern = (0, config_js_1.applyPathPattern)(customConfig.pathPattern, {
157
+ project: 'core',
158
+ 'work-id': '258',
159
+ });
160
+ const location = (0, config_js_1.expandTilde)(customConfig.defaultLocation);
161
+ (0, vitest_1.expect)(location).toContain('my-worktrees');
162
+ (0, vitest_1.expect)(pattern).toBe('core/258');
163
+ });
164
+ });
165
+ (0, vitest_1.describe)('SPEC-00030 compliance', () => {
166
+ (0, vitest_1.it)('should generate SPEC-00030 pattern with defaults', () => {
167
+ const config = (0, config_js_1.getDefaultWorktreeConfig)();
168
+ (0, vitest_1.expect)(config.pathPattern).toBe('{organization}-{project}-{work-id}');
169
+ (0, vitest_1.expect)(config.defaultLocation).toBe('~/.claude-worktrees/');
170
+ });
171
+ });
172
+ });
173
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/repo/config.test.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,8 @@ export declare class RepoManager {
14
14
  private git;
15
15
  private provider;
16
16
  private config;
17
- constructor(config?: RepoConfig);
17
+ private cwd;
18
+ constructor(config?: RepoConfig, cwd?: string);
18
19
  /**
19
20
  * Get the current platform
20
21
  */
@@ -175,5 +176,23 @@ export declare class RepoManager {
175
176
  description: string;
176
177
  workId?: string;
177
178
  }): string;
179
+ /**
180
+ * Get organization name from git remote
181
+ *
182
+ * Extracts the organization name from the git remote URL.
183
+ * Falls back to 'local' if no remote or extraction fails.
184
+ *
185
+ * @returns Organization name or 'local'
186
+ */
187
+ getOrganization(): Promise<string>;
188
+ /**
189
+ * Get project name from git remote or directory
190
+ *
191
+ * Extracts the project name from the git remote URL.
192
+ * Falls back to directory basename if no remote.
193
+ *
194
+ * @returns Project name
195
+ */
196
+ getProjectName(): Promise<string>;
178
197
  }
179
198
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/repo/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/repo/manager.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,39 @@
4
4
  *
5
5
  * High-level repository operations combining Git CLI and platform APIs.
6
6
  */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
7
40
  Object.defineProperty(exports, "__esModule", { value: true });
8
41
  exports.RepoManager = void 0;
9
42
  const git_1 = require("./git");
@@ -36,9 +69,11 @@ class RepoManager {
36
69
  git;
37
70
  provider;
38
71
  config;
39
- constructor(config) {
72
+ cwd;
73
+ constructor(config, cwd) {
74
+ this.cwd = cwd || process.cwd();
40
75
  this.config = config || (0, config_1.loadRepoConfig)() || { platform: 'github' };
41
- this.git = new git_1.Git();
76
+ this.git = new git_1.Git(this.cwd);
42
77
  this.provider = createProvider(this.config);
43
78
  }
44
79
  /**
@@ -428,6 +463,37 @@ class RepoManager {
428
463
  }
429
464
  return `${prefix}/${slug}`;
430
465
  }
466
+ /**
467
+ * Get organization name from git remote
468
+ *
469
+ * Extracts the organization name from the git remote URL.
470
+ * Falls back to 'local' if no remote or extraction fails.
471
+ *
472
+ * @returns Organization name or 'local'
473
+ */
474
+ async getOrganization() {
475
+ const { getRemoteInfo } = await Promise.resolve().then(() => __importStar(require('./organization.js')));
476
+ const remoteInfo = await getRemoteInfo(this.cwd);
477
+ return remoteInfo?.organization || 'local';
478
+ }
479
+ /**
480
+ * Get project name from git remote or directory
481
+ *
482
+ * Extracts the project name from the git remote URL.
483
+ * Falls back to directory basename if no remote.
484
+ *
485
+ * @returns Project name
486
+ */
487
+ async getProjectName() {
488
+ const { getRemoteInfo } = await Promise.resolve().then(() => __importStar(require('./organization.js')));
489
+ const path = await Promise.resolve().then(() => __importStar(require('path')));
490
+ const remoteInfo = await getRemoteInfo(this.cwd);
491
+ if (remoteInfo?.project) {
492
+ return remoteInfo.project;
493
+ }
494
+ // Fallback to directory name
495
+ return path.basename(this.cwd);
496
+ }
431
497
  }
432
498
  exports.RepoManager = RepoManager;
433
499
  //# sourceMappingURL=manager.js.map