@knpkv/codecommit-core 0.10.1 → 0.13.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 (187) hide show
  1. package/README.md +44 -3
  2. package/dist/AwsClient/approvalRuleContent.js.map +1 -1
  3. package/dist/AwsClient/getCommentsForPullRequest.d.ts +3 -1
  4. package/dist/AwsClient/getCommentsForPullRequest.d.ts.map +1 -1
  5. package/dist/AwsClient/getCommentsForPullRequest.js +14 -7
  6. package/dist/AwsClient/getCommentsForPullRequest.js.map +1 -1
  7. package/dist/AwsClient/getDifferences.js +1 -1
  8. package/dist/AwsClient/getDifferences.js.map +1 -1
  9. package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
  10. package/dist/AwsClient/getPullRequest.js +7 -1
  11. package/dist/AwsClient/getPullRequest.js.map +1 -1
  12. package/dist/AwsClient/getPullRequests.d.ts +1 -1
  13. package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
  14. package/dist/AwsClient/getPullRequests.js +6 -7
  15. package/dist/AwsClient/getPullRequests.js.map +1 -1
  16. package/dist/AwsClient/internal.d.ts +7 -3
  17. package/dist/AwsClient/internal.d.ts.map +1 -1
  18. package/dist/AwsClient/internal.js +15 -5
  19. package/dist/AwsClient/internal.js.map +1 -1
  20. package/dist/AwsClient/listBranches.d.ts.map +1 -1
  21. package/dist/AwsClient/listBranches.js +1 -1
  22. package/dist/AwsClient/listBranches.js.map +1 -1
  23. package/dist/AwsClientConfig.d.ts +3 -3
  24. package/dist/AwsClientConfig.d.ts.map +1 -1
  25. package/dist/AwsClientConfig.js.map +1 -1
  26. package/dist/CacheService/CacheError.js +1 -1
  27. package/dist/CacheService/CacheError.js.map +1 -1
  28. package/dist/CacheService/Database.d.ts +5 -4
  29. package/dist/CacheService/Database.d.ts.map +1 -1
  30. package/dist/CacheService/Database.js +8 -5
  31. package/dist/CacheService/Database.js.map +1 -1
  32. package/dist/CacheService/EventsHub.d.ts +2 -2
  33. package/dist/CacheService/EventsHub.d.ts.map +1 -1
  34. package/dist/CacheService/diff.js +2 -2
  35. package/dist/CacheService/diff.js.map +1 -1
  36. package/dist/CacheService/internal/PrivateDatabasePathNode.d.ts +34 -0
  37. package/dist/CacheService/internal/PrivateDatabasePathNode.d.ts.map +1 -0
  38. package/dist/CacheService/internal/PrivateDatabasePathNode.js +63 -0
  39. package/dist/CacheService/internal/PrivateDatabasePathNode.js.map +1 -0
  40. package/dist/CacheService/migrations/0016_sandbox_access_password.d.ts +5 -0
  41. package/dist/CacheService/migrations/0016_sandbox_access_password.d.ts.map +1 -0
  42. package/dist/CacheService/migrations/0016_sandbox_access_password.js +4 -0
  43. package/dist/CacheService/migrations/0016_sandbox_access_password.js.map +1 -0
  44. package/dist/CacheService/repos/CommentRepo.d.ts +3 -3
  45. package/dist/CacheService/repos/CommentRepo.d.ts.map +1 -1
  46. package/dist/CacheService/repos/NotificationRepo.d.ts +3 -3
  47. package/dist/CacheService/repos/NotificationRepo.d.ts.map +1 -1
  48. package/dist/CacheService/repos/PullRequestRepo/index.d.ts +108 -108
  49. package/dist/CacheService/repos/PullRequestRepo/index.d.ts.map +1 -1
  50. package/dist/CacheService/repos/PullRequestRepo/queries.d.ts +106 -106
  51. package/dist/CacheService/repos/PullRequestRepo/queries.d.ts.map +1 -1
  52. package/dist/CacheService/repos/SandboxRepo.d.ts +73 -67
  53. package/dist/CacheService/repos/SandboxRepo.d.ts.map +1 -1
  54. package/dist/CacheService/repos/SandboxRepo.js +3 -2
  55. package/dist/CacheService/repos/SandboxRepo.js.map +1 -1
  56. package/dist/CacheService/repos/StatsRepo/index.d.ts +3 -3
  57. package/dist/CacheService/repos/StatsRepo/index.d.ts.map +1 -1
  58. package/dist/CacheService/repos/SubscriptionRepo.d.ts +8 -8
  59. package/dist/CacheService/repos/SubscriptionRepo.d.ts.map +1 -1
  60. package/dist/CacheService/repos/SyncMetadataRepo.d.ts +3 -3
  61. package/dist/CacheService/repos/SyncMetadataRepo.d.ts.map +1 -1
  62. package/dist/CacheService/repos/commentLocations.d.ts +1 -1
  63. package/dist/CacheService/repos/commentLocations.d.ts.map +1 -1
  64. package/dist/CacheService/repos/commentLocations.js +15 -79
  65. package/dist/CacheService/repos/commentLocations.js.map +1 -1
  66. package/dist/ChildEnv.d.ts +67 -2
  67. package/dist/ChildEnv.d.ts.map +1 -1
  68. package/dist/ChildEnv.js +47 -14
  69. package/dist/ChildEnv.js.map +1 -1
  70. package/dist/ConfigService/SandboxPolicy.d.ts +37 -0
  71. package/dist/ConfigService/SandboxPolicy.d.ts.map +1 -0
  72. package/dist/ConfigService/SandboxPolicy.js +72 -0
  73. package/dist/ConfigService/SandboxPolicy.js.map +1 -0
  74. package/dist/ConfigService/index.d.ts +3 -1
  75. package/dist/ConfigService/index.d.ts.map +1 -1
  76. package/dist/ConfigService/index.js +10 -2
  77. package/dist/ConfigService/index.js.map +1 -1
  78. package/dist/ConfigService/internal.d.ts +33 -0
  79. package/dist/ConfigService/internal.d.ts.map +1 -1
  80. package/dist/ConfigService/internal.js +64 -9
  81. package/dist/ConfigService/internal.js.map +1 -1
  82. package/dist/ConfigService/load.d.ts +34 -23
  83. package/dist/ConfigService/load.d.ts.map +1 -1
  84. package/dist/ConfigService/load.js +2 -2
  85. package/dist/ConfigService/load.js.map +1 -1
  86. package/dist/ConfigService/reset.d.ts +33 -22
  87. package/dist/ConfigService/reset.d.ts.map +1 -1
  88. package/dist/ConfigService/save.d.ts +33 -22
  89. package/dist/ConfigService/save.d.ts.map +1 -1
  90. package/dist/Domain.d.ts +17 -1
  91. package/dist/Domain.d.ts.map +1 -1
  92. package/dist/Domain.js +15 -6
  93. package/dist/Domain.js.map +1 -1
  94. package/dist/Errors.d.ts +11 -1
  95. package/dist/Errors.d.ts.map +1 -1
  96. package/dist/Errors.js +19 -10
  97. package/dist/Errors.js.map +1 -1
  98. package/dist/PRService/index.d.ts +8 -7
  99. package/dist/PRService/index.d.ts.map +1 -1
  100. package/dist/PRService/index.js.map +1 -1
  101. package/dist/PRService/internal.d.ts +31 -31
  102. package/dist/PRService/internal.d.ts.map +1 -1
  103. package/dist/PRService/internal.js +5 -5
  104. package/dist/PRService/internal.js.map +1 -1
  105. package/dist/PRService/refresh.d.ts +2 -2
  106. package/dist/PRService/refresh.d.ts.map +1 -1
  107. package/dist/PRService/refresh.js +22 -3
  108. package/dist/PRService/refresh.js.map +1 -1
  109. package/dist/PRService/refreshFetch.d.ts +2 -1
  110. package/dist/PRService/refreshFetch.d.ts.map +1 -1
  111. package/dist/PRService/refreshFetch.js +34 -5
  112. package/dist/PRService/refreshFetch.js.map +1 -1
  113. package/dist/PRService/refreshResolve.d.ts +6 -6
  114. package/dist/PRService/refreshResolve.d.ts.map +1 -1
  115. package/dist/PRService/refreshResolve.js +3 -1
  116. package/dist/PRService/refreshResolve.js.map +1 -1
  117. package/dist/PRService/refreshSinglePR.d.ts +7 -1
  118. package/dist/PRService/refreshSinglePR.d.ts.map +1 -1
  119. package/dist/PRService/refreshSinglePR.js +8 -5
  120. package/dist/PRService/refreshSinglePR.js.map +1 -1
  121. package/dist/PermissionService/AuditLog.d.ts +3 -3
  122. package/dist/PermissionService/AuditLog.d.ts.map +1 -1
  123. package/dist/PermissionService/AuditLog.js +2 -2
  124. package/dist/PermissionService/AuditLog.js.map +1 -1
  125. package/dist/PermissionService/PermissionGateLive.d.ts +3 -0
  126. package/dist/PermissionService/PermissionGateLive.d.ts.map +1 -1
  127. package/dist/PermissionService/PermissionGateLive.js +9 -20
  128. package/dist/PermissionService/PermissionGateLive.js.map +1 -1
  129. package/dist/PermissionService/index.d.ts +2 -2
  130. package/dist/PermissionService/index.d.ts.map +1 -1
  131. package/dist/PermissionService/index.js +9 -1
  132. package/dist/PermissionService/index.js.map +1 -1
  133. package/dist/PermissionService/operations.d.ts +24 -2
  134. package/dist/PermissionService/operations.d.ts.map +1 -1
  135. package/dist/PermissionService/operations.js +18 -0
  136. package/dist/PermissionService/operations.js.map +1 -1
  137. package/dist/ReadClient/ReadClient.d.ts +18 -3
  138. package/dist/ReadClient/ReadClient.d.ts.map +1 -1
  139. package/dist/ReadClient/ReadClient.js +35 -7
  140. package/dist/ReadClient/ReadClient.js.map +1 -1
  141. package/dist/ReadClient/ReadProvider.d.ts +6 -0
  142. package/dist/ReadClient/ReadProvider.d.ts.map +1 -1
  143. package/dist/ReadClient/ReadProvider.js +4 -3
  144. package/dist/ReadClient/ReadProvider.js.map +1 -1
  145. package/dist/ReadClient/errors.js +3 -3
  146. package/dist/ReadClient/errors.js.map +1 -1
  147. package/dist/ReadClient/models.d.ts +15 -1
  148. package/dist/ReadClient/models.d.ts.map +1 -1
  149. package/dist/ReadClient/models.js +14 -1
  150. package/dist/ReadClient/models.js.map +1 -1
  151. package/dist/ReviewClient/ReviewClient.d.ts.map +1 -1
  152. package/dist/ReviewClient/ReviewClient.js +57 -4
  153. package/dist/ReviewClient/ReviewClient.js.map +1 -1
  154. package/dist/ReviewClient/ReviewProvider.d.ts +30 -0
  155. package/dist/ReviewClient/ReviewProvider.d.ts.map +1 -1
  156. package/dist/ReviewClient/ReviewProvider.js +67 -5
  157. package/dist/ReviewClient/ReviewProvider.js.map +1 -1
  158. package/dist/ReviewClient/errors.d.ts +3 -1
  159. package/dist/ReviewClient/errors.d.ts.map +1 -1
  160. package/dist/ReviewClient/errors.js +73 -2
  161. package/dist/ReviewClient/errors.js.map +1 -1
  162. package/dist/ReviewClient/index.d.ts +1 -1
  163. package/dist/ReviewClient/index.d.ts.map +1 -1
  164. package/dist/ReviewClient/index.js +1 -1
  165. package/dist/ReviewClient/index.js.map +1 -1
  166. package/dist/ReviewClient/models.d.ts +38 -1
  167. package/dist/ReviewClient/models.d.ts.map +1 -1
  168. package/dist/ReviewClient/models.js +17 -5
  169. package/dist/ReviewClient/models.js.map +1 -1
  170. package/dist/ReviewProfile.d.ts +3 -0
  171. package/dist/ReviewProfile.d.ts.map +1 -0
  172. package/dist/ReviewProfile.js +3 -0
  173. package/dist/ReviewProfile.js.map +1 -0
  174. package/dist/SandboxService/DockerService.d.ts +24 -15
  175. package/dist/SandboxService/DockerService.d.ts.map +1 -1
  176. package/dist/SandboxService/DockerService.js +22 -6
  177. package/dist/SandboxService/DockerService.js.map +1 -1
  178. package/dist/SandboxService/PluginService.d.ts +2 -2
  179. package/dist/SandboxService/PluginService.d.ts.map +1 -1
  180. package/dist/SandboxService/SandboxService.d.ts +88 -73
  181. package/dist/SandboxService/SandboxService.d.ts.map +1 -1
  182. package/dist/SandboxService/SandboxService.js +69 -21
  183. package/dist/SandboxService/SandboxService.js.map +1 -1
  184. package/dist/SandboxService/SandboxWorkerScope.d.ts +2 -2
  185. package/dist/SandboxService/SandboxWorkerScope.d.ts.map +1 -1
  186. package/dist/SandboxService/SandboxWorkerScope.js.map +1 -1
  187. package/package.json +7 -6
