@thxgg/steward 0.1.17 → 0.1.19

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 (124) hide show
  1. package/.env.example +0 -6
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/_nuxt/{BlTKcjLJ.js → BCiXS3ZV.js} +2 -2
  4. package/.output/public/_nuxt/BfUfZSFp.js +60 -0
  5. package/.output/public/_nuxt/{BMdjSp24.js → BfV4oCiT.js} +1 -1
  6. package/.output/public/_nuxt/{BSZqAKg4.js → Bs6UO7IT.js} +1 -1
  7. package/.output/public/_nuxt/C9AsKFSQ.js +1 -0
  8. package/.output/public/_nuxt/{BdjPva1I.js → C9jB6HQI.js} +1 -1
  9. package/.output/public/_nuxt/CCruYste.js +3 -0
  10. package/.output/public/_nuxt/CIIE0-WR.js +1 -0
  11. package/.output/public/_nuxt/{By7gAVcL.js → Cg4hnDua.js} +1 -1
  12. package/.output/public/_nuxt/CwdD8083.js +30 -0
  13. package/.output/public/_nuxt/{4r0X30JV.js → D2RLSKEu.js} +1 -1
  14. package/.output/public/_nuxt/{CbkpNvIu.js → D30YtxUg.js} +1 -1
  15. package/.output/public/_nuxt/{Beeir9iR.js → DEekox9p.js} +1 -1
  16. package/.output/public/_nuxt/{nX8Sf7cz.js → DddVAa3N.js} +1 -1
  17. package/.output/public/_nuxt/{Bh3vsUvl.js → MO41rxll.js} +1 -1
  18. package/.output/public/_nuxt/builds/latest.json +1 -1
  19. package/.output/public/_nuxt/builds/meta/627332c0-2e14-4849-8cac-e350f64ed513.json +1 -0
  20. package/.output/public/_nuxt/entry.Dp3jx0Yw.css +1 -0
  21. package/.output/public/_nuxt/f7vKgp5U.js +1 -0
  22. package/.output/public/_nuxt/xc3v2JZH.js +1 -0
  23. package/.output/server/chunks/_/git-api.mjs +1 -1
  24. package/.output/server/chunks/_/prd-service.mjs +177 -12
  25. package/.output/server/chunks/_/prd-service.mjs.map +1 -1
  26. package/.output/server/chunks/_/repos.mjs +272 -0
  27. package/.output/server/chunks/_/repos.mjs.map +1 -0
  28. package/.output/server/chunks/_/task-graph.mjs +19 -16
  29. package/.output/server/chunks/_/task-graph.mjs.map +1 -1
  30. package/.output/server/chunks/_/watcher.mjs +11 -35
  31. package/.output/server/chunks/_/watcher.mjs.map +1 -1
  32. package/.output/server/chunks/build/{Detail-MGwP_u2d.mjs → Detail-BcQGdJY5.mjs} +112 -46
  33. package/.output/server/chunks/build/Detail-BcQGdJY5.mjs.map +1 -0
  34. package/.output/server/chunks/build/{_prd_-C-Aj4fVa.mjs → _prd_-CD_Bds_B.mjs} +80 -7
  35. package/.output/server/chunks/build/_prd_-CD_Bds_B.mjs.map +1 -0
  36. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  37. package/.output/server/chunks/build/{default-Cao5eO80.mjs → default-BKKgG7HJ.mjs} +220 -24
  38. package/.output/server/chunks/build/default-BKKgG7HJ.mjs.map +1 -0
  39. package/.output/server/chunks/build/error-404-Bf6kdO80.mjs +1 -1
  40. package/.output/server/chunks/build/error-500-D_bcARXN.mjs +1 -1
  41. package/.output/server/chunks/build/{index-ljj9uTXI.mjs → index-DE1tjHAd.mjs} +3 -4
  42. package/.output/server/chunks/build/index-DE1tjHAd.mjs.map +1 -0
  43. package/.output/server/chunks/build/nuxt-link-SvT1nf8Z.mjs +1 -1
  44. package/.output/server/chunks/build/{repo-graph-EuhMeFt7.mjs → repo-graph-CBfhpnd5.mjs} +25 -12
  45. package/.output/server/chunks/build/repo-graph-CBfhpnd5.mjs.map +1 -0
  46. package/.output/server/chunks/build/server.mjs +14 -14
  47. package/.output/server/chunks/build/styles.mjs +2 -2
  48. package/.output/server/chunks/build/{usePrd-f7ylhIqs.mjs → usePrd-hXZOmvAv.mjs} +113 -9
  49. package/.output/server/chunks/build/usePrd-hXZOmvAv.mjs.map +1 -0
  50. package/.output/server/chunks/nitro/nitro.mjs +1051 -1365
  51. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  52. package/.output/server/chunks/routes/api/browse.get.mjs +24 -6
  53. package/.output/server/chunks/routes/api/browse.get.mjs.map +1 -1
  54. package/.output/server/chunks/routes/api/index.get.mjs +3 -2
  55. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  56. package/.output/server/chunks/routes/api/index.post.mjs +22 -8
  57. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  58. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs +20 -11
  59. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs.map +1 -1
  60. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs +3 -2
  61. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs.map +1 -1
  62. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs +3 -2
  63. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs.map +1 -1
  64. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs +3 -2
  65. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs.map +1 -1
  66. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs +27 -3
  67. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -1
  68. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/archive.post.mjs +93 -0
  69. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/archive.post.mjs.map +1 -0
  70. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +3 -2
  71. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs.map +1 -1
  72. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs +4 -3
  73. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs.map +1 -1
  74. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs +4 -3
  75. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs.map +1 -1
  76. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs +4 -3
  77. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs.map +1 -1
  78. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs +3 -2
  79. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs.map +1 -1
  80. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs +27 -3
  81. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs.map +1 -1
  82. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs +3 -2
  83. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs.map +1 -1
  84. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs +3 -2
  85. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/runtime.get.mjs +2 -2
  87. package/.output/server/chunks/routes/api/state-migration/status.get.mjs +21 -0
  88. package/.output/server/chunks/routes/api/state-migration/status.get.mjs.map +1 -0
  89. package/.output/server/chunks/routes/api/watch.get.mjs +3 -2
  90. package/.output/server/chunks/routes/api/watch.get.mjs.map +1 -1
  91. package/.output/server/chunks/routes/renderer.mjs +1 -1
  92. package/.output/server/index.mjs +2 -2
  93. package/.output/server/package.json +1 -1
  94. package/README.md +5 -7
  95. package/dist/host/src/api/repos.js +0 -2
  96. package/dist/host/src/api/state.js +1 -7
  97. package/dist/host/src/index.js +2 -7
  98. package/dist/host/src/ui.js +2 -7
  99. package/dist/server/utils/db.js +15 -0
  100. package/dist/server/utils/prd-archive.js +53 -0
  101. package/dist/server/utils/prd-service.js +27 -11
  102. package/dist/server/utils/prd-state.js +11 -122
  103. package/dist/server/utils/repos.js +14 -4
  104. package/dist/server/utils/state-migration.js +225 -0
  105. package/dist/server/utils/state-schema.js +181 -4
  106. package/dist/server/utils/task-graph.js +21 -14
  107. package/package.json +1 -1
  108. package/.output/public/_nuxt/CbJfCtEa.js +0 -1
  109. package/.output/public/_nuxt/CmhLcqDu.js +0 -1
  110. package/.output/public/_nuxt/DC6iPLz1.js +0 -30
  111. package/.output/public/_nuxt/DD--ojY9.js +0 -3
  112. package/.output/public/_nuxt/DhKWRjCh.js +0 -60
  113. package/.output/public/_nuxt/builds/meta/f3f42dbd-d501-442b-871c-3d06157e7aa1.json +0 -1
  114. package/.output/public/_nuxt/c1sXju8w.js +0 -1
  115. package/.output/public/_nuxt/eGCjCghR.js +0 -1
  116. package/.output/public/_nuxt/entry.LcDOtJnR.css +0 -1
  117. package/.output/server/chunks/build/Detail-MGwP_u2d.mjs.map +0 -1
  118. package/.output/server/chunks/build/_prd_-C-Aj4fVa.mjs.map +0 -1
  119. package/.output/server/chunks/build/default-Cao5eO80.mjs.map +0 -1
  120. package/.output/server/chunks/build/index-ByZO4Bvq.mjs +0 -76
  121. package/.output/server/chunks/build/index-ByZO4Bvq.mjs.map +0 -1
  122. package/.output/server/chunks/build/index-ljj9uTXI.mjs.map +0 -1
  123. package/.output/server/chunks/build/repo-graph-EuhMeFt7.mjs.map +0 -1
  124. package/.output/server/chunks/build/usePrd-f7ylhIqs.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"commits.get.mjs","sources":["../../../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/tasks/[taskId]/commits.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,kBAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,gCAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"commits.get.mjs","sources":["../../../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/tasks/[taskId]/commits.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,kBAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,gCAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,5 +1,6 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../../../nitro/nitro.mjs';
2
- import { d as readPrdTasks } from '../../../../../../_/prd-service.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError } from '../../../../../../nitro/nitro.mjs';
2
+ import { f as readPrdTasks } from '../../../../../../_/prd-service.mjs';
3
+ import { a as getRepoById } from '../../../../../../_/repos.mjs';
3
4
  import 'node:http';
4
5
  import 'node:https';
5
6
  import 'node:events';
@@ -7,9 +8,9 @@ import 'node:buffer';
7
8
  import 'node:fs';
8
9
  import 'node:path';
9
10
  import 'node:crypto';
10
- import 'node:url';
11
11
  import 'node:os';
12
12
  import 'zod';
13
+ import 'node:url';
13
14
  import '../../../../../../_/git.mjs';
14
15
  import 'node:child_process';
15
16
 
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/tasks.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,2BAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"tasks.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/tasks.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,2BAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,5 +1,6 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError } from '../../../../../nitro/nitro.mjs';
2
2
  import { r as readPrdDocument } from '../../../../../_/prd-service.mjs';
3
+ import { a as getRepoById } from '../../../../../_/repos.mjs';
3
4
  import 'node:http';
4
5
  import 'node:https';
5
6
  import 'node:events';
@@ -7,9 +8,9 @@ import 'node:buffer';
7
8
  import 'node:fs';
8
9
  import 'node:path';
9
10
  import 'node:crypto';
10
- import 'node:url';
11
11
  import 'node:os';
12
12
  import 'zod';
13
+ import 'node:url';
13
14
  import '../../../../../_/git.mjs';
14
15
  import 'node:child_process';
15
16
 
@@ -1 +1 @@
1
- {"version":3,"file":"_prdSlug_.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug].get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,sBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,eAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,6BAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"_prdSlug_.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug].get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,sBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,eAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,6BAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,5 +1,6 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, g as getQuery, c as createError } from '../../../../nitro/nitro.mjs';
2
2
  import { l as listPrdDocuments } from '../../../../_/prd-service.mjs';
