@framers/agentos-ext-cloud-flyio 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,54 @@
1
+ /**
2
+ * @fileoverview FlyCreateVolumeTool — create a persistent volume on Fly.io.
3
+ */
4
+ import type { FlyService, FlyVolume } from '../FlyService.js';
5
+ export interface FlyCreateVolumeInput {
6
+ appName: string;
7
+ name: string;
8
+ region: string;
9
+ sizeGb: number;
10
+ encrypted?: boolean;
11
+ }
12
+ export declare class FlyCreateVolumeTool {
13
+ private service;
14
+ readonly id = "flyCreateVolume";
15
+ readonly name = "flyCreateVolume";
16
+ readonly displayName = "Create Fly.io Volume";
17
+ readonly description = "Create a persistent volume for a Fly.io app. Volumes persist data across machine restarts and redeployments. Must be in the same region as the machine that mounts it. Encrypted by default.";
18
+ readonly category = "cloud";
19
+ readonly version = "0.1.0";
20
+ readonly hasSideEffects = true;
21
+ readonly inputSchema: {
22
+ type: "object";
23
+ properties: {
24
+ appName: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ name: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ region: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ sizeGb: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ encrypted: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ };
45
+ required: string[];
46
+ };
47
+ constructor(service: FlyService);
48
+ execute(args: FlyCreateVolumeInput): Promise<{
49
+ success: boolean;
50
+ data?: FlyVolume;
51
+ error?: string;
52
+ }>;
53
+ }
54
+ //# sourceMappingURL=createVolume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createVolume.d.ts","sourceRoot":"","sources":["../../src/tools/createVolume.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAqBlB,OAAO,CAAC,OAAO;IApB3B,QAAQ,CAAC,EAAE,qBAAqB;IAChC,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,0BAA0B;IAC9C,QAAQ,CAAC,WAAW,kMAAkM;IACtN,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;MAUlB;gBAEkB,OAAO,EAAE,UAAU;IAEjC,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAc3G"}
@@ -0,0 +1,43 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview FlyCreateVolumeTool — create a persistent volume on Fly.io.
4
+ */
5
+ export class FlyCreateVolumeTool {
6
+ service;
7
+ id = 'flyCreateVolume';
8
+ name = 'flyCreateVolume';
9
+ displayName = 'Create Fly.io Volume';
10
+ description = 'Create a persistent volume for a Fly.io app. Volumes persist data across machine restarts and redeployments. Must be in the same region as the machine that mounts it. Encrypted by default.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ appName: { type: 'string', description: 'Name of the Fly app to create the volume in' },
18
+ name: { type: 'string', description: 'Volume name (used in mount config, e.g. "data", "postgres_data")' },
19
+ region: { type: 'string', description: 'Region for the volume (must match the machine region, e.g. "iad", "lax", "cdg")' },
20
+ sizeGb: { type: 'number', description: 'Volume size in GB (minimum: 1)' },
21
+ encrypted: { type: 'boolean', description: 'Whether the volume should be encrypted (default: true)' },
22
+ },
23
+ required: ['appName', 'name', 'region', 'sizeGb'],
24
+ };
25
+ constructor(service) {
26
+ this.service = service;
27
+ }
28
+ async execute(args) {
29
+ try {
30
+ const volume = await this.service.createVolume(args.appName, {
31
+ name: args.name,
32
+ region: args.region,
33
+ sizeGb: args.sizeGb,
34
+ encrypted: args.encrypted,
35
+ });
36
+ return { success: true, data: volume };
37
+ }
38
+ catch (err) {
39
+ return { success: false, error: err.message };
40
+ }
41
+ }
42
+ }
43
+ //# sourceMappingURL=createVolume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createVolume.js","sourceRoot":"","sources":["../../src/tools/createVolume.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AAYH,MAAM,OAAO,mBAAmB;IAqBV;IApBX,EAAE,GAAG,iBAAiB,CAAC;IACvB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,sBAAsB,CAAC;IACrC,WAAW,GAAG,8LAA8L,CAAC;IAC7M,QAAQ,GAAG,OAAO,CAAC;IACnB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,IAAI,CAAC;IAEtB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;YACvF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kEAAkE,EAAE;YACzG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iFAAiF,EAAE;YAC1H,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;YACzE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,wDAAwD,EAAE;SACtG;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAClD,CAAC;IAEF,YAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAE3C,KAAK,CAAC,OAAO,CAAC,IAA0B;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE;gBAC3D,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @fileoverview FlyDeployAppTool — deploy an app on Fly.io by creating a machine with a config.
3
+ */
4
+ import type { FlyService, FlyMachine, FlyApp } from '../FlyService.js';
5
+ export interface FlyDeployAppInput {
6
+ appName: string;
7
+ image: string;
8
+ region?: string;
9
+ cpus?: number;
10
+ cpuKind?: string;
11
+ memoryMb?: number;
12
+ env?: Record<string, string>;
13
+ internalPort?: number;
14
+ autoDestroy?: boolean;
15
+ createApp?: boolean;
16
+ org?: string;
17
+ }
18
+ export declare class FlyDeployAppTool {
19
+ private service;
20
+ readonly id = "flyDeployApp";
21
+ readonly name = "flyDeployApp";
22
+ readonly displayName = "Deploy Fly.io App";
23
+ readonly description = "Deploy an application on Fly.io by creating a machine with a Docker image. Creates the app first if it does not exist. Configure CPU, memory, region, environment variables, and exposed ports.";
24
+ readonly category = "cloud";
25
+ readonly version = "0.1.0";
26
+ readonly hasSideEffects = true;
27
+ readonly inputSchema: {
28
+ type: "object";
29
+ properties: {
30
+ appName: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ image: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ region: {
39
+ type: string;
40
+ description: string;
41
+ };
42
+ cpus: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ cpuKind: {
47
+ type: string;
48
+ enum: string[];
49
+ description: string;
50
+ };
51
+ memoryMb: {
52
+ type: string;
53
+ description: string;
54
+ };
55
+ env: {
56
+ type: string;
57
+ description: string;
58
+ };
59
+ internalPort: {
60
+ type: string;
61
+ description: string;
62
+ };
63
+ autoDestroy: {
64
+ type: string;
65
+ description: string;
66
+ };
67
+ createApp: {
68
+ type: string;
69
+ description: string;
70
+ };
71
+ org: {
72
+ type: string;
73
+ description: string;
74
+ };
75
+ };
76
+ required: string[];
77
+ };
78
+ constructor(service: FlyService);
79
+ execute(args: FlyDeployAppInput): Promise<{
80
+ success: boolean;
81
+ data?: {
82
+ app: FlyApp;
83
+ machine: FlyMachine;
84
+ };
85
+ error?: string;
86
+ }>;
87
+ }
88
+ //# sourceMappingURL=deployApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployApp.d.ts","sourceRoot":"","sources":["../../src/tools/deployApp.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEzF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAgB;IA2Bf,OAAO,CAAC,OAAO;IA1B3B,QAAQ,CAAC,EAAE,kBAAkB;IAC7B,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,WAAW,uBAAuB;IAC3C,QAAQ,CAAC,WAAW,qMAAqM;IACzN,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgBlB;gBAEkB,OAAO,EAAE,UAAU;IAEjC,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,UAAU,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAqDnI"}
@@ -0,0 +1,86 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview FlyDeployAppTool — deploy an app on Fly.io by creating a machine with a config.
4
+ */
5
+ export class FlyDeployAppTool {
6
+ service;
7
+ id = 'flyDeployApp';
8
+ name = 'flyDeployApp';
9
+ displayName = 'Deploy Fly.io App';
10
+ description = 'Deploy an application on Fly.io by creating a machine with a Docker image. Creates the app first if it does not exist. Configure CPU, memory, region, environment variables, and exposed ports.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ appName: { type: 'string', description: 'Fly app name (e.g. "my-web-app")' },
18
+ image: { type: 'string', description: 'Docker image to deploy (e.g. "registry.fly.io/my-app:latest" or "nginx:alpine")' },
19
+ region: { type: 'string', description: 'Fly region code (e.g. "iad", "lax", "cdg", "nrt"). Defaults to closest.' },
20
+ cpus: { type: 'number', description: 'Number of CPUs (default: 1)' },
21
+ cpuKind: { type: 'string', enum: ['shared', 'performance'], description: 'CPU type (default: shared)' },
22
+ memoryMb: { type: 'number', description: 'Memory in MB (default: 256)' },
23
+ env: { type: 'object', description: 'Environment variables (key-value pairs)' },
24
+ internalPort: { type: 'number', description: 'Internal port the app listens on (default: 8080)' },
25
+ autoDestroy: { type: 'boolean', description: 'Automatically destroy the machine when it exits (default: false)' },
26
+ createApp: { type: 'boolean', description: 'Create the app if it does not exist (default: true)' },
27
+ org: { type: 'string', description: 'Fly organization slug (default: "personal")' },
28
+ },
29
+ required: ['appName', 'image'],
30
+ };
31
+ constructor(service) {
32
+ this.service = service;
33
+ }
34
+ async execute(args) {
35
+ try {
36
+ // Create app if needed
37
+ const shouldCreate = args.createApp !== false;
38
+ let app;
39
+ try {
40
+ app = await this.service.getApp(args.appName);
41
+ }
42
+ catch {
43
+ if (!shouldCreate) {
44
+ return { success: false, error: `App "${args.appName}" not found. Set createApp to true to create it.` };
45
+ }
46
+ app = await this.service.createApp(args.appName, args.org);
47
+ }
48
+ // Build machine config
49
+ const port = args.internalPort ?? 8080;
50
+ const config = {
51
+ image: args.image,
52
+ env: args.env,
53
+ guest: {
54
+ cpus: args.cpus ?? 1,
55
+ cpu_kind: args.cpuKind ?? 'shared',
56
+ memory_mb: args.memoryMb ?? 256,
57
+ },
58
+ auto_destroy: args.autoDestroy ?? false,
59
+ services: [
60
+ {
61
+ ports: [
62
+ { port: 80, handlers: ['http'], force_https: true },
63
+ { port: 443, handlers: ['http', 'tls'] },
64
+ ],
65
+ protocol: 'tcp',
66
+ internal_port: port,
67
+ autostart: true,
68
+ autostop: true,
69
+ min_machines_running: 0,
70
+ },
71
+ ],
72
+ };
73
+ const machine = await this.service.createMachine(args.appName, config, {
74
+ region: args.region,
75
+ });
76
+ return {
77
+ success: true,
78
+ data: { app, machine },
79
+ };
80
+ }
81
+ catch (err) {
82
+ return { success: false, error: err.message };
83
+ }
84
+ }
85
+ }
86
+ //# sourceMappingURL=deployApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployApp.js","sourceRoot":"","sources":["../../src/tools/deployApp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @fileoverview FlyListAppsTool — list all Fly.io apps and their machines.
3
+ */
4
+ import type { FlyService, FlyApp } from '../FlyService.js';
5
+ export interface FlyListAppsInput {
6
+ appName?: string;
7
+ includeMachines?: boolean;
8
+ }
9
+ export declare class FlyListAppsTool {
10
+ private service;
11
+ readonly id = "flyListApps";
12
+ readonly name = "flyListApps";
13
+ readonly displayName = "List Fly.io Apps";
14
+ readonly description = "List all Fly.io apps in the account, or get details for a specific app. Optionally include machine details (state, region, config) for each app.";
15
+ readonly category = "cloud";
16
+ readonly version = "0.1.0";
17
+ readonly hasSideEffects = false;
18
+ readonly inputSchema: {
19
+ type: "object";
20
+ properties: {
21
+ appName: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ includeMachines: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ };
30
+ required: string[];
31
+ };
32
+ constructor(service: FlyService);
33
+ execute(args: FlyListAppsInput): Promise<{
34
+ success: boolean;
35
+ data?: FlyApp[];
36
+ error?: string;
37
+ }>;
38
+ }
39
+ //# sourceMappingURL=listApps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listApps.d.ts","sourceRoot":"","sources":["../../src/tools/listApps.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,eAAe;IAkBd,OAAO,CAAC,OAAO;IAjB3B,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,sBAAsB;IAC1C,QAAQ,CAAC,WAAW,sJAAsJ;IAC1K,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;kBAMF,MAAM,EAAE;MACxB;gBAEkB,OAAO,EAAE,UAAU;IAEjC,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA6BtG"}
@@ -0,0 +1,53 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview FlyListAppsTool — list all Fly.io apps and their machines.
4
+ */
5
+ export class FlyListAppsTool {
6
+ service;
7
+ id = 'flyListApps';
8
+ name = 'flyListApps';
9
+ displayName = 'List Fly.io Apps';
10
+ description = 'List all Fly.io apps in the account, or get details for a specific app. Optionally include machine details (state, region, config) for each app.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = false;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ appName: { type: 'string', description: 'Filter to a specific app by name (optional — lists all apps if omitted)' },
18
+ includeMachines: { type: 'boolean', description: 'Include machine details for each app (default: true)' },
19
+ },
20
+ required: [],
21
+ };
22
+ constructor(service) {
23
+ this.service = service;
24
+ }
25
+ async execute(args) {
26
+ try {
27
+ const withMachines = args.includeMachines !== false;
28
+ if (args.appName) {
29
+ const app = await this.service.getApp(args.appName);
30
+ if (withMachines) {
31
+ app.machines = await this.service.listMachines(args.appName);
32
+ }
33
+ return { success: true, data: [app] };
34
+ }
35
+ const apps = await this.service.listApps();
36
+ if (withMachines) {
37
+ for (const app of apps) {
38
+ try {
39
+ app.machines = await this.service.listMachines(app.name);
40
+ }
41
+ catch {
42
+ app.machines = [];
43
+ }
44
+ }
45
+ }
46
+ return { success: true, data: apps };
47
+ }
48
+ catch (err) {
49
+ return { success: false, error: err.message };
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=listApps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listApps.js","sourceRoot":"","sources":["../../src/tools/listApps.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AASH,MAAM,OAAO,eAAe;IAkBN;IAjBX,EAAE,GAAG,aAAa,CAAC;IACnB,IAAI,GAAG,aAAa,CAAC;IACrB,WAAW,GAAG,kBAAkB,CAAC;IACjC,WAAW,GAAG,kJAAkJ,CAAC;IACjK,QAAQ,GAAG,OAAO,CAAC;IACnB,OAAO,GAAG,OAAO,CAAC;IAClB,cAAc,GAAG,KAAK,CAAC;IAEvB,WAAW,GAAG;QACrB,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yEAAyE,EAAE;YACnH,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,sDAAsD,EAAE;SAC1G;QACD,QAAQ,EAAE,EAAc;KACzB,CAAC;IAEF,YAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAE3C,KAAK,CAAC,OAAO,CAAC,IAAsB;QAClC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC;YAEpD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACpD,IAAI,YAAY,EAAE,CAAC;oBACjB,GAAG,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAE3C,IAAI,YAAY,EAAE,CAAC;gBACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,CAAC;wBACH,GAAG,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC3D,CAAC;oBAAC,MAAM,CAAC;wBACP,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACvC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @fileoverview FlyScaleAppTool — scale machines for a Fly.io app.
3
+ */
4
+ import type { FlyService, FlyMachine } from '../FlyService.js';
5
+ export interface FlyScaleAppInput {
6
+ appName: string;
7
+ count: number;
8
+ cpus?: number;
9
+ cpuKind?: string;
10
+ memoryMb?: number;
11
+ region?: string;
12
+ }
13
+ export declare class FlyScaleAppTool {
14
+ private service;
15
+ readonly id = "flyScaleApp";
16
+ readonly name = "flyScaleApp";
17
+ readonly displayName = "Scale Fly.io App";
18
+ readonly description = "Scale a Fly.io app by adjusting the number of machines and optionally their VM size. Can scale up (create new machines cloned from existing config) or scale down (destroy excess machines). Optionally resize CPUs and memory.";
19
+ readonly category = "cloud";
20
+ readonly version = "0.1.0";
21
+ readonly hasSideEffects = true;
22
+ readonly inputSchema: {
23
+ type: "object";
24
+ properties: {
25
+ appName: {
26
+ type: string;
27
+ description: string;
28
+ };
29
+ count: {
30
+ type: string;
31
+ description: string;
32
+ };
33
+ cpus: {
34
+ type: string;
35
+ description: string;
36
+ };
37
+ cpuKind: {
38
+ type: string;
39
+ enum: string[];
40
+ description: string;
41
+ };
42
+ memoryMb: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ region: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ };
51
+ required: string[];
52
+ };
53
+ constructor(service: FlyService);
54
+ execute(args: FlyScaleAppInput): Promise<{
55
+ success: boolean;
56
+ data?: {
57
+ machines: FlyMachine[];
58
+ created: number;
59
+ destroyed: number;
60
+ resized: number;
61
+ };
62
+ error?: string;
63
+ }>;
64
+ }
65
+ //# sourceMappingURL=scaleApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleApp.d.ts","sourceRoot":"","sources":["../../src/tools/scaleApp.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAsBd,OAAO,CAAC,OAAO;IArB3B,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,sBAAsB;IAC1C,QAAQ,CAAC,WAAW,qOAAqO;IACzP,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAWlB;gBAEkB,OAAO,EAAE,UAAU;IAEjC,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAC7C,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE;YAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QACvF,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CAuEH"}
@@ -0,0 +1,95 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview FlyScaleAppTool — scale machines for a Fly.io app.
4
+ */
5
+ export class FlyScaleAppTool {
6
+ service;
7
+ id = 'flyScaleApp';
8
+ name = 'flyScaleApp';
9
+ displayName = 'Scale Fly.io App';
10
+ description = 'Scale a Fly.io app by adjusting the number of machines and optionally their VM size. Can scale up (create new machines cloned from existing config) or scale down (destroy excess machines). Optionally resize CPUs and memory.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ appName: { type: 'string', description: 'Name of the Fly app to scale' },
18
+ count: { type: 'number', description: 'Desired number of machines (0 to stop all)' },
19
+ cpus: { type: 'number', description: 'CPUs per machine (only applied to new or resized machines)' },
20
+ cpuKind: { type: 'string', enum: ['shared', 'performance'], description: 'CPU type (only applied to new or resized machines)' },
21
+ memoryMb: { type: 'number', description: 'Memory in MB per machine (only applied to new or resized machines)' },
22
+ region: { type: 'string', description: 'Region for new machines (e.g. "iad", "lax", "cdg")' },
23
+ },
24
+ required: ['appName', 'count'],
25
+ };
26
+ constructor(service) {
27
+ this.service = service;
28
+ }
29
+ async execute(args) {
30
+ try {
31
+ const existing = await this.service.listMachines(args.appName);
32
+ const current = existing.length;
33
+ const desired = args.count;
34
+ let created = 0;
35
+ let destroyed = 0;
36
+ let resized = 0;
37
+ // Determine if we need to resize existing machines
38
+ const needsResize = args.cpus !== undefined || args.cpuKind !== undefined || args.memoryMb !== undefined;
39
+ // Scale down: destroy excess machines
40
+ if (desired < current) {
41
+ const toDestroy = existing.slice(desired);
42
+ for (const machine of toDestroy) {
43
+ await this.service.destroyMachine(args.appName, machine.id);
44
+ destroyed++;
45
+ }
46
+ }
47
+ // Resize remaining machines if needed
48
+ if (needsResize) {
49
+ const toResize = existing.slice(0, Math.min(desired, current));
50
+ for (const machine of toResize) {
51
+ const guest = {
52
+ cpus: args.cpus ?? machine.config.guest?.cpus ?? 1,
53
+ cpu_kind: args.cpuKind ?? machine.config.guest?.cpu_kind ?? 'shared',
54
+ memory_mb: args.memoryMb ?? machine.config.guest?.memory_mb ?? 256,
55
+ };
56
+ await this.service.updateMachine(args.appName, machine.id, { guest });
57
+ resized++;
58
+ }
59
+ }
60
+ // Scale up: create new machines cloned from the first machine's config
61
+ if (desired > current) {
62
+ const template = existing[0]?.config ?? { image: '' };
63
+ const baseConfig = {
64
+ ...template,
65
+ guest: {
66
+ cpus: args.cpus ?? template.guest?.cpus ?? 1,
67
+ cpu_kind: args.cpuKind ?? template.guest?.cpu_kind ?? 'shared',
68
+ memory_mb: args.memoryMb ?? template.guest?.memory_mb ?? 256,
69
+ },
70
+ };
71
+ for (let i = current; i < desired; i++) {
72
+ await this.service.createMachine(args.appName, baseConfig, {
73
+ region: args.region,
74
+ });
75
+ created++;
76
+ }
77
+ }
78
+ // Get final state
79
+ const finalMachines = await this.service.listMachines(args.appName);
80
+ return {
81
+ success: true,
82
+ data: {
83
+ machines: finalMachines,
84
+ created,
85
+ destroyed,
86
+ resized,
87
+ },
88
+ };
89
+ }
90
+ catch (err) {
91
+ return { success: false, error: err.message };
92
+ }
93
+ }
94
+ }
95
+ //# sourceMappingURL=scaleApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaleApp.js","sourceRoot":"","sources":["../../src/tools/scaleApp.ts"],"names":[],"mappings":"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"}
package/manifest.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
+ "id": "com.framers.cloud.flyio",
4
+ "name": "Fly.io Cloud Deployment",
5
+ "version": "0.1.0",
6
+ "description": "Deploy and manage applications on Fly.io using the Machines API. Create apps, launch machines with custom configs, scale instances by count and size, and provision persistent volumes for stateful workloads.",
7
+ "author": {
8
+ "name": "Frame.dev",
9
+ "email": "support@frame.dev",
10
+ "url": "https://github.com/framersai"
11
+ },
12
+ "license": "MIT",
13
+ "keywords": ["cloud", "flyio", "fly", "deploy", "machines", "edge", "volumes"],
14
+ "agentosVersion": "^2.0.0",
15
+ "categories": ["tool", "cloud"],
16
+ "platforms": [],
17
+ "sdk": "none",
18
+ "extensions": [
19
+ { "kind": "tool", "id": "flyDeployApp", "displayName": "Deploy Fly.io App", "entry": "./dist/tools/deployApp.js" },
20
+ { "kind": "tool", "id": "flyListApps", "displayName": "List Fly.io Apps", "entry": "./dist/tools/listApps.js" },
21
+ { "kind": "tool", "id": "flyScaleApp", "displayName": "Scale Fly.io App", "entry": "./dist/tools/scaleApp.js" },
22
+ { "kind": "tool", "id": "flyCreateVolume", "displayName": "Create Fly.io Volume", "entry": "./dist/tools/createVolume.js" }
23
+ ],
24
+ "requiredSecrets": ["fly.token"],
25
+ "features": [
26
+ "Deploy apps with Docker images via the Machines API",
27
+ "List apps and their machines across regions",
28
+ "Scale machines by count and VM size",
29
+ "Create persistent volumes for stateful workloads"
30
+ ]
31
+ }