diff --git a/.env.example b/.env.example index 5e9ac15..ef935a5 100644 --- a/.env.example +++ b/.env.example @@ -19,6 +19,10 @@ ARTEMIS_TOOL_FALLBACK_MAX_NO_PROGRESS_ATTEMPTS=3 # default 表示不发送思考强度参数;接口不支持所选值时明确报错。 OPENAI_REASONING_EFFORT=high +# 探索独立默认值;网页已保存的探索配置优先,已创建会话保留快照。 +ARTEMIS_EXPLORATION_MODEL=gpt-6.1-terra +ARTEMIS_EXPLORATION_REASONING_EFFORT=high + # 1 跳过本次网页启动的 Codex MCP 与官方 artemis-use Skill 同步;默认自动安装/更新。 ARTEMIS_SKIP_CODEX_SYNC=0 diff --git a/AGENTS.md b/AGENTS.md index 6f7bff1..24d4ff9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -54,7 +54,7 @@ Windows 首次安装使用 `start.bat`,国内镜像使用 `start-cn.bat`。启 - 历史压缩、视觉摘要与工具上下文调整须保留关键文件回执和来源,维护稳定的多轮前缀;缓存率使用实际用量加权统计,不把缓存输入当作消失的 token,也不承诺固定收益。 - 设备动作回放已移除;只读历史步骤、截图和上下文回忆仍保留,不因 replay 命名误删这些能力。 - 密钥仅通过网页或环境配置写入,读取配置不得回显;MCP 不接受密钥。全局配置修改影响后续任务,已保存配置优先于新安装默认值。 -- 新安装普通任务默认 `gpt-6-luna / high`,探索默认 `gpt-6.1-sol / high`;请求超时 300 秒、失败后重试 5 次、间隔 10 秒,视频分析与普通录屏关闭。接口不支持思考强度时明确报错,不静默降级。 +- 新安装普通任务默认 `gpt-6-luna / high`,探索默认 `gpt-6.1-terra / high`;请求超时 300 秒、失败后重试 5 次、间隔 10 秒,视频分析与普通录屏关闭。接口不支持思考强度时明确报错,不静默降级。 - 业务环境恢复由任务提示词提出,不新增默认业务回滚流程;连接、录像、子进程和资源锁的运行时收尾仍然必需。 ## Conventions diff --git a/DESIGN.md b/DESIGN.md index 3127ed3..437837a 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -94,7 +94,7 @@ Flash 的最终 AI 判定与分析独立配置,默认关闭;首页功能配 收藏保存独立模板与执行配置,用例复跑固定版本;删除原任务不破坏已保存模板。历史与导出的有效结论合并人工复验,不能用新裁定改写旧证据。 -普通任务新安装默认 `gpt-6-luna / high`,探索单独使用 `gpt-6.1-sol / high`,保留已有配置。上下文参照上限 300k、默认历史压缩预算 80k,均不表示整条任务累计 token 限额。优化稳定前缀时保留关键文件回执、路径、校验和来源;费用收益依实际网关用量及计价判断。 +普通任务新安装默认 `gpt-6-luna / high`,探索单独使用 `gpt-6.1-terra / high`,保留已有配置。上下文参照上限 300k、默认历史压缩预算 80k,均不表示整条任务累计 token 限额。优化稳定前缀时保留关键文件回执、路径、校验和来源;费用收益依实际网关用量及计价判断。 普通 Pro 的计划全部完成后,执行循环返回既有收尾和最终验收流程,不要求额外设备动作;有新指导或验收反馈时先处理反馈,探索模式仍须交付完整报告。完成计划不等于测试通过。Operator 写入计划时拒绝新增或增加同名顶层里程碑,撤销该次写入并返回工具错误;局部替换不得夹带目标范围外的里程碑,已有重复项可继续整理,确需重复的阶段使用不同名称。 diff --git a/README.md b/README.md index c5e41d8..d5b5079 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ## 主要功能 - **自然语言任务**:Flash 适合明确的操作流程,Pro 适合需要计划、分支探索和验证的任务。 -- **交互探索**:边执行边交流,也可录制人工示范;探索成功后生成一个可编辑、复跑的用例。默认使用独立的 `gpt-6.1-sol / high` 配置,超时暂停并保留进度。见 [探索模式](docs/exploration-mode.md)。 +- **交互探索**:边执行边交流,也可录制人工示范;探索成功后生成一个可编辑、复跑的用例。默认使用独立的 `gpt-6.1-terra / high` 配置,超时暂停并保留进度。见 [探索模式](docs/exploration-mode.md)。 - **插件扩展**:在插件市场安装并启用电脑控制等能力,AI 在安卓任务中按需使用;手机、电脑的步骤与证据统一留档。见 [插件与跨端任务](docs/plugins.md)。 - **可保存的模型配置**:支持自定义接口、模型、思考强度和超时重试,以及视频分析与录屏开关。 - **批量测试**:按新版 Excel 模板导入提示词,每项可独立指定模型、模式和参数;任务可暂停、补充指导并继续。 @@ -57,7 +57,7 @@ cd Artemis-Eapil 3. 输入任务目标,选择 Flash、Pro 或探索后执行;仅测试电脑时勾选输入区的“仅 PC”,无需手机或模拟器在线,但需已启用并授权的电脑观察插件。在工作区查看步骤、截图和结果。流程尚不明确时,选择探索并随时交流。 4. 通过“报告与批量”导出报告或导入 Excel 用例;任务队列支持历史搜索。 -预设模型为 `gpt-6-luna`、`gpt-6.1-sol`、`gpt-6-astra`、`mimo-v2.6-pro`,主模型与兜底模型均可选择预设或填写自定义名称。新安装默认模型是 `gpt-6-luna`,思考强度默认 `high`(最高可选 `max`),单次请求超时 **300 秒**,失败后最多重试 **5 次**,间隔 **10 秒**。遇到 429 请求过多时改为每次等待 **60 秒**。连续 3 次没有有效工具调用时,本步骤改用 `gpt-6-luna`(high),兜底模型最多再尝试 3 次;下一步恢复首选模型。视频分析与录屏默认关闭。模型及思考参数是否可用取决于所配置网关;不支持时会明确报错。 +预设模型为 `gpt-6-luna`、`gpt-6.1-terra`、`gpt-6.1-sol`、`gpt-6-astra`、`mimo-v2.6-pro`,主模型与兜底模型均可选择预设或填写自定义名称。新安装默认模型是 `gpt-6-luna`,思考强度默认 `high`(最高可选 `max`),单次请求超时 **300 秒**,失败后最多重试 **5 次**,间隔 **10 秒**。遇到 429 请求过多时改为每次等待 **60 秒**。连续 3 次没有有效工具调用时,本步骤改用 `gpt-6-luna`(high),兜底模型最多再尝试 3 次;下一步恢复首选模型。视频分析与录屏默认关闭。模型及思考参数是否可用取决于所配置网关;不支持时会明确报错。 也可在项目 `.env` 中设置 `OPENAI_API_KEY`、`OPENAI_BASE_URL` 和 `OPENAI_MODEL`,其他参数见 [.env.example](.env.example)。新安装默认接口地址为 `https://api-n-cd.playones.com/v1`;已保存的地址不变。直接编辑环境文件后需重启相应服务。不要提交自己的密钥。 diff --git a/apps/admin_console/services/model_settings_service.py b/apps/admin_console/services/model_settings_service.py index 58b96bd..f241740 100644 --- a/apps/admin_console/services/model_settings_service.py +++ b/apps/admin_console/services/model_settings_service.py @@ -81,6 +81,7 @@ def get_model_settings() -> dict: "reasoning_effort": settings.OPENAI_REASONING_EFFORT, "model_presets": [ "gpt-6-luna", + "gpt-6.1-terra", "gpt-6.1-sol", "gpt-6-astra", "mimo-v2.6-pro", diff --git a/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.spec.ts b/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.spec.ts index 4076411..819052e 100644 --- a/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.spec.ts +++ b/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.spec.ts @@ -9,7 +9,7 @@ import { AgentStreamComponent } from '../agent-stream/agent-stream.component'; @Component({selector:'app-agent-stream',standalone:true,template:''}) class StreamStub {conversationMessages=input([]);demonstrations=input([]);pendingQuestion=input('');useRecommendation=output();} describe('Exploration conversation', () => { - const config = {model: 'gpt-6.1-sol', reasoning_effort: 'high', timeout_seconds: 1800, demonstration_timeout_seconds: 900, demonstration_warning_seconds: 60}; + const config = {model: 'gpt-6.1-terra', reasoning_effort: 'high', timeout_seconds: 1800, demonstration_timeout_seconds: 900, demonstration_warning_seconds: 60}; let current: ExplorationSession; let api: any; beforeEach(() => { diff --git a/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.ts b/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.ts index 9e82916..34f641c 100644 --- a/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.ts +++ b/apps/showcase_ui/src/app/components/exploration-panel/exploration-panel.component.ts @@ -44,7 +44,7 @@ export class ExplorationPanelComponent { private followsLatest = true; private requests = this.api.requests; private displayedId: string | null = null; - readonly models = ['gpt-6.1-sol', 'gpt-6-astra', 'gpt-6-luna', 'mimo-v2.6-pro', 'mimo-v2.6-flash']; + readonly models = ['gpt-6.1-terra', 'gpt-6.1-sol', 'gpt-6-astra', 'gpt-6-luna', 'mimo-v2.6-pro', 'mimo-v2.6-flash']; readonly efforts = ['default', 'none', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max']; constructor() { diff --git a/apps/showcase_ui/src/app/components/featured-tasks/featured-tasks.component.spec.ts b/apps/showcase_ui/src/app/components/featured-tasks/featured-tasks.component.spec.ts index 1c5b2cb..b718f82 100644 --- a/apps/showcase_ui/src/app/components/featured-tasks/featured-tasks.component.spec.ts +++ b/apps/showcase_ui/src/app/components/featured-tasks/featured-tasks.component.spec.ts @@ -35,7 +35,7 @@ describe('Featured tasks',()=>{ expect(fixture.nativeElement.textContent).not.toContain('旧任务部分配置缺失'); fixture.nativeElement.querySelector('.configure').click();fixture.detectChanges();flushMicrotasks(); const select:HTMLSelectElement=fixture.nativeElement.querySelector('app-model-selector select'); - expect(Array.from(select.options,option=>option.value)).toEqual(['gpt-6-luna','gpt-6.1-sol','gpt-6-astra','mimo-v2.6-pro','__custom__']); + expect(Array.from(select.options,option=>option.value)).toEqual(['gpt-6-luna','gpt-6.1-terra', 'gpt-6.1-sol','gpt-6-astra','mimo-v2.6-pro','__custom__']); expect(select.value).toBe('__custom__'); expect(fixture.nativeElement.querySelector('input[aria-label="复跑模型(自定义)"]').value).toBe('original-model'); select.value='gpt-6-luna';select.dispatchEvent(new Event('change'));fixture.detectChanges(); diff --git a/apps/showcase_ui/src/app/components/model-settings/model-settings.component.spec.ts b/apps/showcase_ui/src/app/components/model-settings/model-settings.component.spec.ts index 1bee664..15eb29f 100644 --- a/apps/showcase_ui/src/app/components/model-settings/model-settings.component.spec.ts +++ b/apps/showcase_ui/src/app/components/model-settings/model-settings.component.spec.ts @@ -11,7 +11,7 @@ describe('持久化模型与功能设置', () => { api_key_configured: true, timeout_seconds: 300, max_retries: 5, retry_interval_seconds: 10, reasoning_effort: 'high', rate_limit_retry_seconds: 60, tool_fallback_model: 'gpt-6-luna', tool_fallback_reasoning_effort: 'high', tool_fallback_max_retries: 3, tool_fallback_no_progress_attempts: 3, - model_presets: ['gpt-6-luna', 'gpt-6.1-sol', 'gpt-6-astra', 'mimo-v2.6-pro'], env_path: '/app/.env' }; + model_presets: ['gpt-6-luna', 'gpt-6.1-terra', 'gpt-6.1-sol', 'gpt-6-astra', 'mimo-v2.6-pro'], env_path: '/app/.env' }; beforeEach(() => { TestBed.configureTestingModule({ providers: [provideHttpClient(), provideHttpClientTesting()] }); http = TestBed.inject(HttpTestingController); diff --git a/apps/showcase_ui/src/app/core/model-presets.ts b/apps/showcase_ui/src/app/core/model-presets.ts index 16a77ad..8b83dae 100644 --- a/apps/showcase_ui/src/app/core/model-presets.ts +++ b/apps/showcase_ui/src/app/core/model-presets.ts @@ -1 +1 @@ -export const MODEL_PRESETS = ['gpt-6-luna', 'gpt-6.1-sol', 'gpt-6-astra', 'mimo-v2.6-pro']; +export const MODEL_PRESETS = ['gpt-6-luna', 'gpt-6.1-terra', 'gpt-6.1-sol', 'gpt-6-astra', 'mimo-v2.6-pro']; diff --git a/apps/showcase_ui/src/app/pages/home/home.component.html b/apps/showcase_ui/src/app/pages/home/home.component.html index 37f2c5f..138ce00 100644 --- a/apps/showcase_ui/src/app/pages/home/home.component.html +++ b/apps/showcase_ui/src/app/pages/home/home.component.html @@ -1518,7 +1518,7 @@ @if(explorationSettingsOpen()) {
- +
diff --git a/apps/showcase_ui/src/app/pages/home/home.component.spec.ts b/apps/showcase_ui/src/app/pages/home/home.component.spec.ts index 71bc830..30da154 100644 --- a/apps/showcase_ui/src/app/pages/home/home.component.spec.ts +++ b/apps/showcase_ui/src/app/pages/home/home.component.spec.ts @@ -10,7 +10,7 @@ import { TaskRecommendationService } from '../../core/services/task-recommendati describe('Homepage exploration entry',()=>{ let api:any,agent:any,router:any,system:any; - const config={model:'gpt-6.1-sol',reasoning_effort:'high',timeout_seconds:1800,demonstration_timeout_seconds:900,demonstration_warning_seconds:60}; + const config={model:'gpt-6.1-terra',reasoning_effort:'high',timeout_seconds:1800,demonstration_timeout_seconds:900,demonstration_warning_seconds:60}; beforeEach(()=>{ api={settings:jasmine.createSpy().and.resolveTo(config),create:jasmine.createSpy().and.resolveTo({id:'conversation'}),act:jasmine.createSpy().and.resolveTo({run:{id:'run'}})}; agent={runTask:jasmine.createSpy(),selectSession:jasmine.createSpy(),fetchSessions:jasmine.createSpy(),fetchStatus:jasmine.createSpy()};router={navigate:jasmine.createSpy().and.resolveTo(true)}; diff --git a/artemis/config/exploration.py b/artemis/config/exploration.py index 451877b..76f96c3 100644 --- a/artemis/config/exploration.py +++ b/artemis/config/exploration.py @@ -8,7 +8,7 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator class ExplorationConfig(BaseModel): model_config = ConfigDict(extra="forbid") - model: str = Field(default="gpt-6.1-sol", min_length=1, max_length=200) + model: str = Field(default="gpt-6.1-terra", min_length=1, max_length=200) reasoning_effort: Literal[ "default", "none", "minimal", "low", "medium", "high", "xhigh", "max" ] = "high" diff --git a/artemis/resources/config/artemis.jsonc b/artemis/resources/config/artemis.jsonc index 1387e2c..cd43142 100644 --- a/artemis/resources/config/artemis.jsonc +++ b/artemis/resources/config/artemis.jsonc @@ -35,7 +35,7 @@ }, "agent": { "exploration": { - "model": "${env:ARTEMIS_EXPLORATION_MODEL:-gpt-6.1-sol}", + "model": "${env:ARTEMIS_EXPLORATION_MODEL:-gpt-6.1-terra}", "reasoning_effort": "${env:ARTEMIS_EXPLORATION_REASONING_EFFORT:-high}", "timeout_seconds": "${env:ARTEMIS_EXPLORATION_TIMEOUT_SECONDS:-1800}", "demonstration_timeout_seconds": "${env:ARTEMIS_DEMONSTRATION_TIMEOUT_SECONDS:-900}", diff --git a/config/artemis.jsonc b/config/artemis.jsonc index 1387e2c..cd43142 100644 --- a/config/artemis.jsonc +++ b/config/artemis.jsonc @@ -35,7 +35,7 @@ }, "agent": { "exploration": { - "model": "${env:ARTEMIS_EXPLORATION_MODEL:-gpt-6.1-sol}", + "model": "${env:ARTEMIS_EXPLORATION_MODEL:-gpt-6.1-terra}", "reasoning_effort": "${env:ARTEMIS_EXPLORATION_REASONING_EFFORT:-high}", "timeout_seconds": "${env:ARTEMIS_EXPLORATION_TIMEOUT_SECONDS:-1800}", "demonstration_timeout_seconds": "${env:ARTEMIS_DEMONSTRATION_TIMEOUT_SECONDS:-900}", diff --git a/docs/ai-automation.md b/docs/ai-automation.md index 7a9c7be..4a2a5f5 100644 --- a/docs/ai-automation.md +++ b/docs/ai-automation.md @@ -60,7 +60,7 @@ MCP 同步仅检查 `$CODEX_HOME/config.toml`;未设置或为空时使用当 报告按任务或批次归档到 `artifacts/mcp_exports/`,包含本地路径及服务下载链接;删除批次时会清理对应导出副本。运行中导出是快照;执行完成不等于验证通过,报告会保留未验证、失败、跳过与中断状态。 -新安装模型默认使用 `gpt-6-luna`,预设 `gpt-6-luna`、`gpt-6.1-sol`、`gpt-6-astra`、`mimo-v2.6-pro`;首页、兜底模型与精选任务使用统一选择控件,也支持自定义模型名称。已保存的模型配置保留。思考强度最高支持 `max`,默认 `high`,选“由模型默认”不发送该参数;接口不支持时明确报错。单次请求 300 秒,首次失败后最多再试 5 次,普通错误每次等待 10 秒,429 每次等待 60 秒,SDK 不叠加重试。首选模型连续 3 次没有有效工具调用时,当前步骤改用 `gpt-6-luna`(high),最多再试 3 次;下一步重新使用首选模型。兜底模型及次数可通过 `.env.example` 中的 `OPENAI_TOOL_FALLBACK_*` 和 `ARTEMIS_TOOL_FALLBACK_MAX_NO_PROGRESS_ATTEMPTS` 配置。请求耗尽后沿用任务暂停/恢复机制,鉴权或非法参数立即失败。视频分析与录屏是独立开关,默认均关闭。每项批量用例可覆盖模式、模型、设备、录屏和超时等配置,不影响其他任务。暂停先返回 `pausing`,确认状态为 `task_paused` 才表示设备已释放;Pro 等待模型回复或只读诊断时可及时中断,恢复后重新观察设备。AI 可用 `mobile_manage_task(action="inject_instruction")` 提交指导并恢复;指导由执行器在安全检查点领取,可能中断当前模型等待并重新观察设备;接收回执不保证任务结束前已消费,已经开始的设备动作会安全结束。用 `guidance_history` 核对指导是否被领取、在任务流程中核对实际执行情况,或用 `resume` 单独恢复。 +新安装模型默认使用 `gpt-6-luna`,预设 `gpt-6-luna`、`gpt-6.1-terra`、`gpt-6.1-sol`、`gpt-6-astra`、`mimo-v2.6-pro`;首页、兜底模型与精选任务使用统一选择控件,也支持自定义模型名称。已保存的模型配置保留。思考强度最高支持 `max`,默认 `high`,选“由模型默认”不发送该参数;接口不支持时明确报错。单次请求 300 秒,首次失败后最多再试 5 次,普通错误每次等待 10 秒,429 每次等待 60 秒,SDK 不叠加重试。首选模型连续 3 次没有有效工具调用时,当前步骤改用 `gpt-6-luna`(high),最多再试 3 次;下一步重新使用首选模型。兜底模型及次数可通过 `.env.example` 中的 `OPENAI_TOOL_FALLBACK_*` 和 `ARTEMIS_TOOL_FALLBACK_MAX_NO_PROGRESS_ATTEMPTS` 配置。请求耗尽后沿用任务暂停/恢复机制,鉴权或非法参数立即失败。视频分析与录屏是独立开关,默认均关闭。每项批量用例可覆盖模式、模型、设备、录屏和超时等配置,不影响其他任务。暂停先返回 `pausing`,确认状态为 `task_paused` 才表示设备已释放;Pro 等待模型回复或只读诊断时可及时中断,恢复后重新观察设备。AI 可用 `mobile_manage_task(action="inject_instruction")` 提交指导并恢复;指导由执行器在安全检查点领取,可能中断当前模型等待并重新观察设备;接收回执不保证任务结束前已消费,已经开始的设备动作会安全结束。用 `guidance_history` 核对指导是否被领取、在任务流程中核对实际执行情况,或用 `resume` 单独恢复。 429 等待、兜底模型及次数也可在网页“模型配置 → 稳定性与兜底模型”或通过已授权的 `mobile_config(section="model")` 配置。批次 ZIP 还收录每项任务已保存的步骤截图和录屏。 diff --git a/docs/exploration-mode.md b/docs/exploration-mode.md index b68bd89..922825e 100644 --- a/docs/exploration-mode.md +++ b/docs/exploration-mode.md @@ -8,7 +8,7 @@ ## 模型与超时 -探索独立保存模型配置,默认 `gpt-6.1-sol / high`,预设也提供 `gpt-6-astra`,允许自定义模型。执行、人工示范分析、用例提炼和结束后的讨论使用这套配置。修改默认值仅影响新探索;已创建会话保留配置快照,Flash/Pro 默认值不变。 +探索独立保存模型配置,默认 `gpt-6.1-terra / high`,预设也提供 `gpt-6-astra`,允许自定义模型。执行、人工示范分析、用例提炼和结束后的讨论使用这套配置。修改默认值仅影响新探索;已创建会话保留配置快照,Flash/Pro 默认值不变。 默认每段主动执行 1800 秒。模型调用、设备动作、录像分析计入;排队、等待回答和人工示范不计入。到时保存进度并暂停,可点击「继续探索」开启下一段;不会仅因超时把测试判成失败,累计主动耗时仍保留。 diff --git a/mcp_server/README.md b/mcp_server/README.md index 9fcc3dd..9597660 100644 --- a/mcp_server/README.md +++ b/mcp_server/README.md @@ -61,7 +61,7 @@ The bridge discovers a live service from the same installation; `ARTEMIS_DAEMON_ ## 🛠️ MCP Tools Overview -* **`mobile_exploration`**: Guided exploration using the same queue and conversation as the web workspace. Create/start, exchange messages, pause/continue, record and analyze demonstrations, save immutable case versions, rerun with Flash/Pro, or add a batch draft. Writes use stable request IDs; reads never launch work. Defaults are independent (`gpt-6.1-sol / high`) and timeouts pause without marking the test failed. See the [exploration workflow](../docs/exploration-mode.md). +* **`mobile_exploration`**: Guided exploration using the same queue and conversation as the web workspace. Create/start, exchange messages, pause/continue, record and analyze demonstrations, save immutable case versions, rerun with Flash/Pro, or add a batch draft. Writes use stable request IDs; reads never launch work. Defaults are independent (`gpt-6.1-terra / high`) and timeouts pause without marking the test failed. See the [exploration workflow](../docs/exploration-mode.md). * **`mobile_run_task`**: Asynchronously launches an autonomous mobile automation task (`Flash` or `Pro` model) with optional `device_serial` targeting. Pro runs can be tuned with `verification_level` (`off` | `final` | `checkpoints` | `strict` — how much the Checker audits) and `explorer_mode` (`flash` | `pro` | `ultra` — the Operator's perception depth). * **`mobile_manage_task`**: Manages task lifecycle (`status`, `stop`, `inject_instruction`), returning task state and assigned `device_serial`. Pass `release_loop=True` with `inject_instruction` to gracefully end a `[Loop:continuous]` monitoring task — this explicit signal (not "please stop" wording) is what unlocks the loop milestone's completion. * **`mobile_get_device_state`**: Real-time observer (`screenshot` or OCR+XML `hierarchy`) with optional `device_serial`. diff --git a/mcp_server/catalog.json b/mcp_server/catalog.json index 53aedf8..8792315 100644 --- a/mcp_server/catalog.json +++ b/mcp_server/catalog.json @@ -437,7 +437,7 @@ }, { "name": "mobile_config", - "description": "Read configuration or explicitly save non-secret defaults for FUTURE tasks.\n\nOnly set persist_defaults=true when the user requests saved/global configuration.\nmodel changes: model (preset or custom), base_url, reasoning_effort\n(default/none/minimal/low/medium/high/xhigh/max), timeout_seconds, max_retries,\nretry_interval_seconds, rate_limit_retry_seconds, tool_fallback_model,\ntool_fallback_reasoning_effort, tool_fallback_max_retries,\ntool_fallback_no_progress_attempts. 'default' omits reasoning;\nunsupported values fail visibly.\ncapabilities: video_enabled and recording_enabled are independent; outputter_enabled,\nflash_final_check_enabled (false; Flash exit-only AI review),\nstep_summarizer_enabled, screenshot_limit_enabled, task_timeout_seconds (default 1800),\nobservation_timeout_seconds (60), observation_max_attempts (3),\ndevice_command_timeout_seconds (10), action_failure_attempts (3),\nworker_cleanup_timeout_seconds (30), adb_auto_connect (true),\nadb_discovery_interval_seconds (10), adb_discovery_timeout_seconds (5).\nreports: formats=['docx','xlsx'] (at least one).\nexploration: model (default gpt-6.1-sol), reasoning_effort (high), timeout_seconds\n(1800 active seconds), demonstration_timeout_seconds (900), demonstration_warning_seconds (60).\nAPI keys are never accepted or returned: use the Web UI or .env for credentials.\nSaving settings does not change an already running task. Flash/Pro are execution\nprofiles, not model names. Model retries do not repeat device test cases.\n", + "description": "Read configuration or explicitly save non-secret defaults for FUTURE tasks.\n\nOnly set persist_defaults=true when the user requests saved/global configuration.\nmodel changes: model (preset or custom), base_url, reasoning_effort\n(default/none/minimal/low/medium/high/xhigh/max), timeout_seconds, max_retries,\nretry_interval_seconds, rate_limit_retry_seconds, tool_fallback_model,\ntool_fallback_reasoning_effort, tool_fallback_max_retries,\ntool_fallback_no_progress_attempts. 'default' omits reasoning;\nunsupported values fail visibly.\ncapabilities: video_enabled and recording_enabled are independent; outputter_enabled,\nflash_final_check_enabled (false; Flash exit-only AI review),\nstep_summarizer_enabled, screenshot_limit_enabled, task_timeout_seconds (default 1800),\nobservation_timeout_seconds (60), observation_max_attempts (3),\ndevice_command_timeout_seconds (10), action_failure_attempts (3),\nworker_cleanup_timeout_seconds (30), adb_auto_connect (true),\nadb_discovery_interval_seconds (10), adb_discovery_timeout_seconds (5).\nreports: formats=['docx','xlsx'] (at least one).\nexploration: model (default gpt-6.1-terra), reasoning_effort (high), timeout_seconds\n(1800 active seconds), demonstration_timeout_seconds (900), demonstration_warning_seconds (60).\nAPI keys are never accepted or returned: use the Web UI or .env for credentials.\nSaving settings does not change an already running task. Flash/Pro are execution\nprofiles, not model names. Model retries do not repeat device test cases.\n", "inputSchema": { "properties": { "section": { @@ -791,7 +791,7 @@ }, { "name": "mobile_exploration", - "description": "Explore ONE complex test with user guidance and produce a reusable case.\n\ndeletion_preview lists affected conversation runs; delete requires user_confirmed=true\nafter the user requests deletion. Independent validation runs are preserved.\nRead-only list/get/case never execute tasks. create stores {goal,config?,task_config?};\nstart/continue explicitly enqueue or resume Pro exploration. Independent defaults:\ngpt-6.1-sol/high, 1800 active seconds; timeout pauses, never fails by itself.\nmessage payload={text}; answer pending questions or guide without discarding history.\ndemonstrate payload={source:'android'|'computer'|'both'} pauses at a safe point and\nrecords while retaining the device/plugin lease. Wait for recording before the user\noperates. demo_finish analyzes the SAVED clip; demo_extend payload={seconds:900};\ndemo_cancel preserves evidence. Default 900s, warning 60s before expiry, auto-pause.\nsave_case payload={expected_version,case:{name,goal,preconditions?,evidence?}};\ngenerate payload={source_run_id,expected_version} starts evidence-based synthesis,\npoll get.generations for completion. validate payload={version,profile,task_config?}\nexplicitly runs the saved version in Flash/Pro; batch additionally accepts name and\ncreates a DRAFT batch, never starts it. Exploration pass and rerun pass are separate.\nUse stable request_id for every mutation except pause/stop/delete, reusing it on transport\nretries. No API keys; configure secrets in the Web UI. mobile_config(section='exploration')\ncontrols non-secret defaults. After errors call mobile_diagnose before resubmitting.\n", + "description": "Explore ONE complex test with user guidance and produce a reusable case.\n\ndeletion_preview lists affected conversation runs; delete requires user_confirmed=true\nafter the user requests deletion. Independent validation runs are preserved.\nRead-only list/get/case never execute tasks. create stores {goal,config?,task_config?};\nstart/continue explicitly enqueue or resume Pro exploration. Independent defaults:\ngpt-6.1-terra/high, 1800 active seconds; timeout pauses, never fails by itself.\nmessage payload={text}; answer pending questions or guide without discarding history.\ndemonstrate payload={source:'android'|'computer'|'both'} pauses at a safe point and\nrecords while retaining the device/plugin lease. Wait for recording before the user\noperates. demo_finish analyzes the SAVED clip; demo_extend payload={seconds:900};\ndemo_cancel preserves evidence. Default 900s, warning 60s before expiry, auto-pause.\nsave_case payload={expected_version,case:{name,goal,preconditions?,evidence?}};\ngenerate payload={source_run_id,expected_version} starts evidence-based synthesis,\npoll get.generations for completion. validate payload={version,profile,task_config?}\nexplicitly runs the saved version in Flash/Pro; batch additionally accepts name and\ncreates a DRAFT batch, never starts it. Exploration pass and rerun pass are separate.\nUse stable request_id for every mutation except pause/stop/delete, reusing it on transport\nretries. No API keys; configure secrets in the Web UI. mobile_config(section='exploration')\ncontrols non-secret defaults. After errors call mobile_diagnose before resubmitting.\n", "inputSchema": { "properties": { "action": { diff --git a/mcp_server/tools/automation.py b/mcp_server/tools/automation.py index 08e3032..ae45dae 100644 --- a/mcp_server/tools/automation.py +++ b/mcp_server/tools/automation.py @@ -200,7 +200,7 @@ async def mobile_config( worker_cleanup_timeout_seconds (30), adb_auto_connect (true), adb_discovery_interval_seconds (10), adb_discovery_timeout_seconds (5). reports: formats=['docx','xlsx'] (at least one). - exploration: model (default gpt-6.1-sol), reasoning_effort (high), timeout_seconds + exploration: model (default gpt-6.1-terra), reasoning_effort (high), timeout_seconds (1800 active seconds), demonstration_timeout_seconds (900), demonstration_warning_seconds (60). API keys are never accepted or returned: use the Web UI or .env for credentials. Saving settings does not change an already running task. Flash/Pro are execution diff --git a/mcp_server/tools/exploration.py b/mcp_server/tools/exploration.py index 2a12bd7..8414b61 100644 --- a/mcp_server/tools/exploration.py +++ b/mcp_server/tools/exploration.py @@ -43,7 +43,7 @@ async def mobile_exploration( after the user requests deletion. Independent validation runs are preserved. Read-only list/get/case never execute tasks. create stores {goal,config?,task_config?}; start/continue explicitly enqueue or resume Pro exploration. Independent defaults: - gpt-6.1-sol/high, 1800 active seconds; timeout pauses, never fails by itself. + gpt-6.1-terra/high, 1800 active seconds; timeout pauses, never fails by itself. message payload={text}; answer pending questions or guide without discarding history. demonstrate payload={source:'android'|'computer'|'both'} pauses at a safe point and records while retaining the device/plugin lease. Wait for recording before the user diff --git a/skills/artemis-use/references/exploration.md b/skills/artemis-use/references/exploration.md index c1b7b3e..bb27ea3 100644 --- a/skills/artemis-use/references/exploration.md +++ b/skills/artemis-use/references/exploration.md @@ -6,7 +6,7 @@ ## 模型与超时 -探索独立保存模型配置,默认 `gpt-6.1-sol / high`,预设也提供 `gpt-6-astra`,允许自定义模型。执行、人工示范分析、用例提炼和结束后的讨论使用这套配置。修改默认值仅影响新探索;已创建会话保留配置快照,Flash/Pro 默认值不变。 +探索独立保存模型配置,默认 `gpt-6.1-terra / high`,预设也提供 `gpt-6-astra`,允许自定义模型。执行、人工示范分析、用例提炼和结束后的讨论使用这套配置。修改默认值仅影响新探索;已创建会话保留配置快照,Flash/Pro 默认值不变。 默认每段主动执行 1800 秒。模型调用、设备动作、录像分析计入;排队、等待回答和人工示范不计入。到时保存进度并暂停,可点击「继续探索」开启下一段;不会仅因超时把测试判成失败,累计主动耗时仍保留。 diff --git a/skills/artemis-use/references/modes.md b/skills/artemis-use/references/modes.md index 3532ab7..f5a261e 100644 --- a/skills/artemis-use/references/modes.md +++ b/skills/artemis-use/references/modes.md @@ -17,7 +17,7 @@ ## 模式、模型与配置 - `mobile_run_task.model` 取 `Flash` / `Pro`。API 模型名放 `runtime_overrides.model`;思考强度放 `runtime_overrides.reasoning_effort`。批次使用 `task_config.profile` 选择模式,`task_config.model` 选择 API 模型。 -- 探索独立配置,默认 `gpt-6.1-sol/high`,支持 `gpt-6-astra` 及已配置网关支持的自定义模型。执行、示范分析、提炼共用该探索配置;不改变 Flash/Pro 默认值。 +- 探索独立配置,默认 `gpt-6.1-terra/high`,支持 `gpt-6-astra` 及已配置网关支持的自定义模型。执行、示范分析、提炼共用该探索配置;不改变 Flash/Pro 默认值。 - 默认 high、单次模型请求时限 300 秒。`default` 表示不发送思考强度,`none` 是显式关闭,不能混为一谈;接口不支持参数时如实报告,不擅自降级。 - 请求时限与整任务主动执行时限不同。排队/用户暂停不计入任务主动执行;探索等待回答、人工示范也不计入。 - 录屏 `record_video` 和 AI 视频分析 `analyze_video` 独立,默认关闭。需要可下载录像时明确启用录屏。 diff --git a/tests/unit/admin_console/test_model_settings.py b/tests/unit/admin_console/test_model_settings.py index cecf8d6..f35a384 100644 --- a/tests/unit/admin_console/test_model_settings.py +++ b/tests/unit/admin_console/test_model_settings.py @@ -96,6 +96,7 @@ def test_model_presets_keep_supported_choices_without_restricting_custom_names() presets = service.get_model_settings()["model_presets"] assert presets == [ "gpt-6-luna", + "gpt-6.1-terra", "gpt-6.1-sol", "gpt-6-astra", "mimo-v2.6-pro", diff --git a/tests/unit/test_exploration_service.py b/tests/unit/test_exploration_service.py index 4aeab29..80d4cca 100644 --- a/tests/unit/test_exploration_service.py +++ b/tests/unit/test_exploration_service.py @@ -30,7 +30,7 @@ async def test_admission_uses_shared_queue_with_independent_model(service, monke await service.start(session["id"], "start") request = enqueue.call_args.args[0] assert request.profile == "pro" - assert request.runtime_overrides.model == "gpt-6.1-sol" + assert request.runtime_overrides.model == "gpt-6.1-terra" assert request.runtime_overrides.reasoning_effort == "high" assert request.runtime_overrides.verification_level == "final" assert request.conversation_id == session["id"] @@ -193,7 +193,7 @@ def test_independent_saved_defaults_do_not_change_existing_sessions(service): session = service.create(CreateExploration(goal="探索设置", request_id="create")) service.save_settings(ExplorationConfig(model="gpt-6-astra", reasoning_effort="max")) later = service.create(CreateExploration(goal="另一次探索", request_id="later")) - assert service.repository.get(session["id"])["config"]["model"] == "gpt-6.1-sol" + assert service.repository.get(session["id"])["config"]["model"] == "gpt-6.1-terra" assert later["config"]["model"] == "gpt-6-astra" diff --git a/tests/unit/test_exploration_store.py b/tests/unit/test_exploration_store.py index e8b0502..2bf2919 100644 --- a/tests/unit/test_exploration_store.py +++ b/tests/unit/test_exploration_store.py @@ -187,7 +187,7 @@ def test_generated_case_cannot_borrow_another_sessions_evidence(repository): def test_exploration_config_defaults_and_rejects_credentials(): config = ExplorationConfig() assert (config.model, config.reasoning_effort, config.timeout_seconds) == ( - "gpt-6.1-sol", + "gpt-6.1-terra", "high", 1800, )