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.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -0
  3. package/lib/api/copilot-adapter.d.ts +11 -0
  4. package/lib/api/copilot-adapter.d.ts.map +1 -0
  5. package/lib/api/copilot-adapter.js +41 -0
  6. package/lib/api/copilot-adapter.js.map +1 -0
  7. package/lib/api/copilot-sdk.d.ts +48 -0
  8. package/lib/api/copilot-sdk.d.ts.map +1 -0
  9. package/lib/api/copilot-sdk.js +451 -0
  10. package/lib/api/copilot-sdk.js.map +1 -0
  11. package/lib/api/copilot.d.ts +21 -0
  12. package/lib/api/copilot.d.ts.map +1 -0
  13. package/lib/api/copilot.js +87 -0
  14. package/lib/api/copilot.js.map +1 -0
  15. package/lib/api/gemini-sdk.d.ts +24 -0
  16. package/lib/api/gemini-sdk.d.ts.map +1 -0
  17. package/lib/api/gemini-sdk.js +245 -0
  18. package/lib/api/gemini-sdk.js.map +1 -0
  19. package/lib/api/gemini.d.ts +21 -0
  20. package/lib/api/gemini.d.ts.map +1 -0
  21. package/lib/api/gemini.js +87 -0
  22. package/lib/api/gemini.js.map +1 -0
  23. package/lib/api/openrouter-sdk.d.ts +58 -0
  24. package/lib/api/openrouter-sdk.d.ts.map +1 -0
  25. package/lib/api/openrouter-sdk.js +341 -0
  26. package/lib/api/openrouter-sdk.js.map +1 -0
  27. package/lib/api/openrouter.d.ts +17 -0
  28. package/lib/api/openrouter.d.ts.map +1 -0
  29. package/lib/api/openrouter.js +111 -0
  30. package/lib/api/openrouter.js.map +1 -0
  31. package/lib/api/trello.d.ts +17 -0
  32. package/lib/api/trello.d.ts.map +1 -0
  33. package/lib/api/trello.js +72 -0
  34. package/lib/api/trello.js.map +1 -0
  35. package/lib/cli/input.d.ts +39 -0
  36. package/lib/cli/input.d.ts.map +1 -0
  37. package/lib/cli/input.js +119 -0
  38. package/lib/cli/input.js.map +1 -0
  39. package/lib/cli/menu.d.ts +9 -0
  40. package/lib/cli/menu.d.ts.map +1 -0
  41. package/lib/cli/menu.js +201 -0
  42. package/lib/cli/menu.js.map +1 -0
  43. package/lib/core/constants.d.ts +22 -0
  44. package/lib/core/constants.d.ts.map +1 -0
  45. package/lib/core/constants.js +24 -0
  46. package/lib/core/constants.js.map +1 -0
  47. package/lib/core/copilot-setup.d.ts +13 -0
  48. package/lib/core/copilot-setup.d.ts.map +1 -0
  49. package/lib/core/copilot-setup.js +447 -0
  50. package/lib/core/copilot-setup.js.map +1 -0
  51. package/lib/core/gemini-setup.d.ts +8 -0
  52. package/lib/core/gemini-setup.d.ts.map +1 -0
  53. package/lib/core/gemini-setup.js +84 -0
  54. package/lib/core/gemini-setup.js.map +1 -0
  55. package/lib/core/menu-constants.d.ts +24 -0
  56. package/lib/core/menu-constants.d.ts.map +1 -0
  57. package/lib/core/menu-constants.js +22 -0
  58. package/lib/core/menu-constants.js.map +1 -0
  59. package/lib/core/openrouter-setup.d.ts +8 -0
  60. package/lib/core/openrouter-setup.d.ts.map +1 -0
  61. package/lib/core/openrouter-setup.js +73 -0
  62. package/lib/core/openrouter-setup.js.map +1 -0
  63. package/lib/core/setup.d.ts +21 -0
  64. package/lib/core/setup.d.ts.map +1 -0
  65. package/lib/core/setup.js +88 -0
  66. package/lib/core/setup.js.map +1 -0
  67. package/lib/core/trello-setup.d.ts +8 -0
  68. package/lib/core/trello-setup.d.ts.map +1 -0
  69. package/lib/core/trello-setup.js +107 -0
  70. package/lib/core/trello-setup.js.map +1 -0
  71. package/lib/index.d.ts +3 -0
  72. package/lib/index.d.ts.map +1 -0
  73. package/lib/index.js +250 -0
  74. package/lib/index.js.map +1 -0
  75. package/lib/types/index.d.ts +78 -0
  76. package/lib/types/index.d.ts.map +1 -0
  77. package/lib/types/index.js +2 -0
  78. package/lib/types/index.js.map +1 -0
  79. package/lib/utils/branch-naming.d.ts +11 -0
  80. package/lib/utils/branch-naming.d.ts.map +1 -0
  81. package/lib/utils/branch-naming.js +396 -0
  82. package/lib/utils/branch-naming.js.map +1 -0
  83. package/lib/utils/colors.d.ts +14 -0
  84. package/lib/utils/colors.d.ts.map +1 -0
  85. package/lib/utils/colors.js +14 -0
  86. package/lib/utils/colors.js.map +1 -0
  87. package/lib/utils/commit-helpers.d.ts +53 -0
  88. package/lib/utils/commit-helpers.d.ts.map +1 -0
  89. package/lib/utils/commit-helpers.js +177 -0
  90. package/lib/utils/commit-helpers.js.map +1 -0
  91. package/lib/utils/config.d.ts +87 -0
  92. package/lib/utils/config.d.ts.map +1 -0
  93. package/lib/utils/config.js +326 -0
  94. package/lib/utils/config.js.map +1 -0
  95. package/lib/utils/display.d.ts +27 -0
  96. package/lib/utils/display.d.ts.map +1 -0
  97. package/lib/utils/display.js +116 -0
  98. package/lib/utils/display.js.map +1 -0
  99. package/lib/utils/error-helpers.d.ts +27 -0
  100. package/lib/utils/error-helpers.d.ts.map +1 -0
  101. package/lib/utils/error-helpers.js +102 -0
  102. package/lib/utils/error-helpers.js.map +1 -0
  103. package/lib/utils/exec.d.ts +18 -0
  104. package/lib/utils/exec.d.ts.map +1 -0
  105. package/lib/utils/exec.js +96 -0
  106. package/lib/utils/exec.js.map +1 -0
  107. package/lib/utils/git-ai-errors.d.ts +10 -0
  108. package/lib/utils/git-ai-errors.d.ts.map +1 -0
  109. package/lib/utils/git-ai-errors.js +71 -0
  110. package/lib/utils/git-ai-errors.js.map +1 -0
  111. package/lib/utils/git-ai.d.ts +26 -0
  112. package/lib/utils/git-ai.d.ts.map +1 -0
  113. package/lib/utils/git-ai.js +603 -0
  114. package/lib/utils/git-ai.js.map +1 -0
  115. package/lib/utils/git-commands.d.ts +21 -0
  116. package/lib/utils/git-commands.d.ts.map +1 -0
  117. package/lib/utils/git-commands.js +58 -0
  118. package/lib/utils/git-commands.js.map +1 -0
  119. package/lib/utils/git-errors.d.ts +76 -0
  120. package/lib/utils/git-errors.d.ts.map +1 -0
  121. package/lib/utils/git-errors.js +565 -0
  122. package/lib/utils/git-errors.js.map +1 -0
  123. package/lib/utils/git.d.ts +61 -0
  124. package/lib/utils/git.d.ts.map +1 -0
  125. package/lib/utils/git.js +245 -0
  126. package/lib/utils/git.js.map +1 -0
  127. package/lib/utils/logging.d.ts +25 -0
  128. package/lib/utils/logging.d.ts.map +1 -0
  129. package/lib/utils/logging.js +71 -0
  130. package/lib/utils/logging.js.map +1 -0
  131. package/lib/utils/menu-builders.d.ts +47 -0
  132. package/lib/utils/menu-builders.d.ts.map +1 -0
  133. package/lib/utils/menu-builders.js +34 -0
  134. package/lib/utils/menu-builders.js.map +1 -0
  135. package/lib/utils/platform.d.ts +13 -0
  136. package/lib/utils/platform.d.ts.map +1 -0
  137. package/lib/utils/platform.js +32 -0
  138. package/lib/utils/platform.js.map +1 -0
  139. package/lib/utils/spinner-wrapper.d.ts +16 -0
  140. package/lib/utils/spinner-wrapper.d.ts.map +1 -0
  141. package/lib/utils/spinner-wrapper.js +56 -0
  142. package/lib/utils/spinner-wrapper.js.map +1 -0
  143. package/lib/utils/state.d.ts +22 -0
  144. package/lib/utils/state.d.ts.map +1 -0
  145. package/lib/utils/state.js +75 -0
  146. package/lib/utils/state.js.map +1 -0
  147. package/lib/utils/time.d.ts +4 -0
  148. package/lib/utils/time.d.ts.map +1 -0
  149. package/lib/utils/time.js +29 -0
  150. package/lib/utils/time.js.map +1 -0
  151. package/lib/utils/type-guards.d.ts +10 -0
  152. package/lib/utils/type-guards.d.ts.map +1 -0
  153. package/lib/utils/type-guards.js +29 -0
  154. package/lib/utils/type-guards.js.map +1 -0
  155. package/lib/workflows/ai-provider.d.ts +13 -0
  156. package/lib/workflows/ai-provider.d.ts.map +1 -0
  157. package/lib/workflows/ai-provider.js +55 -0
  158. package/lib/workflows/ai-provider.js.map +1 -0
  159. package/lib/workflows/author.d.ts +4 -0
  160. package/lib/workflows/author.d.ts.map +1 -0
  161. package/lib/workflows/author.js +80 -0
  162. package/lib/workflows/author.js.map +1 -0
  163. package/lib/workflows/branch-helpers.d.ts +9 -0
  164. package/lib/workflows/branch-helpers.d.ts.map +1 -0
  165. package/lib/workflows/branch-helpers.js +406 -0
  166. package/lib/workflows/branch-helpers.js.map +1 -0
  167. package/lib/workflows/branch-utils.d.ts +9 -0
  168. package/lib/workflows/branch-utils.d.ts.map +1 -0
  169. package/lib/workflows/branch-utils.js +61 -0
  170. package/lib/workflows/branch-utils.js.map +1 -0
  171. package/lib/workflows/branch.d.ts +12 -0
  172. package/lib/workflows/branch.d.ts.map +1 -0
  173. package/lib/workflows/branch.js +555 -0
  174. package/lib/workflows/branch.js.map +1 -0
  175. package/lib/workflows/cleanup.d.ts +10 -0
  176. package/lib/workflows/cleanup.d.ts.map +1 -0
  177. package/lib/workflows/cleanup.js +287 -0
  178. package/lib/workflows/cleanup.js.map +1 -0
  179. package/lib/workflows/commit.d.ts +10 -0
  180. package/lib/workflows/commit.d.ts.map +1 -0
  181. package/lib/workflows/commit.js +771 -0
  182. package/lib/workflows/commit.js.map +1 -0
  183. package/lib/workflows/main-steps.d.ts +12 -0
  184. package/lib/workflows/main-steps.d.ts.map +1 -0
  185. package/lib/workflows/main-steps.js +407 -0
  186. package/lib/workflows/main-steps.js.map +1 -0
  187. package/lib/workflows/main.d.ts +8 -0
  188. package/lib/workflows/main.d.ts.map +1 -0
  189. package/lib/workflows/main.js +720 -0
  190. package/lib/workflows/main.js.map +1 -0
  191. package/lib/workflows/security-gate.d.ts +8 -0
  192. package/lib/workflows/security-gate.d.ts.map +1 -0
  193. package/lib/workflows/security-gate.js +447 -0
  194. package/lib/workflows/security-gate.js.map +1 -0
  195. package/lib/workflows/settings.d.ts +15 -0
  196. package/lib/workflows/settings.d.ts.map +1 -0
  197. package/lib/workflows/settings.js +438 -0
  198. package/lib/workflows/settings.js.map +1 -0
  199. package/lib/workflows/trello-menu.d.ts +16 -0
  200. package/lib/workflows/trello-menu.d.ts.map +1 -0
  201. package/lib/workflows/trello-menu.js +361 -0
  202. package/lib/workflows/trello-menu.js.map +1 -0
  203. 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
+ }