@thxgg/steward 0.1.13 → 0.1.14

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.
Files changed (84) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/-k8zG74W.js +61 -0
  3. package/.output/public/_nuxt/B-5VWizU.js +1 -0
  4. package/.output/public/_nuxt/{Bq6edYSd.js → BDqHART1.js} +1 -1
  5. package/.output/public/_nuxt/BMAq0QVD.js +42 -0
  6. package/.output/public/_nuxt/BPeTf9dd.js +1 -0
  7. package/.output/public/_nuxt/{dOaEkD-3.js → BubpH_wW.js} +1 -1
  8. package/.output/public/_nuxt/C2HGkiSP.js +1 -0
  9. package/.output/public/_nuxt/CMu9GKTH.js +4 -0
  10. package/.output/public/_nuxt/{BZ1iIOYp.js → CVvrkZkq.js} +1 -1
  11. package/.output/public/_nuxt/C_NevjZD.js +3 -0
  12. package/.output/public/_nuxt/Detail.CzXXlavD.css +1 -0
  13. package/.output/public/_nuxt/_prd_.KTotLoF_.css +1 -0
  14. package/.output/public/_nuxt/builds/latest.json +1 -1
  15. package/.output/public/_nuxt/builds/meta/b57a8fc3-6a38-4f58-b2ae-54768412ea40.json +1 -0
  16. package/.output/public/_nuxt/entry.LcDOtJnR.css +1 -0
  17. package/.output/public/_nuxt/{BFv4l3hn.js → nYTZJhvT.js} +1 -1
  18. package/.output/public/_nuxt/{kTT8NKtq.js → qKRNa41x.js} +1 -1
  19. package/.output/public/_nuxt/qt5OEWHC.js +1 -0
  20. package/.output/public/_nuxt/{C897Egk9.js → uTyw4SRK.js} +1 -1
  21. package/.output/public/_nuxt/{DoNqd8jQ.js → wbj-mIhK.js} +1 -1
  22. package/.output/server/chunks/_/task-graph.mjs +196 -0
  23. package/.output/server/chunks/_/task-graph.mjs.map +1 -0
  24. package/.output/server/chunks/build/{_prd_-CkKfJB6U.mjs → Detail-DC-KJQ1f.mjs} +911 -1688
  25. package/.output/server/chunks/build/Detail-DC-KJQ1f.mjs.map +1 -0
  26. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-D0sb4vsK.mjs +4 -0
  27. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-D0sb4vsK.mjs.map +1 -0
  28. package/.output/server/chunks/build/DiffViewer-styles.CkSjCQ0r.mjs +10 -0
  29. package/.output/server/chunks/build/DiffViewer-styles.CkSjCQ0r.mjs.map +1 -0
  30. package/.output/server/chunks/build/DiffViewer-styles.FJJuYjYB.mjs +8 -0
  31. package/.output/server/chunks/build/DiffViewer-styles.FJJuYjYB.mjs.map +1 -0
  32. package/.output/server/chunks/build/_prd_-C1C4GAhW.mjs +1596 -0
  33. package/.output/server/chunks/build/_prd_-C1C4GAhW.mjs.map +1 -0
  34. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  35. package/.output/server/chunks/build/{default-B5nw9_Xg.mjs → default-DWCOHHTE.mjs} +32 -20
  36. package/.output/server/chunks/build/default-DWCOHHTE.mjs.map +1 -0
  37. package/.output/server/chunks/build/{index-CTpuP9Mj.mjs → index-CckL_NBD.mjs} +2 -2
  38. package/.output/server/chunks/build/index-CckL_NBD.mjs.map +1 -0
  39. package/.output/server/chunks/build/{index-D21S97KB.mjs → index-QVeSHT3L.mjs} +3 -3
  40. package/.output/server/chunks/build/index-QVeSHT3L.mjs.map +1 -0
  41. package/.output/server/chunks/build/repo-graph-CTEkxiYd.mjs +205 -0
  42. package/.output/server/chunks/build/repo-graph-CTEkxiYd.mjs.map +1 -0
  43. package/.output/server/chunks/build/server.mjs +12 -3
  44. package/.output/server/chunks/build/styles.mjs +2 -2
  45. package/.output/server/chunks/build/{usePrd-YhvN6Ary.mjs → usePrd-SqcxGyFU.mjs} +20 -2
  46. package/.output/server/chunks/build/usePrd-SqcxGyFU.mjs.map +1 -0
  47. package/.output/server/chunks/nitro/nitro.mjs +566 -534
  48. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs +41 -0
  49. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -0
  50. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +42 -0
  51. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs.map +1 -0
  52. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs +1 -1
  53. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs +1 -1
  54. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs +1 -1
  55. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs +1 -1
  56. package/.output/server/node_modules/@vue-flow/background/dist/vue-flow-background.mjs +126 -0
  57. package/.output/server/node_modules/@vue-flow/background/package.json +73 -0
  58. package/.output/server/node_modules/@vue-flow/controls/dist/vue-flow-controls.mjs +207 -0
  59. package/.output/server/node_modules/@vue-flow/controls/package.json +77 -0
  60. package/.output/server/node_modules/@vue-flow/core/dist/vue-flow-core.mjs +10186 -0
  61. package/.output/server/node_modules/@vue-flow/core/package.json +95 -0
  62. package/.output/server/package.json +4 -1
  63. package/dist/app/types/graph.js +1 -0
  64. package/dist/server/utils/task-graph.js +190 -0
  65. package/package.json +5 -1
  66. package/.output/public/_nuxt/BuQdImno.js +0 -1
  67. package/.output/public/_nuxt/CMUOpExW.js +0 -3
  68. package/.output/public/_nuxt/DE885CbX.js +0 -1
  69. package/.output/public/_nuxt/DomrzX-T.js +0 -76
  70. package/.output/public/_nuxt/R2cvz8mH.js +0 -4
  71. package/.output/public/_nuxt/_prd_.DYvuV73Q.css +0 -1
  72. package/.output/public/_nuxt/builds/meta/2ad99048-24f9-4cf6-8622-6c088fe0a244.json +0 -1
  73. package/.output/public/_nuxt/entry.Dk19PK4d.css +0 -1
  74. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-ZdBUa15f.mjs +0 -4
  75. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-ZdBUa15f.mjs.map +0 -1
  76. package/.output/server/chunks/build/DiffViewer-styles.CoMVrk_N.mjs +0 -8
  77. package/.output/server/chunks/build/DiffViewer-styles.CoMVrk_N.mjs.map +0 -1
  78. package/.output/server/chunks/build/DiffViewer-styles.cLfMOdMh.mjs +0 -10
  79. package/.output/server/chunks/build/DiffViewer-styles.cLfMOdMh.mjs.map +0 -1
  80. package/.output/server/chunks/build/_prd_-CkKfJB6U.mjs.map +0 -1
  81. package/.output/server/chunks/build/default-B5nw9_Xg.mjs.map +0 -1
  82. package/.output/server/chunks/build/index-CTpuP9Mj.mjs.map +0 -1
  83. package/.output/server/chunks/build/index-D21S97KB.mjs.map +0 -1
  84. package/.output/server/chunks/build/usePrd-YhvN6Ary.mjs.map +0 -1
