@morten-olsen/builder-server 0.0.6

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 (270) hide show
  1. package/dist/app/app.d.ts +11 -0
  2. package/dist/app/app.d.ts.map +1 -0
  3. package/dist/app/app.js +141 -0
  4. package/dist/app/app.js.map +1 -0
  5. package/dist/app/app.routes.d.ts +4 -0
  6. package/dist/app/app.routes.d.ts.map +1 -0
  7. package/dist/app/app.routes.js +22 -0
  8. package/dist/app/app.routes.js.map +1 -0
  9. package/dist/app/app.types.d.ts +15 -0
  10. package/dist/app/app.types.d.ts.map +1 -0
  11. package/dist/app/app.types.js +2 -0
  12. package/dist/app/app.types.js.map +1 -0
  13. package/dist/config/config.d.ts +31 -0
  14. package/dist/config/config.d.ts.map +1 -0
  15. package/dist/config/config.js +93 -0
  16. package/dist/config/config.js.map +1 -0
  17. package/dist/config/config.testing.d.ts +4 -0
  18. package/dist/config/config.testing.d.ts.map +1 -0
  19. package/dist/config/config.testing.js +17 -0
  20. package/dist/config/config.testing.js.map +1 -0
  21. package/dist/container/container.d.ts +38 -0
  22. package/dist/container/container.d.ts.map +1 -0
  23. package/dist/container/container.js +33 -0
  24. package/dist/container/container.js.map +1 -0
  25. package/dist/container/container.test.d.ts +2 -0
  26. package/dist/container/container.test.d.ts.map +1 -0
  27. package/dist/container/container.test.js +65 -0
  28. package/dist/container/container.test.js.map +1 -0
  29. package/dist/exports.d.ts +67 -0
  30. package/dist/exports.d.ts.map +1 -0
  31. package/dist/exports.js +44 -0
  32. package/dist/exports.js.map +1 -0
  33. package/dist/routes/auth/auth.d.ts +4 -0
  34. package/dist/routes/auth/auth.d.ts.map +1 -0
  35. package/dist/routes/auth/auth.js +74 -0
  36. package/dist/routes/auth/auth.js.map +1 -0
  37. package/dist/routes/auth/auth.schemas.d.ts +42 -0
  38. package/dist/routes/auth/auth.schemas.d.ts.map +1 -0
  39. package/dist/routes/auth/auth.schemas.js +34 -0
  40. package/dist/routes/auth/auth.schemas.js.map +1 -0
  41. package/dist/routes/auth/auth.test.d.ts +2 -0
  42. package/dist/routes/auth/auth.test.d.ts.map +1 -0
  43. package/dist/routes/auth/auth.test.js +203 -0
  44. package/dist/routes/auth/auth.test.js.map +1 -0
  45. package/dist/routes/events/events.d.ts +4 -0
  46. package/dist/routes/events/events.d.ts.map +1 -0
  47. package/dist/routes/events/events.js +28 -0
  48. package/dist/routes/events/events.js.map +1 -0
  49. package/dist/routes/identities/identities.d.ts +4 -0
  50. package/dist/routes/identities/identities.d.ts.map +1 -0
  51. package/dist/routes/identities/identities.js +128 -0
  52. package/dist/routes/identities/identities.js.map +1 -0
  53. package/dist/routes/identities/identities.schemas.d.ts +52 -0
  54. package/dist/routes/identities/identities.schemas.d.ts.map +1 -0
  55. package/dist/routes/identities/identities.schemas.js +38 -0
  56. package/dist/routes/identities/identities.schemas.js.map +1 -0
  57. package/dist/routes/identities/identities.test.d.ts +2 -0
  58. package/dist/routes/identities/identities.test.d.ts.map +1 -0
  59. package/dist/routes/identities/identities.test.js +329 -0
  60. package/dist/routes/identities/identities.test.js.map +1 -0
  61. package/dist/routes/models/models.d.ts +4 -0
  62. package/dist/routes/models/models.d.ts.map +1 -0
  63. package/dist/routes/models/models.js +60 -0
  64. package/dist/routes/models/models.js.map +1 -0
  65. package/dist/routes/models/models.schemas.d.ts +16 -0
  66. package/dist/routes/models/models.schemas.d.ts.map +1 -0
  67. package/dist/routes/models/models.schemas.js +9 -0
  68. package/dist/routes/models/models.schemas.js.map +1 -0
  69. package/dist/routes/notifications/notifications.d.ts +4 -0
  70. package/dist/routes/notifications/notifications.d.ts.map +1 -0
  71. package/dist/routes/notifications/notifications.js +226 -0
  72. package/dist/routes/notifications/notifications.js.map +1 -0
  73. package/dist/routes/notifications/notifications.schemas.d.ts +61 -0
  74. package/dist/routes/notifications/notifications.schemas.d.ts.map +1 -0
  75. package/dist/routes/notifications/notifications.schemas.js +44 -0
  76. package/dist/routes/notifications/notifications.schemas.js.map +1 -0
  77. package/dist/routes/notifications/notifications.test.d.ts +2 -0
  78. package/dist/routes/notifications/notifications.test.d.ts.map +1 -0
  79. package/dist/routes/notifications/notifications.test.js +44 -0
  80. package/dist/routes/notifications/notifications.test.js.map +1 -0
  81. package/dist/routes/repos/repos.d.ts +4 -0
  82. package/dist/routes/repos/repos.d.ts.map +1 -0
  83. package/dist/routes/repos/repos.js +142 -0
  84. package/dist/routes/repos/repos.js.map +1 -0
  85. package/dist/routes/repos/repos.schemas.d.ts +47 -0
  86. package/dist/routes/repos/repos.schemas.d.ts.map +1 -0
  87. package/dist/routes/repos/repos.schemas.js +32 -0
  88. package/dist/routes/repos/repos.schemas.js.map +1 -0
  89. package/dist/routes/sessions/sessions.d.ts +4 -0
  90. package/dist/routes/sessions/sessions.d.ts.map +1 -0
  91. package/dist/routes/sessions/sessions.js +299 -0
  92. package/dist/routes/sessions/sessions.js.map +1 -0
  93. package/dist/routes/sessions/sessions.review.d.ts +4 -0
  94. package/dist/routes/sessions/sessions.review.d.ts.map +1 -0
  95. package/dist/routes/sessions/sessions.review.js +294 -0
  96. package/dist/routes/sessions/sessions.review.js.map +1 -0
  97. package/dist/routes/sessions/sessions.review.schemas.d.ts +83 -0
  98. package/dist/routes/sessions/sessions.review.schemas.d.ts.map +1 -0
  99. package/dist/routes/sessions/sessions.review.schemas.js +55 -0
  100. package/dist/routes/sessions/sessions.review.schemas.js.map +1 -0
  101. package/dist/routes/sessions/sessions.schemas.d.ts +81 -0
  102. package/dist/routes/sessions/sessions.schemas.d.ts.map +1 -0
  103. package/dist/routes/sessions/sessions.schemas.js +50 -0
  104. package/dist/routes/sessions/sessions.schemas.js.map +1 -0
  105. package/dist/routes/sessions/sessions.test.d.ts +2 -0
  106. package/dist/routes/sessions/sessions.test.d.ts.map +1 -0
  107. package/dist/routes/sessions/sessions.test.js +297 -0
  108. package/dist/routes/sessions/sessions.test.js.map +1 -0
  109. package/dist/routes/ws/ws.d.ts +4 -0
  110. package/dist/routes/ws/ws.d.ts.map +1 -0
  111. package/dist/routes/ws/ws.js +8 -0
  112. package/dist/routes/ws/ws.js.map +1 -0
  113. package/dist/services/agent/agent.claude.d.ts +4 -0
  114. package/dist/services/agent/agent.claude.d.ts.map +1 -0
  115. package/dist/services/agent/agent.claude.js +141 -0
  116. package/dist/services/agent/agent.claude.js.map +1 -0
  117. package/dist/services/agent/agent.claude.test.d.ts +2 -0
  118. package/dist/services/agent/agent.claude.test.d.ts.map +1 -0
  119. package/dist/services/agent/agent.claude.test.js +43 -0
  120. package/dist/services/agent/agent.claude.test.js.map +1 -0
  121. package/dist/services/agent/agent.d.ts +58 -0
  122. package/dist/services/agent/agent.d.ts.map +1 -0
  123. package/dist/services/agent/agent.errors.d.ts +8 -0
  124. package/dist/services/agent/agent.errors.d.ts.map +1 -0
  125. package/dist/services/agent/agent.errors.js +14 -0
  126. package/dist/services/agent/agent.errors.js.map +1 -0
  127. package/dist/services/agent/agent.js +21 -0
  128. package/dist/services/agent/agent.js.map +1 -0
  129. package/dist/services/agent/agent.queue.d.ts +8 -0
  130. package/dist/services/agent/agent.queue.d.ts.map +1 -0
  131. package/dist/services/agent/agent.queue.js +46 -0
  132. package/dist/services/agent/agent.queue.js.map +1 -0
  133. package/dist/services/auth/auth.d.ts +41 -0
  134. package/dist/services/auth/auth.d.ts.map +1 -0
  135. package/dist/services/auth/auth.errors.d.ts +17 -0
  136. package/dist/services/auth/auth.errors.d.ts.map +1 -0
  137. package/dist/services/auth/auth.errors.js +32 -0
  138. package/dist/services/auth/auth.errors.js.map +1 -0
  139. package/dist/services/auth/auth.js +147 -0
  140. package/dist/services/auth/auth.js.map +1 -0
  141. package/dist/services/auth/auth.test.d.ts +2 -0
  142. package/dist/services/auth/auth.test.d.ts.map +1 -0
  143. package/dist/services/auth/auth.test.js +55 -0
  144. package/dist/services/auth/auth.test.js.map +1 -0
  145. package/dist/services/auth/auth.utils.d.ts +4 -0
  146. package/dist/services/auth/auth.utils.d.ts.map +1 -0
  147. package/dist/services/auth/auth.utils.js +15 -0
  148. package/dist/services/auth/auth.utils.js.map +1 -0
  149. package/dist/services/auth/auth.utils.test.d.ts +2 -0
  150. package/dist/services/auth/auth.utils.test.d.ts.map +1 -0
  151. package/dist/services/auth/auth.utils.test.js +20 -0
  152. package/dist/services/auth/auth.utils.test.js.map +1 -0
  153. package/dist/services/database/database.d.ts +102 -0
  154. package/dist/services/database/database.d.ts.map +1 -0
  155. package/dist/services/database/database.js +41 -0
  156. package/dist/services/database/database.js.map +1 -0
  157. package/dist/services/database/database.migrations.d.ts +4 -0
  158. package/dist/services/database/database.migrations.d.ts.map +1 -0
  159. package/dist/services/database/database.migrations.js +290 -0
  160. package/dist/services/database/database.migrations.js.map +1 -0
  161. package/dist/services/database/database.test.d.ts +2 -0
  162. package/dist/services/database/database.test.d.ts.map +1 -0
  163. package/dist/services/database/database.test.js +60 -0
  164. package/dist/services/database/database.test.js.map +1 -0
  165. package/dist/services/file-review/file-review.d.ts +34 -0
  166. package/dist/services/file-review/file-review.d.ts.map +1 -0
  167. package/dist/services/file-review/file-review.js +71 -0
  168. package/dist/services/file-review/file-review.js.map +1 -0
  169. package/dist/services/file-review/file-review.test.d.ts +2 -0
  170. package/dist/services/file-review/file-review.test.d.ts.map +1 -0
  171. package/dist/services/file-review/file-review.test.js +171 -0
  172. package/dist/services/file-review/file-review.test.js.map +1 -0
  173. package/dist/services/git/git.d.ts +95 -0
  174. package/dist/services/git/git.d.ts.map +1 -0
  175. package/dist/services/git/git.errors.d.ts +20 -0
  176. package/dist/services/git/git.errors.d.ts.map +1 -0
  177. package/dist/services/git/git.errors.js +38 -0
  178. package/dist/services/git/git.errors.js.map +1 -0
  179. package/dist/services/git/git.js +341 -0
  180. package/dist/services/git/git.js.map +1 -0
  181. package/dist/services/git/git.test.d.ts +2 -0
  182. package/dist/services/git/git.test.d.ts.map +1 -0
  183. package/dist/services/git/git.test.js +304 -0
  184. package/dist/services/git/git.test.js.map +1 -0
  185. package/dist/services/identity/identity.d.ts +49 -0
  186. package/dist/services/identity/identity.d.ts.map +1 -0
  187. package/dist/services/identity/identity.errors.d.ts +11 -0
  188. package/dist/services/identity/identity.errors.d.ts.map +1 -0
  189. package/dist/services/identity/identity.errors.js +20 -0
  190. package/dist/services/identity/identity.errors.js.map +1 -0
  191. package/dist/services/identity/identity.js +196 -0
  192. package/dist/services/identity/identity.js.map +1 -0
  193. package/dist/services/identity/identity.test.d.ts +2 -0
  194. package/dist/services/identity/identity.test.d.ts.map +1 -0
  195. package/dist/services/identity/identity.test.js +184 -0
  196. package/dist/services/identity/identity.test.js.map +1 -0
  197. package/dist/services/identity/identity.utils.d.ts +9 -0
  198. package/dist/services/identity/identity.utils.d.ts.map +1 -0
  199. package/dist/services/identity/identity.utils.js +47 -0
  200. package/dist/services/identity/identity.utils.js.map +1 -0
  201. package/dist/services/identity/identity.utils.test.d.ts +2 -0
  202. package/dist/services/identity/identity.utils.test.d.ts.map +1 -0
  203. package/dist/services/identity/identity.utils.test.js +49 -0
  204. package/dist/services/identity/identity.utils.test.js.map +1 -0
  205. package/dist/services/message/message.d.ts +29 -0
  206. package/dist/services/message/message.d.ts.map +1 -0
  207. package/dist/services/message/message.js +85 -0
  208. package/dist/services/message/message.js.map +1 -0
  209. package/dist/services/notification/notification.d.ts +75 -0
  210. package/dist/services/notification/notification.d.ts.map +1 -0
  211. package/dist/services/notification/notification.errors.d.ts +14 -0
  212. package/dist/services/notification/notification.errors.d.ts.map +1 -0
  213. package/dist/services/notification/notification.errors.js +26 -0
  214. package/dist/services/notification/notification.errors.js.map +1 -0
  215. package/dist/services/notification/notification.js +212 -0
  216. package/dist/services/notification/notification.js.map +1 -0
  217. package/dist/services/notification/notification.ntfy.d.ts +12 -0
  218. package/dist/services/notification/notification.ntfy.d.ts.map +1 -0
  219. package/dist/services/notification/notification.ntfy.js +44 -0
  220. package/dist/services/notification/notification.ntfy.js.map +1 -0
  221. package/dist/services/repo/repo.d.ts +46 -0
  222. package/dist/services/repo/repo.d.ts.map +1 -0
  223. package/dist/services/repo/repo.errors.d.ts +11 -0
  224. package/dist/services/repo/repo.errors.d.ts.map +1 -0
  225. package/dist/services/repo/repo.errors.js +20 -0
  226. package/dist/services/repo/repo.errors.js.map +1 -0
  227. package/dist/services/repo/repo.js +138 -0
  228. package/dist/services/repo/repo.js.map +1 -0
  229. package/dist/services/session/session.d.ts +62 -0
  230. package/dist/services/session/session.d.ts.map +1 -0
  231. package/dist/services/session/session.errors.d.ts +11 -0
  232. package/dist/services/session/session.errors.d.ts.map +1 -0
  233. package/dist/services/session/session.errors.js +20 -0
  234. package/dist/services/session/session.errors.js.map +1 -0
  235. package/dist/services/session/session.js +168 -0
  236. package/dist/services/session/session.js.map +1 -0
  237. package/dist/services/session/session.runner.d.ts +8 -0
  238. package/dist/services/session/session.runner.d.ts.map +1 -0
  239. package/dist/services/session/session.runner.js +328 -0
  240. package/dist/services/session/session.runner.js.map +1 -0
  241. package/dist/services/session/session.runner.test.d.ts +2 -0
  242. package/dist/services/session/session.runner.test.d.ts.map +1 -0
  243. package/dist/services/session/session.runner.test.js +143 -0
  244. package/dist/services/session/session.runner.test.js.map +1 -0
  245. package/dist/services/session/session.test.d.ts +2 -0
  246. package/dist/services/session/session.test.d.ts.map +1 -0
  247. package/dist/services/session/session.test.js +146 -0
  248. package/dist/services/session/session.test.js.map +1 -0
  249. package/dist/services/session-event/session-event.d.ts +28 -0
  250. package/dist/services/session-event/session-event.d.ts.map +1 -0
  251. package/dist/services/session-event/session-event.js +86 -0
  252. package/dist/services/session-event/session-event.js.map +1 -0
  253. package/dist/sse/event-bus.d.ts +74 -0
  254. package/dist/sse/event-bus.d.ts.map +1 -0
  255. package/dist/sse/event-bus.js +137 -0
  256. package/dist/sse/event-bus.js.map +1 -0
  257. package/dist/sse/stream.d.ts +20 -0
  258. package/dist/sse/stream.d.ts.map +1 -0
  259. package/dist/sse/stream.js +66 -0
  260. package/dist/sse/stream.js.map +1 -0
  261. package/dist/tsconfig.tsbuildinfo +1 -0
  262. package/dist/utils/crypto.d.ts +4 -0
  263. package/dist/utils/crypto.d.ts.map +1 -0
  264. package/dist/utils/crypto.js +21 -0
  265. package/dist/utils/crypto.js.map +1 -0
  266. package/dist/ws/ws.d.ts +30 -0
  267. package/dist/ws/ws.d.ts.map +1 -0
  268. package/dist/ws/ws.js +137 -0
  269. package/dist/ws/ws.js.map +1 -0
  270. package/package.json +50 -0
