@bretwardjames/ghp-cli 0.1.6 → 0.1.8
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 +63 -11
- package/dist/commands/add-issue.d.ts.map +1 -1
- package/dist/commands/add-issue.js +17 -5
- package/dist/commands/add-issue.js.map +1 -1
- package/dist/commands/config.d.ts +7 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +164 -23
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/edit.d.ts.map +1 -1
- package/dist/commands/edit.js +18 -2
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +8 -4
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/start.d.ts +8 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +287 -87
- package/dist/commands/start.js.map +1 -1
- package/dist/config.d.ts +77 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +396 -20
- package/dist/config.js.map +1 -1
- package/dist/git-utils.d.ts +1 -1
- package/dist/git-utils.d.ts.map +1 -1
- package/dist/git-utils.js +1 -1
- package/dist/git-utils.js.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/config.d.ts
CHANGED
|
@@ -24,22 +24,95 @@ export interface Config {
|
|
|
24
24
|
[name: string]: PlanShortcut;
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the workspace config file path (in repo root)
|
|
29
|
+
*/
|
|
30
|
+
export declare function getWorkspaceConfigPath(): string | null;
|
|
31
|
+
/**
|
|
32
|
+
* Load merged config: defaults → workspace → user
|
|
33
|
+
* User settings override workspace, workspace overrides defaults
|
|
34
|
+
*/
|
|
27
35
|
export declare function loadConfig(): Config;
|
|
28
|
-
export
|
|
36
|
+
export type ConfigScope = 'user' | 'workspace';
|
|
37
|
+
/**
|
|
38
|
+
* Save config to the specified scope
|
|
39
|
+
* @param config The config values to save
|
|
40
|
+
* @param scope 'user' (default) or 'workspace'
|
|
41
|
+
*/
|
|
42
|
+
export declare function saveConfig(config: Partial<Config>, scope?: ConfigScope): void;
|
|
29
43
|
export declare function getConfig<K extends keyof Config>(key: K): Config[K];
|
|
30
|
-
export declare function setConfig<K extends keyof Config>(key: K, value: Config[K]): void;
|
|
44
|
+
export declare function setConfig<K extends keyof Config>(key: K, value: Config[K], scope?: ConfigScope): void;
|
|
31
45
|
export declare function getShortcut(name: string): PlanShortcut | undefined;
|
|
32
46
|
export declare function setShortcut(name: string, shortcut: PlanShortcut): void;
|
|
33
47
|
export declare function deleteShortcut(name: string): void;
|
|
34
48
|
export declare function listShortcuts(): Record<string, PlanShortcut>;
|
|
35
49
|
export declare function getPlanDefaults(): PlanShortcut;
|
|
36
50
|
export declare function setPlanDefaults(defaults: PlanShortcut): void;
|
|
37
|
-
export declare function getConfigPath(): string;
|
|
51
|
+
export declare function getConfigPath(scope?: ConfigScope): string;
|
|
52
|
+
export declare function getUserConfigPath(): string;
|
|
38
53
|
export declare function getAddIssueDefaults(): {
|
|
39
54
|
template?: string;
|
|
40
55
|
project?: string;
|
|
41
56
|
status?: string;
|
|
42
57
|
};
|
|
43
|
-
export declare const CONFIG_KEYS: readonly ["mainBranch", "branchPattern", "startWorkingStatus", "doneStatus"];
|
|
58
|
+
export declare const CONFIG_KEYS: readonly ["mainBranch", "branchPattern", "startWorkingStatus", "doneStatus", "columns"];
|
|
59
|
+
export type ConfigSource = 'default' | 'workspace' | 'user';
|
|
60
|
+
export interface ConfigValueWithSource {
|
|
61
|
+
value: string | undefined;
|
|
62
|
+
source: ConfigSource;
|
|
63
|
+
}
|
|
44
64
|
export declare function listConfig(): Record<string, string | undefined>;
|
|
65
|
+
/**
|
|
66
|
+
* List simple config values with their source (default, workspace, or user)
|
|
67
|
+
*/
|
|
68
|
+
export declare function listConfigWithSources(): Record<string, ConfigValueWithSource>;
|
|
69
|
+
export interface FullConfigWithSources {
|
|
70
|
+
settings: Record<string, ConfigValueWithSource>;
|
|
71
|
+
defaults: {
|
|
72
|
+
plan: {
|
|
73
|
+
value: PlanShortcut;
|
|
74
|
+
source: ConfigSource;
|
|
75
|
+
};
|
|
76
|
+
addIssue: {
|
|
77
|
+
value: {
|
|
78
|
+
template?: string;
|
|
79
|
+
project?: string;
|
|
80
|
+
status?: string;
|
|
81
|
+
};
|
|
82
|
+
source: ConfigSource;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
shortcuts: Record<string, {
|
|
86
|
+
value: PlanShortcut;
|
|
87
|
+
source: ConfigSource;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get full config with sources for all sections
|
|
92
|
+
*/
|
|
93
|
+
export declare function getFullConfigWithSources(): FullConfigWithSources;
|
|
94
|
+
export interface VSCodeSettingsResult {
|
|
95
|
+
workspace: Record<string, unknown>;
|
|
96
|
+
user: Record<string, unknown>;
|
|
97
|
+
errors: string[];
|
|
98
|
+
}
|
|
99
|
+
export interface SyncResult {
|
|
100
|
+
synced: Array<{
|
|
101
|
+
key: string;
|
|
102
|
+
value: string;
|
|
103
|
+
source: 'workspace' | 'user';
|
|
104
|
+
}>;
|
|
105
|
+
skipped: string[];
|
|
106
|
+
errors: string[];
|
|
107
|
+
editor: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Sync VS Code/Cursor settings to CLI config
|
|
111
|
+
*/
|
|
112
|
+
export declare function syncFromVSCode(targetScope?: ConfigScope): SyncResult;
|
|
113
|
+
export declare function getVSCodeSettingsPaths(): {
|
|
114
|
+
workspace: string | null;
|
|
115
|
+
cursorUser: string;
|
|
116
|
+
codeUser: string;
|
|
117
|
+
};
|
|
45
118
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
-
import { homedir } from 'os';
|
|
2
|
+
import { homedir, platform } from 'os';
|
|
3
3
|
import { join } from 'path';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
// User config (personal overrides)
|
|
6
|
+
const USER_CONFIG_DIR = join(homedir(), '.config', 'ghp-cli');
|
|
7
|
+
const USER_CONFIG_FILE = join(USER_CONFIG_DIR, 'config.json');
|
|
8
|
+
// Workspace config filename (in repo root)
|
|
9
|
+
const WORKSPACE_CONFIG_DIR = '.ghp';
|
|
10
|
+
const WORKSPACE_CONFIG_FILE = 'config.json';
|
|
6
11
|
const DEFAULT_CONFIG = {
|
|
7
12
|
mainBranch: 'main',
|
|
8
13
|
branchPattern: '{user}/{number}-{title}',
|
|
@@ -11,32 +16,132 @@ const DEFAULT_CONFIG = {
|
|
|
11
16
|
defaults: {},
|
|
12
17
|
shortcuts: {},
|
|
13
18
|
};
|
|
14
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Get the git repository root directory
|
|
21
|
+
*/
|
|
22
|
+
function getRepoRoot() {
|
|
23
|
+
try {
|
|
24
|
+
return execSync('git rev-parse --show-toplevel', { encoding: 'utf-8' }).trim();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the workspace config file path (in repo root)
|
|
32
|
+
*/
|
|
33
|
+
export function getWorkspaceConfigPath() {
|
|
34
|
+
const repoRoot = getRepoRoot();
|
|
35
|
+
if (!repoRoot)
|
|
36
|
+
return null;
|
|
37
|
+
return join(repoRoot, WORKSPACE_CONFIG_DIR, WORKSPACE_CONFIG_FILE);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Load workspace config from .ghp/config.json in repo root
|
|
41
|
+
*/
|
|
42
|
+
function loadWorkspaceConfig() {
|
|
43
|
+
const configPath = getWorkspaceConfigPath();
|
|
44
|
+
if (!configPath)
|
|
45
|
+
return {};
|
|
15
46
|
try {
|
|
16
|
-
if (existsSync(
|
|
17
|
-
const data = readFileSync(
|
|
18
|
-
return
|
|
47
|
+
if (existsSync(configPath)) {
|
|
48
|
+
const data = readFileSync(configPath, 'utf-8');
|
|
49
|
+
return JSON.parse(data);
|
|
19
50
|
}
|
|
20
51
|
}
|
|
21
52
|
catch {
|
|
22
|
-
// Ignore errors
|
|
53
|
+
// Ignore errors
|
|
23
54
|
}
|
|
24
|
-
return {
|
|
55
|
+
return {};
|
|
25
56
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
57
|
+
/**
|
|
58
|
+
* Load user config from ~/.config/ghp-cli/config.json
|
|
59
|
+
*/
|
|
60
|
+
function loadUserConfig() {
|
|
61
|
+
try {
|
|
62
|
+
if (existsSync(USER_CONFIG_FILE)) {
|
|
63
|
+
const data = readFileSync(USER_CONFIG_FILE, 'utf-8');
|
|
64
|
+
return JSON.parse(data);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Ignore errors
|
|
69
|
+
}
|
|
70
|
+
return {};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Deep merge two config objects (right overwrites left, but nested objects are merged)
|
|
74
|
+
*/
|
|
75
|
+
function deepMerge(base, override) {
|
|
76
|
+
const result = { ...base };
|
|
77
|
+
for (const [key, overrideValue] of Object.entries(override)) {
|
|
78
|
+
if (overrideValue === undefined)
|
|
79
|
+
continue;
|
|
80
|
+
const baseValue = result[key];
|
|
81
|
+
if (typeof overrideValue === 'object' &&
|
|
82
|
+
overrideValue !== null &&
|
|
83
|
+
!Array.isArray(overrideValue) &&
|
|
84
|
+
typeof baseValue === 'object' &&
|
|
85
|
+
baseValue !== null &&
|
|
86
|
+
!Array.isArray(baseValue)) {
|
|
87
|
+
// Deep merge nested objects (defaults, shortcuts)
|
|
88
|
+
result[key] = { ...baseValue, ...overrideValue };
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Direct override for primitives and arrays
|
|
92
|
+
result[key] = overrideValue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load merged config: defaults → workspace → user
|
|
99
|
+
* User settings override workspace, workspace overrides defaults
|
|
100
|
+
*/
|
|
101
|
+
export function loadConfig() {
|
|
102
|
+
const workspaceConfig = loadWorkspaceConfig();
|
|
103
|
+
const userConfig = loadUserConfig();
|
|
104
|
+
// Merge: defaults → workspace → user
|
|
105
|
+
const merged = deepMerge(deepMerge(DEFAULT_CONFIG, workspaceConfig), userConfig);
|
|
106
|
+
return merged;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Save config to the specified scope
|
|
110
|
+
* @param config The config values to save
|
|
111
|
+
* @param scope 'user' (default) or 'workspace'
|
|
112
|
+
*/
|
|
113
|
+
export function saveConfig(config, scope = 'user') {
|
|
114
|
+
if (scope === 'workspace') {
|
|
115
|
+
const repoRoot = getRepoRoot();
|
|
116
|
+
if (!repoRoot) {
|
|
117
|
+
throw new Error('Not in a git repository');
|
|
118
|
+
}
|
|
119
|
+
const configDir = join(repoRoot, WORKSPACE_CONFIG_DIR);
|
|
120
|
+
const configPath = join(configDir, WORKSPACE_CONFIG_FILE);
|
|
121
|
+
// Load existing workspace config and merge
|
|
122
|
+
const existing = loadWorkspaceConfig();
|
|
123
|
+
const merged = deepMerge(existing, config);
|
|
124
|
+
if (!existsSync(configDir)) {
|
|
125
|
+
mkdirSync(configDir, { recursive: true });
|
|
126
|
+
}
|
|
127
|
+
writeFileSync(configPath, JSON.stringify(merged, null, 2));
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// User config
|
|
131
|
+
const existing = loadUserConfig();
|
|
132
|
+
const merged = deepMerge(existing, config);
|
|
133
|
+
if (!existsSync(USER_CONFIG_DIR)) {
|
|
134
|
+
mkdirSync(USER_CONFIG_DIR, { recursive: true });
|
|
135
|
+
}
|
|
136
|
+
writeFileSync(USER_CONFIG_FILE, JSON.stringify(merged, null, 2));
|
|
31
137
|
}
|
|
32
|
-
writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2));
|
|
33
138
|
}
|
|
34
139
|
export function getConfig(key) {
|
|
35
140
|
const config = loadConfig();
|
|
36
141
|
return config[key];
|
|
37
142
|
}
|
|
38
|
-
export function setConfig(key, value) {
|
|
39
|
-
saveConfig({ [key]: value });
|
|
143
|
+
export function setConfig(key, value, scope = 'user') {
|
|
144
|
+
saveConfig({ [key]: value }, scope);
|
|
40
145
|
}
|
|
41
146
|
export function getShortcut(name) {
|
|
42
147
|
const config = loadConfig();
|
|
@@ -68,14 +173,21 @@ export function setPlanDefaults(defaults) {
|
|
|
68
173
|
defaults: { ...config.defaults, plan: defaults }
|
|
69
174
|
});
|
|
70
175
|
}
|
|
71
|
-
export function getConfigPath() {
|
|
72
|
-
|
|
176
|
+
export function getConfigPath(scope) {
|
|
177
|
+
if (scope === 'workspace') {
|
|
178
|
+
const path = getWorkspaceConfigPath();
|
|
179
|
+
return path || '(not in a git repository)';
|
|
180
|
+
}
|
|
181
|
+
return USER_CONFIG_FILE;
|
|
182
|
+
}
|
|
183
|
+
export function getUserConfigPath() {
|
|
184
|
+
return USER_CONFIG_FILE;
|
|
73
185
|
}
|
|
74
186
|
export function getAddIssueDefaults() {
|
|
75
187
|
const config = loadConfig();
|
|
76
188
|
return config.defaults?.addIssue || {};
|
|
77
189
|
}
|
|
78
|
-
export const CONFIG_KEYS = ['mainBranch', 'branchPattern', 'startWorkingStatus', 'doneStatus'];
|
|
190
|
+
export const CONFIG_KEYS = ['mainBranch', 'branchPattern', 'startWorkingStatus', 'doneStatus', 'columns'];
|
|
79
191
|
export function listConfig() {
|
|
80
192
|
const config = loadConfig();
|
|
81
193
|
return {
|
|
@@ -85,4 +197,268 @@ export function listConfig() {
|
|
|
85
197
|
doneStatus: config.doneStatus,
|
|
86
198
|
};
|
|
87
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* List simple config values with their source (default, workspace, or user)
|
|
202
|
+
*/
|
|
203
|
+
export function listConfigWithSources() {
|
|
204
|
+
const userConfig = loadUserConfig();
|
|
205
|
+
const workspaceConfig = loadWorkspaceConfig();
|
|
206
|
+
const result = {};
|
|
207
|
+
for (const key of CONFIG_KEYS) {
|
|
208
|
+
if (userConfig[key] !== undefined) {
|
|
209
|
+
result[key] = { value: userConfig[key], source: 'user' };
|
|
210
|
+
}
|
|
211
|
+
else if (workspaceConfig[key] !== undefined) {
|
|
212
|
+
result[key] = { value: workspaceConfig[key], source: 'workspace' };
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
result[key] = { value: DEFAULT_CONFIG[key], source: 'default' };
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get full config with sources for all sections
|
|
222
|
+
*/
|
|
223
|
+
export function getFullConfigWithSources() {
|
|
224
|
+
const userConfig = loadUserConfig();
|
|
225
|
+
const workspaceConfig = loadWorkspaceConfig();
|
|
226
|
+
const mergedConfig = loadConfig();
|
|
227
|
+
// Simple settings
|
|
228
|
+
const settings = {};
|
|
229
|
+
for (const key of CONFIG_KEYS) {
|
|
230
|
+
if (userConfig[key] !== undefined) {
|
|
231
|
+
settings[key] = { value: userConfig[key], source: 'user' };
|
|
232
|
+
}
|
|
233
|
+
else if (workspaceConfig[key] !== undefined) {
|
|
234
|
+
settings[key] = { value: workspaceConfig[key], source: 'workspace' };
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
settings[key] = { value: DEFAULT_CONFIG[key], source: 'default' };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Defaults - plan
|
|
241
|
+
let planSource = 'default';
|
|
242
|
+
if (userConfig.defaults?.plan)
|
|
243
|
+
planSource = 'user';
|
|
244
|
+
else if (workspaceConfig.defaults?.plan)
|
|
245
|
+
planSource = 'workspace';
|
|
246
|
+
// Defaults - addIssue
|
|
247
|
+
let addIssueSource = 'default';
|
|
248
|
+
if (userConfig.defaults?.addIssue)
|
|
249
|
+
addIssueSource = 'user';
|
|
250
|
+
else if (workspaceConfig.defaults?.addIssue)
|
|
251
|
+
addIssueSource = 'workspace';
|
|
252
|
+
// Shortcuts - track source per shortcut
|
|
253
|
+
const shortcuts = {};
|
|
254
|
+
const allShortcutNames = new Set([
|
|
255
|
+
...Object.keys(workspaceConfig.shortcuts || {}),
|
|
256
|
+
...Object.keys(userConfig.shortcuts || {}),
|
|
257
|
+
]);
|
|
258
|
+
for (const name of allShortcutNames) {
|
|
259
|
+
// User overrides workspace
|
|
260
|
+
if (userConfig.shortcuts?.[name]) {
|
|
261
|
+
shortcuts[name] = { value: userConfig.shortcuts[name], source: 'user' };
|
|
262
|
+
}
|
|
263
|
+
else if (workspaceConfig.shortcuts?.[name]) {
|
|
264
|
+
shortcuts[name] = { value: workspaceConfig.shortcuts[name], source: 'workspace' };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
settings,
|
|
269
|
+
defaults: {
|
|
270
|
+
plan: { value: mergedConfig.defaults?.plan || {}, source: planSource },
|
|
271
|
+
addIssue: { value: mergedConfig.defaults?.addIssue || {}, source: addIssueSource },
|
|
272
|
+
},
|
|
273
|
+
shortcuts,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
// VS Code / Cursor settings paths
|
|
277
|
+
function getVSCodeUserSettingsPath(editor = 'code') {
|
|
278
|
+
const home = homedir();
|
|
279
|
+
const appName = editor === 'cursor' ? 'Cursor' : 'Code';
|
|
280
|
+
switch (platform()) {
|
|
281
|
+
case 'darwin':
|
|
282
|
+
return join(home, 'Library', 'Application Support', appName, 'User', 'settings.json');
|
|
283
|
+
case 'win32':
|
|
284
|
+
return join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), appName, 'User', 'settings.json');
|
|
285
|
+
default: // linux
|
|
286
|
+
return join(home, '.config', appName, 'User', 'settings.json');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function getVSCodeWorkspaceSettingsPath() {
|
|
290
|
+
const repoRoot = getRepoRoot();
|
|
291
|
+
if (!repoRoot)
|
|
292
|
+
return null;
|
|
293
|
+
return join(repoRoot, '.vscode', 'settings.json');
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Strip JSON comments (single-line // and multi-line) to parse JSONC
|
|
297
|
+
*/
|
|
298
|
+
function stripJsonComments(jsonc) {
|
|
299
|
+
let result = '';
|
|
300
|
+
let inString = false;
|
|
301
|
+
let inSingleLineComment = false;
|
|
302
|
+
let inMultiLineComment = false;
|
|
303
|
+
for (let i = 0; i < jsonc.length; i++) {
|
|
304
|
+
const char = jsonc[i];
|
|
305
|
+
const next = jsonc[i + 1];
|
|
306
|
+
if (inSingleLineComment) {
|
|
307
|
+
if (char === '\n') {
|
|
308
|
+
inSingleLineComment = false;
|
|
309
|
+
result += char;
|
|
310
|
+
}
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (inMultiLineComment) {
|
|
314
|
+
if (char === '*' && next === '/') {
|
|
315
|
+
inMultiLineComment = false;
|
|
316
|
+
i++; // skip the /
|
|
317
|
+
}
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
if (inString) {
|
|
321
|
+
result += char;
|
|
322
|
+
if (char === '\\' && next) {
|
|
323
|
+
result += next;
|
|
324
|
+
i++;
|
|
325
|
+
}
|
|
326
|
+
else if (char === '"') {
|
|
327
|
+
inString = false;
|
|
328
|
+
}
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
if (char === '"') {
|
|
332
|
+
inString = true;
|
|
333
|
+
result += char;
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (char === '/' && next === '/') {
|
|
337
|
+
inSingleLineComment = true;
|
|
338
|
+
i++;
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
if (char === '/' && next === '*') {
|
|
342
|
+
inMultiLineComment = true;
|
|
343
|
+
i++;
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
result += char;
|
|
347
|
+
}
|
|
348
|
+
return result;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Read VS Code/Cursor settings and extract ghProjects.* values
|
|
352
|
+
*/
|
|
353
|
+
function readVSCodeSettings(editor = 'code') {
|
|
354
|
+
const result = {
|
|
355
|
+
workspace: {},
|
|
356
|
+
user: {},
|
|
357
|
+
errors: [],
|
|
358
|
+
};
|
|
359
|
+
// Read workspace settings
|
|
360
|
+
const workspacePath = getVSCodeWorkspaceSettingsPath();
|
|
361
|
+
if (workspacePath && existsSync(workspacePath)) {
|
|
362
|
+
try {
|
|
363
|
+
const content = readFileSync(workspacePath, 'utf-8');
|
|
364
|
+
const parsed = JSON.parse(stripJsonComments(content));
|
|
365
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
366
|
+
if (key.startsWith('ghProjects.')) {
|
|
367
|
+
result.workspace[key.replace('ghProjects.', '')] = value;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
result.errors.push(`Failed to parse workspace settings: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Read user settings
|
|
376
|
+
const userPath = getVSCodeUserSettingsPath(editor);
|
|
377
|
+
if (existsSync(userPath)) {
|
|
378
|
+
try {
|
|
379
|
+
const content = readFileSync(userPath, 'utf-8');
|
|
380
|
+
const parsed = JSON.parse(stripJsonComments(content));
|
|
381
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
382
|
+
if (key.startsWith('ghProjects.')) {
|
|
383
|
+
result.user[key.replace('ghProjects.', '')] = value;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
catch (err) {
|
|
388
|
+
result.errors.push(`Failed to parse ${editor} user settings: ${err instanceof Error ? err.message : 'Unknown error'}`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return result;
|
|
392
|
+
}
|
|
393
|
+
// Mapping from VS Code setting names to CLI config keys
|
|
394
|
+
const VSCODE_TO_CLI_MAP = {
|
|
395
|
+
'mainBranch': 'mainBranch',
|
|
396
|
+
'branchNamePattern': 'branchPattern',
|
|
397
|
+
'startWorkingStatus': 'startWorkingStatus',
|
|
398
|
+
'prMergedStatus': 'doneStatus',
|
|
399
|
+
};
|
|
400
|
+
/**
|
|
401
|
+
* Sync VS Code/Cursor settings to CLI config
|
|
402
|
+
*/
|
|
403
|
+
export function syncFromVSCode(targetScope = 'user') {
|
|
404
|
+
// Try Cursor first, fall back to Code
|
|
405
|
+
let editor = 'cursor';
|
|
406
|
+
let vscodeSettings = readVSCodeSettings('cursor');
|
|
407
|
+
const allErrors = [...vscodeSettings.errors];
|
|
408
|
+
// If no Cursor settings found, try VS Code
|
|
409
|
+
if (Object.keys(vscodeSettings.workspace).length === 0 && Object.keys(vscodeSettings.user).length === 0) {
|
|
410
|
+
editor = 'code';
|
|
411
|
+
vscodeSettings = readVSCodeSettings('code');
|
|
412
|
+
allErrors.push(...vscodeSettings.errors);
|
|
413
|
+
}
|
|
414
|
+
const result = {
|
|
415
|
+
synced: [],
|
|
416
|
+
skipped: [],
|
|
417
|
+
errors: allErrors,
|
|
418
|
+
editor: editor === 'cursor' ? 'Cursor' : 'VS Code',
|
|
419
|
+
};
|
|
420
|
+
// Merge workspace and user (user overrides workspace, like VS Code does)
|
|
421
|
+
const merged = { ...vscodeSettings.workspace, ...vscodeSettings.user };
|
|
422
|
+
// Track sources for reporting
|
|
423
|
+
const sources = {};
|
|
424
|
+
for (const key of Object.keys(vscodeSettings.workspace)) {
|
|
425
|
+
sources[key] = 'workspace';
|
|
426
|
+
}
|
|
427
|
+
for (const key of Object.keys(vscodeSettings.user)) {
|
|
428
|
+
sources[key] = 'user';
|
|
429
|
+
}
|
|
430
|
+
// Map and save each setting
|
|
431
|
+
const configUpdates = {};
|
|
432
|
+
for (const [vscodeKey, cliKey] of Object.entries(VSCODE_TO_CLI_MAP)) {
|
|
433
|
+
if (merged[vscodeKey] !== undefined) {
|
|
434
|
+
const value = merged[vscodeKey];
|
|
435
|
+
if (typeof value === 'string') {
|
|
436
|
+
configUpdates[cliKey] = value;
|
|
437
|
+
result.synced.push({
|
|
438
|
+
key: cliKey,
|
|
439
|
+
value,
|
|
440
|
+
source: sources[vscodeKey],
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// Report skipped settings (VS Code settings that don't map to CLI)
|
|
446
|
+
for (const key of Object.keys(merged)) {
|
|
447
|
+
if (!VSCODE_TO_CLI_MAP[key]) {
|
|
448
|
+
result.skipped.push(key);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
// Save to CLI config
|
|
452
|
+
if (Object.keys(configUpdates).length > 0) {
|
|
453
|
+
saveConfig(configUpdates, targetScope);
|
|
454
|
+
}
|
|
455
|
+
return result;
|
|
456
|
+
}
|
|
457
|
+
export function getVSCodeSettingsPaths() {
|
|
458
|
+
return {
|
|
459
|
+
workspace: getVSCodeWorkspaceSettingsPath(),
|
|
460
|
+
cursorUser: getVSCodeUserSettingsPath('cursor'),
|
|
461
|
+
codeUser: getVSCodeUserSettingsPath('code'),
|
|
462
|
+
};
|
|
463
|
+
}
|
|
88
464
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/git-utils.d.ts
CHANGED
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* For CLI usage, all functions use process.cwd() by default.
|
|
5
5
|
* The core library accepts an optional { cwd } parameter for IDE integrations.
|
|
6
6
|
*/
|
|
7
|
-
export { detectRepository, getCurrentBranch, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, pullLatest, fetchOrigin, getCommitsBehind, getCommitsAhead, isGitRepository, getRepositoryRoot, sanitizeForBranchName, generateBranchName, getDefaultBranch, parseGitHubUrl, } from '@bretwardjames/ghp-core';
|
|
7
|
+
export { detectRepository, getCurrentBranch, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, pullLatest, fetchOrigin, getCommitsBehind, getCommitsAhead, isGitRepository, getRepositoryRoot, sanitizeForBranchName, generateBranchName, getDefaultBranch, getLocalBranches, getRemoteBranches, getAllBranches, parseGitHubUrl, } from '@bretwardjames/ghp-core';
|
|
8
8
|
export type { RepoInfo, GitOptions } from '@bretwardjames/ghp-core';
|
|
9
9
|
//# sourceMappingURL=git-utils.d.ts.map
|
package/dist/git-utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACjB,MAAM,yBAAyB,CAAC;AAGjC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/git-utils.js
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
*/
|
|
7
7
|
// Re-export all git utilities from core
|
|
8
8
|
// These all use process.cwd() by default, which is correct for CLI usage
|
|
9
|
-
export { detectRepository, getCurrentBranch, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, pullLatest, fetchOrigin, getCommitsBehind, getCommitsAhead, isGitRepository, getRepositoryRoot, sanitizeForBranchName, generateBranchName, getDefaultBranch, parseGitHubUrl, } from '@bretwardjames/ghp-core';
|
|
9
|
+
export { detectRepository, getCurrentBranch, hasUncommittedChanges, branchExists, createBranch, checkoutBranch, pullLatest, fetchOrigin, getCommitsBehind, getCommitsAhead, isGitRepository, getRepositoryRoot, sanitizeForBranchName, generateBranchName, getDefaultBranch, getLocalBranches, getRemoteBranches, getAllBranches, parseGitHubUrl, } from '@bretwardjames/ghp-core';
|
|
10
10
|
//# sourceMappingURL=git-utils.js.map
|
package/dist/git-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,yEAAyE;AACzE,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACjB,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../src/git-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wCAAwC;AACxC,yEAAyE;AACzE,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,GACjB,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ const program = new Command();
|
|
|
23
23
|
program
|
|
24
24
|
.name('ghp')
|
|
25
25
|
.description('GitHub Projects CLI - manage project boards from your terminal')
|
|
26
|
-
.version('0.1.
|
|
26
|
+
.version('0.1.7');
|
|
27
27
|
// Authentication
|
|
28
28
|
program
|
|
29
29
|
.command('auth')
|
|
@@ -36,8 +36,10 @@ program
|
|
|
36
36
|
.description('View or set configuration')
|
|
37
37
|
.argument('[key]', 'Config key to get/set')
|
|
38
38
|
.argument('[value]', 'Value to set')
|
|
39
|
-
.option('-
|
|
40
|
-
.option('-e, --edit', 'Open config file in editor (
|
|
39
|
+
.option('-s, --show', 'Show merged config from all sources')
|
|
40
|
+
.option('-e, --edit', 'Open config file in editor (explicit)')
|
|
41
|
+
.option('-w, --workspace', 'Target workspace config (.ghp/config.json)')
|
|
42
|
+
.option('-u, --user', 'Target user config (~/.config/ghp-cli/config.json)')
|
|
41
43
|
.action(configCommand);
|
|
42
44
|
// Main views
|
|
43
45
|
program
|