agyx 0.1.0 → 0.1.2

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/README.md CHANGED
@@ -43,13 +43,20 @@ prevents duplicate requests.
43
43
  Save the account currently stored by `agy`:
44
44
 
45
45
  ```bash
46
- agyx save personal --email you@example.com
46
+ agyx save
47
+ agyx save personal
47
48
  ```
48
49
 
50
+ When the name is omitted, `agyx save` reads the active Google account from
51
+ `~/.gemini/google_accounts.json` and derives a profile name from the email
52
+ local-part. Use `--email EMAIL` only when you want to override the detected
53
+ metadata.
54
+
49
55
  Add another account:
50
56
 
51
57
  ```bash
52
58
  agyx login work
59
+ agyx login
53
60
  ```
54
61
 
55
62
  `agyx login` performs this transaction:
@@ -60,6 +67,9 @@ agyx login work
60
67
  4. Save and activate the new credential.
61
68
  5. Restart every supervised session in its original terminal.
62
69
 
70
+ When the name is omitted, `agyx login` derives it from the OAuth email detected
71
+ in the `agy` log, falling back to `~/.gemini/google_accounts.json`.
72
+
63
73
  Use `--no-resume` to leave sessions paused after login.
64
74
 
65
75
  ## Switching
@@ -67,10 +77,24 @@ Use `--no-resume` to leave sessions paused after login.
67
77
  ```bash
68
78
  agyx list
69
79
  agyx use work
80
+ agyx use
70
81
  agyx next
71
82
  agyx status
72
83
  ```
73
84
 
85
+ `agyx use` without a profile opens an interactive picker. The picker and
86
+ `agyx list` show profile metadata:
87
+
88
+ - `status`: `ready`, `quota`, `disabled`, or `unknown`
89
+ - `reset`: relative quota reset time when it can be inferred from logs
90
+ - `last-used`: when the profile was last activated through agyx
91
+ - `picks`: how many times agyx selected the profile
92
+
93
+ `agyx next` uses name-sorted round-robin order, starting after the currently
94
+ active profile. It skips profiles marked `disabled` or currently quota
95
+ exhausted. If a quota reset time has passed, the profile becomes selectable
96
+ again.
97
+
74
98
  Each supervisor preserves its working directory and original arguments. It also
75
99
  extracts the active conversation UUID from the session log and uses
76
100
  `agy --conversation <UUID>` when restarting.
@@ -78,6 +102,18 @@ extracts the active conversation UUID from the session log and uses
78
102
  Conversation names are supported by `agy` through `/rename` and `/resume`, but
79
103
  `agyx` tracks UUIDs because names can be changed or duplicated.
80
104
 
105
+ ## Quota detection
106
+
107
+ `agyx` passively scans supervised `agy` session logs for common quota/rate-limit
108
+ signals such as `RESOURCE_EXHAUSTED`, HTTP `429`, and `Individual quota
109
+ reached`. When a reset hint such as `Resets in 73h16m27s` is present, agyx stores
110
+ the inferred reset time in profile metadata.
111
+
112
+ This release records quota state and makes `agyx next` avoid exhausted profiles.
113
+ It does not yet perform an automatic global account switch from inside a running
114
+ session; use `agyx next` after a quota message so the switch still happens
115
+ through the normal pause/switch/resume transaction.
116
+
81
117
  ## Security
82
118
 
83
119
  - Credentials remain in macOS Keychain.
package/dist/src/cli.js CHANGED
@@ -1,19 +1,22 @@
1
1
  #!/usr/bin/env node
2
+ import { createInterface } from "node:readline/promises";
2
3
  import { activateProfile, loginProfile, pauseAll, resumeAll, saveCurrent, sessionRecords, switchProfile, } from "./coordinator.js";
3
4
  import { installShellIntegration, shellInit } from "./install.js";
4
5
  import { keychain } from "./keychain.js";
5
6
  import { findRealAgy } from "./processes.js";
6
7
  import { loadState, saveState, validateProfileName } from "./config.js";
8
+ import { effectiveProfileStatus, selectNextProfile } from "./selection.js";
7
9
  import { supervise } from "./session.js";
