Merge pull request #4 from southseact-3d/cto-task-ok-so-for-this-for-the-opencode-folder-can-you-completely-de
Delete the github folder from opencode and remove related functionality
This commit is contained in:
@@ -1,30 +0,0 @@
|
|||||||
name: publish-github-action
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "github-v*.*.*"
|
|
||||||
- "!github-v1"
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- run: git fetch --force --tags
|
|
||||||
|
|
||||||
- name: Publish
|
|
||||||
run: |
|
|
||||||
git config --global user.email "opencode@sst.dev"
|
|
||||||
git config --global user.name "opencode"
|
|
||||||
./script/publish
|
|
||||||
working-directory: ./github
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
name: release-github-action
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- dev
|
|
||||||
paths:
|
|
||||||
- "github/**"
|
|
||||||
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
runs-on: blacksmith-4vcpu-ubuntu-2404
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- run: git fetch --force --tags
|
|
||||||
|
|
||||||
- name: Release
|
|
||||||
run: |
|
|
||||||
git config --global user.email "opencode@sst.dev"
|
|
||||||
git config --global user.name "opencode"
|
|
||||||
./github/script/release
|
|
||||||
34
opencode/github/.gitignore
vendored
34
opencode/github/.gitignore
vendored
@@ -1,34 +0,0 @@
|
|||||||
# dependencies (bun install)
|
|
||||||
node_modules
|
|
||||||
|
|
||||||
# output
|
|
||||||
out
|
|
||||||
dist
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# code coverage
|
|
||||||
coverage
|
|
||||||
*.lcov
|
|
||||||
|
|
||||||
# logs
|
|
||||||
logs
|
|
||||||
_.log
|
|
||||||
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
|
|
||||||
|
|
||||||
# dotenv environment variable files
|
|
||||||
.env
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
.env.local
|
|
||||||
|
|
||||||
# caches
|
|
||||||
.eslintcache
|
|
||||||
.cache
|
|
||||||
*.tsbuildinfo
|
|
||||||
|
|
||||||
# IntelliJ based IDEs
|
|
||||||
.idea
|
|
||||||
|
|
||||||
# Finder (MacOS) folder config
|
|
||||||
.DS_Store
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
# opencode GitHub Action
|
|
||||||
|
|
||||||
A GitHub Action that integrates [opencode](https://opencode.ai) directly into your GitHub workflow.
|
|
||||||
|
|
||||||
Mention `/opencode` in your comment, and opencode will execute tasks within your GitHub Actions runner.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
#### Explain an issue
|
|
||||||
|
|
||||||
Leave the following comment on a GitHub issue. `opencode` will read the entire thread, including all comments, and reply with a clear explanation.
|
|
||||||
|
|
||||||
```
|
|
||||||
/opencode explain this issue
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Fix an issue
|
|
||||||
|
|
||||||
Leave the following comment on a GitHub issue. opencode will create a new branch, implement the changes, and open a PR with the changes.
|
|
||||||
|
|
||||||
```
|
|
||||||
/opencode fix this
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Review PRs and make changes
|
|
||||||
|
|
||||||
Leave the following comment on a GitHub PR. opencode will implement the requested change and commit it to the same PR.
|
|
||||||
|
|
||||||
```
|
|
||||||
Delete the attachment from S3 when the note is removed /oc
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Review specific code lines
|
|
||||||
|
|
||||||
Leave a comment directly on code lines in the PR's "Files" tab. opencode will automatically detect the file, line numbers, and diff context to provide precise responses.
|
|
||||||
|
|
||||||
```
|
|
||||||
[Comment on specific lines in Files tab]
|
|
||||||
/oc add error handling here
|
|
||||||
```
|
|
||||||
|
|
||||||
When commenting on specific lines, opencode receives:
|
|
||||||
|
|
||||||
- The exact file being reviewed
|
|
||||||
- The specific lines of code
|
|
||||||
- The surrounding diff context
|
|
||||||
- Line number information
|
|
||||||
|
|
||||||
This allows for more targeted requests without needing to specify file paths or line numbers manually.
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Run the following command in the terminal from your GitHub repo:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
opencode github install
|
|
||||||
```
|
|
||||||
|
|
||||||
This will walk you through installing the GitHub app, creating the workflow, and setting up secrets.
|
|
||||||
|
|
||||||
### Manual Setup
|
|
||||||
|
|
||||||
1. Install the GitHub app https://github.com/apps/opencode-agent. Make sure it is installed on the target repository.
|
|
||||||
2. Add the following workflow file to `.github/workflows/opencode.yml` in your repo. Set the appropriate `model` and required API keys in `env`.
|
|
||||||
|
|
||||||
```yml
|
|
||||||
name: opencode
|
|
||||||
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
pull_request_review_comment:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
opencode:
|
|
||||||
if: |
|
|
||||||
contains(github.event.comment.body, '/oc') ||
|
|
||||||
contains(github.event.comment.body, '/opencode')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Run opencode
|
|
||||||
uses: anomalyco/opencode/github@latest
|
|
||||||
env:
|
|
||||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
model: anthropic/claude-sonnet-4-20250514
|
|
||||||
use_github_token: true
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Store the API keys in secrets. In your organization or project **settings**, expand **Secrets and variables** on the left and select **Actions**. Add the required API keys.
|
|
||||||
|
|
||||||
## Support
|
|
||||||
|
|
||||||
This is an early release. If you encounter issues or have feedback, please create an issue at https://github.com/anomalyco/opencode/issues.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
To test locally:
|
|
||||||
|
|
||||||
1. Navigate to a test repo (e.g. `hello-world`):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd hello-world
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
MODEL=anthropic/claude-sonnet-4-20250514 \
|
|
||||||
ANTHROPIC_API_KEY=sk-ant-api03-1234567890 \
|
|
||||||
GITHUB_RUN_ID=dummy \
|
|
||||||
MOCK_TOKEN=github_pat_1234567890 \
|
|
||||||
MOCK_EVENT='{"eventName":"issue_comment",...}' \
|
|
||||||
bun /path/to/opencode/github/index.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
- `MODEL`: The model used by opencode. Same as the `MODEL` defined in the GitHub workflow.
|
|
||||||
- `ANTHROPIC_API_KEY`: Your model provider API key. Same as the keys defined in the GitHub workflow.
|
|
||||||
- `GITHUB_RUN_ID`: Dummy value to emulate GitHub action environment.
|
|
||||||
- `MOCK_TOKEN`: A GitHub personal access token. This token is used to verify you have `admin` or `write` access to the test repo. Generate a token [here](https://github.com/settings/personal-access-tokens).
|
|
||||||
- `MOCK_EVENT`: Mock GitHub event payload (see templates below).
|
|
||||||
- `/path/to/opencode`: Path to your cloned opencode repo. `bun /path/to/opencode/github/index.ts` runs your local version of `opencode`.
|
|
||||||
|
|
||||||
### Issue comment event
|
|
||||||
|
|
||||||
```
|
|
||||||
MOCK_EVENT='{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4},"comment":{"id":1,"body":"hey opencode, summarize thread"}}}'
|
|
||||||
```
|
|
||||||
|
|
||||||
Replace:
|
|
||||||
|
|
||||||
- `"owner":"sst"` with repo owner
|
|
||||||
- `"repo":"hello-world"` with repo name
|
|
||||||
- `"actor":"fwang"` with the GitHub username of commenter
|
|
||||||
- `"number":4` with the GitHub issue id
|
|
||||||
- `"body":"hey opencode, summarize thread"` with comment body
|
|
||||||
|
|
||||||
### Issue comment with image attachment.
|
|
||||||
|
|
||||||
```
|
|
||||||
MOCK_EVENT='{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4},"comment":{"id":1,"body":"hey opencode, what is in my image "}}}'
|
|
||||||
```
|
|
||||||
|
|
||||||
Replace the image URL `https://github.com/user-attachments/assets/xxxxxxxx` with a valid GitHub attachment (you can generate one by commenting with an image in any issue).
|
|
||||||
|
|
||||||
### PR comment event
|
|
||||||
|
|
||||||
```
|
|
||||||
MOCK_EVENT='{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4,"pull_request":{}},"comment":{"id":1,"body":"hey opencode, summarize thread"}}}'
|
|
||||||
```
|
|
||||||
|
|
||||||
### PR review comment event
|
|
||||||
|
|
||||||
```
|
|
||||||
MOCK_EVENT='{"eventName":"pull_request_review_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"pull_request":{"number":7},"comment":{"id":1,"body":"hey opencode, add error handling","path":"src/components/Button.tsx","diff_hunk":"@@ -45,8 +45,11 @@\n- const handleClick = () => {\n- console.log('clicked')\n+ const handleClick = useCallback(() => {\n+ console.log('clicked')\n+ doSomething()\n+ }, [doSomething])","line":47,"original_line":45,"position":10,"commit_id":"abc123","original_commit_id":"def456"}}}'
|
|
||||||
```
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
name: "opencode GitHub Action"
|
|
||||||
description: "Run opencode in GitHub Actions workflows"
|
|
||||||
branding:
|
|
||||||
icon: "code"
|
|
||||||
color: "orange"
|
|
||||||
|
|
||||||
inputs:
|
|
||||||
model:
|
|
||||||
description: "Model to use"
|
|
||||||
required: true
|
|
||||||
|
|
||||||
agent:
|
|
||||||
description: "Agent to use. Must be a primary agent. Falls back to default_agent from config or 'build' if not found."
|
|
||||||
required: false
|
|
||||||
|
|
||||||
share:
|
|
||||||
description: "Share the opencode session (defaults to true for public repos)"
|
|
||||||
required: false
|
|
||||||
|
|
||||||
prompt:
|
|
||||||
description: "Custom prompt to override the default prompt"
|
|
||||||
required: false
|
|
||||||
|
|
||||||
use_github_token:
|
|
||||||
description: "Use GITHUB_TOKEN directly instead of OpenCode App token exchange. When true, skips OIDC and uses the GITHUB_TOKEN env var."
|
|
||||||
required: false
|
|
||||||
default: "false"
|
|
||||||
|
|
||||||
mentions:
|
|
||||||
description: "Comma-separated list of trigger phrases (case-insensitive). Defaults to '/opencode,/oc'"
|
|
||||||
required: false
|
|
||||||
|
|
||||||
oidc_base_url:
|
|
||||||
description: "Base URL for OIDC token exchange API. Only required when running a custom GitHub App install. Defaults to https://api.opencode.ai"
|
|
||||||
required: false
|
|
||||||
|
|
||||||
runs:
|
|
||||||
using: "composite"
|
|
||||||
steps:
|
|
||||||
- name: Get opencode version
|
|
||||||
id: version
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
VERSION=$(curl -sf https://api.github.com/repos/anomalyco/opencode/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4)
|
|
||||||
echo "version=${VERSION:-latest}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Cache opencode
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.opencode/bin
|
|
||||||
key: opencode-${{ runner.os }}-${{ runner.arch }}-${{ steps.version.outputs.version }}
|
|
||||||
|
|
||||||
- name: Install opencode
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
shell: bash
|
|
||||||
run: curl -fsSL https://opencode.ai/install | bash
|
|
||||||
|
|
||||||
- name: Add opencode to PATH
|
|
||||||
shell: bash
|
|
||||||
run: echo "$HOME/.opencode/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Run opencode
|
|
||||||
shell: bash
|
|
||||||
id: run_opencode
|
|
||||||
run: opencode github run
|
|
||||||
env:
|
|
||||||
MODEL: ${{ inputs.model }}
|
|
||||||
AGENT: ${{ inputs.agent }}
|
|
||||||
SHARE: ${{ inputs.share }}
|
|
||||||
PROMPT: ${{ inputs.prompt }}
|
|
||||||
USE_GITHUB_TOKEN: ${{ inputs.use_github_token }}
|
|
||||||
MENTIONS: ${{ inputs.mentions }}
|
|
||||||
OIDC_BASE_URL: ${{ inputs.oidc_base_url }}
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
{
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"workspaces": {
|
|
||||||
"": {
|
|
||||||
"name": "github",
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/core": "1.11.1",
|
|
||||||
"@actions/github": "6.0.1",
|
|
||||||
"@octokit/graphql": "9.0.1",
|
|
||||||
"@octokit/rest": "22.0.0",
|
|
||||||
"@opencode-ai/sdk": "0.5.4",
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/bun": "latest",
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"typescript": "^5",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"packages": {
|
|
||||||
"@actions/core": ["@actions/core@1.11.1", "", { "dependencies": { "@actions/exec": "^1.1.1", "@actions/http-client": "^2.0.1" } }, "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A=="],
|
|
||||||
|
|
||||||
"@actions/exec": ["@actions/exec@1.1.1", "", { "dependencies": { "@actions/io": "^1.0.1" } }, "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w=="],
|
|
||||||
|
|
||||||
"@actions/github": ["@actions/github@6.0.1", "", { "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", "@octokit/plugin-paginate-rest": "^9.2.2", "@octokit/plugin-rest-endpoint-methods": "^10.4.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "undici": "^5.28.5" } }, "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw=="],
|
|
||||||
|
|
||||||
"@actions/http-client": ["@actions/http-client@2.2.3", "", { "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" } }, "sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA=="],
|
|
||||||
|
|
||||||
"@actions/io": ["@actions/io@1.1.3", "", {}, "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q=="],
|
|
||||||
|
|
||||||
"@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="],
|
|
||||||
|
|
||||||
"@octokit/auth-token": ["@octokit/auth-token@4.0.0", "", {}, "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA=="],
|
|
||||||
|
|
||||||
"@octokit/core": ["@octokit/core@5.2.2", "", { "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", "@octokit/request": "^8.4.1", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" } }, "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg=="],
|
|
||||||
|
|
||||||
"@octokit/endpoint": ["@octokit/endpoint@9.0.6", "", { "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw=="],
|
|
||||||
|
|
||||||
"@octokit/graphql": ["@octokit/graphql@9.0.1", "", { "dependencies": { "@octokit/request": "^10.0.2", "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg=="],
|
|
||||||
|
|
||||||
"@octokit/openapi-types": ["@octokit/openapi-types@25.1.0", "", {}, "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@9.2.2", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log": ["@octokit/plugin-request-log@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@10.4.1", "", { "dependencies": { "@octokit/types": "^12.6.0" }, "peerDependencies": { "@octokit/core": "5" } }, "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg=="],
|
|
||||||
|
|
||||||
"@octokit/request": ["@octokit/request@8.4.1", "", { "dependencies": { "@octokit/endpoint": "^9.0.6", "@octokit/request-error": "^5.1.1", "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" } }, "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw=="],
|
|
||||||
|
|
||||||
"@octokit/request-error": ["@octokit/request-error@5.1.1", "", { "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" } }, "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g=="],
|
|
||||||
|
|
||||||
"@octokit/rest": ["@octokit/rest@22.0.0", "", { "dependencies": { "@octokit/core": "^7.0.2", "@octokit/plugin-paginate-rest": "^13.0.1", "@octokit/plugin-request-log": "^6.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0" } }, "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA=="],
|
|
||||||
|
|
||||||
"@octokit/types": ["@octokit/types@14.1.0", "", { "dependencies": { "@octokit/openapi-types": "^25.1.0" } }, "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g=="],
|
|
||||||
|
|
||||||
"@opencode-ai/sdk": ["@opencode-ai/sdk@0.5.4", "", {}, "sha512-bNT9hJgTvmnWGZU4LM90PMy60xOxxCOI5IaGB5voP2EVj+8RdLxmkwuAB4FUHwLo7fNlmxkZp89NVsMYw2Y3Aw=="],
|
|
||||||
|
|
||||||
"@types/bun": ["@types/bun@1.2.20", "", { "dependencies": { "bun-types": "1.2.20" } }, "sha512-dX3RGzQ8+KgmMw7CsW4xT5ITBSCrSbfHc36SNT31EOUg/LA9JWq0VDdEXDRSe1InVWpd2yLUM1FUF/kEOyTzYA=="],
|
|
||||||
|
|
||||||
"@types/node": ["@types/node@24.3.0", "", { "dependencies": { "undici-types": "~7.10.0" } }, "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow=="],
|
|
||||||
|
|
||||||
"@types/react": ["@types/react@19.1.10", "", { "dependencies": { "csstype": "^3.0.2" } }, "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg=="],
|
|
||||||
|
|
||||||
"before-after-hook": ["before-after-hook@2.2.3", "", {}, "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="],
|
|
||||||
|
|
||||||
"bun-types": ["bun-types@1.2.20", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, "sha512-pxTnQYOrKvdOwyiyd/7sMt9yFOenN004Y6O4lCcCUoKVej48FS5cvTw9geRaEcB9TsDZaJKAxPTVvi8tFsVuXA=="],
|
|
||||||
|
|
||||||
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
|
|
||||||
|
|
||||||
"deprecation": ["deprecation@2.3.1", "", {}, "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="],
|
|
||||||
|
|
||||||
"fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="],
|
|
||||||
|
|
||||||
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
|
|
||||||
|
|
||||||
"tunnel": ["tunnel@0.0.6", "", {}, "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="],
|
|
||||||
|
|
||||||
"typescript": ["typescript@5.9.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
|
|
||||||
|
|
||||||
"undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="],
|
|
||||||
|
|
||||||
"undici-types": ["undici-types@7.10.0", "", {}, "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="],
|
|
||||||
|
|
||||||
"universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="],
|
|
||||||
|
|
||||||
"wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
|
|
||||||
|
|
||||||
"@octokit/core/@octokit/graphql": ["@octokit/graphql@7.1.1", "", { "dependencies": { "@octokit/request": "^8.4.1", "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" } }, "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g=="],
|
|
||||||
|
|
||||||
"@octokit/core/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="],
|
|
||||||
|
|
||||||
"@octokit/core/universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="],
|
|
||||||
|
|
||||||
"@octokit/endpoint/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="],
|
|
||||||
|
|
||||||
"@octokit/endpoint/universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="],
|
|
||||||
|
|
||||||
"@octokit/graphql/@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log/@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@12.6.0", "", { "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw=="],
|
|
||||||
|
|
||||||
"@octokit/request/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="],
|
|
||||||
|
|
||||||
"@octokit/request/universal-user-agent": ["universal-user-agent@6.0.1", "", {}, "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="],
|
|
||||||
|
|
||||||
"@octokit/request-error/@octokit/types": ["@octokit/types@13.10.0", "", { "dependencies": { "@octokit/openapi-types": "^24.2.0" } }, "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/core": ["@octokit/core@7.0.3", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.1", "@octokit/request": "^10.0.2", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@13.1.1", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@16.0.0", "", { "dependencies": { "@octokit/types": "^14.1.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g=="],
|
|
||||||
|
|
||||||
"@octokit/core/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="],
|
|
||||||
|
|
||||||
"@octokit/endpoint/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="],
|
|
||||||
|
|
||||||
"@octokit/graphql/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="],
|
|
||||||
|
|
||||||
"@octokit/graphql/@octokit/request/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log/@octokit/core/@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log/@octokit/core/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@20.0.0", "", {}, "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA=="],
|
|
||||||
|
|
||||||
"@octokit/request-error/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="],
|
|
||||||
|
|
||||||
"@octokit/request/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@24.2.0", "", {}, "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/core/@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/core/@octokit/request": ["@octokit/request@10.0.3", "", { "dependencies": { "@octokit/endpoint": "^11.0.0", "@octokit/request-error": "^7.0.0", "@octokit/types": "^14.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/core/@octokit/request-error": ["@octokit/request-error@7.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0" } }, "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/core/before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="],
|
|
||||||
|
|
||||||
"@octokit/plugin-request-log/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="],
|
|
||||||
|
|
||||||
"@octokit/rest/@octokit/core/@octokit/request/@octokit/endpoint": ["@octokit/endpoint@11.0.0", "", { "dependencies": { "@octokit/types": "^14.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ=="],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "github",
|
|
||||||
"module": "index.ts",
|
|
||||||
"type": "module",
|
|
||||||
"private": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/bun": "catalog:"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"typescript": "^5"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@actions/core": "1.11.1",
|
|
||||||
"@actions/github": "6.0.1",
|
|
||||||
"@octokit/graphql": "9.0.1",
|
|
||||||
"@octokit/rest": "catalog:",
|
|
||||||
"@opencode-ai/sdk": "workspace:*"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Get the latest Git tag
|
|
||||||
latest_tag=$(git tag --sort=committerdate | grep -E '^github-v[0-9]+\.[0-9]+\.[0-9]+$' | tail -1)
|
|
||||||
if [ -z "$latest_tag" ]; then
|
|
||||||
echo "No tags found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Latest tag: $latest_tag"
|
|
||||||
|
|
||||||
# Update latest tag
|
|
||||||
git tag -d latest
|
|
||||||
git push origin :refs/tags/latest
|
|
||||||
git tag -a latest $latest_tag -m "Update latest to $latest_tag"
|
|
||||||
git push origin latest
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Parse command line arguments
|
|
||||||
minor=false
|
|
||||||
while [ "$#" -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
--minor) minor=true; shift 1;;
|
|
||||||
*) echo "Unknown parameter: $1"; exit 1;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Get the latest Git tag
|
|
||||||
git fetch --force --tags
|
|
||||||
latest_tag=$(git tag --sort=committerdate | grep -E '^github-v[0-9]+\.[0-9]+\.[0-9]+$' | tail -1)
|
|
||||||
if [ -z "$latest_tag" ]; then
|
|
||||||
echo "No tags found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Latest tag: $latest_tag"
|
|
||||||
|
|
||||||
# Split the tag into major, minor, and patch numbers
|
|
||||||
IFS='.' read -ra VERSION <<< "$latest_tag"
|
|
||||||
|
|
||||||
if [ "$minor" = true ]; then
|
|
||||||
# Increment the minor version and reset patch to 0
|
|
||||||
minor_number=${VERSION[1]}
|
|
||||||
let "minor_number++"
|
|
||||||
new_version="${VERSION[0]}.$minor_number.0"
|
|
||||||
else
|
|
||||||
# Increment the patch version
|
|
||||||
patch_number=${VERSION[2]}
|
|
||||||
let "patch_number++"
|
|
||||||
new_version="${VERSION[0]}.${VERSION[1]}.$patch_number"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "New version: $new_version"
|
|
||||||
|
|
||||||
# Tag
|
|
||||||
git tag $new_version
|
|
||||||
git push --tags
|
|
||||||
9
opencode/github/sst-env.d.ts
vendored
9
opencode/github/sst-env.d.ts
vendored
@@ -1,9 +0,0 @@
|
|||||||
/* This file is auto-generated by SST. Do not edit. */
|
|
||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
/* deno-fmt-ignore-file */
|
|
||||||
|
|
||||||
/// <reference path="../sst-env.d.ts" />
|
|
||||||
|
|
||||||
import "sst"
|
|
||||||
export {}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
// Environment setup & latest features
|
|
||||||
"lib": ["ESNext"],
|
|
||||||
"target": "ESNext",
|
|
||||||
"module": "Preserve",
|
|
||||||
"moduleDetection": "force",
|
|
||||||
"jsx": "react-jsx",
|
|
||||||
"allowJs": true,
|
|
||||||
|
|
||||||
// Bundler mode
|
|
||||||
"moduleResolution": "bundler",
|
|
||||||
"allowImportingTsExtensions": true,
|
|
||||||
"verbatimModuleSyntax": true,
|
|
||||||
"noEmit": true,
|
|
||||||
|
|
||||||
// Best practices
|
|
||||||
"strict": true,
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"noFallthroughCasesInSwitch": true,
|
|
||||||
"noUncheckedIndexedAccess": true,
|
|
||||||
"noImplicitOverride": true,
|
|
||||||
|
|
||||||
// Some stricter flags (disabled by default)
|
|
||||||
"noUnusedLocals": false,
|
|
||||||
"noUnusedParameters": false,
|
|
||||||
"noPropertyAccessFromIndexSignature": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -114,10 +114,6 @@ const TIPS = [
|
|||||||
"Run {highlight}opencode upgrade{/highlight} to update to the latest version",
|
"Run {highlight}opencode upgrade{/highlight} to update to the latest version",
|
||||||
"Run {highlight}opencode auth list{/highlight} to see all configured providers",
|
"Run {highlight}opencode auth list{/highlight} to see all configured providers",
|
||||||
"Run {highlight}opencode agent create{/highlight} for guided agent creation",
|
"Run {highlight}opencode agent create{/highlight} for guided agent creation",
|
||||||
"Use {highlight}/opencode{/highlight} in GitHub issues/PRs to trigger AI actions",
|
|
||||||
"Run {highlight}opencode github install{/highlight} to set up the GitHub workflow",
|
|
||||||
"Comment {highlight}/opencode fix this{/highlight} on issues to auto-create PRs",
|
|
||||||
"Comment {highlight}/oc{/highlight} on PR code lines for targeted code reviews",
|
|
||||||
'Use {highlight}"theme": "system"{/highlight} to match your terminal\'s colors',
|
'Use {highlight}"theme": "system"{/highlight} to match your terminal\'s colors',
|
||||||
"Create JSON theme files in {highlight}.opencode/themes/{/highlight} directory",
|
"Create JSON theme files in {highlight}.opencode/themes/{/highlight} directory",
|
||||||
"Themes support dark/light variants for both modes",
|
"Themes support dark/light variants for both modes",
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import { ServeCommand } from "./cli/cmd/serve"
|
|||||||
import { DebugCommand } from "./cli/cmd/debug"
|
import { DebugCommand } from "./cli/cmd/debug"
|
||||||
import { StatsCommand } from "./cli/cmd/stats"
|
import { StatsCommand } from "./cli/cmd/stats"
|
||||||
import { McpCommand } from "./cli/cmd/mcp"
|
import { McpCommand } from "./cli/cmd/mcp"
|
||||||
import { GithubCommand } from "./cli/cmd/github"
|
|
||||||
import { ExportCommand } from "./cli/cmd/export"
|
import { ExportCommand } from "./cli/cmd/export"
|
||||||
import { ImportCommand } from "./cli/cmd/import"
|
import { ImportCommand } from "./cli/cmd/import"
|
||||||
import { AttachCommand } from "./cli/cmd/tui/attach"
|
import { AttachCommand } from "./cli/cmd/tui/attach"
|
||||||
@@ -94,7 +93,6 @@ const cli = yargs(hideBin(process.argv))
|
|||||||
.command(StatsCommand)
|
.command(StatsCommand)
|
||||||
.command(ExportCommand)
|
.command(ExportCommand)
|
||||||
.command(ImportCommand)
|
.command(ImportCommand)
|
||||||
.command(GithubCommand)
|
|
||||||
.command(PrCommand)
|
.command(PrCommand)
|
||||||
.command(SessionCommand)
|
.command(SessionCommand)
|
||||||
.fail((msg, err) => {
|
.fail((msg, err) => {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ export default defineConfig({
|
|||||||
"1-0",
|
"1-0",
|
||||||
{
|
{
|
||||||
label: "Usage",
|
label: "Usage",
|
||||||
items: ["tui", "cli", "web", "ide", "zen", "share", "github", "gitlab"],
|
items: ["tui", "cli", "web", "ide", "zen", "share", "gitlab"],
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -155,45 +155,6 @@ opencode auth logout
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### github
|
|
||||||
|
|
||||||
Manage the GitHub agent for repository automation.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
opencode github [command]
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### install
|
|
||||||
|
|
||||||
Install the GitHub agent in your repository.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
opencode github install
|
|
||||||
```
|
|
||||||
|
|
||||||
This sets up the necessary GitHub Actions workflow and guides you through the configuration process. [Learn more](/docs/github).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### run
|
|
||||||
|
|
||||||
Run the GitHub agent. This is typically used in GitHub Actions.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
opencode github run
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Flags
|
|
||||||
|
|
||||||
| Flag | Description |
|
|
||||||
| --------- | -------------------------------------- |
|
|
||||||
| `--event` | GitHub mock event to run the agent for |
|
|
||||||
| `--token` | GitHub personal access token |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### mcp
|
### mcp
|
||||||
|
|
||||||
Manage Model Context Protocol servers.
|
Manage Model Context Protocol servers.
|
||||||
|
|||||||
@@ -1,321 +0,0 @@
|
|||||||
---
|
|
||||||
title: GitHub
|
|
||||||
description: Use OpenCode in GitHub issues and pull-requests.
|
|
||||||
---
|
|
||||||
|
|
||||||
OpenCode integrates with your GitHub workflow. Mention `/opencode` or `/oc` in your comment, and OpenCode will execute tasks within your GitHub Actions runner.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- **Triage issues**: Ask OpenCode to look into an issue and explain it to you.
|
|
||||||
- **Fix and implement**: Ask OpenCode to fix an issue or implement a feature. And it will work in a new branch and submits a PR with all the changes.
|
|
||||||
- **Secure**: OpenCode runs inside your GitHub's runners.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Run the following command in a project that is in a GitHub repo:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
opencode github install
|
|
||||||
```
|
|
||||||
|
|
||||||
This will walk you through installing the GitHub app, creating the workflow, and setting up secrets.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Manual Setup
|
|
||||||
|
|
||||||
Or you can set it up manually.
|
|
||||||
|
|
||||||
1. **Install the GitHub app**
|
|
||||||
|
|
||||||
Head over to [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent). Make sure it's installed on the target repository.
|
|
||||||
|
|
||||||
2. **Add the workflow**
|
|
||||||
|
|
||||||
Add the following workflow file to `.github/workflows/opencode.yml` in your repo. Make sure to set the appropriate `model` and required API keys in `env`.
|
|
||||||
|
|
||||||
```yml title=".github/workflows/opencode.yml" {24,26}
|
|
||||||
name: opencode
|
|
||||||
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
pull_request_review_comment:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
opencode:
|
|
||||||
if: |
|
|
||||||
contains(github.event.comment.body, '/oc') ||
|
|
||||||
contains(github.event.comment.body, '/opencode')
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Run OpenCode
|
|
||||||
uses: anomalyco/opencode/github@latest
|
|
||||||
env:
|
|
||||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
||||||
with:
|
|
||||||
model: anthropic/claude-sonnet-4-20250514
|
|
||||||
# share: true
|
|
||||||
# github_token: xxxx
|
|
||||||
```
|
|
||||||
|
|
||||||
3. **Store the API keys in secrets**
|
|
||||||
|
|
||||||
In your organization or project **settings**, expand **Secrets and variables** on the left and select **Actions**. And add the required API keys.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
- `model`: The model to use with OpenCode. Takes the format of `provider/model`. This is **required**.
|
|
||||||
- `agent`: The agent to use. Must be a primary agent. Falls back to `default_agent` from config or `"build"` if not found.
|
|
||||||
- `share`: Whether to share the OpenCode session. Defaults to **true** for public repositories.
|
|
||||||
- `prompt`: Optional custom prompt to override the default behavior. Use this to customize how OpenCode processes requests.
|
|
||||||
- `token`: Optional GitHub access token for performing operations such as creating comments, committing changes, and opening pull requests. By default, OpenCode uses the installation access token from the OpenCode GitHub App, so commits, comments, and pull requests appear as coming from the app.
|
|
||||||
|
|
||||||
Alternatively, you can use the GitHub Action runner's [built-in `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token) without installing the OpenCode GitHub App. Just make sure to grant the required permissions in your workflow:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
```
|
|
||||||
|
|
||||||
You can also use a [personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)(PAT) if preferred.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Supported Events
|
|
||||||
|
|
||||||
OpenCode can be triggered by the following GitHub events:
|
|
||||||
|
|
||||||
| Event Type | Triggered By | Details |
|
|
||||||
| ----------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
||||||
| `issue_comment` | Comment on an issue or PR | Mention `/opencode` or `/oc` in your comment. OpenCode reads context and can create branches, open PRs, or reply. |
|
|
||||||
| `pull_request_review_comment` | Comment on specific code lines in a PR | Mention `/opencode` or `/oc` while reviewing code. OpenCode receives file path, line numbers, and diff context. |
|
|
||||||
| `issues` | Issue opened or edited | Automatically trigger OpenCode when issues are created or modified. Requires `prompt` input. |
|
|
||||||
| `pull_request` | PR opened or updated | Automatically trigger OpenCode when PRs are opened, synchronized, or reopened. Useful for automated reviews. |
|
|
||||||
| `schedule` | Cron-based schedule | Run OpenCode on a schedule. Requires `prompt` input. Output goes to logs and PRs (no issue to comment on). |
|
|
||||||
| `workflow_dispatch` | Manual trigger from GitHub UI | Trigger OpenCode on demand via Actions tab. Requires `prompt` input. Output goes to logs and PRs. |
|
|
||||||
|
|
||||||
### Schedule Example
|
|
||||||
|
|
||||||
Run OpenCode on a schedule to perform automated tasks:
|
|
||||||
|
|
||||||
```yaml title=".github/workflows/opencode-scheduled.yml"
|
|
||||||
name: Scheduled OpenCode Task
|
|
||||||
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: "0 9 * * 1" # Every Monday at 9am UTC
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
opencode:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: Run OpenCode
|
|
||||||
uses: anomalyco/opencode/github@latest
|
|
||||||
env:
|
|
||||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
||||||
with:
|
|
||||||
model: anthropic/claude-sonnet-4-20250514
|
|
||||||
prompt: |
|
|
||||||
Review the codebase for any TODO comments and create a summary.
|
|
||||||
If you find issues worth addressing, open an issue to track them.
|
|
||||||
```
|
|
||||||
|
|
||||||
For scheduled events, the `prompt` input is **required** since there's no comment to extract instructions from. Scheduled workflows run without a user context to permission-check, so the workflow must grant `contents: write` and `pull-requests: write` if you expect OpenCode to create branches or PRs.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Pull Request Example
|
|
||||||
|
|
||||||
Automatically review PRs when they are opened or updated:
|
|
||||||
|
|
||||||
```yaml title=".github/workflows/opencode-review.yml"
|
|
||||||
name: opencode-review
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, synchronize, reopened, ready_for_review]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
review:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: read
|
|
||||||
pull-requests: read
|
|
||||||
issues: read
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- uses: anomalyco/opencode/github@latest
|
|
||||||
env:
|
|
||||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
model: anthropic/claude-sonnet-4-20250514
|
|
||||||
use_github_token: true
|
|
||||||
prompt: |
|
|
||||||
Review this pull request:
|
|
||||||
- Check for code quality issues
|
|
||||||
- Look for potential bugs
|
|
||||||
- Suggest improvements
|
|
||||||
```
|
|
||||||
|
|
||||||
For `pull_request` events, if no `prompt` is provided, OpenCode defaults to reviewing the pull request.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Issues Triage Example
|
|
||||||
|
|
||||||
Automatically triage new issues. This example filters to accounts older than 30 days to reduce spam:
|
|
||||||
|
|
||||||
```yaml title=".github/workflows/opencode-triage.yml"
|
|
||||||
name: Issue Triage
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [opened]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
triage:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
id-token: write
|
|
||||||
contents: write
|
|
||||||
pull-requests: write
|
|
||||||
issues: write
|
|
||||||
steps:
|
|
||||||
- name: Check account age
|
|
||||||
id: check
|
|
||||||
uses: actions/github-script@v7
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const user = await github.rest.users.getByUsername({
|
|
||||||
username: context.payload.issue.user.login
|
|
||||||
});
|
|
||||||
const created = new Date(user.data.created_at);
|
|
||||||
const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
|
|
||||||
return days >= 30;
|
|
||||||
result-encoding: string
|
|
||||||
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
if: steps.check.outputs.result == 'true'
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- uses: anomalyco/opencode/github@latest
|
|
||||||
if: steps.check.outputs.result == 'true'
|
|
||||||
env:
|
|
||||||
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
||||||
with:
|
|
||||||
model: anthropic/claude-sonnet-4-20250514
|
|
||||||
prompt: |
|
|
||||||
Review this issue. If there's a clear fix or relevant docs:
|
|
||||||
- Provide documentation links
|
|
||||||
- Add error handling guidance for code examples
|
|
||||||
Otherwise, do not comment.
|
|
||||||
```
|
|
||||||
|
|
||||||
For `issues` events, the `prompt` input is **required** since there's no comment to extract instructions from.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Custom prompts
|
|
||||||
|
|
||||||
Override the default prompt to customize OpenCode's behavior for your workflow.
|
|
||||||
|
|
||||||
```yaml title=".github/workflows/opencode.yml"
|
|
||||||
- uses: anomalyco/opencode/github@latest
|
|
||||||
with:
|
|
||||||
model: anthropic/claude-sonnet-4-5
|
|
||||||
prompt: |
|
|
||||||
Review this pull request:
|
|
||||||
- Check for code quality issues
|
|
||||||
- Look for potential bugs
|
|
||||||
- Suggest improvements
|
|
||||||
```
|
|
||||||
|
|
||||||
This is useful for enforcing specific review criteria, coding standards, or focus areas relevant to your project.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
Here are some examples of how you can use OpenCode in GitHub.
|
|
||||||
|
|
||||||
- **Explain an issue**
|
|
||||||
|
|
||||||
Add this comment in a GitHub issue.
|
|
||||||
|
|
||||||
```
|
|
||||||
/opencode explain this issue
|
|
||||||
```
|
|
||||||
|
|
||||||
OpenCode will read the entire thread, including all comments, and reply with a clear explanation.
|
|
||||||
|
|
||||||
- **Fix an issue**
|
|
||||||
|
|
||||||
In a GitHub issue, say:
|
|
||||||
|
|
||||||
```
|
|
||||||
/opencode fix this
|
|
||||||
```
|
|
||||||
|
|
||||||
And OpenCode will create a new branch, implement the changes, and open a PR with the changes.
|
|
||||||
|
|
||||||
- **Review PRs and make changes**
|
|
||||||
|
|
||||||
Leave the following comment on a GitHub PR.
|
|
||||||
|
|
||||||
```
|
|
||||||
Delete the attachment from S3 when the note is removed /oc
|
|
||||||
```
|
|
||||||
|
|
||||||
OpenCode will implement the requested change and commit it to the same PR.
|
|
||||||
|
|
||||||
- **Review specific code lines**
|
|
||||||
|
|
||||||
Leave a comment directly on code lines in the PR's "Files" tab. OpenCode automatically detects the file, line numbers, and diff context to provide precise responses.
|
|
||||||
|
|
||||||
```
|
|
||||||
[Comment on specific lines in Files tab]
|
|
||||||
/oc add error handling here
|
|
||||||
```
|
|
||||||
|
|
||||||
When commenting on specific lines, OpenCode receives:
|
|
||||||
- The exact file being reviewed
|
|
||||||
- The specific lines of code
|
|
||||||
- The surrounding diff context
|
|
||||||
- Line number information
|
|
||||||
|
|
||||||
This allows for more targeted requests without needing to specify file paths or line numbers manually.
|
|
||||||
Reference in New Issue
Block a user