spec-cat 0.1.21 → 0.1.23

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 (139) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/_nuxt/{qt0TxNaY.js → -EMqkm_u.js} +1 -1
  3. package/.output/public/_nuxt/{N3ZxlKm3.js → BDd_kh9e.js} +1 -1
  4. package/.output/public/_nuxt/BJKzOiTU.js +1 -0
  5. package/.output/public/_nuxt/{DqNujSig.js → Bk4uZfKR.js} +1 -1
  6. package/.output/public/_nuxt/C9Qk2Hno.js +1 -0
  7. package/.output/public/_nuxt/CDLI67Cr.js +1 -0
  8. package/.output/public/_nuxt/CLPz4Oer.js +1 -0
  9. package/.output/public/_nuxt/CYVeOpC3.js +1 -0
  10. package/.output/public/_nuxt/CZbP5QXb.js +1 -0
  11. package/.output/public/_nuxt/DQtVbA-s.js +150 -0
  12. package/.output/public/_nuxt/DXWMFGmi.js +1 -0
  13. package/.output/public/_nuxt/DgiJut-o.js +1 -0
  14. package/.output/public/_nuxt/{DUodkQcr.js → FbKhJXKu.js} +3 -3
  15. package/.output/public/_nuxt/builds/latest.json +1 -1
  16. package/.output/public/_nuxt/builds/meta/53b5c409-86a8-4624-8a0f-5bf31ab82deb.json +1 -0
  17. package/.output/public/_nuxt/default.eSO6fRPf.css +1 -0
  18. package/.output/public/_nuxt/entry.BtencOYX.css +1 -0
  19. package/.output/public/_nuxt/useTheme.Dp77PlfC.css +1 -0
  20. package/.output/server/chunks/_/conversationStore.mjs +13 -1
  21. package/.output/server/chunks/_/conversationStore.mjs.map +1 -1
  22. package/.output/server/chunks/_/git.mjs +7 -6
  23. package/.output/server/chunks/_/git.mjs.map +1 -1
  24. package/.output/server/chunks/_/git2.mjs.map +1 -1
  25. package/.output/server/chunks/_/gitApiHelpers.mjs +43 -0
  26. package/.output/server/chunks/_/gitApiHelpers.mjs.map +1 -0
  27. package/.output/server/chunks/_/jobPersister.mjs +326 -0
  28. package/.output/server/chunks/_/jobPersister.mjs.map +1 -0
  29. package/.output/server/chunks/_/jobQueue.mjs +714 -0
  30. package/.output/server/chunks/_/jobQueue.mjs.map +1 -0
  31. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  32. package/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
  33. package/.output/server/chunks/nitro/nitro.mjs +693 -657
  34. package/.output/server/chunks/routes/_ws.mjs +133 -527
  35. package/.output/server/chunks/routes/_ws.mjs.map +1 -1
  36. package/.output/server/chunks/routes/api/git/branch-rename.post.mjs +5 -18
  37. package/.output/server/chunks/routes/api/git/branch-rename.post.mjs.map +1 -1
  38. package/.output/server/chunks/routes/api/git/branch.delete.mjs +5 -18
  39. package/.output/server/chunks/routes/api/git/branch.delete.mjs.map +1 -1
  40. package/.output/server/chunks/routes/api/git/branches.get.mjs +5 -18
  41. package/.output/server/chunks/routes/api/git/branches.get.mjs.map +1 -1
  42. package/.output/server/chunks/routes/api/git/checkout.post.mjs +5 -19
  43. package/.output/server/chunks/routes/api/git/checkout.post.mjs.map +1 -1
  44. package/.output/server/chunks/routes/api/git/cherry-pick.post.mjs +5 -18
  45. package/.output/server/chunks/routes/api/git/cherry-pick.post.mjs.map +1 -1
  46. package/.output/server/chunks/routes/api/git/clean.post.mjs +5 -19
  47. package/.output/server/chunks/routes/api/git/clean.post.mjs.map +1 -1
  48. package/.output/server/chunks/routes/api/git/commit/_id_.get.mjs +23 -26
  49. package/.output/server/chunks/routes/api/git/commit/_id_.get.mjs.map +1 -1
  50. package/.output/server/chunks/routes/api/git/commit.post.mjs +5 -19
  51. package/.output/server/chunks/routes/api/git/commit.post.mjs.map +1 -1
  52. package/.output/server/chunks/routes/api/git/diff.get.mjs +5 -24
  53. package/.output/server/chunks/routes/api/git/diff.get.mjs.map +1 -1
  54. package/.output/server/chunks/routes/api/git/fetch.post.mjs +5 -18
  55. package/.output/server/chunks/routes/api/git/fetch.post.mjs.map +1 -1
  56. package/.output/server/chunks/routes/api/git/file-diff.get.mjs +5 -24
  57. package/.output/server/chunks/routes/api/git/file-diff.get.mjs.map +1 -1
  58. package/.output/server/chunks/routes/api/git/graph.get.mjs +9 -20
  59. package/.output/server/chunks/routes/api/git/graph.get.mjs.map +1 -1
  60. package/.output/server/chunks/routes/api/git/log.get.mjs +5 -24
  61. package/.output/server/chunks/routes/api/git/log.get.mjs.map +1 -1
  62. package/.output/server/chunks/routes/api/git/merge-base.get.mjs +5 -24
  63. package/.output/server/chunks/routes/api/git/merge-base.get.mjs.map +1 -1
  64. package/.output/server/chunks/routes/api/git/merge.post.mjs +5 -18
  65. package/.output/server/chunks/routes/api/git/merge.post.mjs.map +1 -1
  66. package/.output/server/chunks/routes/api/git/pull.post.mjs +14 -26
  67. package/.output/server/chunks/routes/api/git/pull.post.mjs.map +1 -1
  68. package/.output/server/chunks/routes/api/git/push.post.mjs +15 -27
  69. package/.output/server/chunks/routes/api/git/push.post.mjs.map +1 -1
  70. package/.output/server/chunks/routes/api/git/rebase.post.mjs +10 -22
  71. package/.output/server/chunks/routes/api/git/rebase.post.mjs.map +1 -1
  72. package/.output/server/chunks/routes/api/git/remote.delete.mjs +5 -18
  73. package/.output/server/chunks/routes/api/git/remote.delete.mjs.map +1 -1
  74. package/.output/server/chunks/routes/api/git/remote.post.mjs +10 -22
  75. package/.output/server/chunks/routes/api/git/remote.post.mjs.map +1 -1
  76. package/.output/server/chunks/routes/api/git/remote.put.mjs +5 -18
  77. package/.output/server/chunks/routes/api/git/remote.put.mjs.map +1 -1
  78. package/.output/server/chunks/routes/api/git/remotes.get.mjs +5 -18
  79. package/.output/server/chunks/routes/api/git/remotes.get.mjs.map +1 -1
  80. package/.output/server/chunks/routes/api/git/reset.post.mjs +12 -24
  81. package/.output/server/chunks/routes/api/git/reset.post.mjs.map +1 -1
  82. package/.output/server/chunks/routes/api/git/revert.post.mjs +5 -18
  83. package/.output/server/chunks/routes/api/git/revert.post.mjs.map +1 -1
  84. package/.output/server/chunks/routes/api/git/show.get.mjs +5 -24
  85. package/.output/server/chunks/routes/api/git/show.get.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/git/stage.post.mjs +9 -22
  87. package/.output/server/chunks/routes/api/git/stage.post.mjs.map +1 -1
  88. package/.output/server/chunks/routes/api/git/stash-apply.post.mjs +5 -19
  89. package/.output/server/chunks/routes/api/git/stash-apply.post.mjs.map +1 -1
  90. package/.output/server/chunks/routes/api/git/stash-branch.post.mjs +5 -19
  91. package/.output/server/chunks/routes/api/git/stash-branch.post.mjs.map +1 -1
  92. package/.output/server/chunks/routes/api/git/stash-drop.post.mjs +5 -19
  93. package/.output/server/chunks/routes/api/git/stash-drop.post.mjs.map +1 -1
  94. package/.output/server/chunks/routes/api/git/stash-pop.post.mjs +5 -19
  95. package/.output/server/chunks/routes/api/git/stash-pop.post.mjs.map +1 -1
  96. package/.output/server/chunks/routes/api/git/stash.get.mjs +5 -25
  97. package/.output/server/chunks/routes/api/git/stash.get.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/git/stash.post.mjs +5 -19
  99. package/.output/server/chunks/routes/api/git/stash.post.mjs.map +1 -1
  100. package/.output/server/chunks/routes/api/git/state.get.mjs +5 -25
  101. package/.output/server/chunks/routes/api/git/state.get.mjs.map +1 -1
  102. package/.output/server/chunks/routes/api/git/status.get.mjs +5 -25
  103. package/.output/server/chunks/routes/api/git/status.get.mjs.map +1 -1
  104. package/.output/server/chunks/routes/api/git/tag/_name_.get.mjs +5 -18
  105. package/.output/server/chunks/routes/api/git/tag/_name_.get.mjs.map +1 -1
  106. package/.output/server/chunks/routes/api/git/tag-push.post.mjs +10 -22
  107. package/.output/server/chunks/routes/api/git/tag-push.post.mjs.map +1 -1
  108. package/.output/server/chunks/routes/api/git/tag.delete.mjs +5 -18
  109. package/.output/server/chunks/routes/api/git/tag.delete.mjs.map +1 -1
  110. package/.output/server/chunks/routes/api/git/tag.post.mjs +17 -29
  111. package/.output/server/chunks/routes/api/git/tag.post.mjs.map +1 -1
  112. package/.output/server/chunks/routes/api/git/unstage.post.mjs +5 -19
  113. package/.output/server/chunks/routes/api/git/unstage.post.mjs.map +1 -1
  114. package/.output/server/chunks/routes/api/index.get.mjs +25 -14
  115. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  116. package/.output/server/chunks/routes/api/index.get2.mjs +14 -141
  117. package/.output/server/chunks/routes/api/index.get2.mjs.map +1 -1
  118. package/.output/server/chunks/routes/api/index.get3.mjs +167 -0
  119. package/.output/server/chunks/routes/api/index.get3.mjs.map +1 -0
  120. package/.output/server/chunks/routes/api/index.post.mjs +77 -116
  121. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  122. package/.output/server/chunks/routes/api/index.post2.mjs +149 -0
  123. package/.output/server/chunks/routes/api/index.post2.mjs.map +1 -0
  124. package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs +48 -0
  125. package/.output/server/chunks/routes/api/jobs/_id/cancel.post.mjs.map +1 -0
  126. package/.output/server/chunks/routes/api/jobs/_id_.get.mjs +55 -0
  127. package/.output/server/chunks/routes/api/jobs/_id_.get.mjs.map +1 -0
  128. package/.output/server/chunks/routes/api/repository/status.get.mjs +1 -1
  129. package/.output/server/package.json +1 -1
  130. package/package.json +1 -1
  131. package/.output/public/_nuxt/BIw1AQHU.js +0 -150
  132. package/.output/public/_nuxt/DBtLi_wJ.js +0 -1
  133. package/.output/public/_nuxt/DSDWvT5-.js +0 -1
  134. package/.output/public/_nuxt/K5rMM4le.js +0 -1
  135. package/.output/public/_nuxt/builds/meta/c0768eef-2dd5-410c-8648-edbd9e6c218c.json +0 -1
  136. package/.output/public/_nuxt/ddKcAgQK.js +0 -1
  137. package/.output/public/_nuxt/default.CZoNL3P_.css +0 -1
  138. package/.output/public/_nuxt/entry.DLBgeD7S.css +0 -1
  139. package/.output/public/_nuxt/sxXWehCn.js +0 -1
