techunter 0.1.11 → 1.0.1
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 +135 -107
- package/dist/index.js +1960 -1003
- package/dist/mcp.js +1212 -382
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,50 +1,27 @@
|
|
|
1
1
|
# Techunter
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> AI-powered task distribution CLI for development teams — manage GitHub Issues through a conversational terminal interface.
|
|
4
4
|
|
|
5
5
|
```
|
|
6
6
|
╔═══════════════╗
|
|
7
|
-
◆═══╬ TECHUNTER ╬═══▶
|
|
8
|
-
╚═══════════════╝
|
|
7
|
+
◆═══╬ TECHUNTER ╬═══▶
|
|
8
|
+
╚═══════════════╝
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## Table of Contents
|
|
14
|
-
|
|
15
|
-
- [Features](#features)
|
|
16
|
-
- [Requirements](#requirements)
|
|
17
|
-
- [Installation](#installation)
|
|
18
|
-
- [Setup](#setup)
|
|
19
|
-
- [Usage](#usage)
|
|
20
|
-
- [Task Lifecycle](#task-lifecycle)
|
|
21
|
-
- [Branch Naming](#branch-naming)
|
|
22
|
-
- [AI Agent Tools](#ai-agent-tools)
|
|
23
|
-
- [Development](#development)
|
|
24
|
-
- [Architecture](#architecture)
|
|
25
|
-
- [License](#license)
|
|
11
|
+
<!-- demo GIF goes here -->
|
|
26
12
|
|
|
27
13
|
---
|
|
28
14
|
|
|
29
|
-
##
|
|
15
|
+
## Why Techunter?
|
|
30
16
|
|
|
31
|
-
|
|
32
|
-
- **GitHub Issues integration** — Create, claim, submit, review, and close tasks; labels and assignees stay in sync
|
|
33
|
-
- **Automatic branch management** — Claiming a task creates and pushes the corresponding Git branch
|
|
34
|
-
- **Smart task guides** — Before you start, the Agent scans your codebase and posts a detailed implementation guide as an Issue comment
|
|
35
|
-
- **One-command delivery** — `/submit` lets the Agent review your changes against acceptance criteria, then commits and pushes
|
|
36
|
-
- **Review & accept flow** — `/review` lists in-review PRs; `/accept` merges and closes
|
|
37
|
-
- **Slash commands** — Common actions don't need a description: just `/pick`, `/new`, `/submit`
|
|
38
|
-
- **Persistent conversation history** — Full context is retained across turns in the same REPL session
|
|
17
|
+
Most teams manage tasks in GitHub Issues but switch between multiple tools to actually act on them. Techunter closes that gap:
|
|
39
18
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
- GitHub Personal Access Token or OAuth Device Flow authorization
|
|
47
|
-
- An OpenAI-compatible API key (OpenRouter by default, or any custom provider)
|
|
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 |
|
|
48
25
|
|
|
49
26
|
---
|
|
50
27
|
|
|
@@ -54,154 +31,205 @@
|
|
|
54
31
|
npm install -g techunter
|
|
55
32
|
```
|
|
56
33
|
|
|
57
|
-
**Install from source
|
|
34
|
+
**Install from source:**
|
|
58
35
|
|
|
59
36
|
```bash
|
|
60
37
|
git clone https://github.com/Zhang-Dongfang/Techunter.git
|
|
61
38
|
cd Techunter
|
|
62
|
-
npm install
|
|
63
|
-
npm run build
|
|
64
|
-
npm link # registers the tch / techunter commands globally
|
|
39
|
+
npm install && npm run build && npm link
|
|
65
40
|
```
|
|
66
41
|
|
|
67
42
|
---
|
|
68
43
|
|
|
69
|
-
##
|
|
44
|
+
## Quick Start
|
|
70
45
|
|
|
71
|
-
Run the one-time setup wizard inside any directory
|
|
46
|
+
Run the one-time setup wizard inside any directory with a GitHub remote:
|
|
72
47
|
|
|
73
48
|
```bash
|
|
74
49
|
tch init
|
|
75
50
|
```
|
|
76
51
|
|
|
77
|
-
The wizard will
|
|
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
|
|
78
56
|
|
|
79
|
-
|
|
80
|
-
- PAT: create one at https://github.com/settings/tokens/new with `repo` and `read:user` scopes
|
|
81
|
-
2. **AI provider** — OpenRouter (default) or a custom OpenAI-compatible endpoint
|
|
82
|
-
- OpenRouter key: https://openrouter.ai/settings/keys
|
|
83
|
-
3. **GitHub repository** — Auto-detected from your git remote, or enter manually
|
|
57
|
+
Then start the REPL:
|
|
84
58
|
|
|
85
|
-
|
|
59
|
+
```bash
|
|
60
|
+
tch
|
|
61
|
+
```
|
|
86
62
|
|
|
87
63
|
---
|
|
88
64
|
|
|
89
|
-
##
|
|
65
|
+
## Workflow
|
|
90
66
|
|
|
91
|
-
|
|
92
|
-
|
|
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
|
|
93
110
|
```
|
|
94
111
|
|
|
95
|
-
|
|
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
|
|
96
141
|
|
|
97
142
|
| Command | Alias | Description |
|
|
98
143
|
|---|---|---|
|
|
99
144
|
| `/help` | `/h` | Show all commands |
|
|
100
|
-
| `/
|
|
101
|
-
| `/pick` | `/p` | Browse and
|
|
102
|
-
| `/
|
|
103
|
-
| `/close` | `/d` | Close (delete) a task |
|
|
104
|
-
| `/edit` | `/e` | Edit the title or description of a task |
|
|
105
|
-
| `/submit` | `/s` | Review changes, commit, and push |
|
|
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 |
|
|
106
148
|
| `/review` | `/rv` | List tasks waiting for your approval |
|
|
107
|
-
| `/accept` | `/ac` |
|
|
149
|
+
| `/accept` | `/ac` | Merge PR and close issue |
|
|
108
150
|
| `/status` | `/me` | Show tasks assigned to you |
|
|
109
|
-
| `/
|
|
110
|
-
| `/
|
|
111
|
-
| `/
|
|
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 |
|
|
112
158
|
|
|
113
|
-
Any other input is sent to the AI
|
|
159
|
+
Any other input is sent to the AI agent:
|
|
114
160
|
|
|
115
161
|
```
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
> deliver the current task
|
|
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
|
|
120
165
|
```
|
|
121
166
|
|
|
122
167
|
---
|
|
123
168
|
|
|
124
169
|
## Task Lifecycle
|
|
125
170
|
|
|
126
|
-
|
|
171
|
+
Issues carry exactly one `techunter:*` label at a time:
|
|
127
172
|
|
|
128
173
|
```
|
|
129
174
|
techunter:available → techunter:claimed → techunter:in-review
|
|
130
|
-
|
|
131
|
-
↓ rejected
|
|
175
|
+
↓ (if rejected)
|
|
132
176
|
techunter:changes-needed
|
|
133
|
-
(red)
|
|
134
177
|
```
|
|
135
178
|
|
|
136
|
-
Labels are created automatically in your repository during `tch init
|
|
179
|
+
Labels are created automatically in your repository during `tch init`.
|
|
137
180
|
|
|
138
181
|
---
|
|
139
182
|
|
|
140
183
|
## Branch Naming
|
|
141
184
|
|
|
142
|
-
|
|
185
|
+
Each user has a persistent **worker branch** created when they first claim a task:
|
|
143
186
|
|
|
144
187
|
```
|
|
145
|
-
|
|
188
|
+
worker-{github-username}
|
|
146
189
|
```
|
|
147
190
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
Worker branches (for persistent personal workspaces) follow:
|
|
191
|
+
Task branches submitted as PRs follow:
|
|
151
192
|
|
|
152
193
|
```
|
|
153
|
-
|
|
194
|
+
task-{issue_number}-{first-five-words-of-title}
|
|
154
195
|
```
|
|
155
196
|
|
|
156
197
|
---
|
|
157
198
|
|
|
158
|
-
##
|
|
199
|
+
## MCP Server
|
|
159
200
|
|
|
160
|
-
|
|
201
|
+
Techunter ships a Model Context Protocol server that exposes all tools to any MCP-compatible client (e.g. Claude Desktop):
|
|
161
202
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
| `get_task` | Get full details of a specific Issue |
|
|
166
|
-
| `create_task` | Create a new GitHub Issue |
|
|
167
|
-
| `claim_task` | Assign an Issue and create a local branch |
|
|
168
|
-
| `deliver_task` | Push the branch, open a PR, mark as in-review |
|
|
169
|
-
| `close_task` | Close a GitHub Issue |
|
|
170
|
-
| `post_comment` | Post a Markdown comment on an Issue |
|
|
171
|
-
| `scan_project` | Scan the project file tree and read key files |
|
|
172
|
-
| `read_file` | Read the contents of a specific file |
|
|
173
|
-
| `run_command` | Execute a shell command in the project root |
|
|
174
|
-
| `get_diff` | Get the current Git diff |
|
|
175
|
-
| `stage_and_commit` | Stage all changes, commit, and push |
|
|
176
|
-
| `ask_user` | Ask the user a question (max 3 times per task) |
|
|
177
|
-
| `get_my_status` | Show tasks assigned to the current user |
|
|
178
|
-
| `get_comments` | Read the latest comments on an Issue (e.g. rejection feedback) |
|
|
179
|
-
| `reject_task` | Reject an in-review task: post feedback and mark as changes-needed |
|
|
203
|
+
```bash
|
|
204
|
+
tch-mcp
|
|
205
|
+
```
|
|
180
206
|
|
|
181
207
|
---
|
|
182
208
|
|
|
183
209
|
## Development
|
|
184
210
|
|
|
185
211
|
```bash
|
|
186
|
-
npm run dev # Run
|
|
187
|
-
npm run build # Compile to dist/
|
|
188
|
-
npm run typecheck # Type-check without emitting
|
|
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
|
|
189
215
|
```
|
|
190
216
|
|
|
217
|
+
To verify end-to-end: build and run `tch init` in a directory with a GitHub remote.
|
|
218
|
+
|
|
191
219
|
---
|
|
192
220
|
|
|
193
221
|
## Architecture
|
|
194
222
|
|
|
195
223
|
```
|
|
196
224
|
tch
|
|
197
|
-
└─ src/index.ts
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
├─ src/lib/project.ts File tree + key file scanning (80 KB cap)
|
|
202
|
-
└─ src/lib/config.ts conf-based config store (~/.config/techunter/)
|
|
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)
|
|
203
229
|
```
|
|
204
230
|
|
|
231
|
+
All tools live in `src/tools/{name}/index.ts`. See [CLAUDE.md](CLAUDE.md) for full architecture notes.
|
|
232
|
+
|
|
205
233
|
---
|
|
206
234
|
|
|
207
235
|
## License
|