@aws/nx-plugin 1.0.0-rc.71 → 1.0.0-rc.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/LICENSE-THIRD-PARTY +210 -730
  2. package/migrations.json +34 -19
  3. package/package.json +4 -4
  4. package/src/agentcore-gateway/__snapshots__/generator.spec.ts.snap +1 -1
  5. package/src/agentcore-harness/generator.d.ts +1 -1
  6. package/src/infra/app/__snapshots__/generator.spec.ts.snap +3 -3
  7. package/src/infra/app/generator.d.ts +1 -1
  8. package/src/init/generator.d.ts +1 -1
  9. package/src/license/config.d.ts +9 -0
  10. package/src/license/config.js +28 -0
  11. package/src/license/config.js.map +1 -1
  12. package/src/license/dependency-check/collectors/collector.js.map +1 -1
  13. package/src/license/dependency-check/evaluator.js +55 -10
  14. package/src/license/dependency-check/evaluator.js.map +1 -1
  15. package/src/license/generator.js +3 -17
  16. package/src/license/generator.js.map +1 -1
  17. package/src/license/known-exceptions.d.ts +0 -1
  18. package/src/license/known-exceptions.js +1 -23
  19. package/src/license/known-exceptions.js.map +1 -1
  20. package/src/migrations/latest/apt-security-updates-in-container-images/__snapshots__/migration.spec.ts.snap +90 -0
  21. package/src/migrations/latest/apt-security-updates-in-container-images/metadata.json +3 -0
  22. package/src/migrations/latest/apt-security-updates-in-container-images/migration.js +90 -0
  23. package/src/migrations/latest/apt-security-updates-in-container-images/migration.js.map +1 -0
  24. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/metadata.json +3 -0
  25. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.d.ts +6 -0
  26. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js +38 -0
  27. package/src/migrations/latest/remove-mcp-inspector-license-exceptions/migration.js.map +1 -0
  28. package/src/migrations/v1.0.0-rc.67/0001-smithy-server-package-rename/migration.js.map +1 -0
  29. package/src/migrations/v1.0.0-rc.68/0001-translate-script-whole-file-writes/migration.js.map +1 -0
  30. package/src/migrations/{latest/py-agent-a2a-lifespan-construction → v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction}/migration.js +14 -2
  31. package/src/migrations/v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction/migration.js.map +1 -0
  32. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.d.ts +6 -0
  33. package/src/migrations/v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call/migration.js.map +1 -0
  34. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/metadata.json +3 -0
  35. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.d.ts +2 -0
  36. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js +308 -0
  37. package/src/migrations/v1.0.0-rc.72/0001-py-agent-session-management-support/migration.js.map +1 -0
  38. package/src/preset/__snapshots__/generator.spec.ts.snap +2 -2
  39. package/src/preset/generator.d.ts +1 -1
  40. package/src/py/agent/__snapshots__/generator.constructs.spec.ts.snap +626 -10
  41. package/src/py/agent/__snapshots__/generator.core.spec.ts.snap +186 -0
  42. package/src/py/agent/__snapshots__/generator.frameworks.spec.ts.snap +55 -11
  43. package/src/py/agent/__snapshots__/generator.protocols.spec.ts.snap +669 -4
  44. package/src/py/agent/a2a-connection/generator.js +5 -11
  45. package/src/py/agent/a2a-connection/generator.js.map +1 -1
  46. package/src/py/agent/files/deploy/Dockerfile.template +7 -0
  47. package/src/py/agent/files/langchain/common/__init__.py.template +0 -0
  48. package/src/py/agent/files/langchain/common/agent.py.template +3 -3
  49. package/src/py/agent/files/langchain/common/session.py.template +61 -0
  50. package/src/py/agent/files/strands/ag-ui/main.py.template +5 -1
  51. package/src/py/agent/files/strands/common/agent.py.template +9 -2
  52. package/src/py/agent/files/strands/common/session.py.template +36 -0
  53. package/src/py/agent/generator.d.ts +11 -1
  54. package/src/py/agent/generator.js +78 -28
  55. package/src/py/agent/generator.js.map +1 -1
  56. package/src/py/agent/mcp-connection/__snapshots__/generator.spec.ts.snap +2 -0
  57. package/src/py/agent/react-connection/generator.d.ts +1 -1
  58. package/src/py/agent/schema.d.js.map +1 -1
  59. package/src/py/agent/schema.d.ts +1 -1
  60. package/src/py/agent/schema.json +3 -3
  61. package/src/py/fast-api/react/generator.d.ts +1 -1
  62. package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +5 -5
  63. package/src/py/mcp-server/files/deploy/Dockerfile.template +7 -0
  64. package/src/py/mcp-server/generator.js +8 -3
  65. package/src/py/mcp-server/generator.js.map +1 -1
  66. package/src/py/rdb/__snapshots__/generator.spec.ts.snap +7 -5
  67. package/src/py/rdb/generator.js +36 -2
  68. package/src/py/rdb/generator.js.map +1 -1
  69. package/src/smithy/project/__snapshots__/generator.spec.ts.snap +14 -14
  70. package/src/smithy/project/generator.d.ts +1 -1
  71. package/src/smithy/react-connection/generator.d.ts +1 -1
  72. package/src/smithy/ts/api/__snapshots__/generator.spec.ts.snap +1 -1
  73. package/src/terraform/project/generator.d.ts +1 -1
  74. package/src/trpc/react/generator.d.ts +1 -1
  75. package/src/ts/agent/__snapshots__/generator.spec.ts.snap +36 -8
  76. package/src/ts/agent/a2a-connection/generator.d.ts +1 -1
  77. package/src/ts/agent/a2a-connection/generator.js +4 -2
  78. package/src/ts/agent/a2a-connection/generator.js.map +1 -1
  79. package/src/ts/agent/files/deploy/Dockerfile.template +7 -0
  80. package/src/ts/agent/gateway-connection/generator.d.ts +1 -1
  81. package/src/ts/agent/mcp-connection/generator.d.ts +1 -1
  82. package/src/ts/agent/react-connection/generator.d.ts +1 -1
  83. package/src/ts/astro-docs/generator.d.ts +1 -1
  84. package/src/ts/dcr-proxy/generator.d.ts +1 -1
  85. package/src/ts/dynamodb/generator.d.ts +1 -1
  86. package/src/ts/lambda-function/generator.d.ts +1 -1
  87. package/src/ts/lib/generator.d.ts +1 -1
  88. package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +2 -2
  89. package/src/ts/mcp-server/files/Dockerfile.template +7 -0
  90. package/src/ts/mcp-server/generator.js +8 -3
  91. package/src/ts/mcp-server/generator.js.map +1 -1
  92. package/src/ts/nx-generator/generator.d.ts +1 -1
  93. package/src/ts/nx-migration/generator.d.ts +1 -1
  94. package/src/ts/nx-plugin/generator.d.ts +1 -1
  95. package/src/ts/rdb/__snapshots__/generator.spec.ts.snap +8 -6
  96. package/src/ts/rdb/generator.d.ts +1 -1
  97. package/src/ts/rdb/generator.js +29 -2
  98. package/src/ts/rdb/generator.js.map +1 -1
  99. package/src/ts/react-website/agui/generator.d.ts +1 -1
  100. package/src/ts/react-website/app/__snapshots__/generator.spec.ts.snap +15 -15
  101. package/src/ts/react-website/app/generator.js +4 -2
  102. package/src/ts/react-website/app/generator.js.map +1 -1
  103. package/src/ts/react-website/cognito-auth/__snapshots__/generator.terraform.spec.ts.snap +1 -1
  104. package/src/utils/agent-connection/agent-connection.d.ts +10 -0
  105. package/src/utils/agent-connection/agent-connection.js +20 -9
  106. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  107. package/src/utils/agent-connection/files/core-runtime-config/runtime-config.ts.template +5 -3
  108. package/src/utils/agent-connection/files/py-core-langchain/s3/s3_checkpoint_saver_langchain.py.template +360 -0
  109. package/src/utils/agent-connection/files/py-core-runtime-config/runtime_config.py.template +2 -4
  110. package/src/utils/agent-connection/files/py-core-strands/base/tool_errors_strands.py.template +24 -0
  111. package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +1 -1
  112. package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
  113. package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +113 -13
  114. package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +76 -7
  115. package/src/utils/ast.d.ts +29 -0
  116. package/src/utils/ast.js +31 -0
  117. package/src/utils/ast.js.map +1 -1
  118. package/src/utils/metrics.js +2 -2
  119. package/src/utils/metrics.js.map +1 -1
  120. package/src/utils/versions.d.ts +75 -72
  121. package/src/utils/versions.js +72 -69
  122. package/src/utils/versions.js.map +1 -1
  123. package/src/migrations/latest/py-agent-a2a-httpx-client-per-call/migration.js.map +0 -1
  124. package/src/migrations/latest/py-agent-a2a-lifespan-construction/migration.js.map +0 -1
  125. package/src/migrations/latest/smithy-server-package-rename/migration.js.map +0 -1
  126. package/src/migrations/latest/translate-script-whole-file-writes/migration.js.map +0 -1
  127. package/src/py/rdb/files/__name__/__init__.py.template +0 -3
  128. package/src/py/rdb/files/config.json.template +0 -14
  129. package/src/ts/rdb/files/config.json.template +0 -14
  130. package/src/ts/rdb/files/src/index.ts.template +0 -1
  131. /package/src/migrations/latest/{py-agent-a2a-httpx-client-per-call → apt-security-updates-in-container-images}/migration.d.ts +0 -0
  132. /package/src/migrations/{latest/smithy-server-package-rename → v1.0.0-rc.67/0001-smithy-server-package-rename}/metadata.json +0 -0
  133. /package/src/migrations/{latest/py-agent-a2a-lifespan-construction → v1.0.0-rc.67/0001-smithy-server-package-rename}/migration.d.ts +0 -0
  134. /package/src/migrations/{latest/smithy-server-package-rename → v1.0.0-rc.67/0001-smithy-server-package-rename}/migration.js +0 -0
  135. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/build-system-prompt.ts.fixture +0 -0
  136. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/build-user-prompt.ts.fixture +0 -0
  137. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/config-path.ts.fixture +0 -0
  138. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/file-to-translate.ts.fixture +0 -0
  139. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/get-files-to-translate.ts.fixture +0 -0
  140. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/header.ts.fixture +0 -0
  141. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/log.ts.fixture +0 -0
  142. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/main-call.ts.fixture +0 -0
  143. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/main.ts.fixture +0 -0
  144. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/project-root.ts.fixture +0 -0
  145. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/run-with-concurrency.ts.fixture +0 -0
  146. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/scripts-dir.ts.fixture +0 -0
  147. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/files/translate-file-for-language.ts.fixture +0 -0
  148. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/already-migrated.grit +0 -0
  149. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/build-system-prompt.grit +0 -0
  150. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/build-user-prompt.grit +0 -0
  151. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/config-path.grit +0 -0
  152. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/file-to-translate.grit +0 -0
  153. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/get-files-to-translate.grit +0 -0
  154. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/log.grit +0 -0
  155. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/main-call.grit +0 -0
  156. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/main.grit +0 -0
  157. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/project-root.grit +0 -0
  158. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/run-with-concurrency.grit +0 -0
  159. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/grit/translate-file-for-language.grit +0 -0
  160. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/metadata.json +0 -0
  161. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/migration.d.ts +0 -0
  162. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/migration.js +0 -0
  163. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/test-fixtures/released-script-first.ts.fixture +0 -0
  164. /package/src/migrations/{latest/translate-script-whole-file-writes → v1.0.0-rc.68/0001-translate-script-whole-file-writes}/test-fixtures/released-script.ts.fixture +0 -0
  165. /package/src/migrations/{latest/py-agent-a2a-lifespan-construction → v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction}/metadata.json +0 -0
  166. /package/src/migrations/{latest/smithy-server-package-rename → v1.0.0-rc.70/0001-py-agent-a2a-lifespan-construction}/migration.d.ts +0 -0
  167. /package/src/migrations/{latest/py-agent-a2a-httpx-client-per-call → v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call}/metadata.json +0 -0
  168. /package/src/migrations/{latest/py-agent-a2a-httpx-client-per-call → v1.0.0-rc.71/0001-py-agent-a2a-httpx-client-per-call}/migration.js +0 -0
