agor-live 0.3.7

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 (297) hide show
  1. package/LICENSE +94 -0
  2. package/README.md +163 -0
  3. package/bin/agor-daemon.js +20 -0
  4. package/bin/agor.js +14 -0
  5. package/dist/cli/base-command.d.ts +29 -0
  6. package/dist/cli/base-command.js +41 -0
  7. package/dist/cli/commands/board/add-session.d.ts +15 -0
  8. package/dist/cli/commands/board/add-session.js +102 -0
  9. package/dist/cli/commands/board/list.d.ts +14 -0
  10. package/dist/cli/commands/board/list.js +74 -0
  11. package/dist/cli/commands/config/clear.d.ts +13 -0
  12. package/dist/cli/commands/config/clear.js +21 -0
  13. package/dist/cli/commands/config/get.d.ts +13 -0
  14. package/dist/cli/commands/config/get.js +41 -0
  15. package/dist/cli/commands/config/index.d.ts +13 -0
  16. package/dist/cli/commands/config/index.js +118 -0
  17. package/dist/cli/commands/config/set.d.ts +14 -0
  18. package/dist/cli/commands/config/set.js +50 -0
  19. package/dist/cli/commands/config/unset.d.ts +13 -0
  20. package/dist/cli/commands/config/unset.js +35 -0
  21. package/dist/cli/commands/daemon/index.d.ts +13 -0
  22. package/dist/cli/commands/daemon/index.js +65 -0
  23. package/dist/cli/commands/daemon/logs.d.ts +13 -0
  24. package/dist/cli/commands/daemon/logs.js +78 -0
  25. package/dist/cli/commands/daemon/restart.d.ts +13 -0
  26. package/dist/cli/commands/daemon/restart.js +177 -0
  27. package/dist/cli/commands/daemon/start.d.ts +13 -0
  28. package/dist/cli/commands/daemon/start.js +193 -0
  29. package/dist/cli/commands/daemon/status.d.ts +13 -0
  30. package/dist/cli/commands/daemon/status.js +93 -0
  31. package/dist/cli/commands/daemon/stop.d.ts +13 -0
  32. package/dist/cli/commands/daemon/stop.js +108 -0
  33. package/dist/cli/commands/init.d.ts +44 -0
  34. package/dist/cli/commands/init.js +459 -0
  35. package/dist/cli/commands/mcp/add.d.ts +26 -0
  36. package/dist/cli/commands/mcp/add.js +162 -0
  37. package/dist/cli/commands/mcp/list.d.ts +16 -0
  38. package/dist/cli/commands/mcp/list.js +89 -0
  39. package/dist/cli/commands/mcp/remove.d.ts +17 -0
  40. package/dist/cli/commands/mcp/remove.js +86 -0
  41. package/dist/cli/commands/mcp/show.d.ts +14 -0
  42. package/dist/cli/commands/mcp/show.js +131 -0
  43. package/dist/cli/commands/repo/add.d.ts +16 -0
  44. package/dist/cli/commands/repo/add.js +105 -0
  45. package/dist/cli/commands/repo/list.d.ts +17 -0
  46. package/dist/cli/commands/repo/list.js +99 -0
  47. package/dist/cli/commands/repo/rm.d.ts +17 -0
  48. package/dist/cli/commands/repo/rm.js +126 -0
  49. package/dist/cli/commands/repo/worktree/add.d.ts +21 -0
  50. package/dist/cli/commands/repo/worktree/add.js +145 -0
  51. package/dist/cli/commands/repo/worktree/list.d.ts +21 -0
  52. package/dist/cli/commands/repo/worktree/list.js +136 -0
  53. package/dist/cli/commands/session/list.d.ts +30 -0
  54. package/dist/cli/commands/session/list.js +204 -0
  55. package/dist/cli/commands/session/load-claude.d.ts +16 -0
  56. package/dist/cli/commands/session/load-claude.js +211 -0
  57. package/dist/cli/commands/user/create-admin.d.ts +13 -0
  58. package/dist/cli/commands/user/create-admin.js +65 -0
  59. package/dist/cli/commands/user/create.d.ts +16 -0
  60. package/dist/cli/commands/user/create.js +126 -0
  61. package/dist/cli/commands/user/delete.d.ts +16 -0
  62. package/dist/cli/commands/user/delete.js +77 -0
  63. package/dist/cli/commands/user/list.d.ts +13 -0
  64. package/dist/cli/commands/user/list.js +78 -0
  65. package/dist/cli/commands/user/update.d.ts +19 -0
  66. package/dist/cli/commands/user/update.js +149 -0
  67. package/dist/cli/hooks/command-not-found.d.ts +9 -0
  68. package/dist/cli/hooks/command-not-found.js +14 -0
  69. package/dist/cli/lib/banner.d.ts +25 -0
  70. package/dist/cli/lib/banner.js +25 -0
  71. package/dist/cli/lib/context.d.ts +27 -0
  72. package/dist/cli/lib/context.js +32 -0
  73. package/dist/cli/lib/daemon-manager.d.ts +48 -0
  74. package/dist/cli/lib/daemon-manager.js +109 -0
  75. package/dist/cli/lib/help.d.ts +13 -0
  76. package/dist/cli/lib/help.js +46 -0
  77. package/dist/core/agentic-tool-B_gFNpk5.d.ts +33 -0
  78. package/dist/core/agentic-tool-DsyX8diw.d.cts +33 -0
  79. package/dist/core/api/index.cjs +98 -0
  80. package/dist/core/api/index.d.cts +174 -0
  81. package/dist/core/api/index.d.ts +174 -0
  82. package/dist/core/api/index.js +62 -0
  83. package/dist/core/board-comment-BUm0fpmD.d.cts +134 -0
  84. package/dist/core/board-comment-gC_-twPx.d.ts +134 -0
  85. package/dist/core/claude/index.cjs +673 -0
  86. package/dist/core/claude/index.d.cts +124 -0
  87. package/dist/core/claude/index.d.ts +124 -0
  88. package/dist/core/claude/index.js +629 -0
  89. package/dist/core/config/browser.cjs +165 -0
  90. package/dist/core/config/browser.d.cts +289 -0
  91. package/dist/core/config/browser.d.ts +289 -0
  92. package/dist/core/config/browser.js +131 -0
  93. package/dist/core/config/index.cjs +518 -0
  94. package/dist/core/config/index.d.cts +246 -0
  95. package/dist/core/config/index.d.ts +246 -0
  96. package/dist/core/config/index.js +451 -0
  97. package/dist/core/db/index.cjs +3726 -0
  98. package/dist/core/db/index.d.cts +631 -0
  99. package/dist/core/db/index.d.ts +631 -0
  100. package/dist/core/db/index.js +3649 -0
  101. package/dist/core/dist/agentic-tool-B_gFNpk5.d.ts +33 -0
  102. package/dist/core/dist/agentic-tool-DsyX8diw.d.cts +33 -0
  103. package/dist/core/dist/api/index.cjs +98 -0
  104. package/dist/core/dist/api/index.d.cts +174 -0
  105. package/dist/core/dist/api/index.d.ts +174 -0
  106. package/dist/core/dist/api/index.js +62 -0
  107. package/dist/core/dist/board-comment-BUm0fpmD.d.cts +134 -0
  108. package/dist/core/dist/board-comment-gC_-twPx.d.ts +134 -0
  109. package/dist/core/dist/claude/index.cjs +673 -0
  110. package/dist/core/dist/claude/index.d.cts +124 -0
  111. package/dist/core/dist/claude/index.d.ts +124 -0
  112. package/dist/core/dist/claude/index.js +629 -0
  113. package/dist/core/dist/config/browser.cjs +165 -0
  114. package/dist/core/dist/config/browser.d.cts +289 -0
  115. package/dist/core/dist/config/browser.d.ts +289 -0
  116. package/dist/core/dist/config/browser.js +131 -0
  117. package/dist/core/dist/config/index.cjs +518 -0
  118. package/dist/core/dist/config/index.d.cts +246 -0
  119. package/dist/core/dist/config/index.d.ts +246 -0
  120. package/dist/core/dist/config/index.js +451 -0
  121. package/dist/core/dist/db/index.cjs +3726 -0
  122. package/dist/core/dist/db/index.d.cts +631 -0
  123. package/dist/core/dist/db/index.d.ts +631 -0
  124. package/dist/core/dist/db/index.js +3649 -0
  125. package/dist/core/dist/environment/variable-resolver.cjs +92 -0
  126. package/dist/core/dist/environment/variable-resolver.d.cts +52 -0
  127. package/dist/core/dist/environment/variable-resolver.d.ts +52 -0
  128. package/dist/core/dist/environment/variable-resolver.js +53 -0
  129. package/dist/core/dist/feathers/index.cjs +66 -0
  130. package/dist/core/dist/feathers/index.d.cts +7 -0
  131. package/dist/core/dist/feathers/index.d.ts +7 -0
  132. package/dist/core/dist/feathers/index.js +25 -0
  133. package/dist/core/dist/feathers-BzHEPnpl.d.cts +228 -0
  134. package/dist/core/dist/feathers-BzHEPnpl.d.ts +228 -0
  135. package/dist/core/dist/git/index.cjs +302 -0
  136. package/dist/core/dist/git/index.d.cts +137 -0
  137. package/dist/core/dist/git/index.d.ts +137 -0
  138. package/dist/core/dist/git/index.js +260 -0
  139. package/dist/core/dist/id-DMqyogFB.d.cts +131 -0
  140. package/dist/core/dist/id-DMqyogFB.d.ts +131 -0
  141. package/dist/core/dist/index.cjs +4653 -0
  142. package/dist/core/dist/index.d.cts +23 -0
  143. package/dist/core/dist/index.d.ts +23 -0
  144. package/dist/core/dist/index.js +4509 -0
  145. package/dist/core/dist/message-BoxZISHg.d.cts +120 -0
  146. package/dist/core/dist/message-DvBzHu7V.d.ts +120 -0
  147. package/dist/core/dist/permissions/index.cjs +112 -0
  148. package/dist/core/dist/permissions/index.d.cts +81 -0
  149. package/dist/core/dist/permissions/index.d.ts +81 -0
  150. package/dist/core/dist/permissions/index.js +85 -0
  151. package/dist/core/dist/repo-3CUrCRbq.d.cts +405 -0
  152. package/dist/core/dist/repo-CnvJ0B6-.d.ts +405 -0
  153. package/dist/core/dist/session-BPjJlVdZ.d.cts +429 -0
  154. package/dist/core/dist/session-wAzjHatv.d.ts +429 -0
  155. package/dist/core/dist/task-BIEgT1DK.d.cts +163 -0
  156. package/dist/core/dist/task-DuIfiUbW.d.ts +163 -0
  157. package/dist/core/dist/templates/handlebars-helpers.cjs +156 -0
  158. package/dist/core/dist/templates/handlebars-helpers.d.cts +45 -0
  159. package/dist/core/dist/templates/handlebars-helpers.d.ts +45 -0
  160. package/dist/core/dist/templates/handlebars-helpers.js +119 -0
  161. package/dist/core/dist/tools/claude/models.cjs +70 -0
  162. package/dist/core/dist/tools/claude/models.d.cts +27 -0
  163. package/dist/core/dist/tools/claude/models.d.ts +27 -0
  164. package/dist/core/dist/tools/claude/models.js +44 -0
  165. package/dist/core/dist/tools/index.cjs +3367 -0
  166. package/dist/core/dist/tools/index.d.cts +967 -0
  167. package/dist/core/dist/tools/index.d.ts +967 -0
  168. package/dist/core/dist/tools/index.js +3314 -0
  169. package/dist/core/dist/tools/models.cjs +119 -0
  170. package/dist/core/dist/tools/models.d.cts +47 -0
  171. package/dist/core/dist/tools/models.d.ts +47 -0
  172. package/dist/core/dist/tools/models.js +86 -0
  173. package/dist/core/dist/types/index.cjs +152 -0
  174. package/dist/core/dist/types/index.d.cts +214 -0
  175. package/dist/core/dist/types/index.d.ts +214 -0
  176. package/dist/core/dist/types/index.js +112 -0
  177. package/dist/core/dist/user-BmL3kFol.d.ts +50 -0
  178. package/dist/core/dist/user-eUuKj7yM.d.cts +50 -0
  179. package/dist/core/dist/utils/pricing.cjs +102 -0
  180. package/dist/core/dist/utils/pricing.d.cts +43 -0
  181. package/dist/core/dist/utils/pricing.d.ts +43 -0
  182. package/dist/core/dist/utils/pricing.js +75 -0
  183. package/dist/core/dist/worktrees-BzIxB1U6.d.cts +2745 -0
  184. package/dist/core/dist/worktrees-CYem1ya2.d.ts +2745 -0
  185. package/dist/core/environment/variable-resolver.cjs +92 -0
  186. package/dist/core/environment/variable-resolver.d.cts +52 -0
  187. package/dist/core/environment/variable-resolver.d.ts +52 -0
  188. package/dist/core/environment/variable-resolver.js +53 -0
  189. package/dist/core/feathers/index.cjs +66 -0
  190. package/dist/core/feathers/index.d.cts +7 -0
  191. package/dist/core/feathers/index.d.ts +7 -0
  192. package/dist/core/feathers/index.js +25 -0
  193. package/dist/core/feathers-BzHEPnpl.d.cts +228 -0
  194. package/dist/core/feathers-BzHEPnpl.d.ts +228 -0
  195. package/dist/core/git/index.cjs +302 -0
  196. package/dist/core/git/index.d.cts +137 -0
  197. package/dist/core/git/index.d.ts +137 -0
  198. package/dist/core/git/index.js +260 -0
  199. package/dist/core/id-DMqyogFB.d.cts +131 -0
  200. package/dist/core/id-DMqyogFB.d.ts +131 -0
  201. package/dist/core/index.cjs +4653 -0
  202. package/dist/core/index.d.cts +23 -0
  203. package/dist/core/index.d.ts +23 -0
  204. package/dist/core/index.js +4509 -0
  205. package/dist/core/message-BoxZISHg.d.cts +120 -0
  206. package/dist/core/message-DvBzHu7V.d.ts +120 -0
  207. package/dist/core/package.json +133 -0
  208. package/dist/core/permissions/index.cjs +112 -0
  209. package/dist/core/permissions/index.d.cts +81 -0
  210. package/dist/core/permissions/index.d.ts +81 -0
  211. package/dist/core/permissions/index.js +85 -0
  212. package/dist/core/repo-3CUrCRbq.d.cts +405 -0
  213. package/dist/core/repo-CnvJ0B6-.d.ts +405 -0
  214. package/dist/core/session-BPjJlVdZ.d.cts +429 -0
  215. package/dist/core/session-wAzjHatv.d.ts +429 -0
  216. package/dist/core/task-BIEgT1DK.d.cts +163 -0
  217. package/dist/core/task-DuIfiUbW.d.ts +163 -0
  218. package/dist/core/templates/handlebars-helpers.cjs +156 -0
  219. package/dist/core/templates/handlebars-helpers.d.cts +45 -0
  220. package/dist/core/templates/handlebars-helpers.d.ts +45 -0
  221. package/dist/core/templates/handlebars-helpers.js +119 -0
  222. package/dist/core/tools/claude/models.cjs +70 -0
  223. package/dist/core/tools/claude/models.d.cts +27 -0
  224. package/dist/core/tools/claude/models.d.ts +27 -0
  225. package/dist/core/tools/claude/models.js +44 -0
  226. package/dist/core/tools/index.cjs +3367 -0
  227. package/dist/core/tools/index.d.cts +967 -0
  228. package/dist/core/tools/index.d.ts +967 -0
  229. package/dist/core/tools/index.js +3314 -0
  230. package/dist/core/tools/models.cjs +119 -0
  231. package/dist/core/tools/models.d.cts +47 -0
  232. package/dist/core/tools/models.d.ts +47 -0
  233. package/dist/core/tools/models.js +86 -0
  234. package/dist/core/types/index.cjs +152 -0
  235. package/dist/core/types/index.d.cts +214 -0
  236. package/dist/core/types/index.d.ts +214 -0
  237. package/dist/core/types/index.js +112 -0
  238. package/dist/core/user-BmL3kFol.d.ts +50 -0
  239. package/dist/core/user-eUuKj7yM.d.cts +50 -0
  240. package/dist/core/utils/pricing.cjs +102 -0
  241. package/dist/core/utils/pricing.d.cts +43 -0
  242. package/dist/core/utils/pricing.d.ts +43 -0
  243. package/dist/core/utils/pricing.js +75 -0
  244. package/dist/core/worktrees-BzIxB1U6.d.cts +2745 -0
  245. package/dist/core/worktrees-CYem1ya2.d.ts +2745 -0
  246. package/dist/daemon/adapters/drizzle.d.ts +114 -0
  247. package/dist/daemon/adapters/drizzle.js +219 -0
  248. package/dist/daemon/declarations.d.ts +101 -0
  249. package/dist/daemon/declarations.js +0 -0
  250. package/dist/daemon/index.d.ts +2 -0
  251. package/dist/daemon/index.js +4093 -0
  252. package/dist/daemon/mcp/routes.d.ts +15 -0
  253. package/dist/daemon/mcp/routes.js +641 -0
  254. package/dist/daemon/mcp/tokens.d.ts +50 -0
  255. package/dist/daemon/mcp/tokens.js +85 -0
  256. package/dist/daemon/services/board-comments.d.ts +97 -0
  257. package/dist/daemon/services/board-comments.js +326 -0
  258. package/dist/daemon/services/board-objects.d.ts +71 -0
  259. package/dist/daemon/services/board-objects.js +117 -0
  260. package/dist/daemon/services/boards.d.ts +64 -0
  261. package/dist/daemon/services/boards.js +286 -0
  262. package/dist/daemon/services/config.d.ts +35 -0
  263. package/dist/daemon/services/config.js +68 -0
  264. package/dist/daemon/services/context.d.ts +55 -0
  265. package/dist/daemon/services/context.js +113 -0
  266. package/dist/daemon/services/health-monitor.d.ts +58 -0
  267. package/dist/daemon/services/health-monitor.js +158 -0
  268. package/dist/daemon/services/mcp-servers.d.ts +42 -0
  269. package/dist/daemon/services/mcp-servers.js +275 -0
  270. package/dist/daemon/services/messages.d.ts +49 -0
  271. package/dist/daemon/services/messages.js +269 -0
  272. package/dist/daemon/services/repos.d.ts +61 -0
  273. package/dist/daemon/services/repos.js +350 -0
  274. package/dist/daemon/services/session-mcp-servers.d.ts +56 -0
  275. package/dist/daemon/services/session-mcp-servers.js +51 -0
  276. package/dist/daemon/services/sessions.d.ts +64 -0
  277. package/dist/daemon/services/sessions.js +398 -0
  278. package/dist/daemon/services/tasks.d.ts +55 -0
  279. package/dist/daemon/services/tasks.js +318 -0
  280. package/dist/daemon/services/terminals.d.ts +75 -0
  281. package/dist/daemon/services/terminals.js +110 -0
  282. package/dist/daemon/services/users.d.ts +98 -0
  283. package/dist/daemon/services/users.js +177 -0
  284. package/dist/daemon/services/worktrees.d.ts +98 -0
  285. package/dist/daemon/services/worktrees.js +719 -0
  286. package/dist/daemon/strategies/anonymous.d.ts +20 -0
  287. package/dist/daemon/strategies/anonymous.js +32 -0
  288. package/dist/ui/assets/cc-CYmbalCD.png +0 -0
  289. package/dist/ui/assets/codex-4sLD1mVS.png +0 -0
  290. package/dist/ui/assets/cursor-BUy5pFVL.png +0 -0
  291. package/dist/ui/assets/gemini-ajOb7iAl.png +0 -0
  292. package/dist/ui/assets/index-Dc4ELxry.css +32 -0
  293. package/dist/ui/assets/index-KfIu8v4V.js +578 -0
  294. package/dist/ui/favicon.png +0 -0
  295. package/dist/ui/index.html +26 -0
  296. package/dist/ui/vite.svg +1 -0
  297. package/package.json +90 -0
