devchain-cli 0.9.1 → 0.10.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 (353) hide show
  1. package/dist/cli.js +985 -194
  2. package/dist/drizzle/0042_nice_flatman.sql +10 -0
  3. package/dist/drizzle/0043_majestic_starhawk.sql +10 -0
  4. package/dist/drizzle/0044_supreme_joshua_kane.sql +57 -0
  5. package/dist/drizzle/0045_provider_auto_compact_threshold.sql +11 -0
  6. package/dist/drizzle/0046_worktrees_owner_project_id.sql +3 -0
  7. package/dist/drizzle/meta/0042_snapshot.json +4171 -0
  8. package/dist/drizzle/meta/0043_snapshot.json +4231 -0
  9. package/dist/drizzle/meta/0044_snapshot.json +4620 -0
  10. package/dist/drizzle/meta/_journal.json +35 -0
  11. package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts +18 -0
  12. package/dist/node_modules/@devchain/shared/schemas/export-schema.d.ts.map +1 -1
  13. package/dist/node_modules/@devchain/shared/schemas/export-schema.js +6 -0
  14. package/dist/node_modules/@devchain/shared/schemas/export-schema.js.map +1 -1
  15. package/dist/node_modules/@devchain/shared/tsconfig.tsbuildinfo +1 -1
  16. package/dist/server/app.main.module.d.ts +4 -0
  17. package/dist/server/app.main.module.js +102 -0
  18. package/dist/server/app.main.module.js.map +1 -0
  19. package/dist/server/app.module.d.ts +1 -4
  20. package/dist/server/app.module.js +2 -78
  21. package/dist/server/app.module.js.map +1 -1
  22. package/dist/server/app.normal.module.d.ts +4 -0
  23. package/dist/server/app.normal.module.js +90 -0
  24. package/dist/server/app.normal.module.js.map +1 -0
  25. package/dist/server/common/config/env.config.d.ts +81 -1
  26. package/dist/server/common/config/env.config.js +52 -2
  27. package/dist/server/common/config/env.config.js.map +1 -1
  28. package/dist/server/common/templates-directory.d.ts +8 -0
  29. package/dist/server/common/templates-directory.js +56 -0
  30. package/dist/server/common/templates-directory.js.map +1 -0
  31. package/dist/server/main.js +58 -7
  32. package/dist/server/main.js.map +1 -1
  33. package/dist/server/modules/chat/dtos/chat.dto.d.ts +2 -2
  34. package/dist/server/modules/core/controllers/health.controller.d.ts +4 -0
  35. package/dist/server/modules/core/controllers/health.controller.js +22 -1
  36. package/dist/server/modules/core/controllers/health.controller.js.map +1 -1
  37. package/dist/server/modules/core/controllers/runtime.controller.d.ts +18 -0
  38. package/dist/server/modules/core/controllers/runtime.controller.js +130 -0
  39. package/dist/server/modules/core/controllers/runtime.controller.js.map +1 -0
  40. package/dist/server/modules/core/core-common.module.d.ts +2 -0
  41. package/dist/server/modules/core/core-common.module.js +24 -0
  42. package/dist/server/modules/core/core-common.module.js.map +1 -0
  43. package/dist/server/modules/core/core-main-health.module.d.ts +2 -0
  44. package/dist/server/modules/core/core-main-health.module.js +32 -0
  45. package/dist/server/modules/core/core-main-health.module.js.map +1 -0
  46. package/dist/server/modules/core/core-normal-health.module.d.ts +2 -0
  47. package/dist/server/modules/core/core-normal-health.module.js +29 -0
  48. package/dist/server/modules/core/core-normal-health.module.js.map +1 -0
  49. package/dist/server/modules/core/core-normal.module.d.ts +2 -0
  50. package/dist/server/modules/core/core-normal.module.js +28 -0
  51. package/dist/server/modules/core/core-normal.module.js.map +1 -0
  52. package/dist/server/modules/core/core.module.js +4 -11
  53. package/dist/server/modules/core/core.module.js.map +1 -1
  54. package/dist/server/modules/core/services/health.service.d.ts +13 -0
  55. package/dist/server/modules/core/services/health.service.js +39 -0
  56. package/dist/server/modules/core/services/health.service.js.map +1 -0
  57. package/dist/server/modules/core/services/main-readiness-checker.service.d.ts +14 -0
  58. package/dist/server/modules/core/services/main-readiness-checker.service.js +82 -0
  59. package/dist/server/modules/core/services/main-readiness-checker.service.js.map +1 -0
  60. package/dist/server/modules/core/services/normal-readiness-checker.service.d.ts +13 -0
  61. package/dist/server/modules/core/services/normal-readiness-checker.service.js +67 -0
  62. package/dist/server/modules/core/services/normal-readiness-checker.service.js.map +1 -0
  63. package/dist/server/modules/core/services/preflight.service.d.ts +1 -0
  64. package/dist/server/modules/core/services/preflight.service.js +18 -1
  65. package/dist/server/modules/core/services/preflight.service.js.map +1 -1
  66. package/dist/server/modules/core/services/provider-mcp-ensure.service.js +8 -0
  67. package/dist/server/modules/core/services/provider-mcp-ensure.service.js.map +1 -1
  68. package/dist/server/modules/epics/epics.module.js +2 -2
  69. package/dist/server/modules/epics/epics.module.js.map +1 -1
  70. package/dist/server/modules/events/catalog/claude.hooks.session.started.d.ts +39 -0
  71. package/dist/server/modules/events/catalog/claude.hooks.session.started.js +20 -0
  72. package/dist/server/modules/events/catalog/claude.hooks.session.started.js.map +1 -0
  73. package/dist/server/modules/events/catalog/epic.created.d.ts +2 -2
  74. package/dist/server/modules/events/catalog/index.d.ts +38 -4
  75. package/dist/server/modules/events/catalog/index.js +2 -0
  76. package/dist/server/modules/events/catalog/index.js.map +1 -1
  77. package/dist/server/modules/events/catalog/terminal.watcher.triggered.d.ts +2 -2
  78. package/dist/server/modules/events/controllers/event-log.controller.d.ts +1 -1
  79. package/dist/server/modules/events/controllers/event-log.controller.js +11 -9
  80. package/dist/server/modules/events/controllers/event-log.controller.js.map +1 -1
  81. package/dist/server/modules/events/dtos/event-log.dto.d.ts +1 -0
  82. package/dist/server/modules/events/events-domain.module.d.ts +2 -0
  83. package/dist/server/modules/events/events-domain.module.js +42 -0
  84. package/dist/server/modules/events/events-domain.module.js.map +1 -0
  85. package/dist/server/modules/events/events-infra.module.d.ts +2 -0
  86. package/dist/server/modules/events/events-infra.module.js +26 -0
  87. package/dist/server/modules/events/events-infra.module.js.map +1 -0
  88. package/dist/server/modules/events/events.module.js +4 -27
  89. package/dist/server/modules/events/events.module.js.map +1 -1
  90. package/dist/server/modules/events/index.d.ts +2 -0
  91. package/dist/server/modules/events/index.js +2 -0
  92. package/dist/server/modules/events/index.js.map +1 -1
  93. package/dist/server/modules/events/services/event-log.service.d.ts +8 -1
  94. package/dist/server/modules/events/services/event-log.service.js +41 -0
  95. package/dist/server/modules/events/services/event-log.service.js.map +1 -1
  96. package/dist/server/modules/events/subscribers/index.js +2 -0
  97. package/dist/server/modules/events/subscribers/index.js.map +1 -1
  98. package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.d.ts +8 -0
  99. package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.js +48 -0
  100. package/dist/server/modules/events/subscribers/worktree-broadcaster.subscriber.js.map +1 -0
  101. package/dist/server/modules/git/dtos/git.dto.d.ts +1 -1
  102. package/dist/server/modules/guests/guests.module.js +2 -2
  103. package/dist/server/modules/guests/guests.module.js.map +1 -1
  104. package/dist/server/modules/hooks/controllers/hooks.controller.d.ts +7 -0
  105. package/dist/server/modules/hooks/controllers/hooks.controller.js +49 -0
  106. package/dist/server/modules/hooks/controllers/hooks.controller.js.map +1 -0
  107. package/dist/server/modules/hooks/dtos/hook-event.dto.d.ts +41 -0
  108. package/dist/server/modules/hooks/dtos/hook-event.dto.js +19 -0
  109. package/dist/server/modules/hooks/dtos/hook-event.dto.js.map +1 -0
  110. package/dist/server/modules/hooks/hooks.module.d.ts +2 -0
  111. package/dist/server/modules/hooks/hooks.module.js +27 -0
  112. package/dist/server/modules/hooks/hooks.module.js.map +1 -0
  113. package/dist/server/modules/hooks/services/hooks-config.service.d.ts +5 -0
  114. package/dist/server/modules/hooks/services/hooks-config.service.js +215 -0
  115. package/dist/server/modules/hooks/services/hooks-config.service.js.map +1 -0
  116. package/dist/server/modules/hooks/services/hooks.service.d.ts +11 -0
  117. package/dist/server/modules/hooks/services/hooks.service.js +83 -0
  118. package/dist/server/modules/hooks/services/hooks.service.js.map +1 -0
  119. package/dist/server/modules/mcp/dtos/mcp.dto.d.ts +14 -14
  120. package/dist/server/modules/mcp/mcp.module.js +2 -2
  121. package/dist/server/modules/mcp/mcp.module.js.map +1 -1
  122. package/dist/server/modules/orchestrator/docker/docker.module.d.ts +2 -0
  123. package/dist/server/modules/orchestrator/docker/docker.module.js +22 -0
  124. package/dist/server/modules/orchestrator/docker/docker.module.js.map +1 -0
  125. package/dist/server/modules/orchestrator/docker/index.d.ts +3 -0
  126. package/dist/server/modules/orchestrator/docker/index.js +20 -0
  127. package/dist/server/modules/orchestrator/docker/index.js.map +1 -0
  128. package/dist/server/modules/orchestrator/docker/services/docker.service.d.ts +85 -0
  129. package/dist/server/modules/orchestrator/docker/services/docker.service.js +745 -0
  130. package/dist/server/modules/orchestrator/docker/services/docker.service.js.map +1 -0
  131. package/dist/server/modules/orchestrator/docker/services/seed-preparation.service.d.ts +11 -0
  132. package/dist/server/modules/orchestrator/docker/services/seed-preparation.service.js +181 -0
  133. package/dist/server/modules/orchestrator/docker/services/seed-preparation.service.js.map +1 -0
  134. package/dist/server/modules/orchestrator/git/controllers/git.controller.d.ts +8 -0
  135. package/dist/server/modules/orchestrator/git/controllers/git.controller.js +38 -0
  136. package/dist/server/modules/orchestrator/git/controllers/git.controller.js.map +1 -0
  137. package/dist/server/modules/orchestrator/git/git.module.d.ts +2 -0
  138. package/dist/server/modules/orchestrator/git/git.module.js +23 -0
  139. package/dist/server/modules/orchestrator/git/git.module.js.map +1 -0
  140. package/dist/server/modules/orchestrator/git/index.d.ts +3 -0
  141. package/dist/server/modules/orchestrator/git/index.js +20 -0
  142. package/dist/server/modules/orchestrator/git/index.js.map +1 -0
  143. package/dist/server/modules/orchestrator/git/services/git-worktree.service.d.ts +83 -0
  144. package/dist/server/modules/orchestrator/git/services/git-worktree.service.js +474 -0
  145. package/dist/server/modules/orchestrator/git/services/git-worktree.service.js.map +1 -0
  146. package/dist/server/modules/orchestrator/index.d.ts +6 -0
  147. package/dist/server/modules/orchestrator/index.js +23 -0
  148. package/dist/server/modules/orchestrator/index.js.map +1 -0
  149. package/dist/server/modules/orchestrator/orchestrator-storage/db/index.d.ts +1 -0
  150. package/dist/server/modules/orchestrator/orchestrator-storage/db/index.js +18 -0
  151. package/dist/server/modules/orchestrator/orchestrator-storage/db/index.js.map +1 -0
  152. package/dist/server/modules/orchestrator/orchestrator-storage/db/orchestrator.provider.d.ts +5 -0
  153. package/dist/server/modules/orchestrator/orchestrator-storage/db/orchestrator.provider.js +10 -0
  154. package/dist/server/modules/orchestrator/orchestrator-storage/db/orchestrator.provider.js.map +1 -0
  155. package/dist/server/modules/orchestrator/orchestrator-storage/index.d.ts +2 -0
  156. package/dist/server/modules/orchestrator/orchestrator-storage/index.js +19 -0
  157. package/dist/server/modules/orchestrator/orchestrator-storage/index.js.map +1 -0
  158. package/dist/server/modules/orchestrator/orchestrator-storage/orchestrator-storage.module.d.ts +2 -0
  159. package/dist/server/modules/orchestrator/orchestrator-storage/orchestrator-storage.module.js +23 -0
  160. package/dist/server/modules/orchestrator/orchestrator-storage/orchestrator-storage.module.js.map +1 -0
  161. package/dist/server/modules/orchestrator/proxy/index.d.ts +2 -0
  162. package/dist/server/modules/orchestrator/proxy/index.js +19 -0
  163. package/dist/server/modules/orchestrator/proxy/index.js.map +1 -0
  164. package/dist/server/modules/orchestrator/proxy/orchestrator-proxy.module.d.ts +2 -0
  165. package/dist/server/modules/orchestrator/proxy/orchestrator-proxy.module.js +22 -0
  166. package/dist/server/modules/orchestrator/proxy/orchestrator-proxy.module.js.map +1 -0
  167. package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.d.ts +18 -0
  168. package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.js +192 -0
  169. package/dist/server/modules/orchestrator/proxy/services/orchestrator-proxy.service.js.map +1 -0
  170. package/dist/server/modules/orchestrator/sync/controllers/overview.controller.d.ts +9 -0
  171. package/dist/server/modules/orchestrator/sync/controllers/overview.controller.js +66 -0
  172. package/dist/server/modules/orchestrator/sync/controllers/overview.controller.js.map +1 -0
  173. package/dist/server/modules/orchestrator/sync/dtos/overview.dto.d.ts +52 -0
  174. package/dist/server/modules/orchestrator/sync/dtos/overview.dto.js +3 -0
  175. package/dist/server/modules/orchestrator/sync/dtos/overview.dto.js.map +1 -0
  176. package/dist/server/modules/orchestrator/sync/dtos/task-merge.dto.d.ts +5 -0
  177. package/dist/server/modules/orchestrator/sync/dtos/task-merge.dto.js +3 -0
  178. package/dist/server/modules/orchestrator/sync/dtos/task-merge.dto.js.map +1 -0
  179. package/dist/server/modules/orchestrator/sync/events/task-merge.events.d.ts +4 -0
  180. package/dist/server/modules/orchestrator/sync/events/task-merge.events.js +5 -0
  181. package/dist/server/modules/orchestrator/sync/events/task-merge.events.js.map +1 -0
  182. package/dist/server/modules/orchestrator/sync/index.d.ts +7 -0
  183. package/dist/server/modules/orchestrator/sync/index.js +24 -0
  184. package/dist/server/modules/orchestrator/sync/index.js.map +1 -0
  185. package/dist/server/modules/orchestrator/sync/services/lazy-fetch.service.d.ts +31 -0
  186. package/dist/server/modules/orchestrator/sync/services/lazy-fetch.service.js +410 -0
  187. package/dist/server/modules/orchestrator/sync/services/lazy-fetch.service.js.map +1 -0
  188. package/dist/server/modules/orchestrator/sync/services/task-merge.service.d.ts +44 -0
  189. package/dist/server/modules/orchestrator/sync/services/task-merge.service.js +730 -0
  190. package/dist/server/modules/orchestrator/sync/services/task-merge.service.js.map +1 -0
  191. package/dist/server/modules/orchestrator/sync/sync.module.d.ts +2 -0
  192. package/dist/server/modules/orchestrator/sync/sync.module.js +36 -0
  193. package/dist/server/modules/orchestrator/sync/sync.module.js.map +1 -0
  194. package/dist/server/modules/orchestrator/ui/app/lib/worktrees.d.ts +118 -0
  195. package/dist/server/modules/orchestrator/ui/app/lib/worktrees.js +297 -0
  196. package/dist/server/modules/orchestrator/ui/app/lib/worktrees.js.map +1 -0
  197. package/dist/server/modules/orchestrator/ui/app/orchestrator-app.d.ts +17 -0
  198. package/dist/server/modules/orchestrator/ui/app/orchestrator-app.js +752 -0
  199. package/dist/server/modules/orchestrator/ui/app/orchestrator-app.js.map +1 -0
  200. package/dist/server/modules/orchestrator/worktrees/controllers/templates.controller.d.ts +15 -0
  201. package/dist/server/modules/orchestrator/worktrees/controllers/templates.controller.js +85 -0
  202. package/dist/server/modules/orchestrator/worktrees/controllers/templates.controller.js.map +1 -0
  203. package/dist/server/modules/orchestrator/worktrees/controllers/worktrees.controller.d.ts +29 -0
  204. package/dist/server/modules/orchestrator/worktrees/controllers/worktrees.controller.js +272 -0
  205. package/dist/server/modules/orchestrator/worktrees/controllers/worktrees.controller.js.map +1 -0
  206. package/dist/server/modules/orchestrator/worktrees/dtos/worktree.dto.d.ts +109 -0
  207. package/dist/server/modules/orchestrator/worktrees/dtos/worktree.dto.js +57 -0
  208. package/dist/server/modules/orchestrator/worktrees/dtos/worktree.dto.js.map +1 -0
  209. package/dist/server/modules/orchestrator/worktrees/events/worktree.events.d.ts +4 -0
  210. package/dist/server/modules/orchestrator/worktrees/events/worktree.events.js +5 -0
  211. package/dist/server/modules/orchestrator/worktrees/events/worktree.events.js.map +1 -0
  212. package/dist/server/modules/orchestrator/worktrees/index.d.ts +7 -0
  213. package/dist/server/modules/orchestrator/worktrees/index.js +24 -0
  214. package/dist/server/modules/orchestrator/worktrees/index.js.map +1 -0
  215. package/dist/server/modules/orchestrator/worktrees/local-worktrees.store.d.ts +18 -0
  216. package/dist/server/modules/orchestrator/worktrees/local-worktrees.store.js +198 -0
  217. package/dist/server/modules/orchestrator/worktrees/local-worktrees.store.js.map +1 -0
  218. package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.d.ts +87 -0
  219. package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.js +1380 -0
  220. package/dist/server/modules/orchestrator/worktrees/services/worktrees.service.js.map +1 -0
  221. package/dist/server/modules/orchestrator/worktrees/worktree-validation.d.ts +4 -0
  222. package/dist/server/modules/orchestrator/worktrees/worktree-validation.js +43 -0
  223. package/dist/server/modules/orchestrator/worktrees/worktree-validation.js.map +1 -0
  224. package/dist/server/modules/orchestrator/worktrees/worktrees.module.d.ts +2 -0
  225. package/dist/server/modules/orchestrator/worktrees/worktrees.module.js +44 -0
  226. package/dist/server/modules/orchestrator/worktrees/worktrees.module.js.map +1 -0
  227. package/dist/server/modules/orchestrator/worktrees/worktrees.store.d.ts +38 -0
  228. package/dist/server/modules/orchestrator/worktrees/worktrees.store.js +5 -0
  229. package/dist/server/modules/orchestrator/worktrees/worktrees.store.js.map +1 -0
  230. package/dist/server/modules/profiles/dto.d.ts +4 -4
  231. package/dist/server/modules/projects/controllers/projects.controller.d.ts +13 -3
  232. package/dist/server/modules/projects/controllers/projects.controller.js +55 -7
  233. package/dist/server/modules/projects/controllers/projects.controller.js.map +1 -1
  234. package/dist/server/modules/projects/projects.module.js +3 -2
  235. package/dist/server/modules/projects/projects.module.js.map +1 -1
  236. package/dist/server/modules/projects/services/main-project-bootstrap.service.d.ts +11 -0
  237. package/dist/server/modules/projects/services/main-project-bootstrap.service.js +76 -0
  238. package/dist/server/modules/projects/services/main-project-bootstrap.service.js.map +1 -0
  239. package/dist/server/modules/projects/services/projects.service.d.ts +8 -0
  240. package/dist/server/modules/projects/services/projects.service.js +115 -37
  241. package/dist/server/modules/projects/services/projects.service.js.map +1 -1
  242. package/dist/server/modules/providers/adapters/gemini.adapter.d.ts +1 -1
  243. package/dist/server/modules/providers/adapters/gemini.adapter.js +6 -4
  244. package/dist/server/modules/providers/adapters/gemini.adapter.js.map +1 -1
  245. package/dist/server/modules/providers/controllers/providers.controller.d.ts +3 -0
  246. package/dist/server/modules/providers/controllers/providers.controller.js +28 -0
  247. package/dist/server/modules/providers/controllers/providers.controller.js.map +1 -1
  248. package/dist/server/modules/providers/providers.module.js +2 -2
  249. package/dist/server/modules/providers/providers.module.js.map +1 -1
  250. package/dist/server/modules/registry/services/unified-template.service.js +6 -18
  251. package/dist/server/modules/registry/services/unified-template.service.js.map +1 -1
  252. package/dist/server/modules/reviews/dtos/review.dto.d.ts +4 -4
  253. package/dist/server/modules/reviews/reviews.module.js +2 -2
  254. package/dist/server/modules/reviews/reviews.module.js.map +1 -1
  255. package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.d.ts +3 -0
  256. package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.js +89 -0
  257. package/dist/server/modules/seeders/seeders/0005_seed_renew_instructions_subscriber.js.map +1 -0
  258. package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.d.ts +3 -0
  259. package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.js +60 -0
  260. package/dist/server/modules/seeders/seeders/0006_seed_rename_template_slugs.js.map +1 -0
  261. package/dist/server/modules/seeders/services/data-seeder.service.js +4 -0
  262. package/dist/server/modules/seeders/services/data-seeder.service.js.map +1 -1
  263. package/dist/server/modules/sessions/services/sessions.service.d.ts +3 -1
  264. package/dist/server/modules/sessions/services/sessions.service.js +79 -22
  265. package/dist/server/modules/sessions/services/sessions.service.js.map +1 -1
  266. package/dist/server/modules/sessions/sessions.module.js +6 -4
  267. package/dist/server/modules/sessions/sessions.module.js.map +1 -1
  268. package/dist/server/modules/sessions/utils/claude-config.d.ts +6 -2
  269. package/dist/server/modules/sessions/utils/claude-config.js +19 -6
  270. package/dist/server/modules/sessions/utils/claude-config.js.map +1 -1
  271. package/dist/server/modules/settings/dtos/settings.dto.d.ts +4 -4
  272. package/dist/server/modules/skills/adapters/github-skill-source.base.d.ts +2 -5
  273. package/dist/server/modules/skills/adapters/github-skill-source.base.js +31 -100
  274. package/dist/server/modules/skills/adapters/github-skill-source.base.js.map +1 -1
  275. package/dist/server/modules/skills/adapters/local-skill-source.adapter.d.ts +16 -0
  276. package/dist/server/modules/skills/adapters/local-skill-source.adapter.js +265 -0
  277. package/dist/server/modules/skills/adapters/local-skill-source.adapter.js.map +1 -0
  278. package/dist/server/modules/skills/adapters/skill-parsing.utils.d.ts +32 -0
  279. package/dist/server/modules/skills/adapters/skill-parsing.utils.js +169 -0
  280. package/dist/server/modules/skills/adapters/skill-parsing.utils.js.map +1 -0
  281. package/dist/server/modules/skills/controllers/local-sources.controller.d.ts +12 -0
  282. package/dist/server/modules/skills/controllers/local-sources.controller.js +71 -0
  283. package/dist/server/modules/skills/controllers/local-sources.controller.js.map +1 -0
  284. package/dist/server/modules/skills/controllers/skills.controller.d.ts +11 -1
  285. package/dist/server/modules/skills/controllers/skills.controller.js +35 -3
  286. package/dist/server/modules/skills/controllers/skills.controller.js.map +1 -1
  287. package/dist/server/modules/skills/dtos/community-sources.dto.d.ts +2 -2
  288. package/dist/server/modules/skills/dtos/local-sources.dto.d.ts +42 -0
  289. package/dist/server/modules/skills/dtos/local-sources.dto.js +30 -0
  290. package/dist/server/modules/skills/dtos/local-sources.dto.js.map +1 -0
  291. package/dist/server/modules/skills/dtos/skill.dto.d.ts +23 -7
  292. package/dist/server/modules/skills/dtos/skill.dto.js +7 -1
  293. package/dist/server/modules/skills/dtos/skill.dto.js.map +1 -1
  294. package/dist/server/modules/skills/services/community-sources.service.d.ts +8 -1
  295. package/dist/server/modules/skills/services/community-sources.service.js +62 -3
  296. package/dist/server/modules/skills/services/community-sources.service.js.map +1 -1
  297. package/dist/server/modules/skills/services/local-sources.service.d.ts +20 -0
  298. package/dist/server/modules/skills/services/local-sources.service.js +206 -0
  299. package/dist/server/modules/skills/services/local-sources.service.js.map +1 -0
  300. package/dist/server/modules/skills/services/skill-source-registry.service.d.ts +11 -0
  301. package/dist/server/modules/skills/services/skill-source-registry.service.js +99 -3
  302. package/dist/server/modules/skills/services/skill-source-registry.service.js.map +1 -1
  303. package/dist/server/modules/skills/services/skill-sync.service.d.ts +4 -0
  304. package/dist/server/modules/skills/services/skill-sync.service.js +93 -0
  305. package/dist/server/modules/skills/services/skill-sync.service.js.map +1 -1
  306. package/dist/server/modules/skills/services/skills.service.d.ts +14 -2
  307. package/dist/server/modules/skills/services/skills.service.js +125 -23
  308. package/dist/server/modules/skills/services/skills.service.js.map +1 -1
  309. package/dist/server/modules/skills/skills.module.js +4 -1
  310. package/dist/server/modules/skills/skills.module.js.map +1 -1
  311. package/dist/server/modules/storage/db/schema.d.ts +1115 -102
  312. package/dist/server/modules/storage/db/schema.js +81 -1
  313. package/dist/server/modules/storage/db/schema.js.map +1 -1
  314. package/dist/server/modules/storage/db/sqlite-json.d.ts +2 -0
  315. package/dist/server/modules/storage/db/sqlite-json.js +8 -0
  316. package/dist/server/modules/storage/db/sqlite-json.js.map +1 -0
  317. package/dist/server/modules/storage/interfaces/storage.interface.d.ts +17 -2
  318. package/dist/server/modules/storage/interfaces/storage.interface.js.map +1 -1
  319. package/dist/server/modules/storage/local/local-storage.service.d.ts +19 -2
  320. package/dist/server/modules/storage/local/local-storage.service.js +313 -5
  321. package/dist/server/modules/storage/local/local-storage.service.js.map +1 -1
  322. package/dist/server/modules/storage/models/domain.models.d.ts +10 -0
  323. package/dist/server/modules/subscribers/dtos/subscriber.dto.d.ts +16 -16
  324. package/dist/server/modules/subscribers/events/event-fields-catalog.js +18 -0
  325. package/dist/server/modules/subscribers/events/event-fields-catalog.js.map +1 -1
  326. package/dist/server/modules/subscribers/subscribers.module.js +2 -2
  327. package/dist/server/modules/subscribers/subscribers.module.js.map +1 -1
  328. package/dist/server/modules/terminal/gateways/terminal.gateway.js +7 -2
  329. package/dist/server/modules/terminal/gateways/terminal.gateway.js.map +1 -1
  330. package/dist/server/modules/terminal/services/tmux.service.d.ts +9 -0
  331. package/dist/server/modules/terminal/services/tmux.service.js +55 -5
  332. package/dist/server/modules/terminal/services/tmux.service.js.map +1 -1
  333. package/dist/server/modules/terminal/terminal.module.js +2 -2
  334. package/dist/server/modules/terminal/terminal.module.js.map +1 -1
  335. package/dist/server/modules/watchers/watchers.module.js +2 -2
  336. package/dist/server/modules/watchers/watchers.module.js.map +1 -1
  337. package/dist/server/templates/3-agents-dev.json +662 -0
  338. package/dist/server/templates/{dev-loop.json → 5-agents-dev.json} +174 -100
  339. package/dist/server/test-setup.js +7 -0
  340. package/dist/server/test-setup.js.map +1 -1
  341. package/dist/server/tsconfig.tsbuildinfo +1 -1
  342. package/dist/server/ui/assets/ReviewDetailPage-CZZQtaY7.js +1 -0
  343. package/dist/server/ui/assets/{ReviewsPage-C98ST0lf.js → ReviewsPage-C209GLQG.js} +1 -1
  344. package/dist/server/ui/assets/index-DvRuLfpZ.css +32 -0
  345. package/dist/server/ui/assets/index-Th1FDtKR.js +977 -0
  346. package/dist/server/ui/assets/{useReviewSubscription-CmLuF45Z.js → useReviewSubscription-Dcabsa78.js} +1 -1
  347. package/dist/server/ui/index.html +2 -2
  348. package/dist/templates/3-agents-dev.json +662 -0
  349. package/dist/templates/{dev-loop.json → 5-agents-dev.json} +174 -100
  350. package/package.json +19 -1
  351. package/dist/server/ui/assets/ReviewDetailPage-D13dH7Wh.js +0 -6
  352. package/dist/server/ui/assets/index-C8Dc1yQf.js +0 -945
  353. package/dist/server/ui/assets/index-DZkJ40z9.css +0 -32
