@knpkv/codecommit-core 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +66 -0
  2. package/dist/AwsClient/createPullRequest.d.ts +1 -6
  3. package/dist/AwsClient/createPullRequest.d.ts.map +1 -1
  4. package/dist/AwsClient/createPullRequest.js +3 -11
  5. package/dist/AwsClient/createPullRequest.js.map +1 -1
  6. package/dist/AwsClient/getCallerIdentity.d.ts +5 -6
  7. package/dist/AwsClient/getCallerIdentity.d.ts.map +1 -1
  8. package/dist/AwsClient/getCallerIdentity.js +7 -12
  9. package/dist/AwsClient/getCallerIdentity.js.map +1 -1
  10. package/dist/AwsClient/getCommentsForPullRequest.d.ts +1 -6
  11. package/dist/AwsClient/getCommentsForPullRequest.d.ts.map +1 -1
  12. package/dist/AwsClient/getCommentsForPullRequest.js +9 -16
  13. package/dist/AwsClient/getCommentsForPullRequest.js.map +1 -1
  14. package/dist/AwsClient/getPullRequest.d.ts +2 -7
  15. package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
  16. package/dist/AwsClient/getPullRequest.js +15 -28
  17. package/dist/AwsClient/getPullRequest.js.map +1 -1
  18. package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
  19. package/dist/AwsClient/getPullRequests.js +18 -15
  20. package/dist/AwsClient/getPullRequests.js.map +1 -1
  21. package/dist/AwsClient/index.d.ts +3 -2
  22. package/dist/AwsClient/index.d.ts.map +1 -1
  23. package/dist/AwsClient/index.js.map +1 -1
  24. package/dist/AwsClient/internal.d.ts +47 -11
  25. package/dist/AwsClient/internal.d.ts.map +1 -1
  26. package/dist/AwsClient/internal.js +38 -9
  27. package/dist/AwsClient/internal.js.map +1 -1
  28. package/dist/AwsClient/listBranches.d.ts +1 -6
  29. package/dist/AwsClient/listBranches.d.ts.map +1 -1
  30. package/dist/AwsClient/listBranches.js +3 -11
  31. package/dist/AwsClient/listBranches.js.map +1 -1
  32. package/dist/AwsClient/updatePullRequestDescription.d.ts +1 -6
  33. package/dist/AwsClient/updatePullRequestDescription.d.ts.map +1 -1
  34. package/dist/AwsClient/updatePullRequestDescription.js +3 -11
  35. package/dist/AwsClient/updatePullRequestDescription.js.map +1 -1
  36. package/dist/AwsClient/updatePullRequestTitle.d.ts +1 -6
  37. package/dist/AwsClient/updatePullRequestTitle.d.ts.map +1 -1
  38. package/dist/AwsClient/updatePullRequestTitle.js +3 -11
  39. package/dist/AwsClient/updatePullRequestTitle.js.map +1 -1
  40. package/dist/CacheService/CacheError.d.ts +21 -0
  41. package/dist/CacheService/CacheError.d.ts.map +1 -0
  42. package/dist/CacheService/CacheError.js +17 -0
  43. package/dist/CacheService/CacheError.js.map +1 -0
  44. package/dist/CacheService/Database.d.ts +13 -0
  45. package/dist/CacheService/Database.d.ts.map +1 -0
  46. package/dist/CacheService/Database.js +38 -0
  47. package/dist/CacheService/Database.js.map +1 -0
  48. package/dist/CacheService/EventsHub.d.ts +183 -0
  49. package/dist/CacheService/EventsHub.d.ts.map +1 -0
  50. package/dist/CacheService/EventsHub.js +22 -0
  51. package/dist/CacheService/EventsHub.js.map +1 -0
  52. package/dist/CacheService/diff.d.ts +28 -0
  53. package/dist/CacheService/diff.d.ts.map +1 -0
  54. package/dist/CacheService/diff.js +102 -0
  55. package/dist/CacheService/diff.js.map +1 -0
  56. package/dist/CacheService/index.d.ts +19 -0
  57. package/dist/CacheService/index.d.ts.map +1 -0
  58. package/dist/CacheService/index.js +16 -0
  59. package/dist/CacheService/index.js.map +1 -0
  60. package/dist/CacheService/migrations/0001_initial.d.ts +5 -0
  61. package/dist/CacheService/migrations/0001_initial.d.ts.map +1 -0
  62. package/dist/CacheService/migrations/0001_initial.js +72 -0
  63. package/dist/CacheService/migrations/0001_initial.js.map +1 -0
  64. package/dist/CacheService/migrations/0002_indexes.d.ts +5 -0
  65. package/dist/CacheService/migrations/0002_indexes.d.ts.map +1 -0
  66. package/dist/CacheService/migrations/0002_indexes.js +7 -0
  67. package/dist/CacheService/migrations/0002_indexes.js.map +1 -0
  68. package/dist/CacheService/migrations/0003_add_health_score.d.ts +5 -0
  69. package/dist/CacheService/migrations/0003_add_health_score.d.ts.map +1 -0
  70. package/dist/CacheService/migrations/0003_add_health_score.js +4 -0
  71. package/dist/CacheService/migrations/0003_add_health_score.js.map +1 -0
  72. package/dist/CacheService/migrations/0004_unify_notifications.d.ts +5 -0
  73. package/dist/CacheService/migrations/0004_unify_notifications.d.ts.map +1 -0
  74. package/dist/CacheService/migrations/0004_unify_notifications.js +7 -0
  75. package/dist/CacheService/migrations/0004_unify_notifications.js.map +1 -0
  76. package/dist/CacheService/migrations/0005_add_sandboxes.d.ts +5 -0
  77. package/dist/CacheService/migrations/0005_add_sandboxes.d.ts.map +1 -0
  78. package/dist/CacheService/migrations/0005_add_sandboxes.js +23 -0
  79. package/dist/CacheService/migrations/0005_add_sandboxes.js.map +1 -0
  80. package/dist/CacheService/migrations/0006_sandbox_logs.d.ts +5 -0
  81. package/dist/CacheService/migrations/0006_sandbox_logs.d.ts.map +1 -0
  82. package/dist/CacheService/migrations/0006_sandbox_logs.js +7 -0
  83. package/dist/CacheService/migrations/0006_sandbox_logs.js.map +1 -0
  84. package/dist/CacheService/repos/CommentRepo.d.ts +16 -0
  85. package/dist/CacheService/repos/CommentRepo.d.ts.map +1 -0
  86. package/dist/CacheService/repos/CommentRepo.js +42 -0
  87. package/dist/CacheService/repos/CommentRepo.js.map +1 -0
  88. package/dist/CacheService/repos/NotificationRepo.d.ts +48 -0
  89. package/dist/CacheService/repos/NotificationRepo.d.ts.map +1 -0
  90. package/dist/CacheService/repos/NotificationRepo.js +128 -0
  91. package/dist/CacheService/repos/NotificationRepo.js.map +1 -0
  92. package/dist/CacheService/repos/PullRequestRepo.d.ts +112 -0
  93. package/dist/CacheService/repos/PullRequestRepo.d.ts.map +1 -0
  94. package/dist/CacheService/repos/PullRequestRepo.js +146 -0
  95. package/dist/CacheService/repos/PullRequestRepo.js.map +1 -0
  96. package/dist/CacheService/repos/SandboxRepo.d.ts +116 -0
  97. package/dist/CacheService/repos/SandboxRepo.d.ts.map +1 -0
  98. package/dist/CacheService/repos/SandboxRepo.js +88 -0
  99. package/dist/CacheService/repos/SandboxRepo.js.map +1 -0
  100. package/dist/CacheService/repos/SubscriptionRepo.d.ts +20 -0
  101. package/dist/CacheService/repos/SubscriptionRepo.d.ts.map +1 -0
  102. package/dist/CacheService/repos/SubscriptionRepo.js +49 -0
  103. package/dist/CacheService/repos/SubscriptionRepo.js.map +1 -0
  104. package/dist/CacheService/repos/SyncMetadataRepo.d.ts +14 -0
  105. package/dist/CacheService/repos/SyncMetadataRepo.d.ts.map +1 -0
  106. package/dist/CacheService/repos/SyncMetadataRepo.js +36 -0
  107. package/dist/CacheService/repos/SyncMetadataRepo.js.map +1 -0
  108. package/dist/ConfigService/backup.d.ts +1 -1
  109. package/dist/ConfigService/detectProfiles.d.ts +1 -1
  110. package/dist/ConfigService/index.d.ts +3 -2
  111. package/dist/ConfigService/index.d.ts.map +1 -1
  112. package/dist/ConfigService/index.js +4 -2
  113. package/dist/ConfigService/index.js.map +1 -1
  114. package/dist/ConfigService/internal.d.ts +104 -0
  115. package/dist/ConfigService/internal.d.ts.map +1 -1
  116. package/dist/ConfigService/internal.js +18 -1
  117. package/dist/ConfigService/internal.js.map +1 -1
  118. package/dist/ConfigService/load.d.ts +18 -1
  119. package/dist/ConfigService/load.d.ts.map +1 -1
  120. package/dist/ConfigService/load.js +12 -3
  121. package/dist/ConfigService/load.js.map +1 -1
  122. package/dist/ConfigService/reset.d.ts.map +1 -1
  123. package/dist/ConfigService/reset.js +5 -2
  124. package/dist/ConfigService/reset.js.map +1 -1
  125. package/dist/ConfigService/save.d.ts +1 -1
  126. package/dist/ConfigService/validate.d.ts +1 -1
  127. package/dist/DateUtils.d.ts +1 -1
  128. package/dist/DateUtils.d.ts.map +1 -1
  129. package/dist/DateUtils.js +2 -2
  130. package/dist/DateUtils.js.map +1 -1
  131. package/dist/Domain.d.ts +251 -10
  132. package/dist/Domain.d.ts.map +1 -1
  133. package/dist/Domain.js +55 -5
  134. package/dist/Domain.js.map +1 -1
  135. package/dist/Errors.d.ts +28 -1
  136. package/dist/Errors.d.ts.map +1 -1
  137. package/dist/Errors.js +22 -1
  138. package/dist/Errors.js.map +1 -1
  139. package/dist/HealthScore.d.ts.map +1 -1
  140. package/dist/HealthScore.js +1 -3
  141. package/dist/HealthScore.js.map +1 -1
  142. package/dist/PRService/index.d.ts +46 -18
  143. package/dist/PRService/index.d.ts.map +1 -1
  144. package/dist/PRService/index.js +58 -27
  145. package/dist/PRService/index.js.map +1 -1
  146. package/dist/PRService/internal.d.ts +86 -1
  147. package/dist/PRService/internal.d.ts.map +1 -1
  148. package/dist/PRService/internal.js +106 -1
  149. package/dist/PRService/internal.js.map +1 -1
  150. package/dist/PRService/refresh.d.ts +10 -4
  151. package/dist/PRService/refresh.d.ts.map +1 -1
  152. package/dist/PRService/refresh.js +30 -89
  153. package/dist/PRService/refresh.js.map +1 -1
  154. package/dist/PRService/refreshEnrich.d.ts +15 -0
  155. package/dist/PRService/refreshEnrich.d.ts.map +1 -0
  156. package/dist/PRService/refreshEnrich.js +72 -0
  157. package/dist/PRService/refreshEnrich.js.map +1 -0
  158. package/dist/PRService/refreshFetch.d.ts +20 -0
  159. package/dist/PRService/refreshFetch.d.ts.map +1 -0
  160. package/dist/PRService/refreshFetch.js +78 -0
  161. package/dist/PRService/refreshFetch.js.map +1 -0
  162. package/dist/PRService/refreshResolve.d.ts +29 -0
  163. package/dist/PRService/refreshResolve.d.ts.map +1 -0
  164. package/dist/PRService/refreshResolve.js +84 -0
  165. package/dist/PRService/refreshResolve.js.map +1 -0
  166. package/dist/PRService/refreshScore.d.ts +9 -0
  167. package/dist/PRService/refreshScore.d.ts.map +1 -0
  168. package/dist/PRService/refreshScore.js +24 -0
  169. package/dist/PRService/refreshScore.js.map +1 -0
  170. package/dist/PRService/refreshSinglePR.d.ts +13 -0
  171. package/dist/PRService/refreshSinglePR.d.ts.map +1 -0
  172. package/dist/PRService/refreshSinglePR.js +102 -0
  173. package/dist/PRService/refreshSinglePR.js.map +1 -0
  174. package/dist/PRService/setAllAccounts.d.ts +1 -3
  175. package/dist/PRService/setAllAccounts.d.ts.map +1 -1
  176. package/dist/PRService/setAllAccounts.js +2 -2
  177. package/dist/PRService/setAllAccounts.js.map +1 -1
  178. package/dist/PRService/toggleAccount.d.ts +1 -3
  179. package/dist/PRService/toggleAccount.d.ts.map +1 -1
  180. package/dist/PRService/toggleAccount.js +2 -2
  181. package/dist/PRService/toggleAccount.js.map +1 -1
  182. package/dist/SandboxService/DockerService.d.ts +57 -0
  183. package/dist/SandboxService/DockerService.d.ts.map +1 -0
  184. package/dist/SandboxService/DockerService.js +83 -0
  185. package/dist/SandboxService/DockerService.js.map +1 -0
  186. package/dist/SandboxService/PluginService.d.ts +38 -0
  187. package/dist/SandboxService/PluginService.d.ts.map +1 -0
  188. package/dist/SandboxService/PluginService.js +26 -0
  189. package/dist/SandboxService/PluginService.js.map +1 -0
  190. package/dist/SandboxService/SandboxService.d.ts +102 -0
  191. package/dist/SandboxService/SandboxService.d.ts.map +1 -0
  192. package/dist/SandboxService/SandboxService.js +272 -0
  193. package/dist/SandboxService/SandboxService.js.map +1 -0
  194. package/dist/SandboxService/index.d.ts +13 -0
  195. package/dist/SandboxService/index.d.ts.map +1 -0
  196. package/dist/SandboxService/index.js +10 -0
  197. package/dist/SandboxService/index.js.map +1 -0
  198. package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts +18 -0
  199. package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts.map +1 -0
  200. package/dist/SandboxService/plugins/ClaudeCodePlugin.js +24 -0
  201. package/dist/SandboxService/plugins/ClaudeCodePlugin.js.map +1 -0
  202. package/dist/index.d.ts +2 -1
  203. package/dist/index.d.ts.map +1 -1
  204. package/dist/index.js +2 -1
  205. package/dist/index.js.map +1 -1
  206. package/package.json +4 -1
  207. package/dist/NotificationsService.d.ts +0 -46
  208. package/dist/NotificationsService.d.ts.map +0 -1
  209. package/dist/NotificationsService.js +0 -57
  210. package/dist/NotificationsService.js.map +0 -1
