thinkwork-cli 0.12.11 → 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 +22157 -9229
- 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
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
-- Hand-rolled indexes for Stripe billing tables that drizzle-kit cannot
|
|
2
|
+
-- express (partial unique indexes + CHECK constraints).
|
|
3
|
+
--
|
|
4
|
+
-- Apply manually (matches 0018/0019/0020/0021 convention):
|
|
5
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0022_stripe_billing_indexes.sql
|
|
6
|
+
--
|
|
7
|
+
-- Drift detection:
|
|
8
|
+
-- pnpm db:migrate-manual
|
|
9
|
+
--
|
|
10
|
+
-- Pre-migration invariants:
|
|
11
|
+
-- - 0022_add_billing_tables.sql has been applied (tenants.pending_owner_email
|
|
12
|
+
-- exists; stripe_subscriptions exists).
|
|
13
|
+
-- - No collisions: a pre-existing partial unique index with the same name
|
|
14
|
+
-- would cause this script to fail (safe — intent is clear).
|
|
15
|
+
--
|
|
16
|
+
-- What this script enforces:
|
|
17
|
+
-- 1. At most one tenant per pending_owner_email (only rows where the column
|
|
18
|
+
-- is non-null participate — freshly-claimed tenants don't collide).
|
|
19
|
+
-- 2. At most one "active-ish" subscription per tenant. active / trialing /
|
|
20
|
+
-- past_due all count as active-ish; canceled/unpaid/incomplete do not.
|
|
21
|
+
-- 3. stripe_subscriptions.status is one of the Stripe-documented values.
|
|
22
|
+
-- Kept as a CHECK (not an enum) so Stripe API changes don't require a
|
|
23
|
+
-- migration — the set is wide enough to cover all current states.
|
|
24
|
+
--
|
|
25
|
+
-- creates: public.tenants_pending_owner_email_uidx
|
|
26
|
+
-- creates: public.stripe_subscriptions_active_uidx
|
|
27
|
+
-- creates-check: public.stripe_subscriptions.status
|
|
28
|
+
|
|
29
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "tenants_pending_owner_email_uidx"
|
|
30
|
+
ON "tenants" (lower("pending_owner_email"))
|
|
31
|
+
WHERE "pending_owner_email" IS NOT NULL;
|
|
32
|
+
|
|
33
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "stripe_subscriptions_active_uidx"
|
|
34
|
+
ON "stripe_subscriptions" ("tenant_id")
|
|
35
|
+
WHERE "status" IN ('active', 'trialing', 'past_due');
|
|
36
|
+
|
|
37
|
+
ALTER TABLE "stripe_subscriptions"
|
|
38
|
+
ADD CONSTRAINT "stripe_subscriptions_status_allowed"
|
|
39
|
+
CHECK ("status" IN (
|
|
40
|
+
'incomplete',
|
|
41
|
+
'incomplete_expired',
|
|
42
|
+
'trialing',
|
|
43
|
+
'active',
|
|
44
|
+
'past_due',
|
|
45
|
+
'canceled',
|
|
46
|
+
'unpaid',
|
|
47
|
+
'paused'
|
|
48
|
+
));
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-- Tenant soft-delete columns.
|
|
2
|
+
--
|
|
3
|
+
-- Set by the stripe-webhook Lambda when customer.subscription.deleted
|
|
4
|
+
-- fires. A separate scheduled sweeper (future PR) hard-deletes rows where
|
|
5
|
+
-- deactivated_at < now() - 30 days.
|
|
6
|
+
--
|
|
7
|
+
-- See docs/plans/2026-04-23-001-feat-stripe-upgrade-and-cancel-soft-delete-plan.md
|
|
8
|
+
-- (Unit 1).
|
|
9
|
+
--
|
|
10
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
11
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0023_tenants_deactivation.sql
|
|
12
|
+
--
|
|
13
|
+
-- Drift detection:
|
|
14
|
+
-- pnpm db:migrate-manual
|
|
15
|
+
--
|
|
16
|
+
-- Pre-migration invariants:
|
|
17
|
+
-- - tenants exists.
|
|
18
|
+
-- - tenants.deactivated_at + tenants.deactivation_reason do not yet exist.
|
|
19
|
+
--
|
|
20
|
+
-- creates-column: public.tenants.deactivated_at
|
|
21
|
+
-- creates-column: public.tenants.deactivation_reason
|
|
22
|
+
|
|
23
|
+
ALTER TABLE "tenants"
|
|
24
|
+
ADD COLUMN IF NOT EXISTS "deactivated_at" timestamp with time zone;
|
|
25
|
+
|
|
26
|
+
ALTER TABLE "tenants"
|
|
27
|
+
ADD COLUMN IF NOT EXISTS "deactivation_reason" text;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
-- tenant_mcp_admin_keys — per-tenant Bearer tokens for the admin-ops MCP server.
|
|
2
|
+
--
|
|
3
|
+
-- Replaces the shared API_AUTH_SECRET for MCP admin-ops calls. Each tenant
|
|
4
|
+
-- has one or more tokens; the admin-ops Lambda hashes the incoming Bearer
|
|
5
|
+
-- with SHA-256 and looks it up here to resolve the caller's tenant. Raw
|
|
6
|
+
-- tokens are never stored — only the hash + metadata.
|
|
7
|
+
--
|
|
8
|
+
-- See docs/plans/2026-04-22-shared-admin-ops-library-requirements.md and
|
|
9
|
+
-- PR following up on #480 (admin-ops shared package + MCP Lambda).
|
|
10
|
+
--
|
|
11
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
12
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0024_tenant_mcp_admin_keys.sql
|
|
13
|
+
--
|
|
14
|
+
-- Drift detection:
|
|
15
|
+
-- pnpm db:migrate-manual
|
|
16
|
+
--
|
|
17
|
+
-- Pre-migration invariants:
|
|
18
|
+
-- - tenants exists.
|
|
19
|
+
-- - tenant_mcp_admin_keys does not yet exist.
|
|
20
|
+
-- SELECT to_regclass('public.tenant_mcp_admin_keys'); -- must be NULL
|
|
21
|
+
--
|
|
22
|
+
-- creates: public.tenant_mcp_admin_keys
|
|
23
|
+
-- creates: public.uq_tenant_mcp_admin_keys_hash
|
|
24
|
+
-- creates: public.uq_tenant_mcp_admin_keys_active_name
|
|
25
|
+
-- creates: public.idx_tenant_mcp_admin_keys_tenant
|
|
26
|
+
|
|
27
|
+
CREATE TABLE "tenant_mcp_admin_keys" (
|
|
28
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
29
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE CASCADE,
|
|
30
|
+
-- SHA-256 hex digest of the raw token. 64 chars; bytea would be smaller
|
|
31
|
+
-- but text keeps psql/Postgres tooling friendly and there are few rows.
|
|
32
|
+
"key_hash" text NOT NULL,
|
|
33
|
+
-- Human label ("default", "ci", "ops-laptop-eric"). Unique per tenant
|
|
34
|
+
-- among non-revoked rows so operators can re-create a revoked "default".
|
|
35
|
+
"name" text NOT NULL,
|
|
36
|
+
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
37
|
+
-- Who created the key. Nullable for break-glass bootstrap via apikey
|
|
38
|
+
-- where no human-user row is attributable.
|
|
39
|
+
"created_by_user_id" uuid,
|
|
40
|
+
-- Bumped on every successful auth by the admin-ops Lambda. Async,
|
|
41
|
+
-- best-effort (failure to update does not block the request).
|
|
42
|
+
"last_used_at" timestamptz,
|
|
43
|
+
-- Soft-delete. NULL = active. Set to now() on revoke; row retained for
|
|
44
|
+
-- audit + to prevent hash reuse. A scheduled GC (future PR) hard-deletes
|
|
45
|
+
-- rows with revoked_at < now() - 90 days.
|
|
46
|
+
"revoked_at" timestamptz
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
-- Global uniqueness on hash — different tenants cannot share a token value
|
|
50
|
+
-- (collision probability with SHA-256 is negligible, but makes the lookup
|
|
51
|
+
-- path a single-row read regardless of how tenants are partitioned).
|
|
52
|
+
CREATE UNIQUE INDEX "uq_tenant_mcp_admin_keys_hash"
|
|
53
|
+
ON "tenant_mcp_admin_keys" ("key_hash");
|
|
54
|
+
|
|
55
|
+
-- Per-tenant uniqueness on name among active rows. Partial index so a
|
|
56
|
+
-- revoked "default" does not block creating a fresh "default".
|
|
57
|
+
CREATE UNIQUE INDEX "uq_tenant_mcp_admin_keys_active_name"
|
|
58
|
+
ON "tenant_mcp_admin_keys" ("tenant_id", "name")
|
|
59
|
+
WHERE "revoked_at" IS NULL;
|
|
60
|
+
|
|
61
|
+
-- Supports listing a tenant's keys ordered by created_at.
|
|
62
|
+
CREATE INDEX "idx_tenant_mcp_admin_keys_tenant"
|
|
63
|
+
ON "tenant_mcp_admin_keys" ("tenant_id", "created_at" DESC);
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
-- V1 agent-architecture — additive schema (U3 of plan #007).
|
|
2
|
+
--
|
|
3
|
+
-- Ships the persistence layer the V1 plan needs in Phase 1. Strictly additive:
|
|
4
|
+
-- no column drops, no existing-data rewrites (except column defaults on new
|
|
5
|
+
-- columns). U6 drops `skill_catalog.execution` + `mode` via a separate later
|
|
6
|
+
-- migration once the runtime cutover is complete.
|
|
7
|
+
--
|
|
8
|
+
-- See docs/plans/2026-04-23-007-feat-v1-agent-architecture-final-call-plan.md
|
|
9
|
+
-- §Implementation Units → U3.
|
|
10
|
+
--
|
|
11
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
12
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0025_v1_agent_architecture.sql
|
|
13
|
+
--
|
|
14
|
+
-- Drift detection:
|
|
15
|
+
-- pnpm db:migrate-manual
|
|
16
|
+
--
|
|
17
|
+
-- Pre-migration invariants (enforced by the to_regclass guards below):
|
|
18
|
+
-- - tenants exists
|
|
19
|
+
-- - tenant_mcp_servers exists
|
|
20
|
+
-- - plugin_uploads does NOT yet exist
|
|
21
|
+
-- SELECT to_regclass('public.plugin_uploads'); -- must be NULL
|
|
22
|
+
--
|
|
23
|
+
-- creates: public.plugin_uploads
|
|
24
|
+
-- creates: public.idx_plugin_uploads_tenant
|
|
25
|
+
-- creates: public.idx_plugin_uploads_status
|
|
26
|
+
-- creates-column: public.plugin_uploads.id
|
|
27
|
+
-- creates-column: public.tenant_mcp_servers.status
|
|
28
|
+
-- creates-column: public.tenant_mcp_servers.url_hash
|
|
29
|
+
-- creates-column: public.tenant_mcp_servers.approved_by
|
|
30
|
+
-- creates-column: public.tenant_mcp_servers.approved_at
|
|
31
|
+
-- creates-column: public.tenants.disabled_builtin_tools
|
|
32
|
+
|
|
33
|
+
-- ---------------------------------------------------------------------------
|
|
34
|
+
-- Pre-flight: fail loudly on missing pre-state. Without these guards a
|
|
35
|
+
-- partially-migrated DB can silently absorb a migration meant for a later
|
|
36
|
+
-- snapshot. Pattern mirrors 0023 / 0024.
|
|
37
|
+
-- ---------------------------------------------------------------------------
|
|
38
|
+
|
|
39
|
+
DO $$
|
|
40
|
+
BEGIN
|
|
41
|
+
IF to_regclass('public.tenants') IS NULL THEN
|
|
42
|
+
RAISE EXCEPTION '0025: public.tenants is missing — refusing to apply';
|
|
43
|
+
END IF;
|
|
44
|
+
IF to_regclass('public.tenant_mcp_servers') IS NULL THEN
|
|
45
|
+
RAISE EXCEPTION '0025: public.tenant_mcp_servers is missing — refusing to apply';
|
|
46
|
+
END IF;
|
|
47
|
+
END
|
|
48
|
+
$$;
|
|
49
|
+
|
|
50
|
+
-- ---------------------------------------------------------------------------
|
|
51
|
+
-- tenants.disabled_builtin_tools — per-tenant kill switches (plan R6, R7).
|
|
52
|
+
--
|
|
53
|
+
-- JSONB array of built-in tool slugs the tenant has disabled globally. Empty
|
|
54
|
+
-- array = all built-ins available (subject to template blocks). Runtime
|
|
55
|
+
-- honors at session construction; template blocks intersect (narrow-only) —
|
|
56
|
+
-- a template cannot unblock what the tenant disabled.
|
|
57
|
+
--
|
|
58
|
+
-- Admin UI to edit this column defers per §Scope Boundaries → Deferred to
|
|
59
|
+
-- Follow-Up Work; until then operators flip the column via DB mutation.
|
|
60
|
+
-- ---------------------------------------------------------------------------
|
|
61
|
+
|
|
62
|
+
ALTER TABLE "tenants"
|
|
63
|
+
ADD COLUMN IF NOT EXISTS "disabled_builtin_tools" jsonb NOT NULL DEFAULT '[]'::jsonb;
|
|
64
|
+
|
|
65
|
+
-- ---------------------------------------------------------------------------
|
|
66
|
+
-- tenant_mcp_servers — admin-approval gate for bundled MCP endpoints (plan R8).
|
|
67
|
+
--
|
|
68
|
+
-- Mirrors the existing user_mcp_tokens.status pattern: an MCP server shipped
|
|
69
|
+
-- inside an uploaded plugin registers as 'pending' and requires admin action
|
|
70
|
+
-- before any agent can invoke it. Existing rows default to 'approved' so this
|
|
71
|
+
-- migration cannot accidentally revoke working integrations (plan: "No
|
|
72
|
+
-- existing agent loses MCP").
|
|
73
|
+
--
|
|
74
|
+
-- url_hash pins (url, auth_config) at approval time; any mutation to either
|
|
75
|
+
-- field MUST revert status to 'pending' (enforced in the API resolver in
|
|
76
|
+
-- U11, not at the DB layer — keeps the invariant debuggable from the
|
|
77
|
+
-- application).
|
|
78
|
+
-- ---------------------------------------------------------------------------
|
|
79
|
+
|
|
80
|
+
ALTER TABLE "tenant_mcp_servers"
|
|
81
|
+
ADD COLUMN IF NOT EXISTS "status" text NOT NULL DEFAULT 'approved';
|
|
82
|
+
|
|
83
|
+
ALTER TABLE "tenant_mcp_servers"
|
|
84
|
+
ADD COLUMN IF NOT EXISTS "url_hash" text;
|
|
85
|
+
|
|
86
|
+
ALTER TABLE "tenant_mcp_servers"
|
|
87
|
+
ADD COLUMN IF NOT EXISTS "approved_by" uuid;
|
|
88
|
+
|
|
89
|
+
ALTER TABLE "tenant_mcp_servers"
|
|
90
|
+
ADD COLUMN IF NOT EXISTS "approved_at" timestamp with time zone;
|
|
91
|
+
|
|
92
|
+
-- Narrow the status column domain. CHECK rather than a pgEnum because:
|
|
93
|
+
-- (a) enums ship with their own migration headaches (renames are fiddly),
|
|
94
|
+
-- (b) the set is small and unlikely to grow,
|
|
95
|
+
-- (c) pattern-matches existing text-column invariants in this schema
|
|
96
|
+
-- (compliance_tier, billing statuses, etc).
|
|
97
|
+
DO $$
|
|
98
|
+
BEGIN
|
|
99
|
+
IF NOT EXISTS (
|
|
100
|
+
SELECT 1 FROM pg_constraint
|
|
101
|
+
WHERE conname = 'tenant_mcp_servers_status_allowed'
|
|
102
|
+
AND conrelid = 'public.tenant_mcp_servers'::regclass
|
|
103
|
+
) THEN
|
|
104
|
+
ALTER TABLE "tenant_mcp_servers"
|
|
105
|
+
ADD CONSTRAINT "tenant_mcp_servers_status_allowed"
|
|
106
|
+
CHECK ("status" IN ('pending', 'approved', 'rejected'));
|
|
107
|
+
END IF;
|
|
108
|
+
END
|
|
109
|
+
$$;
|
|
110
|
+
|
|
111
|
+
-- ---------------------------------------------------------------------------
|
|
112
|
+
-- plugin_uploads — audit of tenant self-serve plugin uploads (plan R1, R2).
|
|
113
|
+
--
|
|
114
|
+
-- Every POST /api/plugins/upload writes a row in phase 1 of the three-phase
|
|
115
|
+
-- saga (plan §U10 Approach). Survives saga failures as the durable audit of
|
|
116
|
+
-- what was attempted; a background sweeper reaps orphaned staging > 1h.
|
|
117
|
+
--
|
|
118
|
+
-- Columns:
|
|
119
|
+
-- - id: server-generated PK
|
|
120
|
+
-- - tenant_id: owning tenant (FK to tenants)
|
|
121
|
+
-- - uploaded_by: the admin user who initiated the upload
|
|
122
|
+
-- - uploaded_at: wall-clock timestamp of phase-1 insert
|
|
123
|
+
-- - bundle_sha256: content hash of the zip; lets the saga detect
|
|
124
|
+
-- idempotent re-uploads without re-running phases 2/3
|
|
125
|
+
-- - plugin_name: parsed from plugin.json (`name`)
|
|
126
|
+
-- - plugin_version: parsed from plugin.json (`version`) when present
|
|
127
|
+
-- - status: 'staging' | 'installed' | 'failed'
|
|
128
|
+
-- - s3_staging_prefix: intermediate upload key before phase-2 rename
|
|
129
|
+
-- - error_message: populated on failure, null on success
|
|
130
|
+
-- ---------------------------------------------------------------------------
|
|
131
|
+
|
|
132
|
+
CREATE TABLE IF NOT EXISTS "plugin_uploads" (
|
|
133
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
134
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE CASCADE,
|
|
135
|
+
"uploaded_by" uuid,
|
|
136
|
+
"uploaded_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
137
|
+
"bundle_sha256" text NOT NULL,
|
|
138
|
+
"plugin_name" text NOT NULL,
|
|
139
|
+
"plugin_version" text,
|
|
140
|
+
"status" text NOT NULL DEFAULT 'staging',
|
|
141
|
+
"s3_staging_prefix" text,
|
|
142
|
+
"error_message" text
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
-- Status domain. Same rationale as tenant_mcp_servers above.
|
|
146
|
+
DO $$
|
|
147
|
+
BEGIN
|
|
148
|
+
IF NOT EXISTS (
|
|
149
|
+
SELECT 1 FROM pg_constraint
|
|
150
|
+
WHERE conname = 'plugin_uploads_status_allowed'
|
|
151
|
+
AND conrelid = 'public.plugin_uploads'::regclass
|
|
152
|
+
) THEN
|
|
153
|
+
ALTER TABLE "plugin_uploads"
|
|
154
|
+
ADD CONSTRAINT "plugin_uploads_status_allowed"
|
|
155
|
+
CHECK ("status" IN ('staging', 'installed', 'failed'));
|
|
156
|
+
END IF;
|
|
157
|
+
END
|
|
158
|
+
$$;
|
|
159
|
+
|
|
160
|
+
CREATE INDEX IF NOT EXISTS "idx_plugin_uploads_tenant"
|
|
161
|
+
ON "plugin_uploads" ("tenant_id");
|
|
162
|
+
|
|
163
|
+
-- Partial index on status — the sweeper that reaps orphan staging rows > 1h
|
|
164
|
+
-- old scans `WHERE status = 'staging'`, a tiny fraction of total rows.
|
|
165
|
+
CREATE INDEX IF NOT EXISTS "idx_plugin_uploads_status"
|
|
166
|
+
ON "plugin_uploads" ("status", "uploaded_at")
|
|
167
|
+
WHERE "status" = 'staging';
|
|
168
|
+
|
|
169
|
+
-- ---------------------------------------------------------------------------
|
|
170
|
+
-- Slug renames — per U1 census bucket `needs-explicit-migration`.
|
|
171
|
+
--
|
|
172
|
+
-- The U1 census (docs/plans/2026-04-23-007-feat-v1-agent-architecture-final-
|
|
173
|
+
-- call-plan.census.md) reports zero slugs in this bucket as of 2026-04-24,
|
|
174
|
+
-- so this block is intentionally empty. The comment stays so a future run
|
|
175
|
+
-- that does require slug renames has the pattern documented inline rather
|
|
176
|
+
-- than rediscovered from the plan:
|
|
177
|
+
--
|
|
178
|
+
-- UPDATE "skill_catalog" SET "slug" = "slug" || '-legacy'
|
|
179
|
+
-- WHERE "slug" IN ('<old1>', '<old2>');
|
|
180
|
+
-- UPDATE "agent_skills" SET "skill_id" = "skill_id" || '-legacy'
|
|
181
|
+
-- WHERE "skill_id" IN ('<old1>', '<old2>');
|
|
182
|
+
-- ---------------------------------------------------------------------------
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-- thread_turns.kind column.
|
|
2
|
+
--
|
|
3
|
+
-- Adds a `kind` field to distinguish agent-turn rows (default) from
|
|
4
|
+
-- system events (escalate/delegate) that U2 of the thread-detail cleanup
|
|
5
|
+
-- plan writes in place of the dropped thread_comments table. Prerequisite
|
|
6
|
+
-- for U2 — without this column the escalate/delegate refactor can't land.
|
|
7
|
+
--
|
|
8
|
+
-- See docs/plans/2026-04-24-002-refactor-thread-detail-pre-launch-cleanup-plan.md
|
|
9
|
+
-- (Unit U12 — prerequisite migration).
|
|
10
|
+
--
|
|
11
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
12
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0026_thread_turns_add_kind.sql
|
|
13
|
+
--
|
|
14
|
+
-- Drift detection:
|
|
15
|
+
-- pnpm db:migrate-manual
|
|
16
|
+
--
|
|
17
|
+
-- Pre-migration invariants:
|
|
18
|
+
-- - thread_turns exists.
|
|
19
|
+
-- - thread_turns.kind does not yet exist.
|
|
20
|
+
--
|
|
21
|
+
-- creates-column: public.thread_turns.kind
|
|
22
|
+
-- creates: public.idx_thread_turns_kind
|
|
23
|
+
|
|
24
|
+
ALTER TABLE "thread_turns"
|
|
25
|
+
ADD COLUMN IF NOT EXISTS "kind" text NOT NULL DEFAULT 'agent_turn';
|
|
26
|
+
|
|
27
|
+
CREATE INDEX IF NOT EXISTS "idx_thread_turns_kind"
|
|
28
|
+
ON "thread_turns" ("kind");
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
-- Resolved Capability Manifest schema — U15 part 1/3 of plan #007.
|
|
2
|
+
--
|
|
3
|
+
-- Lands two tables inert (no runtime capture yet):
|
|
4
|
+
-- capability_catalog — unified skill / tool / mcp-server registry
|
|
5
|
+
-- resolved_capability_manifests — append-only per-session audit
|
|
6
|
+
--
|
|
7
|
+
-- Plus a conservative backfill:
|
|
8
|
+
-- - Every existing skill_catalog row becomes a capability_catalog row
|
|
9
|
+
-- with type='skill', source='builtin'.
|
|
10
|
+
-- - Six built-in tools are seeded with type='tool', source='builtin'
|
|
11
|
+
-- (execute_code, web_search, recall, reflect, artifacts, Skill).
|
|
12
|
+
--
|
|
13
|
+
-- U15 part 2 wires container-sources/capability_manifest.py + POST to
|
|
14
|
+
-- /api/runtime/manifests. Part 3 flips SI-7 enforcement on at
|
|
15
|
+
-- Agent(tools=...) construction.
|
|
16
|
+
--
|
|
17
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
18
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0027_capability_catalog_and_manifests.sql
|
|
19
|
+
--
|
|
20
|
+
-- Drift detection: pnpm db:migrate-manual
|
|
21
|
+
--
|
|
22
|
+
-- creates: public.capability_catalog
|
|
23
|
+
-- creates: public.resolved_capability_manifests
|
|
24
|
+
-- creates: public.uq_capability_catalog_type_source_slug
|
|
25
|
+
-- creates: public.idx_capability_catalog_type
|
|
26
|
+
-- creates: public.idx_capability_catalog_source
|
|
27
|
+
-- creates: public.idx_rcm_tenant
|
|
28
|
+
-- creates: public.idx_rcm_agent
|
|
29
|
+
-- creates: public.idx_rcm_template
|
|
30
|
+
-- creates: public.idx_rcm_created_at
|
|
31
|
+
|
|
32
|
+
-- ---------------------------------------------------------------------------
|
|
33
|
+
-- Pre-flight guards — fail loudly on a partially-migrated DB.
|
|
34
|
+
-- ---------------------------------------------------------------------------
|
|
35
|
+
|
|
36
|
+
DO $$
|
|
37
|
+
BEGIN
|
|
38
|
+
IF to_regclass('public.tenants') IS NULL THEN
|
|
39
|
+
RAISE EXCEPTION '0027: public.tenants is missing — refusing to apply';
|
|
40
|
+
END IF;
|
|
41
|
+
IF to_regclass('public.agents') IS NULL THEN
|
|
42
|
+
RAISE EXCEPTION '0027: public.agents is missing — refusing to apply';
|
|
43
|
+
END IF;
|
|
44
|
+
IF to_regclass('public.skill_catalog') IS NULL THEN
|
|
45
|
+
RAISE EXCEPTION '0027: public.skill_catalog is missing — refusing to apply (U3 / migration 0025 must land first)';
|
|
46
|
+
END IF;
|
|
47
|
+
END
|
|
48
|
+
$$;
|
|
49
|
+
|
|
50
|
+
-- ---------------------------------------------------------------------------
|
|
51
|
+
-- capability_catalog — unified capability registry (plan §U15).
|
|
52
|
+
-- ---------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
CREATE TABLE IF NOT EXISTS "capability_catalog" (
|
|
55
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
56
|
+
"slug" text NOT NULL,
|
|
57
|
+
"type" text NOT NULL,
|
|
58
|
+
"source" text NOT NULL,
|
|
59
|
+
"implementation_ref" jsonb,
|
|
60
|
+
"spec" jsonb,
|
|
61
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now(),
|
|
62
|
+
"updated_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
-- Domain constraint on type. CHECK rather than pgEnum for the same
|
|
66
|
+
-- reasons cited in 0025 (portable, no enum-rename grief, small set).
|
|
67
|
+
DO $$
|
|
68
|
+
BEGIN
|
|
69
|
+
IF NOT EXISTS (
|
|
70
|
+
SELECT 1 FROM pg_constraint
|
|
71
|
+
WHERE conname = 'capability_catalog_type_allowed'
|
|
72
|
+
AND conrelid = 'public.capability_catalog'::regclass
|
|
73
|
+
) THEN
|
|
74
|
+
ALTER TABLE "capability_catalog"
|
|
75
|
+
ADD CONSTRAINT "capability_catalog_type_allowed"
|
|
76
|
+
CHECK ("type" IN ('skill', 'tool', 'mcp-server'));
|
|
77
|
+
END IF;
|
|
78
|
+
END
|
|
79
|
+
$$;
|
|
80
|
+
|
|
81
|
+
DO $$
|
|
82
|
+
BEGIN
|
|
83
|
+
IF NOT EXISTS (
|
|
84
|
+
SELECT 1 FROM pg_constraint
|
|
85
|
+
WHERE conname = 'capability_catalog_source_allowed'
|
|
86
|
+
AND conrelid = 'public.capability_catalog'::regclass
|
|
87
|
+
) THEN
|
|
88
|
+
ALTER TABLE "capability_catalog"
|
|
89
|
+
ADD CONSTRAINT "capability_catalog_source_allowed"
|
|
90
|
+
CHECK ("source" IN ('builtin', 'tenant-library', 'community'));
|
|
91
|
+
END IF;
|
|
92
|
+
END
|
|
93
|
+
$$;
|
|
94
|
+
|
|
95
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "uq_capability_catalog_type_source_slug"
|
|
96
|
+
ON "capability_catalog" ("type", "source", "slug");
|
|
97
|
+
|
|
98
|
+
CREATE INDEX IF NOT EXISTS "idx_capability_catalog_type"
|
|
99
|
+
ON "capability_catalog" ("type");
|
|
100
|
+
|
|
101
|
+
CREATE INDEX IF NOT EXISTS "idx_capability_catalog_source"
|
|
102
|
+
ON "capability_catalog" ("source");
|
|
103
|
+
|
|
104
|
+
-- ---------------------------------------------------------------------------
|
|
105
|
+
-- resolved_capability_manifests — per-session audit (plan §U15).
|
|
106
|
+
-- ---------------------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
CREATE TABLE IF NOT EXISTS "resolved_capability_manifests" (
|
|
109
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
110
|
+
"session_id" text NOT NULL,
|
|
111
|
+
"agent_id" uuid REFERENCES "agents"("id") ON DELETE SET NULL,
|
|
112
|
+
"template_id" uuid,
|
|
113
|
+
"user_id" uuid,
|
|
114
|
+
"tenant_id" uuid NOT NULL REFERENCES "tenants"("id") ON DELETE CASCADE,
|
|
115
|
+
"manifest_json" jsonb NOT NULL,
|
|
116
|
+
"created_at" timestamp with time zone NOT NULL DEFAULT now()
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
CREATE INDEX IF NOT EXISTS "idx_rcm_tenant"
|
|
120
|
+
ON "resolved_capability_manifests" ("tenant_id");
|
|
121
|
+
|
|
122
|
+
CREATE INDEX IF NOT EXISTS "idx_rcm_agent"
|
|
123
|
+
ON "resolved_capability_manifests" ("agent_id");
|
|
124
|
+
|
|
125
|
+
CREATE INDEX IF NOT EXISTS "idx_rcm_template"
|
|
126
|
+
ON "resolved_capability_manifests" ("template_id");
|
|
127
|
+
|
|
128
|
+
-- created_at index powers the 30-day TTL sweep + admin "last N manifests"
|
|
129
|
+
-- queries — both are ORDER BY created_at DESC LIMIT N.
|
|
130
|
+
CREATE INDEX IF NOT EXISTS "idx_rcm_created_at"
|
|
131
|
+
ON "resolved_capability_manifests" ("created_at" DESC);
|
|
132
|
+
|
|
133
|
+
-- ---------------------------------------------------------------------------
|
|
134
|
+
-- Backfill: every skill_catalog row becomes a capability_catalog row.
|
|
135
|
+
-- Idempotent via ON CONFLICT on the (type, source, slug) unique index —
|
|
136
|
+
-- re-running the migration is a no-op on already-seeded installations.
|
|
137
|
+
-- ---------------------------------------------------------------------------
|
|
138
|
+
|
|
139
|
+
INSERT INTO "capability_catalog" ("slug", "type", "source", "implementation_ref", "spec", "created_at", "updated_at")
|
|
140
|
+
SELECT
|
|
141
|
+
sc."slug",
|
|
142
|
+
'skill' AS "type",
|
|
143
|
+
CASE sc."source"
|
|
144
|
+
WHEN 'builtin' THEN 'builtin'
|
|
145
|
+
WHEN 'community' THEN 'community'
|
|
146
|
+
ELSE 'tenant-library'
|
|
147
|
+
END AS "source",
|
|
148
|
+
NULL::jsonb AS "implementation_ref",
|
|
149
|
+
jsonb_build_object(
|
|
150
|
+
'display_name', sc."display_name",
|
|
151
|
+
'description', sc."description",
|
|
152
|
+
'category', sc."category",
|
|
153
|
+
'version', sc."version",
|
|
154
|
+
'execution', sc."execution",
|
|
155
|
+
'mode', sc."mode"
|
|
156
|
+
) AS "spec",
|
|
157
|
+
sc."created_at",
|
|
158
|
+
sc."updated_at"
|
|
159
|
+
FROM "skill_catalog" sc
|
|
160
|
+
ON CONFLICT ("type", "source", "slug") DO NOTHING;
|
|
161
|
+
|
|
162
|
+
-- ---------------------------------------------------------------------------
|
|
163
|
+
-- Seed: six built-in tools the Strands container currently hard-codes.
|
|
164
|
+
-- implementation_ref points at the Python module that owns the tool. U15
|
|
165
|
+
-- part 3 enforces SI-7 — the runtime will refuse to register a built-in
|
|
166
|
+
-- that is not present in this table.
|
|
167
|
+
-- ---------------------------------------------------------------------------
|
|
168
|
+
|
|
169
|
+
INSERT INTO "capability_catalog" ("slug", "type", "source", "implementation_ref", "spec")
|
|
170
|
+
VALUES
|
|
171
|
+
(
|
|
172
|
+
'execute_code', 'tool', 'builtin',
|
|
173
|
+
jsonb_build_object('module_path', 'sandbox_tool', 'class_name', 'ExecuteCodeTool'),
|
|
174
|
+
jsonb_build_object(
|
|
175
|
+
'display_name', 'Execute Code',
|
|
176
|
+
'description', 'Run Python / bash / node in the per-session AgentCore Code Sandbox.'
|
|
177
|
+
)
|
|
178
|
+
),
|
|
179
|
+
(
|
|
180
|
+
'web_search', 'tool', 'builtin',
|
|
181
|
+
jsonb_build_object('module_path', 'strands_tools', 'class_name', 'web_search'),
|
|
182
|
+
jsonb_build_object(
|
|
183
|
+
'display_name', 'Web Search',
|
|
184
|
+
'description', 'Query the web via the managed Strands search tool.'
|
|
185
|
+
)
|
|
186
|
+
),
|
|
187
|
+
(
|
|
188
|
+
'recall', 'tool', 'builtin',
|
|
189
|
+
jsonb_build_object('module_path', 'memory_tools', 'class_name', 'recall'),
|
|
190
|
+
jsonb_build_object(
|
|
191
|
+
'display_name', 'Recall',
|
|
192
|
+
'description', 'Read from the agent''s memory engine (managed / Hindsight).'
|
|
193
|
+
)
|
|
194
|
+
),
|
|
195
|
+
(
|
|
196
|
+
'reflect', 'tool', 'builtin',
|
|
197
|
+
jsonb_build_object('module_path', 'memory_tools', 'class_name', 'reflect'),
|
|
198
|
+
jsonb_build_object(
|
|
199
|
+
'display_name', 'Reflect',
|
|
200
|
+
'description', 'Write a reflective note into the agent''s memory engine.'
|
|
201
|
+
)
|
|
202
|
+
),
|
|
203
|
+
(
|
|
204
|
+
'artifacts', 'tool', 'builtin',
|
|
205
|
+
jsonb_build_object('module_path', 'artifact_tools', 'class_name', 'ArtifactsTool'),
|
|
206
|
+
jsonb_build_object(
|
|
207
|
+
'display_name', 'Artifacts',
|
|
208
|
+
'description', 'Emit a structured artifact for the admin UI to render.'
|
|
209
|
+
)
|
|
210
|
+
),
|
|
211
|
+
(
|
|
212
|
+
'Skill', 'tool', 'builtin',
|
|
213
|
+
jsonb_build_object('module_path', 'skill_meta_tool', 'class_name', 'Skill'),
|
|
214
|
+
jsonb_build_object(
|
|
215
|
+
'display_name', 'Skill (meta-tool)',
|
|
216
|
+
'description', 'Invoke any skill available in the session allowlist.'
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
ON CONFLICT ("type", "source", "slug") DO NOTHING;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-- aws_s3 Aurora extension bootstrap.
|
|
2
|
+
--
|
|
3
|
+
-- Enables `aws_s3.query_export_to_s3(...)` and its supporting helpers for
|
|
4
|
+
-- destructive-migration pre-drop snapshots (see U5 of the thread-detail
|
|
5
|
+
-- cleanup plan) and any future caller that wants direct SQL → S3 exports.
|
|
6
|
+
--
|
|
7
|
+
-- Requires: Aurora cluster with an IAM role associated that grants s3
|
|
8
|
+
-- PutObject on the target bucket. The role is provisioned by U13 (see
|
|
9
|
+
-- terraform/modules/data/aurora-postgres — aws_rds_cluster_role_association
|
|
10
|
+
-- with feature_name = "s3Export"). Without the role association this
|
|
11
|
+
-- extension installs successfully but calls to query_export_to_s3 fail at
|
|
12
|
+
-- runtime with an AccessDenied-style error.
|
|
13
|
+
--
|
|
14
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
15
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0028_aws_s3_extension.sql
|
|
16
|
+
--
|
|
17
|
+
-- Drift detection:
|
|
18
|
+
-- pnpm db:migrate-manual (reporter now recognizes `-- creates-extension:`)
|
|
19
|
+
--
|
|
20
|
+
-- Pre-migration invariants:
|
|
21
|
+
-- - Caller has rds_superuser on the cluster (required for CREATE EXTENSION).
|
|
22
|
+
-- - Aurora Postgres engine version supports aws_s3 (14.9+ / 15.2+).
|
|
23
|
+
--
|
|
24
|
+
-- creates-extension: aws_s3
|
|
25
|
+
|
|
26
|
+
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
-- V1 agent-architecture — column drop (U6 of plan #007).
|
|
2
|
+
--
|
|
3
|
+
-- Drops the legacy `skill_catalog.execution` and `skill_catalog.mode` columns
|
|
4
|
+
-- plus the `idx_skill_catalog_execution` index. The runtime no longer branches
|
|
5
|
+
-- on these fields: the `composition` + `declarative` execution types were
|
|
6
|
+
-- deleted in U6, and the remaining `script` / `context` distinction is read
|
|
7
|
+
-- from each skill's on-disk `skill.yaml` by the runtime —
|
|
8
|
+
-- never from the catalog table.
|
|
9
|
+
--
|
|
10
|
+
-- See docs/plans/2026-04-23-007-feat-v1-agent-architecture-final-call-plan.md
|
|
11
|
+
-- §Implementation Units → U6.
|
|
12
|
+
--
|
|
13
|
+
-- Apply manually (matches the 0018+ hand-rolled convention):
|
|
14
|
+
-- psql "$DATABASE_URL" -f packages/database-pg/drizzle/0029_collapse_execution_types.sql
|
|
15
|
+
--
|
|
16
|
+
-- Drift detection:
|
|
17
|
+
-- pnpm db:migrate-manual
|
|
18
|
+
--
|
|
19
|
+
-- Pre-migration invariants:
|
|
20
|
+
-- - skill_catalog exists
|
|
21
|
+
-- - no TypeScript / Python code reads the execution or mode columns
|
|
22
|
+
-- on the skill_catalog table (enforced by U6 PR's grep-for-zero
|
|
23
|
+
-- check, see the plan's §U6 verification block).
|
|
24
|
+
--
|
|
25
|
+
-- drops-column: public.skill_catalog.execution
|
|
26
|
+
-- drops-column: public.skill_catalog.mode
|
|
27
|
+
|
|
28
|
+
DO $$
|
|
29
|
+
BEGIN
|
|
30
|
+
IF to_regclass('public.skill_catalog') IS NULL THEN
|
|
31
|
+
RAISE EXCEPTION 'skill_catalog table missing — cannot drop execution/mode columns on a fresh stage';
|
|
32
|
+
END IF;
|
|
33
|
+
END $$;
|
|
34
|
+
|
|
35
|
+
-- The runtime cutover (PR #U6) ships before this migration. Once deployed
|
|
36
|
+
-- the columns are unread; the drop is a pure cleanup.
|
|
37
|
+
ALTER TABLE skill_catalog DROP COLUMN IF EXISTS execution;
|
|
38
|
+
ALTER TABLE skill_catalog DROP COLUMN IF EXISTS mode;
|
|
39
|
+
|
|
40
|
+
-- The execution-keyed index tracked skill_catalog.execution and is dead once
|
|
41
|
+
-- that column is gone. DROP IF EXISTS keeps the migration idempotent.
|
|
42
|
+
DROP INDEX IF EXISTS idx_skill_catalog_execution;
|