@knpkv/codecommit-core 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -0
- package/dist/AwsClient/createPullRequest.d.ts +1 -6
- package/dist/AwsClient/createPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/createPullRequest.js +3 -11
- package/dist/AwsClient/createPullRequest.js.map +1 -1
- package/dist/AwsClient/getCallerIdentity.d.ts +5 -6
- package/dist/AwsClient/getCallerIdentity.d.ts.map +1 -1
- package/dist/AwsClient/getCallerIdentity.js +7 -12
- package/dist/AwsClient/getCallerIdentity.js.map +1 -1
- package/dist/AwsClient/getCommentsForPullRequest.d.ts +1 -6
- package/dist/AwsClient/getCommentsForPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/getCommentsForPullRequest.js +9 -16
- package/dist/AwsClient/getCommentsForPullRequest.js.map +1 -1
- package/dist/AwsClient/getPullRequest.d.ts +2 -7
- package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequest.js +15 -28
- package/dist/AwsClient/getPullRequest.js.map +1 -1
- package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequests.js +18 -15
- package/dist/AwsClient/getPullRequests.js.map +1 -1
- package/dist/AwsClient/index.d.ts +3 -2
- package/dist/AwsClient/index.d.ts.map +1 -1
- package/dist/AwsClient/index.js.map +1 -1
- package/dist/AwsClient/internal.d.ts +47 -11
- package/dist/AwsClient/internal.d.ts.map +1 -1
- package/dist/AwsClient/internal.js +38 -9
- package/dist/AwsClient/internal.js.map +1 -1
- package/dist/AwsClient/listBranches.d.ts +1 -6
- package/dist/AwsClient/listBranches.d.ts.map +1 -1
- package/dist/AwsClient/listBranches.js +3 -11
- package/dist/AwsClient/listBranches.js.map +1 -1
- package/dist/AwsClient/updatePullRequestDescription.d.ts +1 -6
- package/dist/AwsClient/updatePullRequestDescription.d.ts.map +1 -1
- package/dist/AwsClient/updatePullRequestDescription.js +3 -11
- package/dist/AwsClient/updatePullRequestDescription.js.map +1 -1
- package/dist/AwsClient/updatePullRequestTitle.d.ts +1 -6
- package/dist/AwsClient/updatePullRequestTitle.d.ts.map +1 -1
- package/dist/AwsClient/updatePullRequestTitle.js +3 -11
- package/dist/AwsClient/updatePullRequestTitle.js.map +1 -1
- package/dist/CacheService/CacheError.d.ts +21 -0
- package/dist/CacheService/CacheError.d.ts.map +1 -0
- package/dist/CacheService/CacheError.js +17 -0
- package/dist/CacheService/CacheError.js.map +1 -0
- package/dist/CacheService/Database.d.ts +13 -0
- package/dist/CacheService/Database.d.ts.map +1 -0
- package/dist/CacheService/Database.js +38 -0
- package/dist/CacheService/Database.js.map +1 -0
- package/dist/CacheService/EventsHub.d.ts +183 -0
- package/dist/CacheService/EventsHub.d.ts.map +1 -0
- package/dist/CacheService/EventsHub.js +22 -0
- package/dist/CacheService/EventsHub.js.map +1 -0
- package/dist/CacheService/diff.d.ts +28 -0
- package/dist/CacheService/diff.d.ts.map +1 -0
- package/dist/CacheService/diff.js +102 -0
- package/dist/CacheService/diff.js.map +1 -0
- package/dist/CacheService/index.d.ts +19 -0
- package/dist/CacheService/index.d.ts.map +1 -0
- package/dist/CacheService/index.js +16 -0
- package/dist/CacheService/index.js.map +1 -0
- package/dist/CacheService/migrations/0001_initial.d.ts +5 -0
- package/dist/CacheService/migrations/0001_initial.d.ts.map +1 -0
- package/dist/CacheService/migrations/0001_initial.js +72 -0
- package/dist/CacheService/migrations/0001_initial.js.map +1 -0
- package/dist/CacheService/migrations/0002_indexes.d.ts +5 -0
- package/dist/CacheService/migrations/0002_indexes.d.ts.map +1 -0
- package/dist/CacheService/migrations/0002_indexes.js +7 -0
- package/dist/CacheService/migrations/0002_indexes.js.map +1 -0
- package/dist/CacheService/migrations/0003_add_health_score.d.ts +5 -0
- package/dist/CacheService/migrations/0003_add_health_score.d.ts.map +1 -0
- package/dist/CacheService/migrations/0003_add_health_score.js +4 -0
- package/dist/CacheService/migrations/0003_add_health_score.js.map +1 -0
- package/dist/CacheService/migrations/0004_unify_notifications.d.ts +5 -0
- package/dist/CacheService/migrations/0004_unify_notifications.d.ts.map +1 -0
- package/dist/CacheService/migrations/0004_unify_notifications.js +7 -0
- package/dist/CacheService/migrations/0004_unify_notifications.js.map +1 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.d.ts +5 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.d.ts.map +1 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.js +23 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.js.map +1 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.d.ts +5 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.d.ts.map +1 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.js +7 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.js.map +1 -0
- package/dist/CacheService/repos/CommentRepo.d.ts +16 -0
- package/dist/CacheService/repos/CommentRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/CommentRepo.js +42 -0
- package/dist/CacheService/repos/CommentRepo.js.map +1 -0
- package/dist/CacheService/repos/NotificationRepo.d.ts +48 -0
- package/dist/CacheService/repos/NotificationRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/NotificationRepo.js +128 -0
- package/dist/CacheService/repos/NotificationRepo.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo.d.ts +112 -0
- package/dist/CacheService/repos/PullRequestRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo.js +146 -0
- package/dist/CacheService/repos/PullRequestRepo.js.map +1 -0
- package/dist/CacheService/repos/SandboxRepo.d.ts +116 -0
- package/dist/CacheService/repos/SandboxRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/SandboxRepo.js +88 -0
- package/dist/CacheService/repos/SandboxRepo.js.map +1 -0
- package/dist/CacheService/repos/SubscriptionRepo.d.ts +20 -0
- package/dist/CacheService/repos/SubscriptionRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/SubscriptionRepo.js +49 -0
- package/dist/CacheService/repos/SubscriptionRepo.js.map +1 -0
- package/dist/CacheService/repos/SyncMetadataRepo.d.ts +14 -0
- package/dist/CacheService/repos/SyncMetadataRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/SyncMetadataRepo.js +36 -0
- package/dist/CacheService/repos/SyncMetadataRepo.js.map +1 -0
- package/dist/ConfigService/backup.d.ts +1 -1
- package/dist/ConfigService/detectProfiles.d.ts +1 -1
- package/dist/ConfigService/index.d.ts +3 -2
- package/dist/ConfigService/index.d.ts.map +1 -1
- package/dist/ConfigService/index.js +4 -2
- package/dist/ConfigService/index.js.map +1 -1
- package/dist/ConfigService/internal.d.ts +104 -0
- package/dist/ConfigService/internal.d.ts.map +1 -1
- package/dist/ConfigService/internal.js +18 -1
- package/dist/ConfigService/internal.js.map +1 -1
- package/dist/ConfigService/load.d.ts +18 -1
- package/dist/ConfigService/load.d.ts.map +1 -1
- package/dist/ConfigService/load.js +12 -3
- package/dist/ConfigService/load.js.map +1 -1
- package/dist/ConfigService/reset.d.ts.map +1 -1
- package/dist/ConfigService/reset.js +5 -2
- package/dist/ConfigService/reset.js.map +1 -1
- package/dist/ConfigService/save.d.ts +1 -1
- package/dist/ConfigService/validate.d.ts +1 -1
- package/dist/DateUtils.d.ts +1 -1
- package/dist/DateUtils.d.ts.map +1 -1
- package/dist/DateUtils.js +2 -2
- package/dist/DateUtils.js.map +1 -1
- package/dist/Domain.d.ts +251 -10
- package/dist/Domain.d.ts.map +1 -1
- package/dist/Domain.js +55 -5
- package/dist/Domain.js.map +1 -1
- package/dist/Errors.d.ts +28 -1
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +22 -1
- package/dist/Errors.js.map +1 -1
- package/dist/HealthScore.d.ts.map +1 -1
- package/dist/HealthScore.js +1 -3
- package/dist/HealthScore.js.map +1 -1
- package/dist/PRService/index.d.ts +46 -18
- package/dist/PRService/index.d.ts.map +1 -1
- package/dist/PRService/index.js +58 -27
- package/dist/PRService/index.js.map +1 -1
- package/dist/PRService/internal.d.ts +86 -1
- package/dist/PRService/internal.d.ts.map +1 -1
- package/dist/PRService/internal.js +106 -1
- package/dist/PRService/internal.js.map +1 -1
- package/dist/PRService/refresh.d.ts +10 -4
- package/dist/PRService/refresh.d.ts.map +1 -1
- package/dist/PRService/refresh.js +30 -89
- package/dist/PRService/refresh.js.map +1 -1
- package/dist/PRService/refreshEnrich.d.ts +15 -0
- package/dist/PRService/refreshEnrich.d.ts.map +1 -0
- package/dist/PRService/refreshEnrich.js +72 -0
- package/dist/PRService/refreshEnrich.js.map +1 -0
- package/dist/PRService/refreshFetch.d.ts +20 -0
- package/dist/PRService/refreshFetch.d.ts.map +1 -0
- package/dist/PRService/refreshFetch.js +78 -0
- package/dist/PRService/refreshFetch.js.map +1 -0
- package/dist/PRService/refreshResolve.d.ts +29 -0
- package/dist/PRService/refreshResolve.d.ts.map +1 -0
- package/dist/PRService/refreshResolve.js +84 -0
- package/dist/PRService/refreshResolve.js.map +1 -0
- package/dist/PRService/refreshScore.d.ts +9 -0
- package/dist/PRService/refreshScore.d.ts.map +1 -0
- package/dist/PRService/refreshScore.js +24 -0
- package/dist/PRService/refreshScore.js.map +1 -0
- package/dist/PRService/refreshSinglePR.d.ts +13 -0
- package/dist/PRService/refreshSinglePR.d.ts.map +1 -0
- package/dist/PRService/refreshSinglePR.js +102 -0
- package/dist/PRService/refreshSinglePR.js.map +1 -0
- package/dist/PRService/setAllAccounts.d.ts +1 -3
- package/dist/PRService/setAllAccounts.d.ts.map +1 -1
- package/dist/PRService/setAllAccounts.js +2 -2
- package/dist/PRService/setAllAccounts.js.map +1 -1
- package/dist/PRService/toggleAccount.d.ts +1 -3
- package/dist/PRService/toggleAccount.d.ts.map +1 -1
- package/dist/PRService/toggleAccount.js +2 -2
- package/dist/PRService/toggleAccount.js.map +1 -1
- package/dist/SandboxService/DockerService.d.ts +57 -0
- package/dist/SandboxService/DockerService.d.ts.map +1 -0
- package/dist/SandboxService/DockerService.js +83 -0
- package/dist/SandboxService/DockerService.js.map +1 -0
- package/dist/SandboxService/PluginService.d.ts +38 -0
- package/dist/SandboxService/PluginService.d.ts.map +1 -0
- package/dist/SandboxService/PluginService.js +26 -0
- package/dist/SandboxService/PluginService.js.map +1 -0
- package/dist/SandboxService/SandboxService.d.ts +102 -0
- package/dist/SandboxService/SandboxService.d.ts.map +1 -0
- package/dist/SandboxService/SandboxService.js +272 -0
- package/dist/SandboxService/SandboxService.js.map +1 -0
- package/dist/SandboxService/index.d.ts +13 -0
- package/dist/SandboxService/index.d.ts.map +1 -0
- package/dist/SandboxService/index.js +10 -0
- package/dist/SandboxService/index.js.map +1 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts +18 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts.map +1 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.js +24 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/dist/NotificationsService.d.ts +0 -46
- package/dist/NotificationsService.d.ts.map +0 -1
- package/dist/NotificationsService.js +0 -57
- package/dist/NotificationsService.js.map +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox orchestration service.
|
|
3
|
+
*
|
|
4
|
+
* Ties together DockerService, PluginService, SandboxRepo
|
|
5
|
+
* to manage sandbox lifecycle: create → run → stop → cleanup.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { FileSystem } from "@effect/platform";
|
|
10
|
+
import { Duration, Effect } from "effect";
|
|
11
|
+
import { SandboxRepo } from "../CacheService/repos/SandboxRepo.js";
|
|
12
|
+
import { ConfigService } from "../ConfigService/index.js";
|
|
13
|
+
import { SandboxId } from "../Domain.js";
|
|
14
|
+
import { SandboxError } from "../Errors.js";
|
|
15
|
+
import { DockerService } from "./DockerService.js";
|
|
16
|
+
import { PluginService } from "./PluginService.js";
|
|
17
|
+
export interface CreateSandboxParams {
|
|
18
|
+
readonly pullRequestId: string;
|
|
19
|
+
readonly awsAccountId: string;
|
|
20
|
+
readonly repositoryName: string;
|
|
21
|
+
readonly sourceBranch: string;
|
|
22
|
+
readonly profile: string;
|
|
23
|
+
readonly region: string;
|
|
24
|
+
}
|
|
25
|
+
declare const SandboxService_base: Effect.Service.Class<SandboxService, "SandboxService", {
|
|
26
|
+
readonly dependencies: readonly [import("effect/Layer").Layer<SandboxRepo, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, FileSystem.FileSystem>, import("effect/Layer").Layer<DockerService, never, import("@effect/platform/CommandExecutor").CommandExecutor>, import("effect/Layer").Layer<PluginService, never, never>];
|
|
27
|
+
readonly effect: Effect.Effect<{
|
|
28
|
+
readonly create: (params: CreateSandboxParams) => Effect.Effect<{
|
|
29
|
+
readonly error: string | null;
|
|
30
|
+
readonly awsAccountId: string;
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly repositoryName: string;
|
|
33
|
+
readonly status: string;
|
|
34
|
+
readonly sourceBranch: string;
|
|
35
|
+
readonly pullRequestId: string;
|
|
36
|
+
readonly workspacePath: string;
|
|
37
|
+
readonly createdAt: string;
|
|
38
|
+
readonly lastActivityAt: string;
|
|
39
|
+
readonly containerId: string | null;
|
|
40
|
+
readonly port: number | null;
|
|
41
|
+
readonly statusDetail: string | null;
|
|
42
|
+
readonly logs: string | null;
|
|
43
|
+
}, SandboxError, FileSystem.FileSystem | import("effect/Scope").Scope | import("@effect/platform/CommandExecutor").CommandExecutor>;
|
|
44
|
+
readonly get: (id: SandboxId) => Effect.Effect<{
|
|
45
|
+
readonly error: string | null;
|
|
46
|
+
readonly awsAccountId: string;
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly repositoryName: string;
|
|
49
|
+
readonly status: string;
|
|
50
|
+
readonly sourceBranch: string;
|
|
51
|
+
readonly pullRequestId: string;
|
|
52
|
+
readonly workspacePath: string;
|
|
53
|
+
readonly createdAt: string;
|
|
54
|
+
readonly lastActivityAt: string;
|
|
55
|
+
readonly containerId: string | null;
|
|
56
|
+
readonly port: number | null;
|
|
57
|
+
readonly statusDetail: string | null;
|
|
58
|
+
readonly logs: string | null;
|
|
59
|
+
}, SandboxError, never>;
|
|
60
|
+
readonly list: () => Effect.Effect<readonly {
|
|
61
|
+
readonly error: string | null;
|
|
62
|
+
readonly awsAccountId: string;
|
|
63
|
+
readonly id: string;
|
|
64
|
+
readonly repositoryName: string;
|
|
65
|
+
readonly status: string;
|
|
66
|
+
readonly sourceBranch: string;
|
|
67
|
+
readonly pullRequestId: string;
|
|
68
|
+
readonly workspacePath: string;
|
|
69
|
+
readonly createdAt: string;
|
|
70
|
+
readonly lastActivityAt: string;
|
|
71
|
+
readonly containerId: string | null;
|
|
72
|
+
readonly port: number | null;
|
|
73
|
+
readonly statusDetail: string | null;
|
|
74
|
+
readonly logs: string | null;
|
|
75
|
+
}[], import("../CacheService/CacheError.ts").CacheError, never>;
|
|
76
|
+
readonly listAll: () => Effect.Effect<readonly {
|
|
77
|
+
readonly error: string | null;
|
|
78
|
+
readonly awsAccountId: string;
|
|
79
|
+
readonly id: string;
|
|
80
|
+
readonly repositoryName: string;
|
|
81
|
+
readonly status: string;
|
|
82
|
+
readonly sourceBranch: string;
|
|
83
|
+
readonly pullRequestId: string;
|
|
84
|
+
readonly workspacePath: string;
|
|
85
|
+
readonly createdAt: string;
|
|
86
|
+
readonly lastActivityAt: string;
|
|
87
|
+
readonly containerId: string | null;
|
|
88
|
+
readonly port: number | null;
|
|
89
|
+
readonly statusDetail: string | null;
|
|
90
|
+
readonly logs: string | null;
|
|
91
|
+
}[], import("../CacheService/CacheError.ts").CacheError, never>;
|
|
92
|
+
readonly stop: (id: SandboxId) => Effect.Effect<void, SandboxError, never>;
|
|
93
|
+
readonly restart: (id: SandboxId) => Effect.Effect<undefined, SandboxError, never>;
|
|
94
|
+
readonly cleanup: (id: SandboxId) => Effect.Effect<void, SandboxError, FileSystem.FileSystem>;
|
|
95
|
+
readonly reconcile: () => Effect.Effect<void, never, never>;
|
|
96
|
+
readonly gcIdle: (idleTimeout?: Duration.Duration, cleanupDelay?: Duration.Duration) => Effect.Effect<void, never, FileSystem.FileSystem>;
|
|
97
|
+
}, never, SandboxRepo | ConfigService | DockerService | PluginService>;
|
|
98
|
+
}>;
|
|
99
|
+
export declare class SandboxService extends SandboxService_base {
|
|
100
|
+
}
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=SandboxService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxService.d.ts","sourceRoot":"","sources":["../../src/SandboxService/SandboxService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAW,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAwB,QAAQ,EAAE,MAAM,EAAoC,MAAM,QAAQ,CAAA;AACjG,OAAO,EAAE,WAAW,EAAmB,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,aAAa,EAA4C,MAAM,2BAA2B,CAAA;AACnG,OAAO,EAAiC,SAAS,EAAsB,MAAM,cAAc,CAAA;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAExE,OAAO,EAAE,aAAa,EAAuB,MAAM,oBAAoB,CAAA;AAEvE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;;;;kCA6GsB,mBAAmB;;;;;;;;;;;;;;;;2BAgL1B,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BASR,SAAS;+BAiBN,SAAS;+BAiCT,SAAS;;;;;AAvS7B,qBAAa,cAAe,SAAQ,mBAyXlC;CAAG"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox orchestration service.
|
|
3
|
+
*
|
|
4
|
+
* Ties together DockerService, PluginService, SandboxRepo
|
|
5
|
+
* to manage sandbox lifecycle: create → run → stop → cleanup.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { Command, FileSystem } from "@effect/platform";
|
|
10
|
+
import { Cause, Clock, Config, Duration, Effect, Option, Random, Schedule, Stream } from "effect";
|
|
11
|
+
import { SandboxRepo } from "../CacheService/repos/SandboxRepo.js";
|
|
12
|
+
import { ConfigService, defaultSandboxConfig } from "../ConfigService/index.js";
|
|
13
|
+
import { PullRequestId, RepositoryName, SandboxId } from "../Domain.js";
|
|
14
|
+
import { SandboxError } from "../Errors.js";
|
|
15
|
+
import { DockerService } from "./DockerService.js";
|
|
16
|
+
import { makeClaudeCodePlugin } from "./plugins/ClaudeCodePlugin.js";
|
|
17
|
+
import { PluginService } from "./PluginService.js";
|
|
18
|
+
const SANDBOX_BASE_PORT = 18080;
|
|
19
|
+
const homeDir = Config.string("HOME").pipe(Config.orElse(() => Config.string("USERPROFILE")));
|
|
20
|
+
const sandboxesDir = homeDir.pipe(Config.map((h) => `${h}/.codecommit/sandboxes`));
|
|
21
|
+
const anthropicApiKey = Config.string("ANTHROPIC_API_KEY").pipe(Config.option);
|
|
22
|
+
const expandHome = (p, home) => p.startsWith("~/") ? `${home}${p.slice(1)}` : p;
|
|
23
|
+
const makeContainerConfig = (workspacePath, port, sandboxId, pullRequestId, apiKey, sandboxConfig, homePath) => ({
|
|
24
|
+
Image: sandboxConfig.image,
|
|
25
|
+
Cmd: ["--bind-addr", "0.0.0.0:8080", "--auth", "none", "/workspace"],
|
|
26
|
+
ExposedPorts: { "8080/tcp": {} },
|
|
27
|
+
HostConfig: {
|
|
28
|
+
Binds: [
|
|
29
|
+
`${workspacePath}:/workspace`,
|
|
30
|
+
...sandboxConfig.volumeMounts.map((m) => `${expandHome(m.hostPath, homePath)}:${m.containerPath}${m.readonly ? ":ro" : ""}`)
|
|
31
|
+
],
|
|
32
|
+
PortBindings: { "8080/tcp": [{ HostPort: String(port) }] }
|
|
33
|
+
},
|
|
34
|
+
Env: [
|
|
35
|
+
...(Option.isSome(apiKey) ? [`ANTHROPIC_API_KEY=${apiKey.value}`] : []),
|
|
36
|
+
...Object.entries(sandboxConfig.env).map(([k, v]) => `${k}=${v}`)
|
|
37
|
+
],
|
|
38
|
+
Labels: {
|
|
39
|
+
"codecommit.sandbox.id": sandboxId,
|
|
40
|
+
"codecommit.sandbox.pr": pullRequestId
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
export class SandboxService extends Effect.Service()("SandboxService", {
|
|
44
|
+
dependencies: [SandboxRepo.Default, DockerService.Default, PluginService.Default],
|
|
45
|
+
effect: Effect.gen(function* () {
|
|
46
|
+
const repo = yield* SandboxRepo;
|
|
47
|
+
const docker = yield* DockerService;
|
|
48
|
+
const plugins = yield* PluginService;
|
|
49
|
+
const configService = yield* ConfigService;
|
|
50
|
+
const homePath = yield* homeDir.pipe(Effect.orDie);
|
|
51
|
+
const basePath = yield* sandboxesDir.pipe(Effect.orDie);
|
|
52
|
+
const apiKey = yield* anthropicApiKey.pipe(Effect.orDie);
|
|
53
|
+
const loadSandboxConfig = configService.load.pipe(Effect.map((c) => c.sandbox), Effect.catchAll(() => Effect.succeed(defaultSandboxConfig)));
|
|
54
|
+
// Register built-in plugins conditionally based on config
|
|
55
|
+
yield* Effect.gen(function* () {
|
|
56
|
+
const sandboxCfg = yield* loadSandboxConfig;
|
|
57
|
+
if (sandboxCfg.enableClaudeCode) {
|
|
58
|
+
yield* plugins.register(makeClaudeCodePlugin((containerId, cmd) => docker.exec(containerId, cmd).pipe(Effect.catchAll(() => Effect.void))));
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const updateStatus = (id, status, extra) => repo.updateStatus(id, status, extra);
|
|
62
|
+
const progress = (id, detail) => Clock.currentTimeMillis.pipe(Effect.flatMap((ms) => {
|
|
63
|
+
const ts = new Date(ms).toISOString();
|
|
64
|
+
return repo.updateDetail(id, detail).pipe(Effect.tap(() => repo.appendLog(id, `[${ts}] ${detail}`)), Effect.tap(() => Effect.logInfo(`Sandbox ${id}: ${detail}`)));
|
|
65
|
+
}));
|
|
66
|
+
const allocatePort = () => Random.nextIntBetween(SANDBOX_BASE_PORT, SANDBOX_BASE_PORT + 1000);
|
|
67
|
+
const makeSandboxContext = (row) => ({
|
|
68
|
+
sandboxId: SandboxId.make(row.id),
|
|
69
|
+
containerId: row.containerId ?? "",
|
|
70
|
+
workspacePath: row.workspacePath,
|
|
71
|
+
port: row.port ?? 0,
|
|
72
|
+
pr: {
|
|
73
|
+
id: PullRequestId.make(row.pullRequestId),
|
|
74
|
+
repositoryName: RepositoryName.make(row.repositoryName),
|
|
75
|
+
sourceBranch: row.sourceBranch
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
create: (params) => Effect.gen(function* () {
|
|
80
|
+
// Singleton check — one active sandbox per PR
|
|
81
|
+
const existing = yield* repo.findByPr(params.awsAccountId, params.pullRequestId);
|
|
82
|
+
if (Option.isSome(existing)) {
|
|
83
|
+
return existing.value;
|
|
84
|
+
}
|
|
85
|
+
const nowMs = yield* Clock.currentTimeMillis;
|
|
86
|
+
const rand = yield* Random.nextIntBetween(0, 2176782336);
|
|
87
|
+
const id = SandboxId.make(`sbx-${nowMs}-${rand.toString(36).padStart(6, "0")}`);
|
|
88
|
+
const port = yield* allocatePort();
|
|
89
|
+
const workspacePath = `${basePath}/${id}`;
|
|
90
|
+
const now = new Date(nowMs).toISOString();
|
|
91
|
+
yield* repo.insert({
|
|
92
|
+
id,
|
|
93
|
+
pullRequestId: params.pullRequestId,
|
|
94
|
+
awsAccountId: params.awsAccountId,
|
|
95
|
+
repositoryName: params.repositoryName,
|
|
96
|
+
sourceBranch: params.sourceBranch,
|
|
97
|
+
workspacePath,
|
|
98
|
+
status: "creating",
|
|
99
|
+
createdAt: now,
|
|
100
|
+
lastActivityAt: now
|
|
101
|
+
});
|
|
102
|
+
// Fork daemon for async lifecycle
|
|
103
|
+
yield* Effect.forkDaemon(Effect.gen(function* () {
|
|
104
|
+
const fs = yield* FileSystem.FileSystem;
|
|
105
|
+
const log = (detail) => progress(id, detail);
|
|
106
|
+
// Load config at creation time
|
|
107
|
+
yield* log("Loading sandbox config");
|
|
108
|
+
const sandboxCfg = yield* loadSandboxConfig;
|
|
109
|
+
// Clone via HTTPS + AWS credential helper
|
|
110
|
+
yield* updateStatus(id, "cloning");
|
|
111
|
+
yield* fs.makeDirectory(workspacePath, { recursive: true });
|
|
112
|
+
const cloneUrl = `https://git-codecommit.${params.region}.amazonaws.com/v1/repos/${params.repositoryName}`;
|
|
113
|
+
const branch = params.sourceBranch.replace(/^refs\/heads\//, "");
|
|
114
|
+
const depthLabel = sandboxCfg.cloneDepth > 0 ? ` (depth ${sandboxCfg.cloneDepth})` : "";
|
|
115
|
+
yield* log(`Cloning ${params.repositoryName}/${branch}${depthLabel}`);
|
|
116
|
+
const depthArgs = sandboxCfg.cloneDepth > 0
|
|
117
|
+
? ["--depth", String(sandboxCfg.cloneDepth)]
|
|
118
|
+
: [];
|
|
119
|
+
const cloneProc = yield* Command.make("git", "-c", "credential.helper=!aws codecommit credential-helper $@", "-c", "credential.UseHttpPath=true", "clone", ...depthArgs, "-b", branch, cloneUrl, workspacePath).pipe(Command.env({ AWS_PROFILE: params.profile, AWS_DEFAULT_REGION: params.region }), Command.stderr("pipe"), Command.start);
|
|
120
|
+
const exitCode = yield* cloneProc.exitCode;
|
|
121
|
+
if (exitCode !== 0) {
|
|
122
|
+
const stderrChunks = yield* Stream.runCollect(cloneProc.stderr);
|
|
123
|
+
const stderrText = Array.from(stderrChunks).map((c) => new TextDecoder().decode(c)).join("").trim();
|
|
124
|
+
yield* log(`Clone failed: ${stderrText}`);
|
|
125
|
+
yield* updateStatus(id, "error", { error: stderrText || `git clone failed (exit ${exitCode})` });
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
yield* log("Clone complete");
|
|
129
|
+
// Pull image
|
|
130
|
+
yield* updateStatus(id, "starting");
|
|
131
|
+
yield* log(`Pulling image ${sandboxCfg.image}`);
|
|
132
|
+
yield* docker.pullImage(sandboxCfg.image).pipe(Effect.tap(() => log("Image ready")), Effect.catchAll(() => log("Image pull skipped (using cached)")));
|
|
133
|
+
// Create + start container
|
|
134
|
+
yield* log("Creating container");
|
|
135
|
+
const containerConfig = makeContainerConfig(workspacePath, port, id, params.pullRequestId, apiKey, sandboxCfg, homePath);
|
|
136
|
+
const containerId = yield* docker.createContainer(containerConfig);
|
|
137
|
+
const cid = containerId.trim();
|
|
138
|
+
yield* log(`Container ${cid.slice(0, 12)} created, starting`);
|
|
139
|
+
yield* docker.startContainer(cid);
|
|
140
|
+
yield* updateStatus(id, "starting", { containerId: cid, port });
|
|
141
|
+
yield* log(`Container started on port ${port}`);
|
|
142
|
+
// Fix ownership of dirs that Docker may have created as root (from volume mounts)
|
|
143
|
+
yield* docker.exec(cid, [
|
|
144
|
+
"sudo",
|
|
145
|
+
"chown",
|
|
146
|
+
"-R",
|
|
147
|
+
"coder:coder",
|
|
148
|
+
"/home/coder/.local"
|
|
149
|
+
]).pipe(Effect.catchAll(() => Effect.void));
|
|
150
|
+
// Wait for code-server to be ready (poll health)
|
|
151
|
+
yield* log("Waiting for code-server health check");
|
|
152
|
+
yield* docker.exec(cid, ["curl", "-sf", "http://localhost:8080/healthz"]).pipe(Effect.retry(Schedule.recurs(30).pipe(Schedule.intersect(Schedule.spaced(Duration.seconds(1))))), Effect.tap(() => log("code-server ready")), Effect.tapError((e) => log(`Health check failed: ${String(e)}`)), Effect.catchAll(() => Effect.void));
|
|
153
|
+
// Run plugin hooks
|
|
154
|
+
const row = yield* repo.findById(id);
|
|
155
|
+
const ctx = makeSandboxContext(row);
|
|
156
|
+
yield* log("Running plugin hooks");
|
|
157
|
+
yield* plugins.executeHook("onSandboxCreate", ctx);
|
|
158
|
+
yield* plugins.executeHook("onSandboxReady", ctx);
|
|
159
|
+
// Install configured extensions
|
|
160
|
+
if (sandboxCfg.extensions.length > 0) {
|
|
161
|
+
yield* log(`Installing ${sandboxCfg.extensions.length} extension(s)`);
|
|
162
|
+
yield* Effect.forEach(sandboxCfg.extensions, (ext) => log(`Installing extension: ${ext}`).pipe(Effect.zipRight(docker.exec(cid, ["code-server", "--install-extension", ext])), Effect.tap((output) => log(`Extension installed: ${ext}${output ? `\n${output.trim()}` : ""}`)), Effect.tapError((e) => log(`Extension failed: ${ext} — ${String(e)}`)), Effect.catchAll(() => Effect.void)), { discard: true });
|
|
163
|
+
}
|
|
164
|
+
// Run configured setup commands
|
|
165
|
+
if (sandboxCfg.setupCommands.length > 0) {
|
|
166
|
+
yield* log(`Running ${sandboxCfg.setupCommands.length} setup command(s)`);
|
|
167
|
+
yield* Effect.forEach(sandboxCfg.setupCommands, (cmd, i) => log(`[${i + 1}/${sandboxCfg.setupCommands.length}] ${cmd}`).pipe(Effect.zipRight(docker.exec(cid, ["sh", "-c", cmd])), Effect.tap((output) => log(`Command done: ${cmd.slice(0, 60)}${output ? `\n${output.trim()}` : ""}`)), Effect.tapError((e) => log(`Command failed: ${cmd.slice(0, 60)} — ${String(e)}`)), Effect.catchAll(() => Effect.void)), { discard: true });
|
|
168
|
+
}
|
|
169
|
+
yield* updateStatus(id, "running");
|
|
170
|
+
yield* log("Sandbox ready");
|
|
171
|
+
}).pipe(Effect.catchAllCause((cause) => Effect.gen(function* () {
|
|
172
|
+
yield* Effect.logError(`Sandbox ${id} creation failed`, cause);
|
|
173
|
+
const squashed = Cause.squash(cause);
|
|
174
|
+
const errorDetail = squashed instanceof Error ? squashed.message : String(squashed);
|
|
175
|
+
yield* updateStatus(id, "error", { error: errorDetail.slice(0, 500) }).pipe(Effect.catchAll((statusErr) => Effect.logError("Failed to update sandbox error status", statusErr)));
|
|
176
|
+
}))));
|
|
177
|
+
return yield* repo.findById(id);
|
|
178
|
+
}).pipe(Effect.mapError((cause) => new SandboxError({ message: "Failed to create sandbox", cause }))),
|
|
179
|
+
get: (id) => repo.findById(id).pipe(Effect.mapError((cause) => new SandboxError({ sandboxId: id, message: "Sandbox not found", cause }))),
|
|
180
|
+
list: () => repo.findActive(),
|
|
181
|
+
listAll: () => repo.findAll(),
|
|
182
|
+
stop: (id) => Effect.gen(function* () {
|
|
183
|
+
const row = yield* repo.findById(id);
|
|
184
|
+
yield* updateStatus(id, "stopping");
|
|
185
|
+
if (row.containerId) {
|
|
186
|
+
const ctx = makeSandboxContext(row);
|
|
187
|
+
yield* plugins.executeHook("onSandboxDestroy", ctx);
|
|
188
|
+
yield* docker.stopContainer(row.containerId).pipe(Effect.catchAll(() => Effect.void));
|
|
189
|
+
}
|
|
190
|
+
yield* updateStatus(id, "stopped");
|
|
191
|
+
yield* Effect.logInfo(`Sandbox ${id} stopped`);
|
|
192
|
+
}).pipe(Effect.mapError((cause) => new SandboxError({ sandboxId: id, message: "Failed to stop sandbox", cause }))),
|
|
193
|
+
restart: (id) => Effect.gen(function* () {
|
|
194
|
+
const row = yield* repo.findById(id);
|
|
195
|
+
if (!row.containerId) {
|
|
196
|
+
return yield* Effect.fail(new SandboxError({ sandboxId: id, message: "No container to restart" }));
|
|
197
|
+
}
|
|
198
|
+
yield* updateStatus(id, "starting");
|
|
199
|
+
yield* progress(id, "Restarting container");
|
|
200
|
+
yield* docker.startContainer(row.containerId);
|
|
201
|
+
yield* updateStatus(id, "starting", row.port ? { port: row.port } : {});
|
|
202
|
+
yield* progress(id, "Waiting for code-server health check");
|
|
203
|
+
yield* docker.exec(row.containerId, ["curl", "-sf", "http://localhost:8080/healthz"]).pipe(Effect.retry(Schedule.recurs(30).pipe(Schedule.intersect(Schedule.spaced(Duration.seconds(1))))), Effect.tap(() => progress(id, "code-server ready")), Effect.catchAll(() => Effect.void));
|
|
204
|
+
const ctx = makeSandboxContext(yield* repo.findById(id));
|
|
205
|
+
yield* plugins.executeHook("onSandboxReady", ctx);
|
|
206
|
+
yield* updateStatus(id, "running");
|
|
207
|
+
yield* progress(id, "Sandbox restarted");
|
|
208
|
+
yield* Effect.logInfo(`Sandbox ${id} restarted`);
|
|
209
|
+
}).pipe(Effect.mapError((cause) => new SandboxError({ sandboxId: id, message: "Failed to restart sandbox", cause }))),
|
|
210
|
+
cleanup: (id) => Effect.gen(function* () {
|
|
211
|
+
const row = yield* repo.findById(id);
|
|
212
|
+
const fs = yield* FileSystem.FileSystem;
|
|
213
|
+
if (row.containerId) {
|
|
214
|
+
yield* docker.removeContainer(row.containerId).pipe(Effect.catchAll(() => Effect.void));
|
|
215
|
+
}
|
|
216
|
+
yield* fs.remove(row.workspacePath, { recursive: true }).pipe(Effect.catchAll(() => Effect.void));
|
|
217
|
+
yield* repo.delete(id);
|
|
218
|
+
yield* Effect.logInfo(`Sandbox ${id} cleaned up`);
|
|
219
|
+
}).pipe(Effect.mapError((cause) => new SandboxError({ sandboxId: id, message: "Failed to cleanup sandbox", cause }))),
|
|
220
|
+
reconcile: () => Effect.gen(function* () {
|
|
221
|
+
const active = yield* repo.findActive();
|
|
222
|
+
yield* Effect.forEach(active, (row) => Effect.gen(function* () {
|
|
223
|
+
if (!row.containerId) {
|
|
224
|
+
yield* updateStatus(SandboxId.make(row.id), "error", { error: "Orphaned (no container)" });
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const info = yield* docker.inspectContainer(row.containerId).pipe(Effect.catchAll(() => Effect.succeed(null)));
|
|
228
|
+
if (!info || !info.State.Running) {
|
|
229
|
+
yield* updateStatus(SandboxId.make(row.id), "stopped");
|
|
230
|
+
yield* Effect.logInfo(`Reconciled orphaned sandbox ${row.id}`);
|
|
231
|
+
}
|
|
232
|
+
}), { discard: true });
|
|
233
|
+
}).pipe(Effect.catchAllCause((cause) => Effect.logWarning("Sandbox reconcile failed", cause))),
|
|
234
|
+
gcIdle: (idleTimeout = Duration.minutes(30), cleanupDelay = Duration.hours(24)) => Effect.gen(function* () {
|
|
235
|
+
const all = yield* repo.findAll();
|
|
236
|
+
const now = yield* Clock.currentTimeMillis;
|
|
237
|
+
// Stop idle running sandboxes
|
|
238
|
+
yield* Effect.forEach(all.filter((r) => r.status === "running"), (row) => {
|
|
239
|
+
const lastActivity = new Date(row.lastActivityAt).getTime();
|
|
240
|
+
if (now - lastActivity > Duration.toMillis(idleTimeout)) {
|
|
241
|
+
return Effect.gen(function* () {
|
|
242
|
+
yield* Effect.logInfo(`GC: stopping idle sandbox ${row.id}`);
|
|
243
|
+
if (row.containerId) {
|
|
244
|
+
yield* docker.stopContainer(row.containerId).pipe(Effect.catchAll(() => Effect.void));
|
|
245
|
+
}
|
|
246
|
+
yield* updateStatus(SandboxId.make(row.id), "stopped");
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return Effect.void;
|
|
250
|
+
}, { discard: true });
|
|
251
|
+
// Cleanup stopped sandboxes past delay
|
|
252
|
+
const fs = yield* FileSystem.FileSystem;
|
|
253
|
+
yield* Effect.forEach(all.filter((r) => r.status === "stopped" || r.status === "error"), (row) => {
|
|
254
|
+
const lastActivity = new Date(row.lastActivityAt).getTime();
|
|
255
|
+
if (now - lastActivity > Duration.toMillis(cleanupDelay)) {
|
|
256
|
+
return Effect.gen(function* () {
|
|
257
|
+
yield* Effect.logInfo(`GC: cleaning up sandbox ${row.id}`);
|
|
258
|
+
if (row.containerId) {
|
|
259
|
+
yield* docker.removeContainer(row.containerId).pipe(Effect.catchAll(() => Effect.void));
|
|
260
|
+
}
|
|
261
|
+
yield* fs.remove(row.workspacePath, { recursive: true }).pipe(Effect.catchAll(() => Effect.void));
|
|
262
|
+
yield* repo.delete(SandboxId.make(row.id));
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
return Effect.void;
|
|
266
|
+
}, { discard: true });
|
|
267
|
+
}).pipe(Effect.catchAllCause((cause) => Effect.logWarning("Sandbox GC failed", cause)))
|
|
268
|
+
};
|
|
269
|
+
})
|
|
270
|
+
}) {
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=SandboxService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxService.js","sourceRoot":"","sources":["../../src/SandboxService/SandboxService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox service — lifecycle management for code sandboxes.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
export { DockerService } from "./DockerService.js";
|
|
7
|
+
export type { ContainerConfig, ContainerInfo } from "./DockerService.js";
|
|
8
|
+
export { makeClaudeCodePlugin } from "./plugins/ClaudeCodePlugin.js";
|
|
9
|
+
export { PluginService } from "./PluginService.js";
|
|
10
|
+
export type { SandboxContext, SandboxPlugin } from "./PluginService.js";
|
|
11
|
+
export { SandboxService } from "./SandboxService.js";
|
|
12
|
+
export type { CreateSandboxParams } from "./SandboxService.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SandboxService/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox service — lifecycle management for code sandboxes.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
export { DockerService } from "./DockerService.js";
|
|
7
|
+
export { makeClaudeCodePlugin } from "./plugins/ClaudeCodePlugin.js";
|
|
8
|
+
export { PluginService } from "./PluginService.js";
|
|
9
|
+
export { SandboxService } from "./SandboxService.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SandboxService/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code sandbox plugin.
|
|
3
|
+
*
|
|
4
|
+
* Installs Claude Code CLI inside the sandbox container on ready.
|
|
5
|
+
* Depends on DockerService being available in the sandbox context.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { Effect } from "effect";
|
|
10
|
+
import type { SandboxPlugin } from "../PluginService.js";
|
|
11
|
+
/**
|
|
12
|
+
* Creates the Claude Code plugin.
|
|
13
|
+
*
|
|
14
|
+
* Takes a docker exec function to avoid dependency resolution issues —
|
|
15
|
+
* the plugin runs inside SandboxService which already has DockerService.
|
|
16
|
+
*/
|
|
17
|
+
export declare const makeClaudeCodePlugin: (dockerExec: (containerId: string, cmd: ReadonlyArray<string>) => Effect.Effect<void>) => SandboxPlugin;
|
|
18
|
+
//# sourceMappingURL=ClaudeCodePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeCodePlugin.d.ts","sourceRoot":"","sources":["../../../src/SandboxService/plugins/ClaudeCodePlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KACnF,aAYD,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code sandbox plugin.
|
|
3
|
+
*
|
|
4
|
+
* Installs Claude Code CLI inside the sandbox container on ready.
|
|
5
|
+
* Depends on DockerService being available in the sandbox context.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { Effect } from "effect";
|
|
10
|
+
/**
|
|
11
|
+
* Creates the Claude Code plugin.
|
|
12
|
+
*
|
|
13
|
+
* Takes a docker exec function to avoid dependency resolution issues —
|
|
14
|
+
* the plugin runs inside SandboxService which already has DockerService.
|
|
15
|
+
*/
|
|
16
|
+
export const makeClaudeCodePlugin = (dockerExec) => ({
|
|
17
|
+
name: "claude-code",
|
|
18
|
+
onSandboxReady: (ctx) => Effect.gen(function* () {
|
|
19
|
+
yield* Effect.logInfo(`Installing Claude Code CLI in sandbox ${ctx.sandboxId}`);
|
|
20
|
+
yield* dockerExec(ctx.containerId, ["npm", "install", "-g", "@anthropic-ai/claude-code"]);
|
|
21
|
+
yield* Effect.logInfo(`Claude Code CLI installed in sandbox ${ctx.sandboxId}`);
|
|
22
|
+
}).pipe(Effect.catchAllCause((cause) => Effect.logWarning(`Claude Code plugin install failed for sandbox ${ctx.sandboxId}`, cause)))
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=ClaudeCodePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeCodePlugin.js","sourceRoot":"","sources":["../../../src/SandboxService/plugins/ClaudeCodePlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,UAAoF,EACrE,EAAE,CAAC,CAAC;IACnB,IAAI,EAAE,aAAa;IACnB,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,yCAAyC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;QAC/E,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAA;QACzF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,wCAAwC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAChF,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7B,MAAM,CAAC,UAAU,CAAC,iDAAiD,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAC3F,CACF;CACJ,CAAC,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export * as AwsClient from "./AwsClient/index.js";
|
|
17
17
|
export * as AwsClientConfig from "./AwsClientConfig.js";
|
|
18
|
+
export * as CacheService from "./CacheService/index.js";
|
|
18
19
|
export * as ConfigService from "./ConfigService/index.js";
|
|
19
20
|
export * as DateUtils from "./DateUtils.js";
|
|
20
21
|
export * as Domain from "./Domain.js";
|
|
21
22
|
export * as Errors from "./Errors.js";
|
|
22
|
-
export * as NotificationsService from "./NotificationsService.js";
|
|
23
23
|
export * as PRService from "./PRService/index.js";
|
|
24
|
+
export * as SandboxService from "./SandboxService/index.js";
|
|
24
25
|
export { Registry } from "@effect-atom/atom";
|
|
25
26
|
export { Reactivity } from "@effect/experimental";
|
|
26
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAA;AAG3D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export * as AwsClient from "./AwsClient/index.js";
|
|
17
17
|
export * as AwsClientConfig from "./AwsClientConfig.js";
|
|
18
|
+
export * as CacheService from "./CacheService/index.js";
|
|
18
19
|
export * as ConfigService from "./ConfigService/index.js";
|
|
19
20
|
export * as DateUtils from "./DateUtils.js";
|
|
20
21
|
export * as Domain from "./Domain.js";
|
|
21
22
|
export * as Errors from "./Errors.js";
|
|
22
|
-
export * as NotificationsService from "./NotificationsService.js";
|
|
23
23
|
export * as PRService from "./PRService/index.js";
|
|
24
|
+
export * as SandboxService from "./SandboxService/index.js";
|
|
24
25
|
// Re-export Effect dependencies for convenience
|
|
25
26
|
export { Registry } from "@effect-atom/atom";
|
|
26
27
|
export { Reactivity } from "@effect/experimental";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,YAAY,MAAM,yBAAyB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,2BAA2B,CAAA;AAE3D,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knpkv/codecommit-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Core logic for CodeCommit PR browser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,6 +20,9 @@
|
|
|
20
20
|
"@effect/experimental": "latest",
|
|
21
21
|
"@effect/platform": "latest",
|
|
22
22
|
"@effect/schema": "latest",
|
|
23
|
+
"@effect/sql": "latest",
|
|
24
|
+
"@effect/sql-libsql": "latest",
|
|
25
|
+
"@libsql/client": "^0.14.0",
|
|
23
26
|
"distilled-aws": "0.0.21",
|
|
24
27
|
"effect": "latest"
|
|
25
28
|
},
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Notification state management service.
|
|
3
|
-
*
|
|
4
|
-
* Manages application notifications using `SubscriptionRef` for reactive state
|
|
5
|
-
* and `Clock.currentTimeMillis` for timestamps (testable with `TestClock`).
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* import { NotificationsService } from "@knpkv/codecommit-core"
|
|
10
|
-
*
|
|
11
|
-
* const program = Effect.gen(function* () {
|
|
12
|
-
* const notifications = yield* NotificationsService
|
|
13
|
-
* yield* notifications.add({ type: "info", title: "Refresh", message: "Complete" })
|
|
14
|
-
* })
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* @category Service
|
|
18
|
-
* @module
|
|
19
|
-
*/
|
|
20
|
-
import { Context, Effect, Layer, SubscriptionRef } from "effect";
|
|
21
|
-
import type { NotificationsState, NotificationType } from "./Domain.js";
|
|
22
|
-
declare const NotificationsService_base: Context.TagClass<NotificationsService, "@knpkv/codecommit-core/NotificationsService", {
|
|
23
|
-
readonly state: SubscriptionRef.SubscriptionRef<NotificationsState>;
|
|
24
|
-
readonly add: (item: {
|
|
25
|
-
readonly type: NotificationType;
|
|
26
|
-
readonly title: string;
|
|
27
|
-
readonly message: string;
|
|
28
|
-
readonly profile?: string;
|
|
29
|
-
}) => Effect.Effect<void>;
|
|
30
|
-
readonly clear: Effect.Effect<void>;
|
|
31
|
-
}>;
|
|
32
|
-
/**
|
|
33
|
-
* Notifications service.
|
|
34
|
-
*
|
|
35
|
-
* @category Service
|
|
36
|
-
*/
|
|
37
|
-
export declare class NotificationsService extends NotificationsService_base {
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Live notifications service using Clock for timestamps.
|
|
41
|
-
*
|
|
42
|
-
* @category Service
|
|
43
|
-
*/
|
|
44
|
-
export declare const NotificationsServiceLive: Layer.Layer<NotificationsService, never, never>;
|
|
45
|
-
export {};
|
|
46
|
-
//# sourceMappingURL=NotificationsService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationsService.d.ts","sourceRoot":"","sources":["../src/NotificationsService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAS,OAAO,EAAY,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACjF,OAAO,KAAK,EAAoB,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;;oBAcrE,eAAe,CAAC,eAAe,CAAC,kBAAkB,CAAC;kBACrD,CAAC,IAAI,EAAE;QACnB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAC1B,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACT,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AAfvC;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,yBAYvC;CAAG;AAMN;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,iDA6BpC,CAAA"}
|