@vibeflow-tools/cli 0.4.1 → 0.4.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/dist/chunk-252RNKHM.js +2 -0
- package/dist/chunk-BQLZVQ4E.js +2 -0
- package/dist/cli/chunk-252RNKHM.js +2 -0
- package/dist/cli/chunk-BQLZVQ4E.js +2 -0
- package/dist/cli/files-IX5QZQHC.js +2 -0
- package/dist/cli/files-O4WJLFMU.js +2 -0
- package/dist/cli/index.js +48 -48
- package/dist/client/kanban-browser.js +11 -11
- package/dist/client/kanban.css +1 -1
- package/dist/client/overlay-browser.js +23 -23
- package/dist/files-IX5QZQHC.js +2 -0
- package/dist/files-O4WJLFMU.js +2 -0
- package/dist/index.js +48 -48
- package/package.json +3 -3
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{readdirSync as H,writeFileSync as K,readFileSync as M,unlinkSync as x,statSync as R,mkdirSync as G,existsSync as c}from"fs";import{join as f,basename as A}from"path";var d=".vibeflow",D="tasks",k="tasks/files",P="tasks/screenshots",Z="config.json";import{existsSync as m,readFileSync as N,writeFileSync as z,mkdirSync as p,readdirSync as y,unlinkSync as v,renameSync as b}from"fs";import{join as l,extname as O}from"path";import{randomBytes as V}from"crypto";var B=["backlog","todo","in-progress","review","done"];function W(){return V(15).toString("hex")}function h(t){return l(t,d,D)}function U(t){let n=l(t,d),e=l(n,"files"),i=l(n,k),s=l(n,"screenshots"),r=l(n,P);if(m(e)){p(i,{recursive:!0});for(let o of y(e)){let a=l(e,o),u=l(i,o);if(!m(u))try{b(a,u)}catch{}}}if(m(s)){p(r,{recursive:!0});for(let o of y(s)){let a=l(s,o),u=l(r,o);if(!m(u))try{b(a,u)}catch{}}}}function rt(t){U(t),p(h(t),{recursive:!0}),p(l(t,d,P),{recursive:!0})}function E(t){return t.slice(0,10)}function j(t,n,e){let i=h(t);return e?l(i,E(e),`${n}.json`):l(i,`${n}.json`)}function T(t,n){let e=h(t);if(!m(e))return null;for(let i of y(e,{withFileTypes:!0}))if(i.isDirectory()){let s=l(e,i.name,`${n}.json`);if(m(s))return s}else if(i.name===`${n}.json`)return l(e,i.name);return null}function J(t){let n=(()=>{if(typeof t.type!="string")return;let e=t.type.trim();if(!(!e||e==="[object Object]"))return e})();return{id:String(t.id??""),title:String(t.title??"Untitled"),description:String(t.description??""),status:B.includes(t.status)?t.status:"todo",url:t.url?String(t.url):void 0,selector:(()=>{let e=String(t.selector??"/");return t.file&&!t.cssSelector&&e.startsWith(String(t.file))?t.url?String(t.url):"/":e})(),cssSelector:t.cssSelector&&String(t.cssSelector)!==String(t.selector??"/")?String(t.cssSelector):void 0,file:t.file?String(t.file):void 0,line:t.line!=null?Number(t.line):void 0,col:t.col!=null?Number(t.col):void 0,component:t.component?String(t.component):void 0,type:n,priority:t.priority?String(t.priority):void 0,...t.reportBack===!0&&{reportBack:!0},agent:t.agent?String(t.agent):void 0,model:t.model?String(t.model):void 0,author:t.author?String(t.author):void 0,commits:Array.isArray(t.commits)?t.commits.map(e=>({sha:String(e.sha??""),message:String(e.message??""),timestamp:String(e.timestamp??new Date().toISOString())})):void 0,created:String(t.created??new Date().toISOString()),updated:t.updated?String(t.updated):void 0,comments:Array.isArray(t.comments)?t.comments.map(e=>({...e,text:e.text??e.content??""})):[],files:Array.isArray(t.files)?t.files.map(e=>typeof e=="string"?{name:e,addedAt:new Date().toISOString()}:{name:String(e.name??""),addedAt:String(e.addedAt??new Date().toISOString()),linkedPath:e.linkedPath?String(e.linkedPath):void 0,mimeType:e.mimeType?String(e.mimeType):void 0}).filter(e=>e.name):[],screenshot:t.screenshot?String(t.screenshot):void 0,annotatedElementText:t.annotatedElementText?String(t.annotatedElementText):void 0,tags:Array.isArray(t.tags)?t.tags.filter(e=>typeof e=="string"&&e.length>0):void 0}}function _(t,n){let e=l(h(t),E(n.created));p(e,{recursive:!0});let i=l(e,`${n.id}.json`),s=i+".tmp";z(s,JSON.stringify(n,null,2),"utf-8"),b(s,i)}function st(t,n){let e=(()=>{let s=(n.priority??"").trim().toLowerCase();return s==="critical"?"Critical":s==="high"?"High":s==="low"?"Low":"Medium"})(),i={...n,priority:e,id:W(),created:new Date().toISOString(),comments:[],files:[]};return _(t,i),i}function S(t){try{let n=N(t,"utf-8");if(t.endsWith(".json")){let e=JSON.parse(n);return!e||typeof e!="object"||!("id"in e)?null:J(e)}return null}catch{return null}}function $(t){let n=h(t);if(!m(n))return[];let e=[];for(let i of y(n,{withFileTypes:!0}))if(i.isDirectory()){let s=l(n,i.name);for(let r of y(s))if(O(r)===".json"){let o=l(s,r),a=S(o);a&&e.push({task:a,filePath:o})}}else if(O(i.name)===".json"){let s=l(n,i.name),r=S(s);r&&e.push({task:r,filePath:s})}return e}function ot(t){return $(t).map(({task:n})=>n)}function at(t){return $(t).map(({task:n,filePath:e})=>({...n,filePath:e}))}function L(t,n,e){let i=T(t,n),s=i?S(i):null;if(!s)return null;let r={...s,...e,updated:new Date().toISOString()};if(_(t,r),i&&i!==j(t,n,r.created))try{v(i)}catch{}return r}function lt(t,n){let e=T(t,n);return e?(v(e),!0):!1}function ut(t,n,e){return{id:t.id,status:t.status,title:t.title,description:t.description,...t.url&&{url:t.url},selector:t.selector,...t.file&&{file:t.file},...t.line!=null&&{line:t.line},...t.col!=null&&{col:t.col},...t.component&&{component:t.component},...t.type&&{type:t.type},...t.priority&&{priority:t.priority},...n&&n.length>0&&{structuredComments:n},...e&&e.length>0&&{linkedFiles:e},...t.reportBack&&{reportBack:!0},created:t.created}}var C=".linked.json";function g(t,n){return f(t,d,k,n)}function q(t,n){G(g(t,n),{recursive:!0})}function Q(t,n){let e=f(g(t,n),C);if(!c(e))return[];try{return JSON.parse(M(e,"utf-8"))}catch{return[]}}function X(t,n){let e=T(t,n),i=e?S(e):null;return!i?.files||i.files.length===0?[]:i.files}function I(t,n,e){L(t,n,{files:e})}function F(t,n){let e=X(t,n),i=f(g(t,n),C);if(!c(i))return e;let s=Q(t,n);if(s.length===0){try{x(i)}catch{}return e}let r=e.slice(),o=!1;for(let a of s)r.find(u=>u.linkedPath===a.path||u.name===a.name&&u.linkedPath)||(r.push({name:a.name,linkedPath:a.path,addedAt:new Date().toISOString()}),o=!0);o&&I(t,n,r);try{x(i)}catch{}return r}function Y(t,n){let e=g(t,n),i=F(t,n),s=new Map;for(let r of i){if(r.linkedPath&&c(r.linkedPath)){let a=R(r.linkedPath);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,linkedPath:r.linkedPath,createdAt:a.mtime.toISOString()});continue}let o=f(e,r.name);if(c(o)){let a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}}if(c(e))for(let r of H(e,{withFileTypes:!0})){if(!r.isFile()||r.name===C||s.has(r.name))continue;let o=f(e,r.name),a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}return Array.from(s.values())}function yt(t,n,e,i){let s=A(e);q(t,n),K(f(g(t,n),s),i);let r=F(t,n);return r.find(o=>o.name===s&&!o.linkedPath)||(r.push({name:s,addedAt:new Date().toISOString()}),I(t,n,r)),{name:s,size:i.length,url:`/api/tasks/${n}/files/${encodeURIComponent(s)}`}}function St(t,n,e){let i=A(e),s=F(t,n),r=s.findIndex(a=>a.name===i);if(r!==-1){let[a]=s.splice(r,1);if(I(t,n,s),a&&!a.linkedPath){let u=f(g(t,n),i);c(u)&&x(u)}return!0}let o=f(g(t,n),i);return c(o)?(x(o),!0):!1}function ht(t,n,e){let i=A(e),s=F(t,n).find(o=>o.name===i&&o.linkedPath);if(s?.linkedPath&&c(s.linkedPath))return s.linkedPath;let r=f(g(t,n),i);return c(r)?r:null}function kt(t,n){return Y(t,n).length}export{d as a,D as b,P as c,Z as d,W as e,rt as f,j as g,T as h,st as i,S as j,ot as k,at as l,L as m,lt as n,ut as o,g as p,q,Y as r,yt as s,St as t,ht as u,kt as v};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{readdirSync as K,writeFileSync as H,readFileSync as M,unlinkSync as x,statSync as R,mkdirSync as G,existsSync as c}from"fs";import{join as f,basename as A}from"path";var d=".vibeflow",D="tasks",k="tasks/files",P="tasks/screenshots",Z="config.json";import{existsSync as m,readFileSync as N,writeFileSync as z,mkdirSync as p,readdirSync as y,unlinkSync as v,renameSync as b}from"fs";import{join as l,extname as O}from"path";import{randomBytes as V}from"crypto";var B=["backlog","todo","in-progress","review","done"];function W(){return V(15).toString("hex")}function h(t){return l(t,d,D)}function U(t){let n=l(t,d),e=l(n,"files"),i=l(n,k),s=l(n,"screenshots"),r=l(n,P);if(m(e)){p(i,{recursive:!0});for(let o of y(e)){let a=l(e,o),u=l(i,o);if(!m(u))try{b(a,u)}catch{}}}if(m(s)){p(r,{recursive:!0});for(let o of y(s)){let a=l(s,o),u=l(r,o);if(!m(u))try{b(a,u)}catch{}}}}function rt(t){U(t),p(h(t),{recursive:!0}),p(l(t,d,P),{recursive:!0})}function E(t){return t.slice(0,10)}function j(t,n,e){let i=h(t);return e?l(i,E(e),`${n}.json`):l(i,`${n}.json`)}function T(t,n){let e=h(t);if(!m(e))return null;for(let i of y(e,{withFileTypes:!0}))if(i.isDirectory()){let s=l(e,i.name,`${n}.json`);if(m(s))return s}else if(i.name===`${n}.json`)return l(e,i.name);return null}function J(t){let n=(()=>{if(typeof t.type!="string")return;let e=t.type.trim();if(!(!e||e==="[object Object]"))return e})();return{id:String(t.id??""),title:String(t.title??"Untitled"),description:String(t.description??""),status:B.includes(t.status)?t.status:"todo",url:t.url?String(t.url):void 0,selector:(()=>{let e=String(t.selector??"/");return t.file&&!t.cssSelector&&e.startsWith(String(t.file))?t.url?String(t.url):"/":e})(),cssSelector:t.cssSelector&&String(t.cssSelector)!==String(t.selector??"/")?String(t.cssSelector):void 0,file:t.file?String(t.file):void 0,line:t.line!=null?Number(t.line):void 0,col:t.col!=null?Number(t.col):void 0,component:t.component?String(t.component):void 0,type:n,priority:t.priority?String(t.priority):void 0,...t.reportBack===!0&&{reportBack:!0},agent:t.agent?String(t.agent):void 0,model:t.model?String(t.model):void 0,author:t.author?String(t.author):void 0,commits:Array.isArray(t.commits)?t.commits.map(e=>({sha:String(e.sha??""),message:String(e.message??""),timestamp:String(e.timestamp??new Date().toISOString())})):void 0,created:String(t.created??new Date().toISOString()),updated:t.updated?String(t.updated):void 0,comments:Array.isArray(t.comments)?t.comments.map(e=>({...e,text:e.text??e.content??""})):[],files:Array.isArray(t.files)?t.files.map(e=>typeof e=="string"?{name:e,addedAt:new Date().toISOString()}:{name:String(e.name??""),addedAt:String(e.addedAt??new Date().toISOString()),linkedPath:e.linkedPath?String(e.linkedPath):void 0,mimeType:e.mimeType?String(e.mimeType):void 0}).filter(e=>e.name):[],screenshot:t.screenshot?String(t.screenshot):void 0,annotatedElementText:t.annotatedElementText?String(t.annotatedElementText):void 0,tags:Array.isArray(t.tags)?t.tags.filter(e=>typeof e=="string"&&e.length>0):void 0}}function _(t,n){let e=l(h(t),E(n.created));p(e,{recursive:!0});let i=l(e,`${n.id}.json`),s=i+".tmp";z(s,JSON.stringify(n,null,2),"utf-8"),b(s,i)}function st(t,n){let e=(()=>{let s=(n.priority??"").trim().toLowerCase();return s==="critical"?"Critical":s==="high"?"High":s==="low"?"Low":"Medium"})(),i={...n,priority:e,id:W(),created:new Date().toISOString(),comments:[],files:[]};return _(t,i),i}function S(t){try{let n=N(t,"utf-8");if(t.endsWith(".json")){let e=JSON.parse(n);return!e||typeof e!="object"||!("id"in e)?null:J(e)}return null}catch{return null}}function $(t){let n=h(t);if(!m(n))return[];let e=[];for(let i of y(n,{withFileTypes:!0}))if(i.isDirectory()){let s=l(n,i.name);for(let r of y(s))if(O(r)===".json"){let o=l(s,r),a=S(o);a&&e.push({task:a,filePath:o})}}else if(O(i.name)===".json"){let s=l(n,i.name),r=S(s);r&&e.push({task:r,filePath:s})}return e}function ot(t){return $(t).map(({task:n})=>n)}function at(t){return $(t).map(({task:n,filePath:e})=>({...n,filePath:e}))}function L(t,n,e){let i=T(t,n),s=i?S(i):null;if(!s)return null;let r={...s,...e,updated:new Date().toISOString()};if(_(t,r),i&&i!==j(t,n,r.created))try{v(i)}catch{}return r}function lt(t,n){let e=T(t,n);return e?(v(e),!0):!1}function ut(t,n,e){return{id:t.id,status:t.status,title:t.title,description:t.description,...t.url&&{url:t.url},selector:t.selector,...t.file&&{file:t.file},...t.line!=null&&{line:t.line},...t.col!=null&&{col:t.col},...t.component&&{component:t.component},...t.type&&{type:t.type},...t.priority&&{priority:t.priority},...n&&n.length>0&&{structuredComments:n},...e&&e.length>0&&{linkedFiles:e},...t.reportBack&&{reportBack:!0},created:t.created}}var C=".linked.json";function g(t,n){return f(t,d,k,n)}function q(t,n){G(g(t,n),{recursive:!0})}function Q(t,n){let e=f(g(t,n),C);if(!c(e))return[];try{return JSON.parse(M(e,"utf-8"))}catch{return[]}}function X(t,n){let e=T(t,n),i=e?S(e):null;return!i?.files||i.files.length===0?[]:i.files}function I(t,n,e){L(t,n,{files:e})}function F(t,n){let e=X(t,n),i=f(g(t,n),C);if(!c(i))return e;let s=Q(t,n);if(s.length===0){try{x(i)}catch{}return e}let r=e.slice(),o=!1;for(let a of s)r.find(u=>u.linkedPath===a.path||u.name===a.name&&u.linkedPath)||(r.push({name:a.name,linkedPath:a.path,addedAt:new Date().toISOString()}),o=!0);o&&I(t,n,r);try{x(i)}catch{}return r}function Y(t,n){let e=g(t,n),i=F(t,n),s=new Map;for(let r of i){if(r.linkedPath&&c(r.linkedPath)){let a=R(r.linkedPath);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,linkedPath:r.linkedPath,createdAt:a.mtime.toISOString()});continue}let o=f(e,r.name);if(c(o)){let a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}}if(c(e))for(let r of K(e,{withFileTypes:!0})){if(!r.isFile()||r.name===C||s.has(r.name))continue;let o=f(e,r.name),a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}return Array.from(s.values())}function yt(t,n,e,i){let s=A(e);q(t,n),H(f(g(t,n),s),i);let r=F(t,n);return r.find(o=>o.name===s&&!o.linkedPath)||(r.push({name:s,addedAt:new Date().toISOString()}),I(t,n,r)),{name:s,size:i.length,url:`/api/tasks/${n}/files/${encodeURIComponent(s)}`}}function St(t,n,e){let i=A(e),s=F(t,n),r=s.findIndex(a=>a.name===i);if(r!==-1){let[a]=s.splice(r,1);if(I(t,n,s),a&&!a.linkedPath){let u=f(g(t,n),i);c(u)&&x(u)}return!0}let o=f(g(t,n),i);return c(o)?(x(o),!0):!1}function ht(t,n,e){let i=A(e),s=F(t,n).find(o=>o.name===i&&o.linkedPath);if(s?.linkedPath&&c(s.linkedPath))return s.linkedPath;let r=f(g(t,n),i);return c(r)?r:null}function kt(t,n){return Y(t,n).length}export{d as a,D as b,P as c,Z as d,W as e,rt as f,j as g,T as h,st as i,S as j,ot as k,at as l,L as m,lt as n,ut as o,g as p,q,Y as r,yt as s,St as t,ht as u,kt as v};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{readdirSync as H,writeFileSync as K,readFileSync as M,unlinkSync as x,statSync as R,mkdirSync as G,existsSync as c}from"fs";import{join as f,basename as A}from"path";var d=".vibeflow",D="tasks",k="tasks/files",P="tasks/screenshots",Z="config.json";import{existsSync as m,readFileSync as N,writeFileSync as z,mkdirSync as p,readdirSync as y,unlinkSync as v,renameSync as b}from"fs";import{join as l,extname as O}from"path";import{randomBytes as V}from"crypto";var B=["backlog","todo","in-progress","review","done"];function W(){return V(15).toString("hex")}function h(t){return l(t,d,D)}function U(t){let n=l(t,d),e=l(n,"files"),i=l(n,k),s=l(n,"screenshots"),r=l(n,P);if(m(e)){p(i,{recursive:!0});for(let o of y(e)){let a=l(e,o),u=l(i,o);if(!m(u))try{b(a,u)}catch{}}}if(m(s)){p(r,{recursive:!0});for(let o of y(s)){let a=l(s,o),u=l(r,o);if(!m(u))try{b(a,u)}catch{}}}}function rt(t){U(t),p(h(t),{recursive:!0}),p(l(t,d,P),{recursive:!0})}function E(t){return t.slice(0,10)}function j(t,n,e){let i=h(t);return e?l(i,E(e),`${n}.json`):l(i,`${n}.json`)}function T(t,n){let e=h(t);if(!m(e))return null;for(let i of y(e,{withFileTypes:!0}))if(i.isDirectory()){let s=l(e,i.name,`${n}.json`);if(m(s))return s}else if(i.name===`${n}.json`)return l(e,i.name);return null}function J(t){let n=(()=>{if(typeof t.type!="string")return;let e=t.type.trim();if(!(!e||e==="[object Object]"))return e})();return{id:String(t.id??""),title:String(t.title??"Untitled"),description:String(t.description??""),status:B.includes(t.status)?t.status:"todo",url:t.url?String(t.url):void 0,selector:(()=>{let e=String(t.selector??"/");return t.file&&!t.cssSelector&&e.startsWith(String(t.file))?t.url?String(t.url):"/":e})(),cssSelector:t.cssSelector&&String(t.cssSelector)!==String(t.selector??"/")?String(t.cssSelector):void 0,file:t.file?String(t.file):void 0,line:t.line!=null?Number(t.line):void 0,col:t.col!=null?Number(t.col):void 0,component:t.component?String(t.component):void 0,type:n,priority:t.priority?String(t.priority):void 0,...t.reportBack===!0&&{reportBack:!0},agent:t.agent?String(t.agent):void 0,model:t.model?String(t.model):void 0,author:t.author?String(t.author):void 0,commits:Array.isArray(t.commits)?t.commits.map(e=>({sha:String(e.sha??""),message:String(e.message??""),timestamp:String(e.timestamp??new Date().toISOString())})):void 0,created:String(t.created??new Date().toISOString()),updated:t.updated?String(t.updated):void 0,comments:Array.isArray(t.comments)?t.comments.map(e=>({...e,text:e.text??e.content??""})):[],files:Array.isArray(t.files)?t.files.map(e=>typeof e=="string"?{name:e,addedAt:new Date().toISOString()}:{name:String(e.name??""),addedAt:String(e.addedAt??new Date().toISOString()),linkedPath:e.linkedPath?String(e.linkedPath):void 0,mimeType:e.mimeType?String(e.mimeType):void 0}).filter(e=>e.name):[],screenshot:t.screenshot?String(t.screenshot):void 0,annotatedElementText:t.annotatedElementText?String(t.annotatedElementText):void 0,tags:Array.isArray(t.tags)?t.tags.filter(e=>typeof e=="string"&&e.length>0):void 0}}function _(t,n){let e=l(h(t),E(n.created));p(e,{recursive:!0});let i=l(e,`${n.id}.json`),s=i+".tmp";z(s,JSON.stringify(n,null,2),"utf-8"),b(s,i)}function st(t,n){let e=(()=>{let s=(n.priority??"").trim().toLowerCase();return s==="critical"?"Critical":s==="high"?"High":s==="low"?"Low":"Medium"})(),i={...n,priority:e,id:W(),created:new Date().toISOString(),comments:[],files:[]};return _(t,i),i}function S(t){try{let n=N(t,"utf-8");if(t.endsWith(".json")){let e=JSON.parse(n);return!e||typeof e!="object"||!("id"in e)?null:J(e)}return null}catch{return null}}function $(t){let n=h(t);if(!m(n))return[];let e=[];for(let i of y(n,{withFileTypes:!0}))if(i.isDirectory()){let s=l(n,i.name);for(let r of y(s))if(O(r)===".json"){let o=l(s,r),a=S(o);a&&e.push({task:a,filePath:o})}}else if(O(i.name)===".json"){let s=l(n,i.name),r=S(s);r&&e.push({task:r,filePath:s})}return e}function ot(t){return $(t).map(({task:n})=>n)}function at(t){return $(t).map(({task:n,filePath:e})=>({...n,filePath:e}))}function L(t,n,e){let i=T(t,n),s=i?S(i):null;if(!s)return null;let r={...s,...e,updated:new Date().toISOString()};if(_(t,r),i&&i!==j(t,n,r.created))try{v(i)}catch{}return r}function lt(t,n){let e=T(t,n);return e?(v(e),!0):!1}function ut(t,n,e){return{id:t.id,status:t.status,title:t.title,description:t.description,...t.url&&{url:t.url},selector:t.selector,...t.file&&{file:t.file},...t.line!=null&&{line:t.line},...t.col!=null&&{col:t.col},...t.component&&{component:t.component},...t.type&&{type:t.type},...t.priority&&{priority:t.priority},...n&&n.length>0&&{structuredComments:n},...e&&e.length>0&&{linkedFiles:e},...t.reportBack&&{reportBack:!0},created:t.created}}var C=".linked.json";function g(t,n){return f(t,d,k,n)}function q(t,n){G(g(t,n),{recursive:!0})}function Q(t,n){let e=f(g(t,n),C);if(!c(e))return[];try{return JSON.parse(M(e,"utf-8"))}catch{return[]}}function X(t,n){let e=T(t,n),i=e?S(e):null;return!i?.files||i.files.length===0?[]:i.files}function I(t,n,e){L(t,n,{files:e})}function F(t,n){let e=X(t,n),i=f(g(t,n),C);if(!c(i))return e;let s=Q(t,n);if(s.length===0){try{x(i)}catch{}return e}let r=e.slice(),o=!1;for(let a of s)r.find(u=>u.linkedPath===a.path||u.name===a.name&&u.linkedPath)||(r.push({name:a.name,linkedPath:a.path,addedAt:new Date().toISOString()}),o=!0);o&&I(t,n,r);try{x(i)}catch{}return r}function Y(t,n){let e=g(t,n),i=F(t,n),s=new Map;for(let r of i){if(r.linkedPath&&c(r.linkedPath)){let a=R(r.linkedPath);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,linkedPath:r.linkedPath,createdAt:a.mtime.toISOString()});continue}let o=f(e,r.name);if(c(o)){let a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}}if(c(e))for(let r of H(e,{withFileTypes:!0})){if(!r.isFile()||r.name===C||s.has(r.name))continue;let o=f(e,r.name),a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}return Array.from(s.values())}function yt(t,n,e,i){let s=A(e);q(t,n),K(f(g(t,n),s),i);let r=F(t,n);return r.find(o=>o.name===s&&!o.linkedPath)||(r.push({name:s,addedAt:new Date().toISOString()}),I(t,n,r)),{name:s,size:i.length,url:`/api/tasks/${n}/files/${encodeURIComponent(s)}`}}function St(t,n,e){let i=A(e),s=F(t,n),r=s.findIndex(a=>a.name===i);if(r!==-1){let[a]=s.splice(r,1);if(I(t,n,s),a&&!a.linkedPath){let u=f(g(t,n),i);c(u)&&x(u)}return!0}let o=f(g(t,n),i);return c(o)?(x(o),!0):!1}function ht(t,n,e){let i=A(e),s=F(t,n).find(o=>o.name===i&&o.linkedPath);if(s?.linkedPath&&c(s.linkedPath))return s.linkedPath;let r=f(g(t,n),i);return c(r)?r:null}function kt(t,n){return Y(t,n).length}export{d as a,D as b,P as c,Z as d,W as e,rt as f,j as g,T as h,st as i,S as j,ot as k,at as l,L as m,lt as n,ut as o,g as p,q,Y as r,yt as s,St as t,ht as u,kt as v};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{readdirSync as K,writeFileSync as H,readFileSync as M,unlinkSync as x,statSync as R,mkdirSync as G,existsSync as c}from"fs";import{join as f,basename as A}from"path";var d=".vibeflow",D="tasks",k="tasks/files",P="tasks/screenshots",Z="config.json";import{existsSync as m,readFileSync as N,writeFileSync as z,mkdirSync as p,readdirSync as y,unlinkSync as v,renameSync as b}from"fs";import{join as l,extname as O}from"path";import{randomBytes as V}from"crypto";var B=["backlog","todo","in-progress","review","done"];function W(){return V(15).toString("hex")}function h(t){return l(t,d,D)}function U(t){let n=l(t,d),e=l(n,"files"),i=l(n,k),s=l(n,"screenshots"),r=l(n,P);if(m(e)){p(i,{recursive:!0});for(let o of y(e)){let a=l(e,o),u=l(i,o);if(!m(u))try{b(a,u)}catch{}}}if(m(s)){p(r,{recursive:!0});for(let o of y(s)){let a=l(s,o),u=l(r,o);if(!m(u))try{b(a,u)}catch{}}}}function rt(t){U(t),p(h(t),{recursive:!0}),p(l(t,d,P),{recursive:!0})}function E(t){return t.slice(0,10)}function j(t,n,e){let i=h(t);return e?l(i,E(e),`${n}.json`):l(i,`${n}.json`)}function T(t,n){let e=h(t);if(!m(e))return null;for(let i of y(e,{withFileTypes:!0}))if(i.isDirectory()){let s=l(e,i.name,`${n}.json`);if(m(s))return s}else if(i.name===`${n}.json`)return l(e,i.name);return null}function J(t){let n=(()=>{if(typeof t.type!="string")return;let e=t.type.trim();if(!(!e||e==="[object Object]"))return e})();return{id:String(t.id??""),title:String(t.title??"Untitled"),description:String(t.description??""),status:B.includes(t.status)?t.status:"todo",url:t.url?String(t.url):void 0,selector:(()=>{let e=String(t.selector??"/");return t.file&&!t.cssSelector&&e.startsWith(String(t.file))?t.url?String(t.url):"/":e})(),cssSelector:t.cssSelector&&String(t.cssSelector)!==String(t.selector??"/")?String(t.cssSelector):void 0,file:t.file?String(t.file):void 0,line:t.line!=null?Number(t.line):void 0,col:t.col!=null?Number(t.col):void 0,component:t.component?String(t.component):void 0,type:n,priority:t.priority?String(t.priority):void 0,...t.reportBack===!0&&{reportBack:!0},agent:t.agent?String(t.agent):void 0,model:t.model?String(t.model):void 0,author:t.author?String(t.author):void 0,commits:Array.isArray(t.commits)?t.commits.map(e=>({sha:String(e.sha??""),message:String(e.message??""),timestamp:String(e.timestamp??new Date().toISOString())})):void 0,created:String(t.created??new Date().toISOString()),updated:t.updated?String(t.updated):void 0,comments:Array.isArray(t.comments)?t.comments.map(e=>({...e,text:e.text??e.content??""})):[],files:Array.isArray(t.files)?t.files.map(e=>typeof e=="string"?{name:e,addedAt:new Date().toISOString()}:{name:String(e.name??""),addedAt:String(e.addedAt??new Date().toISOString()),linkedPath:e.linkedPath?String(e.linkedPath):void 0,mimeType:e.mimeType?String(e.mimeType):void 0}).filter(e=>e.name):[],screenshot:t.screenshot?String(t.screenshot):void 0,annotatedElementText:t.annotatedElementText?String(t.annotatedElementText):void 0,tags:Array.isArray(t.tags)?t.tags.filter(e=>typeof e=="string"&&e.length>0):void 0}}function _(t,n){let e=l(h(t),E(n.created));p(e,{recursive:!0});let i=l(e,`${n.id}.json`),s=i+".tmp";z(s,JSON.stringify(n,null,2),"utf-8"),b(s,i)}function st(t,n){let e=(()=>{let s=(n.priority??"").trim().toLowerCase();return s==="critical"?"Critical":s==="high"?"High":s==="low"?"Low":"Medium"})(),i={...n,priority:e,id:W(),created:new Date().toISOString(),comments:[],files:[]};return _(t,i),i}function S(t){try{let n=N(t,"utf-8");if(t.endsWith(".json")){let e=JSON.parse(n);return!e||typeof e!="object"||!("id"in e)?null:J(e)}return null}catch{return null}}function $(t){let n=h(t);if(!m(n))return[];let e=[];for(let i of y(n,{withFileTypes:!0}))if(i.isDirectory()){let s=l(n,i.name);for(let r of y(s))if(O(r)===".json"){let o=l(s,r),a=S(o);a&&e.push({task:a,filePath:o})}}else if(O(i.name)===".json"){let s=l(n,i.name),r=S(s);r&&e.push({task:r,filePath:s})}return e}function ot(t){return $(t).map(({task:n})=>n)}function at(t){return $(t).map(({task:n,filePath:e})=>({...n,filePath:e}))}function L(t,n,e){let i=T(t,n),s=i?S(i):null;if(!s)return null;let r={...s,...e,updated:new Date().toISOString()};if(_(t,r),i&&i!==j(t,n,r.created))try{v(i)}catch{}return r}function lt(t,n){let e=T(t,n);return e?(v(e),!0):!1}function ut(t,n,e){return{id:t.id,status:t.status,title:t.title,description:t.description,...t.url&&{url:t.url},selector:t.selector,...t.file&&{file:t.file},...t.line!=null&&{line:t.line},...t.col!=null&&{col:t.col},...t.component&&{component:t.component},...t.type&&{type:t.type},...t.priority&&{priority:t.priority},...n&&n.length>0&&{structuredComments:n},...e&&e.length>0&&{linkedFiles:e},...t.reportBack&&{reportBack:!0},created:t.created}}var C=".linked.json";function g(t,n){return f(t,d,k,n)}function q(t,n){G(g(t,n),{recursive:!0})}function Q(t,n){let e=f(g(t,n),C);if(!c(e))return[];try{return JSON.parse(M(e,"utf-8"))}catch{return[]}}function X(t,n){let e=T(t,n),i=e?S(e):null;return!i?.files||i.files.length===0?[]:i.files}function I(t,n,e){L(t,n,{files:e})}function F(t,n){let e=X(t,n),i=f(g(t,n),C);if(!c(i))return e;let s=Q(t,n);if(s.length===0){try{x(i)}catch{}return e}let r=e.slice(),o=!1;for(let a of s)r.find(u=>u.linkedPath===a.path||u.name===a.name&&u.linkedPath)||(r.push({name:a.name,linkedPath:a.path,addedAt:new Date().toISOString()}),o=!0);o&&I(t,n,r);try{x(i)}catch{}return r}function Y(t,n){let e=g(t,n),i=F(t,n),s=new Map;for(let r of i){if(r.linkedPath&&c(r.linkedPath)){let a=R(r.linkedPath);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,linkedPath:r.linkedPath,createdAt:a.mtime.toISOString()});continue}let o=f(e,r.name);if(c(o)){let a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}}if(c(e))for(let r of K(e,{withFileTypes:!0})){if(!r.isFile()||r.name===C||s.has(r.name))continue;let o=f(e,r.name),a=R(o);s.set(r.name,{name:r.name,size:a.size,url:`/api/tasks/${n}/files/${encodeURIComponent(r.name)}`,createdAt:a.mtime.toISOString()})}return Array.from(s.values())}function yt(t,n,e,i){let s=A(e);q(t,n),H(f(g(t,n),s),i);let r=F(t,n);return r.find(o=>o.name===s&&!o.linkedPath)||(r.push({name:s,addedAt:new Date().toISOString()}),I(t,n,r)),{name:s,size:i.length,url:`/api/tasks/${n}/files/${encodeURIComponent(s)}`}}function St(t,n,e){let i=A(e),s=F(t,n),r=s.findIndex(a=>a.name===i);if(r!==-1){let[a]=s.splice(r,1);if(I(t,n,s),a&&!a.linkedPath){let u=f(g(t,n),i);c(u)&&x(u)}return!0}let o=f(g(t,n),i);return c(o)?(x(o),!0):!1}function ht(t,n,e){let i=A(e),s=F(t,n).find(o=>o.name===i&&o.linkedPath);if(s?.linkedPath&&c(s.linkedPath))return s.linkedPath;let r=f(g(t,n),i);return c(r)?r:null}function kt(t,n){return Y(t,n).length}export{d as a,D as b,P as c,Z as d,W as e,rt as f,j as g,T as h,st as i,S as j,ot as k,at as l,L as m,lt as n,ut as o,g as p,q,Y as r,yt as s,St as t,ht as u,kt as v};
|