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/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.1"});var Rm={};ss(Rm,{parseMcpArgs:()=>bI});var yI,bI,Nm=g(()=>{"use strict";Sm();yI=`epiq-mcp ${kl}
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.1",
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 --with-deps chromium && playwright test",
55
- "test:gui:ci": "export IS_CI=true && npm run build:npm && playwright install --with-deps chromium && playwright test",
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
- _Issue tracking as code. Open source, distributed, local-first, and code-native._
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
- **[See docs →](https://ljtn.github.io/epiq/docs.html)**
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
- Epiq provides issue tracking as a portable, integrated part of the development environment, with access to all the powerful tooling developers are used to.
7
+ **[Site →](https://ljtn.github.io/epiq/)**
8
8
 
9
- > Kanban to review workflows in your terminal or in your browser - while keeping all state local, Git-backed, and versioned.
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
  ![The Epiq GUI: the event log, the board and a ticket's code diff, under the time travel timeline](https://raw.githubusercontent.com/ljtn/epiq/main/source/assets/time-travel.jpeg)
14
12
 
15
13
  ## Audit the workflow
16
14
 
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.
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
  ![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)
41
39
 
42
- ## What is epiq?
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