@action-llama/action-llama 0.3.0 → 0.4.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/LICENSE +21 -0
- package/README.md +43 -102
- package/dist/agents/container-entry.js +123 -17
- package/dist/agents/container-entry.js.map +1 -1
- package/dist/agents/container-runner.d.ts +10 -4
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js +83 -105
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/prompt.d.ts +2 -0
- package/dist/agents/prompt.d.ts.map +1 -1
- package/dist/agents/prompt.js +12 -4
- package/dist/agents/prompt.js.map +1 -1
- package/dist/agents/runner.d.ts +10 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +60 -8
- package/dist/agents/runner.js.map +1 -1
- package/dist/cli/commands/{setup.d.ts → cloud-setup.d.ts} +1 -1
- package/dist/cli/commands/cloud-setup.d.ts.map +1 -0
- package/dist/cli/commands/cloud-setup.js +565 -0
- package/dist/cli/commands/cloud-setup.js.map +1 -0
- package/dist/cli/commands/cloud-teardown.d.ts +6 -0
- package/dist/cli/commands/cloud-teardown.d.ts.map +1 -0
- package/dist/cli/commands/cloud-teardown.js +152 -0
- package/dist/cli/commands/cloud-teardown.js.map +1 -0
- package/dist/cli/commands/console.d.ts.map +1 -1
- package/dist/cli/commands/console.js +108 -8
- package/dist/cli/commands/console.js.map +1 -1
- package/dist/cli/commands/creds.d.ts +2 -0
- package/dist/cli/commands/creds.d.ts.map +1 -0
- package/dist/cli/commands/creds.js +62 -0
- package/dist/cli/commands/creds.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +7 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +405 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +1 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +67 -0
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/new.d.ts.map +1 -1
- package/dist/cli/commands/new.js +9 -2
- package/dist/cli/commands/new.js.map +1 -1
- package/dist/cli/commands/run.d.ts +6 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +121 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/start.d.ts +3 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +52 -16
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +39 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/main.js +58 -16
- package/dist/cli/main.js.map +1 -1
- package/dist/credentials/builtins/aws.d.ts +4 -0
- package/dist/credentials/builtins/aws.d.ts.map +1 -0
- package/dist/credentials/builtins/aws.js +33 -0
- package/dist/credentials/builtins/aws.js.map +1 -0
- package/dist/credentials/builtins/bugsnag-token.d.ts +4 -0
- package/dist/credentials/builtins/bugsnag-token.d.ts.map +1 -0
- package/dist/credentials/builtins/bugsnag-token.js +18 -0
- package/dist/credentials/builtins/bugsnag-token.js.map +1 -0
- package/dist/credentials/builtins/github-webhook-secret.d.ts.map +1 -1
- package/dist/credentials/builtins/github-webhook-secret.js +2 -1
- package/dist/credentials/builtins/github-webhook-secret.js.map +1 -1
- package/dist/credentials/builtins/index.d.ts.map +1 -1
- package/dist/credentials/builtins/index.js +10 -0
- package/dist/credentials/builtins/index.js.map +1 -1
- package/dist/credentials/builtins/netlify-token.d.ts +4 -0
- package/dist/credentials/builtins/netlify-token.d.ts.map +1 -0
- package/dist/credentials/builtins/netlify-token.js +18 -0
- package/dist/credentials/builtins/netlify-token.js.map +1 -0
- package/dist/credentials/builtins/openai-key.d.ts +4 -0
- package/dist/credentials/builtins/openai-key.d.ts.map +1 -0
- package/dist/credentials/builtins/openai-key.js +38 -0
- package/dist/credentials/builtins/openai-key.js.map +1 -0
- package/dist/credentials/builtins/x-twitter-api.d.ts +4 -0
- package/dist/credentials/builtins/x-twitter-api.d.ts.map +1 -0
- package/dist/credentials/builtins/x-twitter-api.js +28 -0
- package/dist/credentials/builtins/x-twitter-api.js.map +1 -0
- package/dist/credentials/prompter.d.ts.map +1 -1
- package/dist/credentials/prompter.js +8 -5
- package/dist/credentials/prompter.js.map +1 -1
- package/dist/docker/cloud-run-runtime.d.ts +61 -0
- package/dist/docker/cloud-run-runtime.d.ts.map +1 -0
- package/dist/docker/cloud-run-runtime.js +510 -0
- package/dist/docker/cloud-run-runtime.js.map +1 -0
- package/dist/docker/ecs-runtime.d.ts +73 -0
- package/dist/docker/ecs-runtime.d.ts.map +1 -0
- package/dist/docker/ecs-runtime.js +596 -0
- package/dist/docker/ecs-runtime.js.map +1 -0
- package/dist/docker/image.d.ts.map +1 -1
- package/dist/docker/image.js +3 -2
- package/dist/docker/image.js.map +1 -1
- package/dist/docker/local-runtime.d.ts +19 -0
- package/dist/docker/local-runtime.d.ts.map +1 -0
- package/dist/docker/local-runtime.js +209 -0
- package/dist/docker/local-runtime.js.map +1 -0
- package/dist/docker/network.d.ts +1 -1
- package/dist/docker/network.d.ts.map +1 -1
- package/dist/docker/network.js +2 -1
- package/dist/docker/network.js.map +1 -1
- package/dist/docker/runtime.d.ts +90 -0
- package/dist/docker/runtime.d.ts.map +1 -0
- package/dist/docker/runtime.js +2 -0
- package/dist/docker/runtime.js.map +1 -0
- package/dist/gateway/index.d.ts +8 -2
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +16 -8
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/routes/credentials.d.ts +5 -0
- package/dist/gateway/routes/credentials.d.ts.map +1 -0
- package/dist/gateway/routes/credentials.js +17 -0
- package/dist/gateway/routes/credentials.js.map +1 -0
- package/dist/gateway/routes/logs.d.ts +5 -0
- package/dist/gateway/routes/logs.d.ts.map +1 -0
- package/dist/gateway/routes/logs.js +31 -0
- package/dist/gateway/routes/logs.js.map +1 -0
- package/dist/gateway/routes/shutdown.d.ts +2 -1
- package/dist/gateway/routes/shutdown.d.ts.map +1 -1
- package/dist/gateway/routes/shutdown.js +7 -16
- package/dist/gateway/routes/shutdown.js.map +1 -1
- package/dist/gateway/routes/webhooks.d.ts +2 -1
- package/dist/gateway/routes/webhooks.d.ts.map +1 -1
- package/dist/gateway/routes/webhooks.js +11 -4
- package/dist/gateway/routes/webhooks.js.map +1 -1
- package/dist/gateway/types.d.ts +6 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +2 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/scheduler/index.d.ts +3 -2
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +286 -67
- package/dist/scheduler/index.js.map +1 -1
- package/dist/setup/scaffold.d.ts.map +1 -1
- package/dist/setup/scaffold.js +110 -50
- package/dist/setup/scaffold.js.map +1 -1
- package/dist/setup/validators.d.ts +14 -0
- package/dist/setup/validators.d.ts.map +1 -1
- package/dist/setup/validators.js +53 -0
- package/dist/setup/validators.js.map +1 -1
- package/dist/shared/asm-backend.d.ts +25 -0
- package/dist/shared/asm-backend.d.ts.map +1 -0
- package/dist/shared/asm-backend.js +107 -0
- package/dist/shared/asm-backend.js.map +1 -0
- package/dist/shared/aws-constants.d.ts +55 -0
- package/dist/shared/aws-constants.d.ts.map +1 -0
- package/dist/shared/aws-constants.js +55 -0
- package/dist/shared/aws-constants.js.map +1 -0
- package/dist/shared/config.d.ts +25 -5
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +15 -22
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credential-backend.d.ts +28 -0
- package/dist/shared/credential-backend.d.ts.map +1 -0
- package/dist/shared/credential-backend.js +2 -0
- package/dist/shared/credential-backend.js.map +1 -0
- package/dist/shared/credentials.d.ts +42 -4
- package/dist/shared/credentials.d.ts.map +1 -1
- package/dist/shared/credentials.js +83 -6
- package/dist/shared/credentials.js.map +1 -1
- package/dist/shared/filesystem-backend.d.ts +18 -0
- package/dist/shared/filesystem-backend.d.ts.map +1 -0
- package/dist/shared/filesystem-backend.js +86 -0
- package/dist/shared/filesystem-backend.js.map +1 -0
- package/dist/shared/gsm-backend.d.ts +35 -0
- package/dist/shared/gsm-backend.d.ts.map +1 -0
- package/dist/shared/gsm-backend.js +208 -0
- package/dist/shared/gsm-backend.js.map +1 -0
- package/dist/shared/remote.d.ts +11 -0
- package/dist/shared/remote.d.ts.map +1 -0
- package/dist/shared/remote.js +29 -0
- package/dist/shared/remote.js.map +1 -0
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +13 -4
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/plain-logger.d.ts +5 -0
- package/dist/tui/plain-logger.d.ts.map +1 -0
- package/dist/tui/plain-logger.js +80 -0
- package/dist/tui/plain-logger.js.map +1 -0
- package/dist/tui/status-tracker.d.ts +3 -2
- package/dist/tui/status-tracker.d.ts.map +1 -1
- package/dist/tui/status-tracker.js.map +1 -1
- package/dist/webhooks/definitions/github.js +1 -1
- package/dist/webhooks/definitions/github.js.map +1 -1
- package/dist/webhooks/definitions/sentry.js +1 -1
- package/dist/webhooks/definitions/sentry.js.map +1 -1
- package/dist/webhooks/providers/github.d.ts +1 -1
- package/dist/webhooks/providers/github.d.ts.map +1 -1
- package/dist/webhooks/providers/github.js +13 -9
- package/dist/webhooks/providers/github.js.map +1 -1
- package/dist/webhooks/providers/sentry.d.ts +1 -1
- package/dist/webhooks/providers/sentry.d.ts.map +1 -1
- package/dist/webhooks/providers/sentry.js +12 -9
- package/dist/webhooks/providers/sentry.js.map +1 -1
- package/dist/webhooks/registry.d.ts +1 -1
- package/dist/webhooks/registry.d.ts.map +1 -1
- package/dist/webhooks/registry.js +20 -13
- package/dist/webhooks/registry.js.map +1 -1
- package/dist/webhooks/types.d.ts +16 -6
- package/dist/webhooks/types.d.ts.map +1 -1
- package/docker/Dockerfile +4 -1
- package/package.json +10 -1
- package/dist/cli/commands/setup.d.ts.map +0 -1
- package/dist/cli/commands/setup.js +0 -50
- package/dist/cli/commands/setup.js.map +0 -1
- package/dist/docker/container.d.ts +0 -19
- package/dist/docker/container.d.ts.map +0 -1
- package/dist/docker/container.js +0 -73
- package/dist/docker/container.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { readFileSync, existsSync, writeFileSync, mkdirSync, readdirSync, statSync } from "fs";
|
|
2
|
+
import { resolve } from "path";
|
|
3
|
+
import { CREDENTIALS_DIR } from "./paths.js";
|
|
4
|
+
/**
|
|
5
|
+
* Filesystem credential backend.
|
|
6
|
+
* Stores credentials at ~/.action-llama-credentials/<type>/<instance>/<field>.
|
|
7
|
+
* This is the default local-first backend.
|
|
8
|
+
*/
|
|
9
|
+
export class FilesystemBackend {
|
|
10
|
+
baseDir;
|
|
11
|
+
constructor(baseDir) {
|
|
12
|
+
this.baseDir = baseDir || CREDENTIALS_DIR;
|
|
13
|
+
}
|
|
14
|
+
async read(type, instance, field) {
|
|
15
|
+
const filepath = resolve(this.baseDir, type, instance, field);
|
|
16
|
+
if (!existsSync(filepath))
|
|
17
|
+
return undefined;
|
|
18
|
+
return readFileSync(filepath, "utf-8").trim();
|
|
19
|
+
}
|
|
20
|
+
async write(type, instance, field, value) {
|
|
21
|
+
const dir = resolve(this.baseDir, type, instance);
|
|
22
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
23
|
+
writeFileSync(resolve(dir, field), value + "\n", { mode: 0o600 });
|
|
24
|
+
}
|
|
25
|
+
async list() {
|
|
26
|
+
const entries = [];
|
|
27
|
+
if (!existsSync(this.baseDir))
|
|
28
|
+
return entries;
|
|
29
|
+
for (const type of readdirSync(this.baseDir)) {
|
|
30
|
+
const typePath = resolve(this.baseDir, type);
|
|
31
|
+
if (!safeIsDir(typePath))
|
|
32
|
+
continue;
|
|
33
|
+
for (const instance of readdirSync(typePath)) {
|
|
34
|
+
const instPath = resolve(typePath, instance);
|
|
35
|
+
if (!safeIsDir(instPath))
|
|
36
|
+
continue;
|
|
37
|
+
for (const field of readdirSync(instPath)) {
|
|
38
|
+
const fieldPath = resolve(instPath, field);
|
|
39
|
+
if (safeIsDir(fieldPath))
|
|
40
|
+
continue; // skip subdirectories
|
|
41
|
+
entries.push({ type, instance, field });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return entries;
|
|
46
|
+
}
|
|
47
|
+
async exists(type, instance) {
|
|
48
|
+
const dir = resolve(this.baseDir, type, instance);
|
|
49
|
+
if (!existsSync(dir))
|
|
50
|
+
return false;
|
|
51
|
+
return readdirSync(dir).length > 0;
|
|
52
|
+
}
|
|
53
|
+
async readAll(type, instance) {
|
|
54
|
+
const dir = resolve(this.baseDir, type, instance);
|
|
55
|
+
if (!existsSync(dir))
|
|
56
|
+
return undefined;
|
|
57
|
+
const result = {};
|
|
58
|
+
for (const file of readdirSync(dir)) {
|
|
59
|
+
const filepath = resolve(dir, file);
|
|
60
|
+
if (safeIsDir(filepath))
|
|
61
|
+
continue;
|
|
62
|
+
result[file] = readFileSync(filepath, "utf-8").trim();
|
|
63
|
+
}
|
|
64
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
65
|
+
}
|
|
66
|
+
async writeAll(type, instance, fields) {
|
|
67
|
+
for (const [field, value] of Object.entries(fields)) {
|
|
68
|
+
await this.write(type, instance, field, value);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async listInstances(type) {
|
|
72
|
+
const dir = resolve(this.baseDir, type);
|
|
73
|
+
if (!existsSync(dir))
|
|
74
|
+
return [];
|
|
75
|
+
return readdirSync(dir).filter((entry) => safeIsDir(resolve(dir, entry)));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function safeIsDir(path) {
|
|
79
|
+
try {
|
|
80
|
+
return statSync(path).isDirectory();
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=filesystem-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-backend.js","sourceRoot":"","sources":["../../src/shared/filesystem-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CredentialBackend, CredentialEntry } from "./credential-backend.js";
|
|
2
|
+
/**
|
|
3
|
+
* Google Secret Manager credential backend.
|
|
4
|
+
* Maps type/instance/field → secret name: <prefix>/<type>/<instance>/<field>
|
|
5
|
+
*
|
|
6
|
+
* Uses the Google Cloud REST API directly (no SDK dependency) with
|
|
7
|
+
* Application Default Credentials via `google-auth-library` or a
|
|
8
|
+
* service account key in GCP_SERVICE_ACCOUNT_KEY env var.
|
|
9
|
+
*
|
|
10
|
+
* Auth resolution order:
|
|
11
|
+
* 1. GCP_SERVICE_ACCOUNT_KEY env var (JSON key — used on Railway/CI)
|
|
12
|
+
* 2. GOOGLE_APPLICATION_CREDENTIALS env var (file path)
|
|
13
|
+
* 3. gcloud auth application-default login (local dev)
|
|
14
|
+
*/
|
|
15
|
+
export declare class GoogleSecretManagerBackend implements CredentialBackend {
|
|
16
|
+
private gcpProject;
|
|
17
|
+
private prefix;
|
|
18
|
+
private accessToken;
|
|
19
|
+
private tokenExpiry;
|
|
20
|
+
constructor(gcpProject: string, secretPrefix?: string);
|
|
21
|
+
private secretName;
|
|
22
|
+
private parseSecretName;
|
|
23
|
+
private getAccessToken;
|
|
24
|
+
private getTokenFromServiceAccountKey;
|
|
25
|
+
private getTokenFromGcloud;
|
|
26
|
+
private apiRequest;
|
|
27
|
+
read(type: string, instance: string, field: string): Promise<string | undefined>;
|
|
28
|
+
write(type: string, instance: string, field: string, value: string): Promise<void>;
|
|
29
|
+
list(): Promise<CredentialEntry[]>;
|
|
30
|
+
exists(type: string, instance: string): Promise<boolean>;
|
|
31
|
+
readAll(type: string, instance: string): Promise<Record<string, string> | undefined>;
|
|
32
|
+
writeAll(type: string, instance: string, fields: Record<string, string>): Promise<void>;
|
|
33
|
+
listInstances(type: string): Promise<string[]>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=gsm-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsm-backend.d.ts","sourceRoot":"","sources":["../../src/shared/gsm-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGlF;;;;;;;;;;;;GAYG;AACH,qBAAa,0BAA2B,YAAW,iBAAiB;IAClE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAAK;gBAEZ,UAAU,EAAE,MAAM,EAAE,YAAY,SAAsC;IAKlF,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,eAAe;YAMT,cAAc;YAkBd,6BAA6B;YAwC7B,kBAAkB;YAsBlB,UAAU;IAclB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAahF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BlF,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAmClC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMxD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAapF,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAQrD"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { AWS_CONSTANTS } from "./aws-constants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Google Secret Manager credential backend.
|
|
4
|
+
* Maps type/instance/field → secret name: <prefix>/<type>/<instance>/<field>
|
|
5
|
+
*
|
|
6
|
+
* Uses the Google Cloud REST API directly (no SDK dependency) with
|
|
7
|
+
* Application Default Credentials via `google-auth-library` or a
|
|
8
|
+
* service account key in GCP_SERVICE_ACCOUNT_KEY env var.
|
|
9
|
+
*
|
|
10
|
+
* Auth resolution order:
|
|
11
|
+
* 1. GCP_SERVICE_ACCOUNT_KEY env var (JSON key — used on Railway/CI)
|
|
12
|
+
* 2. GOOGLE_APPLICATION_CREDENTIALS env var (file path)
|
|
13
|
+
* 3. gcloud auth application-default login (local dev)
|
|
14
|
+
*/
|
|
15
|
+
export class GoogleSecretManagerBackend {
|
|
16
|
+
gcpProject;
|
|
17
|
+
prefix;
|
|
18
|
+
accessToken;
|
|
19
|
+
tokenExpiry = 0;
|
|
20
|
+
constructor(gcpProject, secretPrefix = AWS_CONSTANTS.DEFAULT_SECRET_PREFIX) {
|
|
21
|
+
this.gcpProject = gcpProject;
|
|
22
|
+
this.prefix = secretPrefix;
|
|
23
|
+
}
|
|
24
|
+
secretName(type, instance, field) {
|
|
25
|
+
// GSM secret names allow [a-zA-Z0-9_-] — we use dashes as separators
|
|
26
|
+
// since slashes aren't allowed in secret IDs
|
|
27
|
+
return `${this.prefix}--${type}--${instance}--${field}`;
|
|
28
|
+
}
|
|
29
|
+
parseSecretName(name) {
|
|
30
|
+
const parts = name.split("--");
|
|
31
|
+
if (parts.length !== 4 || parts[0] !== this.prefix)
|
|
32
|
+
return null;
|
|
33
|
+
return { type: parts[1], instance: parts[2], field: parts[3] };
|
|
34
|
+
}
|
|
35
|
+
async getAccessToken() {
|
|
36
|
+
// Return cached token if still valid (with 60s buffer)
|
|
37
|
+
if (this.accessToken && Date.now() < this.tokenExpiry - 60_000) {
|
|
38
|
+
return this.accessToken;
|
|
39
|
+
}
|
|
40
|
+
// Try GCP_SERVICE_ACCOUNT_KEY env var first (JSON key for Railway/CI)
|
|
41
|
+
const saKeyJson = process.env.GCP_SERVICE_ACCOUNT_KEY;
|
|
42
|
+
if (saKeyJson) {
|
|
43
|
+
const token = await this.getTokenFromServiceAccountKey(JSON.parse(saKeyJson));
|
|
44
|
+
return token;
|
|
45
|
+
}
|
|
46
|
+
// Fall back to Application Default Credentials via gcloud
|
|
47
|
+
const token = await this.getTokenFromGcloud();
|
|
48
|
+
return token;
|
|
49
|
+
}
|
|
50
|
+
async getTokenFromServiceAccountKey(key) {
|
|
51
|
+
// Build JWT for OAuth2 token exchange
|
|
52
|
+
const header = Buffer.from(JSON.stringify({ alg: "RS256", typ: "JWT" })).toString("base64url");
|
|
53
|
+
const now = Math.floor(Date.now() / 1000);
|
|
54
|
+
const claims = Buffer.from(JSON.stringify({
|
|
55
|
+
iss: key.client_email,
|
|
56
|
+
scope: "https://www.googleapis.com/auth/cloud-platform",
|
|
57
|
+
aud: key.token_uri,
|
|
58
|
+
iat: now,
|
|
59
|
+
exp: now + 3600,
|
|
60
|
+
})).toString("base64url");
|
|
61
|
+
const { createSign } = await import("crypto");
|
|
62
|
+
const signer = createSign("RSA-SHA256");
|
|
63
|
+
signer.update(`${header}.${claims}`);
|
|
64
|
+
const signature = signer.sign(key.private_key, "base64url");
|
|
65
|
+
const jwt = `${header}.${claims}.${signature}`;
|
|
66
|
+
const res = await fetch(key.token_uri, {
|
|
67
|
+
method: "POST",
|
|
68
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
69
|
+
body: `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=${jwt}`,
|
|
70
|
+
});
|
|
71
|
+
if (!res.ok) {
|
|
72
|
+
const body = await res.text();
|
|
73
|
+
throw new Error(`Failed to get access token from service account: ${res.status} ${body}`);
|
|
74
|
+
}
|
|
75
|
+
const data = await res.json();
|
|
76
|
+
this.accessToken = data.access_token;
|
|
77
|
+
this.tokenExpiry = Date.now() + data.expires_in * 1000;
|
|
78
|
+
return this.accessToken;
|
|
79
|
+
}
|
|
80
|
+
async getTokenFromGcloud() {
|
|
81
|
+
const { execFileSync } = await import("child_process");
|
|
82
|
+
try {
|
|
83
|
+
const token = execFileSync("gcloud", ["auth", "application-default", "print-access-token"], {
|
|
84
|
+
encoding: "utf-8",
|
|
85
|
+
timeout: 10_000,
|
|
86
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
87
|
+
}).trim();
|
|
88
|
+
this.accessToken = token;
|
|
89
|
+
// gcloud tokens typically last 1 hour
|
|
90
|
+
this.tokenExpiry = Date.now() + 3500_000;
|
|
91
|
+
return token;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
throw new Error("Failed to get GCP access token. Either:\n" +
|
|
95
|
+
" 1. Set GCP_SERVICE_ACCOUNT_KEY env var with a service account JSON key, or\n" +
|
|
96
|
+
" 2. Run: gcloud auth application-default login\n" +
|
|
97
|
+
`Original error: ${err.message}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async apiRequest(method, path, body) {
|
|
101
|
+
const token = await this.getAccessToken();
|
|
102
|
+
const url = `https://secretmanager.googleapis.com/v1/${path}`;
|
|
103
|
+
const res = await fetch(url, {
|
|
104
|
+
method,
|
|
105
|
+
headers: {
|
|
106
|
+
Authorization: `Bearer ${token}`,
|
|
107
|
+
"Content-Type": "application/json",
|
|
108
|
+
},
|
|
109
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
110
|
+
});
|
|
111
|
+
return res;
|
|
112
|
+
}
|
|
113
|
+
async read(type, instance, field) {
|
|
114
|
+
const name = this.secretName(type, instance, field);
|
|
115
|
+
const path = `projects/${this.gcpProject}/secrets/${name}/versions/latest:access`;
|
|
116
|
+
const res = await this.apiRequest("GET", path);
|
|
117
|
+
if (res.status === 404)
|
|
118
|
+
return undefined;
|
|
119
|
+
if (!res.ok) {
|
|
120
|
+
const body = await res.text();
|
|
121
|
+
throw new Error(`GSM read failed for ${name}: ${res.status} ${body}`);
|
|
122
|
+
}
|
|
123
|
+
const data = await res.json();
|
|
124
|
+
return Buffer.from(data.payload.data, "base64").toString("utf-8").trim();
|
|
125
|
+
}
|
|
126
|
+
async write(type, instance, field, value) {
|
|
127
|
+
const name = this.secretName(type, instance, field);
|
|
128
|
+
const secretPath = `projects/${this.gcpProject}/secrets/${name}`;
|
|
129
|
+
// Try to create the secret (ignore if already exists)
|
|
130
|
+
const createRes = await this.apiRequest("POST", `projects/${this.gcpProject}/secrets`, {
|
|
131
|
+
secretId: name,
|
|
132
|
+
replication: { automatic: {} },
|
|
133
|
+
});
|
|
134
|
+
if (!createRes.ok && createRes.status !== 409) {
|
|
135
|
+
const body = await createRes.text();
|
|
136
|
+
throw new Error(`GSM create secret failed for ${name}: ${createRes.status} ${body}`);
|
|
137
|
+
}
|
|
138
|
+
// Drain the response body
|
|
139
|
+
if (createRes.status === 409)
|
|
140
|
+
await createRes.text();
|
|
141
|
+
// Add a new version with the value
|
|
142
|
+
const addRes = await this.apiRequest("POST", `${secretPath}:addVersion`, {
|
|
143
|
+
payload: { data: Buffer.from(value).toString("base64") },
|
|
144
|
+
});
|
|
145
|
+
if (!addRes.ok) {
|
|
146
|
+
const body = await addRes.text();
|
|
147
|
+
throw new Error(`GSM add version failed for ${name}: ${addRes.status} ${body}`);
|
|
148
|
+
}
|
|
149
|
+
await addRes.text(); // drain
|
|
150
|
+
}
|
|
151
|
+
async list() {
|
|
152
|
+
const entries = [];
|
|
153
|
+
let pageToken;
|
|
154
|
+
do {
|
|
155
|
+
const params = new URLSearchParams({ filter: `name:${this.prefix}--` });
|
|
156
|
+
if (pageToken)
|
|
157
|
+
params.set("pageToken", pageToken);
|
|
158
|
+
const res = await this.apiRequest("GET", `projects/${this.gcpProject}/secrets?${params.toString()}`);
|
|
159
|
+
if (!res.ok) {
|
|
160
|
+
const body = await res.text();
|
|
161
|
+
throw new Error(`GSM list failed: ${res.status} ${body}`);
|
|
162
|
+
}
|
|
163
|
+
const data = await res.json();
|
|
164
|
+
for (const secret of data.secrets || []) {
|
|
165
|
+
// secret.name is fully qualified: projects/<id>/secrets/<secretId>
|
|
166
|
+
const secretId = secret.name.split("/").pop();
|
|
167
|
+
const parsed = this.parseSecretName(secretId);
|
|
168
|
+
if (parsed)
|
|
169
|
+
entries.push(parsed);
|
|
170
|
+
}
|
|
171
|
+
pageToken = data.nextPageToken;
|
|
172
|
+
} while (pageToken);
|
|
173
|
+
return entries;
|
|
174
|
+
}
|
|
175
|
+
async exists(type, instance) {
|
|
176
|
+
// Check if any secret exists for this type/instance by trying to list with prefix
|
|
177
|
+
const entries = await this.list();
|
|
178
|
+
return entries.some((e) => e.type === type && e.instance === instance);
|
|
179
|
+
}
|
|
180
|
+
async readAll(type, instance) {
|
|
181
|
+
const entries = await this.list();
|
|
182
|
+
const matching = entries.filter((e) => e.type === type && e.instance === instance);
|
|
183
|
+
if (matching.length === 0)
|
|
184
|
+
return undefined;
|
|
185
|
+
const result = {};
|
|
186
|
+
for (const entry of matching) {
|
|
187
|
+
const value = await this.read(type, instance, entry.field);
|
|
188
|
+
if (value !== undefined)
|
|
189
|
+
result[entry.field] = value;
|
|
190
|
+
}
|
|
191
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
192
|
+
}
|
|
193
|
+
async writeAll(type, instance, fields) {
|
|
194
|
+
for (const [field, value] of Object.entries(fields)) {
|
|
195
|
+
await this.write(type, instance, field, value);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async listInstances(type) {
|
|
199
|
+
const entries = await this.list();
|
|
200
|
+
const instances = new Set();
|
|
201
|
+
for (const entry of entries) {
|
|
202
|
+
if (entry.type === type)
|
|
203
|
+
instances.add(entry.instance);
|
|
204
|
+
}
|
|
205
|
+
return [...instances];
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=gsm-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gsm-backend.js","sourceRoot":"","sources":["../../src/shared/gsm-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CloudConfig } from "./config.js";
|
|
2
|
+
import type { CredentialBackend } from "./credential-backend.js";
|
|
3
|
+
/**
|
|
4
|
+
* Create a credential backend from the [cloud] config section.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createBackendFromCloudConfig(cloud: CloudConfig): Promise<CredentialBackend>;
|
|
7
|
+
/**
|
|
8
|
+
* Create the local filesystem backend.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createLocalBackend(): CredentialBackend;
|
|
11
|
+
//# sourceMappingURL=remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/shared/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAIjE;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkBjG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,CAEtD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FilesystemBackend } from "./filesystem-backend.js";
|
|
2
|
+
import { AWS_CONSTANTS } from "./aws-constants.js";
|
|
3
|
+
/**
|
|
4
|
+
* Create a credential backend from the [cloud] config section.
|
|
5
|
+
*/
|
|
6
|
+
export async function createBackendFromCloudConfig(cloud) {
|
|
7
|
+
if (cloud.provider === "cloud-run") {
|
|
8
|
+
if (!cloud.gcpProject) {
|
|
9
|
+
throw new Error("Cloud provider 'cloud-run' requires 'gcpProject' in [cloud] config.");
|
|
10
|
+
}
|
|
11
|
+
const { GoogleSecretManagerBackend } = await import("./gsm-backend.js");
|
|
12
|
+
return new GoogleSecretManagerBackend(cloud.gcpProject, cloud.secretPrefix || AWS_CONSTANTS.DEFAULT_SECRET_PREFIX);
|
|
13
|
+
}
|
|
14
|
+
if (cloud.provider === "ecs") {
|
|
15
|
+
if (!cloud.awsRegion) {
|
|
16
|
+
throw new Error("Cloud provider 'ecs' requires 'awsRegion' in [cloud] config.");
|
|
17
|
+
}
|
|
18
|
+
const { AwsSecretsManagerBackend } = await import("./asm-backend.js");
|
|
19
|
+
return new AwsSecretsManagerBackend(cloud.awsRegion, cloud.awsSecretPrefix || AWS_CONSTANTS.DEFAULT_SECRET_PREFIX);
|
|
20
|
+
}
|
|
21
|
+
throw new Error(`Unknown cloud provider: "${cloud.provider}". Supported providers: cloud-run, ecs`);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create the local filesystem backend.
|
|
25
|
+
*/
|
|
26
|
+
export function createLocalBackend() {
|
|
27
|
+
return new FilesystemBackend();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/shared/remote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,KAAkB;IACnE,IAAI,KAAK,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxE,OAAO,IAAI,0BAA0B,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACrH,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,EAAE,wBAAwB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtE,OAAO,IAAI,wBAAwB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,IAAI,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACrH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,QAAQ,wCAAwC,CAAC,CAAC;AACtG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACjC,CAAC"}
|
package/dist/tui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAuC,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAuC,MAAM,qBAAqB,CAAC;AAyI9F,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,aAAa,EAAE,EAAE;IAAE,aAAa,EAAE,aAAa,CAAA;CAAE,2CAqC9E"}
|
package/dist/tui/App.js
CHANGED
|
@@ -42,12 +42,21 @@ function formatTime(date) {
|
|
|
42
42
|
function Header({ info, agentCount }) {
|
|
43
43
|
if (!info)
|
|
44
44
|
return null;
|
|
45
|
-
const
|
|
46
|
-
|
|
45
|
+
const isCloud = info.mode === "docker" && info.runtime && info.runtime !== "local";
|
|
46
|
+
const runtimeLabels = {
|
|
47
|
+
"cloud-run": "Cloud Run mode",
|
|
48
|
+
"ecs": "ECS Fargate mode",
|
|
49
|
+
};
|
|
50
|
+
const modeLabel = info.mode === "host"
|
|
51
|
+
? "Host mode"
|
|
52
|
+
: isCloud
|
|
53
|
+
? runtimeLabels[info.runtime] || "Cloud mode"
|
|
54
|
+
: "Docker mode";
|
|
55
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: ["Action Llama (", modeLabel, ") \u2014 ", agentCount, " agent", agentCount !== 1 ? "s" : "", ", ", info.cronJobCount, " cron job", info.cronJobCount !== 1 ? "s" : ""] }), _jsxs(Text, { dimColor: true, children: [info.gatewayPort ? `Gateway: :${info.gatewayPort}` : "", info.gatewayPort && info.webhooksActive ? " | " : "", info.webhooksActive ? "Webhooks: active" : ""] }), info.webhookUrls.map((url, i) => (_jsxs(Text, { dimColor: true, children: [" ", url] }, i))), isCloud ? (_jsx(Text, { color: "yellow", children: "Logs may be delayed ~10s (Cloud Logging ingestion)" })) : null, _jsx(Text, { dimColor: true, children: "─".repeat(50) })] }));
|
|
47
56
|
}
|
|
48
57
|
function AgentRow({ agent }) {
|
|
49
|
-
const stateColor = agent.state === "running" ? "green" : agent.state === "error" ? "red" : "white";
|
|
50
|
-
const stateLabel = agent.state === "running" ? "Running" : agent.state === "error" ? "Error" : "Idle";
|
|
58
|
+
const stateColor = agent.state === "running" ? "green" : agent.state === "building" ? "yellow" : agent.state === "error" ? "red" : "white";
|
|
59
|
+
const stateLabel = agent.state === "running" ? "Running" : agent.state === "building" ? "Building" : agent.state === "error" ? "Error" : "Idle";
|
|
51
60
|
// Show status text, or last error for error state
|
|
52
61
|
const detail = agent.statusText
|
|
53
62
|
? `"${agent.statusText}"`
|
package/dist/tui/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACxC,OAAO,GAAG,MAAM,OAAO,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,EAAiB;IACvC,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,GAAG,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;IACxB,OAAO,GAAG,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,IAAiB;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3C,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,OAAO,GAAG,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,IAAU;IAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAsD;IACtF,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain-logger.d.ts","sourceRoot":"","sources":["../../src/tui/plain-logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CA4EtF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export function attachPlainLogger(statusTracker) {
|
|
2
|
+
const prevStates = new Map();
|
|
3
|
+
const onUpdate = () => {
|
|
4
|
+
const info = statusTracker.getSchedulerInfo();
|
|
5
|
+
const agents = statusTracker.getAllAgents();
|
|
6
|
+
for (const agent of agents) {
|
|
7
|
+
const key = stateKey(agent);
|
|
8
|
+
if (prevStates.get(agent.name) === key)
|
|
9
|
+
continue;
|
|
10
|
+
prevStates.set(agent.name, key);
|
|
11
|
+
const ts = new Date().toISOString();
|
|
12
|
+
switch (agent.state) {
|
|
13
|
+
case "building":
|
|
14
|
+
log(ts, agent.name, "building" + (agent.statusText ? `: ${agent.statusText}` : ""));
|
|
15
|
+
break;
|
|
16
|
+
case "running":
|
|
17
|
+
log(ts, agent.name, "running" + (agent.statusText ? `: ${agent.statusText}` : ""));
|
|
18
|
+
break;
|
|
19
|
+
case "error":
|
|
20
|
+
log(ts, agent.name, `error: ${agent.lastError ?? "unknown"}`);
|
|
21
|
+
break;
|
|
22
|
+
case "idle": {
|
|
23
|
+
if (agent.lastRunAt) {
|
|
24
|
+
const dur = agent.lastRunDuration != null ? ` (${(agent.lastRunDuration / 1000).toFixed(1)}s)` : "";
|
|
25
|
+
log(ts, agent.name, `completed${dur}`);
|
|
26
|
+
}
|
|
27
|
+
if (agent.nextRunAt) {
|
|
28
|
+
log(ts, agent.name, `next run: ${agent.nextRunAt.toISOString()}`);
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Print any new log lines
|
|
35
|
+
const logs = statusTracker.getRecentLogs(1);
|
|
36
|
+
if (logs.length > 0) {
|
|
37
|
+
const line = logs[logs.length - 1];
|
|
38
|
+
const lineKey = `${line.timestamp.getTime()}:${line.agent}:${line.message}`;
|
|
39
|
+
if (lastLogKey !== lineKey) {
|
|
40
|
+
lastLogKey = lineKey;
|
|
41
|
+
log(line.timestamp.toISOString(), line.agent, line.message);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
let lastLogKey = "";
|
|
46
|
+
// Log scheduler info once on first update
|
|
47
|
+
let schedulerLogged = false;
|
|
48
|
+
const onSchedulerInfo = () => {
|
|
49
|
+
if (schedulerLogged)
|
|
50
|
+
return;
|
|
51
|
+
const info = statusTracker.getSchedulerInfo();
|
|
52
|
+
if (!info)
|
|
53
|
+
return;
|
|
54
|
+
schedulerLogged = true;
|
|
55
|
+
const parts = [`mode=${info.mode}`];
|
|
56
|
+
if (info.runtime)
|
|
57
|
+
parts.push(`runtime=${info.runtime}`);
|
|
58
|
+
if (info.gatewayPort)
|
|
59
|
+
parts.push(`gateway=:${info.gatewayPort}`);
|
|
60
|
+
parts.push(`cron_jobs=${info.cronJobCount}`);
|
|
61
|
+
if (info.webhooksActive)
|
|
62
|
+
parts.push(`webhooks=active`);
|
|
63
|
+
console.log(`[${new Date().toISOString()}] scheduler started (${parts.join(", ")})`);
|
|
64
|
+
};
|
|
65
|
+
const handler = () => {
|
|
66
|
+
onSchedulerInfo();
|
|
67
|
+
onUpdate();
|
|
68
|
+
};
|
|
69
|
+
statusTracker.on("update", handler);
|
|
70
|
+
return {
|
|
71
|
+
detach: () => statusTracker.removeListener("update", handler),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function stateKey(agent) {
|
|
75
|
+
return `${agent.state}|${agent.statusText}|${agent.lastError}|${agent.lastRunAt?.getTime()}|${agent.lastRunDuration}`;
|
|
76
|
+
}
|
|
77
|
+
function log(ts, agent, msg) {
|
|
78
|
+
console.log(`[${ts}] ${agent}: ${msg}`);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=plain-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain-logger.js","sourceRoot":"","sources":["../../src/tui/plain-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "events";
|
|
2
2
|
export interface AgentStatus {
|
|
3
3
|
name: string;
|
|
4
|
-
state: "idle" | "running" | "error";
|
|
4
|
+
state: "idle" | "running" | "building" | "error";
|
|
5
5
|
statusText: string | null;
|
|
6
6
|
lastError: string | null;
|
|
7
7
|
lastRunAt: Date | null;
|
|
@@ -10,6 +10,7 @@ export interface AgentStatus {
|
|
|
10
10
|
}
|
|
11
11
|
export interface SchedulerInfo {
|
|
12
12
|
mode: "docker" | "host";
|
|
13
|
+
runtime?: "local" | "cloud-run" | "ecs";
|
|
13
14
|
gatewayPort: number | null;
|
|
14
15
|
cronJobCount: number;
|
|
15
16
|
webhooksActive: boolean;
|
|
@@ -27,7 +28,7 @@ export declare class StatusTracker extends EventEmitter {
|
|
|
27
28
|
private recentLogs;
|
|
28
29
|
private maxLogs;
|
|
29
30
|
registerAgent(name: string): void;
|
|
30
|
-
setAgentState(name: string, state: "idle" | "running" | "error"): void;
|
|
31
|
+
setAgentState(name: string, state: "idle" | "running" | "building" | "error"): void;
|
|
31
32
|
setAgentStatusText(name: string, text: string): void;
|
|
32
33
|
setAgentError(name: string, error: string): void;
|
|
33
34
|
completeRun(name: string, durationMs: number, error?: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-tracker.d.ts","sourceRoot":"","sources":["../../src/tui/status-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"status-tracker.d.ts","sourceRoot":"","sources":["../../src/tui/status-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IACjD,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC;IACxC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,OAAO,CAAO;IAEtB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAajC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI;IAWnF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAOpD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOhD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAanE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAOxD,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAK3C,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhD,YAAY,IAAI,WAAW,EAAE;IAI7B,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAIxC,aAAa,CAAC,CAAC,SAAK,GAAG,OAAO,EAAE;CAGjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-tracker.js","sourceRoot":"","sources":["../../src/tui/status-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"status-tracker.js","sourceRoot":"","sources":["../../src/tui/status-tracker.ts"],"names":[],"mappings":"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"}
|