thinkwork-cli 0.13.1 → 0.13.2

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 (130) hide show
  1. package/dist/{api-client-4DZ266J5.js → api-client-JYZXYQJR.js} +3 -1
  2. package/dist/bowser-6Z6JFAIR.js +2822 -0
  3. package/dist/chunk-DV3MRBR5.js +43 -0
  4. package/dist/chunk-DVPBI5HM.js +1728 -0
  5. package/dist/chunk-EI5ZX7CN.js +522 -0
  6. package/dist/chunk-EUJ7X6YD.js +126 -0
  7. package/dist/chunk-GG5WKBOX.js +436 -0
  8. package/dist/chunk-I64EZSU5.js +358 -0
  9. package/dist/chunk-ILZKG5WV.js +6151 -0
  10. package/dist/chunk-KMIJ5KGT.js +128 -0
  11. package/dist/chunk-OCPHU34C.js +996 -0
  12. package/dist/chunk-QOERT44A.js +3286 -0
  13. package/dist/chunk-XYM7PE2A.js +2264 -0
  14. package/dist/{chunk-Y2WHJECR.js → chunk-Z2F6RJFR.js} +1 -39
  15. package/dist/cli.js +43080 -13150
  16. package/dist/dist-es-CRV46D5B.js +315 -0
  17. package/dist/dist-es-DCY4IC3Y.js +2000 -0
  18. package/dist/dist-es-ENBUC3JP.js +14726 -0
  19. package/dist/dist-es-G54LBMRN.js +48 -0
  20. package/dist/dist-es-G7PTG75M.js +176 -0
  21. package/dist/dist-es-GKDBE7E6.js +88 -0
  22. package/dist/dist-es-HY3535OI.js +70 -0
  23. package/dist/dist-es-KL7Y5NB2.js +377 -0
  24. package/dist/dist-es-LDE437AM.js +170 -0
  25. package/dist/dist-es-P26FWFLT.js +485 -0
  26. package/dist/dist-es-Q57SZXZ7.js +70 -0
  27. package/dist/dist-es-R7FGL2IB.js +88 -0
  28. package/dist/dist-es-USORBXZ5.js +318 -0
  29. package/dist/dist-es-ZKC2QKD2.js +377 -0
  30. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +2 -1
  31. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +1 -0
  32. package/dist/drizzle/0090_brain_schema_extraction.sql +10 -0
  33. package/dist/drizzle/0132_drop_computer_tables.sql +3 -0
  34. package/dist/drizzle/0160_compliance_event_types_plugins.sql +2 -0
  35. package/dist/drizzle/0214_think137_drop_judge_evidence_roi.sql +1 -0
  36. package/dist/drizzle/0216_drop_agent_loop_versions_goal_worker_policy.sql +1 -0
  37. package/dist/drizzle/0227_analyst_reader_role.sql +6 -0
  38. package/dist/drizzle/0230_analyst_rls.sql +9 -0
  39. package/dist/drizzle/0250_kg_schema_extraction.sql +27 -0
  40. package/dist/drizzle/0251_brain_stragglers.sql +21 -0
  41. package/dist/drizzle/0253_drop_brain_substrate.sql +2 -0
  42. package/dist/drizzle/0257_agents_runtime_allow_harness.sql +24 -0
  43. package/dist/drizzle/0261_managed_harness_multiplayer.sql +313 -0
  44. package/dist/drizzle/0261_native_auth_control_plane.sql +328 -0
  45. package/dist/drizzle/0262_auth_subscription_tickets.sql +59 -0
  46. package/dist/drizzle/0262_parallel_harness_threads.sql +9 -0
  47. package/dist/drizzle/0263_agentcore_runtime_identifier.sql +69 -0
  48. package/dist/drizzle/0263_drop_workos_auth_runtime.sql +236 -0
  49. package/dist/drizzle/0264_auth_enrollment_attempt_limits.sql +15 -0
  50. package/dist/drizzle/0264_harness_tool_execution_ledger.sql +113 -0
  51. package/dist/drizzle/0265_eval_runs_requester_identity.sql +28 -0
  52. package/dist/drizzle/0265_require_fully_valid_auth_publication.sql +27 -0
  53. package/dist/drizzle/0266_auth_identity_recovery_grants.sql +9 -0
  54. package/dist/drizzle/0266_eval_profiles_runtime_type.sql +12 -0
  55. package/dist/drizzle/0267_ontology_candidate_rejections.sql +53 -0
  56. package/dist/drizzle/0268_identity_crosswalk_routing.sql +182 -0
  57. package/dist/drizzle/0269_ontology_system_map.sql +31 -0
  58. package/dist/event-streams-7JNLJEEL.js +894 -0
  59. package/dist/event-streams-KDF5RWR6.js +1515 -0
  60. package/dist/loadSso-DJVB7BXE.js +576 -0
  61. package/dist/loadSso-JAMNA3WY.js +583 -0
  62. package/dist/plugins/catalog/package.json +1 -2
  63. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +0 -1
  64. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +0 -69
  65. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +0 -2
  66. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -5
  67. package/dist/plugins/catalog/src/contracts.ts +2 -179
  68. package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -6
  69. package/dist/signin-UGDWTGS4.js +821 -0
  70. package/dist/sso-oidc-Q4VXANXY.js +837 -0
  71. package/dist/sts-CWLSE3GH.js +1241 -0
  72. package/dist/sts-DNZLNVOV.js +1245 -0
  73. package/dist/terraform/examples/greenfield/main.tf +223 -66
  74. package/dist/terraform/examples/greenfield/terraform.tfvars.example +15 -1
  75. package/dist/terraform/modules/app/agentcore-gateway/main.tf +305 -0
  76. package/dist/terraform/modules/app/agentcore-gateway/outputs.tf +44 -0
  77. package/dist/terraform/modules/app/agentcore-gateway/scripts/delete_gateway.sh +93 -0
  78. package/dist/terraform/modules/app/agentcore-gateway/scripts/read_gateway.sh +33 -0
  79. package/dist/terraform/modules/app/agentcore-gateway/scripts/reconcile_gateway.sh +543 -0
  80. package/dist/terraform/modules/app/agentcore-gateway/variables.tf +70 -0
  81. package/dist/terraform/modules/app/agentcore-harness/main.tf +237 -8
  82. package/dist/terraform/modules/app/agentcore-harness/outputs.tf +63 -0
  83. package/dist/terraform/modules/app/agentcore-harness/scripts/delete_harness.sh +5 -0
  84. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-lifecycle.mjs +430 -0
  85. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-readback.mjs +180 -0
  86. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-tool-contract.mjs +193 -0
  87. package/dist/terraform/modules/app/agentcore-harness/scripts/prune_harness.sh +5 -0
  88. package/dist/terraform/modules/app/agentcore-harness/scripts/read_harness.sh +5 -0
  89. package/dist/terraform/modules/app/agentcore-harness/scripts/reconcile_harness.sh +5 -0
  90. package/dist/terraform/modules/app/agentcore-harness/variables.tf +72 -1
  91. package/dist/terraform/modules/app/agentcore-identity/main.tf +173 -0
  92. package/dist/terraform/modules/app/agentcore-identity/outputs.tf +51 -0
  93. package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +122 -0
  94. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +25 -0
  95. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_twenty_identity.sh +16 -0
  96. package/dist/terraform/modules/app/agentcore-identity/scripts/read_identity.sh +40 -0
  97. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_identity.sh +73 -0
  98. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +74 -0
  99. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +61 -0
  100. package/dist/terraform/modules/app/agentcore-identity/variables.tf +54 -0
  101. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +127 -21
  102. package/dist/terraform/modules/app/appsync-subscriptions/outputs.tf +0 -6
  103. package/dist/terraform/modules/app/appsync-subscriptions/variables.tf +5 -0
  104. package/dist/terraform/modules/app/deployment-control-plane/runner.py +966 -27
  105. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +581 -22
  106. package/dist/terraform/modules/app/lambda-api/agentcore-harness-alarms.tf +88 -0
  107. package/dist/terraform/modules/app/lambda-api/agentcore-identity-alarms.tf +91 -0
  108. package/dist/terraform/modules/app/lambda-api/handlers.tf +298 -74
  109. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +99 -54
  110. package/dist/terraform/modules/app/lambda-api/main.tf +24 -0
  111. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +181 -4
  112. package/dist/terraform/modules/app/lambda-api/outputs.tf +35 -0
  113. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +3 -21
  114. package/dist/terraform/modules/app/lambda-api/variables.tf +109 -16
  115. package/dist/terraform/modules/foundation/cognito/main.tf +294 -72
  116. package/dist/terraform/modules/foundation/cognito/outputs.tf +42 -0
  117. package/dist/terraform/modules/foundation/cognito/variables.tf +114 -4
  118. package/dist/terraform/modules/thinkwork/main.tf +269 -46
  119. package/dist/terraform/modules/thinkwork/outputs.tf +136 -8
  120. package/dist/terraform/modules/thinkwork/variables.tf +124 -17
  121. package/dist/terraform/schema.graphql +69 -36
  122. package/dist/workspace-defaults/files/USER.md +1 -0
  123. package/package.json +3 -2
  124. package/dist/drizzle/0261_thread_turns_origin_turn_index.sql +0 -11
  125. package/dist/plugins/workos-auth/package.json +0 -22
  126. package/dist/plugins/workos-auth/src/index.ts +0 -30
  127. package/dist/plugins/workos-auth/src/manifest.ts +0 -40
  128. package/dist/plugins/workos-auth/src/provider-contract.ts +0 -39
  129. package/dist/plugins/workos-auth/test/manifest.test.ts +0 -94
  130. package/dist/plugins/workos-auth/tsconfig.json +0 -8
