@jingyi0605/codingns 0.9.5 → 0.9.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 (206) hide show
  1. package/bin/codingns.mjs +75 -0
  2. package/dist/public/assets/{AdaptiveButlerPage-kkJDsnCO.js → AdaptiveButlerPage-DclGPzEx.js} +2 -2
  3. package/dist/public/assets/{App-DrNI9lWA.js → App-BxX5mm9o.js} +6 -6
  4. package/dist/public/assets/{BootstrapPage-QgVH5Mps.js → BootstrapPage-Bl21SsuW.js} +1 -1
  5. package/dist/public/assets/{ConversationPage-DVk8VfIj.js → ConversationPage-CmiVCV0q.js} +7 -7
  6. package/dist/public/assets/{DesktopDetachPreviewPage-BhfP0TpH.js → DesktopDetachPreviewPage-uaOHVsjV.js} +1 -1
  7. package/dist/public/assets/{DesktopModal-DRmDrv0S.js → DesktopModal-BxsogpLf.js} +1 -1
  8. package/dist/public/assets/{DesktopWindowPage-DNbJXnSs.js → DesktopWindowPage-Bubfw1nC.js} +1 -1
  9. package/dist/public/assets/{FileContextPanel---fLO4ve.js → FileContextPanel-DrYWcTkp.js} +1 -1
  10. package/dist/public/assets/{GitSidebar-sXUE0TqT.js → GitSidebar-CQsfJqun.js} +1 -1
  11. package/dist/public/assets/{MobileCreateSessionSheet-BftZ5pvb.js → MobileCreateSessionSheet-CqtmfVNo.js} +1 -1
  12. package/dist/public/assets/{MobileSheet-nw5SCa3N.js → MobileSheet-C5IVmUsO.js} +1 -1
  13. package/dist/public/assets/{MobileTopHeaderFrame-DH_D02Wy.js → MobileTopHeaderFrame-EoBm3-X0.js} +1 -1
  14. package/dist/public/assets/{MobileWorkspaceSwitcherHeader-2K406G5p.js → MobileWorkspaceSwitcherHeader-BC8MMQs_.js} +1 -1
  15. package/dist/public/assets/{PluginAccessOverview-BVJihw3D.js → PluginAccessOverview-CrQiQxxZ.js} +1 -1
  16. package/dist/public/assets/{PluginContainerPage-CR4vStvr.js → PluginContainerPage-_2u-9thM.js} +1 -1
  17. package/dist/public/assets/{PluginDetailPage-CrMX0Mnm.js → PluginDetailPage-F9cKjSCp.js} +1 -1
  18. package/dist/public/assets/{PluginsListPage-FtIL71Yg.js → PluginsListPage-BOhcua_4.js} +1 -1
  19. package/dist/public/assets/{RelayConnectEntryPage-Bt1apX53.js → RelayConnectEntryPage-Ck_uZLzj.js} +1 -1
  20. package/dist/public/assets/{ServerSettingsModal-D-guzPrI.js → ServerSettingsModal-ICd82a_x.js} +1 -1
  21. package/dist/public/assets/SessionIndexPage-Cox6P6dw.js +1 -0
  22. package/dist/public/assets/SettingsPage-BI5cM3j5.js +2 -0
  23. package/dist/public/assets/{TerminalManagerPanel-B5MKGPy-.js → TerminalManagerPanel-DiVhBQhf.js} +1 -1
  24. package/dist/public/assets/{TerminalPage-C2dTNGHK.js → TerminalPage-DUMUO7Ng.js} +1 -1
  25. package/dist/public/assets/{TerminalRuntimeFallbackModal-DAqOxFD8.js → TerminalRuntimeFallbackModal-DGPR_CMh.js} +1 -1
  26. package/dist/public/assets/{ToolFilesPage-IsNwyE6T.js → ToolFilesPage-m88CAp-r.js} +1 -1
  27. package/dist/public/assets/{ToolGitPage-BK1JBERN.js → ToolGitPage-DCYpfTsb.js} +1 -1
  28. package/dist/public/assets/{ToolProcessesPage-DwTYUQCK.js → ToolProcessesPage-Bk5ulsyq.js} +1 -1
  29. package/dist/public/assets/{ToolsHomePage-BLOy7lPg.js → ToolsHomePage-BrTwfjI7.js} +1 -1
  30. package/dist/public/assets/{WorkbenchLandingPage-CqZKR6EA.js → WorkbenchLandingPage-q4AAmdMV.js} +1 -1
  31. package/dist/public/assets/WorkbenchLayout-DD8b-m2G.js +1027 -0
  32. package/dist/public/assets/{WorkbenchModal-BM-OeW-b.js → WorkbenchModal-CsZeLArg.js} +1 -1
  33. package/dist/public/assets/WorkbenchShellRoute-BaiW_vfb.js +1 -0
  34. package/dist/public/assets/WorkbenchShellRoute-CxKYZ6uF.css +1 -0
  35. package/dist/public/assets/{WorkspaceDebugDetailPage-BMsEN5iG.js → WorkspaceDebugDetailPage-BcUUDEyw.js} +1 -1
  36. package/dist/public/assets/WorkspaceDetailPage-zEZ1VARA.js +1 -0
  37. package/dist/public/assets/{WorkspaceHomePage-DQiXKgiP.js → WorkspaceHomePage-CR0rqS4e.js} +1 -1
  38. package/dist/public/assets/{client-runtime-manager-CgPJq21V.js → client-runtime-manager-BgGugw8T.js} +1 -1
  39. package/dist/public/assets/index-CFyk1rgJ.js +50 -0
  40. package/dist/public/assets/index-CrU73EIV.css +1 -0
  41. package/dist/public/assets/{login-direct-candidate-resolver-CGaxAXV8.js → login-direct-candidate-resolver-ty2uOY5y.js} +1 -1
  42. package/dist/public/assets/{plugin-permission-copy-BR9gWy8b.js → plugin-permission-copy-iK3faI3n.js} +1 -1
  43. package/dist/public/assets/{plugins-api-CdCsrG2e.js → plugins-api-CmV7aDGA.js} +1 -1
  44. package/dist/public/assets/{preferences-service-lOhnlxzP.js → preferences-service-BoSmT_ny.js} +1 -1
  45. package/dist/public/assets/{relay-entry-CQpxTS8y.js → relay-entry-C8k5qsl5.js} +1 -1
  46. package/dist/public/assets/styles-BhKoKfQ_.css +1 -0
  47. package/dist/public/assets/{terminal-runtime-meta-oteTx66X.js → terminal-runtime-meta-okQIDzfA.js} +1 -1
  48. package/dist/public/assets/{useRegisteredDebugTemplates-Bu2ykZ6s.js → useRegisteredDebugTemplates-B_vXUtSe.js} +1 -1
  49. package/dist/public/assets/{workbench-navigation-DlgXuFW2.js → workbench-navigation-DoDaQR4z.js} +1 -1
  50. package/dist/public/index.html +2 -2
  51. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.d.ts +1 -0
  52. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js +31 -0
  53. package/dist/server/modules/affairs-indexer/core/src/repositories/catalog-repository.js.map +1 -1
  54. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.d.ts +1 -0
  55. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js +1 -0
  56. package/dist/server/modules/affairs-indexer/core/src/services/dirty/dirty-scope-resolver.js.map +1 -1
  57. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js +4 -1
  58. package/dist/server/modules/affairs-indexer/core/src/services/export/export-builder.js.map +1 -1
  59. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js +140 -16
  60. package/dist/server/modules/affairs-indexer/core/src/services/search/search-index-builder.js.map +1 -1
  61. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +1 -1
  62. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +8 -7
  63. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  64. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +14 -13
  65. package/dist/server/modules/assistant-capability/assistant-capability-service.js +27 -24
  66. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  67. package/dist/server/modules/auth/auth-controller.d.ts +27 -1
  68. package/dist/server/modules/auth/auth-controller.js +20 -0
  69. package/dist/server/modules/auth/auth-controller.js.map +1 -1
  70. package/dist/server/modules/auth/auth-service.d.ts +32 -1
  71. package/dist/server/modules/auth/auth-service.js +217 -2
  72. package/dist/server/modules/auth/auth-service.js.map +1 -1
  73. package/dist/server/modules/bootstrap/bootstrap-service.js +1 -0
  74. package/dist/server/modules/bootstrap/bootstrap-service.js.map +1 -1
  75. package/dist/server/modules/butler/assistant-automation-service.d.ts +1 -1
  76. package/dist/server/modules/butler/assistant-automation-service.js +9 -10
  77. package/dist/server/modules/butler/assistant-automation-service.js.map +1 -1
  78. package/dist/server/modules/butler/butler-action-context-service.js +2 -2
  79. package/dist/server/modules/butler/butler-action-context-service.js.map +1 -1
  80. package/dist/server/modules/butler/butler-control-action-service.d.ts +5 -5
  81. package/dist/server/modules/butler/butler-control-action-service.js +19 -19
  82. package/dist/server/modules/butler/butler-control-action-service.js.map +1 -1
  83. package/dist/server/modules/butler/butler-control-session-service.d.ts +1 -1
  84. package/dist/server/modules/butler/butler-control-session-service.js +27 -26
  85. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  86. package/dist/server/modules/butler/butler-control-timer-service.js +4 -5
  87. package/dist/server/modules/butler/butler-control-timer-service.js.map +1 -1
  88. package/dist/server/modules/butler/butler-controller.d.ts +2 -2
  89. package/dist/server/modules/butler/butler-controller.js +19 -17
  90. package/dist/server/modules/butler/butler-controller.js.map +1 -1
  91. package/dist/server/modules/butler/butler-profile-service.d.ts +5 -5
  92. package/dist/server/modules/butler/butler-profile-service.js +17 -16
  93. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  94. package/dist/server/modules/butler/butler-project-service.d.ts +7 -6
  95. package/dist/server/modules/butler/butler-project-service.js +35 -21
  96. package/dist/server/modules/butler/butler-project-service.js.map +1 -1
  97. package/dist/server/modules/butler/butler-session-service.d.ts +2 -2
  98. package/dist/server/modules/butler/butler-session-service.js +33 -27
  99. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  100. package/dist/server/modules/butler/butler-session-summary-service.d.ts +2 -2
  101. package/dist/server/modules/butler/butler-session-summary-service.js +23 -9
  102. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
  103. package/dist/server/modules/butler/context-aggregator.js +9 -9
  104. package/dist/server/modules/butler/context-aggregator.js.map +1 -1
  105. package/dist/server/modules/butler/patrol-execution-service.d.ts +0 -1
  106. package/dist/server/modules/butler/patrol-execution-service.js +6 -12
  107. package/dist/server/modules/butler/patrol-execution-service.js.map +1 -1
  108. package/dist/server/modules/provider/provider-discovery-runtime.js +16 -1
  109. package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
  110. package/dist/server/modules/sessions/codex-app-server-helper-client.js +14 -0
  111. package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
  112. package/dist/server/modules/sessions/codex-app-server-helper-process.js +59 -0
  113. package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
  114. package/dist/server/modules/sessions/codex-session-title-generator.d.ts +19 -0
  115. package/dist/server/modules/sessions/codex-session-title-generator.js +295 -0
  116. package/dist/server/modules/sessions/codex-session-title-generator.js.map +1 -0
  117. package/dist/server/modules/sessions/session-controller.js +3 -3
  118. package/dist/server/modules/sessions/session-controller.js.map +1 -1
  119. package/dist/server/modules/sessions/session-history-service.d.ts +13 -3
  120. package/dist/server/modules/sessions/session-history-service.js +309 -11
  121. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  122. package/dist/server/modules/sessions/session-live-runtime-service.js +25 -15
  123. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  124. package/dist/server/modules/sessions/session-permission-request-service.js +28 -15
  125. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  126. package/dist/server/modules/tasks/task-types.d.ts +1 -0
  127. package/dist/server/modules/tasks/task-types.js +1 -0
  128. package/dist/server/modules/tasks/task-types.js.map +1 -1
  129. package/dist/server/modules/workbench/workbench-service.js +9 -9
  130. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  131. package/dist/server/modules/workspace/affairs-library-service.d.ts +3 -1
  132. package/dist/server/modules/workspace/affairs-library-service.js +112 -54
  133. package/dist/server/modules/workspace/affairs-library-service.js.map +1 -1
  134. package/dist/server/modules/workspace/affairs-lightweight-session-service.js +13 -9
  135. package/dist/server/modules/workspace/affairs-lightweight-session-service.js.map +1 -1
  136. package/dist/server/modules/workspace/affairs-tag-service.d.ts +12 -0
  137. package/dist/server/modules/workspace/affairs-tag-service.js +527 -2
  138. package/dist/server/modules/workspace/affairs-tag-service.js.map +1 -1
  139. package/dist/server/modules/workspace/workspace-controller.d.ts +1 -1
  140. package/dist/server/modules/workspace/workspace-controller.js +7 -7
  141. package/dist/server/modules/workspace/workspace-controller.js.map +1 -1
  142. package/dist/server/modules/workspace/workspace-service.d.ts +7 -0
  143. package/dist/server/modules/workspace/workspace-service.js +151 -10
  144. package/dist/server/modules/workspace/workspace-service.js.map +1 -1
  145. package/dist/server/routes/auth.js +6 -0
  146. package/dist/server/routes/auth.js.map +1 -1
  147. package/dist/server/server/create-server.d.ts +4 -0
  148. package/dist/server/server/create-server.js +26 -0
  149. package/dist/server/server/create-server.js.map +1 -1
  150. package/dist/server/server/start-host.js +20 -0
  151. package/dist/server/server/start-host.js.map +1 -1
  152. package/dist/server/shared/http/request-diagnostics.d.ts +56 -0
  153. package/dist/server/shared/http/request-diagnostics.js +256 -0
  154. package/dist/server/shared/http/request-diagnostics.js.map +1 -0
  155. package/dist/server/storage/repositories/auth-token-repository.d.ts +1 -0
  156. package/dist/server/storage/repositories/auth-token-repository.js +8 -0
  157. package/dist/server/storage/repositories/auth-token-repository.js.map +1 -1
  158. package/dist/server/storage/repositories/auth-user-repository.d.ts +50 -0
  159. package/dist/server/storage/repositories/auth-user-repository.js +198 -27
  160. package/dist/server/storage/repositories/auth-user-repository.js.map +1 -1
  161. package/dist/server/storage/repositories/butler-control-session-repository.d.ts +4 -1
  162. package/dist/server/storage/repositories/butler-control-session-repository.js +55 -8
  163. package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
  164. package/dist/server/storage/repositories/butler-profile-repository.d.ts +2 -1
  165. package/dist/server/storage/repositories/butler-profile-repository.js +35 -6
  166. package/dist/server/storage/repositories/butler-profile-repository.js.map +1 -1
  167. package/dist/server/storage/repositories/butler-project-repository.d.ts +2 -0
  168. package/dist/server/storage/repositories/butler-project-repository.js +38 -4
  169. package/dist/server/storage/repositories/butler-project-repository.js.map +1 -1
  170. package/dist/server/storage/repositories/butler-session-repository.d.ts +2 -1
  171. package/dist/server/storage/repositories/butler-session-repository.js +35 -6
  172. package/dist/server/storage/repositories/butler-session-repository.js.map +1 -1
  173. package/dist/server/storage/repositories/session-binding-repository.d.ts +3 -0
  174. package/dist/server/storage/repositories/session-binding-repository.js +70 -2
  175. package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
  176. package/dist/server/storage/repositories/session-index-repository.js +7 -5
  177. package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
  178. package/dist/server/storage/repositories/workspace-repository.d.ts +3 -1
  179. package/dist/server/storage/repositories/workspace-repository.js +24 -10
  180. package/dist/server/storage/repositories/workspace-repository.js.map +1 -1
  181. package/dist/server/storage/sqlite/client.js +288 -0
  182. package/dist/server/storage/sqlite/client.js.map +1 -1
  183. package/dist/server/storage/sqlite/schema.sql +33 -9
  184. package/dist/server/types/domain.d.ts +8 -1
  185. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +34 -7
  186. package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -1
  187. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +7 -0
  188. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +596 -6
  189. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  190. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +3 -7
  191. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
  192. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +1 -0
  193. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +249 -6
  194. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  195. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +11 -0
  196. package/package.json +1 -1
  197. package/dist/public/assets/SessionIndexPage-CX2FppcJ.js +0 -1
  198. package/dist/public/assets/SettingsPage-BI2Olcvr.js +0 -2
  199. package/dist/public/assets/WorkbenchLayout-CJHQtwuL.js +0 -1022
  200. package/dist/public/assets/WorkbenchShellRoute-2bKI6Q9k.js +0 -1
  201. package/dist/public/assets/WorkbenchShellRoute-BjuZD101.css +0 -1
  202. package/dist/public/assets/WorkspaceDetailPage-5H9Gosx2.js +0 -1
  203. package/dist/public/assets/index-BARqMVSw.css +0 -1
  204. package/dist/public/assets/index-BUoNjVrY.js +0 -50
  205. package/dist/public/assets/styles-DkbkRgWw.css +0 -1
  206. /package/dist/public/assets/{styles-JKFlsYFv.js → styles-DwSuZo1w.js} +0 -0
