@framers/agentos-ext-cloud-railway 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.
- package/LICENSE +98 -0
- package/dist/RailwayService.d.ts +92 -0
- package/dist/RailwayService.d.ts.map +1 -0
- package/dist/RailwayService.js +311 -0
- package/dist/RailwayService.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/addDatabase.d.ts +40 -0
- package/dist/tools/addDatabase.d.ts.map +1 -0
- package/dist/tools/addDatabase.js +39 -0
- package/dist/tools/addDatabase.js.map +1 -0
- package/dist/tools/deployService.d.ts +68 -0
- package/dist/tools/deployService.d.ts.map +1 -0
- package/dist/tools/deployService.js +71 -0
- package/dist/tools/deployService.js.map +1 -0
- package/dist/tools/getLogs.d.ts +40 -0
- package/dist/tools/getLogs.d.ts.map +1 -0
- package/dist/tools/getLogs.js +42 -0
- package/dist/tools/getLogs.js.map +1 -0
- package/dist/tools/listServices.d.ts +34 -0
- package/dist/tools/listServices.d.ts.map +1 -0
- package/dist/tools/listServices.js +38 -0
- package/dist/tools/listServices.js.map +1 -0
- package/manifest.json +31 -0
- package/package.json +65 -0
- package/src/RailwayService.ts +415 -0
- package/src/index.ts +109 -0
- package/src/tools/addDatabase.ts +45 -0
- package/src/tools/deployService.ts +89 -0
- package/src/tools/getLogs.ts +50 -0
- package/src/tools/listServices.ts +44 -0
- package/test/RailwayService.test.ts +439 -0
- package/test/index.test.ts +49 -0
- package/test/tools.test.ts +310 -0
- package/tsconfig.json +22 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview RailwayAddDatabaseTool — provision a database plugin on Railway.
|
|
3
|
+
*/
|
|
4
|
+
import type { RailwayService, RailwayPlugin } from '../RailwayService.js';
|
|
5
|
+
export interface RailwayAddDatabaseInput {
|
|
6
|
+
projectId: string;
|
|
7
|
+
plugin: 'postgresql' | 'redis' | 'mysql' | 'mongodb';
|
|
8
|
+
}
|
|
9
|
+
export declare class RailwayAddDatabaseTool {
|
|
10
|
+
private service;
|
|
11
|
+
readonly id = "railwayAddDatabase";
|
|
12
|
+
readonly name = "railwayAddDatabase";
|
|
13
|
+
readonly displayName = "Add Railway Database";
|
|
14
|
+
readonly description = "Provision a database plugin in a Railway project. Supports PostgreSQL, Redis, MySQL, and MongoDB. The database will be automatically connected to services in the same project via environment variables.";
|
|
15
|
+
readonly category = "cloud";
|
|
16
|
+
readonly version = "0.1.0";
|
|
17
|
+
readonly hasSideEffects = true;
|
|
18
|
+
readonly inputSchema: {
|
|
19
|
+
type: "object";
|
|
20
|
+
properties: {
|
|
21
|
+
projectId: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
plugin: {
|
|
26
|
+
type: string;
|
|
27
|
+
enum: string[];
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
required: string[];
|
|
32
|
+
};
|
|
33
|
+
constructor(service: RailwayService);
|
|
34
|
+
execute(args: RailwayAddDatabaseInput): Promise<{
|
|
35
|
+
success: boolean;
|
|
36
|
+
data?: RailwayPlugin;
|
|
37
|
+
error?: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=addDatabase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addDatabase.d.ts","sourceRoot":"","sources":["../../src/tools/addDatabase.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,qBAAa,sBAAsB;IAsBrB,OAAO,CAAC,OAAO;IArB3B,QAAQ,CAAC,EAAE,wBAAwB;IACnC,QAAQ,CAAC,IAAI,wBAAwB;IACrC,QAAQ,CAAC,WAAW,0BAA0B;IAC9C,QAAQ,CAAC,WAAW,+MAA+M;IACnO,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;MAWlB;gBAEkB,OAAO,EAAE,cAAc;IAErC,OAAO,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAQlH"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview RailwayAddDatabaseTool — provision a database plugin on Railway.
|
|
4
|
+
*/
|
|
5
|
+
export class RailwayAddDatabaseTool {
|
|
6
|
+
service;
|
|
7
|
+
id = 'railwayAddDatabase';
|
|
8
|
+
name = 'railwayAddDatabase';
|
|
9
|
+
displayName = 'Add Railway Database';
|
|
10
|
+
description = 'Provision a database plugin in a Railway project. Supports PostgreSQL, Redis, MySQL, and MongoDB. The database will be automatically connected to services in the same project via environment variables.';
|
|
11
|
+
category = 'cloud';
|
|
12
|
+
version = '0.1.0';
|
|
13
|
+
hasSideEffects = true;
|
|
14
|
+
inputSchema = {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
projectId: { type: 'string', description: 'Railway project ID to add the database to' },
|
|
18
|
+
plugin: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
enum: ['postgresql', 'redis', 'mysql', 'mongodb'],
|
|
21
|
+
description: 'Database type to provision',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ['projectId', 'plugin'],
|
|
25
|
+
};
|
|
26
|
+
constructor(service) {
|
|
27
|
+
this.service = service;
|
|
28
|
+
}
|
|
29
|
+
async execute(args) {
|
|
30
|
+
try {
|
|
31
|
+
const plugin = await this.service.createPlugin(args.projectId, args.plugin);
|
|
32
|
+
return { success: true, data: plugin };
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
return { success: false, error: err.message };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=addDatabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addDatabase.js","sourceRoot":"","sources":["../../src/tools/addDatabase.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AASH,MAAM,OAAO,sBAAsB;IAsBb;IArBX,EAAE,GAAG,oBAAoB,CAAC;IAC1B,IAAI,GAAG,oBAAoB,CAAC;IAC5B,WAAW,GAAG,sBAAsB,CAAC;IACrC,WAAW,GAAG,2MAA2M,CAAC;IAC1N,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,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACvF,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;gBACjD,WAAW,EAAE,4BAA4B;aAC1C;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;KAClC,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5E,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,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview RailwayDeployServiceTool — deploy a service on Railway from a Git repo.
|
|
3
|
+
*/
|
|
4
|
+
import type { RailwayService, RailwayDeployment, RailwayService_ } from '../RailwayService.js';
|
|
5
|
+
export interface RailwayDeployServiceInput {
|
|
6
|
+
projectId?: string;
|
|
7
|
+
projectName?: string;
|
|
8
|
+
repo?: string;
|
|
9
|
+
serviceName?: string;
|
|
10
|
+
serviceId?: string;
|
|
11
|
+
environmentId?: string;
|
|
12
|
+
variables?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export declare class RailwayDeployServiceTool {
|
|
15
|
+
private service;
|
|
16
|
+
readonly id = "railwayDeployService";
|
|
17
|
+
readonly name = "railwayDeployService";
|
|
18
|
+
readonly displayName = "Deploy Railway Service";
|
|
19
|
+
readonly description = "Deploy a service on Railway. Either create a new service from a GitHub repo in a project, or trigger a redeployment of an existing service. Can set environment variables before deploying.";
|
|
20
|
+
readonly category = "cloud";
|
|
21
|
+
readonly version = "0.1.0";
|
|
22
|
+
readonly hasSideEffects = true;
|
|
23
|
+
readonly inputSchema: {
|
|
24
|
+
type: "object";
|
|
25
|
+
properties: {
|
|
26
|
+
projectId: {
|
|
27
|
+
type: string;
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
projectName: {
|
|
31
|
+
type: string;
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
repo: {
|
|
35
|
+
type: string;
|
|
36
|
+
description: string;
|
|
37
|
+
};
|
|
38
|
+
serviceName: {
|
|
39
|
+
type: string;
|
|
40
|
+
description: string;
|
|
41
|
+
};
|
|
42
|
+
serviceId: {
|
|
43
|
+
type: string;
|
|
44
|
+
description: string;
|
|
45
|
+
};
|
|
46
|
+
environmentId: {
|
|
47
|
+
type: string;
|
|
48
|
+
description: string;
|
|
49
|
+
};
|
|
50
|
+
variables: {
|
|
51
|
+
type: string;
|
|
52
|
+
description: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
required: string[];
|
|
56
|
+
};
|
|
57
|
+
constructor(service: RailwayService);
|
|
58
|
+
execute(args: RailwayDeployServiceInput): Promise<{
|
|
59
|
+
success: boolean;
|
|
60
|
+
data?: {
|
|
61
|
+
service?: RailwayService_;
|
|
62
|
+
deployment?: RailwayDeployment;
|
|
63
|
+
projectId: string;
|
|
64
|
+
};
|
|
65
|
+
error?: string;
|
|
66
|
+
}>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=deployService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployService.d.ts","sourceRoot":"","sources":["../../src/tools/deployService.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE/F,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,qBAAa,wBAAwB;IAuBvB,OAAO,CAAC,OAAO;IAtB3B,QAAQ,CAAC,EAAE,0BAA0B;IACrC,QAAQ,CAAC,IAAI,0BAA0B;IACvC,QAAQ,CAAC,WAAW,4BAA4B;IAChD,QAAQ,CAAC,WAAW,iMAAiM;IACrN,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWF,MAAM,EAAE;MACxB;gBAEkB,OAAO,EAAE,cAAc;IAErC,OAAO,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,eAAe,CAAC;YAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CA8CvL"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview RailwayDeployServiceTool — deploy a service on Railway from a Git repo.
|
|
4
|
+
*/
|
|
5
|
+
export class RailwayDeployServiceTool {
|
|
6
|
+
service;
|
|
7
|
+
id = 'railwayDeployService';
|
|
8
|
+
name = 'railwayDeployService';
|
|
9
|
+
displayName = 'Deploy Railway Service';
|
|
10
|
+
description = 'Deploy a service on Railway. Either create a new service from a GitHub repo in a project, or trigger a redeployment of an existing service. Can set environment variables before deploying.';
|
|
11
|
+
category = 'cloud';
|
|
12
|
+
version = '0.1.0';
|
|
13
|
+
hasSideEffects = true;
|
|
14
|
+
inputSchema = {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
projectId: { type: 'string', description: 'Railway project ID to deploy into. If omitted and projectName is given, a new project is created.' },
|
|
18
|
+
projectName: { type: 'string', description: 'Name for a new project (used only when projectId is omitted)' },
|
|
19
|
+
repo: { type: 'string', description: 'GitHub repository to deploy from (e.g. "user/repo"). Required for new services.' },
|
|
20
|
+
serviceName: { type: 'string', description: 'Name for the service (optional)' },
|
|
21
|
+
serviceId: { type: 'string', description: 'Existing service ID to redeploy (triggers rebuild of latest commit)' },
|
|
22
|
+
environmentId: { type: 'string', description: 'Environment ID for redeployment (required with serviceId, defaults to production)' },
|
|
23
|
+
variables: { type: 'object', description: 'Environment variables to set (key-value pairs)' },
|
|
24
|
+
},
|
|
25
|
+
required: [],
|
|
26
|
+
};
|
|
27
|
+
constructor(service) {
|
|
28
|
+
this.service = service;
|
|
29
|
+
}
|
|
30
|
+
async execute(args) {
|
|
31
|
+
try {
|
|
32
|
+
// Case 1: Redeploy existing service
|
|
33
|
+
if (args.serviceId && args.environmentId) {
|
|
34
|
+
// Set variables if provided
|
|
35
|
+
if (args.variables && Object.keys(args.variables).length > 0) {
|
|
36
|
+
await this.service.upsertVariables(args.serviceId, args.environmentId, args.variables);
|
|
37
|
+
}
|
|
38
|
+
const deployment = await this.service.redeployService(args.serviceId, args.environmentId);
|
|
39
|
+
return {
|
|
40
|
+
success: true,
|
|
41
|
+
data: {
|
|
42
|
+
deployment,
|
|
43
|
+
projectId: args.projectId ?? '',
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Case 2: Create new service (and project if needed)
|
|
48
|
+
let projectId = args.projectId;
|
|
49
|
+
if (!projectId) {
|
|
50
|
+
const project = await this.service.createProject(args.projectName ?? `project-${Date.now()}`);
|
|
51
|
+
projectId = project.id;
|
|
52
|
+
}
|
|
53
|
+
const svc = await this.service.createService(projectId, {
|
|
54
|
+
name: args.serviceName,
|
|
55
|
+
source: args.repo ? { repo: args.repo } : undefined,
|
|
56
|
+
variables: args.variables,
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
success: true,
|
|
60
|
+
data: {
|
|
61
|
+
service: svc,
|
|
62
|
+
projectId,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return { success: false, error: err.message };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=deployService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployService.js","sourceRoot":"","sources":["../../src/tools/deployService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview RailwayGetLogsTool — retrieve deployment or build logs from Railway.
|
|
3
|
+
*/
|
|
4
|
+
import type { RailwayService, RailwayLogEntry } from '../RailwayService.js';
|
|
5
|
+
export interface RailwayGetLogsInput {
|
|
6
|
+
deploymentId: string;
|
|
7
|
+
type?: 'deploy' | 'build';
|
|
8
|
+
}
|
|
9
|
+
export declare class RailwayGetLogsTool {
|
|
10
|
+
private service;
|
|
11
|
+
readonly id = "railwayGetLogs";
|
|
12
|
+
readonly name = "railwayGetLogs";
|
|
13
|
+
readonly displayName = "Get Railway Logs";
|
|
14
|
+
readonly description = "Retrieve logs for a Railway deployment. Can fetch either deployment (runtime) logs or build logs. Returns timestamped log entries with severity levels.";
|
|
15
|
+
readonly category = "cloud";
|
|
16
|
+
readonly version = "0.1.0";
|
|
17
|
+
readonly hasSideEffects = false;
|
|
18
|
+
readonly inputSchema: {
|
|
19
|
+
type: "object";
|
|
20
|
+
properties: {
|
|
21
|
+
deploymentId: {
|
|
22
|
+
type: string;
|
|
23
|
+
description: string;
|
|
24
|
+
};
|
|
25
|
+
type: {
|
|
26
|
+
type: string;
|
|
27
|
+
enum: string[];
|
|
28
|
+
description: string;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
required: string[];
|
|
32
|
+
};
|
|
33
|
+
constructor(service: RailwayService);
|
|
34
|
+
execute(args: RailwayGetLogsInput): Promise<{
|
|
35
|
+
success: boolean;
|
|
36
|
+
data?: RailwayLogEntry[];
|
|
37
|
+
error?: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=getLogs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogs.d.ts","sourceRoot":"","sources":["../../src/tools/getLogs.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC3B;AAED,qBAAa,kBAAkB;IAsBjB,OAAO,CAAC,OAAO;IArB3B,QAAQ,CAAC,EAAE,oBAAoB;IAC/B,QAAQ,CAAC,IAAI,oBAAoB;IACjC,QAAQ,CAAC,WAAW,sBAAsB;IAC1C,QAAQ,CAAC,WAAW,6JAA6J;IACjL,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;MAWlB;gBAEkB,OAAO,EAAE,cAAc;IAErC,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAalH"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview RailwayGetLogsTool — retrieve deployment or build logs from Railway.
|
|
4
|
+
*/
|
|
5
|
+
export class RailwayGetLogsTool {
|
|
6
|
+
service;
|
|
7
|
+
id = 'railwayGetLogs';
|
|
8
|
+
name = 'railwayGetLogs';
|
|
9
|
+
displayName = 'Get Railway Logs';
|
|
10
|
+
description = 'Retrieve logs for a Railway deployment. Can fetch either deployment (runtime) logs or build logs. Returns timestamped log entries with severity levels.';
|
|
11
|
+
category = 'cloud';
|
|
12
|
+
version = '0.1.0';
|
|
13
|
+
hasSideEffects = false;
|
|
14
|
+
inputSchema = {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
deploymentId: { type: 'string', description: 'Deployment ID to retrieve logs for' },
|
|
18
|
+
type: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
enum: ['deploy', 'build'],
|
|
21
|
+
description: 'Type of logs to retrieve: "deploy" for runtime logs, "build" for build logs (default: deploy)',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
required: ['deploymentId'],
|
|
25
|
+
};
|
|
26
|
+
constructor(service) {
|
|
27
|
+
this.service = service;
|
|
28
|
+
}
|
|
29
|
+
async execute(args) {
|
|
30
|
+
try {
|
|
31
|
+
const logType = args.type ?? 'deploy';
|
|
32
|
+
const logs = logType === 'build'
|
|
33
|
+
? await this.service.getBuildLogs(args.deploymentId)
|
|
34
|
+
: await this.service.getDeploymentLogs(args.deploymentId);
|
|
35
|
+
return { success: true, data: logs };
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
return { success: false, error: err.message };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=getLogs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogs.js","sourceRoot":"","sources":["../../src/tools/getLogs.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AASH,MAAM,OAAO,kBAAkB;IAsBT;IArBX,EAAE,GAAG,gBAAgB,CAAC;IACtB,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAAG,kBAAkB,CAAC;IACjC,WAAW,GAAG,yJAAyJ,CAAC;IACxK,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,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;YACnF,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;gBACzB,WAAW,EAAE,+FAA+F;aAC7G;SACF;QACD,QAAQ,EAAE,CAAC,cAAc,CAAC;KAC3B,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAAyB;QACrC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC;YAEtC,MAAM,IAAI,GAAG,OAAO,KAAK,OAAO;gBAC9B,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;gBACpD,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE5D,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,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview RailwayListServicesTool — list all projects and services on Railway.
|
|
3
|
+
*/
|
|
4
|
+
import type { RailwayService, RailwayProject } from '../RailwayService.js';
|
|
5
|
+
export interface RailwayListServicesInput {
|
|
6
|
+
projectId?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class RailwayListServicesTool {
|
|
9
|
+
private service;
|
|
10
|
+
readonly id = "railwayListServices";
|
|
11
|
+
readonly name = "railwayListServices";
|
|
12
|
+
readonly displayName = "List Railway Services";
|
|
13
|
+
readonly description = "List all Railway projects and their services. Optionally filter to a single project by ID. Shows project name, environments, and all services with their status.";
|
|
14
|
+
readonly category = "cloud";
|
|
15
|
+
readonly version = "0.1.0";
|
|
16
|
+
readonly hasSideEffects = false;
|
|
17
|
+
readonly inputSchema: {
|
|
18
|
+
type: "object";
|
|
19
|
+
properties: {
|
|
20
|
+
projectId: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
required: string[];
|
|
26
|
+
};
|
|
27
|
+
constructor(service: RailwayService);
|
|
28
|
+
execute(args: RailwayListServicesInput): Promise<{
|
|
29
|
+
success: boolean;
|
|
30
|
+
data?: RailwayProject[];
|
|
31
|
+
error?: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=listServices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listServices.d.ts","sourceRoot":"","sources":["../../src/tools/listServices.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3E,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,uBAAuB;IAiBtB,OAAO,CAAC,OAAO;IAhB3B,QAAQ,CAAC,EAAE,yBAAyB;IACpC,QAAQ,CAAC,IAAI,yBAAyB;IACtC,QAAQ,CAAC,WAAW,2BAA2B;IAC/C,QAAQ,CAAC,WAAW,sKAAsK;IAC1L,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;kBAKF,MAAM,EAAE;MACxB;gBAEkB,OAAO,EAAE,cAAc;IAErC,OAAO,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAatH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview RailwayListServicesTool — list all projects and services on Railway.
|
|
4
|
+
*/
|
|
5
|
+
export class RailwayListServicesTool {
|
|
6
|
+
service;
|
|
7
|
+
id = 'railwayListServices';
|
|
8
|
+
name = 'railwayListServices';
|
|
9
|
+
displayName = 'List Railway Services';
|
|
10
|
+
description = 'List all Railway projects and their services. Optionally filter to a single project by ID. Shows project name, environments, and all services with their status.';
|
|
11
|
+
category = 'cloud';
|
|
12
|
+
version = '0.1.0';
|
|
13
|
+
hasSideEffects = false;
|
|
14
|
+
inputSchema = {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
projectId: { type: 'string', description: 'Filter to a specific project ID (optional — lists all projects if omitted)' },
|
|
18
|
+
},
|
|
19
|
+
required: [],
|
|
20
|
+
};
|
|
21
|
+
constructor(service) {
|
|
22
|
+
this.service = service;
|
|
23
|
+
}
|
|
24
|
+
async execute(args) {
|
|
25
|
+
try {
|
|
26
|
+
if (args.projectId) {
|
|
27
|
+
const project = await this.service.getProject(args.projectId);
|
|
28
|
+
return { success: true, data: [project] };
|
|
29
|
+
}
|
|
30
|
+
const projects = await this.service.listProjects();
|
|
31
|
+
return { success: true, data: projects };
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return { success: false, error: err.message };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=listServices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listServices.js","sourceRoot":"","sources":["../../src/tools/listServices.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AAQH,MAAM,OAAO,uBAAuB;IAiBd;IAhBX,EAAE,GAAG,qBAAqB,CAAC;IAC3B,IAAI,GAAG,qBAAqB,CAAC;IAC7B,WAAW,GAAG,uBAAuB,CAAC;IACtC,WAAW,GAAG,kKAAkK,CAAC;IACjL,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,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4EAA4E,EAAE;SACzH;QACD,QAAQ,EAAE,EAAc;KACzB,CAAC;IAEF,YAAoB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAE/C,KAAK,CAAC,OAAO,CAAC,IAA8B;QAC1C,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC3C,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"}
|
package/manifest.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
|
|
3
|
+
"id": "com.framers.cloud.railway",
|
|
4
|
+
"name": "Railway Cloud Deployment",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"description": "Deploy services to Railway, manage projects and environments, provision database plugins (Postgres, Redis, MySQL, MongoDB), and stream deployment logs via the Railway GraphQL API.",
|
|
7
|
+
"author": {
|
|
8
|
+
"name": "Frame.dev",
|
|
9
|
+
"email": "support@frame.dev",
|
|
10
|
+
"url": "https://github.com/framersai"
|
|
11
|
+
},
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"keywords": ["cloud", "railway", "deploy", "paas", "graphql", "database"],
|
|
14
|
+
"agentosVersion": "^2.0.0",
|
|
15
|
+
"categories": ["tool", "cloud"],
|
|
16
|
+
"platforms": [],
|
|
17
|
+
"sdk": "none",
|
|
18
|
+
"extensions": [
|
|
19
|
+
{ "kind": "tool", "id": "railwayDeployService", "displayName": "Deploy Railway Service", "entry": "./dist/tools/deployService.js" },
|
|
20
|
+
{ "kind": "tool", "id": "railwayListServices", "displayName": "List Railway Services", "entry": "./dist/tools/listServices.js" },
|
|
21
|
+
{ "kind": "tool", "id": "railwayAddDatabase", "displayName": "Add Railway Database", "entry": "./dist/tools/addDatabase.js" },
|
|
22
|
+
{ "kind": "tool", "id": "railwayGetLogs", "displayName": "Get Railway Logs", "entry": "./dist/tools/getLogs.js" }
|
|
23
|
+
],
|
|
24
|
+
"requiredSecrets": ["railway.token"],
|
|
25
|
+
"features": [
|
|
26
|
+
"Deploy services from Git repositories",
|
|
27
|
+
"List and manage projects and services",
|
|
28
|
+
"Provision database plugins (Postgres, Redis, MySQL, MongoDB)",
|
|
29
|
+
"Retrieve deployment and build logs"
|
|
30
|
+
]
|
|
31
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@framers/agentos-ext-cloud-railway",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Railway cloud deployment extension — deploy services, manage projects, provision databases, and retrieve logs via the Railway GraphQL API.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"sideEffects": true,
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./manifest.json": "./manifest.json",
|
|
15
|
+
"./package.json": "./package.json"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"agentos",
|
|
19
|
+
"extension",
|
|
20
|
+
"cloud",
|
|
21
|
+
"railway",
|
|
22
|
+
"deploy",
|
|
23
|
+
"paas",
|
|
24
|
+
"graphql"
|
|
25
|
+
],
|
|
26
|
+
"author": {
|
|
27
|
+
"name": "Framers AI",
|
|
28
|
+
"email": "team@frame.dev",
|
|
29
|
+
"url": "https://frame.dev"
|
|
30
|
+
},
|
|
31
|
+
"contributors": [
|
|
32
|
+
{
|
|
33
|
+
"name": "Johnny Dunn",
|
|
34
|
+
"email": "johnnyfived@protonmail.com",
|
|
35
|
+
"url": "https://github.com/jddunn"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/framersai/agentos-extensions.git",
|
|
42
|
+
"directory": "registry/curated/cloud/railway"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"@framers/agentos": "^0.5.2"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@framers/agentos": "^0.6.6",
|
|
52
|
+
"@types/node": "^20.12.12",
|
|
53
|
+
"rimraf": "^5.0.7",
|
|
54
|
+
"typescript": "^5.4.5",
|
|
55
|
+
"vitest": "^1.6.0"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "tsc",
|
|
59
|
+
"dev": "tsc --watch",
|
|
60
|
+
"test": "vitest run",
|
|
61
|
+
"test:watch": "vitest",
|
|
62
|
+
"typecheck": "tsc --noEmit",
|
|
63
|
+
"clean": "rimraf dist"
|
|
64
|
+
}
|
|
65
|
+
}
|