@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.
- package/README.md +183 -30
- package/dist/common/config.d.ts +22 -6
- package/dist/common/config.d.ts.map +1 -1
- package/dist/common/config.js +43 -14
- package/dist/common/config.js.map +1 -1
- package/dist/common/exec-file-no-throw.d.ts +42 -0
- package/dist/common/exec-file-no-throw.d.ts.map +1 -0
- package/dist/common/exec-file-no-throw.js +54 -0
- package/dist/common/exec-file-no-throw.js.map +1 -0
- package/dist/common/types.d.ts +15 -0
- package/dist/common/types.d.ts.map +1 -1
- package/dist/common/yaml-config.d.ts +198 -0
- package/dist/common/yaml-config.d.ts.map +1 -0
- package/dist/common/yaml-config.js +300 -0
- package/dist/common/yaml-config.js.map +1 -0
- package/dist/common/yaml-config.test.d.ts +5 -0
- package/dist/common/yaml-config.test.d.ts.map +1 -0
- package/dist/common/yaml-config.test.js +551 -0
- package/dist/common/yaml-config.test.js.map +1 -0
- package/dist/repo/config.d.ts +112 -0
- package/dist/repo/config.d.ts.map +1 -0
- package/dist/repo/config.js +202 -0
- package/dist/repo/config.js.map +1 -0
- package/dist/repo/config.test.d.ts +7 -0
- package/dist/repo/config.test.d.ts.map +1 -0
- package/dist/repo/config.test.js +173 -0
- package/dist/repo/config.test.js.map +1 -0
- package/dist/repo/manager.d.ts +20 -1
- package/dist/repo/manager.d.ts.map +1 -1
- package/dist/repo/manager.js +68 -2
- package/dist/repo/manager.js.map +1 -1
- package/dist/repo/organization.d.ts +46 -0
- package/dist/repo/organization.d.ts.map +1 -0
- package/dist/repo/organization.js +119 -0
- package/dist/repo/organization.js.map +1 -0
- package/dist/repo/organization.test.d.ts +7 -0
- package/dist/repo/organization.test.d.ts.map +1 -0
- package/dist/repo/organization.test.js +241 -0
- package/dist/repo/organization.test.js.map +1 -0
- package/dist/repo/path-generator.d.ts +53 -0
- package/dist/repo/path-generator.d.ts.map +1 -0
- package/dist/repo/path-generator.js +126 -0
- package/dist/repo/path-generator.js.map +1 -0
- package/dist/repo/path-generator.test.d.ts +7 -0
- package/dist/repo/path-generator.test.d.ts.map +1 -0
- package/dist/repo/path-generator.test.js +278 -0
- package/dist/repo/path-generator.test.js.map +1 -0
- package/dist/spec/manager.js +1 -1
- package/dist/spec/manager.js.map +1 -1
- 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 @@
|
|
|
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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"}
|
package/dist/repo/manager.d.ts
CHANGED
|
@@ -14,7 +14,8 @@ export declare class RepoManager {
|
|
|
14
14
|
private git;
|
|
15
15
|
private provider;
|
|
16
16
|
private config;
|
|
17
|
-
|
|
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":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EACV,MAAM,EACN,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,eAAe,EACf,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAgB,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAwB3E;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAa;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/repo/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/repo/manager.js
CHANGED
|
@@ -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
|
-
|
|
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
|