agentscale 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ export declare function deploy(options: {
2
+ name?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAQA,wBAAsB,MAAM,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCtE"}
@@ -0,0 +1,40 @@
1
+ import { execFile } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ import { API_URL, loadApiKey } from "../config.js";
4
+ const execFileAsync = promisify(execFile);
5
+ const EXCLUDE = ["node_modules", ".git", ".env", ".DS_Store", "dist"];
6
+ export async function deploy(options) {
7
+ const apiKey = loadApiKey();
8
+ if (!apiKey) {
9
+ console.log("No API key found. Run `agentscale register` to get an API key.");
10
+ process.exit(1);
11
+ }
12
+ console.log("Packaging project...");
13
+ const excludeArgs = EXCLUDE.flatMap((e) => ["--exclude", e]);
14
+ const { stdout: tarBuffer } = await execFileAsync("tar", ["czf", "-", ...excludeArgs, "."], { cwd: process.cwd(), encoding: "buffer", maxBuffer: 100 * 1024 * 1024 });
15
+ let url = `${API_URL}/deploy`;
16
+ if (options.name) {
17
+ url += `?name=${encodeURIComponent(options.name)}`;
18
+ }
19
+ console.log(`Uploading tarball (${(tarBuffer.length / 1024).toFixed(1)} KB)...`);
20
+ const res = await fetch(url, {
21
+ method: "POST",
22
+ headers: {
23
+ "x-api-key": apiKey,
24
+ "content-type": "application/gzip"
25
+ },
26
+ body: tarBuffer
27
+ });
28
+ const data = await res.json();
29
+ if (!res.ok) {
30
+ console.error("Deploy failed:", data.error);
31
+ process.exit(1);
32
+ }
33
+ console.log("Deployed to service:", data.service);
34
+ if (data.expires_at) {
35
+ console.log("Free tier: service will expire in 1 hour. Add credits for permanent deploys.");
36
+ }
37
+ if (data.stdout)
38
+ console.log(data.stdout);
39
+ }
40
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA0B;IACrD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,aAAa,CAC/C,KAAK,EACL,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,EAAE,GAAG,CAAC,EACjC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,CACzE,CAAC;IAEF,IAAI,GAAG,GAAG,GAAG,OAAO,SAAS,CAAC;IAC9B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,IAAI,SAAS,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,WAAW,EAAE,MAAM;YACnB,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function list(): Promise<void>;
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAEA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B1C"}
@@ -0,0 +1,30 @@
1
+ import { API_URL, loadApiKey } from "../config.js";
2
+ export async function list() {
3
+ const apiKey = loadApiKey();
4
+ if (!apiKey) {
5
+ console.log("No API key found. Run `agentscale register` first.");
6
+ process.exit(1);
7
+ }
8
+ const res = await fetch(`${API_URL}/list`, {
9
+ headers: { "x-api-key": apiKey }
10
+ });
11
+ const data = await res.json();
12
+ if (!res.ok) {
13
+ console.error("Failed to list services:", data.error);
14
+ process.exit(1);
15
+ }
16
+ if (data.services.length === 0) {
17
+ console.log("No services yet. Run `agentscale deploy` to create one.");
18
+ return;
19
+ }
20
+ console.log("Your services:");
21
+ for (const svc of data.services) {
22
+ let info = svc.status;
23
+ if (svc.status === "running" && svc.expires_at) {
24
+ const mins = Math.max(0, Math.round((new Date(svc.expires_at).getTime() - Date.now()) / 60000));
25
+ info = `expires in ${mins}m`;
26
+ }
27
+ console.log(` ${svc.name} [${info}] (created ${new Date(svc.created_at).toLocaleDateString()})`);
28
+ }
29
+ }
30
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,IAAI;IACxB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,OAAO,EAAE;QACzC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;KACjC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAChG,IAAI,GAAG,cAAc,IAAI,GAAG,CAAC;QAC/B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,IAAI,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACtG,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function register(): Promise<void>;
2
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAEA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAK9C"}
@@ -0,0 +1,8 @@
1
+ import { API_URL, saveApiKey } from "../config.js";
2
+ export async function register() {
3
+ const res = await fetch(`${API_URL}/register`, { method: "POST" });
4
+ const data = await res.json();
5
+ saveApiKey(data.apiKey);
6
+ console.log("API key saved to ~/.agentscale/config.json");
7
+ }
8
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,5 @@
1
+ import "dotenv/config";
2
+ export declare const API_URL: string;
3
+ export declare function saveApiKey(apiKey: string): void;
4
+ export declare function loadApiKey(): string | null;
5
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAKvB,eAAO,MAAM,OAAO,QAA4D,CAAC;AAKjF,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/C;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAO1C"}
package/dist/config.js ADDED
@@ -0,0 +1,21 @@
1
+ import "dotenv/config";
2
+ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
3
+ import path from "node:path";
4
+ import os from "node:os";
5
+ export const API_URL = process.env.AGENTSCALE_API_URL ?? "http://localhost:8790";
6
+ const CONFIG_DIR = path.join(os.homedir(), ".agentscale");
7
+ const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
8
+ export function saveApiKey(apiKey) {
9
+ mkdirSync(CONFIG_DIR, { recursive: true });
10
+ writeFileSync(CONFIG_FILE, JSON.stringify({ apiKey }));
11
+ }
12
+ export function loadApiKey() {
13
+ try {
14
+ const data = JSON.parse(readFileSync(CONFIG_FILE, "utf-8"));
15
+ return data.apiKey ?? null;
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,uBAAuB,CAAC;AAEjF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { register } from "./commands/register.js";
4
+ import { deploy } from "./commands/deploy.js";
5
+ import { list } from "./commands/list.js";
6
+ const program = new Command();
7
+ program.name("agentscale").description("AgentScale CLI").version("0.1.0");
8
+ program.command("register")
9
+ .description("Register and get an API key")
10
+ .action(register);
11
+ program.command("deploy")
12
+ .description("Deploy a service")
13
+ .option("--name <name>", "Service name (auto-generated if omitted)")
14
+ .action(deploy);
15
+ program.command("list")
16
+ .description("List your services")
17
+ .action(list);
18
+ program.parse();
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE1E,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;KACxB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEpB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;KACtB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,eAAe,EAAE,0CAA0C,CAAC;KACnE,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;KACpB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEhB,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "agentscale",
3
+ "version": "0.1.0",
4
+ "description": "Deploy services with AgentScale",
5
+ "type": "module",
6
+ "bin": {
7
+ "agentscale": "dist/index.js"
8
+ },
9
+ "files": ["dist"],
10
+ "scripts": {
11
+ "dev": "bun --watch src/index.ts",
12
+ "build": "tsc -p tsconfig.json",
13
+ "prepublishOnly": "npm run build",
14
+ "start": "node dist/index.js"
15
+ },
16
+ "dependencies": {
17
+ "commander": "^13.0.0",
18
+ "dotenv": "^17.3.1"
19
+ }
20
+ }