@action-llama/action-llama 0.10.2 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +17 -6
- package/README.md +31 -20
- package/dist/agents/container-entry.d.ts.map +1 -1
- package/dist/agents/container-entry.js +37 -0
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts +4 -0
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +82 -5
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/execution-engine.d.ts +2 -0
- package/dist/agents/execution-engine.d.ts.map +1 -1
- package/dist/agents/execution-engine.js +5 -1
- package/dist/agents/execution-engine.js.map +1 -1
- package/dist/agents/runner.d.ts +3 -0
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +45 -2
- package/dist/agents/runner.js.map +1 -1
- package/dist/cli/commands/chat.d.ts +5 -2
- package/dist/cli/commands/chat.d.ts.map +1 -1
- package/dist/cli/commands/chat.js +240 -23
- package/dist/cli/commands/chat.js.map +1 -1
- package/dist/cli/commands/cloud-deploy.d.ts.map +1 -1
- package/dist/cli/commands/cloud-deploy.js +6 -48
- package/dist/cli/commands/cloud-deploy.js.map +1 -1
- package/dist/cli/commands/cloud-setup.d.ts.map +1 -1
- package/dist/cli/commands/cloud-setup.js +20 -33
- package/dist/cli/commands/cloud-setup.js.map +1 -1
- package/dist/cli/commands/cloud-teardown.d.ts.map +1 -1
- package/dist/cli/commands/cloud-teardown.js +6 -126
- package/dist/cli/commands/cloud-teardown.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +0 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +21 -16
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/kill.d.ts +1 -1
- package/dist/cli/commands/kill.d.ts.map +1 -1
- package/dist/cli/commands/kill.js +17 -6
- package/dist/cli/commands/kill.js.map +1 -1
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +105 -59
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +1 -1
- package/dist/cli/commands/pause.d.ts.map +1 -1
- package/dist/cli/commands/pause.js +9 -6
- package/dist/cli/commands/pause.js.map +1 -1
- package/dist/cli/commands/resume.d.ts +1 -1
- package/dist/cli/commands/resume.d.ts.map +1 -1
- package/dist/cli/commands/resume.js +9 -6
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +13 -55
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.js +3 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +23 -40
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/gateway-client.d.ts +12 -0
- package/dist/cli/gateway-client.d.ts.map +1 -0
- package/dist/cli/gateway-client.js +27 -0
- package/dist/cli/gateway-client.js.map +1 -0
- package/dist/cli/main.js +70 -27
- package/dist/cli/main.js.map +1 -1
- package/dist/{shared/aws-constants.d.ts → cloud/aws/constants.d.ts} +3 -34
- package/dist/cloud/aws/constants.d.ts.map +1 -0
- package/dist/{shared/aws-constants.js → cloud/aws/constants.js} +3 -34
- package/dist/cloud/aws/constants.js.map +1 -0
- package/dist/cloud/{deploy-apprunner.d.ts → aws/deploy.d.ts} +6 -6
- package/dist/cloud/aws/deploy.d.ts.map +1 -0
- package/dist/cloud/{deploy-apprunner.js → aws/deploy.js} +2 -2
- package/dist/cloud/aws/deploy.js.map +1 -0
- package/dist/cloud/aws/iam.d.ts +37 -0
- package/dist/cloud/aws/iam.d.ts.map +1 -0
- package/dist/{cli/commands/cloud-iam.js → cloud/aws/iam.js} +31 -180
- package/dist/cloud/aws/iam.js.map +1 -0
- package/dist/cloud/aws/provider.d.ts +69 -0
- package/dist/cloud/aws/provider.d.ts.map +1 -0
- package/dist/cloud/aws/provider.js +173 -0
- package/dist/cloud/aws/provider.js.map +1 -0
- package/dist/cloud/aws/provision.d.ts +9 -0
- package/dist/cloud/aws/provision.d.ts.map +1 -0
- package/dist/{cli/commands/cloud-setup-ecs.js → cloud/aws/provision.js} +11 -10
- package/dist/cloud/aws/provision.js.map +1 -0
- package/dist/cloud/aws/teardown.d.ts +15 -0
- package/dist/cloud/aws/teardown.d.ts.map +1 -0
- package/dist/cloud/aws/teardown.js +74 -0
- package/dist/cloud/aws/teardown.js.map +1 -0
- package/dist/cloud/gcp/constants.d.ts +16 -0
- package/dist/cloud/gcp/constants.d.ts.map +1 -0
- package/dist/cloud/gcp/constants.js +16 -0
- package/dist/cloud/gcp/constants.js.map +1 -0
- package/dist/cloud/{deploy-cloudrun.d.ts → gcp/deploy.d.ts} +6 -6
- package/dist/cloud/gcp/deploy.d.ts.map +1 -0
- package/dist/cloud/{deploy-cloudrun.js → gcp/deploy.js} +7 -7
- package/dist/cloud/gcp/deploy.js.map +1 -0
- package/dist/cloud/gcp/iam.d.ts +20 -0
- package/dist/cloud/gcp/iam.d.ts.map +1 -0
- package/dist/cloud/gcp/iam.js +179 -0
- package/dist/cloud/gcp/iam.js.map +1 -0
- package/dist/cloud/gcp/provider.d.ts +28 -0
- package/dist/cloud/gcp/provider.d.ts.map +1 -0
- package/dist/cloud/gcp/provider.js +84 -0
- package/dist/cloud/gcp/provider.js.map +1 -0
- package/dist/cloud/gcp/provision.d.ts +14 -0
- package/dist/cloud/gcp/provision.d.ts.map +1 -0
- package/dist/cloud/gcp/provision.js +37 -0
- package/dist/cloud/gcp/provision.js.map +1 -0
- package/dist/cloud/gcp/teardown.d.ts +12 -0
- package/dist/cloud/gcp/teardown.d.ts.map +1 -0
- package/dist/cloud/gcp/teardown.js +67 -0
- package/dist/cloud/gcp/teardown.js.map +1 -0
- package/dist/cloud/image-builder.d.ts.map +1 -1
- package/dist/cloud/image-builder.js +115 -18
- package/dist/cloud/image-builder.js.map +1 -1
- package/dist/cloud/provider.d.ts +57 -0
- package/dist/cloud/provider.d.ts.map +1 -0
- package/dist/cloud/provider.js +21 -0
- package/dist/cloud/provider.js.map +1 -0
- package/dist/cloud/scheduler-image.d.ts.map +1 -1
- package/dist/cloud/scheduler-image.js +17 -4
- package/dist/cloud/scheduler-image.js.map +1 -1
- package/dist/cloud/state.d.ts +17 -0
- package/dist/cloud/state.d.ts.map +1 -0
- package/dist/cloud/state.js +48 -0
- package/dist/cloud/state.js.map +1 -0
- package/dist/docker/aws-shared.d.ts +6 -4
- package/dist/docker/aws-shared.d.ts.map +1 -1
- package/dist/docker/aws-shared.js +405 -23
- package/dist/docker/aws-shared.js.map +1 -1
- package/dist/docker/cloud-run-runtime.d.ts.map +1 -1
- package/dist/docker/cloud-run-runtime.js +10 -9
- package/dist/docker/cloud-run-runtime.js.map +1 -1
- package/dist/docker/ecs-runtime.d.ts +3 -1
- package/dist/docker/ecs-runtime.d.ts.map +1 -1
- package/dist/docker/ecs-runtime.js +78 -29
- package/dist/docker/ecs-runtime.js.map +1 -1
- package/dist/docker/image.d.ts +7 -0
- package/dist/docker/image.d.ts.map +1 -1
- package/dist/docker/image.js +31 -4
- package/dist/docker/image.js.map +1 -1
- package/dist/docker/lambda-runtime.js +1 -1
- package/dist/docker/lambda-runtime.js.map +1 -1
- package/dist/docker/local-runtime.js +4 -4
- package/dist/docker/local-runtime.js.map +1 -1
- package/dist/docker/network.d.ts.map +1 -1
- package/dist/docker/network.js +2 -2
- package/dist/docker/network.js.map +1 -1
- package/dist/docker/runtime.d.ts +23 -0
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/gateway/api-key.d.ts +10 -0
- package/dist/gateway/api-key.d.ts.map +1 -0
- package/dist/gateway/api-key.js +19 -0
- package/dist/gateway/api-key.js.map +1 -0
- package/dist/gateway/auth.d.ts +16 -0
- package/dist/gateway/auth.d.ts.map +1 -0
- package/dist/gateway/auth.js +60 -0
- package/dist/gateway/auth.js.map +1 -0
- package/dist/gateway/index.d.ts +1 -0
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +33 -2
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/control.d.ts +6 -0
- package/dist/gateway/routes/control.d.ts.map +1 -1
- package/dist/gateway/routes/control.js +117 -0
- package/dist/gateway/routes/control.js.map +1 -1
- package/dist/gateway/routes/dashboard.d.ts +1 -1
- package/dist/gateway/routes/dashboard.d.ts.map +1 -1
- package/dist/gateway/routes/dashboard.js +144 -53
- package/dist/gateway/routes/dashboard.js.map +1 -1
- package/dist/gateway/views/dashboard-page.d.ts.map +1 -1
- package/dist/gateway/views/dashboard-page.js +93 -20
- package/dist/gateway/views/dashboard-page.js.map +1 -1
- package/dist/gateway/views/login-page.d.ts +2 -0
- package/dist/gateway/views/login-page.d.ts.map +1 -0
- package/dist/gateway/views/login-page.js +54 -0
- package/dist/gateway/views/login-page.js.map +1 -0
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +154 -36
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/runner-pool.d.ts +5 -0
- package/dist/scheduler/runner-pool.d.ts.map +1 -1
- package/dist/scheduler/runner-pool.js +14 -0
- package/dist/scheduler/runner-pool.js.map +1 -1
- package/dist/scheduler/runtime-factory.d.ts +2 -0
- package/dist/scheduler/runtime-factory.d.ts.map +1 -1
- package/dist/scheduler/runtime-factory.js +35 -65
- package/dist/scheduler/runtime-factory.js.map +1 -1
- package/dist/setup/scaffold.d.ts.map +1 -1
- package/dist/setup/scaffold.js +25 -0
- package/dist/setup/scaffold.js.map +1 -1
- package/dist/shared/asm-backend.d.ts.map +1 -1
- package/dist/shared/asm-backend.js +2 -2
- package/dist/shared/asm-backend.js.map +1 -1
- package/dist/shared/config.d.ts +28 -13
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +40 -4
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/constants.d.ts +34 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +34 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/credential-backend.d.ts +1 -1
- package/dist/shared/filesystem-backend.d.ts +1 -1
- package/dist/shared/filesystem-backend.js +1 -1
- package/dist/shared/gsm-backend.d.ts.map +1 -1
- package/dist/shared/gsm-backend.js +2 -2
- package/dist/shared/gsm-backend.js.map +1 -1
- package/dist/shared/paths.d.ts +2 -0
- package/dist/shared/paths.d.ts.map +1 -1
- package/dist/shared/paths.js +3 -1
- package/dist/shared/paths.js.map +1 -1
- package/dist/shared/remote.d.ts +1 -0
- package/dist/shared/remote.d.ts.map +1 -1
- package/dist/shared/remote.js +4 -16
- package/dist/shared/remote.js.map +1 -1
- package/dist/shared/usage.d.ts +22 -0
- package/dist/shared/usage.d.ts.map +1 -0
- package/dist/shared/usage.js +43 -0
- package/dist/shared/usage.js.map +1 -0
- package/dist/telemetry/index.d.ts +57 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +189 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/providers/otel.d.ts +15 -0
- package/dist/telemetry/providers/otel.d.ts.map +1 -0
- package/dist/telemetry/providers/otel.js +77 -0
- package/dist/telemetry/providers/otel.js.map +1 -0
- package/dist/telemetry/providers/xray.d.ts +13 -0
- package/dist/telemetry/providers/xray.d.ts.map +1 -0
- package/dist/telemetry/providers/xray.js +33 -0
- package/dist/telemetry/providers/xray.js.map +1 -0
- package/dist/telemetry/types.d.ts +59 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +2 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +2 -0
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/plain-logger.d.ts.map +1 -1
- package/dist/tui/plain-logger.js +8 -2
- package/dist/tui/plain-logger.js.map +1 -1
- package/dist/tui/status-tracker.d.ts +4 -1
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js +11 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/docker/adot-collector-config.yaml +57 -0
- package/package.json +9 -1
- package/dist/cli/commands/cloud-iam.d.ts +0 -17
- package/dist/cli/commands/cloud-iam.d.ts.map +0 -1
- package/dist/cli/commands/cloud-iam.js.map +0 -1
- package/dist/cli/commands/cloud-setup-ecs.d.ts +0 -9
- package/dist/cli/commands/cloud-setup-ecs.d.ts.map +0 -1
- package/dist/cli/commands/cloud-setup-ecs.js.map +0 -1
- package/dist/cloud/deploy-apprunner.d.ts.map +0 -1
- package/dist/cloud/deploy-apprunner.js.map +0 -1
- package/dist/cloud/deploy-cloudrun.d.ts.map +0 -1
- package/dist/cloud/deploy-cloudrun.js.map +0 -1
- package/dist/shared/aws-constants.d.ts.map +0 -1
- package/dist/shared/aws-constants.js.map +0 -1
|
@@ -15,13 +15,15 @@ import { execute as runDoctor } from "./doctor.js";
|
|
|
15
15
|
import { buildAllImages } from "../../cloud/image-builder.js";
|
|
16
16
|
import { buildSchedulerImage } from "../../cloud/scheduler-image.js";
|
|
17
17
|
import { createLogger } from "../../shared/logger.js";
|
|
18
|
+
import { createCloudProvider } from "../../cloud/provider.js";
|
|
18
19
|
export async function execute(opts) {
|
|
19
20
|
const projectPath = resolve(opts.project);
|
|
20
21
|
const globalConfig = loadGlobalConfig(projectPath);
|
|
21
22
|
const cloud = globalConfig.cloud;
|
|
22
23
|
if (!cloud) {
|
|
23
|
-
throw new Error("No [cloud] section found in config.toml. Run 'al cloud
|
|
24
|
+
throw new Error("No [cloud] section found in config.toml. Run 'al setup cloud' first.");
|
|
24
25
|
}
|
|
26
|
+
const provider = await createCloudProvider(cloud);
|
|
25
27
|
const logger = createLogger(projectPath, "deploy");
|
|
26
28
|
console.log(`\n=== Cloud Deploy (${cloud.provider}) ===\n`);
|
|
27
29
|
// 1. Run doctor -c to push credentials and reconcile IAM
|
|
@@ -30,8 +32,7 @@ export async function execute(opts) {
|
|
|
30
32
|
console.log("");
|
|
31
33
|
// 2. Set up cloud credential backend
|
|
32
34
|
const { setDefaultBackend } = await import("../../shared/credentials.js");
|
|
33
|
-
const
|
|
34
|
-
const backend = await createBackendFromCloudConfig(cloud);
|
|
35
|
+
const backend = await provider.createCredentialBackend();
|
|
35
36
|
setDefaultBackend(backend);
|
|
36
37
|
// 3. Discover agents and create runtime
|
|
37
38
|
const agentNames = discoverAgents(projectPath);
|
|
@@ -43,7 +44,7 @@ export async function execute(opts) {
|
|
|
43
44
|
validateAgentConfig(config);
|
|
44
45
|
}
|
|
45
46
|
const activeAgentConfigs = agentConfigs.filter((a) => (a.scale ?? 1) > 0);
|
|
46
|
-
const runtime =
|
|
47
|
+
const runtime = provider.createRuntime();
|
|
47
48
|
// 4. Build agent images
|
|
48
49
|
console.log("Step 2: Building agent images...");
|
|
49
50
|
const lastProgress = new Map();
|
|
@@ -56,7 +57,6 @@ export async function execute(opts) {
|
|
|
56
57
|
logger,
|
|
57
58
|
skills: { locking: true },
|
|
58
59
|
onProgress: (label, msg) => {
|
|
59
|
-
// Avoid repeating the same message for the same label
|
|
60
60
|
if (lastProgress.get(label) !== msg) {
|
|
61
61
|
lastProgress.set(label, msg);
|
|
62
62
|
console.log(` [${label}] ${msg}`);
|
|
@@ -76,7 +76,7 @@ export async function execute(opts) {
|
|
|
76
76
|
console.log(`Scheduler image: ${schedulerImageUri}\n`);
|
|
77
77
|
// 6. Deploy scheduler service
|
|
78
78
|
console.log("Step 4: Deploying scheduler service...");
|
|
79
|
-
const serviceInfo = await
|
|
79
|
+
const serviceInfo = await provider.deployScheduler(schedulerImageUri);
|
|
80
80
|
console.log(`\nScheduler deployed successfully!`);
|
|
81
81
|
console.log(` URL: ${serviceInfo.serviceUrl}`);
|
|
82
82
|
console.log(` Status: ${serviceInfo.status}`);
|
|
@@ -91,46 +91,4 @@ export async function execute(opts) {
|
|
|
91
91
|
}
|
|
92
92
|
console.log("");
|
|
93
93
|
}
|
|
94
|
-
async function createCloudRuntime(cloud) {
|
|
95
|
-
if (cloud.provider === "cloud-run") {
|
|
96
|
-
const { CloudRunJobRuntime } = await import("../../docker/cloud-run-runtime.js");
|
|
97
|
-
const { gcpProject, region, artifactRegistry, serviceAccount, secretPrefix } = cloud;
|
|
98
|
-
if (!gcpProject || !region || !artifactRegistry || !serviceAccount) {
|
|
99
|
-
throw new Error("Cloud Run deployment requires cloud.gcpProject, cloud.region, " +
|
|
100
|
-
"cloud.artifactRegistry, and cloud.serviceAccount in config.toml");
|
|
101
|
-
}
|
|
102
|
-
return new CloudRunJobRuntime({ gcpProject, region, artifactRegistry, serviceAccount, secretPrefix });
|
|
103
|
-
}
|
|
104
|
-
if (cloud.provider === "ecs") {
|
|
105
|
-
const { ECSFargateRuntime } = await import("../../docker/ecs-runtime.js");
|
|
106
|
-
const cc = cloud;
|
|
107
|
-
if (!cc.awsRegion || !cc.ecsCluster || !cc.ecrRepository || !cc.executionRoleArn || !cc.taskRoleArn || !cc.subnets?.length) {
|
|
108
|
-
throw new Error("ECS deployment requires cloud.awsRegion, cloud.ecsCluster, cloud.ecrRepository, " +
|
|
109
|
-
"cloud.executionRoleArn, cloud.taskRoleArn, and cloud.subnets in config.toml");
|
|
110
|
-
}
|
|
111
|
-
return new ECSFargateRuntime({
|
|
112
|
-
awsRegion: cc.awsRegion,
|
|
113
|
-
ecsCluster: cc.ecsCluster,
|
|
114
|
-
ecrRepository: cc.ecrRepository,
|
|
115
|
-
executionRoleArn: cc.executionRoleArn,
|
|
116
|
-
taskRoleArn: cc.taskRoleArn,
|
|
117
|
-
subnets: cc.subnets,
|
|
118
|
-
securityGroups: cc.securityGroups,
|
|
119
|
-
secretPrefix: cc.awsSecretPrefix,
|
|
120
|
-
buildBucket: cc.buildBucket,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
throw new Error(`Unknown cloud provider: "${cloud.provider}"`);
|
|
124
|
-
}
|
|
125
|
-
async function deploySchedulerService(cloud, imageUri) {
|
|
126
|
-
if (cloud.provider === "ecs") {
|
|
127
|
-
const { deployAppRunner } = await import("../../cloud/deploy-apprunner.js");
|
|
128
|
-
return await deployAppRunner({ imageUri, cloudConfig: cloud });
|
|
129
|
-
}
|
|
130
|
-
if (cloud.provider === "cloud-run") {
|
|
131
|
-
const { deployCloudRun } = await import("../../cloud/deploy-cloudrun.js");
|
|
132
|
-
return await deployCloudRun({ imageUri, cloudConfig: cloud });
|
|
133
|
-
}
|
|
134
|
-
throw new Error(`Unknown cloud provider: "${cloud.provider}"`);
|
|
135
|
-
}
|
|
136
94
|
//# sourceMappingURL=cloud-deploy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-deploy.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-deploy.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAyB;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,QAAQ,SAAS,CAAC,CAAC;IAE5D,yDAAyD;IACzD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,qCAAqC;IACrC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,uBAAuB,EAAE,CAAC;IACzD,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE3B,wCAAwC;IACxC,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;IAEzC,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC/C,MAAM,cAAc,CAAC;QACnB,WAAW;QACX,YAAY;QACZ,kBAAkB;QAClB,OAAO;QACP,WAAW,EAAE,KAAK,CAAC,QAAQ;QAC3B,MAAM;QACN,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACzB,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACzB,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACpC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC;QAClD,WAAW;QACX,YAAY;QACZ,OAAO;QACP,MAAM;QACN,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;KAC7C,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,iBAAiB,IAAI,CAAC,CAAC;IAEvD,8BAA8B;IAC9B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/C,qBAAqB;IACrB,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,IAAI,EAAE,CAAC;IACnD,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACzB,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAC7E,CACF,CAAC;IAEF,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,WAAW,CAAC,UAAU,aAAa,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-setup.ts"],"names":[],"mappings":"AAUA,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGtE"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { resolve } from "path";
|
|
2
2
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
-
import { select,
|
|
3
|
+
import { select, confirm } from "@inquirer/prompts";
|
|
4
4
|
import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
|
|
5
5
|
import { createLocalBackend, createBackendFromCloudConfig } from "../../shared/remote.js";
|
|
6
|
-
import {
|
|
6
|
+
import { createCloudProvider } from "../../cloud/provider.js";
|
|
7
|
+
import { saveState, createState } from "../../cloud/state.js";
|
|
7
8
|
import { teardownCloud } from "./cloud-teardown.js";
|
|
8
|
-
import { setupEcsCloud } from "./cloud-setup-ecs.js";
|
|
9
|
-
import { AWS_CONSTANTS } from "../../shared/aws-constants.js";
|
|
10
9
|
export async function execute(opts) {
|
|
11
10
|
const projectPath = resolve(opts.project);
|
|
12
11
|
const configPath = resolve(projectPath, "config.toml");
|
|
@@ -36,35 +35,20 @@ export async function execute(opts) {
|
|
|
36
35
|
}
|
|
37
36
|
}
|
|
38
37
|
// 1. Select provider
|
|
39
|
-
const
|
|
38
|
+
const providerChoice = await select({
|
|
40
39
|
message: "Cloud provider:",
|
|
41
40
|
choices: [
|
|
42
41
|
{ name: "GCP Cloud Run Jobs", value: "cloud-run" },
|
|
43
42
|
{ name: "AWS ECS Fargate", value: "ecs" },
|
|
44
43
|
],
|
|
45
44
|
});
|
|
46
|
-
// 2.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
default: `${cloud.region}-docker.pkg.dev/${cloud.gcpProject}/${AWS_CONSTANTS.DEFAULT_ECR_REPO}`,
|
|
54
|
-
});
|
|
55
|
-
cloud.serviceAccount = await input({
|
|
56
|
-
message: "Service account email (for job creation):",
|
|
57
|
-
default: AWS_CONSTANTS.defaultGcpRunner(cloud.gcpProject),
|
|
58
|
-
});
|
|
59
|
-
const prefix = await input({ message: "Secret prefix:", default: AWS_CONSTANTS.DEFAULT_SECRET_PREFIX });
|
|
60
|
-
if (prefix !== AWS_CONSTANTS.DEFAULT_SECRET_PREFIX)
|
|
61
|
-
cloud.secretPrefix = prefix;
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
const ok = await setupEcsCloud(cloud);
|
|
65
|
-
if (!ok)
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
45
|
+
// 2. Run provider-specific provisioning wizard
|
|
46
|
+
// Create a temporary provider with minimal config to access provision()
|
|
47
|
+
const stubConfig = { provider: providerChoice };
|
|
48
|
+
const provider = await createCloudProvider(stubConfig);
|
|
49
|
+
const cloudConfig = await provider.provision();
|
|
50
|
+
if (!cloudConfig)
|
|
51
|
+
return; // provision returned early (e.g. no AWS creds)
|
|
68
52
|
// 3. Write [cloud] to config.toml
|
|
69
53
|
let rawConfig = {};
|
|
70
54
|
if (existsSync(configPath)) {
|
|
@@ -72,18 +56,20 @@ export async function execute(opts) {
|
|
|
72
56
|
}
|
|
73
57
|
// Strip undefined values before writing
|
|
74
58
|
const cloudToWrite = {};
|
|
75
|
-
for (const [k, v] of Object.entries(
|
|
59
|
+
for (const [k, v] of Object.entries(cloudConfig)) {
|
|
76
60
|
if (v !== undefined)
|
|
77
61
|
cloudToWrite[k] = v;
|
|
78
62
|
}
|
|
79
63
|
rawConfig.cloud = cloudToWrite;
|
|
80
64
|
writeFileSync(configPath, stringifyTOML(rawConfig));
|
|
81
65
|
console.log(`\nWrote [cloud] config to ${configPath}`);
|
|
82
|
-
// 4.
|
|
83
|
-
|
|
66
|
+
// 4. Save provisioning state
|
|
67
|
+
saveState(createState(projectPath, providerChoice, []));
|
|
68
|
+
// 5. Push credentials
|
|
69
|
+
console.log(`\nPushing local credentials to ${providerChoice}...`);
|
|
84
70
|
try {
|
|
85
71
|
const local = createLocalBackend();
|
|
86
|
-
const remote = await createBackendFromCloudConfig(
|
|
72
|
+
const remote = await createBackendFromCloudConfig(cloudConfig);
|
|
87
73
|
const localEntries = await local.list();
|
|
88
74
|
if (localEntries.length === 0) {
|
|
89
75
|
console.log("No local credentials found. Run 'al doctor' to configure them, then 'al doctor -c' to push.");
|
|
@@ -98,9 +84,10 @@ export async function execute(opts) {
|
|
|
98
84
|
}
|
|
99
85
|
}
|
|
100
86
|
console.log(`Pushed ${pushed} credential field(s).`);
|
|
101
|
-
//
|
|
87
|
+
// 6. Provision IAM
|
|
102
88
|
console.log(`\nProvisioning per-agent IAM resources...`);
|
|
103
|
-
await
|
|
89
|
+
const fullProvider = await createCloudProvider(cloudConfig);
|
|
90
|
+
await fullProvider.reconcileAgents(projectPath);
|
|
104
91
|
}
|
|
105
92
|
}
|
|
106
93
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-setup.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"cloud-setup.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-teardown.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-teardown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-teardown.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-teardown.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCtE;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1F"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import { resolve } from "path";
|
|
2
2
|
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
3
3
|
import { confirm } from "@inquirer/prompts";
|
|
4
|
-
import { execFileSync } from "child_process";
|
|
5
4
|
import { parse as parseTOML, stringify as stringifyTOML } from "smol-toml";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { IAMClient, DeleteRolePolicyCommand, DeleteRoleCommand } from "@aws-sdk/client-iam";
|
|
9
|
-
import { AWS_CONSTANTS } from "../../shared/aws-constants.js";
|
|
5
|
+
import { createCloudProvider } from "../../cloud/provider.js";
|
|
6
|
+
import { deleteState } from "../../cloud/state.js";
|
|
10
7
|
export async function execute(opts) {
|
|
11
8
|
const projectPath = resolve(opts.project);
|
|
12
9
|
const configPath = resolve(projectPath, "config.toml");
|
|
@@ -34,129 +31,12 @@ export async function execute(opts) {
|
|
|
34
31
|
delete rawConfig.cloud;
|
|
35
32
|
writeFileSync(configPath, stringifyTOML(rawConfig));
|
|
36
33
|
console.log(`Removed [cloud] section from ${configPath}`);
|
|
34
|
+
// Delete state file
|
|
35
|
+
deleteState(projectPath);
|
|
37
36
|
console.log("\nCloud teardown complete.");
|
|
38
37
|
}
|
|
39
38
|
export async function teardownCloud(projectPath, cloud) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
else if (cloud.provider === "ecs") {
|
|
44
|
-
await teardownAws(projectPath, cloud);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
throw new Error(`Unknown cloud provider: "${cloud.provider}"`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async function teardownGcp(projectPath, cloud) {
|
|
51
|
-
const { gcpProject } = cloud;
|
|
52
|
-
if (!gcpProject) {
|
|
53
|
-
console.log("Incomplete GCP config (no project). Skipping teardown.");
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
gcloud(["auth", "print-access-token"], gcpProject);
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
throw new Error("gcloud CLI is not authenticated. Run 'gcloud auth login' first.\n" +
|
|
61
|
-
`Original error: ${err.message}`);
|
|
62
|
-
}
|
|
63
|
-
// Tear down scheduler Cloud Run service
|
|
64
|
-
console.log("Removing Cloud Run scheduler service...");
|
|
65
|
-
const { teardownCloudRunService } = await import("../../cloud/deploy-cloudrun.js");
|
|
66
|
-
await teardownCloudRunService(cloud);
|
|
67
|
-
console.log("");
|
|
68
|
-
const agents = discoverAgents(projectPath);
|
|
69
|
-
if (agents.length === 0) {
|
|
70
|
-
console.log("No agents found. Skipping IAM teardown.");
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
console.log(`Removing Cloud Run service accounts for ${agents.length} agent(s)...\n`);
|
|
74
|
-
for (const name of agents) {
|
|
75
|
-
const saName = AWS_CONSTANTS.serviceAccountName(name);
|
|
76
|
-
const saEmail = AWS_CONSTANTS.serviceAccountEmail(name, gcpProject);
|
|
77
|
-
console.log(` Agent: ${name}`);
|
|
78
|
-
console.log(` Deleting SA: ${saEmail}`);
|
|
79
|
-
try {
|
|
80
|
-
gcloud([
|
|
81
|
-
"iam", "service-accounts", "delete", saEmail,
|
|
82
|
-
"--quiet",
|
|
83
|
-
"--project", gcpProject,
|
|
84
|
-
], gcpProject);
|
|
85
|
-
console.log(` Deleted`);
|
|
86
|
-
}
|
|
87
|
-
catch (err) {
|
|
88
|
-
if (err.message?.includes("NOT_FOUND") || err.message?.includes("not found")) {
|
|
89
|
-
console.log(` Not found (already deleted)`);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
console.log(` Warning: ${err.message}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
console.log("");
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
async function teardownAws(projectPath, cloud) {
|
|
99
|
-
const { awsRegion } = cloud;
|
|
100
|
-
if (!awsRegion) {
|
|
101
|
-
console.log("Incomplete AWS config (no region). Skipping IAM teardown.");
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const stsClient = new STSClient({ region: awsRegion });
|
|
105
|
-
const iamClient = new IAMClient({ region: awsRegion });
|
|
106
|
-
try {
|
|
107
|
-
await stsClient.send(new GetCallerIdentityCommand({}));
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
throw new Error("AWS CLI is not authenticated. Run 'aws configure' or set AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY.\n" +
|
|
111
|
-
`Original error: ${err.message}`);
|
|
112
|
-
}
|
|
113
|
-
const agents = discoverAgents(projectPath);
|
|
114
|
-
if (agents.length === 0) {
|
|
115
|
-
console.log("No agents found. Skipping IAM teardown.");
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
// Tear down scheduler App Runner service
|
|
119
|
-
console.log("Removing App Runner scheduler service...");
|
|
120
|
-
const { teardownAppRunner } = await import("../../cloud/deploy-apprunner.js");
|
|
121
|
-
await teardownAppRunner(cloud);
|
|
122
|
-
console.log("");
|
|
123
|
-
console.log(`Removing ECS task roles for ${agents.length} agent(s)...\n`);
|
|
124
|
-
for (const name of agents) {
|
|
125
|
-
const roleName = AWS_CONSTANTS.taskRoleName(name);
|
|
126
|
-
console.log(` Agent: ${name}`);
|
|
127
|
-
console.log(` Deleting role: ${roleName}`);
|
|
128
|
-
// Must delete inline policies before deleting the role
|
|
129
|
-
try {
|
|
130
|
-
await iamClient.send(new DeleteRolePolicyCommand({
|
|
131
|
-
RoleName: roleName,
|
|
132
|
-
PolicyName: "SecretsAccess",
|
|
133
|
-
}));
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
// Policy may not exist
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
await iamClient.send(new DeleteRoleCommand({
|
|
140
|
-
RoleName: roleName,
|
|
141
|
-
}));
|
|
142
|
-
console.log(` Deleted`);
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
if (err.name === "NoSuchEntityException") {
|
|
146
|
-
console.log(` Not found (already deleted)`);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
console.log(` Warning: ${err.message}`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
console.log("");
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
function gcloud(args, _project) {
|
|
156
|
-
return execFileSync("gcloud", args, {
|
|
157
|
-
encoding: "utf-8",
|
|
158
|
-
timeout: 30_000,
|
|
159
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
160
|
-
}).trim();
|
|
39
|
+
const provider = await createCloudProvider(cloud);
|
|
40
|
+
await provider.teardown(projectPath);
|
|
161
41
|
}
|
|
162
42
|
//# sourceMappingURL=cloud-teardown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-teardown.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-teardown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cloud-teardown.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-teardown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAyB;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAwB,CAAC;IACtF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAgC,CAAC;IAEzD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,QAAQ,SAAS,CAAC,CAAC;IAE9D,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;QACvB,OAAO,EAAE,yGAAyG;QAClH,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAExC,kCAAkC;IAClC,OAAO,SAAS,CAAC,KAAK,CAAC;IACvB,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;IAE1D,oBAAoB;IACpB,WAAW,CAAC,WAAW,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,KAAkB;IACzE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAiBA,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG5G"}
|
|
@@ -6,9 +6,8 @@ import { promptCredential } from "../../credentials/prompter.js";
|
|
|
6
6
|
import { parseCredentialRef, credentialExists, writeCredentialFields } from "../../shared/credentials.js";
|
|
7
7
|
import { createLocalBackend, createBackendFromCloudConfig } from "../../shared/remote.js";
|
|
8
8
|
import { ConfigError, CredentialError } from "../../shared/errors.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
export { reconcileCloudIam, validateEcsRoles, reconcileLambdaRoles } from "./cloud-iam.js";
|
|
9
|
+
import { createCloudProvider } from "../../cloud/provider.js";
|
|
10
|
+
import { ensureGatewayApiKey } from "../../gateway/api-key.js";
|
|
12
11
|
// Webhook secret credential types — these support multiple named instances
|
|
13
12
|
const WEBHOOK_SECRET_TYPES = {
|
|
14
13
|
github: "github_webhook_secret",
|
|
@@ -55,17 +54,28 @@ export async function execute(opts) {
|
|
|
55
54
|
else {
|
|
56
55
|
await promptCredentials(credentialRefs);
|
|
57
56
|
}
|
|
57
|
+
// --- Gateway API key ---
|
|
58
|
+
console.log("\nGateway API key:");
|
|
59
|
+
const { key, generated } = await ensureGatewayApiKey();
|
|
60
|
+
if (generated) {
|
|
61
|
+
console.log(` [new] Generated gateway API key: ${key}`);
|
|
62
|
+
console.log(" Save this key — you'll need it to log into the dashboard.");
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(" [ok] Gateway API key already configured.");
|
|
66
|
+
}
|
|
58
67
|
// --- Cloud mode: push creds + reconcile IAM (interactive only) ---
|
|
59
68
|
if (opts.cloud && !opts.checkOnly) {
|
|
60
69
|
const cloudConfig = globalConfig.cloud;
|
|
61
70
|
if (!cloudConfig) {
|
|
62
71
|
throw new ConfigError("No [cloud] section found in config.toml. " +
|
|
63
|
-
"Run 'al cloud
|
|
72
|
+
"Run 'al setup cloud' to configure a cloud provider first.");
|
|
64
73
|
}
|
|
74
|
+
const provider = await createCloudProvider(cloudConfig);
|
|
65
75
|
// Push local creds to cloud
|
|
66
76
|
console.log(`\nPushing credentials to cloud (${cloudConfig.provider})...`);
|
|
67
77
|
const local = createLocalBackend();
|
|
68
|
-
const remote = await
|
|
78
|
+
const remote = await provider.createCredentialBackend();
|
|
69
79
|
const localEntries = await local.list();
|
|
70
80
|
if (localEntries.length === 0) {
|
|
71
81
|
console.log("No local credentials found. Run 'al doctor' first to configure them.");
|
|
@@ -81,17 +91,12 @@ export async function execute(opts) {
|
|
|
81
91
|
}
|
|
82
92
|
console.log(`Pushed ${pushed} credential field(s) to ${cloudConfig.provider}.`);
|
|
83
93
|
}
|
|
84
|
-
// Reconcile IAM
|
|
94
|
+
// Reconcile IAM (handles task roles, service accounts, Lambda roles)
|
|
85
95
|
console.log(`\nReconciling cloud IAM...`);
|
|
86
|
-
await
|
|
87
|
-
// Validate IAM roles
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await validateEcsRoles(projectPath, cloudConfig);
|
|
91
|
-
// Create Lambda execution roles for short-timeout agents
|
|
92
|
-
console.log(`\nReconciling Lambda roles for short-timeout agents...`);
|
|
93
|
-
await reconcileLambdaRoles(projectPath, cloudConfig);
|
|
94
|
-
}
|
|
96
|
+
await provider.reconcileAgents(projectPath);
|
|
97
|
+
// Validate IAM roles
|
|
98
|
+
console.log(`\nValidating IAM roles...`);
|
|
99
|
+
await provider.validateRoles(projectPath);
|
|
95
100
|
}
|
|
96
101
|
}
|
|
97
102
|
// --- Credential check (headless / non-interactive) ---
|
|
@@ -103,7 +108,7 @@ async function checkCredentials(credentialRefs, projectPath, cloud) {
|
|
|
103
108
|
const cloudConfig = globalConfig.cloud;
|
|
104
109
|
if (!cloudConfig) {
|
|
105
110
|
throw new ConfigError("No [cloud] section found in config.toml. " +
|
|
106
|
-
"Run 'al cloud
|
|
111
|
+
"Run 'al setup cloud' to configure a cloud provider first.");
|
|
107
112
|
}
|
|
108
113
|
const remote = await createBackendFromCloudConfig(cloudConfig);
|
|
109
114
|
console.log(`Checking ${credentialRefs.size} credential(s) in ${cloudConfig.provider}...`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kill.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/kill.ts"],"names":[],"mappings":"AAGA,wBAAsB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"kill.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/kill.ts"],"names":[],"mappings":"AAGA,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCtF"}
|
|
@@ -1,14 +1,25 @@
|
|
|
1
|
-
import { loadGlobalConfig } from "../../shared/config.js";
|
|
2
1
|
import { resolve } from "path";
|
|
3
|
-
|
|
2
|
+
import { gatewayFetch } from "../gateway-client.js";
|
|
3
|
+
export async function execute(target, opts) {
|
|
4
4
|
const projectPath = resolve(opts.project);
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const fetchOpts = {
|
|
6
|
+
project: projectPath,
|
|
7
|
+
method: "POST",
|
|
8
|
+
};
|
|
7
9
|
let response;
|
|
8
10
|
try {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
// Try as agent name first (kills all instances of that agent)
|
|
12
|
+
response = await gatewayFetch({
|
|
13
|
+
...fetchOpts,
|
|
14
|
+
path: `/control/agents/${encodeURIComponent(target)}/kill`,
|
|
11
15
|
});
|
|
16
|
+
// If agent not found, fall back to instance ID
|
|
17
|
+
if (response.status === 404) {
|
|
18
|
+
response = await gatewayFetch({
|
|
19
|
+
...fetchOpts,
|
|
20
|
+
path: `/control/kill/${encodeURIComponent(target)}`,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
12
23
|
}
|
|
13
24
|
catch (error) {
|
|
14
25
|
if (error instanceof Error && error.message.includes('ECONNREFUSED')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kill.js","sourceRoot":"","sources":["../../../src/cli/commands/kill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"kill.js","sourceRoot":"","sources":["../../../src/cli/commands/kill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,IAAyB;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE1C,MAAM,SAAS,GAAG;QAChB,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,8DAA8D;QAC9D,QAAQ,GAAG,MAAM,YAAY,CAAC;YAC5B,GAAG,SAAS;YACZ,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,MAAM,CAAC,OAAO;SAC3D,CAAC,CAAC;QAEH,+CAA+C;QAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,QAAQ,GAAG,MAAM,YAAY,CAAC;gBAC5B,GAAG,SAAS;gBACZ,IAAI,EAAE,iBAAiB,kBAAkB,CAAC,MAAM,CAAC,EAAE;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAmZA,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3H,OAAO,CAAC,IAAI,CAAC,CAuHf"}
|