geeto 0.1.0-beta.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/LICENSE +21 -0
- package/README.md +152 -0
- package/lib/api/copilot-adapter.d.ts +11 -0
- package/lib/api/copilot-adapter.d.ts.map +1 -0
- package/lib/api/copilot-adapter.js +41 -0
- package/lib/api/copilot-adapter.js.map +1 -0
- package/lib/api/copilot-sdk.d.ts +48 -0
- package/lib/api/copilot-sdk.d.ts.map +1 -0
- package/lib/api/copilot-sdk.js +451 -0
- package/lib/api/copilot-sdk.js.map +1 -0
- package/lib/api/copilot.d.ts +21 -0
- package/lib/api/copilot.d.ts.map +1 -0
- package/lib/api/copilot.js +87 -0
- package/lib/api/copilot.js.map +1 -0
- package/lib/api/gemini-sdk.d.ts +24 -0
- package/lib/api/gemini-sdk.d.ts.map +1 -0
- package/lib/api/gemini-sdk.js +245 -0
- package/lib/api/gemini-sdk.js.map +1 -0
- package/lib/api/gemini.d.ts +21 -0
- package/lib/api/gemini.d.ts.map +1 -0
- package/lib/api/gemini.js +87 -0
- package/lib/api/gemini.js.map +1 -0
- package/lib/api/openrouter-sdk.d.ts +58 -0
- package/lib/api/openrouter-sdk.d.ts.map +1 -0
- package/lib/api/openrouter-sdk.js +341 -0
- package/lib/api/openrouter-sdk.js.map +1 -0
- package/lib/api/openrouter.d.ts +17 -0
- package/lib/api/openrouter.d.ts.map +1 -0
- package/lib/api/openrouter.js +111 -0
- package/lib/api/openrouter.js.map +1 -0
- package/lib/api/trello.d.ts +17 -0
- package/lib/api/trello.d.ts.map +1 -0
- package/lib/api/trello.js +72 -0
- package/lib/api/trello.js.map +1 -0
- package/lib/cli/input.d.ts +39 -0
- package/lib/cli/input.d.ts.map +1 -0
- package/lib/cli/input.js +119 -0
- package/lib/cli/input.js.map +1 -0
- package/lib/cli/menu.d.ts +9 -0
- package/lib/cli/menu.d.ts.map +1 -0
- package/lib/cli/menu.js +201 -0
- package/lib/cli/menu.js.map +1 -0
- package/lib/core/constants.d.ts +22 -0
- package/lib/core/constants.d.ts.map +1 -0
- package/lib/core/constants.js +24 -0
- package/lib/core/constants.js.map +1 -0
- package/lib/core/copilot-setup.d.ts +13 -0
- package/lib/core/copilot-setup.d.ts.map +1 -0
- package/lib/core/copilot-setup.js +447 -0
- package/lib/core/copilot-setup.js.map +1 -0
- package/lib/core/gemini-setup.d.ts +8 -0
- package/lib/core/gemini-setup.d.ts.map +1 -0
- package/lib/core/gemini-setup.js +84 -0
- package/lib/core/gemini-setup.js.map +1 -0
- package/lib/core/menu-constants.d.ts +24 -0
- package/lib/core/menu-constants.d.ts.map +1 -0
- package/lib/core/menu-constants.js +22 -0
- package/lib/core/menu-constants.js.map +1 -0
- package/lib/core/openrouter-setup.d.ts +8 -0
- package/lib/core/openrouter-setup.d.ts.map +1 -0
- package/lib/core/openrouter-setup.js +73 -0
- package/lib/core/openrouter-setup.js.map +1 -0
- package/lib/core/setup.d.ts +21 -0
- package/lib/core/setup.d.ts.map +1 -0
- package/lib/core/setup.js +88 -0
- package/lib/core/setup.js.map +1 -0
- package/lib/core/trello-setup.d.ts +8 -0
- package/lib/core/trello-setup.d.ts.map +1 -0
- package/lib/core/trello-setup.js +107 -0
- package/lib/core/trello-setup.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +250 -0
- package/lib/index.js.map +1 -0
- package/lib/types/index.d.ts +78 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +2 -0
- package/lib/types/index.js.map +1 -0
- package/lib/utils/branch-naming.d.ts +11 -0
- package/lib/utils/branch-naming.d.ts.map +1 -0
- package/lib/utils/branch-naming.js +396 -0
- package/lib/utils/branch-naming.js.map +1 -0
- package/lib/utils/colors.d.ts +14 -0
- package/lib/utils/colors.d.ts.map +1 -0
- package/lib/utils/colors.js +14 -0
- package/lib/utils/colors.js.map +1 -0
- package/lib/utils/commit-helpers.d.ts +53 -0
- package/lib/utils/commit-helpers.d.ts.map +1 -0
- package/lib/utils/commit-helpers.js +177 -0
- package/lib/utils/commit-helpers.js.map +1 -0
- package/lib/utils/config.d.ts +87 -0
- package/lib/utils/config.d.ts.map +1 -0
- package/lib/utils/config.js +326 -0
- package/lib/utils/config.js.map +1 -0
- package/lib/utils/display.d.ts +27 -0
- package/lib/utils/display.d.ts.map +1 -0
- package/lib/utils/display.js +116 -0
- package/lib/utils/display.js.map +1 -0
- package/lib/utils/error-helpers.d.ts +27 -0
- package/lib/utils/error-helpers.d.ts.map +1 -0
- package/lib/utils/error-helpers.js +102 -0
- package/lib/utils/error-helpers.js.map +1 -0
- package/lib/utils/exec.d.ts +18 -0
- package/lib/utils/exec.d.ts.map +1 -0
- package/lib/utils/exec.js +96 -0
- package/lib/utils/exec.js.map +1 -0
- package/lib/utils/git-ai-errors.d.ts +10 -0
- package/lib/utils/git-ai-errors.d.ts.map +1 -0
- package/lib/utils/git-ai-errors.js +71 -0
- package/lib/utils/git-ai-errors.js.map +1 -0
- package/lib/utils/git-ai.d.ts +26 -0
- package/lib/utils/git-ai.d.ts.map +1 -0
- package/lib/utils/git-ai.js +603 -0
- package/lib/utils/git-ai.js.map +1 -0
- package/lib/utils/git-commands.d.ts +21 -0
- package/lib/utils/git-commands.d.ts.map +1 -0
- package/lib/utils/git-commands.js +58 -0
- package/lib/utils/git-commands.js.map +1 -0
- package/lib/utils/git-errors.d.ts +76 -0
- package/lib/utils/git-errors.d.ts.map +1 -0
- package/lib/utils/git-errors.js +565 -0
- package/lib/utils/git-errors.js.map +1 -0
- package/lib/utils/git.d.ts +61 -0
- package/lib/utils/git.d.ts.map +1 -0
- package/lib/utils/git.js +245 -0
- package/lib/utils/git.js.map +1 -0
- package/lib/utils/logging.d.ts +25 -0
- package/lib/utils/logging.d.ts.map +1 -0
- package/lib/utils/logging.js +71 -0
- package/lib/utils/logging.js.map +1 -0
- package/lib/utils/menu-builders.d.ts +47 -0
- package/lib/utils/menu-builders.d.ts.map +1 -0
- package/lib/utils/menu-builders.js +34 -0
- package/lib/utils/menu-builders.js.map +1 -0
- package/lib/utils/platform.d.ts +13 -0
- package/lib/utils/platform.d.ts.map +1 -0
- package/lib/utils/platform.js +32 -0
- package/lib/utils/platform.js.map +1 -0
- package/lib/utils/spinner-wrapper.d.ts +16 -0
- package/lib/utils/spinner-wrapper.d.ts.map +1 -0
- package/lib/utils/spinner-wrapper.js +56 -0
- package/lib/utils/spinner-wrapper.js.map +1 -0
- package/lib/utils/state.d.ts +22 -0
- package/lib/utils/state.d.ts.map +1 -0
- package/lib/utils/state.js +75 -0
- package/lib/utils/state.js.map +1 -0
- package/lib/utils/time.d.ts +4 -0
- package/lib/utils/time.d.ts.map +1 -0
- package/lib/utils/time.js +29 -0
- package/lib/utils/time.js.map +1 -0
- package/lib/utils/type-guards.d.ts +10 -0
- package/lib/utils/type-guards.d.ts.map +1 -0
- package/lib/utils/type-guards.js +29 -0
- package/lib/utils/type-guards.js.map +1 -0
- package/lib/workflows/ai-provider.d.ts +13 -0
- package/lib/workflows/ai-provider.d.ts.map +1 -0
- package/lib/workflows/ai-provider.js +55 -0
- package/lib/workflows/ai-provider.js.map +1 -0
- package/lib/workflows/author.d.ts +4 -0
- package/lib/workflows/author.d.ts.map +1 -0
- package/lib/workflows/author.js +80 -0
- package/lib/workflows/author.js.map +1 -0
- package/lib/workflows/branch-helpers.d.ts +9 -0
- package/lib/workflows/branch-helpers.d.ts.map +1 -0
- package/lib/workflows/branch-helpers.js +406 -0
- package/lib/workflows/branch-helpers.js.map +1 -0
- package/lib/workflows/branch-utils.d.ts +9 -0
- package/lib/workflows/branch-utils.d.ts.map +1 -0
- package/lib/workflows/branch-utils.js +61 -0
- package/lib/workflows/branch-utils.js.map +1 -0
- package/lib/workflows/branch.d.ts +12 -0
- package/lib/workflows/branch.d.ts.map +1 -0
- package/lib/workflows/branch.js +555 -0
- package/lib/workflows/branch.js.map +1 -0
- package/lib/workflows/cleanup.d.ts +10 -0
- package/lib/workflows/cleanup.d.ts.map +1 -0
- package/lib/workflows/cleanup.js +287 -0
- package/lib/workflows/cleanup.js.map +1 -0
- package/lib/workflows/commit.d.ts +10 -0
- package/lib/workflows/commit.d.ts.map +1 -0
- package/lib/workflows/commit.js +771 -0
- package/lib/workflows/commit.js.map +1 -0
- package/lib/workflows/main-steps.d.ts +12 -0
- package/lib/workflows/main-steps.d.ts.map +1 -0
- package/lib/workflows/main-steps.js +407 -0
- package/lib/workflows/main-steps.js.map +1 -0
- package/lib/workflows/main.d.ts +8 -0
- package/lib/workflows/main.d.ts.map +1 -0
- package/lib/workflows/main.js +720 -0
- package/lib/workflows/main.js.map +1 -0
- package/lib/workflows/security-gate.d.ts +8 -0
- package/lib/workflows/security-gate.d.ts.map +1 -0
- package/lib/workflows/security-gate.js +447 -0
- package/lib/workflows/security-gate.js.map +1 -0
- package/lib/workflows/settings.d.ts +15 -0
- package/lib/workflows/settings.d.ts.map +1 -0
- package/lib/workflows/settings.js +438 -0
- package/lib/workflows/settings.js.map +1 -0
- package/lib/workflows/trello-menu.d.ts +16 -0
- package/lib/workflows/trello-menu.d.ts.map +1 -0
- package/lib/workflows/trello-menu.js +361 -0
- package/lib/workflows/trello-menu.js.map +1 -0
- package/package.json +112 -0
package/lib/cli/input.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive input utilities
|
|
3
|
+
*/
|
|
4
|
+
import { spawnSync } from 'node:child_process';
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import os from 'node:os';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import readline from 'node:readline';
|
|
9
|
+
const rl = readline.createInterface({
|
|
10
|
+
input: process.stdin,
|
|
11
|
+
output: process.stdout,
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* Ask a question and return user input
|
|
15
|
+
*/
|
|
16
|
+
export const askQuestion = (question, defaultValue) => {
|
|
17
|
+
if (process.stdin.isTTY && process.stdin.isRaw) {
|
|
18
|
+
process.stdin.setRawMode(false);
|
|
19
|
+
}
|
|
20
|
+
const platform = os.platform();
|
|
21
|
+
const fullQuestion = defaultValue ? `${question} (${defaultValue}) ` : question;
|
|
22
|
+
process.stdout.write(fullQuestion);
|
|
23
|
+
const result = platform === 'win32'
|
|
24
|
+
? spawnSync('powershell', ['-Command', '$input = Read-Host; Write-Output $input'], {
|
|
25
|
+
stdio: ['inherit', 'pipe', 'inherit'],
|
|
26
|
+
encoding: 'utf8',
|
|
27
|
+
})
|
|
28
|
+
: spawnSync('bash', ['-c', 'read -r line && echo "$line"'], {
|
|
29
|
+
stdio: ['inherit', 'pipe', 'inherit'],
|
|
30
|
+
encoding: 'utf8',
|
|
31
|
+
});
|
|
32
|
+
const input = result.stdout?.trim() ?? '';
|
|
33
|
+
return input ?? defaultValue ?? '';
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Progress bar utility for long operations
|
|
37
|
+
*/
|
|
38
|
+
export class ProgressBar {
|
|
39
|
+
constructor(total, title = 'Progress', width = 40) {
|
|
40
|
+
this.total = total;
|
|
41
|
+
this.current = 0;
|
|
42
|
+
this.width = width;
|
|
43
|
+
this.title = title;
|
|
44
|
+
}
|
|
45
|
+
update(current) {
|
|
46
|
+
this.current = Math.min(current, this.total);
|
|
47
|
+
this.render();
|
|
48
|
+
}
|
|
49
|
+
increment(amount = 1) {
|
|
50
|
+
this.current = Math.min(this.current + amount, this.total);
|
|
51
|
+
this.render();
|
|
52
|
+
}
|
|
53
|
+
complete() {
|
|
54
|
+
this.current = this.total;
|
|
55
|
+
this.render();
|
|
56
|
+
console.log(''); // New line after completion
|
|
57
|
+
}
|
|
58
|
+
render() {
|
|
59
|
+
const percentage = this.total > 0 ? Math.round((this.current / this.total) * 100) : 0;
|
|
60
|
+
const filled = Math.round((this.current / this.total) * this.width);
|
|
61
|
+
const empty = this.width - filled;
|
|
62
|
+
const bar = '█'.repeat(filled) + '░'.repeat(empty);
|
|
63
|
+
const status = `${this.current}/${this.total} (${percentage}%)`;
|
|
64
|
+
process.stdout.write(`\r${this.title}: [${bar}] ${status}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Syntax highlighting for git diff output
|
|
69
|
+
*/
|
|
70
|
+
export const highlightDiff = (diff) => {
|
|
71
|
+
return diff
|
|
72
|
+
.replaceAll(/^(\+{3}|-{3}).*$/gm, '\u001B[36m$1\u001B[0m') // File headers (cyan)
|
|
73
|
+
.replaceAll(/^@@.*@@$/gm, '\u001B[33m$1\u001B[0m') // Hunk headers (yellow)
|
|
74
|
+
.replaceAll(/^(\+.*)$/gm, '\u001B[32m$1\u001B[0m') // Added lines (green)
|
|
75
|
+
.replaceAll(/^(-.*)$/gm, '\u001B[31m$1\u001B[0m') // Removed lines (red)
|
|
76
|
+
.replaceAll(/^(\s.*)$/gm, '\u001B[37m$1\u001B[0m'); // Context lines (white)
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Ask a yes/no confirmation question
|
|
80
|
+
*/
|
|
81
|
+
export const confirm = (question, defaultYes = true) => {
|
|
82
|
+
const suffix = defaultYes ? ' (Y/n): ' : ' (y/N): ';
|
|
83
|
+
const answer = askQuestion(`${question}${suffix}`);
|
|
84
|
+
if (answer === '') {
|
|
85
|
+
return defaultYes;
|
|
86
|
+
}
|
|
87
|
+
return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Edit multi-line content in the user's editor (from $EDITOR).
|
|
91
|
+
* Writes initialText to a temp file, opens $EDITOR, and returns the edited content.
|
|
92
|
+
*/
|
|
93
|
+
export const editInEditor = (initialText = '', filenameHint = 'geeto-commit.txt') => {
|
|
94
|
+
const tmpDir = os.tmpdir();
|
|
95
|
+
const tmpPath = path.join(tmpDir, `${Date.now()}-${filenameHint}`);
|
|
96
|
+
try {
|
|
97
|
+
fs.writeFileSync(tmpPath, initialText, { encoding: 'utf8' });
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return initialText;
|
|
101
|
+
}
|
|
102
|
+
const editor = process.env.EDITOR ?? (process.platform === 'win32' ? 'notepad' : 'vi');
|
|
103
|
+
try {
|
|
104
|
+
spawnSync(editor, [tmpPath], { stdio: 'inherit' });
|
|
105
|
+
const edited = fs.readFileSync(tmpPath, { encoding: 'utf8' });
|
|
106
|
+
return edited.trim();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// On failure, return initial text
|
|
110
|
+
return initialText;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Close the readline interface
|
|
115
|
+
*/
|
|
116
|
+
export const closeInput = () => {
|
|
117
|
+
rl.close();
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/cli/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive menu utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { SelectOption } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Interactive select menu with arrow keys and search
|
|
7
|
+
*/
|
|
8
|
+
export declare const select: (question: string, options: SelectOption[]) => Promise<string>;
|
|
9
|
+
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMrD;;GAEG;AACH,eAAO,MAAM,MAAM,GAAU,UAAU,MAAM,EAAE,SAAS,YAAY,EAAE,KAAG,OAAO,CAAC,MAAM,CA0NtF,CAAA"}
|
package/lib/cli/menu.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive menu utilities
|
|
3
|
+
*/
|
|
4
|
+
import { colors } from '../utils/colors.js';
|
|
5
|
+
let currentDataListener = null;
|
|
6
|
+
/**
|
|
7
|
+
* Interactive select menu with arrow keys and search
|
|
8
|
+
*/
|
|
9
|
+
export const select = async (question, options) => {
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
let selectedIndex = 0;
|
|
12
|
+
const maxVisibleItems = 15; // Show max 15 items at once
|
|
13
|
+
let scrollOffset = 0;
|
|
14
|
+
let searchMode = false;
|
|
15
|
+
let searchQuery = '';
|
|
16
|
+
let filteredOptions = options;
|
|
17
|
+
const filterOptions = (query) => {
|
|
18
|
+
if (!query) {
|
|
19
|
+
return options;
|
|
20
|
+
}
|
|
21
|
+
return options.filter((opt) => opt.label.toLowerCase().includes(query.toLowerCase()));
|
|
22
|
+
};
|
|
23
|
+
const getVisibleRange = () => {
|
|
24
|
+
// Keep selected item in view
|
|
25
|
+
if (selectedIndex < scrollOffset) {
|
|
26
|
+
scrollOffset = selectedIndex;
|
|
27
|
+
}
|
|
28
|
+
else if (selectedIndex >= scrollOffset + maxVisibleItems) {
|
|
29
|
+
scrollOffset = selectedIndex - maxVisibleItems + 1;
|
|
30
|
+
}
|
|
31
|
+
const start = scrollOffset;
|
|
32
|
+
const end = Math.min(scrollOffset + maxVisibleItems, filteredOptions.length);
|
|
33
|
+
return { start, end };
|
|
34
|
+
};
|
|
35
|
+
const renderMenu = () => {
|
|
36
|
+
const { start, end } = getVisibleRange();
|
|
37
|
+
const visibleCount = end - start;
|
|
38
|
+
// Clear only the rendered lines (visible items + hint + search input + blank line)
|
|
39
|
+
const linesToClear = visibleCount + (searchMode ? 3 : 2);
|
|
40
|
+
for (let i = 0; i < linesToClear; i++) {
|
|
41
|
+
process.stdout.write('\u001B[1A\u001B[2K');
|
|
42
|
+
}
|
|
43
|
+
// Re-render hint and items (question stays at top)
|
|
44
|
+
const hintText = searchMode
|
|
45
|
+
? ` (Esc cancel search, Enter select)`
|
|
46
|
+
: ` (↑↓/jk arrows, / search, Enter select, 'c' clear, 'q' quit)`;
|
|
47
|
+
console.log(`${colors.gray}${hintText}${colors.reset}`);
|
|
48
|
+
if (searchMode) {
|
|
49
|
+
console.log(`${colors.cyan}/ search:${colors.reset} ${searchQuery}`);
|
|
50
|
+
}
|
|
51
|
+
console.log(''); // Blank line
|
|
52
|
+
for (let idx = start; idx < end; idx++) {
|
|
53
|
+
const opt = filteredOptions[idx];
|
|
54
|
+
if (!opt)
|
|
55
|
+
continue;
|
|
56
|
+
const prefix = idx === selectedIndex ? `${colors.cyan}❯${colors.reset}` : ' ';
|
|
57
|
+
const label = idx === selectedIndex
|
|
58
|
+
? `${colors.cyan}${colors.bright}${opt.label}${colors.reset}`
|
|
59
|
+
: `${colors.gray}${opt.label}${colors.reset}`;
|
|
60
|
+
console.log(`${prefix} ${label}`);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Initial render (question + hint + items)
|
|
64
|
+
console.log(`${colors.cyan}?${colors.reset} ${question}`);
|
|
65
|
+
console.log(`${colors.gray} (↑↓/jk arrows, / search, Enter select, 'c' clear, 'q' quit)${colors.reset}\n`);
|
|
66
|
+
const { start, end } = getVisibleRange();
|
|
67
|
+
for (let idx = start; idx < end; idx++) {
|
|
68
|
+
const opt = filteredOptions[idx];
|
|
69
|
+
if (!opt)
|
|
70
|
+
continue;
|
|
71
|
+
const prefix = idx === selectedIndex ? `${colors.cyan}❯${colors.reset}` : ' ';
|
|
72
|
+
const label = idx === selectedIndex
|
|
73
|
+
? `${colors.cyan}${colors.bright}${opt.label}${colors.reset}`
|
|
74
|
+
: `${colors.gray}${opt.label}${colors.reset}`;
|
|
75
|
+
console.log(`${prefix} ${label}`);
|
|
76
|
+
}
|
|
77
|
+
if (process.stdin.isTTY) {
|
|
78
|
+
process.stdin.setRawMode(true);
|
|
79
|
+
}
|
|
80
|
+
process.stdin.resume();
|
|
81
|
+
const cleanup = () => {
|
|
82
|
+
if (currentDataListener) {
|
|
83
|
+
process.stdin.removeListener('data', currentDataListener);
|
|
84
|
+
currentDataListener = null;
|
|
85
|
+
}
|
|
86
|
+
if (process.stdin.isTTY) {
|
|
87
|
+
process.stdin.setRawMode(false);
|
|
88
|
+
}
|
|
89
|
+
process.stdin.pause();
|
|
90
|
+
};
|
|
91
|
+
const onKeypress = (key) => {
|
|
92
|
+
const keyStr = key.toString();
|
|
93
|
+
// Handle search mode
|
|
94
|
+
if (searchMode) {
|
|
95
|
+
if (keyStr === '\u001B') {
|
|
96
|
+
// Escape key - cancel search
|
|
97
|
+
searchMode = false;
|
|
98
|
+
searchQuery = '';
|
|
99
|
+
filteredOptions = options;
|
|
100
|
+
selectedIndex = 0;
|
|
101
|
+
scrollOffset = 0;
|
|
102
|
+
renderMenu();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (keyStr === '\r' || keyStr === '\n') {
|
|
106
|
+
// Enter - select filtered item
|
|
107
|
+
cleanup();
|
|
108
|
+
resolve(filteredOptions[selectedIndex]?.value ?? '');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (keyStr === '\u007F' || keyStr === '\b') {
|
|
112
|
+
// Backspace
|
|
113
|
+
searchQuery = searchQuery.slice(0, -1);
|
|
114
|
+
filteredOptions = filterOptions(searchQuery);
|
|
115
|
+
selectedIndex = 0;
|
|
116
|
+
scrollOffset = 0;
|
|
117
|
+
renderMenu();
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// Printable characters
|
|
121
|
+
if (keyStr.length === 1) {
|
|
122
|
+
const code = keyStr.codePointAt(0) ?? 0;
|
|
123
|
+
if (code >= 32 && code <= 126) {
|
|
124
|
+
searchQuery += keyStr;
|
|
125
|
+
filteredOptions = filterOptions(searchQuery);
|
|
126
|
+
selectedIndex = 0;
|
|
127
|
+
scrollOffset = 0;
|
|
128
|
+
renderMenu();
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Arrow keys in search mode
|
|
133
|
+
if (keyStr === '\u001B[A' || keyStr === 'k') {
|
|
134
|
+
selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : filteredOptions.length - 1;
|
|
135
|
+
renderMenu();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (keyStr === '\u001B[B' || keyStr === 'j') {
|
|
139
|
+
selectedIndex = selectedIndex < filteredOptions.length - 1 ? selectedIndex + 1 : 0;
|
|
140
|
+
renderMenu();
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Normal navigation mode
|
|
146
|
+
switch (keyStr) {
|
|
147
|
+
case '/': {
|
|
148
|
+
searchMode = true;
|
|
149
|
+
renderMenu();
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case '\u001B[A':
|
|
153
|
+
case 'k': {
|
|
154
|
+
selectedIndex = selectedIndex > 0 ? selectedIndex - 1 : filteredOptions.length - 1;
|
|
155
|
+
renderMenu();
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case '\u001B[B':
|
|
159
|
+
case 'j': {
|
|
160
|
+
selectedIndex = selectedIndex < filteredOptions.length - 1 ? selectedIndex + 1 : 0;
|
|
161
|
+
renderMenu();
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case '\r':
|
|
165
|
+
case '\n': {
|
|
166
|
+
cleanup();
|
|
167
|
+
resolve(filteredOptions[selectedIndex]?.value ?? '');
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case 'q':
|
|
171
|
+
case 'Q':
|
|
172
|
+
case '\u0003': {
|
|
173
|
+
cleanup();
|
|
174
|
+
console.log('\n\nCancelled by user');
|
|
175
|
+
process.exit(0);
|
|
176
|
+
}
|
|
177
|
+
case 'c':
|
|
178
|
+
case 'C': {
|
|
179
|
+
console.clear();
|
|
180
|
+
console.log(`${colors.cyan}?${colors.reset} ${question}`);
|
|
181
|
+
console.log(`${colors.gray} (↑↓/jk arrows, / search, Enter select, 'c' clear, 'q' quit)${colors.reset}\n`);
|
|
182
|
+
const { start, end } = getVisibleRange();
|
|
183
|
+
for (let idx = start; idx < end; idx++) {
|
|
184
|
+
const opt = filteredOptions[idx];
|
|
185
|
+
if (!opt)
|
|
186
|
+
continue;
|
|
187
|
+
const prefix = idx === selectedIndex ? `${colors.cyan}❯${colors.reset}` : ' ';
|
|
188
|
+
const label = idx === selectedIndex
|
|
189
|
+
? `${colors.cyan}${colors.bright}${opt.label}${colors.reset}`
|
|
190
|
+
: `${colors.gray}${opt.label}${colors.reset}`;
|
|
191
|
+
console.log(`${prefix} ${label}`);
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
currentDataListener = onKeypress;
|
|
198
|
+
process.stdin.on('data', onKeypress);
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/cli/menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step constants for flow control
|
|
3
|
+
*/
|
|
4
|
+
export declare const STEP: {
|
|
5
|
+
readonly INIT: 0;
|
|
6
|
+
readonly STAGED: 1;
|
|
7
|
+
readonly BRANCH_CREATED: 2;
|
|
8
|
+
readonly COMMITTED: 3;
|
|
9
|
+
readonly PUSHED: 4;
|
|
10
|
+
readonly MERGED: 5;
|
|
11
|
+
readonly CLEANUP: 6;
|
|
12
|
+
readonly DONE: 7;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Task platform constants
|
|
16
|
+
*/
|
|
17
|
+
export declare const TASK_PLATFORMS: {
|
|
18
|
+
name: string;
|
|
19
|
+
value: "trello";
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
}[];
|
|
22
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,IAAI;;;;;;;;;CASP,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,cAAc;;;;GAM1B,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Step constants for flow control
|
|
3
|
+
*/
|
|
4
|
+
export const STEP = {
|
|
5
|
+
INIT: 0,
|
|
6
|
+
STAGED: 1,
|
|
7
|
+
BRANCH_CREATED: 2,
|
|
8
|
+
COMMITTED: 3,
|
|
9
|
+
PUSHED: 4,
|
|
10
|
+
MERGED: 5,
|
|
11
|
+
CLEANUP: 6,
|
|
12
|
+
DONE: 7,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Task platform constants
|
|
16
|
+
*/
|
|
17
|
+
export const TASK_PLATFORMS = [
|
|
18
|
+
{ name: 'Trello', value: 'trello', enabled: true },
|
|
19
|
+
// Future platforms:
|
|
20
|
+
// { name: 'Jira', value: 'jira' as const, enabled: false },
|
|
21
|
+
// { name: 'Asana', value: 'asana' as const, enabled: false },
|
|
22
|
+
// { name: 'Linear', value: 'linear' as const, enabled: false },
|
|
23
|
+
];
|
|
24
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,cAAc,EAAE,CAAC;IACjB,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACC,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3D,oBAAoB;IACpB,4DAA4D;IAC5D,8DAA8D;IAC9D,gEAAgE;CACjE,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Copilot CLI setup helper (moved from `setup.ts`)
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Check Copilot CLI version and warn if outdated.
|
|
6
|
+
* Uses shared utility from copilot-sdk.ts.
|
|
7
|
+
*/
|
|
8
|
+
export declare const checkCopilotVersion: () => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Interactive installer and authenticator for GitHub Copilot CLI
|
|
11
|
+
*/
|
|
12
|
+
export declare const setupGitHubCopilotInteractive: () => Promise<boolean>;
|
|
13
|
+
//# sourceMappingURL=copilot-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-setup.d.ts","sourceRoot":"","sources":["../../src/core/copilot-setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAO,OA2BtC,CAAA;AAkLD;;GAEG;AACH,eAAO,MAAM,6BAA6B,QAAa,OAAO,CAAC,OAAO,CA4PrE,CAAA"}
|