feat: unify execution and add workspace file imports

Remove Ask/Execute modes and general product tool approvals so requests use the selected runtime, enabled capabilities, and execution account permissions. Migrate retired application metadata while preserving user content.

Retire the Results page while retaining conversation images and stored artifacts. Add local and remote workspace file imports, timestamps and sorting, improve image discovery and saving, and refine workspace navigation and supervision responsiveness. Include the accompanying web-search changes, tests, probes, and product documentation.

Remote imports require an updated Agent. Existing artifacts are not automatically copied into project directories. Validation evidence and outstanding failures remain documented in feature progress files; no full test suite or real-model calls were rerun for this commit.

Release note: Run requests without switching work modes, import files into a selected local or remote workspace folder, sort workspace files by date, and keep using conversation images after removal of the Results page.
This commit is contained in:
mesalogo
2026-10-04 20:02:59 +08:00
parent 0cd5da33f4
commit 56ebd40bd8
374 changed files with 7075 additions and 6224 deletions
@@ -297,7 +297,6 @@ describe('CapabilityService', () => {
webSearch: {
provider: 'exa',
enabled: true,
availableIn: ['ask', 'execute'],
tools: ['web_search', 'web_fetch']
}
})
@@ -1042,7 +1042,6 @@ export class CapabilityService {
webSearch: webSearchCapabilitySchema.parse({
provider: 'exa',
enabled: state.webSearch.enabled,
availableIn: ['ask', 'execute'],
tools: ['web_search', 'web_fetch']
}),
computerCapabilities: computerCapabilityCatalog.map((capability) =>
@@ -43,7 +43,7 @@ describe('computer capability catalog', () => {
).toBe(true)
expect(browser.name).toBe('内置浏览器')
expect(browser.description).toContain('不会控制客户端已安装的浏览器')
expect(browser.riskSummary).toContain('不再逐次询问')
expect(browser.riskSummary).toContain('已分配的 Runtime 可直接读取网页并操作网站')
expect(desktop.description).toContain('技术预览')
expect(desktop.riskSummary).toContain('尚未')
})
@@ -54,7 +54,7 @@ export const computerCapabilityCatalog: readonly ComputerCapabilityCatalogEntry[
})
]),
riskSummary:
'总开关关闭时不会向任何 Runtime 提供浏览器工具,但不影响你在浏览器工作栏中手动操作;开启后,已分配的 Runtime 可在 Execute 模式直接读取网页并操作网站,不再逐次询问。',
'总开关关闭时不会向任何 Runtime 提供浏览器工具,但不影响你在浏览器工作栏中手动操作;开启后,已分配的 Runtime 可直接读取网页并操作网站。',
requiredDiagnostics: Object.freeze([
'browser-executable',
'managed-profile-root'
+1 -2
View File
@@ -29,8 +29,7 @@ export async function testWebSearch(
const startedAt = Date.now()
try {
const context = {
conversationId: 'web-search-diagnostic',
workMode: 'ask' as const
conversationId: 'web-search-diagnostic'
}
const tools = await provider.listTools(context, controller.signal)
if (