@@ -0,0 +1,186 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`py#agent generator > should generate session.py returning InMemorySaver for the langchain framework > session.py (in-memory) 1`] = `
4
+ "import os
5
+
6
+ import aiosqlite
7
+ from langgraph.checkpoint.base import BaseCheckpointSaver
8
+ from langgraph.checkpoint.memory import InMemorySaver
9
+ from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
10
+
11
+
12
+ def get_checkpointer() -> BaseCheckpointSaver:
13
+ """Returns a LangGraph checkpointer for persisting conversation state across
14
+ invocations. Local development always uses a local SQLite database for
15
+ convenience, regardless of the configured session option.
16
+ """
17
+ if os.environ.get("LOCAL_DEV") == "true":
18
+ os.makedirs("../../tmp/agents/langchain/test-project-agent", exist_ok=True)
19
+ conn = aiosqlite.connect(
20
+ os.path.join(
21
+ "../../tmp/agents/langchain/test-project-agent", "checkpoints.sqlite"
22
+ )
23
+ )
24
+ return AsyncSqliteSaver(conn)
25
+
26
+ return InMemorySaver()
27
+ "
28
+ `;
29
+
30
+ exports[`py#agent generator > should generate session.py returning None when session is in-memory > session.py (in-memory) 1`] = `
31
+ "import os
32
+
33
+ from proj_agent_connection import get_current_session_id
34
+ from strands.session import FileSessionManager, SessionManager
35
+
36
+
37
+ def get_session_manager() -> SessionManager | None:
38
+ """Returns a SessionManager for persisting conversation state across
39
+ invocations. Local development always uses local file storage for
40
+ convenience, regardless of the configured session option. Without a
41
+ configured session option, conversation state is kept in memory only and
42
+ does not survive process restarts.
43
+ """
44
+ session_id = get_current_session_id()
45
+ if not session_id:
46
+ raise RuntimeError(
47
+ "No current session id — cannot resolve a SessionManager outside of a request scope."
48
+ )
49
+ if os.environ.get("LOCAL_DEV") == "true":
50
+ return FileSessionManager(
51
+ session_id=session_id,
52
+ storage_dir="../../tmp/agents/strands/test-project-agent",
53
+ )
54
+
55
+ return None
56
+ "
57
+ `;
58
+
59
+ exports[`py#agent generator > should generate session.py using DynamoDBSaver when session is dynamodb-s3 > session.py (dynamodb-s3) 1`] = `
60
+ "import os
61
+
62
+ import aiosqlite
63
+ from langgraph.checkpoint.base import BaseCheckpointSaver
64
+ from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
65
+ from langgraph_checkpoint_aws import DynamoDBSaver
66
+ from proj_agent_connection.core.runtime_config import get_agentcore_runtime_config
67
+
68
+
69
+ def get_checkpointer() -> BaseCheckpointSaver:
70
+ """Returns a LangGraph checkpointer for persisting conversation state across
71
+ invocations. Local development always uses a local SQLite database for
72
+ convenience, regardless of the configured session option.
73
+ """
74
+ if os.environ.get("LOCAL_DEV") == "true":
75
+ os.makedirs("../../tmp/agents/langchain/test-project-agent", exist_ok=True)
76
+ conn = aiosqlite.connect(
77
+ os.path.join(
78
+ "../../tmp/agents/langchain/test-project-agent", "checkpoints.sqlite"
79
+ )
80
+ )
81
+ return AsyncSqliteSaver(conn)
82
+
83
+ config = get_agentcore_runtime_config()
84
+ session_config = (
85
+ (config.get("agentRuntimes") or {})
86
+ .get("TestProjectAgent", {})
87
+ .get("session", {})
88
+ )
89
+ table_name = session_config.get("tableName")
90
+ bucket_name = session_config.get("bucketName")
91
+ if not table_name or not bucket_name:
92
+ raise RuntimeError(
93
+ "No DynamoDB checkpoint table or S3 offload bucket configured for this agent in runtime configuration."
94
+ )
95
+ return DynamoDBSaver(
96
+ table_name=table_name,
97
+ region_name=os.environ.get("AWS_REGION"),
98
+ s3_offload_config={"bucket_name": bucket_name},
99
+ )
100
+ "
101
+ `;
102
+
103
+ exports[`py#agent generator > should generate session.py using S3 storage by default for the strands framework > session.py (s3) 1`] = `
104
+ "import os
105
+
106
+ from proj_agent_connection import get_current_session_id
107
+ from proj_agent_connection.core.runtime_config import get_agentcore_runtime_config
108
+ from strands.session import FileSessionManager, S3SessionManager, SessionManager
109
+
110
+
111
+ def get_session_manager() -> SessionManager | None:
112
+ """Returns a SessionManager for persisting conversation state across
113
+ invocations. Local development always uses local file storage for
114
+ convenience, regardless of the configured session option. Without a
115
+ configured session option, conversation state is kept in memory only and
116
+ does not survive process restarts.
117
+ """
118
+ session_id = get_current_session_id()
119
+ if not session_id:
120
+ raise RuntimeError(
121
+ "No current session id — cannot resolve a SessionManager outside of a request scope."
122
+ )
123
+ if os.environ.get("LOCAL_DEV") == "true":
124
+ return FileSessionManager(
125
+ session_id=session_id,
126
+ storage_dir="../../tmp/agents/strands/test-project-agent",
127
+ )
128
+
129
+ config = get_agentcore_runtime_config()
130
+ bucket_name = (
131
+ (config.get("agentRuntimes") or {})
132
+ .get("TestProjectAgent", {})
133
+ .get("session", {})
134
+ .get("bucketName")
135
+ )
136
+ if not bucket_name:
137
+ raise RuntimeError(
138
+ "No S3 bucket configured for this agent's session in runtime configuration."
139
+ )
140
+ return S3SessionManager(session_id=session_id, bucket=bucket_name)
141
+ "
142
+ `;
143
+
144
+ exports[`py#agent generator > should generate session.py using S3CheckpointSaver when session is s3 > session.py (s3) 1`] = `
145
+ "import os
146
+
147
+ import aiosqlite
148
+ import boto3
149
+ from langgraph.checkpoint.base import BaseCheckpointSaver
150
+ from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
151
+ from proj_agent_connection.core.runtime_config import get_agentcore_runtime_config
152
+ from proj_agent_connection.core.s3_checkpoint_saver_langchain import S3CheckpointSaver
153
+
154
+
155
+ def get_checkpointer() -> BaseCheckpointSaver:
156
+ """Returns a LangGraph checkpointer for persisting conversation state across
157
+ invocations. Local development always uses a local SQLite database for
158
+ convenience, regardless of the configured session option.
159
+ """
160
+ if os.environ.get("LOCAL_DEV") == "true":
161
+ os.makedirs("../../tmp/agents/langchain/test-project-agent", exist_ok=True)
162
+ conn = aiosqlite.connect(
163
+ os.path.join(
164
+ "../../tmp/agents/langchain/test-project-agent", "checkpoints.sqlite"
165
+ )
166
+ )
167
+ return AsyncSqliteSaver(conn)
168
+
169
+ config = get_agentcore_runtime_config()
170
+ session_config = (
171
+ (config.get("agentRuntimes") or {})
172
+ .get("TestProjectAgent", {})
173
+ .get("session", {})
174
+ )
175
+ bucket_name = session_config.get("bucketName")
176
+ if not bucket_name:
177
+ raise RuntimeError(
178
+ "No S3 checkpoint bucket configured for this agent in runtime configuration."
179
+ )
180
+ return S3CheckpointSaver(
181
+ bucket_name=bucket_name,
182
+ prefix="checkpoints/",
183
+ s3_client=boto3.client("s3"),
184
+ )
185
+ "
186
+ `;
@@ -577,7 +577,8 @@ exports[`py#agent generator > langchain framework > should match snapshot for la
577
577
  from langchain.agents import create_agent
578
578
  from langchain_aws import ChatBedrockConverse
579
579
  from langchain_core.tools import tool
580
- from langgraph.checkpoint.memory import InMemorySaver
580
+
581
+ from .session import get_checkpointer
581
582
 
582
583
  REGION = os.environ.get("AWS_REGION", "us-east-1")
583
584
  MODEL_ID = os.environ.get("MODEL_ID", "global.anthropic.claude-haiku-4-5-20251001-v1:0")
@@ -591,7 +592,6 @@ def subtract(a: int, b: int) -> int:
591
592
 
592
593
  def get_agent():
593
594
  model = ChatBedrockConverse(model=MODEL_ID, region_name=REGION)
594
- # Swap InMemorySaver for a durable checkpointer in a multi-replica deployment.
595
595
  return create_agent(
596
596
  model=model,
597
597
  tools=[subtract],
@@ -600,7 +600,7 @@ You are a mathematical wizard.
600
600
  Use your tools for mathematical tasks.
601
601
  Refer to tools as your 'spellbook'.
602
602
  """,
603
- checkpointer=InMemorySaver(),
603
+ checkpointer=get_checkpointer(),
604
604
  )
605
605
  "
606
606
  `;
@@ -712,18 +712,20 @@ name = "proj.test_project"
712
712
  version = "0.1.0"
713
713
  dependencies = [
714
714
  "proj-agent-connection",
715
- "aws-lambda-powertools==3.31.1",
715
+ "aws-lambda-powertools==3.34.0",
716
716
  "aws-opentelemetry-distro==0.19.0",
717
717
  "bedrock-agentcore==1.21.0",
718
- "boto3==1.43.67",
718
+ "boto3==1.43.72",
719
719
  "fastapi==0.141.1",
720
720
  "mcp==1.28.1",
721
- "langchain==1.3.14",
722
- "langchain-aws==1.7.0",
723
- "langgraph==1.2.10",
724
- "ag-ui-protocol==0.1.19",
725
- "ag-ui-langgraph==0.0.42",
726
- "uvicorn==0.52.1"
721
+ "langchain==1.3.15",
722
+ "langchain-aws==1.7.1",
723
+ "langgraph==1.2.11",
724
+ "langgraph-checkpoint-sqlite==3.1.1",
725
+ "aiosqlite==0.22.1",
726
+ "ag-ui-protocol==0.1.20",
727
+ "ag-ui-langgraph==0.0.43",
728
+ "uvicorn==0.52.3"
727
729
  ]
728
730
 
729
731
  [dependency-groups]
@@ -736,3 +738,45 @@ dev-dependencies = [ ]
736
738
  workspace = true
737
739
  "
738
740
  `;
741
+
742
+ exports[`py#agent generator > langchain framework > should match snapshot for langchain generated files > langchain-session.py 1`] = `
743
+ "import os
744
+
745
+ import aiosqlite
746
+ import boto3
747
+ from langgraph.checkpoint.base import BaseCheckpointSaver
748
+ from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
749
+ from proj_agent_connection.core.runtime_config import get_agentcore_runtime_config
750
+ from proj_agent_connection.core.s3_checkpoint_saver_langchain import S3CheckpointSaver
751
+
752
+
753
+ def get_checkpointer() -> BaseCheckpointSaver:
754
+ """Returns a LangGraph checkpointer for persisting conversation state across
755
+ invocations. Local development always uses a local SQLite database for
756
+ convenience, regardless of the configured session option.
757
+ """
758
+ if os.environ.get("LOCAL_DEV") == "true":
759
+ os.makedirs("../../tmp/agents/langchain/snapshot-agent", exist_ok=True)
760
+ conn = aiosqlite.connect(
761
+ os.path.join(
762
+ "../../tmp/agents/langchain/snapshot-agent", "checkpoints.sqlite"
763
+ )
764
+ )
765
+ return AsyncSqliteSaver(conn)
766
+
767
+ config = get_agentcore_runtime_config()
768
+ session_config = (
769
+ (config.get("agentRuntimes") or {}).get("SnapshotAgent", {}).get("session", {})
770
+ )
771
+ bucket_name = session_config.get("bucketName")
772
+ if not bucket_name:
773
+ raise RuntimeError(
774
+ "No S3 checkpoint bucket configured for this agent in runtime configuration."
775
+ )
776
+ return S3CheckpointSaver(
777
+ bucket_name=bucket_name,
778
+ prefix="checkpoints/",
779
+ s3_client=boto3.client("s3"),
780
+ )
781
+ "
782
+ `;