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
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter integration setup
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import { askQuestion, confirm } from '../cli/input.js';
|
|
6
|
+
import { ensureGeetoIgnored, getOpenRouterConfigPath } from '../utils/config.js';
|
|
7
|
+
import { log } from '../utils/logging.js';
|
|
8
|
+
/**
|
|
9
|
+
* Setup OpenRouter config interactively
|
|
10
|
+
*/
|
|
11
|
+
export const setupOpenRouterConfigInteractive = () => {
|
|
12
|
+
const configPath = getOpenRouterConfigPath();
|
|
13
|
+
// If config already exists, nothing to do
|
|
14
|
+
try {
|
|
15
|
+
if (fs.existsSync(configPath)) {
|
|
16
|
+
log.success('OpenRouter API configuration is ready!');
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// fall through to interactive setup
|
|
22
|
+
}
|
|
23
|
+
log.info('OpenRouter integration is not configured for this project.\n');
|
|
24
|
+
log.info('OpenRouter provides access to various AI models through a single API key.');
|
|
25
|
+
log.info('Some models are free, while others may require credits from your OpenRouter account.');
|
|
26
|
+
log.info('Note: Even models marked as "free" may require account verification or limited credits.');
|
|
27
|
+
log.info('Supported models include: Llama, Mistral, Gemma, WizardLM, and many more.');
|
|
28
|
+
log.info('You need an OpenRouter API key to use this service.');
|
|
29
|
+
log.info('Visit https://openrouter.ai/ to create an account and get your API key.\n');
|
|
30
|
+
log.info(`The OpenRouter API key will be saved to: ${getOpenRouterConfigPath()}`);
|
|
31
|
+
const shouldSetup = confirm('Setup OpenRouter integration now?');
|
|
32
|
+
if (!shouldSetup) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (process.stdin.isTTY) {
|
|
36
|
+
process.stdin.setRawMode(false);
|
|
37
|
+
}
|
|
38
|
+
const openrouterKey = askQuestion('Enter OpenRouter API Key: ').trim();
|
|
39
|
+
if (!openrouterKey) {
|
|
40
|
+
log.warn('No API key provided. OpenRouter setup cancelled.');
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
const path = getOpenRouterConfigPath();
|
|
44
|
+
const configDir = path.slice(0, path.lastIndexOf('/'));
|
|
45
|
+
// Ensure .geeto is in .gitignore
|
|
46
|
+
ensureGeetoIgnored();
|
|
47
|
+
try {
|
|
48
|
+
if (!fs.existsSync(configDir)) {
|
|
49
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
50
|
+
log.success(`Created config directory: ${configDir}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
log.error(`Failed to create config directory: ${error.message}`);
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const configContent = `# Geeto OpenRouter Configuration
|
|
58
|
+
# Generated on ${new Date().toISOString()}
|
|
59
|
+
# API key for OpenRouter (access to multiple free AI models)
|
|
60
|
+
|
|
61
|
+
openrouter_api_key = "${openrouterKey}"
|
|
62
|
+
`;
|
|
63
|
+
try {
|
|
64
|
+
fs.writeFileSync(path, configContent, 'utf8');
|
|
65
|
+
log.success(`OpenRouter config saved to: ${path}`);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
log.error(`Failed to save config: ${error.message}`);
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=openrouter-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter-setup.js","sourceRoot":"","sources":["../../src/core/openrouter-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check and setup gemini API + API key
|
|
3
|
+
*/
|
|
4
|
+
export declare const ensureGemini: () => Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Check and setup GitHub Copilot CLI
|
|
7
|
+
*/
|
|
8
|
+
export declare const ensureGitHubCopilot: () => Promise<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* Check and setup OpenRouter API key
|
|
11
|
+
*/
|
|
12
|
+
export declare const ensureOpenRouter: () => Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Export Trello setup instructions
|
|
15
|
+
*/
|
|
16
|
+
export declare const setupTrelloConfig: () => void;
|
|
17
|
+
/**
|
|
18
|
+
* Unified AI provider setup function
|
|
19
|
+
*/
|
|
20
|
+
export declare const ensureAIProvider: (aiProvider: "gemini" | "copilot" | "openrouter") => Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAcpD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,OAAO,CAc3D,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,OAAO,CAYxD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,IAapC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,QAAQ,GAAG,SAAS,GAAG,YAAY,KAC9C,OAAO,CAAC,OAAO,CAgBjB,CAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { log } from '../utils/logging.js';
|
|
2
|
+
/**
|
|
3
|
+
* Check and setup gemini API + API key
|
|
4
|
+
*/
|
|
5
|
+
export const ensureGemini = async () => {
|
|
6
|
+
// Delegate interactive setup to dedicated file
|
|
7
|
+
try {
|
|
8
|
+
const mod = await import('./gemini-setup.js');
|
|
9
|
+
if (typeof mod.setupGeminiConfigInteractive === 'function') {
|
|
10
|
+
return mod.setupGeminiConfigInteractive();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
log.warn('Gemini setup helper not available; please run setup manually or ensure gemini-setup is present');
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Check and setup GitHub Copilot CLI
|
|
20
|
+
*/
|
|
21
|
+
export const ensureGitHubCopilot = async () => {
|
|
22
|
+
try {
|
|
23
|
+
const mod = await import('./copilot-setup.js');
|
|
24
|
+
if (typeof mod.setupGitHubCopilotInteractive === 'function') {
|
|
25
|
+
return mod.setupGitHubCopilotInteractive();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
log.warn('Copilot setup helper not available, falling back to inline setup');
|
|
30
|
+
}
|
|
31
|
+
// Fallback: cannot perform interactive setup because helper is missing
|
|
32
|
+
log.warn('Unable to run Copilot setup helper.');
|
|
33
|
+
log.info('Authenticate: copilot auth');
|
|
34
|
+
return false;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Check and setup OpenRouter API key
|
|
38
|
+
*/
|
|
39
|
+
export const ensureOpenRouter = async () => {
|
|
40
|
+
try {
|
|
41
|
+
const mod = await import('./openrouter-setup.js');
|
|
42
|
+
if (typeof mod.setupOpenRouterConfigInteractive === 'function') {
|
|
43
|
+
return mod.setupOpenRouterConfigInteractive();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
log.warn('OpenRouter setup helper not available; please run setup manually or ensure openrouter-setup is present');
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Export Trello setup instructions
|
|
53
|
+
*/
|
|
54
|
+
export const setupTrelloConfig = () => {
|
|
55
|
+
log.info('Trello integration is not configured.');
|
|
56
|
+
log.info('To enable Trello integration, create a config file at:');
|
|
57
|
+
log.info(' .geeto/trello.toml');
|
|
58
|
+
log.info('');
|
|
59
|
+
log.info('With the following content:');
|
|
60
|
+
log.info(' api_key = "YOUR_TRELLO_API_KEY"');
|
|
61
|
+
log.info(' token = "YOUR_TRELLO_TOKEN"');
|
|
62
|
+
log.info(' board_id = "YOUR_TRELLO_BOARD_ID"');
|
|
63
|
+
log.info('');
|
|
64
|
+
log.info('Get your API key from: https://trello.com/app-key');
|
|
65
|
+
log.info('Generate a token by clicking the "Token" link on that page');
|
|
66
|
+
log.info('Find your board ID in the board URL: trello.com/b/{BOARD_ID}/');
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Unified AI provider setup function
|
|
70
|
+
*/
|
|
71
|
+
export const ensureAIProvider = async (aiProvider) => {
|
|
72
|
+
switch (aiProvider) {
|
|
73
|
+
case 'gemini': {
|
|
74
|
+
return ensureGemini();
|
|
75
|
+
}
|
|
76
|
+
case 'copilot': {
|
|
77
|
+
return ensureGitHubCopilot();
|
|
78
|
+
}
|
|
79
|
+
case 'openrouter': {
|
|
80
|
+
return ensureOpenRouter();
|
|
81
|
+
}
|
|
82
|
+
default: {
|
|
83
|
+
log.error(`Unknown AI provider: ${aiProvider}`);
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/core/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trello-setup.d.ts","sourceRoot":"","sources":["../../src/core/trello-setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,eAAO,MAAM,4BAA4B,QAAO,OAqG/C,CAAA"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trello integration setup
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import { askQuestion, confirm } from '../cli/input.js';
|
|
6
|
+
import { ensureGeetoIgnored, getTrelloConfigPath, setSkipTrelloPrompt } from '../utils/config.js';
|
|
7
|
+
import { exec } from '../utils/exec.js';
|
|
8
|
+
import { log } from '../utils/logging.js';
|
|
9
|
+
/**
|
|
10
|
+
* Setup Trello config interactively
|
|
11
|
+
*/
|
|
12
|
+
export const setupTrelloConfigInteractive = () => {
|
|
13
|
+
log.info('Trello integration is not configured for this project.\n');
|
|
14
|
+
log.info('To enable Trello task linking, you need:');
|
|
15
|
+
log.info(' 1. API Key from: https://trello.com/app-key');
|
|
16
|
+
log.info(' 2. Token (we will generate URL for you)');
|
|
17
|
+
log.info(' 3. Board ID (from board URL: trello.com/b/{BOARD_ID}/)\n');
|
|
18
|
+
const shouldSetup = confirm('Setup Trello integration now?');
|
|
19
|
+
if (!shouldSetup) {
|
|
20
|
+
// Remember the user declined so we don't prompt again automatically
|
|
21
|
+
try {
|
|
22
|
+
setSkipTrelloPrompt(true);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
/* ignore */
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (process.stdin.isTTY) {
|
|
30
|
+
process.stdin.setRawMode(false);
|
|
31
|
+
}
|
|
32
|
+
const apiKey = askQuestion('Enter Trello API Key: ').trim();
|
|
33
|
+
if (!apiKey) {
|
|
34
|
+
log.error('API Key is required');
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const tokenUrl = `https://trello.com/1/authorize?expiration=never&name=Geeto&scope=read,write&response_type=token&key=${apiKey}`;
|
|
38
|
+
log.info(`Open this URL to get your token:`);
|
|
39
|
+
log.info(`${tokenUrl}\n`);
|
|
40
|
+
// Offer to open the token URL in the user's default browser
|
|
41
|
+
const openNow = confirm('Open authorization URL in your browser now?');
|
|
42
|
+
if (openNow) {
|
|
43
|
+
try {
|
|
44
|
+
const platform = process.platform;
|
|
45
|
+
let openCmd = 'xdg-open';
|
|
46
|
+
if (platform === 'darwin')
|
|
47
|
+
openCmd = 'open';
|
|
48
|
+
else if (platform === 'win32')
|
|
49
|
+
openCmd = 'start ""';
|
|
50
|
+
try {
|
|
51
|
+
// Try to open the URL; ignore output
|
|
52
|
+
exec(`${openCmd} "${tokenUrl}"`, true);
|
|
53
|
+
log.success('Opened authorization URL in your browser');
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Best-effort: if opening fails, fall back to instructing the user to open manually
|
|
57
|
+
log.warn('Could not open browser automatically—please open the URL above manually');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// ignore
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const token = askQuestion('Enter Trello Token (after authorizing): ').trim();
|
|
65
|
+
if (!token) {
|
|
66
|
+
log.error('Token is required');
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
const boardId = askQuestion('Enter Trello Board ID: ').trim();
|
|
70
|
+
if (!boardId) {
|
|
71
|
+
log.error('Board ID is required');
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
const path = getTrelloConfigPath();
|
|
75
|
+
const configDir = path.slice(0, path.lastIndexOf('/'));
|
|
76
|
+
// Ensure .geeto is in .gitignore
|
|
77
|
+
ensureGeetoIgnored();
|
|
78
|
+
try {
|
|
79
|
+
if (!fs.existsSync(configDir)) {
|
|
80
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
81
|
+
log.success(`Created config directory: ${configDir}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
86
|
+
log.error(`Failed to create config directory: ${msg}`);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
const configContent = `# Geeto Trello Configuration
|
|
90
|
+
# Generated on ${new Date().toISOString()}
|
|
91
|
+
|
|
92
|
+
api_key = "${apiKey}"
|
|
93
|
+
token = "${token}"
|
|
94
|
+
board_id = "${boardId}"
|
|
95
|
+
`;
|
|
96
|
+
try {
|
|
97
|
+
fs.writeFileSync(path, configContent, 'utf8');
|
|
98
|
+
log.success(`Trello config saved to: ${path}`);
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
103
|
+
log.error(`Failed to save config: ${msg}`);
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=trello-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trello-setup.js","sourceRoot":"","sources":["../../src/core/trello-setup.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Geeto - Git flow automation CLI tool with AI-powered branch naming
|
|
4
|
+
* Main entry point - delegates to modular workflows
|
|
5
|
+
*/
|
|
6
|
+
const { main } = await import('./workflows/main.js');
|
|
7
|
+
// Parse simple CLI flags for quick step shortcuts
|
|
8
|
+
const argv = process.argv.slice(2);
|
|
9
|
+
let startAt;
|
|
10
|
+
let fresh = false;
|
|
11
|
+
let resume = false;
|
|
12
|
+
let stageAll = false;
|
|
13
|
+
let showVersion = false;
|
|
14
|
+
let showHelp = false;
|
|
15
|
+
let showCleanup = false;
|
|
16
|
+
let showTrello = false;
|
|
17
|
+
let showTrelloLists = false;
|
|
18
|
+
let showTrelloGenerate = false;
|
|
19
|
+
let settingsAction;
|
|
20
|
+
for (const arg of argv) {
|
|
21
|
+
if (arg === '-c' || arg === '--commit') {
|
|
22
|
+
startAt = 'commit';
|
|
23
|
+
}
|
|
24
|
+
if (arg === '-m' || arg === '--merge') {
|
|
25
|
+
startAt = 'merge';
|
|
26
|
+
}
|
|
27
|
+
if (arg === '-b' || arg === '--branch') {
|
|
28
|
+
startAt = 'branch';
|
|
29
|
+
}
|
|
30
|
+
if (arg === '-s' || arg === '--stage') {
|
|
31
|
+
startAt = 'stage';
|
|
32
|
+
}
|
|
33
|
+
if (arg === '-sa' || arg === '-as') {
|
|
34
|
+
startAt = 'stage';
|
|
35
|
+
stageAll = true;
|
|
36
|
+
}
|
|
37
|
+
if (arg === '-p' || arg === '--push') {
|
|
38
|
+
startAt = 'push';
|
|
39
|
+
}
|
|
40
|
+
if (arg === '-f' || arg === '--fresh') {
|
|
41
|
+
fresh = true;
|
|
42
|
+
}
|
|
43
|
+
if (arg === '-r' || arg === '--resume') {
|
|
44
|
+
resume = true;
|
|
45
|
+
}
|
|
46
|
+
if (arg === '-v' || arg === '--version') {
|
|
47
|
+
showVersion = true;
|
|
48
|
+
}
|
|
49
|
+
if (arg === '-h' || arg === '--help') {
|
|
50
|
+
showHelp = true;
|
|
51
|
+
}
|
|
52
|
+
if (arg === '--separator') {
|
|
53
|
+
settingsAction = 'separator';
|
|
54
|
+
}
|
|
55
|
+
if (arg === '--sync-models') {
|
|
56
|
+
settingsAction = 'models';
|
|
57
|
+
}
|
|
58
|
+
if (arg === '--change-model') {
|
|
59
|
+
settingsAction = 'change-model';
|
|
60
|
+
}
|
|
61
|
+
if (arg === '--setup-gemini') {
|
|
62
|
+
settingsAction = 'gemini';
|
|
63
|
+
}
|
|
64
|
+
if (arg === '--setup-openrouter') {
|
|
65
|
+
settingsAction = 'openrouter';
|
|
66
|
+
}
|
|
67
|
+
if (arg === '--setup-trello') {
|
|
68
|
+
settingsAction = 'trello';
|
|
69
|
+
}
|
|
70
|
+
if (arg === '--cleanup' || arg === '-cl') {
|
|
71
|
+
showCleanup = true;
|
|
72
|
+
}
|
|
73
|
+
if (arg === '--trello') {
|
|
74
|
+
showTrello = true;
|
|
75
|
+
}
|
|
76
|
+
if (arg === '--trello-list') {
|
|
77
|
+
showTrelloLists = true;
|
|
78
|
+
}
|
|
79
|
+
if (arg === '--trello-generate') {
|
|
80
|
+
showTrelloGenerate = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Validate unknown flags
|
|
84
|
+
const validFlags = new Set([
|
|
85
|
+
'-c',
|
|
86
|
+
'--commit',
|
|
87
|
+
'-m',
|
|
88
|
+
'--merge',
|
|
89
|
+
'-b',
|
|
90
|
+
'--branch',
|
|
91
|
+
'-s',
|
|
92
|
+
'--stage',
|
|
93
|
+
'-sa',
|
|
94
|
+
'-as',
|
|
95
|
+
'-p',
|
|
96
|
+
'--push',
|
|
97
|
+
'--cleanup',
|
|
98
|
+
'-cl',
|
|
99
|
+
'-f',
|
|
100
|
+
'--fresh',
|
|
101
|
+
'-r',
|
|
102
|
+
'--resume',
|
|
103
|
+
'-v',
|
|
104
|
+
'--version',
|
|
105
|
+
'-h',
|
|
106
|
+
'--help',
|
|
107
|
+
'--separator',
|
|
108
|
+
'--sync-models',
|
|
109
|
+
'--change-model',
|
|
110
|
+
'--setup-gemini',
|
|
111
|
+
'--setup-openrouter',
|
|
112
|
+
'--setup-trello',
|
|
113
|
+
'--trello',
|
|
114
|
+
'--trello-list',
|
|
115
|
+
'--trello-generate',
|
|
116
|
+
]);
|
|
117
|
+
for (const arg of argv) {
|
|
118
|
+
if (arg.startsWith('-') && !validFlags.has(arg)) {
|
|
119
|
+
console.error(`Unknown flag: ${arg}`);
|
|
120
|
+
console.error('Use --help to see available options');
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
;
|
|
125
|
+
(async () => {
|
|
126
|
+
if (showVersion) {
|
|
127
|
+
console.log('Geeto v1.1.0-beta.0');
|
|
128
|
+
process.exit(0);
|
|
129
|
+
}
|
|
130
|
+
if (showHelp) {
|
|
131
|
+
console.log('Geeto CLI — Git flow automation');
|
|
132
|
+
console.log('');
|
|
133
|
+
console.log('Usage: geeto [options]');
|
|
134
|
+
console.log('');
|
|
135
|
+
console.log('Options:');
|
|
136
|
+
console.log(' -c, --commit Start at commit step');
|
|
137
|
+
console.log(' -m, --merge Start at merge step');
|
|
138
|
+
console.log(' -b, --branch Start at branch step');
|
|
139
|
+
console.log(' -s, --stage Start at stage step');
|
|
140
|
+
console.log(' -sa, -as Start at stage step and automatically stage all changes');
|
|
141
|
+
console.log(' -p, --push Start at push step');
|
|
142
|
+
console.log(' -cl, --cleanup Interactive branch cleanup (delete local & remote branches)');
|
|
143
|
+
console.log(' -f, --fresh Start fresh workflow (ignore checkpoint)');
|
|
144
|
+
console.log(' -r, --resume Resume from checkpoint (default if exists)');
|
|
145
|
+
console.log(' -v, --version Show version');
|
|
146
|
+
console.log(' -h, --help Show this help message');
|
|
147
|
+
console.log('');
|
|
148
|
+
console.log('Settings:');
|
|
149
|
+
console.log(' --separator Configure branch separator (hyphen/underscore)');
|
|
150
|
+
console.log(' --sync-models Sync model configurations (fetch live models)');
|
|
151
|
+
console.log(' --change-model Change AI provider / model');
|
|
152
|
+
console.log(' --setup-gemini Setup Gemini AI integration');
|
|
153
|
+
console.log(' --setup-openrouter Setup OpenRouter AI integration');
|
|
154
|
+
console.log(' --setup-trello Setup Trello integration');
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log('Trello:');
|
|
157
|
+
console.log(' --trello Open Trello menu');
|
|
158
|
+
console.log(' --trello-list Get Trello lists from board');
|
|
159
|
+
console.log(' --trello-generate Generate tasks.instructions.md from Trello list');
|
|
160
|
+
process.exit(0);
|
|
161
|
+
}
|
|
162
|
+
if (showCleanup) {
|
|
163
|
+
try {
|
|
164
|
+
const { handleInteractiveCleanup } = await import('./workflows/cleanup.js');
|
|
165
|
+
handleInteractiveCleanup();
|
|
166
|
+
process.exit(0);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error('Cleanup error:', error);
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (showTrello) {
|
|
174
|
+
try {
|
|
175
|
+
const { showTrelloMenu } = await import('./workflows/trello-menu.js');
|
|
176
|
+
await showTrelloMenu();
|
|
177
|
+
process.exit(0);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error('Trello menu error:', error);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (showTrelloLists) {
|
|
185
|
+
try {
|
|
186
|
+
const { handleGetTrelloLists } = await import('./workflows/trello-menu.js');
|
|
187
|
+
await handleGetTrelloLists();
|
|
188
|
+
process.exit(0);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
console.error('Trello list error:', error);
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (showTrelloGenerate) {
|
|
196
|
+
try {
|
|
197
|
+
const { handleGenerateTaskInstructions } = await import('./workflows/trello-menu.js');
|
|
198
|
+
await handleGenerateTaskInstructions();
|
|
199
|
+
process.exit(0);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
console.error('Trello generate error:', error);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (settingsAction) {
|
|
207
|
+
try {
|
|
208
|
+
const { handleSeparatorSetting, handleModelResetSetting, handleChangeModelSetting, handleGeminiSetting, handleOpenRouterSetting, handleTrelloSetting, } = await import('./workflows/settings.js');
|
|
209
|
+
switch (settingsAction) {
|
|
210
|
+
case 'separator': {
|
|
211
|
+
await handleSeparatorSetting();
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case 'models': {
|
|
215
|
+
await handleModelResetSetting();
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case 'change-model': {
|
|
219
|
+
await handleChangeModelSetting();
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
case 'gemini': {
|
|
223
|
+
await handleGeminiSetting();
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
case 'openrouter': {
|
|
227
|
+
await handleOpenRouterSetting();
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
case 'trello': {
|
|
231
|
+
await handleTrelloSetting();
|
|
232
|
+
break;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
process.exit(0);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
console.error('Settings error:', error);
|
|
239
|
+
process.exit(1);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Pass stageAll flag into main so workflows can auto-stage all changes
|
|
243
|
+
// Start the application with optional start step
|
|
244
|
+
main({ startAt, fresh, resume, stageAll }).catch((error) => {
|
|
245
|
+
console.error('Fatal error:', error);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
});
|
|
248
|
+
})();
|
|
249
|
+
export {};
|
|
250
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|