package/dist/ChildEnv.js CHANGED
@@ -42,19 +42,24 @@
42
42
  * same paths, so clearing them would point the child at a different file and
43
43
  * break legitimate custom config locations.
44
44
  *
45
- * KNOWN LIMITATION — Windows casing. Clearing works by mapping each name to
46
- * `undefined` in an object merged over the inherited environment, which matches
47
- * keys exactly. Windows environment names are case-insensitive, so a host
48
- * exporting `Aws_Access_Key_Id` keeps that entry alongside the `AWS_ACCESS_KEY_ID`
49
- * tombstone and the AWS CLI can still read it. Closing this means filtering the
50
- * inherited keys case-insensitively, which requires enumerating the parent
51
- * environment; no Effect service exposes that here, and `globalThis.process` is
52
- * not available to this code. The two `assume` call sites are POSIX-only in
53
- * practice — their clipboard step has only `pbcopy` and `xclip` — so the exposed
54
- * path is the SandboxService clone on a Windows host. Tracked rather than
55
- * silently accepted; the exact-case behaviour these tests cover is correct on
56
- * POSIX.
45
+ * CASE INSENSITIVITY. Clearing works by mapping each name to `undefined` in an
46
+ * object merged over the inherited environment, and that merge matches keys
47
+ * exactly. Windows environment names are case-insensitive, so a host exporting
48
+ * `Aws_Access_Key_Id` would keep that entry alive beside the `AWS_ACCESS_KEY_ID`
49
+ * tombstone and the AWS CLI could still read it. `profileScopedEnv` therefore
50
+ * takes the inherited environment and tombstones the spellings actually present
51
+ * as well as the canonical names, which closes the gap without taking `PATH` and
52
+ * every other inherited variable into this module's hands: the spawn stays
53
+ * `extendEnv: true`.
54
+ *
55
+ * The folding is unconditional, on every platform. On POSIX a lowercase
56
+ * `aws_access_key_id` is a genuinely distinct variable that the AWS chain never
57
+ * reads, so dropping it is broader than strictly required — deliberately, because
58
+ * detecting a case-insensitive host would mean reading the platform from this
59
+ * module, and a variable differing only in case carries the same intent. Nothing
60
+ * we spawn (`git`, `aws`, `assume`, `docker`) reads the lowercase spellings.
57
61
  */