@@ -1 +1 @@
1
- import{g as B,j as A,e as q,x as O,af as T,ag as E,M as N,ah as U,ac as L,ai as P,aj as I,J as H,q as D,ak as _,al as F,am as V,s as y,an as M,ao as z,ap as j,aq as W,ar as $,as as G,at as J}from"./R2cvz8mH.js";const Q=(...t)=>t.find(o=>o!==void 0);function K(t){const o=t.componentName||"NuxtLink";function f(e){return typeof e=="string"&&e.startsWith("#")}function S(e,l,v){const a=v??t.trailingSlash;if(!e||a!=="append"&&a!=="remove")return e;if(typeof e=="string")return C(e,a);const i="path"in e&&e.path!==void 0?e.path:l(e).path;return{...e,name:void 0,path:C(i,a)}}function k(e){const l=A(),v=J(),a=y(()=>!!e.target&&e.target!=="_self"),i=y(()=>{const u=e.to||e.href||"";return typeof u=="string"&&j(u,{acceptRelative:!0})}),b=P("RouterLink"),h=b&&typeof b!="string"?b.useLink:void 0,c=y(()=>{if(e.external)return!0;const u=e.to||e.href||"";return typeof u=="object"?!1:u===""||i.value}),n=y(()=>{const u=e.to||e.href||"";return c.value?u:S(u,l.resolve,e.trailingSlash)}),g=c.value?void 0:h?.({...e,to:n}),m=y(()=>{const u=e.trailingSlash??t.trailingSlash;if(!n.value||i.value||f(n.value))return n.value;if(c.value){const x=typeof n.value=="object"&&"path"in n.value?_(n.value):n.value,R=typeof x=="object"?l.resolve(x).href:x;return C(R,u)}return typeof n.value=="object"?l.resolve(n.value)?.href??null:C(W(v.app.baseURL,n.value),u)});return{to:n,hasTarget:a,isAbsoluteUrl:i,isExternal:c,href:m,isActive:g?.isActive??y(()=>n.value===l.currentRoute.value.path),isExactActive:g?.isExactActive??y(()=>n.value===l.currentRoute.value.path),route:g?.route??y(()=>l.resolve(n.value)),async navigate(u){await V(m.value,{replace:e.replace,external:c.value||a.value})}}}return B({name:o,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:k,setup(e,{slots:l}){const v=A(),{to:a,href:i,navigate:b,isExternal:h,hasTarget:c,isAbsoluteUrl:n}=k(e),g=H(!1),m=D(null),u=s=>{m.value=e.custom?s?.$el?.nextElementSibling:s?.$el};function x(s){return!g.value&&(typeof e.prefetchOn=="string"?e.prefetchOn===s:e.prefetchOn?.[s]??t.prefetchOn?.[s])&&(e.prefetch??t.prefetch)!==!1&&e.noPrefetch!==!0&&e.target!=="_blank"&&!Z()}async function R(s=q()){if(g.value)return;g.value=!0;const d=typeof a.value=="string"?a.value:h.value?_(a.value):v.resolve(a.value).fullPath,r=h.value?new URL(d,window.location.href).href:d;await Promise.all([s.hooks.callHook("link:prefetch",r).catch(()=>{}),!h.value&&!c.value&&F(a.value,v).catch(()=>{})])}if(x("visibility")){const s=q();let d,r=null;O(()=>{const p=X();T(()=>{d=E(()=>{m?.value?.tagName&&(r=p.observe(m.value,async()=>{r?.(),r=null,await R(s)}))})})}),N(()=>{d&&U(d),r?.(),r=null})}return()=>{if(!h.value&&!c.value&&!f(a.value)){const r={ref:u,to:a.value,activeClass:e.activeClass||t.activeClass,exactActiveClass:e.exactActiveClass||t.exactActiveClass,replace:e.replace,ariaCurrentValue:e.ariaCurrentValue,custom:e.custom};return e.custom||(x("interaction")&&(r.onPointerenter=R.bind(null,void 0),r.onFocus=R.bind(null,void 0)),g.value&&(r.class=e.prefetchedClass||t.prefetchedClass),r.rel=e.rel||void 0),L(P("RouterLink"),r,l.default)}const s=e.target||null,d=Q(e.noRel?"":e.rel,t.externalRelAttribute,n.value||c.value?"noopener noreferrer":"")||null;return e.custom?l.default?l.default({href:i.value,navigate:b,prefetch:R,get route(){if(!i.value)return;const r=new URL(i.value,window.location.href);return{path:r.pathname,fullPath:r.pathname,get query(){return I(r.search)},hash:r.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:i.value}},rel:d,target:s,isExternal:h.value||c.value,isActive:!1,isExactActive:!1}):null:L("a",{ref:m,href:i.value||null,rel:d,target:s,onClick:async r=>{if(!(h.value||c.value)){r.preventDefault();try{const p=M(i.value);return await(e.replace?v.replace(p):v.push(p))}finally{if(f(a.value)){const p=a.value.slice(1);let w=p;try{w=decodeURIComponent(p)}catch{}document.getElementById(w)?.focus()}}}}},l.default?.())}}})}const ae=K(z);function C(t,o){const f=o==="append"?$:G;return j(t)&&!t.startsWith("http")?t:f(t,!0)}function X(){const t=q();if(t._observer)return t._observer;let o=null;const f=new Map,S=(e,l)=>(o||=new IntersectionObserver(v=>{for(const a of v){const i=f.get(a.target);(a.isIntersecting||a.intersectionRatio>0)&&i&&i()}}),f.set(e,l),o.observe(e),()=>{f.delete(e),o?.unobserve(e),f.size===0&&(o?.disconnect(),o=null)});return t._observer={observe:S}}const Y=/2g/;function Z(){const t=navigator.connection;return!!(t&&(t.saveData||Y.test(t.effectiveType)))}export{ae as _};
1
+ import{g as O,j as A,e as q,z as j,an as T,ao as E,D as N,ap as U,a0 as L,a7 as P,aq as I,C as H,q as D,ar as _,as as z,at as F,s as y,au as V,av as M,aw as B,ax as W,ay as $,az as G,aA as Q}from"./CMu9GKTH.js";const J=(...t)=>t.find(o=>o!==void 0);function K(t){const o=t.componentName||"NuxtLink";function f(e){return typeof e=="string"&&e.startsWith("#")}function R(e,l,v){const a=v??t.trailingSlash;if(!e||a!=="append"&&a!=="remove")return e;if(typeof e=="string")return S(e,a);const u="path"in e&&e.path!==void 0?e.path:l(e).path;return{...e,name:void 0,path:S(u,a)}}function k(e){const l=A(),v=Q(),a=y(()=>!!e.target&&e.target!=="_self"),u=y(()=>{const i=e.to||e.href||"";return typeof i=="string"&&B(i,{acceptRelative:!0})}),b=P("RouterLink"),h=b&&typeof b!="string"?b.useLink:void 0,c=y(()=>{if(e.external)return!0;const i=e.to||e.href||"";return typeof i=="object"?!1:i===""||u.value}),n=y(()=>{const i=e.to||e.href||"";return c.value?i:R(i,l.resolve,e.trailingSlash)}),g=c.value?void 0:h?.({...e,to:n}),m=y(()=>{const i=e.trailingSlash??t.trailingSlash;if(!n.value||u.value||f(n.value))return n.value;if(c.value){const x=typeof n.value=="object"&&"path"in n.value?_(n.value):n.value,C=typeof x=="object"?l.resolve(x).href:x;return S(C,i)}return typeof n.value=="object"?l.resolve(n.value)?.href??null:S(W(v.app.baseURL,n.value),i)});return{to:n,hasTarget:a,isAbsoluteUrl:u,isExternal:c,href:m,isActive:g?.isActive??y(()=>n.value===l.currentRoute.value.path),isExactActive:g?.isExactActive??y(()=>n.value===l.currentRoute.value.path),route:g?.route??y(()=>l.resolve(n.value)),async navigate(i){await F(m.value,{replace:e.replace,external:c.value||a.value})}}}return O({name:o,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:k,setup(e,{slots:l}){const v=A(),{to:a,href:u,navigate:b,isExternal:h,hasTarget:c,isAbsoluteUrl:n}=k(e),g=H(!1),m=D(null),i=s=>{m.value=e.custom?s?.$el?.nextElementSibling:s?.$el};function x(s){return!g.value&&(typeof e.prefetchOn=="string"?e.prefetchOn===s:e.prefetchOn?.[s]??t.prefetchOn?.[s])&&(e.prefetch??t.prefetch)!==!1&&e.noPrefetch!==!0&&e.target!=="_blank"&&!Z()}async function C(s=q()){if(g.value)return;g.value=!0;const d=typeof a.value=="string"?a.value:h.value?_(a.value):v.resolve(a.value).fullPath,r=h.value?new URL(d,window.location.href).href:d;await Promise.all([s.hooks.callHook("link:prefetch",r).catch(()=>{}),!h.value&&!c.value&&z(a.value,v).catch(()=>{})])}if(x("visibility")){const s=q();let d,r=null;j(()=>{const p=X();T(()=>{d=E(()=>{m?.value?.tagName&&(r=p.observe(m.value,async()=>{r?.(),r=null,await C(s)}))})})}),N(()=>{d&&U(d),r?.(),r=null})}return()=>{if(!h.value&&!c.value&&!f(a.value)){const r={ref:i,to:a.value,activeClass:e.activeClass||t.activeClass,exactActiveClass:e.exactActiveClass||t.exactActiveClass,replace:e.replace,ariaCurrentValue:e.ariaCurrentValue,custom:e.custom};return e.custom||(x("interaction")&&(r.onPointerenter=C.bind(null,void 0),r.onFocus=C.bind(null,void 0)),g.value&&(r.class=e.prefetchedClass||t.prefetchedClass),r.rel=e.rel||void 0),L(P("RouterLink"),r,l.default)}const s=e.target||null,d=J(e.noRel?"":e.rel,t.externalRelAttribute,n.value||c.value?"noopener noreferrer":"")||null;return e.custom?l.default?l.default({href:u.value,navigate:b,prefetch:C,get route(){if(!u.value)return;const r=new URL(u.value,window.location.href);return{path:r.pathname,fullPath:r.pathname,get query(){return I(r.search)},hash:r.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:u.value}},rel:d,target:s,isExternal:h.value||c.value,isActive:!1,isExactActive:!1}):null:L("a",{ref:m,href:u.value||null,rel:d,target:s,onClick:async r=>{if(!(h.value||c.value)){r.preventDefault();try{const p=V(u.value);return await(e.replace?v.replace(p):v.push(p))}finally{if(f(a.value)){const p=a.value.slice(1);let w=p;try{w=decodeURIComponent(p)}catch{}document.getElementById(w)?.focus()}}}}},l.default?.())}}})}const ae=K(M);function S(t,o){const f=o==="append"?$:G;return B(t)&&!t.startsWith("http")?t:f(t,!0)}function X(){const t=q();if(t._observer)return t._observer;let o=null;const f=new Map,R=(e,l)=>(o||=new IntersectionObserver(v=>{for(const a of v){const u=f.get(a.target);(a.isIntersecting||a.intersectionRatio>0)&&u&&u()}}),f.set(e,l),o.observe(e),()=>{f.delete(e),o?.unobserve(e),f.size===0&&(o?.disconnect(),o=null)});return t._observer={observe:R}}const Y=/2g/;function Z(){const t=navigator.connection;return!!(t&&(t.saveData||Y.test(t.effectiveType)))}export{ae as _};
@@ -0,0 +1,196 @@
1
+ import { promises } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { m as migrateLegacyStateForRepo, f as getPrdStateSummaries, h as getPrdState } from '../nitro/nitro.mjs';
4
+
5
+ const NODE_SEPARATOR = "::";
6
+ const MISSING_PREFIX = "missing";
7
+ function createTaskNodeId(prdSlug, taskId) {
8
+ return `${prdSlug}${NODE_SEPARATOR}${taskId}`;
9
+ }
10
+ function createMissingNodeId(prdSlug, taskId) {
11
+ return `${MISSING_PREFIX}${NODE_SEPARATOR}${prdSlug}${NODE_SEPARATOR}${taskId}`;
12
+ }
13
+ function createEdgeId(source, target) {
14
+ return `${source}->${target}`;
15
+ }
16
+ function parseDependency(rawDependency, currentPrdSlug) {
17
+ const trimmed = rawDependency.trim();
18
+ if (!trimmed) {
19
+ return {
20
+ prdSlug: currentPrdSlug,
21
+ taskId: rawDependency,
22
+ reference: rawDependency
23
+ };
24
+ }
25
+ const parts = trimmed.split(NODE_SEPARATOR);
26
+ if (parts.length === 2) {
27
+ const [prdSlug, taskId] = parts;
28
+ if (prdSlug && taskId) {
29
+ return {
30
+ prdSlug,
31
+ taskId,
32
+ reference: `${prdSlug}${NODE_SEPARATOR}${taskId}`
33
+ };
34
+ }
35
+ }
36
+ return {
37
+ prdSlug: currentPrdSlug,
38
+ taskId: trimmed,
39
+ reference: trimmed
40
+ };
41
+ }
42
+ async function resolvePrdName(repo, prdSlug) {
43
+ var _a;
44
+ const prdPath = join(repo.path, "docs", "prd", `${prdSlug}.md`);
45
+ try {
46
+ const content = await promises.readFile(prdPath, "utf-8");
47
+ const h1Match = content.match(/^#\s+(.+)$/m);
48
+ return ((_a = h1Match == null ? void 0 : h1Match[1]) == null ? void 0 : _a.trim()) || prdSlug;
49
+ } catch {
50
+ return prdSlug;
51
+ }
52
+ }
53
+ function buildStats(taskNodes, unresolvedCount) {
54
+ const pending = taskNodes.filter((node) => node.status === "pending").length;
55
+ const inProgress = taskNodes.filter((node) => node.status === "in_progress").length;
56
+ const completed = taskNodes.filter((node) => node.status === "completed").length;
57
+ return {
58
+ total: taskNodes.length,
59
+ pending,
60
+ inProgress,
61
+ completed,
62
+ unresolved: unresolvedCount
63
+ };
64
+ }
65
+ function sortNodes(nodes) {
66
+ return [...nodes].sort((a, b) => {
67
+ if (a.kind !== b.kind) {
68
+ return a.kind === "task" ? -1 : 1;
69
+ }
70
+ return a.id.localeCompare(b.id);
71
+ });
72
+ }
73
+ function sortEdges(edges) {
74
+ return [...edges].sort((a, b) => a.id.localeCompare(b.id));
75
+ }
76
+ function buildGraphFromInputs(inputs) {
77
+ const taskNodes = /* @__PURE__ */ new Map();
78
+ const missingNodes = /* @__PURE__ */ new Map();
79
+ const edges = /* @__PURE__ */ new Map();
80
+ for (const input of inputs) {
81
+ for (const task of input.tasks) {
82
+ const nodeId = createTaskNodeId(input.prdSlug, task.id);
83
+ taskNodes.set(nodeId, {
84
+ id: nodeId,
85
+ kind: "task",
86
+ taskId: task.id,
87
+ prdSlug: input.prdSlug,
88
+ prdName: input.prdName,
89
+ title: task.title,
90
+ status: task.status,
91
+ category: task.category,
92
+ priority: task.priority
93
+ });
94
+ }
95
+ }
96
+ for (const input of inputs) {
97
+ for (const task of input.tasks) {
98
+ const targetId = createTaskNodeId(input.prdSlug, task.id);
99
+ for (const rawDependency of task.dependencies) {
100
+ const dependency = parseDependency(rawDependency, input.prdSlug);
101
+ const sourceTaskId = createTaskNodeId(dependency.prdSlug, dependency.taskId);
102
+ if (taskNodes.has(sourceTaskId)) {
103
+ const edgeId = createEdgeId(sourceTaskId, targetId);
104
+ edges.set(edgeId, {
105
+ id: edgeId,
106
+ source: sourceTaskId,
107
+ target: targetId,
108
+ type: "dependency"
109
+ });
110
+ continue;
111
+ }
112
+ const missingNodeId = createMissingNodeId(dependency.prdSlug, dependency.taskId);
113
+ if (!missingNodes.has(missingNodeId)) {
114
+ missingNodes.set(missingNodeId, {
115
+ id: missingNodeId,
116
+ kind: "external",
117
+ title: `Missing: ${dependency.reference}`,
118
+ unresolved: true,
119
+ dependencyRef: dependency.reference
120
+ });
121
+ }
122
+ const unresolvedEdgeId = createEdgeId(missingNodeId, targetId);
123
+ edges.set(unresolvedEdgeId, {
124
+ id: unresolvedEdgeId,
125
+ source: missingNodeId,
126
+ target: targetId,
127
+ type: "dependency",
128
+ unresolved: true
129
+ });
130
+ }
131
+ }
132
+ }
133
+ const taskNodeList = [...taskNodes.values()];
134
+ const nodeList = sortNodes([...taskNodeList, ...missingNodes.values()]);
135
+ const edgeList = sortEdges([...edges.values()]);
136
+ return {
137
+ nodes: nodeList,
138
+ edges: edgeList,
139
+ stats: buildStats(taskNodeList, missingNodes.size)
140
+ };
141
+ }
142
+ async function buildPrdGraph(repo, prdSlug) {
143
+ var _a;
144
+ await migrateLegacyStateForRepo(repo);
145
+ const [state, prdName] = await Promise.all([
146
+ getPrdState(repo.id, prdSlug),
147
+ resolvePrdName(repo, prdSlug)
148
+ ]);
149
+ const tasks = Array.isArray((_a = state == null ? void 0 : state.tasks) == null ? void 0 : _a.tasks) ? state.tasks.tasks : [];
150
+ const graph = buildGraphFromInputs([
151
+ {
152
+ prdSlug,
153
+ prdName,
154
+ tasks
155
+ }
156
+ ]);
157
+ return {
158
+ scope: "prd",
159
+ repoId: repo.id,
160
+ prdSlug,
161
+ nodes: graph.nodes,
162
+ edges: graph.edges,
163
+ stats: graph.stats
164
+ };
165
+ }
166
+ async function buildRepoGraph(repo) {
167
+ var _a;
168
+ await migrateLegacyStateForRepo(repo);
169
+ const summaries = await getPrdStateSummaries(repo.id);
170
+ const slugs = [...summaries.keys()].sort((a, b) => a.localeCompare(b));
171
+ const inputs = [];
172
+ for (const slug of slugs) {
173
+ const state = await getPrdState(repo.id, slug);
174
+ const tasks = (_a = state == null ? void 0 : state.tasks) == null ? void 0 : _a.tasks;
175
+ if (!Array.isArray(tasks)) {
176
+ continue;
177
+ }
178
+ inputs.push({
179
+ prdSlug: slug,
180
+ prdName: await resolvePrdName(repo, slug),
181
+ tasks
182
+ });
183
+ }
184
+ const graph = buildGraphFromInputs(inputs);
185
+ return {
186
+ scope: "repo",
187
+ repoId: repo.id,
188
+ prds: inputs.map((input) => input.prdSlug).sort((a, b) => a.localeCompare(b)),
189
+ nodes: graph.nodes,
190
+ edges: graph.edges,
191
+ stats: graph.stats
192
+ };
193
+ }
194
+
195
+ export { buildPrdGraph as a, buildRepoGraph as b };
196
+ //# sourceMappingURL=task-graph.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-graph.mjs","sources":["../../../../server/utils/task-graph.ts"],"names":["fs"],"mappings":";;;;AA2BA,MAAM,cAAA,GAAiB,IAAA;AACvB,MAAM,cAAA,GAAiB,SAAA;AAEhB,SAAS,gBAAA,CAAiB,SAAiB,MAAA,EAAwB;AACxE,EAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,cAAc,GAAG,MAAM,CAAA,CAAA;AAC7C;AAEA,SAAS,mBAAA,CAAoB,SAAiB,MAAA,EAAwB;AACpE,EAAA,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,cAAc,GAAG,OAAO,CAAA,EAAG,cAAc,CAAA,EAAG,MAAM,CAAA,CAAA;AAC/E;AAEA,SAAS,YAAA,CAAa,QAAgB,MAAA,EAAwB;AAC5D,EAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,MAAM,CAAA,CAAA;AAC7B;AAEA,SAAS,eAAA,CAAgB,eAAuB,cAAA,EAA0C;AACxF,EAAA,MAAM,OAAA,GAAU,cAAc,IAAA,EAAK;AACnC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,cAAA;AAAA,MACT,MAAA,EAAQ,aAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACb;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,cAAc,CAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,CAAC,OAAA,EAAS,MAAM,CAAA,GAAI,KAAA;AAC1B,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAW,CAAA,EAAG,OAAO,CAAA,EAAG,cAAc,GAAG,MAAM,CAAA;AAAA,OACjD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,cAAA;AAAA,IACT,MAAA,EAAQ,OAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AACF;AAEA,eAAe,cAAA,CAAe,MAAkB,OAAA,EAAkC;AAvElF,EAAA,IAAA,EAAA;AAwEE,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,CAAK,IAAA,EAAM,QAAQ,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,GAAA,CAAK,CAAA;AAC9D,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,SAAS,OAAO,CAAA;AAClD,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,aAAa,CAAA;AAC3C,IAAA,OAAA,CAAA,CAAO,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,CAAA,CAAA,KAAV,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,IAAA,EAAA,KAAU,OAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,SAAS,UAAA,CAAW,WAA4B,eAAA,EAAqC;AACnF,EAAA,MAAM,OAAA,GAAU,UAAU,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,SAAS,CAAA,CAAE,MAAA;AACtE,EAAA,MAAM,UAAA,GAAa,UAAU,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,aAAa,CAAA,CAAE,MAAA;AAC7E,EAAA,MAAM,SAAA,GAAY,UAAU,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,MAAA,KAAW,WAAW,CAAA,CAAE,MAAA;AAE1E,EAAA,OAAO;AAAA,IACL,OAAO,SAAA,CAAU,MAAA;AAAA,IACjB,OAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,UAAU,KAAA,EAAiC;AAClD,EAAA,OAAO,CAAC,GAAG,KAAK,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAC/B,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM;AACrB,MAAA,OAAO,CAAA,CAAE,IAAA,KAAS,MAAA,GAAS,EAAA,GAAK,CAAA;AAAA,IAClC;AACA,IAAA,OAAO,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAA;AAAA,EAChC,CAAC,CAAA;AACH;AAEA,SAAS,UAAU,KAAA,EAAqD;AACtE,EAAA,OAAO,CAAC,GAAG,KAAK,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAC,CAAA;AAC3D;AAEA,SAAS,qBAAqB,MAAA,EAI5B;AACA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA2B;AACjD,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAA+B;AACxD,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAiC;AAEnD,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,KAAA,CAAM,OAAA,EAAS,KAAK,EAAE,CAAA;AACtD,MAAA,SAAA,CAAU,IAAI,MAAA,EAAQ;AAAA,QACpB,EAAA,EAAI,MAAA;AAAA,QACJ,IAAA,EAAM,MAAA;AAAA,QACN,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,UAAU,IAAA,CAAK;AAAA,OAChB,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,KAAA,CAAM,OAAA,EAAS,KAAK,EAAE,CAAA;AAExD,MAAA,KAAA,MAAW,aAAA,IAAiB,KAAK,YAAA,EAAc;AAC7C,QAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,aAAA,EAAe,KAAA,CAAM,OAAO,CAAA;AAC/D,QAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,UAAA,CAAW,OAAA,EAAS,WAAW,MAAM,CAAA;AAE3E,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,YAAY,CAAA,EAAG;AAC/B,UAAA,MAAM,MAAA,GAAS,YAAA,CAAa,YAAA,EAAc,QAAQ,CAAA;AAClD,UAAA,KAAA,CAAM,IAAI,MAAA,EAAQ;AAAA,YAChB,EAAA,EAAI,MAAA;AAAA,YACJ,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACP,CAAA;AACD,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,aAAA,GAAgB,mBAAA,CAAoB,UAAA,CAAW,OAAA,EAAS,WAAW,MAAM,CAAA;AAC/E,QAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,aAAa,CAAA,EAAG;AACpC,UAAA,YAAA,CAAa,IAAI,aAAA,EAAe;AAAA,YAC9B,EAAA,EAAI,aAAA;AAAA,YACJ,IAAA,EAAM,UAAA;AAAA,YACN,KAAA,EAAO,CAAA,SAAA,EAAY,UAAA,CAAW,SAAS,CAAA,CAAA;AAAA,YACvC,UAAA,EAAY,IAAA;AAAA,YACZ,eAAe,UAAA,CAAW;AAAA,WAC3B,CAAA;AAAA,QACH;AAEA,QAAA,MAAM,gBAAA,GAAmB,YAAA,CAAa,aAAA,EAAe,QAAQ,CAAA;AAC7D,QAAA,KAAA,CAAM,IAAI,gBAAA,EAAkB;AAAA,UAC1B,EAAA,EAAI,gBAAA;AAAA,UACJ,MAAA,EAAQ,aAAA;AAAA,UACR,MAAA,EAAQ,QAAA;AAAA,UACR,IAAA,EAAM,YAAA;AAAA,UACN,UAAA,EAAY;AAAA,SACb,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,SAAA,CAAU,QAAQ,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,UAAU,CAAC,GAAG,cAAc,GAAG,YAAA,CAAa,MAAA,EAAQ,CAAC,CAAA;AACtE,EAAA,MAAM,WAAW,SAAA,CAAU,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,CAAC,CAAA;AAE9C,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,KAAA,EAAO,UAAA,CAAW,YAAA,EAAc,YAAA,CAAa,IAAI;AAAA,GACnD;AACF;AAEA,eAAsB,aAAA,CAAc,MAAkB,OAAA,EAA2C;AA5LjG,EAAA,IAAA,EAAA;AA6LE,EAAA,MAAM,0BAA0B,IAAI,CAAA;AAEpC,EAAA,MAAM,CAAC,KAAA,EAAO,OAAO,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACzC,WAAA,CAAY,IAAA,CAAK,EAAA,EAAI,OAAO,CAAA;AAAA,IAC5B,cAAA,CAAe,MAAM,OAAO;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,KAAK,CAAA,GAAI,KAAA,CAAO,KAAA,CAAO,KAAA,GAAQ,EAAC;AAC1E,EAAA,MAAM,QAAQ,oBAAA,CAAqB;AAAA,IACjC;AAAA,MACE,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AACF,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,KAAA;AAAA,IACP,QAAQ,IAAA,CAAK,EAAA;AAAA,IACb,OAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM;AAAA,GACf;AACF;AAEA,eAAsB,eAAe,IAAA,EAA6C;AAvNlF,EAAA,IAAA,EAAA;AAwNE,EAAA,MAAM,0BAA0B,IAAI,CAAA;AAEpC,EAAA,MAAM,SAAA,GAAY,MAAM,oBAAA,CAAqB,IAAA,CAAK,EAAE,CAAA;AACpD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,SAAA,CAAU,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAErE,EAAA,MAAM,SAA0B,EAAC;AAEjC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,IAAA,CAAK,IAAI,IAAI,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAA,CAAQ,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,KAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAc,KAAA;AAC5B,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,IAAA,CAAK;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,OAAA,EAAS,MAAM,cAAA,CAAe,IAAA,EAAM,IAAI,CAAA;AAAA,MACxC;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,KAAA,GAAQ,qBAAqB,MAAM,CAAA;AAEzC,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,QAAQ,IAAA,CAAK,EAAA;AAAA,IACb,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,CAAC,UAAU,KAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,IAC5E,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM;AAAA,GACf;AACF;;;;"}