@@ -0,0 +1,116 @@
1
+ import * as SqlClient from "@effect/sql/SqlClient";
2
+ import { Effect, Option, Schema } from "effect";
3
+ import type { SandboxId, SandboxStatus } from "../../Domain.js";
4
+ import { CacheError } from "../CacheError.js";
5
+ import { EventsHub } from "../EventsHub.js";
6
+ export declare const SandboxRow: Schema.Struct<{
7
+ id: typeof Schema.String;
8
+ pullRequestId: typeof Schema.String;
9
+ awsAccountId: typeof Schema.String;
10
+ repositoryName: typeof Schema.String;
11
+ sourceBranch: typeof Schema.String;
12
+ containerId: Schema.NullOr<typeof Schema.String>;
13
+ port: Schema.NullOr<typeof Schema.Number>;
14
+ workspacePath: typeof Schema.String;
15
+ status: typeof Schema.String;
16
+ statusDetail: Schema.NullOr<typeof Schema.String>;
17
+ logs: Schema.NullOr<typeof Schema.String>;
18
+ error: Schema.NullOr<typeof Schema.String>;
19
+ createdAt: typeof Schema.String;
20
+ lastActivityAt: typeof Schema.String;
21
+ }>;
22
+ export type SandboxRow = typeof SandboxRow.Type;
23
+ export interface InsertSandbox {
24
+ readonly id: string;
25
+ readonly pullRequestId: string;
26
+ readonly awsAccountId: string;
27
+ readonly repositoryName: string;
28
+ readonly sourceBranch: string;
29
+ readonly workspacePath: string;
30
+ readonly status: string;
31
+ readonly createdAt: string;
32
+ readonly lastActivityAt: string;
33
+ }
34
+ declare const SandboxRepo_base: Effect.Service.Class<SandboxRepo, "SandboxRepo", {
35
+ readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>, import("effect/Layer").Layer<EventsHub, never, never>];
36
+ readonly effect: Effect.Effect<{
37
+ readonly insert: (sandbox: InsertSandbox) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
38
+ readonly updateStatus: (id: SandboxId, status: SandboxStatus, extra?: {
39
+ containerId?: string;
40
+ port?: number;
41
+ error?: string;
42
+ }) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
43
+ readonly findById: (id: SandboxId) => Effect.Effect<{
44
+ readonly error: string | null;
45
+ readonly awsAccountId: string;
46
+ readonly id: string;
47
+ readonly repositoryName: string;
48
+ readonly status: string;
49
+ readonly sourceBranch: string;
50
+ readonly pullRequestId: string;
51
+ readonly workspacePath: string;
52
+ readonly createdAt: string;
53
+ readonly lastActivityAt: string;
54
+ readonly containerId: string | null;
55
+ readonly port: number | null;
56
+ readonly statusDetail: string | null;
57
+ readonly logs: string | null;
58
+ }, import("effect/ParseResult").ParseError | CacheError | import("@effect/sql/SqlError").SqlError, never>;
59
+ readonly findByPr: (awsAccountId: string, pullRequestId: string) => Effect.Effect<Option.Option<{
60
+ readonly error: string | null;
61
+ readonly awsAccountId: string;
62
+ readonly id: string;
63
+ readonly repositoryName: string;
64
+ readonly status: string;
65
+ readonly sourceBranch: string;
66
+ readonly pullRequestId: string;
67
+ readonly workspacePath: string;
68
+ readonly createdAt: string;
69
+ readonly lastActivityAt: string;
70
+ readonly containerId: string | null;
71
+ readonly port: number | null;
72
+ readonly statusDetail: string | null;
73
+ readonly logs: string | null;
74
+ }>, CacheError, never>;
75
+ readonly findActive: () => Effect.Effect<readonly {
76
+ readonly error: string | null;
77
+ readonly awsAccountId: string;
78
+ readonly id: string;
79
+ readonly repositoryName: string;
80
+ readonly status: string;
81
+ readonly sourceBranch: string;
82
+ readonly pullRequestId: string;
83
+ readonly workspacePath: string;
84
+ readonly createdAt: string;
85
+ readonly lastActivityAt: string;
86
+ readonly containerId: string | null;
87
+ readonly port: number | null;
88
+ readonly statusDetail: string | null;
89
+ readonly logs: string | null;
90
+ }[], CacheError, never>;
91
+ readonly findAll: () => Effect.Effect<readonly {
92
+ readonly error: string | null;
93
+ readonly awsAccountId: string;
94
+ readonly id: string;
95
+ readonly repositoryName: string;
96
+ readonly status: string;
97
+ readonly sourceBranch: string;
98
+ readonly pullRequestId: string;
99
+ readonly workspacePath: string;
100
+ readonly createdAt: string;
101
+ readonly lastActivityAt: string;
102
+ readonly containerId: string | null;
103
+ readonly port: number | null;
104
+ readonly statusDetail: string | null;
105
+ readonly logs: string | null;
106
+ }[], CacheError, never>;
107
+ readonly delete: (id: SandboxId) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
108
+ readonly updateDetail: (id: SandboxId, detail: string) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
109
+ readonly appendLog: (id: SandboxId, line: string) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
110
+ readonly updateActivity: (id: SandboxId) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
111
+ }, never, SqlClient.SqlClient | EventsHub>;
112
+ }>;
113
+ export declare class SandboxRepo extends SandboxRepo_base {
114
+ }
115
+ export {};
116
+ //# sourceMappingURL=SandboxRepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxRepo.d.ts","sourceRoot":"","sources":["../../../src/CacheService/repos/SandboxRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAerB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;;;;mCAkDuB,aAAa;oCASzB,SAAS,UACL,aAAa,UACb;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;gCAiBlD,SAAS;;;;;;;;;;;;;;;;0CAUC,MAAM,iBAAiB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAOzC,SAAS;oCAMH,SAAS,UAAU,MAAM;iCAa5B,SAAS,QAAQ,MAAM;sCAalB,SAAS;;;AArHpC,qBAAa,WAAY,SAAQ,gBA4H/B;CAAG"}
@@ -0,0 +1,88 @@
1
+ import * as SqlClient from "@effect/sql/SqlClient";
2
+ import * as SqlSchema from "@effect/sql/SqlSchema";
3
+ import { Clock, Effect, Option, Schema } from "effect";
4
+ import { CacheError } from "../CacheError.js";
5
+ import { DatabaseLive } from "../Database.js";
6
+ import { EventsHub, RepoChange } from "../EventsHub.js";
7
+ export const SandboxRow = Schema.Struct({
8
+ id: Schema.String,
9
+ pullRequestId: Schema.String,
10
+ awsAccountId: Schema.String,
11
+ repositoryName: Schema.String,
12
+ sourceBranch: Schema.String,
13
+ containerId: Schema.NullOr(Schema.String),
14
+ port: Schema.NullOr(Schema.Number),
15
+ workspacePath: Schema.String,
16
+ status: Schema.String,
17
+ statusDetail: Schema.NullOr(Schema.String),
18
+ logs: Schema.NullOr(Schema.String),
19
+ error: Schema.NullOr(Schema.String),
20
+ createdAt: Schema.String,
21
+ lastActivityAt: Schema.String
22
+ });
23
+ const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `SandboxRepo.${op}`, cause })), Effect.withSpan(`SandboxRepo.${op}`, { captureStackTrace: false }));
24
+ const isoNow = Clock.currentTimeMillis.pipe(Effect.map((ms) => new Date(ms).toISOString()));
25
+ export class SandboxRepo extends Effect.Service()("SandboxRepo", {
26
+ dependencies: [DatabaseLive, EventsHub.Default],
27
+ effect: Effect.gen(function* () {
28
+ const sql = yield* SqlClient.SqlClient;
29
+ const hub = yield* EventsHub;
30
+ const publish = hub.publish(RepoChange.Sandboxes());
31
+ const findById_ = SqlSchema.findOne({
32
+ Result: SandboxRow,
33
+ Request: Schema.Struct({ id: Schema.String }),
34
+ execute: (req) => sql `SELECT * FROM sandboxes WHERE id = ${req.id}`
35
+ });
36
+ const findByPr_ = SqlSchema.findOne({
37
+ Result: SandboxRow,
38
+ Request: Schema.Struct({ awsAccountId: Schema.String, pullRequestId: Schema.String }),
39
+ execute: (req) => sql `SELECT * FROM sandboxes
40
+ WHERE aws_account_id = ${req.awsAccountId}
41
+ AND pull_request_id = ${req.pullRequestId}
42
+ AND status NOT IN ('stopped', 'error')`
43
+ });
44
+ const findActive_ = SqlSchema.findAll({
45
+ Result: SandboxRow,
46
+ Request: Schema.Void,
47
+ execute: () => sql `SELECT * FROM sandboxes
48
+ WHERE status IN ('creating', 'cloning', 'starting', 'running')
49
+ ORDER BY created_at DESC`
50
+ });
51
+ const findAll_ = SqlSchema.findAll({
52
+ Result: SandboxRow,
53
+ Request: Schema.Void,
54
+ execute: () => sql `SELECT * FROM sandboxes ORDER BY created_at DESC`
55
+ });
56
+ return {
57
+ insert: (sandbox) => sql `INSERT INTO sandboxes (id, pull_request_id, aws_account_id, repository_name, source_branch, workspace_path, status, created_at, last_activity_at)
58
+ VALUES (${sandbox.id}, ${sandbox.pullRequestId}, ${sandbox.awsAccountId}, ${sandbox.repositoryName}, ${sandbox.sourceBranch}, ${sandbox.workspacePath}, ${sandbox.status}, ${sandbox.createdAt}, ${sandbox.lastActivityAt})`
59
+ .pipe(Effect.tap(() => publish), cacheError("insert")),
60
+ updateStatus: (id, status, extra) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET
61
+ status = ${status},
62
+ last_activity_at = ${now}
63
+ ${extra?.containerId ? sql `, container_id = ${extra.containerId}` : sql ``}
64
+ ${extra?.port ? sql `, port = ${extra.port}` : sql ``}
65
+ ${extra?.error ? sql `, error = ${extra.error}` : sql ``}
66
+ WHERE id = ${id}`.pipe(Effect.tap(() => publish))), cacheError("updateStatus")),
67
+ findById: (id) => findById_({ id }).pipe(Effect.flatMap(Option.match({
68
+ onNone: () => Effect.fail(new CacheError({ operation: "SandboxRepo.findById", cause: `Sandbox ${id} not found` })),
69
+ onSome: Effect.succeed
70
+ })), Effect.withSpan("SandboxRepo.findById", { captureStackTrace: false })),
71
+ findByPr: (awsAccountId, pullRequestId) => findByPr_({ awsAccountId, pullRequestId }).pipe(cacheError("findByPr")),
72
+ findActive: () => findActive_(undefined).pipe(cacheError("findActive")),
73
+ findAll: () => findAll_(undefined).pipe(cacheError("findAll")),
74
+ delete: (id) => sql `DELETE FROM sandboxes WHERE id = ${id}`.pipe(Effect.tap(() => publish), cacheError("delete")),
75
+ updateDetail: (id, detail) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET
76
+ status_detail = ${detail},
77
+ last_activity_at = ${now}
78
+ WHERE id = ${id}`.pipe(Effect.tap(() => publish))), cacheError("updateDetail")),
79
+ appendLog: (id, line) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET
80
+ logs = COALESCE(logs, '') || ${line + "\n"},
81
+ last_activity_at = ${now}
82
+ WHERE id = ${id}`.pipe(Effect.tap(() => publish))), cacheError("appendLog")),
83
+ updateActivity: (id) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET last_activity_at = ${now} WHERE id = ${id}`), cacheError("updateActivity"))
84
+ };
85
+ })
86
+ }) {
87
+ }
88
+ //# sourceMappingURL=SandboxRepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxRepo.js","sourceRoot":"","sources":["../../../src/CacheService/repos/SandboxRepo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import * as SqlClient from "@effect/sql/SqlClient";
2
+ import { Effect } from "effect";
3
+ import { CacheError } from "../CacheError.js";
4
+ import { EventsHub } from "../EventsHub.js";
5
+ declare const SubscriptionRepo_base: Effect.Service.Class<SubscriptionRepo, "SubscriptionRepo", {
6
+ readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>, import("effect/Layer").Layer<EventsHub, never, never>];
7
+ readonly effect: Effect.Effect<{
8
+ readonly subscribe: (awsAccountId: string, prId: string) => Effect.Effect<void, CacheError, never>;
9
+ readonly unsubscribe: (awsAccountId: string, prId: string) => Effect.Effect<void, CacheError, never>;
10
+ readonly findAll: () => Effect.Effect<readonly {
11
+ readonly awsAccountId: string;
12
+ readonly pullRequestId: string;
13
+ }[], CacheError, never>;
14
+ readonly isSubscribed: (awsAccountId: string, prId: string) => Effect.Effect<boolean, CacheError, never>;
15
+ }, never, SqlClient.SqlClient | EventsHub>;
16
+ }>;
17
+ export declare class SubscriptionRepo extends SubscriptionRepo_base {
18
+ }
19
+ export {};
20
+ //# sourceMappingURL=SubscriptionRepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionRepo.d.ts","sourceRoot":"","sources":["../../../src/CacheService/repos/SubscriptionRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;;;;2CAoDvB,MAAM,QAAQ,MAAM;6CAGlB,MAAM,QAAQ,MAAM;;;;;8CAKnB,MAAM,QAAQ,MAAM;;;AA/CvD,qBAAa,gBAAiB,SAAQ,qBAsDpC;CAAG"}
@@ -0,0 +1,49 @@
1
+ import * as SqlClient from "@effect/sql/SqlClient";
2
+ import * as SqlSchema from "@effect/sql/SqlSchema";
3
+ import { Effect, Schema } from "effect";
4
+ import { CacheError } from "../CacheError.js";
5
+ import { DatabaseLive } from "../Database.js";
6
+ import { EventsHub, RepoChange } from "../EventsHub.js";
7
+ const SubscriptionRow = Schema.Struct({
8
+ awsAccountId: Schema.String,
9
+ pullRequestId: Schema.String
10
+ });
11
+ const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `SubscriptionRepo.${op}`, cause })), Effect.withSpan(`SubscriptionRepo.${op}`, { captureStackTrace: false }));
12
+ export class SubscriptionRepo extends Effect.Service()("SubscriptionRepo", {
13
+ dependencies: [DatabaseLive, EventsHub.Default],
14
+ effect: Effect.gen(function* () {
15
+ const sql = yield* SqlClient.SqlClient;
16
+ const hub = yield* EventsHub;
17
+ const RequestPair = Schema.Struct({ awsAccountId: Schema.String, prId: Schema.String });
18
+ const subscribe_ = SqlSchema.void({
19
+ Request: RequestPair,
20
+ execute: (req) => sql `INSERT OR IGNORE INTO pr_subscriptions (aws_account_id, pull_request_id)
21
+ VALUES (${req.awsAccountId}, ${req.prId})`
22
+ });
23
+ const unsubscribe_ = SqlSchema.void({
24
+ Request: RequestPair,
25
+ execute: (req) => sql `DELETE FROM pr_subscriptions
26
+ WHERE aws_account_id = ${req.awsAccountId} AND pull_request_id = ${req.prId}`
27
+ });
28
+ const findAll_ = SqlSchema.findAll({
29
+ Result: SubscriptionRow,
30
+ Request: Schema.Void,
31
+ execute: () => sql `SELECT * FROM pr_subscriptions`
32
+ });
33
+ const isSubscribed_ = SqlSchema.findOne({
34
+ Result: Schema.Struct({ exists: Schema.Number }),
35
+ Request: RequestPair,
36
+ execute: (req) => sql `SELECT 1 AS "exists" FROM pr_subscriptions
37
+ WHERE aws_account_id = ${req.awsAccountId} AND pull_request_id = ${req.prId}`
38
+ });
39
+ const publish = hub.publish(RepoChange.Subscriptions());
40
+ return {
41
+ subscribe: (awsAccountId, prId) => subscribe_({ awsAccountId, prId }).pipe(Effect.tap(() => publish), cacheError("subscribe")),
42
+ unsubscribe: (awsAccountId, prId) => unsubscribe_({ awsAccountId, prId }).pipe(Effect.tap(() => publish), cacheError("unsubscribe")),
43
+ findAll: () => findAll_(undefined).pipe(cacheError("findAll")),
44
+ isSubscribed: (awsAccountId, prId) => isSubscribed_({ awsAccountId, prId }).pipe(Effect.map((o) => o._tag === "Some"), cacheError("isSubscribed"))
45
+ };
46
+ })
47
+ }) {
48
+ }
49
+ //# sourceMappingURL=SubscriptionRepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionRepo.js","sourceRoot":"","sources":["../../../src/CacheService/repos/SubscriptionRepo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import * as SqlClient from "@effect/sql/SqlClient";
2
+ import { Effect, Option } from "effect";
3
+ import { CacheError } from "../CacheError.js";
4
+ declare const SyncMetadataRepo_base: Effect.Service.Class<SyncMetadataRepo, "SyncMetadataRepo", {
5
+ readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>];
6
+ readonly effect: Effect.Effect<{
7
+ readonly getLastSyncedAt: (accountId: string, region: string) => Effect.Effect<Option.Option<string>, CacheError, never>;
8
+ readonly update: (accountId: string, region: string) => Effect.Effect<void, CacheError, never>;
9
+ }, never, SqlClient.SqlClient>;
10
+ }>;
11
+ export declare class SyncMetadataRepo extends SyncMetadataRepo_base {
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=SyncMetadataRepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncMetadataRepo.d.ts","sourceRoot":"","sources":["../../../src/CacheService/repos/SyncMetadataRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;;;;8CAuCV,MAAM,UAAU,MAAM;qCAM/B,MAAM,UAAU,MAAM;;;AA3BhD,qBAAa,gBAAiB,SAAQ,qBA8BpC;CAAG"}
@@ -0,0 +1,36 @@
1
+ import * as SqlClient from "@effect/sql/SqlClient";
2
+ import * as SqlSchema from "@effect/sql/SqlSchema";
3
+ import { Effect, Option, Schema } from "effect";
4
+ import { CacheError } from "../CacheError.js";
5
+ import { DatabaseLive } from "../Database.js";
6
+ const SyncRow = Schema.Struct({
7
+ lastSyncedAt: Schema.String
8
+ });
9
+ const AccountRegion = Schema.Struct({
10
+ accountId: Schema.String,
11
+ region: Schema.String
12
+ });
13
+ const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `SyncMetadataRepo.${op}`, cause })), Effect.withSpan(`SyncMetadataRepo.${op}`, { captureStackTrace: false }));
14
+ export class SyncMetadataRepo extends Effect.Service()("SyncMetadataRepo", {
15
+ dependencies: [DatabaseLive],
16
+ effect: Effect.gen(function* () {
17
+ const sql = yield* SqlClient.SqlClient;
18
+ const getLastSyncedAt_ = SqlSchema.findOne({
19
+ Result: SyncRow,
20
+ Request: AccountRegion,
21
+ execute: (req) => sql `SELECT last_synced_at FROM sync_metadata
22
+ WHERE account_id = ${req.accountId} AND account_region = ${req.region}`
23
+ });
24
+ const update_ = SqlSchema.void({
25
+ Request: AccountRegion,
26
+ execute: (req) => sql `INSERT OR REPLACE INTO sync_metadata (account_id, account_region, last_synced_at)
27
+ VALUES (${req.accountId}, ${req.region}, datetime('now'))`
28
+ });
29
+ return {
30
+ getLastSyncedAt: (accountId, region) => getLastSyncedAt_({ accountId, region }).pipe(Effect.map(Option.map((r) => r.lastSyncedAt)), cacheError("getLastSyncedAt")),
31
+ update: (accountId, region) => update_({ accountId, region }).pipe(cacheError("update"))
32
+ };
33
+ })
34
+ }) {
35
+ }
36
+ //# sourceMappingURL=SyncMetadataRepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncMetadataRepo.js","sourceRoot":"","sources":["../../../src/CacheService/repos/SyncMetadataRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM;CAC5B,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAU,MAA8B,EAAE,EAAE,CAC7E,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAC1F,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CACxE,CAAA;AAEH,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,OAAO,EAAoB,CAAC,kBAAkB,EAAE;IAC3F,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;QAEtC,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,GAAG,CAAA;iCACsB,GAAG,CAAC,SAAS,yBAAyB,GAAG,CAAC,MAAM,EAAE;SAC9E,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,GAAG,CAAA;sBACW,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,oBAAoB;SACjE,CAAC,CAAA;QAEF,OAAO;YACL,eAAe,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CACrD,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAC7C,UAAU,CAAC,iBAAiB,CAAC,CAC9B;YAEH,MAAM,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SAChG,CAAA;IACZ,CAAC,CAAC;CACH,CAAC;CAAG"}
@@ -5,5 +5,5 @@ import { FileSystem } from "@effect/platform";
5
5
  import { Effect } from "effect";
