1.5.1: refined office, chat in the app language, current OpenAI models, own connector keys
Build Release Installers / Release for the tag (push) Successful in 16s
Build Release Installers / Windows installer (NSIS x64) (push) Successful in 1m48s
Build Release Installers / Linux packages (AppImage + deb x64) (push) Successful in 2m21s
CI / Typecheck, lint, tests, e2e (push) Successful in 3m52s
Build Release Installers / macOS installers (dmg + zip, x64 + arm64) (push) Successful in 7m15s
Build Release Installers / Release for the tag (push) Successful in 16s
Build Release Installers / Windows installer (NSIS x64) (push) Successful in 1m48s
Build Release Installers / Linux packages (AppImage + deb x64) (push) Successful in 2m21s
CI / Typecheck, lint, tests, e2e (push) Successful in 3m52s
Build Release Installers / macOS installers (dmg + zip, x64 + arm64) (push) Successful in 7m15s
- Home: the goal title box is two line boxes tall (2.8em), so a third line no longer peeks out. - Chat messages, reply fallbacks and assignment DMs follow the app display language; tasks and documents keep the working language. - OpenAI and GPT-account model lists match OpenAI's current line-up; default gpt-6.1-sol. - Onboarding connectors step takes the operator's Composio and logo.dev keys, then lists the toolkits the Composio project enables; without a key Connectors leaves the sidebar. - Google Antigravity removed end to end (migration 111), with the remote-revocation path only it used. - Office: 2x pixel people with outlines, rim light, walk, typing and blink; dithered real-clock lighting; detailed furniture and floors. - Per-agent model picker lists the provider's whole model list, live when connected. - Chat wake context breaks same-millisecond ties by insertion order; the mid-run inbox dedupes by message id. - The stored "clock" theme reads back instead of falling to "system". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
48dfddffef
commit
245ff66336
79 files changed
+1301
-1035
No files matched your search
@@ -3,7 +3,6 @@ import { describe, expect, test } from "vitest";
|
||||
import { interpretPollResponse } from "../../src/main/services/oauth/github-copilot-flow";
|
||||
import { interpretKimiPollResponse } from "../../src/main/services/oauth/kimi-code-flow";
|
||||
import { extractAccountId } from "../../src/main/services/oauth/openai-codex-flow";
|
||||
import { readProjectId, requireAntigravityClientSecret } from "../../src/main/services/oauth/google-antigravity-flow";
|
||||
import { generatePkce } from "../../src/main/services/oauth/pkce";
|
||||
import { providerAdapters } from "../../src/main/services/provider-adapters";
|
||||
|
||||
@@ -80,28 +79,6 @@ describe("openai codex account id extraction", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("antigravity project discovery", () => {
|
||||
test("reads a string or object project id", () => {
|
||||
expect(readProjectId({ cloudaicompanionProject: "proj-a" })).toBe("proj-a");
|
||||
expect(readProjectId({ cloudaicompanionProject: { id: "proj-b" } })).toBe("proj-b");
|
||||
});
|
||||
|
||||
test("returns null when no project is present", () => {
|
||||
expect(readProjectId({})).toBeNull();
|
||||
expect(readProjectId({ cloudaicompanionProject: {} })).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("antigravity oauth configuration", () => {
|
||||
test("passes a saved client secret through", () => {
|
||||
expect(requireAntigravityClientSecret("live-secret")).toBe("live-secret");
|
||||
});
|
||||
|
||||
test("requires a client secret saved in Settings", () => {
|
||||
expect(() => requireAntigravityClientSecret(null)).toThrow("Settings > Integrations");
|
||||
});
|
||||
});
|
||||
|
||||
describe("pkce generation", () => {
|
||||
test("produces an S256 challenge for the verifier", () => {
|
||||
const { verifier, challenge } = generatePkce();
|
||||
@@ -117,7 +94,6 @@ describe("oauth credential parsing", () => {
|
||||
test("a stored sign-in is accepted only with what a run needs to use and renew it", () => {
|
||||
expect(providerAdapters["github-copilot"].parseAuthProfile(signIn())).toEqual({ type: "access_token", accessToken: "live_token" });
|
||||
expect(providerAdapters["gpt-account"].parseAuthProfile(signIn({ accountId: "acct_1" }))).toEqual({ type: "account_token", accessToken: "live_token" });
|
||||
expect(providerAdapters["google-antigravity"].parseAuthProfile(signIn({ projectId: "proj-1" }))).toEqual({ type: "access_token", accessToken: "live_token" });
|
||||
});
|
||||
|
||||
test("a pasted token, or a sign-in missing its refresh token, expiry or provider extras, is refused at save time", () => {
|
||||
@@ -125,7 +101,6 @@ describe("oauth credential parsing", () => {
|
||||
expect(() => providerAdapters["claude-pro"].parseAuthProfile(JSON.stringify({ access: "a", expires: 1 }))).toThrow("missing its refresh token");
|
||||
expect(() => providerAdapters["kimi-code"].parseAuthProfile(JSON.stringify({ access: "a", refresh: "r" }))).toThrow("missing its expiry");
|
||||
expect(() => providerAdapters["gpt-account"].parseAuthProfile(signIn())).toThrow("missing its ChatGPT account id");
|
||||
expect(() => providerAdapters["google-antigravity"].parseAuthProfile(signIn())).toThrow("missing its Google Cloud project id");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user