8
10
  const help = `agyx — multi-account session supervisor for Antigravity CLI
9
11
 
10
12
  Usage:
11
13
  agyx install Install transparent agy shell shim
12
14
  agyx session -- [agy options] Run agy under a restartable supervisor
13
- agyx save <name> [--email EMAIL] Save the current Keychain account
14
- agyx login <name> [--no-resume] Pause all sessions and add an account
15
- agyx use <name> Switch account and resume every session
16
- agyx next Rotate to the next saved account
15
+ agyx save [name] [--email EMAIL] Save the current Keychain account
16
+ agyx login [name] [--email EMAIL] [--no-resume]
17
+ Pause all sessions and add an account
18
+ agyx use [name] Switch account and resume every session
19
+ agyx next Rotate to the next selectable account
17
20
  agyx list List profiles
18
21
  agyx current Print the active profile
19
22
  agyx status List supervised terminal sessions
@@ -32,6 +35,105 @@ function takeOption(args, name) {
32
35
  throw new Error(`${name} requires a value`);
33
36
  return args.splice(index, 2)[1];
34
37
  }
38
+ function takeFlag(args, name) {
39
+ const index = args.indexOf(name);
40
+ if (index < 0)
41
+ return false;
42
+ args.splice(index, 1);
43
+ return true;
44
+ }
45
+ function takeOptionalName(args, usage) {
46
+ if (args.length > 1)
47
+ throw new Error(`Usage: ${usage}`);
48
+ return args.shift();
49
+ }
50
+ function relativeTime(value, now = new Date()) {
51
+ if (!value)
52
+ return "-";
53
+ const timestamp = Date.parse(value);
54
+ if (Number.isNaN(timestamp))
55
+ return "-";
56
+ const delta = timestamp - now.getTime();
57
+ const absolute = Math.abs(delta);
58
+ const units = [
59
+ [24 * 60 * 60 * 1000, "d"],
60
+ [60 * 60 * 1000, "h"],
61
+ [60 * 1000, "m"],
62
+ [1000, "s"],
63
+ ];
64
+ const [unitMs, suffix] = units.find(([ms]) => absolute >= ms) ?? units.at(-1);
65
+ const amount = Math.max(1, Math.round(absolute / unitMs));
66
+ return delta >= 0 ? `in ${amount}${suffix}` : `${amount}${suffix} ago`;
67
+ }
68
+ function profileStatusText(profile, now = new Date()) {
69
+ const status = effectiveProfileStatus(profile, now);
70
+ if (status === "disabled")
71
+ return "disabled";
72
+ if (status === "exhausted")
73
+ return "quota";
74
+ return profile.quotaStatus === "available" ? "ready" : "unknown";
75
+ }
76
+ function profileRow(index, profile, activeProfile, now = new Date()) {
77
+ const marker = profile.name === activeProfile ? "*" : " ";
78
+ const number = String(index + 1).padStart(2);
79
+ const name = profile.name.padEnd(18);
80
+ const email = (profile.email ?? "-").padEnd(28);
81
+ const status = profileStatusText(profile, now).padEnd(8);
82
+ const reset = relativeTime(profile.quotaResetAt, now).padEnd(8);
83
+ const lastUsed = relativeTime(profile.lastActivatedAt, now).padEnd(9);
84
+ const picks = String(profile.selectionCount ?? 0).padStart(5);
85
+ return `${marker} ${number} ${name} ${email} ${status} ${reset} ${lastUsed} ${picks}`;
86
+ }
87
+ function printProfiles(profiles, activeProfile) {
88
+ if (!profiles.length) {
89
+ console.log("No saved profiles.");
90
+ return;
91
+ }
92
+ const now = new Date();
93
+ console.log(" # name email status reset last-used picks");
94
+ for (const [index, profile] of profiles.entries()) {
95
+ console.log(profileRow(index, profile, activeProfile, now));
96
+ }
97
+ }
98
+ async function pickProfile() {
99
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
100
+ throw new Error("Usage: agyx use <name> or run 'agyx use' in an interactive terminal.");
101
+ }
102
+ const state = await loadState();
103
+ if (!state.profiles.length)
104
+ throw new Error("No saved profiles.");
105
+ printProfiles(state.profiles, state.activeProfile);
106
+ const suggested = (() => {
107
+ try {
108
+ return selectNextProfile(state).name;
109
+ }
110
+ catch {
111
+ return undefined;
112
+ }
113
+ })();
114
+ const prompt = suggested
115
+ ? `Select profile number/name [next: ${suggested}]: `
116
+ : "Select profile number/name: ";
117
+ const interface_ = createInterface({ input: process.stdin, output: process.stdout });
118
+ try {
119
+ const answer = (await interface_.question(prompt)).trim();
120
+ if (!answer && suggested)
121
+ return suggested;
122
+ if (!answer)
123
+ throw new Error("No profile selected.");
124
+ const index = Number(answer);
125
+ if (Number.isInteger(index) && index >= 1 && index <= state.profiles.length) {
126
+ return state.profiles[index - 1].name;
127
+ }
128
+ const profile = state.profiles.find(({ name }) => name === answer);
129
+ if (!profile)
130
+ throw new Error(`Profile not found: ${answer}`);
131
+ return profile.name;
132
+ }
133
+ finally {
134
+ interface_.close();
135
+ }
136
+ }
35
137
  async function main() {
36
138
  const args = process.argv.slice(2);
37
139
  const command = args.shift();
@@ -54,56 +156,39 @@ async function main() {
54
156
  args.shift();
55
157
  return await supervise(args);
56
158
  case "save": {
57
- const name = args.shift();
58
- if (!name)
59
- throw new Error("Usage: agyx save <name> [--email EMAIL]");
60
159
  const email = takeOption(args, "--email");
61
- if (args.length)
62
- throw new Error(`Unknown arguments: ${args.join(" ")}`);
63
- await saveCurrent(name, email);
64
- console.log(`Saved and activated profile '${name}'.`);
160
+ const name = takeOptionalName(args, "agyx save [name] [--email EMAIL]");
161
+ const result = await saveCurrent(name, email);
162
+ console.log(`Saved and activated profile '${result.name}'.`
163
+ + (result.email ? ` (${result.email})` : ""));
65
164
  return 0;
66
165
  }
67
166
  case "login": {
68
- const name = args.shift();
69
- if (!name)
70
- throw new Error("Usage: agyx login <name> [--email EMAIL] [--no-resume]");
71
167
  const email = takeOption(args, "--email");
72
- const noResume = args.includes("--no-resume");
73
- args.splice(args.indexOf("--no-resume"), noResume ? 1 : 0);
74
- if (args.length)
75
- throw new Error(`Unknown arguments: ${args.join(" ")}`);
168
+ const noResume = takeFlag(args, "--no-resume");
169
+ const name = takeOptionalName(args, "agyx login [name] [--email EMAIL] [--no-resume]");
76
170
  await loginProfile(name, email, !noResume);
77
171
  return 0;
78
172
  }
79
173
  case "use": {
80
174
  const name = args.shift();
81
- if (!name || args.length)
82
- throw new Error("Usage: agyx use <name>");
83
- await switchProfile(name);
84
- console.log(`Activated profile '${name}' and resumed all sessions.`);
175
+ if (args.length)
176
+ throw new Error("Usage: agyx use [name]");
177
+ const selected = name ?? await pickProfile();
178
+ await switchProfile(selected);
179
+ console.log(`Activated profile '${selected}' and resumed all sessions.`);
85
180
  return 0;
86
181
  }
87
182
  case "next": {
88
183
  const state = await loadState();
89
- if (!state.profiles.length)
90
- throw new Error("No saved profiles.");
91
- const index = state.activeProfile
92
- ? state.profiles.findIndex(({ name }) => name === state.activeProfile)
93
- : -1;
94
- const name = state.profiles[(index + 1) % state.profiles.length].name;
184
+ const name = selectNextProfile(state).name;
95
185
  await switchProfile(name);
96
186
  console.log(`Activated profile '${name}' and resumed all sessions.`);
97
187
  return 0;
98
188
  }
99
189
  case "list": {
100
190
  const state = await loadState();
101
- if (!state.profiles.length)
102
- console.log("No saved profiles.");
103
- for (const profile of state.profiles) {
104
- console.log(`${profile.name === state.activeProfile ? "*" : " "} ${profile.name}`
105
- + (profile.email ? ` ${profile.email}` : ""));
106
- }
191
+ printProfiles(state.profiles, state.activeProfile);
107
192
  return 0;
108
193
  }
109
194
  case "current":
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,16 @@ export interface ProfileRecord {
3
3
  email?: string;
4
4
  createdAt: string;
5
5
  updatedAt: string;
6
+ authenticatedAt?: string;
7
+ lastActivatedAt?: string;
8
+ lastSuccessfulRequestAt?: string;
9
+ lastQuotaErrorAt?: string;
10
+ quotaResetAt?: string;
11
+ quotaStatus?: "unknown" | "available" | "exhausted";
12
+ lastQuotaReason?: string;
13
+ selectionCount?: number;
14
+ disabled?: boolean;
15
+ priority?: number;
6
16
  }
7
17
  export interface State {
8
18
  version: 1;
@@ -14,10 +24,23 @@ export declare const configDir: string;
14
24
  export declare const runtimeDir: string;
15
25
  export declare const logDir: string;
16
26
  export declare const statePath: string;
27
+ export declare const googleAccountsPath: string;
17
28
  export declare function ensureDirectories(): Promise<void>;
18
29
  export declare function loadState(): Promise<State>;
19
30
  export declare function saveState(state: State): Promise<void>;
20
31
  export declare function upsertProfile(name: string, email: string | undefined, makeActive: boolean): Promise<void>;
32
+ export declare function markProfileActivated(state: State, name: string, now?: Date): void;
33
+ export declare function markProfileQuotaExhausted(state: State, name: string, event: {
34
+ reason: string;
35
+ resetAt?: string;
36
+ }, now?: Date): void;
37
+ export declare function recordProfileQuotaExhausted(name: string, event: {
38
+ reason: string;
39
+ resetAt?: string;
40
+ }): Promise<void>;
21
41
  export declare function cleanupRuntimeFile(path: string): Promise<void>;
22
42
  export declare function validateProfileName(name: string): string;
43
+ export declare function profileNameFromEmail(email: string): string;
44
+ export declare function uniqueProfileName(baseName: string, state: State): string;
45
+ export declare function readActiveGoogleAccountEmail(): Promise<string | undefined>;
23
46
  export declare function ensureParent(path: string): Promise<void>;
@@ -6,6 +6,7 @@ export const configDir = process.env.AGYX_CONFIG_DIR
6
6
  export const runtimeDir = join(configDir, "run");
7
7
  export const logDir = join(configDir, "logs");
8
8
  export const statePath = join(configDir, "state.json");
9
+ export const googleAccountsPath = join(homedir(), ".gemini", "google_accounts.json");
9
10
  export async function ensureDirectories() {
10
11
  for (const directory of [configDir, runtimeDir, logDir]) {
11
12
  await mkdir(directory, { recursive: true, mode: 0o700 });
@@ -32,18 +33,66 @@ export async function saveState(state) {
32
33
  }
33
34
  export async function upsertProfile(name, email, makeActive) {
34
35
  const state = await loadState();
35
- const now = new Date().toISOString();
36
+ const now = new Date();
37
+ const nowString = now.toISOString();
36
38
  const existing = state.profiles.find((profile) => profile.name === name);
37
39
  if (existing) {
38
40
  existing.email = email ?? existing.email;
39
- existing.updatedAt = now;
41
+ existing.authenticatedAt = nowString;
42
+ existing.updatedAt = nowString;
43
+ if (existing.quotaStatus === "exhausted") {
44
+ existing.quotaStatus = "available";
45
+ existing.quotaResetAt = undefined;
46
+ existing.lastQuotaReason = undefined;
47
+ }
40
48
  }
41
49
  else {
42
- state.profiles.push({ name, email, createdAt: now, updatedAt: now });
50
+ state.profiles.push({
51
+ name,
52
+ email,
53
+ createdAt: nowString,
54
+ updatedAt: nowString,
55
+ authenticatedAt: nowString,
56
+ quotaStatus: "available",
57
+ selectionCount: 0,
58
+ });
43
59
  }
44
60
  state.profiles.sort((left, right) => left.name.localeCompare(right.name));
45
61
  if (makeActive)
46
- state.activeProfile = name;
62
+ markProfileActivated(state, name, now);
63
+ await saveState(state);
64
+ }
65
+ export function markProfileActivated(state, name, now = new Date()) {
66
+ const profile = state.profiles.find((entry) => entry.name === name);
67
+ if (!profile)
68
+ throw new Error(`Profile not found: ${name}`);
69
+ const nowString = now.toISOString();
70
+ state.activeProfile = name;
71
+ profile.lastActivatedAt = nowString;
72
+ profile.updatedAt = nowString;
73
+ profile.selectionCount = (profile.selectionCount ?? 0) + 1;
74
+ if (profile.quotaStatus === "exhausted"
75
+ && profile.quotaResetAt
76
+ && Date.parse(profile.quotaResetAt) <= now.getTime()) {
77
+ profile.quotaStatus = "available";
78
+ profile.quotaResetAt = undefined;
79
+ profile.lastQuotaReason = undefined;
80
+ }
81
+ }
82
+ export function markProfileQuotaExhausted(state, name, event, now = new Date()) {
83
+ const profile = state.profiles.find((entry) => entry.name === name);
84
+ if (!profile)
85
+ return;
86
+ const nowString = now.toISOString();
87
+ profile.quotaStatus = "exhausted";
88
+ profile.lastQuotaErrorAt = nowString;
89
+ profile.lastQuotaReason = event.reason;
90
+ profile.quotaResetAt = event.resetAt;
91
+ profile.updatedAt = nowString;
92
+ }
93
+ export async function recordProfileQuotaExhausted(name, event) {
94
+ const state = await loadState();
95
+ markProfileQuotaExhausted(state, name, event);
47
96
  await saveState(state);
48
97
  }
49
98
  export async function cleanupRuntimeFile(path) {
@@ -55,6 +104,40 @@ export function validateProfileName(name) {
55
104
  }
56
105
  return name;
57
106
  }
107
+ export function profileNameFromEmail(email) {
108
+ const localPart = email.split("@")[0] ?? "";
109
+ const normalized = localPart
110
+ .toLowerCase()
111
+ .replace(/[^a-z0-9._-]+/g, "-")
112
+ .replace(/^[._-]+|[._-]+$/g, "")
113
+ .replace(/[._-]{2,}/g, "-");
114
+ return validateProfileName(normalized || "account");
115
+ }
116
+ export function uniqueProfileName(baseName, state) {
117
+ const base = validateProfileName(baseName);
118
+ const names = new Set(state.profiles.map((profile) => profile.name));
119
+ if (!names.has(base))
120
+ return base;
121
+ for (let suffix = 2; suffix < 10000; suffix += 1) {
122
+ const candidate = `${base}-${suffix}`;
123
+ if (!names.has(candidate))
124
+ return candidate;
125
+ }
126
+ throw new Error(`Could not find an unused profile name for '${base}'.`);
127
+ }
128
+ export async function readActiveGoogleAccountEmail() {
129
+ try {
130
+ const accounts = JSON.parse(await readFile(googleAccountsPath, "utf8"));
131
+ return typeof accounts.active === "string" && accounts.active.includes("@")
132
+ ? accounts.active
133
+ : undefined;
134
+ }
135
+ catch (error) {
136
+ if (error.code === "ENOENT")
137
+ return undefined;
138
+ return undefined;
139
+ }
140
+ }
58
141
  export async function ensureParent(path) {
59
142
  await mkdir(dirname(path), { recursive: true, mode: 0o700 });
60
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgB1C,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe;OAC/C,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,KAAK,MAAM,SAAS,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAU,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACtC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAY;IAC1C,MAAM,iBAAiB,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACpD,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnF,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,KAAyB,EACzB,UAAmB;IAEnB,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzE,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,GAAG,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QACzC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,IAAI,UAAU;QAAE,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3C,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY;IACnD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,2CAA2C,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAY;IAC7C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,12 @@ import { SessionRecord } from "./session.js";
2
2
  export declare function sessionRecords(): Promise<SessionRecord[]>;
3
3
  export declare function pauseAll(): Promise<SessionRecord[]>;
4
4
  export declare function resumeAll(records: SessionRecord[]): Promise<void>;
5
- export declare function saveCurrent(nameInput: string, email?: string): Promise<void>;
5
+ export interface ProfileCaptureResult {
6
+ name: string;
7
+ email?: string;
8
+ }
9
+ export declare function saveCurrent(nameInput?: string, explicitEmail?: string): Promise<ProfileCaptureResult>;
6
10
  export declare function activateProfile(nameInput: string): Promise<void>;
7
11
  export declare function switchProfile(name: string): Promise<void>;
8
12
  export declare function detectEmail(content: string): string | undefined;
9
- export declare function loginProfile(nameInput: string, explicitEmail?: string, resume?: boolean): Promise<void>;
13
+ export declare function loginProfile(nameInput?: string, explicitEmail?: string, resume?: boolean): Promise<ProfileCaptureResult>;
@@ -2,7 +2,7 @@ import { spawn } from "node:child_process";
2
2
  import { readdir, readFile, rm } from "node:fs/promises";
3
3
  import { connect } from "node:net";
4
4
  import { join } from "node:path";
5
- import { ensureDirectories, loadState, logDir, runtimeDir, saveState, upsertProfile, validateProfileName, } from "./config.js";
5
+ import { ensureDirectories, loadState, logDir, markProfileActivated, profileNameFromEmail, readActiveGoogleAccountEmail, runtimeDir, saveState, upsertProfile, uniqueProfileName, validateProfileName, } from "./config.js";
6
6
  import { keychain } from "./keychain.js";
7
7
  import { findRealAgy, runningAgy, stopProcesses, } from "./processes.js";
8
8
  async function send(socketPath, command) {
@@ -67,11 +67,28 @@ export async function resumeAll(records) {
67
67
  }
68
68
  }
69
69
  }
70
- export async function saveCurrent(nameInput, email) {
71
- const name = validateProfileName(nameInput);
70
+ function resolveProfileName(state, nameInput, email, context) {
71
+ if (nameInput)
72
+ return validateProfileName(nameInput);
73
+ if (!email) {
74
+ throw new Error(context === "save"
75
+ ? "Usage: agyx save [name] [--email EMAIL]. Profile name could not be inferred because no active Google account email was found."
76
+ : "Usage: agyx login [name] [--email EMAIL] [--no-resume]. Profile name could not be inferred because login email was not detected.");
77
+ }
78
+ const existingByEmail = state.profiles.find((profile) => profile.email === email);
79
+ if (existingByEmail)
80
+ return existingByEmail.name;
81
+ return uniqueProfileName(profileNameFromEmail(email), state);
82
+ }
83
+ export async function saveCurrent(nameInput, explicitEmail) {
84
+ const state = await loadState();
85
+ const activeProfileEmail = state.profiles.find((profile) => profile.name === state.activeProfile)?.email;
86
+ const email = explicitEmail ?? await readActiveGoogleAccountEmail() ?? activeProfileEmail;
87
+ const name = resolveProfileName(state, nameInput, email, "save");
72
88
  const credential = await keychain.readActive();
73
89
  await keychain.writeProfile(name, credential);
74
90
  await upsertProfile(name, email, true);
91
+ return { name, email };
75
92
  }
76
93
  export async function activateProfile(nameInput) {
77
94
  const name = validateProfileName(nameInput);
@@ -81,7 +98,7 @@ export async function activateProfile(nameInput) {
81
98
  }
82
99
  const credential = await keychain.readProfile(name);
83
100
  await keychain.writeActive(credential);
84
- state.activeProfile = name;
101
+ markProfileActivated(state, name);
85
102
  await saveState(state);
86
103
  }
87
104
  export async function switchProfile(name) {
@@ -136,7 +153,6 @@ async function interactiveLogin(logPath) {
136
153
  });
137
154
  }
138
155
  export async function loginProfile(nameInput, explicitEmail, resume = true) {
139
- const name = validateProfileName(nameInput);
140
156
  const sessions = await pauseAll();
141
157
  const state = await loadState();
142
158
  const previousCredential = await keychain.readActive().catch(() => undefined);
@@ -151,9 +167,12 @@ export async function loginProfile(nameInput, explicitEmail, resume = true) {
151
167
  const credential = await keychain.readActive().catch(() => undefined);
152
168
  if (!credential)
153
169
  throw new Error("Login ended without creating an agy credential.");
170
+ const email = explicitEmail ?? detectedEmail ?? await readActiveGoogleAccountEmail();
171
+ const name = resolveProfileName(await loadState(), nameInput, email, "login");
154
172
  await keychain.writeProfile(name, credential);
155
- await upsertProfile(name, explicitEmail ?? detectedEmail, true);
173
+ await upsertProfile(name, email, true);
156
174
  console.log(`Captured and activated profile '${name}'.`);
175
+ return { name, email };
157
176
  }
158
177
  catch (error) {
159
178
  if (previousCredential)
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/coordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface QuotaEvent {
2
+ reason: string;
3
+ resetAt?: string;
4
+ }
5
+ export declare function parseQuotaEventLine(line: string, now?: Date): QuotaEvent | undefined;
@@ -0,0 +1,52 @@
1
+ function parseDurationMs(value) {
2
+ const pattern = /(\d+(?:\.\d+)?)\s*(d|day|days|h|hr|hrs|hour|hours|m|min|mins|minute|minutes|s|sec|secs|second|seconds)/gi;
3
+ let total = 0;
4
+ let matched = false;
5
+ for (const match of value.matchAll(pattern)) {
6
+ matched = true;
7
+ const amount = Number(match[1]);
8
+ const unit = match[2].toLowerCase();
9
+ if (unit.startsWith("d"))
10
+ total += amount * 24 * 60 * 60 * 1000;
11
+ else if (unit.startsWith("h"))
12
+ total += amount * 60 * 60 * 1000;
13
+ else if (unit.startsWith("m"))
14
+ total += amount * 60 * 1000;
15
+ else
16
+ total += amount * 1000;
17
+ }
18
+ return matched ? Math.round(total) : undefined;
19
+ }
20
+ function parseResetAt(line, now) {
21
+ const resetIn = line.match(/resets?\s+in\s+([0-9a-zA-Z.\s]+)/i)?.[1];
22
+ const resetMs = resetIn ? parseDurationMs(resetIn) : undefined;
23
+ if (resetMs !== undefined)
24
+ return new Date(now.getTime() + resetMs).toISOString();
25
+ const retryAfter = line.match(/retry-after["'\s:=]+(\d+)/i)?.[1];
26
+ if (retryAfter) {
27
+ return new Date(now.getTime() + Number(retryAfter) * 1000).toISOString();
28
+ }
29
+ return undefined;
30
+ }
31
+ export function parseQuotaEventLine(line, now = new Date()) {
32
+ const lower = line.toLowerCase();
33
+ const looksLikeQuota = lower.includes("resource_exhausted")
34
+ || lower.includes("individual quota reached")
35
+ || /\bcode\s*[:=]?\s*429\b/i.test(line)
36
+ || /\b429\b/.test(line) && /(quota|rate|limit|exhausted)/i.test(line)
37
+ || /(quota|rate limit).*(exceeded|exhausted|reached)/i.test(line);
38
+ if (!looksLikeQuota)
39
+ return undefined;
40
+ let reason = "quota exhausted";
41
+ if (lower.includes("individual quota reached"))
42
+ reason = "individual quota reached";
43
+ else if (lower.includes("resource_exhausted"))
44
+ reason = "RESOURCE_EXHAUSTED";
45
+ else if (/\b429\b/.test(line))
46
+ reason = "HTTP 429";
47
+ return {
48
+ reason,
49
+ resetAt: parseResetAt(line, now),
50
+ };
51
+ }
52
+ //# sourceMappingURL=quota.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quota.js","sourceRoot":"","sources":["../../src/quota.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { ProfileRecord, State } from "./config.js";
2
+ export type ProfileRuntimeStatus = "ready" | "exhausted" | "disabled";
3
+ export declare function effectiveProfileStatus(profile: ProfileRecord, now?: Date): ProfileRuntimeStatus;
4
+ export declare function isProfileSelectable(profile: ProfileRecord, now?: Date): boolean;
5
+ export declare function selectNextProfile(state: State, now?: Date): ProfileRecord;
@@ -0,0 +1,35 @@
1
+ export function effectiveProfileStatus(profile, now = new Date()) {
2
+ if (profile.disabled)
3
+ return "disabled";
4
+ if (profile.quotaStatus !== "exhausted")
5
+ return "ready";
6
+ if (!profile.quotaResetAt)
7
+ return "exhausted";
8
+ return Date.parse(profile.quotaResetAt) > now.getTime()
9
+ ? "exhausted"
10
+ : "ready";
11
+ }
12
+ export function isProfileSelectable(profile, now = new Date()) {
13
+ return effectiveProfileStatus(profile, now) === "ready";
14
+ }
15
+ export function selectNextProfile(state, now = new Date()) {
16
+ if (!state.profiles.length)
17
+ throw new Error("No saved profiles.");
18
+ const activeIndex = state.activeProfile
19
+ ? state.profiles.findIndex(({ name }) => name === state.activeProfile)
20
+ : -1;
21
+ for (let offset = 1; offset <= state.profiles.length; offset += 1) {
22
+ const profile = state.profiles[(activeIndex + offset + state.profiles.length)
23
+ % state.profiles.length];
24
+ if (isProfileSelectable(profile, now))
25
+ return profile;
26
+ }
27
+ const earliestReset = state.profiles
28
+ .filter((profile) => profile.quotaResetAt)
29
+ .sort((left, right) => Date.parse(left.quotaResetAt) - Date.parse(right.quotaResetAt))[0];
30
+ const resetText = earliestReset
31
+ ? ` Earliest reset: ${earliestReset.name} at ${earliestReset.quotaResetAt}.`
32
+ : "";
33
+ throw new Error(`No selectable profiles.${resetText}`);
34
+ }
35
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/selection.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,sBAAsB,CACpC,OAAsB,EACtB,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IACxC,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,WAAW,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE;QACrD,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAsB,EACtB,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,OAAO,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAY,EACZ,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa;QACrC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,aAAa,CAAC;QACtE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEP,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;cACzE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAE,CAAC;QAC5B,IAAI,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACxD,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ;SACjC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;SACzC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAa,CAAC,CACjE,CAAC,CAAC,CAAC,CAAC;IACP,MAAM,SAAS,GAAG,aAAa;QAC7B,CAAC,CAAC,oBAAoB,aAAa,CAAC,IAAI,OAAO,aAAa,CAAC,YAAY,GAAG;QAC5E,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -2,8 +2,9 @@ import { spawn } from "node:child_process";
2
2
  import { createServer } from "node:net";
3
3
  import { readFile, writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
- import { cleanupRuntimeFile, ensureDirectories, logDir, runtimeDir, } from "./config.js";
5
+ import { cleanupRuntimeFile, ensureDirectories, loadState, logDir, recordProfileQuotaExhausted, runtimeDir, } from "./config.js";
6
6
  import { findRealAgy, isRestartable, withConversation, } from "./processes.js";
7
+ import { parseQuotaEventLine } from "./quota.js";
7
8
  export function detectConversation(content) {
8
9
  const patterns = [
9
10
  /Created conversation ([0-9a-f-]{36})/gi,
@@ -42,6 +43,10 @@ export async function supervise(args) {
42
43
  let intentionalStop = false;
43
44
  let conversationId;
44
45
  let finalCode = 0;
46
+ let logOffset = 0;
47
+ let scanningQuota = false;
48
+ let profileAtStart;
49
+ let quotaInterval;
45
50
  const persist = async () => {
46
51
  const record = {
47
52
  id,
@@ -67,9 +72,40 @@ export async function supervise(args) {
67
72
  // The log may not exist until agy has initialized.
68
73
  }
69
74
  };
75
+ const scanQuotaEvents = async () => {
76
+ if (scanningQuota)
77
+ return;
78
+ scanningQuota = true;
79
+ try {
80
+ const profileName = profileAtStart;
81
+ if (!profileName)
82
+ return;
83
+ const content = await readFile(logPath, "utf8");
84
+ if (content.length < logOffset)
85
+ logOffset = 0;
86
+ const appended = content.slice(logOffset);
87
+ logOffset = content.length;
88
+ for (const line of appended.split(/\r?\n/)) {
89
+ const event = parseQuotaEventLine(line);
90
+ if (!event)
91
+ continue;
92
+ await recordProfileQuotaExhausted(profileName, event);
93
+ console.error(`agyx: marked profile '${profileName}' as quota exhausted`
94
+ + (event.resetAt ? ` until ${event.resetAt}` : "")
95
+ + ". Run 'agyx next' to switch.");
96
+ }
97
+ }
98
+ catch {
99
+ // The log or state file may not exist yet.
100
+ }
101
+ finally {
102
+ scanningQuota = false;
103
+ }
104
+ };
70
105
  const startChild = async () => {
71
106
  intentionalStop = false;
72
107
  paused = false;
108
+ profileAtStart = (await loadState()).activeProfile;
73
109
  const launchArgs = withConversation(args, conversationId);
74
110
  if (!launchArgs.some((argument) => argument === "--log-file" || argument.startsWith("--log-file="))) {
75
111
  launchArgs.push("--log-file", logPath);
@@ -87,6 +123,7 @@ export async function supervise(args) {
87
123
  child.on("exit", async (code, signal) => {
88
124
  finalCode = code ?? (signal ? 128 : 1);
89
125
  await refreshConversation();
126
+ await scanQuotaEvents();
90
127
  child = undefined;
91
128
  await persist();
92
129
  if (!intentionalStop && !paused) {
@@ -152,6 +189,8 @@ export async function supervise(args) {
152
189
  });
153
190
  });
154
191
  const shutdown = async () => {
192
+ if (quotaInterval)
193
+ clearInterval(quotaInterval);
155
194
  await cleanupRuntimeFile(socketPath);
156
195
  await cleanupRuntimeFile(recordPath);
157
196
  server.close();
@@ -172,6 +211,10 @@ export async function supervise(args) {
172
211
  process.exit(143);
173
212
  });
174
213
  await startChild();
214
+ quotaInterval = setInterval(() => {
215
+ void scanQuotaEvents();
216
+ }, 750);
217
+ quotaInterval.unref();
175
218
  return await new Promise(() => undefined);
176
219
  }
177
220
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
package/dist/src/shim.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agyx",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Multi-account session supervisor for Google Antigravity CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -13,7 +13,7 @@
13
13
  "LICENSE"
14
14
  ],
15
15
  "scripts": {
16
- "build": "tsc -p tsconfig.json",
16
+ "build": "tsc -p tsconfig.json && chmod +x dist/src/cli.js dist/src/shim.js",
17
17
  "clean": "rm -rf dist",
18
18
  "prepack": "npm run clean && npm run build",
19
19
  "test": "npm run clean && npm run build && node --test dist/test/*.test.js"