Merge pull request #302 from Kilo-Org/catrielmuller/ci-migration-3

feat: Complete Kilo GitHub Action migration
This commit is contained in:
Catriel Müller
2026-02-13 12:46:16 -03:00
committed by GitHub
27 changed files with 232 additions and 1537 deletions
+5 -1
View File
@@ -5,5 +5,9 @@ runs:
using: "composite"
steps:
- name: Install Kilo CLI
run: bun add -g @kilocode/cli
run: curl -fsSL https://kilo.ai/cli/install | bash
shell: bash
- name: Add Kilo to PATH
run: echo "$HOME/.kilo/bin" >> $GITHUB_PATH
shell: bash
@@ -0,0 +1,38 @@
name: kilo
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
kilo:
if: |
(github.event.comment.author_association == 'MEMBER' || github.event.comment.author_association == 'OWNER') &&
(
contains(github.event.comment.body, ' /kc') ||
startsWith(github.event.comment.body, '/kc') ||
contains(github.event.comment.body, ' /kilo') ||
startsWith(github.event.comment.body, '/kilo')
)
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
id-token: write
contents: read
pull-requests: read
issues: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: ./.github/actions/setup-bun
- name: Run opencode
uses: Kilo-Org/kilo/github@latest
env:
KILO_API_KEY: ${{ secrets.KILO_API_KEY }}
KILO_ORG_ID: ${{ secrets.KILO_ORG_ID }}
KILO_PERMISSION: '{"bash": "deny"}'
with:
model: kilo/kilo/auto
@@ -14,9 +14,6 @@ permissions:
jobs:
publish:
# kilocode_change start - disabled for kilo-cli fork (OpenCode GitHub Action publishing)
if: false
# kilocode_change end
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- uses: actions/checkout@v3
@@ -25,9 +22,13 @@ jobs:
- run: git fetch --force --tags
- name: Setup Git Committer
id: committer
uses: ./.github/actions/setup-git-committer
with:
kilo-maintainer-app-id: ${{ secrets.KILO_MAINTAINER_APP_ID }}
kilo-maintainer-app-secret: ${{ secrets.KILO_MAINTAINER_APP_SECRET }}
- name: Publish
run: |
git config --global user.email "opencode@sst.dev"
git config --global user.name "opencode"
./script/publish
run: ./script/publish
working-directory: ./github
@@ -14,9 +14,6 @@ permissions:
jobs:
release:
# kilocode_change start - disabled for kilo-cli fork (OpenCode GitHub Action release)
if: false
# kilocode_change end
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- uses: actions/checkout@v4
@@ -25,8 +22,13 @@ jobs:
- run: git fetch --force --tags
- name: Setup Git Committer
id: committer
uses: ./.github/actions/setup-git-committer
with:
kilo-maintainer-app-id: ${{ secrets.KILO_MAINTAINER_APP_ID }}
kilo-maintainer-app-secret: ${{ secrets.KILO_MAINTAINER_APP_SECRET }}
- name: Release
run: |
git config --global user.email "opencode@sst.dev"
git config --global user.name "opencode"
./github/script/release
@@ -9,9 +9,6 @@ concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
stats:
# kilocode_change start - disabled for kilo-cli fork (OpenCode stats tracking)
if: false
# kilocode_change end - original: if: github.repository == 'Kilo-Org/kilo'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: write
@@ -7,9 +7,6 @@ on:
jobs:
zed:
# kilocode_change start - disabled for kilo-cli fork (OpenCode Zed extension sync)
if: false
# kilocode_change end
name: Release Zed Extension
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
+7 -7
View File
@@ -6,9 +6,6 @@ on:
jobs:
check-duplicates:
# kilocode_change start - disabled for kilo-cli fork (requires OpenCode API key and install)
if: false
# kilocode_change end
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: read
@@ -21,12 +18,15 @@ jobs:
- uses: ./.github/actions/setup-bun
- name: Install opencode
run: curl -fsSL https://opencode.ai/install | bash
# kilocode_change start
- name: Setup Kilo
uses: ./.github/actions/setup-kilo
# kilocode_change end
- name: Check duplicates and compliance
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
KILO_API_KEY: ${{ secrets.KILO_API_KEY }}
KILO_ORG_ID: ${{ secrets.KILO_ORG_ID }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
KILO_PERMISSION: |
{
@@ -37,7 +37,7 @@ jobs:
"webfetch": "deny"
}
run: |
opencode run -m opencode/claude-haiku-4-5 "A new issue has been created:
kilo run -m "kilo/anthropic/claude-haiku-4.5" "A new issue has been created:
Issue number: ${{ github.event.issue.number }}
-38
View File
@@ -1,38 +0,0 @@
name: opencode
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
opencode:
# kilocode_change start - disabled for kilo-cli fork (OpenCode bot commands)
if: false
# kilocode_change end
# Original condition:
# if: |
# contains(github.event.comment.body, ' /oc') ||
# startsWith(github.event.comment.body, '/oc') ||
# contains(github.event.comment.body, ' /opencode') ||
# startsWith(github.event.comment.body, '/opencode')
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
id-token: write
contents: read
pull-requests: read
issues: read
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: ./.github/actions/setup-bun
- name: Run opencode
uses: Kilo-Org/kilo/github@latest
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
KILO_PERMISSION: '{"bash": "deny"}'
with:
model: opencode/claude-opus-4-5
+1 -1
View File
@@ -261,7 +261,7 @@ jobs:
mkdir -p ~/.ssh
echo "${{ secrets.AUR_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
git config --global user.email "hi@kilo.ai"
git config --global user.email "kilo-maintainer[bot]@users.noreply.github.com"
git config --global user.name "kilo-maintainer[bot]"
ssh-keyscan -H aur.archlinux.org >> ~/.ssh/known_hosts || true
+5 -7
View File
@@ -6,9 +6,6 @@ on:
jobs:
triage:
# kilocode_change start - disabled for kilo-cli fork (requires OpenCode API key and install)
if: false
# kilocode_change end
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: read
@@ -22,18 +19,19 @@ jobs:
- name: Setup Bun
uses: ./.github/actions/setup-bun
- name: Install opencode
run: curl -fsSL https://opencode.ai/install | bash
- name: Setup Kilo
uses: ./.github/actions/setup-kilo
- name: Triage issue
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
KILO_API_KEY: ${{ secrets.KILO_API_KEY }}
KILO_ORG_ID: ${{ secrets.KILO_ORG_ID }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
ISSUE_TITLE: ${{ github.event.issue.title }}
ISSUE_BODY: ${{ github.event.issue.body }}
run: |
opencode run --agent triage "The following issue was just opened, triage it:
kilo run --agent triage "The following issue was just opened, triage it:
Title: $ISSUE_TITLE
-34
View File
@@ -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
+65 -93
View File
@@ -1,45 +1,45 @@
# opencode GitHub Action
# Kilo GitHub Action
A GitHub Action that integrates [opencode](https://opencode.ai) directly into your GitHub workflow.
A GitHub Action that integrates [Kilo AI](https://kilo.ai) directly into your GitHub workflow.
Mention `/opencode` in your comment, and opencode will execute tasks within your GitHub Actions runner.
Mention `/kilo` or `/kc` in your comment, and Kilo 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.
Leave the following comment on a GitHub issue. Kilo will read the entire thread, including all comments, and reply with a clear explanation.
```
/opencode explain this issue
/kilo 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.
Leave the following comment on a GitHub issue. Kilo will create a new branch, implement the changes, and open a PR with the changes.
```
/opencode fix this
/kilo 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.
Leave the following comment on a GitHub PR. Kilo will implement the requested change and commit it to the same PR.
```
Delete the attachment from S3 when the note is removed /oc
Delete the attachment from S3 when the note is removed /kc
```
#### 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.
Leave a comment directly on code lines in the PR's "Files" tab. Kilo 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
/kc add error handling here
```
When commenting on specific lines, opencode receives:
When commenting on specific lines, Kilo receives:
- The exact file being reviewed
- The specific lines of code
@@ -53,18 +53,19 @@ This allows for more targeted requests without needing to specify file paths or
Run the following command in the terminal from your GitHub repo:
```bash
opencode github install
kilo github install
```
This will walk you through installing the GitHub app, creating the workflow, and setting up secrets.
This will walk you through installing the KiloConnect 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`.
1. Install the KiloConnect GitHub app at https://github.com/apps/kiloconnect. Make sure it is installed on the target repository.
2. Add the following workflow file to `.github/workflows/kilo.yml` in your repo. Set the appropriate `model` and required API keys.
```yml
name: opencode
name: kilo
on:
issue_comment:
@@ -73,94 +74,65 @@ This will walk you through installing the GitHub app, creating the workflow, and
types: [created]
jobs:
opencode:
kilo:
if: |
contains(github.event.comment.body, '/oc') ||
contains(github.event.comment.body, '/opencode')
contains(github.event.comment.body, '/kc') ||
contains(github.event.comment.body, '/kilo')
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
pull-requests: write
issues: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 1
persist-credentials: false
- name: Run opencode
uses: Kilo-Org/kilo/github@latest
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout repository
uses: actions/checkout@v6
with:
model: anthropic/claude-sonnet-4-20250514
use_github_token: true
persist-credentials: false
- name: Run Kilo
uses: Kilo-Org/kilo/github@latest
with:
model: kilo/claude-sonnet-4-20250514
kilo_api_key: ${{ secrets.KILO_API_KEY }}
kilo_org_id: ${{ secrets.KILO_ORG_ID }}
```
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.
3. Store the API keys in secrets. In your organization or project **settings**, expand **Secrets and variables** on the left and select **Actions**. Add `KILO_API_KEY` and `KILO_ORG_ID`.
## Configuration
### Inputs
- `model` (required) - The AI model to use (e.g., `kilo/claude-sonnet-4-20250514`)
- `kilo_api_key` (optional) - Kilo API key for gateway authentication
- `kilo_org_id` (optional) - Kilo organization ID
- `agent` (optional) - Agent to use. Must be a primary agent.
- `share` (optional) - Share the Kilo session (defaults to true for public repos)
- `prompt` (optional) - Custom prompt to override the default prompt
- `mentions` (optional) - Comma-separated list of trigger phrases (defaults to `/kilo,/kc`)
- `use_github_token` (optional) - Use GITHUB_TOKEN directly instead of Kilo App token exchange (defaults to `false`)
- `oidc_base_url` (optional) - Base URL for OIDC token exchange API (defaults to `https://api.kilo.ai`)
### Using Other Providers
You can also use other AI providers by setting their API keys:
```yml
- name: Run Kilo
uses: Kilo-Org/kilo/github@latest
with:
model: anthropic/claude-sonnet-4-20250514
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
```
## Support
This is an early release. If you encounter issues or have feedback, please create an issue at https://github.com/Kilo-Org/kilo/issues.
If you encounter issues or have feedback, please create an issue at https://github.com/Kilo-Org/kilo/issues.
## Development
To test locally:
This directory contains the composite GitHub Action definition. The actual implementation is in the Kilo CLI (`packages/opencode/src/cli/cmd/github.ts`).
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 ![Image](https://github.com/user-attachments/assets/xxxxxxxx)"}}}'
```
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"}}}'
```
To test locally, see the main [AGENTS.md](../AGENTS.md) for development instructions.
+28 -18
View File
@@ -1,8 +1,8 @@
name: "opencode GitHub Action"
description: "Run opencode in GitHub Actions workflows"
name: "Kilo GitHub Action"
description: "Run Kilo AI agent in GitHub Actions workflows"
branding:
icon: "code"
color: "orange"
color: "gray-dark"
inputs:
model:
@@ -14,7 +14,7 @@ inputs:
required: false
share:
description: "Share the opencode session (defaults to true for public repos)"
description: "Share the Kilo session (defaults to true for public repos)"
required: false
prompt:
@@ -22,48 +22,56 @@ inputs:
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."
description: "Use GITHUB_TOKEN directly instead of Kilo 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'"
description: "Comma-separated list of trigger phrases (case-insensitive). Defaults to '/kilo,/kc'"
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"
description: "Base URL for OIDC token exchange API. Only required when running a custom GitHub App install. Defaults to https://api.kilo.ai"
required: false
kilo_api_key:
description: "Kilo API key for gateway authentication"
required: false
kilo_org_id:
description: "Kilo organization ID"
required: false
runs:
using: "composite"
steps:
- name: Get opencode version
- name: Get Kilo version
id: version
shell: bash
run: |
VERSION=$(curl -sf https://api.github.com/repos/Kilo-Org/kilo/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4)
echo "version=${VERSION:-latest}" >> $GITHUB_OUTPUT
- name: Cache opencode
- name: Cache Kilo
id: cache
uses: actions/cache@v4
with:
path: ~/.opencode/bin
key: opencode-${{ runner.os }}-${{ runner.arch }}-${{ steps.version.outputs.version }}
path: ~/.kilo/bin
key: kilo-${{ runner.os }}-${{ runner.arch }}-${{ steps.version.outputs.version }}
- name: Install opencode
- name: Install Kilo
if: steps.cache.outputs.cache-hit != 'true'
shell: bash
run: curl -fsSL https://opencode.ai/install | bash
run: curl -fsSL https://kilo.ai/cli/install | bash
- name: Add opencode to PATH
- name: Add Kilo to PATH
shell: bash
run: echo "$HOME/.opencode/bin" >> $GITHUB_PATH
run: echo "$HOME/.kilo/bin" >> $GITHUB_PATH
- name: Run opencode
- name: Run Kilo
shell: bash
id: run_opencode
run: opencode github run
id: run_kilo
run: kilo github run
env:
MODEL: ${{ inputs.model }}
AGENT: ${{ inputs.agent }}
@@ -72,3 +80,5 @@ runs:
USE_GITHUB_TOKEN: ${{ inputs.use_github_token }}
MENTIONS: ${{ inputs.mentions }}
OIDC_BASE_URL: ${{ inputs.oidc_base_url }}
KILO_API_KEY: ${{ inputs.kilo_api_key }}
KILO_ORG_ID: ${{ inputs.kilo_org_id }}
-156
View File
@@ -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",
"@kilocode/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=="],
"@kilocode/sdk": ["@kilocode/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=="],
}
}
-1052
View File
File diff suppressed because it is too large Load Diff
-21
View File
@@ -1,21 +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:",
"@kilocode/sdk": "workspace:*"
},
"version": "1.0.21"
}
-9
View File
@@ -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 {}
-29
View File
@@ -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
}
}
+6 -6
View File
@@ -9,7 +9,7 @@ use tokio::sync::oneshot;
use crate::constants::{SETTINGS_STORE, WSL_ENABLED_KEY};
const CLI_INSTALL_DIR: &str = ".kilo/bin";
const CLI_BINARY_NAME: &str = "opencode";
const CLI_BINARY_NAME: &str = "kilo"; // kilocode_change
#[derive(serde::Deserialize)]
pub struct ServerConfig {
@@ -69,7 +69,7 @@ pub fn install_cli(app: tauri::AppHandle) -> Result<String, String> {
return Err("Sidecar binary not found".to_string());
}
let temp_script = std::env::temp_dir().join("opencode-install.sh");
let temp_script = std::env::temp_dir().join("kilo-install.sh"); // kilocode_change
std::fs::write(&temp_script, INSTALL_SCRIPT)
.map_err(|e| format!("Failed to write install script: {}", e))?;
@@ -208,10 +208,10 @@ pub fn create_command(app: &tauri::AppHandle, args: &str, extra_env: &[(&str, St
let version = app.package_info().version.to_string();
let mut script = vec![
"set -e".to_string(),
"BIN=\"$HOME/.opencode/bin/opencode\"".to_string(),
"BIN=\"$HOME/.kilo/bin/kilo\"".to_string(), // kilocode_change
"if [ ! -x \"$BIN\" ]; then".to_string(),
format!(
" curl -fsSL https://kilo.ai/install | bash -s -- --version {} --no-modify-path",
" curl -fsSL https://kilo.ai/cli/install | bash -s -- --version {} --no-modify-path", // kilocode_change
shell_escape(&version)
),
"fi".to_string(),
@@ -282,7 +282,7 @@ pub fn serve(
tracing::info!(port, "Spawning sidecar");
let envs = [
("KILO_SERVER_USERNAME", "opencode".to_string()),
("KILO_SERVER_USERNAME", "kilo".to_string()), // kilocode_change
("KILO_SERVER_PASSWORD", password.to_string()),
];
@@ -292,7 +292,7 @@ pub fn serve(
&envs,
)
.spawn()
.expect("Failed to spawn opencode");
.expect("Failed to spawn kilo"); // kilocode_change
tokio::spawn(async move {
let mut exit_tx = Some(exit_tx);
+46 -41
View File
@@ -131,9 +131,9 @@ type IssueQueryResponse = {
}
}
const AGENT_USERNAME = "opencode-agent[bot]"
const AGENT_USERNAME = "kiloconnect[bot]" // kilocode_change
const AGENT_REACTION = "eyes"
const WORKFLOW_FILE = ".github/workflows/opencode.yml"
const WORKFLOW_FILE = ".github/workflows/kilo.yml" // kilocode_change
// Event categories for routing
// USER_EVENTS: triggered by user actions, have actor/issueId, support reactions/comments
@@ -226,9 +226,9 @@ export const GithubInstallCommand = cmd({
` 1. Commit the \`${WORKFLOW_FILE}\` file and push`,
step2,
"",
" 3. Go to a GitHub issue and comment `/oc summarize` to see the agent in action",
" 3. Go to a GitHub issue and comment `/kilo summarize` to see the agent in action", // kilocode_change
"",
" Learn more about the GitHub agent - https://opencode.ai/docs/github/#usage-examples",
" Learn more about the GitHub agent - https://kilo.ai/docs/github/#usage-examples", // kilocode_change
].join("\n"),
)
}
@@ -252,7 +252,7 @@ export const GithubInstallCommand = cmd({
async function promptProvider() {
const priority: Record<string, number> = {
opencode: 0,
kilo: 0, // kilocode_change
anthropic: 1,
openai: 2,
google: 3,
@@ -310,7 +310,7 @@ export const GithubInstallCommand = cmd({
if (installation) return s.stop("GitHub app already installed")
// Open browser
const url = "https://github.com/apps/opencode-agent"
const url = "https://github.com/apps/kiloconnect" // kilocode_change
const command =
process.platform === "darwin"
? `open "${url}"`
@@ -346,23 +346,31 @@ export const GithubInstallCommand = cmd({
s.stop("Installed GitHub app")
async function getInstallation() {
return await fetch(
`https://api.opencode.ai/get_github_app_installation?owner=${app.owner}&repo=${app.repo}`,
)
// kilocode_change start - updated to new endpoint
return await fetch(`https://api.kilo.ai/api/integrations/github/check-installation?owner=${app.owner}`)
.then((res) => res.json())
.then((data) => data.installation)
// kilocode_change end
}
}
async function addWorkflowFiles() {
const envStr =
// kilocode_change start - updated workflow template with Kilo branding and gateway secrets
const providerEnvStr =
provider === "amazon-bedrock"
? ""
: `\n env:${providers[provider].env.map((e) => `\n ${e}: \${{ secrets.${e} }}`).join("")}`
: providers[provider].env.map((e) => `\n ${e}: \${{ secrets.${e} }}`).join("")
const kiloGatewayEnv =
provider === "kilo"
? `\n KILO_API_KEY: \${{ secrets.KILO_API_KEY }}\n KILO_ORG_ID: \${{ secrets.KILO_ORG_ID }}`
: ""
const envStr = providerEnvStr || kiloGatewayEnv ? `\n env:${providerEnvStr}${kiloGatewayEnv}` : ""
await Bun.write(
path.join(app.root, WORKFLOW_FILE),
`name: opencode
`name: kilo
on:
issue_comment:
@@ -371,12 +379,12 @@ on:
types: [created]
jobs:
opencode:
kilo:
if: |
contains(github.event.comment.body, ' /oc') ||
startsWith(github.event.comment.body, '/oc') ||
contains(github.event.comment.body, ' /opencode') ||
startsWith(github.event.comment.body, '/opencode')
contains(github.event.comment.body, ' /kc') ||
startsWith(github.event.comment.body, '/kc') ||
contains(github.event.comment.body, ' /kilo') ||
startsWith(github.event.comment.body, '/kilo')
runs-on: ubuntu-latest
permissions:
id-token: write
@@ -389,11 +397,12 @@ jobs:
with:
persist-credentials: false
- name: Run opencode
- name: Run Kilo
uses: Kilo-Org/kilo/github@latest${envStr}
with:
model: ${provider}/${model}`,
)
// kilocode_change end
prompts.log.success(`Added workflow file: "${WORKFLOW_FILE}"`)
}
@@ -459,7 +468,7 @@ export const GithubRunCommand = cmd({
? (payload as IssueCommentEvent | IssuesEvent).issue.number
: (payload as PullRequestEvent | PullRequestReviewCommentEvent).pull_request.number
const runUrl = `/${owner}/${repo}/actions/runs/${runId}`
const shareBaseUrl = isMock ? "https://dev.opencode.ai" : "https://opencode.ai"
const shareBaseUrl = isMock ? "https://dev.kilo.ai" : "https://kilo.ai" // kilocode_change
let appToken: string
let octoRest: Octokit
@@ -507,7 +516,7 @@ export const GithubRunCommand = cmd({
await addReaction(commentType)
}
// Setup opencode session
// Setup kilo session // kilocode_change
const repoData = await fetchRepo()
session = await Session.create({
permission: [
@@ -675,7 +684,7 @@ export const GithubRunCommand = cmd({
function normalizeOidcBaseUrl(): string {
const value = process.env["OIDC_BASE_URL"]
if (!value) return "https://api.opencode.ai"
if (!value) return "https://api.kilo.ai" // kilocode_change
return value.replace(/\/+$/, "")
}
@@ -724,7 +733,7 @@ export const GithubRunCommand = cmd({
}
const reviewContext = getReviewCommentContext()
const mentions = (process.env["MENTIONS"] || "/opencode,/oc")
const mentions = (process.env["MENTIONS"] || "/kilo,/kc") // kilocode_change
.split(",")
.map((m) => m.trim().toLowerCase())
.filter(Boolean)
@@ -870,7 +879,7 @@ export const GithubRunCommand = cmd({
}
async function chat(message: string, files: PromptFiles = []) {
console.log("Sending message to opencode...")
console.log("Sending message to kilo...") // kilocode_change
const result = await SessionPrompt.prompt({
sessionID: session.id,
@@ -954,7 +963,7 @@ export const GithubRunCommand = cmd({
async function getOidcToken() {
try {
return await core.getIDToken("opencode-github-action")
return await core.getIDToken("kilo-github-action") // kilocode_change
} catch (error) {
console.error("Failed to get OIDC token:", error instanceof Error ? error.message : error)
throw new Error(
@@ -964,20 +973,23 @@ export const GithubRunCommand = cmd({
}
async function exchangeForAppToken(token: string) {
// kilocode_change start - updated endpoint URLs per new API structure
const response = token.startsWith("github_pat_")
? await fetch(`${oidcBaseUrl}/exchange_github_app_token_with_pat`, {
? await fetch(`${oidcBaseUrl}/api/integrations/github/exchange-token-with-pat`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ owner, repo }),
})
: await fetch(`${oidcBaseUrl}/exchange_github_app_token`, {
: await fetch(`${oidcBaseUrl}/api/integrations/github/exchange-token`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
},
})
// kilocode_change end
if (!response.ok) {
const responseJson = (await response.json()) as { error?: string }
@@ -1055,9 +1067,9 @@ export const GithubRunCommand = cmd({
.join("")
if (type === "schedule" || type === "dispatch") {
const hex = crypto.randomUUID().slice(0, 6)
return `opencode/${type}-${hex}-${timestamp}`
return `kilo/${type}-${hex}-${timestamp}` // kilocode_change
}
return `opencode/${type}${issueId}-${timestamp}`
return `kilo/${type}${issueId}-${timestamp}` // kilocode_change
}
async function pushToNewBranch(summary: string, branch: string, commit: boolean, isSchedule: boolean) {
@@ -1289,17 +1301,10 @@ Co-authored-by: ${actor} <${actor}@users.noreply.github.com>"`
}
function footer(opts?: { image?: boolean }) {
const image = (() => {
if (!shareId) return ""
if (!opts?.image) return ""
const titleAlt = encodeURIComponent(session.title.substring(0, 50))
const title64 = Buffer.from(session.title.substring(0, 700), "utf8").toString("base64")
return `<a href="${shareBaseUrl}/s/${shareId}"><img width="200" alt="${titleAlt}" src="https://social-cards.sst.dev/opencode-share/${title64}.png?model=${providerID}/${modelID}&version=${session.version}&id=${shareId}" /></a>\n`
})()
const shareUrl = shareId ? `[opencode session](${shareBaseUrl}/s/${shareId})&nbsp;&nbsp;|&nbsp;&nbsp;` : ""
return `\n\n${image}${shareUrl}[github run](${runUrl})`
// kilocode_change start - simplified footer with text branding (no image backend yet)
const share = shareId ? `[kilo session](${shareBaseUrl}/s/${shareId})&nbsp;&nbsp;|&nbsp;&nbsp;` : ""
return `\n\n---\n*Powered by [Kilo](https://kilo.ai)*&nbsp;&nbsp;|&nbsp;&nbsp;${share}[github run](${runUrl})`
// kilocode_change end
}
async function fetchRepo() {
@@ -1359,7 +1364,7 @@ query($owner: String!, $repo: String!, $number: Int!) {
return [
"<github_action_context>",
"You are running as a GitHub Action. Important:",
"- Git push and PR creation are handled AUTOMATICALLY by the opencode infrastructure after your response",
"- Git push and PR creation are handled AUTOMATICALLY by the kilo infrastructure after your response", // kilocode_change
"- Do NOT include warnings or disclaimers about GitHub tokens, workflow permissions, or PR creation capabilities",
"- Do NOT suggest manual steps for creating PRs or pushing code - this happens automatically",
"- Focus only on the code changes and your analysis/response",
@@ -1497,7 +1502,7 @@ query($owner: String!, $repo: String!, $number: Int!) {
return [
"<github_action_context>",
"You are running as a GitHub Action. Important:",
"- Git push and PR creation are handled AUTOMATICALLY by the opencode infrastructure after your response",
"- Git push and PR creation are handled AUTOMATICALLY by the kilo infrastructure after your response", // kilocode_change
"- Do NOT include warnings or disclaimers about GitHub tokens, workflow permissions, or PR creation capabilities",
"- Do NOT suggest manual steps for creating PRs or pushing code - this happens automatically",
"- Focus only on the code changes and your analysis/response",
+1 -1
View File
@@ -147,6 +147,6 @@ Rpc.listen(rpc)
function getAuthorizationHeader(): string | undefined {
const password = Flag.KILO_SERVER_PASSWORD
if (!password) return undefined
const username = Flag.KILO_SERVER_USERNAME ?? "opencode"
const username = Flag.KILO_SERVER_USERNAME ?? "kilo" // kilocode_change
return `Basic ${btoa(`${username}:${password}`)}`
}
+2 -2
View File
@@ -16,7 +16,7 @@ import { ServeCommand } from "./cli/cmd/serve"
import { DebugCommand } from "./cli/cmd/debug"
import { StatsCommand } from "./cli/cmd/stats"
import { McpCommand } from "./cli/cmd/mcp"
import { GithubCommand } from "./cli/cmd/github"
// import { GithubCommand } from "./cli/cmd/github" // kilocode_change
import { ExportCommand } from "./cli/cmd/export"
import { ImportCommand } from "./cli/cmd/import"
import { AttachCommand } from "./cli/cmd/tui/attach"
@@ -125,7 +125,7 @@ const cli = yargs(hideBin(process.argv))
.command(StatsCommand)
.command(ExportCommand)
.command(ImportCommand)
.command(GithubCommand)
// .command(GithubCommand) // kilocode_change (Disabled until backend is ready)
.command(PrCommand)
.command(SessionCommand)
.fail((msg, err) => {
+1 -1
View File
@@ -84,7 +84,7 @@ export namespace Server {
if (c.req.method === "OPTIONS") return next()
const password = Flag.KILO_SERVER_PASSWORD
if (!password) return next()
const username = Flag.KILO_SERVER_USERNAME ?? "opencode"
const username = Flag.KILO_SERVER_USERNAME ?? "kilo" // kilocode_change
return basicAuth({ username, password })(c, next)
})
.use(async (c, next) => {
+12 -2
View File
@@ -82,6 +82,12 @@ export const defaultConfig: MergeConfig = {
".opencode/command/commit.md",
// Kilo-specific publish scripts
"packages/opencode/script/publish-registries.ts",
// GitHub Action - Kilo version is fully ported and complete
"github/action.yml",
"github/README.md",
"github/.gitignore",
"github/script/release",
"github/script/publish",
],
// Files that only exist in upstream and should NOT be added to Kilo
@@ -129,6 +135,12 @@ export const defaultConfig: MergeConfig = {
"packages/function/**",
"packages/docs/**",
"packages/identity/**",
// GitHub Action - Kilo version is fully ported and complete
"github/index.ts",
"github/package.json",
"github/tsconfig.json",
"github/bun.lock",
"github/sst-env.d.ts",
],
// Files that should take upstream version and apply Kilo branding transforms
@@ -146,8 +158,6 @@ export const defaultConfig: MergeConfig = {
// E2E and test fixtures
"packages/app/e2e/**/*.ts",
"packages/app/script/**/*.ts",
// GitHub script
"github/index.ts",
],
// Tauri/Desktop config files with predictable branding patterns