@uasyraf/helm 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/.claude-plugin/plugin.json +9 -0
  2. package/.mcp.json +8 -0
  3. package/LICENSE +21 -0
  4. package/README.md +114 -0
  5. package/dashboard/build/client/_app/immutable/assets/0.DPthOi2j.css +1 -0
  6. package/dashboard/build/client/_app/immutable/assets/0.DPthOi2j.css.br +0 -0
  7. package/dashboard/build/client/_app/immutable/assets/0.DPthOi2j.css.gz +0 -0
  8. package/dashboard/build/client/_app/immutable/chunks/B3NJzl7g.js +1 -0
  9. package/dashboard/build/client/_app/immutable/chunks/B3NJzl7g.js.br +0 -0
  10. package/dashboard/build/client/_app/immutable/chunks/B3NJzl7g.js.gz +0 -0
  11. package/dashboard/build/client/_app/immutable/chunks/Bvgn0Gys.js +1 -0
  12. package/dashboard/build/client/_app/immutable/chunks/Bvgn0Gys.js.br +0 -0
  13. package/dashboard/build/client/_app/immutable/chunks/Bvgn0Gys.js.gz +0 -0
  14. package/dashboard/build/client/_app/immutable/chunks/C72aErMY.js +3 -0
  15. package/dashboard/build/client/_app/immutable/chunks/C72aErMY.js.br +0 -0
  16. package/dashboard/build/client/_app/immutable/chunks/C72aErMY.js.gz +0 -0
  17. package/dashboard/build/client/_app/immutable/chunks/CjpPs8iz.js +1 -0
  18. package/dashboard/build/client/_app/immutable/chunks/CjpPs8iz.js.br +0 -0
  19. package/dashboard/build/client/_app/immutable/chunks/CjpPs8iz.js.gz +0 -0
  20. package/dashboard/build/client/_app/immutable/chunks/DNLp8810.js +1 -0
  21. package/dashboard/build/client/_app/immutable/chunks/DNLp8810.js.br +0 -0
  22. package/dashboard/build/client/_app/immutable/chunks/DNLp8810.js.gz +0 -0
  23. package/dashboard/build/client/_app/immutable/chunks/DYkFpqG7.js +1 -0
  24. package/dashboard/build/client/_app/immutable/chunks/DYkFpqG7.js.br +0 -0
  25. package/dashboard/build/client/_app/immutable/chunks/DYkFpqG7.js.gz +0 -0
  26. package/dashboard/build/client/_app/immutable/chunks/DsiL0ppy.js +2 -0
  27. package/dashboard/build/client/_app/immutable/chunks/DsiL0ppy.js.br +0 -0
  28. package/dashboard/build/client/_app/immutable/chunks/DsiL0ppy.js.gz +0 -0
  29. package/dashboard/build/client/_app/immutable/chunks/bJX5vhEj.js +1 -0
  30. package/dashboard/build/client/_app/immutable/chunks/bJX5vhEj.js.br +0 -0
  31. package/dashboard/build/client/_app/immutable/chunks/bJX5vhEj.js.gz +0 -0
  32. package/dashboard/build/client/_app/immutable/chunks/gQDp4_Ul.js +1 -0
  33. package/dashboard/build/client/_app/immutable/chunks/gQDp4_Ul.js.br +0 -0
  34. package/dashboard/build/client/_app/immutable/chunks/gQDp4_Ul.js.gz +0 -0
  35. package/dashboard/build/client/_app/immutable/entry/app.D4j9hUjJ.js +2 -0
  36. package/dashboard/build/client/_app/immutable/entry/app.D4j9hUjJ.js.br +0 -0
  37. package/dashboard/build/client/_app/immutable/entry/app.D4j9hUjJ.js.gz +0 -0
  38. package/dashboard/build/client/_app/immutable/entry/start.D59wIHuS.js +1 -0
  39. package/dashboard/build/client/_app/immutable/entry/start.D59wIHuS.js.br +2 -0
  40. package/dashboard/build/client/_app/immutable/entry/start.D59wIHuS.js.gz +0 -0
  41. package/dashboard/build/client/_app/immutable/nodes/0.HocD0HAQ.js +1 -0
  42. package/dashboard/build/client/_app/immutable/nodes/0.HocD0HAQ.js.br +0 -0
  43. package/dashboard/build/client/_app/immutable/nodes/0.HocD0HAQ.js.gz +0 -0
  44. package/dashboard/build/client/_app/immutable/nodes/1.xo_a-jPh.js +1 -0
  45. package/dashboard/build/client/_app/immutable/nodes/1.xo_a-jPh.js.br +0 -0
  46. package/dashboard/build/client/_app/immutable/nodes/1.xo_a-jPh.js.gz +0 -0
  47. package/dashboard/build/client/_app/immutable/nodes/2.BwywD4n3.js +1 -0
  48. package/dashboard/build/client/_app/immutable/nodes/2.BwywD4n3.js.br +0 -0
  49. package/dashboard/build/client/_app/immutable/nodes/2.BwywD4n3.js.gz +0 -0
  50. package/dashboard/build/client/_app/immutable/nodes/3.BGY0bNfC.js +1 -0
  51. package/dashboard/build/client/_app/immutable/nodes/3.BGY0bNfC.js.br +0 -0
  52. package/dashboard/build/client/_app/immutable/nodes/3.BGY0bNfC.js.gz +0 -0
  53. package/dashboard/build/client/_app/immutable/nodes/4.C7uIivCS.js +1 -0
  54. package/dashboard/build/client/_app/immutable/nodes/4.C7uIivCS.js.br +0 -0
  55. package/dashboard/build/client/_app/immutable/nodes/4.C7uIivCS.js.gz +0 -0
  56. package/dashboard/build/client/_app/immutable/nodes/5.YszfczJW.js +1 -0
  57. package/dashboard/build/client/_app/immutable/nodes/5.YszfczJW.js.br +0 -0
  58. package/dashboard/build/client/_app/immutable/nodes/5.YszfczJW.js.gz +0 -0
  59. package/dashboard/build/client/_app/immutable/nodes/6.7fhKcbBK.js +1 -0
  60. package/dashboard/build/client/_app/immutable/nodes/6.7fhKcbBK.js.br +0 -0
  61. package/dashboard/build/client/_app/immutable/nodes/6.7fhKcbBK.js.gz +0 -0
  62. package/dashboard/build/client/_app/version.json +1 -0
  63. package/dashboard/build/client/_app/version.json.br +0 -0
  64. package/dashboard/build/client/_app/version.json.gz +0 -0
  65. package/dashboard/build/env.js +94 -0
  66. package/dashboard/build/handler.js +1494 -0
  67. package/dashboard/build/index.js +345 -0
  68. package/dashboard/build/server/chunks/0-DUUsxI66.js +40 -0
  69. package/dashboard/build/server/chunks/0-DUUsxI66.js.map +1 -0
  70. package/dashboard/build/server/chunks/1-BDkdOGL6.js +9 -0
  71. package/dashboard/build/server/chunks/1-BDkdOGL6.js.map +1 -0
  72. package/dashboard/build/server/chunks/2-BLt1vNET.js +51 -0
  73. package/dashboard/build/server/chunks/2-BLt1vNET.js.map +1 -0
  74. package/dashboard/build/server/chunks/3-B-4sxMk4.js +41 -0
  75. package/dashboard/build/server/chunks/3-B-4sxMk4.js.map +1 -0
  76. package/dashboard/build/server/chunks/4-CRZIwHJO.js +39 -0
  77. package/dashboard/build/server/chunks/4-CRZIwHJO.js.map +1 -0
  78. package/dashboard/build/server/chunks/5-CwiVOtz6.js +30 -0
  79. package/dashboard/build/server/chunks/5-CwiVOtz6.js.map +1 -0
  80. package/dashboard/build/server/chunks/6-mID2_gX2.js +53 -0
  81. package/dashboard/build/server/chunks/6-mID2_gX2.js.map +1 -0
  82. package/dashboard/build/server/chunks/_layout.svelte-DeOKequ-.js +31 -0
  83. package/dashboard/build/server/chunks/_layout.svelte-DeOKequ-.js.map +1 -0
  84. package/dashboard/build/server/chunks/_page.svelte-BGS-bwra.js +65 -0
  85. package/dashboard/build/server/chunks/_page.svelte-BGS-bwra.js.map +1 -0
  86. package/dashboard/build/server/chunks/_page.svelte-BiRjdIbl.js +35 -0
  87. package/dashboard/build/server/chunks/_page.svelte-BiRjdIbl.js.map +1 -0
  88. package/dashboard/build/server/chunks/_page.svelte-C_NO0kPy.js +49 -0
  89. package/dashboard/build/server/chunks/_page.svelte-C_NO0kPy.js.map +1 -0
  90. package/dashboard/build/server/chunks/_page.svelte-DvSQBjcA.js +80 -0
  91. package/dashboard/build/server/chunks/_page.svelte-DvSQBjcA.js.map +1 -0
  92. package/dashboard/build/server/chunks/_page.svelte-ZUq8J-ew.js +33 -0
  93. package/dashboard/build/server/chunks/_page.svelte-ZUq8J-ew.js.map +1 -0
  94. package/dashboard/build/server/chunks/error.svelte-DJ3O9Tia.js +12 -0
  95. package/dashboard/build/server/chunks/error.svelte-DJ3O9Tia.js.map +1 -0
  96. package/dashboard/build/server/chunks/exports-BnaAAAnL.js +3262 -0
  97. package/dashboard/build/server/chunks/exports-BnaAAAnL.js.map +1 -0
  98. package/dashboard/build/server/chunks/index-DwR_KaNY.js +44 -0
  99. package/dashboard/build/server/chunks/index-DwR_KaNY.js.map +1 -0
  100. package/dashboard/build/server/chunks/index-lhTMmBNn.js +207 -0
  101. package/dashboard/build/server/chunks/index-lhTMmBNn.js.map +1 -0
  102. package/dashboard/build/server/chunks/queries-DGWi-KlP.js +198 -0
  103. package/dashboard/build/server/chunks/queries-DGWi-KlP.js.map +1 -0
  104. package/dashboard/build/server/chunks/renderer-DdMvhZZr.js +1930 -0
  105. package/dashboard/build/server/chunks/renderer-DdMvhZZr.js.map +1 -0
  106. package/dashboard/build/server/index.js +5911 -0
  107. package/dashboard/build/server/index.js.map +1 -0
  108. package/dashboard/build/server/manifest.js +78 -0
  109. package/dashboard/build/server/manifest.js.map +1 -0
  110. package/dashboard/build/shims.js +32 -0
  111. package/dashboard/package.json +29 -0
  112. package/dashboard/svelte.config.js +15 -0
  113. package/dist/bin/helm.d.ts +2 -0
  114. package/dist/bin/helm.js +167 -0
  115. package/dist/bin/helm.js.map +1 -0
  116. package/dist/server/src/banner.d.ts +1 -0
  117. package/dist/server/src/banner.js +34 -0
  118. package/dist/server/src/banner.js.map +1 -0
  119. package/dist/server/src/config/load.d.ts +14 -0
  120. package/dist/server/src/config/load.js +43 -0
  121. package/dist/server/src/config/load.js.map +1 -0
  122. package/dist/server/src/dashboard.d.ts +5 -0
  123. package/dist/server/src/dashboard.js +79 -0
  124. package/dist/server/src/dashboard.js.map +1 -0
  125. package/dist/server/src/db/bootstrap.d.ts +2 -0
  126. package/dist/server/src/db/bootstrap.js +106 -0
  127. package/dist/server/src/db/bootstrap.js.map +1 -0
  128. package/dist/server/src/db/client.d.ts +14 -0
  129. package/dist/server/src/db/client.js +32 -0
  130. package/dist/server/src/db/client.js.map +1 -0
  131. package/dist/server/src/db/open-project.d.ts +17 -0
  132. package/dist/server/src/db/open-project.js +27 -0
  133. package/dist/server/src/db/open-project.js.map +1 -0
  134. package/dist/server/src/db/open-repo.d.ts +8 -0
  135. package/dist/server/src/db/open-repo.js +45 -0
  136. package/dist/server/src/db/open-repo.js.map +1 -0
  137. package/dist/server/src/db/pg-bootstrap.d.ts +4 -0
  138. package/dist/server/src/db/pg-bootstrap.js +106 -0
  139. package/dist/server/src/db/pg-bootstrap.js.map +1 -0
  140. package/dist/server/src/db/pg-client.d.ts +10 -0
  141. package/dist/server/src/db/pg-client.js +42 -0
  142. package/dist/server/src/db/pg-client.js.map +1 -0
  143. package/dist/server/src/db/repo-pg.d.ts +3 -0
  144. package/dist/server/src/db/repo-pg.js +245 -0
  145. package/dist/server/src/db/repo-pg.js.map +1 -0
  146. package/dist/server/src/db/repo-sqlite.d.ts +3 -0
  147. package/dist/server/src/db/repo-sqlite.js +224 -0
  148. package/dist/server/src/db/repo-sqlite.js.map +1 -0
  149. package/dist/server/src/db/repo.d.ts +54 -0
  150. package/dist/server/src/db/repo.js +2 -0
  151. package/dist/server/src/db/repo.js.map +1 -0
  152. package/dist/server/src/db/schema-pg.d.ts +2712 -0
  153. package/dist/server/src/db/schema-pg.js +107 -0
  154. package/dist/server/src/db/schema-pg.js.map +1 -0
  155. package/dist/server/src/db/schema.d.ts +2721 -0
  156. package/dist/server/src/db/schema.js +107 -0
  157. package/dist/server/src/db/schema.js.map +1 -0
  158. package/dist/server/src/events/emit.d.ts +21 -0
  159. package/dist/server/src/events/emit.js +17 -0
  160. package/dist/server/src/events/emit.js.map +1 -0
  161. package/dist/server/src/http/server.d.ts +10 -0
  162. package/dist/server/src/http/server.js +119 -0
  163. package/dist/server/src/http/server.js.map +1 -0
  164. package/dist/server/src/index.d.ts +2 -0
  165. package/dist/server/src/index.js +13 -0
  166. package/dist/server/src/index.js.map +1 -0
  167. package/dist/server/src/init.d.ts +12 -0
  168. package/dist/server/src/init.js +59 -0
  169. package/dist/server/src/init.js.map +1 -0
  170. package/dist/server/src/install.d.ts +8 -0
  171. package/dist/server/src/install.js +100 -0
  172. package/dist/server/src/install.js.map +1 -0
  173. package/dist/server/src/project/bootstrap.d.ts +9 -0
  174. package/dist/server/src/project/bootstrap.js +83 -0
  175. package/dist/server/src/project/bootstrap.js.map +1 -0
  176. package/dist/server/src/project/detect.d.ts +10 -0
  177. package/dist/server/src/project/detect.js +82 -0
  178. package/dist/server/src/project/detect.js.map +1 -0
  179. package/dist/server/src/project/identity.d.ts +8 -0
  180. package/dist/server/src/project/identity.js +42 -0
  181. package/dist/server/src/project/identity.js.map +1 -0
  182. package/dist/server/src/server.d.ts +8 -0
  183. package/dist/server/src/server.js +22 -0
  184. package/dist/server/src/server.js.map +1 -0
  185. package/dist/server/src/tools/debt.d.ts +2 -0
  186. package/dist/server/src/tools/debt.js +88 -0
  187. package/dist/server/src/tools/debt.js.map +1 -0
  188. package/dist/server/src/tools/decision.d.ts +2 -0
  189. package/dist/server/src/tools/decision.js +39 -0
  190. package/dist/server/src/tools/decision.js.map +1 -0
  191. package/dist/server/src/tools/epic.d.ts +2 -0
  192. package/dist/server/src/tools/epic.js +95 -0
  193. package/dist/server/src/tools/epic.js.map +1 -0
  194. package/dist/server/src/tools/index.d.ts +3 -0
  195. package/dist/server/src/tools/index.js +21 -0
  196. package/dist/server/src/tools/index.js.map +1 -0
  197. package/dist/server/src/tools/nelson.d.ts +2 -0
  198. package/dist/server/src/tools/nelson.js +28 -0
  199. package/dist/server/src/tools/nelson.js.map +1 -0
  200. package/dist/server/src/tools/progress.d.ts +2 -0
  201. package/dist/server/src/tools/progress.js +45 -0
  202. package/dist/server/src/tools/progress.js.map +1 -0
  203. package/dist/server/src/tools/sprint.d.ts +2 -0
  204. package/dist/server/src/tools/sprint.js +98 -0
  205. package/dist/server/src/tools/sprint.js.map +1 -0
  206. package/dist/server/src/tools/status.d.ts +2 -0
  207. package/dist/server/src/tools/status.js +31 -0
  208. package/dist/server/src/tools/status.js.map +1 -0
  209. package/dist/server/src/tools/story.d.ts +2 -0
  210. package/dist/server/src/tools/story.js +155 -0
  211. package/dist/server/src/tools/story.js.map +1 -0
  212. package/dist/server/src/tools/task.d.ts +2 -0
  213. package/dist/server/src/tools/task.js +90 -0
  214. package/dist/server/src/tools/task.js.map +1 -0
  215. package/dist/server/src/tools/types.d.ts +15 -0
  216. package/dist/server/src/tools/types.js +11 -0
  217. package/dist/server/src/tools/types.js.map +1 -0
  218. package/dist/server/src/util/git.d.ts +8 -0
  219. package/dist/server/src/util/git.js +51 -0
  220. package/dist/server/src/util/git.js.map +1 -0
  221. package/dist/server/src/util/ids.d.ts +2 -0
  222. package/dist/server/src/util/ids.js +8 -0
  223. package/dist/server/src/util/ids.js.map +1 -0
  224. package/dist/server/src/util/paths.d.ts +2 -0
  225. package/dist/server/src/util/paths.js +9 -0
  226. package/dist/server/src/util/paths.js.map +1 -0
  227. package/dist/server/src/worker/client.d.ts +12 -0
  228. package/dist/server/src/worker/client.js +89 -0
  229. package/dist/server/src/worker/client.js.map +1 -0
  230. package/dist/server/src/worker/hook.d.ts +1 -0
  231. package/dist/server/src/worker/hook.js +36 -0
  232. package/dist/server/src/worker/hook.js.map +1 -0
  233. package/dist/server/src/worker/ingest.d.ts +14 -0
  234. package/dist/server/src/worker/ingest.js +86 -0
  235. package/dist/server/src/worker/ingest.js.map +1 -0
  236. package/dist/server/src/worker/markers/any-type.d.ts +6 -0
  237. package/dist/server/src/worker/markers/any-type.js +19 -0
  238. package/dist/server/src/worker/markers/any-type.js.map +1 -0
  239. package/dist/server/src/worker/markers/debt.d.ts +11 -0
  240. package/dist/server/src/worker/markers/debt.js +53 -0
  241. package/dist/server/src/worker/markers/debt.js.map +1 -0
  242. package/dist/server/src/worker/markers/file-size.d.ts +5 -0
  243. package/dist/server/src/worker/markers/file-size.js +32 -0
  244. package/dist/server/src/worker/markers/file-size.js.map +1 -0
  245. package/dist/server/src/worker/scanner.d.ts +23 -0
  246. package/dist/server/src/worker/scanner.js +23 -0
  247. package/dist/server/src/worker/scanner.js.map +1 -0
  248. package/dist/server/src/worker/server.d.ts +1 -0
  249. package/dist/server/src/worker/server.js +137 -0
  250. package/dist/server/src/worker/server.js.map +1 -0
  251. package/dist/server/src/worker/socket.d.ts +3 -0
  252. package/dist/server/src/worker/socket.js +12 -0
  253. package/dist/server/src/worker/socket.js.map +1 -0
  254. package/hooks/hooks.json +33 -0
  255. package/package.json +56 -0
  256. package/skills/backlog/SKILL.md +18 -0
  257. package/skills/debt/SKILL.md +39 -0
  258. package/skills/epic/SKILL.md +22 -0
  259. package/skills/nelson-integration/SKILL.md +44 -0
  260. package/skills/project-tracker/SKILL.md +60 -0
  261. package/skills/review/SKILL.md +27 -0
  262. package/skills/sprint/SKILL.md +23 -0
  263. package/skills/story/SKILL.md +29 -0
