add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

add agent to one step agent - #66

Open
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main
Open

add agent to one step agent#66
skyDuanXianBing wants to merge 4 commits into
AmberSahdev:mainfrom
skyDuanXianBing:main

Conversation

@skyDuanXianBing

Copy link
Copy Markdown

No description provided.

This unifies provider prompting, persists sessions and execution timelines, and adds local verification plus platform adapters so the desktop agent behaves more safely and consistently across runs.
This refreshes the project overview to match the current single-step runtime, shared provider prompt semantics, session-backed request flow, and local verification behavior.
These research artifacts no longer reflect the current repository documentation set, so this drops them to keep the repo focused on the maintained request-flow reference and README.
CopilotAI review requested due to automatic review settings March 15, 2026 11:40

CopilotAI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors Open Interface into a structured single-step visual agent loop with an explicit prompt system (v1), expanded provider routing (OpenAI/GPT-5, Claude, Qwen, OpenAI-compatible Gemini), and new platform support utilities (Windows DPI, hotkeys, clipboard), plus a large set of verification/diagnostic scripts.

Changes:

  • Introduces app/prompting/ Prompt System v1 (tool registry/schema, task/timeline/visual context, output contract, prompt dumps).
  • Adds/updates model adapters and routing (models/catalog.py, ModelFactory, Claude/Qwen adapters, Gemini routed through OpenAI-compatible path).
  • Adds local verification and platform utilities (StepVerifier, platform_support/*, Windows DPI awareness), plus multiple verification scripts and diagnostics.

Reviewed changes

Copilot reviewed 74 out of 77 changed files in this pull request and generated 5 comments.

Show a summary per file
FileDescription
tests/verify_windows_openai_computer_use_keys.pyVerifies Windows key normalization for computer-use keypress actions.
tests/verify_windows_local_info.pyVerifies Windows installed-app scanning behavior via env overrides.
tests/verify_windows_hotkey_mapper.pyVerifies Windows hotkey mappings and semantic shortcuts.
tests/verify_windows_dpi_coordinate_mapping.pyVerifies DPI-scaled coordinate mapping in verification flow.
tests/verify_visual_agent_mvp.pySmoke-checks agent memory and visual verification pass/fail paths.
tests/verify_text_input_strategy.pyVerifies non-ASCII write uses clipboard paste strategy.
tests/verify_settings_refactor.pyValidates nested settings + provider routing for factory.
tests/verify_screen_semantic_ocr.pyEnsures legacy OCR/semantic fields are retired from screen payload and OCR backend constructor errors.
tests/verify_request_timeout_diagnosis.pyVerifies request timeout persistence and runtime application.
tests/verify_prompt_image_archive.pyVerifies archived prompt image writing + naming/resize.
tests/verify_macos_doubleclick.pyVerifies macOS Quartz multi-click emission and verifier classification.
tests/verify_gpt5_reasoning.pyVerifies GPT-5 reasoning request options and settings validation.
tests/verify_disable_local_step_verification.pyVerifies skip-verification mode behavior and sleep cadence.
tests/test_config_center_red.pyPytest red-check coverage for settings migration/validation and routing expectations.
tests/simple_test.pyClarifies manual-only GUI smoke helper docstring/comment.
tests/session_store_red_check.pyRed-check script for SessionStore schema + Core init ordering.
tests/session_context_red_check.pyRed-check script for session history injection + request boundary reset.
tests/qwen_diagnostic.pyCLI diagnostic helper for Qwen/DashScope OpenAI-compatible probing.
tests/claude_diagnostic.pyCLI diagnostic helper for Claude adapter payload shape and (optional) live request.
tests/chat_ui_red_check.pyRed-check script for UI hydration, window sizing, and i18n copy registration.
requirements.txtRemoves PyAudio and rubicon-objc dependencies.
build.pyImproves PyInstaller path discovery and cross-platform --add-data handling; errors on unsupported zip platform.
app/verifier.pyAdds StepVerifier for local before/after image change classification.
app/utils/ocr.pyIntroduces optional Vision-based OCR backend with safe fallback when unavailable.
app/utils/local_info.pySwitches installed-app enumeration to platform-aware helper with safer failure handling.
app/resources/old-context.txtRemoves legacy context file.
app/resources/context.txtReplaces legacy guidance with single-step agent/tool/coordinate/output contract rules.
app/prompting/visual_context.pyBuilds visual context section from frame metadata and grid usage rules.
app/prompting/tool_schema.pyDefines tool registry + schema text generation for prompt allowlist.
app/prompting/task_context.pyBuilds structured task/session/constraints context from request_context + machine profile.
app/prompting/system_context.pyComposes system context including schema + custom instructions.
app/prompting/recent_details.pyAdds recent-step detailed breakdown section.
app/prompting/output_contract.pyDefines strict JSON output contract and example for models.
app/prompting/execution_timeline.pyAdds full step timeline rendering for prompt.
app/prompting/debug.pyAdds prompt package dump writer to promptdump/.
app/prompting/constants.pyCentralizes prompt schema version and sizing caps.
app/prompting/composer.pyJoins prompt sections into final user context text.
app/prompting/common.pyUtilities for block formatting and bounded parameter/text summarization.
app/prompting/builder.pyBuilds PromptPackage (system + user contexts + debug text).
app/prompting/init.pyExposes prompting public API surface.
app/platform_support/screen_adapter.pyAdds Windows DPI awareness and unified screen capture metrics.
app/platform_support/local_apps.pyAdds cross-platform installed-app sample enumeration.
app/platform_support/input_adapter.pyAdds hotkey normalization and macOS Quartz multi-click handling.
app/platform_support/hotkey_mapper.pyAdds platform-aware key normalization (cmd/option mapping, etc.).
app/platform_support/detector.pyAdds platform name detection helpers.
app/platform_support/clipboard_adapter.pyAdds clipboard read/write backend with platform fallbacks.
app/platform_support/init.pyRe-exports platform support adapters and helpers.
app/models/qwen.pyAdds Qwen adapter with VL enforcement and reasoning options via extra_body.
app/models/openai_computer_use.pyUpdates computer-use-preview adapter to use visual prompt payload + percent coordinates + hotkey mapper.
app/models/gpt5.pyUpdates GPT-5 adapter to prompt-package-based formatting and parsing.
app/models/gpt4v.pyUpdates GPT-4V adapter to prompt-package-based formatting and parsing.
app/models/gpt4o.pyUpdates GPT-4o assistants adapter to use prompt packages, visual prompt upload, and enriched frame context.
app/models/gemini.pyReplaces Gemini adapter with GPT4v alias (OpenAI-compatible routing).
app/models/factory.pyAdds provider-aware factory routing and argument normalization.
app/models/deprecated/init.pyAdds placeholder deprecated package init.
app/models/claude.pyAdds Claude adapter via Anthropic-compatible HTTP API with thinking support.
app/models/catalog.pyAdds provider/model catalog, defaults, and model capability helpers.
app/llm.pyRefactors LLM wrapper to provider-aware settings mapping and prompt runtime sync.
app/app.pyAdds initial session hydration and routes structured core events to UI.
app/agent_memory.pyAdds compact agent memory structure and payload builder.
README.mdUpdates product description and documents new architecture/prompt system.
.gitignoreAdds new ignored paths (.venv, etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +105 to +110
message = routed_model.format_user_request_for_llm(
SAMPLE_REQUEST,
0,
build_visual_payload(),
None,
)
Comment on lines 256 to 273
return [
{
'function': 'moveTo',
'parameters': {'x': start_x, 'y': start_y}
'parameters': {
'x_percent': start_coords['x_percent'],
'y_percent': start_coords['y_percent'],
},
},
{
'function': 'dragTo',
'parameters': {'x': end_x, 'y': end_y, 'duration': 0.2, 'button': 'left'}
}
'parameters': {
'x_percent': end_coords['x_percent'],
'y_percent': end_coords['y_percent'],
'duration': 0.2,
'button': 'left',
},
},
]
Comment on lines 222 to 233
@@ -182,14 +228,14 @@ def convert_action_to_steps(self, action: Any) -> list[dict[str, Any]]:
return [{
'function': 'press',
'parameters': {
'key': normalized_keys[0]
}
'key': normalized_keys[0],
},
}]
return [{
'function': 'write',
'parameters': {
'string': self.read_obj(action, 'text') or '',
Comment on lines +87 to +93
routed_model = ModelFactory.create_model(
args.model,
args.api_key,
args.base_url,
'请只返回 JSON。',
provider_type='anthropic_compatible',
)
@AmberSahdev

Copy link
Copy Markdown
Owner

woah thank you @skyDuanXianBing, really extensive PR! Let me review.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@skyDuanXianBing@AmberSahdev