6
6
  import { ConfigError } from "../Errors.js";
7
7
  import { ConfigPaths } from "./internal.js";
8
- export declare const backup: Effect.Effect<string, ConfigError, ConfigPaths | FileSystem.FileSystem>;
8
+ export declare const backup: Effect.Effect<string, ConfigError, FileSystem.FileSystem | ConfigPaths>;
9
9
  //# sourceMappingURL=backup.d.ts.map
@@ -4,5 +4,5 @@
4
4
  import { FileSystem, Path } from "@effect/platform";
5
5
  import { Effect } from "effect";
6
6
  import { ConfigPaths } from "./internal.js";
7
- export declare const detectProfiles: Effect.Effect<import("./internal.js").DetectedProfile[], import("../Errors.ts").ProfileDetectionError, ConfigPaths | FileSystem.FileSystem | Path.Path>;
7
+ export declare const detectProfiles: Effect.Effect<import("./internal.js").DetectedProfile[], import("../Errors.ts").ProfileDetectionError, FileSystem.FileSystem | ConfigPaths | Path.Path>;
8
8
  //# sourceMappingURL=detectProfiles.d.ts.map
@@ -6,11 +6,12 @@
6
6
  */
7
7
  import type { FileSystem, Path } from "@effect/platform";
8
8
  import { Context, Effect, Layer } from "effect";
