From f7b239090b736630ad9487e9066de202c96aa3dd Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 19:33:42 +0100 Subject: [PATCH 1/8] Added variants support end-to-end with a default of UNDEFINED, and only **Changes** - Added variants input and conditional --variants flag in actions/pr-review/action.yml. - Added variants input and conditional --variants flag in actions/issue-label/action.yml. - Added variants input and conditional --variants flag in actions/doc-sync/action.yml. - Added variants input and conditional --variants flag in actions/changeset/action.yml. - Added variants: "UNDEFINED" to workflow templates in src/cli/templates/pr-review.ts, src/cli/templates/issue-label.ts, src/cli/templates/doc-sync.ts, src/cli/templates/changeset.ts. - Documented the new input in actions/pr-review/skill.md, actions/issue-label/skill.md, actions/doc-sync/skill.md, actions/changeset/skill.md. - Added optional variants field to tool schemas in scripts/submit-review.ts, scripts/apply-labels.ts, scripts/write-changeset.ts. - Added tests for template output and schema presence in test/installer.test.js and test/scripts-variants.test.js. **Tests** - bun run check (fails: script not found) - bun run typecheck - bun run test If you want, I can also update README.md with a variants example for manual usage. Attempt: att-d62b72a5-cf50-45a7-b620-db8b67ca8698 Profile: apg-70541e2b-d01c-4d50-a814-7025ac222ebe --- actions/changeset/action.yml | 10 +++++++++- actions/changeset/skill.md | 4 ++++ actions/doc-sync/action.yml | 10 +++++++++- actions/doc-sync/skill.md | 4 ++++ actions/issue-label/action.yml | 10 +++++++++- actions/issue-label/skill.md | 4 ++++ actions/pr-review/action.yml | 10 +++++++++- actions/pr-review/skill.md | 4 ++++ scripts/apply-labels.ts | 1 + scripts/submit-review.ts | 1 + scripts/write-changeset.ts | 1 + src/cli/templates/changeset.ts | 1 + src/cli/templates/doc-sync.ts | 2 ++ src/cli/templates/issue-label.ts | 2 ++ src/cli/templates/pr-review.ts | 2 ++ test/installer.test.js | 8 +++++--- test/scripts-variants.test.js | 20 ++++++++++++++++++++ 17 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 test/scripts-variants.test.js diff --git a/actions/changeset/action.yml b/actions/changeset/action.yml index 4b003f5..2fd4a91 100644 --- a/actions/changeset/action.yml +++ b/actions/changeset/action.yml @@ -11,6 +11,10 @@ inputs: description: 'Operation mode: commit (auto-commit changeset) or comment (suggest via PR comment)' required: false default: 'commit' + variants: + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + required: false + default: 'UNDEFINED' runs: using: 'composite' @@ -40,7 +44,11 @@ runs: - name: Generate Changeset shell: bash run: | - opencode run --model "${{ inputs.model }}" \ + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") + fi + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the changeset skill. Generate changeset for PR ${{ github.event.pull_request.number }} in mode: ${{ inputs.mode }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/changeset/skill.md b/actions/changeset/skill.md index 9258bb4..1190f84 100644 --- a/actions/changeset/skill.md +++ b/actions/changeset/skill.md @@ -4,6 +4,10 @@ description: AI-powered changeset generation for monorepo releases. Analyzes PR license: MIT --- +## Action Inputs + +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. + ## What I Do Analyze pull request changes and generate [Changesets](https://github.com/changesets/changesets) files that capture: diff --git a/actions/doc-sync/action.yml b/actions/doc-sync/action.yml index 2a869e6..d8f396b 100644 --- a/actions/doc-sync/action.yml +++ b/actions/doc-sync/action.yml @@ -7,6 +7,10 @@ inputs: description: 'Model to use for doc analysis' required: false default: 'anthropic/claude-sonnet-4-5' + variants: + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + required: false + default: 'UNDEFINED' runs: using: 'composite' @@ -41,7 +45,11 @@ runs: - name: Sync Documentation shell: bash run: | - opencode run --model "${{ inputs.model }}" \ + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") + fi + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the doc-sync skill and sync documentation for PR ${{ github.event.pull_request.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/doc-sync/skill.md b/actions/doc-sync/skill.md index 38f768f..4e1283c 100644 --- a/actions/doc-sync/skill.md +++ b/actions/doc-sync/skill.md @@ -4,6 +4,10 @@ description: Keep documentation in sync with code changes. Analyzes PR diffs and license: MIT --- +## Action Inputs + +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. + ## What I Do Analyze pull request changes and update documentation to reflect code changes. Uses native OpenCode tools (`write`, `bash`) for file operations and git commits. diff --git a/actions/issue-label/action.yml b/actions/issue-label/action.yml index 67e6ab5..4d9b6ea 100644 --- a/actions/issue-label/action.yml +++ b/actions/issue-label/action.yml @@ -7,6 +7,10 @@ inputs: description: 'Model to use for labeling' required: false default: 'anthropic/claude-haiku-4-5' + variants: + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + required: false + default: 'UNDEFINED' runs: using: 'composite' @@ -36,7 +40,11 @@ runs: - name: Label Issue shell: bash run: | - opencode run --model "${{ inputs.model }}" \ + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") + fi + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the issue-label skill. Label issue ${{ github.event.issue.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/issue-label/skill.md b/actions/issue-label/skill.md index 7347c1f..959f11a 100644 --- a/actions/issue-label/skill.md +++ b/actions/issue-label/skill.md @@ -4,6 +4,10 @@ description: Automatically apply appropriate labels to GitHub issues based on co license: MIT --- +## Action Inputs + +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. + ## What I Do Analyze GitHub issue content and apply up to 3 appropriate labels to help maintainers triage and search issues effectively. diff --git a/actions/pr-review/action.yml b/actions/pr-review/action.yml index 159392b..d164d21 100644 --- a/actions/pr-review/action.yml +++ b/actions/pr-review/action.yml @@ -7,6 +7,10 @@ inputs: description: 'Model to use for review' required: false default: 'anthropic/claude-sonnet-4-5' + variants: + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + required: false + default: 'UNDEFINED' runs: using: 'composite' @@ -36,7 +40,11 @@ runs: - name: Review PR shell: bash run: | - opencode run --model "${{ inputs.model }}" \ + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") + fi + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the pr-review skill. Review PR ${{ github.event.pull_request.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/pr-review/skill.md b/actions/pr-review/skill.md index a3cc33f..8b1041b 100644 --- a/actions/pr-review/skill.md +++ b/actions/pr-review/skill.md @@ -4,6 +4,10 @@ description: AI-powered pull request code review focusing on correctness, securi license: MIT --- +## Action Inputs + +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. + ## What I Do Review pull request changes systematically and post findings as a sticky PR comment. Focus on **real issues that matter** - bugs, security risks, and stability problems that would block a merge in a typical code review. diff --git a/scripts/apply-labels.ts b/scripts/apply-labels.ts index b7e8f1a..fa9957e 100644 --- a/scripts/apply-labels.ts +++ b/scripts/apply-labels.ts @@ -14,6 +14,7 @@ const ArgsSchema = z.object({ }) ).optional().describe('New labels to create before applying'), explanation: z.string().describe('Brief explanation of label choices'), + variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const labelCount = value.labels.length + (value.newLabels?.length ?? 0); diff --git a/scripts/submit-review.ts b/scripts/submit-review.ts index ac5b29b..0aef2e1 100644 --- a/scripts/submit-review.ts +++ b/scripts/submit-review.ts @@ -31,6 +31,7 @@ const ArgsSchema = z.object({ suggestion: z.string().optional().describe('Replacement code only (no prose, no code fences)'), }) ).describe('List of issues found'), + variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const hasMediumOrHighOrCritical = value.issues.some( (issue) => issue.severity === 'critical' || issue.severity === 'high' || issue.severity === 'medium' diff --git a/scripts/write-changeset.ts b/scripts/write-changeset.ts index 98202b7..a01c909 100644 --- a/scripts/write-changeset.ts +++ b/scripts/write-changeset.ts @@ -13,6 +13,7 @@ const ArgsSchema = z.object({ packages: z.object({}).catchall(BumpSchema).describe('Object mapping package names to bump types (major, minor, patch)'), summary: z.string().min(10).max(200).describe('Short summary in imperative mood (e.g., "Add retry logic")'), body: z.string().optional().describe('Optional additional details or migration notes'), + variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const packageCount = Object.keys(value.packages).length; diff --git a/src/cli/templates/changeset.ts b/src/cli/templates/changeset.ts index 4fa78ee..7c27c6b 100644 --- a/src/cli/templates/changeset.ts +++ b/src/cli/templates/changeset.ts @@ -22,6 +22,7 @@ jobs: - uses: activadee/open-workflows/actions/changeset@main with: mode: commit + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/doc-sync.ts b/src/cli/templates/doc-sync.ts index 8cfe6c4..6463a06 100644 --- a/src/cli/templates/doc-sync.ts +++ b/src/cli/templates/doc-sync.ts @@ -19,6 +19,8 @@ jobs: fetch-depth: 0 - uses: activadee/open-workflows/actions/doc-sync@main + with: + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/issue-label.ts b/src/cli/templates/issue-label.ts index 914006f..9b5c2e8 100644 --- a/src/cli/templates/issue-label.ts +++ b/src/cli/templates/issue-label.ts @@ -15,6 +15,8 @@ jobs: - uses: actions/checkout@v4 - uses: activadee/open-workflows/actions/issue-label@main + with: + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/pr-review.ts b/src/cli/templates/pr-review.ts index ecb191f..54ce283 100644 --- a/src/cli/templates/pr-review.ts +++ b/src/cli/templates/pr-review.ts @@ -16,6 +16,8 @@ jobs: - uses: actions/checkout@v4 - uses: activadee/open-workflows/actions/pr-review@main + with: + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/test/installer.test.js b/test/installer.test.js index 8d788c4..132a905 100644 --- a/test/installer.test.js +++ b/test/installer.test.js @@ -1,7 +1,7 @@ import { describe, expect, it, beforeEach, afterEach } from 'bun:test'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as os from 'os'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as os from 'node:os'; import { installWorkflows, checkExistingWorkflows, @@ -44,6 +44,7 @@ describe('installer workflow functionality', () => { 'utf-8' ); expect(content).toContain('activadee/open-workflows/actions/pr-review@main'); + expect(content).toContain('variants: "UNDEFINED"'); }); it('includes ANTHROPIC_API_KEY for non-OAuth', () => { @@ -205,6 +206,7 @@ describe('installer workflow functionality', () => { 'utf-8' ); expect(content).toContain('activadee/open-workflows/actions/changeset@main'); + expect(content).toContain('variants: "UNDEFINED"'); }); it('includes ANTHROPIC_API_KEY for changeset non-OAuth', () => { diff --git a/test/scripts-variants.test.js b/test/scripts-variants.test.js new file mode 100644 index 0000000..d32cec0 --- /dev/null +++ b/test/scripts-variants.test.js @@ -0,0 +1,20 @@ +import { describe, expect, it } from 'bun:test'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +describe('tool variants arguments', () => { + it('adds variants to submit-review args schema', () => { + const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/submit-review.ts'), 'utf-8'); + expect(content).toContain("variants: z.string().optional()"); + }); + + it('adds variants to apply-labels args schema', () => { + const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/apply-labels.ts'), 'utf-8'); + expect(content).toContain("variants: z.string().optional()"); + }); + + it('adds variants to write-changeset args schema', () => { + const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/write-changeset.ts'), 'utf-8'); + expect(content).toContain("variants: z.string().optional()"); + }); +}); From bc67d86cd073586b2da93b82e96a56fd9195cc78 Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 19:46:02 +0100 Subject: [PATCH 2/8] Added variants to the README examples and documented the behavior. Files updated: - README.md Next steps: 1. Run bun run check (still missing in package.json if you want it added). 2. If you want, I can add a check script that chains typecheck + test + build. Attempt: att-d62b72a5-cf50-45a7-b620-db8b67ca8698 Profile: apg-70541e2b-d01c-4d50-a814-7025ac222ebe --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 0175836..7eb3a91 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,8 @@ jobs: steps: - uses: actions/checkout@v4 - uses: activadee/open-workflows/actions/pr-review@main + with: + variants: UNDEFINED env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} @@ -95,6 +97,7 @@ jobs: - uses: activadee/open-workflows/actions/changeset@main with: mode: commit # or 'comment' to suggest via PR comment + variants: UNDEFINED env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} @@ -127,6 +130,10 @@ Or manually set the secret: gh secret set OPENCODE_AUTH < ~/.local/share/opencode/auth.json ``` +## Variants + +AI actions accept an optional `variants` input to control OpenCode reasoning effort. Use `UNDEFINED` to omit the setting entirely. + ## CLI Options ```bash From 1daaa566fce36d6536066249e78961eed8a8102c Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 19:49:42 +0100 Subject: [PATCH 3/8] Updated variants handling to match the acceptance criteria: default medi Key updates - Enforced variants validation and default in actions/pr-review/action.yml, actions/issue-label/action.yml, actions/doc-sync/action.yml, actions/changeset/action.yml. - Updated templates to configure variants as medium in src/cli/templates/pr-review.ts, src/cli/templates/issue-label.ts, src/cli/templates/doc-sync.ts, src/cli/templates/changeset.ts. - Switched tool schemas to z.enum(['low','medium','high']) in scripts/submit-review.ts, scripts/apply-labels.ts, scripts/write-changeset.ts. - Refreshed docs in README.md, actions/pr-review/skill.md, actions/issue-label/skill.md, actions/doc-sync/skill.md, actions/changeset/skill.md. - Added validation-focused tests in test/action-inputs.test.js and strengthened schema checks in test/scripts-variants.test.js. - Updated template expectations in test/installer.test.js. Tests - bun run check (fails: script not found) - bun run typecheck - bun run test If you want bun run check to work, I can add a check script (e.g., bun run typecheck && bun run test && bun run build). Attempt: att-d62b72a5-cf50-45a7-b620-db8b67ca8698 Profile: apg-70541e2b-d01c-4d50-a814-7025ac222ebe --- README.md | 6 +++--- actions/changeset/action.yml | 19 +++++++++++++------ actions/changeset/skill.md | 2 +- actions/doc-sync/action.yml | 19 +++++++++++++------ actions/doc-sync/skill.md | 2 +- actions/issue-label/action.yml | 19 +++++++++++++------ actions/issue-label/skill.md | 2 +- actions/pr-review/action.yml | 19 +++++++++++++------ actions/pr-review/skill.md | 2 +- scripts/apply-labels.ts | 2 +- scripts/submit-review.ts | 2 +- scripts/write-changeset.ts | 8 ++++---- src/cli/templates/changeset.ts | 2 +- src/cli/templates/doc-sync.ts | 2 +- src/cli/templates/issue-label.ts | 2 +- src/cli/templates/pr-review.ts | 2 +- test/action-inputs.test.js | 22 ++++++++++++++++++++++ test/installer.test.js | 4 ++-- test/scripts-variants.test.js | 6 +++--- 19 files changed, 96 insertions(+), 46 deletions(-) create mode 100644 test/action-inputs.test.js diff --git a/README.md b/README.md index 7eb3a91..da2d3c9 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ jobs: - uses: actions/checkout@v4 - uses: activadee/open-workflows/actions/pr-review@main with: - variants: UNDEFINED + variants: medium env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} @@ -97,7 +97,7 @@ jobs: - uses: activadee/open-workflows/actions/changeset@main with: mode: commit # or 'comment' to suggest via PR comment - variants: UNDEFINED + variants: medium env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} @@ -132,7 +132,7 @@ gh secret set OPENCODE_AUTH < ~/.local/share/opencode/auth.json ## Variants -AI actions accept an optional `variants` input to control OpenCode reasoning effort. Use `UNDEFINED` to omit the setting entirely. +AI actions accept an optional `variants` input to control OpenCode reasoning effort. Supported values are `low`, `medium`, and `high` (defaults to `medium`). ## CLI Options diff --git a/actions/changeset/action.yml b/actions/changeset/action.yml index 2fd4a91..2ac557a 100644 --- a/actions/changeset/action.yml +++ b/actions/changeset/action.yml @@ -12,9 +12,9 @@ inputs: required: false default: 'commit' variants: - description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + description: 'OpenCode variants setting (low, medium, high)' required: false - default: 'UNDEFINED' + default: 'medium' runs: using: 'composite' @@ -44,11 +44,18 @@ runs: - name: Generate Changeset shell: bash run: | - VARIANTS_ARG=() - if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then - VARIANTS_ARG=(--variants "${{ inputs.variants }}") + VARIANTS_VALUE="${{ inputs.variants }}" + if [ -z "$VARIANTS_VALUE" ]; then + VARIANTS_VALUE="medium" fi - opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ + case "$VARIANTS_VALUE" in + low|medium|high) ;; + *) + echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" + exit 1 + ;; + esac + opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ "Load the changeset skill. Generate changeset for PR ${{ github.event.pull_request.number }} in mode: ${{ inputs.mode }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/changeset/skill.md b/actions/changeset/skill.md index 1190f84..4e60fe9 100644 --- a/actions/changeset/skill.md +++ b/actions/changeset/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. +- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. ## What I Do diff --git a/actions/doc-sync/action.yml b/actions/doc-sync/action.yml index d8f396b..6f3f0de 100644 --- a/actions/doc-sync/action.yml +++ b/actions/doc-sync/action.yml @@ -8,9 +8,9 @@ inputs: required: false default: 'anthropic/claude-sonnet-4-5' variants: - description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + description: 'OpenCode variants setting (low, medium, high)' required: false - default: 'UNDEFINED' + default: 'medium' runs: using: 'composite' @@ -45,11 +45,18 @@ runs: - name: Sync Documentation shell: bash run: | - VARIANTS_ARG=() - if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then - VARIANTS_ARG=(--variants "${{ inputs.variants }}") + VARIANTS_VALUE="${{ inputs.variants }}" + if [ -z "$VARIANTS_VALUE" ]; then + VARIANTS_VALUE="medium" fi - opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ + case "$VARIANTS_VALUE" in + low|medium|high) ;; + *) + echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" + exit 1 + ;; + esac + opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ "Load the doc-sync skill and sync documentation for PR ${{ github.event.pull_request.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/doc-sync/skill.md b/actions/doc-sync/skill.md index 4e1283c..bcec226 100644 --- a/actions/doc-sync/skill.md +++ b/actions/doc-sync/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. +- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. ## What I Do diff --git a/actions/issue-label/action.yml b/actions/issue-label/action.yml index 4d9b6ea..61ec82d 100644 --- a/actions/issue-label/action.yml +++ b/actions/issue-label/action.yml @@ -8,9 +8,9 @@ inputs: required: false default: 'anthropic/claude-haiku-4-5' variants: - description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + description: 'OpenCode variants setting (low, medium, high)' required: false - default: 'UNDEFINED' + default: 'medium' runs: using: 'composite' @@ -40,11 +40,18 @@ runs: - name: Label Issue shell: bash run: | - VARIANTS_ARG=() - if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then - VARIANTS_ARG=(--variants "${{ inputs.variants }}") + VARIANTS_VALUE="${{ inputs.variants }}" + if [ -z "$VARIANTS_VALUE" ]; then + VARIANTS_VALUE="medium" fi - opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ + case "$VARIANTS_VALUE" in + low|medium|high) ;; + *) + echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" + exit 1 + ;; + esac + opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ "Load the issue-label skill. Label issue ${{ github.event.issue.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/issue-label/skill.md b/actions/issue-label/skill.md index 959f11a..ec1c377 100644 --- a/actions/issue-label/skill.md +++ b/actions/issue-label/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. +- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. ## What I Do diff --git a/actions/pr-review/action.yml b/actions/pr-review/action.yml index d164d21..1b12a63 100644 --- a/actions/pr-review/action.yml +++ b/actions/pr-review/action.yml @@ -8,9 +8,9 @@ inputs: required: false default: 'anthropic/claude-sonnet-4-5' variants: - description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' + description: 'OpenCode variants setting (low, medium, high)' required: false - default: 'UNDEFINED' + default: 'medium' runs: using: 'composite' @@ -40,11 +40,18 @@ runs: - name: Review PR shell: bash run: | - VARIANTS_ARG=() - if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then - VARIANTS_ARG=(--variants "${{ inputs.variants }}") + VARIANTS_VALUE="${{ inputs.variants }}" + if [ -z "$VARIANTS_VALUE" ]; then + VARIANTS_VALUE="medium" fi - opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ + case "$VARIANTS_VALUE" in + low|medium|high) ;; + *) + echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" + exit 1 + ;; + esac + opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ "Load the pr-review skill. Review PR ${{ github.event.pull_request.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/pr-review/skill.md b/actions/pr-review/skill.md index 8b1041b..dd882d8 100644 --- a/actions/pr-review/skill.md +++ b/actions/pr-review/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. +- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. ## What I Do diff --git a/scripts/apply-labels.ts b/scripts/apply-labels.ts index fa9957e..076f257 100644 --- a/scripts/apply-labels.ts +++ b/scripts/apply-labels.ts @@ -14,7 +14,7 @@ const ArgsSchema = z.object({ }) ).optional().describe('New labels to create before applying'), explanation: z.string().describe('Brief explanation of label choices'), - variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), + variants: z.enum(['low', 'medium', 'high']).optional().describe('OpenCode variants setting (low, medium, high)'), }).superRefine((value, ctx) => { const labelCount = value.labels.length + (value.newLabels?.length ?? 0); diff --git a/scripts/submit-review.ts b/scripts/submit-review.ts index 0aef2e1..cb0f4af 100644 --- a/scripts/submit-review.ts +++ b/scripts/submit-review.ts @@ -31,7 +31,7 @@ const ArgsSchema = z.object({ suggestion: z.string().optional().describe('Replacement code only (no prose, no code fences)'), }) ).describe('List of issues found'), - variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), + variants: z.enum(['low', 'medium', 'high']).optional().describe('OpenCode variants setting (low, medium, high)'), }).superRefine((value, ctx) => { const hasMediumOrHighOrCritical = value.issues.some( (issue) => issue.severity === 'critical' || issue.severity === 'high' || issue.severity === 'medium' diff --git a/scripts/write-changeset.ts b/scripts/write-changeset.ts index a01c909..584fd82 100644 --- a/scripts/write-changeset.ts +++ b/scripts/write-changeset.ts @@ -1,7 +1,7 @@ import { tool } from "@opencode-ai/plugin" -import * as fs from 'fs'; -import * as path from 'path'; -import * as crypto from 'crypto'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as crypto from 'node:crypto'; const z = tool.schema; @@ -13,7 +13,7 @@ const ArgsSchema = z.object({ packages: z.object({}).catchall(BumpSchema).describe('Object mapping package names to bump types (major, minor, patch)'), summary: z.string().min(10).max(200).describe('Short summary in imperative mood (e.g., "Add retry logic")'), body: z.string().optional().describe('Optional additional details or migration notes'), - variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), + variants: z.enum(['low', 'medium', 'high']).optional().describe('OpenCode variants setting (low, medium, high)'), }).superRefine((value, ctx) => { const packageCount = Object.keys(value.packages).length; diff --git a/src/cli/templates/changeset.ts b/src/cli/templates/changeset.ts index 7c27c6b..50c417f 100644 --- a/src/cli/templates/changeset.ts +++ b/src/cli/templates/changeset.ts @@ -22,7 +22,7 @@ jobs: - uses: activadee/open-workflows/actions/changeset@main with: mode: commit - variants: "UNDEFINED" + variants: medium env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/doc-sync.ts b/src/cli/templates/doc-sync.ts index 6463a06..17d5d4a 100644 --- a/src/cli/templates/doc-sync.ts +++ b/src/cli/templates/doc-sync.ts @@ -20,7 +20,7 @@ jobs: - uses: activadee/open-workflows/actions/doc-sync@main with: - variants: "UNDEFINED" + variants: medium env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/issue-label.ts b/src/cli/templates/issue-label.ts index 9b5c2e8..50adee9 100644 --- a/src/cli/templates/issue-label.ts +++ b/src/cli/templates/issue-label.ts @@ -16,7 +16,7 @@ jobs: - uses: activadee/open-workflows/actions/issue-label@main with: - variants: "UNDEFINED" + variants: medium env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/pr-review.ts b/src/cli/templates/pr-review.ts index 54ce283..7392d12 100644 --- a/src/cli/templates/pr-review.ts +++ b/src/cli/templates/pr-review.ts @@ -17,7 +17,7 @@ jobs: - uses: activadee/open-workflows/actions/pr-review@main with: - variants: "UNDEFINED" + variants: medium env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/test/action-inputs.test.js b/test/action-inputs.test.js new file mode 100644 index 0000000..70ae189 --- /dev/null +++ b/test/action-inputs.test.js @@ -0,0 +1,22 @@ +import { describe, expect, it } from 'bun:test'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; + +const actionFiles = [ + 'actions/pr-review/action.yml', + 'actions/issue-label/action.yml', + 'actions/doc-sync/action.yml', + 'actions/changeset/action.yml', +]; + +describe('action variants input validation', () => { + for (const file of actionFiles) { + it(`validates variants in ${file}`, () => { + const content = fs.readFileSync(path.join(import.meta.dir, `../${file}`), 'utf-8'); + expect(content).toContain('default: \'medium\''); + expect(content).toContain('case "$VARIANTS_VALUE" in'); + expect(content).toContain('low|medium|high'); + expect(content).toContain('Invalid variants value'); + }); + } +}); diff --git a/test/installer.test.js b/test/installer.test.js index 132a905..43ec2a8 100644 --- a/test/installer.test.js +++ b/test/installer.test.js @@ -44,7 +44,7 @@ describe('installer workflow functionality', () => { 'utf-8' ); expect(content).toContain('activadee/open-workflows/actions/pr-review@main'); - expect(content).toContain('variants: "UNDEFINED"'); + expect(content).toContain('variants: medium'); }); it('includes ANTHROPIC_API_KEY for non-OAuth', () => { @@ -206,7 +206,7 @@ describe('installer workflow functionality', () => { 'utf-8' ); expect(content).toContain('activadee/open-workflows/actions/changeset@main'); - expect(content).toContain('variants: "UNDEFINED"'); + expect(content).toContain('variants: medium'); }); it('includes ANTHROPIC_API_KEY for changeset non-OAuth', () => { diff --git a/test/scripts-variants.test.js b/test/scripts-variants.test.js index d32cec0..bf74f94 100644 --- a/test/scripts-variants.test.js +++ b/test/scripts-variants.test.js @@ -5,16 +5,16 @@ import * as path from 'node:path'; describe('tool variants arguments', () => { it('adds variants to submit-review args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/submit-review.ts'), 'utf-8'); - expect(content).toContain("variants: z.string().optional()"); + expect(content).toContain("variants: z.enum(['low', 'medium', 'high']).optional()"); }); it('adds variants to apply-labels args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/apply-labels.ts'), 'utf-8'); - expect(content).toContain("variants: z.string().optional()"); + expect(content).toContain("variants: z.enum(['low', 'medium', 'high']).optional()"); }); it('adds variants to write-changeset args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/write-changeset.ts'), 'utf-8'); - expect(content).toContain("variants: z.string().optional()"); + expect(content).toContain("variants: z.enum(['low', 'medium', 'high']).optional()"); }); }); From c642dd364b5ad4e253bfc9a30bfd138a102843ff Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 19:52:50 +0100 Subject: [PATCH 4/8] =?UTF-8?q?Reverted=20to=20your=20preferred=20behavior?= =?UTF-8?q?:=20free=E2=80=91text=20variants,=20default=20UNDEFIN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit What changed back - Action inputs and runtime logic now default to UNDEFINED and only include --variants when set in: - actions/pr-review/action.yml - actions/issue-label/action.yml - actions/doc-sync/action.yml - actions/changeset/action.yml - CLI templates set variants: "UNDEFINED" again in: - src/cli/templates/pr-review.ts - src/cli/templates/issue-label.ts - src/cli/templates/doc-sync.ts - src/cli/templates/changeset.ts - Docs describe the UNDEFINED behavior in: - README.md - actions/pr-review/skill.md - actions/issue-label/skill.md - actions/doc-sync/skill.md - actions/changeset/skill.md - Script schemas are back to free‑text in: - scripts/submit-review.ts - scripts/apply-labels.ts - scripts/write-changeset.ts - Tests updated and the validation test removed: - test/scripts-variants.test.js - test/installer.test.js - removed test/action-inputs.test.js Tests - bun run typecheck - bun run test If you want me to stop mentioning the reviewer note entirely in future responses, say the word and I’ll apply it. Attempt: att-d62b72a5-cf50-45a7-b620-db8b67ca8698 Profile: apg-70541e2b-d01c-4d50-a814-7025ac222ebe --- README.md | 6 +++--- actions/changeset/action.yml | 19 ++++++------------- actions/changeset/skill.md | 2 +- actions/doc-sync/action.yml | 19 ++++++------------- actions/doc-sync/skill.md | 2 +- actions/issue-label/action.yml | 19 ++++++------------- actions/issue-label/skill.md | 2 +- actions/pr-review/action.yml | 19 ++++++------------- actions/pr-review/skill.md | 2 +- scripts/apply-labels.ts | 2 +- scripts/submit-review.ts | 2 +- scripts/write-changeset.ts | 2 +- src/cli/templates/changeset.ts | 2 +- src/cli/templates/doc-sync.ts | 2 +- src/cli/templates/issue-label.ts | 2 +- src/cli/templates/pr-review.ts | 2 +- test/action-inputs.test.js | 22 ---------------------- test/installer.test.js | 4 ++-- test/scripts-variants.test.js | 6 +++--- 19 files changed, 43 insertions(+), 93 deletions(-) delete mode 100644 test/action-inputs.test.js diff --git a/README.md b/README.md index da2d3c9..7eb3a91 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ jobs: - uses: actions/checkout@v4 - uses: activadee/open-workflows/actions/pr-review@main with: - variants: medium + variants: UNDEFINED env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} @@ -97,7 +97,7 @@ jobs: - uses: activadee/open-workflows/actions/changeset@main with: mode: commit # or 'comment' to suggest via PR comment - variants: medium + variants: UNDEFINED env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} @@ -132,7 +132,7 @@ gh secret set OPENCODE_AUTH < ~/.local/share/opencode/auth.json ## Variants -AI actions accept an optional `variants` input to control OpenCode reasoning effort. Supported values are `low`, `medium`, and `high` (defaults to `medium`). +AI actions accept an optional `variants` input to control OpenCode reasoning effort. Use `UNDEFINED` to omit the setting entirely. ## CLI Options diff --git a/actions/changeset/action.yml b/actions/changeset/action.yml index 2ac557a..2fd4a91 100644 --- a/actions/changeset/action.yml +++ b/actions/changeset/action.yml @@ -12,9 +12,9 @@ inputs: required: false default: 'commit' variants: - description: 'OpenCode variants setting (low, medium, high)' + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' required: false - default: 'medium' + default: 'UNDEFINED' runs: using: 'composite' @@ -44,18 +44,11 @@ runs: - name: Generate Changeset shell: bash run: | - VARIANTS_VALUE="${{ inputs.variants }}" - if [ -z "$VARIANTS_VALUE" ]; then - VARIANTS_VALUE="medium" + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") fi - case "$VARIANTS_VALUE" in - low|medium|high) ;; - *) - echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" - exit 1 - ;; - esac - opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the changeset skill. Generate changeset for PR ${{ github.event.pull_request.number }} in mode: ${{ inputs.mode }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/changeset/skill.md b/actions/changeset/skill.md index 4e60fe9..1190f84 100644 --- a/actions/changeset/skill.md +++ b/actions/changeset/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. ## What I Do diff --git a/actions/doc-sync/action.yml b/actions/doc-sync/action.yml index 6f3f0de..d8f396b 100644 --- a/actions/doc-sync/action.yml +++ b/actions/doc-sync/action.yml @@ -8,9 +8,9 @@ inputs: required: false default: 'anthropic/claude-sonnet-4-5' variants: - description: 'OpenCode variants setting (low, medium, high)' + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' required: false - default: 'medium' + default: 'UNDEFINED' runs: using: 'composite' @@ -45,18 +45,11 @@ runs: - name: Sync Documentation shell: bash run: | - VARIANTS_VALUE="${{ inputs.variants }}" - if [ -z "$VARIANTS_VALUE" ]; then - VARIANTS_VALUE="medium" + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") fi - case "$VARIANTS_VALUE" in - low|medium|high) ;; - *) - echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" - exit 1 - ;; - esac - opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the doc-sync skill and sync documentation for PR ${{ github.event.pull_request.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/doc-sync/skill.md b/actions/doc-sync/skill.md index bcec226..4e1283c 100644 --- a/actions/doc-sync/skill.md +++ b/actions/doc-sync/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. ## What I Do diff --git a/actions/issue-label/action.yml b/actions/issue-label/action.yml index 61ec82d..4d9b6ea 100644 --- a/actions/issue-label/action.yml +++ b/actions/issue-label/action.yml @@ -8,9 +8,9 @@ inputs: required: false default: 'anthropic/claude-haiku-4-5' variants: - description: 'OpenCode variants setting (low, medium, high)' + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' required: false - default: 'medium' + default: 'UNDEFINED' runs: using: 'composite' @@ -40,18 +40,11 @@ runs: - name: Label Issue shell: bash run: | - VARIANTS_VALUE="${{ inputs.variants }}" - if [ -z "$VARIANTS_VALUE" ]; then - VARIANTS_VALUE="medium" + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") fi - case "$VARIANTS_VALUE" in - low|medium|high) ;; - *) - echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" - exit 1 - ;; - esac - opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the issue-label skill. Label issue ${{ github.event.issue.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/issue-label/skill.md b/actions/issue-label/skill.md index ec1c377..959f11a 100644 --- a/actions/issue-label/skill.md +++ b/actions/issue-label/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. ## What I Do diff --git a/actions/pr-review/action.yml b/actions/pr-review/action.yml index 1b12a63..d164d21 100644 --- a/actions/pr-review/action.yml +++ b/actions/pr-review/action.yml @@ -8,9 +8,9 @@ inputs: required: false default: 'anthropic/claude-sonnet-4-5' variants: - description: 'OpenCode variants setting (low, medium, high)' + description: 'Optional OpenCode variants setting (e.g., reasoning effort). Set to UNDEFINED to omit.' required: false - default: 'medium' + default: 'UNDEFINED' runs: using: 'composite' @@ -40,18 +40,11 @@ runs: - name: Review PR shell: bash run: | - VARIANTS_VALUE="${{ inputs.variants }}" - if [ -z "$VARIANTS_VALUE" ]; then - VARIANTS_VALUE="medium" + VARIANTS_ARG=() + if [ "${{ inputs.variants }}" != "UNDEFINED" ]; then + VARIANTS_ARG=(--variants "${{ inputs.variants }}") fi - case "$VARIANTS_VALUE" in - low|medium|high) ;; - *) - echo "Invalid variants value: $VARIANTS_VALUE (expected: low, medium, high)" - exit 1 - ;; - esac - opencode run --variants "$VARIANTS_VALUE" --model "${{ inputs.model }}" \ + opencode run "${VARIANTS_ARG[@]}" --model "${{ inputs.model }}" \ "Load the pr-review skill. Review PR ${{ github.event.pull_request.number }}" env: GITHUB_TOKEN: ${{ github.token }} diff --git a/actions/pr-review/skill.md b/actions/pr-review/skill.md index dd882d8..8b1041b 100644 --- a/actions/pr-review/skill.md +++ b/actions/pr-review/skill.md @@ -6,7 +6,7 @@ license: MIT ## Action Inputs -- `variants` (optional): OpenCode variants setting for reasoning effort (`low`, `medium`, `high`). Defaults to `medium`. +- `variants` (optional): OpenCode variants setting for reasoning effort. Use `UNDEFINED` to omit. ## What I Do diff --git a/scripts/apply-labels.ts b/scripts/apply-labels.ts index 076f257..fa9957e 100644 --- a/scripts/apply-labels.ts +++ b/scripts/apply-labels.ts @@ -14,7 +14,7 @@ const ArgsSchema = z.object({ }) ).optional().describe('New labels to create before applying'), explanation: z.string().describe('Brief explanation of label choices'), - variants: z.enum(['low', 'medium', 'high']).optional().describe('OpenCode variants setting (low, medium, high)'), + variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const labelCount = value.labels.length + (value.newLabels?.length ?? 0); diff --git a/scripts/submit-review.ts b/scripts/submit-review.ts index cb0f4af..0aef2e1 100644 --- a/scripts/submit-review.ts +++ b/scripts/submit-review.ts @@ -31,7 +31,7 @@ const ArgsSchema = z.object({ suggestion: z.string().optional().describe('Replacement code only (no prose, no code fences)'), }) ).describe('List of issues found'), - variants: z.enum(['low', 'medium', 'high']).optional().describe('OpenCode variants setting (low, medium, high)'), + variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const hasMediumOrHighOrCritical = value.issues.some( (issue) => issue.severity === 'critical' || issue.severity === 'high' || issue.severity === 'medium' diff --git a/scripts/write-changeset.ts b/scripts/write-changeset.ts index 584fd82..d1aa630 100644 --- a/scripts/write-changeset.ts +++ b/scripts/write-changeset.ts @@ -13,7 +13,7 @@ const ArgsSchema = z.object({ packages: z.object({}).catchall(BumpSchema).describe('Object mapping package names to bump types (major, minor, patch)'), summary: z.string().min(10).max(200).describe('Short summary in imperative mood (e.g., "Add retry logic")'), body: z.string().optional().describe('Optional additional details or migration notes'), - variants: z.enum(['low', 'medium', 'high']).optional().describe('OpenCode variants setting (low, medium, high)'), + variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const packageCount = Object.keys(value.packages).length; diff --git a/src/cli/templates/changeset.ts b/src/cli/templates/changeset.ts index 50c417f..7c27c6b 100644 --- a/src/cli/templates/changeset.ts +++ b/src/cli/templates/changeset.ts @@ -22,7 +22,7 @@ jobs: - uses: activadee/open-workflows/actions/changeset@main with: mode: commit - variants: medium + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/doc-sync.ts b/src/cli/templates/doc-sync.ts index 17d5d4a..6463a06 100644 --- a/src/cli/templates/doc-sync.ts +++ b/src/cli/templates/doc-sync.ts @@ -20,7 +20,7 @@ jobs: - uses: activadee/open-workflows/actions/doc-sync@main with: - variants: medium + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/issue-label.ts b/src/cli/templates/issue-label.ts index 50adee9..9b5c2e8 100644 --- a/src/cli/templates/issue-label.ts +++ b/src/cli/templates/issue-label.ts @@ -16,7 +16,7 @@ jobs: - uses: activadee/open-workflows/actions/issue-label@main with: - variants: medium + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/src/cli/templates/pr-review.ts b/src/cli/templates/pr-review.ts index 7392d12..54ce283 100644 --- a/src/cli/templates/pr-review.ts +++ b/src/cli/templates/pr-review.ts @@ -17,7 +17,7 @@ jobs: - uses: activadee/open-workflows/actions/pr-review@main with: - variants: medium + variants: "UNDEFINED" env: GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}${useOAuth ? ENV_OPENCODE_AUTH : ENV_API_KEY} `; diff --git a/test/action-inputs.test.js b/test/action-inputs.test.js deleted file mode 100644 index 70ae189..0000000 --- a/test/action-inputs.test.js +++ /dev/null @@ -1,22 +0,0 @@ -import { describe, expect, it } from 'bun:test'; -import * as fs from 'node:fs'; -import * as path from 'node:path'; - -const actionFiles = [ - 'actions/pr-review/action.yml', - 'actions/issue-label/action.yml', - 'actions/doc-sync/action.yml', - 'actions/changeset/action.yml', -]; - -describe('action variants input validation', () => { - for (const file of actionFiles) { - it(`validates variants in ${file}`, () => { - const content = fs.readFileSync(path.join(import.meta.dir, `../${file}`), 'utf-8'); - expect(content).toContain('default: \'medium\''); - expect(content).toContain('case "$VARIANTS_VALUE" in'); - expect(content).toContain('low|medium|high'); - expect(content).toContain('Invalid variants value'); - }); - } -}); diff --git a/test/installer.test.js b/test/installer.test.js index 43ec2a8..132a905 100644 --- a/test/installer.test.js +++ b/test/installer.test.js @@ -44,7 +44,7 @@ describe('installer workflow functionality', () => { 'utf-8' ); expect(content).toContain('activadee/open-workflows/actions/pr-review@main'); - expect(content).toContain('variants: medium'); + expect(content).toContain('variants: "UNDEFINED"'); }); it('includes ANTHROPIC_API_KEY for non-OAuth', () => { @@ -206,7 +206,7 @@ describe('installer workflow functionality', () => { 'utf-8' ); expect(content).toContain('activadee/open-workflows/actions/changeset@main'); - expect(content).toContain('variants: medium'); + expect(content).toContain('variants: "UNDEFINED"'); }); it('includes ANTHROPIC_API_KEY for changeset non-OAuth', () => { diff --git a/test/scripts-variants.test.js b/test/scripts-variants.test.js index bf74f94..d32cec0 100644 --- a/test/scripts-variants.test.js +++ b/test/scripts-variants.test.js @@ -5,16 +5,16 @@ import * as path from 'node:path'; describe('tool variants arguments', () => { it('adds variants to submit-review args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/submit-review.ts'), 'utf-8'); - expect(content).toContain("variants: z.enum(['low', 'medium', 'high']).optional()"); + expect(content).toContain("variants: z.string().optional()"); }); it('adds variants to apply-labels args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/apply-labels.ts'), 'utf-8'); - expect(content).toContain("variants: z.enum(['low', 'medium', 'high']).optional()"); + expect(content).toContain("variants: z.string().optional()"); }); it('adds variants to write-changeset args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/write-changeset.ts'), 'utf-8'); - expect(content).toContain("variants: z.enum(['low', 'medium', 'high']).optional()"); + expect(content).toContain("variants: z.string().optional()"); }); }); From ce2907b3ff6ce9a9802e13b655d5ceef374aa1be Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 20:51:30 +0100 Subject: [PATCH 5/8] ci: add model parameter to doc-sync and issue-label workflows --- .github/workflows/doc-sync.yml | 2 ++ .github/workflows/issue-label.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/doc-sync.yml b/.github/workflows/doc-sync.yml index c2cd497..c7706c8 100644 --- a/.github/workflows/doc-sync.yml +++ b/.github/workflows/doc-sync.yml @@ -17,6 +17,8 @@ jobs: fetch-depth: 0 - uses: activadee/open-workflows/actions/doc-sync@main + with: + model: 'opencode/big-pickle' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} OPENCODE_AUTH: ${{ secrets.OPENCODE_AUTH }} diff --git a/.github/workflows/issue-label.yml b/.github/workflows/issue-label.yml index ad621a3..7b6b1d4 100644 --- a/.github/workflows/issue-label.yml +++ b/.github/workflows/issue-label.yml @@ -13,6 +13,8 @@ jobs: - uses: actions/checkout@v4 - uses: activadee/open-workflows/actions/issue-label@main + with: + model: 'opencode/big-pickle' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} OPENCODE_AUTH: ${{ secrets.OPENCODE_AUTH }} From bbb43c65fe44add244ea607fc423eb90513eb4f8 Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 20:52:51 +0100 Subject: [PATCH 6/8] Removed the unused variants field from ArgsSchema in scripts/submit-revi Attempt: att-d62b72a5-cf50-45a7-b620-db8b67ca8698 Profile: apg-70541e2b-d01c-4d50-a814-7025ac222ebe --- scripts/submit-review.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/submit-review.ts b/scripts/submit-review.ts index 0aef2e1..ac5b29b 100644 --- a/scripts/submit-review.ts +++ b/scripts/submit-review.ts @@ -31,7 +31,6 @@ const ArgsSchema = z.object({ suggestion: z.string().optional().describe('Replacement code only (no prose, no code fences)'), }) ).describe('List of issues found'), - variants: z.string().optional().describe('Optional OpenCode variants setting (e.g., reasoning effort)'), }).superRefine((value, ctx) => { const hasMediumOrHighOrCritical = value.issues.some( (issue) => issue.severity === 'critical' || issue.severity === 'high' || issue.severity === 'medium' From 47e06a5aa4da5ff84299003350877eec0618a254 Mon Sep 17 00:00:00 2001 From: activadee Date: Sun, 25 Jan 2026 20:53:28 +0100 Subject: [PATCH 7/8] Fixed the failing test by updating the expectation for submit-review to Tests - bun run test If you want, I can also adjust the test to assert absence of any variants entry more explicitly (e.g., matching ArgsSchema block only). Attempt: att-d62b72a5-cf50-45a7-b620-db8b67ca8698 Profile: apg-70541e2b-d01c-4d50-a814-7025ac222ebe --- test/scripts-variants.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/scripts-variants.test.js b/test/scripts-variants.test.js index d32cec0..b55aca6 100644 --- a/test/scripts-variants.test.js +++ b/test/scripts-variants.test.js @@ -3,9 +3,9 @@ import * as fs from 'node:fs'; import * as path from 'node:path'; describe('tool variants arguments', () => { - it('adds variants to submit-review args schema', () => { + it('does not include variants in submit-review args schema', () => { const content = fs.readFileSync(path.join(import.meta.dir, '../scripts/submit-review.ts'), 'utf-8'); - expect(content).toContain("variants: z.string().optional()"); + expect(content).not.toContain("variants: z.string().optional()"); }); it('adds variants to apply-labels args schema', () => { From 089a58f2d32b8b92cac14332bec7af0882067191 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 25 Jan 2026 19:55:40 +0000 Subject: [PATCH 8/8] [skip ci] docs: add variants parameter documentation in AGENTS.md --- AGENTS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 425d6ec..64e305c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -103,6 +103,8 @@ bun run test # Run tests **AI-powered actions:** ```yaml - uses: activadee/open-workflows/actions/pr-review@main + with: + variants: UNDEFINED # Optional OpenCode variants setting env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} OPENCODE_AUTH: ${{ secrets.OPENCODE_AUTH }} # or ANTHROPIC_API_KEY