@companion-ai/feynman 0.5.36 → 0.5.37

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/RELEASES.md CHANGED
@@ -6,6 +6,10 @@ GitHub release notes are generated from the matching `## vX.Y.Z` section in this
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## v0.5.37 - 2026-10-12
10
+
11
+ - **A sign-in that came back without a code says what to do.** When the browser returned to `feynman model login` or `feynman setup` without an authorization code (seen mostly on Windows), Feynman printed only "Missing authorization code". It now gives the same advice as for `invalid_grant`: sign out of the provider's site or use a private window, then retry, and for ChatGPT it suggests `feynman model login openai-codex`.
12
+
9
13
  ## v0.5.36 - 2026-10-12
10
14
 
11
15
  - **A new user gets to a working model instead of a dead end.** Launching `feynman` with no model opens a menu to set one up.
@@ -742,11 +742,12 @@ export function getOrCreateDeviceId(authPath) {
742
742
  writeFileSync(settingsPath, `${JSON.stringify({ ...settings, deviceId }, null, 2)}\n`, "utf8");
743
743
  return deviceId;
744
744
  }
745
- // A provider answers invalid_grant when it rejects the authorization code,
746
- // usually because a stale session in the browser interfered with the sign-in.
747
- // Signing out there (or using a private window) and retrying fixes it.
745
+ // A provider answers invalid_grant when it rejects the authorization code, and
746
+ // the browser comes back with no code when the sign-in was denied or lost a
747
+ // redirect; a stale browser session usually causes both. Signing out there (or
748
+ // using a private window) and retrying fixes it.
748
749
  export function describeOAuthLoginFailure(providerId, error) {
749
- if (!(error instanceof Error) || !error.message.includes("invalid_grant"))
750
+ if (!(error instanceof Error) || !/invalid_grant|Missing authorization code/.test(error.message))
750
751
  return error;
751
752
  const alternative = providerId === "openai" ? " Or sign in with `feynman model login openai-codex` instead." : "";
752
753
  return new Error(`${error.message}\nThe sign-in was rejected, usually because of a stale browser session. Sign out of the provider's site in your browser, or use a private window, then run \`feynman model login ${providerId}\` again.${alternative}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@companion-ai/feynman",
3
- "version": "0.5.36",
3
+ "version": "0.5.37",
4
4
  "description": "The open source AI research agent.",
5
5
  "license": "MIT",
6
6
  "type": "module",