@opentabs-dev/opentabs-plugin-google-cloud 0.0.74
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/README.md +159 -0
- package/dist/adapter.iife.js +15556 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/gcloud-api.d.ts +18 -0
- package/dist/gcloud-api.d.ts.map +1 -0
- package/dist/gcloud-api.js +106 -0
- package/dist/gcloud-api.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/disable-service.d.ts +8 -0
- package/dist/tools/disable-service.d.ts.map +1 -0
- package/dist/tools/disable-service.js +22 -0
- package/dist/tools/disable-service.js.map +1 -0
- package/dist/tools/enable-service.d.ts +8 -0
- package/dist/tools/enable-service.d.ts.map +1 -0
- package/dist/tools/enable-service.js +22 -0
- package/dist/tools/enable-service.js.map +1 -0
- package/dist/tools/get-billing-info.d.ts +11 -0
- package/dist/tools/get-billing-info.d.ts.map +1 -0
- package/dist/tools/get-billing-info.js +22 -0
- package/dist/tools/get-billing-info.js.map +1 -0
- package/dist/tools/get-bucket.d.ts +12 -0
- package/dist/tools/get-bucket.d.ts.map +1 -0
- package/dist/tools/get-bucket.js +21 -0
- package/dist/tools/get-bucket.js.map +1 -0
- package/dist/tools/get-cloud-run-service.d.ts +18 -0
- package/dist/tools/get-cloud-run-service.d.ts.map +1 -0
- package/dist/tools/get-cloud-run-service.js +24 -0
- package/dist/tools/get-cloud-run-service.js.map +1 -0
- package/dist/tools/get-cluster.d.ts +17 -0
- package/dist/tools/get-cluster.d.ts.map +1 -0
- package/dist/tools/get-cluster.js +24 -0
- package/dist/tools/get-cluster.js.map +1 -0
- package/dist/tools/get-current-project.d.ts +5 -0
- package/dist/tools/get-current-project.d.ts.map +1 -0
- package/dist/tools/get-current-project.js +23 -0
- package/dist/tools/get-current-project.js.map +1 -0
- package/dist/tools/get-function.d.ts +17 -0
- package/dist/tools/get-function.d.ts.map +1 -0
- package/dist/tools/get-function.js +24 -0
- package/dist/tools/get-function.js.map +1 -0
- package/dist/tools/get-iam-policy.d.ts +10 -0
- package/dist/tools/get-iam-policy.d.ts.map +1 -0
- package/dist/tools/get-iam-policy.js +24 -0
- package/dist/tools/get-iam-policy.js.map +1 -0
- package/dist/tools/get-instance.d.ts +18 -0
- package/dist/tools/get-instance.d.ts.map +1 -0
- package/dist/tools/get-instance.js +24 -0
- package/dist/tools/get-instance.js.map +1 -0
- package/dist/tools/get-project.d.ts +13 -0
- package/dist/tools/get-project.d.ts.map +1 -0
- package/dist/tools/get-project.js +24 -0
- package/dist/tools/get-project.js.map +1 -0
- package/dist/tools/get-sql-instance.d.ts +16 -0
- package/dist/tools/get-sql-instance.d.ts.map +1 -0
- package/dist/tools/get-sql-instance.js +23 -0
- package/dist/tools/get-sql-instance.js.map +1 -0
- package/dist/tools/list-billing-accounts.d.ts +13 -0
- package/dist/tools/list-billing-accounts.d.ts.map +1 -0
- package/dist/tools/list-billing-accounts.js +28 -0
- package/dist/tools/list-billing-accounts.js.map +1 -0
- package/dist/tools/list-buckets.d.ts +15 -0
- package/dist/tools/list-buckets.d.ts.map +1 -0
- package/dist/tools/list-buckets.js +27 -0
- package/dist/tools/list-buckets.js.map +1 -0
- package/dist/tools/list-cloud-run-services.d.ts +19 -0
- package/dist/tools/list-cloud-run-services.d.ts.map +1 -0
- package/dist/tools/list-cloud-run-services.js +30 -0
- package/dist/tools/list-cloud-run-services.js.map +1 -0
- package/dist/tools/list-clusters.d.ts +15 -0
- package/dist/tools/list-clusters.d.ts.map +1 -0
- package/dist/tools/list-clusters.js +24 -0
- package/dist/tools/list-clusters.js.map +1 -0
- package/dist/tools/list-disks.d.ts +19 -0
- package/dist/tools/list-disks.d.ts.map +1 -0
- package/dist/tools/list-disks.js +39 -0
- package/dist/tools/list-disks.js.map +1 -0
- package/dist/tools/list-enabled-services.d.ts +15 -0
- package/dist/tools/list-enabled-services.d.ts.map +1 -0
- package/dist/tools/list-enabled-services.js +27 -0
- package/dist/tools/list-enabled-services.js.map +1 -0
- package/dist/tools/list-firewalls.d.ts +18 -0
- package/dist/tools/list-firewalls.d.ts.map +1 -0
- package/dist/tools/list-firewalls.js +27 -0
- package/dist/tools/list-firewalls.js.map +1 -0
- package/dist/tools/list-functions.d.ts +18 -0
- package/dist/tools/list-functions.d.ts.map +1 -0
- package/dist/tools/list-functions.js +30 -0
- package/dist/tools/list-functions.js.map +1 -0
- package/dist/tools/list-iam-roles.d.ts +15 -0
- package/dist/tools/list-iam-roles.d.ts.map +1 -0
- package/dist/tools/list-iam-roles.js +27 -0
- package/dist/tools/list-iam-roles.js.map +1 -0
- package/dist/tools/list-instances.d.ts +20 -0
- package/dist/tools/list-instances.d.ts.map +1 -0
- package/dist/tools/list-instances.js +46 -0
- package/dist/tools/list-instances.js.map +1 -0
- package/dist/tools/list-log-entries.d.ts +18 -0
- package/dist/tools/list-log-entries.d.ts.map +1 -0
- package/dist/tools/list-log-entries.js +41 -0
- package/dist/tools/list-log-entries.js.map +1 -0
- package/dist/tools/list-networks.d.ts +16 -0
- package/dist/tools/list-networks.d.ts.map +1 -0
- package/dist/tools/list-networks.js +27 -0
- package/dist/tools/list-networks.js.map +1 -0
- package/dist/tools/list-objects.d.ts +18 -0
- package/dist/tools/list-objects.d.ts.map +1 -0
- package/dist/tools/list-objects.js +40 -0
- package/dist/tools/list-objects.js.map +1 -0
- package/dist/tools/list-projects.d.ts +15 -0
- package/dist/tools/list-projects.d.ts.map +1 -0
- package/dist/tools/list-projects.js +33 -0
- package/dist/tools/list-projects.js.map +1 -0
- package/dist/tools/list-service-accounts.d.ts +15 -0
- package/dist/tools/list-service-accounts.d.ts.map +1 -0
- package/dist/tools/list-service-accounts.js +30 -0
- package/dist/tools/list-service-accounts.js.map +1 -0
- package/dist/tools/list-sql-instances.d.ts +18 -0
- package/dist/tools/list-sql-instances.d.ts.map +1 -0
- package/dist/tools/list-sql-instances.js +30 -0
- package/dist/tools/list-sql-instances.js.map +1 -0
- package/dist/tools/schemas.d.ts +427 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +329 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/start-instance.d.ts +9 -0
- package/dist/tools/start-instance.d.ts.map +1 -0
- package/dist/tools/start-instance.js +23 -0
- package/dist/tools/start-instance.js.map +1 -0
- package/dist/tools/stop-instance.d.ts +9 -0
- package/dist/tools/stop-instance.d.ts.map +1 -0
- package/dist/tools/stop-instance.js +23 -0
- package/dist/tools/stop-instance.js.map +1 -0
- package/dist/tools.json +2153 -0
- package/package.json +54 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listFunctions: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
functions: z.ZodArray<z.ZodObject<{
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
state: z.ZodString;
|
|
10
|
+
environment: z.ZodString;
|
|
11
|
+
runtime: z.ZodString;
|
|
12
|
+
entry_point: z.ZodString;
|
|
13
|
+
url: z.ZodString;
|
|
14
|
+
update_time: z.ZodString;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
next_page_token: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
//# sourceMappingURL=list-functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-functions.d.ts","sourceRoot":"","sources":["../../src/tools/list-functions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;kBA2BxB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { cloudFunctionSchema, mapCloudFunction } from './schemas.js';
|
|
5
|
+
export const listFunctions = defineTool({
|
|
6
|
+
name: 'list_functions',
|
|
7
|
+
displayName: 'List Functions',
|
|
8
|
+
description: 'List Cloud Functions in the project across all locations.',
|
|
9
|
+
summary: 'List Cloud Functions',
|
|
10
|
+
icon: 'zap',
|
|
11
|
+
group: 'Cloud Functions',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
page_size: z.number().int().min(1).max(100).optional().describe('Max results per page (default 50)'),
|
|
15
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
functions: z.array(cloudFunctionSchema).describe('List of Cloud Functions'),
|
|
19
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
20
|
+
}),
|
|
21
|
+
handle: async (params) => {
|
|
22
|
+
const projectId = resolveProjectId(params.project_id);
|
|
23
|
+
const data = await gcpApi(`https://cloudfunctions.googleapis.com/v2/projects/${projectId}/locations/-/functions`, { params: { pageSize: params.page_size ?? 50, pageToken: params.page_token } });
|
|
24
|
+
return {
|
|
25
|
+
functions: (data.functions ?? []).map(mapCloudFunction),
|
|
26
|
+
next_page_token: data.nextPageToken ?? '',
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=list-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-functions.js","sourceRoot":"","sources":["../../src/tools/list-functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,2DAA2D;IACxE,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACpG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC3E,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,qDAAqD,SAAS,wBAAwB,EACtF,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CAC/E,CAAC;QACF,OAAO;YACL,SAAS,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACvD,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listIamRoles: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
roles: z.ZodArray<z.ZodObject<{
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
title: z.ZodString;
|
|
10
|
+
description: z.ZodString;
|
|
11
|
+
stage: z.ZodString;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
next_page_token: z.ZodString;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
//# sourceMappingURL=list-iam-roles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-iam-roles.d.ts","sourceRoot":"","sources":["../../src/tools/list-iam-roles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;;;;kBAwBvB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { roleSchema, mapRole } from './schemas.js';
|
|
5
|
+
export const listIamRoles = defineTool({
|
|
6
|
+
name: 'list_iam_roles',
|
|
7
|
+
displayName: 'List IAM Roles',
|
|
8
|
+
description: 'List custom IAM roles defined in the project. Use "roles" as a prefix to list predefined roles.',
|
|
9
|
+
summary: 'List custom IAM roles',
|
|
10
|
+
icon: 'key',
|
|
11
|
+
group: 'IAM',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
page_size: z.number().int().min(1).max(300).optional().describe('Max results per page (default 50)'),
|
|
15
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
roles: z.array(roleSchema).describe('List of IAM roles'),
|
|
19
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
20
|
+
}),
|
|
21
|
+
handle: async (params) => {
|
|
22
|
+
const projectId = resolveProjectId(params.project_id);
|
|
23
|
+
const data = await gcpApi(`https://iam.googleapis.com/v1/projects/${projectId}/roles`, { params: { pageSize: params.page_size ?? 50, pageToken: params.page_token } });
|
|
24
|
+
return { roles: (data.roles ?? []).map(mapRole), next_page_token: data.nextPageToken ?? '' };
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=list-iam-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-iam-roles.js","sourceRoot":"","sources":["../../src/tools/list-iam-roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGnD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,iGAAiG;IAC9G,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACpG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACxD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,0CAA0C,SAAS,QAAQ,EAC3D,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CAC/E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;IAC/F,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listInstances: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
zone: z.ZodOptional<z.ZodString>;
|
|
5
|
+
max_results: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
instances: z.ZodArray<z.ZodObject<{
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
zone: z.ZodString;
|
|
12
|
+
machine_type: z.ZodString;
|
|
13
|
+
status: z.ZodString;
|
|
14
|
+
internal_ip: z.ZodString;
|
|
15
|
+
external_ip: z.ZodString;
|
|
16
|
+
creation_timestamp: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
next_page_token: z.ZodString;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
//# sourceMappingURL=list-instances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-instances.d.ts","sourceRoot":"","sources":["../../src/tools/list-instances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;kBA8CxB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { instanceSchema, mapInstance } from './schemas.js';
|
|
5
|
+
export const listInstances = defineTool({
|
|
6
|
+
name: 'list_instances',
|
|
7
|
+
displayName: 'List Instances',
|
|
8
|
+
description: 'List Compute Engine VM instances in a zone. If no zone is specified, lists instances across all zones using aggregated list.',
|
|
9
|
+
summary: 'List Compute Engine VM instances',
|
|
10
|
+
icon: 'server',
|
|
11
|
+
group: 'Compute',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
zone: z.string().optional().describe('Zone (e.g., "us-central1-a"). If omitted, lists across all zones.'),
|
|
15
|
+
max_results: z.number().int().min(1).max(500).optional().describe('Max results (default 50)'),
|
|
16
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
17
|
+
}),
|
|
18
|
+
output: z.object({
|
|
19
|
+
instances: z.array(instanceSchema).describe('List of VM instances'),
|
|
20
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
21
|
+
}),
|
|
22
|
+
handle: async (params) => {
|
|
23
|
+
const projectId = resolveProjectId(params.project_id);
|
|
24
|
+
if (params.zone) {
|
|
25
|
+
const data = await gcpApi(`https://compute.googleapis.com/compute/v1/projects/${projectId}/zones/${params.zone}/instances`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
|
|
26
|
+
return {
|
|
27
|
+
instances: (data.items ?? []).map(mapInstance),
|
|
28
|
+
next_page_token: data.nextPageToken ?? '',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Aggregated list across all zones
|
|
32
|
+
const data = await gcpApi(`https://compute.googleapis.com/compute/v1/projects/${projectId}/aggregated/instances`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
|
|
33
|
+
const instances = [];
|
|
34
|
+
if (data.items) {
|
|
35
|
+
for (const zone of Object.values(data.items)) {
|
|
36
|
+
if (zone.instances)
|
|
37
|
+
instances.push(...zone.instances);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
instances: instances.map(mapInstance),
|
|
42
|
+
next_page_token: data.nextPageToken ?? '',
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=list-instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-instances.js","sourceRoot":"","sources":["../../src/tools/list-instances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EACT,8HAA8H;IAChI,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;QACzG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACnE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,sDAAsD,SAAS,UAAU,MAAM,CAAC,IAAI,YAAY,EAChG,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;YACF,OAAO;gBACL,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;gBAC9C,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;aAC1C,CAAC;QACJ,CAAC;QACD,mCAAmC;QACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,sDAAsD,SAAS,uBAAuB,EACtF,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;QACF,MAAM,SAAS,GAAkB,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,IAAI,IAAI,CAAC,SAAS;oBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,OAAO;YACL,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YACrC,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listLogEntries: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
filter: z.ZodOptional<z.ZodString>;
|
|
5
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
7
|
+
order_by: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
entries: z.ZodArray<z.ZodObject<{
|
|
10
|
+
log_name: z.ZodString;
|
|
11
|
+
severity: z.ZodString;
|
|
12
|
+
timestamp: z.ZodString;
|
|
13
|
+
text: z.ZodString;
|
|
14
|
+
resource_type: z.ZodString;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
next_page_token: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
//# sourceMappingURL=list-log-entries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-log-entries.d.ts","sourceRoot":"","sources":["../../src/tools/list-log-entries.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;kBAuCzB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { logEntrySchema, mapLogEntry } from './schemas.js';
|
|
5
|
+
export const listLogEntries = defineTool({
|
|
6
|
+
name: 'list_log_entries',
|
|
7
|
+
displayName: 'List Log Entries',
|
|
8
|
+
description: "List log entries from Cloud Logging. Supports advanced log filters (e.g., 'severity>=ERROR', 'resource.type=\"gce_instance\"').",
|
|
9
|
+
summary: 'List Cloud Logging entries',
|
|
10
|
+
icon: 'scroll-text',
|
|
11
|
+
group: 'Logging',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
filter: z.string().optional().describe("Cloud Logging filter expression (e.g., 'severity>=ERROR')"),
|
|
15
|
+
page_size: z.number().int().min(1).max(1000).optional().describe('Max results per page (default 50)'),
|
|
16
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
17
|
+
order_by: z.string().optional().describe('Sort order: "timestamp desc" (default) or "timestamp asc"'),
|
|
18
|
+
}),
|
|
19
|
+
output: z.object({
|
|
20
|
+
entries: z.array(logEntrySchema).describe('List of log entries'),
|
|
21
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
22
|
+
}),
|
|
23
|
+
handle: async (params) => {
|
|
24
|
+
const projectId = resolveProjectId(params.project_id);
|
|
25
|
+
const data = await gcpApi('https://logging.googleapis.com/v2/entries:list', {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
body: {
|
|
28
|
+
resourceNames: [`projects/${projectId}`],
|
|
29
|
+
filter: params.filter,
|
|
30
|
+
pageSize: params.page_size ?? 50,
|
|
31
|
+
pageToken: params.page_token,
|
|
32
|
+
orderBy: params.order_by ?? 'timestamp desc',
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
entries: (data.entries ?? []).map(mapLogEntry),
|
|
37
|
+
next_page_token: data.nextPageToken ?? '',
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=list-log-entries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-log-entries.js","sourceRoot":"","sources":["../../src/tools/list-log-entries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,iIAAiI;IACnI,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QACnG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACrG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;KACtG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,gDAAgD,EAChD;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,aAAa,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC;gBACxC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;gBAChC,SAAS,EAAE,MAAM,CAAC,UAAU;gBAC5B,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,gBAAgB;aAC7C;SACF,CACF,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC;YAC9C,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listNetworks: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
max_results: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
networks: z.ZodArray<z.ZodObject<{
|
|
8
|
+
id: z.ZodString;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
auto_create_subnetworks: z.ZodBoolean;
|
|
11
|
+
routing_mode: z.ZodString;
|
|
12
|
+
creation_timestamp: z.ZodString;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
next_page_token: z.ZodString;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
//# sourceMappingURL=list-networks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-networks.d.ts","sourceRoot":"","sources":["../../src/tools/list-networks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;kBAwBvB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { networkSchema, mapNetwork } from './schemas.js';
|
|
5
|
+
export const listNetworks = defineTool({
|
|
6
|
+
name: 'list_networks',
|
|
7
|
+
displayName: 'List Networks',
|
|
8
|
+
description: 'List VPC networks in the project.',
|
|
9
|
+
summary: 'List VPC networks',
|
|
10
|
+
icon: 'network',
|
|
11
|
+
group: 'Compute',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
max_results: z.number().int().min(1).max(500).optional().describe('Max results (default 50)'),
|
|
15
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
networks: z.array(networkSchema).describe('List of VPC networks'),
|
|
19
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
20
|
+
}),
|
|
21
|
+
handle: async (params) => {
|
|
22
|
+
const projectId = resolveProjectId(params.project_id);
|
|
23
|
+
const data = await gcpApi(`https://compute.googleapis.com/compute/v1/projects/${projectId}/global/networks`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
|
|
24
|
+
return { networks: (data.items ?? []).map(mapNetwork), next_page_token: data.nextPageToken ?? '' };
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=list-networks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-networks.js","sourceRoot":"","sources":["../../src/tools/list-networks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,mCAAmC;IAChD,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACjE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,sDAAsD,SAAS,kBAAkB,EACjF,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;IACrG,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listObjects: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
bucket_name: z.ZodString;
|
|
4
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
5
|
+
delimiter: z.ZodOptional<z.ZodString>;
|
|
6
|
+
max_results: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
objects: z.ZodArray<z.ZodObject<{
|
|
10
|
+
name: z.ZodString;
|
|
11
|
+
size: z.ZodString;
|
|
12
|
+
content_type: z.ZodString;
|
|
13
|
+
updated: z.ZodString;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
prefixes: z.ZodArray<z.ZodString>;
|
|
16
|
+
next_page_token: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
//# sourceMappingURL=list-objects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects.d.ts","sourceRoot":"","sources":["../../src/tools/list-objects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;kBAqCtB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi } from '../gcloud-api.js';
|
|
4
|
+
import { objectSchema, mapObject } from './schemas.js';
|
|
5
|
+
export const listObjects = defineTool({
|
|
6
|
+
name: 'list_objects',
|
|
7
|
+
displayName: 'List Objects',
|
|
8
|
+
description: 'List objects in a Cloud Storage bucket. Supports prefix filtering for directory-like browsing.',
|
|
9
|
+
summary: 'List objects in a storage bucket',
|
|
10
|
+
icon: 'file',
|
|
11
|
+
group: 'Storage',
|
|
12
|
+
input: z.object({
|
|
13
|
+
bucket_name: z.string().describe('Bucket name'),
|
|
14
|
+
prefix: z.string().optional().describe('Object name prefix for filtering (e.g., "logs/2024/")'),
|
|
15
|
+
delimiter: z.string().optional().describe('Delimiter for directory-like listing (typically "/")'),
|
|
16
|
+
max_results: z.number().int().min(1).max(1000).optional().describe('Max results (default 50)'),
|
|
17
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
18
|
+
}),
|
|
19
|
+
output: z.object({
|
|
20
|
+
objects: z.array(objectSchema).describe('List of objects'),
|
|
21
|
+
prefixes: z.array(z.string()).describe('Common prefixes (subdirectories when delimiter is used)'),
|
|
22
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
23
|
+
}),
|
|
24
|
+
handle: async (params) => {
|
|
25
|
+
const data = await gcpApi(`https://storage.googleapis.com/storage/v1/b/${params.bucket_name}/o`, {
|
|
26
|
+
params: {
|
|
27
|
+
prefix: params.prefix,
|
|
28
|
+
delimiter: params.delimiter,
|
|
29
|
+
maxResults: params.max_results ?? 50,
|
|
30
|
+
pageToken: params.page_token,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
objects: (data.items ?? []).map(mapObject),
|
|
35
|
+
prefixes: data.prefixes ?? [],
|
|
36
|
+
next_page_token: data.nextPageToken ?? '',
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=list-objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-objects.js","sourceRoot":"","sources":["../../src/tools/list-objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGvD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,gGAAgG;IAC7G,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;QAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;QACjG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC9F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC1D,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,yDAAyD,CAAC;QACjG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,+CAA+C,MAAM,CAAC,WAAW,IAAI,EACrE;YACE,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACpC,SAAS,EAAE,MAAM,CAAC,UAAU;aAC7B;SACF,CACF,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YAC7B,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listProjects: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
4
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
projects: z.ZodArray<z.ZodObject<{
|
|
7
|
+
project_id: z.ZodString;
|
|
8
|
+
project_number: z.ZodString;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
state: z.ZodString;
|
|
11
|
+
create_time: z.ZodString;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
next_page_token: z.ZodString;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
//# sourceMappingURL=list-projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-projects.d.ts","sourceRoot":"","sources":["../../src/tools/list-projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;;;;kBA+BvB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi } from '../gcloud-api.js';
|
|
4
|
+
import { projectSchema, mapProjectV1 } from './schemas.js';
|
|
5
|
+
export const listProjects = defineTool({
|
|
6
|
+
name: 'list_projects',
|
|
7
|
+
displayName: 'List Projects',
|
|
8
|
+
description: 'List all GCP projects accessible to the current user. Returns project IDs, names, and lifecycle states.',
|
|
9
|
+
summary: 'List accessible GCP projects',
|
|
10
|
+
icon: 'folder',
|
|
11
|
+
group: 'Projects',
|
|
12
|
+
input: z.object({
|
|
13
|
+
page_size: z.number().int().min(1).max(100).optional().describe('Max results per page (default 50, max 100)'),
|
|
14
|
+
page_token: z.string().optional().describe('Page token from a previous response for pagination'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({
|
|
17
|
+
projects: z.array(projectSchema).describe('List of projects'),
|
|
18
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
19
|
+
}),
|
|
20
|
+
handle: async (params) => {
|
|
21
|
+
const data = await gcpApi('https://cloudresourcemanager.googleapis.com/v1/projects', {
|
|
22
|
+
params: {
|
|
23
|
+
pageSize: params.page_size ?? 50,
|
|
24
|
+
pageToken: params.page_token,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
projects: (data.projects ?? []).map(mapProjectV1),
|
|
29
|
+
next_page_token: data.nextPageToken ?? '',
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=list-projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-projects.js","sourceRoot":"","sources":["../../src/tools/list-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EACT,yGAAyG;IAC3G,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAC7G,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KACjG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,yDAAyD,EACzD;YACE,MAAM,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;gBAChC,SAAS,EAAE,MAAM,CAAC,UAAU;aAC7B;SACF,CACF,CAAC;QACF,OAAO;YACL,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;YACjD,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listServiceAccounts: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
page_size: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
service_accounts: z.ZodArray<z.ZodObject<{
|
|
8
|
+
email: z.ZodString;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
display_name: z.ZodString;
|
|
11
|
+
disabled: z.ZodBoolean;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
next_page_token: z.ZodString;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
//# sourceMappingURL=list-service-accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-service-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/list-service-accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;kBA2B9B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { serviceAccountSchema, mapServiceAccount } from './schemas.js';
|
|
5
|
+
export const listServiceAccounts = defineTool({
|
|
6
|
+
name: 'list_service_accounts',
|
|
7
|
+
displayName: 'List Service Accounts',
|
|
8
|
+
description: 'List IAM service accounts in the project.',
|
|
9
|
+
summary: 'List IAM service accounts',
|
|
10
|
+
icon: 'bot',
|
|
11
|
+
group: 'IAM',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
page_size: z.number().int().min(1).max(100).optional().describe('Max results per page (default 50)'),
|
|
15
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
service_accounts: z.array(serviceAccountSchema).describe('List of service accounts'),
|
|
19
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
20
|
+
}),
|
|
21
|
+
handle: async (params) => {
|
|
22
|
+
const projectId = resolveProjectId(params.project_id);
|
|
23
|
+
const data = await gcpApi(`https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts`, { params: { pageSize: params.page_size ?? 50, pageToken: params.page_token } });
|
|
24
|
+
return {
|
|
25
|
+
service_accounts: (data.accounts ?? []).map(mapServiceAccount),
|
|
26
|
+
next_page_token: data.nextPageToken ?? '',
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=list-service-accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-service-accounts.js","sourceRoot":"","sources":["../../src/tools/list-service-accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;IAC5C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,uBAAuB;IACpC,WAAW,EAAE,2CAA2C;IACxD,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACpG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACpF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,0CAA0C,SAAS,kBAAkB,EACrE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CAC/E,CAAC;QACF,OAAO;YACL,gBAAgB,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;YAC9D,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const listSqlInstances: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
max_results: z.ZodOptional<z.ZodNumber>;
|
|
5
|
+
page_token: z.ZodOptional<z.ZodString>;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
instances: z.ZodArray<z.ZodObject<{
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
database_version: z.ZodString;
|
|
10
|
+
state: z.ZodString;
|
|
11
|
+
region: z.ZodString;
|
|
12
|
+
tier: z.ZodString;
|
|
13
|
+
ip_address: z.ZodString;
|
|
14
|
+
create_time: z.ZodString;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
next_page_token: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
//# sourceMappingURL=list-sql-instances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sql-instances.d.ts","sourceRoot":"","sources":["../../src/tools/list-sql-instances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;kBA2B3B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { gcpApi, resolveProjectId } from '../gcloud-api.js';
|
|
4
|
+
import { sqlInstanceSchema, mapSqlInstance } from './schemas.js';
|
|
5
|
+
export const listSqlInstances = defineTool({
|
|
6
|
+
name: 'list_sql_instances',
|
|
7
|
+
displayName: 'List Cloud SQL Instances',
|
|
8
|
+
description: 'List Cloud SQL database instances in the project.',
|
|
9
|
+
summary: 'List Cloud SQL instances',
|
|
10
|
+
icon: 'database',
|
|
11
|
+
group: 'Cloud SQL',
|
|
12
|
+
input: z.object({
|
|
13
|
+
project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
|
|
14
|
+
max_results: z.number().int().min(1).max(500).optional().describe('Max results (default 50)'),
|
|
15
|
+
page_token: z.string().optional().describe('Page token from a previous response'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({
|
|
18
|
+
instances: z.array(sqlInstanceSchema).describe('List of Cloud SQL instances'),
|
|
19
|
+
next_page_token: z.string().describe('Token for next page, empty if no more results'),
|
|
20
|
+
}),
|
|
21
|
+
handle: async (params) => {
|
|
22
|
+
const projectId = resolveProjectId(params.project_id);
|
|
23
|
+
const data = await gcpApi(`https://sqladmin.googleapis.com/v1/projects/${projectId}/instances`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
|
|
24
|
+
return {
|
|
25
|
+
instances: (data.items ?? []).map(mapSqlInstance),
|
|
26
|
+
next_page_token: data.nextPageToken ?? '',
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=list-sql-instances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-sql-instances.js","sourceRoot":"","sources":["../../src/tools/list-sql-instances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,mDAAmD;IAChE,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAClF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC7E,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;KACtF,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,+CAA+C,SAAS,YAAY,EACpE,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;QACF,OAAO;YACL,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;YACjD,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|