@@ -0,0 +1,377 @@
1
+ import { createRequire as __createRequire } from "node:module"; const require = __createRequire(import.meta.url);
2
+ import {
3
+ CredentialsProviderError,
4
+ ProviderError,
5
+ loadConfig,
6
+ parseUrl
7
+ } from "./chunk-XYM7PE2A.js";
8
+ import "./chunk-OCPHU34C.js";
9
+ import "./chunk-DV3MRBR5.js";
10
+
11
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/ImdsCredentials.js
12
+ var isImdsCredentials = (arg) => Boolean(arg) && typeof arg === "object" && typeof arg.AccessKeyId === "string" && typeof arg.SecretAccessKey === "string" && typeof arg.Token === "string" && typeof arg.Expiration === "string";
13
+ var fromImdsCredentials = (creds) => ({
14
+ accessKeyId: creds.AccessKeyId,
15
+ secretAccessKey: creds.SecretAccessKey,
16
+ sessionToken: creds.Token,
17
+ expiration: new Date(creds.Expiration),
18
+ ...creds.AccountId && { accountId: creds.AccountId }
19
+ });
20
+
21
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/RemoteProviderInit.js
22
+ var DEFAULT_TIMEOUT = 1e3;
23
+ var DEFAULT_MAX_RETRIES = 0;
24
+ var providerConfigFromInit = ({ maxRetries = DEFAULT_MAX_RETRIES, timeout = DEFAULT_TIMEOUT }) => ({ maxRetries, timeout });
25
+
26
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/node-http.js
27
+ import node_http from "http";
28
+
29
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/httpRequest.js
30
+ function httpRequest(options) {
31
+ return new Promise((resolve, reject) => {
32
+ const req = node_http.request({
33
+ method: "GET",
34
+ ...options,
35
+ hostname: options.hostname?.replace(/^\[(.+)\]$/, "$1")
36
+ });
37
+ req.on("error", (err) => {
38
+ reject(Object.assign(new ProviderError("Unable to connect to instance metadata service"), err));
39
+ req.destroy();
40
+ });
41
+ req.on("timeout", () => {
42
+ reject(new ProviderError("TimeoutError from instance metadata service"));
43
+ req.destroy();
44
+ });
45
+ req.on("response", (res) => {
46
+ const { statusCode = 400 } = res;
47
+ if (statusCode < 200 || 300 <= statusCode) {
48
+ reject(Object.assign(new ProviderError("Error response received from instance metadata service"), { statusCode }));
49
+ req.destroy();
50
+ }
51
+ const chunks = [];
52
+ res.on("data", (chunk) => {
53
+ chunks.push(chunk);
54
+ });
55
+ res.on("end", () => {
56
+ resolve(Buffer.concat(chunks));
57
+ req.destroy();
58
+ });
59
+ });
60
+ req.end();
61
+ });
62
+ }
63
+
64
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/remoteProvider/retry.js
65
+ var retry = (toRetry, maxRetries) => {
66
+ let promise = toRetry();
67
+ for (let i = 0; i < maxRetries; i++) {
68
+ promise = promise.catch(toRetry);
69
+ }
70
+ return promise;
71
+ };
72
+
73
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/fromContainerMetadata.js
74
+ var ENV_CMDS_FULL_URI = "AWS_CONTAINER_CREDENTIALS_FULL_URI";
75
+ var ENV_CMDS_RELATIVE_URI = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI";
76
+ var ENV_CMDS_AUTH_TOKEN = "AWS_CONTAINER_AUTHORIZATION_TOKEN";
77
+ var fromContainerMetadata = (init = {}) => {
78
+ const { timeout, maxRetries } = providerConfigFromInit(init);
79
+ return () => retry(async () => {
80
+ const requestOptions = await getCmdsUri({ logger: init.logger });
81
+ const credsResponse = JSON.parse(await requestFromEcsImds(timeout, requestOptions));
82
+ if (!isImdsCredentials(credsResponse)) {
83
+ throw new CredentialsProviderError("Invalid response received from instance metadata service.", {
84
+ logger: init.logger
85
+ });
86
+ }
87
+ return fromImdsCredentials(credsResponse);
88
+ }, maxRetries);
89
+ };
90
+ var requestFromEcsImds = async (timeout, options) => {
91
+ if (process.env[ENV_CMDS_AUTH_TOKEN]) {
92
+ options.headers = {
93
+ ...options.headers,
94
+ Authorization: process.env[ENV_CMDS_AUTH_TOKEN]
95
+ };
96
+ }
97
+ const buffer = await httpRequest({
98
+ ...options,
99
+ timeout
100
+ });
101
+ return buffer.toString();
102
+ };
103
+ var CMDS_IP = "169.254.170.2";
104
+ var GREENGRASS_HOSTS = /* @__PURE__ */ new Set(["localhost", "127.0.0.1"]);
105
+ var GREENGRASS_PROTOCOLS = /* @__PURE__ */ new Set(["http:", "https:"]);
106
+ var getCmdsUri = async ({ logger }) => {
107
+ if (process.env[ENV_CMDS_RELATIVE_URI]) {
108
+ return {
109
+ hostname: CMDS_IP,
110
+ path: process.env[ENV_CMDS_RELATIVE_URI]
111
+ };
112
+ }
113
+ if (process.env[ENV_CMDS_FULL_URI]) {
114
+ let parsed;
115
+ try {
116
+ parsed = new URL(process.env[ENV_CMDS_FULL_URI]);
117
+ } catch {
118
+ throw new CredentialsProviderError(`${process.env[ENV_CMDS_FULL_URI]} is not a valid container metadata service URL`, { tryNextLink: false, logger });
119
+ }
120
+ if (!parsed.hostname || !GREENGRASS_HOSTS.has(parsed.hostname)) {
121
+ throw new CredentialsProviderError(`${parsed.hostname} is not a valid container metadata service hostname`, {
122
+ tryNextLink: false,
123
+ logger
124
+ });
125
+ }
126
+ if (!parsed.protocol || !GREENGRASS_PROTOCOLS.has(parsed.protocol)) {
127
+ throw new CredentialsProviderError(`${parsed.protocol} is not a valid container metadata service protocol`, {
128
+ tryNextLink: false,
129
+ logger
130
+ });
131
+ }
132
+ return {
133
+ protocol: parsed.protocol,
134
+ hostname: parsed.hostname,
135
+ path: parsed.pathname + parsed.search,
136
+ port: parsed.port ? parseInt(parsed.port, 10) : void 0
137
+ };
138
+ }
139
+ throw new CredentialsProviderError(`The container metadata credential provider cannot be used unless the ${ENV_CMDS_RELATIVE_URI} or ${ENV_CMDS_FULL_URI} environment variable is set`, {
140
+ tryNextLink: false,
141
+ logger
142
+ });
143
+ };
144
+
145
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/error/InstanceMetadataV1FallbackError.js
146
+ var InstanceMetadataV1FallbackError = class _InstanceMetadataV1FallbackError extends CredentialsProviderError {
147
+ tryNextLink;
148
+ name = "InstanceMetadataV1FallbackError";
149
+ constructor(message, tryNextLink = true) {
150
+ super(message, tryNextLink);
151
+ this.tryNextLink = tryNextLink;
152
+ Object.setPrototypeOf(this, _InstanceMetadataV1FallbackError.prototype);
153
+ }
154
+ };
155
+
156
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/config/Endpoint.js
157
+ var Endpoint;
158
+ (function(Endpoint2) {
159
+ Endpoint2["IPv4"] = "http://169.254.169.254";
160
+ Endpoint2["IPv6"] = "http://[fd00:ec2::254]";
161
+ })(Endpoint || (Endpoint = {}));
162
+
163
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/config/EndpointConfigOptions.js
164
+ var ENV_ENDPOINT_NAME = "AWS_EC2_METADATA_SERVICE_ENDPOINT";
165
+ var CONFIG_ENDPOINT_NAME = "ec2_metadata_service_endpoint";
166
+ var ENDPOINT_CONFIG_OPTIONS = {
167
+ environmentVariableSelector: (env) => env[ENV_ENDPOINT_NAME],
168
+ configFileSelector: (profile) => profile[CONFIG_ENDPOINT_NAME],
169
+ default: void 0
170
+ };
171
+
172
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/config/EndpointMode.js
173
+ var EndpointMode;
174
+ (function(EndpointMode2) {
175
+ EndpointMode2["IPv4"] = "IPv4";
176
+ EndpointMode2["IPv6"] = "IPv6";
177
+ })(EndpointMode || (EndpointMode = {}));
178
+
179
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/config/EndpointModeConfigOptions.js
180
+ var ENV_ENDPOINT_MODE_NAME = "AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE";
181
+ var CONFIG_ENDPOINT_MODE_NAME = "ec2_metadata_service_endpoint_mode";
182
+ var ENDPOINT_MODE_CONFIG_OPTIONS = {
183
+ environmentVariableSelector: (env) => env[ENV_ENDPOINT_MODE_NAME],
184
+ configFileSelector: (profile) => profile[CONFIG_ENDPOINT_MODE_NAME],
185
+ default: EndpointMode.IPv4
186
+ };
187
+
188
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/utils/getInstanceMetadataEndpoint.js
189
+ var getInstanceMetadataEndpoint = async () => parseUrl(await getFromEndpointConfig() || await getFromEndpointModeConfig());
190
+ var getFromEndpointConfig = async () => loadConfig(ENDPOINT_CONFIG_OPTIONS)();
191
+ var getFromEndpointModeConfig = async () => {
192
+ const endpointMode = await loadConfig(ENDPOINT_MODE_CONFIG_OPTIONS)();
193
+ switch (endpointMode) {
194
+ case EndpointMode.IPv4:
195
+ return Endpoint.IPv4;
196
+ case EndpointMode.IPv6:
197
+ return Endpoint.IPv6;
198
+ default:
199
+ throw new Error(`Unsupported endpoint mode: ${endpointMode}. Select from ${Object.values(EndpointMode)}`);
200
+ }
201
+ };
202
+
203
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/utils/getExtendedInstanceMetadataCredentials.js
204
+ var STATIC_STABILITY_REFRESH_INTERVAL_SECONDS = 5 * 60;
205
+ var STATIC_STABILITY_REFRESH_INTERVAL_JITTER_WINDOW_SECONDS = 5 * 60;
206
+ var STATIC_STABILITY_DOC_URL = "https://docs.aws.amazon.com/sdkref/latest/guide/feature-static-credentials.html";
207
+ var getExtendedInstanceMetadataCredentials = (credentials, logger) => {
208
+ const refreshInterval = STATIC_STABILITY_REFRESH_INTERVAL_SECONDS + Math.floor(Math.random() * STATIC_STABILITY_REFRESH_INTERVAL_JITTER_WINDOW_SECONDS);
209
+ const newExpiration = new Date(Date.now() + refreshInterval * 1e3);
210
+ logger.warn(`Attempting credential expiration extension due to a credential service availability issue. A refresh of these credentials will be attempted after ${new Date(newExpiration)}.
211
+ For more information, please visit: ` + STATIC_STABILITY_DOC_URL);
212
+ const originalExpiration = credentials.originalExpiration ?? credentials.expiration;
213
+ return {
214
+ ...credentials,
215
+ ...originalExpiration ? { originalExpiration } : {},
216
+ expiration: newExpiration
217
+ };
218
+ };
219
+
220
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/utils/staticStabilityProvider.js
221
+ var staticStabilityProvider = (provider, options = {}) => {
222
+ const logger = options?.logger || console;
223
+ let pastCredentials;
224
+ return async () => {
225
+ let credentials;
226
+ try {
227
+ credentials = await provider();
228
+ if (credentials.expiration && credentials.expiration.getTime() < Date.now()) {
229
+ credentials = getExtendedInstanceMetadataCredentials(credentials, logger);
230
+ }
231
+ } catch (e) {
232
+ if (pastCredentials) {
233
+ logger.warn("Credential renew failed: ", e);
234
+ credentials = getExtendedInstanceMetadataCredentials(pastCredentials, logger);
235
+ } else {
236
+ throw e;
237
+ }
238
+ }
239
+ pastCredentials = credentials;
240
+ return credentials;
241
+ };
242
+ };
243
+
244
+ // ../../node_modules/.pnpm/@smithy+credential-provider-imds@4.3.8/node_modules/@smithy/credential-provider-imds/dist-es/fromInstanceMetadata.js
245
+ var IMDS_PATH = "/latest/meta-data/iam/security-credentials/";
246
+ var IMDS_TOKEN_PATH = "/latest/api/token";
247
+ var AWS_EC2_METADATA_V1_DISABLED = "AWS_EC2_METADATA_V1_DISABLED";
248
+ var PROFILE_AWS_EC2_METADATA_V1_DISABLED = "ec2_metadata_v1_disabled";
249
+ var X_AWS_EC2_METADATA_TOKEN = "x-aws-ec2-metadata-token";
250
+ var fromInstanceMetadata = (init = {}) => staticStabilityProvider(getInstanceMetadataProvider(init), { logger: init.logger });
251
+ var getInstanceMetadataProvider = (init = {}) => {
252
+ let disableFetchToken = false;
253
+ const { logger, profile } = init;
254
+ const { timeout, maxRetries } = providerConfigFromInit(init);
255
+ const getCredentials = async (maxRetries2, options) => {
256
+ const isImdsV1Fallback = disableFetchToken || options.headers?.[X_AWS_EC2_METADATA_TOKEN] == null;
257
+ if (isImdsV1Fallback) {
258
+ let fallbackBlockedFromProfile = false;
259
+ let fallbackBlockedFromProcessEnv = false;
260
+ const configValue = await loadConfig({
261
+ environmentVariableSelector: (env) => {
262
+ const envValue = env[AWS_EC2_METADATA_V1_DISABLED];
263
+ fallbackBlockedFromProcessEnv = !!envValue && envValue !== "false";
264
+ if (envValue === void 0) {
265
+ throw new CredentialsProviderError(`${AWS_EC2_METADATA_V1_DISABLED} not set in env, checking config file next.`, { logger: init.logger });
266
+ }
267
+ return fallbackBlockedFromProcessEnv;
268
+ },
269
+ configFileSelector: (profile2) => {
270
+ const profileValue = profile2[PROFILE_AWS_EC2_METADATA_V1_DISABLED];
271
+ fallbackBlockedFromProfile = !!profileValue && profileValue !== "false";
272
+ return fallbackBlockedFromProfile;
273
+ },
274
+ default: false
275
+ }, {
276
+ profile
277
+ })();
278
+ if (init.ec2MetadataV1Disabled || configValue) {
279
+ const causes = [];
280
+ if (init.ec2MetadataV1Disabled)
281
+ causes.push("credential provider initialization (runtime option ec2MetadataV1Disabled)");
282
+ if (fallbackBlockedFromProfile)
283
+ causes.push(`config file profile (${PROFILE_AWS_EC2_METADATA_V1_DISABLED})`);
284
+ if (fallbackBlockedFromProcessEnv)
285
+ causes.push(`process environment variable (${AWS_EC2_METADATA_V1_DISABLED})`);
286
+ throw new InstanceMetadataV1FallbackError(`AWS EC2 Metadata v1 fallback has been blocked by AWS SDK configuration in the following: [${causes.join(", ")}].`);
287
+ }
288
+ }
289
+ const imdsProfile = (await retry(async () => {
290
+ let profile2;
291
+ try {
292
+ profile2 = await getProfile(options);
293
+ } catch (err) {
294
+ if (err.statusCode === 401) {
295
+ disableFetchToken = false;
296
+ }
297
+ throw err;
298
+ }
299
+ return profile2;
300
+ }, maxRetries2)).trim();
301
+ return retry(async () => {
302
+ let creds;
303
+ try {
304
+ creds = await getCredentialsFromProfile(imdsProfile, options, init);
305
+ } catch (err) {
306
+ if (err.statusCode === 401) {
307
+ disableFetchToken = false;
308
+ }
309
+ throw err;
310
+ }
311
+ return creds;
312
+ }, maxRetries2);
313
+ };
314
+ return async () => {
315
+ const endpoint = await getInstanceMetadataEndpoint();
316
+ if (disableFetchToken) {
317
+ logger?.debug("AWS SDK Instance Metadata", "using v1 fallback (no token fetch)");
318
+ return getCredentials(maxRetries, { ...endpoint, timeout });
319
+ } else {
320
+ let token;
321
+ try {
322
+ token = (await getMetadataToken({ ...endpoint, timeout })).toString();
323
+ } catch (error) {
324
+ if (error?.statusCode === 400) {
325
+ throw Object.assign(error, {
326
+ message: "EC2 Metadata token request returned error"
327
+ });
328
+ } else if (error.message === "TimeoutError" || [403, 404, 405].includes(error.statusCode)) {
329
+ disableFetchToken = true;
330
+ }
331
+ logger?.debug("AWS SDK Instance Metadata", "using v1 fallback (initial)");
332
+ return getCredentials(maxRetries, { ...endpoint, timeout });
333
+ }
334
+ return getCredentials(maxRetries, {
335
+ ...endpoint,
336
+ headers: {
337
+ [X_AWS_EC2_METADATA_TOKEN]: token
338
+ },
339
+ timeout
340
+ });
341
+ }
342
+ };
343
+ };
344
+ var getMetadataToken = async (options) => httpRequest({
345
+ ...options,
346
+ path: IMDS_TOKEN_PATH,
347
+ method: "PUT",
348
+ headers: {
349
+ "x-aws-ec2-metadata-token-ttl-seconds": "21600"
350
+ }
351
+ });
352
+ var getProfile = async (options) => (await httpRequest({ ...options, path: IMDS_PATH })).toString();
353
+ var getCredentialsFromProfile = async (profile, options, init) => {
354
+ const credentialsResponse = JSON.parse((await httpRequest({
355
+ ...options,
356
+ path: IMDS_PATH + profile
357
+ })).toString());
358
+ if (!isImdsCredentials(credentialsResponse)) {
359
+ throw new CredentialsProviderError("Invalid response received from instance metadata service.", {
360
+ logger: init.logger
361
+ });
362
+ }
363
+ return fromImdsCredentials(credentialsResponse);
364
+ };
365
+ export {
366
+ DEFAULT_MAX_RETRIES,
367
+ DEFAULT_TIMEOUT,
368
+ ENV_CMDS_AUTH_TOKEN,
369
+ ENV_CMDS_FULL_URI,
370
+ ENV_CMDS_RELATIVE_URI,
371
+ Endpoint,
372
+ fromContainerMetadata,
373
+ fromInstanceMetadata,
374
+ getInstanceMetadataEndpoint,
375
+ httpRequest,
376
+ providerConfigFromInit
377
+ };
@@ -18,7 +18,8 @@
18
18
  --