9
+ import { EventsHub } from "../CacheService/EventsHub.js";
9
10
  import { ConfigError, ProfileDetectionError } from "../Errors.js";
10
11
  import type { ConfigParseError } from "../Errors.js";
11
12
  import type { DetectedProfile, TuiConfig } from "./internal.js";
12
13
  import type { ConfigValidationResult } from "./validate.js";
13
- export { AccountConfig, DetectedProfile, TuiConfig } from "./internal.js";
14
+ export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
14
15
  export { ConfigValidationResult } from "./validate.js";
15
16
  declare const ConfigService_base: Context.TagClass<ConfigService, "@knpkv/codecommit-core/ConfigService", {
16
17
  readonly load: Effect.Effect<TuiConfig, ConfigError | ConfigParseError>;
@@ -23,5 +24,5 @@ declare const ConfigService_base: Context.TagClass<ConfigService, "@knpkv/codeco
23
24
  }>;
24
25
  export declare class ConfigService extends ConfigService_base {
25
26
  }
26
- export declare const ConfigServiceLive: Layer.Layer<ConfigService, never, FileSystem.FileSystem | Path.Path>;
27
+ export declare const ConfigServiceLive: Layer.Layer<ConfigService, never, FileSystem.FileSystem | EventsHub | Path.Path>;
27
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGpD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;;mBASnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAAC;mBACxD,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;6BAC7C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,qBAAqB,CAAC;4BACrE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;qBACzC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;oBACnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,qBAAqB,CAAC;uBAC1D,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;;AATzE,qBAAa,aAAc,SAAQ,kBAWhC;CAAG;AAoCN,eAAO,MAAM,iBAAiB,sEAqBQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGpD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9G,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;;mBASnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAAC;mBACxD,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;6BAC7C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,qBAAqB,CAAC;4BACrE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;qBACzC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;oBACnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,qBAAqB,CAAC;uBAC1D,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;;AATzE,qBAAa,aAAc,SAAQ,kBAWhC;CAAG;AAoCN,eAAO,MAAM,iBAAiB,kFAsBQ,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { Config, Context, Effect, Layer } from "effect";
2
+ import { EventsHub } from "../CacheService/EventsHub.js";
2
3
  import { ConfigError, ProfileDetectionError } from "../Errors.js";
