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,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trello workflow menu and utilities
|
|
3
|
+
*/
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { fetchTrelloCards, fetchTrelloLists } from '../api/trello.js';
|
|
7
|
+
import { select } from '../cli/menu.js';
|
|
8
|
+
import { colors } from '../utils/colors.js';
|
|
9
|
+
import { getTrelloConfig, hasTrelloConfig } from '../utils/config.js';
|
|
10
|
+
import { commandExists, exec } from '../utils/exec.js';
|
|
11
|
+
import { log } from '../utils/logging.js';
|
|
12
|
+
/**
|
|
13
|
+
* Display Trello lists with formatted output
|
|
14
|
+
*/
|
|
15
|
+
export const handleGetTrelloLists = async () => {
|
|
16
|
+
log.step('Fetching Trello Lists');
|
|
17
|
+
// Check if Trello is configured
|
|
18
|
+
if (!hasTrelloConfig()) {
|
|
19
|
+
log.error('Trello is not configured!');
|
|
20
|
+
log.info('Please run: geeto --setup-trello');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const config = getTrelloConfig();
|
|
24
|
+
log.info(`Board ID: ${colors.cyan}${config.boardId}${colors.reset}`);
|
|
25
|
+
console.log('');
|
|
26
|
+
const spinner = log.spinner();
|
|
27
|
+
spinner.start('Fetching lists...');
|
|
28
|
+
const lists = await fetchTrelloLists();
|
|
29
|
+
if (lists.length === 0) {
|
|
30
|
+
spinner.fail('No lists found or failed to fetch');
|
|
31
|
+
log.warn('Make sure your Trello credentials are valid and the board exists.');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
spinner.succeed(`Found ${lists.length} lists`);
|
|
35
|
+
log.step(`${colors.cyan}Trello Lists${colors.reset}\n`);
|
|
36
|
+
for (const [index, list] of lists.entries()) {
|
|
37
|
+
const num = `${index + 1}`.padStart(2, ' ');
|
|
38
|
+
console.log(` ${colors.gray}[${num}]${colors.reset} ${colors.cyan}${list.name}${colors.reset}`);
|
|
39
|
+
console.log(` ${colors.gray}ID: ${list.id}${colors.reset}`);
|
|
40
|
+
}
|
|
41
|
+
console.log('');
|
|
42
|
+
log.success('Lists fetched successfully!');
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Generate tasks.instructions.md from selected Trello list
|
|
46
|
+
*/
|
|
47
|
+
export const handleGenerateTaskInstructions = async () => {
|
|
48
|
+
log.step('Generate Task Instructions');
|
|
49
|
+
// Check if Trello is configured
|
|
50
|
+
if (!hasTrelloConfig()) {
|
|
51
|
+
log.error('Trello is not configured!');
|
|
52
|
+
log.info('Please run: geeto --setup-trello');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Fetch lists
|
|
56
|
+
console.log('');
|
|
57
|
+
const spinner = log.spinner();
|
|
58
|
+
spinner.start('Fetching Trello lists...');
|
|
59
|
+
const lists = await fetchTrelloLists();
|
|
60
|
+
if (lists.length === 0) {
|
|
61
|
+
spinner.fail('No lists found');
|
|
62
|
+
log.warn('Make sure your Trello credentials are valid and the board exists.');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
spinner.succeed(`Found ${lists.length} lists`);
|
|
66
|
+
// Show tip about creating dedicated agent list
|
|
67
|
+
console.log('');
|
|
68
|
+
log.info(`${colors.cyan}💡 Tip:${colors.reset} For best results with AI agents, create a dedicated Trello list called:`);
|
|
69
|
+
log.info(` ${colors.green}"TODO FOR AGENT"${colors.reset}`);
|
|
70
|
+
log.info(' This helps organize tasks specifically meant for automated execution.');
|
|
71
|
+
console.log('');
|
|
72
|
+
// Let user select a list
|
|
73
|
+
const listChoices = lists.map((list) => ({
|
|
74
|
+
label: list.name,
|
|
75
|
+
value: list.id,
|
|
76
|
+
}));
|
|
77
|
+
listChoices.push({ label: 'Cancel', value: 'cancel' });
|
|
78
|
+
const selectedListId = await select('Select a Trello list to generate tasks from:', listChoices);
|
|
79
|
+
if (selectedListId === 'cancel') {
|
|
80
|
+
log.info('Cancelled.');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const selectedList = lists.find((l) => l.id === selectedListId);
|
|
84
|
+
if (!selectedList) {
|
|
85
|
+
log.error('List not found');
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Fetch cards from selected list
|
|
89
|
+
console.log('');
|
|
90
|
+
const spinner2 = log.spinner();
|
|
91
|
+
spinner2.start(`Fetching cards from "${selectedList.name}"...`);
|
|
92
|
+
const cards = await fetchTrelloCards(selectedListId);
|
|
93
|
+
if (cards.length === 0) {
|
|
94
|
+
spinner2.fail('No cards found in this list');
|
|
95
|
+
log.warn('The selected list is empty or all cards are marked as [DONE]/[ARCHIVED].');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
spinner2.succeed(`Found ${cards.length} cards`);
|
|
99
|
+
// Generate markdown content
|
|
100
|
+
const now = new Date();
|
|
101
|
+
const dateStr = now.toLocaleDateString('en-US', {
|
|
102
|
+
year: 'numeric',
|
|
103
|
+
month: 'long',
|
|
104
|
+
day: 'numeric',
|
|
105
|
+
});
|
|
106
|
+
let markdown = `# Tasks from "${selectedList.name}"
|
|
107
|
+
|
|
108
|
+
Generated from Trello board on ${dateStr}
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## ⚠️ IMPORTANT INSTRUCTIONS FOR AI AGENTS ⚠️
|
|
113
|
+
|
|
114
|
+
**CRITICAL: You MUST follow these rules strictly:**
|
|
115
|
+
|
|
116
|
+
1. **EXECUTE ONLY ONE TASK AT A TIME** - Never work on multiple tasks simultaneously
|
|
117
|
+
2. **STOP after completing each task** - Do NOT automatically proceed to the next task
|
|
118
|
+
3. **Wait for explicit user confirmation** before moving to the next task
|
|
119
|
+
4. **Delete the completed task** from this file after finishing it
|
|
120
|
+
5. **Ask the user** "Task completed. Should I proceed to the next task?" before continuing
|
|
121
|
+
|
|
122
|
+
**WORKFLOW:**
|
|
123
|
+
\`\`\`
|
|
124
|
+
Step 1: Read only the FIRST uncompleted task (with - [ ])
|
|
125
|
+
Step 2: Execute ONLY that one task
|
|
126
|
+
Step 3: Mark it done by changing - [ ] to - [x]
|
|
127
|
+
Step 4: STOP and ask user for confirmation
|
|
128
|
+
Step 5: Wait for user response before proceeding
|
|
129
|
+
Step 6: If confirmed, delete the completed task and go to Step 1
|
|
130
|
+
\`\`\`
|
|
131
|
+
|
|
132
|
+
**❌ DO NOT:**
|
|
133
|
+
- Execute multiple tasks in one go
|
|
134
|
+
- Continue to next task without confirmation
|
|
135
|
+
- Assume you should complete everything at once
|
|
136
|
+
- Make assumptions about database schema, models, or queries without checking
|
|
137
|
+
|
|
138
|
+
**✅ DO:**
|
|
139
|
+
- Work on exactly one task
|
|
140
|
+
- Stop and wait after each task
|
|
141
|
+
- Ask for permission to continue
|
|
142
|
+
|
|
143
|
+
**📋 FOR FULLSTACK/BACKEND PROJECTS:**
|
|
144
|
+
|
|
145
|
+
Before implementing any task involving database, API, or data logic:
|
|
146
|
+
|
|
147
|
+
1. **Check migrations** - Look at recent migration files to understand schema changes
|
|
148
|
+
2. **Review models** - Examine model definitions and relationships
|
|
149
|
+
3. **Read existing queries** - Check similar queries or repository patterns in the codebase
|
|
150
|
+
4. **Understand the data flow** - Trace how data moves through the application
|
|
151
|
+
|
|
152
|
+
**When creating NEW ENDPOINTS/CONTROLLERS/SERVICES:**
|
|
153
|
+
1. **Find the most similar existing endpoint** - Look for endpoints with similar functionality
|
|
154
|
+
2. **Copy the exact structure** - Use the same file organization, naming, and patterns
|
|
155
|
+
3. **Match the code patterns exactly** - Request validation, error handling, response format
|
|
156
|
+
4. **Keep consistency** - Controller methods, service layer, repository patterns should be identical
|
|
157
|
+
5. **Reuse existing utilities** - Auth middleware, validators, error handlers, etc
|
|
158
|
+
|
|
159
|
+
Example: If creating a "Create User" endpoint, find "Create Product" or similar and replicate its exact structure.
|
|
160
|
+
|
|
161
|
+
**Never assume:**
|
|
162
|
+
- Table structures or column names
|
|
163
|
+
- Model relationships or foreign keys
|
|
164
|
+
- Query patterns or ORM usage
|
|
165
|
+
- API endpoint structures
|
|
166
|
+
- Request/response formats
|
|
167
|
+
- Validation rules
|
|
168
|
+
|
|
169
|
+
**Always verify** by reading the actual code first, then implement based on what exists **exactly**.
|
|
170
|
+
|
|
171
|
+
**📋 FOR FRONTEND PROJECTS:**
|
|
172
|
+
|
|
173
|
+
Before implementing any UI/frontend task:
|
|
174
|
+
|
|
175
|
+
1. **Review existing components** - Check similar components for patterns and conventions
|
|
176
|
+
2. **Check styling approach** - Identify CSS framework (Tailwind, CSS Modules, styled-components, etc)
|
|
177
|
+
3. **Understand state management** - See how state is managed (Redux, Zustand, Context, props)
|
|
178
|
+
4. **Review API integration** - Look at how data fetching and error handling is done
|
|
179
|
+
5. **Check type definitions** - Read existing interfaces/types for props and data structures
|
|
180
|
+
6. **Follow naming conventions** - Match existing component and file naming patterns
|
|
181
|
+
|
|
182
|
+
**When creating NEW PAGES/ROUTES:**
|
|
183
|
+
1. **Find the most similar existing page** - Look for pages with similar functionality
|
|
184
|
+
2. **Copy the exact structure** - Use the same file organization, imports, and layout
|
|
185
|
+
3. **Match the code patterns exactly** - Don't deviate from the established patterns
|
|
186
|
+
4. **Keep consistency** - Naming, export style, component composition should be identical
|
|
187
|
+
5. **Reuse existing components** - Don't create new ones if similar components exist
|
|
188
|
+
|
|
189
|
+
Example: If creating a "User Settings" page, find "Account Settings" or similar page and replicate its structure exactly.
|
|
190
|
+
|
|
191
|
+
**Never assume:**
|
|
192
|
+
- Component structure or prop patterns
|
|
193
|
+
- CSS class naming or styling approach
|
|
194
|
+
- State management implementation
|
|
195
|
+
- API client or fetch patterns
|
|
196
|
+
- File/folder naming conventions
|
|
197
|
+
- Page/route structure
|
|
198
|
+
|
|
199
|
+
**Always match** the existing codebase style and patterns **exactly**.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Tasks
|
|
204
|
+
|
|
205
|
+
**Total: ${cards.length} tasks**
|
|
206
|
+
|
|
207
|
+
`;
|
|
208
|
+
for (const [index, card] of cards.entries()) {
|
|
209
|
+
markdown += `### Task ${index + 1} of ${cards.length}\n\n`;
|
|
210
|
+
markdown += `- [ ] **${card.name}** (#${card.idShort})\n`;
|
|
211
|
+
markdown += ` - Trello URL: ${card.url}\n`;
|
|
212
|
+
if (card.desc?.trim()) {
|
|
213
|
+
markdown += `\n**Description:**\n${card.desc}\n`;
|
|
214
|
+
}
|
|
215
|
+
markdown += `\n---\n\n`;
|
|
216
|
+
}
|
|
217
|
+
markdown += `
|
|
218
|
+
## Instructions for Human Users
|
|
219
|
+
|
|
220
|
+
This file contains tasks from your Trello board. To work through these:
|
|
221
|
+
|
|
222
|
+
1. **Execute each task one by one** from top to bottom (or let your AI agent do it)
|
|
223
|
+
2. **When a task is completed**, mark it done or delete it from this file
|
|
224
|
+
3. **If using an AI agent**, confirm after each task before proceeding
|
|
225
|
+
4. **Keep this file updated** as you progress
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
*Generated by Geeto CLI - Trello Integration*
|
|
230
|
+
`;
|
|
231
|
+
// Detect editor from terminal environment to determine output path
|
|
232
|
+
let editorCommand = null;
|
|
233
|
+
let outputPath;
|
|
234
|
+
const termProgram = process.env.TERM_PROGRAM;
|
|
235
|
+
const vsCodeHandle = process.env.VSCODE_GIT_IPC_HANDLE;
|
|
236
|
+
const vsCodeInjection = process.env.VSCODE_INJECTION;
|
|
237
|
+
const cursorExecutable = process.env.CURSOR_EXECUTABLE;
|
|
238
|
+
if (cursorExecutable || termProgram === 'cursor') {
|
|
239
|
+
// Running in Cursor terminal - save to .cursor/
|
|
240
|
+
outputPath = path.join(process.cwd(), '.cursor', 'tasks.instructions.md');
|
|
241
|
+
if (commandExists('cursor')) {
|
|
242
|
+
editorCommand = 'cursor';
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else if (vsCodeHandle || vsCodeInjection || termProgram === 'vscode') {
|
|
246
|
+
// Running in VSCode terminal - save to .github/instructions/
|
|
247
|
+
outputPath = path.join(process.cwd(), '.github', 'instructions', 'tasks.instructions.md');
|
|
248
|
+
if (commandExists('code')) {
|
|
249
|
+
editorCommand = 'code';
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else if (termProgram?.toLowerCase().includes('jetbrains')) {
|
|
253
|
+
// Running in JetBrains IDE terminal - save to .idea/
|
|
254
|
+
outputPath = path.join(process.cwd(), '.idea', 'tasks.instructions.md');
|
|
255
|
+
const jetbrainsCommands = ['webstorm', 'idea', 'pycharm', 'phpstorm', 'rubymine', 'goland'];
|
|
256
|
+
for (const cmd of jetbrainsCommands) {
|
|
257
|
+
if (commandExists(cmd)) {
|
|
258
|
+
editorCommand = cmd;
|
|
259
|
+
break;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Fallback - save to root
|
|
265
|
+
outputPath = path.join(process.cwd(), 'tasks.instructions.md');
|
|
266
|
+
}
|
|
267
|
+
// Write to file
|
|
268
|
+
try {
|
|
269
|
+
// Create directory if it doesn't exist
|
|
270
|
+
const outputDir = path.dirname(outputPath);
|
|
271
|
+
if (!fs.existsSync(outputDir)) {
|
|
272
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
273
|
+
}
|
|
274
|
+
fs.writeFileSync(outputPath, markdown, 'utf8');
|
|
275
|
+
console.log('');
|
|
276
|
+
log.success(`Task instructions generated: ${colors.cyan}${outputPath}${colors.reset}`);
|
|
277
|
+
log.info(`Total tasks: ${colors.cyan}${cards.length}${colors.reset}`);
|
|
278
|
+
// Auto-open file in detected editor
|
|
279
|
+
if (editorCommand) {
|
|
280
|
+
try {
|
|
281
|
+
exec(`${editorCommand} "${outputPath}"`, true);
|
|
282
|
+
log.info(`Opening file in ${editorCommand}...`);
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
// Ignore open errors (not critical)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Add to .gitignore if not already there
|
|
289
|
+
const gitignorePath = path.join(process.cwd(), '.gitignore');
|
|
290
|
+
try {
|
|
291
|
+
let gitignoreContent = '';
|
|
292
|
+
if (fs.existsSync(gitignorePath)) {
|
|
293
|
+
gitignoreContent = fs.readFileSync(gitignorePath, 'utf8');
|
|
294
|
+
}
|
|
295
|
+
// Check if Trello-generated tasks section already exists
|
|
296
|
+
const lines = gitignoreContent.split('\n');
|
|
297
|
+
const hasTrelloSection = lines.some((line) => line.trim() === '# Trello-generated tasks');
|
|
298
|
+
if (!hasTrelloSection) {
|
|
299
|
+
// Add complete Trello-generated tasks section to .gitignore
|
|
300
|
+
const trelloSection = `\n# Trello-generated tasks\n.github/instructions/tasks.instructions.md\n.cursor/tasks.instructions.md\n.idea/tasks.instructions.md\n`;
|
|
301
|
+
const newContent = gitignoreContent.endsWith('\n')
|
|
302
|
+
? `${gitignoreContent}${trelloSection}`
|
|
303
|
+
: `${gitignoreContent}${trelloSection}`;
|
|
304
|
+
fs.writeFileSync(gitignorePath, newContent, 'utf8');
|
|
305
|
+
log.success('Added Trello-generated tasks section to .gitignore');
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (gitignoreError) {
|
|
309
|
+
// Ignore gitignore errors (not critical)
|
|
310
|
+
log.warn(`Could not update .gitignore: ${gitignoreError instanceof Error ? gitignoreError.message : String(gitignoreError)}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
log.error(`Failed to write file: ${error instanceof Error ? error.message : String(error)}`);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
/**
|
|
318
|
+
* Show Trello menu
|
|
319
|
+
*/
|
|
320
|
+
export const showTrelloMenu = async () => {
|
|
321
|
+
log.banner();
|
|
322
|
+
log.step(`${colors.cyan}Trello Tasks${colors.reset}\n`);
|
|
323
|
+
// Check if Trello is configured
|
|
324
|
+
if (!hasTrelloConfig()) {
|
|
325
|
+
log.warn('Trello is not configured!');
|
|
326
|
+
const shouldSetup = await select('Would you like to set it up now?', [
|
|
327
|
+
{ label: 'Yes, setup Trello', value: 'setup' },
|
|
328
|
+
{ label: 'No, go back', value: 'back' },
|
|
329
|
+
]);
|
|
330
|
+
if (shouldSetup === 'setup') {
|
|
331
|
+
const { handleTrelloSetting } = await import('./settings.js');
|
|
332
|
+
await handleTrelloSetting();
|
|
333
|
+
// After setup, show menu again
|
|
334
|
+
await showTrelloMenu();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const choice = await select('What would you like to do?', [
|
|
340
|
+
{ label: 'Get Trello lists', value: 'lists' },
|
|
341
|
+
{ label: 'Generate tasks.instructions.md', value: 'generate' },
|
|
342
|
+
{ label: 'Back to main menu', value: 'back' },
|
|
343
|
+
]);
|
|
344
|
+
switch (choice) {
|
|
345
|
+
case 'lists': {
|
|
346
|
+
await handleGetTrelloLists();
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
case 'generate': {
|
|
350
|
+
await handleGenerateTaskInstructions();
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
case 'back': {
|
|
354
|
+
// Return to main menu
|
|
355
|
+
const { main } = await import('./main.js');
|
|
356
|
+
await main();
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
};
|
|
361
|
+
//# sourceMappingURL=trello-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trello-menu.js","sourceRoot":"","sources":["../../src/workflows/trello-menu.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "geeto",
|
|
3
|
+
"version": "0.1.0-beta.0",
|
|
4
|
+
"description": "Git flow automation CLI tool with AI-powered (Gemini, GitHub Copilot, OpenRouter)",
|
|
5
|
+
"author": {
|
|
6
|
+
"email": "amdev142@gmail.com",
|
|
7
|
+
"name": "Agung Maulana Malik",
|
|
8
|
+
"url": "https://github.com/rust142"
|
|
9
|
+
},
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"bin": {
|
|
13
|
+
"geeto": "./lib/index.js"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"lib",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc && chmod +x ./lib/index.js",
|
|
22
|
+
"dev": "bun src/index.ts",
|
|
23
|
+
"start": "./lib/index.js",
|
|
24
|
+
"clean": "rm -rf lib",
|
|
25
|
+
"prebuild": "bun run clean",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"lint": "eslint src --ext .ts",
|
|
28
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
29
|
+
"lint:md": "markdownlint \"**/*.md\" --ignore node_modules",
|
|
30
|
+
"lint:spell": "cspell \"**/*.{md,mdx,txt,ts,tsx,js,jsx,json}\" --no-progress",
|
|
31
|
+
"lint:yaml": "yamllint \"**/*.{yml,yaml}\" --ignore node_modules",
|
|
32
|
+
"lint:md:fix": "markdownlint \"**/*.md\" --ignore node_modules --fix",
|
|
33
|
+
"format": "prettier --write \"src/**/*.{ts,json,md}\"",
|
|
34
|
+
"format:check": "prettier --check \"src/**/*.{ts,json,md}\"",
|
|
35
|
+
"cspell": "cspell",
|
|
36
|
+
"cspell:check": "node ./scripts/cspell-check.js",
|
|
37
|
+
"cspell:interactive": "node ./scripts/cspell-ignore.js",
|
|
38
|
+
"check:fast": "bun run format:check && bun run lint && bun run lint:md && bun run lint:yaml && bun run lint:spell",
|
|
39
|
+
"check:full": "bun run typecheck && bun run build",
|
|
40
|
+
"prepush": "bun run check:fast && bun run check:full",
|
|
41
|
+
"commitlint": "commitlint --edit",
|
|
42
|
+
"geeto:build": "bun build --compile --minify --sourcemap lib/index.js --outfile geeto",
|
|
43
|
+
"geeto:build:linux": "bun build --compile --minify --target=bun-linux-x64 lib/index.js --outfile geeto-linux",
|
|
44
|
+
"geeto:build:linux:arm64": "bun build --compile --minify --target=bun-linux-arm64 lib/index.js --outfile geeto-linux-arm64",
|
|
45
|
+
"geeto:build:windows": "bun build --compile --minify --target=bun-windows-x64 lib/index.js --outfile geeto-windows.exe",
|
|
46
|
+
"geeto:build:mac": "bun build --compile --minify --target=bun-darwin-x64 lib/index.js --outfile geeto-mac",
|
|
47
|
+
"geeto:build:mac:arm64": "bun build --compile --minify --target=bun-darwin-arm64 lib/index.js --outfile geeto-mac-arm64",
|
|
48
|
+
"geeto:build:all": "bun run geeto:build:linux && bun run geeto:build:linux:arm64 && bun run geeto:build:windows && bun run geeto:build:mac && bun run geeto:build:mac:arm64",
|
|
49
|
+
"release": "release-it",
|
|
50
|
+
"release:minor": "release-it minor",
|
|
51
|
+
"release:major": "release-it major",
|
|
52
|
+
"release:patch": "release-it patch",
|
|
53
|
+
"release:beta": "release-it --preRelease=beta --ci",
|
|
54
|
+
"release:alpha": "release-it --preRelease=alpha",
|
|
55
|
+
"prepare": "husky install",
|
|
56
|
+
"postinstall": "bun run prepare",
|
|
57
|
+
"lint-staged": "lint-staged",
|
|
58
|
+
"tools:install": "sh tools/install.sh",
|
|
59
|
+
"danger:ci": "danger ci",
|
|
60
|
+
"danger:local": "danger pr",
|
|
61
|
+
"copilot": "gh"
|
|
62
|
+
},
|
|
63
|
+
"keywords": [
|
|
64
|
+
"git",
|
|
65
|
+
"flow",
|
|
66
|
+
"automation",
|
|
67
|
+
"gemini",
|
|
68
|
+
"ai",
|
|
69
|
+
"branch-naming",
|
|
70
|
+
"trello",
|
|
71
|
+
"cli"
|
|
72
|
+
],
|
|
73
|
+
"devDependencies": {
|
|
74
|
+
"@commitlint/cli": "^20.4.0",
|
|
75
|
+
"@commitlint/config-conventional": "^20.4.0",
|
|
76
|
+
"@ianvs/prettier-plugin-sort-imports": "^4.7.0",
|
|
77
|
+
"@release-it/conventional-changelog": "^10.0.4",
|
|
78
|
+
"@types/bun": "^1.3.8",
|
|
79
|
+
"@types/node": "^25.1.0",
|
|
80
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
81
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
82
|
+
"cspell": "^9.6.2",
|
|
83
|
+
"danger": "^13.0.5",
|
|
84
|
+
"danger-plugin-conventional-commitlint": "^3.1.0",
|
|
85
|
+
"eslint": "^9.39.2",
|
|
86
|
+
"eslint-config-prettier": "^10.1.8",
|
|
87
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
88
|
+
"eslint-plugin-promise": "^7.2.1",
|
|
89
|
+
"eslint-plugin-security": "^3.0.1",
|
|
90
|
+
"eslint-plugin-unicorn": "^62.0.0",
|
|
91
|
+
"husky": "^9.1.7",
|
|
92
|
+
"lint-staged": "^16.2.7",
|
|
93
|
+
"markdownlint-cli": "^0.47.0",
|
|
94
|
+
"prettier": "^3.8.1",
|
|
95
|
+
"release-it": "^19.2.4",
|
|
96
|
+
"typescript": "^5.9.3",
|
|
97
|
+
"yaml-lint": "^1.7.0"
|
|
98
|
+
},
|
|
99
|
+
"peerDependencies": {
|
|
100
|
+
"typescript": "^5"
|
|
101
|
+
},
|
|
102
|
+
"engines": {
|
|
103
|
+
"node": ">=18.0.0",
|
|
104
|
+
"bun": ">=1.0.0"
|
|
105
|
+
},
|
|
106
|
+
"dependencies": {
|
|
107
|
+
"@github/copilot-sdk": "^0.1.20",
|
|
108
|
+
"@google/genai": "^1.39.0",
|
|
109
|
+
"@openrouter/sdk": "^0.5.1",
|
|
110
|
+
"geeto": "."
|
|
111
|
+
}
|
|
112
|
+
}
|