epiq 1.6.1 → 1.7.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "epiq",
3
- "version": "1.6.1",
3
+ "version": "1.7.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "EPIQ - ergonomic, distributed CLI-first issue tracker TUI ready for the agentic era",
@@ -46,14 +46,14 @@
46
46
  "test:e2e:ci": "export IS_CI=true && ([ -n \"${EPIQ_SKIP_BUILD:-}\" ] || npm run build:npm) && vitest run source/test/e2e/",
47
47
  "test:e2e": "docker run --rm -e EPIQ_SKIP_BUILD -v \"$PWD\":/app -v /app/node_modules -w /app epiq-e2e npm run test:e2e:ci",
48
48
  "test:gui": "playwright test",
49
- "test:gui:ci": "npm run build:npm && playwright install --no-shell chromium && playwright test",
49
+ "test:gui:ci": "export IS_CI=true && npm run build:npm && playwright install --with-deps chromium && playwright test",
50
50
  "build:e2e:image": "docker build -f source/test/e2e/Dockerfile -t epiq-e2e .",
51
51
  "prepack": "npm run build:publish",
52
52
  "pack:check": "rm -f epiq-*.tgz && npm pack && FILE=$(ls -t epiq-*.tgz | head -n 1) && echo \"$FILE\" && tar -tf \"$FILE\"",
53
53
  "publish:dry": "rm -f epiq-*.tgz && npm pack && FILE=$(ls -t epiq-*.tgz | head -n 1) && npm publish --dry-run \"$FILE\"",
54
54
  "publish:tarball": "FILE=$(ls -t epiq-*.tgz | head -n 1) && echo \"Publishing $FILE\" && npm publish \"$FILE\"",
55
55
  "release": "npm run pack:check && npm run publish:tarball",
56
- "start:mcp": "IS_LOCAL=true tsx source/mcp/server.ts",
56
+ "start:mcp": "IS_LOCAL=true tsx source/mcp/index.ts",
57
57
  "inspect:mcp": "npx @modelcontextprotocol/inspector",
58
58
  "lint": "eslint .",
59
59
  "lint:err": "eslint . --quiet",
package/readme.md CHANGED
@@ -10,16 +10,36 @@ Epiq provides issue tracking as a portable, integrated part of the development e
10
10
 
11
11
  With great attention to user ergonomics and developer experience, epiq strives to make project management painless and friction free.
12
12
 