19
19
  -- Idempotent: re-running with the same :computer_id is a no-op.
20
20
  --
21
- -- This is a data backfill, not a schema change — no creates: markers.
21
+ -- data-only-migration
22
+ -- This is a data backfill, not a schema change.
22
23
 
23
24
  \set ON_ERROR_STOP on
24
25
 
@@ -15,6 +15,7 @@
15
15
  -- inert page. Per-tenant variation can be added by INSERTing rows with a
16
16
  -- specific tenant_id; the SELECT-from-tenants below is the convenient
17
17
  -- "every tenant gets the v1 baseline" path.
18
+ -- data-only-migration
18
19
 
19
20
  \set ON_ERROR_STOP on
20
21
 
@@ -60,6 +60,16 @@
60
60
  --
61
61
  -- Markers (consumed by scripts/db-migrate-manual.sh):
62
62
  --
63
+ -- moves-owner: public.tenant_entity_pages -> brain.pages
64
+ -- moves-owner: public.tenant_entity_page_sections -> brain.page_sections
65
+ -- moves-owner: public.tenant_entity_page_links -> brain.page_links
66
+ -- moves-owner: public.tenant_entity_page_aliases -> brain.page_aliases
67
+ -- moves-owner: public.tenant_entity_section_sources -> brain.section_sources
68
+ -- moves-owner: public.tenant_entity_external_refs -> brain.external_refs
69
+ -- drops: public.uq_tenant_entity_pages_tenant_type_subtype_slug
70
+ -- drops: public.idx_tenant_entity_pages_search_tsv
71
+ -- drops: public.uq_tenant_entity_section_sources_section_kind_ref
72
+ -- creates-trigger: brain.section_sources.trg_tenant_entity_section_sources_tenant
63
73
  -- creates: brain.pages
