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,451 @@
|
|
|
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, @typescript-eslint/no-unsafe-call */
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { CopilotClient } from '@github/copilot-sdk';
|
|
8
|
+
import { exec } from '../utils/exec.js';
|
|
9
|
+
import { log } from '../utils/logging.js';
|
|
10
|
+
// Copilot SDK wrapper (lazy-load, optional)
|
|
11
|
+
// Minimum Copilot CLI version required for SDK compatibility
|
|
12
|
+
export const MIN_COPILOT_VERSION = '0.0.400';
|
|
13
|
+
// Cache file path for storing copilot binary info
|
|
14
|
+
const CACHE_FILE = path.join(os.homedir(), '.cache', 'geeto', 'copilot-bin.json');
|
|
15
|
+
const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
16
|
+
/**
|
|
17
|
+
* Parse version string to numeric value for comparison.
|
|
18
|
+
*/
|
|
19
|
+
export const parseParts = (v) => {
|
|
20
|
+
const parts = v.split('.').map((n) => Number.parseInt(n, 10));
|
|
21
|
+
const [major = 0, minor = 0, patch = 0] = parts;
|
|
22
|
+
return major * 1_000_000 + minor * 1_000 + patch;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Read cached copilot binary info from file.
|
|
26
|
+
*/
|
|
27
|
+
const readCache = () => {
|
|
28
|
+
try {
|
|
29
|
+
if (!fs.existsSync(CACHE_FILE))
|
|
30
|
+
return null;
|
|
31
|
+
const data = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'));
|
|
32
|
+
// Check if cache is still valid (within TTL and binary still exists)
|
|
33
|
+
if (Date.now() - data.timestamp < CACHE_TTL_MS && fs.existsSync(data.path)) {
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// ignore
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Write copilot binary info to cache file.
|
|
44
|
+
*/
|
|
45
|
+
const writeCache = (info) => {
|
|
46
|
+
try {
|
|
47
|
+
const cacheDir = path.dirname(CACHE_FILE);
|
|
48
|
+
if (!fs.existsSync(cacheDir)) {
|
|
49
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
fs.writeFileSync(CACHE_FILE, JSON.stringify({ ...info, timestamp: Date.now() }));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// ignore cache write failures
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Get version from a specific copilot binary path.
|
|
59
|
+
*/
|
|
60
|
+
const getVersionFromPath = (binPath) => {
|
|
61
|
+
try {
|
|
62
|
+
const verOut = exec(`"${binPath}" --version`, true);
|
|
63
|
+
const m = verOut.match(/(\d+\.\d+\.\d+)/);
|
|
64
|
+
return m?.[1] ?? null;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Find the best (newest) copilot binary from known locations.
|
|
72
|
+
* Uses file-based caching to avoid slow exec calls on every startup.
|
|
73
|
+
*/
|
|
74
|
+
export const findBestCopilotBinary = () => {
|
|
75
|
+
const minNum = parseParts(MIN_COPILOT_VERSION);
|
|
76
|
+
// Super fast path: check cache first
|
|
77
|
+
const cached = readCache();
|
|
78
|
+
if (cached && parseParts(cached.version) >= minNum) {
|
|
79
|
+
return { path: cached.path, version: cached.version };
|
|
80
|
+
}
|
|
81
|
+
// Check PATH first (most common case)
|
|
82
|
+
try {
|
|
83
|
+
const pathBin = exec('which copilot', true).trim();
|
|
84
|
+
if (pathBin && fs.existsSync(pathBin)) {
|
|
85
|
+
const ver = getVersionFromPath(pathBin);
|
|
86
|
+
if (ver) {
|
|
87
|
+
const num = parseParts(ver);
|
|
88
|
+
if (num >= minNum) {
|
|
89
|
+
const result = { path: pathBin, version: ver };
|
|
90
|
+
writeCache(result);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// ignore, will check other locations
|
|
98
|
+
}
|
|
99
|
+
// PATH version is outdated or not found - scan known locations
|
|
100
|
+
const home = os.homedir();
|
|
101
|
+
const knownPaths = [
|
|
102
|
+
'/usr/local/bin/copilot',
|
|
103
|
+
'/usr/bin/copilot',
|
|
104
|
+
path.join(home, '.config/Code/User/globalStorage/github.copilot-chat/copilotCli/copilot'),
|
|
105
|
+
path.join(home, '.npm-global/bin/copilot'),
|
|
106
|
+
path.join(home, '.local/bin/copilot'),
|
|
107
|
+
];
|
|
108
|
+
for (const binPath of knownPaths) {
|
|
109
|
+
if (fs.existsSync(binPath)) {
|
|
110
|
+
const ver = getVersionFromPath(binPath);
|
|
111
|
+
if (ver) {
|
|
112
|
+
const num = parseParts(ver);
|
|
113
|
+
if (num >= minNum) {
|
|
114
|
+
const result = { path: binPath, version: ver };
|
|
115
|
+
writeCache(result);
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
};
|
|
123
|
+
// Cached best copilot binary info
|
|
124
|
+
let cachedCopilotPath = null;
|
|
125
|
+
/**
|
|
126
|
+
* Check if Copilot CLI version is compatible with SDK.
|
|
127
|
+
* Automatically finds the newest copilot binary to bypass PATH cache issues.
|
|
128
|
+
* Returns true if compatible, false otherwise.
|
|
129
|
+
*/
|
|
130
|
+
export const checkCopilotCliVersion = () => {
|
|
131
|
+
const best = findBestCopilotBinary();
|
|
132
|
+
if (!best) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const minNum = parseParts(MIN_COPILOT_VERSION);
|
|
136
|
+
const currentNum = parseParts(best.version);
|
|
137
|
+
if (currentNum >= minNum) {
|
|
138
|
+
// Cache the path for the SDK to use
|
|
139
|
+
cachedCopilotPath = best.path;
|
|
140
|
+
// Update PATH so CopilotClient can find it
|
|
141
|
+
if (cachedCopilotPath) {
|
|
142
|
+
const binDir = path.dirname(cachedCopilotPath);
|
|
143
|
+
if (!process.env.PATH?.startsWith(binDir)) {
|
|
144
|
+
process.env.PATH = `${binDir}:${process.env.PATH}`;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
return false;
|
|
150
|
+
};
|
|
151
|
+
let client = null;
|
|
152
|
+
let versionChecked = false;
|
|
153
|
+
let versionCompatible = false;
|
|
154
|
+
const ensureClient = async () => {
|
|
155
|
+
// Check CLI version once before attempting to start client
|
|
156
|
+
if (!versionChecked) {
|
|
157
|
+
versionChecked = true;
|
|
158
|
+
versionCompatible = checkCopilotCliVersion();
|
|
159
|
+
}
|
|
160
|
+
if (!versionCompatible) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
if (client) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
client = new CopilotClient({ autoStart: true });
|
|
168
|
+
// Narrow client into a local const to satisfy strict no-non-null assertions
|
|
169
|
+
const startedClient = client;
|
|
170
|
+
if (!startedClient) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
await startedClient.start();
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
// SDK optional: log info and fall back
|
|
178
|
+
const msg = error instanceof Error && error.message ? error.message : String(error);
|
|
179
|
+
log.info(msg);
|
|
180
|
+
client = null;
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const withSession = async (model, fn) => {
|
|
185
|
+
const ok = await ensureClient();
|
|
186
|
+
if (!ok || !client) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
const session = await client.createSession({ model });
|
|
191
|
+
try {
|
|
192
|
+
const res = await fn(session);
|
|
193
|
+
// best-effort destroy session workspace
|
|
194
|
+
try {
|
|
195
|
+
await session.destroy();
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// ignore
|
|
199
|
+
}
|
|
200
|
+
return res;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
try {
|
|
204
|
+
await session.destroy();
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// ignore
|
|
208
|
+
}
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
log.warn('Failed to create Copilot session: ' + String(error));
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
export const isAvailable = async () => {
|
|
218
|
+
return ensureClient();
|
|
219
|
+
};
|
|
220
|
+
export const stopClient = async () => {
|
|
221
|
+
if (!client) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
await client.stop();
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
try {
|
|
229
|
+
// Some runtime implementations expose forceStop; call if present
|
|
230
|
+
await client.forceStop();
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
/* ignore */
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
client = null;
|
|
237
|
+
};
|
|
238
|
+
export const generateBranchName = async (text, correction, model) => {
|
|
239
|
+
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.`;
|
|
240
|
+
const prompt = correction
|
|
241
|
+
? `${promptBase}\n\nInput:\n${text}\n\nAdjustment: ${correction}`
|
|
242
|
+
: `${promptBase}\n\nInput:\n${text}`;
|
|
243
|
+
const result = await withSession(model, async (session) => {
|
|
244
|
+
// sendAndWait returns the assistant message event with data.content
|
|
245
|
+
try {
|
|
246
|
+
const response = await session.sendAndWait({ prompt });
|
|
247
|
+
const content = response?.data?.content ?? '';
|
|
248
|
+
const first = String(content)
|
|
249
|
+
.trim()
|
|
250
|
+
.split('\n')
|
|
251
|
+
.find((l) => !!l) ?? '';
|
|
252
|
+
// sanitize to kebab-case
|
|
253
|
+
const cleaned = String(first)
|
|
254
|
+
.toLowerCase()
|
|
255
|
+
.replaceAll(/[^\d\sa-z-]/g, ' ')
|
|
256
|
+
.trim()
|
|
257
|
+
.replaceAll(/\s+/g, '-')
|
|
258
|
+
.replaceAll(/-+/g, '-')
|
|
259
|
+
.replaceAll(/^-|-$/g, '');
|
|
260
|
+
return cleaned || null;
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
console.log(''); // Force newline to separate from any active spinner
|
|
264
|
+
log.error('Copilot Error: ' + String(error));
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
return result;
|
|
269
|
+
};
|
|
270
|
+
export const generateCommitMessage = async (diff, correction, model) => {
|
|
271
|
+
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.
|
|
272
|
+
|
|
273
|
+
Example:
|
|
274
|
+
refactor(ai): migrate providers to SDKs
|
|
275
|
+
|
|
276
|
+
Replaces direct API/CLI calls for Copilot and Gemini with SDK integrations.
|
|
277
|
+
This simplifies code, improves maintainability, and adds dynamic model
|
|
278
|
+
fetching. Updates .gitignore for geeto binaries.`;
|
|
279
|
+
const prompt = correction
|
|
280
|
+
? `${promptBase}\n\nDiff:\n${diff}\n\nAdjustment: ${correction}`
|
|
281
|
+
: `${promptBase}\n\nDiff:\n${diff}`;
|
|
282
|
+
const result = await withSession(model, async (session) => {
|
|
283
|
+
try {
|
|
284
|
+
const response = await session.sendAndWait({ prompt });
|
|
285
|
+
const content = response?.data?.content ?? '';
|
|
286
|
+
// Normalize full response: remove fenced blocks, trim surrounding quotes, collapse extra blank lines
|
|
287
|
+
const cleaned = String(content)
|
|
288
|
+
.replaceAll(/```[\S\s]*?```/g, '')
|
|
289
|
+
.replaceAll(/^"+|"+$/g, '')
|
|
290
|
+
.trim();
|
|
291
|
+
const normalized = cleaned.replaceAll(/\n\s*\n+/g, '\n\n').trim();
|
|
292
|
+
return normalized && normalized.length >= 8 ? normalized : null;
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
console.log(''); // Force newline to separate from any active spinner
|
|
296
|
+
log.error('Copilot Error: ' + String(error));
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
return result;
|
|
301
|
+
};
|
|
302
|
+
export const getAvailableModelsDetailed = async () => {
|
|
303
|
+
try {
|
|
304
|
+
const runtime = client;
|
|
305
|
+
let list = null;
|
|
306
|
+
if (typeof runtime.listModels === 'function') {
|
|
307
|
+
list = await runtime.listModels();
|
|
308
|
+
}
|
|
309
|
+
else if (typeof runtime.getModels === 'function') {
|
|
310
|
+
list = await runtime.getModels();
|
|
311
|
+
}
|
|
312
|
+
else if (Array.isArray(runtime.models)) {
|
|
313
|
+
list = runtime.models;
|
|
314
|
+
}
|
|
315
|
+
if (!list || !Array.isArray(list)) {
|
|
316
|
+
return null;
|
|
317
|
+
}
|
|
318
|
+
const mapped = await Promise.all(list.map(async (m) => {
|
|
319
|
+
if (!m) {
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
if (typeof m === 'string') {
|
|
323
|
+
return {
|
|
324
|
+
id: m,
|
|
325
|
+
name: m,
|
|
326
|
+
inputTokenLimit: null,
|
|
327
|
+
outputTokenLimit: null,
|
|
328
|
+
needsEnable: false,
|
|
329
|
+
isPremium: false,
|
|
330
|
+
multiplier: null,
|
|
331
|
+
label: m,
|
|
332
|
+
value: m,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const id = String(m.id ?? m.model ?? m.name ?? '');
|
|
336
|
+
const name = String(m.name ?? m.title ?? id);
|
|
337
|
+
const policyState = m.policy?.state ?? m.state ?? null;
|
|
338
|
+
const billing = m.billing ?? m.pricing ?? null;
|
|
339
|
+
const isPremium = Boolean(billing?.is_premium ?? billing?.premium ?? false);
|
|
340
|
+
const multiplierRaw = billing?.multiplier ?? billing?.cost_multiplier ?? null;
|
|
341
|
+
const multiplier = typeof multiplierRaw === 'number' ? multiplierRaw : null;
|
|
342
|
+
let needsEnable = Boolean(policyState && String(policyState).toLowerCase() !== 'enabled');
|
|
343
|
+
// If the policy state is unknown, try to ping the model via adapter to check enablement
|
|
344
|
+
if (policyState === null) {
|
|
345
|
+
try {
|
|
346
|
+
const adapter = await import('./copilot-adapter.js');
|
|
347
|
+
if (adapter && typeof adapter.pingModel === 'function') {
|
|
348
|
+
try {
|
|
349
|
+
const pingOk = await adapter.pingModel(id || name);
|
|
350
|
+
needsEnable = !pingOk;
|
|
351
|
+
}
|
|
352
|
+
catch {
|
|
353
|
+
// If ping fails, leave needsEnable as false to avoid blocking users
|
|
354
|
+
needsEnable = false;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
// adapter import failed; ignore and proceed
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// capabilities.limits may contain token limits for the runtime
|
|
363
|
+
let inputTokenLimit = null;
|
|
364
|
+
let outputTokenLimit = null;
|
|
365
|
+
try {
|
|
366
|
+
const limits = m.capabilities?.limits;
|
|
367
|
+
if (limits) {
|
|
368
|
+
if (typeof limits.max_prompt_tokens === 'number') {
|
|
369
|
+
inputTokenLimit = limits.max_prompt_tokens;
|
|
370
|
+
}
|
|
371
|
+
if (typeof limits.max_output_tokens === 'number') {
|
|
372
|
+
outputTokenLimit = limits.max_output_tokens;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
catch {
|
|
377
|
+
// ignore parsing errors; leave as null
|
|
378
|
+
}
|
|
379
|
+
const label = `${name}`;
|
|
380
|
+
const value = id || label;
|
|
381
|
+
return {
|
|
382
|
+
id,
|
|
383
|
+
name,
|
|
384
|
+
inputTokenLimit,
|
|
385
|
+
outputTokenLimit,
|
|
386
|
+
needsEnable,
|
|
387
|
+
isPremium,
|
|
388
|
+
multiplier,
|
|
389
|
+
label,
|
|
390
|
+
value,
|
|
391
|
+
};
|
|
392
|
+
}));
|
|
393
|
+
const out = mapped.filter(Boolean);
|
|
394
|
+
if (out.length > 0) {
|
|
395
|
+
return out;
|
|
396
|
+
}
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return null;
|
|
401
|
+
}
|
|
402
|
+
};
|
|
403
|
+
export const getAvailableModelChoices = async (defaultModelId) => {
|
|
404
|
+
const detailed = (await getAvailableModelsDetailed()) ?? [];
|
|
405
|
+
// compute max lengths using simple loops (avoid reduce)
|
|
406
|
+
let maxNameLen = 0;
|
|
407
|
+
let maxIoLen = 0;
|
|
408
|
+
let maxMultLen = 0;
|
|
409
|
+
for (const d of detailed) {
|
|
410
|
+
const enableHintLen = d.needsEnable ? ' (requires enablement)'.length : 0;
|
|
411
|
+
const defaultHintLen = defaultModelId && (d.id === defaultModelId || d.value === defaultModelId)
|
|
412
|
+
? ' (default)'.length + 2
|
|
413
|
+
: 0;
|
|
414
|
+
const nameLen = String(d.name).length + enableHintLen + defaultHintLen;
|
|
415
|
+
if (nameLen > maxNameLen) {
|
|
416
|
+
maxNameLen = nameLen;
|
|
417
|
+
}
|
|
418
|
+
const ioStr = `${d.inputTokenLimit ?? 'n/a'}/${d.outputTokenLimit ?? 'n/a'} tokens`;
|
|
419
|
+
if (ioStr.length > maxIoLen) {
|
|
420
|
+
maxIoLen = ioStr.length;
|
|
421
|
+
}
|
|
422
|
+
const multStr = d.multiplier === null ? '' : `${d.multiplier}x`;
|
|
423
|
+
if (multStr.length > maxMultLen) {
|
|
424
|
+
maxMultLen = multStr.length;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
const choices = [];
|
|
428
|
+
const indexWidth = String(detailed.length).length;
|
|
429
|
+
for (const [i, d] of detailed.entries()) {
|
|
430
|
+
const idx = `${String(i + 1).padStart(indexWidth, ' ')}.`;
|
|
431
|
+
const isDefault = defaultModelId && (d.id === defaultModelId || d.value === defaultModelId);
|
|
432
|
+
const defaultHint = isDefault ? ' (default)' : '';
|
|
433
|
+
const enableHint = d.needsEnable ? ' (requires enablement)' : '';
|
|
434
|
+
const nameWithHint = `${d.name}${defaultHint}${enableHint}`;
|
|
435
|
+
const defaultMark = isDefault ? ' ✓' : '';
|
|
436
|
+
const padCount = Math.max(0, maxNameLen - nameWithHint.length + 2);
|
|
437
|
+
const paddedName = nameWithHint + ' '.repeat(padCount) + defaultMark;
|
|
438
|
+
const ioStr = `${d.inputTokenLimit ?? 'n/a'}/${d.outputTokenLimit ?? 'n/a'} tokens`;
|
|
439
|
+
const ioPadded = ioStr + ' '.repeat(Math.max(0, maxIoLen - ioStr.length + 2));
|
|
440
|
+
const mult = d.multiplier === null ? '' : `${d.multiplier}x`;
|
|
441
|
+
const paddedMult = mult + ' '.repeat(Math.max(0, maxMultLen - mult.length));
|
|
442
|
+
const label = `${idx} ${paddedName}${ioPadded}${paddedMult}`;
|
|
443
|
+
choices.push({ label, value: d.value });
|
|
444
|
+
}
|
|
445
|
+
return choices;
|
|
446
|
+
};
|
|
447
|
+
export default {
|
|
448
|
+
generateBranchName,
|
|
449
|
+
generateCommitMessage,
|
|
450
|
+
};
|
|
451
|
+
//# sourceMappingURL=copilot-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot-sdk.js","sourceRoot":"","sources":["../../src/api/copilot-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Copilot integration for AI-powered branch naming and commit messages
|
|
3
|
+
*/
|
|
4
|
+
export type CopilotModel = string;
|
|
5
|
+
/**
|
|
6
|
+
* Return Copilot model choices from the SDK in realtime.
|
|
7
|
+
* This deliberately does NOT read or write `.geeto/copilot-model.json`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const getCopilotModels: () => Promise<Array<{
|
|
10
|
+
label: string;
|
|
11
|
+
value: CopilotModel;
|
|
12
|
+
}>>;
|
|
13
|
+
/**
|
|
14
|
+
* Generate branch name from title using GitHub Copilot SDK
|
|
15
|
+
*/
|
|
16
|
+
export declare const generateBranchName: (text: string, correction?: string, model?: CopilotModel) => Promise<string | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Generate commit message from git diff using GitHub Copilot SDK
|
|
19
|
+
*/
|
|
20
|
+
export declare const generateCommitMessage: (diff: string, correction?: string, model?: CopilotModel) => Promise<string | null>;
|
|
21
|
+
//# sourceMappingURL=copilot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../src/api/copilot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAC/C,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC,CAiB9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,QAAO,YAAiC,KACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAuCvB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,QAAO,YAAiC,KACvC,OAAO,CAAC,MAAM,GAAG,IAAI,CAcvB,CAAA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Copilot integration for AI-powered branch naming and commit messages
|
|
3
|
+
*/
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { generateBranchName as sdkGenerateBranchName, generateCommitMessage as sdkGenerateCommitMessage, getAvailableModelChoices as sdkGetAvailableModels, isAvailable as sdkIsAvailable, } from './copilot-sdk.js';
|
|
6
|
+
import { log } from '../utils/logging.js';
|
|
7
|
+
/**
|
|
8
|
+
* Return Copilot model choices from the SDK in realtime.
|
|
9
|
+
* This deliberately does NOT read or write `.geeto/copilot-model.json`.
|
|
10
|
+
*/
|
|
11
|
+
export const getCopilotModels = async () => {
|
|
12
|
+
try {
|
|
13
|
+
const ok = await sdkIsAvailable();
|
|
14
|
+
if (!ok) {
|
|
15
|
+
log.info('Copilot SDK not available; returning no Copilot models.');
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const live = await sdkGetAvailableModels();
|
|
19
|
+
if (Array.isArray(live) && live.length > 0) {
|
|
20
|
+
return live;
|
|
21
|
+
}
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
log.warn(`Failed to fetch live Copilot models: ${String(error)}`);
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Generate branch name from title using GitHub Copilot SDK
|
|
31
|
+
*/
|
|
32
|
+
export const generateBranchName = async (text, correction, model = 'claude-haiku-4.5') => {
|
|
33
|
+
try {
|
|
34
|
+
const ok = await sdkIsAvailable();
|
|
35
|
+
if (!ok) {
|
|
36
|
+
log.warn('Copilot SDK not available; install @github/copilot-sdk to enable Copilot features.');
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const sdkRes = await sdkGenerateBranchName(text, correction, model);
|
|
40
|
+
if (!sdkRes) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
// Persist original provider response so the user can inspect the unmodified AI output.
|
|
44
|
+
try {
|
|
45
|
+
const fs = await import('node:fs/promises');
|
|
46
|
+
const outDir = path.join(process.cwd(), '.geeto');
|
|
47
|
+
await fs.mkdir(outDir, { recursive: true });
|
|
48
|
+
const payload = {
|
|
49
|
+
provider: 'copilot',
|
|
50
|
+
model,
|
|
51
|
+
raw: sdkRes,
|
|
52
|
+
cleaned: sdkRes,
|
|
53
|
+
timestamp: new Date().toISOString(),
|
|
54
|
+
};
|
|
55
|
+
await fs.writeFile(path.join(outDir, 'last-ai-suggestion.json'), JSON.stringify(payload, null, 2));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
/* ignore file write failures */
|
|
59
|
+
}
|
|
60
|
+
return sdkRes;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.log(''); // Force newline to separate from any active spinner
|
|
64
|
+
log.warn('Copilot Error: ' + String(error));
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Generate commit message from git diff using GitHub Copilot SDK
|
|
70
|
+
*/
|
|
71
|
+
export const generateCommitMessage = async (diff, correction, model = 'claude-haiku-4.5') => {
|
|
72
|
+
try {
|
|
73
|
+
const ok = await sdkIsAvailable();
|
|
74
|
+
if (!ok) {
|
|
75
|
+
log.warn('Copilot SDK not available; install @github/copilot-sdk to enable Copilot features.');
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const sdkRes = await sdkGenerateCommitMessage(diff, correction, model);
|
|
79
|
+
return sdkRes;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.log(''); // Force newline to separate from any active spinner
|
|
83
|
+
log.warn('Copilot Error: ' + String(error));
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=copilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/api/copilot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GeminiModel } from './gemini.js';
|
|
2
|
+
export declare const isAvailable: () => boolean;
|
|
3
|
+
export declare const generateBranchName: (text: string, correction?: string, model?: GeminiModel) => Promise<string | null>;
|
|
4
|
+
export declare const generateCommitMessage: (diff: string, correction?: string, model?: GeminiModel) => Promise<string | null>;
|
|
5
|
+
type ModelDetail = {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string | null;
|
|
9
|
+
inputTokenLimit: number | null;
|
|
10
|
+
outputTokenLimit: number | null;
|
|
11
|
+
label: string;
|
|
12
|
+
value: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const getAvailableModelsDetailed: () => Promise<ModelDetail[] | null>;
|
|
15
|
+
export declare const getAvailableModelChoices: () => Promise<{
|
|
16
|
+
label: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}[]>;
|
|
19
|
+
declare const _default: {
|
|
20
|
+
generateBranchName: (text: string, correction?: string, model?: GeminiModel) => Promise<string | null>;
|
|
21
|
+
generateCommitMessage: (diff: string, correction?: string, model?: GeminiModel) => Promise<string | null>;
|
|
22
|
+
};
|
|
23
|
+
export default _default;
|
|
24
|
+
//# sourceMappingURL=gemini-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini-sdk.d.ts","sourceRoot":"","sources":["../../src/api/gemini-sdk.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAkCzC,eAAO,MAAM,WAAW,QAAO,OAE9B,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,QAAQ,WAAW,KAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CA+BvB,CAAA;AACD,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,QAAQ,WAAW,KAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CA+BvB,CAAA;AAED,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,0BAA0B,QAAa,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAkI/E,CAAA;AAED,eAAO,MAAM,wBAAwB;WAGE,MAAM;WAAS,MAAM;IA0B3D,CAAA;;+BAnPO,MAAM,eACC,MAAM,UACX,WAAW,KAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;kCAiCjB,MAAM,eACC,MAAM,UACX,WAAW,KAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;;AA8MzB,wBAGC"}
|