@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.
Files changed (137) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +15556 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/gcloud-api.d.ts +18 -0
  5. package/dist/gcloud-api.d.ts.map +1 -0
  6. package/dist/gcloud-api.js +106 -0
  7. package/dist/gcloud-api.js.map +1 -0
  8. package/dist/index.d.ts +14 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +100 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/tools/disable-service.d.ts +8 -0
  13. package/dist/tools/disable-service.d.ts.map +1 -0
  14. package/dist/tools/disable-service.js +22 -0
  15. package/dist/tools/disable-service.js.map +1 -0
  16. package/dist/tools/enable-service.d.ts +8 -0
  17. package/dist/tools/enable-service.d.ts.map +1 -0
  18. package/dist/tools/enable-service.js +22 -0
  19. package/dist/tools/enable-service.js.map +1 -0
  20. package/dist/tools/get-billing-info.d.ts +11 -0
  21. package/dist/tools/get-billing-info.d.ts.map +1 -0
  22. package/dist/tools/get-billing-info.js +22 -0
  23. package/dist/tools/get-billing-info.js.map +1 -0
  24. package/dist/tools/get-bucket.d.ts +12 -0
  25. package/dist/tools/get-bucket.d.ts.map +1 -0
  26. package/dist/tools/get-bucket.js +21 -0
  27. package/dist/tools/get-bucket.js.map +1 -0
  28. package/dist/tools/get-cloud-run-service.d.ts +18 -0
  29. package/dist/tools/get-cloud-run-service.d.ts.map +1 -0
  30. package/dist/tools/get-cloud-run-service.js +24 -0
  31. package/dist/tools/get-cloud-run-service.js.map +1 -0
  32. package/dist/tools/get-cluster.d.ts +17 -0
  33. package/dist/tools/get-cluster.d.ts.map +1 -0
  34. package/dist/tools/get-cluster.js +24 -0
  35. package/dist/tools/get-cluster.js.map +1 -0
  36. package/dist/tools/get-current-project.d.ts +5 -0
  37. package/dist/tools/get-current-project.d.ts.map +1 -0
  38. package/dist/tools/get-current-project.js +23 -0
  39. package/dist/tools/get-current-project.js.map +1 -0
  40. package/dist/tools/get-function.d.ts +17 -0
  41. package/dist/tools/get-function.d.ts.map +1 -0
  42. package/dist/tools/get-function.js +24 -0
  43. package/dist/tools/get-function.js.map +1 -0
  44. package/dist/tools/get-iam-policy.d.ts +10 -0
  45. package/dist/tools/get-iam-policy.d.ts.map +1 -0
  46. package/dist/tools/get-iam-policy.js +24 -0
  47. package/dist/tools/get-iam-policy.js.map +1 -0
  48. package/dist/tools/get-instance.d.ts +18 -0
  49. package/dist/tools/get-instance.d.ts.map +1 -0
  50. package/dist/tools/get-instance.js +24 -0
  51. package/dist/tools/get-instance.js.map +1 -0
  52. package/dist/tools/get-project.d.ts +13 -0
  53. package/dist/tools/get-project.d.ts.map +1 -0
  54. package/dist/tools/get-project.js +24 -0
  55. package/dist/tools/get-project.js.map +1 -0
  56. package/dist/tools/get-sql-instance.d.ts +16 -0
  57. package/dist/tools/get-sql-instance.d.ts.map +1 -0
  58. package/dist/tools/get-sql-instance.js +23 -0
  59. package/dist/tools/get-sql-instance.js.map +1 -0
  60. package/dist/tools/list-billing-accounts.d.ts +13 -0
  61. package/dist/tools/list-billing-accounts.d.ts.map +1 -0
  62. package/dist/tools/list-billing-accounts.js +28 -0
  63. package/dist/tools/list-billing-accounts.js.map +1 -0
  64. package/dist/tools/list-buckets.d.ts +15 -0
  65. package/dist/tools/list-buckets.d.ts.map +1 -0
  66. package/dist/tools/list-buckets.js +27 -0
  67. package/dist/tools/list-buckets.js.map +1 -0
  68. package/dist/tools/list-cloud-run-services.d.ts +19 -0
  69. package/dist/tools/list-cloud-run-services.d.ts.map +1 -0
  70. package/dist/tools/list-cloud-run-services.js +30 -0
  71. package/dist/tools/list-cloud-run-services.js.map +1 -0
  72. package/dist/tools/list-clusters.d.ts +15 -0
  73. package/dist/tools/list-clusters.d.ts.map +1 -0
  74. package/dist/tools/list-clusters.js +24 -0
  75. package/dist/tools/list-clusters.js.map +1 -0
  76. package/dist/tools/list-disks.d.ts +19 -0
  77. package/dist/tools/list-disks.d.ts.map +1 -0
  78. package/dist/tools/list-disks.js +39 -0
  79. package/dist/tools/list-disks.js.map +1 -0
  80. package/dist/tools/list-enabled-services.d.ts +15 -0
  81. package/dist/tools/list-enabled-services.d.ts.map +1 -0
  82. package/dist/tools/list-enabled-services.js +27 -0
  83. package/dist/tools/list-enabled-services.js.map +1 -0
  84. package/dist/tools/list-firewalls.d.ts +18 -0
  85. package/dist/tools/list-firewalls.d.ts.map +1 -0
  86. package/dist/tools/list-firewalls.js +27 -0
  87. package/dist/tools/list-firewalls.js.map +1 -0
  88. package/dist/tools/list-functions.d.ts +18 -0
  89. package/dist/tools/list-functions.d.ts.map +1 -0
  90. package/dist/tools/list-functions.js +30 -0
  91. package/dist/tools/list-functions.js.map +1 -0
  92. package/dist/tools/list-iam-roles.d.ts +15 -0
  93. package/dist/tools/list-iam-roles.d.ts.map +1 -0
  94. package/dist/tools/list-iam-roles.js +27 -0
  95. package/dist/tools/list-iam-roles.js.map +1 -0
  96. package/dist/tools/list-instances.d.ts +20 -0
  97. package/dist/tools/list-instances.d.ts.map +1 -0
  98. package/dist/tools/list-instances.js +46 -0
  99. package/dist/tools/list-instances.js.map +1 -0
  100. package/dist/tools/list-log-entries.d.ts +18 -0
  101. package/dist/tools/list-log-entries.d.ts.map +1 -0
  102. package/dist/tools/list-log-entries.js +41 -0
  103. package/dist/tools/list-log-entries.js.map +1 -0
  104. package/dist/tools/list-networks.d.ts +16 -0
  105. package/dist/tools/list-networks.d.ts.map +1 -0
  106. package/dist/tools/list-networks.js +27 -0
  107. package/dist/tools/list-networks.js.map +1 -0
  108. package/dist/tools/list-objects.d.ts +18 -0
  109. package/dist/tools/list-objects.d.ts.map +1 -0
  110. package/dist/tools/list-objects.js +40 -0
  111. package/dist/tools/list-objects.js.map +1 -0
  112. package/dist/tools/list-projects.d.ts +15 -0
  113. package/dist/tools/list-projects.d.ts.map +1 -0
  114. package/dist/tools/list-projects.js +33 -0
  115. package/dist/tools/list-projects.js.map +1 -0
  116. package/dist/tools/list-service-accounts.d.ts +15 -0
  117. package/dist/tools/list-service-accounts.d.ts.map +1 -0
  118. package/dist/tools/list-service-accounts.js +30 -0
  119. package/dist/tools/list-service-accounts.js.map +1 -0
  120. package/dist/tools/list-sql-instances.d.ts +18 -0
  121. package/dist/tools/list-sql-instances.d.ts.map +1 -0
  122. package/dist/tools/list-sql-instances.js +30 -0
  123. package/dist/tools/list-sql-instances.js.map +1 -0
  124. package/dist/tools/schemas.d.ts +427 -0
  125. package/dist/tools/schemas.d.ts.map +1 -0
  126. package/dist/tools/schemas.js +329 -0
  127. package/dist/tools/schemas.js.map +1 -0
  128. package/dist/tools/start-instance.d.ts +9 -0
  129. package/dist/tools/start-instance.d.ts.map +1 -0
  130. package/dist/tools/start-instance.js +23 -0
  131. package/dist/tools/start-instance.js.map +1 -0
  132. package/dist/tools/stop-instance.d.ts +9 -0
  133. package/dist/tools/stop-instance.d.ts.map +1 -0
  134. package/dist/tools/stop-instance.js +23 -0
  135. package/dist/tools/stop-instance.js.map +1 -0
  136. package/dist/tools.json +2153 -0
  137. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-function.js","sourceRoot":"","sources":["../../src/tools/get-function.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,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,2DAA2D;IACxE,OAAO,EAAE,sBAAsB;IAC/B,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IACnD,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,cAAc,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,aAAa,EAAE,CAChI,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { z } from 'zod';
