phyll 0.4.1 → 0.4.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
@@ -17,6 +17,8 @@ Then ask your agent: "review my app at http://localhost:3000".
17
17
 
18
18
  `setup` registers the connector in Codex's `config.toml` or with `claude mcp add`, and installs the Chromium build it uses. You need Node 20 or newer.
19
19
 
20
+ Your reports, keys and plan are also on the site: `npx phyll account` opens your account there, already signed in. If you lose the key, sign in at [agentphyll.com/login](https://agentphyll.com/login) with your email and create a new one.
21
+
20
22
  ## Commands
21
23
 
22
24
  | Command | What it does |
@@ -25,6 +27,7 @@ Then ask your agent: "review my app at http://localhost:3000".
25
27
  | `login <key>` | Use an account you already have on this computer |
26
28
  | `setup codex` or `setup claude` | Connect Phyll to your agent and install the browser |
27
29
  | `status` | Your plan and the reviews left |
30
+ | `account` | Open your account on agentphyll.com, already signed in: reports, usage, keys and plan |
28
31
  | `pro` | Subscribe to Phyll Pro, R$ 9 a month, with unlimited reviews |
29
32
  | `billing` | Change the card or cancel Phyll Pro |
30
33
  | `scan [folder]` | Scan the source for AI tells, with no account and no AI |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "phyll",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "UX review for apps built with AI, inside the agent you already use. Connects Codex or Claude Code to the Phyll engine; the AI work stays on your own plan.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.4.1",
2
+ "version": "0.4.2",
3
3
  "tells": [
4
4
  {
5
5
  "id": "P01",
@@ -1,3 +1,3 @@
1
1
  // Single source for the tool name and version used in scan output and reports.
2
2
  export const NAME = "phyll";
3
- export const VERSION = "0.4.1";
3
+ export const VERSION = "0.4.2";
package/src/cli.mjs CHANGED
@@ -18,6 +18,7 @@ Commands:
18
18
  login <key> Use an account you already have on this computer
19
19
  setup <agent> Connect Phyll to codex or claude, and install the browser it uses
20
20
  status Your plan and the reviews left
21
+ account Open your account on the site, signed in: reports, keys and plan
21
22
  pro Subscribe to Phyll Pro
22
23
  billing Change the card or cancel Phyll Pro
23
24
  scan [folder] Scan the source for AI tells. Free, with no account
@@ -103,7 +104,16 @@ export async function main(argv, io = {}) {
103
104
  me.plan === "pro"
104
105
  ? `Phyll Pro. Reviews this month: ${sessions.used ?? 0}.`
105
106
  : `Free. ${Math.max(0, (sessions.limit ?? 0) - (sessions.used ?? 0))} of ${sessions.limit} free reviews left.`;
106
- write(`${me.email} on ${server}\n${plan}\n`);
107
+ write(`${me.email} on ${server}\n${plan}\nYour reports, keys and plan: npx phyll account\n`);
108
+ return 0;
109
+ }
110
+
111
+ case "account": {
112
+ const { server, key } = loadCredentials(env);
113
+ if (!key) return fail(`no account on this computer yet. Run npx phyll signup you@example.com, or sign in at ${server}/login`);
114
+ const answer = await client(server, key).loginLink();
115
+ if (!answer.ok) return fail(answer.json.message ?? `Phyll answered ${answer.status}.`);
116
+ write(`Open your account, already signed in. The link works once, for 15 minutes:\n${answer.json.url}\n`);
107
117
  return 0;
108
118
  }
109
119
 
package/src/engine.mjs CHANGED
@@ -36,5 +36,6 @@ export function engineClient({ server, key = null, version = "0", fetchImpl = gl
36
36
  submitReport: (id, report) => call("POST", `/v1/sessions/${encodeURIComponent(id)}/report`, { report }),
37
37
  checkout: () => call("POST", "/v1/billing/checkout"),
38
38
  portal: () => call("POST", "/v1/billing/portal"),
39
+ loginLink: () => call("POST", "/v1/login-link"),
39
40
  };
40
41
  }