3
4
  import { backup } from "./backup.js";
4
5
  import { detectProfiles } from "./detectProfiles.js";
@@ -7,7 +8,7 @@ import { makeLoad } from "./load.js";
7
8
  import { makeReset } from "./reset.js";
8
9
  import { save } from "./save.js";
9
10
  import { validate } from "./validate.js";
10
- export { AccountConfig, DetectedProfile, TuiConfig } from "./internal.js";
11
+ export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
11
12
  export { ConfigValidationResult } from "./validate.js";
12
13
  // ---------------------------------------------------------------------------
13
14
  // Service Definition
@@ -26,12 +27,13 @@ const ConfigPathsLive = Layer.effect(ConfigPaths, Effect.gen(function* () {
26
27
  }));
27
28
  export const ConfigServiceLive = Layer.effect(ConfigService, Effect.gen(function* () {
28
29
  const ctx = yield* Effect.context();
30
+ const hub = yield* EventsHub;
29
31
  const provide = (effect) => Effect.provide(effect, ctx);
30
32
  const load = makeLoad(detectProfiles);
31
33
  const reset = makeReset(detectProfiles);
32
34
  return {
33
35
  load: provide(load),
34
- save: (config) => provide(save(config)),
36
+ save: (config) => provide(save(config)).pipe(Effect.tap(() => hub.publish({ _tag: "Config" }))),
35
37
  detectProfiles: provide(detectProfiles),
36
38
  getConfigPath: provide(ConfigPaths.pipe(Effect.flatMap((p) => p.configPath))),
37
39
  backup: provide(backup),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,55 @@ declare const DetectedProfile_base: Schema.Class<DetectedProfile, {
21
21
  }, {}, {}>;
22
22
  export declare class DetectedProfile extends DetectedProfile_base {
23
23
  }
24
+ export declare const SandboxConfig: Schema.Struct<{
25
+ image: Schema.optionalWith<typeof Schema.String, {
26
+ default: () => string;
27
+ }>;
28
+ extensions: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
29
+ default: () => Array<string>;
30
+ }>;
31
+ setupCommands: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
32
+ default: () => Array<string>;
33
+ }>;
34
+ env: Schema.optionalWith<Schema.Record$<typeof Schema.String, typeof Schema.String>, {
35
+ default: () => Record<string, string>;
36
+ }>;
37
+ enableClaudeCode: Schema.optionalWith<typeof Schema.Boolean, {
38
+ default: () => true;
39
+ }>;
40
+ volumeMounts: Schema.optionalWith<Schema.Array$<Schema.Struct<{
41
+ hostPath: typeof Schema.String;
42
+ containerPath: typeof Schema.String;
43
+ readonly: Schema.optionalWith<typeof Schema.Boolean, {
44
+ default: () => false;
45
+ }>;
46
+ }>>, {
47
+ default: () => Array<{
48
+ hostPath: string;
49
+ containerPath: string;
50
+ readonly: boolean;
51
+ }>;
52
+ }>;
53
+ cloneDepth: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
54
+ default: () => number;
55
+ }>;
56
+ }>;
57
+ export type SandboxConfig = typeof SandboxConfig.Type;
58
+ export declare const defaultSandboxConfig: {
59
+ readonly image: string;
60
+ readonly extensions: readonly string[];
61
+ readonly setupCommands: readonly string[];
62
+ readonly env: {
63
+ readonly [x: string]: string;
64
+ };
65
+ readonly enableClaudeCode: boolean;
66
+ readonly volumeMounts: readonly {
67
+ readonly hostPath: string;
68
+ readonly containerPath: string;
69
+ readonly readonly: boolean;
70
+ }[];
71
+ readonly cloneDepth: number;
72
+ };
24
73
  export declare const AccountConfig: Schema.Struct<{
25
74
  profile: Schema.brand<typeof Schema.String, "AwsProfileName">;
26
75
  regions: Schema.optionalWith<Schema.Array$<Schema.brand<typeof Schema.String, "AwsRegion">>, {
@@ -44,6 +93,61 @@ export declare const TuiConfig: Schema.Struct<{
44
93
  autoDetect: Schema.optionalWith<typeof Schema.Boolean, {
45
94
  default: () => true;
46
95
  }>;
96
+ autoRefresh: Schema.optionalWith<typeof Schema.Boolean, {
97
+ default: () => true;
98
+ }>;
99
+ refreshIntervalSeconds: Schema.optionalWith<typeof Schema.Number, {
100
+ default: () => number;
101
+ }>;
102
+ sandbox: Schema.optionalWith<Schema.Struct<{
103
+ image: Schema.optionalWith<typeof Schema.String, {
104
+ default: () => string;
105
+ }>;
106
+ extensions: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
107
+ default: () => Array<string>;
108
+ }>;
109
+ setupCommands: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
110
+ default: () => Array<string>;
111
+ }>;
112
+ env: Schema.optionalWith<Schema.Record$<typeof Schema.String, typeof Schema.String>, {
113
+ default: () => Record<string, string>;
114
+ }>;
115
+ enableClaudeCode: Schema.optionalWith<typeof Schema.Boolean, {
116
+ default: () => true;
117
+ }>;
118
+ volumeMounts: Schema.optionalWith<Schema.Array$<Schema.Struct<{
119
+ hostPath: typeof Schema.String;
120
+ containerPath: typeof Schema.String;
121
+ readonly: Schema.optionalWith<typeof Schema.Boolean, {
122
+ default: () => false;
123
+ }>;
124
+ }>>, {
125
+ default: () => Array<{
126
+ hostPath: string;
127
+ containerPath: string;
128
+ readonly: boolean;
129
+ }>;
130
+ }>;
131
+ cloneDepth: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
132
+ default: () => number;
133
+ }>;
134
+ }>, {
135
+ default: () => {
136
+ readonly image: string;
137
+ readonly extensions: readonly string[];
138
+ readonly setupCommands: readonly string[];
139
+ readonly env: {
140
+ readonly [x: string]: string;
141
+ };
142
+ readonly enableClaudeCode: boolean;
143
+ readonly volumeMounts: readonly {
144
+ readonly hostPath: string;
145
+ readonly containerPath: string;
146
+ readonly readonly: boolean;
147
+ }[];
148
+ readonly cloneDepth: number;
149
+ };
150
+ }>;
47
151
  }>;
