thinkwork-cli 0.12.12 → 0.12.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -38
- package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
- package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
- package/dist/cli.js +22123 -9219
- package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
- package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
- package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
- package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
- package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
- package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
- package/dist/drizzle/0001_milky_surge.sql +103 -0
- package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
- package/dist/drizzle/0003_exotic_ogun.sql +3 -0
- package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
- package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
- package/dist/drizzle/0006_new_colonel_america.sql +2 -0
- package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
- package/dist/drizzle/0008_external_task_id_column.sql +43 -0
- package/dist/drizzle/0009_evaluations.sql +64 -0
- package/dist/drizzle/0010_eval_agent_template.sql +2 -0
- package/dist/drizzle/0011_eval_run_template.sql +2 -0
- package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
- package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
- package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
- package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
- package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
- package/dist/drizzle/0017_wiki_places.sql +46 -0
- package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
- package/dist/drizzle/0018_cool_firebird.sql +24 -0
- package/dist/drizzle/0018_skill_runs.sql +84 -0
- package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
- package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
- package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
- package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
- package/dist/drizzle/0021_crm_work_links.sql +76 -0
- package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
- package/dist/drizzle/0022_add_billing_tables.sql +70 -0
- package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
- package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
- package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
- package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
- package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
- package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
- package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
- package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
- package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
- package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
- package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
- package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
- package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
- package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
- package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
- package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
- package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
- package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
- package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
- package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
- package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
- package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
- package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
- package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
- package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
- package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
- package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
- package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
- package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
- package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
- package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
- package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
- package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
- package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
- package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
- package/dist/drizzle/0063_threads_session_data.sql +23 -0
- package/dist/drizzle/0064_tenant_credentials.sql +65 -0
- package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
- package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
- package/dist/drizzle/0069_compliance_schema.sql +364 -0
- package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
- package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
- package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
- package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
- package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
- package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
- package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
- package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
- package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
- package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
- package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
- package/dist/drizzle/0083_computer_runbooks.sql +103 -0
- package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
- package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
- package/dist/drizzle/0086_update_default_template_models.sql +19 -0
- package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
- package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
- package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
- package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
- package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
- package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
- package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
- package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
- package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
- package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
- package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
- package/dist/drizzle/0097_shared_computers.sql +191 -0
- package/dist/drizzle/0098_business_ontology.sql +587 -0
- package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
- package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
- package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
- package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
- package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
- package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
- package/dist/drizzle/0105_spaces_domain.sql +349 -0
- package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
- package/dist/drizzle/0106_space_threads_participants.sql +197 -0
- package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
- package/dist/drizzle/0108_message_mentions.sql +95 -0
- package/dist/drizzle/0109_space_owned_threads.sql +217 -0
- package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
- package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
- package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
- package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
- package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
- package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
- package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
- package/dist/drizzle/0117_space_access_mode.sql +40 -0
- package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
- package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
- package/dist/drizzle/0120_space_automations.sql +58 -0
- package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
- package/dist/drizzle/0122_space_email_triggers.sql +24 -0
- package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
- package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
- package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
- package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
- package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
- package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
- package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
- package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
- package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
- package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
- package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
- package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
- package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
- package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
- package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
- package/dist/drizzle/0136_goal_ledger.sql +55 -0
- package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
- package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
- package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
- package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
- package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
- package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
- package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
- package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
- package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
- package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
- package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
- package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
- package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
- package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
- package/dist/drizzle/0149_user_model_approvals.sql +89 -0
- package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
- package/dist/drizzle/0151_managed_deployments.sql +91 -0
- package/dist/drizzle/0152_agent_profiles.sql +81 -0
- package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
- package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
- package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
- package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
- package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
- package/dist/drizzle/0158_pending_user_questions.sql +80 -0
- package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
- package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
- package/dist/drizzle/0159_application_plugins.sql +193 -0
- package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
- package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
- package/dist/drizzle/0160_eval_datasets.sql +75 -0
- package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
- package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
- package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
- package/dist/drizzle/0162_eval_result_override.sql +49 -0
- package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
- package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
- package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
- package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
- package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
- package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
- package/dist/drizzle/0169_release_update_jobs.sql +67 -0
- package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
- package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
- package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
- package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
- package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
- package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
- package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
- package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
- package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
- package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
- package/dist/drizzle/0180_skill_drafts.sql +89 -0
- package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
- package/dist/drizzle/0182_agent_loops.sql +260 -0
- package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
- package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
- package/dist/drizzle/0185_agent_loop_space.sql +16 -0
- package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
- package/dist/drizzle/0187_native_work_items.sql +220 -0
- package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
- package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
- package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
- package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
- package/dist/drizzle/0192_work_item_labels.sql +44 -0
- package/dist/drizzle/0193_work_item_documents.sql +31 -0
- package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
- package/dist/drizzle/0194_work_item_comments.sql +35 -0
- package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
- package/dist/drizzle/0196_pi_extensions.sql +118 -0
- package/dist/drizzle/0197_eval_profiles.sql +150 -0
- package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
- package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
- package/dist/drizzle/meta/_journal.json +160 -0
- package/dist/plugins/README.md +162 -0
- package/dist/plugins/catalog/package.json +40 -0
- package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
- package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
- package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
- package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
- package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
- package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
- package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
- package/dist/plugins/catalog/src/catalog.ts +434 -0
- package/dist/plugins/catalog/src/contracts.ts +1498 -0
- package/dist/plugins/catalog/src/index.ts +4 -0
- package/dist/plugins/catalog/src/plugin-package.ts +171 -0
- package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
- package/dist/plugins/catalog/src/registry/index.ts +1 -0
- package/dist/plugins/catalog/tsconfig.json +8 -0
- package/dist/plugins/company-brain/README.md +37 -0
- package/dist/plugins/company-brain/package.json +33 -0
- package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
- package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
- package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
- package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
- package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
- package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
- package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
- package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
- package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
- package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
- package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
- package/dist/plugins/company-brain/src/api/migration.ts +665 -0
- package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
- package/dist/plugins/company-brain/src/index.ts +62 -0
- package/dist/plugins/company-brain/src/manifest.ts +112 -0
- package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
- package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
- package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
- package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
- package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
- package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
- package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
- package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
- package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
- package/dist/plugins/company-brain/tsconfig.json +8 -0
- package/dist/plugins/company-data/README.md +49 -0
- package/dist/plugins/company-data/package.json +21 -0
- package/dist/plugins/company-data/src/index.ts +30 -0
- package/dist/plugins/company-data/src/manifest.ts +26 -0
- package/dist/plugins/company-data/test/manifest.test.ts +116 -0
- package/dist/plugins/company-data/tsconfig.json +8 -0
- package/dist/plugins/company-etl/README.md +46 -0
- package/dist/plugins/company-etl/package.json +21 -0
- package/dist/plugins/company-etl/src/index.ts +29 -0
- package/dist/plugins/company-etl/src/manifest.ts +26 -0
- package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
- package/dist/plugins/company-etl/tsconfig.json +8 -0
- package/dist/plugins/email-channel/README.md +41 -0
- package/dist/plugins/email-channel/package.json +22 -0
- package/dist/plugins/email-channel/src/index.ts +36 -0
- package/dist/plugins/email-channel/src/manifest.ts +44 -0
- package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
- package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
- package/dist/plugins/email-channel/tsconfig.json +8 -0
- package/dist/plugins/lastmile/README.md +50 -0
- package/dist/plugins/lastmile/package.json +23 -0
- package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
- package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
- package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
- package/dist/plugins/lastmile/src/index.ts +46 -0
- package/dist/plugins/lastmile/src/manifest.ts +139 -0
- package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
- package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
- package/dist/plugins/lastmile/tsconfig.json +8 -0
- package/dist/plugins/n8n/README.md +201 -0
- package/dist/plugins/n8n/n8n-app/README.md +33 -0
- package/dist/plugins/n8n/n8n-app/package.json +23 -0
- package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
- package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
- package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
- package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
- package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
- package/dist/plugins/n8n/package.json +35 -0
- package/dist/plugins/n8n/runtime/Dockerfile +18 -0
- package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
- package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
- package/dist/plugins/n8n/runtime/package-lock.json +13 -0
- package/dist/plugins/n8n/runtime/package.json +7 -0
- package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
- package/dist/plugins/n8n/smoke/README.md +95 -0
- package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
- package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
- package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
- package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
- package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
- package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
- package/dist/plugins/n8n/src/index.ts +79 -0
- package/dist/plugins/n8n/src/manifest.ts +403 -0
- package/dist/plugins/n8n/src/package-config.ts +186 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
- package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
- package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
- package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
- package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
- package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
- package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
- package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
- package/dist/plugins/n8n/test/image-build.test.ts +118 -0
- package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
- package/dist/plugins/n8n/test/manifest.test.ts +278 -0
- package/dist/plugins/n8n/test/package-config.test.ts +57 -0
- package/dist/plugins/n8n/tsconfig.json +8 -0
- package/dist/plugins/sendgrid/README.md +30 -0
- package/dist/plugins/sendgrid/package.json +22 -0
- package/dist/plugins/sendgrid/src/index.ts +36 -0
- package/dist/plugins/sendgrid/src/manifest.ts +37 -0
- package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
- package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
- package/dist/plugins/sendgrid/tsconfig.json +8 -0
- package/dist/plugins/twenty/README.md +78 -0
- package/dist/plugins/twenty/package.json +27 -0
- package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
- package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
- package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
- package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
- package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
- package/dist/plugins/twenty/src/api/cutover.ts +209 -0
- package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
- package/dist/plugins/twenty/src/index.ts +55 -0
- package/dist/plugins/twenty/src/manifest.ts +259 -0
- package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
- package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
- package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
- package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
- package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
- package/dist/plugins/twenty/test/manifest.test.ts +463 -0
- package/dist/plugins/twenty/tsconfig.json +9 -0
- package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
- package/dist/plugins/twenty/twenty-app/README.md +148 -0
- package/dist/plugins/twenty/twenty-app/package.json +30 -0
- package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
- package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
- package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
- package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
- package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
- package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
- package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
- package/dist/plugins/workos-auth/package.json +22 -0
- package/dist/plugins/workos-auth/src/index.ts +30 -0
- package/dist/plugins/workos-auth/src/manifest.ts +40 -0
- package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
- package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
- package/dist/plugins/workos-auth/tsconfig.json +8 -0
- package/dist/scripts/bootstrap-workspace.sh +162 -0
- package/dist/scripts/post-deploy.sh +290 -0
- package/dist/terraform/examples/greenfield/main.tf +903 -75
- package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
- package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
- package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
- package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
- package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
- package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
- package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
- package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
- package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
- package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
- package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
- package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
- package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
- package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
- package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
- package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
- package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
- package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
- package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
- package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
- package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
- package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
- package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
- package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
- package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
- package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
- package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
- package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
- package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
- package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
- package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
- package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
- package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
- package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
- package/dist/terraform/modules/app/ses-email/main.tf +143 -30
- package/dist/terraform/modules/app/static-site/main.tf +4 -3
- package/dist/terraform/modules/app/www-dns/main.tf +45 -5
- package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
- package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
- package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
- package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
- package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
- package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
- package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
- package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
- package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
- package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
- package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
- package/dist/terraform/modules/thinkwork/README.md +71 -0
- package/dist/terraform/modules/thinkwork/main.tf +1325 -174
- package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
- package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
- package/dist/terraform/schema.graphql +82 -9
- package/dist/workspace-defaults/files/AGENTS.md +344 -0
- package/dist/workspace-defaults/files/CONTEXT.md +8 -0
- package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
- package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
- package/dist/workspace-defaults/files/ROUTER.md +24 -0
- package/dist/workspace-defaults/files/SPACE.md +62 -0
- package/dist/workspace-defaults/files/TOOLS.md +65 -0
- package/dist/workspace-defaults/files/USER.md +40 -0
- package/dist/workspace-defaults/files/mcp.json +3 -0
- package/dist/workspace-defaults/files/memory/contacts.md +13 -0
- package/dist/workspace-defaults/files/memory/lessons.md +13 -0
- package/dist/workspace-defaults/files/memory/preferences.md +12 -0
- package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
- package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
- package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
- package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
- package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
- package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
- package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
- package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
- package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
- package/package.json +1 -1
- package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
- package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
- package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
- package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
- package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
- package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
- package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
- package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
|
@@ -191,15 +191,46 @@ if [[ -n "$execution_role_arn" ]]; then
|
|
|
191
191
|
role_arg="--memory-execution-role-arn $execution_role_arn"
|
|
192
192
|
fi
|
|
193
193
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
)"
|
|
194
|
+
# CreateMemory validates the execution role's trust policy at call time. When
|
|
195
|
+
# Terraform created that role moments earlier in the same apply, IAM has not
|
|
196
|
+
# propagated yet and the API rejects it with ValidationException "Please
|
|
197
|
+
# provide a role with a valid trust policy" — empirically for ~20s after role
|
|
198
|
+
# creation (harness cycle-5 ledger entry). Retry that specific error with a
|
|
199
|
+
# bounded backoff; every other error fails immediately.
|
|
200
|
+
create_output=""
|
|
201
|
+
create_status=1
|
|
202
|
+
err_file="$(mktemp)"
|
|
203
|
+
trap 'rm -f "$err_file"' EXIT
|
|
204
|
+
for attempt in $(seq 1 12); do
|
|
205
|
+
set +e
|
|
206
|
+
create_output="$(
|
|
207
|
+
aws bedrock-agentcore-control create-memory \
|
|
208
|
+
--region "$region" \
|
|
209
|
+
--name "$name" \
|
|
210
|
+
--memory-strategies "$strategies_json" \
|
|
211
|
+
--event-expiry-duration 365 \
|
|
212
|
+
$role_arg \
|
|
213
|
+
--output json 2>"$err_file"
|
|
214
|
+
)"
|
|
215
|
+
create_status=$?
|
|
216
|
+
set -e
|
|
217
|
+
if [[ $create_status -eq 0 ]]; then
|
|
218
|
+
break
|
|
219
|
+
fi
|
|
220
|
+
if grep -qi "valid trust policy" "$err_file"; then
|
|
221
|
+
echo "[create_or_find_memory] attempt $attempt: execution role not yet visible to AgentCore (IAM propagation); retrying in 15s" >&2
|
|
222
|
+
sleep 15
|
|
223
|
+
continue
|
|
224
|
+
fi
|
|
225
|
+
cat "$err_file" >&2
|
|
226
|
+
exit "$create_status"
|
|
227
|
+
done
|
|
228
|
+
|
|
229
|
+
if [[ $create_status -ne 0 ]]; then
|
|
230
|
+
echo "[create_or_find_memory] create-memory still failing after $attempt attempts:" >&2
|
|
231
|
+
cat "$err_file" >&2
|
|
232
|
+
exit "$create_status"
|
|
233
|
+
fi
|
|
203
234
|
|
|
204
235
|
new_id="$(echo "$create_output" | jq -r '.memory.id // .id')"
|
|
205
236
|
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# `agentcore-pi` — Pi agent runtime
|
|
2
|
+
|
|
3
|
+
Provisions the **Pi** agent runtime as a Lambda+LWA function (Plan §005 U2).
|
|
4
|
+
|
|
5
|
+
This module owns the dedicated Pi Lambda + log group + IAM role + event-invoke config. Shared AgentCore platform resources live in `../agentcore-platform`.
|
|
6
|
+
|
|
7
|
+
## Resources owned
|
|
8
|
+
|
|
9
|
+
- `aws_iam_role.agentcore_pi` (`thinkwork-${stage}-agentcore-pi-role`) — assumed by Lambda + Bedrock AgentCore Runtime principals.
|
|
10
|
+
- `aws_iam_role_policy.agentcore_pi` — baseline permissions (S3 skill catalog, Bedrock model invoke, AgentCore Memory + Code Interpreter, CloudWatch Logs, X-Ray ingestion, ECR pull, SSM parameter access, memory-retain Lambda invoke). Forward-compat additions for U4-U8: Aurora Data API + Secrets Manager scoped to `thinkwork-${stage}-*`.
|
|
11
|
+
- `aws_iam_role_policy_attachment.agentcore_pi_vpc_access` — attached when Pi needs private-network access for Company Brain/Cognee direct MCP or the OKF EFS mount.
|
|
12
|
+
- `aws_iam_role_policy.agentcore_pi_dlq_send` — `sqs:SendMessage` against the shared async DLQ (injected via `var.async_dlq_arn`).
|
|
13
|
+
- `aws_cloudwatch_log_group.agentcore_pi` (`/thinkwork/${stage}/agentcore-pi`).
|
|
14
|
+
- `aws_lambda_function.agentcore_pi` (`thinkwork-${stage}-agentcore-pi`) — `package_type = "Image"`, pulls `${ecr_repository_url}:pi-latest`.
|
|
15
|
+
- `aws_lambda_function_event_invoke_config.agentcore_pi` — `MaximumRetryAttempts=0`, on-failure → shared DLQ.
|
|
16
|
+
|
|
17
|
+
## Resources NOT owned (injected via inputs)
|
|
18
|
+
|
|
19
|
+
- **ECR repository** — shared AgentCore image repository (`thinkwork-${stage}-agentcore`). Pi pulls the `pi-latest` / `${sha}-pi` image tags from this repo. Owned by `../agentcore-platform`; URL injected via `var.ecr_repository_url`.
|
|
20
|
+
- **Async DLQ** — shared AgentCore async failure queue. Owned by `../agentcore-platform`; ARN injected via `var.async_dlq_arn`.
|
|
21
|
+
|
|
22
|
+
## State migration
|
|
23
|
+
|
|
24
|
+
The dedicated runtime previously shipped as Flue. The migration renamed that module and runtime identity back to Pi via `moved {}` blocks declared in the parent composition (`terraform/modules/thinkwork/main.tf`):
|
|
25
|
+
|
|
26
|
+
```hcl
|
|
27
|
+
moved {
|
|
28
|
+
from = module.agentcore_flue.aws_lambda_function.agentcore_flue
|
|
29
|
+
to = module.agentcore_pi.aws_lambda_function.agentcore_pi
|
|
30
|
+
}
|
|
31
|
+
# (and the analogous moves for the log group + event-invoke config + IAM role)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The Lambda function name changes from `thinkwork-${stage}-agentcore-flue` to `thinkwork-${stage}-agentcore-pi`, so apply the runtime/data migration as part of the same release window.
|
|
35
|
+
|
|
36
|
+
## Inputs
|
|
37
|
+
|
|
38
|
+
| Variable | Required | Purpose |
|
|
39
|
+
| --------------------- | -------- | ------------------------------------------------------------------------------ |
|
|
40
|
+
| `stage` | yes | Deployment stage (e.g., `dev`, `prod`). |
|
|
41
|
+
| `account_id` | yes | AWS account ID (used in IAM resource ARNs). |
|
|
42
|
+
| `region` | yes | AWS region. |
|
|
43
|
+
| `bucket_name` | yes | Primary S3 bucket for skills + workspace files. |
|
|
44
|
+
| `ecr_repository_url` | yes | Shared ECR repo URL from `module.agentcore_platform.ecr_repository_url`. |
|
|
45
|
+
| `async_dlq_arn` | yes | Shared async DLQ ARN from `module.agentcore_platform.agentcore_async_dlq_arn`. |
|
|
46
|
+
| `hindsight_endpoint` | no | Hindsight API endpoint when enabled; empty disables Hindsight tools. |
|
|
47
|
+
| `agentcore_memory_id` | no | AgentCore Memory resource ID for auto-retention. |
|
|
48
|
+
| `api_endpoint` | no | API Gateway base URL for the `/api/skills/complete` callback. |
|
|
49
|
+
| `api_auth_secret` | no | Service-auth bearer for the same callback. |
|
|
50
|
+
| `memory_engine` | no | `hindsight` or `agentcore`; surfaced as `MEMORY_ENGINE` env var. |
|
|
51
|
+
| `cognee_subnet_ids` | no | Private subnets for direct Company Brain/Cognee MCP access. |
|
|
52
|
+
| `cognee_security_group_ids` | no | Security groups allowed to reach the internal Company Brain/Cognee endpoint. |
|
|
53
|
+
|
|
54
|
+
## Outputs
|
|
55
|
+
|
|
56
|
+
| Output | Purpose |
|
|
57
|
+
| --------------------- | ------------------------------------------------------------------------------------------ |
|
|
58
|
+
| `pi_function_name` | Direct SDK invoke target (passed to `chat-agent-invoke` as `AGENTCORE_PI_FUNCTION_NAME`). |
|
|
59
|
+
| `pi_function_arn` | Granted to `chat-agent-invoke`'s `lambda:InvokeFunction` policy. |
|
|
60
|
+
| `pi_runtime_role_arn` | Assumed by the Bedrock AgentCore Runtime when Pi is invoked via the Bedrock control plane. |
|
|
61
|
+
| `pi_log_group_name` | Scrubber + operator inspection target. |
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
################################################################################
|
|
2
|
+
# AgentCore Pi — App Module
|
|
3
|
+
#
|
|
4
|
+
# Plan §005 U2 — provisions the Pi agent runtime as a Lambda+LWA function.
|
|
5
|
+
#
|
|
6
|
+
# Layout note: this module owns the IAM role, log group, Lambda function, and
|
|
7
|
+
# event-invoke config that are unique to Pi. Shared AgentCore platform
|
|
8
|
+
# resources are injected via input variables; the IAM policy here grants
|
|
9
|
+
# `sqs:SendMessage` against the shared DLQ ARN.
|
|
10
|
+
#
|
|
11
|
+
# State migration: the resources here previously lived inside `module.agentcore`
|
|
12
|
+
# (the legacy runtime module) under the address `aws_*.agentcore_pi`. The
|
|
13
|
+
# parent module's `moved {}` blocks realign state across modules without
|
|
14
|
+
# destroy+create on the underlying AWS resources.
|
|
15
|
+
################################################################################
|
|
16
|
+
|
|
17
|
+
# memory-retain Lambda name + ARN are constructed locally rather than
|
|
18
|
+
# taken as inputs to avoid a circular dependency: the lambda-api module
|
|
19
|
+
# already consumes this module's output (agentcore_pi_function_name/arn).
|
|
20
|
+
locals {
|
|
21
|
+
memory_retain_fn_name = "thinkwork-${var.stage}-api-memory-retain"
|
|
22
|
+
memory_retain_fn_arn = "arn:aws:lambda:${var.region}:${var.account_id}:function:${local.memory_retain_fn_name}"
|
|
23
|
+
chat_agent_finalize_fn_name = "thinkwork-${var.stage}-api-chat-agent-finalize"
|
|
24
|
+
chat_agent_finalize_fn_arn = "arn:aws:lambda:${var.region}:${var.account_id}:function:${local.chat_agent_finalize_fn_name}"
|
|
25
|
+
chat_agent_activity_fn_name = "thinkwork-${var.stage}-api-chat-agent-activity"
|
|
26
|
+
chat_agent_activity_fn_arn = "arn:aws:lambda:${var.region}:${var.account_id}:function:${local.chat_agent_activity_fn_name}"
|
|
27
|
+
pi_image_uri = "${var.ecr_repository_url}:pi-latest"
|
|
28
|
+
cognee_vpc_enabled = length(var.cognee_subnet_ids) > 0 && length(var.cognee_security_group_ids) > 0
|
|
29
|
+
okf_efs_vpc_enabled = var.okf_efs_enabled && length(var.okf_efs_subnet_ids) > 0 && length(var.okf_efs_security_group_ids) > 0
|
|
30
|
+
private_vpc_enabled = local.cognee_vpc_enabled || local.okf_efs_vpc_enabled
|
|
31
|
+
private_subnet_ids = distinct(concat(var.cognee_subnet_ids, var.okf_efs_subnet_ids))
|
|
32
|
+
private_security_group_ids = distinct(concat(
|
|
33
|
+
var.cognee_security_group_ids,
|
|
34
|
+
var.okf_efs_security_group_ids,
|
|
35
|
+
))
|
|
36
|
+
okf_efs_mount_enabled = local.okf_efs_vpc_enabled && var.okf_efs_file_system_arn != "" && var.okf_efs_read_access_point_arn != ""
|
|
37
|
+
okf_efs_iam_statements = local.okf_efs_mount_enabled ? [
|
|
38
|
+
{
|
|
39
|
+
Sid = "OkfWikiEfsReadOnlyMount"
|
|
40
|
+
Effect = "Allow"
|
|
41
|
+
Action = ["elasticfilesystem:ClientMount"]
|
|
42
|
+
Resource = var.okf_efs_file_system_arn
|
|
43
|
+
Condition = {
|
|
44
|
+
StringEquals = {
|
|
45
|
+
"elasticfilesystem:AccessPointArn" = var.okf_efs_read_access_point_arn
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
] : []
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
################################################################################
|
|
53
|
+
# Execution Role
|
|
54
|
+
################################################################################
|
|
55
|
+
|
|
56
|
+
resource "aws_iam_role" "agentcore_pi" {
|
|
57
|
+
name = "thinkwork-${var.stage}-agentcore-pi-role"
|
|
58
|
+
|
|
59
|
+
assume_role_policy = jsonencode({
|
|
60
|
+
Version = "2012-10-17"
|
|
61
|
+
Statement = [{
|
|
62
|
+
Effect = "Allow"
|
|
63
|
+
Principal = { Service = ["ecs-tasks.amazonaws.com", "lambda.amazonaws.com", "bedrock-agentcore.amazonaws.com"] }
|
|
64
|
+
Action = "sts:AssumeRole"
|
|
65
|
+
}]
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
tags = {
|
|
69
|
+
Name = "thinkwork-${var.stage}-agentcore-pi-role"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
resource "aws_iam_role_policy" "agentcore_pi" {
|
|
74
|
+
name = "agentcore-pi-permissions"
|
|
75
|
+
role = aws_iam_role.agentcore_pi.id
|
|
76
|
+
|
|
77
|
+
policy = jsonencode({
|
|
78
|
+
Version = "2012-10-17"
|
|
79
|
+
Statement = concat([
|
|
80
|
+
{
|
|
81
|
+
Sid = "S3Access"
|
|
82
|
+
Effect = "Allow"
|
|
83
|
+
Action = ["s3:GetObject", "s3:PutObject", "s3:ListBucket"]
|
|
84
|
+
Resource = [
|
|
85
|
+
"arn:aws:s3:::${var.bucket_name}",
|
|
86
|
+
"arn:aws:s3:::${var.bucket_name}/*",
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
# Eval datasets hold red-team answer keys and flagged-thread
|
|
91
|
+
# snapshots (PII) — never agent-readable. The grant above is
|
|
92
|
+
# bucket-wide, so application-level path resolution alone is one
|
|
93
|
+
# bug away from exposing them to the agent under test; this Deny
|
|
94
|
+
# is the enforcement layer (Evaluations Trust Core U4 KTD). Run
|
|
95
|
+
# snapshots live under the same prefix
|
|
96
|
+
# (tenants/<slug>/eval-datasets/.runs/<run-id>/) so they are
|
|
97
|
+
# covered by construction.
|
|
98
|
+
Sid = "DenyEvalDatasetPrefix"
|
|
99
|
+
Effect = "Deny"
|
|
100
|
+
Action = ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"]
|
|
101
|
+
Resource = [
|
|
102
|
+
"arn:aws:s3:::${var.bucket_name}/tenants/*/eval-datasets/*",
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
# Bedrock invoke spans foundation models, inference profiles, and
|
|
107
|
+
# cross-region routing. The original
|
|
108
|
+
# `arn:aws:bedrock:${region}::foundation-model/*` only covered
|
|
109
|
+
# foundation models in the primary region — but a
|
|
110
|
+
# `us.anthropic.claude-sonnet-...` inference profile (the default
|
|
111
|
+
# routing path used by chat-agent-invoke) lives at
|
|
112
|
+
# `arn:aws:bedrock:${region}:${account}:inference-profile/*` AND
|
|
113
|
+
# dispatches the actual InvokeModel call to the foundation model
|
|
114
|
+
# in whatever region the profile resolves to (us-east-1,
|
|
115
|
+
# us-east-2, us-west-2). The narrow ARN caused every agent turn
|
|
116
|
+
# to fail with AccessDenied silently inside pi-ai's Bedrock
|
|
117
|
+
# provider, surfacing as an empty assistant message with zero
|
|
118
|
+
# token usage. Inference profiles and their routed foundation-model
|
|
119
|
+
# calls require broad model resource scope.
|
|
120
|
+
Sid = "BedrockInvoke"
|
|
121
|
+
Effect = "Allow"
|
|
122
|
+
Action = ["bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream", "bedrock:InvokeAgent"]
|
|
123
|
+
Resource = "*"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
# Some Bedrock Marketplace-backed models require the invoking role to
|
|
127
|
+
# view/accept the model subscription before Converse can stream. Without
|
|
128
|
+
# these actions Bedrock returns an assistant error with zero token usage.
|
|
129
|
+
Sid = "MarketplaceModelAccess"
|
|
130
|
+
Effect = "Allow"
|
|
131
|
+
Action = ["aws-marketplace:ViewSubscriptions", "aws-marketplace:Subscribe"]
|
|
132
|
+
Resource = "*"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
# Automatic memory retention — every agent turn calls CreateEvent
|
|
136
|
+
# to feed AgentCore's background strategies. Also needs read access
|
|
137
|
+
# so the recall() tool can fetch previously extracted records and
|
|
138
|
+
# so forget() can soft-archive old records.
|
|
139
|
+
Sid = "AgentCoreMemoryReadWrite"
|
|
140
|
+
Effect = "Allow"
|
|
141
|
+
Action = [
|
|
142
|
+
"bedrock-agentcore:CreateEvent",
|
|
143
|
+
"bedrock-agentcore:ListEvents",
|
|
144
|
+
"bedrock-agentcore:GetEvent",
|
|
145
|
+
"bedrock-agentcore:ListMemoryRecords",
|
|
146
|
+
"bedrock-agentcore:RetrieveMemoryRecords",
|
|
147
|
+
"bedrock-agentcore:GetMemoryRecord",
|
|
148
|
+
"bedrock-agentcore:BatchCreateMemoryRecords",
|
|
149
|
+
"bedrock-agentcore:BatchUpdateMemoryRecords",
|
|
150
|
+
]
|
|
151
|
+
Resource = "*"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
# Browser Automation (browser_automation tool). Pi can open managed
|
|
155
|
+
# AgentCore Browser sessions when the built-in browser capability is
|
|
156
|
+
# enabled for an agent.
|
|
157
|
+
Sid = "AgentCoreBrowser"
|
|
158
|
+
Effect = "Allow"
|
|
159
|
+
Action = [
|
|
160
|
+
"bedrock-agentcore:StartBrowserSession",
|
|
161
|
+
"bedrock-agentcore:StopBrowserSession",
|
|
162
|
+
"bedrock-agentcore:GetBrowserSession",
|
|
163
|
+
"bedrock-agentcore:ListBrowserSessions",
|
|
164
|
+
"bedrock-agentcore:InvokeBrowser",
|
|
165
|
+
"bedrock-agentcore:UpdateBrowserStream",
|
|
166
|
+
]
|
|
167
|
+
Resource = [
|
|
168
|
+
"arn:aws:bedrock-agentcore:${var.region}:aws:browser/aws.browser.v1",
|
|
169
|
+
"arn:aws:bedrock-agentcore:${var.region}:${var.account_id}:browser/*",
|
|
170
|
+
]
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
# AgentCore Code Interpreter — Pi's primary sandbox per the FR-9a
|
|
174
|
+
# integration spike (`packages/pi-aws/connectors/agentcore-
|
|
175
|
+
# codeinterpreter.ts`). Per-tenant interpreters live under
|
|
176
|
+
# `code-interpreter-custom/*`; sessions are started, exec'd against,
|
|
177
|
+
# and stopped per Pi invocation.
|
|
178
|
+
Sid = "AgentCoreCodeInterpreter"
|
|
179
|
+
Effect = "Allow"
|
|
180
|
+
Action = [
|
|
181
|
+
"bedrock-agentcore:StartCodeInterpreterSession",
|
|
182
|
+
"bedrock-agentcore:StopCodeInterpreterSession",
|
|
183
|
+
"bedrock-agentcore:InvokeCodeInterpreter",
|
|
184
|
+
"bedrock-agentcore:GetCodeInterpreterSession",
|
|
185
|
+
"bedrock-agentcore:ListCodeInterpreterSessions",
|
|
186
|
+
"bedrock-agentcore:GetCodeInterpreter",
|
|
187
|
+
]
|
|
188
|
+
Resource = "arn:aws:bedrock-agentcore:${var.region}:${var.account_id}:code-interpreter-custom/*"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
Sid = "CloudWatchLogs"
|
|
192
|
+
Effect = "Allow"
|
|
193
|
+
Action = [
|
|
194
|
+
"logs:CreateLogGroup",
|
|
195
|
+
"logs:CreateLogStream",
|
|
196
|
+
"logs:DescribeLogGroups",
|
|
197
|
+
"logs:DescribeLogStreams",
|
|
198
|
+
"logs:PutLogEvents",
|
|
199
|
+
]
|
|
200
|
+
# Lambda log group + AgentCore Runtime container log groups + the
|
|
201
|
+
# account-wide aws/spans log group (CloudWatch Transaction Search
|
|
202
|
+
# destination — required for AgentCore Evaluations to read spans).
|
|
203
|
+
Resource = [
|
|
204
|
+
"arn:aws:logs:${var.region}:${var.account_id}:log-group:/aws/lambda/thinkwork-${var.stage}-*",
|
|
205
|
+
"arn:aws:logs:${var.region}:${var.account_id}:log-group:/aws/lambda/thinkwork-${var.stage}-*:*",
|
|
206
|
+
"arn:aws:logs:${var.region}:${var.account_id}:log-group:/aws/bedrock-agentcore/runtimes/*",
|
|
207
|
+
"arn:aws:logs:${var.region}:${var.account_id}:log-group:/aws/bedrock-agentcore/runtimes/*:*",
|
|
208
|
+
"arn:aws:logs:${var.region}:${var.account_id}:log-group:aws/spans",
|
|
209
|
+
"arn:aws:logs:${var.region}:${var.account_id}:log-group:aws/spans:*",
|
|
210
|
+
]
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
# X-Ray ingestion — ADOT exporters publish spans here, which then
|
|
214
|
+
# flow to aws/spans via the Transaction Search policy. AgentCore
|
|
215
|
+
# Evaluations queries those spans by session.id when scoring runs.
|
|
216
|
+
Sid = "XRayIngest"
|
|
217
|
+
Effect = "Allow"
|
|
218
|
+
Action = [
|
|
219
|
+
"xray:PutTraceSegments",
|
|
220
|
+
"xray:PutTelemetryRecords",
|
|
221
|
+
"xray:GetSamplingRules",
|
|
222
|
+
"xray:GetSamplingTargets",
|
|
223
|
+
]
|
|
224
|
+
Resource = [
|
|
225
|
+
"arn:aws:xray:${var.region}:${var.account_id}:*",
|
|
226
|
+
"*",
|
|
227
|
+
]
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
Sid = "ECRPull"
|
|
231
|
+
Effect = "Allow"
|
|
232
|
+
Action = ["ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage"]
|
|
233
|
+
Resource = "arn:aws:ecr:${var.region}:${var.account_id}:repository/thinkwork-${var.stage}-*"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
Sid = "ECRAuth"
|
|
237
|
+
Effect = "Allow"
|
|
238
|
+
Action = ["ecr:GetAuthorizationToken"]
|
|
239
|
+
Resource = "*"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
Sid = "SSMParameterAccess"
|
|
243
|
+
Effect = "Allow"
|
|
244
|
+
Action = ["ssm:GetParameter", "ssm:PutParameter"]
|
|
245
|
+
Resource = "arn:aws:ssm:${var.region}:${var.account_id}:parameter/thinkwork/${var.stage}/agentcore/*"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
# Invoke API Lambdas from Pi's private VPC. Memory retain is queued
|
|
249
|
+
# async; chat activity/finalize are RequestResponse callbacks because
|
|
250
|
+
# public API Gateway endpoints are not reachable reliably from this VPC.
|
|
251
|
+
Sid = "ApiLambdaInvoke"
|
|
252
|
+
Effect = "Allow"
|
|
253
|
+
Action = ["lambda:InvokeFunction"]
|
|
254
|
+
Resource = [
|
|
255
|
+
local.memory_retain_fn_arn,
|
|
256
|
+
local.chat_agent_finalize_fn_arn,
|
|
257
|
+
local.chat_agent_activity_fn_arn,
|
|
258
|
+
]
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
# Aurora Data API — U4 SessionStore and Hindsight exact-memory recall
|
|
262
|
+
# read/write via the RDS Data API rather than long-lived Postgres
|
|
263
|
+
# connections. Cover both the canonical cluster name and suffixed
|
|
264
|
+
# replacement names.
|
|
265
|
+
Sid = "AuroraDataAPI"
|
|
266
|
+
Effect = "Allow"
|
|
267
|
+
Action = [
|
|
268
|
+
"rds-data:ExecuteStatement",
|
|
269
|
+
"rds-data:BatchExecuteStatement",
|
|
270
|
+
"rds-data:BeginTransaction",
|
|
271
|
+
"rds-data:CommitTransaction",
|
|
272
|
+
"rds-data:RollbackTransaction",
|
|
273
|
+
]
|
|
274
|
+
Resource = [
|
|
275
|
+
"arn:aws:rds:${var.region}:${var.account_id}:cluster:thinkwork-${var.stage}-db",
|
|
276
|
+
"arn:aws:rds:${var.region}:${var.account_id}:cluster:thinkwork-${var.stage}-db-*",
|
|
277
|
+
]
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
# Secrets Manager — Pi resolves db credentials and other runtime
|
|
281
|
+
# secrets at invocation time per `feedback_completion_callback_
|
|
282
|
+
# snapshot_pattern`. Scoped to `/thinkwork/${stage}/*` per the
|
|
283
|
+
# existing convention.
|
|
284
|
+
Sid = "SecretsManagerRead"
|
|
285
|
+
Effect = "Allow"
|
|
286
|
+
Action = [
|
|
287
|
+
"secretsmanager:GetSecretValue",
|
|
288
|
+
"secretsmanager:DescribeSecret",
|
|
289
|
+
]
|
|
290
|
+
Resource = "arn:aws:secretsmanager:${var.region}:${var.account_id}:secret:thinkwork-${var.stage}-*"
|
|
291
|
+
},
|
|
292
|
+
], local.okf_efs_iam_statements)
|
|
293
|
+
})
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
resource "aws_iam_role_policy_attachment" "agentcore_pi_vpc_access" {
|
|
297
|
+
count = local.private_vpc_enabled ? 1 : 0
|
|
298
|
+
|
|
299
|
+
role = aws_iam_role.agentcore_pi.name
|
|
300
|
+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
resource "aws_iam_role_policy" "agentcore_pi_dlq_send" {
|
|
304
|
+
name = "agentcore-pi-dlq-send"
|
|
305
|
+
role = aws_iam_role.agentcore_pi.id
|
|
306
|
+
|
|
307
|
+
policy = jsonencode({
|
|
308
|
+
Version = "2012-10-17"
|
|
309
|
+
Statement = [{
|
|
310
|
+
Effect = "Allow"
|
|
311
|
+
Action = ["sqs:SendMessage"]
|
|
312
|
+
Resource = var.async_dlq_arn
|
|
313
|
+
}]
|
|
314
|
+
})
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
################################################################################
|
|
318
|
+
# CloudWatch Log Group
|
|
319
|
+
################################################################################
|
|
320
|
+
|
|
321
|
+
resource "aws_cloudwatch_log_group" "agentcore_pi" {
|
|
322
|
+
name = "/thinkwork/${var.stage}/agentcore-pi"
|
|
323
|
+
retention_in_days = 30
|
|
324
|
+
|
|
325
|
+
tags = {
|
|
326
|
+
Name = "thinkwork-${var.stage}-agentcore-pi-logs"
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
################################################################################
|
|
331
|
+
# Lambda Container Image
|
|
332
|
+
################################################################################
|
|
333
|
+
|
|
334
|
+
resource "terraform_data" "seed_pi_image" {
|
|
335
|
+
count = var.source_image_uri != "" ? 1 : 0
|
|
336
|
+
|
|
337
|
+
triggers_replace = {
|
|
338
|
+
source_image_uri = var.source_image_uri
|
|
339
|
+
target_image_uri = local.pi_image_uri
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
provisioner "local-exec" {
|
|
343
|
+
interpreter = ["/bin/bash", "-c"]
|
|
344
|
+
command = <<-EOT
|
|
345
|
+
set -euo pipefail
|
|
346
|
+
repo_root="${abspath("${path.module}/../../../..")}"
|
|
347
|
+
aws ecr get-login-password --region ${var.region} | docker login --username AWS --password-stdin ${var.account_id}.dkr.ecr.${var.region}.amazonaws.com
|
|
348
|
+
if docker pull "${var.source_image_uri}"; then
|
|
349
|
+
source_id="$(docker image inspect --format '{{.Id}}' "${var.source_image_uri}")"
|
|
350
|
+
docker tag "$source_id" "${local.pi_image_uri}"
|
|
351
|
+
else
|
|
352
|
+
dockerfile="$repo_root/packages/agentcore-pi/agent-container/Dockerfile"
|
|
353
|
+
if [[ ! -f "$dockerfile" ]]; then
|
|
354
|
+
echo "ERROR: could not pull ${var.source_image_uri} and there is no repo checkout at $repo_root to build from." >&2
|
|
355
|
+
echo "The pinned release image must be pullable by this machine (public registry, or docker login to its registry)." >&2
|
|
356
|
+
echo "Alternatively set agentcore_pi_source_image_uri in terraform.tfvars to an image this AWS account can pull." >&2
|
|
357
|
+
exit 1
|
|
358
|
+
fi
|
|
359
|
+
echo "Unable to pull release image ${var.source_image_uri}; building Pi image from $repo_root"
|
|
360
|
+
docker build \
|
|
361
|
+
--platform linux/amd64 \
|
|
362
|
+
-f "$dockerfile" \
|
|
363
|
+
-t "${local.pi_image_uri}" \
|
|
364
|
+
"$repo_root"
|
|
365
|
+
fi
|
|
366
|
+
docker push "${local.pi_image_uri}"
|
|
367
|
+
EOT
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
resource "aws_lambda_function" "agentcore_pi" {
|
|
372
|
+
function_name = "thinkwork-${var.stage}-agentcore-pi"
|
|
373
|
+
role = aws_iam_role.agentcore_pi.arn
|
|
374
|
+
package_type = "Image"
|
|
375
|
+
image_uri = local.pi_image_uri
|
|
376
|
+
timeout = 900
|
|
377
|
+
memory_size = 2048
|
|
378
|
+
|
|
379
|
+
depends_on = [terraform_data.seed_pi_image]
|
|
380
|
+
|
|
381
|
+
environment {
|
|
382
|
+
variables = {
|
|
383
|
+
PORT = "8080"
|
|
384
|
+
AWS_LWA_PORT = "8080"
|
|
385
|
+
AGENTCORE_MEMORY_ID = var.agentcore_memory_id
|
|
386
|
+
AGENTCORE_FILES_BUCKET = var.bucket_name
|
|
387
|
+
MEMORY_ENGINE = var.memory_engine
|
|
388
|
+
REQUESTER_IDLE_MEMORY_LEARNING_ENABLED = tostring(var.requester_idle_memory_learning_enabled)
|
|
389
|
+
MEMORY_RETAIN_FN_NAME = local.memory_retain_fn_name
|
|
390
|
+
CHAT_AGENT_FINALIZE_FN_NAME = local.chat_agent_finalize_fn_name
|
|
391
|
+
CHAT_AGENT_ACTIVITY_FN_NAME = local.chat_agent_activity_fn_name
|
|
392
|
+
HINDSIGHT_ENDPOINT = var.hindsight_endpoint
|
|
393
|
+
THINKWORK_API_URL = var.api_endpoint
|
|
394
|
+
API_AUTH_SECRET = var.api_auth_secret
|
|
395
|
+
# Plan §005 U4 — AuroraSessionStore uses the RDS Data API to persist
|
|
396
|
+
# Pi's SessionData blobs against threads.session_data. Empty during
|
|
397
|
+
# the first greenfield apply (DB cluster doesn't exist yet); the
|
|
398
|
+
# constructor fail-closes if either is missing at runtime.
|
|
399
|
+
DB_CLUSTER_ARN = var.db_cluster_arn
|
|
400
|
+
DB_SECRET_ARN = var.db_secret_arn
|
|
401
|
+
OKF_WIKI_NAVIGATOR_ENABLED = tostring(local.okf_efs_mount_enabled)
|
|
402
|
+
OKF_WIKI_ROOT = var.okf_efs_mount_path
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
dynamic "vpc_config" {
|
|
407
|
+
for_each = local.private_vpc_enabled ? [1] : []
|
|
408
|
+
|
|
409
|
+
content {
|
|
410
|
+
subnet_ids = local.private_subnet_ids
|
|
411
|
+
security_group_ids = local.private_security_group_ids
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
dynamic "file_system_config" {
|
|
416
|
+
for_each = local.okf_efs_vpc_enabled ? [1] : []
|
|
417
|
+
|
|
418
|
+
content {
|
|
419
|
+
arn = var.okf_efs_read_access_point_arn
|
|
420
|
+
local_mount_path = var.okf_efs_mount_path
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
logging_config {
|
|
425
|
+
log_group = aws_cloudwatch_log_group.agentcore_pi.name
|
|
426
|
+
log_format = "Text"
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
tags = {
|
|
430
|
+
Name = "thinkwork-${var.stage}-agentcore-pi"
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
################################################################################
|
|
435
|
+
# Async-invoke hardening — MaximumRetryAttempts=0 + DLQ
|
|
436
|
+
#
|
|
437
|
+
# AWS Lambda async-invoke defaults to 2 retries; the agent loop is not
|
|
438
|
+
# idempotent (Bedrock tokens get re-burned, partial deliverables can
|
|
439
|
+
# overwrite the first), so retries are disabled and failed invokes land in
|
|
440
|
+
# the shared DLQ for operator visibility.
|
|
441
|
+
################################################################################
|
|
442
|
+
|
|
443
|
+
resource "aws_lambda_function_event_invoke_config" "agentcore_pi" {
|
|
444
|
+
function_name = aws_lambda_function.agentcore_pi.function_name
|
|
445
|
+
maximum_retry_attempts = 0
|
|
446
|
+
maximum_event_age_in_seconds = 3600
|
|
447
|
+
|
|
448
|
+
destination_config {
|
|
449
|
+
on_failure {
|
|
450
|
+
destination = var.async_dlq_arn
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
################################################################################
|
|
2
|
+
# AgentCore Pi — App Module (outputs)
|
|
3
|
+
################################################################################
|
|
4
|
+
|
|
5
|
+
output "agentcore_pi_function_name" {
|
|
6
|
+
description = "Pi AgentCore Lambda function name (for direct SDK invoke from chat-agent-invoke)"
|
|
7
|
+
value = aws_lambda_function.agentcore_pi.function_name
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
output "agentcore_pi_function_arn" {
|
|
11
|
+
description = "Pi AgentCore Lambda function ARN (for IAM policy on callers; used to grant lambda:InvokeFunction)"
|
|
12
|
+
value = aws_lambda_function.agentcore_pi.arn
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
output "agentcore_pi_runtime_role_arn" {
|
|
16
|
+
description = "IAM role ARN for the Pi agent runtime (assumed by Lambda + Bedrock AgentCore Runtime principals)"
|
|
17
|
+
value = aws_iam_role.agentcore_pi.arn
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
output "agentcore_pi_log_group_name" {
|
|
21
|
+
description = "CloudWatch log group name for the Pi Lambda. Useful for log scrubbing and operator inspection."
|
|
22
|
+
value = aws_cloudwatch_log_group.agentcore_pi.name
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
output "okf_wiki_mount_enabled" {
|
|
26
|
+
description = "Whether the OKF wiki EFS view is mounted into the Pi Lambda."
|
|
27
|
+
value = local.okf_efs_mount_enabled
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
output "okf_wiki_mount_path" {
|
|
31
|
+
description = "Pi local mount path for the OKF wiki EFS view."
|
|
32
|
+
value = var.okf_efs_mount_path
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
output "okf_wiki_read_access_point_arn" {
|
|
36
|
+
description = "EFS access point ARN mounted by Pi for read-only OKF wiki traversal."
|
|
37
|
+
value = var.okf_efs_read_access_point_arn
|
|
38
|
+
}
|