62
+ import { Context, Layer } from "effect";
58
63
  const OVERRIDING_AWS_VARIABLES = [
59
64
  "AWS_ACCESS_KEY_ID",
60
65
  "AWS_SECRET_ACCESS_KEY",
@@ -67,25 +72,53 @@ const OVERRIDING_AWS_VARIABLES = [
67
72
  "AWS_REGION",
68
73
  "AWS_DEFAULT_REGION"
69
74
  ];
75
+ /** Whether an inherited name denotes an overriding AWS variable under any casing. */
76
+ const isOverridingAwsVariable = (name) => {
77
+ // `toUpperCase`, not `toLocaleUpperCase`: these names are ASCII and a Turkish
78
+ // locale would fold `AWS_..._ID` differently, reintroducing the gap it closes.
79
+ const canonical = name.toUpperCase();
80
+ return OVERRIDING_AWS_VARIABLES.some((candidate) => candidate === canonical);
81
+ };
70
82
  /**
71
83
  * Builds a child environment where `overrides` are the only AWS credential and
72
84
  * region inputs, dropping any ambient values that would outrank them.
73
85
  *
86
+ * `inherited` is the environment the child will extend. It is read only to find
87
+ * which spellings of the overriding names are actually present, so a
88
+ * case-insensitive host cannot keep `Aws_Access_Key_Id` alive beside the
89
+ * canonical tombstone. Pass the environment the spawn will really inherit —
90
+ * `HostEnvironment.variables` at a runtime call site.
91
+ *
74
92
  * Must be paired with `extendEnv: true`; on its own it does not carry `PATH`.
75
93
  *
76
94
  * @example
77
95
  * ```ts
96
+ * const host = yield* ChildEnv.HostEnvironment
78
97
  * ChildProcess.make("git", args, {
79
- * env: ChildEnv.profileScopedEnv({ AWS_PROFILE: profile }),
98
+ * env: ChildEnv.profileScopedEnv(host.variables, { AWS_PROFILE: profile }),
80
99
  * extendEnv: true
81
100
  * })
82
101
  * ```
83
102
  */
84
- export const profileScopedEnv = (overrides) => {
103
+ export const profileScopedEnv = (inherited, overrides) => {
85
104
  const cleared = {};
86
105
  for (const name of OVERRIDING_AWS_VARIABLES) {
87
106
  cleared[name] = undefined;
88
107
  }
108
+ for (const name of Object.keys(inherited)) {
109
+ if (isOverridingAwsVariable(name))
110
+ cleared[name] = undefined;
111
+ }
89
112
  return { ...cleared, ...overrides };
90
113
  };
114
+ /**
115
+ * The environment a spawned child will inherit.
116
+ *
117
+ * A service rather than a direct read because only the executable boundary may
118
+ * touch the host process, while the spawns that need it sit deep in the runtime.
119
+ */
120
+ export class HostEnvironment extends Context.Service()("@knpkv/codecommit-core/ChildEnv/HostEnvironment") {
121
+ }
122
+ /** Binds the inherited environment read at the executable boundary. */
123
+ export const layerHostEnvironment = (variables) => Layer.succeed(HostEnvironment, HostEnvironment.of({ variables }));
91
124
  //# sourceMappingURL=ChildEnv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChildEnv.js","sourceRoot":"","sources":["../src/ChildEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,wBAAwB,GAA0B;IACtD,mBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,2BAA2B;IAC3B,cAAc;IACd,6BAA6B;IAC7B,uBAAuB;IACvB,YAAY;IACZ,oBAAoB;CACrB,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAA6C,EACT,EAAE;IACtC,MAAM,OAAO,GAAuC,EAAE,CAAA;IACtD,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IAC3B,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;AACrC,CAAC,CAAA"}
1
+ {"version":3,"file":"ChildEnv.js","sourceRoot":"","sources":["../src/ChildEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEvC,MAAM,wBAAwB,GAA0B;IACtD,mBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,2BAA2B;IAC3B,cAAc;IACd,6BAA6B;IAC7B,uBAAuB;IACvB,YAAY;IACZ,oBAAoB;CACrB,CAAA;AAED,qFAAqF;AACrF,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAW,EAAE;IACxD,8EAA8E;IAC9E,+EAA+E;IAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;AAC9E,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,SAA6C,EAC7C,SAA6C,EAC7C,EAAE;IACF,MAAM,OAAO,GAAuC,EAAE,CAAA;IACtD,KAAK,MAAM,IAAI,IAAI,wBAAwB,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IAC3B,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,IAAI,uBAAuB,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9D,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;AACrC,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,OAAO,EAEhD,CAAC,iDAAiD,CAAC;CAAG;AAE1D,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAA6C,EACf,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { Effect } from "effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import { SandboxConfigurationError } from "../Errors.js";
5
+ /** Dedicated host root for explicit sandbox volume sharing. */
6
+ export declare const sandboxVolumeRoot: (homePath: string) => string;
7
+ /**
8
+ * Validate all authority-bearing sandbox settings at a persistence or execution boundary.
9
+ */
10
+ export declare const validateSandboxConfig: (config: {
11
+ readonly image: string;
12
+ readonly extensions: readonly string[];
13
+ readonly setupCommands: readonly string[];
14
+ readonly env: {
15
+ readonly [x: string]: string;
16
+ };
17
+ readonly volumeMounts: readonly {
18
+ readonly hostPath: string;
19
+ readonly containerPath: string;
20
+ readonly readonly: boolean;
21
+ }[];
22
+ readonly cloneDepth: number;
23
+ }, homePath: string) => Effect.Effect<{
24
+ readonly image: string;
25
+ readonly extensions: readonly string[];
26
+ readonly setupCommands: readonly string[];
27
+ readonly env: {
28
+ readonly [x: string]: string;
29
+ };
30
+ readonly volumeMounts: readonly {
31
+ readonly hostPath: string;
32
+ readonly containerPath: string;
33
+ readonly readonly: boolean;
34
+ }[];
35
+ readonly cloneDepth: number;
36
+ }, SandboxConfigurationError, FileSystem.FileSystem | Path.Path>;
37
+ //# sourceMappingURL=SandboxPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxPolicy.d.ts","sourceRoot":"","sources":["../../src/ConfigService/SandboxPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAaxD,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,aAAc,MAAM,KAAG,MAAmD,CAAA;AAExG;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;gEAkFjC,CAAA"}
@@ -0,0 +1,72 @@
1
+ import { Effect } from "effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import { SandboxConfigurationError } from "../Errors.js";
5
+ const digestPinnedImage = /@sha256:[0-9a-f]{64}$/u;
6
+ const environmentVariableName = /^[A-Za-z_][A-Za-z0-9_]*$/u;
7
+ const reservedEnvironmentKeys = new Set(["HASHED_PASSWORD", "PASSWORD"]);
8
+ const permittedContainerRoots = ["/home/coder", "/tmp/.local/share/code-server"];
9
+ const reject = (message) => new SandboxConfigurationError({ message });
10
+ const expandHome = (input, homePath) => input === "~" ? homePath : input.startsWith("~/") ? `${homePath}${input.slice(1)}` : input;
11
+ /** Dedicated host root for explicit sandbox volume sharing. */
12
+ export const sandboxVolumeRoot = (homePath) => `${homePath}/.codecommit/sandbox-volumes`;
13
+ /**
14
+ * Validate all authority-bearing sandbox settings at a persistence or execution boundary.
15
+ */
16
+ export const validateSandboxConfig = Effect.fn("SandboxPolicy.validateSandboxConfig")(function* (config, homePath) {
17
+ const path = yield* Path.Path;
18
+ const fileSystem = yield* FileSystem.FileSystem;
19
+ if (!digestPinnedImage.test(config.image)) {
20
+ return yield* reject("Sandbox image must be pinned to an immutable sha256 digest");
21
+ }
22
+ for (const [key, value] of Object.entries(config.env)) {
23
+ if (!environmentVariableName.test(key)) {
24
+ return yield* reject(`Sandbox environment variable ${key} has an invalid name`);
25
+ }
26
+ if (reservedEnvironmentKeys.has(key.toUpperCase())) {
27
+ return yield* reject(`Sandbox environment variable ${key} is reserved`);
28
+ }
29
+ if (/\r|\n/u.test(value)) {
30
+ return yield* reject(`Sandbox environment variable ${key} must be a single line`);
31
+ }
32
+ }
33
+ const resolvedHomePath = path.resolve(homePath);
34
+ const allowedRoot = path.resolve(sandboxVolumeRoot(resolvedHomePath));
35
+ for (const mount of config.volumeMounts) {
36
+ const hostPath = path.resolve(expandHome(mount.hostPath, homePath));
37
+ const relativeHostPath = path.relative(allowedRoot, hostPath);
38
+ if (relativeHostPath === "" ||
39
+ relativeHostPath === ".." ||
40
+ relativeHostPath.startsWith(`..${path.sep}`) ||
41
+ path.isAbsolute(relativeHostPath)) {
42
+ return yield* reject(`Sandbox mount ${mount.hostPath} must be a child of ~/.codecommit/sandbox-volumes`);
43
+ }
44
+ const canonicalRoot = yield* fileSystem.realPath(allowedRoot).pipe(Effect.mapError(() => reject("Sandbox volume root must exist before adding mounts")));
45
+ const canonicalHomePath = yield* fileSystem.realPath(resolvedHomePath).pipe(Effect.mapError(() => reject("Sandbox home directory must exist before adding mounts")));
46
+ const expectedCanonicalRoot = path.resolve(canonicalHomePath, ".codecommit", "sandbox-volumes");
47
+ if (canonicalRoot !== expectedCanonicalRoot) {
48
+ return yield* reject("Sandbox volume root must not redirect outside ~/.codecommit/sandbox-volumes");
49
+ }
50
+ const canonicalHostPath = yield* fileSystem.realPath(hostPath).pipe(Effect.mapError(() => reject(`Sandbox mount ${mount.hostPath} must already exist`)));
51
+ const relativeCanonicalPath = path.relative(canonicalRoot, canonicalHostPath);
52
+ if (relativeCanonicalPath === "" ||
53
+ relativeCanonicalPath === ".." ||
54
+ relativeCanonicalPath.startsWith(`..${path.sep}`) ||
55
+ path.isAbsolute(relativeCanonicalPath)) {
56
+ return yield* reject(`Sandbox mount ${mount.hostPath} must resolve inside ~/.codecommit/sandbox-volumes`);
57
+ }
58
+ const containerPath = path.normalize(mount.containerPath);
59
+ const isPermittedContainerChild = permittedContainerRoots.some((root) => {
60
+ const relativeContainerPath = path.relative(root, containerPath);
61
+ return relativeContainerPath !== "" &&
62
+ relativeContainerPath !== ".." &&
63
+ !relativeContainerPath.startsWith(`..${path.sep}`) &&
64
+ !path.isAbsolute(relativeContainerPath);
65
+ });
66
+ if (!isPermittedContainerChild) {
67
+ return yield* reject(`Sandbox mount target ${mount.containerPath} must be a child of /home/coder or the code-server runtime data root`);
68
+ }
69
+ }
70
+ return config;
71
+ });
72
+ //# sourceMappingURL=SandboxPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxPolicy.js","sourceRoot":"","sources":["../../src/ConfigService/SandboxPolicy.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,10 @@ import type * as Path from "effect/Path";
10
10
  import { EventsHub } from "../CacheService/EventsHub.js";
11
11
  import type { DetectedProfile, TuiConfig } from "./internal.js";
12
12
  import type { ConfigValidationResult } from "./validate.js";
13
+ export { reviewProfileSkillLimit } from "../ReviewProfile.js";
13
14
  export { discoverAwsProfiles } from "./detectProfiles.js";
14
- export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
15
+ export { AccountConfig, defaultReviewConfig, defaultReviewProfiles, defaultSandboxConfig, defaultSandboxImage, DetectedProfile, ReviewConfig, ReviewKind, ReviewProfileConfig, SandboxConfig, TuiConfig } from "./internal.js";
16
+ export { sandboxVolumeRoot, validateSandboxConfig } from "./SandboxPolicy.js";
15
17
  export { ConfigValidationResult } from "./validate.js";
16
18
  declare const ConfigService_base: Context.ServiceClass<ConfigService, "@knpkv/codecommit-core/ConfigService", {
17
19
  readonly load: Effect.Effect<TuiConfig, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,KAAK,UAAU,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,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,OAAO,CAAC;mBACjC,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;6BACzC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;4BACvD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBACrC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;uBAC9B,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC;;AATrE,qBAAa,aAAc,SAAQ,kBAWQ;CAAG;AAwC9C,eAAO,MAAM,iBAAiB,kFA0BQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,KAAK,UAAU,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAM/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,SAAS,EACV,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;;mBASnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;mBACjC,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;6BACzC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;4BACvD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBACrC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC/B,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC;uBAC9B,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC;;AATrE,qBAAa,aAAc,SAAQ,kBAWQ;CAAG;AAwC9C,eAAO,MAAM,iBAAiB,kFAkCQ,CAAA"}
@@ -12,10 +12,13 @@ import { detectProfiles } from "./detectProfiles.js";
12
12
  import { ConfigPaths } from "./internal.js";
13
13
  import { makeLoad } from "./load.js";
14
14
  import { makeReset } from "./reset.js";
15
+ import { validateSandboxConfig } from "./SandboxPolicy.js";
15
16
  import { save } from "./save.js";
16
17
  import { validate } from "./validate.js";
18
+ export { reviewProfileSkillLimit } from "../ReviewProfile.js";
17
19
  export { discoverAwsProfiles } from "./detectProfiles.js";
18
- export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
20
+ export { AccountConfig, defaultReviewConfig, defaultReviewProfiles, defaultSandboxConfig, defaultSandboxImage, DetectedProfile, ReviewConfig, ReviewKind, ReviewProfileConfig, SandboxConfig, TuiConfig } from "./internal.js";
21
+ export { sandboxVolumeRoot, validateSandboxConfig } from "./SandboxPolicy.js";
19
22
  export { ConfigValidationResult } from "./validate.js";
20
23
  // ---------------------------------------------------------------------------
21
24
  // Service Definition
@@ -41,7 +44,12 @@ export const ConfigServiceLive = Layer.effect(ConfigService, Effect.gen(function
41
44
  const reset = makeReset(detectProfilesLive);
42
45
  return {
43
46
  load: provide(load),
44
- save: (config) => provide(save(config)).pipe(Effect.tap(() => hub.publish({ _tag: "Config" }))),
47
+ save: (config) => provide(Effect.gen(function* () {
48
+ const paths = yield* ConfigPaths;
49
+ const homePath = yield* paths.homePath;
50
+ yield* validateSandboxConfig(config.sandbox, homePath);
51
+ yield* save(config);
52
+ })).pipe(Effect.tap(() => hub.publish({ _tag: "Config" }))),
45
53
  detectProfiles: provide(detectProfilesLive),
46
54
  getConfigPath: provide(ConfigPaths.pipe(Effect.flatMap((p) => p.configPath))),
47
55
  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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"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { Context, Effect, Schema } from "effect";
5
5
  import type { ConfigError, ProfileDetectionError } from "../Errors.js";
6
+ export declare const defaultSandboxImage = "codercom/code-server@sha256:b88ed46a6ace76a0294a17a24f39aa88032ed0a3692c3d8ab5433b47ab57ccbf";
6
7
  declare const DetectedProfile_base: Schema.Class<DetectedProfile, Schema.Struct<{
7
8
  readonly name: Schema.brand<Schema.NonEmptyString, "AwsProfileName">;
8
9
  readonly region: Schema.optionalKey<Schema.brand<Schema.String, "AwsRegion">>;
@@ -29,6 +30,27 @@ export declare const AccountConfig: Schema.Struct<{
29
30
  readonly enabled: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
30
31
  }>;
31
32
  export type AccountConfig = typeof AccountConfig.Type;
33
+ export declare const ReviewKind: Schema.Literals<readonly ["review", "security", "tests", "explain"]>;
34
+ export type ReviewKind = typeof ReviewKind.Type;
35
+ export declare const ReviewProfileConfig: Schema.Struct<{
36
+ readonly id: Schema.String;
37
+ readonly name: Schema.String;
38
+ readonly kind: Schema.Literals<readonly ["review", "security", "tests", "explain"]>;
39
+ readonly skillIds: Schema.$Array<Schema.String>;
40
+ }>;
41
+ export type ReviewProfileConfig = typeof ReviewProfileConfig.Type;
42
+ export declare const defaultReviewProfiles: ReadonlyArray<ReviewProfileConfig>;
43
+ export declare const ReviewConfig: Schema.Struct<{
44
+ readonly defaultProfileId: Schema.withDecodingDefaultTypeKey<Schema.String, never>;
45
+ readonly profiles: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.Struct<{
46
+ readonly id: Schema.String;
47
+ readonly name: Schema.String;
48
+ readonly kind: Schema.Literals<readonly ["review", "security", "tests", "explain"]>;
49
+ readonly skillIds: Schema.$Array<Schema.String>;
50
+ }>>, never>;
51
+ }>;
52
+ export type ReviewConfig = typeof ReviewConfig.Type;
53
+ export declare const defaultReviewConfig: ReviewConfig;
32
54
  export declare const TuiConfig: Schema.Struct<{
33
55
  readonly accounts: Schema.$Array<Schema.Struct<{
34
56
  readonly profile: Schema.brand<Schema.String, "AwsProfileName">;
@@ -38,6 +60,15 @@ export declare const TuiConfig: Schema.Struct<{
38
60
  readonly autoDetect: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
39
61
  readonly autoRefresh: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
40
62
  readonly refreshIntervalSeconds: Schema.withDecodingDefaultTypeKey<Schema.Number, never>;
63
+ readonly review: Schema.withDecodingDefaultTypeKey<Schema.Struct<{
64
+ readonly defaultProfileId: Schema.withDecodingDefaultTypeKey<Schema.String, never>;
65
+ readonly profiles: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.Struct<{
66
+ readonly id: Schema.String;
67
+ readonly name: Schema.String;
68
+ readonly kind: Schema.Literals<readonly ["review", "security", "tests", "explain"]>;
69
+ readonly skillIds: Schema.$Array<Schema.String>;
70
+ }>>, never>;
71
+ }>, never>;
41
72
  readonly sandbox: Schema.withDecodingDefaultTypeKey<Schema.Struct<{
42
73
  readonly image: Schema.withDecodingDefaultTypeKey<Schema.String, never>;
43
74
  readonly extensions: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.String>, never>;
@@ -52,6 +83,8 @@ export declare const TuiConfig: Schema.Struct<{
52
83
  }>, never>;
53
84
  }>;
54
85
  export type TuiConfig = typeof TuiConfig.Type;
86
+ /** Migrate only the mutable image tag previously emitted by the settings UI. */
87
+ export declare const migrateLegacySandboxImage: (config: TuiConfig) => TuiConfig;
55
88
  export declare const accountsFromDetected: (detected: ReadonlyArray<DetectedProfile>) => TuiConfig["accounts"];
56
89
  export declare const makeDefaultConfig: (detected?: ReadonlyArray<DetectedProfile>) => TuiConfig;
57
90
  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,EAAgB,OAAO,EAAE,MAAM,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE5E,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;;;;;AAoBtE,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,aAAa;;;;;;;;;;;EAuBxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,oBAAoB,EAAE,aAAoD,CAAA;AAEvF,eAAO,MAAM,aAAa;;;;EAMxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;EAQpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,eAAO,MAAM,oBAAoB,aAAc,aAAa,CAAC,eAAe,CAAC,KAAG,SAAS,CAAC,UAAU,CAK/F,CAAA;AAEL,eAAO,MAAM,iBAAiB,cAAc,aAAa,CAAC,eAAe,CAAC,KAAQ,SAMhF,CAAA;AAqCF,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,aAAa,CAAC,eAAe,CAO3E,CAAA;;yBASsB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;uBACpC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;;AAJnE,qBAAa,WAAY,SAAQ,gBAMQ;CAAG"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE5E,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAoBtE,eAAO,MAAM,mBAAmB,iGACgE,CAAA;;;;;AAGhG,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,aAAa;;;;;;;;;;;EAuBxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,oBAAoB,EAAE,aAAoD,CAAA;AAEvF,eAAO,MAAM,aAAa;;;;EAMxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,UAAU,sEAA8D,CAAA;AACrF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,eAAO,MAAM,mBAAmB;;;;;EAY9B,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAC,IAAI,CAAA;AAEjE,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,mBAAmB,CAyBpE,CAAA;AAED,eAAO,MAAM,YAAY;;;;;;;;EAsBxB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAA;AAED,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWpB,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAE7C,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,WAAY,SAAS,KAAG,SAGlD,CAAA;AAEZ,eAAO,MAAM,oBAAoB,aAAc,aAAa,CAAC,eAAe,CAAC,KAAG,SAAS,CAAC,UAAU,CAK/F,CAAA;AAEL,eAAO,MAAM,iBAAiB,cAAc,aAAa,CAAC,eAAe,CAAC,KAAQ,SAOhF,CAAA;AAuCF,eAAO,MAAM,cAAc,YAAa,MAAM,KAAG,aAAa,CAAC,eAAe,CAO3E,CAAA;;yBASsB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;uBACpC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;;AAJnE,qBAAa,WAAY,SAAQ,gBAMQ;CAAG"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { Array as Arr, Context, Effect, Option, pipe, Schema } from "effect";
5
5
  import { AwsProfileName, AwsRegion } from "../Domain.js";
6
+ import { reviewProfileSkillLimit } from "../ReviewProfile.js";
6
7
  // ---------------------------------------------------------------------------
7
8
  // Schemas
8
9
  // ---------------------------------------------------------------------------
@@ -12,20 +13,22 @@ const emptyStrings = [];
12
13
  const emptyEnv = {};
13
14
  const emptyVolumeMounts = [];
14
15
  const defaultAccountRegions = [decodeAwsRegion("us-east-1")];
16
+ export const defaultSandboxImage = "codercom/code-server@sha256:b88ed46a6ace76a0294a17a24f39aa88032ed0a3692c3d8ab5433b47ab57ccbf";
17
+ const legacyDefaultSandboxImage = "codercom/code-server:latest";
15
18
  export class DetectedProfile extends Schema.Class("DetectedProfile")({
16
19
  name: Schema.NonEmptyString.pipe(Schema.brand("AwsProfileName")),
17
20
  region: Schema.optionalKey(AwsRegion)
18
21
  }) {
19
22
  }
20
23
  export const SandboxConfig = Schema.Struct({
21
- image: Schema.String.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault("codercom/code-server:latest"))),
24
+ image: Schema.String.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(defaultSandboxImage))),
22
25
  extensions: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(emptyStrings))),
23
26
  setupCommands: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(emptyStrings))),
24
27
  env: Schema.Record(Schema.String, Schema.String).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(emptyEnv))),
25
28
  volumeMounts: Schema.Array(Schema.Struct({
26
29
  hostPath: Schema.String,
27
30
  containerPath: Schema.String,
28
- readonly: Schema.Boolean.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(false)))
31
+ readonly: Schema.Boolean.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(true)))
29
32
  })).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(emptyVolumeMounts))),