@@ -0,0 +1,168 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { DatabaseService } from '../database/database.js';
3
+ import { SessionNotFoundError } from './session.errors.js';
4
+ const mapRow = (row) => ({
5
+ id: row.id,
6
+ userId: row.user_id,
7
+ identityId: row.identity_id,
8
+ repoUrl: row.repo_url,
9
+ branch: row.branch,
10
+ prompt: row.prompt,
11
+ status: row.status,
12
+ error: row.error,
13
+ repoId: row.repo_id,
14
+ model: row.model,
15
+ pinnedAt: row.pinned_at,
16
+ createdAt: row.created_at,
17
+ updatedAt: row.updated_at,
18
+ });
19
+ class SessionService {
20
+ #services;
21
+ constructor(services) {
22
+ this.#services = services;
23
+ }
24
+ get #database() {
25
+ return this.#services.get(DatabaseService);
26
+ }
27
+ create = async (input) => {
28
+ const db = await this.#database.getInstance();
29
+ const id = randomUUID();
30
+ const now = new Date().toISOString();
31
+ await db
32
+ .insertInto('sessions')
33
+ .values({
34
+ id,
35
+ user_id: input.userId,
36
+ identity_id: input.identityId,
37
+ repo_url: input.repoUrl,
38
+ branch: input.branch,
39
+ prompt: input.prompt,
40
+ status: 'pending',
41
+ error: null,
42
+ repo_id: input.repoId ?? null,
43
+ model: input.model ?? null,
44
+ created_at: now,
45
+ updated_at: now,
46
+ })
47
+ .execute();
48
+ return {
49
+ id,
50
+ userId: input.userId,
51
+ identityId: input.identityId,
52
+ repoUrl: input.repoUrl,
53
+ branch: input.branch,
54
+ prompt: input.prompt,
55
+ status: 'pending',
56
+ error: null,
57
+ repoId: input.repoId ?? null,
58
+ model: input.model ?? null,
59
+ pinnedAt: null,
60
+ createdAt: now,
61
+ updatedAt: now,
62
+ };
63
+ };
64
+ list = async (userId) => {
65
+ const db = await this.#database.getInstance();
66
+ const rows = await db
67
+ .selectFrom('sessions')
68
+ .selectAll()
69
+ .where('user_id', '=', userId)
70
+ .orderBy('created_at', 'desc')
71
+ .execute();
72
+ return rows.map(mapRow);
73
+ };
74
+ get = async (input) => {
75
+ const db = await this.#database.getInstance();
76
+ const row = await db
77
+ .selectFrom('sessions')
78
+ .selectAll()
79
+ .where('id', '=', input.sessionId)
80
+ .where('user_id', '=', input.userId)
81
+ .executeTakeFirst();
82
+ if (!row) {
83
+ throw new SessionNotFoundError();
84
+ }
85
+ return mapRow(row);
86
+ };
87
+ getById = async (sessionId) => {
88
+ const db = await this.#database.getInstance();
89
+ const row = await db
90
+ .selectFrom('sessions')
91
+ .selectAll()
92
+ .where('id', '=', sessionId)
93
+ .executeTakeFirst();
94
+ if (!row) {
95
+ throw new SessionNotFoundError();
96
+ }
97
+ return mapRow(row);
98
+ };
99
+ updateStatus = async (input) => {
100
+ const db = await this.#database.getInstance();
101
+ const now = new Date().toISOString();
102
+ await db
103
+ .updateTable('sessions')
104
+ .set({
105
+ status: input.status,
106
+ error: input.error ?? null,
107
+ updated_at: now,
108
+ })
109
+ .where('id', '=', input.sessionId)
110
+ .execute();
111
+ };
112
+ listAll = async (userId) => {
113
+ const db = await this.#database.getInstance();
114
+ let query = db
115
+ .selectFrom('sessions')
116
+ .selectAll()
117
+ .orderBy('created_at', 'desc');
118
+ if (userId) {
119
+ query = query.where('user_id', '=', userId);
120
+ }
121
+ const rows = await query.execute();
122
+ return rows.map(mapRow);
123
+ };
124
+ listByRepo = async (input) => {
125
+ const db = await this.#database.getInstance();
126
+ const rows = await db
127
+ .selectFrom('sessions')
128
+ .selectAll()
129
+ .where('user_id', '=', input.userId)
130
+ .where('repo_id', '=', input.repoId)
131
+ .orderBy('created_at', 'desc')
132
+ .execute();
133
+ return rows.map(mapRow);
134
+ };
135
+ pin = async (input) => {
136
+ const db = await this.#database.getInstance();
137
+ const now = new Date().toISOString();
138
+ await db
139
+ .updateTable('sessions')
140
+ .set({ pinned_at: now, updated_at: now })
141
+ .where('id', '=', input.sessionId)
142
+ .where('user_id', '=', input.userId)
143
+ .execute();
144
+ };
145
+ unpin = async (input) => {
146
+ const db = await this.#database.getInstance();
147
+ const now = new Date().toISOString();
148
+ await db
149
+ .updateTable('sessions')
150
+ .set({ pinned_at: null, updated_at: now })
151
+ .where('id', '=', input.sessionId)
152
+ .where('user_id', '=', input.userId)
153
+ .execute();
154
+ };
155
+ delete = async (input) => {
156
+ const db = await this.#database.getInstance();
157
+ const result = await db
158
+ .deleteFrom('sessions')
159
+ .where('id', '=', input.sessionId)
160
+ .where('user_id', '=', input.userId)
161
+ .executeTakeFirst();
162
+ if (result.numDeletedRows === 0n) {
163
+ throw new SessionNotFoundError();
164
+ }
165
+ };
166
+ }
167
+ export { SessionService };
168
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/services/session/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Services } from '../../container/container.js';
2
+ declare const startSession: (services: Services, sessionId: string) => Promise<void>;
3
+ declare const sendSessionMessage: (services: Services, sessionId: string, message: string) => Promise<void>;
4
+ declare const interruptSession: (services: Services, sessionId: string) => Promise<void>;
5
+ declare const stopSession: (services: Services, sessionId: string) => Promise<void>;
6
+ declare const revertSession: (services: Services, sessionId: string, messageId: string) => Promise<void>;
7
+ export { startSession, sendSessionMessage, interruptSession, stopSession, revertSession };
8
+ //# sourceMappingURL=session.runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.runner.d.ts","sourceRoot":"","sources":["../../../src/services/session/session.runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAiJ7D,QAAA,MAAM,YAAY,GAAU,UAAU,QAAQ,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAoE/E,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAU,UAAU,QAAQ,EAAE,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAoDtG,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAU,UAAU,QAAQ,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAanF,CAAC;AAEF,QAAA,MAAM,WAAW,GAAU,UAAU,QAAQ,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAa9E,CAAC;AAEF,QAAA,MAAM,aAAa,GAAU,UAAU,QAAQ,EAAE,WAAW,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CA2EnG,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,328 @@
1
+ import path from 'node:path';
2
+ import { AgentService } from '../agent/agent.js';
3
+ import { DatabaseService } from '../database/database.js';
4
+ import { GitService } from '../git/git.js';
5
+ import { IdentityService } from '../identity/identity.js';
6
+ import { MessageService } from '../message/message.js';
7
+ import { SessionEventService } from '../session-event/session-event.js';
8
+ import { EventBusService } from '../../sse/event-bus.js';
9
+ import { SessionService } from './session.js';
10
+ const mapAgentEvent = (sessionId, event, eventBus) => {
11
+ switch (event.type) {
12
+ case 'message':
13
+ eventBus.emit(sessionId, {
14
+ type: 'agent:output',
15
+ data: { text: event.message.content, messageType: event.message.role },
16
+ });
17
+ break;
18
+ case 'tool_use':
19
+ eventBus.emit(sessionId, {
20
+ type: 'agent:tool_use',
21
+ data: { tool: event.tool, input: event.input },
22
+ });
23
+ break;
24
+ case 'tool_result':
25
+ eventBus.emit(sessionId, {
26
+ type: 'agent:tool_result',
27
+ data: { tool: event.tool, output: event.output },
28
+ });
29
+ break;
30
+ case 'waiting_for_input':
31
+ eventBus.emit(sessionId, {
32
+ type: 'session:waiting_for_input',
33
+ data: { prompt: event.prompt },
34
+ });
35
+ break;
36
+ case 'completed':
37
+ eventBus.emit(sessionId, {
38
+ type: 'session:completed',
39
+ data: { summary: event.summary },
40
+ });
41
+ break;
42
+ case 'error':
43
+ eventBus.emit(sessionId, {
44
+ type: 'session:error',
45
+ data: { error: event.error },
46
+ });
47
+ break;
48
+ }
49
+ };
50
+ const worktreePath = (services, sessionId) => path.join(services.config.session.dataDir, 'worktrees', sessionId);
51
+ const snapshotWorktree = async (services, sessionId) => {
52
+ try {
53
+ const sessionService = services.get(SessionService);
54
+ const identityService = services.get(IdentityService);
55
+ const gitService = services.get(GitService);
56
+ const session = await sessionService.getById(sessionId);
57
+ const identity = await identityService.get({
58
+ userId: session.userId,
59
+ identityId: session.identityId,
60
+ });
61
+ const cwd = worktreePath(services, sessionId);
62
+ const hasChanges = await gitService.hasUncommittedChanges({ worktreePath: cwd });
63
+ if (hasChanges) {
64
+ const sha = await gitService.commit({
65
+ worktreePath: cwd,
66
+ message: '[snapshot] pre-agent',
67
+ authorName: identity.gitAuthorName,
68
+ authorEmail: identity.gitAuthorEmail,
69
+ });
70
+ return sha;
71
+ }
72
+ return gitService.getHead({ worktreePath: cwd });
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ };
78
+ const runAgentLoop = async (services, sessionId, prompt, cwd, resume, model) => {
79
+ const sessionService = services.get(SessionService);
80
+ const agentService = services.get(AgentService);
81
+ const eventBus = services.get(EventBusService);
82
+ const messageService = services.get(MessageService);
83
+ const provider = agentService.getProvider();
84
+ await provider.run({
85
+ sessionId,
86
+ prompt,
87
+ cwd,
88
+ resume,
89
+ model,
90
+ onEvent: async (event) => {
91
+ mapAgentEvent(sessionId, event, eventBus);
92
+ if (event.type === 'completed') {
93
+ await sessionService.updateStatus({ sessionId, status: 'idle' });
94
+ eventBus.emit(sessionId, {
95
+ type: 'session:status',
96
+ data: { status: 'idle' },
97
+ });
98
+ await messageService.create({
99
+ sessionId,
100
+ role: 'assistant',
101
+ content: event.summary,
102
+ });
103
+ }
104
+ else if (event.type === 'error') {
105
+ await sessionService.updateStatus({ sessionId, status: 'failed', error: event.error });
106
+ }
107
+ else if (event.type === 'waiting_for_input') {
108
+ await sessionService.updateStatus({ sessionId, status: 'waiting_for_input' });
109
+ }
110
+ },
111
+ });
112
+ // provider.run() resolves after all onEvent callbacks have been awaited.
113
+ // If the agent completed normally, status is already 'idle'. If it was
114
+ // stopped/aborted externally, the caller already set the appropriate status.
115
+ // Only mark completed as a fallback if status is still 'running' (e.g. the
116
+ // stream ended without an explicit result message).
117
+ const current = await sessionService.getById(sessionId);
118
+ if (current.status === 'running') {
119
+ await sessionService.updateStatus({ sessionId, status: 'completed' });
120
+ eventBus.emit(sessionId, {
121
+ type: 'session:status',
122
+ data: { status: 'completed' },
123
+ });
124
+ }
125
+ };
126
+ const startSession = async (services, sessionId) => {
127
+ const sessionService = services.get(SessionService);
128
+ const identityService = services.get(IdentityService);
129
+ const gitService = services.get(GitService);
130
+ const eventBus = services.get(EventBusService);
131
+ const messageService = services.get(MessageService);
132
+ try {
133
+ const session = await sessionService.getById(sessionId);
134
+ eventBus.registerSession(sessionId, session.userId);
135
+ eventBus.emit(sessionId, {
136
+ type: 'session:status',
137
+ data: { status: 'cloning' },
138
+ });
139
+ const sshPrivateKey = await identityService.getPrivateKey({
140
+ userId: session.userId,
141
+ identityId: session.identityId,
142
+ });
143
+ const bareRepoPath = await gitService.ensureBareClone({
144
+ repoUrl: session.repoUrl,
145
+ identityId: session.identityId,
146
+ sshPrivateKey,
147
+ });
148
+ await gitService.fetch({ bareRepoPath, sshPrivateKey });
149
+ const cwd = await gitService.createWorktree({
150
+ bareRepoPath,
151
+ sessionId,
152
+ ref: session.branch,
153
+ });
154
+ await sessionService.updateStatus({ sessionId, status: 'running' });
155
+ eventBus.emit(sessionId, {
156
+ type: 'session:status',
157
+ data: { status: 'running' },
158
+ });
159
+ const commitSha = await snapshotWorktree(services, sessionId);
160
+ const userMessage = await messageService.create({
161
+ sessionId,
162
+ role: 'user',
163
+ content: session.prompt,
164
+ commitSha: commitSha ?? undefined,
165
+ });
166
+ eventBus.emit(sessionId, {
167
+ type: 'user:message',
168
+ data: { message: session.prompt },
169
+ });
170
+ if (commitSha) {
171
+ eventBus.emit(sessionId, {
172
+ type: 'session:snapshot',
173
+ data: { messageId: userMessage.id, commitSha },
174
+ });
175
+ }
176
+ await runAgentLoop(services, sessionId, session.prompt, cwd, undefined, session.model ?? undefined);
177
+ }
178
+ catch (error) {
179
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
180
+ await sessionService.updateStatus({ sessionId, status: 'failed', error: errorMessage });
181
+ eventBus.emit(sessionId, {
182
+ type: 'session:error',
183
+ data: { error: errorMessage },
184
+ });
185
+ }
186
+ };
187
+ const sendSessionMessage = async (services, sessionId, message) => {
188
+ const sessionService = services.get(SessionService);
189
+ const messageService = services.get(MessageService);
190
+ const agentService = services.get(AgentService);
191
+ const eventBus = services.get(EventBusService);
192
+ const session = await sessionService.getById(sessionId);
193
+ eventBus.registerSession(sessionId, session.userId);
194
+ const commitSha = await snapshotWorktree(services, sessionId);
195
+ const userMessage = await messageService.create({ sessionId, role: 'user', content: message, commitSha: commitSha ?? undefined });
196
+ eventBus.emit(sessionId, {
197
+ type: 'user:message',
198
+ data: { message },
199
+ });
200
+ if (commitSha) {
201
+ eventBus.emit(sessionId, {
202
+ type: 'session:snapshot',
203
+ data: { messageId: userMessage.id, commitSha },
204
+ });
205
+ }
206
+ await sessionService.updateStatus({ sessionId, status: 'running' });
207
+ eventBus.emit(sessionId, {
208
+ type: 'session:status',
209
+ data: { status: 'running' },
210
+ });
211
+ const provider = agentService.getProvider();
212
+ if (provider.isRunning(sessionId)) {
213
+ await provider.sendMessage({ sessionId, message });
214
+ }
215
+ else {
216
+ const cwd = worktreePath(services, sessionId);
217
+ if (session.status === 'reverted') {
218
+ // After a revert the Claude-side conversation is out of sync.
219
+ // Start a fresh session but include prior message history as context
220
+ // so Claude understands what happened before the revert point.
221
+ const history = await messageService.listBySession(sessionId);
222
+ const contextLines = history.map((m) => `[${m.role}]: ${m.content}`);
223
+ const prompt = contextLines.length > 0
224
+ ? `Here is the conversation history from previous turns:\n\n${contextLines.join('\n\n')}\n\n---\n\nNew message from user:\n${message}`
225
+ : message;
226
+ runAgentLoop(services, sessionId, prompt, cwd, false, session.model ?? undefined).catch(() => undefined);
227
+ }
228
+ else {
229
+ // Normal resume — agent was interrupted or session completed
230
+ runAgentLoop(services, sessionId, message, cwd, true, session.model ?? undefined).catch(() => undefined);
231
+ }
232
+ }
233
+ };
234
+ const interruptSession = async (services, sessionId) => {
235
+ const sessionService = services.get(SessionService);
236
+ const agentService = services.get(AgentService);
237
+ const eventBus = services.get(EventBusService);
238
+ const provider = agentService.getProvider();
239
+ await provider.abort(sessionId);
240
+ await sessionService.updateStatus({ sessionId, status: 'idle' });
241
+ eventBus.emit(sessionId, {
242
+ type: 'session:status',
243
+ data: { status: 'idle' },
244
+ });
245
+ };
246
+ const stopSession = async (services, sessionId) => {
247
+ const sessionService = services.get(SessionService);
248
+ const agentService = services.get(AgentService);
249
+ const eventBus = services.get(EventBusService);
250
+ const provider = agentService.getProvider();
251
+ await provider.stop(sessionId);
252
+ await sessionService.updateStatus({ sessionId, status: 'completed' });
253
+ eventBus.emit(sessionId, {
254
+ type: 'session:status',
255
+ data: { status: 'completed' },
256
+ });
257
+ };
258
+ const revertSession = async (services, sessionId, messageId) => {
259
+ const sessionService = services.get(SessionService);
260
+ const messageService = services.get(MessageService);
261
+ const agentService = services.get(AgentService);
262
+ const gitService = services.get(GitService);
263
+ const sessionEventService = services.get(SessionEventService);
264
+ const eventBus = services.get(EventBusService);
265
+ const message = await messageService.getById(messageId);
266
+ if (!message.commitSha) {
267
+ throw new Error('Message has no snapshot to revert to');
268
+ }
269
+ // Abort the agent if running
270
+ const provider = agentService.getProvider();
271
+ try {
272
+ await provider.abort(sessionId);
273
+ }
274
+ catch {
275
+ // Agent may not be running
276
+ }
277
+ // Reset the worktree to the snapshot commit
278
+ const cwd = worktreePath(services, sessionId);
279
+ await gitService.resetHard({ worktreePath: cwd, ref: message.commitSha });
280
+ // Find the snapshot event that references this message — it marks where the
281
+ // next turn begins. We use the stored event data rather than timestamps
282
+ // because event persistence is fire-and-forget (created_at is unreliable).
283
+ // The user:message event immediately before the snapshot is the first event
284
+ // of the next turn. We find the lowest sequence among the snapshot and any
285
+ // user:message event just before it, then keep everything before that.
286
+ const db = await services.get(DatabaseService).getInstance();
287
+ const snapshotRow = await db
288
+ .selectFrom('session_events')
289
+ .select('sequence')
290
+ .where('session_id', '=', sessionId)
291
+ .where('type', '=', 'session:snapshot')
292
+ .where('data', 'like', `%${messageId}%`)
293
+ .executeTakeFirst();
294
+ if (snapshotRow) {
295
+ // Find the user:message event that starts this turn — it's the last
296
+ // user:message at or before the snapshot's sequence.
297
+ const userMsgRow = await db
298
+ .selectFrom('session_events')
299
+ .select('sequence')
300
+ .where('session_id', '=', sessionId)
301
+ .where('type', '=', 'user:message')
302
+ .where('sequence', '<=', snapshotRow.sequence)
303
+ .orderBy('sequence', 'desc')
304
+ .limit(1)
305
+ .executeTakeFirst();
306
+ const firstEventOfNextTurn = userMsgRow?.sequence ?? snapshotRow.sequence;
307
+ await sessionEventService.deleteAfterSequence({
308
+ sessionId,
309
+ afterSequence: firstEventOfNextTurn - 1,
310
+ });
311
+ }
312
+ // Delete the target message and everything after it
313
+ await messageService.deleteAfter({ sessionId, messageId });
314
+ await db
315
+ .deleteFrom('messages')
316
+ .where('id', '=', messageId)
317
+ .where('session_id', '=', sessionId)
318
+ .execute();
319
+ // Use 'reverted' status so sendSessionMessage knows not to resume
320
+ // the Claude session (whose history is now out of sync).
321
+ await sessionService.updateStatus({ sessionId, status: 'reverted' });
322
+ eventBus.emit(sessionId, {
323
+ type: 'session:status',
324
+ data: { status: 'reverted' },
325
+ });
326
+ };
327
+ export { startSession, sendSessionMessage, interruptSession, stopSession, revertSession };
328
+ //# sourceMappingURL=session.runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.runner.js","sourceRoot":"","sources":["../../../src/services/session/session.runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session.runner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.runner.test.d.ts","sourceRoot":"","sources":["../../../src/services/session/session.runner.test.ts"],"names":[],"mappings":""}