@coldic3/slipway 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +143 -0
- package/dist/slipway.mjs +1928 -0
- package/docker/compose.yaml +29 -0
- package/gitea/public/assets/css/slipway.css +75 -0
- package/gitea/public/assets/img/apple-touch-icon.png +0 -0
- package/gitea/public/assets/img/favicon.png +0 -0
- package/gitea/public/assets/img/favicon.svg +14 -0
- package/gitea/public/assets/img/logo.png +0 -0
- package/gitea/public/assets/img/logo.svg +12 -0
- package/gitea/public/assets/js/slipway-head.js +8 -0
- package/gitea/public/assets/js/slipway.js +13 -0
- package/gitea/templates/base/footer_content.tmpl +4 -0
- package/gitea/templates/custom/extra_links.tmpl +1 -0
- package/gitea/templates/custom/footer.tmpl +1 -0
- package/gitea/templates/custom/header.tmpl +5 -0
- package/gitea/templates/repo/header/fork.tmpl +0 -0
- package/gitea/templates/repo/header/star.tmpl +0 -0
- package/gitea/templates/repo/header/watch.tmpl +0 -0
- package/gitea/templates/user/auth/signin.tmpl +14 -0
- package/package.json +67 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kevin Kaniaburka
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset=".github/assets/slipway-logo-dark.svg">
|
|
4
|
+
<img src=".github/assets/slipway-logo-light.svg" alt="Slipway" width="400">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<p align="center">
|
|
9
|
+
A local pull-request server for coding agents. Review on your machine, publish to GitHub only what you approved.
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-f2a43a"></a>
|
|
14
|
+
<img alt="macOS and Linux" src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-9aa1aa">
|
|
15
|
+
<img alt="Claude Code plugin" src="https://img.shields.io/badge/Claude%20Code-plugin-2a2d31">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
**Slipway** is three parts:
|
|
21
|
+
|
|
22
|
+
- **A local Git server.** Bound to `127.0.0.1`, with merging disabled. It hosts a copy of each registered repository and its pull
|
|
23
|
+
requests, and gives you a web UI to review them.
|
|
24
|
+
- **A Claude Code plugin.** An MCP server, skills and a hook. Claude Code pushes branches and opens pull requests in Slipway instead of
|
|
25
|
+
on GitHub, reads your review comments and answers them.
|
|
26
|
+
- **A CLI, `slipway`.** It starts and stops the server, registers repositories and promotes approved pull requests to GitHub.
|
|
27
|
+
|
|
28
|
+
## How it works
|
|
29
|
+
|
|
30
|
+
```mermaid
|
|
31
|
+
sequenceDiagram
|
|
32
|
+
actor Y as 👤 You
|
|
33
|
+
participant S as ⚓ Slipway<br/>127.0.0.1
|
|
34
|
+
participant A as 🤖 AI agent<br/>+ Slipway plugin
|
|
35
|
+
participant H as ☁️ Git host
|
|
36
|
+
|
|
37
|
+
A->>S: push the task branch, open the PR
|
|
38
|
+
loop until you approve
|
|
39
|
+
Y->>S: review code, title, description
|
|
40
|
+
S-->>A: review comments
|
|
41
|
+
A->>S: fix commits, force-push, reply
|
|
42
|
+
end
|
|
43
|
+
Y->>S: approve
|
|
44
|
+
rect rgba(242, 164, 58, 0.18)
|
|
45
|
+
Note over S,H: promote
|
|
46
|
+
A->>S: approval on the current head?
|
|
47
|
+
A->>A: secret scan, base up to date?
|
|
48
|
+
A->>H: push the same commits, open the PR<br/>with the approved title and description
|
|
49
|
+
end
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
1. Claude Code works on its own task branch, named by the repository's rules (`agent/<task>-<slug>` when there are none), and
|
|
53
|
+
opens the pull request in Slipway with a title and description that follow the repository's PR conventions.
|
|
54
|
+
2. You review it in the browser: the code, the title and the description.
|
|
55
|
+
3. Claude Code reads the review, folds each fix into the commit it belongs to and replies to every thread. Repeat as needed.
|
|
56
|
+
4. You approve.
|
|
57
|
+
5. On `promote`, Slipway checks your approval on the current head, scans the commits with gitleaks and pushes exactly those commits to
|
|
58
|
+
GitHub with the approved title and description. Your GitHub access comes from `gh` at that moment and is never stored.
|
|
59
|
+
|
|
60
|
+
If `main` moved on GitHub in the meantime, promotion stops. Claude Code rebases in Slipway and the pull request needs a fresh approval.
|
|
61
|
+
|
|
62
|
+
## Install
|
|
63
|
+
|
|
64
|
+
Requirements: macOS or Linux, `git`, and the [GitHub CLI](https://cli.github.com) signed in (`gh auth login`).
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
brew install coldic3/tap/slipway # or: npm install -g @coldic3/slipway (Node 22+)
|
|
68
|
+
slipway init
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`slipway init` asks which agent to set up, starts the server, creates your login and installs the Claude Code plugin. Then open
|
|
72
|
+
http://127.0.0.1:3514 and sign in as **slipway** / **slipway**.
|
|
73
|
+
|
|
74
|
+
Register a repository (its `origin` must be on GitHub):
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
cd your-project
|
|
78
|
+
slipway repo add .
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
In Claude Code: *"Implement X and open a Slipway PR."* After your review: *"Fix the review."* After your approval: *"Promote it."*
|
|
82
|
+
|
|
83
|
+
### Options
|
|
84
|
+
|
|
85
|
+
| | |
|
|
86
|
+
|---|---|
|
|
87
|
+
| Runtime | The server runs as a native binary in `~/.slipway` (downloaded once, sha256-pinned). Use Docker instead: `slipway init --docker`. |
|
|
88
|
+
| Port | Default `3514`. If it is taken, `slipway init` offers a free one. Override: `--port N` or `SLIPWAY_PORT`. |
|
|
89
|
+
| After a reboot | The plugin starts the server on its first call. Or run `slipway up`. |
|
|
90
|
+
| Plugin by hand | `/plugin marketplace add coldic3/slipway`, then `/plugin install slipway@slipway`. |
|
|
91
|
+
|
|
92
|
+
## Supported platforms
|
|
93
|
+
|
|
94
|
+
Slipway currently supports Claude Code as the AI agent and GitHub as the Git host, and both are built in directly. The plan is to make
|
|
95
|
+
Slipway extensible, so that other AI agents and Git hosts (such as GitLab) can be added as integrations in future releases.
|
|
96
|
+
Contributions are welcome.
|
|
97
|
+
|
|
98
|
+
## Commands
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
slipway init [--agent claude-code|none] [--port N] [--docker] [--yes]
|
|
102
|
+
slipway up [--port N] [--docker] # start the server
|
|
103
|
+
slipway down [--purge] # stop it (--purge deletes all Slipway data)
|
|
104
|
+
slipway status
|
|
105
|
+
slipway repo add <clone> [--name n] [--github owner/repo] [--base main]
|
|
106
|
+
slipway promote <repo> <pr> [--draft] [--base b] [--test-cmd "…"] [--force]
|
|
107
|
+
slipway sync-main <repo>
|
|
108
|
+
slipway setup | --help | --version
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The full guide (the review loop, the plugin's tools and skills, troubleshooting) is in [docs/plugin.md](docs/plugin.md).
|
|
112
|
+
|
|
113
|
+
## Guarantees
|
|
114
|
+
|
|
115
|
+
| | |
|
|
116
|
+
|---|---|
|
|
117
|
+
| Local only | The server listens on `127.0.0.1` and requires sign-in. |
|
|
118
|
+
| No merges | Every merge style is disabled and `main` is protected. Code leaves only through promotion. |
|
|
119
|
+
| Separate accounts | You review as `slipway`, a plain user. Claude Code has its own user that can push and comment, but not approve or merge. Repositories belong to the `repos` org, run by a technical `admin` account. |
|
|
120
|
+
| Exact promotion | Only with your approval on the current head; the commits you reviewed are the commits that reach GitHub. |
|
|
121
|
+
| Secret scan | gitleaks fails closed: a finding, an error or a missing scanner blocks promotion. |
|
|
122
|
+
| No stored GitHub token | The token is read from `gh` at promotion time and never written to disk. |
|
|
123
|
+
| Push guard | The plugin's hook blocks `git push` and `gh pr create` to GitHub for branches whose Slipway pull request is open or missing. |
|
|
124
|
+
|
|
125
|
+
Slipway is a workflow tool, not a sandbox: the agent runs as your OS user and could bypass it on purpose. Avatars are loaded from
|
|
126
|
+
Gravatar (an e-mail hash is sent to gravatar.com).
|
|
127
|
+
|
|
128
|
+
## Development
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
npm install
|
|
132
|
+
bin/slipway --help # the CLI from source
|
|
133
|
+
npm test # unit + functional (Vitest)
|
|
134
|
+
npm run test:e2e # Playwright against an isolated server on port 3300 (SLIPWAY_E2E_RUNTIME=docker for Docker)
|
|
135
|
+
npm run build:plugin # rebuild plugin/dist after changing src/ (committed; a test fails if stale)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Design decisions: [docs/adr](docs/adr). Releasing: [docs/releasing.md](docs/releasing.md). After changing the logo or the web UI
|
|
139
|
+
styles, run `npm run build:brand`.
|
|
140
|
+
|
|
141
|
+
## License
|
|
142
|
+
|
|
143
|
+
[MIT](LICENSE)
|