64
74
  -- creates: brain.page_sections
65
75
  -- creates: brain.page_links
@@ -4,6 +4,9 @@
4
4
  -- drops: public.computer_assignments
5
5
  -- drops: public.computer_snapshots
6
6
  -- drops: public.computers
7
+ -- drops-constraint: public.eval_runs.eval_runs_computer_id_computers_id_fk
8
+ -- drops-constraint: public.thread_idle_learning_state.thread_idle_learning_state_computer_id_computers_id_fk
9
+ -- drops-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_computer_id_computers_id_fk
7
10
  --
8
11
  -- Kill the legacy Computer feature. All product surfaces (admin, Spaces,
9
12
  -- mobile, CLI), Lambda handlers (computer-runtime, computer-manager,
@@ -15,6 +15,8 @@
15
15
  --
16
16
  -- creates-constraint: compliance.audit_outbox.audit_outbox_event_type_prefix_v3
17
17
  -- creates-constraint: compliance.audit_events.audit_events_event_type_prefix_v3
18
+ -- drops-constraint: compliance.audit_outbox.audit_outbox_event_type_prefix_v2
19
+ -- drops-constraint: compliance.audit_events.audit_events_event_type_prefix_v2
18
20
 
19
21
  BEGIN;
20
22
 
@@ -48,6 +48,7 @@
48
48
  -- drops-column: public.agent_loops.cost_per_accepted_run_usd_cents
49
49
  -- drops-column: public.agent_loop_versions.judge_spec
50
50
  -- drops-column: public.agent_loop_versions.evidence_policy
51
+ -- drops: public.view_agent_loop_versions_judge_evidence_nullable
51
52
 
52
53
  \set ON_ERROR_STOP on
53
54
 
@@ -27,6 +27,7 @@
27
27
  -- drops-column: public.agent_loop_versions.worker_spec
28
28
  -- drops-column: public.agent_loop_versions.loop_policy
29
29
  -- creates: public.view_agent_loop_versions_target_spec_required
30
+ -- drops: public.view_agent_loop_versions_goal_worker_policy_nullable
30
31
 
31
32
  \set ON_ERROR_STOP on
32
33
 
@@ -510,6 +510,12 @@ BEGIN
510
510
  ELSE
511
511
  missing := missing || 'guardrails'::text;
512
512
  END IF;
513
+ IF to_regclass('public.harness_tool_execution_events') IS NOT NULL THEN
514
+ REVOKE ALL PRIVILEGES ON public.harness_tool_execution_events FROM analyst_reader;
515
+ GRANT SELECT (created_at, duration_ms, error_preview, event_type, id, idempotency_key, input_preview, operation, output_preview, policy_decision_id, policy_revision, principal_id, principal_type, provider_cost_usd, provider_request_id, tenant_id, thread_id, tool_use_id, turn_id) ON public.harness_tool_execution_events TO analyst_reader;
516
+ ELSE
517
+ missing := missing || 'harness_tool_execution_events'::text;
518
+ END IF;
513
519
  IF to_regclass('public.inbox_item_comments') IS NOT NULL THEN
514
520
  GRANT SELECT ON public.inbox_item_comments TO analyst_reader;
515
521
  ELSE
@@ -668,6 +668,15 @@ BEGIN
668
668
  ELSE
669
669
  missing := missing || 'guardrails'::text;
670
670
  END IF;
671
+ IF to_regclass('public.harness_tool_execution_events') IS NOT NULL THEN
672
+ ALTER TABLE public.harness_tool_execution_events ENABLE ROW LEVEL SECURITY;
673
+ DROP POLICY IF EXISTS analyst_tenant_isolation ON public.harness_tool_execution_events;
674
+ CREATE POLICY analyst_tenant_isolation ON public.harness_tool_execution_events
675
+ FOR SELECT TO analyst_reader
676
+ USING (tenant_id = current_setting('thinkwork.analyst_tenant', true)::uuid);
677
+ ELSE
678
+ missing := missing || 'harness_tool_execution_events'::text;
679
+ END IF;
671
680
  IF to_regclass('public.inbox_item_comments') IS NOT NULL THEN
672
681
  ALTER TABLE public.inbox_item_comments ENABLE ROW LEVEL SECURITY;
673
682
  DROP POLICY IF EXISTS analyst_tenant_isolation ON public.inbox_item_comments;
@@ -61,11 +61,38 @@
61
61
  --
62
62
  -- Markers (consumed by scripts/db-migrate-manual.sh):
63
63
  --
64
+ -- moves-owner: public.knowledge_graph_ingest_runs -> kg.ingest_runs
65
+ -- moves-owner: public.knowledge_graph_entities -> kg.entities
66
+ -- moves-owner: public.knowledge_graph_relationships -> kg.relationships
67
+ -- moves-owner: public.knowledge_graph_evidence -> kg.evidence
68
+ -- moves-owner: public.knowledge_graph_observation_cursors -> kg.observation_cursors
64
69
  -- creates: kg.ingest_runs
65
70
  -- creates: kg.entities
66
71
  -- creates: kg.relationships
67
72
  -- creates: kg.evidence
68
73
  -- creates: kg.observation_cursors
74
+ -- creates: kg.uq_kg_entities_run_graph_node
75
+ -- creates: kg.uq_kg_relationships_run_graph_edge
76
+ -- drops: public.uq_kg_entities_run_graph_node
77
+ -- drops: public.uq_kg_relationships_run_graph_edge
78
+ -- drops-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_status_allowed
79
+ -- drops-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_trigger_allowed
80
+ -- drops-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_source_kind_allowed
81
+ -- drops-constraint: public.knowledge_graph_ingest_runs.knowledge_graph_ingest_runs_thread_scope_required
82
+ -- drops-constraint: public.knowledge_graph_entities.knowledge_graph_entities_grounding_allowed
83
+ -- drops-constraint: public.knowledge_graph_entities.knowledge_graph_entities_provenance_allowed
84
+ -- drops-constraint: public.knowledge_graph_entities.knowledge_graph_entities_source_kind_allowed
85
+ -- drops-constraint: public.knowledge_graph_entities.knowledge_graph_entities_resolution_state_allowed
86
+ -- drops-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_grounding_allowed
87
+ -- drops-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_provenance_allowed
88
+ -- drops-constraint: public.knowledge_graph_relationships.knowledge_graph_relationships_source_kind_allowed
89
+ -- drops-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_source_kind_allowed
90
+ -- drops-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_evidence_source_kind_allowed
91
+ -- drops-constraint: public.knowledge_graph_evidence.knowledge_graph_evidence_subject_required
92
+ -- creates-trigger: kg.ingest_runs.knowledge_graph_ingest_runs_scope_guard
93
+ -- creates-trigger: kg.entities.knowledge_graph_entities_scope_guard
94
+ -- creates-trigger: kg.relationships.knowledge_graph_relationships_scope_guard
95
+ -- creates-trigger: kg.evidence.knowledge_graph_evidence_scope_guard
69
96
  -- creates-constraint: kg.ingest_runs.ingest_runs_status_allowed
70
97
  -- creates-constraint: kg.ingest_runs.ingest_runs_trigger_allowed
71
98
  -- creates-constraint: kg.ingest_runs.ingest_runs_source_kind_allowed
@@ -43,6 +43,27 @@
43
43
  --
44
44
  -- Markers (consumed by scripts/db-migrate-manual.sh):
45
45
  --
46
+ -- moves-owner: public.brain_dream_runs -> brain.dream_runs
47
+ -- moves-owner: public.brain_dream_actions -> brain.dream_actions
48
+ -- moves-owner: public.memory_retain_attempts -> brain.retain_attempts
49
+ -- drops: public.brain_dream_runs_dedupe_key_uidx
50
+ -- drops: public.brain_dream_runs_tenant_bank_idx
51
+ -- drops: public.brain_dream_runs_tenant_status_idx
52
+ -- drops: public.brain_dream_actions_run_ordinal_uidx
53
+ -- drops: public.brain_dream_actions_run_status_idx
54
+ -- drops: public.memory_retain_attempts_source_event_uidx
55
+ -- drops: public.memory_retain_attempts_due_idx
56
+ -- drops: public.memory_retain_attempts_tenant_status_idx
57
+ -- drops: public.memory_retain_attempts_thread_idx
58
+ -- drops: public.memory_retain_attempts_user_idx
59
+ -- drops: public.memory_retain_attempts_space_idx
60
+ -- drops: public.memory_retain_attempts_turn_idx
61
+ -- drops-constraint: public.brain_dream_runs.brain_dream_runs_status_check
62
+ -- drops-constraint: public.brain_dream_actions.brain_dream_actions_type_check
63
+ -- drops-constraint: public.brain_dream_actions.brain_dream_actions_status_check
64
+ -- drops-constraint: public.memory_retain_attempts.memory_retain_attempts_status_allowed
65
+ -- drops-constraint: public.memory_retain_attempts.memory_retain_attempts_attempt_count_nonnegative
66
+ -- drops-constraint: public.memory_retain_attempts.memory_retain_attempts_max_attempts_positive
46
67
  -- creates: brain.dream_runs
47
68
  -- creates: brain.dream_actions
48
69
  -- creates: brain.retain_attempts
@@ -42,6 +42,8 @@
42
42
  -- drops-column: brain.artifact_manifests.migration_id
43
43
  -- drops-constraint: brain.artifact_manifests.artifact_manifests_substrate_id_fk
44
44
  -- drops-constraint: brain.artifact_manifests.artifact_manifests_migration_id_fk
45
+ -- drops: brain.brain_artifact_manifests_substrate_kind_idx
46
+ -- drops: brain.brain_artifact_manifests_migration_idx
45
47
 
46
48
  \set ON_ERROR_STOP on
47
49
 
@@ -0,0 +1,24 @@
1
+ -- THINK-311 (AgentCore trial): loosen the agents.runtime CHECK constraint
2
+ -- so the Agent-configuration Runtime dropdown can persist the internal
3
+ -- 'harness' value (surfaced to users as "AgentCore"). Without this, the
4
+ -- updateTenantAgent mutation dies on agents_runtime_check and the UI
5
+ -- shows "[GraphQL] Unexpected error.".
6
+ --
7
+ -- Hand-rolled (NOT registered in meta/_journal.json) — apply via psql:
8
+ -- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0257_agents_runtime_allow_harness.sql
9
+ -- Already applied to dev via RDS Data API on 2026-07-16.
10
+ --
11
+ -- agent_templates.runtime intentionally untouched: the AgentCore trial is
12
+ -- scoped to the ONE platform agent per tenant; no template carries it.
13
+ --
14
+ -- Marker for the db:migrate-manual drift-reporter:
15
+ -- creates-constraint: public.agents.agents_runtime_check
16
+
17
+ \echo '== THINK-311: allow harness in agents_runtime_check =='
18
+
19
+ ALTER TABLE agents
20
+ DROP CONSTRAINT IF EXISTS agents_runtime_check;
21
+
22
+ ALTER TABLE agents
23
+ ADD CONSTRAINT agents_runtime_check
24
+ CHECK (runtime IN ('strands', 'flue', 'pi', 'harness'));