13
- ![Epiq board with the time travel timeline](https://raw.githubusercontent.com/ljtn/epiq/main/source/assets/time-travel.png)
13
+ ![Epiq board with the time travel timeline above it](https://raw.githubusercontent.com/ljtn/epiq/main/source/assets/time-travel.jpeg)
14
14
 
15
15
  ## Audit the workflow
16
16
 
17
17
  Agents now run whole sprints unattended. Because state is a full event log, you can replay the board to find out what moved when, who moved it, and what changed along the way.
18
18
 
19
+ ## Code, linked to tickets
20
+
21
+ Prefix a commit's subject with the ticket's ref and the two are linked:
22
+
23
+ ```
24
+ git commit -m "1YRTG8T document the commit-to-ticket link in the readme"
25
+ ```
26
+
27
+ That commit now shows up in the ticket's **Commits** tab with its diffstat, and expands into a per-file diff right inside the ticket. Drag across diff lines to quote them into a comment on the ticket, or file a new ticket straight from the selection — the quote links back to the exact lines. The scrubber plots commits alongside board events; click a commit dot to open its diff in the ticket it belongs to.
28
+
29
+ ![A ticket's Commits tab, showing the diff of a linked commit](https://raw.githubusercontent.com/ljtn/epiq/main/source/assets/code-diff.jpeg)
30
+
31
+ The link is nothing more than the commit subject: Epiq matches commits whose subject starts with `<REF> ` (case-insensitive) and stores nothing else. That makes it robust — no hooks, no database — but it means your merge strategy has to keep those subjects on the branch you inspect:
32
+
33
+ - **Prefix every commit** with the ref of the ticket it belongs to. Agents get it from the `ref` field on `epiq_issue_list` and `epiq_board_list` responses.
34
+ - **Rebase-merge** (`gh pr merge --rebase`) so the ref-prefixed commits land on `main` as they are. A merge commit adds a subject carrying no ref; a squash merge folds every commit into one whose subject GitHub invents from the PR title, and the link is gone.
35
+ - Squashing _within_ one ticket's commits is fine as long as the result keeps the prefix. Never squash commits carrying different refs into one.
36
+
19
37
  ## Terminal + Browser
20
38
 
21
39
  Epiq originated from the command line and offers a first-class terminal experience, but also features a browser interface powered by the same Git-backed event engine.
22
40
 
41
+ ![The Epiq terminal UI: the same board rendered in a terminal, with the command palette along the bottom](https://raw.githubusercontent.com/ljtn/epiq/main/source/assets/tui.jpeg)
42
+
23
43
  ## What is epiq?
24
44
 
25
45
  Epiq is a self hosted, vim-inspired issue tracker that brings developer experience to project management. It renders either as ASCII, or as a web GUI, and persists state as an immutable distributed event log, versioned and synchronized through Git.
@@ -44,6 +64,7 @@ These design choices result in a system that is:
44
64
  - Ergonomics — fast keyboard-driven UX, command line with history, syntax highlighting etc.
45
65
  - Command palette — press `?` to open a scrollable overview of all available commands and descriptions
46
66
  - Time travel — inspect the board as it was 1h, 1 week or 1 year ago, or replay its history as an animation
67
+ - Linked commits — prefix commits with a ticket ref to browse their diffs from the ticket, quote lines into comments, and see them on the timeline
47
68
  - Filtering — query issues by description, tags, assignees, etc.
48
69
  - Autocompletion — minimize typing, stay in flow, reuse previous commands
49
70
  - Multi-user — collaborative synchronization via Git
@@ -196,7 +217,28 @@ Find skill at `.claude/skills/epiq/SKILL.md` that documents a recommended workfl
196
217
 
197
218
  ### Agent identity
198
219
 
199
- Every process — your TUI, your GUI, each agent's MCP server — writes as the user in `~/.epiq-global/config.json`, so by default the board cannot tell one agent from another. Give an agent its own identity with `EPIQ_USER_NAME`:
220
+ Every process — your TUI, your GUI, each agent's MCP server — writes as the user in `~/.epiq-global/config.json`, so by default the board cannot tell one agent from another. Name an agent's server and it gets its own identity:
221
+
222
+ ```bash
223
+ claude mcp add --scope user epiq -- npx -y -p epiq epiq-mcp claude
224
+ ```
225
+
226
+ Or, in a hand-written config, as the argument after the command:
227
+
228
+ ```json
229
+ {
230
+ "mcpServers": {
231
+ "epiq": {
232
+ "command": "npx",
233
+ "args": ["-y", "-p", "epiq", "epiq-mcp", "claude"]
234
+ }
235
+ }
236
+ }
237
+ ```
238
+
239
+ That agent then shows up in the contributor list, assigns itself rather than you, and authors its own events. The id is derived from the name, so one name is one contributor on every machine — reuse names instead of inventing one per session, or the registry fills with single-run identities. Naming yourself changes nothing.
240
+
241
+ `EPIQ_USER_NAME` does the same thing through the environment, for a client whose config sets variables more readily than arguments:
200
242
 
201
243
  ```json
202
244
  {
@@ -210,7 +252,14 @@ Every process — your TUI, your GUI, each agent's MCP server — writes as the
210
252
  }
211
253
  ```
212
254
 
213
- That agent then shows up in the contributor list, assigns itself rather than you, and authors its own events. The id is derived from the name, so one name is one contributor on every machine — reuse names instead of inventing one per session, or the registry fills with single-run identities. `EPIQ_USER_ID` pins the id explicitly (26 characters of Crockford base32) if you would rather choose it. Naming yourself changes nothing.
255
+ Setting both is an error unless they agree, rather than one quietly winning. `EPIQ_USER_ID` pins the id explicitly (26 characters of Crockford base32) if you would rather choose it, and stays environment-only.
256
+
257
+ The TUI and GUI take the same name as `--as`, since their first argument is already the command:
258
+
259
+ ```bash
260
+ epiq --as claude
261
+ epiq gui --as claude
262
+ ```
214
263
 
215
264
  ### Other MCP clients
216
265