@framers/agentos-ext-cloud-digitalocean 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.
Files changed (47) hide show
  1. package/LICENSE +98 -0
  2. package/dist/DigitalOceanService.d.ts +215 -0
  3. package/dist/DigitalOceanService.d.ts.map +1 -0
  4. package/dist/DigitalOceanService.js +323 -0
  5. package/dist/DigitalOceanService.js.map +1 -0
  6. package/dist/index.d.ts +43 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +74 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/createApp.d.ts +79 -0
  11. package/dist/tools/createApp.d.ts.map +1 -0
  12. package/dist/tools/createApp.js +54 -0
  13. package/dist/tools/createApp.js.map +1 -0
  14. package/dist/tools/createDroplet.d.ts +80 -0
  15. package/dist/tools/createDroplet.d.ts.map +1 -0
  16. package/dist/tools/createDroplet.js +60 -0
  17. package/dist/tools/createDroplet.js.map +1 -0
  18. package/dist/tools/deleteResource.d.ts +42 -0
  19. package/dist/tools/deleteResource.d.ts.map +1 -0
  20. package/dist/tools/deleteResource.js +56 -0
  21. package/dist/tools/deleteResource.js.map +1 -0
  22. package/dist/tools/deployApp.d.ts +39 -0
  23. package/dist/tools/deployApp.d.ts.map +1 -0
  24. package/dist/tools/deployApp.js +35 -0
  25. package/dist/tools/deployApp.js.map +1 -0
  26. package/dist/tools/listResources.d.ts +54 -0
  27. package/dist/tools/listResources.d.ts.map +1 -0
  28. package/dist/tools/listResources.js +50 -0
  29. package/dist/tools/listResources.js.map +1 -0
  30. package/dist/tools/manageDns.d.ts +82 -0
  31. package/dist/tools/manageDns.d.ts.map +1 -0
  32. package/dist/tools/manageDns.js +107 -0
  33. package/dist/tools/manageDns.js.map +1 -0
  34. package/manifest.json +35 -0
  35. package/package.json +65 -0
  36. package/src/DigitalOceanService.ts +514 -0
  37. package/src/index.ts +130 -0
  38. package/src/tools/createApp.ts +69 -0
  39. package/src/tools/createDroplet.ts +74 -0
  40. package/src/tools/deleteResource.ts +64 -0
  41. package/src/tools/deployApp.ts +41 -0
  42. package/src/tools/listResources.ts +66 -0
  43. package/src/tools/manageDns.ts +131 -0
  44. package/test/DigitalOceanService.test.ts +435 -0
  45. package/test/index.test.ts +58 -0
  46. package/test/tools.test.ts +478 -0
  47. package/tsconfig.json +22 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @fileoverview DOListResourcesTool — list all apps and/or droplets on a DigitalOcean account.
