@knpkv/codecommit-core 0.4.0 → 0.5.1

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 (192) hide show
  1. package/dist/AwsClient/getDifferences.d.ts +16 -0
  2. package/dist/AwsClient/getDifferences.d.ts.map +1 -0
  3. package/dist/AwsClient/getDifferences.js +22 -0
  4. package/dist/AwsClient/getDifferences.js.map +1 -0
  5. package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
  6. package/dist/AwsClient/getPullRequest.js +28 -7
  7. package/dist/AwsClient/getPullRequest.js.map +1 -1
  8. package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
  9. package/dist/AwsClient/getPullRequests.js +31 -13
  10. package/dist/AwsClient/getPullRequests.js.map +1 -1
  11. package/dist/AwsClient/index.d.ts +21 -13
  12. package/dist/AwsClient/index.d.ts.map +1 -1
  13. package/dist/AwsClient/index.js +3 -1
  14. package/dist/AwsClient/index.js.map +1 -1
  15. package/dist/AwsClient/internal.d.ts +23 -0
  16. package/dist/AwsClient/internal.d.ts.map +1 -1
  17. package/dist/AwsClient/internal.js +4 -1
  18. package/dist/AwsClient/internal.js.map +1 -1
  19. package/dist/CacheService/Database.d.ts.map +1 -1
  20. package/dist/CacheService/Database.js +13 -1
  21. package/dist/CacheService/Database.js.map +1 -1
  22. package/dist/CacheService/EventsHub.d.ts +24 -4
  23. package/dist/CacheService/EventsHub.d.ts.map +1 -1
  24. package/dist/CacheService/EventsHub.js.map +1 -1
  25. package/dist/CacheService/index.d.ts +5 -2
  26. package/dist/CacheService/index.d.ts.map +1 -1
  27. package/dist/CacheService/index.js +3 -1
  28. package/dist/CacheService/index.js.map +1 -1
  29. package/dist/CacheService/migrations/0005_add_sandboxes.d.ts +5 -0
  30. package/dist/CacheService/migrations/0005_add_sandboxes.d.ts.map +1 -0
  31. package/dist/CacheService/migrations/0005_add_sandboxes.js +23 -0
  32. package/dist/CacheService/migrations/0005_add_sandboxes.js.map +1 -0
  33. package/dist/CacheService/migrations/0006_sandbox_logs.d.ts +5 -0
  34. package/dist/CacheService/migrations/0006_sandbox_logs.d.ts.map +1 -0
  35. package/dist/CacheService/migrations/0006_sandbox_logs.js +7 -0
  36. package/dist/CacheService/migrations/0006_sandbox_logs.js.map +1 -0
  37. package/dist/CacheService/migrations/0007_stats_columns.d.ts +5 -0
  38. package/dist/CacheService/migrations/0007_stats_columns.d.ts.map +1 -0
  39. package/dist/CacheService/migrations/0007_stats_columns.js +13 -0
  40. package/dist/CacheService/migrations/0007_stats_columns.js.map +1 -0
  41. package/dist/CacheService/migrations/0008_merged_by.d.ts +5 -0
  42. package/dist/CacheService/migrations/0008_merged_by.d.ts.map +1 -0
  43. package/dist/CacheService/migrations/0008_merged_by.js +4 -0
  44. package/dist/CacheService/migrations/0008_merged_by.js.map +1 -0
  45. package/dist/CacheService/migrations/0009_approved_by.d.ts +5 -0
  46. package/dist/CacheService/migrations/0009_approved_by.d.ts.map +1 -0
  47. package/dist/CacheService/migrations/0009_approved_by.js +4 -0
  48. package/dist/CacheService/migrations/0009_approved_by.js.map +1 -0
  49. package/dist/CacheService/migrations/0010_commented_by.d.ts +5 -0
  50. package/dist/CacheService/migrations/0010_commented_by.d.ts.map +1 -0
  51. package/dist/CacheService/migrations/0010_commented_by.js +4 -0
  52. package/dist/CacheService/migrations/0010_commented_by.js.map +1 -0
  53. package/dist/CacheService/repos/PullRequestRepo/index.d.ts +132 -0
  54. package/dist/CacheService/repos/PullRequestRepo/index.d.ts.map +1 -0
  55. package/dist/CacheService/repos/PullRequestRepo/index.js +35 -0
  56. package/dist/CacheService/repos/PullRequestRepo/index.js.map +1 -0
  57. package/dist/CacheService/repos/PullRequestRepo/internal.d.ts +72 -0
  58. package/dist/CacheService/repos/PullRequestRepo/internal.d.ts.map +1 -0
  59. package/dist/CacheService/repos/PullRequestRepo/internal.js +69 -0
  60. package/dist/CacheService/repos/PullRequestRepo/internal.js.map +1 -0
  61. package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts +24 -0
  62. package/dist/CacheService/repos/PullRequestRepo/mutations.d.ts.map +1 -0
  63. package/dist/CacheService/repos/PullRequestRepo/mutations.js +94 -0
  64. package/dist/CacheService/repos/PullRequestRepo/mutations.js.map +1 -0
  65. package/dist/CacheService/repos/PullRequestRepo/queries.d.ts +113 -0
  66. package/dist/CacheService/repos/PullRequestRepo/queries.d.ts.map +1 -0
  67. package/dist/CacheService/repos/PullRequestRepo/queries.js +89 -0
  68. package/dist/CacheService/repos/PullRequestRepo/queries.js.map +1 -0
  69. package/dist/CacheService/repos/SandboxRepo.d.ts +116 -0
  70. package/dist/CacheService/repos/SandboxRepo.d.ts.map +1 -0
  71. package/dist/CacheService/repos/SandboxRepo.js +88 -0
  72. package/dist/CacheService/repos/SandboxRepo.js.map +1 -0
  73. package/dist/CacheService/repos/StatsRepo/index.d.ts +93 -0
  74. package/dist/CacheService/repos/StatsRepo/index.d.ts.map +1 -0
  75. package/dist/CacheService/repos/StatsRepo/index.js +41 -0
  76. package/dist/CacheService/repos/StatsRepo/index.js.map +1 -0
  77. package/dist/CacheService/repos/StatsRepo/internal.d.ts +120 -0
  78. package/dist/CacheService/repos/StatsRepo/internal.d.ts.map +1 -0
  79. package/dist/CacheService/repos/StatsRepo/internal.js +34 -0
  80. package/dist/CacheService/repos/StatsRepo/internal.js.map +1 -0
  81. package/dist/CacheService/repos/StatsRepo/queries.d.ts +42 -0
  82. package/dist/CacheService/repos/StatsRepo/queries.d.ts.map +1 -0
  83. package/dist/CacheService/repos/StatsRepo/queries.js +182 -0
  84. package/dist/CacheService/repos/StatsRepo/queries.js.map +1 -0
  85. package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts +47 -0
  86. package/dist/CacheService/repos/StatsRepo/reviewerData.d.ts.map +1 -0
  87. package/dist/CacheService/repos/StatsRepo/reviewerData.js +172 -0
  88. package/dist/CacheService/repos/StatsRepo/reviewerData.js.map +1 -0
  89. package/dist/ConfigService/index.d.ts +1 -1
  90. package/dist/ConfigService/index.d.ts.map +1 -1
  91. package/dist/ConfigService/index.js +1 -1
  92. package/dist/ConfigService/index.js.map +1 -1
  93. package/dist/ConfigService/internal.d.ts +98 -0
  94. package/dist/ConfigService/internal.d.ts.map +1 -1
  95. package/dist/ConfigService/internal.js +16 -1
  96. package/dist/ConfigService/internal.js.map +1 -1
  97. package/dist/ConfigService/load.d.ts +15 -0
  98. package/dist/ConfigService/load.d.ts.map +1 -1
  99. package/dist/ConfigService/load.js +10 -3
  100. package/dist/ConfigService/load.js.map +1 -1
  101. package/dist/ConfigService/reset.d.ts.map +1 -1
  102. package/dist/ConfigService/reset.js +3 -2
  103. package/dist/ConfigService/reset.js.map +1 -1
  104. package/dist/DateUtils.d.ts +28 -0
  105. package/dist/DateUtils.d.ts.map +1 -1
  106. package/dist/DateUtils.js +69 -1
  107. package/dist/DateUtils.js.map +1 -1
  108. package/dist/Domain.d.ts +87 -5
  109. package/dist/Domain.d.ts.map +1 -1
  110. package/dist/Domain.js +38 -5
  111. package/dist/Domain.js.map +1 -1
  112. package/dist/Errors.d.ts +28 -1
  113. package/dist/Errors.d.ts.map +1 -1
  114. package/dist/Errors.js +22 -1
  115. package/dist/Errors.js.map +1 -1
  116. package/dist/PRService/index.d.ts +3 -3
  117. package/dist/PRService/index.d.ts.map +1 -1
  118. package/dist/PRService/index.js +1 -1
  119. package/dist/PRService/index.js.map +1 -1
  120. package/dist/PRService/internal.d.ts +24 -2
  121. package/dist/PRService/internal.d.ts.map +1 -1
  122. package/dist/PRService/internal.js +23 -8
  123. package/dist/PRService/internal.js.map +1 -1
  124. package/dist/PRService/refresh.d.ts +1 -1
  125. package/dist/PRService/refresh.d.ts.map +1 -1
  126. package/dist/PRService/refresh.js +2 -0
  127. package/dist/PRService/refresh.js.map +1 -1
  128. package/dist/PRService/refreshDiffs.d.ts +16 -0
  129. package/dist/PRService/refreshDiffs.d.ts.map +1 -0
  130. package/dist/PRService/refreshDiffs.js +54 -0
  131. package/dist/PRService/refreshDiffs.js.map +1 -0
  132. package/dist/PRService/refreshEnrich.d.ts +1 -1
  133. package/dist/PRService/refreshEnrich.d.ts.map +1 -1
  134. package/dist/PRService/refreshEnrich.js +3 -1
  135. package/dist/PRService/refreshEnrich.js.map +1 -1
  136. package/dist/PRService/refreshFetch.d.ts +1 -1
  137. package/dist/PRService/refreshFetch.d.ts.map +1 -1
  138. package/dist/PRService/refreshFetch.js +12 -3
  139. package/dist/PRService/refreshFetch.js.map +1 -1
  140. package/dist/PRService/refreshHistory.d.ts +19 -0
  141. package/dist/PRService/refreshHistory.d.ts.map +1 -0
  142. package/dist/PRService/refreshHistory.js +110 -0
  143. package/dist/PRService/refreshHistory.js.map +1 -0
  144. package/dist/PRService/refreshResolve.d.ts +1 -1
  145. package/dist/PRService/refreshResolve.d.ts.map +1 -1
  146. package/dist/PRService/refreshResolve.js +1 -1
  147. package/dist/PRService/refreshResolve.js.map +1 -1
  148. package/dist/PRService/refreshScore.d.ts +1 -1
  149. package/dist/PRService/refreshScore.d.ts.map +1 -1
  150. package/dist/PRService/refreshScore.js +1 -1
  151. package/dist/PRService/refreshScore.js.map +1 -1
  152. package/dist/PRService/refreshSinglePR.d.ts +1 -1
  153. package/dist/PRService/refreshSinglePR.d.ts.map +1 -1
  154. package/dist/PRService/refreshSinglePR.js +4 -3
  155. package/dist/PRService/refreshSinglePR.js.map +1 -1
  156. package/dist/SandboxService/DockerService.d.ts +57 -0
  157. package/dist/SandboxService/DockerService.d.ts.map +1 -0
  158. package/dist/SandboxService/DockerService.js +83 -0
  159. package/dist/SandboxService/DockerService.js.map +1 -0
  160. package/dist/SandboxService/PluginService.d.ts +38 -0
  161. package/dist/SandboxService/PluginService.d.ts.map +1 -0
  162. package/dist/SandboxService/PluginService.js +26 -0
  163. package/dist/SandboxService/PluginService.js.map +1 -0
  164. package/dist/SandboxService/SandboxService.d.ts +102 -0
  165. package/dist/SandboxService/SandboxService.d.ts.map +1 -0
  166. package/dist/SandboxService/SandboxService.js +272 -0
  167. package/dist/SandboxService/SandboxService.js.map +1 -0
  168. package/dist/SandboxService/index.d.ts +13 -0
  169. package/dist/SandboxService/index.d.ts.map +1 -0
  170. package/dist/SandboxService/index.js +10 -0
  171. package/dist/SandboxService/index.js.map +1 -0
  172. package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts +18 -0
  173. package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts.map +1 -0
  174. package/dist/SandboxService/plugins/ClaudeCodePlugin.js +24 -0
  175. package/dist/SandboxService/plugins/ClaudeCodePlugin.js.map +1 -0
  176. package/dist/StatsService/WeeklyStats.d.ts +174 -0
  177. package/dist/StatsService/WeeklyStats.d.ts.map +1 -0
  178. package/dist/StatsService/WeeklyStats.js +110 -0
  179. package/dist/StatsService/WeeklyStats.js.map +1 -0
  180. package/dist/StatsService/index.d.ts +45 -0
  181. package/dist/StatsService/index.d.ts.map +1 -0
  182. package/dist/StatsService/index.js +145 -0
  183. package/dist/StatsService/index.js.map +1 -0
  184. package/dist/index.d.ts +2 -0
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +2 -0
  187. package/dist/index.js.map +1 -1
  188. package/package.json +1 -1
  189. package/dist/CacheService/repos/PullRequestRepo.d.ts +0 -112
  190. package/dist/CacheService/repos/PullRequestRepo.d.ts.map +0 -1
  191. package/dist/CacheService/repos/PullRequestRepo.js +0 -146
  192. package/dist/CacheService/repos/PullRequestRepo.js.map +0 -1
