@aws/nx-plugin 0.41.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/generators.json +6 -0
- package/package.json +1 -1
- package/sdk/py.d.ts +2 -0
- package/sdk/py.js +3 -1
- package/sdk/py.js.map +1 -1
- package/sdk/terraform.d.ts +6 -0
- package/sdk/terraform.js +11 -0
- package/sdk/terraform.js.map +1 -0
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/py/fast-api/generator.js +3 -10
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/lambda-function/generator.js +4 -15
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +318 -0
- package/src/py/mcp-server/files/Dockerfile.template +18 -0
- package/src/py/mcp-server/files/__init__.py.template +0 -0
- package/src/py/mcp-server/files/http.py.template +4 -0
- package/src/py/mcp-server/files/server.py.template +19 -0
- package/src/py/mcp-server/files/stdio.py.template +4 -0
- package/src/py/mcp-server/generator.d.ts +10 -0
- package/src/py/mcp-server/generator.js +141 -0
- package/src/py/mcp-server/generator.js.map +1 -0
- package/src/py/mcp-server/schema.d.ts +15 -0
- package/src/py/mcp-server/schema.json +33 -0
- package/src/terraform/project/files/application/bootstrap/main.tf.template +91 -0
- package/src/terraform/project/files/application/bootstrap/providers.tf.template +6 -0
- package/src/terraform/project/files/application/bootstrap/variables.tf.template +4 -0
- package/src/terraform/project/generator.js +2 -2
- package/src/terraform/project/generator.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +1 -0
- package/src/ts/mcp-server/generator.js +13 -1
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/utils/bundle.d.ts +7 -10
- package/src/utils/bundle.js +26 -4
- package/src/utils/bundle.js.map +1 -1
- package/src/utils/py.d.ts +5 -0
- package/src/utils/py.js +25 -0
- package/src/utils/py.js.map +1 -0
- package/src/utils/versions.d.ts +2 -1
- package/src/utils/versions.js +1 -0
- package/src/utils/versions.js.map +1 -1
package/README.md
CHANGED
|
@@ -63,6 +63,7 @@
|
|
|
63
63
|
- `py#project` - Generate a uv based Python project.
|
|
64
64
|
- `py#fast-api` - Generate a FastAPI backend service with [AWS Powertools](https://github.com/aws-powertools/powertools-lambda-python) pre-configured.
|
|
65
65
|
- `py#lambda-function` - Add a lambda function to an existing python project with optional type-safe event sources.
|
|
66
|
+
- `py#mcp-server` - Add a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server to a Python project.
|
|
66
67
|
- `api-connection` - Connect frontend applications to backend APIs.
|
|
67
68
|
- `license` - Automatically manage LICENSE files and source code headers in your workspace.
|
|
68
69
|
|
package/generators.json
CHANGED
|
@@ -163,6 +163,12 @@
|
|
|
163
163
|
"description": "Generates a Terraform project",
|
|
164
164
|
"metric": "g23",
|
|
165
165
|
"guidePages": ["terraform-project"]
|
|
166
|
+
},
|
|
167
|
+
"py#mcp-server": {
|
|
168
|
+
"factory": "./src/py/mcp-server/generator",
|
|
169
|
+
"schema": "./src/py/mcp-server/schema.json",
|
|
170
|
+
"description": "Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models",
|
|
171
|
+
"metric": "g24"
|
|
166
172
|
}
|
|
167
173
|
}
|
|
168
174
|
}
|
package/package.json
CHANGED
package/sdk/py.d.ts
CHANGED
|
@@ -8,3 +8,5 @@ export { pyFastApiProjectGenerator } from '../src/py/fast-api/generator';
|
|
|
8
8
|
export { PyFastApiProjectGeneratorSchema } from '../src/py/fast-api/schema';
|
|
9
9
|
export { pyLambdaFunctionGenerator } from '../src/py/lambda-function/generator';
|
|
10
10
|
export { PyLambdaFunctionGeneratorSchema } from '../src/py/lambda-function/schema';
|
|
11
|
+
export { pyMcpServerGenerator } from '../src/py/mcp-server/generator';
|
|
12
|
+
export { PyMcpServerGeneratorSchema } from '../src/py/mcp-server/schema';
|
package/sdk/py.js
CHANGED
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.pyLambdaFunctionGenerator = exports.pyFastApiProjectGenerator = exports.pyProjectGenerator = void 0;
|
|
7
|
+
exports.pyMcpServerGenerator = exports.pyLambdaFunctionGenerator = exports.pyFastApiProjectGenerator = exports.pyProjectGenerator = void 0;
|
|
8
8
|
var generator_1 = require("../src/py/project/generator");
|
|
9
9
|
Object.defineProperty(exports, "pyProjectGenerator", { enumerable: true, get: function () { return generator_1.pyProjectGenerator; } });
|
|
10
10
|
var generator_2 = require("../src/py/fast-api/generator");
|
|
11
11
|
Object.defineProperty(exports, "pyFastApiProjectGenerator", { enumerable: true, get: function () { return generator_2.pyFastApiProjectGenerator; } });
|
|
12
12
|
var generator_3 = require("../src/py/lambda-function/generator");
|
|
13
13
|
Object.defineProperty(exports, "pyLambdaFunctionGenerator", { enumerable: true, get: function () { return generator_3.pyLambdaFunctionGenerator; } });
|
|
14
|
+
var generator_4 = require("../src/py/mcp-server/generator");
|
|
15
|
+
Object.defineProperty(exports, "pyMcpServerGenerator", { enumerable: true, get: function () { return generator_4.pyMcpServerGenerator; } });
|
|
14
16
|
//# sourceMappingURL=py.js.map
|
package/sdk/py.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/py.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yDAAiE;AAAxD,+GAAA,kBAAkB,OAAA;AAG3B,0DAAyE;AAAhE,sHAAA,yBAAyB,OAAA;AAGlC,iEAAgF;AAAvE,sHAAA,yBAAyB,OAAA"}
|
|
1
|
+
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/py.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yDAAiE;AAAxD,+GAAA,kBAAkB,OAAA;AAG3B,0DAAyE;AAAhE,sHAAA,yBAAyB,OAAA;AAGlC,iEAAgF;AAAvE,sHAAA,yBAAyB,OAAA;AAGlC,4DAAsE;AAA7D,iHAAA,oBAAoB,OAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export { terraformProjectGenerator } from '../src/terraform/project/generator';
|
|
6
|
+
export type { TerraformProjectGeneratorSchema } from '../src/terraform/project/schema';
|
package/sdk/terraform.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.terraformProjectGenerator = void 0;
|
|
8
|
+
// Terraform Project Generator
|
|
9
|
+
var generator_1 = require("../src/terraform/project/generator");
|
|
10
|
+
Object.defineProperty(exports, "terraformProjectGenerator", { enumerable: true, get: function () { return generator_1.terraformProjectGenerator; } });
|
|
11
|
+
//# sourceMappingURL=terraform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/terraform.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,8BAA8B;AAC9B,gEAA+E;AAAtE,sHAAA,yBAAyB,OAAA"}
|
|
@@ -60,6 +60,8 @@ The following list of generators are what is currently available in the \`@aws/n
|
|
|
60
60
|
|
|
61
61
|
- **terraform#project**: Generates a Terraform project
|
|
62
62
|
|
|
63
|
+
- **py#mcp-server**: Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models
|
|
64
|
+
|
|
63
65
|
You also have the option of using additional [commmunity plugins](https://nx.dev/plugin-registry) as needed.
|
|
64
66
|
|
|
65
67
|
## Invoking a generator
|
|
@@ -28,7 +28,7 @@ exports.FAST_API_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
|
28
28
|
* Generates a Python FastAPI project
|
|
29
29
|
*/
|
|
30
30
|
const pyFastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
-
var _a
|
|
31
|
+
var _a;
|
|
32
32
|
yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
|
|
33
33
|
const { dir, normalizedModuleName, fullyQualifiedName } = (0, generator_1.getPyProjectDetails)(tree, {
|
|
34
34
|
name: schema.name,
|
|
@@ -45,14 +45,7 @@ const pyFastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
45
45
|
projectType: 'application',
|
|
46
46
|
});
|
|
47
47
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, fullyQualifiedName);
|
|
48
|
-
|
|
49
|
-
projectDir: dir,
|
|
50
|
-
packageName: fullyQualifiedName,
|
|
51
|
-
})), { dependsOn: ['compile'] });
|
|
52
|
-
projectConfig.targets.build.dependsOn = [
|
|
53
|
-
...((_a = projectConfig.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []),
|
|
54
|
-
'bundle',
|
|
55
|
-
];
|
|
48
|
+
(0, bundle_1.addPythonBundleTarget)(projectConfig);
|
|
56
49
|
projectConfig.targets.serve = {
|
|
57
50
|
executor: '@nxlv/python:run-commands',
|
|
58
51
|
options: {
|
|
@@ -152,7 +145,7 @@ const pyFastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
152
145
|
'mangum',
|
|
153
146
|
'aws-lambda-powertools',
|
|
154
147
|
'aws-lambda-powertools[tracer]',
|
|
155
|
-
].concat(((
|
|
148
|
+
].concat(((_a = projectToml.project) === null || _a === void 0 ? void 0 : _a.dependencies) || []);
|
|
156
149
|
projectToml['dependency-groups'] = { dev: ['fastapi[standard]>=0.115'] };
|
|
157
150
|
tree.write((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
158
151
|
(0, nx_1.addGeneratorMetadata)(tree, fullyQualifiedName, exports.FAST_API_GENERATOR_INFO);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAWoB;AAEpB,oEAAmE;AACnE,oEAAiE;AACjE,0EAA+E;AAC/E,sCAA+C;AAE/C,qEAA0E;AAC1E,yFAGiD;AACjD,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAWoB;AAEpB,oEAAmE;AACnE,oEAAiE;AACjE,0EAA+E;AAC/E,sCAA+C;AAE/C,qEAA0E;AAC1E,yFAGiD;AACjD,6CAA6D;AAC7D,+CAA0D;AAC1D,+CAAoD;AACpD,uCAIwB;AACxB,iDAAsE;AACtE,8EAAmF;AACnF,+CAAwD;AACxD,yCAAkD;AAClD,2CAA4D;AAC5D,+CAA2D;AAE9C,QAAA,uBAAuB,GAClC,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAE/B;;GAEG;AACI,MAAM,yBAAyB,GAAG,CACvC,IAAU,EACV,MAAuC,EACX,EAAE;;IAC9B,MAAM,IAAA,6CAAyB,EAAC,IAAI,CAAC,CAAC;IAEtC,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,GAAG,IAAA,+BAAmB,EAC3E,IAAI,EACJ;QACE,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CACF,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,IAAA,+BAAwB,EAAC,IAAI,EAAE,+BAAuB,EAAE,IAAI,CAAC,CAAC;IAE3E,MAAM,IAAA,mBAAkB,EAAC,IAAI,EAAE;QAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,oBAAoB;QAChC,WAAW,EAAE,aAAa;KAC3B,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IAEzE,IAAA,8BAAqB,EAAC,aAAa,CAAC,CAAC;IAErC,aAAa,CAAC,OAAO,CAAC,KAAK,GAAG;QAC5B,QAAQ,EAAE,2BAA2B;QACrC,OAAO,EAAE;YACP,OAAO,EAAE,sBAAsB,oBAAoB,mBAAmB,IAAI,EAAE;YAC5E,GAAG,EAAE,GAAG;SACT;QACD,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,aAAa,CAAC,QAAQ,GAAG;QACvB,OAAO,EAAE,MAAM,CAAC,IAAI;QACpB,OAAO,EAAE,UAAU;QACnB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI;KACE,CAAC;IAET,aAAa,CAAC,OAAO,GAAG,IAAA,uBAAc,EAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAA,mCAA0B,EAAC,IAAI,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;IAEpE,mEAAmE;IACnE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,+BAAoB,EAAC,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IAE5E;QACE,IAAA,0BAAiB,EAAC,GAAG,EAAE,oBAAoB,EAAE,UAAU,CAAC;QACxD,IAAA,0BAAiB,EAAC,GAAG,EAAE,OAAO,EAAE,eAAe,CAAC;KACjD,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjC,IAAA,sBAAa,EACX,IAAI,EAAE,0BAA0B;IAChC,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,6BAA6B;IAC3E,GAAG,EAAE,gCAAgC;IACrC;QACE,IAAI,EAAE,oBAAoB;QAC1B,gBAAgB;QAChB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,EACD;QACE,iBAAiB,EAAE,0BAAiB,CAAC,SAAS;KAC/C,CACF,CAAC;IAEF,mEAAmE;IACnE,IAAA,uCAAsB,EAAC,IAAI,EAAE;QAC3B,gBAAgB;QAChB,gBAAgB;QAChB,aAAa,EACX,MAAM,CAAC,WAAW,KAAK,6BAA6B,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACxE,OAAO,EAAE;YACP,IAAI,EAAE,SAAS;YACf,GAAG;YACH,UAAU,EAAE,oBAAoB;SACjC;QACD,IAAI,EAAE,MAAM,CAAC,IAAI;KAClB,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC9E,MAAM,4BAA4B,GAAG,IAAA,0BAAiB,EACpD,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,CAAC,EACtD,KAAK,EACL,oBAAoB,CACrB,CAAC;IAEF,IAAA,mBAAU,EACR,IAAI,EACJ,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,EAAE,cAAc,CAAC,EACtE,CAAC,MAA4B,EAAE,EAAE;;QAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5B,CAAC;QACD,wFAAwF;QACxF,0CAA0C;QAC1C,MAAM,kBAAkB,GAAG,YAAY,gBAAgB,WAAW,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG;gBACnC,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,iBAAiB;gBAC3B,MAAM,EAAE;oBACN;wBACE,yBAAyB,EAAE,WAAW;qBACvC;iBACF;gBACD,OAAO,EAAE;oBACP,IAAA,0BAAiB,EAAC,iBAAiB,EAAE,4BAA4B,CAAC;iBACnE;gBACD,OAAO,EAAE;oBACP,QAAQ,EAAE;wBACR,+DAA+D,QAAQ,mBAAmB,4BAA4B,oBAAoB;qBAC3I;iBACF;gBACD,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,UAAU,CAAC;aAC7C,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;YAC/B,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC;YACzC,GAAG,kBAAkB,QAAQ;SAC9B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG;YACjC,GAAG,CAAC,MAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,mCAAI,EAAE,CAAC;YAC3C,kBAAkB;SACnB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CACF,CAAC;IAEF,2CAA2C;IAC3C,sFAAsF;IACtF,IAAA,qBAAe,EACb,IAAI,EACJ,IAAA,0BAAiB,EAAC,0CAAY,EAAE,mDAAqB,CAAC,EACtD,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,IAAA,0BAAiB,EAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAC5E,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,YAAK,EACvB,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAiB,EAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CACzC,CAAC;IACrB,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG;QACjC,SAAS;QACT,QAAQ;QACR,uBAAuB;QACvB,+BAA+B;KAChC,CAAC,MAAM,CAAC,CAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,YAAY,KAAI,EAAE,CAAC,CAAC;IAClD,WAAW,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,IAAA,0BAAiB,EAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,IAAA,gBAAS,EAAC,WAAW,CAAC,CAAC,CAAC;IAE7E,IAAA,yBAAoB,EAAC,IAAI,EAAE,kBAAkB,EAAE,+BAAuB,CAAC,CAAC;IAExE,MAAM,IAAA,yCAA+B,EAAC,IAAI,EAAE,CAAC,+BAAuB,CAAC,CAAC,CAAC;IAEvE,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;IAEjC,OAAO,GAAS,EAAE;QAChB,MAAM,IAAI,qBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,eAAM,EAAE,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9D,IAAA,4BAAmB,EAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAA,CAAC;AACJ,CAAC,CAAA,CAAC;AA1KW,QAAA,yBAAyB,6BA0KpC;AACF,kBAAe,iCAAyB,CAAC"}
|
|
@@ -36,7 +36,7 @@ const getLambdaFunctionDetails = (tree, schema) => {
|
|
|
36
36
|
* Generates a Python Lambda Function to add to a python project
|
|
37
37
|
*/
|
|
38
38
|
const pyLambdaFunctionGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
-
var _a, _b, _c
|
|
39
|
+
var _a, _b, _c;
|
|
40
40
|
const projectConfig = (0, nx_1.readProjectConfigurationUnqualified)(tree, schema.project);
|
|
41
41
|
const pyProjectPath = (0, devkit_1.joinPathFragments)(projectConfig.root, 'pyproject.toml');
|
|
42
42
|
// Check if the project has a pyproject.toml file
|
|
@@ -71,24 +71,13 @@ const pyLambdaFunctionGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
71
71
|
constructFunctionClassName,
|
|
72
72
|
constructFunctionKebabCase, constructHandlerFilePath: normalizedFunctionPath, lambdaFunctionClassName, lambdaFunctionSnakeCase: normalizedFunctionName });
|
|
73
73
|
// Check if the project has a bundle target and if not add it
|
|
74
|
-
|
|
75
|
-
projectConfig.targets.bundle = Object.assign(Object.assign({}, (0, bundle_1.createPythonBundleTarget)({
|
|
76
|
-
projectDir: dir,
|
|
77
|
-
packageName: projectConfig.name,
|
|
78
|
-
})), { dependsOn: ['compile'] });
|
|
79
|
-
}
|
|
80
|
-
if ((_c = projectConfig.targets) === null || _c === void 0 ? void 0 : _c.build) {
|
|
81
|
-
projectConfig.targets.build.dependsOn = [
|
|
82
|
-
...((_d = projectConfig.targets.build.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== 'bundle'),
|
|
83
|
-
'bundle',
|
|
84
|
-
];
|
|
85
|
-
}
|
|
74
|
+
(0, bundle_1.addPythonBundleTarget)(projectConfig);
|
|
86
75
|
projectConfig.targets = (0, object_1.sortObjectKeys)(projectConfig.targets);
|
|
87
76
|
(0, devkit_1.updateProjectConfiguration)(tree, projectConfig.name, projectConfig);
|
|
88
77
|
// Generate the lambda handler file
|
|
89
78
|
(0, devkit_1.generateFiles)(tree, // the virtual file system
|
|
90
79
|
(0, devkit_1.joinPathFragments)(__dirname, 'files', 'handler'), // path to the file templates
|
|
91
|
-
(0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, (
|
|
80
|
+
(0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, (_b = schema.functionPath) !== null && _b !== void 0 ? _b : ''), enhancedOptions, { overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite });
|
|
92
81
|
// Generate the lambda handler test file
|
|
93
82
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'tests'), (0, devkit_1.joinPathFragments)(dir, 'tests'), enhancedOptions, { overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite });
|
|
94
83
|
if (!tree.exists((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'lambda-functions', `${constructFunctionKebabCase}.ts`))) {
|
|
@@ -112,7 +101,7 @@ const pyLambdaFunctionGenerator = (tree, schema) => tslib_1.__awaiter(void 0, vo
|
|
|
112
101
|
});
|
|
113
102
|
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), 'utf8'));
|
|
114
103
|
// Check if the project already has the dependencies and add them if not
|
|
115
|
-
const dependencies = ((
|
|
104
|
+
const dependencies = ((_c = projectToml.project) === null || _c === void 0 ? void 0 : _c.dependencies) || [];
|
|
116
105
|
if (!dependencies.includes('aws-lambda-powertools')) {
|
|
117
106
|
dependencies.push('aws-lambda-powertools');
|
|
118
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/lambda-function/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAUoB;AAEpB,oEAAmE;AACnE,oEAAiE;AACjE,sCAA+C;AAE/C,qEAA0E;AAC1E,yFAGiD;AACjD,6CAK2B;AAC3B,yCAAgD;AAChD,+CAA0D;AAC1D,qDAAoD;AACpD,+CAAoD;AACpD,uCAIwB;AACxB,iDAAsE;AACtE,+
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/lambda-function/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > agent-core-runtime.ts 1`] = `
|
|
4
|
+
"import {
|
|
5
|
+
Role,
|
|
6
|
+
ServicePrincipal,
|
|
7
|
+
PolicyStatement,
|
|
8
|
+
Effect,
|
|
9
|
+
PolicyDocument,
|
|
10
|
+
} from 'aws-cdk-lib/aws-iam';
|
|
11
|
+
import {
|
|
12
|
+
AwsCustomResource,
|
|
13
|
+
AwsCustomResourcePolicy,
|
|
14
|
+
PhysicalResourceId,
|
|
15
|
+
PhysicalResourceIdReference,
|
|
16
|
+
} from 'aws-cdk-lib/custom-resources';
|
|
17
|
+
import { Construct } from 'constructs';
|
|
18
|
+
import type { AuthorizerConfiguration } from '@aws-sdk/client-bedrock-agentcore-control';
|
|
19
|
+
import { Stack } from 'aws-cdk-lib';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Options for the AgentCoreRuntime construct
|
|
23
|
+
*/
|
|
24
|
+
export interface AgentCoreRuntimeProps {
|
|
25
|
+
runtimeName: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
containerUri: string;
|
|
28
|
+
serverProtocol: 'MCP' | 'HTTP';
|
|
29
|
+
environment?: Record<string, string>;
|
|
30
|
+
authorizerConfiguration?: AuthorizerConfiguration;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A construct for creating a Bedrock AgentCore Runtime
|
|
35
|
+
*/
|
|
36
|
+
export class AgentCoreRuntime extends Construct {
|
|
37
|
+
public readonly role: Role;
|
|
38
|
+
public readonly arn: string;
|
|
39
|
+
|
|
40
|
+
constructor(scope: Construct, id: string, props: AgentCoreRuntimeProps) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
|
|
43
|
+
const region = Stack.of(this).region;
|
|
44
|
+
const accountId = Stack.of(this).account;
|
|
45
|
+
|
|
46
|
+
this.role = new Role(this, 'AgentCoreRole', {
|
|
47
|
+
assumedBy: new ServicePrincipal('bedrock-agentcore.amazonaws.com'),
|
|
48
|
+
inlinePolicies: {
|
|
49
|
+
AgentCorePolicy: new PolicyDocument({
|
|
50
|
+
statements: [
|
|
51
|
+
new PolicyStatement({
|
|
52
|
+
sid: 'ECRImageAccess',
|
|
53
|
+
effect: Effect.ALLOW,
|
|
54
|
+
actions: ['ecr:BatchGetImage', 'ecr:GetDownloadUrlForLayer'],
|
|
55
|
+
resources: [\`arn:aws:ecr:\${region}:\${accountId}:repository/*\`],
|
|
56
|
+
}),
|
|
57
|
+
new PolicyStatement({
|
|
58
|
+
effect: Effect.ALLOW,
|
|
59
|
+
actions: ['logs:DescribeLogStreams', 'logs:CreateLogGroup'],
|
|
60
|
+
resources: [
|
|
61
|
+
\`arn:aws:logs:\${region}:\${accountId}:log-group:/aws/bedrock-agentcore/runtimes/*\`,
|
|
62
|
+
],
|
|
63
|
+
}),
|
|
64
|
+
new PolicyStatement({
|
|
65
|
+
effect: Effect.ALLOW,
|
|
66
|
+
actions: ['logs:DescribeLogGroups'],
|
|
67
|
+
resources: [\`arn:aws:logs:\${region}:\${accountId}:log-group:*\`],
|
|
68
|
+
}),
|
|
69
|
+
new PolicyStatement({
|
|
70
|
+
effect: Effect.ALLOW,
|
|
71
|
+
actions: ['logs:CreateLogStream', 'logs:PutLogEvents'],
|
|
72
|
+
resources: [
|
|
73
|
+
\`arn:aws:logs:\${region}:\${accountId}:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*\`,
|
|
74
|
+
],
|
|
75
|
+
}),
|
|
76
|
+
new PolicyStatement({
|
|
77
|
+
sid: 'ECRTokenAccess',
|
|
78
|
+
effect: Effect.ALLOW,
|
|
79
|
+
actions: ['ecr:GetAuthorizationToken'],
|
|
80
|
+
resources: ['*'],
|
|
81
|
+
}),
|
|
82
|
+
new PolicyStatement({
|
|
83
|
+
effect: Effect.ALLOW,
|
|
84
|
+
actions: [
|
|
85
|
+
'xray:PutTraceSegments',
|
|
86
|
+
'xray:PutTelemetryRecords',
|
|
87
|
+
'xray:GetSamplingRules',
|
|
88
|
+
'xray:GetSamplingTargets',
|
|
89
|
+
],
|
|
90
|
+
resources: ['*'],
|
|
91
|
+
}),
|
|
92
|
+
new PolicyStatement({
|
|
93
|
+
effect: Effect.ALLOW,
|
|
94
|
+
actions: ['cloudwatch:PutMetricData'],
|
|
95
|
+
resources: ['*'],
|
|
96
|
+
conditions: {
|
|
97
|
+
StringEquals: {
|
|
98
|
+
'cloudwatch:namespace': 'bedrock-agentcore',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
}),
|
|
102
|
+
new PolicyStatement({
|
|
103
|
+
sid: 'GetAgentAccessToken',
|
|
104
|
+
effect: Effect.ALLOW,
|
|
105
|
+
actions: [
|
|
106
|
+
'bedrock-agentcore:GetWorkloadAccessToken',
|
|
107
|
+
'bedrock-agentcore:GetWorkloadAccessTokenForJWT',
|
|
108
|
+
'bedrock-agentcore:GetWorkloadAccessTokenForUserId',
|
|
109
|
+
],
|
|
110
|
+
resources: [
|
|
111
|
+
\`arn:aws:bedrock-agentcore:\${region}:\${accountId}:workload-identity-directory/default\`,
|
|
112
|
+
\`arn:aws:bedrock-agentcore:\${region}:\${accountId}:workload-identity-directory/default/workload-identity/*\`,
|
|
113
|
+
],
|
|
114
|
+
}),
|
|
115
|
+
new PolicyStatement({
|
|
116
|
+
sid: 'BedrockModelInvocation',
|
|
117
|
+
effect: Effect.ALLOW,
|
|
118
|
+
actions: [
|
|
119
|
+
'bedrock:InvokeModel',
|
|
120
|
+
'bedrock:InvokeModelWithResponseStream',
|
|
121
|
+
],
|
|
122
|
+
resources: [
|
|
123
|
+
'arn:aws:bedrock:*::foundation-model/*',
|
|
124
|
+
\`arn:aws:bedrock:\${region}:\${accountId}:*\`,
|
|
125
|
+
],
|
|
126
|
+
}),
|
|
127
|
+
],
|
|
128
|
+
}),
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const agentRuntime = new AwsCustomResource(this, 'MCPSeverRuntime', {
|
|
133
|
+
onCreate: {
|
|
134
|
+
service: 'bedrock-agentcore-control',
|
|
135
|
+
action: 'CreateAgentRuntime',
|
|
136
|
+
parameters: {
|
|
137
|
+
agentRuntimeName: props.runtimeName,
|
|
138
|
+
agentRuntimeArtifact: {
|
|
139
|
+
containerConfiguration: {
|
|
140
|
+
containerUri: props.containerUri,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
networkConfiguration: {
|
|
144
|
+
networkMode: 'PUBLIC',
|
|
145
|
+
},
|
|
146
|
+
protocolConfiguration: {
|
|
147
|
+
serverProtocol: props.serverProtocol,
|
|
148
|
+
},
|
|
149
|
+
roleArn: this.role.roleArn,
|
|
150
|
+
authorizerConfiguration: props.authorizerConfiguration,
|
|
151
|
+
},
|
|
152
|
+
physicalResourceId: PhysicalResourceId.fromResponse('agentRuntimeId'),
|
|
153
|
+
},
|
|
154
|
+
onUpdate: {
|
|
155
|
+
service: 'bedrock-agentcore-control',
|
|
156
|
+
action: 'UpdateAgentRuntime',
|
|
157
|
+
parameters: {
|
|
158
|
+
agentRuntimeId: new PhysicalResourceIdReference(),
|
|
159
|
+
agentRuntimeName: props.runtimeName,
|
|
160
|
+
agentRuntimeArtifact: {
|
|
161
|
+
containerConfiguration: {
|
|
162
|
+
containerUri: props.containerUri,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
networkConfiguration: {
|
|
166
|
+
networkMode: 'PUBLIC',
|
|
167
|
+
},
|
|
168
|
+
protocolConfiguration: {
|
|
169
|
+
serverProtocol: props.serverProtocol,
|
|
170
|
+
},
|
|
171
|
+
roleArn: this.role.roleArn,
|
|
172
|
+
authorizerConfiguration: props.authorizerConfiguration,
|
|
173
|
+
},
|
|
174
|
+
physicalResourceId: PhysicalResourceId.fromResponse('agentRuntimeId'),
|
|
175
|
+
},
|
|
176
|
+
onDelete: {
|
|
177
|
+
service: 'bedrock-agentcore-control',
|
|
178
|
+
action: 'DeleteAgentRuntime',
|
|
179
|
+
parameters: {
|
|
180
|
+
agentRuntimeId: new PhysicalResourceIdReference(),
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
policy: AwsCustomResourcePolicy.fromStatements([
|
|
184
|
+
new PolicyStatement({
|
|
185
|
+
actions: ['bedrock-agentcore:*'],
|
|
186
|
+
resources: ['*'],
|
|
187
|
+
}),
|
|
188
|
+
new PolicyStatement({
|
|
189
|
+
actions: ['iam:PassRole'],
|
|
190
|
+
resources: [this.role.roleArn],
|
|
191
|
+
}),
|
|
192
|
+
]),
|
|
193
|
+
installLatestAwsSdk: true,
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
this.arn = agentRuntime.getResponseField('agentRuntimeArn');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
"
|
|
200
|
+
`;
|
|
201
|
+
|
|
202
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > app-index.ts 1`] = `
|
|
203
|
+
"export * from './mcp-servers/index.js';
|
|
204
|
+
"
|
|
205
|
+
`;
|
|
206
|
+
|
|
207
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > core-index.ts 1`] = `
|
|
208
|
+
"export * from './app.js';
|
|
209
|
+
export * from './runtime-config.js';
|
|
210
|
+
"
|
|
211
|
+
`;
|
|
212
|
+
|
|
213
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > mcp-server-construct.ts 1`] = `
|
|
214
|
+
"import { DockerImageAsset, Platform } from 'aws-cdk-lib/aws-ecr-assets';
|
|
215
|
+
import { Construct } from 'constructs';
|
|
216
|
+
import { execSync } from 'child_process';
|
|
217
|
+
import * as path from 'path';
|
|
218
|
+
import * as url from 'url';
|
|
219
|
+
import {
|
|
220
|
+
AgentCoreRuntime,
|
|
221
|
+
AgentCoreRuntimeProps,
|
|
222
|
+
} from '../../../core/agent-core/runtime.js';
|
|
223
|
+
|
|
224
|
+
export type SnapshotBedrockServerProps = Omit<
|
|
225
|
+
AgentCoreRuntimeProps,
|
|
226
|
+
'runtimeName' | 'serverProtocol' | 'containerUri'
|
|
227
|
+
>;
|
|
228
|
+
|
|
229
|
+
export class SnapshotBedrockServer extends Construct {
|
|
230
|
+
public readonly dockerImage: DockerImageAsset;
|
|
231
|
+
public readonly agentCoreRuntime: AgentCoreRuntime;
|
|
232
|
+
|
|
233
|
+
constructor(
|
|
234
|
+
scope: Construct,
|
|
235
|
+
id: string,
|
|
236
|
+
props?: SnapshotBedrockServerProps,
|
|
237
|
+
) {
|
|
238
|
+
super(scope, id);
|
|
239
|
+
|
|
240
|
+
this.dockerImage = new DockerImageAsset(this, 'DockerImage', {
|
|
241
|
+
platform: Platform.LINUX_ARM64,
|
|
242
|
+
directory: path.dirname(url.fileURLToPath(new URL(import.meta.url))),
|
|
243
|
+
extraHash: execSync(
|
|
244
|
+
\`docker inspect proj-snapshot-bedrock-server:latest --format '{{.Descriptor.digest}}'\`,
|
|
245
|
+
{ encoding: 'utf-8' },
|
|
246
|
+
).trim(),
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
this.agentCoreRuntime = new AgentCoreRuntime(this, 'AgentCore', {
|
|
250
|
+
runtimeName: 'SnapshotBedrockServer',
|
|
251
|
+
serverProtocol: 'MCP',
|
|
252
|
+
containerUri: this.dockerImage.imageUri,
|
|
253
|
+
...props,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
"
|
|
258
|
+
`;
|
|
259
|
+
|
|
260
|
+
exports[`py#mcp-server generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > mcp-servers-index.ts 1`] = `
|
|
261
|
+
"export * from './snapshot-bedrock-server/snapshot-bedrock-server.js';
|
|
262
|
+
"
|
|
263
|
+
`;
|
|
264
|
+
|
|
265
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-__init__.py 1`] = `""`;
|
|
266
|
+
|
|
267
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-http.py 1`] = `
|
|
268
|
+
"from .server import mcp
|
|
269
|
+
|
|
270
|
+
if __name__ == "__main__":
|
|
271
|
+
mcp.run(transport="streamable-http")
|
|
272
|
+
"
|
|
273
|
+
`;
|
|
274
|
+
|
|
275
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-server.py 1`] = `
|
|
276
|
+
"from mcp.server.fastmcp import FastMCP
|
|
277
|
+
|
|
278
|
+
mcp = FastMCP(
|
|
279
|
+
name="SnapshotServer",
|
|
280
|
+
host="0.0.0.0",
|
|
281
|
+
stateless_http=True,
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
@mcp.tool(description="Adds two numbers")
|
|
285
|
+
def add(a: int, b: int) -> int:
|
|
286
|
+
"""Add two numbers"""
|
|
287
|
+
return a + b
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
@mcp.resource("example://context", description="Sample Guidance")
|
|
291
|
+
def sample_guidance() -> str:
|
|
292
|
+
return """## Sample Guidance
|
|
293
|
+
|
|
294
|
+
This is some guidance in markdown format!"""
|
|
295
|
+
"
|
|
296
|
+
`;
|
|
297
|
+
|
|
298
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > mcp-server-stdio.py 1`] = `
|
|
299
|
+
"from .server import mcp
|
|
300
|
+
|
|
301
|
+
if __name__ == "__main__":
|
|
302
|
+
mcp.run(transport="stdio")
|
|
303
|
+
"
|
|
304
|
+
`;
|
|
305
|
+
|
|
306
|
+
exports[`py#mcp-server generator > should match snapshot for generated files > updated-pyproject.toml 1`] = `
|
|
307
|
+
"[project]
|
|
308
|
+
name = "proj.test_project"
|
|
309
|
+
version = "0.1.0"
|
|
310
|
+
dependencies = [ "mcp" ]
|
|
311
|
+
|
|
312
|
+
[dependency-groups]
|
|
313
|
+
dev = [ ]
|
|
314
|
+
|
|
315
|
+
[tool.uv]
|
|
316
|
+
dev-dependencies = [ ]
|
|
317
|
+
"
|
|
318
|
+
`;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM public.ecr.aws/docker/library/python:3.12-slim
|
|
2
|
+
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
|
|
5
|
+
# Add AWS Distro for OpenTelemetry for observability
|
|
6
|
+
# https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability-configure.html
|
|
7
|
+
RUN pip install aws-opentelemetry-distro>=0.10.0
|
|
8
|
+
|
|
9
|
+
# Copy bundled package
|
|
10
|
+
COPY --from=workspace <%- distDir %>/bundle /app
|
|
11
|
+
|
|
12
|
+
EXPOSE 8000
|
|
13
|
+
|
|
14
|
+
ENV PYTHONPATH=/app
|
|
15
|
+
|
|
16
|
+
# Auto-instrument with AWS Distro for OpenTelemetry
|
|
17
|
+
# https://aws-otel.github.io/docs/getting-started/python-sdk/auto-instr
|
|
18
|
+
CMD ["opentelemetry-instrument", "python", "-m", "<%- moduleName %>.<%- mcpServerNameSnakeCase %>.http"]
|
|
File without changes
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from mcp.server.fastmcp import FastMCP
|
|
2
|
+
|
|
3
|
+
mcp = FastMCP(
|
|
4
|
+
name="<%- mcpServerNameClassName %>",
|
|
5
|
+
host="0.0.0.0",
|
|
6
|
+
stateless_http=True,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
@mcp.tool(description="Adds two numbers")
|
|
10
|
+
def add(a: int, b: int) -> int:
|
|
11
|
+
"""Add two numbers"""
|
|
12
|
+
return a + b
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@mcp.resource("example://context", description="Sample Guidance")
|
|
16
|
+
def sample_guidance() -> str:
|
|
17
|
+
return """## Sample Guidance
|
|
18
|
+
|
|
19
|
+
This is some guidance in markdown format!"""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { GeneratorCallback, Tree } from '@nx/devkit';
|
|
6
|
+
import { PyMcpServerGeneratorSchema } from './schema';
|
|
7
|
+
import { NxGeneratorInfo } from '../../utils/nx';
|
|
8
|
+
export declare const PY_MCP_SERVER_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
|
+
export declare const pyMcpServerGenerator: (tree: Tree, options: PyMcpServerGeneratorSchema) => Promise<GeneratorCallback>;
|
|
10
|
+
export default pyMcpServerGenerator;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pyMcpServerGenerator = exports.PY_MCP_SERVER_GENERATOR_INFO = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
*/
|
|
9
|
+
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
const nx_1 = require("../../utils/nx");
|
|
11
|
+
const metrics_1 = require("../../utils/metrics");
|
|
12
|
+
const format_1 = require("../../utils/format");
|
|
13
|
+
const names_1 = require("../../utils/names");
|
|
14
|
+
const py_1 = require("../../utils/py");
|
|
15
|
+
const npm_scope_1 = require("../../utils/npm-scope");
|
|
16
|
+
const agent_core_constructs_1 = require("../../utils/agent-core-constructs/agent-core-constructs");
|
|
17
|
+
const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
18
|
+
const shared_constructs_constants_1 = require("../../utils/shared-constructs-constants");
|
|
19
|
+
const bundle_1 = require("../../utils/bundle");
|
|
20
|
+
const versions_1 = require("../../utils/versions");
|
|
21
|
+
const logger_1 = require("@nxlv/python/src/executors/utils/logger");
|
|
22
|
+
const provider_1 = require("@nxlv/python/src/provider/uv/provider");
|
|
23
|
+
exports.PY_MCP_SERVER_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
|
|
24
|
+
const pyMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
25
|
+
var _a, _b, _c, _d, _e, _f;
|
|
26
|
+
const project = (0, nx_1.readProjectConfigurationUnqualified)(tree, options.project);
|
|
27
|
+
const pyProjectPath = (0, devkit_1.joinPathFragments)(project.root, 'pyproject.toml');
|
|
28
|
+
// Check if the project has a pyproject.toml file
|
|
29
|
+
if (!pyProjectPath) {
|
|
30
|
+
throw new Error(`Unsupported project ${options.project}. Expected a Python project (with a pyproject.toml)`);
|
|
31
|
+
}
|
|
32
|
+
if (!project.sourceRoot) {
|
|
33
|
+
throw new Error(`This project does not have a source root. Please add a source root to the project configuration before running this generator.`);
|
|
34
|
+
}
|
|
35
|
+
// Module name is the last part of the source root,
|
|
36
|
+
const sourceParts = project.sourceRoot.split('/');
|
|
37
|
+
const moduleName = sourceParts[sourceParts.length - 1];
|
|
38
|
+
const name = (0, names_1.kebabCase)((_a = options.name) !== null && _a !== void 0 ? _a : `${(0, names_1.kebabCase)(project.name.split('.').pop())}-mcp-server`);
|
|
39
|
+
const mcpServerNameSnakeCase = (0, names_1.toSnakeCase)((_b = options.name) !== null && _b !== void 0 ? _b : 'mcp-server');
|
|
40
|
+
const mcpServerNameClassName = (0, names_1.toClassName)(name);
|
|
41
|
+
const targetSourceDir = (0, devkit_1.joinPathFragments)(project.sourceRoot, mcpServerNameSnakeCase);
|
|
42
|
+
const distDir = (0, devkit_1.joinPathFragments)('dist', project.root);
|
|
43
|
+
// Generate example server
|
|
44
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), targetSourceDir, {
|
|
45
|
+
name,
|
|
46
|
+
mcpServerNameSnakeCase,
|
|
47
|
+
mcpServerNameClassName,
|
|
48
|
+
moduleName,
|
|
49
|
+
distDir,
|
|
50
|
+
}, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
51
|
+
(0, py_1.addDependenciesToPyProjectToml)(tree, project.root, ['mcp']);
|
|
52
|
+
if (options.computeType === 'BedrockAgentCoreRuntime') {
|
|
53
|
+
const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${name}:latest`;
|
|
54
|
+
// Add bundle target
|
|
55
|
+
(0, bundle_1.addPythonBundleTarget)(project, {
|
|
56
|
+
pythonPlatform: 'aarch64-manylinux2014',
|
|
57
|
+
});
|
|
58
|
+
const dockerTargetName = `${name}-docker`;
|
|
59
|
+
// Add a docker target specific to this MCP server
|
|
60
|
+
project.targets[dockerTargetName] = {
|
|
61
|
+
cache: true,
|
|
62
|
+
executor: 'nx:run-commands',
|
|
63
|
+
options: {
|
|
64
|
+
commands: [
|
|
65
|
+
`docker build --platform linux/arm64 -t ${dockerImageTag} ${targetSourceDir} --build-context workspace=.`,
|
|
66
|
+
],
|
|
67
|
+
parallel: false,
|
|
68
|
+
},
|
|
69
|
+
dependsOn: ['bundle'],
|
|
70
|
+
};
|
|
71
|
+
project.targets.docker = Object.assign(Object.assign({}, project.targets.docker), { dependsOn: [
|
|
72
|
+
...((_d = (_c = project.targets.docker) === null || _c === void 0 ? void 0 : _c.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== dockerTargetName),
|
|
73
|
+
dockerTargetName,
|
|
74
|
+
] });
|
|
75
|
+
project.targets.build = Object.assign(Object.assign({}, project.targets.build), { dependsOn: [
|
|
76
|
+
...((_f = (_e = project.targets.build) === null || _e === void 0 ? void 0 : _e.dependsOn) !== null && _f !== void 0 ? _f : []).filter((t) => t !== 'docker'),
|
|
77
|
+
'docker',
|
|
78
|
+
] });
|
|
79
|
+
// Add shared constructs
|
|
80
|
+
yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
|
|
81
|
+
// Ensure common constructs builds after our mcp server project
|
|
82
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'project.json'), (config) => {
|
|
83
|
+
var _a;
|
|
84
|
+
if (!config.targets) {
|
|
85
|
+
config.targets = {};
|
|
86
|
+
}
|
|
87
|
+
if (!config.targets.build) {
|
|
88
|
+
config.targets.build = {};
|
|
89
|
+
}
|
|
90
|
+
config.targets.build.dependsOn = [
|
|
91
|
+
...((_a = config.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []).filter((t) => t !== `${project.name}:build`),
|
|
92
|
+
`${project.name}:build`,
|
|
93
|
+
];
|
|
94
|
+
return config;
|
|
95
|
+
});
|
|
96
|
+
// Add the construct to deploy the mcp server
|
|
97
|
+
(0, agent_core_constructs_1.addMcpServerConstruct)(tree, {
|
|
98
|
+
mcpServerNameKebabCase: name,
|
|
99
|
+
mcpServerNameClassName,
|
|
100
|
+
dockerImageTag,
|
|
101
|
+
});
|
|
102
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['@aws-sdk/client-bedrock-agentcore-control']));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
// No Dockerfile needed for non-hosted MCP
|
|
106
|
+
tree.delete((0, devkit_1.joinPathFragments)(targetSourceDir, 'Dockerfile'));
|
|
107
|
+
}
|
|
108
|
+
(0, devkit_1.updateProjectConfiguration)(tree, project.name, Object.assign(Object.assign({}, project), { targets: Object.assign(Object.assign({}, project.targets), {
|
|
109
|
+
// Add targets for running the MCP server
|
|
110
|
+
[`${options.name ? name : 'mcp-server'}-serve-stdio`]: {
|
|
111
|
+
executor: 'nx:run-commands',
|
|
112
|
+
options: {
|
|
113
|
+
commands: [`uv run -m ${moduleName}.${mcpServerNameSnakeCase}.stdio`],
|
|
114
|
+
cwd: '{projectRoot}',
|
|
115
|
+
},
|
|
116
|
+
}, [`${options.name ? name : 'mcp-server'}-serve-http`]: {
|
|
117
|
+
executor: 'nx:run-commands',
|
|
118
|
+
options: {
|
|
119
|
+
commands: [`uv run -m ${moduleName}.${mcpServerNameSnakeCase}.http`],
|
|
120
|
+
cwd: '{projectRoot}',
|
|
121
|
+
},
|
|
122
|
+
}, [`${options.name ? name : 'mcp-server'}-inspect`]: {
|
|
123
|
+
executor: 'nx:run-commands',
|
|
124
|
+
options: {
|
|
125
|
+
commands: [
|
|
126
|
+
`mcp-inspector -- uv run -m ${moduleName}.${mcpServerNameSnakeCase}.stdio`,
|
|
127
|
+
],
|
|
128
|
+
cwd: '{projectRoot}',
|
|
129
|
+
},
|
|
130
|
+
} }) }));
|
|
131
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['@modelcontextprotocol/inspector']));
|
|
132
|
+
yield (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [exports.PY_MCP_SERVER_GENERATOR_INFO]);
|
|
133
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
134
|
+
return () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
135
|
+
(0, devkit_1.installPackagesTask)(tree);
|
|
136
|
+
yield new provider_1.UVProvider(tree.root, new logger_1.Logger(), tree).install();
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
exports.pyMcpServerGenerator = pyMcpServerGenerator;
|
|
140
|
+
exports.default = exports.pyMcpServerGenerator;
|
|
141
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/mcp-server/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
export type PyMcpServerComputeType = 'None' | 'BedrockAgentCoreRuntime';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* TypeScript types for options defined in schema.json
|
|
9
|
+
* Update this to match schema.json if you make changes.
|
|
10
|
+
*/
|
|
11
|
+
export interface PyMcpServerGeneratorSchema {
|
|
12
|
+
project: string;
|
|
13
|
+
name?: string;
|
|
14
|
+
computeType?: PyMcpServerComputeType;
|
|
15
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"$id": "py#mcp-server",
|
|
4
|
+
"title": "py#mcp-server",
|
|
5
|
+
"description": "Generate a Python Model Context Protocol (MCP) server for providing context to Large Language Models",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"project": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The project to add an MCP server to",
|
|
11
|
+
"$default": {
|
|
12
|
+
"$source": "argv",
|
|
13
|
+
"index": 0
|
|
14
|
+
},
|
|
15
|
+
"x-prompt": "Select the Python project to add the MCP server to",
|
|
16
|
+
"x-dropdown": "projects"
|
|
17
|
+
},
|
|
18
|
+
"computeType": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "The type of compute to host your MCP server, if any",
|
|
21
|
+
"x-prompt": "How would you like to host your MCP server?",
|
|
22
|
+
"enum": ["None", "BedrockAgentCoreRuntime"],
|
|
23
|
+
"default": "None",
|
|
24
|
+
"x-priority": "important"
|
|
25
|
+
},
|
|
26
|
+
"name": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "The name of your MCP server (default: mcp-server)",
|
|
29
|
+
"x-prompt": "What would you like to call your MCP server? (default: mcp-server)"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"required": ["project"]
|
|
33
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Local values for resource naming and tagging
|
|
2
|
+
locals {
|
|
3
|
+
account_id = data.aws_caller_identity.current.account_id
|
|
4
|
+
region = var.aws_region
|
|
5
|
+
bucket_name = "${local.account_id}-tf-state-${local.region}"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# S3 bucket for Terraform state
|
|
9
|
+
resource "aws_s3_bucket" "terraform_state" {
|
|
10
|
+
bucket = local.bucket_name
|
|
11
|
+
force_destroy = false
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
# S3 bucket versioning (hardcoded to enabled)
|
|
15
|
+
resource "aws_s3_bucket_versioning" "terraform_state" {
|
|
16
|
+
bucket = aws_s3_bucket.terraform_state.id
|
|
17
|
+
versioning_configuration {
|
|
18
|
+
status = "Enabled"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
# S3 bucket server-side encryption (hardcoded to AES256)
|
|
23
|
+
resource "aws_s3_bucket_server_side_encryption_configuration" "terraform_state" {
|
|
24
|
+
bucket = aws_s3_bucket.terraform_state.id
|
|
25
|
+
|
|
26
|
+
rule {
|
|
27
|
+
apply_server_side_encryption_by_default {
|
|
28
|
+
sse_algorithm = "AES256"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# S3 bucket public access block
|
|
34
|
+
resource "aws_s3_bucket_public_access_block" "terraform_state" {
|
|
35
|
+
bucket = aws_s3_bucket.terraform_state.id
|
|
36
|
+
|
|
37
|
+
block_public_acls = true
|
|
38
|
+
block_public_policy = true
|
|
39
|
+
ignore_public_acls = true
|
|
40
|
+
restrict_public_buckets = true
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# S3 bucket lifecycle configuration (simplified)
|
|
44
|
+
resource "aws_s3_bucket_lifecycle_configuration" "terraform_state" {
|
|
45
|
+
depends_on = [aws_s3_bucket_versioning.terraform_state]
|
|
46
|
+
bucket = aws_s3_bucket.terraform_state.id
|
|
47
|
+
|
|
48
|
+
rule {
|
|
49
|
+
id = "terraform_state_lifecycle"
|
|
50
|
+
status = "Enabled"
|
|
51
|
+
|
|
52
|
+
# Apply to all objects in the bucket
|
|
53
|
+
filter {}
|
|
54
|
+
|
|
55
|
+
# Delete old versions after 30 days
|
|
56
|
+
noncurrent_version_expiration {
|
|
57
|
+
noncurrent_days = 30
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# Delete incomplete multipart uploads after 7 days
|
|
61
|
+
abort_incomplete_multipart_upload {
|
|
62
|
+
days_after_initiation = 7
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# S3 bucket policy to deny insecure connections
|
|
68
|
+
resource "aws_s3_bucket_policy" "terraform_state" {
|
|
69
|
+
bucket = aws_s3_bucket.terraform_state.id
|
|
70
|
+
|
|
71
|
+
policy = jsonencode({
|
|
72
|
+
Version = "2012-10-17"
|
|
73
|
+
Statement = [
|
|
74
|
+
{
|
|
75
|
+
Sid = "DenyInsecureConnections"
|
|
76
|
+
Effect = "Deny"
|
|
77
|
+
Principal = "*"
|
|
78
|
+
Action = "s3:*"
|
|
79
|
+
Resource = [
|
|
80
|
+
aws_s3_bucket.terraform_state.arn,
|
|
81
|
+
"${aws_s3_bucket.terraform_state.arn}/*"
|
|
82
|
+
]
|
|
83
|
+
Condition = {
|
|
84
|
+
Bool = {
|
|
85
|
+
"aws:SecureTransport" = "false"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
})
|
|
91
|
+
}
|
|
@@ -52,7 +52,7 @@ function terraformProjectGenerator(tree, schema) {
|
|
|
52
52
|
`aws s3 cp ${tfDistDir}/bootstrap.tfstate s3://$(aws sts get-caller-identity --query Account --output text)-tf-state-$(aws configure get region)/bootstrap.tfstate`,
|
|
53
53
|
],
|
|
54
54
|
parallel: false,
|
|
55
|
-
cwd: '{projectRoot}
|
|
55
|
+
cwd: '{projectRoot}/bootstrap',
|
|
56
56
|
},
|
|
57
57
|
},
|
|
58
58
|
'bootstrap-destroy': {
|
|
@@ -60,7 +60,7 @@ function terraformProjectGenerator(tree, schema) {
|
|
|
60
60
|
options: {
|
|
61
61
|
forwardAllArgs: true,
|
|
62
62
|
command: `terraform destroy -state=${tfDistDir}/bootstrap.tfstate`,
|
|
63
|
-
cwd: '{projectRoot}
|
|
63
|
+
cwd: '{projectRoot}/bootstrap',
|
|
64
64
|
},
|
|
65
65
|
},
|
|
66
66
|
destroy: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"names":[],"mappings":";;;AAiCA,8DAmNC;;AApPD;;;GAGG;AACH,uCAYoB;AAEpB,sDAAyD;AACzD,+BAAsC;AACtC,+CAAoD;AACpD,uCAIwB;AACxB,yCAAkD;AAClD,mDAAoD;AAEpD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AACnC,QAAA,gCAAgC,GAC3C,IAAA,qBAAgB,EAAC,UAAU,CAAC,CAAC;AAE/B,SAAsB,yBAAyB,CAC7C,IAAU,EACV,MAAuC;;;QAEvC,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAA,2BAAe,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAE1C,MAAM,wBAAwB,GAAG,IAAA,eAAQ,EACvC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,EAC/B,IAAI,CAAC,IAAI,CACV,CAAC;QACF,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,wBAAwB,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAEhD,IAAA,qBAAe,EAAC,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;QAEtE,MAAM,kBAAkB,GAEpB;YACF,KAAK,EAAE;gBACL,QAAQ,EAAE,iBAAiB;gBAC3B,oBAAoB,EAAE,KAAK;gBAC3B,cAAc,EAAE;oBACd,GAAG,EAAE;wBACH,OAAO,EAAE,mBAAmB,SAAS,aAAa;qBACnD;iBACF;gBACD,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;oBACpB,GAAG,EAAE,mBAAmB;iBACzB;gBACD,SAAS,EAAE,CAAC,MAAM,CAAC;aACpB;YACD,SAAS,EAAE;gBACT,QAAQ,EAAE,iBAAiB;gBAC3B,OAAO,EAAE;oBACP,cAAc,EAAE,IAAI;oBACpB,QAAQ,EAAE;wBACR,sIAAsI,SAAS,4BAA4B;wBAC3K,gBAAgB;wBAChB,wCAAwC,SAAS,kEAAkE;wBACnH,aAAa,SAAS,6IAA6I;qBACpK;oBACD,QAAQ,EAAE,KAAK;oBACf,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,7 +63,11 @@ const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0
|
|
|
63
63
|
// Tracking: https://github.com/modelcontextprotocol/typescript-sdk/issues/164
|
|
64
64
|
// We use a renamed dependency so that v3 and v4 can coexist in projects until the above is resolved
|
|
65
65
|
const deps = (0, versions_1.withVersions)(['@modelcontextprotocol/sdk', 'zod-v3', 'express']);
|
|
66
|
-
let devDeps = (0, versions_1.withVersions)([
|
|
66
|
+
let devDeps = (0, versions_1.withVersions)([
|
|
67
|
+
'tsx',
|
|
68
|
+
'@types/express',
|
|
69
|
+
'@modelcontextprotocol/inspector',
|
|
70
|
+
]);
|
|
67
71
|
// Add hosting based on compute type
|
|
68
72
|
if (options.computeType === 'BedrockAgentCoreRuntime') {
|
|
69
73
|
const dockerImageTag = `${(0, npm_scope_1.getNpmScope)(tree)}-${name}:latest`;
|
|
@@ -121,6 +125,14 @@ const tsMcpServerGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0
|
|
|
121
125
|
commands: [`tsx --watch ${relativeSourceDir}/http.ts`],
|
|
122
126
|
cwd: '{projectRoot}',
|
|
123
127
|
},
|
|
128
|
+
}, [`${options.name ? name : 'mcp-server'}-inspect`]: {
|
|
129
|
+
executor: 'nx:run-commands',
|
|
130
|
+
options: {
|
|
131
|
+
commands: [
|
|
132
|
+
`mcp-inspector -- tsx --watch ${relativeSourceDir}/stdio.ts`,
|
|
133
|
+
],
|
|
134
|
+
cwd: '{projectRoot}',
|
|
135
|
+
},
|
|
124
136
|
} }) }));
|
|
125
137
|
yield (0, metrics_1.addGeneratorMetricsIfApplicable)(tree, [exports.TS_MCP_SERVER_GENERATOR_INFO]);
|
|
126
138
|
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/mcp-server/generator.ts"],"names":[],"mappings":"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"}
|
package/src/utils/bundle.d.ts
CHANGED
|
@@ -2,18 +2,15 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import {
|
|
6
|
-
export interface
|
|
5
|
+
import { ProjectConfiguration } from '@nx/devkit';
|
|
6
|
+
export interface AddPythonBundleTargetOptions {
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Python platform
|
|
9
|
+
* @default x86_64-manylinux2014
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Python package name
|
|
13
|
-
*/
|
|
14
|
-
packageName: string;
|
|
11
|
+
pythonPlatform?: 'x86_64-manylinux2014' | 'aarch64-manylinux2014';
|
|
15
12
|
}
|
|
16
13
|
/**
|
|
17
|
-
*
|
|
14
|
+
* Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
|
|
18
15
|
*/
|
|
19
|
-
export declare const
|
|
16
|
+
export declare const addPythonBundleTarget: (project: ProjectConfiguration, opts?: AddPythonBundleTargetOptions) => void;
|
package/src/utils/bundle.js
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.addPythonBundleTarget = void 0;
|
|
8
8
|
/**
|
|
9
9
|
* Create a target for bundling a python project
|
|
10
10
|
*/
|
|
11
|
-
const createPythonBundleTarget = ({ projectDir, packageName, }) => {
|
|
11
|
+
const createPythonBundleTarget = ({ projectDir, packageName, pythonPlatform, }) => {
|
|
12
12
|
return {
|
|
13
13
|
cache: true,
|
|
14
14
|
executor: 'nx:run-commands',
|
|
@@ -16,11 +16,33 @@ const createPythonBundleTarget = ({ projectDir, packageName, }) => {
|
|
|
16
16
|
options: {
|
|
17
17
|
commands: [
|
|
18
18
|
`uv export --frozen --no-dev --no-editable --project ${projectDir} --package ${packageName} -o dist/${projectDir}/bundle/requirements.txt`,
|
|
19
|
-
`uv pip install -n --no-deps --no-installer-metadata --no-compile-bytecode --python-platform
|
|
19
|
+
`uv pip install -n --no-deps --no-installer-metadata --no-compile-bytecode --python-platform ${pythonPlatform} --target dist/${projectDir}/bundle -r dist/${projectDir}/bundle/requirements.txt`,
|
|
20
20
|
],
|
|
21
21
|
parallel: false,
|
|
22
22
|
},
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Adds a bundle target to the given project if it does not exist, and updates the build target to depend on it
|
|
27
|
+
*/
|
|
28
|
+
const addPythonBundleTarget = (project, opts) => {
|
|
29
|
+
var _a, _b, _c, _d;
|
|
30
|
+
if (!project.targets) {
|
|
31
|
+
project.targets = {};
|
|
32
|
+
}
|
|
33
|
+
if (!((_a = project.targets) === null || _a === void 0 ? void 0 : _a.bundle)) {
|
|
34
|
+
project.targets.bundle = Object.assign(Object.assign({}, createPythonBundleTarget({
|
|
35
|
+
projectDir: project.root,
|
|
36
|
+
packageName: project.name,
|
|
37
|
+
pythonPlatform: (_b = opts === null || opts === void 0 ? void 0 : opts.pythonPlatform) !== null && _b !== void 0 ? _b : 'x86_64-manylinux2014',
|
|
38
|
+
})), { dependsOn: ['compile'] });
|
|
39
|
+
}
|
|
40
|
+
if ((_c = project.targets) === null || _c === void 0 ? void 0 : _c.build) {
|
|
41
|
+
project.targets.build.dependsOn = [
|
|
42
|
+
...((_d = project.targets.build.dependsOn) !== null && _d !== void 0 ? _d : []).filter((t) => t !== 'bundle'),
|
|
43
|
+
'bundle',
|
|
44
|
+
];
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.addPythonBundleTarget = addPythonBundleTarget;
|
|
26
48
|
//# sourceMappingURL=bundle.js.map
|
package/src/utils/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/bundle.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/bundle.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAyBH;;GAEG;AACH,MAAM,wBAAwB,GAAG,CAAC,EAChC,UAAU,EACV,WAAW,EACX,cAAc,GACkB,EAAuB,EAAE;IACzD,OAAO;QACL,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,CAAC,wBAAwB,UAAU,SAAS,CAAC;QACtD,OAAO,EAAE;YACP,QAAQ,EAAE;gBACR,uDAAuD,UAAU,cAAc,WAAW,YAAY,UAAU,0BAA0B;gBAC1I,+FAA+F,cAAc,kBAAkB,UAAU,mBAAmB,UAAU,0BAA0B;aACjM;YACD,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,OAA6B,EAC7B,IAAmC,EACnC,EAAE;;IACF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,CAAA,MAAA,OAAO,CAAC,OAAO,0CAAE,MAAM,CAAA,EAAE,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,MAAM,mCACjB,wBAAwB,CAAC;YAC1B,UAAU,EAAE,OAAO,CAAC,IAAI;YACxB,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,cAAc,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,cAAc,mCAAI,sBAAsB;SAC/D,CAAC,KACF,SAAS,EAAE,CAAC,SAAS,CAAC,GACvB,CAAC;IACJ,CAAC;IAED,IAAI,MAAA,OAAO,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;YAChC,GAAG,CAAC,MAAA,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;YACxE,QAAQ;SACT,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,qBAAqB,yBAyBhC"}
|
package/src/utils/py.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDependenciesToPyProjectToml = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
7
|
+
*/
|
|
8
|
+
const toml_1 = require("@iarna/toml");
|
|
9
|
+
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
/**
|
|
11
|
+
* Add dependencies to a pyproject.toml file
|
|
12
|
+
*/
|
|
13
|
+
const addDependenciesToPyProjectToml = (tree, projectRoot, deps) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), 'utf8'));
|
|
16
|
+
const newDeps = new Set(deps);
|
|
17
|
+
projectToml.project.dependencies = [
|
|
18
|
+
// TODO: consider parsing into name and version and replacing where name is the same
|
|
19
|
+
...((_b = (_a = projectToml.project) === null || _a === void 0 ? void 0 : _a.dependencies) !== null && _b !== void 0 ? _b : []).filter((dep) => !newDeps.has(dep)),
|
|
20
|
+
...deps,
|
|
21
|
+
];
|
|
22
|
+
tree.write((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
23
|
+
};
|
|
24
|
+
exports.addDependenciesToPyProjectToml = addDependenciesToPyProjectToml;
|
|
25
|
+
//# sourceMappingURL=py.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,sCAA+C;AAC/C,uCAAqD;AAGrD;;GAEG;AACI,MAAM,8BAA8B,GAAG,CAC5C,IAAU,EACV,WAAmB,EACnB,IAAc,EACd,EAAE;;IACF,MAAM,WAAW,GAAG,IAAA,YAAK,EACvB,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CACjD,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG;QACjC,oFAAoF;QACpF,GAAG,CAAC,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAC3B;QACD,GAAG,IAAI;KACR,CAAC;IACF,IAAI,CAAC,KAAK,CACR,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAChD,IAAA,gBAAS,EAAC,WAAW,CAAC,CACvB,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,8BAA8B,kCAoBzC"}
|
package/src/utils/versions.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare const VERSIONS: {
|
|
|
17
17
|
readonly '@nx/devkit': "~21.0.3";
|
|
18
18
|
readonly '@nx-extend/terraform': "^9.0.0";
|
|
19
19
|
readonly '@modelcontextprotocol/sdk': "^1.11.3";
|
|
20
|
+
readonly '@modelcontextprotocol/inspector': "^0.16.5";
|
|
20
21
|
readonly '@tanstack/react-router': "^1.121.16";
|
|
21
22
|
readonly '@tanstack/router-plugin': "^1.121.16";
|
|
22
23
|
readonly '@tanstack/router-generator': "^1.121.16";
|
|
@@ -61,5 +62,5 @@ export type IVersion = keyof typeof VERSIONS;
|
|
|
61
62
|
* Add versions to the given dependencies
|
|
62
63
|
*/
|
|
63
64
|
export declare const withVersions: (deps: (keyof typeof VERSIONS)[]) => {
|
|
64
|
-
[k: string]: "^0.0.60" | "^3.775.0" | "^3.848.0" | "^2.24.1" | "^6.0.0" | "~21.2.0" | "~21.0.3" | "^9.0.0" | "^1.11.3" | "^1.121.16" | "^1.120.17" | "^1.121.0" | "^3.0.94" | "^3.0.928" | "^1.0.38" | "^5.74.3" | "^5.84.2" | "11.0.0" | "^22.13.13" | "^8.10.148" | "^2.8.18" | "^5.0.3" | "^4.2.0" | "^1.0.20" | "^2.1006.0" | "^2.207.0" | "^3.10.3" | "^10.4.2" | "^2.8.5" | "^0.25.1" | "^5.2.5" | "^5.1.0" | "^2.4.0" | "^3.2.0" | "^3.5.3" | "^0.5.21" | "^4.1.11" | "4.20.1" | "^5.1.4" | "^4.0.14" | "npm:zod@^3";
|
|
65
|
+
[k: string]: "^0.0.60" | "^3.775.0" | "^3.848.0" | "^2.24.1" | "^6.0.0" | "~21.2.0" | "~21.0.3" | "^9.0.0" | "^1.11.3" | "^0.16.5" | "^1.121.16" | "^1.120.17" | "^1.121.0" | "^3.0.94" | "^3.0.928" | "^1.0.38" | "^5.74.3" | "^5.84.2" | "11.0.0" | "^22.13.13" | "^8.10.148" | "^2.8.18" | "^5.0.3" | "^4.2.0" | "^1.0.20" | "^2.1006.0" | "^2.207.0" | "^3.10.3" | "^10.4.2" | "^2.8.5" | "^0.25.1" | "^5.2.5" | "^5.1.0" | "^2.4.0" | "^3.2.0" | "^3.5.3" | "^0.5.21" | "^4.1.11" | "4.20.1" | "^5.1.4" | "^4.0.14" | "npm:zod@^3";
|
|
65
66
|
};
|
package/src/utils/versions.js
CHANGED
|
@@ -20,6 +20,7 @@ exports.VERSIONS = {
|
|
|
20
20
|
'@nx/devkit': '~21.0.3',
|
|
21
21
|
'@nx-extend/terraform': '^9.0.0',
|
|
22
22
|
'@modelcontextprotocol/sdk': '^1.11.3',
|
|
23
|
+
'@modelcontextprotocol/inspector': '^0.16.5',
|
|
23
24
|
'@tanstack/react-router': '^1.121.16',
|
|
24
25
|
'@tanstack/router-plugin': '^1.121.16',
|
|
25
26
|
'@tanstack/router-generator': '^1.121.16',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,QAAQ,GAAG;IACtB,iCAAiC,EAAE,SAAS;IAC5C,kCAAkC,EAAE,UAAU;IAC9C,+BAA+B,EAAE,UAAU;IAC3C,+CAA+C,EAAE,UAAU;IAC3D,2CAA2C,EAAE,UAAU;IACvD,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,+BAA+B,EAAE,SAAS;IAC1C,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,sBAAsB,EAAE,QAAQ;IAChC,2BAA2B,EAAE,SAAS;IACtC,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IACtC,4BAA4B,EAAE,WAAW;IACzC,+BAA+B,EAAE,WAAW;IAC5C,wBAAwB,EAAE,UAAU;IACpC,qCAAqC,EAAE,SAAS;IAChD,+BAA+B,EAAE,UAAU;IAC3C,kCAAkC,EAAE,SAAS;IAC7C,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,4BAA4B,EAAE,QAAQ;IACtC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,SAAS;IAC9B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,wBAAwB,EAAE,QAAQ;IAClC,OAAO,EAAE,QAAQ;IACjB,qBAAqB,EAAE,QAAQ;IAC/B,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE,SAAS;IACtB,mBAAmB,EAAE,SAAS;IAC9B,GAAG,EAAE,QAAQ,EAAE,kDAAkD;IACjE,qBAAqB,EAAE,QAAQ;IAC/B,GAAG,EAAE,SAAS;IACd,2FAA2F;IAC3F,oEAAoE;IACpE,QAAQ,EAAE,YAAY;CACd,CAAC;AAEX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADjD,QAAA,YAAY,gBACqC"}
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,QAAQ,GAAG;IACtB,iCAAiC,EAAE,SAAS;IAC5C,kCAAkC,EAAE,UAAU;IAC9C,+BAA+B,EAAE,UAAU;IAC3C,+CAA+C,EAAE,UAAU;IAC3D,2CAA2C,EAAE,UAAU;IACvD,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,+BAA+B,EAAE,SAAS;IAC1C,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,sBAAsB,EAAE,QAAQ;IAChC,2BAA2B,EAAE,SAAS;IACtC,iCAAiC,EAAE,SAAS;IAC5C,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IACtC,4BAA4B,EAAE,WAAW;IACzC,+BAA+B,EAAE,WAAW;IAC5C,wBAAwB,EAAE,UAAU;IACpC,qCAAqC,EAAE,SAAS;IAChD,+BAA+B,EAAE,UAAU;IAC3C,kCAAkC,EAAE,SAAS;IAC7C,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,4BAA4B,EAAE,QAAQ;IACtC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,SAAS;IAC9B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,wBAAwB,EAAE,QAAQ;IAClC,OAAO,EAAE,QAAQ;IACjB,qBAAqB,EAAE,QAAQ;IAC/B,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE,SAAS;IACtB,mBAAmB,EAAE,SAAS;IAC9B,GAAG,EAAE,QAAQ,EAAE,kDAAkD;IACjE,qBAAqB,EAAE,QAAQ;IAC/B,GAAG,EAAE,SAAS;IACd,2FAA2F;IAC3F,oEAAoE;IACpE,QAAQ,EAAE,YAAY;CACd,CAAC;AAEX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADjD,QAAA,YAAY,gBACqC"}
|