agyx 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +45 -10
  2. package/dist/src/cli.js +170 -114
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/color.d.ts +9 -0
  5. package/dist/src/color.js +28 -0
  6. package/dist/src/color.js.map +1 -0
  7. package/dist/src/config.d.ts +30 -2
  8. package/dist/src/config.js +109 -6
  9. package/dist/src/config.js.map +1 -1
  10. package/dist/src/coordinator.d.ts +18 -4
  11. package/dist/src/coordinator.js +286 -13
  12. package/dist/src/coordinator.js.map +1 -1
  13. package/dist/src/eligibility.d.ts +4 -0
  14. package/dist/src/eligibility.js +10 -0
  15. package/dist/src/eligibility.js.map +1 -0
  16. package/dist/src/google_auth.d.ts +1 -0
  17. package/dist/src/google_auth.js +42 -0
  18. package/dist/src/google_auth.js.map +1 -0
  19. package/dist/src/install.d.ts +2 -0
  20. package/dist/src/install.js +24 -7
  21. package/dist/src/install.js.map +1 -1
  22. package/dist/src/keychain.js +2 -2
  23. package/dist/src/keychain.js.map +1 -1
  24. package/dist/src/onboarding.d.ts +1 -0
  25. package/dist/src/onboarding.js +87 -0
  26. package/dist/src/onboarding.js.map +1 -0
  27. package/dist/src/profile_view.d.ts +22 -0
  28. package/dist/src/profile_view.js +77 -0
  29. package/dist/src/profile_view.js.map +1 -0
  30. package/dist/src/quota.d.ts +1 -0
  31. package/dist/src/quota.js +3 -0
  32. package/dist/src/quota.js.map +1 -1
  33. package/dist/src/selection.d.ts +1 -1
  34. package/dist/src/selection.js +18 -1
  35. package/dist/src/selection.js.map +1 -1
  36. package/dist/src/session.js +54 -31
  37. package/dist/src/session.js.map +1 -1
  38. package/dist/src/ui.d.ts +19 -0
  39. package/dist/src/ui.js +306 -0
  40. package/dist/src/ui.js.map +1 -0
  41. package/package.json +8 -1
package/README.md CHANGED
@@ -18,12 +18,36 @@ agyx install
18
18
  source ~/.zshrc
19
19
  ```
20
20
 
21
+ `agyx install` writes a shell function to your shell rc file. It does not modify
22
+ the already-open terminal automatically. Open a new terminal, or run the
23
+ displayed `source ...` command.
24
+
25
+ For the current terminal only, without reloading your shell rc file:
26
+
27
+ ```bash
28
+ eval "$(agyx shell-init)"
29
+ ```
30
+
31
+ If you run an interactive `agyx` command before installing the shell
32
+ integration, agyx asks once whether to configure `agy` as the transparent shell
33
+ function. If GitHub CLI (`gh`) is installed, agyx also asks once whether to star
34
+ the repository. Interactive prompts use Inquirer. Set `AGYX_NO_ONBOARDING=1` to
35
+ suppress these prompts.
36
+
21
37
  The shell integration makes `agy` transparently run as:
22
38
 
23
39
  ```text
24
40
  agyx session -- <all original agy arguments>
25
41
  ```
26
42
 
43
+ Verify the active terminal with:
44
+
45
+ ```bash
46
+ type agy
47
+ ```
48
+
49
+ Expected result: `agy` is a shell function that calls `agyx session`.
50
+
27
51
  All original options are forwarded, including:
28
52
 
29
53
  ```bash
@@ -43,13 +67,20 @@ prevents duplicate requests.
43
67
  Save the account currently stored by `agy`:
44
68
 
45
69
  ```bash
46
- agyx save personal --email you@example.com
70
+ agyx save
71
+ agyx save personal
47
72
  ```
48
73
 
74
+ When the name is omitted, `agyx save` briefly probes `agy` authentication,
75
+ detects the actual keyring account email from the `agy` log, and derives a
76
+ profile name from the email local-part. Use `--email EMAIL` only when you want
77
+ to override the detected metadata.
78
+
49
79
  Add another account:
50
80
 
51
81
  ```bash
52
82
  agyx login work
83
+ agyx login
53
84
  ```
54
85
 
55
86
  `agyx login` performs this transaction:
@@ -60,6 +91,9 @@ agyx login work
60
91
  4. Save and activate the new credential.
61
92
  5. Restart every supervised session in its original terminal.
62
93
 
94
+ When the name is omitted, `agyx login` derives it from the OAuth email detected
95
+ in the `agy` log.
96
+
63
97
  Use `--no-resume` to leave sessions paused after login.
64
98
 
65
99
  ## Switching
@@ -72,13 +106,14 @@ agyx next
72
106
  agyx status
73
107
  ```
74
108
 
75
- `agyx use` without a profile opens an interactive picker. The picker and
76
- `agyx list` show profile metadata:
109
+ `agyx use` without a profile opens an interactive picker. `agyx list` renders a
110
+ terminal table. Both show profile metadata:
77
111
 
78
112
  - `status`: `ready`, `quota`, `disabled`, or `unknown`
79
- - `reset`: relative quota reset time when it can be inferred from logs
80
- - `last-used`: when the profile was last activated through agyx
81
- - `picks`: how many times agyx selected the profile
113
+ - `quota-reset`: relative quota reset time when it can be inferred from logs
114
+ - `last-request`: when a supervised `agy` log last showed a model request
115
+ - `activated`: when agyx last made the profile active
116
+ - `switches`: how many times agyx selected the profile through login/use/next
82
117
 
83
118
  `agyx next` uses name-sorted round-robin order, starting after the currently
84
119
  active profile. It skips profiles marked `disabled` or currently quota
@@ -99,10 +134,10 @@ signals such as `RESOURCE_EXHAUSTED`, HTTP `429`, and `Individual quota
99
134
  reached`. When a reset hint such as `Resets in 73h16m27s` is present, agyx stores
100
135
  the inferred reset time in profile metadata.
101
136
 
102
- This release records quota state and makes `agyx next` avoid exhausted profiles.
103
- It does not yet perform an automatic global account switch from inside a running
104
- session; use `agyx next` after a quota message so the switch still happens
105
- through the normal pause/switch/resume transaction.
137
+ This release records quota state, request attempts, and makes `agyx next` avoid
138
+ exhausted profiles. It does not yet perform an automatic global account switch
139
+ from inside a running session; use `agyx next` after a quota message so the
140
+ switch still happens through the normal pause/switch/resume transaction.
106
141
 
107
142
  ## Security
108
143
 
package/dist/src/cli.js CHANGED
@@ -1,31 +1,43 @@
1
1
  #!/usr/bin/env node
2
- import { createInterface } from "node:readline/promises";
3
- import { activateProfile, loginProfile, pauseAll, resumeAll, saveCurrent, sessionRecords, switchProfile, } from "./coordinator.js";
4
- import { installShellIntegration, shellInit } from "./install.js";
2
+ import { activateProfile, loginProfile, pauseAll, resumeAll, saveCurrent, sessionRecords, switchProfile, switchToNextProfile, verifyAllProfiles, } from "./coordinator.js";
3
+ import { installShellIntegration, shellInit, shellIntegrationInstalled, shellIntegrationPath, } from "./install.js";
5
4
  import { keychain } from "./keychain.js";
5
+ import { maybeRunOnboarding } from "./onboarding.js";
6
6
  import { findRealAgy } from "./processes.js";
7
7
  import { loadState, saveState, validateProfileName } from "./config.js";
8
- import { effectiveProfileStatus, selectNextProfile } from "./selection.js";
9
8
  import { supervise } from "./session.js";
9
+ import { confirmAction, pickProfileAction, printProfileTable, promptText } from "./ui.js";
10
10
  const help = `agyx — multi-account session supervisor for Antigravity CLI
11
11
 
12
12
  Usage:
13
- agyx install Install transparent agy shell shim
13
+ agyx install Install agy shell function
14
14
  agyx session -- [agy options] Run agy under a restartable supervisor
15
- agyx save <name> [--email EMAIL] Save the current Keychain account
16
- agyx login <name> [--no-resume] Pause all sessions and add an 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
17
18
  agyx use [name] Switch account and resume every session
18
19
  agyx next Rotate to the next selectable account
19
- agyx list List profiles
20
+ agyx list [--verify] List profiles; optionally verify saved credentials
20
21
  agyx current Print the active profile
21
22
  agyx status List supervised terminal sessions
22
23
  agyx pause | resume Pause or resume all supervised sessions
24
+ agyx rename <old> <new> Rename a saved profile
23
25
  agyx remove <name> Delete a saved profile
24
26
  agyx shell-init Print the shell integration function
25
27
  agyx doctor Diagnose the installation
26
28
 
27
29
  All arguments passed through "agy" are forwarded to the real agy executable.
28
30
  Non-interactive --print/--prompt commands are not automatically restarted.`;
31
+ function printSwitchResult(result) {
32
+ if (result.alreadyActive) {
33
+ console.log(`Profile '${result.name}' is already active.`
34
+ + (result.email ? ` (${result.email})` : ""));
35
+ return;
36
+ }
37
+ console.log(`Activated profile '${result.name}'`
38
+ + (result.email ? ` (${result.email})` : "")
39
+ + " and resumed all sessions.");
40
+ }
29
41
  function takeOption(args, name) {
30
42
  const index = args.indexOf(name);
31
43
  if (index < 0)
@@ -34,91 +46,103 @@ function takeOption(args, name) {
34
46
  throw new Error(`${name} requires a value`);
35
47
  return args.splice(index, 2)[1];
36
48
  }
37
- function relativeTime(value, now = new Date()) {
38
- if (!value)
39
- return "-";
40
- const timestamp = Date.parse(value);
41
- if (Number.isNaN(timestamp))
42
- return "-";
43
- const delta = timestamp - now.getTime();
44
- const absolute = Math.abs(delta);
45
- const units = [
46
- [24 * 60 * 60 * 1000, "d"],
47
- [60 * 60 * 1000, "h"],
48
- [60 * 1000, "m"],
49
- [1000, "s"],
50
- ];
51
- const [unitMs, suffix] = units.find(([ms]) => absolute >= ms) ?? units.at(-1);
52
- const amount = Math.max(1, Math.round(absolute / unitMs));
53
- return delta >= 0 ? `in ${amount}${suffix}` : `${amount}${suffix} ago`;
49
+ function takeFlag(args, name) {
50
+ const index = args.indexOf(name);
51
+ if (index < 0)
52
+ return false;
53
+ args.splice(index, 1);
54
+ return true;
54
55
  }
55
- function profileStatusText(profile, now = new Date()) {
56
- const status = effectiveProfileStatus(profile, now);
57
- if (status === "disabled")
58
- return "disabled";
59
- if (status === "exhausted")
60
- return "quota";
61
- return profile.quotaStatus === "available" ? "ready" : "unknown";
56
+ function takeOptionalName(args, usage) {
57
+ if (args.length > 1)
58
+ throw new Error(`Usage: ${usage}`);
59
+ return args.shift();
62
60
  }
63
- function profileRow(index, profile, activeProfile, now = new Date()) {
64
- const marker = profile.name === activeProfile ? "*" : " ";
65
- const number = String(index + 1).padStart(2);
66
- const name = profile.name.padEnd(18);
67
- const email = (profile.email ?? "-").padEnd(28);
68
- const status = profileStatusText(profile, now).padEnd(8);
69
- const reset = relativeTime(profile.quotaResetAt, now).padEnd(8);
70
- const lastUsed = relativeTime(profile.lastActivatedAt, now).padEnd(9);
71
- const picks = String(profile.selectionCount ?? 0).padStart(5);
72
- return `${marker} ${number} ${name} ${email} ${status} ${reset} ${lastUsed} ${picks}`;
61
+ async function removeProfile(name) {
62
+ validateProfileName(name);
63
+ await keychain.deleteProfile(name);
64
+ const state = await loadState();
65
+ state.profiles = state.profiles.filter((profile) => profile.name !== name);
66
+ if (state.activeProfile === name)
67
+ state.activeProfile = undefined;
68
+ await saveState(state);
73
69
  }
74
- function printProfiles(profiles, activeProfile) {
75
- if (!profiles.length) {
76
- console.log("No saved profiles.");
77
- return;
70
+ async function renameProfile(oldNameInput, newNameInput) {
71
+ const oldName = validateProfileName(oldNameInput);
72
+ const newName = validateProfileName(newNameInput.trim());
73
+ if (oldName === newName)
74
+ return false;
75
+ const state = await loadState();
76
+ const profile = state.profiles.find((entry) => entry.name === oldName);
77
+ if (!profile)
78
+ throw new Error(`Profile not found: ${oldName}`);
79
+ if (state.profiles.some((entry) => entry !== profile
80
+ && (entry.name === newName || entry.previousNames?.includes(newName)))) {
81
+ throw new Error(`Profile already exists: ${newName}`);
78
82
  }
79
- const now = new Date();
80
- console.log(" # name email status reset last-used picks");
81
- for (const [index, profile] of profiles.entries()) {
82
- console.log(profileRow(index, profile, activeProfile, now));
83
+ const credential = await keychain.readProfile(oldName);
84
+ await keychain.writeProfile(newName, credential);
85
+ const previousNames = new Set(profile.previousNames ?? []);
86
+ previousNames.delete(newName);
87
+ previousNames.add(oldName);
88
+ profile.previousNames = [...previousNames].sort();
89
+ profile.name = newName;
90
+ profile.updatedAt = new Date().toISOString();
91
+ if (state.activeProfile === oldName)
92
+ state.activeProfile = newName;
93
+ state.profiles.sort((left, right) => left.name.localeCompare(right.name));
94
+ await saveState(state);
95
+ await keychain.deleteProfile(oldName);
96
+ return true;
97
+ }
98
+ async function confirmAndRemoveProfile(name) {
99
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
100
+ throw new Error("Refusing to delete without an interactive confirmation.");
83
101
  }
102
+ const confirmed = await confirmAction(`Delete profile '${name}'?`, false);
103
+ if (!confirmed)
104
+ return false;
105
+ await removeProfile(name);
106
+ return true;
84
107
  }
85
- async function pickProfile() {
108
+ async function promptAndRenameProfile(name) {
86
109
  if (!process.stdin.isTTY || !process.stdout.isTTY) {
87
- throw new Error("Usage: agyx use <name> or run 'agyx use' in an interactive terminal.");
110
+ throw new Error("Refusing to rename without an interactive terminal.");
88
111
  }
89
- const state = await loadState();
90
- if (!state.profiles.length)
91
- throw new Error("No saved profiles.");
92
- printProfiles(state.profiles, state.activeProfile);
93
- const suggested = (() => {
94
- try {
95
- return selectNextProfile(state).name;
112
+ const nextName = (await promptText(`Rename profile '${name}' to`, name))?.trim();
113
+ if (!nextName || nextName === name)
114
+ return undefined;
115
+ const renamed = await renameProfile(name, nextName);
116
+ return renamed ? nextName : undefined;
117
+ }
118
+ async function browseProfiles(mode) {
119
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
120
+ if (mode === "list") {
121
+ printProfileTable(await loadState());
122
+ return undefined;
96
123
  }
97
- catch {
124
+ throw new Error("Usage: agyx use <name> or run 'agyx use' in an interactive terminal.");
125
+ }
126
+ let notice;
127
+ while (true) {
128
+ const state = await loadState();
129
+ const action = await pickProfileAction(state, mode, notice);
130
+ notice = undefined;
131
+ if (action.type === "exit")
98
132
  return undefined;
133
+ if (action.type === "select")
134
+ return action.name;
135
+ if (action.type === "delete") {
136
+ if (await confirmAndRemoveProfile(action.name)) {
137
+ notice = `Removed profile '${action.name}'.`;
138
+ }
99
139
  }
100
- })();
101
- const prompt = suggested
102
- ? `Select profile number/name [next: ${suggested}]: `
103
- : "Select profile number/name: ";
104
- const interface_ = createInterface({ input: process.stdin, output: process.stdout });
105
- try {
106
- const answer = (await interface_.question(prompt)).trim();
107
- if (!answer && suggested)
108
- return suggested;
109
- if (!answer)
110
- throw new Error("No profile selected.");
111
- const index = Number(answer);
112
- if (Number.isInteger(index) && index >= 1 && index <= state.profiles.length) {
113
- return state.profiles[index - 1].name;
140
+ else if (action.type === "rename") {
141
+ const nextName = await promptAndRenameProfile(action.name);
142
+ if (nextName) {
143
+ notice = `Renamed profile '${action.name}' to '${nextName}'.`;
144
+ }
114
145
  }
115
- const profile = state.profiles.find(({ name }) => name === answer);
116
- if (!profile)
117
- throw new Error(`Profile not found: ${answer}`);
118
- return profile.name;
119
- }
120
- finally {
121
- interface_.close();
122
146
  }
123
147
  }
124
148
  async function main() {
@@ -128,11 +152,18 @@ async function main() {
128
152
  console.log(help);
129
153
  return 0;
130
154
  }
155
+ await maybeRunOnboarding(command);
131
156
  switch (command) {
132
157
  case "install": {
133
158
  const path = await installShellIntegration();
134
- console.log(`Installed agyx shell integration in ${path}`);
135
- console.log("Open a new terminal or run: source " + path);
159
+ console.log(`Installed agy shell function in ${path}`);
160
+ console.log("This does not change the current terminal automatically.");
161
+ console.log("Open a new terminal, or run:");
162
+ console.log(` source ${path}`);
163
+ console.log("For this terminal only, you can also run:");
164
+ console.log(' eval "$(agyx shell-init)"');
165
+ console.log("Verify with:");
166
+ console.log(" type agy");
136
167
  return 0;
137
168
  }
138
169
  case "shell-init":
@@ -143,25 +174,17 @@ async function main() {
143
174
  args.shift();
144
175
  return await supervise(args);
145
176
  case "save": {
146
- const name = args.shift();
147
- if (!name)
148
- throw new Error("Usage: agyx save <name> [--email EMAIL]");
149
177
  const email = takeOption(args, "--email");
150
- if (args.length)
151
- throw new Error(`Unknown arguments: ${args.join(" ")}`);
152
- await saveCurrent(name, email);
153
- console.log(`Saved and activated profile '${name}'.`);
178
+ const name = takeOptionalName(args, "agyx save [name] [--email EMAIL]");
179
+ const result = await saveCurrent(name, email);
180
+ console.log(`Saved and activated profile '${result.name}'.`
181
+ + (result.email ? ` (${result.email})` : ""));
154
182
  return 0;
155
183
  }
156
184
  case "login": {
157
- const name = args.shift();
158
- if (!name)
159
- throw new Error("Usage: agyx login <name> [--email EMAIL] [--no-resume]");
160
185
  const email = takeOption(args, "--email");
161
- const noResume = args.includes("--no-resume");
162
- args.splice(args.indexOf("--no-resume"), noResume ? 1 : 0);
163
- if (args.length)
164
- throw new Error(`Unknown arguments: ${args.join(" ")}`);
186
+ const noResume = takeFlag(args, "--no-resume");
187
+ const name = takeOptionalName(args, "agyx login [name] [--email EMAIL] [--no-resume]");
165
188
  await loginProfile(name, email, !noResume);
166
189
  return 0;
167
190
  }
@@ -169,21 +192,46 @@ async function main() {
169
192
  const name = args.shift();
170
193
  if (args.length)
171
194
  throw new Error("Usage: agyx use [name]");
172
- const selected = name ?? await pickProfile();
173
- await switchProfile(selected);
174
- console.log(`Activated profile '${selected}' and resumed all sessions.`);
195
+ const selected = name ?? await browseProfiles("use");
196
+ if (!selected)
197
+ return 0;
198
+ const result = await switchProfile(selected);
199
+ printSwitchResult(result);
175
200
  return 0;
176
201
  }
177
202
  case "next": {
178
- const state = await loadState();
179
- const name = selectNextProfile(state).name;
180
- await switchProfile(name);
181
- console.log(`Activated profile '${name}' and resumed all sessions.`);
203
+ const result = await switchToNextProfile();
204
+ printSwitchResult(result);
182
205
  return 0;
183
206
  }
184
207
  case "list": {
185
- const state = await loadState();
186
- printProfiles(state.profiles, state.activeProfile);
208
+ const verify = takeFlag(args, "--verify");
209
+ if (args.length)
210
+ throw new Error("Usage: agyx list [--verify]");
211
+ const state = verify ? await verifyAllProfiles() : await loadState();
212
+ if (process.stdin.isTTY && process.stdout.isTTY) {
213
+ let notice;
214
+ while (true) {
215
+ const action = await pickProfileAction(await loadState(), "list", notice);
216
+ notice = undefined;
217
+ if (action.type === "exit")
218
+ break;
219
+ if (action.type === "delete") {
220
+ if (await confirmAndRemoveProfile(action.name)) {
221
+ notice = `Removed profile '${action.name}'.`;
222
+ }
223
+ }
224
+ else if (action.type === "rename") {
225
+ const nextName = await promptAndRenameProfile(action.name);
226
+ if (nextName) {
227
+ notice = `Renamed profile '${action.name}' to '${nextName}'.`;
228
+ }
229
+ }
230
+ }
231
+ }
232
+ else {
233
+ printProfileTable(state);
234
+ }
187
235
  return 0;
188
236
  }
189
237
  case "current":
@@ -211,18 +259,23 @@ async function main() {
211
259
  console.log(`Resumed ${records.length} supervised session(s).`);
212
260
  return 0;
213
261
  }
262
+ case "rename": {
263
+ const oldName = args.shift();
264
+ const newName = args.shift();
265
+ if (!oldName || !newName || args.length) {
266
+ throw new Error("Usage: agyx rename <old> <new>");
267
+ }
268
+ const renamed = await renameProfile(oldName, newName);
269
+ console.log(renamed
270
+ ? `Renamed profile '${oldName}' to '${newName}'.`
271
+ : `Profile '${oldName}' is already named '${newName}'.`);
272
+ return 0;
273
+ }
214
274
  case "remove": {
215
275
  const name = args.shift();
216
276
  if (!name || args.length)
217
277
  throw new Error("Usage: agyx remove <name>");
218
- validateProfileName(name);
219
- await keychain.deleteProfile(name);
220
- const state = await loadState();
221
- state.profiles = state.profiles.filter((profile) => profile.name !== name);
222
- if (state.activeProfile === name)
223
- state.activeProfile = undefined;
224
- await saveState(state);
225
- console.log(`Removed profile '${name}'.`);
278
+ await confirmAndRemoveProfile(name);
226
279
  return 0;
227
280
  }
228
281
  case "doctor": {
@@ -230,6 +283,9 @@ async function main() {
230
283
  const sessions = await sessionRecords();
231
284
  console.log(`agy: ${await findRealAgy()}`);
232
285
  console.log(`platform: ${process.platform}`);
286
+ console.log(`shell integration file: ${shellIntegrationPath()}`);
287
+ console.log(`shell integration installed: ${await shellIntegrationInstalled() ? "yes" : "no"}`);
288
+ console.log("current shell check: run `type agy` in your terminal; it should report a shell function");
233
289
  console.log(`profiles: ${state.profiles.length}`);
234
290
  console.log(`active profile: ${state.activeProfile ?? "unmanaged"}`);
235
291
  console.log(`supervised sessions: ${sessions.length}`);
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAiB,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;2EAkB8D,CAAC;AAE5E,SAAS,UAAU,CAAC,IAAc,EAAE,IAAY;IAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,KAAyB,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,KAAK,GAA4B;QACrC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC;QAC1B,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC;QACrB,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC;QAChB,CAAC,IAAI,EAAE,GAAG,CAAC;KACZ,CAAC;IACF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,MAAM,CAAC;AACzE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAsB,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACjE,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC7C,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAC3C,OAAO,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,UAAU,CACjB,KAAa,EACb,OAAsB,EACtB,aAAiC,EACjC,GAAG,GAAG,IAAI,IAAI,EAAE;IAEhB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,GAAG,MAAM,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,aAAa,CAAC,QAAyB,EAAE,aAAsB;IACtE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;IACvG,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;QACtB,IAAI,CAAC;YAAC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAAC,CAAC;QAC7C,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;IAC7B,CAAC,CAAC,EAAE,CAAC;IACL,MAAM,MAAM,GAAG,SAAS;QACtB,CAAC,CAAC,qCAAqC,SAAS,KAAK;QACrD,CAAC,CAAC,8BAA8B,CAAC;IACnC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC5E,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,IAAI,CAAC;QACzC,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,uBAAuB,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,IAAI,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,YAAY;YACf,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACzB,OAAO,CAAC,CAAC;QACX,KAAK,SAAS;YACZ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE,MAAM,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,IAAI,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACrF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE,MAAM,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAI,IAAI,MAAM,WAAW,EAAE,CAAC;YAC7C,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,6BAA6B,CAAC,CAAC;YACzE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YAC3C,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,6BAA6B,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;YAChC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,aAAa,IAAI,WAAW,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAChE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,GAAG,UAAU,MAAM,CAAC,QAAQ,IAAI,GAAG,EAAE;sBAC/D,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE;sBAC9D,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3E,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,yBAAyB,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;YACvC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,yBAAyB,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACvE,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;YAChC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC3E,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI;gBAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;YAClE,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,WAAW,EAAE,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,aAAa,IAAI,WAAW,EAAE,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,WAAW;YACd,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QACX;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5C,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,SAAU,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const color: {
2
+ dim: (value: string) => string;
3
+ red: (value: string) => string;
4
+ green: (value: string) => string;
5
+ yellow: (value: string) => string;
6
+ cyan: (value: string) => string;
7
+ gray: (value: string) => string;
8
+ inverse: (value: string) => string;
9
+ };
@@ -0,0 +1,28 @@
1
+ const codes = {
2
+ reset: "\u001b[0m",
3
+ dim: "\u001b[2m",
4
+ red: "\u001b[31m",
5
+ green: "\u001b[32m",
6
+ yellow: "\u001b[33m",
7
+ cyan: "\u001b[36m",
8
+ gray: "\u001b[90m",
9
+ inverse: "\u001b[7m",
10
+ };
11
+ function enabled() {
12
+ return process.env.AGYX_NO_COLOR === undefined
13
+ && process.env.TERM !== "dumb"
14
+ && process.stdout.isTTY;
15
+ }
16
+ function wrap(code, value) {
17
+ return enabled() ? `${code}${value}${codes.reset}` : value;
18
+ }
19
+ export const color = {
20
+ dim: (value) => wrap(codes.dim, value),
21
+ red: (value) => wrap(codes.red, value),
22
+ green: (value) => wrap(codes.green, value),
23
+ yellow: (value) => wrap(codes.yellow, value),
24
+ cyan: (value) => wrap(codes.cyan, value),
25
+ gray: (value) => wrap(codes.gray, value),
26
+ inverse: (value) => wrap(codes.inverse, value),
27
+ };
28
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/color.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG;IACZ,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,YAAY;IACjB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,WAAW;CACZ,CAAC;AAEX,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS;WACzC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM;WAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,KAAa;IACvC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9C,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;IAC9C,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IAClD,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;IACpD,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IAChD,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;IAChD,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;CACvD,CAAC"}
@@ -1,15 +1,25 @@
1
1
  export interface ProfileRecord {
2
2
  name: string;
3
+ previousNames?: string[];
3
4
  email?: string;
4
5
  createdAt: string;
5
6
  updatedAt: string;
6
7
  authenticatedAt?: string;
7
8
  lastActivatedAt?: string;
9
+ lastRequestAt?: string;
8
10
  lastSuccessfulRequestAt?: string;
9
11
  lastQuotaErrorAt?: string;
10
12
  quotaResetAt?: string;
11
13
  quotaStatus?: "unknown" | "available" | "exhausted";
12
14
  lastQuotaReason?: string;
15
+ credentialStatus?: "unknown" | "verified" | "mismatch" | "error";
16
+ verifiedEmail?: string;
17
+ credentialVerifiedAt?: string;
18
+ credentialMismatchAt?: string;
19
+ credentialError?: string;
20
+ eligibilityStatus?: "unknown" | "eligible" | "ineligible";
21
+ lastEligibilityErrorAt?: string;
22
+ eligibilityReason?: string;
13
23
  selectionCount?: number;
14
24
  disabled?: boolean;
15
25
  priority?: number;
@@ -18,6 +28,12 @@ export interface State {
18
28
  version: 1;
19
29
  activeProfile?: string;
20
30
  realAgyPath?: string;
31
+ onboarding?: {
32
+ shellIntegrationPromptedAt?: string;
33
+ shellIntegrationInstalledAt?: string;
34
+ githubStarPromptedAt?: string;
35
+ githubStarredAt?: string;
36
+ };
21
37
  profiles: ProfileRecord[];
22
38
  }
23
39
  export declare const configDir: string;
@@ -27,16 +43,28 @@ export declare const statePath: string;
27
43
  export declare function ensureDirectories(): Promise<void>;
28
44
  export declare function loadState(): Promise<State>;
29
45
  export declare function saveState(state: State): Promise<void>;
30
- export declare function upsertProfile(name: string, email: string | undefined, makeActive: boolean): Promise<void>;
31
- export declare function markProfileActivated(state: State, name: string, now?: Date): void;
46
+ export declare function upsertProfile(name: string, email: string | undefined, makeActive: boolean, countActivation?: boolean): Promise<void>;
47
+ export declare function markProfileActivated(state: State, name: string, now?: Date, incrementSelection?: boolean): void;
48
+ export declare function markProfileRequest(state: State, name: string, now?: Date): void;
32
49
  export declare function markProfileQuotaExhausted(state: State, name: string, event: {
33
50
  reason: string;
34
51
  resetAt?: string;
35
52
  }, now?: Date): void;
53
+ export declare function markProfileCredentialVerified(state: State, name: string, actualEmail: string, now?: Date): void;
54
+ export declare function markProfileCredentialMismatch(state: State, name: string, actualEmail: string | undefined, expectedEmail: string | undefined, now?: Date): void;
55
+ export declare function markProfileIneligible(state: State, name: string, event: {
56
+ reason: string;
57
+ }, now?: Date): void;
36
58
  export declare function recordProfileQuotaExhausted(name: string, event: {
37
59
  reason: string;
38
60
  resetAt?: string;
39
61
  }): Promise<void>;
62
+ export declare function recordProfileRequest(name: string, now?: Date): Promise<void>;
63
+ export declare function recordProfileIneligible(name: string, event: {
64
+ reason: string;
65
+ }): Promise<void>;
40
66
  export declare function cleanupRuntimeFile(path: string): Promise<void>;
41
67
  export declare function validateProfileName(name: string): string;
68
+ export declare function profileNameFromEmail(email: string): string;
69
+ export declare function uniqueProfileName(baseName: string, state: State): string;
42
70
  export declare function ensureParent(path: string): Promise<void>;