48
152
  export type TuiConfig = typeof TuiConfig.Type;
49
153
  export declare const parseAwsConfig: (content: string) => ReadonlyArray<DetectedProfile>;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAgB,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;;;;;;;;;;;;;;;;AAMtE,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,aAAa;;;;;;;;EAIxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;;;;;;;;;;;EAGpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAqC7C,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,aAAa,CAAC,eAAe,CAK3E,CAAA;;yBASsB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;uBACpC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;;AAJnE,qBAAa,WAAY,SAAQ,gBAM9B;CAAG"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAgB,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;;;;;;;;;;;;;;;;AAMtE,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,aAAa;;;;;uBAEgE,KAAK,CAAC,MAAM,CAAC;;;uBACV,KAAK,CAAC,MAAM,CAAC;;;uBAEzD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;uBAUxB,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC;;;;;EAOlH,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAAuC,CAAA;AAExE,eAAO,MAAM,aAAa;;;;;;;;EAIxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;2BAlCoE,KAAK,CAAC,MAAM,CAAC;;;2BACV,KAAK,CAAC,MAAM,CAAC;;;2BAEzD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;2BAUxB,KAAK,CAAC;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,aAAa,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,OAAO,CAAA;aAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;EA2BlH,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAqC7C,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,aAAa,CAAC,eAAe,CAK3E,CAAA;;yBASsB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;uBACpC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;;AAJnE,qBAAa,WAAY,SAAQ,gBAM9B;CAAG"}
