techunter 0.1.11 → 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/README.md +237 -209
- package/dist/index.js +1734 -956
- package/dist/mcp.js +1049 -378
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,209 +1,237 @@
|
|
|
1
|
-
# Techunter
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
```
|
|
6
|
-
╔═══════════════╗
|
|
7
|
-
◆═══╬ TECHUNTER ╬═══▶
|
|
8
|
-
╚═══════════════╝
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
##
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
task
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
##
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
1
|
+
# Techunter
|
|
2
|
+
|
|
3
|
+
> AI-powered task distribution CLI for development teams — manage GitHub Issues through a conversational terminal interface.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
╔═══════════════╗
|
|
7
|
+
◆═══╬ TECHUNTER ╬═══▶
|
|
8
|
+
╚═══════════════╝
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
<!-- demo GIF goes here -->
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Why Techunter?
|
|
16
|
+
|
|
17
|
+
Most teams manage tasks in GitHub Issues but switch between multiple tools to actually act on them. Techunter closes that gap:
|
|
18
|
+
|
|
19
|
+
| Without Techunter | With Techunter |
|
|
20
|
+
|---|---|
|
|
21
|
+
| Manually write Issue descriptions | `/new` → AI scans your codebase and generates a full implementation guide |
|
|
22
|
+
| Browse Issues in the browser, create branches by hand | `/pick` → select a task, branch is created and pushed automatically |
|
|
23
|
+
| Write PR descriptions, update labels manually | `/submit` → AI reviews your changes against acceptance criteria, then commits and opens the PR |
|
|
24
|
+
| Back-and-forth review comments | `/accept` or `/reject` with AI-generated feedback |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Installation
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install -g techunter
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Install from source:**
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git clone https://github.com/Zhang-Dongfang/Techunter.git
|
|
38
|
+
cd Techunter
|
|
39
|
+
npm install && npm run build && npm link
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
Run the one-time setup wizard inside any directory with a GitHub remote:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
tch init
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The wizard will prompt for:
|
|
53
|
+
1. **GitHub auth** — Browser OAuth (recommended) or a Personal Access Token (`repo` + `read:user` scopes)
|
|
54
|
+
2. **AI provider** — OpenRouter (default) or any OpenAI-compatible endpoint + API key
|
|
55
|
+
3. **Repository** — auto-detected from your git remote
|
|
56
|
+
|
|
57
|
+
Then start the REPL:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
tch
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Workflow
|
|
66
|
+
|
|
67
|
+
### 1. Create a task
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
You › /new
|
|
71
|
+
? Task title: Add email verification on signup
|
|
72
|
+
|
|
73
|
+
⠋ Scanning project and generating guide…
|
|
74
|
+
|
|
75
|
+
## Goal
|
|
76
|
+
Send a verification email after user registration.
|
|
77
|
+
|
|
78
|
+
## Acceptance Criteria
|
|
79
|
+
- [ ] POST /auth/register sends a verification email
|
|
80
|
+
- [ ] Email contains a signed token with 24h expiry
|
|
81
|
+
- [ ] GET /auth/verify/:token activates the account
|
|
82
|
+
- [ ] Unverified users cannot access protected routes
|
|
83
|
+
|
|
84
|
+
## Implementation Notes
|
|
85
|
+
- Use nodemailer (already in package.json)
|
|
86
|
+
- See existing token pattern in src/lib/auth.ts
|
|
87
|
+
- Add `verified` boolean column to users table
|
|
88
|
+
|
|
89
|
+
? Create this task? ❯ Yes, create task
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 2. Claim a task
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
You › /pick
|
|
96
|
+
|
|
97
|
+
? Select a task:
|
|
98
|
+
#14 available Add email verification on signup
|
|
99
|
+
❯ #11 available Fix login redirect bug
|
|
100
|
+
|
|
101
|
+
#11 Fix login redirect bug available
|
|
102
|
+
After OAuth login, users are redirected to /home
|
|
103
|
+
instead of their original destination URL.
|
|
104
|
+
|
|
105
|
+
? Action: ❯ Claim this task
|
|
106
|
+
|
|
107
|
+
✔ Claimed! Branch: worker-johndoe (base: a3f92c1)
|
|
108
|
+
|
|
109
|
+
? Open Claude Code for this task? ❯ Yes, start coding now
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 3. Submit when done
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
You › /submit
|
|
116
|
+
|
|
117
|
+
⠋ Reviewing changes against acceptance criteria…
|
|
118
|
+
|
|
119
|
+
✅ Return URL stored in session before redirect
|
|
120
|
+
✅ Redirects to return URL after successful login
|
|
121
|
+
✅ Falls back to /dashboard when no return URL
|
|
122
|
+
⚠️ Consider validating return URL to prevent open redirect
|
|
123
|
+
|
|
124
|
+
? Submit task #11? ❯ Yes, submit
|
|
125
|
+
|
|
126
|
+
✔ Committed and pushed
|
|
127
|
+
✔ PR created: https://github.com/myorg/my-project/pull/8
|
|
128
|
+
✔ Marked as in-review
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 4. Review and accept
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
You › /review # see all in-review PRs
|
|
135
|
+
You › /accept # merge PR, close issue, release branch
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Commands
|
|
141
|
+
|
|
142
|
+
| Command | Alias | Description |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| `/help` | `/h` | Show all commands |
|
|
145
|
+
| `/new` | `/n` | Create a task — AI generates an implementation guide |
|
|
146
|
+
| `/pick` | `/p` | Browse tasks and claim one |
|
|
147
|
+
| `/submit` | `/s` | AI-review changes, commit, push, open PR |
|
|
148
|
+
| `/review` | `/rv` | List tasks waiting for your approval |
|
|
149
|
+
| `/accept` | `/ac` | Merge PR and close issue |
|
|
150
|
+
| `/status` | `/me` | Show tasks assigned to you |
|
|
151
|
+
| `/edit` | `/e` | Edit a task title or description |
|
|
152
|
+
| `/close` | `/d` | Close (delete) a task |
|
|
153
|
+
| `/refresh` | `/r` | Reload the task list |
|
|
154
|
+
| `/code` | `/c` | Open Claude Code for the current task branch |
|
|
155
|
+
| `/wiki` | `/w` | Generate or refresh `TECHUNTER.md` project overview |
|
|
156
|
+
| `/config` | `/cfg` | Change settings (repo, API keys, model) |
|
|
157
|
+
| `/init` | | Re-run the setup wizard |
|
|
158
|
+
|
|
159
|
+
Any other input is sent to the AI agent:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
You › what tasks are available?
|
|
163
|
+
You › claim the task about login redirect
|
|
164
|
+
You › create a task to add pagination to the user list
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Task Lifecycle
|
|
170
|
+
|
|
171
|
+
Issues carry exactly one `techunter:*` label at a time:
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
techunter:available → techunter:claimed → techunter:in-review
|
|
175
|
+
↓ (if rejected)
|
|
176
|
+
techunter:changes-needed
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Labels are created automatically in your repository during `tch init`.
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Branch Naming
|
|
184
|
+
|
|
185
|
+
Each user has a persistent **worker branch** created when they first claim a task:
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
worker-{github-username}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Task branches submitted as PRs follow:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
task-{issue_number}-{first-five-words-of-title}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## MCP Server
|
|
200
|
+
|
|
201
|
+
Techunter ships a Model Context Protocol server that exposes all tools to any MCP-compatible client (e.g. Claude Desktop):
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
tch-mcp
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Development
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npm run dev # Run with tsx (no build step)
|
|
213
|
+
npm run build # Compile to dist/
|
|
214
|
+
npm run typecheck # Type-check without emitting
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
To verify end-to-end: build and run `tch init` in a directory with a GitHub remote.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Architecture
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
tch
|
|
225
|
+
└─ src/index.ts readline REPL + slash command dispatch
|
|
226
|
+
├─ /pick, /new … → tool run() functions directly
|
|
227
|
+
└─ natural language → runAgentLoop()
|
|
228
|
+
└─ LLM (tool_use) → toolModules[name].execute(input, config)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
All tools live in `src/tools/{name}/index.ts`. See [CLAUDE.md](CLAUDE.md) for full architecture notes.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## License
|
|
236
|
+
|
|
237
|
+
[MIT](LICENSE)
|