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,341 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
3
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
4
+ import { OpenRouter } from '@openrouter/sdk';
5
+ import { getOpenRouterConfig } from '../utils/config.js';
6
+ import { log } from '../utils/logging.js';
7
+ // OpenRouter SDK wrapper (lazy-load, optional)
8
+ let client = null;
9
+ const ensureClient = () => {
10
+ if (client) {
11
+ return true;
12
+ }
13
+ try {
14
+ client = new OpenRouter({ apiKey: getOpenRouterConfig().apiKey });
15
+ // Narrow client into a local const to satisfy strict no-non-null assertions
16
+ const startedClient = client;
17
+ if (!startedClient) {
18
+ return false;
19
+ }
20
+ return true;
21
+ }
22
+ catch (error) {
23
+ // SDK optional: log info and fall back
24
+ try {
25
+ const msg = error && error.message ? error.message : String(error);
26
+ log.info(msg);
27
+ }
28
+ catch {
29
+ log.info('OpenRouter SDK not available — falling back to OpenRouter.');
30
+ }
31
+ client = null;
32
+ return false;
33
+ }
34
+ };
35
+ export const isAvailable = () => {
36
+ return ensureClient();
37
+ };
38
+ export const generateBranchName = async (text, correction, model) => {
39
+ const promptBase = `Generate a git branch name suffix from this input. Output ONLY the kebab-case suffix (lowercase-with-hyphens), 3-50 chars, nothing else.`;
40
+ const prompt = correction
41
+ ? `${promptBase}\n\nInput:\n${text}\n\nAdjustment: ${correction}`
42
+ : `${promptBase}\n\nInput:\n${text}`;
43
+ const completion = await client?.chat.send({
44
+ model: model ?? 'gemini-2.5-flash',
45
+ messages: [
46
+ {
47
+ role: 'user',
48
+ content: prompt,
49
+ },
50
+ ],
51
+ });
52
+ try {
53
+ const content = completion?.choices[0]?.message?.content;
54
+ const first = String(content)
55
+ .trim()
56
+ .split('\n')
57
+ .find((l) => !!l) ?? '';
58
+ // sanitize to kebab-case
59
+ const cleaned = String(first)
60
+ .toLowerCase()
61
+ .replaceAll(/[^\d\sa-z-]/g, ' ')
62
+ .trim()
63
+ .replaceAll(/\s+/g, '-')
64
+ .replaceAll(/-+/g, '-')
65
+ .replaceAll(/^-|-$/g, '');
66
+ return cleaned || null;
67
+ }
68
+ catch (error) {
69
+ console.log(''); // Force newline to separate from any active spinner
70
+ log.error('OpenRouter Error: ' + String(error));
71
+ return null;
72
+ }
73
+ };
74
+ export const generateCommitMessage = async (diff, correction, model) => {
75
+ const promptBase = `Generate a conventional commit message from this git diff. Output ONLY the commit message in this format:\n\n<type>(<scope>): <short summary>\n\n<Detailed multi-line body explaining the change. Wrap lines at ~72 characters. LIMITS: subject max 100 chars; body max 360 chars. Include why the change was made and any important notes. Separate subject and body by a single blank line. Do not include any extraneous commentary or markers. Use imperative mood.
76
+
77
+ Example:
78
+ refactor(ai): migrate providers to SDKs
79
+
80
+ Replaces direct API/CLI calls for Copilot and Gemini with SDK integrations.
81
+ This simplifies code, improves maintainability, and adds dynamic model
82
+ fetching. Updates .gitignore for geeto binaries.`;
83
+ const prompt = correction
84
+ ? `${promptBase}\n\nDiff:\n${diff}\n\nAdjustment: ${correction}`
85
+ : `${promptBase}\n\nDiff:\n${diff}`;
86
+ const completion = await client?.chat.send({
87
+ model: model ?? 'gemini-2.5-flash',
88
+ messages: [
89
+ {
90
+ role: 'user',
91
+ content: prompt,
92
+ },
93
+ ],
94
+ });
95
+ try {
96
+ const content = completion?.choices[0]?.message?.content;
97
+ const cleaned = String(content)
98
+ .replaceAll(/```[\S\s]*?```/g, '')
99
+ .replaceAll(/^"+|"+$/g, '')
100
+ .trim();
101
+ const normalized = cleaned.replaceAll(/\n\s*\n+/g, '\n\n').trim();
102
+ return normalized && normalized.length >= 8 ? normalized : null;
103
+ }
104
+ catch (error) {
105
+ console.log(''); // Force newline to separate from any active spinner
106
+ log.error('OpenRouter Error: ' + String(error));
107
+ return null;
108
+ }
109
+ };
110
+ export const getAvailableModelsDetailed = async () => {
111
+ const ok = ensureClient();
112
+ if (!ok || !client) {
113
+ return null;
114
+ }
115
+ try {
116
+ const resp = await client.models.list();
117
+ let list = [];
118
+ if (Array.isArray(resp.data)) {
119
+ list = resp.data;
120
+ }
121
+ else {
122
+ list = [];
123
+ }
124
+ if (!Array.isArray(list) || list.length === 0) {
125
+ return null;
126
+ }
127
+ const mapped = list
128
+ .map((m) => {
129
+ if (!m) {
130
+ return null;
131
+ }
132
+ if (typeof m === 'string') {
133
+ return {
134
+ id: m,
135
+ canonicalSlug: null,
136
+ huggingFaceId: null,
137
+ name: m,
138
+ description: null,
139
+ version: null,
140
+ created: null,
141
+ pricing: null,
142
+ contextLength: null,
143
+ inputTokenLimit: null,
144
+ outputTokenLimit: null,
145
+ architecture: null,
146
+ topProvider: null,
147
+ perRequestLimits: null,
148
+ supportedParameters: [],
149
+ defaultParameters: null,
150
+ expirationDate: null,
151
+ supportedActions: [],
152
+ temperature: null,
153
+ maxTemperature: null,
154
+ topP: null,
155
+ topK: null,
156
+ thinking: null,
157
+ needsEnable: false,
158
+ isPremium: false,
159
+ multiplier: null,
160
+ label: m,
161
+ value: m,
162
+ };
163
+ }
164
+ const id = String(m.id ?? '');
165
+ const name = String(m.name ?? id);
166
+ const description = String(m.description ?? m.summary ?? '') || null;
167
+ const version = m.version ?? m.modelVersion ?? m.modelVersionId ?? null;
168
+ // OpenRouter model specific fields
169
+ const canonicalSlug = String(m.canonicalSlug ?? m.canonical_slug ?? m.slug ?? '') || null;
170
+ const huggingFaceId = String(m.huggingFaceId ?? m.hugging_face_id ?? '') || null;
171
+ const created = typeof m.created === 'number' ? m.created : null;
172
+ const pricing = m.pricing ?? m.pricingInfo ?? null;
173
+ let contextLength = null;
174
+ if (typeof m.contextLength === 'number') {
175
+ contextLength = m.contextLength;
176
+ }
177
+ else if (typeof m.context_length === 'number') {
178
+ contextLength = m.context_length;
179
+ }
180
+ const inputTokenLimit = contextLength;
181
+ let outputTokenLimit = null;
182
+ if (m.topProvider) {
183
+ if (typeof m.topProvider.maxCompletionTokens === 'number') {
184
+ outputTokenLimit = m.topProvider.maxCompletionTokens;
185
+ }
186
+ else if (typeof m.topProvider.max_completion_tokens === 'number') {
187
+ outputTokenLimit = m.topProvider.max_completion_tokens;
188
+ }
189
+ }
190
+ let supportedActions = [];
191
+ if (Array.isArray(m.supportedActions)) {
192
+ supportedActions = m.supportedActions;
193
+ }
194
+ else if (Array.isArray(m.supported_actions)) {
195
+ supportedActions = m.supported_actions;
196
+ }
197
+ const temperature = typeof m.temperature === 'number' ? m.temperature : null;
198
+ let maxTemperature = null;
199
+ if (typeof m.maxTemperature === 'number') {
200
+ maxTemperature = m.maxTemperature;
201
+ }
202
+ else if (typeof m.max_temperature === 'number') {
203
+ maxTemperature = m.max_temperature;
204
+ }
205
+ const topP = typeof m.topP === 'number' ? m.topP : null;
206
+ const topK = typeof m.topK === 'number' ? m.topK : null;
207
+ const thinking = typeof m.thinking === 'boolean' ? m.thinking : null;
208
+ let archInputModalities = [];
209
+ let archOutputModalities = [];
210
+ if (m.architecture) {
211
+ if (Array.isArray(m.architecture.inputModalities)) {
212
+ archInputModalities = m.architecture.inputModalities;
213
+ }
214
+ else if (Array.isArray(m.architecture.input_modalities)) {
215
+ archInputModalities = m.architecture.input_modalities;
216
+ }
217
+ if (Array.isArray(m.architecture.outputModalities)) {
218
+ archOutputModalities = m.architecture.outputModalities;
219
+ }
220
+ else if (Array.isArray(m.architecture.output_modalities)) {
221
+ archOutputModalities = m.architecture.output_modalities;
222
+ }
223
+ }
224
+ const architecture = m.architecture
225
+ ? {
226
+ tokenizer: m.architecture.tokenizer ?? null,
227
+ instructType: m.architecture.instructType ?? m.architecture.instruct_type ?? null,
228
+ modality: m.architecture.modality ?? null,
229
+ inputModalities: archInputModalities,
230
+ outputModalities: archOutputModalities,
231
+ }
232
+ : null;
233
+ let tpContextLength = null;
234
+ let tpMaxCompletionTokens = null;
235
+ let tpIsModerated = null;
236
+ if (m.topProvider) {
237
+ if (typeof m.topProvider.contextLength === 'number') {
238
+ tpContextLength = m.topProvider.contextLength;
239
+ }
240
+ else if (typeof m.topProvider.context_length === 'number') {
241
+ tpContextLength = m.topProvider.context_length;
242
+ }
243
+ if (typeof m.topProvider.maxCompletionTokens === 'number') {
244
+ tpMaxCompletionTokens = m.topProvider.maxCompletionTokens;
245
+ }
246
+ else if (typeof m.topProvider.max_completion_tokens === 'number') {
247
+ tpMaxCompletionTokens = m.topProvider.max_completion_tokens;
248
+ }
249
+ if (typeof m.topProvider.isModerated === 'boolean') {
250
+ tpIsModerated = m.topProvider.isModerated;
251
+ }
252
+ }
253
+ const topProvider = m.topProvider
254
+ ? {
255
+ contextLength: tpContextLength,
256
+ maxCompletionTokens: tpMaxCompletionTokens,
257
+ isModerated: tpIsModerated,
258
+ }
259
+ : null;
260
+ const perRequestLimits = m.perRequestLimits ?? m.per_request_limits ?? null;
261
+ let supportedParameters = [];
262
+ if (Array.isArray(m.supportedParameters)) {
263
+ supportedParameters = m.supportedParameters;
264
+ }
265
+ else if (Array.isArray(m.supported_parameters)) {
266
+ supportedParameters = m.supported_parameters;
267
+ }
268
+ const defaultParameters = m.defaultParameters ?? m.default_parameters ?? null;
269
+ const expirationDate = m.expirationDate ?? m.expires_at ?? m.expiration_date ?? null;
270
+ const needsEnableField = m.requiresEnable ?? m.requireEnable ?? m.requires_enable ?? null;
271
+ const needsEnable = Boolean(needsEnableField);
272
+ return {
273
+ id,
274
+ canonicalSlug,
275
+ huggingFaceId,
276
+ name,
277
+ description,
278
+ version,
279
+ created,
280
+ pricing,
281
+ contextLength,
282
+ inputTokenLimit,
283
+ outputTokenLimit,
284
+ architecture,
285
+ topProvider,
286
+ perRequestLimits,
287
+ supportedParameters,
288
+ defaultParameters,
289
+ expirationDate,
290
+ supportedActions,
291
+ temperature,
292
+ maxTemperature,
293
+ topP,
294
+ topK,
295
+ thinking,
296
+ needsEnable,
297
+ label: name,
298
+ value: id || name,
299
+ };
300
+ })
301
+ .filter((m) => m.outputTokenLimit)
302
+ // eslint-disable-next-line unicorn/no-array-sort
303
+ .sort((a, b) => a.name.localeCompare(b.name)); // sort by name
304
+ const out = mapped.filter(Boolean);
305
+ return out.length > 0 ? out : null;
306
+ }
307
+ catch {
308
+ return null;
309
+ }
310
+ };
311
+ export const getAvailableModelChoices = async () => {
312
+ const detailed = (await getAvailableModelsDetailed()) ?? [];
313
+ const choices = [];
314
+ const indexWidth = String(detailed.length).length;
315
+ // compute max widths for name and io columns so values align nicely
316
+ let maxNameLen = 0;
317
+ let maxIoLen = 0;
318
+ for (const d of detailed) {
319
+ if (d.label.length > maxNameLen) {
320
+ maxNameLen = d.label.length;
321
+ }
322
+ const ioStr = `${d.inputTokenLimit ?? 'n/a'}/${d.outputTokenLimit ?? 'n/a'} tokens`;
323
+ if (ioStr.length > maxIoLen) {
324
+ maxIoLen = ioStr.length;
325
+ }
326
+ }
327
+ for (const [i, d] of detailed.entries()) {
328
+ const idx = `${String(i + 1).padStart(indexWidth, ' ')}.`;
329
+ const ioStr = `${d.inputTokenLimit ?? 'n/a'}/${d.outputTokenLimit ?? 'n/a'} tokens`;
330
+ const padCount = Math.max(1, maxNameLen - d.label.length + 2);
331
+ const paddedName = d.label + ' '.repeat(padCount);
332
+ const label = `${idx} ${paddedName}${ioStr}`;
333
+ choices.push({ label, value: d.value });
334
+ }
335
+ return choices;
336
+ };
337
+ export default {
338
+ generateBranchName,
339
+ generateCommitMessage,
340
+ };
341
+ //# sourceMappingURL=openrouter-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter-sdk.js","sourceRoot":"","sources":["../../src/api/openrouter-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type OpenRouterModel = string;
2
+ /**
3
+ * Return OpenRouter model choices from the SDK in realtime.
4
+ */
5
+ export declare const getOpenRouterModels: () => Promise<Array<{
6
+ label: string;
7
+ value: OpenRouterModel;
8
+ }>>;
9
+ /**
10
+ * Generate branch name from title using OpenRouter SDK
11
+ */
12
+ export declare const generateBranchName: (text: string, correction?: string, model?: OpenRouterModel) => Promise<string | null>;
13
+ /**
14
+ * Generate commit message from git diff using OpenRouter SDK
15
+ */
16
+ export declare const generateCommitMessage: (diff: string, correction?: string, model?: OpenRouterModel) => Promise<string | null>;
17
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/api/openrouter.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,eAAe,GAAG,MAAM,CAAA;AAEpC;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAClD,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC,CA2BjD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,QAAO,eAAoC,KAC1C,OAAO,CAAC,MAAM,GAAG,IAAI,CA4DvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,QAAO,eAAoC,KAC1C,OAAO,CAAC,MAAM,GAAG,IAAI,CAgBvB,CAAA"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * OpenRouter integration for AI-powered branch naming and commit messages
3
+ */
4
+ import path from 'node:path';
5
+ import { generateBranchName as sdkGenerateBranchName, generateCommitMessage as sdkGenerateCommitMessage, isAvailable as sdkIsAvailable, } from './openrouter-sdk.js';
6
+ import { log } from '../utils/logging.js';
7
+ /**
8
+ * Return OpenRouter model choices from the SDK in realtime.
9
+ */
10
+ export const getOpenRouterModels = async () => {
11
+ try {
12
+ // Prefer persisted list in .geeto/openrouter-model.json per project sync
13
+ const fs = await import('node:fs');
14
+ const cfgPath = path.join(process.cwd(), '.geeto', 'openrouter-model.json');
15
+ if (fs.existsSync(cfgPath)) {
16
+ try {
17
+ const raw = fs.readFileSync(cfgPath, 'utf8');
18
+ const parsed = JSON.parse(raw);
19
+ if (Array.isArray(parsed) && parsed.length > 0) {
20
+ return parsed.map((p) => ({ label: p.label ?? String(p.value), value: String(p.value) }));
21
+ }
22
+ return [];
23
+ }
24
+ catch (error) {
25
+ log.warn(`Could not read .geeto/openrouter-model.json: ${error.message}`);
26
+ return [];
27
+ }
28
+ }
29
+ // If no persisted file, return empty (do not hit SDK automatically)
30
+ log.info('No .geeto/openrouter-model.json. Open Settings → Sync OpenRouter models.');
31
+ return [];
32
+ }
33
+ catch (error) {
34
+ log.warn(`Failed to read OpenRouter models: ${String(error)}`);
35
+ return [];
36
+ }
37
+ };
38
+ /**
39
+ * Generate branch name from title using OpenRouter SDK
40
+ */
41
+ export const generateBranchName = async (text, correction, model = 'gemini-2.5-flash') => {
42
+ try {
43
+ const ok = sdkIsAvailable();
44
+ if (!ok) {
45
+ log.warn('OpenRouter SDK not available; install @openrouter/sdk to enable OpenRouter features.');
46
+ return null;
47
+ }
48
+ const sdkRes = await sdkGenerateBranchName(text, correction, model);
49
+ if (!sdkRes) {
50
+ return null;
51
+ }
52
+ // // Clean up the result
53
+ let cleaned = sdkRes.trim();
54
+ // Try to extract from backticks first
55
+ const backtickMatch = cleaned.match(/`([^`]+)`/);
56
+ if (backtickMatch?.[1]) {
57
+ cleaned = backtickMatch[1].trim();
58
+ }
59
+ // Take only the first line if multiple lines
60
+ cleaned = cleaned.split('\n').at(0)?.trim() ?? '';
61
+ cleaned = cleaned
62
+ .toLowerCase()
63
+ .replaceAll(/[^\da-z-]/g, '') // Remove special chars except hyphens
64
+ .replaceAll(/-+/g, '-') // Replace multiple hyphens
65
+ .replaceAll(/^-|-$/g, ''); // Remove leading/trailing hyphens
66
+ const branchName = cleaned;
67
+ // Persist original provider response so the user can inspect the unmodified AI output.
68
+ try {
69
+ const fs = await import('node:fs/promises');
70
+ const outDir = path.join(process.cwd(), '.geeto');
71
+ await fs.mkdir(outDir, { recursive: true });
72
+ const payload = {
73
+ provider: 'openrouter',
74
+ model,
75
+ raw: sdkRes,
76
+ cleaned: cleaned,
77
+ timestamp: new Date().toISOString(),
78
+ };
79
+ await fs.writeFile(path.join(outDir, 'last-ai-suggestion.json'), JSON.stringify(payload, null, 2));
80
+ }
81
+ catch {
82
+ /* ignore file write failures */
83
+ }
84
+ return branchName && branchName.length >= 3 ? branchName : null;
85
+ }
86
+ catch (error) {
87
+ console.log(''); // Force newline to separate from any active spinner
88
+ log.warn('OpenRouter Error: ' + String(error));
89
+ return null;
90
+ }
91
+ };
92
+ /**
93
+ * Generate commit message from git diff using OpenRouter SDK
94
+ */
95
+ export const generateCommitMessage = async (diff, correction, model = 'gemini-2.5-flash') => {
96
+ try {
97
+ const ok = sdkIsAvailable();
98
+ if (!ok) {
99
+ log.warn('OpenRouter SDK not available; install @openrouter/sdk to enable OpenRouter features.');
100
+ return null;
101
+ }
102
+ const sdkRes = await sdkGenerateCommitMessage(diff, correction, model);
103
+ return sdkRes;
104
+ }
105
+ catch (error) {
106
+ console.log(''); // Force newline to separate from any active spinner
107
+ log.warn('OpenRouter Error: ' + String(error));
108
+ return null;
109
+ }
110
+ };
111
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/api/openrouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Trello API integration
3
+ */
4
+ import type { TrelloCard, TrelloList } from '../types/index.js';
5
+ /**
6
+ * Fetch Trello lists from board
7
+ */
8
+ export declare const fetchTrelloLists: () => Promise<TrelloList[]>;
9
+ /**
10
+ * Fetch Trello cards from board (optionally filtered by list)
11
+ */
12
+ export declare const fetchTrelloCards: (listId?: string) => Promise<TrelloCard[]>;
13
+ /**
14
+ * Generate branch name from Trello card title
15
+ */
16
+ export declare const generateBranchNameFromTrelloTitle: (cardTitle: string, cardId: string, separator?: string) => string;
17
+ //# sourceMappingURL=trello.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trello.d.ts","sourceRoot":"","sources":["../../src/api/trello.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAK/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,UAAU,EAAE,CA0B7D,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAkC5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAC5C,WAAW,MAAM,EACjB,QAAQ,MAAM,EACd,YAAW,MAAY,KACtB,MAQF,CAAA"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Trello API integration
3
+ */
4
+ import { getTrelloConfig } from '../utils/config.js';
5
+ import { log } from '../utils/logging.js';
6
+ /**
7
+ * Fetch Trello lists from board
8
+ */
9
+ export const fetchTrelloLists = async () => {
10
+ const config = getTrelloConfig();
11
+ if (!config.apiKey || !config.token || !config.boardId) {
12
+ return [];
13
+ }
14
+ try {
15
+ const response = await fetch(`https://api.trello.com/1/boards/${config.boardId}/lists?key=${config.apiKey}&token=${config.token}`, { method: 'GET' });
16
+ if (!response.ok) {
17
+ console.log(''); // Force newline to separate from any active spinner
18
+ log.warn(`Trello API error: ${response.status} ${response.statusText}`);
19
+ return [];
20
+ }
21
+ const lists = (await response.json());
22
+ return lists;
23
+ }
24
+ catch (error) {
25
+ const msg = error instanceof Error ? error.message : String(error);
26
+ console.log(''); // Force newline to separate from any active spinner
27
+ log.warn(`Failed to fetch Trello lists: ${msg}`);
28
+ return [];
29
+ }
30
+ };
31
+ /**
32
+ * Fetch Trello cards from board (optionally filtered by list)
33
+ */
34
+ export const fetchTrelloCards = async (listId) => {
35
+ const config = getTrelloConfig();
36
+ if (!config.apiKey || !config.token || !config.boardId) {
37
+ return [];
38
+ }
39
+ try {
40
+ const response = await fetch(`https://api.trello.com/1/boards/${config.boardId}/cards?fields=id,name,desc,idShort,shortLink,url,idList&key=${config.apiKey}&token=${config.token}`, { method: 'GET' });
41
+ if (!response.ok) {
42
+ console.log(''); // Force newline to separate from any active spinner
43
+ log.warn(`Trello API error: ${response.status} ${response.statusText}`);
44
+ return [];
45
+ }
46
+ let cards = (await response.json());
47
+ if (listId) {
48
+ cards = cards.filter((card) => card.idList === listId);
49
+ }
50
+ // Filter out done/archived cards
51
+ return cards.filter((card) => !card.name.includes('[DONE]') && !card.name.includes('[ARCHIVED]'));
52
+ }
53
+ catch (error) {
54
+ const msg = error instanceof Error ? error.message : String(error);
55
+ console.log(''); // Force newline to separate from any active spinner
56
+ log.warn(`Failed to fetch Trello cards: ${msg}`);
57
+ return [];
58
+ }
59
+ };
60
+ /**
61
+ * Generate branch name from Trello card title
62
+ */
63
+ export const generateBranchNameFromTrelloTitle = (cardTitle, cardId, separator = '-') => {
64
+ const cleanTitle = cardTitle
65
+ .toLowerCase()
66
+ .replaceAll(/[^\s\w-]/gi, '')
67
+ .replaceAll(/\s+/g, separator)
68
+ .replace(separator === '-' ? /-+/g : /_+/g, separator)
69
+ .replace(separator === '-' ? /^-|-$/g : /^_|_$/g, '');
70
+ return `${cardId}${separator}${cleanTitle}`;
71
+ };
72
+ //# sourceMappingURL=trello.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trello.js","sourceRoot":"","sources":["../../src/api/trello.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Interactive input utilities
3
+ */
4
+ /**
5
+ * Ask a question and return user input
6
+ */
7
+ export declare const askQuestion: (question: string, defaultValue?: string) => string;
8
+ /**
9
+ * Progress bar utility for long operations
10
+ */
11
+ export declare class ProgressBar {
12
+ private total;
13
+ private current;
14
+ private width;
15
+ private title;
16
+ constructor(total: number, title?: string, width?: number);
17
+ update(current: number): void;
18
+ increment(amount?: number): void;
19
+ complete(): void;
20
+ private render;
21
+ }
22
+ /**
23
+ * Syntax highlighting for git diff output
24
+ */
25
+ export declare const highlightDiff: (diff: string) => string;
26
+ /**
27
+ * Ask a yes/no confirmation question
28
+ */
29
+ export declare const confirm: (question: string, defaultYes?: boolean) => boolean;
30
+ /**
31
+ * Edit multi-line content in the user's editor (from $EDITOR).
32
+ * Writes initialText to a temp file, opens $EDITOR, and returns the edited content.
33
+ */
34
+ export declare const editInEditor: (initialText?: string, filenameHint?: string) => string;
35
+ /**
36
+ * Close the readline interface
37
+ */
38
+ export declare const closeInput: () => void;
39
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/cli/input.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,EAAE,eAAe,MAAM,KAAG,MAsBrE,CAAA;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,EAAE,KAAK,GAAE,MAAW;IAOzE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK7B,SAAS,CAAC,MAAM,GAAE,MAAU,GAAG,IAAI;IAKnC,QAAQ,IAAI,IAAI;IAMhB,OAAO,CAAC,MAAM;CAUf;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAO5C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,UAAU,MAAM,EAAE,aAAY,OAAc,KAAG,OAOtE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,oBAAgB,EAAE,qBAAiC,KAAG,MAkBlF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,QAAO,IAE7B,CAAA"}