Skip to content

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

@hqhq1025@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(cu): make provider function loops AX-first by hqhq1025 · Pull Request #925 · apache/maka · GitHub
Skip to content

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

@hqhq1025@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(cu): make provider function loops AX-first by hqhq1025 · Pull Request #925 · apache/maka · GitHub
Skip to content

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

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

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

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

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

@hqhq1025@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(cu): make provider function loops AX-first by hqhq1025 · Pull Request #925 · apache/maka · GitHub
Skip to content

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

@hqhq1025@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(cu): make provider function loops AX-first by hqhq1025 · Pull Request #925 · apache/maka · GitHub
Skip to content

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

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

feat(cu): make provider function loops AX-first - #925

Closed
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop
Closed

feat(cu): make provider function loops AX-first#925
hqhq1025 wants to merge 4 commits into
apache:mainfrom
hqhq1025:codex/cu-function-model-loop

Conversation

@hqhq1025

Copy link
Copy Markdown
Contributor

Summary

Makes the provider-neutral maka_computer function path explicitly Accessibility-first and validates the same bounded semantic loop across supported provider surfaces.

This PR is stacked on #920. Until #920 merges, GitHub shows the cumulative native observation-loop commits plus this PR's final commit. After #920 merges, the review diff reduces to b3a34c8c.

AX-first product contract

The primary mutation path is:

model -> list_apps / observe -> AX element_id -> click_element / set_value
-> strict fresh refetch -> cua-driver AX action -> fresh observation

The model-facing description now tells providers to prefer click_element and set_value from the immediately preceding observation. It no longer advertises coordinate input as an equivalent background-safe path.

Coordinate click, scroll, drag, key, type, and pixel fallback remain in the provider-neutral grammar for compatibility, but the current product policy rejects them with unsupported_action because compatibility event delivery can interfere with the user's physical input. A model can recover by re-observing and choosing a semantic element action.

This matches the recovered Codex architecture: semantic element clicks prefer AXPick/AXPress; synthetic per-PID input is an executor fallback, not the model's default targeting path. OpenAI native computer_call remains the observation-only experimental surface from #920, not the primary mutation route.

Provider coverage

  • OpenAI Responses function tools
  • Anthropic Messages function tools
  • Claude subscription transport
  • Kimi Coding Plan Anthropic-compatible SSE
  • MiniMax Coding Plan Anthropic-compatible SSE

Kimi and MiniMax coverage is hermetic protocol evidence, not a claim of live credentials on this machine.

Model-loop coverage

  • list_apps -> observe -> set_value -> fresh observation -> final
  • dynamic observation IDs are consumed rather than guessed
  • a coordinate attempt fails closed, then the model recovers through a fresh semantic plan
  • exact provider URL/auth/header and SSE tool-use/tool-result contracts
  • Runtime path uses getAIModel -> AiSdkBackend -> ToolRuntime -> maka_computer

Verification

  • focused Runtime model/provider tests: 5/5
  • script contract tests: 4/4
  • prior full Runtime run: 1535 pass, 7 skip
  • prior full build and typecheck pass
  • no Computer Use executor files are modified

Depends on #920.

cc @Astro-Han

@Astro-HanAstro-Han left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Approved for the #925 delta. I did not find a P0 or P1. This stacked head still contains #920 and now needs a restack onto current main; the findings below are specific to #925 and are non-blocking:

  • P2 — scripts/cu-synthetic-model-scenario.mjs:25-41,64-100: the synthetic fixture never records that an observation was issued or consumed, and every observation reuses obs-fixture. A standalone provider loop can call set_value first with that guessed constant and pass without list_apps or observe, so the harness does not prove that IDs came from the latest observation. Issue a fresh observation ID and validate an active lease.

  • P2 — packages/runtime/src/computer-use-tools.ts:1039-1048: the model-facing description says coordinate clicks always fail with unsupported_action, but the retained exact Electron page path still accepts left_click with a coordinate and returns semantic-background before the compatibility fallback guard. The wording hides a supported safe path; say that compatibility/pixel fallback is disabled while the exact Electron semantic path remains available.

  • P3 — scripts/cu-real-runtime-model-e2e.mjs:32-73: the backend ignores the app/window selected by the model, substitutes the fixed fixture, replaces the action observation ID with obs-fixture, and captures the same fixed window. The full-Runtime E2E can therefore pass when target forwarding or observation mapping is wrong.

  • P3 — packages/runtime/src/__tests__/computer-use-model-loop.test.ts:28-71,340-360: the cross-provider contract test changes providerType but always returns the same MockLanguageModelV3, bypassing getAIModel and every provider adapter. It checks the Runtime tool definition, not provider serialization; name the scope accordingly or exercise each adapter.

  • P3 — scripts/cu-real-function-model-e2e.mjs:46-61: the OpenAI harness sends store: true, while docs/computer-use-model-loop-foundation.md:42-46 says these runs did not persist raw provider responses. The fixture is synthetic, but the documented retention boundary and request should agree.

  • P3 — scripts/cu-synthetic-model-scenario.mjs:1-5,90-91: click_element is advertised in the function schema but always throws. A model that reasonably focuses the field before setting it makes the OpenAI run exit outside the typed tool-result path; implement the harmless fixture click or omit it from this schema.

@hqhq1025

Copy link
Copy Markdown
ContributorAuthor

Superseded by #985, which restacks the combined provider-loop work on current main and includes the #920 foundation.

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.

2 participants

@hqhq1025@Astro-Han