@thxgg/steward 0.1.16 → 0.1.17

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 (157) hide show
  1. package/.env.example +6 -0
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/_nuxt/{wbjFvimm.js → 4r0X30JV.js} +1 -1
  4. package/.output/public/_nuxt/{ynmyrfyT.js → BMdjSp24.js} +1 -1
  5. package/.output/public/_nuxt/{BWVTacYj.js → BSZqAKg4.js} +1 -1
  6. package/.output/public/_nuxt/{Dum5qplW.js → BdjPva1I.js} +1 -1
  7. package/.output/public/_nuxt/Beeir9iR.js +1 -0
  8. package/.output/public/_nuxt/Bh3vsUvl.js +1 -0
  9. package/.output/public/_nuxt/{Bibm_IDv.js → BlTKcjLJ.js} +2 -2
  10. package/.output/public/_nuxt/{CxHOXVf6.js → By7gAVcL.js} +1 -1
  11. package/.output/public/_nuxt/CbJfCtEa.js +1 -0
  12. package/.output/public/_nuxt/CbkpNvIu.js +141 -0
  13. package/.output/public/_nuxt/CmhLcqDu.js +1 -0
  14. package/.output/public/_nuxt/DC6iPLz1.js +30 -0
  15. package/.output/public/_nuxt/{BSA0RJ-H.js → DD--ojY9.js} +1 -1
  16. package/.output/public/_nuxt/Detail.DSyVQNdr.css +1 -0
  17. package/.output/public/_nuxt/DhKWRjCh.js +60 -0
  18. package/.output/public/_nuxt/_prd_.BkpxMFSV.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/f3f42dbd-d501-442b-871c-3d06157e7aa1.json +1 -0
  21. package/.output/public/_nuxt/c1sXju8w.js +1 -0
  22. package/.output/public/_nuxt/eGCjCghR.js +1 -0
  23. package/.output/public/_nuxt/nX8Sf7cz.js +13 -0
  24. package/.output/server/chunks/_/git-api.mjs +100 -7
  25. package/.output/server/chunks/_/git-api.mjs.map +1 -1
  26. package/.output/server/chunks/_/git.mjs +3 -10
  27. package/.output/server/chunks/_/git.mjs.map +1 -1
  28. package/.output/server/chunks/_/prd-service.mjs +234 -0
  29. package/.output/server/chunks/_/prd-service.mjs.map +1 -0
  30. package/.output/server/chunks/_/task-graph.mjs +3 -3
  31. package/.output/server/chunks/_/task-graph.mjs.map +1 -1
  32. package/.output/server/chunks/_/watcher.mjs +26 -46
  33. package/.output/server/chunks/_/watcher.mjs.map +1 -1
  34. package/.output/server/chunks/build/{Detail-CUfU85GY.mjs → Detail-MGwP_u2d.mjs} +63 -34
  35. package/.output/server/chunks/build/Detail-MGwP_u2d.mjs.map +1 -0
  36. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs +4 -0
  37. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs.map +1 -0
  38. package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs +8 -0
  39. package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs.map +1 -0
  40. package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs +10 -0
  41. package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs.map +1 -0
  42. package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs +8 -0
  43. package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs.map +1 -0
  44. package/.output/server/chunks/build/{_prd_-CeVnQzOV.mjs → _prd_-C-Aj4fVa.mjs} +75 -33
  45. package/.output/server/chunks/build/_prd_-C-Aj4fVa.mjs.map +1 -0
  46. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  47. package/.output/server/chunks/build/{default-DWCOHHTE.mjs → default-Cao5eO80.mjs} +4 -3
  48. package/.output/server/chunks/build/default-Cao5eO80.mjs.map +1 -0
  49. package/.output/server/chunks/build/error-404-Bf6kdO80.mjs +2 -1
  50. package/.output/server/chunks/build/error-500-D_bcARXN.mjs +2 -1
  51. package/.output/server/chunks/build/{index-CckL_NBD.mjs → index-ByZO4Bvq.mjs} +2 -2
  52. package/.output/server/chunks/build/index-ByZO4Bvq.mjs.map +1 -0
  53. package/.output/server/chunks/build/{index-QVeSHT3L.mjs → index-ljj9uTXI.mjs} +8 -5
  54. package/.output/server/chunks/build/index-ljj9uTXI.mjs.map +1 -0
  55. package/.output/server/chunks/build/nuxt-link-SvT1nf8Z.mjs +1 -1
  56. package/.output/server/chunks/build/{repo-graph-CHNl58mY.mjs → repo-graph-EuhMeFt7.mjs} +25 -10
  57. package/.output/server/chunks/build/repo-graph-EuhMeFt7.mjs.map +1 -0
  58. package/.output/server/chunks/build/server.mjs +7 -6
  59. package/.output/server/chunks/build/styles.mjs +4 -4
  60. package/.output/server/chunks/build/{usePrd-SqcxGyFU.mjs → usePrd-f7ylhIqs.mjs} +10 -34
  61. package/.output/server/chunks/build/usePrd-f7ylhIqs.mjs.map +1 -0
  62. package/.output/server/chunks/nitro/nitro.mjs +1106 -677
  63. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  64. package/.output/server/chunks/routes/api/browse.get.mjs +12 -6
  65. package/.output/server/chunks/routes/api/browse.get.mjs.map +1 -1
  66. package/.output/server/chunks/routes/api/index.get.mjs +2 -1
  67. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  68. package/.output/server/chunks/routes/api/index.post.mjs +3 -2
  69. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  70. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs +11 -13
  71. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs.map +1 -1
  72. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs +11 -6
  73. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs.map +1 -1
  74. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs +31 -12
  75. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs.map +1 -1
  76. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs +13 -13
  77. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs.map +1 -1
  78. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs +5 -1
  79. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -1
  80. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +14 -1
  81. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs.map +1 -1
  82. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs +20 -9
  83. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs.map +1 -1
  84. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs +20 -85
  85. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs +20 -9
  87. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs.map +1 -1
  88. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs +30 -50
  89. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs.map +1 -1
  90. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs +19 -49
  91. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs.map +1 -1
  92. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs +6 -13
  93. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs.map +1 -1
  94. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs +2 -1
  95. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs.map +1 -1
  96. package/.output/server/chunks/routes/api/runtime.get.mjs +3 -2
  97. package/.output/server/chunks/routes/api/runtime.get.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/watch.get.mjs +5 -4
  99. package/.output/server/chunks/routes/api/watch.get.mjs.map +1 -1
  100. package/.output/server/chunks/routes/renderer.mjs +1 -1
  101. package/.output/server/index.mjs +3 -2
  102. package/.output/server/index.mjs.map +1 -1
  103. package/.output/server/node_modules/zod/index.js +4 -0
  104. package/.output/server/node_modules/zod/package.json +118 -0
  105. package/.output/server/node_modules/zod/v3/ZodError.js +133 -0
  106. package/.output/server/node_modules/zod/v3/errors.js +9 -0
  107. package/.output/server/node_modules/zod/v3/external.js +6 -0
  108. package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  109. package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  110. package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  111. package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
  112. package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
  113. package/.output/server/node_modules/zod/v3/types.js +3693 -0
  114. package/.output/server/package.json +2 -1
  115. package/README.md +7 -2
  116. package/dist/host/src/api/prds.js +6 -172
  117. package/dist/host/src/api/repos.js +3 -16
  118. package/dist/host/src/api/state.js +7 -2
  119. package/dist/host/src/executor-runner.js +368 -0
  120. package/dist/host/src/executor.js +138 -260
  121. package/dist/host/src/index.js +7 -2
  122. package/dist/host/src/mcp.js +27 -1
  123. package/dist/host/src/ui.js +18 -3
  124. package/dist/server/utils/change-events.js +33 -0
  125. package/dist/server/utils/git.js +11 -16
  126. package/dist/server/utils/prd-service.js +235 -0
  127. package/dist/server/utils/prd-state.js +57 -45
  128. package/dist/server/utils/repos.js +58 -13
  129. package/dist/server/utils/state-schema.js +61 -0
  130. package/dist/server/utils/task-graph.js +2 -2
  131. package/package.json +2 -1
  132. package/.output/public/_nuxt/CVJh28bx.js +0 -1
  133. package/.output/public/_nuxt/CyZuidLG.js +0 -60
  134. package/.output/public/_nuxt/D0op9E2g.js +0 -1
  135. package/.output/public/_nuxt/DX8awZaa.js +0 -1
  136. package/.output/public/_nuxt/Detail.z33AHKev.css +0 -1
  137. package/.output/public/_nuxt/DiTJUZOC.js +0 -1
  138. package/.output/public/_nuxt/T_3JE9C-.js +0 -1
  139. package/.output/public/_nuxt/WOI2tLsR.js +0 -42
  140. package/.output/public/_nuxt/_prd_.KTotLoF_.css +0 -1
  141. package/.output/public/_nuxt/builds/meta/029070b0-b8e2-4988-84f4-d0c9ff55c998.json +0 -1
  142. package/.output/public/_nuxt/odRGDGwj.js +0 -1
  143. package/.output/server/chunks/build/Detail-CUfU85GY.mjs.map +0 -1
  144. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-CS8FTppg.mjs +0 -4
  145. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-CS8FTppg.mjs.map +0 -1
  146. package/.output/server/chunks/build/DiffViewer-styles.AUfwwelI.mjs +0 -10
  147. package/.output/server/chunks/build/DiffViewer-styles.AUfwwelI.mjs.map +0 -1
  148. package/.output/server/chunks/build/DiffViewer-styles.D_it8zfk.mjs +0 -8
  149. package/.output/server/chunks/build/DiffViewer-styles.D_it8zfk.mjs.map +0 -1
  150. package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs +0 -8
  151. package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs.map +0 -1
  152. package/.output/server/chunks/build/_prd_-CeVnQzOV.mjs.map +0 -1
  153. package/.output/server/chunks/build/default-DWCOHHTE.mjs.map +0 -1
  154. package/.output/server/chunks/build/index-CckL_NBD.mjs.map +0 -1
  155. package/.output/server/chunks/build/index-QVeSHT3L.mjs.map +0 -1
  156. package/.output/server/chunks/build/repo-graph-CHNl58mY.mjs.map +0 -1
  157. package/.output/server/chunks/build/usePrd-SqcxGyFU.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, m as migrateLegacyStateForRepo, h as getPrdState, e as discoverGitRepos, s as saveRepos } from '../../../../../../../../nitro/nitro.mjs';
