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.
Files changed (474) hide show
  1. package/README.md +42 -38
  2. package/dist/{api-client-ASJWIG3Z.js → api-client-4VT3FWOH.js} +1 -1
  3. package/dist/{chunk-JEHV35EU.js → chunk-H7AB42ES.js} +340 -30
  4. package/dist/cli.js +22157 -9229
  5. package/dist/commands/enterprise/templates/deploy-repo/.github/workflows/deploy.yml +17 -6
  6. package/dist/commands/enterprise/templates/deploy-repo/docs/runbook.md +81 -9
  7. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +183 -21
  8. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +1 -2
  9. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +286 -0
  10. package/dist/drizzle/0000_petite_marvel_apes.sql +1188 -0
  11. package/dist/drizzle/0001_milky_surge.sql +103 -0
  12. package/dist/drizzle/0002_aberrant_mattie_franklin.sql +41 -0
  13. package/dist/drizzle/0003_exotic_ogun.sql +3 -0
  14. package/dist/drizzle/0004_glamorous_magneto.sql +2 -0
  15. package/dist/drizzle/0005_ancient_nocturne.sql +2 -0
  16. package/dist/drizzle/0006_new_colonel_america.sql +2 -0
  17. package/dist/drizzle/0007_unique_external_task_id.sql +31 -0
  18. package/dist/drizzle/0008_external_task_id_column.sql +43 -0
  19. package/dist/drizzle/0009_evaluations.sql +64 -0
  20. package/dist/drizzle/0010_eval_agent_template.sql +2 -0
  21. package/dist/drizzle/0011_eval_run_template.sql +2 -0
  22. package/dist/drizzle/0012_eval_seed_unique.sql +16 -0
  23. package/dist/drizzle/0013_motionless_white_queen.sql +140 -0
  24. package/dist/drizzle/0014_wiki_aggregation.sql +11 -0
  25. package/dist/drizzle/0015_pg_trgm_alias_title_indexes.sql +9 -0
  26. package/dist/drizzle/0016_wiki_schema_drops.sql +24 -0
  27. package/dist/drizzle/0017_wiki_places.sql +46 -0
  28. package/dist/drizzle/0018_agent_workspace_overlay.sql +26 -0
  29. package/dist/drizzle/0018_cool_firebird.sql +24 -0
  30. package/dist/drizzle/0018_skill_runs.sql +84 -0
  31. package/dist/drizzle/0019_condemned_dragon_man.sql +95 -0
  32. package/dist/drizzle/0019_webhook_skill_runs.sql +58 -0
  33. package/dist/drizzle/0020_crazy_the_anarchist.sql +9 -0
  34. package/dist/drizzle/0020_mutation_idempotency.sql +64 -0
  35. package/dist/drizzle/0021_crm_work_links.sql +76 -0
  36. package/dist/drizzle/0021_skill_runs_completion_hmac.sql +33 -0
  37. package/dist/drizzle/0022_add_billing_tables.sql +70 -0
  38. package/dist/drizzle/0022_seed_thinkwork_admin_permissions.sql +160 -0
  39. package/dist/drizzle/0022_stripe_billing_indexes.sql +48 -0
  40. package/dist/drizzle/0023_tenants_deactivation.sql +27 -0
  41. package/dist/drizzle/0024_tenant_mcp_admin_keys.sql +63 -0
  42. package/dist/drizzle/0025_v1_agent_architecture.sql +182 -0
  43. package/dist/drizzle/0026_thread_turns_add_kind.sql +28 -0
  44. package/dist/drizzle/0027_capability_catalog_and_manifests.sql +219 -0
  45. package/dist/drizzle/0028_aws_s3_extension.sql +26 -0
  46. package/dist/drizzle/0029_collapse_execution_types.sql +42 -0
  47. package/dist/drizzle/0030_retire_composition_primitives.sql +48 -0
  48. package/dist/drizzle/0031_thread_cleanup_drops.sql +131 -0
  49. package/dist/drizzle/0032_add_browser_automation_template_config.sql +24 -0
  50. package/dist/drizzle/0033_agent_operation_leases.sql +32 -0
  51. package/dist/drizzle/0034_agent_workspace_events.sql +116 -0
  52. package/dist/drizzle/0035_workspace_review_decisions.sql +19 -0
  53. package/dist/drizzle/0036_user_scoped_memory_wiki.sql +152 -0
  54. package/dist/drizzle/0037_user_profile_operating_model.sql +34 -0
  55. package/dist/drizzle/0042_agent_runtime_selector.sql +41 -0
  56. package/dist/drizzle/0043_wiki_search_tsv_tokenization.sql +48 -0
  57. package/dist/drizzle/0044_add_web_search_template_config.sql +7 -0
  58. package/dist/drizzle/0045_add_send_email_template_config.sql +7 -0
  59. package/dist/drizzle/0046_tenant_mcp_context_tools.sql +26 -0
  60. package/dist/drizzle/0047_add_context_engine_template_config.sql +7 -0
  61. package/dist/drizzle/0048_tenant_context_provider_settings.sql +22 -0
  62. package/dist/drizzle/0050_brain_v0_entity_subtype.sql +29 -0
  63. package/dist/drizzle/0051_brain_v0_tenant_entity_pages.sql +170 -0
  64. package/dist/drizzle/0052_brain_v0_external_refs.sql +41 -0
  65. package/dist/drizzle/0053_brain_v0_unresolved_mentions_subtype.sql +48 -0
  66. package/dist/drizzle/0054_wiki_compile_jobs_input.sql +28 -0
  67. package/dist/drizzle/0055_routines_stepfunctions_substrate.sql +202 -0
  68. package/dist/drizzle/0056_routine_step_events_dedup_idx.sql +25 -0
  69. package/dist/drizzle/0057_archive_legacy_python_routines.sql +36 -0
  70. package/dist/drizzle/0058_routines_visibility_and_owning_agent.sql +61 -0
  71. package/dist/drizzle/0061_routine_execution_asl_version_id.sql +29 -0
  72. package/dist/drizzle/0062_migrate_pi_to_flue.sql +110 -0
  73. package/dist/drizzle/0063_threads_session_data.sql +23 -0
  74. package/dist/drizzle/0064_tenant_credentials.sql +65 -0
  75. package/dist/drizzle/0067_thinkwork_computers_phase_one.sql +174 -0
  76. package/dist/drizzle/0068_drop_system_workflows_and_activation.sql +115 -0
  77. package/dist/drizzle/0069_compliance_schema.sql +364 -0
  78. package/dist/drizzle/0070_compliance_aurora_roles.sql +171 -0
  79. package/dist/drizzle/0072_threads_computer_ownership.sql +24 -0
  80. package/dist/drizzle/0073_compliance_tenant_anchor_state.sql +105 -0
  81. package/dist/drizzle/0074_compliance_event_hash_index.sql +49 -0
  82. package/dist/drizzle/0075_scheduled_jobs_computer_ownership.sql +27 -0
  83. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +69 -0
  84. package/dist/drizzle/0077_computers_primary_agent_id.sql +38 -0
  85. package/dist/drizzle/0078_tenant_customize_catalog.sql +46 -0
  86. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +53 -0
  87. package/dist/drizzle/0081_routines_catalog_slug.sql +42 -0
  88. package/dist/drizzle/0082_messages_parts_jsonb.sql +52 -0
  89. package/dist/drizzle/0083_computer_runbooks.sql +103 -0
  90. package/dist/drizzle/0084_artifacts_favorited_at.sql +32 -0
  91. package/dist/drizzle/0085_seed_thinkwork_computer_default_template.sql +46 -0
  92. package/dist/drizzle/0086_update_default_template_models.sql +19 -0
  93. package/dist/drizzle/0087_retire_oss_connectors.sql +77 -0
  94. package/dist/drizzle/0088_compliance_event_types_finance_pilot.sql +37 -0
  95. package/dist/drizzle/0089_remove_maniflow_eval_seeds.sql +81 -0
  96. package/dist/drizzle/0089_wiki_schema_extraction.sql +315 -0
  97. package/dist/drizzle/0090_brain_schema_extraction.sql +274 -0
  98. package/dist/drizzle/0091_drop_wiki_brain_compat_views.sql +118 -0
  99. package/dist/drizzle/0092_finish_oss_connector_retirement.sql +97 -0
  100. package/dist/drizzle/0093_eval_runs_scheduled_job_id.sql +23 -0
  101. package/dist/drizzle/0094_slack_workspace_app.sql +140 -0
  102. package/dist/drizzle/0095_eval_runs_computer_id.sql +22 -0
  103. package/dist/drizzle/0096_true_redteam_eval_seed_cleanup.sql +67 -0
  104. package/dist/drizzle/0097_shared_computers.sql +191 -0
  105. package/dist/drizzle/0098_business_ontology.sql +587 -0
  106. package/dist/drizzle/0099_thread_idle_learning.sql +145 -0
  107. package/dist/drizzle/0100_ontology_gated_brain_dynamic_subtypes.sql +7 -0
  108. package/dist/drizzle/0101_ontology_gated_unresolved_mentions_dynamic_subtypes.sql +7 -0
  109. package/dist/drizzle/0102_wiki_brain_owner_repair.sql +87 -0
  110. package/dist/drizzle/0103_brain_section_source_trigger_repair.sql +75 -0
  111. package/dist/drizzle/0104_expand_seed_ontology_for_user_memory.sql +166 -0
  112. package/dist/drizzle/0105_spaces_domain.sql +349 -0
  113. package/dist/drizzle/0106_expand_seed_ontology_for_triples.sql +173 -0
  114. package/dist/drizzle/0106_space_threads_participants.sql +197 -0
  115. package/dist/drizzle/0107_linked_task_mirror.sql +245 -0
  116. package/dist/drizzle/0108_message_mentions.sql +95 -0
  117. package/dist/drizzle/0109_space_owned_threads.sql +217 -0
  118. package/dist/drizzle/0110_thread_participant_read_state.sql +21 -0
  119. package/dist/drizzle/0111_agents_tenant_name_unique.sql +38 -0
  120. package/dist/drizzle/0112_recast_spaces_as_contextual_workrooms.sql +138 -0
  121. package/dist/drizzle/0113_agents_own_runtime_fields.sql +48 -0
  122. package/dist/drizzle/0114_migrate_templates_to_agents_and_spaces.sql +361 -0
  123. package/dist/drizzle/0115_remove_computer_eval_template_dependencies.sql +69 -0
  124. package/dist/drizzle/0116_backfill_thread_participants_access.sql +126 -0
  125. package/dist/drizzle/0117_space_access_mode.sql +40 -0
  126. package/dist/drizzle/0118_normalize_tenant_member_principal_type.sql +41 -0
  127. package/dist/drizzle/0119_space_knowledge_bases.sql +126 -0
  128. package/dist/drizzle/0120_space_automations.sql +58 -0
  129. package/dist/drizzle/0121_drop_computer_runbooks.sql +26 -0
  130. package/dist/drizzle/0122_space_email_triggers.sql +24 -0
  131. package/dist/drizzle/0123_single_platform_agent_and_overrides.sql +58 -0
  132. package/dist/drizzle/0124_thread_turns_finalized_at.sql +17 -0
  133. package/dist/drizzle/0125_drop_space_agent_assignments.sql +42 -0
  134. package/dist/drizzle/0126_migrate_flue_to_pi.sql +42 -0
  135. package/dist/drizzle/0127_runtime_type_observability.sql +28 -0
  136. package/dist/drizzle/0128_drop_eval_test_cases_agent_id.sql +37 -0
  137. package/dist/drizzle/0129_drop_code_factory_tables.sql +43 -0
  138. package/dist/drizzle/0129_eval_results_system_prompt.sql +30 -0
  139. package/dist/drizzle/0130_drop_teams_and_team_id_columns.sql +54 -0
  140. package/dist/drizzle/0131_drop_skill_catalog_and_tenant_skills.sql +33 -0
  141. package/dist/drizzle/0132_drop_computer_tables.sql +31 -0
  142. package/dist/drizzle/0133_drop_seed_view_tombstones.sql +79 -0
  143. package/dist/drizzle/0133_thread_turns_system_prompt.sql +22 -0
  144. package/dist/drizzle/0134_drop_dead_agent_runtime_tables.sql +53 -0
  145. package/dist/drizzle/0135_native_checklist_linked_tasks.sql +48 -0
  146. package/dist/drizzle/0136_goal_ledger.sql +55 -0
  147. package/dist/drizzle/0136_space_email_trigger_status.sql +66 -0
  148. package/dist/drizzle/0137_thread_participant_pins.sql +25 -0
  149. package/dist/drizzle/0138_users_cognito_sub.sql +30 -0
  150. package/dist/drizzle/0139_mobile_turn_client_id.sql +23 -0
  151. package/dist/drizzle/0140_workspace_folder_names.sql +36 -0
  152. package/dist/drizzle/0141_eval_runs_desktop_pi_provenance.sql +31 -0
  153. package/dist/drizzle/0142_pi_only_agent_runtime.sql +61 -0
  154. package/dist/drizzle/0143_add_web_extract_builtin_config.sql +28 -0
  155. package/dist/drizzle/0144_skill_catalog_index.sql +40 -0
  156. package/dist/drizzle/0145_knowledge_graph_thread_ingest.sql +512 -0
  157. package/dist/drizzle/0146_knowledge_graph_source_scope.sql +413 -0
  158. package/dist/drizzle/0147_knowledge_graph_scope_trigger_qualification.sql +211 -0
  159. package/dist/drizzle/0148_user_cost_attribution.sql +171 -0
  160. package/dist/drizzle/0149_managed_mcp_servers.sql +64 -0
  161. package/dist/drizzle/0149_user_model_approvals.sql +89 -0
  162. package/dist/drizzle/0150_bootstrap_first_admin_claim.sql +11 -0
  163. package/dist/drizzle/0151_managed_deployments.sql +91 -0
  164. package/dist/drizzle/0152_agent_profiles.sql +81 -0
  165. package/dist/drizzle/0153_message_mentions_agent_profile.sql +9 -0
  166. package/dist/drizzle/0154_customer_deployment_sessions.sql +61 -0
  167. package/dist/drizzle/0155_tenant_model_catalog.sql +152 -0
  168. package/dist/drizzle/0156_bootstrap_credential_leases.sql +52 -0
  169. package/dist/drizzle/0157_knowledge_graph_observations_source.sql +79 -0
  170. package/dist/drizzle/0158_pending_user_questions.sql +80 -0
  171. package/dist/drizzle/0158_wiki_tenant_scope.sql +38 -0
  172. package/dist/drizzle/0159_agent_profiles_space_local.sql +49 -0
  173. package/dist/drizzle/0159_application_plugins.sql +193 -0
  174. package/dist/drizzle/0159_eval_scoring_version.sql +46 -0
  175. package/dist/drizzle/0160_compliance_event_types_plugins.sql +37 -0
  176. package/dist/drizzle/0160_eval_datasets.sql +75 -0
  177. package/dist/drizzle/0160_eval_results_thread_turn.sql +35 -0
  178. package/dist/drizzle/0161_eval_run_pinning.sql +54 -0
  179. package/dist/drizzle/0161_tenant_mcp_servers_plugin_source.sql +62 -0
  180. package/dist/drizzle/0162_eval_result_override.sql +49 -0
  181. package/dist/drizzle/0163_eval_replay_tool_allowlist.sql +50 -0
  182. package/dist/drizzle/0164_eval_replay_tool_override_mode.sql +52 -0
  183. package/dist/drizzle/0165_plugin_premium_entitlements.sql +153 -0
  184. package/dist/drizzle/0166_company_brain_substrate_contract.sql +386 -0
  185. package/dist/drizzle/0167_company_brain_artifact_manifest_runtime.sql +85 -0
  186. package/dist/drizzle/0168_eval_skill_gate.sql +44 -0
  187. package/dist/drizzle/0169_release_update_jobs.sql +67 -0
  188. package/dist/drizzle/0170_email_channel_plugin.sql +291 -0
  189. package/dist/drizzle/0171_linked_task_external_providers.sql +30 -0
  190. package/dist/drizzle/0172_email_channel_sendgrid_provider.sql +8 -0
  191. package/dist/drizzle/0173_auth_provider_resources.sql +83 -0
  192. package/dist/drizzle/0174_workos_auth_bridges.sql +37 -0
  193. package/dist/drizzle/0175_workos_auth_sessions.sql +38 -0
  194. package/dist/drizzle/0176_n8n_agent_step_runs.sql +107 -0
  195. package/dist/drizzle/0177_workflow_control_plane.sql +281 -0
  196. package/dist/drizzle/0178_workflow_backfill_existing_routines.sql +525 -0
  197. package/dist/drizzle/0179_tenant_goal_budget_settings.sql +21 -0
  198. package/dist/drizzle/0180_skill_drafts.sql +89 -0
  199. package/dist/drizzle/0181_skill_draft_publish_status.sql +21 -0
  200. package/dist/drizzle/0182_agent_loops.sql +260 -0
  201. package/dist/drizzle/0183_okf_artifact_manifests.sql +52 -0
  202. package/dist/drizzle/0184_skill_catalog_trust_cache.sql +35 -0
  203. package/dist/drizzle/0185_agent_loop_space.sql +16 -0
  204. package/dist/drizzle/0186_tenant_mcp_runtime_metadata.sql +10 -0
  205. package/dist/drizzle/0187_native_work_items.sql +220 -0
  206. package/dist/drizzle/0188_company_etl_plugin_rename.sql +99 -0
  207. package/dist/drizzle/0189_trace_cost_substrate.sql +247 -0
  208. package/dist/drizzle/0190_billing_export_reconciliation.sql +101 -0
  209. package/dist/drizzle/0191_open_engine_work_item_queue.sql +66 -0
  210. package/dist/drizzle/0192_work_item_labels.sql +44 -0
  211. package/dist/drizzle/0193_work_item_documents.sql +31 -0
  212. package/dist/drizzle/0194_memory_retain_attempts.sql +103 -0
  213. package/dist/drizzle/0194_work_item_comments.sql +35 -0
  214. package/dist/drizzle/0195_plugin_app_overlays.sql +45 -0
  215. package/dist/drizzle/0196_pi_extensions.sql +118 -0
  216. package/dist/drizzle/0197_eval_profiles.sql +150 -0
  217. package/dist/drizzle/0198_eval_runs_unstable.sql +27 -0
  218. package/dist/drizzle/0199_eval_runs_cost_partial.sql +27 -0
  219. package/dist/drizzle/meta/_journal.json +160 -0
  220. package/dist/plugins/README.md +162 -0
  221. package/dist/plugins/catalog/package.json +40 -0
  222. package/dist/plugins/catalog/scripts/build-catalog.ts +120 -0
  223. package/dist/plugins/catalog/scripts/generate-plugin-registry.ts +144 -0
  224. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +86 -0
  225. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +308 -0
  226. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +861 -0
  227. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +124 -0
  228. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +120 -0
  229. package/dist/plugins/catalog/src/catalog.ts +434 -0
  230. package/dist/plugins/catalog/src/contracts.ts +1498 -0
  231. package/dist/plugins/catalog/src/index.ts +4 -0
  232. package/dist/plugins/catalog/src/plugin-package.ts +171 -0
  233. package/dist/plugins/catalog/src/registry/generated-first-party.ts +76 -0
  234. package/dist/plugins/catalog/src/registry/index.ts +1 -0
  235. package/dist/plugins/catalog/tsconfig.json +8 -0
  236. package/dist/plugins/company-brain/README.md +37 -0
  237. package/dist/plugins/company-brain/package.json +33 -0
  238. package/dist/plugins/company-brain/runtime/cognee/Dockerfile +11 -0
  239. package/dist/plugins/company-brain/smoke/cognee-managed-app-smoke.mjs +458 -0
  240. package/dist/plugins/company-brain/smoke/cognee-memory-cutover-smoke.mjs +539 -0
  241. package/dist/plugins/company-brain/smoke/company-brain-context-engine-smoke.mjs +312 -0
  242. package/dist/plugins/company-brain/smoke/company-brain-operations-smoke.mjs +449 -0
  243. package/dist/plugins/company-brain/smoke/company-brain-plugin-smoke.mjs +655 -0
  244. package/dist/plugins/company-brain/smoke/hindsight-memory-isolation-smoke.mjs +474 -0
  245. package/dist/plugins/company-brain/src/api/cognee-client.ts +896 -0
  246. package/dist/plugins/company-brain/src/api/cognee-cluster-identity.ts +49 -0
  247. package/dist/plugins/company-brain/src/api/cognee-memory-scope.ts +84 -0
  248. package/dist/plugins/company-brain/src/api/context-engine-provider.ts +888 -0
  249. package/dist/plugins/company-brain/src/api/migration.ts +665 -0
  250. package/dist/plugins/company-brain/src/deployment/cognee-managed-app.ts +396 -0
  251. package/dist/plugins/company-brain/src/index.ts +62 -0
  252. package/dist/plugins/company-brain/src/manifest.ts +112 -0
  253. package/dist/plugins/company-brain/terraform/cognee/README.md +263 -0
  254. package/dist/plugins/company-brain/terraform/cognee/main.tf +766 -0
  255. package/dist/plugins/company-brain/terraform/cognee/outputs.tf +144 -0
  256. package/dist/plugins/company-brain/terraform/cognee/variables.tf +402 -0
  257. package/dist/plugins/company-brain/test/api/cognee-client.test.ts +562 -0
  258. package/dist/plugins/company-brain/test/api/cognee-memory-scope.test.ts +74 -0
  259. package/dist/plugins/company-brain/test/api/context-engine-provider.test.ts +447 -0
  260. package/dist/plugins/company-brain/test/api/migration.test.ts +465 -0
  261. package/dist/plugins/company-brain/test/manifest.test.ts +95 -0
  262. package/dist/plugins/company-brain/tsconfig.json +8 -0
  263. package/dist/plugins/company-data/README.md +49 -0
  264. package/dist/plugins/company-data/package.json +21 -0
  265. package/dist/plugins/company-data/src/index.ts +30 -0
  266. package/dist/plugins/company-data/src/manifest.ts +26 -0
  267. package/dist/plugins/company-data/test/manifest.test.ts +116 -0
  268. package/dist/plugins/company-data/tsconfig.json +8 -0
  269. package/dist/plugins/company-etl/README.md +46 -0
  270. package/dist/plugins/company-etl/package.json +21 -0
  271. package/dist/plugins/company-etl/src/index.ts +29 -0
  272. package/dist/plugins/company-etl/src/manifest.ts +26 -0
  273. package/dist/plugins/company-etl/test/manifest.test.ts +108 -0
  274. package/dist/plugins/company-etl/tsconfig.json +8 -0
  275. package/dist/plugins/email-channel/README.md +41 -0
  276. package/dist/plugins/email-channel/package.json +22 -0
  277. package/dist/plugins/email-channel/src/index.ts +36 -0
  278. package/dist/plugins/email-channel/src/manifest.ts +44 -0
  279. package/dist/plugins/email-channel/src/provider-contract.ts +36 -0
  280. package/dist/plugins/email-channel/test/manifest.test.ts +119 -0
  281. package/dist/plugins/email-channel/tsconfig.json +8 -0
  282. package/dist/plugins/lastmile/README.md +50 -0
  283. package/dist/plugins/lastmile/package.json +23 -0
  284. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +661 -0
  285. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +572 -0
  286. package/dist/plugins/lastmile/src/discovery.fixture.ts +64 -0
  287. package/dist/plugins/lastmile/src/index.ts +46 -0
  288. package/dist/plugins/lastmile/src/manifest.ts +139 -0
  289. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +266 -0
  290. package/dist/plugins/lastmile/test/discovery.test.ts +88 -0
  291. package/dist/plugins/lastmile/tsconfig.json +8 -0
  292. package/dist/plugins/n8n/README.md +201 -0
  293. package/dist/plugins/n8n/n8n-app/README.md +33 -0
  294. package/dist/plugins/n8n/n8n-app/package.json +23 -0
  295. package/dist/plugins/n8n/n8n-app/src/application-config.ts +45 -0
  296. package/dist/plugins/n8n/n8n-app/src/front-components/thinkwork-workflows.front-component.tsx +970 -0
  297. package/dist/plugins/n8n/n8n-app/src/lib/n8n-app-data.ts +190 -0
  298. package/dist/plugins/n8n/n8n-app/src/vite-env.d.ts +7 -0
  299. package/dist/plugins/n8n/n8n-app/tsconfig.json +15 -0
  300. package/dist/plugins/n8n/package.json +35 -0
  301. package/dist/plugins/n8n/runtime/Dockerfile +18 -0
  302. package/dist/plugins/n8n/runtime/n8n-task-runners.json +14 -0
  303. package/dist/plugins/n8n/runtime/n8n-task-runners.json.template +14 -0
  304. package/dist/plugins/n8n/runtime/package-lock.json +13 -0
  305. package/dist/plugins/n8n/runtime/package.json +7 -0
  306. package/dist/plugins/n8n/scripts/sync-thinkwork-app.mjs +268 -0
  307. package/dist/plugins/n8n/smoke/README.md +95 -0
  308. package/dist/plugins/n8n/smoke/n8n-agent-step-bridge-smoke.mjs +866 -0
  309. package/dist/plugins/n8n/smoke/n8n-integrated-app-smoke.mjs +262 -0
  310. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +409 -0
  311. package/dist/plugins/n8n/smoke/n8n-mcp-smoke.mjs +624 -0
  312. package/dist/plugins/n8n/src/deployment/image-build.ts +172 -0
  313. package/dist/plugins/n8n/src/deployment/managed-app.ts +429 -0
  314. package/dist/plugins/n8n/src/index.ts +79 -0
  315. package/dist/plugins/n8n/src/manifest.ts +403 -0
  316. package/dist/plugins/n8n/src/package-config.ts +186 -0
  317. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/SKILL.md +76 -0
  318. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  319. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  320. package/dist/plugins/n8n/src/skills/n8n-workflow-operator/references/workflow-authoring.md +45 -0
  321. package/dist/plugins/n8n/terraform/n8n/README.md +113 -0
  322. package/dist/plugins/n8n/terraform/n8n/main.tf +918 -0
  323. package/dist/plugins/n8n/terraform/n8n/outputs.tf +124 -0
  324. package/dist/plugins/n8n/terraform/n8n/scripts/sync-database.py +250 -0
  325. package/dist/plugins/n8n/terraform/n8n/scripts/test_sync_database.py +55 -0
  326. package/dist/plugins/n8n/terraform/n8n/variables.tf +354 -0
  327. package/dist/plugins/n8n/test/image-build.test.ts +118 -0
  328. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +353 -0
  329. package/dist/plugins/n8n/test/manifest.test.ts +278 -0
  330. package/dist/plugins/n8n/test/package-config.test.ts +57 -0
  331. package/dist/plugins/n8n/tsconfig.json +8 -0
  332. package/dist/plugins/sendgrid/README.md +30 -0
  333. package/dist/plugins/sendgrid/package.json +22 -0
  334. package/dist/plugins/sendgrid/src/index.ts +36 -0
  335. package/dist/plugins/sendgrid/src/manifest.ts +37 -0
  336. package/dist/plugins/sendgrid/src/provider-contract.ts +14 -0
  337. package/dist/plugins/sendgrid/test/manifest.test.ts +80 -0
  338. package/dist/plugins/sendgrid/tsconfig.json +8 -0
  339. package/dist/plugins/twenty/README.md +78 -0
  340. package/dist/plugins/twenty/package.json +27 -0
  341. package/dist/plugins/twenty/scripts/__tests__/sync-thinkwork-app.test.mjs +67 -0
  342. package/dist/plugins/twenty/scripts/sync-thinkwork-app.mjs +185 -0
  343. package/dist/plugins/twenty/scripts/wire-thinkwork-workflow.mjs +658 -0
  344. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +359 -0
  345. package/dist/plugins/twenty/smoke/twenty-mcp-oauth-smoke.mjs +574 -0
  346. package/dist/plugins/twenty/src/api/cutover.ts +209 -0
  347. package/dist/plugins/twenty/src/deployment/managed-app.ts +253 -0
  348. package/dist/plugins/twenty/src/index.ts +55 -0
  349. package/dist/plugins/twenty/src/manifest.ts +259 -0
  350. package/dist/plugins/twenty/terraform/twenty/README.md +97 -0
  351. package/dist/plugins/twenty/terraform/twenty/main.tf +829 -0
  352. package/dist/plugins/twenty/terraform/twenty/outputs.tf +79 -0
  353. package/dist/plugins/twenty/terraform/twenty/variables.tf +268 -0
  354. package/dist/plugins/twenty/test/api/cutover.test.ts +183 -0
  355. package/dist/plugins/twenty/test/manifest.test.ts +463 -0
  356. package/dist/plugins/twenty/tsconfig.json +9 -0
  357. package/dist/plugins/twenty/twenty-app/.nvmrc +1 -0
  358. package/dist/plugins/twenty/twenty-app/README.md +148 -0
  359. package/dist/plugins/twenty/twenty-app/package.json +30 -0
  360. package/dist/plugins/twenty/twenty-app/src/application-config.ts +44 -0
  361. package/dist/plugins/twenty/twenty-app/src/constants/universal-identifiers.ts +18 -0
  362. package/dist/plugins/twenty/twenty-app/src/default-role.ts +24 -0
  363. package/dist/plugins/twenty/twenty-app/src/front-components/thinkwork-settings.front-component.tsx +299 -0
  364. package/dist/plugins/twenty/twenty-app/src/logic-functions/thinkwork-webhook.logic-function.ts +354 -0
  365. package/dist/plugins/twenty/twenty-app/tsconfig.json +14 -0
  366. package/dist/plugins/twenty/twenty-app/yarn.lock +4144 -0
  367. package/dist/plugins/workos-auth/package.json +22 -0
  368. package/dist/plugins/workos-auth/src/index.ts +30 -0
  369. package/dist/plugins/workos-auth/src/manifest.ts +40 -0
  370. package/dist/plugins/workos-auth/src/provider-contract.ts +39 -0
  371. package/dist/plugins/workos-auth/test/manifest.test.ts +94 -0
  372. package/dist/plugins/workos-auth/tsconfig.json +8 -0
  373. package/dist/scripts/bootstrap-workspace.sh +162 -0
  374. package/dist/scripts/post-deploy.sh +290 -0
  375. package/dist/terraform/examples/greenfield/main.tf +903 -75
  376. package/dist/terraform/examples/greenfield/terraform.tfvars.example +67 -8
  377. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +2 -2
  378. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +8 -9
  379. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +227 -0
  380. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +277 -0
  381. package/dist/terraform/modules/app/agentcore-memory/README.md +6 -6
  382. package/dist/terraform/modules/app/agentcore-memory/main.tf +1 -1
  383. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +40 -9
  384. package/dist/terraform/modules/app/agentcore-pi/README.md +61 -0
  385. package/dist/terraform/modules/app/agentcore-pi/main.tf +453 -0
  386. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +38 -0
  387. package/dist/terraform/modules/app/agentcore-pi/variables.tf +145 -0
  388. package/dist/terraform/modules/app/agentcore-platform/main.tf +83 -0
  389. package/dist/terraform/modules/app/agentcore-runtime/main.tf +9 -11
  390. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +5 -1
  391. package/dist/terraform/modules/app/customer-domain/main.tf +483 -0
  392. package/dist/terraform/modules/app/deployment-control-plane/README.md +47 -0
  393. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +24 -0
  394. package/dist/terraform/modules/app/deployment-control-plane/main.tf +614 -0
  395. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +54 -0
  396. package/dist/terraform/modules/app/deployment-control-plane/runner.py +4720 -0
  397. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +3026 -0
  398. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +96 -0
  399. package/dist/terraform/modules/app/hindsight-memory/README.md +25 -23
  400. package/dist/terraform/modules/app/hindsight-memory/main.tf +26 -2
  401. package/dist/terraform/modules/app/lambda-api/eval-fanout.tf +17 -50
  402. package/dist/terraform/modules/app/lambda-api/handlers.tf +1290 -679
  403. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +933 -0
  404. package/dist/terraform/modules/app/lambda-api/main.tf +14 -527
  405. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +3 -19
  406. package/dist/terraform/modules/app/lambda-api/outputs.tf +50 -6
  407. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +163 -0
  408. package/dist/terraform/modules/app/lambda-api/slack-app-secrets.tf +3 -1
  409. package/dist/terraform/modules/app/lambda-api/stripe-secrets.tf +3 -1
  410. package/dist/terraform/modules/app/lambda-api/variables.tf +240 -53
  411. package/dist/terraform/modules/app/lambda-api/workspace-events.tf +2 -25
  412. package/dist/terraform/modules/app/ses-email/main.tf +143 -30
  413. package/dist/terraform/modules/app/static-site/main.tf +4 -3
  414. package/dist/terraform/modules/app/www-dns/main.tf +45 -5
  415. package/dist/terraform/modules/app/www-dns/outputs.tf +10 -0
  416. package/dist/terraform/modules/app/www-dns/variables.tf +24 -0
  417. package/dist/terraform/modules/data/aurora-postgres/main.tf +15 -1
  418. package/dist/terraform/modules/data/compliance-exports-bucket/main.tf +1 -1
  419. package/dist/terraform/modules/data/compliance-exports-bucket/variables.tf +6 -0
  420. package/dist/terraform/modules/foundation/cognito/main.tf +167 -11
  421. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  422. package/dist/terraform/modules/foundation/cognito/variables.tf +110 -0
  423. package/dist/terraform/modules/foundation/vpc/main.tf +45 -3
  424. package/dist/terraform/modules/foundation/vpc/outputs.tf +20 -0
  425. package/dist/terraform/modules/foundation/vpc/variables.tf +18 -0
  426. package/dist/terraform/modules/thinkwork/README.md +71 -0
  427. package/dist/terraform/modules/thinkwork/main.tf +1325 -174
  428. package/dist/terraform/modules/thinkwork/outputs.tf +457 -24
  429. package/dist/terraform/modules/thinkwork/variables.tf +1169 -93
  430. package/dist/terraform/schema.graphql +82 -9
  431. package/dist/workspace-defaults/files/AGENTS.md +344 -0
  432. package/dist/workspace-defaults/files/CONTEXT.md +8 -0
  433. package/dist/workspace-defaults/files/GUARDRAILS.md +51 -0
  434. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +65 -0
  435. package/dist/workspace-defaults/files/ROUTER.md +24 -0
  436. package/dist/workspace-defaults/files/SPACE.md +62 -0
  437. package/dist/workspace-defaults/files/TOOLS.md +65 -0
  438. package/dist/workspace-defaults/files/USER.md +40 -0
  439. package/dist/workspace-defaults/files/mcp.json +3 -0
  440. package/dist/workspace-defaults/files/memory/contacts.md +13 -0
  441. package/dist/workspace-defaults/files/memory/lessons.md +13 -0
  442. package/dist/workspace-defaults/files/memory/preferences.md +12 -0
  443. package/dist/workspace-defaults/files/skills/.gitkeep +1 -0
  444. package/dist/workspace-defaults/files/skills/artifact-builder/SKILL.md +79 -0
  445. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +166 -0
  446. package/dist/workspace-defaults/files/skills/automation-loop-designer/SKILL.md +120 -0
  447. package/dist/workspace-defaults/files/skills/skill-creator/LICENSE.txt +202 -0
  448. package/dist/workspace-defaults/files/skills/skill-creator/SKILL.md +485 -0
  449. package/dist/workspace-defaults/files/skills/skill-creator/UPSTREAM.json +124 -0
  450. package/dist/workspace-defaults/files/skills/skill-creator/agents/analyzer.md +274 -0
  451. package/dist/workspace-defaults/files/skills/skill-creator/agents/comparator.md +202 -0
  452. package/dist/workspace-defaults/files/skills/skill-creator/agents/grader.md +223 -0
  453. package/dist/workspace-defaults/files/skills/skill-creator/assets/eval_review.html +146 -0
  454. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  455. package/dist/workspace-defaults/files/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  456. package/dist/workspace-defaults/files/skills/skill-creator/references/schemas.md +430 -0
  457. package/dist/workspace-defaults/files/skills/skill-creator/scripts/__init__.py +0 -0
  458. package/dist/workspace-defaults/files/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  459. package/dist/workspace-defaults/files/skills/skill-creator/scripts/generate_report.py +326 -0
  460. package/dist/workspace-defaults/files/skills/skill-creator/scripts/improve_description.py +247 -0
  461. package/dist/workspace-defaults/files/skills/skill-creator/scripts/package_skill.py +136 -0
  462. package/dist/workspace-defaults/files/skills/skill-creator/scripts/quick_validate.py +103 -0
  463. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_eval.py +310 -0
  464. package/dist/workspace-defaults/files/skills/skill-creator/scripts/run_loop.py +328 -0
  465. package/dist/workspace-defaults/files/skills/skill-creator/scripts/utils.py +47 -0
  466. package/package.json +1 -1
  467. package/dist/terraform/modules/app/agentcore-flue/README.md +0 -58
  468. package/dist/terraform/modules/app/agentcore-flue/main.tf +0 -323
  469. package/dist/terraform/modules/app/agentcore-flue/outputs.tf +0 -23
  470. package/dist/terraform/modules/app/agentcore-flue/variables.tf +0 -97
  471. package/dist/terraform/modules/app/computer-runtime/README.md +0 -15
  472. package/dist/terraform/modules/app/computer-runtime/main.tf +0 -406
  473. package/dist/terraform/modules/app/computer-runtime/outputs.tf +0 -75
  474. package/dist/terraform/modules/app/computer-runtime/variables.tf +0 -66