2
+ export declare const getIamPolicy: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ project_id: z.ZodOptional<z.ZodString>;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ bindings: z.ZodArray<z.ZodObject<{
6
+ role: z.ZodString;
7
+ members: z.ZodArray<z.ZodString>;
8
+ }, z.core.$strip>>;
9
+ }, z.core.$strip>>;
10
+ //# sourceMappingURL=get-iam-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-iam-policy.d.ts","sourceRoot":"","sources":["../../src/tools/get-iam-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;kBAqBvB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { gcpApi, resolveProjectId } from '../gcloud-api.js';
4
+ import { bindingSchema, mapBinding } from './schemas.js';
5
+ export const getIamPolicy = defineTool({
6
+ name: 'get_iam_policy',
7
+ displayName: 'Get IAM Policy',
8
+ description: 'Get the IAM access control policy for the project. Returns all role bindings (who has which role).',
9
+ summary: 'Get the project IAM policy',
10
+ icon: 'shield-check',
11
+ group: 'IAM',
12
+ input: z.object({
13
+ project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
14
+ }),
15
+ output: z.object({
16
+ bindings: z.array(bindingSchema).describe('List of role-to-members bindings'),
17
+ }),
18
+ handle: async (params) => {
19
+ const projectId = resolveProjectId(params.project_id);
20
+ const data = await gcpApi(`https://cloudresourcemanager.googleapis.com/v3/projects/${projectId}:getIamPolicy`, { method: 'POST', body: {} });
21
+ return { bindings: (data.bindings ?? []).map(mapBinding) };
22
+ },
23
+ });
24
+ //# sourceMappingURL=get-iam-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-iam-policy.js","sourceRoot":"","sources":["../../src/tools/get-iam-policy.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,gBAAgB;IACtB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,oGAAoG;IACjH,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,cAAc;IACpB,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;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAC9E,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,2DAA2D,SAAS,eAAe,EACnF,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAC7B,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ export declare const getInstance: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ zone: z.ZodString;
4
+ instance_name: z.ZodString;
5
+ project_id: z.ZodOptional<z.ZodString>;
6
+ }, z.core.$strip>, z.ZodObject<{
7
+ instance: z.ZodObject<{
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ zone: z.ZodString;
11
+ machine_type: z.ZodString;
12
+ status: z.ZodString;
13
+ internal_ip: z.ZodString;
14
+ external_ip: z.ZodString;
15
+ creation_timestamp: z.ZodString;
16
+ }, z.core.$strip>;
17
+ }, z.core.$strip>>;
18
+ //# sourceMappingURL=get-instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-instance.d.ts","sourceRoot":"","sources":["../../src/tools/get-instance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;kBAoBtB,CAAC"}
@@ -0,0 +1,24 @@
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 getInstance = defineTool({
6
+ name: 'get_instance',
7
+ displayName: 'Get Instance',
8
+ description: 'Get detailed information about a specific Compute Engine VM instance.',
9
+ summary: 'Get a Compute Engine VM instance',
10
+ icon: 'server',
11
+ group: 'Compute',
12
+ input: z.object({
13
+ zone: z.string().describe('Zone (e.g., "us-central1-a")'),
14
+ instance_name: z.string().describe('Instance name'),
15
+ project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
16
+ }),
17
+ output: z.object({ instance: instanceSchema }),
18
+ handle: async (params) => {
19
+ const projectId = resolveProjectId(params.project_id);
20
+ const data = await gcpApi(`https://compute.googleapis.com/compute/v1/projects/${projectId}/zones/${params.zone}/instances/${params.instance_name}`);
21
+ return { instance: mapInstance(data) };
22
+ },
23
+ });
24
+ //# sourceMappingURL=get-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-instance.js","sourceRoot":"","sources":["../../src/tools/get-instance.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,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,uEAAuE;IACpF,OAAO,EAAE,kCAAkC;IAC3C,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACzD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC9C,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,UAAU,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,aAAa,EAAE,CACzH,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IACzC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export declare const getProject: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ project_id: z.ZodOptional<z.ZodString>;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ project: z.ZodObject<{
6
+ project_id: z.ZodString;
7
+ project_number: z.ZodString;
8
+ name: z.ZodString;
9
+ state: z.ZodString;
10
+ create_time: z.ZodString;
11
+ }, z.core.$strip>;
12
+ }, z.core.$strip>>;
13
+ //# sourceMappingURL=get-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project.d.ts","sourceRoot":"","sources":["../../src/tools/get-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,UAAU;;;;;;;;;;kBAmBrB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { gcpApi, resolveProjectId } from '../gcloud-api.js';
4
+ import { projectSchema, mapProjectV3 } from './schemas.js';
5
+ export const getProject = defineTool({
6
+ name: 'get_project',
7
+ displayName: 'Get Project',
8
+ description: 'Get detailed information about a GCP project by its project ID. Defaults to the currently active project if no ID is provided.',
9
+ summary: 'Get details about a GCP project',
10
+ icon: 'folder-open',
11
+ group: 'Projects',
12
+ input: z.object({
13
+ project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
14
+ }),
15
+ output: z.object({
16
+ project: projectSchema,
17
+ }),
18
+ handle: async (params) => {
19
+ const projectId = resolveProjectId(params.project_id);
20
+ const data = await gcpApi(`https://cloudresourcemanager.googleapis.com/v3/projects/${projectId}`);
21
+ return { project: mapProjectV3(data) };
22
+ },
23
+ });
24
+ //# sourceMappingURL=get-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-project.js","sourceRoot":"","sources":["../../src/tools/get-project.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,YAAY,EAAE,MAAM,cAAc,CAAC;AAG3D,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EACT,gIAAgI;IAClI,OAAO,EAAE,iCAAiC;IAC1C,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,aAAa;KACvB,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,CAAe,2DAA2D,SAAS,EAAE,CAAC,CAAC;QAChH,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;IACzC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export declare const getSqlInstance: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ instance_name: z.ZodString;
4
+ project_id: z.ZodOptional<z.ZodString>;
5
+ }, z.core.$strip>, z.ZodObject<{
6
+ instance: z.ZodObject<{
7
+ name: z.ZodString;
8
+ database_version: z.ZodString;
9
+ state: z.ZodString;
10
+ region: z.ZodString;
11
+ tier: z.ZodString;
12
+ ip_address: z.ZodString;
13
+ create_time: z.ZodString;
14
+ }, z.core.$strip>;
15
+ }, z.core.$strip>>;
16
+ //# sourceMappingURL=get-sql-instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-sql-instance.d.ts","sourceRoot":"","sources":["../../src/tools/get-sql-instance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;kBAmBzB,CAAC"}
@@ -0,0 +1,23 @@
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 getSqlInstance = defineTool({
6
+ name: 'get_sql_instance',
7
+ displayName: 'Get Cloud SQL Instance',
8
+ description: 'Get detailed information about a specific Cloud SQL database instance.',
9
+ summary: 'Get a Cloud SQL instance',
10
+ icon: 'database',
11
+ group: 'Cloud SQL',
12
+ input: z.object({
13
+ instance_name: z.string().describe('Cloud SQL instance name'),
14
+ project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
15
+ }),
16
+ output: z.object({ instance: sqlInstanceSchema }),
17
+ handle: async (params) => {
18
+ const projectId = resolveProjectId(params.project_id);
19
+ const data = await gcpApi(`https://sqladmin.googleapis.com/v1/projects/${projectId}/instances/${params.instance_name}`);
20
+ return { instance: mapSqlInstance(data) };
21
+ },
22
+ });
23
+ //# sourceMappingURL=get-sql-instance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-sql-instance.js","sourceRoot":"","sources":["../../src/tools/get-sql-instance.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,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE,wEAAwE;IACrF,OAAO,EAAE,0BAA0B;IACnC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IACjD,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,cAAc,MAAM,CAAC,aAAa,EAAE,CAC7F,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ export declare const listBillingAccounts: 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
+ billing_accounts: z.ZodArray<z.ZodObject<{
7
+ name: z.ZodString;
8
+ display_name: z.ZodString;
9
+ open: z.ZodBoolean;
10
+ }, z.core.$strip>>;
11
+ next_page_token: z.ZodString;
12
+ }, z.core.$strip>>;
13
+ //# sourceMappingURL=list-billing-accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-billing-accounts.d.ts","sourceRoot":"","sources":["../../src/tools/list-billing-accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,mBAAmB;;;;;;;;;;kBAyB9B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { gcpApi } from '../gcloud-api.js';
4
+ import { billingAccountSchema, mapBillingAccount } from './schemas.js';
5
+ export const listBillingAccounts = defineTool({
6
+ name: 'list_billing_accounts',
7
+ displayName: 'List Billing Accounts',
8
+ description: 'List billing accounts accessible to the current user.',
9
+ summary: 'List billing accounts',
10
+ icon: 'credit-card',
11
+ group: 'Billing',
12
+ input: z.object({
13
+ page_size: z.number().int().min(1).max(100).optional().describe('Max results per page (default 50)'),
14
+ page_token: z.string().optional().describe('Page token from a previous response'),
15
+ }),
16
+ output: z.object({
17
+ billing_accounts: z.array(billingAccountSchema).describe('List of billing accounts'),
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://cloudbilling.googleapis.com/v1/billingAccounts', { params: { pageSize: params.page_size ?? 50, pageToken: params.page_token } });
22
+ return {
23
+ billing_accounts: (data.billingAccounts ?? []).map(mapBillingAccount),
24
+ next_page_token: data.nextPageToken ?? '',
25
+ };
26
+ },
27
+ });
28
+ //# sourceMappingURL=list-billing-accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-billing-accounts.js","sourceRoot":"","sources":["../../src/tools/list-billing-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,MAAM,kBAAkB,CAAC;AAC1C,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,uDAAuD;IACpE,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,SAAS;IAChB,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,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,IAAI,GAAG,MAAM,MAAM,CACvB,wDAAwD,EACxD,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,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACrE,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 listBuckets: 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
+ buckets: z.ZodArray<z.ZodObject<{
8
+ name: z.ZodString;
9
+ location: z.ZodString;
10
+ storage_class: z.ZodString;
11
+ creation_time: z.ZodString;
12
+ }, z.core.$strip>>;
13
+ next_page_token: z.ZodString;
14
+ }, z.core.$strip>>;
15
+ //# sourceMappingURL=list-buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-buckets.d.ts","sourceRoot":"","sources":["../../src/tools/list-buckets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,WAAW;;;;;;;;;;;;kBAwBtB,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 { bucketSchema, mapBucket } from './schemas.js';
5
+ export const listBuckets = defineTool({
6
+ name: 'list_buckets',
7
+ displayName: 'List Buckets',
8
+ description: 'List Cloud Storage buckets in the project.',
9
+ summary: 'List Cloud Storage buckets',
10
+ icon: 'database',
11
+ group: 'Storage',
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(1000).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
+ buckets: z.array(bucketSchema).describe('List of storage buckets'),
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://storage.googleapis.com/storage/v1/b', { params: { project: projectId, maxResults: params.max_results ?? 50, pageToken: params.page_token } });
24
+ return { buckets: (data.items ?? []).map(mapBucket), next_page_token: data.nextPageToken ?? '' };
25
+ },
26
+ });
27
+ //# sourceMappingURL=list-buckets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-buckets.js","sourceRoot":"","sources":["../../src/tools/list-buckets.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,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,4CAA4C;IACzD,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,UAAU;IAChB,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,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,yBAAyB,CAAC;QAClE,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,6CAA6C,EAC7C,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACvG,CAAC;QACF,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;IACnG,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ export declare const listCloudRunServices: 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
+ services: z.ZodArray<z.ZodObject<{
8
+ name: z.ZodString;
9
+ uri: z.ZodString;
10
+ creator: z.ZodString;
11
+ last_modifier: z.ZodString;
12
+ ingress: z.ZodString;
13
+ launch_stage: z.ZodString;
14
+ create_time: z.ZodString;
15
+ update_time: z.ZodString;
16
+ }, z.core.$strip>>;
17
+ next_page_token: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ //# sourceMappingURL=list-cloud-run-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-cloud-run-services.d.ts","sourceRoot":"","sources":["../../src/tools/list-cloud-run-services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;kBA2B/B,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 { cloudRunServiceSchema, mapCloudRunService } from './schemas.js';
5
+ export const listCloudRunServices = defineTool({
6
+ name: 'list_cloud_run_services',
7
+ displayName: 'List Cloud Run Services',
8
+ description: 'List Cloud Run services in the project across all locations.',
9
+ summary: 'List Cloud Run services',
10
+ icon: 'rocket',
11
+ group: 'Cloud Run',
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
+ services: z.array(cloudRunServiceSchema).describe('List of Cloud Run services'),
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://run.googleapis.com/v2/projects/${projectId}/locations/-/services`, { params: { pageSize: params.page_size ?? 50, pageToken: params.page_token } });
24
+ return {
25
+ services: (data.services ?? []).map(mapCloudRunService),
26
+ next_page_token: data.nextPageToken ?? '',
27
+ };
28
+ },
29
+ });
30
+ //# sourceMappingURL=list-cloud-run-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-cloud-run-services.js","sourceRoot":"","sources":["../../src/tools/list-cloud-run-services.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,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,8DAA8D;IAC3E,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,QAAQ;IACd,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,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,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QAC/E,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,uBAAuB,EAC1E,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,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,kBAAkB,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 listClusters: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ project_id: z.ZodOptional<z.ZodString>;
4
+ }, z.core.$strip>, z.ZodObject<{
5
+ clusters: z.ZodArray<z.ZodObject<{
6
+ name: z.ZodString;
7
+ location: z.ZodString;
8
+ status: z.ZodString;
9
+ node_count: z.ZodNumber;
10
+ cluster_version: z.ZodString;
11
+ endpoint: z.ZodString;
12
+ create_time: z.ZodString;
13
+ }, z.core.$strip>>;
14
+ }, z.core.$strip>>;
15
+ //# sourceMappingURL=list-clusters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-clusters.d.ts","sourceRoot":"","sources":["../../src/tools/list-clusters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,YAAY;;;;;;;;;;;;kBAoBvB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { gcpApi, resolveProjectId } from '../gcloud-api.js';
4
+ import { clusterSchema, mapCluster } from './schemas.js';
5
+ export const listClusters = defineTool({
6
+ name: 'list_clusters',
7
+ displayName: 'List GKE Clusters',
8
+ description: 'List Google Kubernetes Engine (GKE) clusters in the project across all locations.',
9
+ summary: 'List GKE clusters',
10
+ icon: 'container',
11
+ group: 'Kubernetes',
12
+ input: z.object({
13
+ project_id: z.string().optional().describe('Project ID (defaults to currently active project)'),
14
+ }),
15
+ output: z.object({
16
+ clusters: z.array(clusterSchema).describe('List of GKE clusters'),
17
+ }),
18
+ handle: async (params) => {
19
+ const projectId = resolveProjectId(params.project_id);
20
+ const data = await gcpApi(`https://container.googleapis.com/v1/projects/${projectId}/locations/-/clusters`);
21
+ return { clusters: (data.clusters ?? []).map(mapCluster) };
22
+ },
23
+ });
24
+ //# sourceMappingURL=list-clusters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-clusters.js","sourceRoot":"","sources":["../../src/tools/list-clusters.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,mBAAmB;IAChC,WAAW,EAAE,mFAAmF;IAChG,OAAO,EAAE,mBAAmB;IAC5B,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;KAChG,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;KAClE,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,SAAS,uBAAuB,CACjF,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ export declare const listDisks: 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
+ disks: z.ZodArray<z.ZodObject<{
9
+ id: z.ZodString;
10
+ name: z.ZodString;
11
+ zone: z.ZodString;
12
+ size_gb: z.ZodString;
13
+ type: z.ZodString;
14
+ status: z.ZodString;
15
+ creation_timestamp: z.ZodString;
16
+ }, z.core.$strip>>;
17
+ next_page_token: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ //# sourceMappingURL=list-disks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-disks.d.ts","sourceRoot":"","sources":["../../src/tools/list-disks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;kBAsCpB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { gcpApi, resolveProjectId } from '../gcloud-api.js';
4
+ import { diskSchema, mapDisk } from './schemas.js';
5
+ export const listDisks = defineTool({
6
+ name: 'list_disks',
7
+ displayName: 'List Disks',
8
+ description: 'List Compute Engine persistent disks. If no zone is specified, lists across all zones.',
9
+ summary: 'List persistent disks',
10
+ icon: 'hard-drive',
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
+ disks: z.array(diskSchema).describe('List of persistent disks'),
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}/disks`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
26
+ return { disks: (data.items ?? []).map(mapDisk), next_page_token: data.nextPageToken ?? '' };
27
+ }
28
+ const data = await gcpApi(`https://compute.googleapis.com/compute/v1/projects/${projectId}/aggregated/disks`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
29
+ const disks = [];
30
+ if (data.items) {
31
+ for (const zone of Object.values(data.items)) {
32
+ if (zone.disks)
33
+ disks.push(...zone.disks);
34
+ }
35
+ }
36
+ return { disks: disks.map(mapDisk), next_page_token: data.nextPageToken ?? '' };
37
+ },
38
+ });
39
+ //# sourceMappingURL=list-disks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-disks.js","sourceRoot":"","sources":["../../src/tools/list-disks.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,SAAS,GAAG,UAAU,CAAC;IAClC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,YAAY;IACzB,WAAW,EAAE,wFAAwF;IACrG,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,YAAY;IAClB,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,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC/D,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,QAAQ,EAC5F,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;YACF,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;QAC/F,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,sDAAsD,SAAS,mBAAmB,EAClF,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;QACF,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,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,KAAK;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;IAClF,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ export declare const listEnabledServices: 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
+ services: z.ZodArray<z.ZodObject<{
8
+ name: z.ZodString;
9
+ service_name: z.ZodString;
10
+ title: z.ZodString;
11
+ state: z.ZodString;
12
+ }, z.core.$strip>>;
13
+ next_page_token: z.ZodString;
14
+ }, z.core.$strip>>;
15
+ //# sourceMappingURL=list-enabled-services.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-enabled-services.d.ts","sourceRoot":"","sources":["../../src/tools/list-enabled-services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;kBAwB9B,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 { serviceSchema, mapService } from './schemas.js';
5
+ export const listEnabledServices = defineTool({
6
+ name: 'list_enabled_services',
7
+ displayName: 'List Enabled Services',
8
+ description: 'List GCP API services enabled in the project. Each service represents an API that has been activated.',
9
+ summary: 'List enabled API services',
10
+ icon: 'puzzle',
11
+ group: 'Services',
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(200).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
+ services: z.array(serviceSchema).describe('List of enabled services'),
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://serviceusage.googleapis.com/v1/projects/${projectId}/services`, { params: { pageSize: params.page_size ?? 50, pageToken: params.page_token, filter: 'state:ENABLED' } });
24
+ return { services: (data.services ?? []).map(mapService), next_page_token: data.nextPageToken ?? '' };
25
+ },
26
+ });
27
+ //# sourceMappingURL=list-enabled-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-enabled-services.js","sourceRoot":"","sources":["../../src/tools/list-enabled-services.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,mBAAmB,GAAG,UAAU,CAAC;IAC5C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,uBAAuB;IACpC,WAAW,EAAE,uGAAuG;IACpH,OAAO,EAAE,2BAA2B;IACpC,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,UAAU;IACjB,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,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACrE,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,mDAAmD,SAAS,WAAW,EACvE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CACxG,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;IACxG,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { z } from 'zod';
2
+ export declare const listFirewalls: 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
+ firewalls: z.ZodArray<z.ZodObject<{
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ network: z.ZodString;
11
+ direction: z.ZodString;
12
+ priority: z.ZodNumber;
13
+ disabled: z.ZodBoolean;
14
+ creation_timestamp: z.ZodString;
15
+ }, z.core.$strip>>;
16
+ next_page_token: z.ZodString;
17
+ }, z.core.$strip>>;
18
+ //# sourceMappingURL=list-firewalls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-firewalls.d.ts","sourceRoot":"","sources":["../../src/tools/list-firewalls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;kBAwBxB,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 { firewallSchema, mapFirewall } from './schemas.js';
5
+ export const listFirewalls = defineTool({
6
+ name: 'list_firewalls',
7
+ displayName: 'List Firewalls',
8
+ description: 'List firewall rules in the project.',
9
+ summary: 'List firewall rules',
10
+ icon: 'shield',
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
+ firewalls: z.array(firewallSchema).describe('List of firewall rules'),
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/firewalls`, { params: { maxResults: params.max_results ?? 50, pageToken: params.page_token } });
24
+ return { firewalls: (data.items ?? []).map(mapFirewall), next_page_token: data.nextPageToken ?? '' };
25
+ },
26
+ });
27
+ //# sourceMappingURL=list-firewalls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-firewalls.js","sourceRoot":"","sources":["../../src/tools/list-firewalls.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,EAAE,qCAAqC;IAClD,OAAO,EAAE,qBAAqB;IAC9B,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,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,wBAAwB,CAAC;QACrE,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,mBAAmB,EAClF,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CACnF,CAAC;QACF,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;IACvG,CAAC;CACF,CAAC,CAAC"}