2
- import { r as resolveCommitRepo } from '../../../../../../../../_/git.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../../../../../nitro/nitro.mjs';
2
+ import { e as resolveTaskCommits } from '../../../../../../../../_/prd-service.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
5
5
  import 'node:events';
@@ -7,12 +7,16 @@ import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
9
  import 'node:crypto';
10
- import 'node:os';
11
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
13
+ import '../../../../../../../../_/git.mjs';
12
14
  import 'node:child_process';
13
15
 
16
+ function normalizeErrorMessage(message) {
17
+ return message.replace(/\s+/g, " ").trim();
18
+ }
14
19
  const commits_get = defineEventHandler(async (event) => {
15
- var _a;
16
20
  const repoId = getRouterParam(event, "repoId");
17
21
  const prdSlug = getRouterParam(event, "prdSlug");
18
22
  const taskId = getRouterParam(event, "taskId");
@@ -22,99 +26,30 @@ const commits_get = defineEventHandler(async (event) => {
22
26
  statusMessage: "Repository ID, PRD slug, and task ID are required"
23
27
  });
24
28
  }
25
- const repos = await getRepos();
26
- const repo = repos.find((r) => r.id === repoId);
29
+ const repo = await getRepoById(repoId);
27
30
  if (!repo) {
28
31
  throw createError({
29
32
  statusCode: 404,
30
33
  statusMessage: "Repository not found"
31
34
  });
32
35
  }
33
- await migrateLegacyStateForRepo(repo);
34
- let progress = null;
35
36
  try {
36
- const state = await getPrdState(repo.id, prdSlug);
37
- progress = (_a = state == null ? void 0 : state.progress) != null ? _a : null;
37
+ return await resolveTaskCommits(repo, prdSlug, taskId);
38
38
  } catch (error) {
39
+ const message = normalizeErrorMessage(error.message);
40
+ if (message.includes("Invalid PRD slug")) {
41
+ throw createError({
42
+ statusCode: 400,
43
+ statusMessage: "Invalid PRD slug",
44
+ message
45
+ });
46
+ }
39
47
  throw createError({
40
48
  statusCode: 500,
41
- statusMessage: "Failed to read progress state",
42
- message: error.message.replace(/\s+/g, " ").trim()
49
+ statusMessage: "Failed to resolve task commits",
50
+ message
43
51
  });
44
52
  }
45
- if (!progress) {
46
- return [];
47
- }
48
- const taskLogs = Array.isArray(progress.taskLogs) ? progress.taskLogs : [];
49
- const taskLog = taskLogs.find((log) => log.taskId === taskId);
50
- if (!taskLog) {
51
- return [];
52
- }
53
- if (!taskLog.commits || taskLog.commits.length === 0) {
54
- return [];
55
- }
56
- const resolvedCommits = [];
57
- const failedEntries = [];
58
- for (const commitEntry of taskLog.commits) {
59
- try {
60
- const resolved = await resolveCommitRepo(repo, commitEntry);
61
- resolvedCommits.push({
62
- sha: resolved.sha,
63
- repo: resolved.repoPath
64
- });
65
- } catch {
66
- failedEntries.push(commitEntry);
67
- }
68
- }
69
- if (failedEntries.length > 0) {
70
- const newGitRepos = await discoverGitRepos(repo.path);
71
- const existingPaths = new Set((repo.gitRepos || []).map((gr) => gr.relativePath));
72
- const hasNewRepos = newGitRepos.some((gr) => !existingPaths.has(gr.relativePath));
73
- if (hasNewRepos) {
74
- const repos2 = await getRepos();
75
- const repoIndex = repos2.findIndex((r) => r.id === repoId);
76
- if (repoIndex !== -1) {
77
- const updatedRepo = {
78
- ...repos2[repoIndex],
79
- gitRepos: newGitRepos.length > 0 ? newGitRepos : void 0
80
- };
81
- repos2[repoIndex] = updatedRepo;
82
- await saveRepos(repos2);
83
- for (const commitEntry of failedEntries) {
84
- try {
85
- const resolved = await resolveCommitRepo(updatedRepo, commitEntry);
86
- resolvedCommits.push({
87
- sha: resolved.sha,
88
- repo: resolved.repoPath
89
- });
90
- } catch {
91
- const sha = typeof commitEntry === "string" ? commitEntry : commitEntry.sha;
92
- resolvedCommits.push({
93
- sha,
94
- repo: ""
95
- });
96
- }
97
- }
98
- } else {
99
- for (const commitEntry of failedEntries) {
100
- const sha = typeof commitEntry === "string" ? commitEntry : commitEntry.sha;
101
- resolvedCommits.push({
102
- sha,
103
- repo: ""
104
- });
105
- }
106
- }
107
- } else {
108
- for (const commitEntry of failedEntries) {
109
- const sha = typeof commitEntry === "string" ? commitEntry : commitEntry.sha;
110
- resolvedCommits.push({
111
- sha,
112
- repo: ""
113
- });
114
- }
115
- }
116
- }
117
- return resolvedCommits;
118
53
  });
