@nickmeriano/task 0.4.2 → 0.5.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 +14 -1
- package/dist/cli.js +73 -5
- package/dist/cli.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +19 -0
- package/dist/server.js.map +1 -1
- package/dist/store.d.ts +14 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +106 -10
- package/dist/store.js.map +1 -1
- package/dist/types.d.ts +21 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/skill/SKILL.md +17 -1
- package/src/cli.ts +71 -5
- package/src/server.ts +16 -0
- package/src/store.ts +111 -9
- package/src/types.ts +21 -2
- package/ui/dist/assets/{index-Dm3ToURf.js → index-D_qmmh3D.js} +65 -65
- package/ui/dist/assets/index-Da14ye1f.css +1 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/index-DXFbw9bM.css +0 -1
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACzF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAWxD,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAA;AAC/B,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAAA;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAA;AAExC,8EAA8E;AAC9E,MAAM,YAAY,GAAG,IAAI,CAAA;AAEzB;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,GAAG,GAAG,IAAI,CAAA;IACd,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAA;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QAC/B,GAAG,GAAG,MAAM,CAAA;IACd,CAAC;AACH,CAAC;AASD,4DAA4D;AAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEzF;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,QAAQ,GAAG,CAAC;IACxD,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,CAAA;IACvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACzD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;YACxD,CAAC;YACD,IAAI,OAAO,CAAA;YACX,IAAI,CAAC;gBACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;YACrD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAQ;YACV,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,uEAAuE;gBACvE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAAE,SAAQ;gBAClC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBACrE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;QACD,KAAK,GAAG,IAAI,CAAA;IACd,CAAC;IACD,qEAAqE;IACrE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAChF,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpC,CAAC;AAwBD,SAAS,GAAG;IACV,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,SAAS;IACX,IAAI,CAAQ;IACZ,OAAO,CAAQ;IACf,MAAM,CAAe;IACtB,EAAE,CAAc;IAExB,YAAY,IAAY;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CACtB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CACrC,CAAA;QAClB,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QACvD,uEAAuE;QACvE,4CAA4C;QAC5C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,CAAA;IAC1C,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,GAAW;QACjB,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAA;QACtD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC;IAEO,MAAM,CAAC,GAAY;QACzB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,EAAE;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAgB;YAC5B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAa;YACtC,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,CAAC,WAAW,KAAK,CAAC;YACjC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;YACnD,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAa;YACpC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAA;IACH,CAAC;IAED,+DAA+D;IACvD,aAAa,CAAC,MAAmC,EAAE,MAAc;QACvE,MAAM,KAAK,GAAG,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,UAAU,KAAK,+BAA+B,MAAM,iBAAiB,KAAK,EAAE,CAAC;aACrF,GAAG,CAAC,MAAM,CAA+B,CAAA;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IAEO,SAAS,CAAC,GAAe;QAC/B,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YACnC,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,UAAU;SAC1B,CAAA;IACH,CAAC;IAED,IAAI,CAAC,SAAqB,EAAE;QAC1B,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,MAAM,GAAwB,EAAE,CAAA;QACtC,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACtE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC;QACD,MAAM,GAAG,GAAG,sBAAsB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAA;QAC7G,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAyB,CAAA;QACtE,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YACxB,gEAAgE;YAChE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACnC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxF,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,GAAG,CAAC,MAAM,CAE7D,CAAA;QACb,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,KAAgB;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAA;QACrC,gDAAgD;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,yDAAyD,CAAC;aAClE,GAAG,CAAC,MAAM,CAA2B,CAAA;QACxC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAA;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CACN;+CACuC,CACxC;aACA,GAAG,CACF,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,WAAW,IAAI,EAAE,EACvB,MAAM,EACN,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,EAChC,KAAK,CAAC,SAAS,IAAI,IAAI,EACvB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,EAC/B,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,YAAY,EAC7B,SAAS,EACT,SAAS,CACV,CAAA;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;QAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACvF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QAC7F,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,KAAgB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACjC,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEzE,sEAAsE;QACtE,wEAAwE;QACxE,IAAI,YAAY,GAAG,KAAK,CAAA;QACxB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACxE,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,YAAY,CAAA;QAC3F,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAA;QACzB,MAAM,MAAM,GAA+B,EAAE,CAAA;QAC7C,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,KAA6B,EAAE,EAAE;YAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,CAAA;YAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC,CAAA;QAED,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACxD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;QAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QACrE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;YAAE,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;QACpE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAChF,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YAC3B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACrE,kEAAkE;gBAClE,oDAAoD;gBACpD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;qBAChB,OAAO,CAAC,yDAAyD,CAAC;qBAClE,GAAG,CAAC,KAAK,CAAC,MAAM,CAA2B,CAAA;gBAC9C,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;QAEjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,QAAQ,CAAA;QACvD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,GAAG,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAA;YACxB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACnB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;QACpF,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IAC1B,CAAC;IAED;;;;;;OAMG;IACK,cAAc,CACpB,MAAmC,EACnC,MAAc,EACd,OAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;QACnE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;QACpC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACnD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE;iBACJ,OAAO,CAAC,gCAAgC,MAAM,YAAY,KAAK,MAAM,CAAC;iBACtE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACnB,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE;iBACJ,OAAO,CAAC,qCAAqC,MAAM,KAAK,KAAK,iBAAiB,CAAC;iBAC/E,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACnB,CAAC;QACD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAA;QACtC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,GAAG,EAAE,CAAA;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAA;YAC5E,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,8EAA8E;IAC9E,IAAI,CAAC,MAAc,EAAE,QAAiC,EAAE,MAAc;QACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACjF,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,QAAiC,EAAE,MAAc;QACtE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACjF,MAAM,MAAM,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAA;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAA;QACxE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IAC1B,CAAC;IAED,MAAM,CAAC,MAAc;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC5E,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,sDAAsD,CAAC;aAC/D,GAAG,CAAC,MAAM,CAA4B,CAAA;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,IAAY,EAAE,MAAM,GAAG,EAAE;QAClD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;aACnB,OAAO,CAAC,8EAA8E,CAAC;aACvF,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,qCAAqC,CAAC;aAC9C,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAA0B,CAAA;QAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,SAAiB;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,qDAAqD,CAAC;aAC9D,GAAG,CAAC,SAAS,EAAE,MAAM,CAAsC,CAAA;QAC9D,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC,CAAA;QACvF,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACnE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,kEAAkE,CAAC;aAC3E,GAAG,EAAqD,CAAA;QAC3D,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvD,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,GAAa;IAC3B,4EAA4E;IAC5E,6EAA6E;IAC7E,+CAA+C;IAC/C,EAAE;IACF,wEAAwE;IACxE,8EAA8E;IAC9E,yEAAyE;IACzE,yEAAyE;IACzE,wBAAwB;IACxB;;;;;;;;;;;;;;;;;;;;GAoBC;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,sDAAsD;IACtD,EAAE;IACF,4EAA4E;IAC5E,sEAAsE;IACtE,wEAAwE;IACxE,yCAAyC;IACzC;;;;2CAIyC;IAEzC,wEAAwE;IACxE,mEAAmE;IACnE,2EAA2E;IAC3E,oCAAoC;IACpC;;;;;gEAK8D;CAC/D,CAAA;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,EAAgB;IAC/B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAEtE,CAAA;IACD,IAAI,OAAO,IAAI,UAAU,CAAC,MAAM;QAAE,OAAM;IACxC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChB,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,EAAE,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;QACrD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnB,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAoB;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpC,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAC9E,CAAC;IACD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,MAAM,MAAM,GAAkB;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;QACpD,OAAO,EAAE,CAAC;KACX,CAAA;IACD,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;IACjF,aAAa,CACX,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAC3B,yFAAyF,CAC1F,CAAA;IACD,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
export declare const STATUSES: readonly ["backlog", "todo", "in_progress", "done", "canceled"];
|
|
4
4
|
export type Status = (typeof STATUSES)[number];
|
|
5
5
|
export interface Task {
|
|
6
|
-
/** Display id — `<prefix>-<number>`, e.g. "
|
|
6
|
+
/** Display id — `<prefix>-<number>`, e.g. "PHO-12". */
|
|
7
7
|
id: string;
|
|
8
8
|
number: number;
|
|
9
9
|
title: string;
|
|
@@ -13,6 +13,15 @@ export interface Task {
|
|
|
13
13
|
milestone: string | null;
|
|
14
14
|
/** This ticket can't be finished by an agent alone. */
|
|
15
15
|
needsHuman: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Task numbers this one blocks / is blocked by. One relation, two views:
|
|
18
|
+
* a single `(blocker, blocked)` row shows up in the blocker's `blocks` and
|
|
19
|
+
* the blocked task's `blockedBy`, so the mirror can never drift.
|
|
20
|
+
*/
|
|
21
|
+
blocks: number[];
|
|
22
|
+
blockedBy: number[];
|
|
23
|
+
/** Pull request URLs attached to this task. */
|
|
24
|
+
prs: string[];
|
|
16
25
|
/** Sort key within a status column; smaller sorts first. */
|
|
17
26
|
position: number;
|
|
18
27
|
createdAt: string;
|
|
@@ -27,7 +36,7 @@ export interface Comment {
|
|
|
27
36
|
}
|
|
28
37
|
export interface ProjectConfig {
|
|
29
38
|
name: string;
|
|
30
|
-
/** Uppercase id prefix, e.g. "
|
|
39
|
+
/** Uppercase id prefix, e.g. "PHO" → PHO-1, PHO-2, … */
|
|
31
40
|
prefix: string;
|
|
32
41
|
version: number;
|
|
33
42
|
}
|
|
@@ -46,6 +55,9 @@ export interface TaskInput {
|
|
|
46
55
|
tags?: string[];
|
|
47
56
|
milestone?: string | null;
|
|
48
57
|
needsHuman?: boolean;
|
|
58
|
+
blocks?: number[];
|
|
59
|
+
blockedBy?: number[];
|
|
60
|
+
prs?: string[];
|
|
49
61
|
}
|
|
50
62
|
export interface TaskPatch {
|
|
51
63
|
title?: string;
|
|
@@ -54,6 +66,13 @@ export interface TaskPatch {
|
|
|
54
66
|
tags?: string[];
|
|
55
67
|
milestone?: string | null;
|
|
56
68
|
needsHuman?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Full replacement, like `tags` — the store reconciles the relation table
|
|
71
|
+
* to match. Writing either side updates the other task's mirror view.
|
|
72
|
+
*/
|
|
73
|
+
blocks?: number[];
|
|
74
|
+
blockedBy?: number[];
|
|
75
|
+
prs?: string[];
|
|
57
76
|
/** Explicit board position (used by drag-and-drop in the UI). */
|
|
58
77
|
position?: number;
|
|
59
78
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;gEACgE;AAChE,eAAO,MAAM,QAAQ,iEAMX,CAAA;AACV,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9C,MAAM,WAAW,IAAI;IACnB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;gEACgE;AAChE,eAAO,MAAM,QAAQ,iEAMX,CAAA;AACV,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAA;AAE9C,MAAM,WAAW,IAAI;IACnB,uDAAuD;IACvD,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,uDAAuD;IACvD,UAAU,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,+CAA+C;IAC/C,GAAG,EAAE,MAAM,EAAE,CAAA;IACb,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;IACd,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAEvD"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;gEACgE;AAChE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS;IACT,MAAM;IACN,aAAa;IACb,MAAM;IACN,UAAU;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;gEACgE;AAChE,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,SAAS;IACT,MAAM;IACN,aAAa;IACb,MAAM;IACN,UAAU;CACF,CAAA;AAmFV,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAQ,QAA8B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nickmeriano/task",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A task manager that lives in your repo — SQLite in .task/, a zero-dependency CLI for humans and agents, and a live kanban/table UI via `task serve`.",
|
|
6
6
|
"license": "MIT",
|
package/skill/SKILL.md
CHANGED
|
@@ -40,6 +40,9 @@ task update <id> [--title t] [--description text] [--status s] [--tags a,b]
|
|
|
40
40
|
task start <id> # → in_progress
|
|
41
41
|
task done <id> # → done
|
|
42
42
|
task move <id> <status> # any status change
|
|
43
|
+
task link <id> --blocked-by <id> # mark a dependency (or --blocks)
|
|
44
|
+
task unlink <id> --blocked-by <id> # remove one (or --blocks)
|
|
45
|
+
task update <id> --pr <url> # attach a pull request (appends)
|
|
43
46
|
task comment <id> "text" --author claude
|
|
44
47
|
task delete <id>
|
|
45
48
|
task whoami # who comments are attributed to
|
|
@@ -53,9 +56,22 @@ and wait for a human, so **never run either on your own initiative**; suggest
|
|
|
53
56
|
- `<id>` is `PREFIX-12` or just `12`.
|
|
54
57
|
- Statuses: `backlog` `todo` `in_progress` `done` `canceled`.
|
|
55
58
|
- `--tag a,b` matches a task carrying *either* tag, not both.
|
|
56
|
-
- Clear a field by passing it empty: `--tags ""`, `--milestone ""`.
|
|
59
|
+
- Clear a field by passing it empty: `--tags ""`, `--milestone ""`, `--prs ""`.
|
|
57
60
|
- `task list` hides done/canceled by default; `--all` shows everything.
|
|
58
61
|
|
|
62
|
+
**Dependencies.** `task link A --blocked-by B` and `task link B --blocks A`
|
|
63
|
+
write the same relation — each task's `task show` lists both its `blocked`
|
|
64
|
+
and `blocks` sides, with the other task's current status. Before starting a
|
|
65
|
+
task, check it isn't blocked by something still open; when you discover an
|
|
66
|
+
ordering ("this can't land until X does"), record it with `task link` instead
|
|
67
|
+
of prose in a comment. Blocked tasks wear a red "Blocked" badge on the board
|
|
68
|
+
until every blocker is done or canceled.
|
|
69
|
+
|
|
70
|
+
**Pull requests.** When you open a PR for a task, attach it:
|
|
71
|
+
`task update <id> --pr <url>`. Put the task id in the PR title too (e.g.
|
|
72
|
+
`[TAS-6] Fix retry loop`) so the two reference each other from both sides.
|
|
73
|
+
`--pr` appends one URL; `--prs url1,url2` replaces the whole list.
|
|
74
|
+
|
|
59
75
|
## How to work with the board
|
|
60
76
|
|
|
61
77
|
**Starting work.** Before picking up a request, check `task list --json` —
|
package/src/cli.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// task init
|
|
6
6
|
// task add "Wire up webhooks" --tags api,infra --milestone launch
|
|
7
7
|
// task list --status todo,in_progress
|
|
8
|
-
// task start
|
|
8
|
+
// task start TAS-3 && task done TAS-3
|
|
9
9
|
// task serve
|
|
10
10
|
|
|
11
11
|
import { spawn } from "node:child_process"
|
|
@@ -134,6 +134,10 @@ function patchFromFlags(flags: Args["flags"]): TaskPatch {
|
|
|
134
134
|
if (milestone !== undefined) patch.milestone = milestone.trim() || null
|
|
135
135
|
if (flags["needs-human"]) patch.needsHuman = true
|
|
136
136
|
if (flags["no-needs-human"]) patch.needsHuman = false
|
|
137
|
+
// Replace semantics like --tags; `--pr` (append one) is handled per-command
|
|
138
|
+
// because appending needs the task's current list.
|
|
139
|
+
const prs = str(flags, "prs")
|
|
140
|
+
if (prs !== undefined) patch.prs = prs.split(",").map((p) => p.trim()).filter(Boolean)
|
|
137
141
|
return patch
|
|
138
142
|
}
|
|
139
143
|
|
|
@@ -196,7 +200,10 @@ function cmdAdd(args: Args): void {
|
|
|
196
200
|
const title = args.positional.join(" ").trim()
|
|
197
201
|
if (!title) fail(`usage: task add <title> [--description …] [--status …] [--tags a,b] [--milestone …] [--needs-human]`)
|
|
198
202
|
const store = openStore()
|
|
199
|
-
const
|
|
203
|
+
const patch = patchFromFlags(args.flags)
|
|
204
|
+
const pr = str(args.flags, "pr")
|
|
205
|
+
if (pr) patch.prs = [...(patch.prs ?? []), pr]
|
|
206
|
+
const task = store.create({ title, ...patch })
|
|
200
207
|
if (args.flags.json) {
|
|
201
208
|
console.log(JSON.stringify({ task }, null, 2))
|
|
202
209
|
} else {
|
|
@@ -243,11 +250,22 @@ function cmdShow(args: Args): void {
|
|
|
243
250
|
console.log(JSON.stringify({ task, comments }, null, 2))
|
|
244
251
|
return
|
|
245
252
|
}
|
|
253
|
+
// A linked task is only as useful as knowing whether it's still in the way.
|
|
254
|
+
const describeLinks = (numbers: number[]): string =>
|
|
255
|
+
numbers
|
|
256
|
+
.map((n) => {
|
|
257
|
+
const other = store.get(n)
|
|
258
|
+
return other ? `${other.id} (${other.status})` : store.displayId(n)
|
|
259
|
+
})
|
|
260
|
+
.join(", ")
|
|
246
261
|
console.log(`${task.id} ${task.title}`)
|
|
247
262
|
console.log(`status ${task.status}`)
|
|
248
263
|
if (task.needsHuman) console.log(`needs a human`)
|
|
249
264
|
if (task.tags.length) console.log(`tags ${task.tags.join(", ")}`)
|
|
250
265
|
if (task.milestone) console.log(`milestone ${task.milestone}`)
|
|
266
|
+
if (task.blockedBy.length) console.log(`blocked by ${describeLinks(task.blockedBy)}`)
|
|
267
|
+
if (task.blocks.length) console.log(`blocks ${describeLinks(task.blocks)}`)
|
|
268
|
+
for (const pr of task.prs) console.log(`pr ${pr}`)
|
|
251
269
|
console.log(`created ${task.createdAt}`)
|
|
252
270
|
console.log(`updated ${task.updatedAt}`)
|
|
253
271
|
if (task.description) console.log(`\n${task.description}`)
|
|
@@ -264,10 +282,17 @@ function cmdUpdate(args: Args, forcedStatus?: Status): void {
|
|
|
264
282
|
const ref = args.positional[0]
|
|
265
283
|
if (!ref) fail("usage: task update <id> [--status …] [--title …] …")
|
|
266
284
|
const store = openStore()
|
|
285
|
+
const number = store.parseId(ref)
|
|
267
286
|
const patch = patchFromFlags(args.flags)
|
|
268
287
|
if (forcedStatus) patch.status = forcedStatus
|
|
288
|
+
const pr = str(args.flags, "pr")
|
|
289
|
+
if (pr) {
|
|
290
|
+
// Append, dedup — `--pr <url>` is "attach this PR", not "replace the list".
|
|
291
|
+
const current = patch.prs ?? store.get(number)?.prs ?? []
|
|
292
|
+
patch.prs = current.includes(pr) ? current : [...current, pr]
|
|
293
|
+
}
|
|
269
294
|
if (Object.keys(patch).length === 0) fail("nothing to update — pass at least one flag")
|
|
270
|
-
const task = store.update(
|
|
295
|
+
const task = store.update(number, patch)
|
|
271
296
|
if (args.flags.json) {
|
|
272
297
|
console.log(JSON.stringify({ task }, null, 2))
|
|
273
298
|
} else {
|
|
@@ -295,6 +320,36 @@ function cmdComment(args: Args): void {
|
|
|
295
320
|
}
|
|
296
321
|
}
|
|
297
322
|
|
|
323
|
+
/**
|
|
324
|
+
* `task link TAS-3 --blocked-by TAS-5` / `task unlink TAS-3 --blocks TAS-9`.
|
|
325
|
+
* One relation with two spellings: either flag writes the same (blocker,
|
|
326
|
+
* blocked) row, so the other task's `task show` reflects it immediately.
|
|
327
|
+
*/
|
|
328
|
+
function cmdLink(args: Args, action: "link" | "unlink"): void {
|
|
329
|
+
const ref = args.positional[0]
|
|
330
|
+
const blocks = str(args.flags, "blocks")
|
|
331
|
+
const blockedBy = str(args.flags, "blocked-by")
|
|
332
|
+
if (!ref || (blocks ? blockedBy : !blockedBy)) {
|
|
333
|
+
fail(`usage: task ${action} <id> (--blocks <id> | --blocked-by <id>)`)
|
|
334
|
+
}
|
|
335
|
+
const store = openStore()
|
|
336
|
+
const relation = blocks ? "blocks" : "blocked_by"
|
|
337
|
+
const target = store.parseId((blocks ?? blockedBy)!)
|
|
338
|
+
const number = store.parseId(ref)
|
|
339
|
+
const task =
|
|
340
|
+
action === "link" ? store.link(number, relation, target) : store.unlink(number, relation, target)
|
|
341
|
+
if (args.flags.json) {
|
|
342
|
+
console.log(JSON.stringify({ task }, null, 2))
|
|
343
|
+
} else {
|
|
344
|
+
const verb = action === "link" ? "now" : "no longer"
|
|
345
|
+
const [subject, object] =
|
|
346
|
+
relation === "blocks"
|
|
347
|
+
? [task.id, store.displayId(target)]
|
|
348
|
+
: [store.displayId(target), task.id]
|
|
349
|
+
console.log(`${subject} ${verb} blocks ${object}`)
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
298
353
|
const AUTHOR_SOURCE: Record<string, string> = {
|
|
299
354
|
flag: "--author",
|
|
300
355
|
env: "$TASK_AUTHOR",
|
|
@@ -519,9 +574,14 @@ Usage
|
|
|
519
574
|
task update <id> [--title <t>] [--description <text>] [--status <s>]
|
|
520
575
|
[--tags <a,b>] [--milestone <m>]
|
|
521
576
|
[--needs-human | --no-needs-human]
|
|
577
|
+
[--pr <url>] [--prs <url1,url2>]
|
|
522
578
|
task move <id> <status> shorthand for update --status
|
|
523
579
|
task start <id> → in_progress
|
|
524
580
|
task done <id> → done
|
|
581
|
+
task link <id> --blocked-by <id>
|
|
582
|
+
task link <id> --blocks <id> mark a dependency — one relation, visible from
|
|
583
|
+
both tasks (A blocked by B ⇔ B blocks A)
|
|
584
|
+
task unlink <id> (--blocks <id> | --blocked-by <id>)
|
|
525
585
|
task comment <id> <text> [--author <who>]
|
|
526
586
|
task delete <id>
|
|
527
587
|
task whoami who your comments are attributed to
|
|
@@ -544,11 +604,13 @@ Usage
|
|
|
544
604
|
tasks — those are in .task/ either way
|
|
545
605
|
|
|
546
606
|
Values
|
|
547
|
-
<id>
|
|
607
|
+
<id> TAS-12, or just 12
|
|
548
608
|
status ${STATUSES.join(" ")}
|
|
549
609
|
--tag a,b matches a task carrying *either* tag
|
|
550
610
|
--needs-human this can't be finished by an agent alone
|
|
551
|
-
|
|
611
|
+
--pr <url> attach a pull request (appends); --prs replaces the whole list
|
|
612
|
+
clearing --tags "" drops all tags, --milestone "" clears it, --prs ""
|
|
613
|
+
detaches all PRs
|
|
552
614
|
|
|
553
615
|
Comment authors resolve --author → $TASK_AUTHOR → git config user.name →
|
|
554
616
|
anonymous, so there is nothing to set up. \`task whoami\` shows which one won.
|
|
@@ -588,6 +650,10 @@ function main(): void | Promise<void> {
|
|
|
588
650
|
return cmdUpdate(args, "in_progress")
|
|
589
651
|
case "done":
|
|
590
652
|
return cmdUpdate(args, "done")
|
|
653
|
+
case "link":
|
|
654
|
+
return cmdLink(args, "link")
|
|
655
|
+
case "unlink":
|
|
656
|
+
return cmdLink(args, "unlink")
|
|
591
657
|
case "comment":
|
|
592
658
|
return cmdComment(args)
|
|
593
659
|
case "whoami":
|
package/src/server.ts
CHANGED
|
@@ -48,10 +48,26 @@ function parsePatch(body: Record<string, unknown>): TaskPatch {
|
|
|
48
48
|
patch.milestone = body.milestone === "" ? null : body.milestone
|
|
49
49
|
}
|
|
50
50
|
if (typeof body.needsHuman === "boolean") patch.needsHuman = body.needsHuman
|
|
51
|
+
if (Array.isArray(body.blocks)) patch.blocks = body.blocks.map(taskNumber)
|
|
52
|
+
if (Array.isArray(body.blockedBy)) patch.blockedBy = body.blockedBy.map(taskNumber)
|
|
53
|
+
if (Array.isArray(body.prs)) {
|
|
54
|
+
patch.prs = body.prs.map((pr) => {
|
|
55
|
+
const url = String(pr).trim()
|
|
56
|
+
// Anything the UI would render as a clickable link has to be a link.
|
|
57
|
+
if (!/^https?:\/\//.test(url)) throw new Error(`not a PR url: ${url}`)
|
|
58
|
+
return url
|
|
59
|
+
})
|
|
60
|
+
}
|
|
51
61
|
if (typeof body.position === "number") patch.position = body.position
|
|
52
62
|
return patch
|
|
53
63
|
}
|
|
54
64
|
|
|
65
|
+
function taskNumber(value: unknown): number {
|
|
66
|
+
const n = Number(value)
|
|
67
|
+
if (!Number.isInteger(n) || n <= 0) throw new Error(`invalid task number: ${String(value)}`)
|
|
68
|
+
return n
|
|
69
|
+
}
|
|
70
|
+
|
|
55
71
|
/**
|
|
56
72
|
* `task serve` — one plain node:http server for the static UI, the JSON API,
|
|
57
73
|
* and an SSE stream that pings whenever anything writes to a `.task/` (the UI
|
package/src/store.ts
CHANGED
|
@@ -79,10 +79,10 @@ export function findBoards(serveRoot: string, maxDepth = 6): BoardRef[] {
|
|
|
79
79
|
return boards
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
/** Derive an id prefix from a project name: "phone agent" → "
|
|
82
|
+
/** Derive an id prefix from a project name: "phone agent" → "PHO". */
|
|
83
83
|
export function derivePrefix(name: string): string {
|
|
84
84
|
const word = name.toUpperCase().replace(/[^A-Z0-9]+/g, " ").trim().split(" ")[0]
|
|
85
|
-
return (word || "
|
|
85
|
+
return (word || "TAS").slice(0, 3)
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
interface TaskRow {
|
|
@@ -93,6 +93,7 @@ interface TaskRow {
|
|
|
93
93
|
tags: string
|
|
94
94
|
milestone: string | null
|
|
95
95
|
needs_human: number
|
|
96
|
+
prs: string
|
|
96
97
|
position: number
|
|
97
98
|
created_at: string
|
|
98
99
|
updated_at: string
|
|
@@ -160,12 +161,24 @@ export class TaskStore {
|
|
|
160
161
|
tags: JSON.parse(row.tags) as string[],
|
|
161
162
|
milestone: row.milestone,
|
|
162
163
|
needsHuman: row.needs_human !== 0,
|
|
164
|
+
blocks: this.linkedNumbers("blocker_id", row.id),
|
|
165
|
+
blockedBy: this.linkedNumbers("blocked_id", row.id),
|
|
166
|
+
prs: JSON.parse(row.prs) as string[],
|
|
163
167
|
position: row.position,
|
|
164
168
|
createdAt: row.created_at,
|
|
165
169
|
updatedAt: row.updated_at,
|
|
166
170
|
}
|
|
167
171
|
}
|
|
168
172
|
|
|
173
|
+
/** The other end of every link where `column` is this task. */
|
|
174
|
+
private linkedNumbers(column: "blocker_id" | "blocked_id", number: number): number[] {
|
|
175
|
+
const other = column === "blocker_id" ? "blocked_id" : "blocker_id"
|
|
176
|
+
const rows = this.db
|
|
177
|
+
.prepare(`SELECT ${other} AS n FROM task_links WHERE ${column} = ? ORDER BY ${other}`)
|
|
178
|
+
.all(number) as unknown as { n: number }[]
|
|
179
|
+
return rows.map((r) => r.n)
|
|
180
|
+
}
|
|
181
|
+
|
|
169
182
|
private toComment(row: CommentRow): Comment {
|
|
170
183
|
return {
|
|
171
184
|
id: row.id,
|
|
@@ -217,8 +230,8 @@ export class TaskStore {
|
|
|
217
230
|
const timestamp = now()
|
|
218
231
|
const result = this.db
|
|
219
232
|
.prepare(
|
|
220
|
-
`INSERT INTO tasks (title, description, status, tags, milestone, needs_human, position, created_at, updated_at)
|
|
221
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
233
|
+
`INSERT INTO tasks (title, description, status, tags, milestone, needs_human, prs, position, created_at, updated_at)
|
|
234
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
|
222
235
|
)
|
|
223
236
|
.run(
|
|
224
237
|
input.title,
|
|
@@ -227,17 +240,31 @@ export class TaskStore {
|
|
|
227
240
|
JSON.stringify(input.tags ?? []),
|
|
228
241
|
input.milestone ?? null,
|
|
229
242
|
input.needsHuman ? 1 : 0,
|
|
243
|
+
JSON.stringify(input.prs ?? []),
|
|
230
244
|
(max.max ?? 0) + POSITION_GAP,
|
|
231
245
|
timestamp,
|
|
232
246
|
timestamp,
|
|
233
247
|
)
|
|
234
|
-
|
|
248
|
+
const number = Number(result.lastInsertRowid)
|
|
249
|
+
if (input.blocks !== undefined) this.reconcileLinks("blocker_id", number, input.blocks)
|
|
250
|
+
if (input.blockedBy !== undefined) this.reconcileLinks("blocked_id", number, input.blockedBy)
|
|
251
|
+
return this.get(number)!
|
|
235
252
|
}
|
|
236
253
|
|
|
237
254
|
update(number: number, patch: TaskPatch): Task {
|
|
238
255
|
const existing = this.get(number)
|
|
239
256
|
if (!existing) throw new Error(`no such task: ${this.displayId(number)}`)
|
|
240
257
|
|
|
258
|
+
// Reconciled outside the UPDATE — links live in their own table. Done
|
|
259
|
+
// first so a bad target rejects the whole patch before anything writes.
|
|
260
|
+
let linksChanged = false
|
|
261
|
+
if (patch.blocks !== undefined) {
|
|
262
|
+
linksChanged = this.reconcileLinks("blocker_id", number, patch.blocks)
|
|
263
|
+
}
|
|
264
|
+
if (patch.blockedBy !== undefined) {
|
|
265
|
+
linksChanged = this.reconcileLinks("blocked_id", number, patch.blockedBy) || linksChanged
|
|
266
|
+
}
|
|
267
|
+
|
|
241
268
|
const sets: string[] = []
|
|
242
269
|
const params: (string | number | null)[] = []
|
|
243
270
|
const set = (column: string, value: string | number | null) => {
|
|
@@ -250,6 +277,7 @@ export class TaskStore {
|
|
|
250
277
|
if (patch.tags !== undefined) set("tags", JSON.stringify(patch.tags))
|
|
251
278
|
if (patch.milestone !== undefined) set("milestone", patch.milestone)
|
|
252
279
|
if (patch.needsHuman !== undefined) set("needs_human", patch.needsHuman ? 1 : 0)
|
|
280
|
+
if (patch.prs !== undefined) set("prs", JSON.stringify(patch.prs))
|
|
253
281
|
if (patch.status !== undefined) {
|
|
254
282
|
set("status", patch.status)
|
|
255
283
|
if (patch.position === undefined && patch.status !== existing.status) {
|
|
@@ -263,10 +291,73 @@ export class TaskStore {
|
|
|
263
291
|
}
|
|
264
292
|
if (patch.position !== undefined) set("position", patch.position)
|
|
265
293
|
|
|
266
|
-
if (sets.length === 0) return existing
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
294
|
+
if (sets.length === 0 && !linksChanged) return existing
|
|
295
|
+
if (sets.length > 0) {
|
|
296
|
+
set("updated_at", now())
|
|
297
|
+
params.push(number)
|
|
298
|
+
this.db.prepare(`UPDATE tasks SET ${sets.join(", ")} WHERE id = ?`).run(...params)
|
|
299
|
+
}
|
|
300
|
+
return this.get(number)!
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Make the link table agree with `targets` for one side of one task —
|
|
305
|
+
* `blocker_id` when setting what `number` blocks, `blocked_id` when setting
|
|
306
|
+
* what blocks it. The other task's view is the same row read from the other
|
|
307
|
+
* end, so there is no second write to keep consistent. Every task touched
|
|
308
|
+
* (both ends of every added or removed link) gets its `updated_at` bumped.
|
|
309
|
+
*/
|
|
310
|
+
private reconcileLinks(
|
|
311
|
+
column: "blocker_id" | "blocked_id",
|
|
312
|
+
number: number,
|
|
313
|
+
targets: number[],
|
|
314
|
+
): boolean {
|
|
315
|
+
const other = column === "blocker_id" ? "blocked_id" : "blocker_id"
|
|
316
|
+
const wanted = [...new Set(targets)]
|
|
317
|
+
for (const target of wanted) {
|
|
318
|
+
if (target === number) {
|
|
319
|
+
throw new Error(`a task can't block itself: ${this.displayId(number)}`)
|
|
320
|
+
}
|
|
321
|
+
if (!this.db.prepare("SELECT id FROM tasks WHERE id = ?").get(target)) {
|
|
322
|
+
throw new Error(`no such task: ${this.displayId(target)}`)
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const current = new Set(this.linkedNumbers(column, number))
|
|
326
|
+
const removed = [...current].filter((n) => !wanted.includes(n))
|
|
327
|
+
const added = wanted.filter((n) => !current.has(n))
|
|
328
|
+
for (const n of removed) {
|
|
329
|
+
this.db
|
|
330
|
+
.prepare(`DELETE FROM task_links WHERE ${column} = ? AND ${other} = ?`)
|
|
331
|
+
.run(number, n)
|
|
332
|
+
}
|
|
333
|
+
for (const n of added) {
|
|
334
|
+
this.db
|
|
335
|
+
.prepare(`INSERT OR IGNORE INTO task_links (${column}, ${other}) VALUES (?, ?)`)
|
|
336
|
+
.run(number, n)
|
|
337
|
+
}
|
|
338
|
+
const touched = [...removed, ...added]
|
|
339
|
+
if (touched.length > 0) {
|
|
340
|
+
const timestamp = now()
|
|
341
|
+
const bump = this.db.prepare("UPDATE tasks SET updated_at = ? WHERE id = ?")
|
|
342
|
+
for (const n of [...touched, number]) bump.run(timestamp, n)
|
|
343
|
+
}
|
|
344
|
+
return touched.length > 0
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/** `task link A --blocks B` and friends — additive, unlike the patch form. */
|
|
348
|
+
link(number: number, relation: "blocks" | "blocked_by", target: number): Task {
|
|
349
|
+
if (!this.get(number)) throw new Error(`no such task: ${this.displayId(number)}`)
|
|
350
|
+
const column = relation === "blocks" ? "blocker_id" : "blocked_id"
|
|
351
|
+
const current = this.linkedNumbers(column, number)
|
|
352
|
+
this.reconcileLinks(column, number, [...current, target])
|
|
353
|
+
return this.get(number)!
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
unlink(number: number, relation: "blocks" | "blocked_by", target: number): Task {
|
|
357
|
+
if (!this.get(number)) throw new Error(`no such task: ${this.displayId(number)}`)
|
|
358
|
+
const column = relation === "blocks" ? "blocker_id" : "blocked_id"
|
|
359
|
+
const current = this.linkedNumbers(column, number)
|
|
360
|
+
this.reconcileLinks(column, number, current.filter((n) => n !== target))
|
|
270
361
|
return this.get(number)!
|
|
271
362
|
}
|
|
272
363
|
|
|
@@ -365,6 +456,17 @@ const MIGRATIONS: string[] = [
|
|
|
365
456
|
ALTER TABLE tasks ADD COLUMN needs_human INTEGER NOT NULL DEFAULT 0;
|
|
366
457
|
ALTER TABLE tasks DROP COLUMN priority;
|
|
367
458
|
ALTER TABLE tasks DROP COLUMN assignee;`,
|
|
459
|
+
|
|
460
|
+
// v3 — dependencies and pull requests. One direction of "blocks" is the
|
|
461
|
+
// whole relation: (blocker, blocked) read from the blocked side is
|
|
462
|
+
// "blocked by", so the mirror is a query, not a second row. PRs are a JSON
|
|
463
|
+
// list of URLs, same shape as tags.
|
|
464
|
+
`CREATE TABLE task_links (
|
|
465
|
+
blocker_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
466
|
+
blocked_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
467
|
+
PRIMARY KEY (blocker_id, blocked_id)
|
|
468
|
+
);
|
|
469
|
+
ALTER TABLE tasks ADD COLUMN prs TEXT NOT NULL DEFAULT '[]';`,
|
|
368
470
|
]
|
|
369
471
|
|
|
370
472
|
/**
|
package/src/types.ts
CHANGED
|
@@ -10,7 +10,7 @@ export const STATUSES = [
|
|
|
10
10
|
export type Status = (typeof STATUSES)[number]
|
|
11
11
|
|
|
12
12
|
export interface Task {
|
|
13
|
-
/** Display id — `<prefix>-<number>`, e.g. "
|
|
13
|
+
/** Display id — `<prefix>-<number>`, e.g. "PHO-12". */
|
|
14
14
|
id: string
|
|
15
15
|
number: number
|
|
16
16
|
title: string
|
|
@@ -20,6 +20,15 @@ export interface Task {
|
|
|
20
20
|
milestone: string | null
|
|
21
21
|
/** This ticket can't be finished by an agent alone. */
|
|
22
22
|
needsHuman: boolean
|
|
23
|
+
/**
|
|
24
|
+
* Task numbers this one blocks / is blocked by. One relation, two views:
|
|
25
|
+
* a single `(blocker, blocked)` row shows up in the blocker's `blocks` and
|
|
26
|
+
* the blocked task's `blockedBy`, so the mirror can never drift.
|
|
27
|
+
*/
|
|
28
|
+
blocks: number[]
|
|
29
|
+
blockedBy: number[]
|
|
30
|
+
/** Pull request URLs attached to this task. */
|
|
31
|
+
prs: string[]
|
|
23
32
|
/** Sort key within a status column; smaller sorts first. */
|
|
24
33
|
position: number
|
|
25
34
|
createdAt: string
|
|
@@ -36,7 +45,7 @@ export interface Comment {
|
|
|
36
45
|
|
|
37
46
|
export interface ProjectConfig {
|
|
38
47
|
name: string
|
|
39
|
-
/** Uppercase id prefix, e.g. "
|
|
48
|
+
/** Uppercase id prefix, e.g. "PHO" → PHO-1, PHO-2, … */
|
|
40
49
|
prefix: string
|
|
41
50
|
version: number
|
|
42
51
|
}
|
|
@@ -57,6 +66,9 @@ export interface TaskInput {
|
|
|
57
66
|
tags?: string[]
|
|
58
67
|
milestone?: string | null
|
|
59
68
|
needsHuman?: boolean
|
|
69
|
+
blocks?: number[]
|
|
70
|
+
blockedBy?: number[]
|
|
71
|
+
prs?: string[]
|
|
60
72
|
}
|
|
61
73
|
|
|
62
74
|
export interface TaskPatch {
|
|
@@ -66,6 +78,13 @@ export interface TaskPatch {
|
|
|
66
78
|
tags?: string[]
|
|
67
79
|
milestone?: string | null
|
|
68
80
|
needsHuman?: boolean
|
|
81
|
+
/**
|
|
82
|
+
* Full replacement, like `tags` — the store reconciles the relation table
|
|
83
|
+
* to match. Writing either side updates the other task's mirror view.
|
|
84
|
+
*/
|
|
85
|
+
blocks?: number[]
|
|
86
|
+
blockedBy?: number[]
|
|
87
|
+
prs?: string[]
|
|
69
88
|
/** Explicit board position (used by drag-and-drop in the UI). */
|
|
70
89
|
position?: number
|
|
71
90
|
}
|