Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fa4664dfa5 | |||
| 4122735bba | |||
| 1cab66b898 | |||
| d5c994708c | |||
| 4c76a5f1d2 | |||
| e8c8ab0d78 | |||
| 9705fb964e |
@@ -24,6 +24,13 @@ Before attempting to push or open a PR, verify that the necessary tools are avai
|
|||||||
- Check that `gh` CLI is installed and authenticated (`gh auth status`). If not available, stop and ask the user to install and authenticate GitHub CLI first.
|
- Check that `gh` CLI is installed and authenticated (`gh auth status`). If not available, stop and ask the user to install and authenticate GitHub CLI first.
|
||||||
- If the workflow uses MCP tools for GitHub operations, verify the MCP server is accessible.
|
- If the workflow uses MCP tools for GitHub operations, verify the MCP server is accessible.
|
||||||
|
|
||||||
|
## Shell Permissions
|
||||||
|
|
||||||
|
`gh` reads credentials from the OS keyring. A sandboxed shell cannot reach the keyring and will report a false auth failure.
|
||||||
|
|
||||||
|
- Run every `gh` command (`gh auth status`, `gh pr create`, `gh pr view`, …) and every `git push` / `git fetch` that talks to GitHub with full permissions on the **first** attempt (`required_permissions: ["all"]` for the Shell tool). Do not probe these in the sandbox first.
|
||||||
|
- Local read-only git inspection (`git status`, `git diff`, `git log`, `git branch`) may stay sandboxed.
|
||||||
|
|
||||||
## Procedure
|
## Procedure
|
||||||
|
|
||||||
1. **Read contribution rules.** Read `CONTRIBUTING.md` and any package-level instructions (e.g. `packages/*/AGENTS.md`) relevant to the changed files.
|
1. **Read contribution rules.** Read `CONTRIBUTING.md` and any package-level instructions (e.g. `packages/*/AGENTS.md`) relevant to the changed files.
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ name: Deploy Website
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ permissions:
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ jobs:
|
|||||||
node-version: 24
|
node-version: 24
|
||||||
registry-url: 'https://registry.npmjs.org'
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
# Ensure npm 11.5.1 or later is installed
|
# Stay on the latest npm 11 release
|
||||||
- name: Update npm
|
- name: Update npm
|
||||||
run: npm install -g npm@latest
|
run: npm install -g npm@11
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ const pageInfo = await this.pageController.getPageInfo()
|
|||||||
- **Location**: co-located, `src/foo.test.ts` next to `src/foo.ts`
|
- **Location**: co-located, `src/foo.test.ts` next to `src/foo.ts`
|
||||||
- **Coverage today**: `packages/llms` only — other packages will follow incrementally
|
- **Coverage today**: `packages/llms` only — other packages will follow incrementally
|
||||||
- **Adding tests to a new package**: create `vitest.config.ts` in the package and add a `"test": "vitest run"` script. Root `npm test` and `node scripts/ci.js` pick it up through npm workspaces.
|
- **Adding tests to a new package**: create `vitest.config.ts` in the package and add a `"test": "vitest run"` script. Root `npm test` and `node scripts/ci.js` pick it up through npm workspaces.
|
||||||
|
- **Live tests** (hit real external APIs, slow/costly): name them `*.live.test.ts`, exclude them from the package's `test` script, and expose them via a `test:live` script. Root `npm run test:live` runs all of them; they never run in `npm test` or CI. Template: `packages/llms`.
|
||||||
- **Template**: See @page-agent/llms
|
- **Template**: See @page-agent/llms
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -56,19 +56,18 @@ Fastest way to try PageAgent with our free Demo LLM:
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script
|
<script
|
||||||
src="https://cdn.jsdelivr.net/npm/page-agent@1.12.0/dist/iife/page-agent.demo.js"
|
src="https://cdn.jsdelivr.net/npm/page-agent@1.12.1/dist/iife/page-agent.demo.js"
|
||||||
crossorigin="anonymous"
|
crossorigin="anonymous"
|
||||||
></script>
|
></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
> **⚠️ For technical evaluation only.** This demo CDN uses our free [testing LLM API](https://alibaba.github.io/page-agent/docs/features/models#free-testing-api). By using it, you agree to its [terms](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md).
|
> **⚠️ For technical evaluation only.** This demo CDN uses our free [testing LLM API](https://alibaba.github.io/page-agent/docs/features/models#free-testing-api). By using it, you agree to its [terms](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md).
|
||||||
|
> Add `?autoInit=false` to load the script without creating the demo agent automatically. You can then instantiate it with `new window.PageAgent(...)`.
|
||||||
|
|
||||||
| Mirrors | URL |
|
| Mirrors | URL |
|
||||||
| ------- | ----------------------------------------------------------------------------------- |
|
| ------- | ----------------------------------------------------------------------------------- |
|
||||||
| Global | https://cdn.jsdelivr.net/npm/page-agent@1.12.0/dist/iife/page-agent.demo.js |
|
| Global | https://cdn.jsdelivr.net/npm/page-agent@1.12.1/dist/iife/page-agent.demo.js |
|
||||||
| China | https://registry.npmmirror.com/page-agent/1.12.0/files/dist/iife/page-agent.demo.js |
|
| China | https://registry.npmmirror.com/page-agent/1.12.1/files/dist/iife/page-agent.demo.js |
|
||||||
|
|
||||||
Add `?autoInit=false` to load the script without creating the demo agent automatically. You can then instantiate it with `new window.PageAgent(...)`.
|
|
||||||
|
|
||||||
### NPM Installation
|
### NPM Installation
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -55,19 +55,18 @@
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<script
|
<script
|
||||||
src="https://cdn.jsdelivr.net/npm/page-agent@1.12.0/dist/iife/page-agent.demo.js"
|
src="https://cdn.jsdelivr.net/npm/page-agent@1.12.1/dist/iife/page-agent.demo.js"
|
||||||
crossorigin="anonymous"
|
crossorigin="anonymous"
|
||||||
></script>
|
></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
> **⚠️ 仅用于技术评估。** 该 Demo CDN 使用了免费的[测试 LLM API](https://alibaba.github.io/page-agent/docs/features/models#free-testing-api),使用即表示您同意其[条款](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md)。
|
> **⚠️ 仅用于技术评估。** 该 Demo CDN 使用了免费的[测试 LLM API](https://alibaba.github.io/page-agent/docs/features/models#free-testing-api),使用即表示您同意其[条款](https://github.com/alibaba/page-agent/blob/main/docs/terms-and-privacy.md)。
|
||||||
|
> 在 URL 后添加 `?autoInit=false` 可只加载脚本,不自动创建 Demo Agent;之后可通过 `new window.PageAgent(...)` 手动初始化。
|
||||||
|
|
||||||
| Mirrors | URL |
|
| Mirrors | URL |
|
||||||
| ------- | ----------------------------------------------------------------------------------- |
|
| ------- | ----------------------------------------------------------------------------------- |
|
||||||
| Global | https://cdn.jsdelivr.net/npm/page-agent@1.12.0/dist/iife/page-agent.demo.js |
|
| Global | https://cdn.jsdelivr.net/npm/page-agent@1.12.1/dist/iife/page-agent.demo.js |
|
||||||
| China | https://registry.npmmirror.com/page-agent/1.12.0/files/dist/iife/page-agent.demo.js |
|
| China | https://registry.npmmirror.com/page-agent/1.12.1/files/dist/iife/page-agent.demo.js |
|
||||||
|
|
||||||
在 URL 后添加 `?autoInit=false` 可只加载脚本,不自动创建 Demo Agent;之后可通过 `new window.PageAgent(...)` 手动初始化。
|
|
||||||
|
|
||||||
### NPM 安装
|
### NPM 安装
|
||||||
|
|
||||||
|
|||||||
Generated
+346
-385
File diff suppressed because it is too large
Load Diff
+7
-6
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "root",
|
"name": "root",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/page-controller",
|
"packages/page-controller",
|
||||||
@@ -37,20 +37,21 @@
|
|||||||
"postpublish": "npm run postpublish --workspaces --if-present",
|
"postpublish": "npm run postpublish --workspaces --if-present",
|
||||||
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p packages/extension/tsconfig.json",
|
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p packages/extension/tsconfig.json",
|
||||||
"test": "npm test --workspaces --if-present",
|
"test": "npm test --workspaces --if-present",
|
||||||
|
"test:live": "npm run test:live --workspaces --if-present",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"ci": "node scripts/ci.js",
|
"ci": "node scripts/ci.js",
|
||||||
"cleanup": "rm -rf packages/*/dist && rm -rf packages/*/.output",
|
"cleanup": "rm -rf packages/*/dist && rm -rf packages/*/.output",
|
||||||
"prepare": "husky || true"
|
"prepare": "husky || true"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@commitlint/cli": "^21.2.0",
|
"@commitlint/cli": "^21.2.1",
|
||||||
"@commitlint/config-conventional": "^21.2.0",
|
"@commitlint/config-conventional": "^21.2.0",
|
||||||
"@eslint-react/eslint-plugin": "^5.11.2",
|
"@eslint-react/eslint-plugin": "^5.13.2",
|
||||||
"@eslint/js": "^10.0.1",
|
"@eslint/js": "^10.0.1",
|
||||||
"@microsoft/api-extractor": "^7.58.9",
|
"@microsoft/api-extractor": "^7.58.9",
|
||||||
"@tailwindcss/vite": "^4.3.2",
|
"@tailwindcss/vite": "^4.3.2",
|
||||||
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
||||||
"@types/node": "^26.1.0",
|
"@types/node": "^26.1.1",
|
||||||
"@vitejs/plugin-react": "^6.0.3",
|
"@vitejs/plugin-react": "^6.0.3",
|
||||||
"chalk": "^5.6.2",
|
"chalk": "^5.6.2",
|
||||||
"concurrently": "^10.0.3",
|
"concurrently": "^10.0.3",
|
||||||
@@ -60,11 +61,11 @@
|
|||||||
"happy-dom": "^20.10.6",
|
"happy-dom": "^20.10.6",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"lint-staged": "^17.0.8",
|
"lint-staged": "^17.0.8",
|
||||||
"prettier": "^3.9.4",
|
"prettier": "^3.9.5",
|
||||||
"typescript": "^6.0.3",
|
"typescript": "^6.0.3",
|
||||||
"typescript-eslint": "^8.63.0",
|
"typescript-eslint": "^8.63.0",
|
||||||
"unplugin-dts": "^1.0.3",
|
"unplugin-dts": "^1.0.3",
|
||||||
"vite": "^8.1.3",
|
"vite": "^8.1.4",
|
||||||
"vite-plugin-css-injected-by-js": "^5.0.1",
|
"vite-plugin-css-injected-by-js": "^5.0.1",
|
||||||
"vitest": "^4.1.10"
|
"vitest": "^4.1.10"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/core",
|
"name": "@page-agent/core",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./src/PageAgentCore.ts",
|
"main": "./src/PageAgentCore.ts",
|
||||||
"types": "./src/PageAgentCore.ts",
|
"types": "./src/PageAgentCore.ts",
|
||||||
@@ -55,8 +55,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chalk": "^5.6.2",
|
"chalk": "^5.6.2",
|
||||||
"@page-agent/llms": "1.12.0",
|
"@page-agent/llms": "1.12.1",
|
||||||
"@page-agent/page-controller": "1.12.0"
|
"@page-agent/page-controller": "1.12.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"zod": "^3.25.0 || ^4.0.0"
|
"zod": "^3.25.0 || ^4.0.0"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/ext",
|
"name": "@page-agent/ext",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "wxt",
|
"dev": "wxt",
|
||||||
@@ -10,12 +10,12 @@
|
|||||||
"postinstall": "wxt prepare"
|
"postinstall": "wxt prepare"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@radix-ui/react-hover-card": "^1.1.18",
|
"@radix-ui/react-hover-card": "^1.1.19",
|
||||||
"@radix-ui/react-icons": "^1.3.2",
|
"@radix-ui/react-icons": "^1.3.2",
|
||||||
"@radix-ui/react-label": "^2.1.11",
|
"@radix-ui/react-label": "^2.1.11",
|
||||||
"@radix-ui/react-separator": "^1.1.11",
|
"@radix-ui/react-separator": "^1.1.11",
|
||||||
"@radix-ui/react-slot": "^1.3.0",
|
"@radix-ui/react-slot": "^1.3.0",
|
||||||
"@radix-ui/react-switch": "^1.3.2",
|
"@radix-ui/react-switch": "^1.3.3",
|
||||||
"@tailwindcss/vite": "^4.3.2",
|
"@tailwindcss/vite": "^4.3.2",
|
||||||
"@types/chrome": "^0.2.2",
|
"@types/chrome": "^0.2.2",
|
||||||
"@types/react": "^19.2.17",
|
"@types/react": "^19.2.17",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"idb": "^8.0.3",
|
"idb": "^8.0.3",
|
||||||
"lucide-react": "^1.23.0",
|
"lucide-react": "^1.24.0",
|
||||||
"motion": "^12.42.2",
|
"motion": "^12.42.2",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"react": "^19.2.7",
|
"react": "^19.2.7",
|
||||||
@@ -38,10 +38,10 @@
|
|||||||
"wxt": "^0.20.27"
|
"wxt": "^0.20.27"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@page-agent/core": "1.12.0",
|
"@page-agent/core": "1.12.1",
|
||||||
"@page-agent/llms": "1.12.0",
|
"@page-agent/llms": "1.12.1",
|
||||||
"@page-agent/page-controller": "1.12.0",
|
"@page-agent/page-controller": "1.12.1",
|
||||||
"@page-agent/ui": "1.12.0",
|
"@page-agent/ui": "1.12.1",
|
||||||
"ai-motion": "^0.4.8",
|
"ai-motion": "^0.4.8",
|
||||||
"chalk": "^5.6.2"
|
"chalk": "^5.6.2"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/llms",
|
"name": "@page-agent/llms",
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./src/index.ts",
|
"main": "./src/index.ts",
|
||||||
"types": "./src/index.ts",
|
"types": "./src/index.ts",
|
||||||
@@ -43,7 +43,8 @@
|
|||||||
"homepage": "https://alibaba.github.io/page-agent/",
|
"homepage": "https://alibaba.github.io/page-agent/",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"test": "vitest run",
|
"test": "vitest run --project llms",
|
||||||
|
"test:live": "vitest run --project llms:live",
|
||||||
"prepublishOnly": "node ../../scripts/pre-publish.js",
|
"prepublishOnly": "node ../../scripts/pre-publish.js",
|
||||||
"postpublish": "node ../../scripts/post-publish.js"
|
"postpublish": "node ../../scripts/post-publish.js"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,9 +10,10 @@
|
|||||||
* Tests `OpenAIClient` directly (not the `LLM` retry wrapper), so a failure
|
* Tests `OpenAIClient` directly (not the `LLM` retry wrapper), so a failure
|
||||||
* always reflects the very first request/response — no retry can mask it.
|
* always reflects the very first request/response — no retry can mask it.
|
||||||
*
|
*
|
||||||
* Each provider's tests skip (not fail) when its `TESTING_*_KEY` env var is
|
* Per the `*.live.test.ts` convention this suite is excluded from `npm test`
|
||||||
* absent, so this stays CI-safe. To actually run these, put keys in the
|
* (slow, costs tokens) — run it manually with `npm run test:live`. Each
|
||||||
* repo-root `.env`:
|
* provider's tests skip (not fail) when its `TESTING_*_KEY` env var is
|
||||||
|
* absent. Keys live in the repo-root `.env`:
|
||||||
*
|
*
|
||||||
* TESTING_OPENROUTER_KEY=...
|
* TESTING_OPENROUTER_KEY=...
|
||||||
* TESTING_DEEPSEEK_KEY=...
|
* TESTING_DEEPSEEK_KEY=...
|
||||||
@@ -50,6 +51,9 @@ const MODEL_GROUPS: Record<string, string[]> = {
|
|||||||
'qwen3-max',
|
'qwen3-max',
|
||||||
],
|
],
|
||||||
OpenAI: [
|
OpenAI: [
|
||||||
|
'gpt-5.6-sol',
|
||||||
|
'gpt-5.6-terra',
|
||||||
|
'gpt-5.6-luna',
|
||||||
'gpt-5.5',
|
'gpt-5.5',
|
||||||
'gpt-5.4',
|
'gpt-5.4',
|
||||||
'gpt-5.4-mini',
|
'gpt-5.4-mini',
|
||||||
@@ -79,7 +83,8 @@ const MODEL_GROUPS: Record<string, string[]> = {
|
|||||||
'claude-haiku-4-5',
|
'claude-haiku-4-5',
|
||||||
],
|
],
|
||||||
MiniMax: ['MiniMax-M3', 'MiniMax-M2.7', 'MiniMax-M2.5'],
|
MiniMax: ['MiniMax-M3', 'MiniMax-M2.7', 'MiniMax-M2.5'],
|
||||||
xAI: ['grok-4.3', 'grok-build-0.1'],
|
xAI: ['grok-4.5', 'grok-4.3', 'grok-build-0.1'],
|
||||||
|
Tencent: ['hy3'],
|
||||||
MoonshotAI: ['kimi-k2.7-code', 'kimi-k2.6', 'kimi-k2.5'],
|
MoonshotAI: ['kimi-k2.7-code', 'kimi-k2.6', 'kimi-k2.5'],
|
||||||
'Z.AI': ['glm-5.2', 'glm-5.1', 'glm-5', 'glm-4.7'],
|
'Z.AI': ['glm-5.2', 'glm-5.1', 'glm-5', 'glm-4.7'],
|
||||||
}
|
}
|
||||||
@@ -97,6 +102,7 @@ const OPENROUTER_VENDOR_SLUG: Record<string, string> = {
|
|||||||
Anthropic: 'anthropic',
|
Anthropic: 'anthropic',
|
||||||
MiniMax: 'minimax',
|
MiniMax: 'minimax',
|
||||||
xAI: 'x-ai',
|
xAI: 'x-ai',
|
||||||
|
Tencent: 'tencent',
|
||||||
MoonshotAI: 'moonshotai',
|
MoonshotAI: 'moonshotai',
|
||||||
'Z.AI': 'z-ai',
|
'Z.AI': 'z-ai',
|
||||||
}
|
}
|
||||||
@@ -106,7 +112,7 @@ const OPENROUTER_VENDOR_SLUG: Record<string, string> = {
|
|||||||
* `<vendor-slug>/<lowercased-name>` heuristic — dated snapshots, "-preview"
|
* `<vendor-slug>/<lowercased-name>` heuristic — dated snapshots, "-preview"
|
||||||
* suffixes, "v"-prefixed versions, or dots instead of hyphens in the
|
* suffixes, "v"-prefixed versions, or dots instead of hyphens in the
|
||||||
* version number. Verified against `GET https://openrouter.ai/api/v1/models`
|
* version number. Verified against `GET https://openrouter.ai/api/v1/models`
|
||||||
* on 2026-07-03; re-check when models are added to `MODEL_GROUPS`.
|
* on 2026-07-10; re-check when models are added to `MODEL_GROUPS`.
|
||||||
*/
|
*/
|
||||||
const OPENROUTER_ID_OVERRIDES: Record<string, string> = {
|
const OPENROUTER_ID_OVERRIDES: Record<string, string> = {
|
||||||
'qwen3.6-max': 'qwen/qwen3.6-max-preview',
|
'qwen3.6-max': 'qwen/qwen3.6-max-preview',
|
||||||
@@ -62,17 +62,26 @@ export function modelPatch(body: Record<string, any>, baseURL?: string) {
|
|||||||
if (modelName.startsWith('gpt')) {
|
if (modelName.startsWith('gpt')) {
|
||||||
if (modelName.startsWith('gpt-5')) {
|
if (modelName.startsWith('gpt-5')) {
|
||||||
body.verbosity = 'low'
|
body.verbosity = 'low'
|
||||||
|
|
||||||
// gpt-5 gpt-5-mini gpt-5-nano only supports "minimal";
|
|
||||||
// 5.1+ supports "none".
|
|
||||||
body.reasoning_effort = /^gpt-5(-|$)/.test(modelName) ? 'minimal' : 'none'
|
|
||||||
debug(`Patch GPT-5: verbosity=low, reasoning_effort=${body.reasoning_effort}`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Since gpt-5.4, /chat/completions rejects any explicit reasoning_effort
|
||||||
|
// when function tools are present. Newer models are expected to follow.
|
||||||
|
// - gpt-5.1 / gpt-5.2 can fully disable reasoning
|
||||||
|
// - gpt-5 / -mini / -nano bottom out at "minimal"
|
||||||
|
// - everything else (gpt-4.x, chat-latest, gpt-5.4+) must not receive it
|
||||||
if (modelName.includes('chat-latest')) {
|
if (modelName.includes('chat-latest')) {
|
||||||
debug('Omitting reasoning_effort and temperature for chat-latest')
|
debug('Patch chat-latest: omit reasoning_effort and temperature')
|
||||||
delete body.reasoning_effort
|
delete body.reasoning_effort
|
||||||
delete body.temperature
|
delete body.temperature
|
||||||
|
} else if (/^gpt-5[12](-|$)/.test(modelName)) {
|
||||||
|
debug('Patch GPT-5.1/5.2: reasoning_effort=none')
|
||||||
|
body.reasoning_effort = 'none'
|
||||||
|
} else if (/^gpt-5(-|$)/.test(modelName)) {
|
||||||
|
debug('Patch GPT-5: reasoning_effort=minimal')
|
||||||
|
body.reasoning_effort = 'minimal'
|
||||||
|
} else {
|
||||||
|
debug('Patch GPT: omit reasoning_effort')
|
||||||
|
delete body.reasoning_effort
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,6 +134,12 @@ export function modelPatch(body: Record<string, any>, baseURL?: string) {
|
|||||||
body.thinking = { type: 'disabled' }
|
body.thinking = { type: 'disabled' }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (modelName.startsWith('hy')) {
|
||||||
|
debug('Patch Hunyuan: disable thinking, reasoning_effort=low')
|
||||||
|
body.thinking = { type: 'disabled' }
|
||||||
|
body.reasoning_effort = 'low'
|
||||||
|
}
|
||||||
|
|
||||||
if (modelName.startsWith('grok')) {
|
if (modelName.startsWith('grok')) {
|
||||||
if (/^grok-4-?3/.test(modelName)) {
|
if (/^grok-4-?3/.test(modelName)) {
|
||||||
debug('Patch Grok 4.3: reasoning_effort=none')
|
debug('Patch Grok 4.3: reasoning_effort=none')
|
||||||
|
|||||||
@@ -1,12 +1,27 @@
|
|||||||
import { defineConfig } from 'vitest/config'
|
import { configDefaults, defineConfig } from 'vitest/config'
|
||||||
|
|
||||||
|
// Convention: `*.live.test.ts` hits real provider APIs (slow, costs tokens)
|
||||||
|
// and only runs via `npm run test:live`. Everything else runs on `npm test`.
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
test: {
|
test: {
|
||||||
name: 'llms',
|
|
||||||
include: ['src/**/*.test.ts'],
|
|
||||||
// Keep live provider suites under OpenRouter's ~20 req/min free-route cap.
|
|
||||||
maxConcurrency: 2,
|
|
||||||
// Suppress console output from passing tests; failed tests still get their logs.
|
// Suppress console output from passing tests; failed tests still get their logs.
|
||||||
silent: 'passed-only',
|
silent: 'passed-only',
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
test: {
|
||||||
|
name: 'llms',
|
||||||
|
include: ['src/**/*.test.ts'],
|
||||||
|
exclude: [...configDefaults.exclude, 'src/**/*.live.test.ts'],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: {
|
||||||
|
name: 'llms:live',
|
||||||
|
include: ['src/**/*.live.test.ts'],
|
||||||
|
// Keep live provider suites under OpenRouter's ~20 req/min free-route cap.
|
||||||
|
maxConcurrency: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/mcp",
|
"name": "@page-agent/mcp",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"bin": {
|
"bin": {
|
||||||
"page-agent-mcp": "src/index.js"
|
"page-agent-mcp": "src/index.js"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "page-agent",
|
"name": "page-agent",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./src/PageAgent.ts",
|
"main": "./src/PageAgent.ts",
|
||||||
"types": "./src/PageAgent.ts",
|
"types": "./src/PageAgent.ts",
|
||||||
@@ -54,10 +54,10 @@
|
|||||||
"postpublish": "node ../../scripts/post-publish.js"
|
"postpublish": "node ../../scripts/post-publish.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@page-agent/core": "1.12.0",
|
"@page-agent/core": "1.12.1",
|
||||||
"@page-agent/llms": "1.12.0",
|
"@page-agent/llms": "1.12.1",
|
||||||
"@page-agent/page-controller": "1.12.0",
|
"@page-agent/page-controller": "1.12.1",
|
||||||
"@page-agent/ui": "1.12.0",
|
"@page-agent/ui": "1.12.1",
|
||||||
"chalk": "^5.6.2"
|
"chalk": "^5.6.2"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/page-controller",
|
"name": "@page-agent/page-controller",
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./src/PageController.ts",
|
"main": "./src/PageController.ts",
|
||||||
"types": "./src/PageController.ts",
|
"types": "./src/PageController.ts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/ui",
|
"name": "@page-agent/ui",
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./src/index.ts",
|
"main": "./src/index.ts",
|
||||||
"types": "./src/index.ts",
|
"types": "./src/index.ts",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@page-agent/website",
|
"name": "@page-agent/website",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.12.0",
|
"version": "1.12.1",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite --host 0.0.0.0",
|
"dev": "vite --host 0.0.0.0",
|
||||||
@@ -12,13 +12,13 @@
|
|||||||
"@radix-ui/react-icons": "^1.3.2",
|
"@radix-ui/react-icons": "^1.3.2",
|
||||||
"@radix-ui/react-separator": "^1.1.11",
|
"@radix-ui/react-separator": "^1.1.11",
|
||||||
"@radix-ui/react-slot": "^1.3.0",
|
"@radix-ui/react-slot": "^1.3.0",
|
||||||
"@radix-ui/react-switch": "^1.3.2",
|
"@radix-ui/react-switch": "^1.3.3",
|
||||||
"@radix-ui/react-tooltip": "^1.2.11",
|
"@radix-ui/react-tooltip": "^1.2.12",
|
||||||
"@types/react": "^19.2.17",
|
"@types/react": "^19.2.17",
|
||||||
"@types/react-dom": "^19.2.3",
|
"@types/react-dom": "^19.2.3",
|
||||||
"class-variance-authority": "^0.7.1",
|
"class-variance-authority": "^0.7.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"lucide-react": "^1.23.0",
|
"lucide-react": "^1.24.0",
|
||||||
"motion": "^12.42.2",
|
"motion": "^12.42.2",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
"react": "^19.2.7",
|
"react": "^19.2.7",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
// Demo build (auto-init with demo LLM, for quick testing)
|
// Demo build (auto-init with demo LLM, for quick testing)
|
||||||
export const CDN_DEMO_URL =
|
export const CDN_DEMO_URL =
|
||||||
'https://cdn.jsdelivr.net/npm/page-agent@1.12.0/dist/iife/page-agent.demo.js'
|
'https://cdn.jsdelivr.net/npm/page-agent@1.12.1/dist/iife/page-agent.demo.js'
|
||||||
export const CDN_DEMO_CN_URL =
|
export const CDN_DEMO_CN_URL =
|
||||||
'https://registry.npmmirror.com/page-agent/1.12.0/files/dist/iife/page-agent.demo.js'
|
'https://registry.npmmirror.com/page-agent/1.12.1/files/dist/iife/page-agent.demo.js'
|
||||||
|
|
||||||
// Demo LLM for website testing (homepage quick trial uses flash)
|
// Demo LLM for website testing (homepage quick trial uses flash)
|
||||||
export const DEMO_MODEL = 'qwen3.5-flash'
|
export const DEMO_MODEL = 'qwen3.5-flash'
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ const MODEL_GROUPS: Record<string, string[]> = {
|
|||||||
// 'qwen3-coder-next', // low success rate
|
// 'qwen3-coder-next', // low success rate
|
||||||
],
|
],
|
||||||
OpenAI: [
|
OpenAI: [
|
||||||
|
'gpt-5.6-sol',
|
||||||
|
'gpt-5.6-terra',
|
||||||
|
'gpt-5.6-luna',
|
||||||
'gpt-5.5',
|
'gpt-5.5',
|
||||||
'gpt-5.4',
|
'gpt-5.4',
|
||||||
'gpt-5.4-mini',
|
'gpt-5.4-mini',
|
||||||
@@ -63,7 +66,8 @@ const MODEL_GROUPS: Record<string, string[]> = {
|
|||||||
'MiniMax-M2.7',
|
'MiniMax-M2.7',
|
||||||
'MiniMax-M2.5',
|
'MiniMax-M2.5',
|
||||||
],
|
],
|
||||||
xAI: ['grok-4.3', 'grok-build-0.1'],
|
xAI: ['grok-4.5', 'grok-4.3', 'grok-build-0.1'],
|
||||||
|
Tencent: ['hy3'],
|
||||||
MoonshotAI: ['kimi-k2.7-code', 'kimi-k2.6', 'kimi-k2.5'],
|
MoonshotAI: ['kimi-k2.7-code', 'kimi-k2.6', 'kimi-k2.5'],
|
||||||
'Z.AI': ['glm-5.2', 'glm-5.1', 'glm-5', 'glm-4.7'],
|
'Z.AI': ['glm-5.2', 'glm-5.1', 'glm-5', 'glm-4.7'],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user