3
+ */
4
+ import type { DigitalOceanService, DOApp, DODroplet } from '../DigitalOceanService.js';
5
+ export interface ListResourcesInput {
6
+ resourceType?: 'apps' | 'droplets' | 'all';
7
+ page?: number;
8
+ perPage?: number;
9
+ tag?: string;
10
+ }
11
+ export interface ListResourcesResult {
12
+ apps?: DOApp[];
13
+ droplets?: DODroplet[];
14
+ }
15
+ export declare class DOListResourcesTool {
16
+ private service;
17
+ readonly id = "doListResources";
18
+ readonly name = "doListResources";
19
+ readonly displayName = "List DO Resources";
20
+ readonly description = "List all DigitalOcean App Platform apps and/or Droplets. Filter by resource type (apps, droplets, or both) and optionally by tag. Returns names, statuses, regions, IPs, and deployment info.";
21
+ readonly category = "cloud";
22
+ readonly version = "0.1.0";
23
+ readonly hasSideEffects = false;
24
+ readonly inputSchema: {
25
+ type: "object";
26
+ properties: {
27
+ resourceType: {
28
+ type: string;
29
+ enum: string[];
30
+ description: string;
31
+ };
32
+ page: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ perPage: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ tag: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ };
45
+ required: string[];
46
+ };
47
+ constructor(service: DigitalOceanService);
48
+ execute(args: ListResourcesInput): Promise<{
49
+ success: boolean;
50
+ data?: ListResourcesResult;
51
+ error?: string;
52
+ }>;
53
+ }
54
+ //# sourceMappingURL=listResources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listResources.d.ts","sourceRoot":"","sources":["../../src/tools/listResources.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEvF,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,qBAAa,mBAAmB;IAwBlB,OAAO,CAAC,OAAO;IAvB3B,QAAQ,CAAC,EAAE,qBAAqB;IAChC,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,uBAAuB;IAC3C,QAAQ,CAAC,WAAW,mMAAmM;IACvN,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,SAAS;IAEhC,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;kBAYF,MAAM,EAAE;MACxB;gBAEkB,OAAO,EAAE,mBAAmB;IAE1C,OAAO,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAoBnH"}
@@ -0,0 +1,50 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DOListResourcesTool — list all apps and/or droplets on a DigitalOcean account.
4
+ */
5
+ export class DOListResourcesTool {
6
+ service;
7
+ id = 'doListResources';
8
+ name = 'doListResources';
9
+ displayName = 'List DO Resources';
10
+ description = 'List all DigitalOcean App Platform apps and/or Droplets. Filter by resource type (apps, droplets, or both) and optionally by tag. Returns names, statuses, regions, IPs, and deployment info.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = false;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ resourceType: {
18
+ type: 'string',
19
+ enum: ['apps', 'droplets', 'all'],
20
+ description: 'Which resource type to list (default: "all")',
21
+ },
22
+ page: { type: 'number', description: 'Page number for pagination (default: 1)' },
23
+ perPage: { type: 'number', description: 'Items per page (default: 20, max: 200)' },
24
+ tag: { type: 'string', description: 'Filter droplets by tag name' },
25
+ },
26
+ required: [],
27
+ };
28
+ constructor(service) {
29
+ this.service = service;
30
+ }
31
+ async execute(args) {
32
+ try {
33
+ const resourceType = args.resourceType ?? 'all';
34
+ const page = args.page ?? 1;
35
+ const perPage = args.perPage ?? 20;
36
+ const result = {};
37
+ if (resourceType === 'apps' || resourceType === 'all') {
38
+ result.apps = await this.service.listApps(page, perPage);
39
+ }
40
+ if (resourceType === 'droplets' || resourceType === 'all') {
41
+ result.droplets = await this.service.listDroplets(page, perPage, args.tag);
42
+ }
43
+ return { success: true, data: result };
44
+ }
45
+ catch (err) {
46
+ return { success: false, error: err.message };
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=listResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listResources.js","sourceRoot":"","sources":["../../src/tools/listResources.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;GAEG;AAgBH,MAAM,OAAO,mBAAmB;IAwBV;IAvBX,EAAE,GAAG,iBAAiB,CAAC;IACvB,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,mBAAmB,CAAC;IAClC,WAAW,GAAG,+LAA+L,CAAC;IAC9M,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;gBACZ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC;gBACjC,WAAW,EAAE,8CAA8C;aAC5D;YACD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;YAChF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;YAClF,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;SACpE;QACD,QAAQ,EAAE,EAAc;KACzB,CAAC;IAEF,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,IAAwB;QACpC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,GAAwB,EAAE,CAAC;YAEvC,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,YAAY,KAAK,UAAU,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;gBAC1D,MAAM,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7E,CAAC;YAED,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,82 @@
1
+ /**
2
+ * @fileoverview DOManageDnsTool — manage DNS records on a DigitalOcean domain.
3
+ */
4
+ import type { DigitalOceanService, DODomain, DODomainRecord } from '../DigitalOceanService.js';
5
+ export interface ManageDnsInput {
6
+ action: 'list-domains' | 'add-domain' | 'list' | 'add' | 'update' | 'delete';
7
+ domain?: string;
8
+ recordId?: number;
9
+ recordType?: string;
10
+ name?: string;
11
+ data?: string;
12
+ ttl?: number;
13
+ priority?: number;
14
+ port?: number;
15
+ weight?: number;
16
+ }
17
+ export declare class DOManageDnsTool {
18
+ private service;
19
+ readonly id = "doManageDns";
20
+ readonly name = "doManageDns";
21
+ readonly displayName = "Manage DO DNS";
22
+ readonly description = "Manage DNS records on a DigitalOcean domain. Supports listing domains, adding domains, and full CRUD on DNS records (A, AAAA, CNAME, MX, TXT, SRV, NS, CAA). Use action \"list-domains\" to see all domains, \"add-domain\" to register a new domain, \"list\" to view records, \"add\"/\"update\"/\"delete\" to manage records.";
23
+ readonly category = "cloud";
24
+ readonly version = "0.1.0";
25
+ readonly hasSideEffects = true;
26
+ readonly inputSchema: {
27
+ type: "object";
28
+ properties: {
29
+ action: {
30
+ type: string;
31
+ enum: string[];
32
+ description: string;
33
+ };
34
+ domain: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ recordId: {
39
+ type: string;
40
+ description: string;
41
+ };
42
+ recordType: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ name: {
47
+ type: string;
48
+ description: string;
49
+ };
50
+ data: {
51
+ type: string;
52
+ description: string;
53
+ };
54
+ ttl: {
55
+ type: string;
56
+ description: string;
57
+ };
58
+ priority: {
59
+ type: string;
60
+ description: string;
61
+ };
62
+ port: {
63
+ type: string;
64
+ description: string;
65
+ };
66
+ weight: {
67
+ type: string;
68
+ description: string;
69
+ };
70
+ };
71
+ required: string[];
72
+ };
73
+ constructor(service: DigitalOceanService);
74
+ execute(args: ManageDnsInput): Promise<{
75
+ success: boolean;
76
+ data?: DODomain | DODomain[] | DODomainRecord | DODomainRecord[] | {
77
+ message: string;
78
+ };
79
+ error?: string;
80
+ }>;
81
+ }
82
+ //# sourceMappingURL=manageDns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manageDns.d.ts","sourceRoot":"","sources":["../../src/tools/manageDns.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE/F,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,GAAG,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IA8Bd,OAAO,CAAC,OAAO;IA7B3B,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,mBAAmB;IACvC,QAAQ,CAAC,WAAW,sUAA0T;IAC9U,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,cAAc,QAAQ;IAE/B,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmBlB;gBAEkB,OAAO,EAAE,mBAAmB;IAE1C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC;QAC3C,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,cAAc,GAAG,cAAc,EAAE,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QACvF,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CA0EH"}
@@ -0,0 +1,107 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview DOManageDnsTool — manage DNS records on a DigitalOcean domain.
4
+ */
5
+ export class DOManageDnsTool {
6
+ service;
7
+ id = 'doManageDns';
8
+ name = 'doManageDns';
9
+ displayName = 'Manage DO DNS';
10
+ description = 'Manage DNS records on a DigitalOcean domain. Supports listing domains, adding domains, and full CRUD on DNS records (A, AAAA, CNAME, MX, TXT, SRV, NS, CAA). Use action "list-domains" to see all domains, "add-domain" to register a new domain, "list" to view records, "add"/"update"/"delete" to manage records.';
11
+ category = 'cloud';
12
+ version = '0.1.0';
13
+ hasSideEffects = true;
14
+ inputSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ action: {
18
+ type: 'string',
19
+ enum: ['list-domains', 'add-domain', 'list', 'add', 'update', 'delete'],
20
+ description: 'Action to perform on DNS',
21
+ },
22
+ domain: { type: 'string', description: 'Domain name (e.g. "example.com"). Required for all actions except "list-domains".' },
23
+ recordId: { type: 'number', description: 'Record ID (required for "update" and "delete" actions)' },
24
+ recordType: { type: 'string', description: 'DNS record type (e.g. "A", "AAAA", "CNAME", "MX", "TXT", "SRV", "NS", "CAA")' },
25
+ name: { type: 'string', description: 'Record name/hostname (e.g. "@", "www", "mail")' },
26
+ data: { type: 'string', description: 'Record data/value (e.g. IP address, CNAME target, MX server)' },
27
+ ttl: { type: 'number', description: 'Time-to-live in seconds (default: 1800)' },
28
+ priority: { type: 'number', description: 'Priority (for MX and SRV records)' },
29
+ port: { type: 'number', description: 'Port (for SRV records)' },
30
+ weight: { type: 'number', description: 'Weight (for SRV records)' },
31
+ },
32
+ required: ['action'],
33
+ };
34
+ constructor(service) {
35
+ this.service = service;
36
+ }
37
+ async execute(args) {
38
+ try {
39
+ switch (args.action) {
40
+ case 'list-domains': {
41
+ const domains = await this.service.listDomains();
42
+ return { success: true, data: domains };
43
+ }
44
+ case 'add-domain': {
45
+ if (!args.domain) {
46
+ return { success: false, error: 'Domain name is required for "add-domain" action.' };
47
+ }
48
+ const domain = await this.service.addDomain(args.domain);
49
+ return { success: true, data: domain };
50
+ }
51
+ case 'list': {
52
+ if (!args.domain) {
53
+ return { success: false, error: 'Domain name is required for "list" action.' };
54
+ }
55
+ const records = await this.service.listDomainRecords(args.domain);
56
+ return { success: true, data: records };
57
+ }
58
+ case 'add': {
59
+ if (!args.domain) {
60
+ return { success: false, error: 'Domain name is required for "add" action.' };
61
+ }
62
+ if (!args.recordType || !args.name || !args.data) {
63
+ return { success: false, error: 'recordType, name, and data are required for "add" action.' };
64
+ }
65
+ const record = await this.service.createDomainRecord(args.domain, {
66
+ type: args.recordType,
67
+ name: args.name,
68
+ data: args.data,
69
+ ttl: args.ttl,
70
+ priority: args.priority,
71
+ port: args.port,
72
+ weight: args.weight,
73
+ });
74
+ return { success: true, data: record };
75
+ }
76
+ case 'update': {
77
+ if (!args.domain || args.recordId == null) {
78
+ return { success: false, error: 'Domain name and recordId are required for "update" action.' };
79
+ }
80
+ const updated = await this.service.updateDomainRecord(args.domain, args.recordId, {
81
+ type: args.recordType,
82
+ name: args.name,
83
+ data: args.data,
84
+ ttl: args.ttl,
85
+ priority: args.priority,
86
+ port: args.port,
87
+ weight: args.weight,
88
+ });
89
+ return { success: true, data: updated };
90
+ }
91
+ case 'delete': {
92
+ if (!args.domain || args.recordId == null) {
93
+ return { success: false, error: 'Domain name and recordId are required for "delete" action.' };
94
+ }
95
+ await this.service.deleteDomainRecord(args.domain, args.recordId);
96
+ return { success: true, data: { message: `Record ${args.recordId} deleted from ${args.domain}.` } };
97
+ }
98
+ default:
99
+ return { success: false, error: `Unknown action: ${args.action}` };
100
+ }
101
+ }
102
+ catch (err) {
103
+ return { success: false, error: err.message };
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=manageDns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manageDns.js","sourceRoot":"","sources":["../../src/tools/manageDns.ts"],"names":[],"mappings":"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"}
package/manifest.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
3
+ "id": "com.framers.cloud.digitalocean",
4
+ "name": "DigitalOcean Cloud Management",
5
+ "version": "0.1.0",
6
+ "description": "Manage DigitalOcean App Platform apps, Droplets, DNS records, and deployments. Supports creating and deploying PaaS apps from Git, provisioning VPS droplets, and full DNS record management.",
7
+ "author": {
8
+ "name": "Frame.dev",
9
+ "email": "support@frame.dev",
10
+ "url": "https://github.com/framersai"
11
+ },
12
+ "license": "MIT",
13
+ "keywords": ["cloud", "digitalocean", "droplet", "app-platform", "dns", "vps", "paas"],
14
+ "agentosVersion": "^2.0.0",
15
+ "categories": ["tool", "cloud"],
16
+ "platforms": [],
17
+ "sdk": "none",
18
+ "extensions": [
19
+ { "kind": "tool", "id": "doCreateApp", "displayName": "Create DO App", "entry": "./dist/tools/createApp.js" },
20
+ { "kind": "tool", "id": "doCreateDroplet", "displayName": "Create DO Droplet", "entry": "./dist/tools/createDroplet.js" },
21
+ { "kind": "tool", "id": "doListResources", "displayName": "List DO Resources", "entry": "./dist/tools/listResources.js" },
22
+ { "kind": "tool", "id": "doDeployApp", "displayName": "Deploy DO App", "entry": "./dist/tools/deployApp.js" },
23
+ { "kind": "tool", "id": "doManageDns", "displayName": "Manage DO DNS", "entry": "./dist/tools/manageDns.js" },
24
+ { "kind": "tool", "id": "doDeleteResource", "displayName": "Delete DO Resource", "entry": "./dist/tools/deleteResource.js" }
25
+ ],
26
+ "requiredSecrets": ["digitalocean.token"],
27
+ "features": [
28
+ "Create and deploy App Platform apps from Git repositories",
29
+ "Provision and manage Droplets (VPS instances)",
30
+ "Full DNS record management (A, AAAA, CNAME, MX, TXT, SRV, NS)",
31
+ "Trigger deployments on existing apps",
32
+ "List and delete apps and droplets",
33
+ "Automatic region and size selection"
34
+ ]
35
+ }
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@framers/agentos-ext-cloud-digitalocean",
3
+ "version": "0.1.0",
4
+ "description": "DigitalOcean cloud extension — manage App Platform apps, Droplets, DNS records, and deployments via the DigitalOcean REST 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
+ "digitalocean",
22
+ "droplet",
23
+ "app-platform",
24
+ "dns"
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/digitalocean"
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
+ }