119
54
 
120
55
  export { commits_get as default };
@@ -1 +1 @@
1
- {"version":3,"file":"commits.get.mjs","sources":["../../../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/tasks/[taskId]/commits.get.ts"],"names":["repos"],"mappings":"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"}
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,4 +1,5 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, m as migrateLegacyStateForRepo, h as getPrdState } from '../../../../../../nitro/nitro.mjs';
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';
2
3
  import 'node:http';
3
4
  import 'node:https';
4
5
  import 'node:events';
@@ -6,11 +7,16 @@ import 'node:buffer';
6
7
  import 'node:fs';
7
8
  import 'node:path';
8
9
  import 'node:crypto';
9
- import 'node:os';
10
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
13
+ import '../../../../../../_/git.mjs';
14
+ import 'node:child_process';
11
15
 
16
+ function normalizeErrorMessage(message) {
17
+ return message.replace(/\s+/g, " ").trim();
18
+ }
12
19
  const tasks_get = defineEventHandler(async (event) => {
13
- var _a;
14
20
  const repoId = getRouterParam(event, "repoId");
15
21
  const prdSlug = getRouterParam(event, "prdSlug");
16
22
  if (!repoId || !prdSlug) {
@@ -19,23 +25,28 @@ const tasks_get = defineEventHandler(async (event) => {
19
25
  statusMessage: "Repository ID and PRD slug are required"
20
26
  });
21
27
  }
22
- const repos = await getRepos();
23
- const repo = repos.find((r) => r.id === repoId);
28
+ const repo = await getRepoById(repoId);
24
29
  if (!repo) {
25
30
  throw createError({
26
31
  statusCode: 404,
27
32
  statusMessage: "Repository not found"
28
33
  });
29
34
  }
30
- await migrateLegacyStateForRepo(repo);
31
35
  try {
32
- const state = await getPrdState(repo.id, prdSlug);
33
- return (_a = state == null ? void 0 : state.tasks) != null ? _a : null;
36
+ return await readPrdTasks(repo, prdSlug);
34
37
  } catch (error) {
38
+ const message = normalizeErrorMessage(error.message);
39
+ if (message.includes("Invalid PRD slug")) {
40
+ throw createError({
41
+ statusCode: 400,
42
+ statusMessage: "Invalid PRD slug",
43
+ message
44
+ });
45
+ }
35
46
  throw createError({
36
47
  statusCode: 500,
37
48
  statusMessage: "Failed to read task state",
38
- message: error.message.replace(/\s+/g, " ").trim()
49
+ message
39
50
  });
40
51
  }
41
52
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/tasks.get.ts"],"names":[],"mappings":";;;;;;;;;;;AAGA,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,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,MAAA,CAAA;AAEA,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,MAAA,0BAAA,IAAA,CAAA;AAEA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,MAAA,WAAA,CAAA,IAAA,CAAA,IAAA,OAAA,CAAA;AACA,IAAA,OAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,UAAA,IAAA,GAAA,EAAA,GAAA,IAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,2BAAA;AAAA,MACA,SAAA,KAAA,CAAA,OAAA,CAAA,QAAA,MAAA,EAAA,GAAA,EAAA,IAAA;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,39 +1,20 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos } from '../../../../../nitro/nitro.mjs';
2
- import { promises } from 'node:fs';
3
- import { join } from 'node:path';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../../nitro/nitro.mjs';
2
+ import { r as readPrdDocument } from '../../../../../_/prd-service.mjs';
4
3
  import 'node:http';
5
4
  import 'node:https';
6
5
  import 'node:events';
7
6
  import 'node:buffer';
7
+ import 'node:fs';
8
+ import 'node:path';
8
9
  import 'node:crypto';
9
- import 'node:os';
10
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
13
+ import '../../../../../_/git.mjs';
14
+ import 'node:child_process';
11
15
 
12
- function parseMetadata(content) {
13
- const metadata = {};
14
- const authorMatch = content.match(/\*{0,2}Author\*{0,2}:\*{0,2}\s*(.+?)(?:\n|$)/i);
15
- if (authorMatch && authorMatch[1]) {
16
- metadata.author = authorMatch[1].trim();
17
- }
18
- const dateMatch = content.match(/\*{0,2}Date\*{0,2}:\*{0,2}\s*(.+?)(?:\n|$)/i);
19
- if (dateMatch && dateMatch[1]) {
20
- metadata.date = dateMatch[1].trim();
21
- }
22
- const statusMatch = content.match(/\*{0,2}Status\*{0,2}:\*{0,2}\s*(.+?)(?:\n|$)/i);
23
- if (statusMatch && statusMatch[1]) {
24
- metadata.status = statusMatch[1].trim();
25
- }
26
- const shortcutLinkMatch = content.match(/\[([Ss][Cc]-\d+)\]\(([^)]+)\)/);
27
- if (shortcutLinkMatch && shortcutLinkMatch[1] && shortcutLinkMatch[2]) {
28
- metadata.shortcutStory = shortcutLinkMatch[1];
29
- metadata.shortcutUrl = shortcutLinkMatch[2];
30
- } else {
31
- const shortcutIdMatch = content.match(/\*{0,2}Shortcut(?:\s+Story)?\*{0,2}:\*{0,2}\s*([Ss][Cc]-\d+)/i);
32
- if (shortcutIdMatch && shortcutIdMatch[1]) {
33
- metadata.shortcutStory = shortcutIdMatch[1];
34
- }
35
- }
36
- return metadata;
16
+ function normalizeErrorMessage(message) {
17
+ return message.replace(/\s+/g, " ").trim();
37
18
  }
38
19
  const _prdSlug__get = defineEventHandler(async (event) => {
39
20
  const repoId = getRouterParam(event, "repoId");
@@ -44,37 +25,36 @@ const _prdSlug__get = defineEventHandler(async (event) => {
44
25
  statusMessage: "Repository ID and PRD slug are required"
45
26
  });
46
27
  }
47
- const repos = await getRepos();
48
- const repo = repos.find((r) => r.id === repoId);
28
+ const repo = await getRepoById(repoId);
49
29
  if (!repo) {
50
30
  throw createError({
51
31
  statusCode: 404,
52
32
  statusMessage: "Repository not found"
53
33
  });
54
34
  }
55
- const prdPath = join(repo.path, "docs", "prd", `${prdSlug}.md`);
56
- let content;
57
35
  try {
58
- content = await promises.readFile(prdPath, "utf-8");
59
- } catch {
36
+ return await readPrdDocument(repo, prdSlug);
37
+ } catch (error) {
38
+ const message = normalizeErrorMessage(error.message);
39
+ if (message.includes("Invalid PRD slug")) {
40
+ throw createError({
41
+ statusCode: 400,
42
+ statusMessage: "Invalid PRD slug",
43
+ message
44
+ });
45
+ }
46
+ if (message.includes("PRD not found")) {
47
+ throw createError({
48
+ statusCode: 404,
49
+ statusMessage: "PRD not found"
50
+ });
51
+ }
60
52
  throw createError({
61
- statusCode: 404,
62
- statusMessage: "PRD not found"
53
+ statusCode: 500,
54
+ statusMessage: "Failed to load PRD document",
55
+ message
63
56
  });
64
57
  }
65
- let name = prdSlug;
66
- const h1Match = content.match(/^#\s+(.+)$/m);
67
- if (h1Match && h1Match[1]) {
68
- name = h1Match[1].trim();
69
- }
70
- const metadata = parseMetadata(content);
71
- const document = {
72
- slug: prdSlug,
73
- name,
74
- content,
75
- metadata
76
- };
77
- return document;
78
58
  });
79
59
 
80
60
  export { _prdSlug__get as default };
@@ -1 +1 @@
1
- {"version":3,"file":"_prdSlug_.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug].get.ts"],"names":["fs"],"mappings":"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"}
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,14 +1,21 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, m as migrateLegacyStateForRepo, f as getPrdStateSummaries } from '../../../../nitro/nitro.mjs';
2
- import { promises } from 'node:fs';
3
- import { join, basename } from 'node:path';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../nitro/nitro.mjs';
2
+ import { l as listPrdDocuments } from '../../../../_/prd-service.mjs';
4
3
  import 'node:http';