@@ -0,0 +1,145 @@
1
+ -- Purpose: add requester idle memory learning orchestration state and run history.
2
+ -- Plan: docs/plans/2026-05-18-001-feat-requester-idle-memory-learning-plan.md (U1)
3
+ -- Apply manually: psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0099_thread_idle_learning.sql
4
+ -- creates: public.thread_idle_learning_state
5
+ -- creates: public.uq_thread_idle_learning_state_thread
6
+ -- creates: public.idx_thread_idle_learning_state_tenant_requester
7
+ -- creates: public.idx_thread_idle_learning_state_tenant_status_scheduled
8
+ -- creates: public.idx_thread_idle_learning_state_scheduled_job
9
+ -- creates: public.thread_idle_learning_runs
10
+ -- creates: public.idx_thread_idle_learning_runs_thread_created
11
+ -- creates: public.idx_thread_idle_learning_runs_requester_created
12
+ -- creates: public.idx_thread_idle_learning_runs_status
13
+ -- creates: public.idx_thread_idle_learning_runs_scheduled_job
14
+ -- creates: public.uq_scheduled_jobs_thread_idle_learning_thread
15
+ -- creates-constraint: public.thread_idle_learning_state.thread_idle_learning_state_tenant_id_tenants_id_fk
16
+ -- creates-constraint: public.thread_idle_learning_state.thread_idle_learning_state_thread_id_threads_id_fk
17
+ -- creates-constraint: public.thread_idle_learning_state.thread_idle_learning_state_computer_id_computers_id_fk
18
+ -- creates-constraint: public.thread_idle_learning_state.thread_idle_learning_state_requester_user_id_users_id_fk
19
+ -- creates-constraint: public.thread_idle_learning_state.thread_idle_learning_state_scheduled_job_id_scheduled_jobs_id_fk
20
+ -- creates-constraint: public.thread_idle_learning_state.thread_idle_learning_state_status_allowed
21
+ -- creates-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_tenant_id_tenants_id_fk
22
+ -- creates-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_thread_id_threads_id_fk
23
+ -- creates-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_computer_id_computers_id_fk
24
+ -- creates-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_requester_user_id_users_id_fk
25
+ -- creates-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_scheduled_job_id_scheduled_jobs_id_fk
26
+ -- creates-constraint: public.thread_idle_learning_runs.thread_idle_learning_runs_status_allowed
27
+
28
+ \set ON_ERROR_STOP on
29
+
30
+ BEGIN;
31
+
32
+ SET LOCAL lock_timeout = '5s';
33
+ SET LOCAL statement_timeout = '120s';
34
+
35
+ CREATE TABLE IF NOT EXISTS public.thread_idle_learning_state (
36
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
37
+ tenant_id uuid NOT NULL,
38
+ thread_id uuid NOT NULL,
39
+ computer_id uuid,
40
+ requester_user_id uuid,
41
+ activity_sequence integer NOT NULL DEFAULT 0,
42
+ last_activity_at timestamptz NOT NULL,
43
+ scheduled_for timestamptz,
44
+ scheduled_job_id uuid,
45
+ status text NOT NULL DEFAULT 'idle_scheduled',
46
+ last_run_id uuid,
47
+ created_at timestamptz NOT NULL DEFAULT now(),
48
+ updated_at timestamptz NOT NULL DEFAULT now(),
49
+ CONSTRAINT thread_idle_learning_state_tenant_id_tenants_id_fk
50
+ FOREIGN KEY (tenant_id)
51
+ REFERENCES public.tenants(id)
52
+ ON DELETE CASCADE,
53
+ CONSTRAINT thread_idle_learning_state_thread_id_threads_id_fk
54
+ FOREIGN KEY (thread_id)
55
+ REFERENCES public.threads(id)
56
+ ON DELETE CASCADE,
57
+ CONSTRAINT thread_idle_learning_state_computer_id_computers_id_fk
58
+ FOREIGN KEY (computer_id)
59
+ REFERENCES public.computers(id)
60
+ ON DELETE SET NULL,
61
+ CONSTRAINT thread_idle_learning_state_requester_user_id_users_id_fk
62
+ FOREIGN KEY (requester_user_id)
63
+ REFERENCES public.users(id)
64
+ ON DELETE SET NULL,
65
+ CONSTRAINT thread_idle_learning_state_scheduled_job_id_scheduled_jobs_id_fk
66
+ FOREIGN KEY (scheduled_job_id)
67
+ REFERENCES public.scheduled_jobs(id)
68
+ ON DELETE SET NULL,
69
+ CONSTRAINT thread_idle_learning_state_status_allowed
70
+ CHECK (status IN ('idle_scheduled','running','stale','changed','no_change','failed','disabled'))
71
+ );
72
+
73
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_thread_idle_learning_state_thread
74
+ ON public.thread_idle_learning_state (thread_id);
75
+
76
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_state_tenant_requester
77
+ ON public.thread_idle_learning_state (tenant_id, requester_user_id, updated_at);
78
+
79
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_state_tenant_status_scheduled
80
+ ON public.thread_idle_learning_state (tenant_id, status, scheduled_for);
81
+
82
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_state_scheduled_job
83
+ ON public.thread_idle_learning_state (scheduled_job_id);
84
+
85
+ CREATE TABLE IF NOT EXISTS public.thread_idle_learning_runs (
86
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
87
+ tenant_id uuid NOT NULL,
88
+ thread_id uuid NOT NULL,
89
+ computer_id uuid,
90
+ requester_user_id uuid,
91
+ scheduled_job_id uuid,
92
+ activity_sequence integer NOT NULL,
93
+ scheduled_for timestamptz,
94
+ started_at timestamptz NOT NULL DEFAULT now(),
95
+ finished_at timestamptz,
96
+ status text NOT NULL DEFAULT 'running',
97
+ changed_files jsonb,
98
+ candidate_summary jsonb,
99
+ report_s3_key text,
100
+ error text,
101
+ budget jsonb,
102
+ metadata jsonb,
103
+ created_at timestamptz NOT NULL DEFAULT now(),
104
+ updated_at timestamptz NOT NULL DEFAULT now(),
105
+ CONSTRAINT thread_idle_learning_runs_tenant_id_tenants_id_fk
106
+ FOREIGN KEY (tenant_id)
107
+ REFERENCES public.tenants(id)
108
+ ON DELETE CASCADE,
109
+ CONSTRAINT thread_idle_learning_runs_thread_id_threads_id_fk
110
+ FOREIGN KEY (thread_id)
111
+ REFERENCES public.threads(id)
112
+ ON DELETE CASCADE,
113
+ CONSTRAINT thread_idle_learning_runs_computer_id_computers_id_fk
114
+ FOREIGN KEY (computer_id)
115
+ REFERENCES public.computers(id)
116
+ ON DELETE SET NULL,
117
+ CONSTRAINT thread_idle_learning_runs_requester_user_id_users_id_fk
118
+ FOREIGN KEY (requester_user_id)
119
+ REFERENCES public.users(id)
120
+ ON DELETE SET NULL,
121
+ CONSTRAINT thread_idle_learning_runs_scheduled_job_id_scheduled_jobs_id_fk
122
+ FOREIGN KEY (scheduled_job_id)
123
+ REFERENCES public.scheduled_jobs(id)
124
+ ON DELETE SET NULL,
125
+ CONSTRAINT thread_idle_learning_runs_status_allowed
126
+ CHECK (status IN ('running','stale_noop','changed','no_change','failed','rolled_back'))
127
+ );
128
+
129
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_runs_thread_created
130
+ ON public.thread_idle_learning_runs (tenant_id, thread_id, created_at);
131
+
132
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_runs_requester_created
133
+ ON public.thread_idle_learning_runs (tenant_id, requester_user_id, created_at);
134
+
135
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_runs_status
136
+ ON public.thread_idle_learning_runs (tenant_id, status);
137
+
138
+ CREATE INDEX IF NOT EXISTS idx_thread_idle_learning_runs_scheduled_job
139
+ ON public.thread_idle_learning_runs (scheduled_job_id);
140
+
141
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_scheduled_jobs_thread_idle_learning_thread
142
+ ON public.scheduled_jobs (tenant_id, (config->>'threadId'))
143
+ WHERE trigger_type = 'thread_idle_memory_learning';
144
+
145
+ COMMIT;
@@ -0,0 +1,7 @@
1
+ -- Ontology-gated Brain materialization needs tenant-approved entity type slugs,
2
+ -- not a fixed seed-only subtype CHECK.
3
+ --
4
+ -- drops-constraint: brain.pages.pages_entity_subtype_allowed
5
+
6
+ ALTER TABLE brain.pages
7
+ DROP CONSTRAINT IF EXISTS pages_entity_subtype_allowed;
@@ -0,0 +1,7 @@
1
+ -- Ontology-gate rejections must preserve tenant-approved or proposed entity
2
+ -- slugs as suggestion evidence, not only the legacy seed subtype list.
3
+ --
4
+ -- drops-constraint: wiki.unresolved_mentions.unresolved_mentions_entity_subtype_allowed
5
+
6
+ ALTER TABLE wiki.unresolved_mentions
7
+ DROP CONSTRAINT IF EXISTS unresolved_mentions_entity_subtype_allowed;
@@ -0,0 +1,87 @@
1
+ -- Wiki/Brain owner repair after schema extraction.
2
+ --
3
+ -- The 0089/0090 schema-extraction migrations moved already-populated tables
4
+ -- from public.* into wiki.* and brain.*. In long-lived dev/prod databases,
5
+ -- those tables can retain an older table owner even when the deployed
6
+ -- GraphQL/wiki Lambdas connect as the current migration role. Direct writes
7
+ -- to wiki.* then fail at compile time with permission errors.
8
+ --
9
+ -- Apply manually:
10
+ -- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f packages/database-pg/drizzle/0102_wiki_brain_owner_repair.sql
11
+ --
12
+ -- creates: public.view_wiki_brain_owner_repaired
13
+
14
+ \set ON_ERROR_STOP on
15
+
16
+ BEGIN;
17
+
18
+ SELECT pg_advisory_xact_lock(hashtext('wiki_brain_owner_repair'));
19
+
20
+ SET LOCAL lock_timeout = '5s';
21
+ SET LOCAL statement_timeout = '60s';
22
+
23
+ DO $$
24
+ BEGIN
25
+ IF current_database() != 'thinkwork' THEN
26
+ RAISE EXCEPTION 'wrong database: %, expected thinkwork', current_database();
27
+ END IF;
28
+ END $$;
29
+
30
+ DO $$
31
+ DECLARE
32
+ required_table text;
33
+ BEGIN
34
+ FOREACH required_table IN ARRAY ARRAY[
35
+ 'wiki.pages',
36
+ 'wiki.page_sections',
37
+ 'wiki.page_links',
38
+ 'wiki.page_aliases',
39
+ 'wiki.unresolved_mentions',
40
+ 'wiki.section_sources',
41
+ 'wiki.compile_jobs',
42
+ 'wiki.compile_cursors',
43
+ 'wiki.places',
44
+ 'brain.pages',
45
+ 'brain.page_sections',
46
+ 'brain.page_links',
47
+ 'brain.page_aliases',
48
+ 'brain.section_sources',
49
+ 'brain.external_refs'
50
+ ]
51
+ LOOP
52
+ IF to_regclass(required_table) IS NULL THEN
53
+ RAISE EXCEPTION 'pre-flight: % does not exist', required_table;
54
+ END IF;
55
+ END LOOP;
56
+ END $$;
57
+
58
+ ALTER SCHEMA wiki OWNER TO CURRENT_USER;
59
+ ALTER SCHEMA brain OWNER TO CURRENT_USER;
60
+
61
+ ALTER TABLE wiki.pages OWNER TO CURRENT_USER;
62
+ ALTER TABLE wiki.page_sections OWNER TO CURRENT_USER;
63
+ ALTER TABLE wiki.page_links OWNER TO CURRENT_USER;
64
+ ALTER TABLE wiki.page_aliases OWNER TO CURRENT_USER;
65
+ ALTER TABLE wiki.unresolved_mentions OWNER TO CURRENT_USER;
66
+ ALTER TABLE wiki.section_sources OWNER TO CURRENT_USER;
67
+ ALTER TABLE wiki.compile_jobs OWNER TO CURRENT_USER;
68
+ ALTER TABLE wiki.compile_cursors OWNER TO CURRENT_USER;
69
+ ALTER TABLE wiki.places OWNER TO CURRENT_USER;
70
+
71
+ ALTER TABLE brain.pages OWNER TO CURRENT_USER;
72
+ ALTER TABLE brain.page_sections OWNER TO CURRENT_USER;
73
+ ALTER TABLE brain.page_links OWNER TO CURRENT_USER;
74
+ ALTER TABLE brain.page_aliases OWNER TO CURRENT_USER;
75
+ ALTER TABLE brain.section_sources OWNER TO CURRENT_USER;
76
+ ALTER TABLE brain.external_refs OWNER TO CURRENT_USER;
77
+
78
+ CREATE OR REPLACE VIEW public.view_wiki_brain_owner_repaired AS
79
+ SELECT
80
+ current_database() AS database_name,
81
+ 'wiki_brain_owner_repair'::text AS repair,
82
+ true AS applied;
83
+
84
+ COMMENT ON VIEW public.view_wiki_brain_owner_repaired IS
85
+ 'Drift marker for 0102_wiki_brain_owner_repair.sql.';
86
+
87
+ COMMIT;
@@ -0,0 +1,75 @@
1
+ -- 0103_brain_section_source_trigger_repair.sql
2
+ --
3
+ -- Repair the Brain section-source tenant guard after the wiki/brain schema
4
+ -- extraction compat views were dropped in 0091. The trigger function created
5
+ -- by 0051 still joined public.tenant_entity_page_sections/pages; after 0090
6
+ -- those tables live at brain.page_sections/pages, and 0091 removed the public
7
+ -- bridge views.
8
+ --
9
+ -- creates: public.view_brain_section_source_trigger_repaired
10
+
11
+ \set ON_ERROR_STOP on
12
+
13
+ BEGIN;
14
+
15
+ SET LOCAL lock_timeout = '5s';
16
+ SET LOCAL statement_timeout = '60s';
17
+
18
+ SELECT pg_advisory_xact_lock(hashtext('repair_brain_section_source_trigger'));
19
+
20
+ DO $$
21
+ BEGIN
22
+ IF current_database() != 'thinkwork' THEN
23
+ RAISE EXCEPTION 'wrong database: %, expected thinkwork', current_database();
24
+ END IF;
25
+ END $$;
26
+
27
+ DO $$
28
+ BEGIN
29
+ IF to_regclass('brain.pages') IS NULL THEN
30
+ RAISE EXCEPTION 'pre-flight: brain.pages does not exist';
31
+ END IF;
32
+ IF to_regclass('brain.page_sections') IS NULL THEN
33
+ RAISE EXCEPTION 'pre-flight: brain.page_sections does not exist';
34
+ END IF;
35
+ IF to_regclass('brain.section_sources') IS NULL THEN
36
+ RAISE EXCEPTION 'pre-flight: brain.section_sources does not exist';
37
+ END IF;
38
+ END $$;
39
+
40
+ CREATE OR REPLACE FUNCTION public.enforce_tenant_entity_section_source_tenant()
41
+ RETURNS trigger
42
+ LANGUAGE plpgsql
43
+ AS $$
44
+ DECLARE
45
+ parent_tenant_id uuid;
46
+ BEGIN
47
+ SELECT p.tenant_id
48
+ INTO parent_tenant_id
49
+ FROM brain.page_sections s
50
+ INNER JOIN brain.pages p ON p.id = s.page_id
51
+ WHERE s.id = NEW.section_id;
52
+
53
+ IF parent_tenant_id IS NULL OR parent_tenant_id <> NEW.tenant_id THEN
54
+ RAISE EXCEPTION 'tenant_entity_section_sources tenant_id must match parent page tenant_id';
55
+ END IF;
56
+
57
+ RETURN NEW;
58
+ END;
59
+ $$;
60
+
61
+ DROP TRIGGER IF EXISTS trg_tenant_entity_section_sources_tenant
62
+ ON brain.section_sources;
63
+
64
+ CREATE TRIGGER trg_tenant_entity_section_sources_tenant
65
+ BEFORE INSERT OR UPDATE ON brain.section_sources
66
+ FOR EACH ROW
67
+ EXECUTE FUNCTION public.enforce_tenant_entity_section_source_tenant();
68
+
69
+ CREATE OR REPLACE VIEW public.view_brain_section_source_trigger_repaired AS
70
+ SELECT
71
+ 'public.enforce_tenant_entity_section_source_tenant'::text AS function_name,
72
+ 'brain.section_sources'::text AS trigger_table,
73
+ true AS repaired;
74
+
75
+ COMMIT;
@@ -0,0 +1,166 @@
1
+ -- Expand the approved seed ontology so Hindsight-to-Wiki compiles have
2
+ -- ontology-native types for user memory, travel, place, preference, and work
3
+ -- observations instead of falling back to generic Topic/Entity pages.
4
+ --
5
+ -- creates: public.view_seed_ontology_user_memory_expanded
6
+
7
+ WITH seed(slug, name, broad_type, description, guidance_notes, aliases) AS (
8
+ VALUES
9
+ ('place', 'Place', 'place', 'A city, country, neighborhood, landmark, or geographic area.', 'Capture why the place matters, parent geography, trips, visits, and user-specific context.', ARRAY['city', 'country', 'neighborhood', 'landmark']::text[]),
10
+ ('venue', 'Venue', 'place', 'A restaurant, hotel, attraction, office, store, or other named location.', 'Compile concrete visit, preference, address, and parent-place evidence without inventing ratings.', ARRAY['restaurant', 'hotel', 'attraction', 'location']::text[]),
11
+ ('trip', 'Trip', 'event', 'A travel plan, itinerary, or remembered travel episode.', 'Group places, venues, dates, companions, and open planning context from cited evidence.', ARRAY['travel', 'itinerary', 'journey']::text[]),
12
+ ('preference', 'Preference', 'preference', 'A durable user preference, taste, constraint, or priority.', 'Keep preferences compact, sourced, and scoped to what the evidence actually says.', ARRAY['taste', 'constraint', 'priority']::text[]),
13
+ ('project', 'Project', 'work', 'A sustained workstream, initiative, or build effort.', 'Track objective, current state, decisions, commitments, risks, and next work.', ARRAY['initiative', 'workstream']::text[]),
14
+ ('task', 'Task', 'work', 'A discrete task, to-do, or follow-up item.', 'Capture owner, status, due date, dependency, and source evidence when available.', ARRAY['todo', 'follow up', 'next step']::text[])
15
+ ),
16
+ active_versions AS (
17
+ SELECT DISTINCT ON (tenant_id) id, tenant_id
18
+ FROM ontology.versions
19
+ WHERE status = 'active'
20
+ ORDER BY tenant_id, version_number DESC
21
+ )
22
+ INSERT INTO ontology.entity_types (
23
+ tenant_id,
24
+ version_id,
25
+ slug,
26
+ name,
27
+ broad_type,
28
+ description,
29
+ guidance_notes,
30
+ aliases,
31
+ lifecycle_status,
32
+ approved_at
33
+ )
34
+ SELECT
35
+ v.tenant_id,
36
+ v.id,
37
+ seed.slug,
38
+ seed.name,
39
+ seed.broad_type,
40
+ seed.description,
41
+ seed.guidance_notes,
42
+ seed.aliases,
43
+ 'approved',
44
+ now()
45
+ FROM active_versions v
46
+ CROSS JOIN seed
47
+ ON CONFLICT (tenant_id, slug) DO UPDATE
48
+ SET
49
+ name = EXCLUDED.name,
50
+ broad_type = EXCLUDED.broad_type,
51
+ description = EXCLUDED.description,
52
+ guidance_notes = EXCLUDED.guidance_notes,
53
+ aliases = EXCLUDED.aliases,
54
+ lifecycle_status = 'approved',
55
+ approved_at = COALESCE(ontology.entity_types.approved_at, now()),
56
+ updated_at = now();
57
+
58
+ WITH seed(slug, name, inverse_name, source_slug, target_slug, description, source_type_slugs, target_type_slugs) AS (
59
+ VALUES
60
+ ('located_in', 'Located in', 'Contains', 'venue', 'place', 'Connects a venue or smaller place to its parent geography.', ARRAY['venue', 'place']::text[], ARRAY['place']::text[]),
61
+ ('visited_during', 'Visited during', 'Included visit to', 'venue', 'trip', 'Connects a visited place or venue to the trip where it appeared.', ARRAY['venue', 'place']::text[], ARRAY['trip']::text[]),
62
+ ('about_place', 'About place', 'Place for', 'trip', 'place', 'Connects a trip or preference to a relevant place.', ARRAY['trip', 'preference']::text[], ARRAY['place']::text[]),
63
+ ('has_preference', 'Has preference', 'Preference of', 'person', 'preference', 'Connects a person to a durable preference or constraint.', ARRAY['person']::text[], ARRAY['preference']::text[]),
64
+ ('involves_person', 'Involves person', 'Involved in', 'project', 'person', 'Connects work, travel, or decision context to a person involved in it.', ARRAY['project', 'task', 'trip', 'decision']::text[], ARRAY['person']::text[]),
65
+ ('has_task', 'Has task', 'Task for', 'project', 'task', 'Connects a project or commitment to a concrete task.', ARRAY['project', 'commitment']::text[], ARRAY['task']::text[]),
66
+ ('has_decision', 'Has decision', 'Decision for', 'project', 'decision', 'Connects a project or opportunity to a durable decision.', ARRAY['project', 'opportunity', 'customer']::text[], ARRAY['decision']::text[])
67
+ )
68
+ INSERT INTO ontology.relationship_types (
69
+ tenant_id,
70
+ version_id,
71
+ slug,
72
+ name,
73
+ inverse_name,
74
+ source_entity_type_id,
75
+ target_entity_type_id,
76
+ source_type_slugs,
77
+ target_type_slugs,
78
+ description,
79
+ lifecycle_status,
80
+ approved_at
81
+ )
82
+ SELECT
83
+ source_type.tenant_id,
84
+ source_type.version_id,
85
+ seed.slug,
86
+ seed.name,
87
+ seed.inverse_name,
88
+ source_type.id,
89
+ target_type.id,
90
+ seed.source_type_slugs,
91
+ seed.target_type_slugs,
92
+ seed.description,
93
+ 'approved',
94
+ now()
95
+ FROM seed
96
+ JOIN ontology.entity_types source_type
97
+ ON source_type.slug = seed.source_slug
98
+ JOIN ontology.entity_types target_type
99
+ ON target_type.tenant_id = source_type.tenant_id
100
+ AND target_type.slug = seed.target_slug
101
+ ON CONFLICT (tenant_id, slug) DO UPDATE
102
+ SET
103
+ name = EXCLUDED.name,
104
+ inverse_name = EXCLUDED.inverse_name,
105
+ source_entity_type_id = EXCLUDED.source_entity_type_id,
106
+ target_entity_type_id = EXCLUDED.target_entity_type_id,
107
+ source_type_slugs = EXCLUDED.source_type_slugs,
108
+ target_type_slugs = EXCLUDED.target_type_slugs,
109
+ description = EXCLUDED.description,
110
+ lifecycle_status = 'approved',
111
+ approved_at = COALESCE(ontology.relationship_types.approved_at, now()),
112
+ updated_at = now();
113
+
114
+ WITH seed(entity_slug, slug, heading, facet_type, position, prompt) AS (
115
+ VALUES
116
+ ('place', 'overview', 'Overview', 'compiled', 10, 'Summarize why this place matters in the memory evidence.'),
117
+ ('place', 'location_context', 'Location Context', 'relationship', 20, 'Capture parent geography and nearby or contained places.'),
118
+ ('place', 'related_activity', 'Related Activity', 'activity', 30, 'Capture trips, visits, and remembered events connected to this place.'),
119
+ ('venue', 'overview', 'Overview', 'compiled', 10, 'Summarize what the venue is and why it matters.'),
120
+ ('venue', 'visits', 'Visits', 'activity', 20, 'Capture sourced visits, plans, and context.'),
121
+ ('venue', 'preferences', 'Preferences', 'compiled', 30, 'Capture sourced likes, dislikes, and constraints involving this venue.'),
122
+ ('trip', 'overview', 'Overview', 'compiled', 10, 'Summarize the trip or travel episode.'),
123
+ ('trip', 'itinerary', 'Itinerary', 'activity', 20, 'Capture dates, stops, venues, and open plans.'),
124
+ ('trip', 'places', 'Places', 'relationship', 30, 'List important places and venues connected to the trip.'),
125
+ ('preference', 'summary', 'Summary', 'compiled', 10, 'Summarize the durable preference or constraint.'),
126
+ ('preference', 'evidence', 'Evidence', 'activity', 20, 'Capture the cited observations that support the preference.'),
127
+ ('project', 'overview', 'Overview', 'compiled', 10, 'Summarize the project objective and context.'),
128
+ ('project', 'current_state', 'Current State', 'operational', 20, 'Capture current progress, blockers, and status.'),
129
+ ('project', 'decisions', 'Decisions', 'compiled', 30, 'Capture durable decisions affecting the project.'),
130
+ ('project', 'next_steps', 'Next Steps', 'activity', 40, 'Capture concrete next work.'),
131
+ ('task', 'status', 'Status', 'operational', 10, 'Capture owner, status, due date, and dependency.'),
132
+ ('task', 'evidence', 'Evidence', 'activity', 20, 'Capture source evidence for the task.')
133
+ )
134
+ INSERT INTO ontology.facet_templates (
135
+ tenant_id,
136
+ entity_type_id,
137
+ slug,
138
+ heading,
139
+ facet_type,
140
+ position,
141
+ prompt,
142
+ lifecycle_status
143
+ )
144
+ SELECT
145
+ entity_types.tenant_id,
146
+ entity_types.id,
147
+ seed.slug,
148
+ seed.heading,
149
+ seed.facet_type,
150
+ seed.position,
151
+ seed.prompt,
152
+ 'approved'
153
+ FROM seed
154
+ JOIN ontology.entity_types
155
+ ON entity_types.slug = seed.entity_slug
156
+ ON CONFLICT (entity_type_id, slug) DO UPDATE
157
+ SET
158
+ heading = EXCLUDED.heading,
159
+ facet_type = EXCLUDED.facet_type,
160
+ position = EXCLUDED.position,
161
+ prompt = EXCLUDED.prompt,
162
+ lifecycle_status = 'approved',
163
+ updated_at = now();
164
+
165
+ CREATE OR REPLACE VIEW public.view_seed_ontology_user_memory_expanded AS
166
+ SELECT true AS expanded;