feat(server): adapt gemini3.1 preview (#14583)

#### PR Dependency Tree


* **PR #14583** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added Gemini 3.1 Pro Preview support (text, image, audio) and new
GPT‑5 variants as defaults; centralized persistent telemetry state for
more reliable client identity.

* **UX**
  * Improved model submenu placement in chat preferences.
* More robust mindmap parsing, preview, regeneration and replace
behavior.

* **Chores**
  * Bumped AI SDK and related dependencies.

* **Tests**
  * Expanded/updated tests and increased timeouts for flaky flows.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-03-08 00:53:16 +08:00
committed by GitHub
parent 9742e9735e
commit 9c55edeb62
36 changed files with 980 additions and 375 deletions

View File

@@ -14,11 +14,13 @@ test.describe('AIAction/CheckCodeError', () => {
}) => {
const { checkCodeError } = await utils.editor.askAIWithCode(
page,
'consloe.log("Hello,World!");',
'console.log("Hello,World!"',
'javascript'
);
const { answer, responses } = await checkCodeError();
await expect(answer).toHaveText(/console/);
const answerText = await answer.innerText();
expect(answerText).toMatch(/syntax|parenthesis|unexpected|missing/i);
expect(answerText).not.toMatch(/No syntax errors were found/i);
await expect(responses).toEqual(
new Set(['insert-below', 'replace-selection'])
);

View File

@@ -33,6 +33,6 @@ test.describe('expand mindmap node', () => {
await expect(async () => {
const newChild = await utils.editor.getMindMapNode(page, id!, [0, 0, 0]);
expect(newChild).toBeDefined();
}).toPass({ timeout: 20000 });
}).toPass({ timeout: 60000 });
});
});

View File

@@ -17,7 +17,10 @@ test.describe('AIAction/ExplainSelection', () => {
'LLM(AI)'
);
const { answer, responses } = await explainSelection();
await expect(answer).toHaveText(/Large Language Model/, { timeout: 20000 });
await expect(answer).toHaveText(
/Large Language Model|LLM|artificial intelligence/i,
{ timeout: 20000 }
);
expect(responses).toEqual(new Set(['insert-below', 'replace-selection']));
});
@@ -33,7 +36,10 @@ test.describe('AIAction/ExplainSelection', () => {
);
const { answer, responses } = await explainSelection();
await expect(answer).toHaveText(/Large Language Model/, { timeout: 20000 });
await expect(answer).toHaveText(
/Large Language Model|LLM|artificial intelligence/i,
{ timeout: 20000 }
);
expect(responses).toEqual(new Set(['insert-below']));
});
@@ -49,7 +55,10 @@ test.describe('AIAction/ExplainSelection', () => {
);
const { answer, responses } = await explainSelection();
await expect(answer).toHaveText(/Large Language Model/, { timeout: 20000 });
await expect(answer).toHaveText(
/Large Language Model|LLM|artificial intelligence/i,
{ timeout: 20000 }
);
expect(responses).toEqual(new Set(['insert-below']));
});

View File

@@ -3,6 +3,8 @@ import { expect } from '@playwright/test';
import { test } from '../base/base-test';
test.describe('AIAction/GeneratePresentation', () => {
test.describe.configure({ timeout: 240000 });
test.beforeEach(async ({ loggedInPage: page, utils }) => {
await utils.testUtils.setupTestEnvironment(page);
await utils.chatPanel.openChatPanel(page);

View File

@@ -3,6 +3,8 @@ import { expect } from '@playwright/test';
import { test } from '../base/base-test';
test.describe('AIAction/MakeItReal', () => {
test.describe.configure({ timeout: 180000 });
test.beforeEach(async ({ loggedInPage: page, utils }) => {
await utils.testUtils.setupTestEnvironment(page);
await utils.chatPanel.openChatPanel(page);