@@ -8,6 +8,20 @@ export class DetectedProfile extends Schema.Class("DetectedProfile")({
8
8
  region: Schema.optionalWith(AwsRegion, { exact: true })
9
9
  }) {
10
10
  }
11
+ export const SandboxConfig = Schema.Struct({
12
+ image: Schema.String.pipe(Schema.optionalWith({ default: () => "codercom/code-server:latest" })),
13
+ extensions: Schema.Array(Schema.String).pipe(Schema.optionalWith({ default: () => [] })),
14
+ setupCommands: Schema.Array(Schema.String).pipe(Schema.optionalWith({ default: () => [] })),
15
+ env: Schema.Record({ key: Schema.String, value: Schema.String }).pipe(Schema.optionalWith({ default: () => ({}) })),
16
+ enableClaudeCode: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
17
+ volumeMounts: Schema.Array(Schema.Struct({
18
+ hostPath: Schema.String,
19
+ containerPath: Schema.String,
20
+ readonly: Schema.Boolean.pipe(Schema.optionalWith({ default: () => false }))
21
+ })).pipe(Schema.optionalWith({ default: () => [] })),
22
+ cloneDepth: Schema.Number.pipe(Schema.int(), Schema.greaterThanOrEqualTo(0), Schema.optionalWith({ default: () => 0 }))
23
+ });
24
+ export const defaultSandboxConfig = Schema.decodeSync(SandboxConfig)({});
11
25
  export const AccountConfig = Schema.Struct({
12
26
  profile: AwsProfileName,
13
27
  regions: Schema.Array(AwsRegion).pipe(Schema.optionalWith({ default: () => ["us-east-1"] })),
@@ -15,7 +29,10 @@ export const AccountConfig = Schema.Struct({
15
29
  });
16
30
  export const TuiConfig = Schema.Struct({
17
31
  accounts: Schema.Array(AccountConfig),
18
- autoDetect: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true }))
32
+ autoDetect: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
33
+ autoRefresh: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
34
+ refreshIntervalSeconds: Schema.Number.pipe(Schema.optionalWith({ default: () => 300 })),
35
+ sandbox: SandboxConfig.pipe(Schema.optionalWith({ default: () => Schema.decodeSync(SandboxConfig)({}) }))
19
36
  });
20
37
  // ---------------------------------------------------------------------------
21
38
  // INI Parsing (Schema-validated)