@action-llama/action-llama 0.18.5 → 0.18.6
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/dist/agents/container-runner.d.ts +2 -2
- package/dist/agents/container-runner.d.ts.map +1 -1
- package/dist/agents/container-runner.js.map +1 -1
- package/dist/agents/credential-setup.d.ts.map +1 -1
- package/dist/agents/credential-setup.js +8 -3
- package/dist/agents/credential-setup.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/chat/container-launcher.d.ts +2 -2
- package/dist/chat/container-launcher.d.ts.map +1 -1
- package/dist/chat/container-launcher.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +116 -7
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/run-agent.d.ts +14 -0
- package/dist/cli/commands/run-agent.d.ts.map +1 -0
- package/dist/cli/commands/run-agent.js +344 -0
- package/dist/cli/commands/run-agent.js.map +1 -0
- package/dist/cli/main.js +10 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cloud/provider.d.ts +5 -5
- package/dist/cloud/provider.d.ts.map +1 -1
- package/dist/cloud/vps/provider.d.ts +3 -3
- package/dist/cloud/vps/provider.d.ts.map +1 -1
- package/dist/credentials/builtins/index.d.ts.map +1 -1
- package/dist/credentials/builtins/index.js +4 -2
- package/dist/credentials/builtins/index.js.map +1 -1
- package/dist/credentials/builtins/x-twitter-api.d.ts.map +1 -1
- package/dist/credentials/builtins/x-twitter-api.js +7 -11
- package/dist/credentials/builtins/x-twitter-api.js.map +1 -1
- package/dist/credentials/builtins/x-twitter-user-oauth1.d.ts +4 -0
- package/dist/credentials/builtins/x-twitter-user-oauth1.d.ts.map +1 -0
- package/dist/credentials/builtins/x-twitter-user-oauth1.js +17 -0
- package/dist/credentials/builtins/x-twitter-user-oauth1.js.map +1 -0
- package/dist/credentials/builtins/x-twitter-user-oauth2.d.ts +4 -0
- package/dist/credentials/builtins/x-twitter-user-oauth2.d.ts.map +1 -0
- package/dist/credentials/builtins/x-twitter-user-oauth2.js +195 -0
- package/dist/credentials/builtins/x-twitter-user-oauth2.js.map +1 -0
- package/dist/credentials/prompter.d.ts.map +1 -1
- package/dist/credentials/prompter.js +38 -9
- package/dist/credentials/prompter.js.map +1 -1
- package/dist/credentials/schema.d.ts +1 -0
- package/dist/credentials/schema.d.ts.map +1 -1
- package/dist/docker/host-user-runtime.d.ts +35 -0
- package/dist/docker/host-user-runtime.d.ts.map +1 -0
- package/dist/docker/host-user-runtime.js +292 -0
- package/dist/docker/host-user-runtime.js.map +1 -0
- package/dist/docker/local-runtime.d.ts +2 -2
- package/dist/docker/local-runtime.d.ts.map +1 -1
- package/dist/docker/runtime.d.ts +34 -24
- package/dist/docker/runtime.d.ts.map +1 -1
- package/dist/docker/runtime.js +4 -1
- package/dist/docker/runtime.js.map +1 -1
- package/dist/docker/ssh-docker-runtime.d.ts +2 -2
- package/dist/docker/ssh-docker-runtime.d.ts.map +1 -1
- package/dist/docker/ssh-docker-runtime.js.map +1 -1
- package/dist/events/webhook-setup.d.ts +10 -0
- package/dist/events/webhook-setup.d.ts.map +1 -1
- package/dist/events/webhook-setup.js +58 -17
- package/dist/events/webhook-setup.js.map +1 -1
- package/dist/execution/image-builder.d.ts +3 -3
- package/dist/execution/image-builder.d.ts.map +1 -1
- package/dist/execution/runner-setup.d.ts +3 -3
- package/dist/execution/runner-setup.d.ts.map +1 -1
- package/dist/execution/runtime-factory.d.ts +7 -6
- package/dist/execution/runtime-factory.d.ts.map +1 -1
- package/dist/execution/runtime-factory.js +18 -3
- package/dist/execution/runtime-factory.js.map +1 -1
- package/dist/extensions/types.d.ts +2 -2
- package/dist/extensions/types.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.d.ts +2 -2
- package/dist/scheduler/gateway-setup.d.ts.map +1 -1
- package/dist/scheduler/gateway-setup.js.map +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +11 -7
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/watcher.d.ts +3 -3
- package/dist/scheduler/watcher.d.ts.map +1 -1
- package/dist/scheduler/watcher.js +35 -26
- package/dist/scheduler/watcher.js.map +1 -1
- package/dist/setup/validators.d.ts +1 -5
- package/dist/setup/validators.d.ts.map +1 -1
- package/dist/setup/validators.js +4 -7
- package/dist/setup/validators.js.map +1 -1
- package/dist/shared/config.d.ts +11 -0
- package/dist/shared/config.d.ts.map +1 -1
- package/dist/shared/config.js +1 -0
- package/dist/shared/config.js.map +1 -1
- package/dist/shared/credential-refs.d.ts.map +1 -1
- package/dist/shared/credential-refs.js +15 -9
- package/dist/shared/credential-refs.js.map +1 -1
- package/dist/shared/oauth1.d.ts +17 -0
- package/dist/shared/oauth1.d.ts.map +1 -0
- package/dist/shared/oauth1.js +45 -0
- package/dist/shared/oauth1.js.map +1 -0
- package/dist/shared/validation.d.ts.map +1 -1
- package/dist/shared/validation.js +6 -1
- package/dist/shared/validation.js.map +1 -1
- package/dist/webhooks/definitions/twitter.js +1 -1
- package/dist/webhooks/definitions/twitter.js.map +1 -1
- package/dist/webhooks/providers/index.d.ts.map +1 -1
- package/dist/webhooks/providers/index.js +29 -5
- package/dist/webhooks/providers/index.js.map +1 -1
- package/dist/webhooks/providers/twitter-subscribe.d.ts +26 -0
- package/dist/webhooks/providers/twitter-subscribe.d.ts.map +1 -0
- package/dist/webhooks/providers/twitter-subscribe.js +158 -0
- package/dist/webhooks/providers/twitter-subscribe.js.map +1 -0
- package/dist/webhooks/providers/twitter.d.ts.map +1 -1
- package/dist/webhooks/providers/twitter.js +17 -3
- package/dist/webhooks/providers/twitter.js.map +1 -1
- package/package.json +1 -1
- package/dist/credentials/builtins/x-twitter-webhook-secret.d.ts +0 -4
- package/dist/credentials/builtins/x-twitter-webhook-secret.d.ts.map +0 -1
- package/dist/credentials/builtins/x-twitter-webhook-secret.js +0 -12
- package/dist/credentials/builtins/x-twitter-webhook-secret.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x-twitter-api.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,GAAyB;IACxC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6BAA6B;IACpC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"x-twitter-api.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,WAAW,GAAyB;IACxC,EAAE,EAAE,eAAe;IACnB,KAAK,EAAE,6BAA6B;IACpC,WAAW,EAAE,6DAA6D;IAC1E,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,iDAAiD,EAAE,MAAM,EAAE,IAAI,EAAE;QAC7H,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,oDAAoD,EAAE,MAAM,EAAE,IAAI,EAAE;QACtI,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,uDAAuD,EAAE,MAAM,EAAE,IAAI,EAAE;KACpI;IACD,OAAO,EAAE;QACP,YAAY,EAAE,gBAAgB;QAC9B,eAAe,EAAE,mBAAmB;QACpC,YAAY,EAAE,gBAAgB;KAC/B;IACD,YAAY,EAAE,iFAAiF;IAE/F,KAAK,CAAC,QAAQ,CAAC,MAAM;QACnB,MAAM,qBAAqB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-twitter-user-oauth1.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,QAAA,MAAM,kBAAkB,EAAE,oBAczB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const xTwitterUserOauth1 = {
|
|
2
|
+
id: "x_twitter_user_oauth1",
|
|
3
|
+
label: "X (Twitter) User OAuth 1.0a Tokens",
|
|
4
|
+
description: "OAuth 1.0a user-context tokens for a bot account (required for Account Activity API subscriptions)",
|
|
5
|
+
helpUrl: "https://developer.x.com/en/portal/dashboard",
|
|
6
|
+
fields: [
|
|
7
|
+
{ name: "access_token", label: "Access Token", description: "OAuth 1.0a Access Token from the bot user's 'Keys and tokens' tab", secret: true },
|
|
8
|
+
{ name: "access_token_secret", label: "Access Token Secret", description: "OAuth 1.0a Access Token Secret from the bot user's 'Keys and tokens' tab", secret: true },
|
|
9
|
+
],
|
|
10
|
+
envVars: {
|
|
11
|
+
access_token: "X_ACCESS_TOKEN",
|
|
12
|
+
access_token_secret: "X_ACCESS_TOKEN_SECRET",
|
|
13
|
+
},
|
|
14
|
+
agentContext: "`X_ACCESS_TOKEN`, `X_ACCESS_TOKEN_SECRET` — OAuth 1.0a user-context auth for X API (Account Activity API)",
|
|
15
|
+
};
|
|
16
|
+
export default xTwitterUserOauth1;
|
|
17
|
+
//# sourceMappingURL=x-twitter-user-oauth1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-twitter-user-oauth1.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth1.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAyB;IAC/C,EAAE,EAAE,uBAAuB;IAC3B,KAAK,EAAE,oCAAoC;IAC3C,WAAW,EAAE,oGAAoG;IACjH,OAAO,EAAE,6CAA6C;IACtD,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,mEAAmE,EAAE,MAAM,EAAE,IAAI,EAAE;QAC/I,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,0EAA0E,EAAE,MAAM,EAAE,IAAI,EAAE;KACrK;IACD,OAAO,EAAE;QACP,YAAY,EAAE,gBAAgB;QAC9B,mBAAmB,EAAE,uBAAuB;KAC7C;IACD,YAAY,EAAE,2GAA2G;CAC1H,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-twitter-user-oauth2.d.ts","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth2.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAqJzD,QAAA,MAAM,kBAAkB,EAAE,oBAiEzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "crypto";
|
|
2
|
+
import { createServer } from "http";
|
|
3
|
+
import { password, confirm } from "@inquirer/prompts";
|
|
4
|
+
/** Scopes required for Account Activity API subscriptions and DMs */
|
|
5
|
+
const OAUTH2_SCOPES = "dm.read dm.write tweet.read users.read offline.access";
|
|
6
|
+
const AUTHORIZE_URL = "https://x.com/i/oauth2/authorize";
|
|
7
|
+
const TOKEN_URL = "https://api.x.com/2/oauth2/token";
|
|
8
|
+
/** Fixed port for the OAuth callback server — must match the redirect URI registered in the X console */
|
|
9
|
+
const CALLBACK_PORT = 3829;
|
|
10
|
+
const CALLBACK_URI = `http://localhost:${CALLBACK_PORT}/callback`;
|
|
11
|
+
/**
|
|
12
|
+
* Run the OAuth 2.0 PKCE flow by starting a temporary local HTTP server,
|
|
13
|
+
* opening the browser for user authorization, and exchanging the code for tokens.
|
|
14
|
+
*/
|
|
15
|
+
async function runPkceFlow(clientId, clientSecret) {
|
|
16
|
+
// Generate PKCE code verifier and challenge
|
|
17
|
+
const codeVerifier = randomBytes(32).toString("base64url");
|
|
18
|
+
const codeChallenge = createHash("sha256").update(codeVerifier).digest("base64url");
|
|
19
|
+
const state = randomBytes(16).toString("hex");
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const connections = new Set();
|
|
22
|
+
const server = createServer((req, res) => {
|
|
23
|
+
const url = new URL(req.url ?? "/", "http://localhost");
|
|
24
|
+
if (url.pathname !== "/callback") {
|
|
25
|
+
res.writeHead(404);
|
|
26
|
+
res.end();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const code = url.searchParams.get("code");
|
|
30
|
+
const returnedState = url.searchParams.get("state");
|
|
31
|
+
const error = url.searchParams.get("error");
|
|
32
|
+
if (error) {
|
|
33
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
34
|
+
res.end("<html><body><h2>Authorization failed</h2><p>You can close this tab.</p></body></html>");
|
|
35
|
+
shutdown();
|
|
36
|
+
reject(new Error(`OAuth 2.0 authorization error: ${error}`));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!code || returnedState !== state) {
|
|
40
|
+
res.writeHead(400, { "Content-Type": "text/html" });
|
|
41
|
+
res.end("<html><body><h2>Invalid callback</h2><p>Missing code or state mismatch.</p></body></html>");
|
|
42
|
+
shutdown();
|
|
43
|
+
reject(new Error("OAuth 2.0 callback: missing code or state mismatch"));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
47
|
+
res.end("<html><body><h2>Authorization successful!</h2><p>You can close this tab and return to the terminal.</p></body></html>");
|
|
48
|
+
// Exchange authorization code for tokens (30-second deadline)
|
|
49
|
+
const basicAuth = Buffer.from(`${clientId}:${clientSecret}`).toString("base64");
|
|
50
|
+
fetch(TOKEN_URL, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
headers: {
|
|
53
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
54
|
+
Authorization: `Basic ${basicAuth}`,
|
|
55
|
+
},
|
|
56
|
+
body: new URLSearchParams({
|
|
57
|
+
grant_type: "authorization_code",
|
|
58
|
+
code,
|
|
59
|
+
redirect_uri: CALLBACK_URI,
|
|
60
|
+
code_verifier: codeVerifier,
|
|
61
|
+
}),
|
|
62
|
+
})
|
|
63
|
+
.then(async (tokenRes) => {
|
|
64
|
+
if (!tokenRes.ok) {
|
|
65
|
+
const body = await tokenRes.text();
|
|
66
|
+
throw new Error(`Token exchange failed (${tokenRes.status}): ${body}`);
|
|
67
|
+
}
|
|
68
|
+
return tokenRes.json();
|
|
69
|
+
})
|
|
70
|
+
.then((data) => {
|
|
71
|
+
shutdown();
|
|
72
|
+
if (!data.access_token) {
|
|
73
|
+
reject(new Error("Token exchange response missing access_token"));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
resolve({
|
|
77
|
+
accessToken: data.access_token,
|
|
78
|
+
refreshToken: data.refresh_token ?? "",
|
|
79
|
+
});
|
|
80
|
+
})
|
|
81
|
+
.catch((err) => {
|
|
82
|
+
shutdown();
|
|
83
|
+
reject(err);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
server.on("connection", (sock) => {
|
|
87
|
+
connections.add(sock);
|
|
88
|
+
sock.on("close", () => connections.delete(sock));
|
|
89
|
+
});
|
|
90
|
+
function shutdown() {
|
|
91
|
+
for (const sock of connections)
|
|
92
|
+
sock.destroy();
|
|
93
|
+
server.close();
|
|
94
|
+
}
|
|
95
|
+
server.listen(CALLBACK_PORT, "127.0.0.1", () => {
|
|
96
|
+
const params = new URLSearchParams({
|
|
97
|
+
response_type: "code",
|
|
98
|
+
client_id: clientId,
|
|
99
|
+
redirect_uri: CALLBACK_URI,
|
|
100
|
+
scope: OAUTH2_SCOPES,
|
|
101
|
+
state,
|
|
102
|
+
code_challenge: codeChallenge,
|
|
103
|
+
code_challenge_method: "S256",
|
|
104
|
+
});
|
|
105
|
+
const authUrl = `${AUTHORIZE_URL}?${params}`;
|
|
106
|
+
console.log(`\n Opening browser for X authorization...`);
|
|
107
|
+
console.log(` If it doesn't open, visit:\n ${authUrl}\n`);
|
|
108
|
+
// Open browser (best-effort)
|
|
109
|
+
import("child_process").then(({ exec }) => {
|
|
110
|
+
const cmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
111
|
+
exec(`${cmd} "${authUrl}"`);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
// Timeout after 2 minutes
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
shutdown();
|
|
117
|
+
reject(new Error("OAuth 2.0 authorization timed out (2 minutes)"));
|
|
118
|
+
}, 120_000);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** Validate the access token by calling the /2/users/me endpoint */
|
|
122
|
+
async function validateAccessToken(accessToken) {
|
|
123
|
+
const res = await fetch("https://api.x.com/2/users/me", {
|
|
124
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
125
|
+
});
|
|
126
|
+
if (!res.ok) {
|
|
127
|
+
const body = await res.text();
|
|
128
|
+
throw new Error(`X OAuth 2.0 token validation failed (${res.status}): ${body}`);
|
|
129
|
+
}
|
|
130
|
+
const data = (await res.json());
|
|
131
|
+
if (data.data?.username) {
|
|
132
|
+
console.log(` Authenticated as @${data.data.username}`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const xTwitterUserOauth2 = {
|
|
136
|
+
id: "x_twitter_user_oauth2",
|
|
137
|
+
label: "X (Twitter) User OAuth 2.0 Credentials",
|
|
138
|
+
description: "OAuth 2.0 PKCE credentials for user-context authentication (DMs, tweets, Account Activity subscriptions)",
|
|
139
|
+
helpUrl: "https://developer.x.com/en/portal/dashboard",
|
|
140
|
+
fields: [
|
|
141
|
+
{ name: "client_id", label: "Client ID", description: "OAuth 2.0 Client ID from the 'Keys and tokens' tab in the X Developer Portal", secret: true },
|
|
142
|
+
{ name: "client_secret", label: "Client Secret", description: "OAuth 2.0 Client Secret from the 'Keys and tokens' tab in the X Developer Portal", secret: true },
|
|
143
|
+
{ name: "access_token", label: "Access Token", description: "OAuth 2.0 user access token (obtained via PKCE flow)", secret: true },
|
|
144
|
+
{ name: "refresh_token", label: "Refresh Token", description: "OAuth 2.0 refresh token for obtaining new access tokens", secret: true },
|
|
145
|
+
],
|
|
146
|
+
envVars: {
|
|
147
|
+
client_id: "X_OAUTH2_CLIENT_ID",
|
|
148
|
+
client_secret: "X_OAUTH2_CLIENT_SECRET",
|
|
149
|
+
access_token: "X_OAUTH2_ACCESS_TOKEN",
|
|
150
|
+
refresh_token: "X_OAUTH2_REFRESH_TOKEN",
|
|
151
|
+
},
|
|
152
|
+
agentContext: "`X_OAUTH2_ACCESS_TOKEN`, `X_OAUTH2_REFRESH_TOKEN`, `X_OAUTH2_CLIENT_ID`, `X_OAUTH2_CLIENT_SECRET` — OAuth 2.0 user-context auth for X API v2 (DMs, tweets, Account Activity subscriptions)",
|
|
153
|
+
async prompt(existing) {
|
|
154
|
+
if (existing?.access_token && existing?.client_id) {
|
|
155
|
+
const reuse = await confirm({
|
|
156
|
+
message: "Found existing X OAuth 2.0 credentials. Use them?",
|
|
157
|
+
default: true,
|
|
158
|
+
});
|
|
159
|
+
if (reuse)
|
|
160
|
+
return { values: existing };
|
|
161
|
+
}
|
|
162
|
+
console.log(`\n X (Twitter) User OAuth 2.0 Credentials`);
|
|
163
|
+
console.log(` OAuth 2.0 PKCE flow for user-context auth (DMs, Account Activity subscriptions)`);
|
|
164
|
+
console.log(` → https://developer.x.com/en/portal/dashboard\n`);
|
|
165
|
+
console.log(` Add this exact Callback URI in your app's OAuth 2.0 settings:`);
|
|
166
|
+
console.log(` ${CALLBACK_URI}\n`);
|
|
167
|
+
const clientId = await password({
|
|
168
|
+
message: "X OAuth 2.0 — Client ID:",
|
|
169
|
+
mask: "*",
|
|
170
|
+
validate: (v) => (v.trim().length > 0 ? true : "Client ID is required"),
|
|
171
|
+
});
|
|
172
|
+
const clientSecret = await password({
|
|
173
|
+
message: "X OAuth 2.0 — Client Secret:",
|
|
174
|
+
mask: "*",
|
|
175
|
+
validate: (v) => (v.trim().length > 0 ? true : "Client Secret is required"),
|
|
176
|
+
});
|
|
177
|
+
console.log(`\n Starting OAuth 2.0 PKCE flow to obtain user access token...`);
|
|
178
|
+
console.log(` Requested scopes: ${OAUTH2_SCOPES}\n`);
|
|
179
|
+
const { accessToken, refreshToken } = await runPkceFlow(clientId.trim(), clientSecret.trim());
|
|
180
|
+
return {
|
|
181
|
+
values: {
|
|
182
|
+
client_id: clientId.trim(),
|
|
183
|
+
client_secret: clientSecret.trim(),
|
|
184
|
+
access_token: accessToken,
|
|
185
|
+
refresh_token: refreshToken,
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
},
|
|
189
|
+
async validate(values) {
|
|
190
|
+
await validateAccessToken(values.access_token);
|
|
191
|
+
return true;
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
export default xTwitterUserOauth2;
|
|
195
|
+
//# sourceMappingURL=x-twitter-user-oauth2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x-twitter-user-oauth2.js","sourceRoot":"","sources":["../../../src/credentials/builtins/x-twitter-user-oauth2.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompter.d.ts","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAUhF;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,oBAAoB,EACzB,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"prompter.d.ts","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAUhF;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,oBAAoB,EACzB,QAAQ,GAAE,MAAkB,GAC3B,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAwE7C"}
|
|
@@ -25,12 +25,37 @@ export async function promptCredential(def, instance = "default") {
|
|
|
25
25
|
}
|
|
26
26
|
// Default field-by-field prompting
|
|
27
27
|
if (existing) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
// Check for missing optional fields that were added after initial setup
|
|
29
|
+
const missingOptional = def.fields.filter((f) => f.optional && !(f.name in existing));
|
|
30
|
+
if (missingOptional.length === 0) {
|
|
31
|
+
const reuse = await confirm({
|
|
32
|
+
message: `Found existing ${def.label}. Use it?`,
|
|
33
|
+
default: true,
|
|
34
|
+
});
|
|
35
|
+
if (reuse)
|
|
36
|
+
return { values: existing };
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const reuse = await confirm({
|
|
40
|
+
message: `Found existing ${def.label} (${missingOptional.length} new optional field${missingOptional.length > 1 ? "s" : ""} available). Keep existing and add new fields?`,
|
|
41
|
+
default: true,
|
|
42
|
+
});
|
|
43
|
+
if (reuse) {
|
|
44
|
+
const values = { ...existing };
|
|
45
|
+
console.log();
|
|
46
|
+
for (const field of missingOptional) {
|
|
47
|
+
const prompt = field.secret ? password : input;
|
|
48
|
+
const value = await prompt({
|
|
49
|
+
message: `${def.label} — ${field.label} (optional):`,
|
|
50
|
+
mask: field.secret ? "*" : undefined,
|
|
51
|
+
});
|
|
52
|
+
if (value.trim()) {
|
|
53
|
+
values[field.name] = value.trim();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { values };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
34
59
|
}
|
|
35
60
|
// Show context
|
|
36
61
|
console.log(`\n ${def.label}: ${def.description}`);
|
|
@@ -42,11 +67,15 @@ export async function promptCredential(def, instance = "default") {
|
|
|
42
67
|
for (const field of def.fields) {
|
|
43
68
|
const prompt = field.secret ? password : input;
|
|
44
69
|
const value = await prompt({
|
|
45
|
-
message: `${def.label} — ${field.label}:`,
|
|
70
|
+
message: `${def.label} — ${field.label}${field.optional ? " (optional)" : ""}:`,
|
|
46
71
|
mask: field.secret ? "*" : undefined,
|
|
47
|
-
validate:
|
|
72
|
+
validate: field.optional
|
|
73
|
+
? undefined
|
|
74
|
+
: (v) => (v.trim().length > 0 ? true : `${field.label} is required`),
|
|
48
75
|
});
|
|
49
|
-
|
|
76
|
+
if (value.trim()) {
|
|
77
|
+
values[field.name] = value.trim();
|
|
78
|
+
}
|
|
50
79
|
}
|
|
51
80
|
// Validate if validator is defined
|
|
52
81
|
if (def.validate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompter.js","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,GAAyB,EAAE,QAAgB;IAC3E,OAAO,MAAM,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAyB,EACzB,WAAmB,SAAS;IAE5B,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,mCAAmC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"prompter.js","sourceRoot":"","sources":["../../src/credentials/prompter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/credentials/schema.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/credentials/schema.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,MAAM,EAAE,eAAe,EAAE,CAAC;IAG1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAKjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAKhE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;CAC7F"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HostUserRuntime — runs agents as a separate OS user via `sudo -u`.
|
|
3
|
+
*
|
|
4
|
+
* Provides lightweight isolation without Docker:
|
|
5
|
+
* - Agent process runs as a dedicated OS user (can't access operator credentials)
|
|
6
|
+
* - Credentials staged to a temp dir, path passed via AL_CREDENTIALS_PATH
|
|
7
|
+
* - Working directory: /tmp/al-runs/<instance-id>/ (chowned to agent user)
|
|
8
|
+
* - Logs written to /tmp/al-runs/<instance-id>.log (owned by scheduler)
|
|
9
|
+
* - No image builds, no containers, no Docker dependency
|
|
10
|
+
*/
|
|
11
|
+
import type { Runtime, RuntimeLaunchOpts, RuntimeCredentials, RunningAgent } from "./runtime.js";
|
|
12
|
+
export declare class HostUserRuntime implements Runtime {
|
|
13
|
+
readonly needsGateway = false;
|
|
14
|
+
private runAs;
|
|
15
|
+
private processes;
|
|
16
|
+
private runAgentNames;
|
|
17
|
+
constructor(runAs?: string);
|
|
18
|
+
isAgentRunning(agentName: string): Promise<boolean>;
|
|
19
|
+
listRunningAgents(): Promise<RunningAgent[]>;
|
|
20
|
+
prepareCredentials(credRefs: string[]): Promise<RuntimeCredentials>;
|
|
21
|
+
cleanupCredentials(creds: RuntimeCredentials): void;
|
|
22
|
+
launch(opts: RuntimeLaunchOpts): Promise<string>;
|
|
23
|
+
streamLogs(runId: string, onLine: (line: string) => void, onStderr?: (text: string) => void): {
|
|
24
|
+
stop: () => void;
|
|
25
|
+
};
|
|
26
|
+
waitForExit(runId: string, timeoutSeconds: number): Promise<number>;
|
|
27
|
+
kill(runId: string): Promise<void>;
|
|
28
|
+
remove(runId: string): Promise<void>;
|
|
29
|
+
fetchLogs(agentName: string, limit: number): Promise<string[]>;
|
|
30
|
+
followLogs(_agentName: string, _onLine: (line: string) => void, _onStderr?: (text: string) => void): {
|
|
31
|
+
stop: () => void;
|
|
32
|
+
};
|
|
33
|
+
getTaskUrl(): string | null;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=host-user-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host-user-runtime.d.ts","sourceRoot":"","sources":["../../src/docker/host-user-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EACV,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAC5B,YAAY,EAC/B,MAAM,cAAc,CAAC;AAkCtB,qBAAa,eAAgB,YAAW,OAAO;IAC7C,QAAQ,CAAC,YAAY,SAAS;IAE9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,aAAa,CAA6B;gBAEtC,KAAK,GAAE,MAAmB;IAIhC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAe5C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoDzE,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAM7C,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IA6DtD,UAAU,CACR,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;IA4BvB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+B7D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQpC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpE,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC/B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GACjC;QAAE,IAAI,EAAE,MAAM,IAAI,CAAA;KAAE;IAKvB,UAAU,IAAI,MAAM,GAAG,IAAI;CAG5B"}
|