@@ -0,0 +1,172 @@
1
+ import { Effect, Schema } from "effect";
2
+ import { cacheError, extractComments, LocationsFromJson, whereFilters } from "./internal.js";
3
+ export const reviewerData = (sql) => (weekStart, weekEnd, filters) => {
4
+ const f = whereFilters(sql, filters);
5
+ const fJoin = whereFilters(sql, filters, "p");
6
+ return Effect.all({
7
+ prs: sql `
8
+ SELECT id, title, author, aws_account_id, repository_name, creation_date, closed_at,
9
+ COALESCE(closed_at, last_modified_date) as last_modified_date, is_approved, status, merged_by, approved_by
10
+ FROM pull_requests
11
+ WHERE COALESCE(closed_at, last_modified_date) >= ${weekStart} AND COALESCE(closed_at, last_modified_date) < ${weekEnd}
12
+ AND status != 'CLOSED'
13
+ ${f.repo} ${f.author} ${f.account}
14
+ `,
15
+ comments: sql `
16
+ SELECT c.pull_request_id, c.aws_account_id, c.locations_json
17
+ FROM pr_comments c
18
+ INNER JOIN pull_requests p ON p.id = c.pull_request_id AND p.aws_account_id = c.aws_account_id
19
+ WHERE COALESCE(p.closed_at, p.last_modified_date) >= ${weekStart} AND COALESCE(p.closed_at, p.last_modified_date) < ${weekEnd}
20
+ AND p.status != 'CLOSED'
21
+ ${fJoin.repo} ${fJoin.author} ${fJoin.account}
22
+ `
23
+ }).pipe(Effect.flatMap(({ comments, prs }) => Effect.gen(function* () {
24
+ const prAuthors = new Map(prs.map((p) => [
25
+ `${p.awsAccountId}:${p.id}`,
26
+ {
27
+ id: p.id,
28
+ title: p.title,
29
+ author: p.author,
30
+ repositoryName: p.repositoryName,
31
+ awsAccountId: p.awsAccountId,
32
+ creationDate: new Date(p.creationDate),
33
+ closedAt: p.closedAt ? new Date(p.closedAt) : null,
34
+ lastModifiedDate: new Date(p.lastModifiedDate),
35
+ isApproved: p.isApproved === 1,
36
+ isMerged: p.status === "MERGED",
37
+ mergedBy: p.mergedBy,
38
+ approvedBy: p.approvedBy
39
+ ? p.approvedBy.split(",").map((s) => s.trim()).filter((s) => s && s !== p.author)
40
+ : []
41
+ }
42
+ ]));
43
+ // Top approvers — from approved_by column (comma-separated names)
44
+ const approverCounts = new Map();
45
+ for (const p of prs) {
46
+ if (p.approvedBy) {
47
+ for (const name of p.approvedBy.split(",")) {
48
+ const trimmed = name.trim();
49
+ if (trimmed && trimmed !== p.author) {
50
+ approverCounts.set(trimmed, (approverCounts.get(trimmed) ?? 0) + 1);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ const reviewerCounts = new Map();
56
+ const firstReviewDeltas = [];
57
+ const firstReviewDetails = [];
58
+ const feedbackDeltas = [];
59
+ const feedbackDetails = [];
60
+ const prsWithCommentReview = new Set();
61
+ const wsMs = new Date(weekStart).getTime();
62
+ const weMs = new Date(weekEnd).getTime();
63
+ const fmtTs = (d) => d.toISOString().slice(0, 16).replace("T", " ");
64
+ for (const row of comments) {
65
+ const key = `${row.awsAccountId}:${row.pullRequestId}`;
66
+ const prInfo = prAuthors.get(key);
67
+ if (!prInfo)
68
+ continue;
69
+ const parsed = yield* Schema.decodeUnknown(LocationsFromJson)(row.locationsJson).pipe(Effect.catchAll(() => Effect.succeed([])));
70
+ const allComments = extractComments(parsed);
71
+ const sorted = [...allComments].sort((a, b) => a.creationDate.getTime() - b.creationDate.getTime());
72
+ // Filter to week range
73
+ const inWeek = sorted.filter((c) => c.creationDate.getTime() >= wsMs && c.creationDate.getTime() < weMs);
74
+ // Top reviewers — comments in this week (exclude self-reviews)
75
+ for (const c of inWeek) {
76
+ if (c.author !== prInfo.author) {
77
+ reviewerCounts.set(c.author, (reviewerCounts.get(c.author) ?? 0) + 1);
78
+ }
79
+ }
80
+ // (mergedBy-based approver counting moved above comment loop)
81
+ // Time to first review (comment action)
82
+ const firstReview = sorted.find((c) => c.author !== prInfo.author);
83
+ if (firstReview) {
84
+ prsWithCommentReview.add(key);
85
+ const durationMs = firstReview.creationDate.getTime() - prInfo.creationDate.getTime();
86
+ firstReviewDeltas.push(durationMs);
87
+ firstReviewDetails.push({
88
+ prId: prInfo.id,
89
+ prTitle: prInfo.title,
90
+ author: prInfo.author,
91
+ repositoryName: prInfo.repositoryName,
92
+ awsAccountId: prInfo.awsAccountId,
93
+ durationMs,
94
+ fromLabel: fmtTs(prInfo.creationDate),
95
+ toLabel: `${fmtTs(firstReview.creationDate)} (${firstReview.author})`
96
+ });
97
+ }
98
+ // Time to address feedback (review comment → next author reply)
99
+ const prFeedbackDeltas = [];
100
+ let firstFeedbackFrom;
101
+ let lastFeedbackTo;
102
+ for (let i = 0; i < sorted.length; i++) {
103
+ if (sorted[i].author !== prInfo.author) {
104
+ const nextAuthorReply = sorted.slice(i + 1).find((c) => c.author === prInfo.author);
105
+ if (nextAuthorReply) {
106
+ const dMs = nextAuthorReply.creationDate.getTime() - sorted[i].creationDate.getTime();
107
+ feedbackDeltas.push(dMs);
108
+ prFeedbackDeltas.push(dMs);
109
+ if (!firstFeedbackFrom)
110
+ firstFeedbackFrom = sorted[i].creationDate;
111
+ lastFeedbackTo = nextAuthorReply.creationDate;
112
+ }
113
+ }
114
+ }
115
+ if (prFeedbackDeltas.length > 0) {
116
+ const avgMs = prFeedbackDeltas.reduce((a, b) => a + b, 0) / prFeedbackDeltas.length;
117
+ feedbackDetails.push({
118
+ prId: prInfo.id,
119
+ prTitle: prInfo.title,
120
+ author: prInfo.author,
121
+ repositoryName: prInfo.repositoryName,
122
+ awsAccountId: prInfo.awsAccountId,
123
+ durationMs: avgMs,
124
+ fromLabel: `${fmtTs(firstFeedbackFrom)} (${prFeedbackDeltas.length} rounds)`,
125
+ toLabel: fmtTs(lastFeedbackTo)
126
+ });
127
+ }
128
+ }
129
+ // Approve-only first review: PRs approved by non-author but without non-author comments
130
+ for (const [key, prInfo] of prAuthors) {
131
+ if (prsWithCommentReview.has(key))
132
+ continue;
133
+ if (prInfo.approvedBy.length === 0)
134
+ continue;
135
+ // Use closed_at (merge time) as proxy for approval time
136
+ const reviewDate = prInfo.closedAt ?? prInfo.lastModifiedDate;
137
+ const durationMs = reviewDate.getTime() - prInfo.creationDate.getTime();
138
+ if (durationMs <= 0)
139
+ continue;
140
+ firstReviewDeltas.push(durationMs);
141
+ firstReviewDetails.push({
142
+ prId: prInfo.id,
143
+ prTitle: prInfo.title,
144
+ author: prInfo.author,
145
+ repositoryName: prInfo.repositoryName,
146
+ awsAccountId: prInfo.awsAccountId,
147
+ durationMs,
148
+ fromLabel: fmtTs(prInfo.creationDate),
149
+ toLabel: `${fmtTs(reviewDate)} (approved: ${prInfo.approvedBy[0]})`
150
+ });
151
+ }
152
+ const topReviewers = [...reviewerCounts.entries()]
153
+ .map(([author, commentCount]) => ({ author, commentCount }))
154
+ .sort((a, b) => b.commentCount - a.commentCount)
155
+ .slice(0, 10);
156
+ const topApprovers = [...approverCounts.entries()]
157
+ .map(([author, approvalCount]) => ({ author, approvalCount }))
158
+ .sort((a, b) => b.approvalCount - a.approvalCount)
159
+ .slice(0, 10);
160
+ const avg = (arr) => arr.length > 0 ? arr.reduce((a, b) => a + b, 0) / arr.length : null;
161
+ return {
162
+ topReviewers,
163
+ topApprovers,
164
+ avgTimeToFirstReview: avg(firstReviewDeltas),
165
+ avgTimeToMerge: null, // computed separately from PR dates
166
+ avgTimeToAddressFeedback: avg(feedbackDeltas),
167
+ firstReviewDetails,
168
+ feedbackDetails
169
+ };
170
+ }).pipe(Effect.withSpan("StatsRepo.reviewerData.compute"))), cacheError("reviewerData"));
171
+ };
172
+ //# sourceMappingURL=reviewerData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerData.js","sourceRoot":"","sources":["../../../../src/CacheService/repos/StatsRepo/reviewerData.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import { ConfigError, ProfileDetectionError } from "../Errors.js";
11
11
  import type { ConfigParseError } from "../Errors.js";
12
12
  import type { DetectedProfile, TuiConfig } from "./internal.js";
13
13
  import type { ConfigValidationResult } from "./validate.js";
14
- export { AccountConfig, DetectedProfile, TuiConfig } from "./internal.js";
14
+ export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
15
15
  export { ConfigValidationResult } from "./validate.js";
16
16
  declare const ConfigService_base: Context.TagClass<ConfigService, "@knpkv/codecommit-core/ConfigService", {
17
17
  readonly load: Effect.Effect<TuiConfig, ConfigError | ConfigParseError>;
@@ -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,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,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,kFAsBQ,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"}
@@ -8,7 +8,7 @@ import { makeLoad } from "./load.js";
8
8
  import { makeReset } from "./reset.js";
9
9
  import { save } from "./save.js";
10
10
  import { validate } from "./validate.js";
11
- export { AccountConfig, DetectedProfile, TuiConfig } from "./internal.js";
11
+ export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
12
12
  export { ConfigValidationResult } from "./validate.js";
13
13
  // ---------------------------------------------------------------------------
14
14
  // Service Definition
@@ -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">>, {
@@ -50,6 +99,55 @@ export declare const TuiConfig: Schema.Struct<{
50
99
  refreshIntervalSeconds: Schema.optionalWith<typeof Schema.Number, {
51
100
  default: () => number;
52
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
+ }>;
53
151
  }>;
54
152
  export type TuiConfig = typeof TuiConfig.Type;
55
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;;;;;;;;;;;;;;;;;;;EAKpB,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"] })),
@@ -17,7 +31,8 @@ export const TuiConfig = Schema.Struct({
17
31
  accounts: Schema.Array(AccountConfig),
18
32
  autoDetect: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
19
33
  autoRefresh: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
20
- refreshIntervalSeconds: Schema.Number.pipe(Schema.optionalWith({ default: () => 300 }))
34
+ refreshIntervalSeconds: Schema.Number.pipe(Schema.optionalWith({ default: () => 300 })),
35
+ sandbox: SandboxConfig.pipe(Schema.optionalWith({ default: () => Schema.decodeSync(SandboxConfig)({}) }))
21
36
  });
22
37
  // ---------------------------------------------------------------------------
23
38
  // INI Parsing (Schema-validated)
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"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"}
@@ -16,5 +16,20 @@ export declare const makeLoad: (detectProfiles: Effect.Effect<ReadonlyArray<Dete
16
16
  readonly autoDetect: boolean;
17
17
  readonly autoRefresh: boolean;
18
18
  readonly refreshIntervalSeconds: number;
19
+ readonly sandbox: {
20
+ readonly image: string;
21
+ readonly extensions: readonly string[];
22
+ readonly setupCommands: readonly string[];
23
+ readonly env: {
24
+ readonly [x: string]: string;
25
+ };
26
+ readonly enableClaudeCode: boolean;
27
+ readonly volumeMounts: readonly {
28
+ readonly hostPath: string;
29
+ readonly containerPath: string;
30
+ readonly readonly: boolean;
31
+ }[];
32
+ readonly cloneDepth: number;
33
+ };
19
34
  }, ConfigError | ConfigParseError, FileSystem.FileSystem | ConfigPaths | Path.Path>;
20
35
  //# sourceMappingURL=load.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/ConfigService/load.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAa,MAAM,eAAe,CAAA;AAE5E,eAAO,MAAM,QAAQ,GACnB,gBAAgB,MAAM,CAAC,MAAM,CAC3B,aAAa,CAAC,eAAe,CAAC,EAC9B,qBAAqB,EACrB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAChD;;;;;;;;;mFAuD6C,CAAA"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/ConfigService/load.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,WAAW,EAAwB,KAAK,eAAe,EAAa,MAAM,eAAe,CAAA;AAElG,eAAO,MAAM,QAAQ,GACnB,gBAAgB,MAAM,CAAC,MAAM,CAC3B,aAAa,CAAC,eAAe,CAAC,EAC9B,qBAAqB,EACrB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAChD;;;;;;;;;;;;;;;;;;;;;;;;mFA8D6C,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { FileSystem } from "@effect/platform";
2
2
  import { Effect, Schema } from "effect";
3
3
  import { ConfigError, ConfigParseError } from "../Errors.js";
4
- import { ConfigPaths, TuiConfig } from "./internal.js";
4
+ import { ConfigPaths, defaultSandboxConfig, TuiConfig } from "./internal.js";
5
5
  export const makeLoad = (detectProfiles) => Effect.gen(function* () {
6
6
  const fs = yield* FileSystem.FileSystem;
7
7
  const paths = yield* ConfigPaths;
@@ -18,10 +18,17 @@ export const makeLoad = (detectProfiles) => Effect.gen(function* () {
18
18
  })),
19
19
  autoDetect: true,
20
20
  autoRefresh: true,
21
- refreshIntervalSeconds: 300
21
+ refreshIntervalSeconds: 300,
22
+ sandbox: defaultSandboxConfig
22
23
  };
23
24
  }
24
- return { accounts: [], autoDetect: true, autoRefresh: true, refreshIntervalSeconds: 300 };
25
+ return {
26
+ accounts: [],
27
+ autoDetect: true,
28
+ autoRefresh: true,
29
+ refreshIntervalSeconds: 300,
30
+ sandbox: defaultSandboxConfig
31
+ };
25
32
  }
26
33
  const content = yield* fs.readFileString(configPath).pipe(Effect.mapError((e) => new ConfigError({ message: "Failed to read config file", cause: e })));
27
34
  const config = yield* Schema.decodeUnknown(Schema.parseJson(TuiConfig))(content).pipe(Effect.mapError((cause) => new ConfigParseError({ path: configPath, cause })));
@@ -1 +1 @@
1
- {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/ConfigService/load.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/ConfigService/load.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/ConfigService/reset.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAGjF,eAAO,MAAM,SAAS,GACpB,gBAAgB,MAAM,CAAC,MAAM,CAC3B,aAAa,CAAC,eAAe,CAAC,EAC9B,qBAAqB,EACrB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAChD,KACA,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAiCvC,CAAA"}
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/ConfigService/reset.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEtE,OAAO,EAAE,WAAW,EAAwB,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAGvG,eAAO,MAAM,SAAS,GACpB,gBAAgB,MAAM,CAAC,MAAM,CAC3B,aAAa,CAAC,eAAe,CAAC,EAC9B,qBAAqB,EACrB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAChD,KACA,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,CAkCvC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { FileSystem } from "@effect/platform";
2
2
  import { Effect } from "effect";
3
3
  import { backup } from "./backup.js";
4
- import { ConfigPaths } from "./internal.js";
4
+ import { ConfigPaths, defaultSandboxConfig } from "./internal.js";
5
5
  import { save } from "./save.js";
6
6
  export const makeReset = (detectProfiles) => Effect.gen(function* () {
7
7
  const fs = yield* FileSystem.FileSystem;
@@ -20,7 +20,8 @@ export const makeReset = (detectProfiles) => Effect.gen(function* () {
20
20
  })),
21
21
  autoDetect: true,
22
22
  autoRefresh: true,
23
- refreshIntervalSeconds: 300
23
+ refreshIntervalSeconds: 300,
24
+ sandbox: defaultSandboxConfig
24
25
  };
25
26
  yield* save(config);
26
27
  return config;
@@ -1 +1 @@
1
- {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/ConfigService/reset.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAwC,MAAM,eAAe,CAAA;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,cAIC,EACuF,EAAE,CAC1F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAA;IAE1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAA;IAED,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAC5F,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CACzC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC,CAC5E,CAAA;IAED,MAAM,MAAM,GAAc;QACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,IAAI;YACf,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACnC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,sBAAsB,EAAE,GAAG;KAC5B,CAAA;IAED,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnB,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/ConfigService/reset.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAwC,MAAM,eAAe,CAAA;AACvG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,cAIC,EACuF,EAAE,CAC1F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,UAAU,CAAA;IAE1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAA;IAED,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAC5F,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC,IAAI,CACzC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAoC,CAAC,CAAC,CAC5E,CAAA;IAED,MAAM,MAAM,GAAc;QACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,IAAI;YACf,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACnC,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,sBAAsB,EAAE,GAAG;QAC3B,OAAO,EAAE,oBAAoB;KAC9B,CAAA;IAED,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnB,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAA"}
@@ -1,4 +1,32 @@
1
+ import { Option } from "effect";
1
2
  export declare const formatDate: (date: Date) => string;
2
3
  export declare const formatDateTime: (date: Date) => string;
3
4
  export declare const formatRelativeTime: (date: Date, now: Date, prefix?: string) => string;
5
+ export interface WeekRange {
6
+ readonly week: string;
7
+ readonly start: Date;
8
+ readonly end: Date;
9
+ }
10
+ /**
11
+ * Parse an ISO week string (e.g. "2026-W09") into a date range.
12
+ * Returns None if the string is malformed.
13
+ */
14
+ export declare const parseISOWeek: (week: string) => Option.Option<WeekRange>;
15
+ /**
16
+ * Get the ISO week string for a given date.
17
+ */
18
+ export declare const toISOWeek: (date: Date) => string;
19
+ /**
20
+ * Format a week range as a human-readable label.
21
+ * e.g. "W09 2026 · Feb 24 – Mar 2"
22
+ */
23
+ export declare const formatWeekLabel: (range: WeekRange) => string;
24
+ /**
25
+ * Format duration in milliseconds to a human-readable string.
26
+ */
27
+ export declare const formatDuration: (ms: number) => string;
28
+ /**
29
+ * Compute the median of a numeric array. Returns null for empty arrays.
30
+ */
31
+ export declare const median: (arr: ReadonlyArray<number>) => number | null;
4
32
  //# sourceMappingURL=DateUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateUtils.d.ts","sourceRoot":"","sources":["../src/DateUtils.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,MAKvC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,MAI3C,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,eAAkB,KAAG,MAS9E,CAAA"}
1
+ {"version":3,"file":"DateUtils.d.ts","sourceRoot":"","sources":["../src/DateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEhD,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,KAAG,MAKvC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,KAAG,MAI3C,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,MAAM,IAAI,EAAE,KAAK,IAAI,EAAE,eAAkB,KAAG,MAS9E,CAAA;AAMD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAA;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAclE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,MAAM,IAAI,KAAG,MAOtC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,SAAS,KAAG,MAUlD,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAO3C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,aAAa,CAAC,MAAM,CAAC,KAAG,MAAM,GAAG,IAK5D,CAAA"}
package/dist/DateUtils.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Match } from "effect";
1
+ import { Duration, Match, Option } from "effect";
2
2
  export const formatDate = (date) => {
3
3
  const d = date.getDate().toString().padStart(2, "0");
4
4
  const m = (date.getMonth() + 1).toString().padStart(2, "0");
@@ -14,4 +14,72 @@ export const formatRelativeTime = (date, now, prefix = "Updated") => {
14
14
  const seconds = Math.max(0, Math.floor((now.getTime() - date.getTime()) / 1000));
15
15
  return Match.value(seconds).pipe(Match.when((s) => s < 60, (s) => `${prefix} ${s}s ago`), Match.when((s) => s < 3600, (s) => `${prefix} ${Math.floor(s / 60)}m ago`), Match.when((s) => s < 86400, (s) => `${prefix} ${Math.floor(s / 3600)}h ago`), Match.orElse(() => `${prefix} on ${formatDate(date)}`));
16
16
  };
17
+ /**
18
+ * Parse an ISO week string (e.g. "2026-W09") into a date range.
19
+ * Returns None if the string is malformed.
20
+ */
21
+ export const parseISOWeek = (week) => {
22
+ const match = /^(\d{4})-W(\d{2})$/.exec(week);
23
+ if (!match)
24
+ return Option.none();
25
+ const year = parseInt(match[1], 10);
26
+ const weekNum = parseInt(match[2], 10);
27
+ if (weekNum < 1 || weekNum > 53)
28
+ return Option.none();
29
+ // Jan 4 is always in week 1 (ISO 8601)
30
+ const jan4 = new Date(Date.UTC(year, 0, 4));
31
+ const dayOfWeek = jan4.getUTCDay() || 7; // Monday=1 ... Sunday=7
32
+ const monday = new Date(jan4.getTime() + ((weekNum - 1) * 7 - (dayOfWeek - 1)) * 86400000);
33
+ const nextMonday = new Date(monday.getTime() + 7 * 86400000);
34
+ return Option.some({ week, start: monday, end: nextMonday });
35
+ };
36
+ /**
37
+ * Get the ISO week string for a given date.
38
+ */
39
+ export const toISOWeek = (date) => {
40
+ const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
41
+ const dayNum = d.getUTCDay() || 7;
42
+ d.setUTCDate(d.getUTCDate() + 4 - dayNum); // Thursday of the week
43
+ const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
44
+ const weekNum = Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
45
+ return `${d.getUTCFullYear()}-W${weekNum.toString().padStart(2, "0")}`;
46
+ };
47
+ /**
48
+ * Format a week range as a human-readable label.
49
+ * e.g. "W09 2026 · Feb 24 – Mar 2"
50
+ */
51
+ export const formatWeekLabel = (range) => {
52
+ const w = range.week.split("-W");
53
+ const startMonth = range.start.toLocaleString("en-US", { month: "short", timeZone: "UTC" });
54
+ const endMonth = range.end.toLocaleString("en-US", { month: "short", timeZone: "UTC" });
55
+ const startDay = range.start.getUTCDate();
56
+ const endDay = range.end.getUTCDate();
57
+ const datePart = startMonth === endMonth
58
+ ? `${startMonth} ${startDay} – ${endDay}`
59
+ : `${startMonth} ${startDay} – ${endMonth} ${endDay}`;
60
+ return `W${w[1]} ${w[0]} · ${datePart}`;
61
+ };
62
+ /**
63
+ * Format duration in milliseconds to a human-readable string.
64
+ */
65
+ export const formatDuration = (ms) => {
66
+ const d = Duration.millis(ms);
67
+ const hours = Duration.toHours(d);
68
+ if (hours < 1)
69
+ return `${Math.round(hours * 60)}m`;
70
+ if (hours < 24)
71
+ return `${Math.floor(hours)}h`;
72
+ const days = Math.round(hours / 24 * 10) / 10;
73
+ return `${days}d`;
74
+ };
75
+ /**
76
+ * Compute the median of a numeric array. Returns null for empty arrays.
77
+ */
78
+ export const median = (arr) => {
79
+ if (arr.length === 0)
80
+ return null;
81
+ const sorted = [...arr].sort((a, b) => a - b);
82
+ const mid = Math.floor(sorted.length / 2);
83
+ return sorted.length % 2 !== 0 ? sorted[mid] : (sorted[mid - 1] + sorted[mid]) / 2;
84
+ };
17
85
  //# sourceMappingURL=DateUtils.js.map