30
33
  cloneDepth: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(0)))
31
34
  });
@@ -35,16 +38,63 @@ export const AccountConfig = Schema.Struct({
35
38
  regions: Schema.Array(AwsRegion).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(defaultAccountRegions))),
36
39
  enabled: Schema.Boolean.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(true)))
37
40
  });
41
+ export const ReviewKind = Schema.Literals(["review", "security", "tests", "explain"]);
42
+ export const ReviewProfileConfig = Schema.Struct({
43
+ id: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(64), Schema.isPattern(/^[a-z][a-z0-9-]*$/u)),
44
+ name: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(80)),
45
+ kind: ReviewKind,
46
+ skillIds: Schema.Array(Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(256))).check(Schema.isMaxLength(reviewProfileSkillLimit), Schema.isUnique())
47
+ });
48
+ export const defaultReviewProfiles = [
49
+ {
50
+ id: "thorough",
51
+ name: "Thorough review",
52
+ kind: "review",
53
+ skillIds: ["builtin:pr-review", "builtin:pr-review-diff"]
54
+ },
55
+ {
56
+ id: "security",
57
+ name: "Security review",
58
+ kind: "security",
59
+ skillIds: ["builtin:pr-review-diff"]
60
+ },
61
+ {
62
+ id: "tests",
63
+ name: "Test review",
64
+ kind: "tests",
65
+ skillIds: ["builtin:pr-review-diff"]
66
+ },
67
+ {
68
+ id: "explain",
69
+ name: "Explain change",
70
+ kind: "explain",
71
+ skillIds: []
72
+ }
73
+ ];
74
+ export const ReviewConfig = Schema.Struct({
75
+ defaultProfileId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(64), Schema.isPattern(/^[a-z][a-z0-9-]*$/u)).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault("thorough"))),
76
+ profiles: Schema.Array(ReviewProfileConfig).check(Schema.isMinLength(1), Schema.isMaxLength(12)).pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(defaultReviewProfiles)))
77
+ }).check(Schema.makeFilter(({ defaultProfileId, profiles }) => new Set(profiles.map(({ id }) => id)).size === profiles.length &&
78
+ profiles.some(({ id }) => id === defaultProfileId), { expected: "unique review profile ids containing the default profile" }));
79
+ export const defaultReviewConfig = {
80
+ defaultProfileId: "thorough",
81
+ profiles: defaultReviewProfiles
82
+ };
38
83
  export const TuiConfig = Schema.Struct({
39
84
  accounts: Schema.Array(AccountConfig),
40
85
  autoDetect: Schema.Boolean.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(true))),