5
4
  import 'node:https';
6
5
  import 'node:events';
7
6
  import 'node:buffer';
7
+ import 'node:fs';
8
+ import 'node:path';
8
9
  import 'node:crypto';
9
- import 'node:os';
10
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
13
+ import '../../../../_/git.mjs';
14
+ import 'node:child_process';
11
15
 
16
+ function normalizeErrorMessage(message) {
17
+ return message.replace(/\s+/g, " ").trim();
18
+ }
12
19
  const prds_get = defineEventHandler(async (event) => {
13
20
  const repoId = getRouterParam(event, "repoId");
14
21
  if (!repoId) {
@@ -17,59 +24,22 @@ const prds_get = defineEventHandler(async (event) => {
17
24
  statusMessage: "Repository ID is required"
18
25
  });
19
26
  }
20
- const repos = await getRepos();
21
- const repo = repos.find((r) => r.id === repoId);
27
+ const repo = await getRepoById(repoId);
22
28
  if (!repo) {
23
29
  throw createError({
24
30
  statusCode: 404,
25
31
  statusMessage: "Repository not found"
26
32
  });
27
33
  }
28
- await migrateLegacyStateForRepo(repo);
29
- const prdDir = join(repo.path, "docs", "prd");
30
- let prdFiles = [];
31
34
  try {
32
- const files = await promises.readdir(prdDir);
33
- prdFiles = files.filter((f) => f.endsWith(".md"));
34
- } catch {
35
- return [];
35
+ return await listPrdDocuments(repo);
36
+ } catch (error) {
37
+ throw createError({
38
+ statusCode: 500,
39
+ statusMessage: "Failed to load PRD list",
40
+ message: normalizeErrorMessage(error.message)
41
+ });
36
42
  }
37
- const stateSummaries = await getPrdStateSummaries(repo.id);
38
- const prds = await Promise.all(
39
- prdFiles.map(async (filename) => {
40
- const slug = basename(filename, ".md");
41
- const filePath = join(prdDir, filename);
42
- let name = slug;
43
- let modifiedAt = 0;
44
- try {
45
- const [content, stat] = await Promise.all([
46
- promises.readFile(filePath, "utf-8"),
47
- promises.stat(filePath)
48
- ]);
49
- modifiedAt = stat.mtime.getTime();
50
- const h1Match = content.match(/^#\s+(.+)$/m);
51
- if (h1Match && h1Match[1]) {
52
- name = h1Match[1].trim();
53
- }
54
- } catch {
55
- }
56
- const stateSummary = stateSummaries.get(slug);
57
- const hasState = !!(stateSummary == null ? void 0 : stateSummary.hasState);
58
- const taskCount = stateSummary == null ? void 0 : stateSummary.taskCount;
59
- const completedCount = stateSummary == null ? void 0 : stateSummary.completedCount;
60
- return {
61
- slug,
62
- name,
63
- source: `docs/prd/${filename}`,
64
- hasState,
65
- modifiedAt,
66
- ...taskCount !== void 0 && { taskCount },
67
- ...completedCount !== void 0 && { completedCount }
68
- };
69
- })
70
- );
71
- prds.sort((a, b) => b.modifiedAt - a.modifiedAt);
72
- return prds;
73
43
  });
74
44
 
75
45
  export { prds_get as default };
@@ -1 +1 @@
1
- {"version":3,"file":"prds.get.mjs","sources":["../../../../../../../server/api/repos/[repoId]/prds.get.ts"],"names":["fs"],"mappings":"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"}
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,4 +1,4 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, e as discoverGitRepos, s as saveRepos } from '../../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById, e as discoverGitRepos, u as updateRepoGitRepos } from '../../../../nitro/nitro.mjs';
2
2
  import 'node:http';