@@ -0,0 +1,177 @@
1
+ // src/services/users.ts
2
+ import { generateId } from "@agor/core";
3
+ import { compare, eq, hash, users } from "@agor/core/db";
4
+ var UsersService = class {
5
+ constructor(db) {
6
+ this.db = db;
7
+ }
8
+ /**
9
+ * Find all users (supports filtering by email for authentication)
10
+ */
11
+ async find(params) {
12
+ const email = params?.query?.email;
13
+ const includePassword = !!email;
14
+ let rows;
15
+ if (email) {
16
+ const row = await this.db.select().from(users).where(eq(users.email, email)).get();
17
+ rows = row ? [row] : [];
18
+ } else {
19
+ rows = await this.db.select().from(users).all();
20
+ }
21
+ const results = rows.map((row) => this.rowToUser(row, includePassword));
22
+ return {
23
+ total: results.length,
24
+ limit: results.length,
25
+ skip: 0,
26
+ data: results
27
+ };
28
+ }
29
+ /**
30
+ * Get user by ID
31
+ */
32
+ async get(id, _params) {
33
+ const row = await this.db.select().from(users).where(eq(users.user_id, id)).get();
34
+ if (!row) {
35
+ throw new Error(`User not found: ${id}`);
36
+ }
37
+ return this.rowToUser(row);
38
+ }
39
+ /**
40
+ * Create new user
41
+ */
42
+ async create(data, _params) {
43
+ const existing = await this.db.select().from(users).where(eq(users.email, data.email)).get();
44
+ if (existing) {
45
+ throw new Error(`User with email ${data.email} already exists`);
46
+ }
47
+ const hashedPassword = await hash(data.password, 10);
48
+ const now = /* @__PURE__ */ new Date();
49
+ const user_id = generateId();
50
+ const role = data.role || "member";
51
+ const defaultEmoji = role === "admin" ? "\u2B50" : "\u{1F464}";
52
+ const row = await this.db.insert(users).values({
53
+ user_id,
54
+ email: data.email,
55
+ password: hashedPassword,
56
+ name: data.name,
57
+ emoji: data.emoji || defaultEmoji,
58
+ role,
59
+ created_at: now,
60
+ updated_at: now,
61
+ data: {
62
+ preferences: {}
63
+ }
64
+ }).returning().get();
65
+ return this.rowToUser(row);
66
+ }
67
+ /**
68
+ * Update user
69
+ */
70
+ async patch(id, data, _params) {
71
+ const now = /* @__PURE__ */ new Date();
72
+ const updates = { updated_at: now };
73
+ if (data.password) {
74
+ updates.password = await hash(data.password, 10);
75
+ }
76
+ if (data.email) updates.email = data.email;
77
+ if (data.name) updates.name = data.name;
78
+ if (data.emoji !== void 0) updates.emoji = data.emoji;
79
+ if (data.role) updates.role = data.role;
80
+ if (data.onboarding_completed !== void 0)
81
+ updates.onboarding_completed = data.onboarding_completed;
82
+ if (data.avatar || data.preferences) {
83
+ const current = await this.get(id);
84
+ updates.data = {
85
+ avatar: data.avatar ?? current.avatar,
86
+ preferences: data.preferences ?? current.preferences
87
+ };
88
+ }
89
+ const row = await this.db.update(users).set(updates).where(eq(users.user_id, id)).returning().get();
90
+ if (!row) {
91
+ throw new Error(`User not found: ${id}`);
92
+ }
93
+ return this.rowToUser(row);
94
+ }
95
+ /**
96
+ * Delete user
97
+ */
98
+ async remove(id, _params) {
99
+ const user = await this.get(id);
100
+ await this.db.delete(users).where(eq(users.user_id, id)).run();
101
+ return user;
102
+ }
103
+ /**
104
+ * Find user by email (for authentication)
105
+ */
106
+ async findByEmail(email) {
107
+ const row = await this.db.select().from(users).where(eq(users.email, email)).get();
108
+ return row ? this.rowToUser(row) : null;
109
+ }
110
+ /**
111
+ * Verify password
112
+ */
113
+ async verifyPassword(user, password) {
114
+ const row = await this.db.select().from(users).where(eq(users.user_id, user.user_id)).get();
115
+ if (!row) return false;
116
+ return compare(password, row.password);
117
+ }
118
+ /**
119
+ * Convert database row to User type
120
+ *
121
+ * @param row - Database row
122
+ * @param includePassword - Include password field (for authentication only)
123
+ */
124
+ rowToUser(row, includePassword = false) {
125
+ const data = row.data;
126
+ const user = {
127
+ user_id: row.user_id,
128
+ email: row.email,
129
+ name: row.name ?? void 0,
130
+ emoji: row.emoji ?? void 0,
131
+ role: row.role,
132
+ avatar: data.avatar,
133
+ preferences: data.preferences,
134
+ onboarding_completed: !!row.onboarding_completed,
135
+ created_at: row.created_at,
136
+ updated_at: row.updated_at ?? void 0
137
+ };
138
+ if (includePassword) {
139
+ user.password = row.password;
140
+ }
141
+ return user;
142
+ }
143
+ };
144
+ var UsersServiceWithAuth = class extends UsersService {
145
+ /**
146
+ * Override get to include password for authentication
147
+ * (FeathersJS LocalStrategy needs this)
148
+ */
149
+ async getWithPassword(id) {
150
+ const row = await this.db.select().from(users).where(eq(users.user_id, id)).get();
151
+ if (!row) {
152
+ throw new Error(`User not found: ${id}`);
153
+ }
154
+ const data = row.data;
155
+ return {
156
+ user_id: row.user_id,
157
+ email: row.email,
158
+ password: row.password,
159
+ // Include for authentication
160
+ name: row.name ?? void 0,
161
+ emoji: row.emoji ?? void 0,
162
+ role: row.role,
163
+ avatar: data.avatar,
164
+ preferences: data.preferences,
165
+ onboarding_completed: !!row.onboarding_completed,
166
+ created_at: row.created_at,
167
+ updated_at: row.updated_at ?? void 0
168
+ };
169
+ }
170
+ };
171
+ function createUsersService(db) {
172
+ return new UsersServiceWithAuth(db);
173
+ }
174
+ export {
175
+ UsersService,
176
+ createUsersService
177
+ };
@@ -0,0 +1,98 @@
1
+ import * as _agor_core from '@agor/core';
2
+ import { Database } from '@agor/core/db';
3
+ import { Application } from '@agor/core/feathers';
4
+ import { QueryParams, UUID, Worktree, WorktreeID } from '@agor/core/types';
5
+ import { DrizzleService } from '../adapters/drizzle.js';
6
+
7
+ /**
8
+ * Worktree service params
9
+ */
10
+ type WorktreeParams = QueryParams<{
11
+ repo_id?: UUID;
12
+ name?: string;
13
+ ref?: string;
14
+ deleteFromFilesystem?: boolean;
15
+ }>;
16
+ /**
17
+ * Extended worktrees service with custom methods
18
+ */
19
+ declare class WorktreesService extends DrizzleService<Worktree, Partial<Worktree>, WorktreeParams> {
20
+ private worktreeRepo;
21
+ private app;
22
+ private processes;
23
+ constructor(db: Database, app: Application);
24
+ /**
25
+ * Override patch to handle board_objects when board_id changes
26
+ */
27
+ patch(id: WorktreeID, data: Partial<Worktree>, params?: WorktreeParams): Promise<Worktree>;
28
+ /**
29
+ * Override find to support repo_id filter
30
+ */
31
+ find(params?: WorktreeParams): Promise<Worktree[] | _agor_core.Paginated<Worktree>>;
32
+ /**
33
+ * Override remove to support filesystem deletion
34
+ */
35
+ remove(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
36
+ /**
37
+ * Custom method: Find worktree by repo_id and name
38
+ */
39
+ findByRepoAndName(repoId: UUID, name: string, _params?: WorktreeParams): Promise<Worktree | null>;
40
+ /**
41
+ * Custom method: Add session to worktree
42
+ */
43
+ addSession(id: WorktreeID, sessionId: UUID, params?: WorktreeParams): Promise<Worktree>;
44
+ /**
45
+ * Custom method: Remove session from worktree
46
+ */
47
+ removeSession(id: WorktreeID, sessionId: UUID, params?: WorktreeParams): Promise<Worktree>;
48
+ /**
49
+ * Custom method: Add worktree to board
50
+ *
51
+ * Phase 0: Sets board_id on worktree
52
+ * Phase 1: Will also create board_object entry for positioning
53
+ */
54
+ addToBoard(id: WorktreeID, boardId: UUID, params?: WorktreeParams): Promise<Worktree>;
55
+ /**
56
+ * Custom method: Remove worktree from board
57
+ *
58
+ * Phase 0: Clears board_id on worktree
59
+ * Phase 1: Will also remove board_object entry
60
+ */
61
+ removeFromBoard(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
62
+ /**
63
+ * Custom method: Update environment status
64
+ */
65
+ updateEnvironment(id: WorktreeID, environmentUpdate: Partial<Worktree['environment_instance']>, params?: WorktreeParams): Promise<Worktree>;
66
+ /**
67
+ * Custom method: Start environment
68
+ */
69
+ startEnvironment(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
70
+ /**
71
+ * Custom method: Stop environment
72
+ */
73
+ stopEnvironment(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
74
+ /**
75
+ * Custom method: Restart environment
76
+ */
77
+ restartEnvironment(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
78
+ /**
79
+ * Custom method: Check health
80
+ */
81
+ checkHealth(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
82
+ /**
83
+ * Custom method: Recompute access URLs for a running environment
84
+ *
85
+ * Called when repo environment_config is updated to refresh URLs without restart
86
+ */
87
+ recomputeAccessUrls(id: WorktreeID, params?: WorktreeParams): Promise<Worktree>;
88
+ /**
89
+ * Build template context for Handlebars rendering
90
+ */
91
+ private buildTemplateContext;
92
+ }
93
+ /**
94
+ * Service factory function
95
+ */
96
+ declare function createWorktreesService(db: Database, app: Application): WorktreesService;
97
+
98
+ export { type WorktreeParams, WorktreesService, createWorktreesService };