opencode-agy-auth 2.0.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 +745 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/src/antigravity/oauth.d.ts +31 -0
- package/dist/src/antigravity/oauth.d.ts.map +1 -0
- package/dist/src/antigravity/oauth.js +171 -0
- package/dist/src/antigravity/oauth.js.map +1 -0
- package/dist/src/constants.d.ts +155 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +251 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/cache.d.ts +3 -0
- package/dist/src/hooks/auto-update-checker/cache.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/cache.js +71 -0
- package/dist/src/hooks/auto-update-checker/cache.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/checker.d.ts +16 -0
- package/dist/src/hooks/auto-update-checker/checker.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/checker.js +237 -0
- package/dist/src/hooks/auto-update-checker/checker.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/constants.d.ts +9 -0
- package/dist/src/hooks/auto-update-checker/constants.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/constants.js +23 -0
- package/dist/src/hooks/auto-update-checker/constants.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/index.d.ts +34 -0
- package/dist/src/hooks/auto-update-checker/index.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/index.js +125 -0
- package/dist/src/hooks/auto-update-checker/index.js.map +1 -0
- package/dist/src/hooks/auto-update-checker/types.d.ts +25 -0
- package/dist/src/hooks/auto-update-checker/types.d.ts.map +1 -0
- package/dist/src/hooks/auto-update-checker/types.js +1 -0
- package/dist/src/hooks/auto-update-checker/types.js.map +1 -0
- package/dist/src/plugin/accounts.d.ts +174 -0
- package/dist/src/plugin/accounts.d.ts.map +1 -0
- package/dist/src/plugin/accounts.js +1243 -0
- package/dist/src/plugin/accounts.js.map +1 -0
- package/dist/src/plugin/auth.d.ts +21 -0
- package/dist/src/plugin/auth.d.ts.map +1 -0
- package/dist/src/plugin/auth.js +46 -0
- package/dist/src/plugin/auth.js.map +1 -0
- package/dist/src/plugin/cache/index.d.ts +5 -0
- package/dist/src/plugin/cache/index.d.ts.map +1 -0
- package/dist/src/plugin/cache/index.js +5 -0
- package/dist/src/plugin/cache/index.js.map +1 -0
- package/dist/src/plugin/cache/signature-cache.d.ts +111 -0
- package/dist/src/plugin/cache/signature-cache.d.ts.map +1 -0
- package/dist/src/plugin/cache/signature-cache.js +375 -0
- package/dist/src/plugin/cache/signature-cache.js.map +1 -0
- package/dist/src/plugin/cache.d.ts +44 -0
- package/dist/src/plugin/cache.d.ts.map +1 -0
- package/dist/src/plugin/cache.js +200 -0
- package/dist/src/plugin/cache.js.map +1 -0
- package/dist/src/plugin/cli.d.ts +27 -0
- package/dist/src/plugin/cli.d.ts.map +1 -0
- package/dist/src/plugin/cli.js +130 -0
- package/dist/src/plugin/cli.js.map +1 -0
- package/dist/src/plugin/config/index.d.ts +16 -0
- package/dist/src/plugin/config/index.d.ts.map +1 -0
- package/dist/src/plugin/config/index.js +16 -0
- package/dist/src/plugin/config/index.js.map +1 -0
- package/dist/src/plugin/config/loader.d.ts +38 -0
- package/dist/src/plugin/config/loader.d.ts.map +1 -0
- package/dist/src/plugin/config/loader.js +204 -0
- package/dist/src/plugin/config/loader.js.map +1 -0
- package/dist/src/plugin/config/models.d.ts +27 -0
- package/dist/src/plugin/config/models.d.ts.map +1 -0
- package/dist/src/plugin/config/models.js +79 -0
- package/dist/src/plugin/config/models.js.map +1 -0
- package/dist/src/plugin/config/schema.d.ts +134 -0
- package/dist/src/plugin/config/schema.d.ts.map +1 -0
- package/dist/src/plugin/config/schema.js +445 -0
- package/dist/src/plugin/config/schema.js.map +1 -0
- package/dist/src/plugin/config/updater.d.ts +55 -0
- package/dist/src/plugin/config/updater.d.ts.map +1 -0
- package/dist/src/plugin/config/updater.js +133 -0
- package/dist/src/plugin/config/updater.js.map +1 -0
- package/dist/src/plugin/core/streaming/index.d.ts +3 -0
- package/dist/src/plugin/core/streaming/index.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/index.js +3 -0
- package/dist/src/plugin/core/streaming/index.js.map +1 -0
- package/dist/src/plugin/core/streaming/transformer.d.ts +10 -0
- package/dist/src/plugin/core/streaming/transformer.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/transformer.js +271 -0
- package/dist/src/plugin/core/streaming/transformer.js.map +1 -0
- package/dist/src/plugin/core/streaming/types.d.ts +27 -0
- package/dist/src/plugin/core/streaming/types.d.ts.map +1 -0
- package/dist/src/plugin/core/streaming/types.js +1 -0
- package/dist/src/plugin/core/streaming/types.js.map +1 -0
- package/dist/src/plugin/debug.d.ts +94 -0
- package/dist/src/plugin/debug.d.ts.map +1 -0
- package/dist/src/plugin/debug.js +418 -0
- package/dist/src/plugin/debug.js.map +1 -0
- package/dist/src/plugin/errors.d.ts +28 -0
- package/dist/src/plugin/errors.d.ts.map +1 -0
- package/dist/src/plugin/errors.js +42 -0
- package/dist/src/plugin/errors.js.map +1 -0
- package/dist/src/plugin/fingerprint.d.ts +71 -0
- package/dist/src/plugin/fingerprint.d.ts.map +1 -0
- package/dist/src/plugin/fingerprint.js +140 -0
- package/dist/src/plugin/fingerprint.js.map +1 -0
- package/dist/src/plugin/image-saver.d.ts +25 -0
- package/dist/src/plugin/image-saver.d.ts.map +1 -0
- package/dist/src/plugin/image-saver.js +86 -0
- package/dist/src/plugin/image-saver.js.map +1 -0
- package/dist/src/plugin/logger.d.ts +54 -0
- package/dist/src/plugin/logger.d.ts.map +1 -0
- package/dist/src/plugin/logger.js +120 -0
- package/dist/src/plugin/logger.js.map +1 -0
- package/dist/src/plugin/project.d.ts +33 -0
- package/dist/src/plugin/project.d.ts.map +1 -0
- package/dist/src/plugin/project.js +234 -0
- package/dist/src/plugin/project.js.map +1 -0
- package/dist/src/plugin/proxy.d.ts +2 -0
- package/dist/src/plugin/proxy.d.ts.map +1 -0
- package/dist/src/plugin/proxy.js +20 -0
- package/dist/src/plugin/proxy.js.map +1 -0
- package/dist/src/plugin/quota.d.ts +58 -0
- package/dist/src/plugin/quota.d.ts.map +1 -0
- package/dist/src/plugin/quota.js +430 -0
- package/dist/src/plugin/quota.js.map +1 -0
- package/dist/src/plugin/recovery/constants.d.ts +22 -0
- package/dist/src/plugin/recovery/constants.d.ts.map +1 -0
- package/dist/src/plugin/recovery/constants.js +43 -0
- package/dist/src/plugin/recovery/constants.js.map +1 -0
- package/dist/src/plugin/recovery/index.d.ts +12 -0
- package/dist/src/plugin/recovery/index.d.ts.map +1 -0
- package/dist/src/plugin/recovery/index.js +12 -0
- package/dist/src/plugin/recovery/index.js.map +1 -0
- package/dist/src/plugin/recovery/storage.d.ts +24 -0
- package/dist/src/plugin/recovery/storage.d.ts.map +1 -0
- package/dist/src/plugin/recovery/storage.js +354 -0
- package/dist/src/plugin/recovery/storage.js.map +1 -0
- package/dist/src/plugin/recovery/types.d.ts +116 -0
- package/dist/src/plugin/recovery/types.d.ts.map +1 -0
- package/dist/src/plugin/recovery/types.js +6 -0
- package/dist/src/plugin/recovery/types.js.map +1 -0
- package/dist/src/plugin/recovery.d.ts +61 -0
- package/dist/src/plugin/recovery.d.ts.map +1 -0
- package/dist/src/plugin/recovery.js +378 -0
- package/dist/src/plugin/recovery.js.map +1 -0
- package/dist/src/plugin/refresh-queue.d.ts +101 -0
- package/dist/src/plugin/refresh-queue.d.ts.map +1 -0
- package/dist/src/plugin/refresh-queue.js +248 -0
- package/dist/src/plugin/refresh-queue.js.map +1 -0
- package/dist/src/plugin/request-helpers.d.ts +306 -0
- package/dist/src/plugin/request-helpers.d.ts.map +1 -0
- package/dist/src/plugin/request-helpers.js +2476 -0
- package/dist/src/plugin/request-helpers.js.map +1 -0
- package/dist/src/plugin/request.d.ts +98 -0
- package/dist/src/plugin/request.d.ts.map +1 -0
- package/dist/src/plugin/request.js +1513 -0
- package/dist/src/plugin/request.js.map +1 -0
- package/dist/src/plugin/rotation.d.ts +169 -0
- package/dist/src/plugin/rotation.d.ts.map +1 -0
- package/dist/src/plugin/rotation.js +328 -0
- package/dist/src/plugin/rotation.js.map +1 -0
- package/dist/src/plugin/search.d.ts +32 -0
- package/dist/src/plugin/search.d.ts.map +1 -0
- package/dist/src/plugin/search.js +195 -0
- package/dist/src/plugin/search.js.map +1 -0
- package/dist/src/plugin/server.d.ts +23 -0
- package/dist/src/plugin/server.d.ts.map +1 -0
- package/dist/src/plugin/server.js +324 -0
- package/dist/src/plugin/server.js.map +1 -0
- package/dist/src/plugin/storage.d.ts +137 -0
- package/dist/src/plugin/storage.d.ts.map +1 -0
- package/dist/src/plugin/storage.js +588 -0
- package/dist/src/plugin/storage.js.map +1 -0
- package/dist/src/plugin/stores/signature-store.d.ts +5 -0
- package/dist/src/plugin/stores/signature-store.d.ts.map +1 -0
- package/dist/src/plugin/stores/signature-store.js +25 -0
- package/dist/src/plugin/stores/signature-store.js.map +1 -0
- package/dist/src/plugin/thinking-recovery.d.ts +90 -0
- package/dist/src/plugin/thinking-recovery.d.ts.map +1 -0
- package/dist/src/plugin/thinking-recovery.js +316 -0
- package/dist/src/plugin/thinking-recovery.js.map +1 -0
- package/dist/src/plugin/token.d.ts +19 -0
- package/dist/src/plugin/token.d.ts.map +1 -0
- package/dist/src/plugin/token.js +128 -0
- package/dist/src/plugin/token.js.map +1 -0
- package/dist/src/plugin/transform/claude.d.ts +82 -0
- package/dist/src/plugin/transform/claude.d.ts.map +1 -0
- package/dist/src/plugin/transform/claude.js +278 -0
- package/dist/src/plugin/transform/claude.js.map +1 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts +35 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.d.ts.map +1 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.js +225 -0
- package/dist/src/plugin/transform/cross-model-sanitizer.js.map +1 -0
- package/dist/src/plugin/transform/gemini.d.ts +100 -0
- package/dist/src/plugin/transform/gemini.d.ts.map +1 -0
- package/dist/src/plugin/transform/gemini.js +504 -0
- package/dist/src/plugin/transform/gemini.js.map +1 -0
- package/dist/src/plugin/transform/index.d.ts +15 -0
- package/dist/src/plugin/transform/index.d.ts.map +1 -0
- package/dist/src/plugin/transform/index.js +14 -0
- package/dist/src/plugin/transform/index.js.map +1 -0
- package/dist/src/plugin/transform/model-resolver.d.ts +104 -0
- package/dist/src/plugin/transform/model-resolver.d.ts.map +1 -0
- package/dist/src/plugin/transform/model-resolver.js +409 -0
- package/dist/src/plugin/transform/model-resolver.js.map +1 -0
- package/dist/src/plugin/transform/types.d.ts +111 -0
- package/dist/src/plugin/transform/types.d.ts.map +1 -0
- package/dist/src/plugin/transform/types.js +1 -0
- package/dist/src/plugin/transform/types.js.map +1 -0
- package/dist/src/plugin/types.d.ts +97 -0
- package/dist/src/plugin/types.d.ts.map +1 -0
- package/dist/src/plugin/types.js +1 -0
- package/dist/src/plugin/types.js.map +1 -0
- package/dist/src/plugin/ui/ansi.d.ts +32 -0
- package/dist/src/plugin/ui/ansi.d.ts.map +1 -0
- package/dist/src/plugin/ui/ansi.js +52 -0
- package/dist/src/plugin/ui/ansi.js.map +1 -0
- package/dist/src/plugin/ui/auth-menu.d.ts +37 -0
- package/dist/src/plugin/ui/auth-menu.d.ts.map +1 -0
- package/dist/src/plugin/ui/auth-menu.js +182 -0
- package/dist/src/plugin/ui/auth-menu.js.map +1 -0
- package/dist/src/plugin/ui/confirm.d.ts +2 -0
- package/dist/src/plugin/ui/confirm.d.ts.map +1 -0
- package/dist/src/plugin/ui/confirm.js +15 -0
- package/dist/src/plugin/ui/confirm.js.map +1 -0
- package/dist/src/plugin/ui/select.d.ts +23 -0
- package/dist/src/plugin/ui/select.d.ts.map +1 -0
- package/dist/src/plugin/ui/select.js +254 -0
- package/dist/src/plugin/ui/select.js.map +1 -0
- package/dist/src/plugin/version.d.ts +19 -0
- package/dist/src/plugin/version.d.ts.map +1 -0
- package/dist/src/plugin/version.js +74 -0
- package/dist/src/plugin/version.js.map +1 -0
- package/dist/src/plugin.d.ts +40 -0
- package/dist/src/plugin.d.ts.map +1 -0
- package/dist/src/plugin.js +3407 -0
- package/dist/src/plugin.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { ANSI, isTTY, parseKey } from './ansi';
|
|
2
|
+
const ESCAPE_TIMEOUT_MS = 50;
|
|
3
|
+
const ANSI_REGEX = new RegExp("\\x1b\\[[0-9;]*m", "g");
|
|
4
|
+
const ANSI_LEADING_REGEX = new RegExp("^\\x1b\\[[0-9;]*m");
|
|
5
|
+
function stripAnsi(input) {
|
|
6
|
+
return input.replace(ANSI_REGEX, '');
|
|
7
|
+
}
|
|
8
|
+
function truncateAnsi(input, maxVisibleChars) {
|
|
9
|
+
if (maxVisibleChars <= 0)
|
|
10
|
+
return '';
|
|
11
|
+
const visible = stripAnsi(input);
|
|
12
|
+
if (visible.length <= maxVisibleChars)
|
|
13
|
+
return input;
|
|
14
|
+
const suffix = maxVisibleChars >= 3 ? '...' : '.'.repeat(maxVisibleChars);
|
|
15
|
+
const keep = Math.max(0, maxVisibleChars - suffix.length);
|
|
16
|
+
let out = '';
|
|
17
|
+
let i = 0;
|
|
18
|
+
let kept = 0;
|
|
19
|
+
while (i < input.length && kept < keep) {
|
|
20
|
+
// Preserve ANSI sequences without counting them.
|
|
21
|
+
if (input[i] === '\x1b') {
|
|
22
|
+
const m = input.slice(i).match(ANSI_LEADING_REGEX);
|
|
23
|
+
if (m) {
|
|
24
|
+
out += m[0];
|
|
25
|
+
i += m[0].length;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
out += input[i];
|
|
30
|
+
i += 1;
|
|
31
|
+
kept += 1;
|
|
32
|
+
}
|
|
33
|
+
if (out.includes('\x1b[')) {
|
|
34
|
+
return `${out}${ANSI.reset}${suffix}`;
|
|
35
|
+
}
|
|
36
|
+
return out + suffix;
|
|
37
|
+
}
|
|
38
|
+
function getColorCode(color) {
|
|
39
|
+
switch (color) {
|
|
40
|
+
case 'red': return ANSI.red;
|
|
41
|
+
case 'green': return ANSI.green;
|
|
42
|
+
case 'yellow': return ANSI.yellow;
|
|
43
|
+
case 'cyan': return ANSI.cyan;
|
|
44
|
+
default: return '';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function select(items, options) {
|
|
48
|
+
if (!isTTY()) {
|
|
49
|
+
throw new Error('Interactive select requires a TTY terminal');
|
|
50
|
+
}
|
|
51
|
+
if (items.length === 0) {
|
|
52
|
+
throw new Error('No menu items provided');
|
|
53
|
+
}
|
|
54
|
+
const isSelectable = (i) => !i.disabled && !i.separator && i.kind !== 'heading';
|
|
55
|
+
const enabledItems = items.filter(isSelectable);
|
|
56
|
+
if (enabledItems.length === 0) {
|
|
57
|
+
throw new Error('All items disabled');
|
|
58
|
+
}
|
|
59
|
+
if (enabledItems.length === 1) {
|
|
60
|
+
return enabledItems[0].value;
|
|
61
|
+
}
|
|
62
|
+
const { message, subtitle } = options;
|
|
63
|
+
const { stdin, stdout } = process;
|
|
64
|
+
let cursor = items.findIndex(isSelectable);
|
|
65
|
+
if (cursor === -1)
|
|
66
|
+
cursor = 0; // Fallback, though validation above should prevent this
|
|
67
|
+
let escapeTimeout = null;
|
|
68
|
+
let isCleanedUp = false;
|
|
69
|
+
let renderedLines = 0;
|
|
70
|
+
const render = () => {
|
|
71
|
+
const columns = stdout.columns ?? 80;
|
|
72
|
+
const rows = stdout.rows ?? 24;
|
|
73
|
+
const shouldClearScreen = options.clearScreen === true;
|
|
74
|
+
const previousRenderedLines = renderedLines;
|
|
75
|
+
if (shouldClearScreen) {
|
|
76
|
+
stdout.write(ANSI.clearScreen + ANSI.moveTo(1, 1));
|
|
77
|
+
}
|
|
78
|
+
else if (previousRenderedLines > 0) {
|
|
79
|
+
stdout.write(ANSI.up(previousRenderedLines));
|
|
80
|
+
}
|
|
81
|
+
let linesWritten = 0;
|
|
82
|
+
const writeLine = (line) => {
|
|
83
|
+
stdout.write(`${ANSI.clearLine}${line}\n`);
|
|
84
|
+
linesWritten += 1;
|
|
85
|
+
};
|
|
86
|
+
// Subtitle renders as 3 lines:
|
|
87
|
+
// 1) blank "│" spacer, 2) subtitle line, 3) blank line. Header is counted separately.
|
|
88
|
+
const subtitleLines = subtitle ? 3 : 0;
|
|
89
|
+
const fixedLines = 1 + subtitleLines + 2; // header + subtitle + (help + bottom)
|
|
90
|
+
// Keep a small safety margin so the final newline doesn't scroll the terminal.
|
|
91
|
+
const maxVisibleItems = Math.max(1, Math.min(items.length, rows - fixedLines - 1));
|
|
92
|
+
// If the menu is taller than the viewport, only render a window around the cursor.
|
|
93
|
+
// This prevents terminal scrollback spam (e.g. repeated headers when pressing arrows).
|
|
94
|
+
let windowStart = 0;
|
|
95
|
+
let windowEnd = items.length;
|
|
96
|
+
if (items.length > maxVisibleItems) {
|
|
97
|
+
windowStart = cursor - Math.floor(maxVisibleItems / 2);
|
|
98
|
+
windowStart = Math.max(0, Math.min(windowStart, items.length - maxVisibleItems));
|
|
99
|
+
windowEnd = windowStart + maxVisibleItems;
|
|
100
|
+
}
|
|
101
|
+
const visibleItems = items.slice(windowStart, windowEnd);
|
|
102
|
+
const headerMessage = truncateAnsi(message, Math.max(1, columns - 4));
|
|
103
|
+
writeLine(`${ANSI.dim}┌ ${ANSI.reset}${headerMessage}`);
|
|
104
|
+
if (subtitle) {
|
|
105
|
+
writeLine(`${ANSI.dim}│${ANSI.reset}`);
|
|
106
|
+
const sub = truncateAnsi(subtitle, Math.max(1, columns - 4));
|
|
107
|
+
writeLine(`${ANSI.cyan}◆${ANSI.reset} ${sub}`);
|
|
108
|
+
writeLine("");
|
|
109
|
+
}
|
|
110
|
+
for (let i = 0; i < visibleItems.length; i++) {
|
|
111
|
+
const itemIndex = windowStart + i;
|
|
112
|
+
const item = visibleItems[i];
|
|
113
|
+
if (!item)
|
|
114
|
+
continue;
|
|
115
|
+
if (item.separator) {
|
|
116
|
+
writeLine(`${ANSI.dim}│${ANSI.reset}`);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (item.kind === 'heading') {
|
|
120
|
+
const heading = truncateAnsi(`${ANSI.dim}${ANSI.bold}${item.label}${ANSI.reset}`, Math.max(1, columns - 6));
|
|
121
|
+
writeLine(`${ANSI.cyan}│${ANSI.reset} ${heading}`);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const isSelected = itemIndex === cursor;
|
|
125
|
+
const colorCode = getColorCode(item.color);
|
|
126
|
+
let labelText;
|
|
127
|
+
if (item.disabled) {
|
|
128
|
+
labelText = `${ANSI.dim}${item.label} (unavailable)${ANSI.reset}`;
|
|
129
|
+
}
|
|
130
|
+
else if (isSelected) {
|
|
131
|
+
labelText = colorCode ? `${colorCode}${item.label}${ANSI.reset}` : item.label;
|
|
132
|
+
if (item.hint)
|
|
133
|
+
labelText += ` ${ANSI.dim}${item.hint}${ANSI.reset}`;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
labelText = colorCode
|
|
137
|
+
? `${ANSI.dim}${colorCode}${item.label}${ANSI.reset}`
|
|
138
|
+
: `${ANSI.dim}${item.label}${ANSI.reset}`;
|
|
139
|
+
if (item.hint)
|
|
140
|
+
labelText += ` ${ANSI.dim}${item.hint}${ANSI.reset}`;
|
|
141
|
+
}
|
|
142
|
+
// Prevent wrapping: cursor positioning relies on a fixed line count.
|
|
143
|
+
labelText = truncateAnsi(labelText, Math.max(1, columns - 8));
|
|
144
|
+
if (isSelected) {
|
|
145
|
+
writeLine(`${ANSI.cyan}│${ANSI.reset} ${ANSI.green}●${ANSI.reset} ${labelText}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
writeLine(`${ANSI.cyan}│${ANSI.reset} ${ANSI.dim}○${ANSI.reset} ${labelText}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const windowHint = items.length > visibleItems.length
|
|
152
|
+
? ` (${windowStart + 1}-${windowEnd}/${items.length})`
|
|
153
|
+
: '';
|
|
154
|
+
const helpText = options.help ?? `Up/Down to select | Enter: confirm | Esc: back${windowHint}`;
|
|
155
|
+
const help = truncateAnsi(helpText, Math.max(1, columns - 6));
|
|
156
|
+
writeLine(`${ANSI.cyan}│${ANSI.reset} ${ANSI.dim}${help}${ANSI.reset}`);
|
|
157
|
+
writeLine(`${ANSI.cyan}└${ANSI.reset}`);
|
|
158
|
+
if (!shouldClearScreen && previousRenderedLines > linesWritten) {
|
|
159
|
+
const extra = previousRenderedLines - linesWritten;
|
|
160
|
+
for (let i = 0; i < extra; i++) {
|
|
161
|
+
writeLine("");
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
renderedLines = linesWritten;
|
|
165
|
+
};
|
|
166
|
+
return new Promise((resolve) => {
|
|
167
|
+
const wasRaw = stdin.isRaw ?? false;
|
|
168
|
+
const cleanup = () => {
|
|
169
|
+
if (isCleanedUp)
|
|
170
|
+
return;
|
|
171
|
+
isCleanedUp = true;
|
|
172
|
+
if (escapeTimeout) {
|
|
173
|
+
clearTimeout(escapeTimeout);
|
|
174
|
+
escapeTimeout = null;
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
stdin.removeListener('data', onKey);
|
|
178
|
+
stdin.setRawMode(wasRaw);
|
|
179
|
+
stdin.pause();
|
|
180
|
+
stdout.write(ANSI.show);
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Intentionally ignored - cleanup is best-effort
|
|
184
|
+
}
|
|
185
|
+
process.removeListener('SIGINT', onSignal);
|
|
186
|
+
process.removeListener('SIGTERM', onSignal);
|
|
187
|
+
};
|
|
188
|
+
const onSignal = () => {
|
|
189
|
+
cleanup();
|
|
190
|
+
resolve(null);
|
|
191
|
+
};
|
|
192
|
+
const finishWithValue = (value) => {
|
|
193
|
+
cleanup();
|
|
194
|
+
resolve(value);
|
|
195
|
+
};
|
|
196
|
+
const findNextSelectable = (from, direction) => {
|
|
197
|
+
if (items.length === 0)
|
|
198
|
+
return from;
|
|
199
|
+
let next = from;
|
|
200
|
+
do {
|
|
201
|
+
next = (next + direction + items.length) % items.length;
|
|
202
|
+
} while (items[next]?.disabled || items[next]?.separator || items[next]?.kind === 'heading');
|
|
203
|
+
return next;
|
|
204
|
+
};
|
|
205
|
+
const onKey = (data) => {
|
|
206
|
+
if (escapeTimeout) {
|
|
207
|
+
clearTimeout(escapeTimeout);
|
|
208
|
+
escapeTimeout = null;
|
|
209
|
+
}
|
|
210
|
+
const action = parseKey(data);
|
|
211
|
+
switch (action) {
|
|
212
|
+
case 'up':
|
|
213
|
+
cursor = findNextSelectable(cursor, -1);
|
|
214
|
+
render();
|
|
215
|
+
return;
|
|
216
|
+
case 'down':
|
|
217
|
+
cursor = findNextSelectable(cursor, 1);
|
|
218
|
+
render();
|
|
219
|
+
return;
|
|
220
|
+
case 'enter':
|
|
221
|
+
finishWithValue(items[cursor]?.value ?? null);
|
|
222
|
+
return;
|
|
223
|
+
case 'escape':
|
|
224
|
+
finishWithValue(null);
|
|
225
|
+
return;
|
|
226
|
+
case 'escape-start':
|
|
227
|
+
// Bare escape byte - wait to see if more bytes coming (arrow key sequence)
|
|
228
|
+
escapeTimeout = setTimeout(() => {
|
|
229
|
+
finishWithValue(null);
|
|
230
|
+
}, ESCAPE_TIMEOUT_MS);
|
|
231
|
+
return;
|
|
232
|
+
default:
|
|
233
|
+
// Unknown key - ignore
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
process.once('SIGINT', onSignal);
|
|
238
|
+
process.once('SIGTERM', onSignal);
|
|
239
|
+
try {
|
|
240
|
+
stdin.setRawMode(true);
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// Failed to enable raw mode - cleanup and return null
|
|
244
|
+
cleanup();
|
|
245
|
+
resolve(null);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
stdin.resume();
|
|
249
|
+
stdout.write(ANSI.hide);
|
|
250
|
+
render();
|
|
251
|
+
stdin.on('data', onKey);
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/plugin/ui/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote Antigravity version fetcher.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Antigravity-Manager's version resolution strategy:
|
|
5
|
+
* 1. Auto-updater API (plain text with semver)
|
|
6
|
+
* 2. Changelog page scrape (first 5000 chars)
|
|
7
|
+
* 3. Hardcoded fallback in constants.ts
|
|
8
|
+
*
|
|
9
|
+
* Called once at plugin startup to ensure headers use the latest
|
|
10
|
+
* supported version, avoiding "version no longer supported" errors.
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/lbjlaq/Antigravity-Manager (src-tauri/src/constants.rs)
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Fetch the latest Antigravity version and update the global constant.
|
|
16
|
+
* Safe to call before logger is initialized (will silently skip logging).
|
|
17
|
+
*/
|
|
18
|
+
export declare function initAntigravityVersion(fallback: string): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/plugin/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoDH;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote Antigravity version fetcher.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the Antigravity-Manager's version resolution strategy:
|
|
5
|
+
* 1. Auto-updater API (plain text with semver)
|
|
6
|
+
* 2. Changelog page scrape (first 5000 chars)
|
|
7
|
+
* 3. Hardcoded fallback in constants.ts
|
|
8
|
+
*
|
|
9
|
+
* Called once at plugin startup to ensure headers use the latest
|
|
10
|
+
* supported version, avoiding "version no longer supported" errors.
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/lbjlaq/Antigravity-Manager (src-tauri/src/constants.rs)
|
|
13
|
+
*/
|
|
14
|
+
import { setAntigravityVersion } from "../constants";
|
|
15
|
+
import { createLogger } from "./logger";
|
|
16
|
+
const VERSION_URL = "https://antigravity-auto-updater-974169037036.us-central1.run.app";
|
|
17
|
+
const CHANGELOG_URL = "https://antigravity.google/changelog";
|
|
18
|
+
const FETCH_TIMEOUT_MS = 5000;
|
|
19
|
+
const CHANGELOG_SCAN_CHARS = 5000;
|
|
20
|
+
const VERSION_REGEX = /\d+\.\d+\.\d+/;
|
|
21
|
+
let versionFetchPromise = null;
|
|
22
|
+
function parseVersion(text) {
|
|
23
|
+
const match = text.match(VERSION_REGEX);
|
|
24
|
+
return match ? match[0] : null;
|
|
25
|
+
}
|
|
26
|
+
async function fetchVersionFromUrl(url, maxChars) {
|
|
27
|
+
const controller = new AbortController();
|
|
28
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
29
|
+
try {
|
|
30
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
31
|
+
if (!response.ok)
|
|
32
|
+
return null;
|
|
33
|
+
let text = await response.text();
|
|
34
|
+
if (maxChars)
|
|
35
|
+
text = text.slice(0, maxChars);
|
|
36
|
+
return parseVersion(text);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
clearTimeout(timeout);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function tryFetchVersion() {
|
|
46
|
+
if (versionFetchPromise) {
|
|
47
|
+
return versionFetchPromise;
|
|
48
|
+
}
|
|
49
|
+
versionFetchPromise = (async () => {
|
|
50
|
+
const apiVersion = await fetchVersionFromUrl(VERSION_URL);
|
|
51
|
+
if (apiVersion) {
|
|
52
|
+
return apiVersion;
|
|
53
|
+
}
|
|
54
|
+
return fetchVersionFromUrl(CHANGELOG_URL, CHANGELOG_SCAN_CHARS);
|
|
55
|
+
})();
|
|
56
|
+
return versionFetchPromise;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fetch the latest Antigravity version and update the global constant.
|
|
60
|
+
* Safe to call before logger is initialized (will silently skip logging).
|
|
61
|
+
*/
|
|
62
|
+
export async function initAntigravityVersion(fallback) {
|
|
63
|
+
const log = createLogger("version");
|
|
64
|
+
const fetched = await tryFetchVersion();
|
|
65
|
+
const resolved = fetched ?? fallback;
|
|
66
|
+
setAntigravityVersion(resolved);
|
|
67
|
+
const source = fetched ? "api" : "fallback";
|
|
68
|
+
log.info("version-initialized", {
|
|
69
|
+
source,
|
|
70
|
+
version: resolved,
|
|
71
|
+
fallback,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/plugin/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,WAAW,GAAG,mEAAmE,CAAC;AACxF,MAAM,aAAa,GAAG,sCAAsC,CAAC;AAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,aAAa,GAAG,eAAe,CAAC;AAItC,IAAI,mBAAmB,GAAkC,IAAI,CAAC;AAE9D,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,QAAiB;IAC/D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,mBAAmB,GAAG,CAAC,KAAK,IAAI,EAAE;QAChC,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,mBAAmB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAClE,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IAC3D,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,IAAI,QAAQ,CAAC;IACrC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAkB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IAC3D,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE;QAC9B,MAAM;QACN,OAAO,EAAE,QAAQ;QACjB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type HeaderStyle } from "./constants";
|
|
2
|
+
import { type ModelFamily } from "./plugin/accounts";
|
|
3
|
+
import { type AntigravityConfig } from "./plugin/config";
|
|
4
|
+
import type { PluginClient, PluginContext, PluginResult } from "./plugin/types";
|
|
5
|
+
declare function runAutoCompactCommand(client: PluginClient, sessionId: string, directory: string, timeoutMs?: number): Promise<void>;
|
|
6
|
+
declare function createContextOverflowSyntheticResponse(input: {
|
|
7
|
+
client: PluginClient;
|
|
8
|
+
directory: string;
|
|
9
|
+
sessionId?: string;
|
|
10
|
+
requestedModel?: string;
|
|
11
|
+
effectiveModel?: string;
|
|
12
|
+
}): Promise<Response>;
|
|
13
|
+
/**
|
|
14
|
+
* Creates an Antigravity OAuth plugin for a specific provider ID.
|
|
15
|
+
*/
|
|
16
|
+
export declare const createAntigravityPlugin: (providerId: string) => ({ client, directory }: PluginContext) => Promise<PluginResult>;
|
|
17
|
+
export declare const AntigravityCLIOAuthPlugin: ({ client, directory }: PluginContext) => Promise<PluginResult>;
|
|
18
|
+
export declare const GoogleOAuthPlugin: ({ client, directory }: PluginContext) => Promise<PluginResult>;
|
|
19
|
+
declare function resolveQuotaFallbackHeaderStyle(input: {
|
|
20
|
+
family: ModelFamily;
|
|
21
|
+
headerStyle: HeaderStyle;
|
|
22
|
+
alternateStyle: HeaderStyle | null;
|
|
23
|
+
}): HeaderStyle | null;
|
|
24
|
+
type HeaderRoutingDecision = {
|
|
25
|
+
cliFirst: boolean;
|
|
26
|
+
preferredHeaderStyle: HeaderStyle;
|
|
27
|
+
explicitQuota: boolean;
|
|
28
|
+
allowQuotaFallback: boolean;
|
|
29
|
+
};
|
|
30
|
+
declare function resolveHeaderRoutingDecision(urlString: string, family: ModelFamily, config: AntigravityConfig): HeaderRoutingDecision;
|
|
31
|
+
declare function getHeaderStyleFromUrl(urlString: string, family: ModelFamily, cliFirst?: boolean): HeaderStyle;
|
|
32
|
+
export declare const __testExports: {
|
|
33
|
+
getHeaderStyleFromUrl: typeof getHeaderStyleFromUrl;
|
|
34
|
+
resolveHeaderRoutingDecision: typeof resolveHeaderRoutingDecision;
|
|
35
|
+
resolveQuotaFallbackHeaderStyle: typeof resolveQuotaFallbackHeaderStyle;
|
|
36
|
+
runAutoCompactCommand: typeof runAutoCompactCommand;
|
|
37
|
+
createContextOverflowSyntheticResponse: typeof createContextOverflowSyntheticResponse;
|
|
38
|
+
};
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EASL,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAC;AAqDrB,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAyBzB,OAAO,KAAK,EAGV,YAAY,EACZ,aAAa,EACb,YAAY,EAGb,MAAM,gBAAgB,CAAC;AAoExB,iBAAe,qBAAqB,CAClC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAgC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,iBAAe,sCAAsC,CAAC,KAAK,EAAE;IAC3D,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6BpB;AAmtCD;;GAEG;AACH,eAAO,MAAM,uBAAuB,GACjC,YAAY,MAAM,MACZ,uBAAuB,aAAa,KAAG,OAAO,CAAC,YAAY,CA6yGjE,CAAC;AAEJ,eAAO,MAAM,yBAAyB,0BA/yGN,aAAa,KAAG,OAAO,CAAC,YAAY,CAizGnE,CAAC;AACF,eAAO,MAAM,iBAAiB,0BAlzGE,aAAa,KAAG,OAAO,CAAC,YAAY,CAkzGV,CAAC;AAoD3D,iBAAS,+BAA+B,CAAC,KAAK,EAAE;IAC9C,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC,GAAG,WAAW,GAAG,IAAI,CAQrB;AAED,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,WAAW,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,iBAAS,4BAA4B,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,iBAAiB,GACxB,qBAAqB,CAcvB;AAQD,iBAAS,qBAAqB,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,OAAe,GACxB,WAAW,CAYb;AAWD,eAAO,MAAM,aAAa;;;;;;CAMzB,CAAC"}
|