gitextract_l3hhubux/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── conditional_chaining.md │ │ └── feature_request.md │ └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .nightswatch/ │ ├── functional/ │ │ ├── conftest.py │ │ ├── files/ │ │ │ ├── EPCTerminology.csv │ │ │ ├── import-fail-expected.json │ │ │ ├── import-fail.xlsx │ │ │ ├── import-pass-expected.json │ │ │ ├── import-pass.xlsx │ │ │ └── terms.csv │ │ ├── helpers/ │ │ │ ├── __init__.py │ │ │ ├── bot_intents/ │ │ │ │ ├── get_attribute.json │ │ │ │ ├── greetings.json │ │ │ │ └── set_attribute.json │ │ │ ├── cfn_parameter_fetcher.py │ │ │ ├── cloud_watch_client.py │ │ │ ├── cognito_client.py │ │ │ ├── iam_client.py │ │ │ ├── kendra_client.py │ │ │ ├── lex_client.py │ │ │ ├── s3_client.py │ │ │ ├── translate_client.py │ │ │ ├── utils/ │ │ │ │ ├── __init__.py │ │ │ │ └── textbox.py │ │ │ └── website_model/ │ │ │ ├── __init__.py │ │ │ ├── chat_page.py │ │ │ ├── custom_terminology_page.py │ │ │ ├── dom_operator.py │ │ │ ├── edit_page.py │ │ │ ├── export_page.py │ │ │ ├── import_page.py │ │ │ ├── kendra_page.py │ │ │ ├── login_page.py │ │ │ ├── menu_nav.py │ │ │ └── settings_page.py │ │ ├── pytest.ini │ │ ├── question_bank/ │ │ │ ├── embeddings_questions.json │ │ │ ├── guardrail_question.json │ │ │ ├── import_questions.json │ │ │ ├── import_questions_qna.json │ │ │ ├── import_questions_slot.json │ │ │ ├── import_questions_text.json │ │ │ ├── kendra_questions.json │ │ │ ├── large_import_questions.json │ │ │ ├── llm_questions.json │ │ │ ├── question_designer_questions.json │ │ │ ├── routing_questions.json │ │ │ ├── session_attribute_questions.json │ │ │ ├── settings_questions.json │ │ │ └── translate_questions.json │ │ ├── test_1_login.py │ │ ├── test_2_import.py │ │ ├── test_embeddings.py │ │ ├── test_export.py │ │ ├── test_guardrails.py │ │ ├── test_kendra.py │ │ ├── test_knowledge_base.py │ │ ├── test_lambda_hooks.py │ │ ├── test_llm.py │ │ ├── test_question_designer.py │ │ ├── test_routing.py │ │ ├── test_session_attribute.py │ │ ├── test_settings.py │ │ ├── test_translate.py │ │ └── test_tuning.py │ └── pyproject.toml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.txt ├── NOTICE.txt ├── README.md ├── SECURITY.md ├── deployment/ │ ├── build-s3-dist.sh │ └── run-unit-tests.sh └── source/ ├── .markdownlint.jsonc ├── .npmrc ├── .prettierignore ├── .prettierrc.yml ├── Makefile ├── assets/ │ ├── Makefile │ ├── README.md │ ├── default-utterances.json │ └── examples/ │ ├── README.md │ ├── documents/ │ │ ├── blog-samples-final.json │ │ ├── blog-samples-final.txt │ │ ├── blog-samples.json │ │ └── blog-samples.txt │ └── photos/ │ └── README.md ├── bin/ │ ├── .gitignore │ ├── README.md │ ├── URL.sh │ ├── build.js │ ├── check.js │ ├── check_bucket_ownership.js │ ├── config.js │ ├── exports.js │ ├── json.js │ ├── launch.js │ ├── license.js │ ├── license.txt │ ├── name.js │ ├── update-public.sh │ ├── upload.sh │ └── wait.js ├── cli/ │ ├── .coveragerc │ ├── README.md │ ├── aws_solutions/ │ │ ├── core/ │ │ │ ├── __init__.py │ │ │ ├── config.py │ │ │ ├── helpers.py │ │ │ └── logging.py │ │ └── qnabot/ │ │ └── cli/ │ │ ├── __init__.py │ │ ├── qnabot_cli.py │ │ └── qnabot_cli_helper.py │ ├── pyproject.toml │ ├── pytest.ini │ ├── run-pytest.py │ └── tests/ │ ├── __init__.py │ ├── aws_solutions/ │ │ ├── core/ │ │ │ ├── __init__.py │ │ │ ├── test_helpers.py │ │ │ ├── test_logging.py │ │ │ └── test_solution_config.py │ │ └── qnabot/ │ │ ├── __init__.py │ │ ├── fixtures/ │ │ │ ├── cloudformation_fixtures.py │ │ │ ├── qnabot-test-template.yaml │ │ │ └── s3_fixtures.py │ │ ├── test_qnabot_cli.py │ │ └── test_qnabot_cli_helper.py │ └── conftest.py ├── docs/ │ ├── Blogpost-BranchingNavigation.json │ ├── Blogpost-SimpleNavigation.json │ ├── Blogpost-SimpleNavigationSupporting.json │ ├── LLM_Retrieval_and_generative_question_answering/ │ │ └── README.md │ ├── PII_Detection_And_Redaction/ │ │ └── README.md │ ├── Technical Information.md │ ├── VPC_support/ │ │ └── README.md │ ├── architecture.xml │ ├── bedrock_guardrails/ │ │ └── README.md │ ├── bedrock_knowledgebase_rag/ │ │ └── README.md │ ├── bot_routing/ │ │ └── README.md │ ├── client_filters.md │ ├── connect_callback/ │ │ └── README.md │ ├── custom_domain_name_setup/ │ │ └── README.md │ ├── custom_terminology_guide/ │ │ ├── README.md │ │ └── sample.csv │ ├── excel_import/ │ │ ├── README.md │ │ └── sample.xlsx │ ├── handlebars/ │ │ └── README.md │ ├── intent_slot_matching/ │ │ └── README.md │ ├── kendra_crawler_guide/ │ │ └── README.md │ ├── kendra_fallback/ │ │ └── README.md │ ├── kendra_redirect/ │ │ └── README.md │ ├── lambda_hooks/ │ │ ├── README.md │ │ ├── lambda_hook_sdk.MD │ │ └── q-business-lambda-hook-example/ │ │ ├── README.md │ │ └── q-business-lambda-hook-template.yml │ ├── llm_streaming_responses/ │ │ └── README.md │ ├── multilanguage_support/ │ │ └── README.md │ ├── overview/ │ │ └── README.md │ ├── password_reset/ │ │ └── README.md │ ├── qnabot_cli/ │ │ └── README.md │ ├── recent_topics_lambda_hook_example/ │ │ ├── README.md │ │ ├── recent topic settings.json │ │ └── recent_topics_settings.json │ ├── semantic_matching_using_LLM_embeddings/ │ │ └── README.md │ ├── settings.md │ ├── tuning_accuracy_guide/ │ │ └── README.md │ ├── update_or_migrate_deployment/ │ │ └── README.md │ ├── using_cloud9/ │ │ └── README.md │ └── zombie.json ├── eslint.config.js ├── lambda/ │ ├── Makefile │ ├── README.md │ ├── aws-sdk-layer/ │ │ ├── Makefile │ │ ├── package.json │ │ └── sdk-config/ │ │ └── customSdkConfig.js │ ├── cfn/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── ApiDeployment.js │ │ │ ├── CognitoDomain.js │ │ │ ├── CognitoLogin.js │ │ │ ├── CognitoRole.js │ │ │ ├── CognitoUrl.js │ │ │ ├── DefaultSettings.json │ │ │ ├── ESCognitoClient.js │ │ │ ├── LambdaVersion.js │ │ │ ├── ModelAccess.js │ │ │ ├── OpenSearchUpdates.js │ │ │ ├── PostUpgradeImport.js │ │ │ ├── PreUpgradeExport.js │ │ │ ├── S3Lambda.js │ │ │ ├── S3Unzip.js │ │ │ ├── S3Version.js │ │ │ ├── SettingsInitializer.js │ │ │ ├── Variable.js │ │ │ ├── base.js │ │ │ ├── lex.js │ │ │ └── util/ │ │ │ ├── customSdkConfig.js │ │ │ ├── parseIntFromLexRequestObject.js │ │ │ ├── promise.js │ │ │ └── response.js │ │ ├── package.json │ │ └── test/ │ │ ├── index.fixtures.js │ │ ├── index.test.js │ │ └── lib/ │ │ ├── ApiDeployment.fixtures.js │ │ ├── ApiDeployment.test.js │ │ ├── CognitoDomain.fixtures.js │ │ ├── CognitoDomain.test.js │ │ ├── CognitoLogin.fixtures.js │ │ ├── CognitoLogin.test.js │ │ ├── CognitoRole.fixtures.js │ │ ├── CognitoRole.test.js │ │ ├── CognitoUrl.fixtures.js │ │ ├── CognitoUrl.test.js │ │ ├── ESCognitoClient.fixtures.js │ │ ├── ESCognitoClient.test.js │ │ ├── LambdaVersion.fixtures.js │ │ ├── LambdaVersion.test.js │ │ ├── ModelAccess.fixtures.js │ │ ├── ModelAccess.test.js │ │ ├── OpenSearchUpdates.fixtures.js │ │ ├── OpenSearchUpdates.test.js │ │ ├── PostUpgradeImport.fixtures.js │ │ ├── PostUpgradeImport.test.js │ │ ├── PreUpgradeExport.fixtures.js │ │ ├── PreUpgradeExport.test.js │ │ ├── S3Lambda.fixtures.js │ │ ├── S3Lambda.test.js │ │ ├── S3Unzip.fixtures.js │ │ ├── S3Unzip.test.js │ │ ├── S3Version.fixtures.js │ │ ├── S3Version.test.js │ │ ├── SettingsInitializer.fixtures.js │ │ ├── SettingsInitializer.test.js │ │ ├── Variable.fixtures.js │ │ ├── Variable.test.js │ │ ├── base.test.js │ │ ├── lex.fixtures.js │ │ ├── lex.test.js │ │ └── util/ │ │ ├── customSdkConfig.test.js │ │ ├── parseIntFromLexRequestObject.test.js │ │ ├── promise.test.js │ │ ├── response.fixtures.js │ │ └── response.test.js │ ├── cfn-lambda-layer/ │ │ ├── Makefile │ │ └── package.json │ ├── common-modules-layer/ │ │ ├── Makefile │ │ ├── opensearch-client/ │ │ │ └── connection.js │ │ └── package.json │ ├── connect/ │ │ ├── Makefile │ │ ├── flowsv2/ │ │ │ └── contactflowLexV2.json │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── questions.json │ │ └── test/ │ │ ├── contactflow.fixtures.js │ │ └── index.test.js │ ├── es-proxy-layer/ │ │ ├── Makefile │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── bedrock/ │ │ │ │ ├── AmazonEmbeddings.js │ │ │ │ ├── AmazonNovaEmbeddings.js │ │ │ │ ├── BedrockModelProviderPrototype.js │ │ │ │ ├── CohereEmbeddings.js │ │ │ │ ├── applyGuardrail.js │ │ │ │ ├── bedrockAgents.js │ │ │ │ ├── bedrockClient.js │ │ │ │ ├── bedrockLLMProvider.js │ │ │ │ ├── bedrockModelConstants.js │ │ │ │ └── bedrockModels.js │ │ │ ├── cfn.js │ │ │ ├── cleanmetrics.js │ │ │ ├── dialog-event/ │ │ │ │ ├── processDialogEvent.js │ │ │ │ └── processSlots.js │ │ │ ├── embeddings.js │ │ │ ├── es-logging.js │ │ │ ├── es_query.js │ │ │ ├── esbodybuilder.js │ │ │ ├── fulfillment-event/ │ │ │ │ ├── encryptor.js │ │ │ │ ├── evaluateConditionalChaining.js │ │ │ │ ├── getHit.js │ │ │ │ ├── invokeLambda.js │ │ │ │ ├── mergeNext.js │ │ │ │ ├── processFulfillmentEvent.js │ │ │ │ ├── qid.js │ │ │ │ ├── runKendraQuery.js │ │ │ │ ├── runLlmQa.js │ │ │ │ ├── safeExpressionEvaluator.js │ │ │ │ ├── updateResWithHit.js │ │ │ │ └── utterance.js │ │ │ ├── getConnectionId.js │ │ │ ├── handlebars.js │ │ │ ├── handler.js │ │ │ ├── hits_topic_tiebreaker.js │ │ │ ├── kendra.js │ │ │ ├── kendraClient.js │ │ │ ├── kendraQuery.js │ │ │ ├── kendraRetrieve.js │ │ │ ├── keywords.js │ │ │ ├── llm.js │ │ │ ├── qid.js │ │ │ ├── query.js │ │ │ ├── redactHelper.js │ │ │ ├── request.js │ │ │ ├── sanitizeOutput.js │ │ │ ├── signS3URL.js │ │ │ ├── supportedLanguages.js │ │ │ ├── translate.js │ │ │ ├── truncate.js │ │ │ └── utterances.js │ │ ├── package.json │ │ └── test/ │ │ ├── applyGuardrail.test.js │ │ ├── bedrockAgents.test.js │ │ ├── bedrockModelConstants.test.js │ │ ├── bedrockModels.test.js │ │ ├── cfn.test.js │ │ ├── dialog-event/ │ │ │ ├── processDialogEvent.fixtures.js │ │ │ ├── processDialogEvent.test.js │ │ │ ├── processSlots.fixtures.js │ │ │ └── processSlots.test.js │ │ ├── embeddings.test.js │ │ ├── es-logging.test.js │ │ ├── es_query.fixtures.js │ │ ├── es_query.test.js │ │ ├── fulfillment-event/ │ │ │ ├── evaluateConditionalChaining.test.js │ │ │ ├── getHit.fixtures.js │ │ │ ├── getHit.test.js │ │ │ ├── mergeNext.test.js │ │ │ ├── processFulfillmentEvent.fixtures.js │ │ │ ├── processFulfillmentEvent.test.js │ │ │ ├── runLlmQa.test.js │ │ │ ├── safeExpressionEvaluator.test.js │ │ │ ├── updateResWithHit.fixtures.js │ │ │ └── updateResWithHit.test.js │ │ ├── getConnectionId.test.js │ │ ├── handlebars.fixtures.js │ │ ├── handlebars.test.js │ │ ├── kendra.fixtures.js │ │ ├── kendra.test.js │ │ ├── kendraQuery.fixtures.js │ │ ├── kendraQuery.test.js │ │ ├── kendraRetrieve.fixtures.js │ │ ├── kendraRetrieve.test.js │ │ ├── keywords.test.js │ │ ├── llm.fixtures.js │ │ ├── llm.test.js │ │ ├── query.test.js │ │ ├── redactHelper.test.js │ │ ├── sanitizeOutput.test.js │ │ ├── signS3Url.test.js │ │ ├── translate.fixtures.js │ │ └── translate.test.js │ ├── export/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── createFAQ.js │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── kendraSync.js │ │ ├── lib/ │ │ │ ├── clean.js │ │ │ ├── join.js │ │ │ ├── load.js │ │ │ ├── start.js │ │ │ └── step.js │ │ ├── package.json │ │ ├── parseJSON.js │ │ └── test/ │ │ ├── createFAQ.test.js │ │ ├── index.fixtures.js │ │ ├── index.test.js │ │ ├── kendraSync.test.js │ │ ├── lib/ │ │ │ ├── clean.test.js │ │ │ ├── join.test.js │ │ │ ├── load.test.js │ │ │ ├── start.test.js │ │ │ └── step.test.js │ │ ├── parseJSON.test.js │ │ └── qna_FAQ.json │ ├── fulfillment/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── middleware/ │ │ │ │ ├── 1_parse.js │ │ │ │ ├── 2_preprocess.js │ │ │ │ ├── 3_query.js │ │ │ │ ├── 4_hook.js │ │ │ │ ├── 5_assemble.js │ │ │ │ ├── 6_cache.js │ │ │ │ ├── 7_userInfo.js │ │ │ │ ├── README.md │ │ │ │ ├── alexa.js │ │ │ │ ├── jwt.js │ │ │ │ ├── lex.js │ │ │ │ ├── lexRouter.js │ │ │ │ ├── multilanguage.js │ │ │ │ ├── sentiment.js │ │ │ │ ├── specialtyBotRouter.js │ │ │ │ └── util.js │ │ │ └── router/ │ │ │ ├── README.md │ │ │ └── index.js │ │ ├── package.json │ │ └── test/ │ │ ├── alexa/ │ │ │ ├── README.md │ │ │ ├── cancel.json │ │ │ ├── end.json │ │ │ ├── intent.json │ │ │ ├── schema.json │ │ │ └── start.json │ │ ├── index.fixtures.js │ │ ├── index.test.js │ │ ├── lex/ │ │ │ ├── README.md │ │ │ ├── index.js │ │ │ └── schema.json │ │ └── lib/ │ │ └── middleware/ │ │ ├── 1_parse.fixtures.js │ │ ├── 1_parse.test.js │ │ ├── 2_preprocess.fixtures.js │ │ ├── 2_preprocess.test.js │ │ ├── 3_query.fixtures.js │ │ ├── 3_query.test.js │ │ ├── 4_hook.test.js │ │ ├── 5_assemble.fixtures.js │ │ ├── 5_assemble.test.js │ │ ├── 6_cache.test.js │ │ ├── 7_userInfo.test.js │ │ ├── __mocks__/ │ │ │ └── esQueryMock.js │ │ ├── alexa.fixtures.js │ │ ├── alexa.test.js │ │ ├── jwt.fixtures.js │ │ ├── jwt.test.js │ │ ├── lex.fixtures.js │ │ ├── lex.test.js │ │ ├── lexRouter.fixtures.js │ │ ├── lexRouter.test.js │ │ ├── multilanguage.fixtures.js │ │ ├── multilanguage.test.js │ │ ├── sentiment.test.js │ │ ├── specialtyBotRouter.fixtures.js │ │ ├── specialtyBotRouter.test.js │ │ ├── util.fixtures.js │ │ └── util.test.js │ ├── genesys/ │ │ ├── Makefile │ │ ├── flowsv2/ │ │ │ └── QnABot-CallFlow.yaml │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── package.json │ │ └── test/ │ │ ├── callflow.fixtures.yaml │ │ └── index.test.js │ ├── import/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── convert-xlsx.js │ │ ├── delete_existing_content.js │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── package.json │ │ └── test/ │ │ ├── convert-xlsx.test.js │ │ ├── delete_existing_content.test.js │ │ ├── import-test.xlsx │ │ ├── index.test.js │ │ └── lib/ │ │ └── __mocks__/ │ │ ├── embeddingsMock.js │ │ └── requestMock.js │ ├── js_lambda_hook_sdk/ │ │ ├── Makefile │ │ ├── jest.config.js │ │ ├── lambda_hook_sdk/ │ │ │ └── hooks.js │ │ ├── package.json │ │ └── test/ │ │ ├── hooks.fixtures.js │ │ └── hooks.test.js │ ├── kendra-webcrawler/ │ │ ├── .coveragerc │ │ ├── Makefile │ │ ├── kendra-dashboard.json │ │ ├── kendra_webcrawler.py │ │ ├── pyproject.toml │ │ ├── pytest.ini │ │ ├── role.txt │ │ └── test/ │ │ ├── conftest.py │ │ └── test_lambda_function.py │ ├── kendra-webcrawler-schedule-updater/ │ │ ├── .coveragerc │ │ ├── Makefile │ │ ├── kendra_webcrawler_schedule_updater.py │ │ ├── pyproject.toml │ │ ├── pytest.ini │ │ └── test/ │ │ ├── conftest.py │ │ └── test_lambda_function.py │ ├── kendra-webcrawler-status/ │ │ ├── .coveragerc │ │ ├── Makefile │ │ ├── kendra_webcrawler_status.py │ │ ├── pyproject.toml │ │ ├── pytest.ini │ │ ├── role.txt │ │ └── test/ │ │ ├── conftest.py │ │ └── test_lambda_function.py │ ├── lex-build/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── README.md │ │ │ ├── index.js │ │ │ ├── lexv2bot.js │ │ │ ├── qidsandquestions.js │ │ │ └── statusv2.js │ │ ├── package.json │ │ └── test/ │ │ └── lib/ │ │ ├── __mocks__/ │ │ │ └── conMock.js │ │ ├── es.fixtures.js │ │ ├── index.test.js │ │ ├── intent.fixtures.js │ │ ├── lexv2bot.test.js │ │ ├── qidsandquestions.test.js │ │ └── statusv2.test.js │ ├── lexv2-build/ │ │ ├── .coveragerc │ │ ├── Makefile │ │ ├── handler.py │ │ ├── pyproject.toml │ │ ├── pytest.ini │ │ └── test/ │ │ ├── conftest.py │ │ └── test_lambda_function.py │ ├── proxy-es/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── package.json │ │ └── resource.js │ ├── q-business-lambda-hook/ │ │ ├── Makefile │ │ └── q_business_lambda_hook.py │ ├── qnabot-common-layer/ │ │ ├── Makefile │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── qnabot/ │ │ │ ├── logging.js │ │ │ └── settings.js │ │ └── test/ │ │ ├── logging.fixtures.js │ │ ├── logging.test.js │ │ ├── settings.fixtures.js │ │ └── settings.test.js │ ├── s3-clean/ │ │ ├── .coveragerc │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── lambda_function.py │ │ ├── pyproject.toml │ │ ├── pytest.ini │ │ └── test/ │ │ ├── conftest.py │ │ └── test_lambda_function.py │ ├── schema/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── qna.js │ │ ├── quiz.js │ │ ├── slottype.js │ │ ├── test/ │ │ │ └── index.test.js │ │ └── text.js │ ├── solution-helper/ │ │ ├── .coveragerc │ │ ├── Makefile │ │ ├── README.md │ │ ├── lambda_function.py │ │ ├── pyproject.toml │ │ ├── pytest.ini │ │ └── test/ │ │ ├── conftest.py │ │ └── test_lambda_function.py │ ├── streaming/ │ │ ├── Makefile │ │ ├── index.js │ │ ├── package.json │ │ └── test/ │ │ └── index.test.js │ ├── test.js │ ├── testall/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── clean.js │ │ │ ├── lex.js │ │ │ ├── load.js │ │ │ ├── start.js │ │ │ └── step.js │ │ ├── package.json │ │ └── test/ │ │ ├── index.fixtures.js │ │ ├── index.test.js │ │ └── lib/ │ │ ├── clean.test.js │ │ ├── lex.fixtures.js │ │ ├── lex.test.js │ │ ├── load.test.js │ │ ├── start.test.js │ │ └── step.test.js │ ├── translate/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── index.js │ │ ├── jest.config.js │ │ ├── package.json │ │ └── test/ │ │ ├── index.test.js │ │ └── translate.fixtures.js │ └── warmer/ │ ├── Makefile │ ├── index.js │ ├── jest.config.js │ ├── lib/ │ │ └── index.js │ ├── package.json │ └── test/ │ ├── index.test.js │ └── lib/ │ └── index.test.js ├── package.json ├── templates/ │ ├── .gitignore │ ├── README.md │ ├── __mocks__/ │ │ └── @smithy/ │ │ └── uuid.js │ ├── __tests__/ │ │ └── setup.js │ ├── dev/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── bucket.test.js.snap │ │ │ │ └── dev.test.js.snap │ │ │ ├── bucket.test.js │ │ │ ├── dev.test.js │ │ │ ├── masterConfig.test.js │ │ │ ├── masterNoConfig.test.js │ │ │ ├── mockConfigEmpty.json │ │ │ ├── mockConfigFull.json │ │ │ └── mockMaster.js │ │ ├── api.js │ │ ├── bootstrap/ │ │ │ ├── README.md │ │ │ ├── __snapshots__/ │ │ │ │ └── index.test.js.snap │ │ │ ├── __tests__/ │ │ │ │ ├── handler.fixtures.js │ │ │ │ └── handler.test.js │ │ │ ├── handler.js │ │ │ ├── index.js │ │ │ └── index.test.js │ │ ├── bucket.js │ │ ├── cognito.js │ │ ├── lambda.js │ │ └── master.js │ ├── examples/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── __snapshots__/ │ │ │ └── index.test.js.snap │ │ ├── examples/ │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── __tests__/ │ │ │ │ └── cfn.test.js │ │ │ ├── cfn.js │ │ │ ├── examples/ │ │ │ │ ├── ClientFilterDemo.json │ │ │ │ ├── ClientFilterDemo.txt │ │ │ │ ├── ConditionalChainingDemo.json │ │ │ │ ├── ConditionalChainingDemo.txt │ │ │ │ ├── ConnectCallback.json │ │ │ │ ├── ConnectCallback.txt │ │ │ │ ├── ConnectWizardQnA.json │ │ │ │ ├── ConnectWizardQnA.txt │ │ │ │ ├── Embeddings.json │ │ │ │ ├── Embeddings.txt │ │ │ │ ├── GenesysWizardQnA.json │ │ │ │ ├── GenesysWizardQnA.txt │ │ │ │ ├── GreetingHook.json │ │ │ │ ├── GreetingHook.txt │ │ │ │ ├── PrairieLineTrailTour.json │ │ │ │ ├── PrairieLineTrailTour.txt │ │ │ │ ├── QnaUtility.json │ │ │ │ ├── QnaUtility.txt │ │ │ │ ├── RecentTopicsDemo.json │ │ │ │ ├── RecentTopicsDemo.txt │ │ │ │ ├── TextPassage-NurseryRhymeExamples.json │ │ │ │ ├── TextPassage-NurseryRhymeExamples.txt │ │ │ │ ├── guided-navigation.json │ │ │ │ ├── guided-navigation.txt │ │ │ │ ├── markdownSSML.json │ │ │ │ ├── markdownSSML.txt │ │ │ │ ├── quiz.json │ │ │ │ ├── quiz.txt │ │ │ │ ├── repromptDemo.json │ │ │ │ ├── repromptDemo.txt │ │ │ │ ├── topic.json │ │ │ │ └── topic.txt │ │ │ ├── index.js │ │ │ ├── js/ │ │ │ │ ├── Quiz.js │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── Quiz.fixtures.js │ │ │ │ │ ├── Quiz.test.js │ │ │ │ │ └── hook.test.js │ │ │ │ ├── hook.js │ │ │ │ └── templates/ │ │ │ │ ├── quiz-response.hbs │ │ │ │ └── quiz-response.md │ │ │ ├── package.json │ │ │ ├── py/ │ │ │ │ ├── BotBroker.py │ │ │ │ ├── ConnectCallback.py │ │ │ │ ├── Feedback.py │ │ │ │ ├── Next.py │ │ │ │ ├── Previous.py │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── conftest.py │ │ │ │ │ ├── test_ConnectCallback.py │ │ │ │ │ ├── test_Feedback.py │ │ │ │ │ ├── test_Next.py │ │ │ │ │ ├── test_Previous.py │ │ │ │ │ └── test_hello.py │ │ │ │ ├── hello.py │ │ │ │ ├── pyproject.toml │ │ │ │ └── pytest.ini │ │ │ └── responsebots-lexv2.js │ │ ├── extensions/ │ │ │ ├── Makefile │ │ │ ├── README.md │ │ │ ├── index.js │ │ │ ├── js_lambda_hooks/ │ │ │ │ ├── CreateRecentTopicsResponse/ │ │ │ │ │ ├── CreateRecentTopicsResponse.js │ │ │ │ │ └── package.json │ │ │ │ └── CustomJSHook/ │ │ │ │ ├── CustomJSHook.js │ │ │ │ ├── __tests__/ │ │ │ │ │ └── CustomJSHook.test.js │ │ │ │ └── package.json │ │ │ ├── py_lambda_hooks/ │ │ │ │ └── CustomPYHook/ │ │ │ │ ├── CustomPYHook.py │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── conftest.py │ │ │ │ │ └── test_CustomPYHook.py │ │ │ │ ├── pyproject.toml │ │ │ │ └── pytest.ini │ │ │ └── ui_imports/ │ │ │ ├── content/ │ │ │ │ ├── CustomHook.json │ │ │ │ ├── CustomHook.txt │ │ │ │ ├── IntentSlotMatching.json │ │ │ │ ├── IntentSlotMatching.txt │ │ │ │ ├── Language.json │ │ │ │ └── Language.txt │ │ │ ├── package.json │ │ │ └── ui_import.js │ │ ├── index.js │ │ ├── index.test.js │ │ └── outputs.js │ ├── export/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── __snapshots__/ │ │ │ └── index.test.js.snap │ │ ├── bucket.js │ │ ├── index.js │ │ ├── index.test.js │ │ ├── outputs.js │ │ └── resources.js │ ├── import/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── UpgradeAutoImport.js │ │ ├── __snapshots__/ │ │ │ └── index.test.js.snap │ │ ├── bucket.js │ │ ├── index.js │ │ ├── index.test.js │ │ ├── outputs.js │ │ └── resources.js │ ├── jest.config.js │ ├── master/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── UpgradeAutoExport.js │ │ ├── __snapshots__/ │ │ │ └── index.test.js.snap │ │ ├── assets.js │ │ ├── bucket.js │ │ ├── cfn/ │ │ │ ├── __tests__/ │ │ │ │ ├── handler.fixtures.js │ │ │ │ └── handler.test.js │ │ │ ├── handler.js │ │ │ └── index.js │ │ ├── cognito/ │ │ │ ├── index.js │ │ │ ├── invite.txt │ │ │ └── style/ │ │ │ ├── README.md │ │ │ ├── client.scss │ │ │ ├── cognito-login.css │ │ │ ├── designer.scss │ │ │ ├── index.html │ │ │ └── index.js │ │ ├── config.js │ │ ├── dashboard/ │ │ │ ├── README.md │ │ │ ├── body.js │ │ │ ├── index.js │ │ │ ├── lambdas.js │ │ │ ├── opensearch.js │ │ │ └── util.js │ │ ├── dynamodb/ │ │ │ └── index.js │ │ ├── examples.js │ │ ├── exportstack.js │ │ ├── importstack.js │ │ ├── index.js │ │ ├── index.test.js │ │ ├── lambda-layers.js │ │ ├── lambda.js │ │ ├── lex/ │ │ │ ├── README.md │ │ │ ├── bot.js │ │ │ ├── config.js │ │ │ ├── fulfillment.js │ │ │ └── index.js │ │ ├── lex-build/ │ │ │ ├── __tests__/ │ │ │ │ ├── poll.test.js │ │ │ │ ├── start.test.js │ │ │ │ └── test.json │ │ │ ├── index.js │ │ │ ├── poll.js │ │ │ └── start.js │ │ ├── lexv2-build/ │ │ │ └── index.js │ │ ├── mappings/ │ │ │ ├── anonymized-data.js │ │ │ └── bedrock-defaults.js │ │ ├── opensearch/ │ │ │ ├── README.md │ │ │ ├── __tests__/ │ │ │ │ ├── handler.fixtures.js │ │ │ │ └── handler.test.js │ │ │ ├── es.js │ │ │ ├── firehose.js │ │ │ ├── handler.js │ │ │ ├── index.js │ │ │ ├── index_mappings.js │ │ │ ├── index_settings.js │ │ │ ├── info.js │ │ │ ├── opensearch-dashboards/ │ │ │ │ ├── QnABotDashboard.json │ │ │ │ └── README.md │ │ │ ├── proxy.js │ │ │ └── updates.js │ │ ├── policies.json │ │ ├── proxy-es.js │ │ ├── proxy-lex/ │ │ │ ├── README.md │ │ │ ├── handler.js │ │ │ ├── index.js │ │ │ ├── status.js │ │ │ └── test.js │ │ ├── roles.json │ │ ├── routes/ │ │ │ ├── README.md │ │ │ ├── bot/ │ │ │ │ ├── alexa.vm │ │ │ │ ├── get.resp.vm │ │ │ │ ├── get.vm │ │ │ │ ├── index.js │ │ │ │ ├── post.resp.vm │ │ │ │ ├── post.vm │ │ │ │ ├── test.js │ │ │ │ └── utterance.get.vm │ │ │ ├── error/ │ │ │ │ ├── error.vm │ │ │ │ └── test.js │ │ │ ├── examples/ │ │ │ │ ├── handler.js │ │ │ │ ├── index.js │ │ │ │ ├── info.vm │ │ │ │ ├── list.vm │ │ │ │ ├── photos.vm │ │ │ │ └── test.js │ │ │ ├── health/ │ │ │ │ ├── health.resp.vm │ │ │ │ ├── health.vm │ │ │ │ ├── index.js │ │ │ │ └── test.js │ │ │ ├── images.js │ │ │ ├── index.js │ │ │ ├── jobs/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── handler.test.js │ │ │ │ ├── export-start.vm │ │ │ │ ├── handler.js │ │ │ │ ├── index.js │ │ │ │ ├── info.vm │ │ │ │ ├── list-export.vm │ │ │ │ ├── list-testall.vm │ │ │ │ ├── list.vm │ │ │ │ ├── test.js │ │ │ │ └── testall-start.vm │ │ │ ├── login.js │ │ │ ├── proxy.js │ │ │ ├── qa/ │ │ │ │ ├── collection/ │ │ │ │ │ ├── delete.resp.vm │ │ │ │ │ └── delete.vm │ │ │ │ ├── index.js │ │ │ │ ├── single/ │ │ │ │ │ ├── delete.resp.vm │ │ │ │ │ ├── delete.vm │ │ │ │ │ ├── get.resp.vm │ │ │ │ │ ├── get.vm │ │ │ │ │ ├── head.resp.vm │ │ │ │ │ ├── head.vm │ │ │ │ │ ├── options.vm │ │ │ │ │ ├── put.resp.vm │ │ │ │ │ └── put.vm │ │ │ │ └── test.js │ │ │ ├── root/ │ │ │ │ ├── index.js │ │ │ │ ├── info.vm │ │ │ │ └── test.js │ │ │ ├── services/ │ │ │ │ ├── index.js │ │ │ │ ├── info.vm │ │ │ │ └── test.js │ │ │ ├── test.js │ │ │ └── util/ │ │ │ ├── context.js │ │ │ ├── lambda.js │ │ │ ├── mock.js │ │ │ ├── options.js │ │ │ ├── redirect.js │ │ │ ├── resource.js │ │ │ └── temp-test.js │ │ ├── s3-clean/ │ │ │ └── index.js │ │ ├── s3.js │ │ ├── schemaLambda.js │ │ ├── settings.js │ │ ├── signup/ │ │ │ ├── README.md │ │ │ ├── __tests__/ │ │ │ │ ├── message.fixtures.js │ │ │ │ ├── message.test.js │ │ │ │ ├── signup.fixtures.js │ │ │ │ └── signup.test.js │ │ │ ├── index.js │ │ │ ├── message.js │ │ │ └── signup.js │ │ ├── solution-helper/ │ │ │ └── index.js │ │ ├── streamingstack.js │ │ ├── tstallstack.js │ │ └── var.js │ ├── package.json │ ├── public/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── expectedResult.js │ │ │ ├── indexConfig.test.js │ │ │ ├── indexNoConfig.test.js │ │ │ ├── mockConfig.json │ │ │ └── mockMaster.js │ │ └── index.js │ ├── public-vpc-support/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── expectedResult.js │ │ │ ├── indexConfig.test.js │ │ │ ├── indexNoConfig.test.js │ │ │ ├── mockConfig.json │ │ │ └── mockMaster.js │ │ └── index.js │ ├── streaming/ │ │ ├── Makefile │ │ ├── index.js │ │ ├── outputs.js │ │ └── resources.js │ ├── testall/ │ │ ├── Makefile │ │ ├── README.md │ │ ├── __snapshots__/ │ │ │ └── index.test.js.snap │ │ ├── bucket.js │ │ ├── index.js │ │ ├── index.test.js │ │ ├── outputs.js │ │ └── resources.js │ └── util.js ├── utility_scripts/ │ ├── README.md │ ├── configureAlerts.py │ ├── configureCMK.py │ ├── count_user_interactions.js │ ├── create_kendra_faq_resources.js │ ├── csv2json_converter/ │ │ ├── CSV2JSON_README.md │ │ ├── css/ │ │ │ └── qnabot_csv2json_converter.css │ │ ├── js/ │ │ │ ├── csvToArray.v2.1.js │ │ │ └── qnabot_csv2json_converter.js │ │ ├── qnabot_csv2json_converter.html │ │ └── sample.csv │ ├── migration.md │ └── validate-conditional-chaining.js └── website/ ├── .babelrc ├── .gitignore ├── Makefile ├── README.md ├── __tests__/ │ ├── admin.spec.js │ ├── admin.test.js │ ├── client.spec.js │ ├── client.test.js │ ├── components/ │ │ ├── alexa/ │ │ │ └── index.spec.js │ │ ├── connect/ │ │ │ └── index.spec.js │ │ ├── customTranslate.spec.js │ │ ├── designer/ │ │ │ ├── add.spec.js │ │ │ ├── addSetting.spec.js │ │ │ ├── alexa.spec.js │ │ │ ├── delete.spec.js │ │ │ ├── display.spec.js │ │ │ ├── edit.spec.js │ │ │ ├── empty.test.js │ │ │ ├── event-bus.test.js │ │ │ ├── index.spec.js │ │ │ ├── input.spec.js │ │ │ ├── menu-questions.spec.js │ │ │ ├── menu-test.spec.js │ │ │ ├── qa.spec.js │ │ │ ├── rebuild.spec.js │ │ │ └── synckendra.spec.js │ │ ├── export.spec.js │ │ ├── genesys/ │ │ │ └── index.spec.js │ │ ├── hooks/ │ │ │ └── index.spec.js │ │ ├── import.spec.js │ │ ├── kendraIndex.spec.js │ │ └── settings.spec.js │ ├── lib/ │ │ ├── client-auth.test.js │ │ ├── index.test.js │ │ ├── router.test.js │ │ └── store/ │ │ ├── api/ │ │ │ └── actions/ │ │ │ ├── connect.test.js │ │ │ ├── export.test.js │ │ │ ├── genesys.test.js │ │ │ ├── import.test.js │ │ │ ├── index.test.js │ │ │ ├── kendraIndex.test.js │ │ │ ├── mockedContext.js │ │ │ ├── settings.test.js │ │ │ ├── testall.test.js │ │ │ └── util.test.js │ │ ├── data/ │ │ │ ├── actions/ │ │ │ │ ├── add.test.js │ │ │ │ ├── delete.test.js │ │ │ │ ├── get.test.js │ │ │ │ ├── up-download.test.js │ │ │ │ └── util.test.js │ │ │ ├── getters.test.js │ │ │ └── mutations.test.js │ │ ├── page/ │ │ │ ├── actions.test.js │ │ │ ├── getters.test.js │ │ │ ├── mutations.test.js │ │ │ └── util.test.js │ │ └── user/ │ │ ├── actions.test.js │ │ ├── getters.test.js │ │ ├── index.test.js │ │ └── mutations.test.js │ ├── resolver.js │ ├── styleMock.js │ └── test.test.js ├── assets/ │ └── zombie.json ├── config/ │ ├── base.config.js │ ├── dev.config.js │ ├── prod.config.js │ ├── test.config.js │ └── webpack.config.js ├── entry.js ├── html/ │ ├── admin.pug │ ├── client.pug │ └── test.ejs ├── js/ │ ├── admin.js │ ├── admin.vue │ ├── browser-check.js │ ├── capability/ │ │ └── util.js │ ├── client.js │ ├── client.vue │ ├── components/ │ │ ├── alexa/ │ │ │ ├── index.vue │ │ │ └── steps.js │ │ ├── connect/ │ │ │ ├── index.vue │ │ │ └── steps.js │ │ ├── customTranslate.vue │ │ ├── designer/ │ │ │ ├── add.vue │ │ │ ├── addSetting.vue │ │ │ ├── alexa.vue │ │ │ ├── delete.vue │ │ │ ├── display.vue │ │ │ ├── edit.vue │ │ │ ├── empty.js │ │ │ ├── event-bus.js │ │ │ ├── index.vue │ │ │ ├── input.vue │ │ │ ├── menu-questions.vue │ │ │ ├── menu-test.vue │ │ │ ├── menu-testall.vue │ │ │ ├── modal.vue │ │ │ ├── qa.vue │ │ │ ├── rebuild.vue │ │ │ └── synckendra.vue │ │ ├── export.vue │ │ ├── genesys/ │ │ │ ├── index.vue │ │ │ └── steps.js │ │ ├── hooks/ │ │ │ ├── codejs.txt │ │ │ ├── codepy.txt │ │ │ ├── example.js │ │ │ ├── index.vue │ │ │ └── steps.js │ │ ├── import.vue │ │ ├── kendraIndex.vue │ │ ├── loading.vue │ │ └── settings.vue │ ├── lib/ │ │ ├── client-auth.js │ │ ├── index.js │ │ ├── router.js │ │ ├── store/ │ │ │ ├── actions.js │ │ │ ├── api/ │ │ │ │ ├── actions/ │ │ │ │ │ ├── connect.js │ │ │ │ │ ├── export.js │ │ │ │ │ ├── genesys.js │ │ │ │ │ ├── import.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── kendraIndex.js │ │ │ │ │ ├── settings.js │ │ │ │ │ ├── testall.js │ │ │ │ │ └── tmp.js │ │ │ │ ├── card-schema.json │ │ │ │ ├── index.js │ │ │ │ └── schema.json │ │ │ ├── data/ │ │ │ │ ├── actions/ │ │ │ │ │ ├── add.js │ │ │ │ │ ├── delete.js │ │ │ │ │ ├── get.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── schema.json │ │ │ │ │ ├── up-download.js │ │ │ │ │ └── util.js │ │ │ │ ├── getters.js │ │ │ │ ├── index.js │ │ │ │ └── mutations.js │ │ │ ├── getters.js │ │ │ ├── index.js │ │ │ ├── mutations.js │ │ │ ├── page/ │ │ │ │ ├── actions.js │ │ │ │ ├── getters.js │ │ │ │ ├── index.js │ │ │ │ ├── mutations.js │ │ │ │ └── util.js │ │ │ └── user/ │ │ │ ├── actions.js │ │ │ ├── getters.js │ │ │ ├── index.js │ │ │ ├── mutations.js │ │ │ └── schema.json │ │ └── validator.js │ └── test.js ├── style/ │ └── app.styl └── styles/ ├── app.css ├── fonts/ │ └── material-icons.css ├── pure-min.css └── vuetify-min.css