@@ -1,5 +1,6 @@
1
- import { d as defineEventHandler, b as readBody, e as getProjectDir, c as createError, l as logger } from '../../../nitro/nitro.mjs';
2
- import { a as isGitRepository, e as execGitArgs } from '../../../_/git.mjs';
1
+ import { d as defineEventHandler, l as logger } from '../../../nitro/nitro.mjs';
2
+ import { e as execGitArgs } from '../../../_/git.mjs';
3
+ import { r as resolveWorkingDirectoryFromBody, h as handleGitApiError } from '../../../_/gitApiHelpers.mjs';
3
4
  import 'node:http';
4
5
  import 'node:https';
5
6
  import 'node:crypto';
@@ -26,15 +27,7 @@ import 'util';
26
27
 
27
28
  const unstage_post = defineEventHandler(async (event) => {
28
29
  try {
29
- const body = await readBody(event);
30
- const workingDirectory = body.workingDirectory || getProjectDir();
31
- if (!isGitRepository(workingDirectory)) {
32
- throw createError({
33
- statusCode: 400,
34
- statusMessage: "Not a Git repository",
35
- data: { code: "NOT_GIT_REPO" }
36
- });
37
- }
30
+ const { workingDirectory, body } = await resolveWorkingDirectoryFromBody(event);
38
31
  if (body.files.length === 0) {
39
32
  execGitArgs(workingDirectory, ["reset", "HEAD"]);
40
33
  } else {
@@ -56,14 +49,7 @@ const unstage_post = defineEventHandler(async (event) => {
56
49
  });
57
50
  return { success: true, unstagedCount };
58
51
  } catch (error) {
59
- if (error && typeof error === "object" && "statusCode" in error) {
60
- throw error;
61
- }
62
- logger.api.error("Error unstaging files", { error });
63
- throw createError({
64
- statusCode: 500,
65
- statusMessage: "Failed to unstage files"
66
- });
52
+ handleGitApiError(error, "Error unstaging files", "Failed to unstage files");
67
53
  }
68
54
  });
69
55
 
@@ -1 +1 @@
1
- {"version":3,"file":"unstage.post.mjs","sources":["../../../../../../server/api/git/unstage.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,qBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AACA,IAAA,MAAA,gBAAA,GAAA,IAAA,CAAA,gBAAA,IAAA,aAAA,EAAA;AAEA,IAAA,IAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,sBAAA;AAAA,QACA,IAAA,EAAA,EAAA,IAAA,EAAA,cAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,IAAA,IAAA,CAAA,KAAA,CAAA,MAAA,KAAA,CAAA,EAAA;AAEA,MAAA,WAAA,CAAA,gBAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;AAAA,IACA,CAAA,MAAA;AAEA,MAAA,WAAA,CAAA,gBAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,eAAA,WAAA,CAAA,gBAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,CAAA;AACA,IAAA,MAAA,KAAA,GAAA,aAAA,IAAA,EAAA,CAAA,MAAA,IAAA,CAAA,CAAA,OAAA,OAAA,CAAA;AACA,IAAA,IAAA,aAAA,GAAA,CAAA;AACA,IAAA,KAAA,MAAA,QAAA,KAAA,EAAA;AACA,MAAA,MAAA,aAAA,GAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AACA,MAAA,MAAA,aAAA,GAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AACA,MAAA,IAAA,aAAA,KAAA,GAAA,IAAA,aAAA,KAAA,GAAA,EAAA;AACA,QAAA,aAAA,EAAA;AAAA,MACA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,GAAA,CAAA,KAAA,wBAAA,EAAA;AAAA,MACA,OAAA,IAAA,CAAA,KAAA,CAAA,MAAA,KAAA,CAAA,GAAA,QAAA,IAAA,CAAA,KAAA;AAAA,MACA;AAAA,KACA,CAAA;AAEA,IAAA,OAAA,EAAA,OAAA,EAAA,IAAA,EAAA,aAAA,EAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,IAAA,KAAA,IAAA,OAAA,KAAA,KAAA,QAAA,IAAA,gBAAA,KAAA,EAAA;AACA,MAAA,MAAA,KAAA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,uBAAA,EAAA,EAAA,OAAA,CAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"unstage.post.mjs","sources":["../../../../../../server/api/git/unstage.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,qBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,IAAA;AACA,IAAA,MAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,GAAA,MAAA,gCAAA,KAAA,CAAA;AAEA,IAAA,IAAA,IAAA,CAAA,KAAA,CAAA,MAAA,KAAA,CAAA,EAAA;AAEA,MAAA,WAAA,CAAA,gBAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,CAAA;AAAA,IACA,CAAA,MAAA;AAEA,MAAA,WAAA,CAAA,gBAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,GAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,IACA;AAGA,IAAA,MAAA,eAAA,WAAA,CAAA,gBAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,CAAA;AACA,IAAA,MAAA,KAAA,GAAA,aAAA,IAAA,EAAA,CAAA,MAAA,IAAA,CAAA,CAAA,OAAA,OAAA,CAAA;AACA,IAAA,IAAA,aAAA,GAAA,CAAA;AACA,IAAA,KAAA,MAAA,QAAA,KAAA,EAAA;AACA,MAAA,MAAA,aAAA,GAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AACA,MAAA,MAAA,aAAA,GAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AACA,MAAA,IAAA,aAAA,KAAA,GAAA,IAAA,aAAA,KAAA,GAAA,EAAA;AACA,QAAA,aAAA,EAAA;AAAA,MACA;AAAA,IACA;AAEA,IAAA,MAAA,CAAA,GAAA,CAAA,KAAA,wBAAA,EAAA;AAAA,MACA,OAAA,IAAA,CAAA,KAAA,CAAA,MAAA,KAAA,CAAA,GAAA,QAAA,IAAA,CAAA,KAAA;AAAA,MACA;AAAA,KACA,CAAA;AAEA,IAAA,OAAA,EAAA,OAAA,EAAA,IAAA,EAAA,aAAA,EAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,iBAAA,CAAA,KAAA,EAAA,yBAAA,yBAAA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,5 +1,5 @@
1
- import { d as defineEventHandler, e as getProjectDir } from '../../nitro/nitro.mjs';
2
- import { a as loadSkills } from '../../_/skillRegistry.mjs';
1
+ import { d as defineEventHandler, f as getQuery } from '../../nitro/nitro.mjs';
2
+ import { j as jobQueue } from '../../_/jobQueue.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
5
5
  import 'node:crypto';
@@ -21,20 +21,31 @@ import 'node:os';
21
21
  import 'node:module';
22
22
  import 'node:fs/promises';
23
23
  import 'node:url';
24
- import 'yaml';
24
+ import 'node:child_process';
25
+ import 'node:util';
26
+ import '../../_/aiProviderSelection.mjs';
27
+ import '../../_/aiProviderRegistry.mjs';
28
+ import '../../_/providerProcessError.mjs';
29
+ import '../../_/uiAdapter.mjs';
25
30
 
26
- const index_get = defineEventHandler(async () => {
27
- const projectDir = getProjectDir();
28
- const definitions = await loadSkills(projectDir);
29
- const skills = definitions.map(({ id, name, description, icon, prerequisites }) => ({
30
- id,
31
- name,
32
- description,
33
- icon,
34
- prerequisites
35
- }));
36
- return { skills };
31
+ const index_get = defineEventHandler((event) => {
32
+ const query = getQuery(event);
33
+ const conversationId = typeof query.conversationId === "string" ? query.conversationId : void 0;
34
+ if (conversationId) {
35
+ return jobQueue.listJobs(conversationId).map(serializeJob);
36
+ }
37
+ return jobQueue.listAllJobs().map(serializeJob);
37
38
  });
39
+ function serializeJob(job) {
40
+ return {
41
+ id: job.id,
42
+ conversationId: job.conversationId,
43
+ source: job.source,
44
+ status: job.status,
45
+ createdAt: job.createdAt,
46
+ eventCount: job.events.length
47
+ };
48
+ }
38
49
 
39
50
  export { index_get as default };
40
51
  //# sourceMappingURL=index.get.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.get.mjs","sources":["../../../../../server/api/skills/index.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,kBAAA,mBAAA,YAAA;AACA,EAAA,MAAA,aAAA,aAAA,EAAA;AAEA,EAAA,MAAA,WAAA,GAAA,MAAA,UAAA,CAAA,UAAA,CAAA;AAEA,EAAA,MAAA,MAAA,GAAA,WAAA,CAAA,GAAA,CAAA,CAAA,EAAA,IAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACA,CAAA,CAAA;AAEA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.get.mjs","sources":["../../../../../server/api/jobs/index.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,kBAAA,kBAAA,CAAA,CAAA,KAAA,KAAA;AACA,EAAA,MAAA,KAAA,GAAA,SAAA,KAAA,CAAA;AACA,EAAA,MAAA,iBAAA,OAAA,KAAA,CAAA,cAAA,KAAA,QAAA,GAAA,MAAA,cAAA,GAAA,MAAA;AAEA,EAAA,IAAA,cAAA,EAAA;AACA,IAAA,OAAA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,IAAA,YAAA,CAAA;AAAA,EACA;AAEA,EAAA,OAAA,QAAA,CAAA,WAAA,EAAA,CAAA,GAAA,CAAA,YAAA,CAAA;AACA,CAAA,CAAA;AAEA,SAAA,aAAA,GAAA,EAAA;AACA,EAAA,OAAA;AAAA,IACA,IAAA,GAAA,CAAA,EAAA;AAAA,IACA,gBAAA,GAAA,CAAA,cAAA;AAAA,IACA,QAAA,GAAA,CAAA,MAAA;AAAA,IACA,QAAA,GAAA,CAAA,MAAA;AAAA,IACA,WAAA,GAAA,CAAA,SAAA;AAAA,IACA,UAAA,EAAA,IAAA,MAAA,CAAA;AAAA,GACA;AACA;;;;"}
@@ -1,6 +1,5 @@
1
- import { d as defineEventHandler, f as getQuery, e as getProjectDir, l as logger, c as createError } from '../../nitro/nitro.mjs';
2
- import { exec } from 'node:child_process';
3
- import { promisify } from 'node:util';
1
+ import { d as defineEventHandler, e as getProjectDir } from '../../nitro/nitro.mjs';
2
+ import { a as loadSkills } from '../../_/skillRegistry.mjs';
4
3
  import 'node:http';
5
4
  import 'node:https';
6
5
  import 'node:crypto';
@@ -22,145 +21,19 @@ import 'node:os';
22
21
  import 'node:module';
23
22
  import 'node:fs/promises';
24
23
  import 'node:url';
24
+ import 'yaml';
25
25
 
26
- const execAsync = promisify(exec);
27
- async function parseWorktreeList(projectPath) {
28
- const { stdout } = await execAsync("git worktree list --porcelain", {
29
- cwd: projectPath,
30
- maxBuffer: 50 * 1024 * 1024
31
- });
32
- const worktrees = [];
33
- let current = {};
34
- for (const line of stdout.split("\n")) {
35
- if (line.startsWith("worktree ")) {
36
- if (current.path) {
37
- worktrees.push(current);
38
- }
39
- current = {
40
- path: line.substring("worktree ".length),
41
- isLocked: false,
42
- isPrunable: false
43
- };
44
- } else if (line.startsWith("HEAD ")) {
45
- current.head = line.substring("HEAD ".length);
46
- } else if (line.startsWith("branch ")) {
47
- current.branch = line.substring("branch refs/heads/".length);
48
- } else if (line === "locked") {
49
- current.isLocked = true;
50
- } else if (line === "prunable") {
51
- current.isPrunable = true;
52
- } else if (line.startsWith("detached")) {
53
- current.branch = "(detached)";
54
- }
55
- }
56
- if (current.path) {
57
- worktrees.push(current);
58
- }
59
- return worktrees;
60
- }
61
- async function getWorktreeStatus(worktreePath) {
62
- try {
63
- const { stdout: statusOutput } = await execAsync("git status --porcelain", {
64
- cwd: worktreePath
65
- });
66
- if (statusOutput.trim()) {
67
- return "dirty";
68
- }
69
- try {
70
- const { stdout: revList } = await execAsync(
71
- 'git rev-list --left-right --count HEAD...origin/main 2>/dev/null || git rev-list --left-right --count HEAD...main 2>/dev/null || echo "0 0"',
72
- { cwd: worktreePath }
73
- );
74
- const [ahead, behind] = revList.trim().split(/\s+/).map(Number);
75
- if (ahead > 0 && behind > 0) return "diverged";
76
- if (ahead > 0) return "ahead";
77
- if (behind > 0) return "behind";
78
- } catch {
79
- }
80
- return "clean";
81
- } catch {
82
- return "clean";
83
- }
84
- }
85
- async function getLastCommit(worktreePath) {
86
- try {
87
- const format = "%H|||%h|||%s|||%an|||%ar";
88
- const { stdout } = await execAsync(`git log -1 --format="${format}"`, {
89
- cwd: worktreePath
90
- });
91
- const [hash, shortHash, message, author, date] = stdout.trim().split("|||");
92
- return { hash, shortHash, message, author, date };
93
- } catch {
94
- return void 0;
95
- }
96
- }
97
- async function getCommitCount(worktreePath) {
98
- try {
99
- const { stdout } = await execAsync(
100
- 'git rev-list --count HEAD ^main 2>/dev/null || git rev-list --count HEAD ^origin/main 2>/dev/null || echo "0"',
101
- { cwd: worktreePath }
102
- );
103
- return parseInt(stdout.trim(), 10) || 0;
104
- } catch {
105
- return 0;
106
- }
107
- }
108
- async function getCurrentBranch(projectPath) {
109
- try {
110
- const { stdout } = await execAsync("git rev-parse --abbrev-ref HEAD", {
111
- cwd: projectPath
112
- });
113
- return stdout.trim();
114
- } catch {
115
- return "main";
116
- }
117
- }
118
- const index_get = defineEventHandler(async (event) => {
119
- var _a;
120
- const query = getQuery(event);
121
- const workingDirectory = query.workingDirectory || getProjectDir();
122
- logger.api.info("Listing worktrees", { workingDirectory });
123
- try {
124
- const rawWorktrees = await parseWorktreeList(workingDirectory);
125
- const currentBranch = await getCurrentBranch(workingDirectory);
126
- const mainWorktree = ((_a = rawWorktrees[0]) == null ? void 0 : _a.path) || workingDirectory;
127
- const worktrees = await Promise.all(
128
- rawWorktrees.map(async (raw, index) => {
129
- const isMain = index === 0;
130
- const isCurrent = raw.branch === currentBranch;
131
- const name = raw.branch || raw.path.split("/").pop() || "unknown";
132
- const [status, lastCommit, commitCount] = await Promise.all([
133
- getWorktreeStatus(raw.path),
134
- getLastCommit(raw.path),
135
- isMain ? Promise.resolve(0) : getCommitCount(raw.path)
136
- ]);
137
- return {
138
- name,
139
- path: raw.path,
140
- branch: raw.branch || "(detached)",
141
- isMain,
142
- isCurrent,
143
- isLocked: raw.isLocked,
144
- status,
145
- commitCount,
146
- lastCommit
147
- };
148
- })
149
- );
150
- return {
151
- worktrees,
152
- currentBranch,
153
- mainWorktree
154
- };
155
- } catch (error) {
156
- logger.api.error("Failed to list worktrees", {
157
- error: error instanceof Error ? error.message : String(error)
158
- });
159
- throw createError({
160
- statusCode: 500,
161
- message: "Failed to list worktrees"
162
- });
163
- }
26
+ const index_get = defineEventHandler(async () => {
27
+ const projectDir = getProjectDir();
28
+ const definitions = await loadSkills(projectDir);
29
+ const skills = definitions.map(({ id, name, description, icon, prerequisites }) => ({
30
+ id,
31
+ name,
32
+ description,
33
+ icon,
34
+ prerequisites
35
+ }));
36
+ return { skills };
164
37
  });
165
38
 
166
39
  export { index_get as default };
@@ -1 +1 @@
1
- {"version":3,"file":"index.get2.mjs","sources":["../../../../../server/api/worktrees/index.get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.get2.mjs","sources":["../../../../../server/api/skills/index.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,kBAAA,mBAAA,YAAA;AACA,EAAA,MAAA,aAAA,aAAA,EAAA;AAEA,EAAA,MAAA,WAAA,GAAA,MAAA,UAAA,CAAA,UAAA,CAAA;AAEA,EAAA,MAAA,MAAA,GAAA,WAAA,CAAA,GAAA,CAAA,CAAA,EAAA,IAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACA,CAAA,CAAA;AAEA,EAAA,OAAA,EAAA,MAAA,EAAA;AACA,CAAA,CAAA;;;;"}
@@ -0,0 +1,167 @@
1
+ import { d as defineEventHandler, f as getQuery, e as getProjectDir, l as logger, c as createError } from '../../nitro/nitro.mjs';
2
+ import { exec } from 'node:child_process';
3
+ import { promisify } from 'node:util';
4
+ import 'node:http';
5
+ import 'node:https';
6
+ import 'node:crypto';
7
+ import 'stream';
8
+ import 'events';
9
+ import 'http';
10
+ import 'crypto';
11
+ import 'buffer';
12
+ import 'zlib';
13
+ import 'https';
14
+ import 'net';
15
+ import 'tls';
16
+ import 'url';
17
+ import 'node:events';
18
+ import 'node:buffer';
19
+ import 'node:fs';
20
+ import 'node:path';
21
+ import 'node:os';
22
+ import 'node:module';
23
+ import 'node:fs/promises';
24
+ import 'node:url';
25
+
26
+ const execAsync = promisify(exec);
27
+ async function parseWorktreeList(projectPath) {
28
+ const { stdout } = await execAsync("git worktree list --porcelain", {
29
+ cwd: projectPath,
30
+ maxBuffer: 50 * 1024 * 1024
31
+ });
32
+ const worktrees = [];
33
+ let current = {};
34
+ for (const line of stdout.split("\n")) {
35
+ if (line.startsWith("worktree ")) {
36
+ if (current.path) {
37
+ worktrees.push(current);
38
+ }
39
+ current = {
40
+ path: line.substring("worktree ".length),
41
+ isLocked: false,
42
+ isPrunable: false
43
+ };
44
+ } else if (line.startsWith("HEAD ")) {
45
+ current.head = line.substring("HEAD ".length);
46
+ } else if (line.startsWith("branch ")) {
47
+ current.branch = line.substring("branch refs/heads/".length);
48
+ } else if (line === "locked") {
49
+ current.isLocked = true;
50
+ } else if (line === "prunable") {
51
+ current.isPrunable = true;
52
+ } else if (line.startsWith("detached")) {
53
+ current.branch = "(detached)";
54
+ }
55
+ }
56
+ if (current.path) {
57
+ worktrees.push(current);
58
+ }
59
+ return worktrees;
60
+ }
61
+ async function getWorktreeStatus(worktreePath) {
62
+ try {
63
+ const { stdout: statusOutput } = await execAsync("git status --porcelain", {
64
+ cwd: worktreePath
65
+ });
66
+ if (statusOutput.trim()) {
67
+ return "dirty";
68
+ }
69
+ try {
70
+ const { stdout: revList } = await execAsync(
71
+ 'git rev-list --left-right --count HEAD...origin/main 2>/dev/null || git rev-list --left-right --count HEAD...main 2>/dev/null || echo "0 0"',
72
+ { cwd: worktreePath }
73
+ );
74
+ const [ahead, behind] = revList.trim().split(/\s+/).map(Number);
75
+ if (ahead > 0 && behind > 0) return "diverged";
76
+ if (ahead > 0) return "ahead";
77
+ if (behind > 0) return "behind";
78
+ } catch {
79
+ }
80
+ return "clean";
81
+ } catch {
82
+ return "clean";
83
+ }
84
+ }
85
+ async function getLastCommit(worktreePath) {
86
+ try {
87
+ const format = "%H|||%h|||%s|||%an|||%ar";
88
+ const { stdout } = await execAsync(`git log -1 --format="${format}"`, {
89
+ cwd: worktreePath
90
+ });
91
+ const [hash, shortHash, message, author, date] = stdout.trim().split("|||");
92
+ return { hash, shortHash, message, author, date };
93
+ } catch {
94
+ return void 0;
95
+ }
96
+ }
97
+ async function getCommitCount(worktreePath) {
98
+ try {
99
+ const { stdout } = await execAsync(
100
+ 'git rev-list --count HEAD ^main 2>/dev/null || git rev-list --count HEAD ^origin/main 2>/dev/null || echo "0"',
101
+ { cwd: worktreePath }
102
+ );
103
+ return parseInt(stdout.trim(), 10) || 0;
104
+ } catch {
105
+ return 0;
106
+ }
107
+ }
108
+ async function getCurrentBranch(projectPath) {
109
+ try {
110
+ const { stdout } = await execAsync("git rev-parse --abbrev-ref HEAD", {
111
+ cwd: projectPath
112
+ });
113
+ return stdout.trim();
114
+ } catch {
115
+ return "main";
116
+ }
117
+ }
118
+ const index_get = defineEventHandler(async (event) => {
119
+ var _a;
120
+ const query = getQuery(event);
121
+ const workingDirectory = query.workingDirectory || getProjectDir();
122
+ logger.api.info("Listing worktrees", { workingDirectory });
123
+ try {
124
+ const rawWorktrees = await parseWorktreeList(workingDirectory);
125
+ const currentBranch = await getCurrentBranch(workingDirectory);
126
+ const mainWorktree = ((_a = rawWorktrees[0]) == null ? void 0 : _a.path) || workingDirectory;
127
+ const worktrees = await Promise.all(
128
+ rawWorktrees.map(async (raw, index) => {
129
+ const isMain = index === 0;
130
+ const isCurrent = raw.branch === currentBranch;
131
+ const name = raw.branch || raw.path.split("/").pop() || "unknown";
132
+ const [status, lastCommit, commitCount] = await Promise.all([
133
+ getWorktreeStatus(raw.path),
134
+ getLastCommit(raw.path),
135
+ isMain ? Promise.resolve(0) : getCommitCount(raw.path)
136
+ ]);
137
+ return {
138
+ name,
139
+ path: raw.path,
140
+ branch: raw.branch || "(detached)",
141
+ isMain,
142
+ isCurrent,
143
+ isLocked: raw.isLocked,
144
+ status,
145
+ commitCount,
146
+ lastCommit
147
+ };
148
+ })
149
+ );
150
+ return {
151
+ worktrees,
152
+ currentBranch,
153
+ mainWorktree
154
+ };
155
+ } catch (error) {
156
+ logger.api.error("Failed to list worktrees", {
157
+ error: error instanceof Error ? error.message : String(error)
158
+ });
159
+ throw createError({
160
+ statusCode: 500,
161
+ message: "Failed to list worktrees"
162
+ });
163
+ }
164
+ });
165
+
166
+ export { index_get as default };
167
+ //# sourceMappingURL=index.get3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.get3.mjs","sources":["../../../../../server/api/worktrees/index.get.ts"],"names":[],"mappings":"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"}