fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant
, '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

fix(persona-kit): repair opencode one-shot invocation - #270

Merged
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269
Jul 15, 2026
Merged

fix(persona-kit): repair opencode one-shot invocation#270
khaliqgant merged 2 commits into
mainfrom
fix/opencode-noninteractive-cli-269

Conversation

@khaliqgant

@khaliqgantkhaliqgant commented Jul 15, 2026

Copy link
Copy Markdown
Member

Closes#269

Summary

  • stop passing unsupported --dir to opencode run; the runtime already spawns the child with the requested cwd
  • stop overriding the generated persona agent model with the CLI --model flag
  • normalize bare OpenCode persona model IDs to opencode/<model> in the generated opencode.json agent config while preserving already-qualified values
  • add regression coverage using a truthy working directory and bare deepseek-v4-flash-free model

Why

The non-interactive path was adding two stale CLI arguments after buildInteractiveSpec had already moved OpenCode model selection into opencode.json. Current OpenCode rejects --dir, and its --model parser requires provider/model values. The child process already receives cwd through spawnAndCapture, while the generated agent config carries the persona model selected by --agent. Since OpenCode agent configs also require provider/model-id, bare model IDs are normalized to the harness provider before serialization.

Validation

  • pnpm --filter @agentworkforce/persona-kit test (287 passed)
  • pnpm --filter @agentworkforce/persona-kit lint
  • pnpm --filter @agentworkforce/persona-kit typecheck

Downstream note

The daytona-monitor, cloudflare-monitor, gcp-watcher, and neon-monitor personas in AgentWorkforce/agents use the OpenCode harness with bare model strings. Before this fix, they would be exposed to the same invalid provider/model resolution on affected OpenCode versions; this PR does not modify that repository.

Review in cubic

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@cursor

cursorBot commented Jul 15, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitaiBot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The opencode non-interactive command now selects models through generated opencode.json agent configuration, omits unsupported --dir and redundant --model arguments, and uses default output formatting. A test verifies the resulting command and configuration.

Changes

Opencode harness execution

Layer / File(s)Summary
Update opencode invocation arguments
packages/persona-kit/src/interactive-spec.ts
The opencode command no longer passes --model or --dir; it uses generated agent configuration and includes --format default.
Verify generated opencode specification
packages/persona-kit/src/interactive-spec.test.ts
Tests verify the binary, arguments, omitted flags, and model recorded in opencode.json.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers:willwashburn, claude

Poem

I’m a rabbit with a config to share,
No dangling flags in the command air.
The model now rests where agents belong,
Default format makes output strong.
Hop, hop—tests confirm the run!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Linked Issues check✅ PassedThe changes remove the invalid --dir and --model usage and preserve model selection in config as required by #269.
Out of Scope Changes check✅ PassedThe PR stays focused on the OpenCode invocation fix and its regression coverage.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check✅ PassedThe title clearly summarizes the main fix: repairing the OpenCode one-shot invocation in persona-kit.
Description check✅ PassedThe description matches the changeset and explains the OpenCode invocation fix and added regression coverage.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/opencode-noninteractive-cli-269

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-aicubic-dev-aiBot 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.

No issues found across 2 files

Re-trigger cubic

@chatgpt-codex-connectorchatgpt-codex-connectorBot 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:35cad039da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadpackages/persona-kit/src/interactive-spec.ts
@khaliqgant
khaliqgant merged commit af47512 into mainJul 15, 2026
3 checks passed
@khaliqgant
khaliqgant deleted the fix/opencode-noninteractive-cli-269 branch July 15, 2026 12:27
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.

opencode harness: buildNonInteractiveSpec appends --dir, which doesn't exist on run subcommand; bare model string also mis-parsed by --model

1 participant

@khaliqgant