@@ -7,6 +7,7 @@ export class ButlerControlSessionRepository {
7
7
  this.db
8
8
  .prepare(`INSERT INTO butler_control_sessions (
9
9
  id,
10
+ user_id,
10
11
  provider_id,
11
12
  session_id,
12
13
  purpose,
@@ -20,14 +21,15 @@ export class ButlerControlSessionRepository {
20
21
  last_summary,
21
22
  created_at,
22
23
  updated_at
23
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
24
- .run(record.id, record.providerId, record.sessionId, record.purpose, record.title, record.sourceItemId, record.model, record.reasoningLevel, record.permissionMode, record.status, record.lastContextVersion, record.lastSummary, record.createdAt, record.updatedAt);
24
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
25
+ .run(record.id, record.userId, record.providerId, record.sessionId, record.purpose, record.title, record.sourceItemId, record.model, record.reasoningLevel, record.permissionMode, record.status, record.lastContextVersion, record.lastSummary, record.createdAt, record.updatedAt);
25
26
  return record;
26
27
  }
27
28
  findById(id) {
28
29
  const row = this.db
29
30
  .prepare(`SELECT
30
31
  id,
32
+ user_id,
31
33
  provider_id,
32
34
  session_id,
33
35
  purpose,
@@ -47,9 +49,15 @@ export class ButlerControlSessionRepository {
47
49
  return row ? mapButlerControlSessionRow(row) : null;
48
50
  }
49
51
  findLatestByProvider(providerId) {
52
+ return this.findLatestByProviderForUser(providerId, "");
53
+ }
54
+ findLatestByProviderForUser(providerId, userId) {
55
+ const userClause = userId.trim() ? "AND user_id = ?" : "";
56
+ const values = userId.trim() ? [providerId, userId] : [providerId];
50
57
  const row = this.db
51
58
  .prepare(`SELECT
52
59
  id,
60
+ user_id,
53
61
  provider_id,
54
62
  session_id,
55
63
  purpose,
@@ -65,15 +73,22 @@ export class ButlerControlSessionRepository {
65
73
  updated_at
66
74
  FROM butler_control_sessions
67
75
  WHERE provider_id = ?
76
+ ${userClause}
68
77
  ORDER BY updated_at DESC, created_at DESC
69
78
  LIMIT 1`)
70
- .get(providerId);
79
+ .get(...values);
71
80
  return row ? mapButlerControlSessionRow(row) : null;
72
81
  }
73
82
  findLatestOpenByProvider(providerId) {
83
+ return this.findLatestOpenByProviderForUser(providerId, "");
84
+ }
85
+ findLatestOpenByProviderForUser(providerId, userId) {
86
+ const userClause = userId.trim() ? "AND user_id = ?" : "";
87
+ const values = userId.trim() ? [providerId, userId] : [providerId];
74
88
  const row = this.db
75
89
  .prepare(`SELECT
76
90
  id,
91
+ user_id,
77
92
  provider_id,
78
93
  session_id,
79
94
  purpose,
@@ -90,15 +105,19 @@ export class ButlerControlSessionRepository {
90
105
  FROM butler_control_sessions
91
106
  WHERE provider_id = ?
92
107
  AND status != 'closed'
108
+ ${userClause}
93
109
  ORDER BY updated_at DESC, created_at DESC
94
110
  LIMIT 1`)
95
- .get(providerId);
111
+ .get(...values);
96
112
  return row ? mapButlerControlSessionRow(row) : null;
97
113
  }
98
- listByProvider(providerId) {
114
+ listByProvider(providerId, userId) {
115
+ const userClause = userId?.trim() ? "AND user_id = ?" : "";
116
+ const values = userId?.trim() ? [providerId, userId] : [providerId];
99
117
  return this.db
100
118
  .prepare(`SELECT
101
119
  id,
120
+ user_id,
102
121
  provider_id,
103
122
  session_id,
104
123
  purpose,
@@ -114,14 +133,16 @@ export class ButlerControlSessionRepository {
114
133
  updated_at
115
134
  FROM butler_control_sessions
116
135
  WHERE provider_id = ?
136
+ ${userClause}
117
137
  ORDER BY updated_at DESC, created_at DESC`)
118
- .all(providerId)
138
+ .all(...values)
119
139
  .map((row) => mapButlerControlSessionRow(row));
120
140
  }
121
141
  findBySessionId(sessionId) {
122
142
  const row = this.db
123
143
  .prepare(`SELECT
124
144
  id,
145
+ user_id,
125
146
  provider_id,
126
147
  session_id,
127
148
  purpose,
@@ -140,6 +161,30 @@ export class ButlerControlSessionRepository {
140
161
  .get(sessionId);
141
162
  return row ? mapButlerControlSessionRow(row) : null;
142
163
  }
164
+ findByIdForUser(id, userId) {
165
+ const row = this.db
166
+ .prepare(`SELECT
167
+ id,
168
+ user_id,
169
+ provider_id,
170
+ session_id,
171
+ purpose,
172
+ title,
173
+ source_item_id,
174
+ model,
175
+ reasoning_level,
176
+ permission_mode,
177
+ status,
178
+ last_context_version,
179
+ last_summary,
180
+ created_at,
181
+ updated_at
182
+ FROM butler_control_sessions
183
+ WHERE id = ?
184
+ AND user_id = ?`)
185
+ .get(id, userId);
186
+ return row ? mapButlerControlSessionRow(row) : null;
187
+ }
143
188
  listSessionIds() {
144
189
  return this.db
145
190
  .prepare(`SELECT session_id
@@ -160,14 +205,16 @@ export class ButlerControlSessionRepository {
160
205
  last_context_version = ?,
161
206
  last_summary = ?,
162
207
  updated_at = ?
163
- WHERE id = ?`)
164
- .run(record.purpose, record.title, record.sourceItemId, record.model, record.reasoningLevel, record.permissionMode, record.status, record.lastContextVersion, record.lastSummary, record.updatedAt, record.id);
208
+ WHERE id = ?
209
+ AND user_id = ?`)
210
+ .run(record.purpose, record.title, record.sourceItemId, record.model, record.reasoningLevel, record.permissionMode, record.status, record.lastContextVersion, record.lastSummary, record.updatedAt, record.id, record.userId);
165
211
  return record;
166
212
  }
167
213
  }
168
214
  function mapButlerControlSessionRow(row) {
169
215
  return {
170
216
  id: row.id,
217
+ userId: row.user_id,
171
218
  providerId: row.provider_id,
172
219
  sessionId: row.session_id,
173
220
  purpose: row.purpose,
@@ -1 +1 @@
1
- {"version":3,"file":"butler-control-session-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-control-session-repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"butler-control-session-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-control-session-repository.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ import type { ButlerProfile } from "../../types/domain.js";
3
3
  export declare class ButlerProfileRepository {
4
4
  private readonly db;
5
5
  constructor(db: Database.Database);
6
- find(): ButlerProfile | null;
6
+ find(userId?: string): ButlerProfile | null;
7
+ findByUserId(userId: string): ButlerProfile | null;
7
8
  create(record: ButlerProfile): ButlerProfile;
8
9
  update(record: ButlerProfile): ButlerProfile;
9
10
  }
@@ -3,10 +3,14 @@ export class ButlerProfileRepository {
3
3
  constructor(db) {
4
4
  this.db = db;
5
5
  }
6
- find() {
6
+ find(userId) {
7
+ if (userId?.trim()) {
8
+ return this.findByUserId(userId);
9
+ }
7
10
  const row = this.db
8
11
  .prepare(`SELECT
9
12
  id,
13
+ user_id,
10
14
  display_name,
11
15
  provider_id,
12
16
  workspace_path,
@@ -19,14 +23,37 @@ export class ButlerProfileRepository {
19
23
  initialized_at,
20
24
  updated_at
21
25
  FROM butler_profiles
22
- WHERE id = 'default'`)
26
+ ORDER BY updated_at DESC, initialized_at DESC
27
+ LIMIT 1`)
23
28
  .get();
24
29
  return row ? mapButlerProfileRow(row) : null;
25
30
  }
31
+ findByUserId(userId) {
32
+ const row = this.db
33
+ .prepare(`SELECT
34
+ id,
35
+ user_id,
36
+ display_name,
37
+ provider_id,
38
+ workspace_path,
39
+ agents_mode,
40
+ agents_file_path,
41
+ agents_content,
42
+ persona_json,
43
+ focus_json,
44
+ setup_completed,
45
+ initialized_at,
46
+ updated_at
47
+ FROM butler_profiles
48
+ WHERE user_id = ?`)
49
+ .get(userId);
50
+ return row ? mapButlerProfileRow(row) : null;
51
+ }
26
52
  create(record) {
27
53
  this.db
28
54
  .prepare(`INSERT INTO butler_profiles (
29
55
  id,
56
+ user_id,
30
57
  display_name,
31
58
  provider_id,
32
59
  workspace_path,
@@ -38,8 +65,8 @@ export class ButlerProfileRepository {
38
65
  setup_completed,
39
66
  initialized_at,
40
67
  updated_at
41
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
42
- .run(record.id, record.displayName, record.providerId, record.workspacePath, record.agentsMode, record.agentsFilePath, record.agentsContent, JSON.stringify(record.persona), JSON.stringify(record.focus), record.setupCompleted ? 1 : 0, record.initializedAt, record.updatedAt);
68
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
69
+ .run(record.id, record.userId, record.displayName, record.providerId, record.workspacePath, record.agentsMode, record.agentsFilePath, record.agentsContent, JSON.stringify(record.persona), JSON.stringify(record.focus), record.setupCompleted ? 1 : 0, record.initializedAt, record.updatedAt);
43
70
  return record;
44
71
  }
45
72
  update(record) {
@@ -55,14 +82,16 @@ export class ButlerProfileRepository {
55
82
  focus_json = ?,
56
83
  setup_completed = ?,
57
84
  updated_at = ?
58
- WHERE id = ?`)
59
- .run(record.providerId, record.displayName, record.workspacePath, record.agentsMode, record.agentsFilePath, record.agentsContent, JSON.stringify(record.persona), JSON.stringify(record.focus), record.setupCompleted ? 1 : 0, record.updatedAt, record.id);
85
+ WHERE id = ?
86
+ AND user_id = ?`)
87
+ .run(record.providerId, record.displayName, record.workspacePath, record.agentsMode, record.agentsFilePath, record.agentsContent, JSON.stringify(record.persona), JSON.stringify(record.focus), record.setupCompleted ? 1 : 0, record.updatedAt, record.id, record.userId);
60
88
  return record;
61
89
  }
62
90
  }
63
91
  function mapButlerProfileRow(row) {
64
92
  return {
65
93
  id: row.id,
94
+ userId: row.user_id,
66
95
  displayName: row.display_name,
67
96
  providerId: row.provider_id,
68
97
  workspacePath: row.workspace_path,
@@ -1 +1 @@
1
- {"version":3,"file":"butler-profile-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-profile-repository.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;;;;;;;;;;;8BAcsB,CACvB;aACA,GAAG,EAAkC,CAAC;QAEzC,OAAO,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;;;uDAa+C,CAChD;aACA,GAAG,CACF,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,aAAa,EACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7B,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,SAAS,CACjB,CAAC;QAEJ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;sBAWc,CACf;aACA,GAAG,CACF,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,aAAa,EACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7B,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,EAAE,CACV,CAAC;QAEJ,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAiBD,SAAS,mBAAmB,CAAC,GAAqB;IAChD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,cAAc,EAAE,GAAG,CAAC,gBAAgB;QACpC,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,CAA6B;QACtE,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAA2B;QAChE,cAAc,EAAE,GAAG,CAAC,eAAe,KAAK,CAAC;QACzC,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACnE,CAAC,CAAE,MAAkC;YACrC,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"butler-profile-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-profile-repository.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,12 @@ export declare class ButlerProjectRepository {
5
5
  constructor(db: Database.Database);
6
6
  create(record: ButlerProject): ButlerProject;
7
7
  list(filters?: {
8
+ userId?: string;
8
9
  workspaceId?: string;
9
10
  lifecycleStatus?: ButlerProject["lifecycleStatus"];
10
11
  riskLevel?: ButlerProject["riskLevel"];
11
12
  }): ButlerProject[];
12
13
  findById(id: string): ButlerProject | null;
14
+ findByIdForUser(id: string, userId: string): ButlerProject | null;
13
15
  update(record: ButlerProject): ButlerProject | null;
14
16
  }
@@ -7,6 +7,7 @@ export class ButlerProjectRepository {
7
7
  this.db
8
8
  .prepare(`INSERT INTO butler_projects (
9
9
  id,
10
+ user_id,
10
11
  workspace_id,
11
12
  name,
12
13
  repo_root,
@@ -21,13 +22,17 @@ export class ButlerProjectRepository {
21
22
  created_at,
22
23
  updated_at,
23
24
  archived_at
24
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
25
- .run(record.id, record.workspaceId, record.name, record.repoRoot, record.defaultProvider, record.instructionProfileId, record.approvalMode, record.lifecycleStatus, record.riskLevel, JSON.stringify(record.config), record.lastPatrolAt, record.lastVerificationAt, record.createdAt, record.updatedAt, record.archivedAt);
25
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
26
+ .run(record.id, record.userId, record.workspaceId, record.name, record.repoRoot, record.defaultProvider, record.instructionProfileId, record.approvalMode, record.lifecycleStatus, record.riskLevel, JSON.stringify(record.config), record.lastPatrolAt, record.lastVerificationAt, record.createdAt, record.updatedAt, record.archivedAt);
26
27
  return record;
27
28
  }
28
29
  list(filters) {
29
30
  const conditions = [];
30
31
  const values = [];
32
+ if (filters?.userId) {
33
+ conditions.push("user_id = ?");
34
+ values.push(filters.userId);
35
+ }
31
36
  if (filters?.workspaceId) {
32
37
  conditions.push("workspace_id = ?");
33
38
  values.push(filters.workspaceId);
@@ -44,6 +49,7 @@ export class ButlerProjectRepository {
44
49
  return this.db
45
50
  .prepare(`SELECT
46
51
  id,
52
+ user_id,
47
53
  workspace_id,
48
54
  name,
49
55
  repo_root,
@@ -68,6 +74,7 @@ export class ButlerProjectRepository {
68
74
  const row = this.db
69
75
  .prepare(`SELECT
70
76
  id,
77
+ user_id,
71
78
  workspace_id,
72
79
  name,
73
80
  repo_root,
@@ -87,6 +94,31 @@ export class ButlerProjectRepository {
87
94
  .get(id);
88
95
  return row ? mapButlerProjectRow(row) : null;
89
96
  }
97
+ findByIdForUser(id, userId) {
98
+ const row = this.db
99
+ .prepare(`SELECT
100
+ id,
101
+ user_id,
102
+ workspace_id,
103
+ name,
104
+ repo_root,
105
+ default_provider,
106
+ instruction_profile_id,
107
+ approval_mode,
108
+ lifecycle_status,
109
+ risk_level,
110
+ config_json,
111
+ last_patrol_at,
112
+ last_verification_at,
113
+ created_at,
114
+ updated_at,
115
+ archived_at
116
+ FROM butler_projects
117
+ WHERE id = ?
118
+ AND user_id = ?`)
119
+ .get(id, userId);
120
+ return row ? mapButlerProjectRow(row) : null;
121
+ }
90
122
  update(record) {
91
123
  this.db
92
124
  .prepare(`UPDATE butler_projects
@@ -102,14 +134,16 @@ export class ButlerProjectRepository {
102
134
  last_verification_at = ?,
103
135
  archived_at = ?,
104
136
  updated_at = ?
105
- WHERE id = ?`)
106
- .run(record.name, record.repoRoot, record.defaultProvider, record.instructionProfileId, record.approvalMode, record.lifecycleStatus, record.riskLevel, JSON.stringify(record.config), record.lastPatrolAt, record.lastVerificationAt, record.archivedAt, record.updatedAt, record.id);
137
+ WHERE id = ?
138
+ AND user_id = ?`)
139
+ .run(record.name, record.repoRoot, record.defaultProvider, record.instructionProfileId, record.approvalMode, record.lifecycleStatus, record.riskLevel, JSON.stringify(record.config), record.lastPatrolAt, record.lastVerificationAt, record.archivedAt, record.updatedAt, record.id, record.userId);
107
140
  return this.findById(record.id);
108
141
  }
109
142
  }
110
143
  function mapButlerProjectRow(row) {
111
144
  return {
112
145
  id: row.id,
146
+ userId: row.user_id,
113
147
  workspaceId: row.workspace_id,
114
148
  name: row.name,
115
149
  repoRoot: row.repo_root,
@@ -1 +1 @@
1
- {"version":3,"file":"butler-project-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-project-repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"butler-project-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-project-repository.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@ export declare class ButlerSessionRepository {
4
4
  private readonly db;
5
5
  constructor(db: Database.Database);
6
6
  create(record: ButlerSession): ButlerSession;
7
- listByProject(projectId: string): ButlerSession[];
7
+ listByProject(projectId: string, userId?: string): ButlerSession[];
8
8
  findById(id: string): ButlerSession | null;
9
9
  findBySessionId(sessionId: string): ButlerSession | null;
10
+ findBySessionIdForUser(sessionId: string, userId: string): ButlerSession | null;
10
11
  update(record: ButlerSession): ButlerSession | null;
11
12
  }
@@ -7,6 +7,7 @@ export class ButlerSessionRepository {
7
7
  this.db
8
8
  .prepare(`INSERT INTO butler_sessions (
9
9
  id,
10
+ user_id,
10
11
  project_id,
11
12
  session_id,
12
13
  role,
@@ -16,14 +17,17 @@ export class ButlerSessionRepository {
16
17
  last_checkpoint_at,
17
18
  created_at,
18
19
  updated_at
19
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
20
- .run(record.id, record.projectId, record.sessionId, record.role, record.ownershipMode, record.status, record.lastSummary, record.lastCheckpointAt, record.createdAt, record.updatedAt);
20
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
21
+ .run(record.id, record.userId, record.projectId, record.sessionId, record.role, record.ownershipMode, record.status, record.lastSummary, record.lastCheckpointAt, record.createdAt, record.updatedAt);
21
22
  return record;
22
23
  }
23
- listByProject(projectId) {
24
+ listByProject(projectId, userId) {
25
+ const userClause = userId?.trim() ? "AND user_id = ?" : "";
26
+ const values = userId?.trim() ? [projectId, userId] : [projectId];
24
27
  return this.db
25
28
  .prepare(`SELECT
26
29
  id,
30
+ user_id,
27
31
  project_id,
28
32
  session_id,
29
33
  role,
@@ -35,14 +39,16 @@ export class ButlerSessionRepository {
35
39
  updated_at
36
40
  FROM butler_sessions
37
41
  WHERE project_id = ?
42
+ ${userClause}
38
43
  ORDER BY updated_at DESC, created_at DESC`)
39
- .all(projectId)
44
+ .all(...values)
40
45
  .map((row) => mapButlerSessionRow(row));
41
46
  }
42
47
  findById(id) {
43
48
  const row = this.db
44
49
  .prepare(`SELECT
45
50
  id,
51
+ user_id,
46
52
  project_id,
47
53
  session_id,
48
54
  role,
@@ -61,6 +67,7 @@ export class ButlerSessionRepository {
61
67
  const row = this.db
62
68
  .prepare(`SELECT
63
69
  id,
70
+ user_id,
64
71
  project_id,
65
72
  session_id,
66
73
  role,
@@ -75,6 +82,26 @@ export class ButlerSessionRepository {
75
82
  .get(sessionId);
76
83
  return row ? mapButlerSessionRow(row) : null;
77
84
  }
85
+ findBySessionIdForUser(sessionId, userId) {
86
+ const row = this.db
87
+ .prepare(`SELECT
88
+ id,
89
+ user_id,
90
+ project_id,
91
+ session_id,
92
+ role,
93
+ ownership_mode,
94
+ status,
95
+ last_summary,
96
+ last_checkpoint_at,
97
+ created_at,
98
+ updated_at
99
+ FROM butler_sessions
100
+ WHERE session_id = ?
101
+ AND user_id = ?`)
102
+ .get(sessionId, userId);
103
+ return row ? mapButlerSessionRow(row) : null;
104
+ }
78
105
  update(record) {
79
106
  this.db
80
107
  .prepare(`UPDATE butler_sessions
@@ -84,14 +111,16 @@ export class ButlerSessionRepository {
84
111
  last_summary = ?,
85
112
  last_checkpoint_at = ?,
86
113
  updated_at = ?
87
- WHERE id = ?`)
88
- .run(record.role, record.ownershipMode, record.status, record.lastSummary, record.lastCheckpointAt, record.updatedAt, record.id);
114
+ WHERE id = ?
115
+ AND user_id = ?`)
116
+ .run(record.role, record.ownershipMode, record.status, record.lastSummary, record.lastCheckpointAt, record.updatedAt, record.id, record.userId);
89
117
  return this.findById(record.id);
90
118
  }
91
119
  }
92
120
  function mapButlerSessionRow(row) {
93
121
  return {
94
122
  id: row.id,
123
+ userId: row.user_id,
95
124
  projectId: row.project_id,
96
125
  sessionId: row.session_id,
97
126
  role: row.role,
@@ -1 +1 @@
1
- {"version":3,"file":"butler-session-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-session-repository.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,uBAAuB;IACL;IAA7B,YAA6B,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;IAAG,CAAC;IAEtD,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;;;;;iDAWyC,CAC1C;aACA,GAAG,CACF,MAAM,CAAC,EAAE,EACT,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,CACjB,CAAC;QAEJ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,EAAE;aACX,OAAO,CACN;;;;;;;;;;;;;mDAa2C,CAC5C;aACA,GAAG,CAAC,SAAS,CAAC;aACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAuB,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;;;;;;;;;sBAYc,CACf;aACA,GAAG,CAAC,EAAE,CAAiC,CAAC;QAE3C,OAAO,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CACN;;;;;;;;;;;;8BAYsB,CACvB;aACA,GAAG,CAAC,SAAS,CAAiC,CAAC;QAElD,OAAO,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;;;;;;;sBAOc,CACf;aACA,GAAG,CACF,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,gBAAgB,EACvB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,EAAE,CACV,CAAC;QAEJ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;CACF;AAeD,SAAS,mBAAmB,CAAC,GAAqB;IAChD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,gBAAgB,EAAE,GAAG,CAAC,kBAAkB;QACxC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"butler-session-repository.js","sourceRoot":"","sources":["../../../../src/storage/repositories/butler-session-repository.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,10 @@ export declare class SessionBindingRepository {
8
8
  private readonly upsertStatement;
9
9
  constructor(db: Database.Database);
10
10
  findBySessionId(sessionId: string): SessionBinding | null;
11
+ findBySessionIdForUser(sessionId: string, userId: string): SessionBinding | null;
11
12
  findByProviderSession(provider: string, providerSessionId: string): SessionBinding | null;
13
+ findByProviderSessionForUser(provider: string, providerSessionId: string, userId: string): SessionBinding | null;
12
14
  findByRawStoreRef(provider: string, rawStoreRef: string): SessionBinding | null;
15
+ findByRawStoreRefForUser(provider: string, rawStoreRef: string, userId: string): SessionBinding | null;
13
16
  upsert(record: SessionBinding): void;
14
17
  }