41
86
  autoRefresh: Schema.Boolean.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(true))),
42
87
  refreshIntervalSeconds: Schema.Number.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(300))),
88
+ review: ReviewConfig.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(defaultReviewConfig))),
43
89
  sandbox: SandboxConfig.pipe(Schema.withDecodingDefaultTypeKey(decodingDefault(defaultSandboxConfig)))
44
90
  });
91
+ /** Migrate only the mutable image tag previously emitted by the settings UI. */
92
+ export const migrateLegacySandboxImage = (config) => config.sandbox.image === legacyDefaultSandboxImage
93
+ ? { ...config, sandbox: { ...config.sandbox, image: defaultSandboxImage } }
94
+ : config;
45
95
  export const accountsFromDetected = (detected) => detected.map((profile) => ({
46
96
  profile: profile.name,
47
- regions: profile.region ? [profile.region] : [],
97
+ regions: profile.region !== undefined && profile.region.length > 0 ? [profile.region] : [],
48
98
  enabled: false
49
99
  }));
50
100
  export const makeDefaultConfig = (detected = []) => ({
@@ -52,6 +102,7 @@ export const makeDefaultConfig = (detected = []) => ({
52
102
  autoDetect: true,
53
103
  autoRefresh: true,
54
104
  refreshIntervalSeconds: 300,
105
+ review: defaultReviewConfig,
55
106
  sandbox: defaultSandboxConfig
56
107
  });
57
108
  // ---------------------------------------------------------------------------
@@ -64,22 +115,26 @@ const parseIniSections = (content) => {
64
115
  let current = null;
65
116
  for (const line of lines) {
66
117
  const trimmed = line.trim();
67
- if (!trimmed || trimmed.startsWith("#") || trimmed.startsWith(";"))
118
+ if (trimmed.length === 0 || trimmed.startsWith("#") || trimmed.startsWith(";"))
68
119
  continue;
69
120
  const profileMatch = trimmed.match(/^\[(?:profile\s+)?(.+)\]$/);
70
- if (profileMatch?.[1]) {
71
- if (current)
121
+ if (profileMatch?.[1] !== undefined) {
122
+ if (current !== null)
72
123
  sections.push(current);
73
124
  current = { name: profileMatch[1].trim() };
74
125
  }
75
- else if (current && trimmed.includes("=")) {
126
+ else if (current !== null && trimmed.includes("=")) {
76
127
  const [key, ...valueParts] = trimmed.split("=");
77
128
  if (key?.trim().toLowerCase() === "region") {
78
- current.region = valueParts.join("=").trim();
129
+ const region = valueParts.join("=").trim();
130
+ if (region.length === 0)
131
+ delete current.region;
132
+ else
133
+ current.region = region;
79
134
  }
80
135
  }
81
136
  }
82
- if (current)
137
+ if (current !== null)
83
138
  sections.push(current);
84
139
  return sections;
85
140
  };
@@ -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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"}
@@ -1,32 +1,43 @@
1
1
  /**
2
2
  * @internal
3
3
  */
4
- import { Effect, Schema } from "effect";
4
+ import { Effect } from "effect";
5
5
  import * as FileSystem from "effect/FileSystem";
6
6
  import type * as Path from "effect/Path";
7
7
  import { ConfigError, ConfigParseError } from "../Errors.js";
8
8
  import type { ProfileDetectionError } from "../Errors.js";
9
9
  import { ConfigPaths, type DetectedProfile } from "./internal.js";
10
- export declare const makeLoad: (detectProfiles: Effect.Effect<readonly DetectedProfile[], ProfileDetectionError, ConfigPaths | FileSystem.FileSystem | Path.Path>) => Effect.Effect<Schema.Struct.ReadonlySide<{
11
- readonly accounts: Schema.$Array<Schema.Struct<{
12
- readonly profile: Schema.brand<Schema.String, "AwsProfileName">;
13
- readonly regions: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.brand<Schema.String, "AwsRegion">>, never>;
14
- readonly enabled: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
15
- }>>;
16
- readonly autoDetect: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
17
- readonly autoRefresh: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
18
- readonly refreshIntervalSeconds: Schema.withDecodingDefaultTypeKey<Schema.Number, never>;
19
- readonly sandbox: Schema.withDecodingDefaultTypeKey<Schema.Struct<{
20
- readonly image: Schema.withDecodingDefaultTypeKey<Schema.String, never>;
21
- readonly extensions: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.String>, never>;
22
- readonly setupCommands: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.String>, never>;
23
- readonly env: Schema.withDecodingDefaultTypeKey<Schema.$Record<Schema.String, Schema.String>, never>;
24
- readonly volumeMounts: Schema.withDecodingDefaultTypeKey<Schema.$Array<Schema.Struct<{
25
- readonly hostPath: Schema.String;
26
- readonly containerPath: Schema.String;
27
- readonly readonly: Schema.withDecodingDefaultTypeKey<Schema.Boolean, never>;
28
- }>>, never>;
29
- readonly cloneDepth: Schema.withDecodingDefaultTypeKey<Schema.Int, never>;
30
- }>, never>;
31
- }, "Type">, ConfigError | ConfigParseError, ConfigPaths | FileSystem.FileSystem | Path.Path>;
10
+ export declare const makeLoad: (detectProfiles: Effect.Effect<readonly DetectedProfile[], ProfileDetectionError, ConfigPaths | FileSystem.FileSystem | Path.Path>) => Effect.Effect<{
11
+ readonly accounts: readonly {
12
+ readonly profile: string & import("effect/Brand").Brand<"AwsProfileName">;
13
+ readonly regions: readonly (string & import("effect/Brand").Brand<"AwsRegion">)[];
14
+ readonly enabled: boolean;
15
+ }[];
16
+ readonly autoDetect: boolean;
17
+ readonly autoRefresh: boolean;
18
+ readonly refreshIntervalSeconds: number;
19
+ readonly review: {
20
+ readonly defaultProfileId: string;
21
+ readonly profiles: readonly {
22
+ readonly id: string;
23
+ readonly name: string;
24
+ readonly kind: "explain" | "review" | "security" | "tests";
25
+ readonly skillIds: readonly string[];
26
+ }[];
27
+ };
28
+ readonly sandbox: {
29
+ readonly image: string;
30
+ readonly extensions: readonly string[];
31
+ readonly setupCommands: readonly string[];
32
+ readonly env: {
33
+ readonly [x: string]: string;
34
+ };
35
+ readonly volumeMounts: readonly {
36
+ readonly hostPath: string;
37
+ readonly containerPath: string;
38
+ readonly readonly: boolean;
39
+ }[];
40
+ readonly cloneDepth: number;
41
+ };
42
+ }, ConfigError | ConfigParseError, ConfigPaths | FileSystem.FileSystem | Path.Path>;
32
43
  //# 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,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAwB,WAAW,EAAE,KAAK,eAAe,EAAgC,MAAM,eAAe,CAAA;AAIrH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;4FA8CnB,CAAA"}
1
+ {"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/ConfigService/load.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,KAAK,IAAI,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAEL,WAAW,EACX,KAAK,eAAe,EAIrB,MAAM,eAAe,CAAA;AAItB,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mFA+CnB,CAAA"}