3
+ import { a as getRepoById } from '../../../../_/repos.mjs';
3
4
  import 'node:http';
4
5
  import 'node:https';
5
6
  import 'node:events';
@@ -7,17 +8,40 @@ import 'node:buffer';
7
8
  import 'node:fs';
8
9
  import 'node:path';
9
10
  import 'node:crypto';
10
- import 'node:url';
11
11
  import 'node:os';
12
12
  import 'zod';
13
+ import 'node:url';
13
14
  import '../../../../_/git.mjs';
14
15
  import 'node:child_process';
15
16
 
16
17
  function normalizeErrorMessage(message) {
17
18
  return message.replace(/\s+/g, " ").trim();
18
19
  }
20
+ function parseIncludeArchived(rawValue) {
21
+ const value = Array.isArray(rawValue) ? rawValue[0] : rawValue;
22
+ if (value === void 0) {
23
+ return false;
24
+ }
25
+ if (typeof value === "boolean") {
26
+ return value;
27
+ }
28
+ if (typeof value === "string") {
29
+ const normalized = value.trim().toLowerCase();
30
+ if (normalized.length === 0 || normalized === "0" || normalized === "false" || normalized === "no" || normalized === "off") {
31
+ return false;
32
+ }
33
+ if (normalized === "1" || normalized === "true" || normalized === "yes" || normalized === "on") {
34
+ return true;
35
+ }
36
+ }
37
+ throw createError({
38
+ statusCode: 400,
39
+ statusMessage: "Invalid includeArchived query value"
40
+ });
41
+ }
19
42
  const prds_get = defineEventHandler(async (event) => {
20
43
  const repoId = getRouterParam(event, "repoId");
44
+ const includeArchived = parseIncludeArchived(getQuery(event).includeArchived);
21
45
  if (!repoId) {
22
46
  throw createError({
23
47
  statusCode: 400,
@@ -32,7 +56,7 @@ const prds_get = defineEventHandler(async (event) => {
32
56
  });
33
57
  }
34
58
  try {
35
- return await listPrdDocuments(repo);
59
+ return await listPrdDocuments(repo, { includeArchived });
36
60
  } catch (error) {
37
61
  throw createError({
38
62
  statusCode: 500,
@@ -1 +1 @@
1
- {"version":3,"file":"prds.get.mjs","sources":["../../../../../../../server/api/repos/[repoId]/prds.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,iBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,iBAAA,IAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,yBAAA;AAAA,MACA,OAAA,EAAA,qBAAA,CAAA,KAAA,CAAA,OAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"prds.get.mjs","sources":["../../../../../../../server/api/repos/[repoId]/prds.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,SAAA,qBAAA,QAAA,EAAA;AACA,EAAA,MAAA,QAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAAA,GAAA,QAAA,CAAA,CAAA,CAAA,GAAA,QAAA;AAEA,EAAA,IAAA,UAAA,MAAA,EAAA;AACA,IAAA,OAAA,KAAA;AAAA,EACA;AAEA,EAAA,IAAA,OAAA,UAAA,SAAA,EAAA;AACA,IAAA,OAAA,KAAA;AAAA,EACA;AAEA,EAAA,IAAA,OAAA,UAAA,QAAA,EAAA;AACA,IAAA,MAAA,UAAA,GAAA,KAAA,CAAA,IAAA,EAAA,CAAA,WAAA,EAAA;AACA,IAAA,IAAA,UAAA,CAAA,MAAA,KAAA,CAAA,IAAA,UAAA,KAAA,GAAA,IAAA,eAAA,OAAA,IAAA,UAAA,KAAA,IAAA,IAAA,UAAA,KAAA,KAAA,EAAA;AACA,MAAA,OAAA,KAAA;AAAA,IACA;AAEA,IAAA,IAAA,eAAA,GAAA,IAAA,UAAA,KAAA,UAAA,UAAA,KAAA,KAAA,IAAA,eAAA,IAAA,EAAA;AACA,MAAA,OAAA,IAAA;AAAA,IACA;AAAA,EACA;AAEA,EAAA,MAAA,WAAA,CAAA;AAAA,IACA,UAAA,EAAA,GAAA;AAAA,IACA,aAAA,EAAA;AAAA,GACA,CAAA;AACA;AAEA,iBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,eAAA,GAAA,oBAAA,CAAA,QAAA,CAAA,KAAA,EAAA,eAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,gBAAA,CAAA,IAAA,EAAA,EAAA,iBAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,yBAAA;AAAA,MACA,OAAA,EAAA,qBAAA,CAAA,KAAA,CAAA,OAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,5 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById, e as discoverGitRepos, u as updateRepoGitRepos } from '../../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError } from '../../../../nitro/nitro.mjs';
2
+ import { a as getRepoById, d as discoverGitRepos, u as updateRepoGitRepos } from '../../../../_/repos.mjs';
2
3
  import 'node:http';
3
4
  import 'node:https';
4
5
  import 'node:events';
@@ -6,9 +7,9 @@ import 'node:buffer';
6
7
  import 'node:fs';
7
8
  import 'node:path';
8
9
  import 'node:crypto';
9
- import 'node:url';
10
10
  import 'node:os';
11
11
  import 'zod';
12
+ import 'node:url';
12
13
 
13
14
  const refreshGitRepos_post = defineEventHandler(async (event) => {
14
15
  const repoId = getRouterParam(event, "repoId");
@@ -1 +1 @@
1
- {"version":3,"file":"refresh-git-repos.post.mjs","sources":["../../../../../../../server/api/repos/[repoId]/refresh-git-repos.post.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,6BAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAGA,EAAA,MAAA,QAAA,GAAA,MAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AAEA,EAAA,MAAA,mBAAA,IAAA,CAAA,EAAA,EAAA,SAAA,MAAA,GAAA,CAAA,GAAA,WAAA,MAAA,CAAA;AAEA,EAAA,OAAA;AAAA,IACA,YAAA,QAAA,CAAA,MAAA;AAAA,IACA;AAAA,GACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"refresh-git-repos.post.mjs","sources":["../../../../../../../server/api/repos/[repoId]/refresh-git-repos.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,6BAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAGA,EAAA,MAAA,QAAA,GAAA,MAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AAEA,EAAA,MAAA,mBAAA,IAAA,CAAA,EAAA,EAAA,SAAA,MAAA,GAAA,CAAA,GAAA,WAAA,MAAA,CAAA;AAEA,EAAA,OAAA;AAAA,IACA,YAAA,QAAA,CAAA,MAAA;AAAA,IACA;AAAA,GACA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,5 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, r as removeRepo } from '../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError } from '../../../nitro/nitro.mjs';
2
+ import { r as removeRepo } from '../../../_/repos.mjs';
2
3
  import { r as refreshWatcher } from '../../../_/watcher.mjs';
3
4
  import 'node:http';
4
5
  import 'node:https';
@@ -7,9 +8,9 @@ import 'node:buffer';
7
8
  import 'node:fs';
8
9
  import 'node:path';
9
10
  import 'node:crypto';
10
- import 'node:url';
11
11
  import 'node:os';
12
12
  import 'zod';
13
+ import 'node:url';
13
14
  import 'chokidar';
14
15
 
15
16
  const _repoId__delete = defineEventHandler(async (event) => {
@@ -1 +1 @@
1
- {"version":3,"file":"_repoId_.delete.mjs","sources":["../../../../../../server/api/repos/[repoId].delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,wBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,EAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,EAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,OAAA,GAAA,MAAA,UAAA,CAAA,EAAA,CAAA;AAEA,EAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAGA,EAAA,MAAA,cAAA,EAAA;AAEA,EAAA,OAAA,EAAA,SAAA,IAAA,EAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"_repoId_.delete.mjs","sources":["../../../../../../server/api/repos/[repoId].delete.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,wBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,EAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,EAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,OAAA,GAAA,MAAA,UAAA,CAAA,EAAA,CAAA;AAEA,EAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAGA,EAAA,MAAA,cAAA,EAAA;AAEA,EAAA,OAAA,EAAA,SAAA,IAAA,EAAA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { d as defineEventHandler, l as useRuntimeConfig, s as setHeader } from '../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, u as useRuntimeConfig, s as setHeader } from '../../nitro/nitro.mjs';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import 'node:http';
4
4
  import 'node:https';
@@ -6,9 +6,9 @@ import 'node:events';
6
6
  import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
- import 'node:url';
10
9
  import 'node:os';
11
10
  import 'zod';
11
+ import 'node:url';
12
12
 
13
13
  const SERVER_INSTANCE_ID = randomUUID();
14
14
  const SERVER_STARTED_AT = (/* @__PURE__ */ new Date()).toISOString();
@@ -0,0 +1,21 @@
1
+ import { d as defineEventHandler, k as startStateMigration, l as getStateMigrationStatus, s as setHeader } from '../../../nitro/nitro.mjs';
2
+ import 'node:http';
3
+ import 'node:https';
4
+ import 'node:events';
5
+ import 'node:buffer';
6
+ import 'node:fs';
7
+ import 'node:path';
8
+ import 'node:crypto';
9
+ import 'node:os';
10
+ import 'zod';
11
+ import 'node:url';
12
+
13
+ const status_get = defineEventHandler((event) => {
14
+ void startStateMigration();
15
+ const status = getStateMigrationStatus();
16
+ setHeader(event, "Cache-Control", "no-store, no-cache, must-revalidate");
17
+ return status;
18
+ });
19
+
20
+ export { status_get as default };
21
+ //# sourceMappingURL=status.get.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.get.mjs","sources":["../../../../../../server/api/state-migration/status.get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,mBAAA,kBAAA,CAAA,CAAA,KAAA,KAAA;AACA,EAAA,KAAA,mBAAA,EAAA;AAEA,EAAA,MAAA,SAAA,uBAAA,EAAA;AAEA,EAAA,SAAA,CAAA,KAAA,EAAA,iBAAA,qCAAA,CAAA;AAEA,EAAA,OAAA,MAAA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { d as defineEventHandler, s as setHeader, n as addChangeListener } from '../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, s as setHeader, m as addChangeListener } from '../../nitro/nitro.mjs';
2
2
  import { i as initWatcher } from '../../_/watcher.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
@@ -7,10 +7,11 @@ import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
9
  import 'node:crypto';
10
- import 'node:url';
11
10
  import 'node:os';
12
11
  import 'zod';
12
+ import 'node:url';
13
13
  import 'chokidar';
14
+ import '../../_/repos.mjs';
14
15
 
15
16
  const watch_get = defineEventHandler(async (event) => {
16
17
  await initWatcher();
@@ -1 +1 @@
1
- {"version":3,"file":"watch.get.mjs","sources":["../../../../../server/api/watch.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAGA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AAEA,EAAA,MAAA,WAAA,EAAA;AAGA,EAAA,SAAA,CAAA,KAAA,EAAA,gBAAA,mBAAA,CAAA;AACA,EAAA,SAAA,CAAA,KAAA,EAAA,iBAAA,UAAA,CAAA;AACA,EAAA,SAAA,CAAA,KAAA,EAAA,cAAA,YAAA,CAAA;AAGA,EAAA,MAAA,MAAA,GAAA,IAAA,cAAA,CAAA;AAAA,IACA,MAAA,UAAA,EAAA;AAEA,MAAA,MAAA,UAAA,GAAA,SAAA,IAAA,CAAA,SAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;AAAA,CAAA;AACA,MAAA,UAAA,CAAA,QAAA,IAAA,WAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA;AAGA,MAAA,MAAA,cAAA,GAAA,iBAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,MAAA,GAAA,GAAA,CAAA,MAAA,EAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA;;AAAA,CAAA;AACA,QAAA,IAAA;AACA,UAAA,UAAA,CAAA,QAAA,IAAA,WAAA,EAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA;AAAA,QACA,CAAA,CAAA,MAAA;AAEA,UAAA,cAAA,EAAA;AAAA,QACA;AAAA,MACA,CAAA,CAAA;AAGA,MAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA;AACA,QAAA,cAAA,EAAA;AACA,QAAA,IAAA;AACA,UAAA,UAAA,CAAA,KAAA,EAAA;AAAA,QACA,CAAA,CAAA,MAAA;AAAA,QAEA;AAAA,MACA,CAAA,CAAA;AAGA,MAAA,MAAA,iBAAA,GAAA,YAAA,MAAA;AACA,QAAA,IAAA;AACA,UAAA,MAAA,IAAA,GAAA,CAAA;;AAAA,CAAA;AACA,UAAA,UAAA,CAAA,QAAA,IAAA,WAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA;AAAA,QACA,CAAA,CAAA,MAAA;AACA,UAAA,aAAA,CAAA,iBAAA,CAAA;AAAA,QACA;AAAA,MACA,GAAA,GAAA,CAAA;AAEA,MAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA;AACA,QAAA,aAAA,CAAA,iBAAA,CAAA;AAAA,MACA,CAAA,CAAA;AAAA,IACA;AAAA,GACA,CAAA;AAEA,EAAA,OAAA,IAAA,SAAA,MAAA,EAAA;AAAA,IACA,OAAA,EAAA;AAAA,MACA,cAAA,EAAA,mBAAA;AAAA,MACA,eAAA,EAAA,UAAA;AAAA,MACA,YAAA,EAAA;AAAA;AACA,GACA,CAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"watch.get.mjs","sources":["../../../../../server/api/watch.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AAEA,EAAA,MAAA,WAAA,EAAA;AAGA,EAAA,SAAA,CAAA,KAAA,EAAA,gBAAA,mBAAA,CAAA;AACA,EAAA,SAAA,CAAA,KAAA,EAAA,iBAAA,UAAA,CAAA;AACA,EAAA,SAAA,CAAA,KAAA,EAAA,cAAA,YAAA,CAAA;AAGA,EAAA,MAAA,MAAA,GAAA,IAAA,cAAA,CAAA;AAAA,IACA,MAAA,UAAA,EAAA;AAEA,MAAA,MAAA,UAAA,GAAA,SAAA,IAAA,CAAA,SAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;AAAA,CAAA;AACA,MAAA,UAAA,CAAA,QAAA,IAAA,WAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA;AAGA,MAAA,MAAA,cAAA,GAAA,iBAAA,CAAA,CAAA,SAAA,KAAA;AACA,QAAA,MAAA,GAAA,GAAA,CAAA,MAAA,EAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA;;AAAA,CAAA;AACA,QAAA,IAAA;AACA,UAAA,UAAA,CAAA,QAAA,IAAA,WAAA,EAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA;AAAA,QACA,CAAA,CAAA,MAAA;AAEA,UAAA,cAAA,EAAA;AAAA,QACA;AAAA,MACA,CAAA,CAAA;AAGA,MAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA;AACA,QAAA,cAAA,EAAA;AACA,QAAA,IAAA;AACA,UAAA,UAAA,CAAA,KAAA,EAAA;AAAA,QACA,CAAA,CAAA,MAAA;AAAA,QAEA;AAAA,MACA,CAAA,CAAA;AAGA,MAAA,MAAA,iBAAA,GAAA,YAAA,MAAA;AACA,QAAA,IAAA;AACA,UAAA,MAAA,IAAA,GAAA,CAAA;;AAAA,CAAA;AACA,UAAA,UAAA,CAAA,QAAA,IAAA,WAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA;AAAA,QACA,CAAA,CAAA,MAAA;AACA,UAAA,aAAA,CAAA,iBAAA,CAAA;AAAA,QACA;AAAA,MACA,GAAA,GAAA,CAAA;AAEA,MAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA;AACA,QAAA,aAAA,CAAA,iBAAA,CAAA;AAAA,MACA,CAAA,CAAA;AAAA,IACA;AAAA,GACA,CAAA;AAEA,EAAA,OAAA,IAAA,SAAA,MAAA,EAAA;AAAA,IACA,OAAA,EAAA;AAAA,MACA,cAAA,EAAA,mBAAA;AAAA,MACA,eAAA,EAAA,UAAA;AAAA,MACA,YAAA,EAAA;AAAA;AACA,GACA,CAAA;AACA,CAAA,CAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { createRenderer, getRequestDependencies, getPreloadLinks, getPrefetchLinks } from 'vue-bundle-renderer/runtime';
2
- import { p as joinRelativeURL, l as useRuntimeConfig, q as getResponseStatusText, t as getResponseStatus, w as defineRenderHandler, g as getQuery, c as createError, x as destr, y as getRouteRules, z as joinURL, A as useNitroApp } from '../nitro/nitro.mjs';
2
+ import { n as joinRelativeURL, u as useRuntimeConfig, o as getResponseStatusText, q as getResponseStatus, t as defineRenderHandler, g as getQuery, c as createError, v as destr, w as getRouteRules, x as joinURL, y as useNitroApp } from '../nitro/nitro.mjs';
3
3
  import { renderToString } from 'vue/server-renderer';
4
4
  import { createHead as createHead$1, propsToString, renderSSRHead } from 'unhead/server';
5
5
  import { stringify, uneval } from 'devalue';
@@ -1,12 +1,12 @@
1
1
  import process from 'node:process';globalThis._importMeta_={url:import.meta.url,env:process.env};import 'node:http';
2
2
  import 'node:https';
3
- export { Q as default } from './chunks/nitro/nitro.mjs';
3
+ export { O as default } from './chunks/nitro/nitro.mjs';
4
4
  import 'node:events';
5
5
  import 'node:buffer';
6
6
  import 'node:fs';
7
7
  import 'node:path';
8
8
  import 'node:crypto';
9
- import 'node:url';
10
9
  import 'node:os';
11
10
  import 'zod';
11
+ import 'node:url';
12
12
  //# sourceMappingURL=index.mjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thxgg/steward-prod",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
package/README.md CHANGED
@@ -55,7 +55,6 @@ Note: `execute` runs in a VM sandbox by design, so globals like `process` are in
55
55
  ```bash
56
56
  prd ui
57
57
  prd ui --port 3100 --host 127.0.0.1
58
- prd ui --host 0.0.0.0 --allow-remote
59
58
  prd mcp
60
59
  ```
61
60
 
@@ -144,11 +143,12 @@ Detailed API docs and examples: `docs/MCP.md`
144
143
 
145
144
  Steward reads local filesystem and git metadata by design.
146
145
 
147
- - By default, UI/API only accept loopback requests
148
- - Non-loopback access requires explicit opt-in (`--allow-remote` or `STEWARD_ALLOW_REMOTE=1`)
149
- - Optional token auth for remote API access: set `STEWARD_API_TOKEN`
150
- - For browser sessions, you can initialize the auth cookie with `?token=<STEWARD_API_TOKEN>`
146
+ - UI/API accept loopback requests only
147
+ - Non-loopback requests are rejected
151
148
  - Treat as a workstation tool, not a hosted multi-user service
149
+ - `npm run dev` skips loopback enforcement because Nuxt dev proxying can mask loopback source addresses
150
+
151
+ On startup, Steward also performs a one-time automatic state migration when legacy `progress_json` data is detected. During this migration, the UI shows a blocking progress overlay until migration completes.
152
152
 
153
153
  ## Storage
154
154
 
@@ -174,8 +174,6 @@ npm run build
174
174
  | `PRD_STATE_DB_PATH` | Absolute path to SQLite DB file |
175
175
  | `PRD_STATE_HOME` | Base directory for DB (`state.db` inside) |
176
176
  | `XDG_DATA_HOME` | Fallback base path for default DB location |
177
- | `STEWARD_ALLOW_REMOTE` | Set to `1` to allow non-loopback requests |
178
- | `STEWARD_API_TOKEN` | Optional token required for remote `/api/*` access |
179
177
 
180
178
  ## OpenCode Bundle
181
179
 
@@ -1,5 +1,4 @@
1
1
  import { addRepo, discoverGitRepos, getRepoById, getRepos, removeRepo, updateRepoGitRepos, validateRepoPath } from '../../../server/utils/repos.js';
2
- import { migrateLegacyStateForRepo } from '../../../server/utils/prd-state.js';
3
2
  import { requireCurrentRepo, requireRepo } from './repo-context.js';
4
3
  export const repos = {
5
4
  async list() {
@@ -17,7 +16,6 @@ export const repos = {
17
16
  throw new Error(validation.error || 'Invalid repository path');
18
17
  }
19
18
  const repo = await addRepo(path, name);
20
- await migrateLegacyStateForRepo(repo);
21
19
  return repo;
22
20
  },
23
21
  async remove(repoId) {
@@ -1,4 +1,4 @@
1
- import { getPrdState, getPrdStateSummaries, migrateLegacyStateForRepo, upsertPrdState } from '../../../server/utils/prd-state.js';
1
+ import { getPrdState, getPrdStateSummaries, upsertPrdState } from '../../../server/utils/prd-state.js';
2
2
  import { parseProgressFile, parseTasksFile } from '../../../server/utils/state-schema.js';
3
3
  import { requireCurrentRepo, requireRepo, requireRepoByPath } from './repo-context.js';
4
4
  function mapStateUpdate(payload) {
@@ -18,34 +18,28 @@ function mapSummaryMap(summaries) {
18
18
  export const state = {
19
19
  async get(repoId, slug) {
20
20
  const repo = await requireRepo(repoId);
21
- await migrateLegacyStateForRepo(repo);
22
21
  return await getPrdState(repo.id, slug);
23
22
  },
24
23
  async getByPath(repoPath, slug) {
25
24
  const repo = await requireRepoByPath(repoPath);
26
- await migrateLegacyStateForRepo(repo);
27
25
  return await getPrdState(repo.id, slug);
28
26
  },
29
27
  async getCurrent(slug) {
30
28
  const repo = await requireCurrentRepo();
31
- await migrateLegacyStateForRepo(repo);
32
29
  return await getPrdState(repo.id, slug);
33
30
  },
34
31
  async summaries(repoId) {
35
32
  const repo = await requireRepo(repoId);
36
- await migrateLegacyStateForRepo(repo);
37
33
  const summaries = await getPrdStateSummaries(repo.id);
38
34
  return mapSummaryMap(summaries);
39
35
  },
40
36
  async summariesByPath(repoPath) {
41
37
  const repo = await requireRepoByPath(repoPath);
42
- await migrateLegacyStateForRepo(repo);
43
38
  const summaries = await getPrdStateSummaries(repo.id);
44
39
  return mapSummaryMap(summaries);
45
40
  },
46
41
  async summariesCurrent() {
47
42
  const repo = await requireCurrentRepo();
48
- await migrateLegacyStateForRepo(repo);
49
43
  const summaries = await getPrdStateSummaries(repo.id);
50
44
  return mapSummaryMap(summaries);
51
45
  },
@@ -4,7 +4,7 @@ function printUsage() {
4
4
  console.log(`prd - Steward CLI
5
5
 
6
6
  Usage:
7
- prd ui [--preview] [--port <port>] [--host <host>] [--allow-remote]
7
+ prd ui [--preview] [--port <port>] [--host <host>]
8
8
  prd mcp
9
9
 
10
10
  Commands:
@@ -15,7 +15,6 @@ Options:
15
15
  --preview Deprecated; ignored (kept for compatibility)
16
16
  --port <port> Port for ui mode
17
17
  --host <host> Host for ui mode
18
- --allow-remote Allow non-loopback host binding
19
18
  -h, --help Show this help message
20
19
  `);
21
20
  }
@@ -27,7 +26,7 @@ function parsePort(value) {
27
26
  return parsed;
28
27
  }
29
28
  function parseUiArgs(args) {
30
- const options = { preview: false, allowRemote: false };
29
+ const options = { preview: false };
31
30
  for (let i = 0; i < args.length; i++) {
32
31
  const arg = args[i];
33
32
  if (arg === '--preview') {
@@ -52,10 +51,6 @@ function parseUiArgs(args) {
52
51
  i += 1;
53
52
  continue;
54
53
  }
55
- if (arg === '--allow-remote') {
56
- options.allowRemote = true;
57
- continue;
58
- }
59
54
  throw new Error(`Unknown option for ui: ${arg}`);
60
55
  }
61
56
  return options;
@@ -35,10 +35,8 @@ export async function runUi(options) {
35
35
  const env = { ...process.env };
36
36
  const hostFromEnv = env.NITRO_HOST || env.HOST;
37
37
  const requestedHost = (options.host || hostFromEnv || DEFAULT_UI_HOST).trim();
38
- const allowRemote = options.allowRemote || env.STEWARD_ALLOW_REMOTE === '1';
39
- if (!isLoopbackHost(requestedHost) && !allowRemote) {
40
- throw new Error(`Refusing to bind UI to non-loopback host "${requestedHost}" without explicit opt-in. `
41
- + 'Use --allow-remote or set STEWARD_ALLOW_REMOTE=1.');
38
+ if (!isLoopbackHost(requestedHost)) {
39
+ throw new Error(`Refusing to bind UI to non-loopback host "${requestedHost}". Steward only supports loopback hosts.`);
42
40
  }
43
41
  env.NODE_ENV = env.NODE_ENV || 'production';
44
42
  if (options.port !== undefined) {
@@ -48,9 +46,6 @@ export async function runUi(options) {
48
46
  }
49
47
  env.HOST = requestedHost;
50
48
  env.NITRO_HOST = requestedHost;
51
- if (allowRemote) {
52
- env.STEWARD_ALLOW_REMOTE = '1';
53
- }
54
49
  const child = spawn(process.execPath, args, {
55
50
  cwd: packageRoot,
56
51
  stdio: 'inherit',
@@ -182,7 +182,22 @@ async function initializeDatabase() {
182
182
  FOREIGN KEY (repo_id) REFERENCES repos(id) ON DELETE CASCADE
183
183
  );
184
184
 
185
+ CREATE TABLE IF NOT EXISTS prd_archives (
186
+ repo_id TEXT NOT NULL,
187
+ slug TEXT NOT NULL,
188
+ archived_at TEXT NOT NULL,
189
+ PRIMARY KEY (repo_id, slug),
190
+ FOREIGN KEY (repo_id) REFERENCES repos(id) ON DELETE CASCADE
191
+ );
192
+
193
+ CREATE TABLE IF NOT EXISTS app_meta (
194
+ key TEXT PRIMARY KEY,
195
+ value TEXT NOT NULL,
196
+ updated_at TEXT NOT NULL
197
+ );
198
+
185
199
  CREATE INDEX IF NOT EXISTS idx_prd_states_repo_id ON prd_states(repo_id);
200
+ CREATE INDEX IF NOT EXISTS idx_prd_archives_repo_id ON prd_archives(repo_id);
186
201
  `);
187
202
  return adapter;
188
203
  }
@@ -0,0 +1,53 @@
1
+ import { emitChange } from './change-events.js';
2
+ import { dbAll, dbGet, dbRun } from './db.js';
3
+ function toArchiveState(archivedAt) {
4
+ if (!archivedAt) {
5
+ return { archived: false };
6
+ }
7
+ return {
8
+ archived: true,
9
+ archivedAt
10
+ };
11
+ }
12
+ export async function getPrdArchiveMap(repoId) {
13
+ const rows = await dbAll('SELECT slug, archived_at FROM prd_archives WHERE repo_id = ?', [repoId]);
14
+ const archiveMap = new Map();
15
+ for (const row of rows) {
16
+ archiveMap.set(row.slug, row.archived_at);
17
+ }
18
+ return archiveMap;
19
+ }
20
+ export async function getPrdArchiveState(repoId, slug) {
21
+ const row = await dbGet('SELECT archived_at FROM prd_archives WHERE repo_id = ? AND slug = ?', [repoId, slug]);
22
+ return toArchiveState(row?.archived_at);
23
+ }
24
+ export async function setPrdArchived(repoId, slug, archived) {
25
+ if (archived) {
26
+ const archivedAt = new Date().toISOString();
27
+ const result = await dbRun(`
28
+ INSERT INTO prd_archives (repo_id, slug, archived_at)
29
+ VALUES (?, ?, ?)
30
+ ON CONFLICT(repo_id, slug) DO NOTHING
31
+ `, [repoId, slug, archivedAt]);
32
+ const row = await dbGet('SELECT archived_at FROM prd_archives WHERE repo_id = ? AND slug = ?', [repoId, slug]);
33
+ if (result.changes > 0) {
34
+ emitChange({
35
+ type: 'change',
36
+ path: `state://${repoId}/${slug}.archive`,
37
+ repoId,
38
+ category: 'prd'
39
+ });
40
+ }
41
+ return toArchiveState(row?.archived_at || archivedAt);
42
+ }
43
+ const result = await dbRun('DELETE FROM prd_archives WHERE repo_id = ? AND slug = ?', [repoId, slug]);
44
+ if (result.changes > 0) {
45
+ emitChange({
46
+ type: 'change',
47
+ path: `state://${repoId}/${slug}.archive`,
48
+ repoId,
49
+ category: 'prd'
50
+ });
51
+ }
52
+ return { archived: false };
53
+ }
@@ -1,7 +1,8 @@
1
1
  import { promises as fs } from 'node:fs';
2
2
  import { basename, isAbsolute, join, relative, resolve } from 'node:path';
3
3
  import { resolveCommitRepo } from './git.js';
4
- import { getPrdState, getPrdStateSummaries, migrateLegacyStateForRepo } from './prd-state.js';
4
+ import { getPrdArchiveMap, getPrdArchiveState } from './prd-archive.js';
5
+ import { getPrdState, getPrdStateSummaries } from './prd-state.js';
5
6
  import { discoverGitRepos, updateRepoGitRepos } from './repos.js';
6
7
  const PRD_SLUG_PATTERN = /^[A-Za-z0-9][A-Za-z0-9-]*$/;
7
8
  function normalizePathSlashes(path) {
@@ -83,15 +84,18 @@ export async function readPrdDocument(repo, prdSlug) {
83
84
  catch {
84
85
  throw new Error('PRD not found');
85
86
  }
87
+ const archiveState = await getPrdArchiveState(repo.id, prdSlug);
86
88
  return {
87
89
  slug: prdSlug,
88
90
  name: extractPrdTitle(content, prdSlug),
89
91
  content,
90
- metadata: parseMetadata(content)
92
+ metadata: parseMetadata(content),
93
+ archived: archiveState.archived,
94
+ ...(archiveState.archivedAt && { archivedAt: archiveState.archivedAt })
91
95
  };
92
96
  }
93
- export async function listPrdDocuments(repo) {
94
- await migrateLegacyStateForRepo(repo);
97
+ export async function listPrdDocuments(repo, options = {}) {
98
+ const includeArchived = options.includeArchived === true;
95
99
  const prdDir = join(repo.path, 'docs', 'prd');
96
100
  let prdFiles = [];
97
101
  try {
@@ -107,9 +111,17 @@ export async function listPrdDocuments(repo) {
107
111
  catch {
108
112
  return [];
109
113
  }
110
- const stateSummaries = await getPrdStateSummaries(repo.id);
111
- const items = await Promise.all(prdFiles.map(async (filename) => {
114
+ const [stateSummaries, archiveMap] = await Promise.all([
115
+ getPrdStateSummaries(repo.id),
116
+ getPrdArchiveMap(repo.id)
117
+ ]);
118
+ const items = (await Promise.all(prdFiles.map(async (filename) => {
112
119
  const slug = basename(filename, '.md');
120
+ const archivedAt = archiveMap.get(slug);
121
+ const archived = typeof archivedAt === 'string';
122
+ if (!includeArchived && archived) {
123
+ return null;
124
+ }
113
125
  const filePath = join(prdDir, filename);
114
126
  let name = slug;
115
127
  let modifiedAt = 0;
@@ -131,22 +143,27 @@ export async function listPrdDocuments(repo) {
131
143
  source: `docs/prd/${filename}`,
132
144
  hasState: !!stateSummary?.hasState,
133
145
  modifiedAt,
146
+ archived,
147
+ ...(archivedAt && { archivedAt }),
134
148
  ...(stateSummary?.taskCount !== undefined && { taskCount: stateSummary.taskCount }),
135
149
  ...(stateSummary?.completedCount !== undefined && { completedCount: stateSummary.completedCount })
136
150
  };
137
- }));
138
- items.sort((a, b) => b.modifiedAt - a.modifiedAt);
151
+ }))).filter((item) => item !== null);
152
+ items.sort((a, b) => {
153
+ if (a.archived !== b.archived) {
154
+ return a.archived ? 1 : -1;
155
+ }
156
+ return b.modifiedAt - a.modifiedAt;
157
+ });
139
158
  return items;
140
159
  }
141
160
  export async function readPrdTasks(repo, prdSlug) {
142
161
  assertValidPrdSlug(prdSlug);
143
- await migrateLegacyStateForRepo(repo);
144
162
  const state = await getPrdState(repo.id, prdSlug);
145
163
  return state?.tasks ?? null;
146
164
  }
147
165
  export async function readPrdProgress(repo, prdSlug) {
148
166
  assertValidPrdSlug(prdSlug);
149
- await migrateLegacyStateForRepo(repo);
150
167
  const state = await getPrdState(repo.id, prdSlug);
151
168
  return state?.progress ?? null;
152
169
  }
@@ -180,7 +197,6 @@ async function refreshDiscoveredGitRepos(repo) {
180
197
  }
181
198
  export async function resolveTaskCommits(repo, prdSlug, taskId) {
182
199
  assertValidPrdSlug(prdSlug);
183
- await migrateLegacyStateForRepo(repo);
184
200
  const state = await getPrdState(repo.id, prdSlug);
185
201
  const progress = state?.progress ?? null;
186
202
  if (!progress) {