@@ -168,6 +168,46 @@ let LocalStorageService = class LocalStorageService {
168
168
  }
169
169
  return normalized;
170
170
  }
171
+ normalizeLocalSkillSourceFolderPath(folderPath) {
172
+ const normalized = folderPath.trim();
173
+ if (!normalized) {
174
+ throw new error_types_1.ValidationError('folderPath is required.', { fieldName: 'folderPath' });
175
+ }
176
+ return normalized;
177
+ }
178
+ async assertLocalSourceNameAvailableAcrossTypes(sourceName) {
179
+ if (RESERVED_COMMUNITY_SOURCE_NAMES.has(sourceName)) {
180
+ throw new error_types_1.ValidationError('Local source name conflicts with a built-in source.', {
181
+ name: sourceName,
182
+ });
183
+ }
184
+ const { communitySkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
185
+ const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
186
+ const existingCommunitySource = await this.db
187
+ .select({ id: communitySkillSources.id })
188
+ .from(communitySkillSources)
189
+ .where(eq(communitySkillSources.name, sourceName))
190
+ .limit(1);
191
+ if (existingCommunitySource.length > 0) {
192
+ throw new error_types_1.ConflictError('Local source name conflicts with an existing community source.', {
193
+ name: sourceName,
194
+ });
195
+ }
196
+ }
197
+ normalizeProjectIdForSourceEnablement(projectId) {
198
+ const normalized = projectId.trim();
199
+ if (!normalized) {
200
+ throw new error_types_1.ValidationError('projectId is required.', { fieldName: 'projectId' });
201
+ }
202
+ return normalized;
203
+ }
204
+ normalizeSourceNameForSourceEnablement(sourceName) {
205
+ const normalized = sourceName.trim().toLowerCase();
206
+ if (!normalized) {
207
+ throw new error_types_1.ValidationError('sourceName is required.', { fieldName: 'sourceName' });
208
+ }
209
+ return normalized;
210
+ }
171
211
  isSqliteUniqueConstraint(error) {
172
212
  if (typeof error !== 'object' || error === null) {
173
213
  return false;
@@ -246,6 +286,39 @@ let LocalStorageService = class LocalStorageService {
246
286
  });
247
287
  }
248
288
  }
