epiq 1.12.1 → 1.12.3
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/dist/gui/main.js +117 -117
- package/dist/index.js +96 -95
- package/dist/mcp.js +1 -1
- package/package.json +3 -3
- package/readme.md +9 -14
package/dist/mcp.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var gI=Object.defineProperty;var g=(e,t)=>()=>(e&&(t=e(e=0)),t);var ss=(e,t)=>{for(var n in t)gI(e,n,{get:t[n],enumerable:!0})};var bm={};ss(bm,{failed:()=>a,isFail:()=>l,isSuccess:()=>_t,resultStatuses:()=>Tn,succeeded:()=>d});var Tn,a,d,l,_t,N=g(()=>{"use strict";Tn={Success:"success",Fail:"fail"},a=e=>({status:Tn.Fail,message:e,value:null}),d=(e,t)=>({status:Tn.Success,message:e,value:t}),l=e=>e.status==="fail",_t=e=>e.status==="success"});var Em={};ss(Em,{ACTOR_ID_ENV:()=>is,ACTOR_NAME_ENV:()=>Ft,applyActorNameArgument:()=>Ml,deriveActorId:()=>Im,isValidUserId:()=>Ai,isValidUserName:()=>as,resolveEnvActor:()=>Tl});import hI from"node:crypto";var Ft,is,xm,vI,wl,Ai,as,ro,Im,Tl,Ml,xr=g(()=>{"use strict";N();Ft="EPIQ_USER_NAME",is="EPIQ_USER_ID",xm="0123456789ABCDEFGHJKMNPQRSTVWXYZ",vI=26,wl=80,Ai=e=>/^[0-9A-HJKMNP-TV-Z]{26}$/.test(e),as=e=>e.trim().length>0&&e.length<=wl,ro=e=>e.trim().toLowerCase(),Im=e=>{let t=hI.createHash("sha256").update(`epiq:actor:${ro(e)}`).digest(),n="";for(let r=0;r<vI;r++)n+=xm[(t[r]??0)%xm.length];return n},Tl=(e,t=process.env)=>{let n=(t[Ft]??"").trim(),r=(t[is]??"").trim();return n?as(n)?!r&&e.userId&&e.userName&&ro(e.userName)===ro(n)?d("Actor override names the configured user",{userId:e.userId,userName:e.userName}):r&&!Ai(r)?a(`${is} must be 26 characters of Crockford base32`):r&&e.userId&&r===e.userId?a(`${is} is the configured user's own id; using it under a different name would rename them on the board`):d("Resolved actor from environment",{userId:r||Im(n),userName:r?n:ro(n)}):a(`${Ft} must be 1-${wl} characters of text`):r?a(`${is} is set without ${Ft}`):d("No actor override",null)},Ml=(e,t,n=process.env)=>{let r=e.trim();if(!as(r))return a(`${t} must be 1-${wl} characters of text`);let o=(n[Ft]??"").trim();return o&&ro(o)!==ro(r)?a(`${t} names ${r}, but ${Ft} names ${o}`):(o||(n[Ft]=r),d("Applied actor name argument",o||r))}});var kl,Sm=g(()=>{"use strict";kl="1.12.
|
|
2
|
+
var gI=Object.defineProperty;var g=(e,t)=>()=>(e&&(t=e(e=0)),t);var ss=(e,t)=>{for(var n in t)gI(e,n,{get:t[n],enumerable:!0})};var bm={};ss(bm,{failed:()=>a,isFail:()=>l,isSuccess:()=>_t,resultStatuses:()=>Tn,succeeded:()=>d});var Tn,a,d,l,_t,N=g(()=>{"use strict";Tn={Success:"success",Fail:"fail"},a=e=>({status:Tn.Fail,message:e,value:null}),d=(e,t)=>({status:Tn.Success,message:e,value:t}),l=e=>e.status==="fail",_t=e=>e.status==="success"});var Em={};ss(Em,{ACTOR_ID_ENV:()=>is,ACTOR_NAME_ENV:()=>Ft,applyActorNameArgument:()=>Ml,deriveActorId:()=>Im,isValidUserId:()=>Ai,isValidUserName:()=>as,resolveEnvActor:()=>Tl});import hI from"node:crypto";var Ft,is,xm,vI,wl,Ai,as,ro,Im,Tl,Ml,xr=g(()=>{"use strict";N();Ft="EPIQ_USER_NAME",is="EPIQ_USER_ID",xm="0123456789ABCDEFGHJKMNPQRSTVWXYZ",vI=26,wl=80,Ai=e=>/^[0-9A-HJKMNP-TV-Z]{26}$/.test(e),as=e=>e.trim().length>0&&e.length<=wl,ro=e=>e.trim().toLowerCase(),Im=e=>{let t=hI.createHash("sha256").update(`epiq:actor:${ro(e)}`).digest(),n="";for(let r=0;r<vI;r++)n+=xm[(t[r]??0)%xm.length];return n},Tl=(e,t=process.env)=>{let n=(t[Ft]??"").trim(),r=(t[is]??"").trim();return n?as(n)?!r&&e.userId&&e.userName&&ro(e.userName)===ro(n)?d("Actor override names the configured user",{userId:e.userId,userName:e.userName}):r&&!Ai(r)?a(`${is} must be 26 characters of Crockford base32`):r&&e.userId&&r===e.userId?a(`${is} is the configured user's own id; using it under a different name would rename them on the board`):d("Resolved actor from environment",{userId:r||Im(n),userName:r?n:ro(n)}):a(`${Ft} must be 1-${wl} characters of text`):r?a(`${is} is set without ${Ft}`):d("No actor override",null)},Ml=(e,t,n=process.env)=>{let r=e.trim();if(!as(r))return a(`${t} must be 1-${wl} characters of text`);let o=(n[Ft]??"").trim();return o&&ro(o)!==ro(r)?a(`${t} names ${r}, but ${Ft} names ${o}`):(o||(n[Ft]=r),d("Applied actor name argument",o||r))}});var kl,Sm=g(()=>{"use strict";kl="1.12.3"});var Rm={};ss(Rm,{parseMcpArgs:()=>bI});var yI,bI,Nm=g(()=>{"use strict";Sm();yI=`epiq-mcp ${kl}
|
|
3
3
|
|
|
4
4
|
Usage: epiq-mcp [name]
|
|
5
5
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "epiq",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "EPIQ - ergonomic, distributed CLI-first issue tracker TUI ready for the agentic era",
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
"test:e2e:ci": "export IS_CI=true EPIQ_E2E_TIMEOUT_SCALE=${EPIQ_E2E_TIMEOUT_SCALE:-2} && ([ -n \"${EPIQ_SKIP_BUILD:-}\" ] || npm run build:npm) && vitest run --maxWorkers=4 source/test/e2e/",
|
|
52
52
|
"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",
|
|
53
53
|
"test:gui": "playwright test",
|
|
54
|
-
"test:gui:warnings": "export IS_CI=true EPIQ_GUI_DEV_BUILD=1 && npm run build:npm && playwright install
|
|
55
|
-
"test:gui:ci": "export IS_CI=true && npm run build:npm && playwright install
|
|
54
|
+
"test:gui:warnings": "export IS_CI=true EPIQ_GUI_DEV_BUILD=1 && npm run build:npm && playwright install chromium && playwright test",
|
|
55
|
+
"test:gui:ci": "export IS_CI=true && npm run build:npm && playwright install chromium && playwright test",
|
|
56
56
|
"build:e2e:image": "docker build -f source/test/e2e/Dockerfile -t epiq-e2e .",
|
|
57
57
|
"prepack": "npm run build:publish",
|
|
58
58
|
"pack:check": "rm -f epiq-*.tgz && npm pack && FILE=$(ls -t epiq-*.tgz | head -n 1) && echo \"$FILE\" && tar -tf \"$FILE\"",
|
package/readme.md
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
# Epiq
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Epiq is a self-hosted issue tracker that allows you to review workflows in real time or after the fact via replay. It persists state as an immutable event log, versioned and synchronized via Git.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Most issue trackers live outside your workflow. Instead of a centralized, managed service, Epiq offers issue tracking as an integrated part of the development environment offering workflow replay and inline code-diffs, tackling the review bottleneck with time-travel, filtering, and a tight code integration.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**[Site →](https://ljtn.github.io/epiq/)**
|
|
8
8
|
|
|
9
|
-
>
|
|
10
|
-
|
|
11
|
-
With great attention to user ergonomics and developer experience, epiq strives to make project management painless and friction free.
|
|
9
|
+
> All state is kept local, Git-backed, and versioned.
|
|
12
10
|
|
|
13
11
|

|
|
14
12
|
|
|
15
13
|
## Audit the workflow
|
|
16
14
|
|
|
17
|
-
Agents now run whole sprints unattended. Because state is
|
|
15
|
+
Agents now run whole sprints unattended. Because state is an event log, you can replay the board to find out what moved when, who moved it, and what changed along the way.
|
|
18
16
|
|
|
19
17
|
## Code, linked to tickets
|
|
20
18
|
|
|
@@ -39,14 +37,9 @@ Epiq originated from the command line and offers a first-class terminal experien
|
|
|
39
37
|
|
|
40
38
|

|
|
41
39
|
|
|
42
|
-
##
|
|
43
|
-
|
|
44
|
-
Epiq is a self hosted issue tracker that allows you to review workflows in real time or after the fact via replay. It persists state as an immutable event log, versioned and synchronized via Git.
|
|
45
|
-
|
|
46
|
-
Most issue trackers live outside your workflow. Instead of a centralized, managed service, Epiq keeps project state alongside your repository, where it travels with your code.
|
|
47
|
-
|
|
48
|
-
These design choices result in a system that offers:
|
|
40
|
+
## How it is different
|
|
49
41
|
|
|
42
|
+
Fundamental design choices gives a system with:
|
|
50
43
|
- **Workflow replay**, - inspect what happened while you were away, as if it happens now
|
|
51
44
|
- **Simple setup** — no accounts, SaaS, or external services required
|
|
52
45
|
- **Repo-native** — your issues can live where your code lives
|
|
@@ -109,6 +102,8 @@ Once your project is set up, you can also launch the browser user interface with
|
|
|
109
102
|
epiq gui
|
|
110
103
|
```
|
|
111
104
|
|
|
105
|
+
On a machine with no display, or with `--no-open`, it serves without opening a browser; open the URL it prints.
|
|
106
|
+
|
|
112
107
|
> Setup wizard creates:
|
|
113
108
|
> User config persisted in `~/.epiq-global/config.json`.
|
|
114
109
|
|