@@ -0,0 +1,224 @@
1
+ import { and, desc, eq, isNull, ne, sql } from "drizzle-orm";
2
+ import { decision, developer, epic, progressEvent, project, sprint, story, task, techDebt, } from "./schema.js";
3
+ export function makeSqliteRepo(db) {
4
+ return {
5
+ async findProjectBySlug(slug) {
6
+ const rows = await db.select().from(project).where(eq(project.slug, slug)).limit(1);
7
+ return rows[0] ?? null;
8
+ },
9
+ async insertProject(row) {
10
+ await db.insert(project).values(row);
11
+ },
12
+ async findDeveloperByHandle(projectId, handle) {
13
+ const rows = await db
14
+ .select()
15
+ .from(developer)
16
+ .where(and(eq(developer.projectId, projectId), eq(developer.handle, handle)))
17
+ .limit(1);
18
+ return rows[0] ?? null;
19
+ },
20
+ async insertDeveloper(row) {
21
+ await db.insert(developer).values(row);
22
+ },
23
+ async touchDeveloper(id, lastSeenAt) {
24
+ await db.update(developer).set({ lastSeenAt }).where(eq(developer.id, id));
25
+ },
26
+ async findDevelopersByProject(projectId) {
27
+ return db.select().from(developer).where(eq(developer.projectId, projectId)).orderBy(desc(developer.lastSeenAt));
28
+ },
29
+ async findActiveSprint(projectId) {
30
+ const rows = await db
31
+ .select()
32
+ .from(sprint)
33
+ .where(and(eq(sprint.projectId, projectId), eq(sprint.status, "active")))
34
+ .limit(1);
35
+ return rows[0] ?? null;
36
+ },
37
+ async findSprintById(id) {
38
+ const rows = await db.select().from(sprint).where(eq(sprint.id, id)).limit(1);
39
+ return rows[0] ?? null;
40
+ },
41
+ async findSprintsByProject(projectId) {
42
+ return db.select().from(sprint).where(eq(sprint.projectId, projectId)).orderBy(desc(sprint.startedAt));
43
+ },
44
+ async insertSprint(row) {
45
+ await db.insert(sprint).values(row);
46
+ },
47
+ async updateSprint(id, updates) {
48
+ await db.update(sprint).set(updates).where(eq(sprint.id, id));
49
+ },
50
+ async closeActiveSprints(projectId, endedAt) {
51
+ await db
52
+ .update(sprint)
53
+ .set({ status: "closed", endedAt })
54
+ .where(and(eq(sprint.projectId, projectId), eq(sprint.status, "active")));
55
+ },
56
+ async countSprintsByProject(projectId) {
57
+ const rows = await db.select({ c: sql `count(*)` }).from(sprint).where(eq(sprint.projectId, projectId));
58
+ return rows[0]?.c ?? 0;
59
+ },
60
+ async insertEpic(row) {
61
+ await db.insert(epic).values(row);
62
+ },
63
+ async updateEpic(id, updates) {
64
+ await db.update(epic).set(updates).where(eq(epic.id, id));
65
+ },
66
+ async findEpicsByProject(projectId) {
67
+ return db.select().from(epic).where(eq(epic.projectId, projectId)).orderBy(epic.priority);
68
+ },
69
+ async insertStory(row) {
70
+ await db.insert(story).values(row);
71
+ },
72
+ async updateStory(id, updates) {
73
+ await db.update(story).set(updates).where(eq(story.id, id));
74
+ },
75
+ async findStoryById(id) {
76
+ const rows = await db.select().from(story).where(eq(story.id, id)).limit(1);
77
+ return rows[0] ?? null;
78
+ },
79
+ async findStoriesInSprint(sprintId) {
80
+ return db.select().from(story).where(eq(story.sprintId, sprintId)).orderBy(story.priority);
81
+ },
82
+ async findStoriesInSprintNotDoneOrDropped(sprintId) {
83
+ return db
84
+ .select()
85
+ .from(story)
86
+ .where(and(eq(story.sprintId, sprintId), ne(story.status, "done"), ne(story.status, "dropped")));
87
+ },
88
+ async rolloverIncompleteStoriesToBacklog(sprintId) {
89
+ const incomplete = await db
90
+ .select({ id: story.id })
91
+ .from(story)
92
+ .where(and(eq(story.sprintId, sprintId), ne(story.status, "done"), ne(story.status, "dropped")));
93
+ if (incomplete.length === 0)
94
+ return 0;
95
+ await db
96
+ .update(story)
97
+ .set({ sprintId: null, status: "backlog" })
98
+ .where(and(eq(story.sprintId, sprintId), ne(story.status, "done"), ne(story.status, "dropped")));
99
+ return incomplete.length;
100
+ },
101
+ async findBacklogStories(projectId, limit) {
102
+ return db
103
+ .select()
104
+ .from(story)
105
+ .where(and(isNull(story.sprintId), eq(story.status, "backlog")))
106
+ .orderBy(sql `priority asc, created_at asc`)
107
+ .limit(limit);
108
+ },
109
+ async countStoriesInSprintByStatus(sprintId) {
110
+ const rows = await db
111
+ .select({ status: story.status, count: sql `count(*)` })
112
+ .from(story)
113
+ .where(eq(story.sprintId, sprintId))
114
+ .groupBy(story.status);
115
+ const out = {};
116
+ for (const r of rows)
117
+ out[r.status] = r.count;
118
+ return out;
119
+ },
120
+ async countBacklog(projectId) {
121
+ const rows = await db
122
+ .select({ c: sql `count(*)` })
123
+ .from(story)
124
+ .where(and(eq(story.status, "backlog"), isNull(story.sprintId)));
125
+ return rows[0]?.c ?? 0;
126
+ },
127
+ async countDoneStoriesInSprint(sprintId) {
128
+ const rows = await db
129
+ .select({ c: sql `count(*)` })
130
+ .from(story)
131
+ .where(and(eq(story.sprintId, sprintId), eq(story.status, "done")));
132
+ return rows[0]?.c ?? 0;
133
+ },
134
+ async insertTask(row) {
135
+ await db.insert(task).values(row);
136
+ },
137
+ async updateTask(id, updates) {
138
+ await db.update(task).set(updates).where(eq(task.id, id));
139
+ },
140
+ async insertDebt(row) {
141
+ await db.insert(techDebt).values(row);
142
+ },
143
+ async closeDebt(id, closedAt) {
144
+ await db.update(techDebt).set({ closedAt }).where(eq(techDebt.id, id));
145
+ },
146
+ async findOpenDebtByProject(projectId, limit) {
147
+ return db
148
+ .select()
149
+ .from(techDebt)
150
+ .where(and(eq(techDebt.projectId, projectId), isNull(techDebt.closedAt)))
151
+ .orderBy(sql `severity desc, opened_at desc`)
152
+ .limit(limit);
153
+ },
154
+ async findAllDebtByProject(projectId, limit) {
155
+ return db
156
+ .select()
157
+ .from(techDebt)
158
+ .where(eq(techDebt.projectId, projectId))
159
+ .orderBy(sql `closed_at is null desc, severity desc, opened_at desc`)
160
+ .limit(limit);
161
+ },
162
+ async findOpenDebtAtLocation(projectId, location) {
163
+ const rows = await db
164
+ .select()
165
+ .from(techDebt)
166
+ .where(and(eq(techDebt.projectId, projectId), eq(techDebt.location, location), isNull(techDebt.closedAt)))
167
+ .limit(1);
168
+ return rows[0] ?? null;
169
+ },
170
+ async countOpenDebtByProject(projectId) {
171
+ const rows = await db
172
+ .select({ c: sql `count(*)` })
173
+ .from(techDebt)
174
+ .where(and(eq(techDebt.projectId, projectId), isNull(techDebt.closedAt)));
175
+ return rows[0]?.c ?? 0;
176
+ },
177
+ async insertDecision(row) {
178
+ await db.insert(decision).values(row);
179
+ },
180
+ async findDecisionsByProject(projectId, limit) {
181
+ return db
182
+ .select()
183
+ .from(decision)
184
+ .where(eq(decision.projectId, projectId))
185
+ .orderBy(desc(decision.decidedAt))
186
+ .limit(limit);
187
+ },
188
+ async emitEvent(row) {
189
+ await db.insert(progressEvent).values(row);
190
+ },
191
+ async findRecentEvents(projectId, limit) {
192
+ return db
193
+ .select()
194
+ .from(progressEvent)
195
+ .where(eq(progressEvent.projectId, projectId))
196
+ .orderBy(desc(progressEvent.ts))
197
+ .limit(limit);
198
+ },
199
+ async findEventsForSprint(sprintId, limit) {
200
+ return db
201
+ .select()
202
+ .from(progressEvent)
203
+ .where(eq(progressEvent.sprintId, sprintId))
204
+ .orderBy(desc(progressEvent.ts))
205
+ .limit(limit);
206
+ },
207
+ async countEventsByKindInSprint(sprintId, kind) {
208
+ const rows = await db
209
+ .select({ c: sql `count(*)` })
210
+ .from(progressEvent)
211
+ .where(and(eq(progressEvent.sprintId, sprintId), eq(progressEvent.kind, kind)));
212
+ return rows[0]?.c ?? 0;
213
+ },
214
+ async findEventsByDeveloper(projectId, developerId, limit) {
215
+ return db
216
+ .select()
217
+ .from(progressEvent)
218
+ .where(and(eq(progressEvent.projectId, projectId), eq(progressEvent.developerId, developerId)))
219
+ .orderBy(desc(progressEvent.ts))
220
+ .limit(limit);
221
+ },
222
+ };
223
+ }
224
+ //# sourceMappingURL=repo-sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-sqlite.js","sourceRoot":"","sources":["../../../../server/src/db/repo-sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type { Project, Developer, Sprint, Epic, Story, Task, TechDebt, Decision, ProgressEvent } from "./schema.js";
2
+ export type EpicUpdate = Partial<Pick<Epic, "title" | "description" | "priority" | "status" | "targetSprintId">>;
3
+ export type StoryUpdate = Partial<Pick<Story, "title" | "description" | "acceptance" | "status" | "size" | "assigneeId" | "priority" | "epicId" | "sprintId" | "startedAt" | "completedAt">>;
4
+ export type TaskUpdate = Partial<Pick<Task, "title" | "status" | "assigneeId" | "blockedBy">>;
5
+ export type SprintUpdate = Partial<Pick<Sprint, "name" | "goal" | "status" | "endedAt" | "wipLimit">>;
6
+ export type StatusCounts = Record<string, number>;
7
+ export interface HelmRepo {
8
+ findProjectBySlug(slug: string): Promise<Project | null>;
9
+ insertProject(project: Project): Promise<void>;
10
+ findDeveloperByHandle(projectId: string, handle: string): Promise<Developer | null>;
11
+ insertDeveloper(developer: Developer): Promise<void>;
12
+ touchDeveloper(id: string, lastSeenAt: string): Promise<void>;
13
+ findDevelopersByProject(projectId: string): Promise<Developer[]>;
14
+ findActiveSprint(projectId: string): Promise<Sprint | null>;
15
+ findSprintById(id: string): Promise<Sprint | null>;
16
+ findSprintsByProject(projectId: string): Promise<Sprint[]>;
17
+ insertSprint(sprint: Sprint): Promise<void>;
18
+ updateSprint(id: string, updates: SprintUpdate): Promise<void>;
19
+ closeActiveSprints(projectId: string, endedAt: string): Promise<void>;
20
+ countSprintsByProject(projectId: string): Promise<number>;
21
+ insertEpic(epic: Epic): Promise<void>;
22
+ updateEpic(id: string, updates: EpicUpdate): Promise<void>;
23
+ findEpicsByProject(projectId: string): Promise<Epic[]>;
24
+ insertStory(story: Story): Promise<void>;
25
+ updateStory(id: string, updates: StoryUpdate): Promise<void>;
26
+ findStoryById(id: string): Promise<Story | null>;
27
+ findStoriesInSprint(sprintId: string): Promise<Story[]>;
28
+ findStoriesInSprintNotDoneOrDropped(sprintId: string): Promise<Story[]>;
29
+ rolloverIncompleteStoriesToBacklog(sprintId: string): Promise<number>;
30
+ findBacklogStories(projectId: string, limit: number): Promise<Story[]>;
31
+ countStoriesInSprintByStatus(sprintId: string): Promise<StatusCounts>;
32
+ countBacklog(projectId: string): Promise<number>;
33
+ countDoneStoriesInSprint(sprintId: string): Promise<number>;
34
+ insertTask(task: Task): Promise<void>;
35
+ updateTask(id: string, updates: TaskUpdate): Promise<void>;
36
+ insertDebt(debt: TechDebt): Promise<void>;
37
+ closeDebt(id: string, closedAt: string): Promise<void>;
38
+ findOpenDebtByProject(projectId: string, limit: number): Promise<TechDebt[]>;
39
+ findAllDebtByProject(projectId: string, limit: number): Promise<TechDebt[]>;
40
+ findOpenDebtAtLocation(projectId: string, location: string): Promise<TechDebt | null>;
41
+ countOpenDebtByProject(projectId: string): Promise<number>;
42
+ insertDecision(decision: Decision): Promise<void>;
43
+ findDecisionsByProject(projectId: string, limit: number): Promise<Decision[]>;
44
+ emitEvent(event: ProgressEvent): Promise<void>;
45
+ findRecentEvents(projectId: string, limit: number): Promise<ProgressEvent[]>;
46
+ findEventsForSprint(sprintId: string, limit: number): Promise<ProgressEvent[]>;
47
+ countEventsByKindInSprint(sprintId: string, kind: string): Promise<number>;
48
+ findEventsByDeveloper(projectId: string, developerId: string, limit: number): Promise<ProgressEvent[]>;
49
+ }
50
+ export interface RepoHandle {
51
+ readonly repo: HelmRepo;
52
+ readonly sync: (() => Promise<void>) | null;
53
+ readonly close: () => Promise<void>;
54
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo.js","sourceRoot":"","sources":["../../../../server/src/db/repo.ts"],"names":[],"mappings":""}