3
3
  import 'node:https';
4
4
  import 'node:events';
@@ -6,8 +6,9 @@ import 'node:buffer';
6
6
  import 'node:fs';
7
7
  import 'node:path';
8
8
  import 'node:crypto';
9
- import 'node:os';
10
9
  import 'node:url';
10
+ import 'node:os';
11
+ import 'zod';
11
12
 
12
13
  const refreshGitRepos_post = defineEventHandler(async (event) => {
13
14
  const repoId = getRouterParam(event, "repoId");
@@ -17,23 +18,15 @@ const refreshGitRepos_post = defineEventHandler(async (event) => {
17
18
  statusMessage: "Repository ID is required"
18
19
  });
19
20
  }
20
- const repos = await getRepos();
21
- const repoIndex = repos.findIndex((r) => r.id === repoId);
22
- if (repoIndex === -1) {
21
+ const repo = await getRepoById(repoId);
22
+ if (!repo) {
23
23
  throw createError({
24
24
  statusCode: 404,
25
25
  statusMessage: "Repository not found"
26
26
  });
27
27
  }
28
- const repo = repos[repoIndex];
29
28
  const gitRepos = await discoverGitRepos(repo.path);
30
- if (gitRepos.length > 0) {
31
- repo.gitRepos = gitRepos;
32
- } else {
33
- delete repo.gitRepos;
34
- }
35
- repos[repoIndex] = repo;
36
- await saveRepos(repos);
29
+ await updateRepoGitRepos(repo.id, gitRepos.length > 0 ? gitRepos : void 0);
37
30
  return {
38
31
  discovered: gitRepos.length,
39
32
  gitRepos
@@ -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,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,YAAA,KAAA,CAAA,SAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,MAAA,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,IAAA,GAAA,MAAA,SAAA,CAAA;AAGA,EAAA,MAAA,QAAA,GAAA,MAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AAGA,EAAA,IAAA,QAAA,CAAA,SAAA,CAAA,EAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EACA,CAAA,MAAA;AACA,IAAA,OAAA,IAAA,CAAA,QAAA;AAAA,EACA;AAEA,EAAA,KAAA,CAAA,SAAA,CAAA,GAAA,IAAA;AACA,EAAA,MAAA,UAAA,KAAA,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;;;;"}
@@ -7,8 +7,9 @@ import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
9
  import 'node:crypto';
10
- import 'node:os';
11
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
12
13
  import 'chokidar';
13
14
 
14
15
  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, u as useRuntimeConfig, k as setHeader } from '../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, l 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,8 +6,9 @@ import 'node:events';
6
6
  import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
- import 'node:os';
10
9
  import 'node:url';
10
+ import 'node:os';
11
+ import 'zod';
11
12
 
12
13
  const SERVER_INSTANCE_ID = randomUUID();
13
14
  const SERVER_STARTED_AT = (/* @__PURE__ */ new Date()).toISOString();
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.get.mjs","sources":["../../../../../server/api/runtime.get.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,MAAA,qBAAA,UAAA,EAAA;AACA,MAAA,iBAAA,GAAA,iBAAA,IAAA,IAAA,EAAA,EAAA,WAAA,EAAA;AAEA,oBAAA,kBAAA,CAAA,CAAA,KAAA,KAAA;AACA,EAAA,MAAA,aAAA,GAAA,iBAAA,KAAA,CAAA;AAEA,EAAA,SAAA,CAAA,KAAA,EAAA,iBAAA,qCAAA,CAAA;AAEA,EAAA,OAAA;AAAA,IACA,OAAA,EAAA,cAAA,GAAA,CAAA,OAAA;AAAA,IACA,UAAA,EAAA,kBAAA;AAAA,IACA,SAAA,EAAA;AAAA,GACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"runtime.get.mjs","sources":["../../../../../server/api/runtime.get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,MAAA,qBAAA,UAAA,EAAA;AACA,MAAA,iBAAA,GAAA,iBAAA,IAAA,IAAA,EAAA,EAAA,WAAA,EAAA;AAEA,oBAAA,kBAAA,CAAA,CAAA,KAAA,KAAA;AACA,EAAA,MAAA,aAAA,GAAA,iBAAA,KAAA,CAAA;AAEA,EAAA,SAAA,CAAA,KAAA,EAAA,iBAAA,qCAAA,CAAA;AAEA,EAAA,OAAA;AAAA,IACA,OAAA,EAAA,cAAA,GAAA,CAAA,OAAA;AAAA,IACA,UAAA,EAAA,kBAAA;AAAA,IACA,SAAA,EAAA;AAAA,GACA;AACA,CAAA,CAAA;;;;"}
@@ -1,5 +1,5 @@
1
- import { d as defineEventHandler, k as setHeader } from '../../nitro/nitro.mjs';
2
- import { i as initWatcher, a as addListener } from '../../_/watcher.mjs';
1
+ import { d as defineEventHandler, s as setHeader, n as addChangeListener } from '../../nitro/nitro.mjs';
2
+ import { i as initWatcher } from '../../_/watcher.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
5
5
  import 'node:events';
@@ -7,8 +7,9 @@ import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
9
  import 'node:crypto';
10
- import 'node:os';
11
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
12
13
  import 'chokidar';
13
14
 
14
15
  const watch_get = defineEventHandler(async (event) => {
@@ -22,7 +23,7 @@ const watch_get = defineEventHandler(async (event) => {
22
23
 
23
24
  `;
24
25
  controller.enqueue(new TextEncoder().encode(connectMsg));
25
- const removeListener = addListener((fileEvent) => {
26
+ const removeListener = addChangeListener((fileEvent) => {
26
27
  const msg = `data: ${JSON.stringify(fileEvent)}
27
28
 
28
29
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"watch.get.mjs","sources":["../../../../../server/api/watch.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,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,WAAA,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 { l as joinRelativeURL, u as useRuntimeConfig, n as getResponseStatusText, o as getResponseStatus, p as defineRenderHandler, g as getQuery, c as createError, q as destr, t as getRouteRules, w as joinURL, x as useNitroApp } from '../nitro/nitro.mjs';
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';
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,11 +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 { N as default } from './chunks/nitro/nitro.mjs';
3
+ export { Q 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:os';
10
9
  import 'node:url';
10
+ import 'node:os';
11
+ import 'zod';
11
12
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ import * as z from "./v3/external.js";
2
+ export * from "./v3/external.js";
3
+ export { z };
4
+ export default z;