289
+ async listSeedableSourceNamesForNewProject() {
290
+ const { communitySkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
291
+ const communitySourceRows = await this.db
292
+ .select({ name: communitySkillSources.name })
293
+ .from(communitySkillSources);
294
+ const sourceNames = communitySourceRows
295
+ .map((row) => row.name.trim().toLowerCase())
296
+ .filter((name) => name.length > 0);
297
+ const sqlite = (0, sqlite_raw_1.getRawSqliteClient)(this.db);
298
+ if (sqlite && typeof sqlite.prepare === 'function') {
299
+ try {
300
+ const localRows = sqlite.prepare('SELECT name FROM local_skill_sources').all();
301
+ for (const row of localRows) {
302
+ if (typeof row.name !== 'string') {
303
+ continue;
304
+ }
305
+ const normalized = row.name.trim().toLowerCase();
306
+ if (normalized.length > 0) {
307
+ sourceNames.push(normalized);
308
+ }
309
+ }
310
+ }
311
+ catch (error) {
312
+ const message = error instanceof Error ? error.message : String(error);
313
+ if (!message.includes('no such table: local_skill_sources')) {
314
+ throw new error_types_1.StorageError('Failed to list local skill sources for project source seeding.', {
315
+ cause: message,
316
+ });
317
+ }
318
+ }
319
+ }
320
+ return [...new Set(sourceNames)];
321
+ }
249
322
  async createProject(data) {
250
323
  const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
251
324
  const now = new Date().toISOString();
@@ -256,7 +329,8 @@ let LocalStorageService = class LocalStorageService {
256
329
  createdAt: now,
257
330
  updatedAt: now,
258
331
  };
259
- const { projects, statuses } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
332
+ const seedableSourceNames = await this.listSeedableSourceNamesForNewProject();
333
+ const { projects, statuses, sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
260
334
  await this.db.transaction(async (tx) => {
261
335
  await tx.insert(projects).values({
262
336
  id: project.id,
@@ -285,21 +359,32 @@ let LocalStorageService = class LocalStorageService {
285
359
  updatedAt: now,
286
360
  });
287
361
  }
362
+ if (seedableSourceNames.length > 0) {
363
+ await tx.insert(sourceProjectEnabled).values(seedableSourceNames.map((sourceName) => ({
364
+ id: randomUUID(),
365
+ projectId: project.id,
366
+ sourceName,
367
+ enabled: false,
368
+ createdAt: now,
369
+ })));
370
+ }
288
371
  });
289
372
  logger.info({ projectId: project.id }, 'Created project with default statuses (transactional)');
290
373
  return project;
291
374
  }
292
- async createProjectWithTemplate(data, template) {
375
+ async createProjectWithTemplate(data, template, options) {
293
376
  const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
294
377
  const now = new Date().toISOString();
378
+ const providedProjectId = options?.projectId?.trim();
295
379
  const project = {
296
- id: randomUUID(),
380
+ id: providedProjectId || randomUUID(),
297
381
  ...data,
298
382
  isTemplate: data.isTemplate ?? false,
299
383
  createdAt: now,
300
384
  updatedAt: now,
301
385
  };
302
- const { projects, statuses, prompts, agentProfiles, agents, tags, promptTags, profileProviderConfigs, providers, } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
386
+ const seedableSourceNames = await this.listSeedableSourceNamesForNewProject();
387
+ const { projects, statuses, prompts, agentProfiles, agents, tags, promptTags, profileProviderConfigs, providers, sourceProjectEnabled, } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
303
388
  const statusIdMap = {};
304
389
  const promptIdMap = {};
305
390
  const profileIdMap = {};
@@ -336,6 +421,15 @@ let LocalStorageService = class LocalStorageService {
336
421
  if (s.id)
337
422
  statusIdMap[s.id] = statusId;
338
423
  }
424
+ if (seedableSourceNames.length > 0) {
425
+ await this.db.insert(sourceProjectEnabled).values(seedableSourceNames.map((sourceName) => ({
426
+ id: randomUUID(),
427
+ projectId: project.id,
428
+ sourceName,
429
+ enabled: false,
430
+ createdAt: now,
431
+ })));
432
+ }
339
433
  const { eq, and, or, isNull } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
340
434
  for (const p of template.prompts) {
341
435
  const promptId = randomUUID();
@@ -483,6 +577,15 @@ let LocalStorageService = class LocalStorageService {
483
577
  logger.error({ rollbackError }, 'Failed to rollback transaction');
484
578
  }
485
579
  logger.error({ error, projectId: project.id }, 'Transaction failed');
580
+ const errorMessage = error instanceof Error ? error.message : '';
581
+ if (providedProjectId &&
582
+ this.isSqliteUniqueConstraint(error) &&
583
+ errorMessage.includes('projects.id')) {
584
+ throw new error_types_1.ConflictError(`Project ID "${providedProjectId}" already exists.`, {
585
+ field: 'projectId',
586
+ projectId: providedProjectId,
587
+ });
588
+ }
486
589
  throw error;
487
590
  }
488
591
  return {
@@ -1868,6 +1971,11 @@ let LocalStorageService = class LocalStorageService {
1868
1971
  const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
1869
1972
  const now = new Date().toISOString();
1870
1973
  const { providers } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
1974
+ const autoCompactThreshold = data.autoCompactThreshold !== undefined
1975
+ ? data.autoCompactThreshold
1976
+ : data.name.toLowerCase() === 'claude'
1977
+ ? 10
1978
+ : null;
1871
1979
  const provider = {
1872
1980
  id: randomUUID(),
1873
1981
  name: data.name,
@@ -1875,6 +1983,7 @@ let LocalStorageService = class LocalStorageService {
1875
1983
  mcpConfigured: data.mcpConfigured ?? false,
1876
1984
  mcpEndpoint: data.mcpEndpoint ?? null,
1877
1985
  mcpRegisteredAt: data.mcpRegisteredAt ?? null,
1986
+ autoCompactThreshold,
1878
1987
  createdAt: now,
1879
1988
  updatedAt: now,
1880
1989
  };
@@ -1885,6 +1994,7 @@ let LocalStorageService = class LocalStorageService {
1885
1994
  mcpConfigured: provider.mcpConfigured,
1886
1995
  mcpEndpoint: provider.mcpEndpoint,
1887
1996
  mcpRegisteredAt: provider.mcpRegisteredAt,
1997
+ autoCompactThreshold: provider.autoCompactThreshold,
1888
1998
  createdAt: provider.createdAt,
1889
1999
  updatedAt: provider.updatedAt,
1890
2000
  });
@@ -1960,6 +2070,114 @@ let LocalStorageService = class LocalStorageService {
1960
2070
  }
1961
2071
  return this.updateProvider(id, update);
1962
2072
  }
2073
+ async getSourceProjectEnabled(projectId, sourceName) {
2074
+ const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
2075
+ const normalizedSourceName = this.normalizeSourceNameForSourceEnablement(sourceName);
2076
+ const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2077
+ const { and, eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2078
+ const rows = await this.db
2079
+ .select({ enabled: sourceProjectEnabled.enabled })
2080
+ .from(sourceProjectEnabled)
2081
+ .where(and(eq(sourceProjectEnabled.projectId, normalizedProjectId), eq(sourceProjectEnabled.sourceName, normalizedSourceName)))
2082
+ .limit(1);
2083
+ return rows[0] ? Boolean(rows[0].enabled) : null;
2084
+ }
2085
+ async setSourceProjectEnabled(projectId, sourceName, enabled) {
2086
+ const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
2087
+ const normalizedSourceName = this.normalizeSourceNameForSourceEnablement(sourceName);
2088
+ const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2089
+ const { and, eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2090
+ const existing = await this.db
2091
+ .select({ id: sourceProjectEnabled.id })
2092
+ .from(sourceProjectEnabled)
2093
+ .where(and(eq(sourceProjectEnabled.projectId, normalizedProjectId), eq(sourceProjectEnabled.sourceName, normalizedSourceName)))
2094
+ .limit(1);
2095
+ if (existing[0]) {
2096
+ await this.db
2097
+ .update(sourceProjectEnabled)
2098
+ .set({ enabled })
2099
+ .where(eq(sourceProjectEnabled.id, existing[0].id));
2100
+ return;
2101
+ }
2102
+ const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
2103
+ await this.db.insert(sourceProjectEnabled).values({
2104
+ id: randomUUID(),
2105
+ projectId: normalizedProjectId,
2106
+ sourceName: normalizedSourceName,
2107
+ enabled,
2108
+ createdAt: new Date().toISOString(),
2109
+ });
2110
+ }
2111
+ async listSourceProjectEnabled(projectId) {
2112
+ const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
2113
+ const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2114
+ const { asc, eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2115
+ const rows = await this.db
2116
+ .select({
2117
+ sourceName: sourceProjectEnabled.sourceName,
2118
+ enabled: sourceProjectEnabled.enabled,
2119
+ })
2120
+ .from(sourceProjectEnabled)
2121
+ .where(eq(sourceProjectEnabled.projectId, normalizedProjectId))
2122
+ .orderBy(asc(sourceProjectEnabled.sourceName));
2123
+ return rows.map((row) => ({
2124
+ sourceName: row.sourceName,
2125
+ enabled: Boolean(row.enabled),
2126
+ }));
2127
+ }
2128
+ async seedSourceProjectDisabled(projectId, sourceNames) {
2129
+ const normalizedProjectId = this.normalizeProjectIdForSourceEnablement(projectId);
2130
+ const normalizedSourceNames = [
2131
+ ...new Set(sourceNames.map((name) => name.trim().toLowerCase())),
2132
+ ].filter((name) => name.length > 0);
2133
+ if (normalizedSourceNames.length === 0) {
2134
+ return;
2135
+ }
2136
+ const sqlite = (0, sqlite_raw_1.getRawSqliteClient)(this.db);
2137
+ if (!sqlite || typeof sqlite.exec !== 'function') {
2138
+ throw new error_types_1.StorageError('Unable to access underlying SQLite client');
2139
+ }
2140
+ sqlite.exec('BEGIN IMMEDIATE TRANSACTION');
2141
+ try {
2142
+ const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2143
+ const { and, eq, inArray } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2144
+ const existingRows = await this.db
2145
+ .select({ sourceName: sourceProjectEnabled.sourceName })
2146
+ .from(sourceProjectEnabled)
2147
+ .where(and(eq(sourceProjectEnabled.projectId, normalizedProjectId), inArray(sourceProjectEnabled.sourceName, normalizedSourceNames)));
2148
+ const existingSourceNames = new Set(existingRows.map((row) => row.sourceName));
2149
+ const sourceNamesToInsert = normalizedSourceNames.filter((sourceName) => !existingSourceNames.has(sourceName));
2150
+ if (sourceNamesToInsert.length > 0) {
2151
+ const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
2152
+ const now = new Date().toISOString();
2153
+ await this.db.insert(sourceProjectEnabled).values(sourceNamesToInsert.map((sourceName) => ({
2154
+ id: randomUUID(),
2155
+ projectId: normalizedProjectId,
2156
+ sourceName,
2157
+ enabled: false,
2158
+ createdAt: now,
2159
+ })));
2160
+ }
2161
+ sqlite.exec('COMMIT');
2162
+ }
2163
+ catch (error) {
2164
+ try {
2165
+ sqlite.exec('ROLLBACK');
2166
+ }
2167
+ catch (rollbackError) {
2168
+ logger.error({ rollbackError }, 'Failed to rollback seedSourceProjectDisabled transaction');
2169
+ }
2170
+ throw error;
2171
+ }
2172
+ }
2173
+ async deleteSourceProjectEnabledBySource(sourceName) {
2174
+ const normalizedSourceName = this.normalizeSourceNameForSourceEnablement(sourceName);
2175
+ const { sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2176
+ const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2177
+ await this.db
2178
+ .delete(sourceProjectEnabled)
2179
+ .where(eq(sourceProjectEnabled.sourceName, normalizedSourceName));
2180
+ }
1963
2181
  async listCommunitySkillSources() {
1964
2182
  const { communitySkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
1965
2183
  const { asc } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
@@ -2052,14 +2270,104 @@ let LocalStorageService = class LocalStorageService {
2052
2270
  }
2053
2271
  async deleteCommunitySkillSource(id) {
2054
2272
  const source = await this.getCommunitySkillSource(id);
2055
- const { communitySkillSources, skills } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2273
+ const { communitySkillSources, skills, sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2056
2274
  const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2057
2275
  await this.db.transaction(async (tx) => {
2058
2276
  await tx.delete(skills).where(eq(skills.source, source.name));
2277
+ await tx.delete(sourceProjectEnabled).where(eq(sourceProjectEnabled.sourceName, source.name));
2059
2278
  await tx.delete(communitySkillSources).where(eq(communitySkillSources.id, source.id));
2060
2279
  });
2061
2280
  logger.info({ communitySkillSourceId: source.id, sourceName: source.name }, 'Deleted community skill source and related skills');
2062
2281
  }
2282
+ async listLocalSkillSources() {
2283
+ const { localSkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2284
+ const { asc } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2285
+ const rows = await this.db
2286
+ .select()
2287
+ .from(localSkillSources)
2288
+ .orderBy(asc(localSkillSources.name));
2289
+ return rows;
2290
+ }
2291
+ async getLocalSkillSource(id) {
2292
+ const normalizedId = id.trim();
2293
+ if (!normalizedId) {
2294
+ throw new error_types_1.ValidationError('id is required.', { fieldName: 'id' });
2295
+ }
2296
+ const { localSkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2297
+ const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2298
+ const rows = await this.db
2299
+ .select()
2300
+ .from(localSkillSources)
2301
+ .where(eq(localSkillSources.id, normalizedId))
2302
+ .limit(1);
2303
+ return rows[0] ?? null;
2304
+ }
2305
+ async createLocalSkillSource(data) {
2306
+ const normalizedName = this.normalizeCommunitySourceNameForLookup(data.name);
2307
+ const normalizedFolderPath = this.normalizeLocalSkillSourceFolderPath(data.folderPath);
2308
+ await this.assertLocalSourceNameAvailableAcrossTypes(normalizedName);
2309
+ const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
2310
+ const now = new Date().toISOString();
2311
+ const record = {
2312
+ id: randomUUID(),
2313
+ name: normalizedName,
2314
+ folderPath: normalizedFolderPath,
2315
+ createdAt: now,
2316
+ updatedAt: now,
2317
+ };
2318
+ const { localSkillSources } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2319
+ try {
2320
+ await this.db.insert(localSkillSources).values({
2321
+ id: record.id,
2322
+ name: record.name,
2323
+ folderPath: record.folderPath,
2324
+ createdAt: record.createdAt,
2325
+ updatedAt: record.updatedAt,
2326
+ });
2327
+ }
2328
+ catch (error) {
2329
+ if (this.isSqliteUniqueConstraint(error)) {
2330
+ const rawMessage = typeof error === 'object' && error !== null && 'message' in error
2331
+ ? String(error.message ?? '')
2332
+ : '';
2333
+ if (rawMessage.includes('local_skill_sources.name')) {
2334
+ throw new error_types_1.ConflictError('Local skill source name already exists.', {
2335
+ name: normalizedName,
2336
+ });
2337
+ }
2338
+ if (rawMessage.includes('local_skill_sources.folder_path')) {
2339
+ throw new error_types_1.ConflictError('Local skill source folder path already exists.', {
2340
+ folderPath: normalizedFolderPath,
2341
+ });
2342
+ }
2343
+ throw new error_types_1.ConflictError('Local skill source already exists.', {
2344
+ name: normalizedName,
2345
+ folderPath: normalizedFolderPath,
2346
+ });
2347
+ }
2348
+ throw new error_types_1.StorageError('Failed to create local skill source.', {
2349
+ name: normalizedName,
2350
+ folderPath: normalizedFolderPath,
2351
+ cause: error instanceof Error ? error.message : String(error),
2352
+ });
2353
+ }
2354
+ logger.info({ localSkillSourceId: record.id, name: record.name }, 'Created local skill source');
2355
+ return record;
2356
+ }
2357
+ async deleteLocalSkillSource(id) {
2358
+ const source = await this.getLocalSkillSource(id);
2359
+ if (!source) {
2360
+ throw new error_types_1.NotFoundError('Local skill source', id.trim());
2361
+ }
2362
+ const { localSkillSources, skills, sourceProjectEnabled } = await Promise.resolve().then(() => __importStar(require('../db/schema')));
2363
+ const { eq } = await Promise.resolve().then(() => __importStar(require('drizzle-orm')));
2364
+ await this.db.transaction(async (tx) => {
2365
+ await tx.delete(skills).where(eq(skills.source, source.name));
2366
+ await tx.delete(sourceProjectEnabled).where(eq(sourceProjectEnabled.sourceName, source.name));
2367
+ await tx.delete(localSkillSources).where(eq(localSkillSources.id, source.id));
2368
+ });
2369
+ logger.info({ localSkillSourceId: source.id, sourceName: source.name }, 'Deleted local skill source and related skills');
2370
+ }
2063
2371
  async createAgentProfile(data) {
2064
2372
  const { randomUUID } = await Promise.resolve().then(() => __importStar(require('crypto')));
2065
2373
  const now = new Date().toISOString();