thinkwork-cli 0.13.1 → 1.0.0

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 (262) hide show
  1. package/README.md +3 -14
  2. package/dist/{api-client-4DZ266J5.js → api-client-4P4JZOBX.js} +3 -1
  3. package/dist/bowser-6Z6JFAIR.js +2822 -0
  4. package/dist/{chunk-Y2WHJECR.js → chunk-4OMDWYZQ.js} +5 -44
  5. package/dist/chunk-AD2NIWB5.js +6516 -0
  6. package/dist/chunk-DV3MRBR5.js +43 -0
  7. package/dist/chunk-EI5ZX7CN.js +522 -0
  8. package/dist/chunk-EUJ7X6YD.js +126 -0
  9. package/dist/chunk-GG5WKBOX.js +436 -0
  10. package/dist/chunk-I64EZSU5.js +358 -0
  11. package/dist/chunk-KMIJ5KGT.js +128 -0
  12. package/dist/chunk-MWQ7RO76.js +137 -0
  13. package/dist/chunk-OCPHU34C.js +996 -0
  14. package/dist/chunk-OLUQ4U2Z.js +1728 -0
  15. package/dist/chunk-XYM7PE2A.js +2264 -0
  16. package/dist/chunk-YQCYD6NE.js +3299 -0
  17. package/dist/cli.js +49156 -31257
  18. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +0 -1
  19. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +0 -1
  20. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +0 -14
  21. package/dist/dist-es-2OTNTL4N.js +315 -0
  22. package/dist/dist-es-2XVAH4BQ.js +14726 -0
  23. package/dist/dist-es-3DPDUJAH.js +2000 -0
  24. package/dist/dist-es-BNZTBBVC.js +176 -0
  25. package/dist/dist-es-CD2RBDAC.js +88 -0
  26. package/dist/dist-es-I4FW57PS.js +88 -0
  27. package/dist/dist-es-KL7Y5NB2.js +377 -0
  28. package/dist/dist-es-KVFWJNDY.js +318 -0
  29. package/dist/dist-es-PS73DWNL.js +70 -0
  30. package/dist/dist-es-S3NZQFGT.js +170 -0
  31. package/dist/dist-es-SGCA4P32.js +48 -0
  32. package/dist/dist-es-WBM6J4RA.js +70 -0
  33. package/dist/dist-es-ZGVADYIF.js +485 -0
  34. package/dist/dist-es-ZKC2QKD2.js +377 -0
  35. package/dist/drizzle/0076_scheduled_jobs_marco_backfill.sql +2 -1
  36. package/dist/drizzle/0079_seed_tenant_customize_catalog.sql +1 -0
  37. package/dist/drizzle/0090_brain_schema_extraction.sql +10 -0
  38. package/dist/drizzle/0132_drop_computer_tables.sql +3 -0
  39. package/dist/drizzle/0160_compliance_event_types_plugins.sql +2 -0
  40. package/dist/drizzle/0214_think137_drop_judge_evidence_roi.sql +1 -0
  41. package/dist/drizzle/0216_drop_agent_loop_versions_goal_worker_policy.sql +1 -0
  42. package/dist/drizzle/0227_analyst_reader_role.sql +17 -20
  43. package/dist/drizzle/0230_analyst_rls.sql +28 -36
  44. package/dist/drizzle/0250_kg_schema_extraction.sql +27 -0
  45. package/dist/drizzle/0251_brain_stragglers.sql +21 -0
  46. package/dist/drizzle/0253_drop_brain_substrate.sql +2 -0
  47. package/dist/drizzle/0257_agents_runtime_allow_harness.sql +24 -0
  48. package/dist/drizzle/0261_native_auth_control_plane.sql +332 -0
  49. package/dist/drizzle/0262_auth_subscription_tickets.sql +59 -0
  50. package/dist/drizzle/0263_agentcore_runtime_identifier.sql +69 -0
  51. package/dist/drizzle/0263_drop_workos_auth_runtime.sql +236 -0
  52. package/dist/drizzle/0264_auth_enrollment_attempt_limits.sql +15 -0
  53. package/dist/drizzle/0265_eval_runs_requester_identity.sql +28 -0
  54. package/dist/drizzle/0265_require_fully_valid_auth_publication.sql +27 -0
  55. package/dist/drizzle/0266_auth_identity_recovery_grants.sql +9 -0
  56. package/dist/drizzle/0266_eval_profiles_runtime_type.sql +12 -0
  57. package/dist/drizzle/0267_ontology_candidate_rejections.sql +53 -0
  58. package/dist/drizzle/0268_identity_crosswalk_routing.sql +182 -0
  59. package/dist/drizzle/0269_ontology_system_map.sql +31 -0
  60. package/dist/drizzle/0270_tool_execution_ledger.sql +115 -0
  61. package/dist/drizzle/0271_ontology_twin_declarations.sql +47 -0
  62. package/dist/drizzle/0272_identity_graph_projection_cursor.sql +23 -0
  63. package/dist/drizzle/0273_twin_materialization_suggestions.sql +29 -0
  64. package/dist/drizzle/0274_tenant_mcp_twin_keys.sql +59 -0
  65. package/dist/drizzle/0275_identity_bulk_rebuild_fence.sql +30 -0
  66. package/dist/drizzle/0276_tool_execution_ledger_allow_cascade_delete.sql +18 -0
  67. package/dist/drizzle/0277_knowledge_base_sources.sql +107 -0
  68. package/dist/drizzle/0278_kb_page_transcription.sql +55 -0
  69. package/dist/drizzle/0279_mcp_servers_off_plugin_provenance.sql +93 -0
  70. package/dist/drizzle/0280_work_item_external_refs_drop_plane_provider.sql +46 -0
  71. package/dist/drizzle/0281_tenant_mcp_twin_keys_expiry_suffix.sql +9 -0
  72. package/dist/drizzle/0282_tenant_mcp_twin_keys_grants.sql +24 -0
  73. package/dist/drizzle/0283_agents_agentcore_runtime_dispatch.sql +13 -0
  74. package/dist/drizzle/0284_user_brain_claims.sql +69 -0
  75. package/dist/drizzle/0285_tenant_mcp_twin_keys_trusted_subsystem.sql +30 -0
  76. package/dist/drizzle/0286_brain_analytics_key.sql +26 -0
  77. package/dist/drizzle/0287_brain_subject.sql +25 -0
  78. package/dist/drizzle/0288_multi_lane_identities.sql +25 -0
  79. package/dist/event-streams-7JNLJEEL.js +894 -0
  80. package/dist/event-streams-KDF5RWR6.js +1515 -0
  81. package/dist/loadSso-ETCXTR4I.js +576 -0
  82. package/dist/loadSso-UBD7KUHE.js +583 -0
  83. package/dist/plugins/README.md +2 -2
  84. package/dist/plugins/catalog/package.json +1 -5
  85. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +6 -4
  86. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +21 -21
  87. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +102 -94
  88. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +7 -8
  89. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -20
  90. package/dist/plugins/catalog/src/contracts.ts +17 -179
  91. package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -24
  92. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +1 -1
  93. package/dist/plugins/twenty/package.json +2 -1
  94. package/dist/plugins/twenty/scripts/LAMBDA_DEPLOY.md +114 -0
  95. package/dist/plugins/twenty/scripts/build-lambda.sh +29 -0
  96. package/dist/plugins/twenty/scripts/configure-product-views.ts +195 -0
  97. package/dist/plugins/twenty/scripts/lambda-handler.ts +49 -0
  98. package/dist/plugins/twenty/scripts/lib/__tests__/load-attachments.test.ts +38 -0
  99. package/dist/plugins/twenty/scripts/lib/__tests__/load-records.test.ts +145 -2
  100. package/dist/plugins/twenty/scripts/lib/__tests__/mappers.test.ts +397 -151
  101. package/dist/plugins/twenty/scripts/lib/__tests__/members-ensure.test.ts +28 -129
  102. package/dist/plugins/twenty/scripts/lib/__tests__/provision-members-db.test.ts +10 -0
  103. package/dist/plugins/twenty/scripts/lib/__tests__/schema-ensure.test.ts +13 -8
  104. package/dist/plugins/twenty/scripts/lib/lastmile-reader.ts +222 -2
  105. package/dist/plugins/twenty/scripts/lib/load-attachments.ts +29 -0
  106. package/dist/plugins/twenty/scripts/lib/load-records.ts +160 -43
  107. package/dist/plugins/twenty/scripts/lib/mappers.ts +368 -152
  108. package/dist/plugins/twenty/scripts/lib/members-ensure.ts +43 -268
  109. package/dist/plugins/twenty/scripts/lib/provision-members-db.ts +57 -0
  110. package/dist/plugins/twenty/scripts/lib/schema-ensure.ts +136 -31
  111. package/dist/plugins/twenty/scripts/migrate-lastmile.ts +254 -152
  112. package/dist/plugins/twenty/scripts/provision-twenty-members.ts +44 -1
  113. package/dist/plugins/twenty/scripts/purge-lastmile-import.ts +178 -0
  114. package/dist/plugins/twenty/scripts/restructure-products.ts +312 -0
  115. package/dist/plugins/twenty/scripts/retag-stage-values.ts +362 -0
  116. package/dist/plugins/twenty/test/manifest.test.ts +2 -4
  117. package/dist/scripts/post-deploy.sh +79 -1
  118. package/dist/signin-5QZNRSOO.js +821 -0
  119. package/dist/sso-oidc-XK673P54.js +837 -0
  120. package/dist/sts-OXI2UALF.js +1113 -0
  121. package/dist/sts-SQW4NBK3.js +1117 -0
  122. package/dist/terraform/examples/greenfield/main.tf +391 -176
  123. package/dist/terraform/examples/greenfield/terraform.tfvars.example +26 -8
  124. package/dist/terraform/modules/app/agentcore-admin/main.tf +47 -0
  125. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +39 -47
  126. package/dist/terraform/modules/app/agentcore-code-interpreter/main.tf +13 -66
  127. package/dist/terraform/modules/app/agentcore-identity/main.tf +253 -0
  128. package/dist/terraform/modules/app/agentcore-identity/outputs.tf +51 -0
  129. package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +239 -0
  130. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +22 -0
  131. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_twenty_identity.sh +16 -0
  132. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_workload_identity.sh +19 -0
  133. package/dist/terraform/modules/app/agentcore-identity/scripts/ensure_workload_identity.sh +29 -0
  134. package/dist/terraform/modules/app/agentcore-identity/scripts/read_identity.sh +55 -0
  135. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_identity.sh +73 -0
  136. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +45 -0
  137. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +123 -0
  138. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/after.tf +15 -0
  139. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/before.tf +7 -0
  140. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-after.tf +8 -0
  141. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-before.tf +9 -0
  142. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-after.tf +3 -0
  143. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-before.tf +3 -0
  144. package/dist/terraform/modules/app/agentcore-identity/variables.tf +60 -0
  145. package/dist/terraform/modules/app/agentcore-memory/README.md +46 -9
  146. package/dist/terraform/modules/app/agentcore-memory/main.tf +27 -10
  147. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +156 -24
  148. package/dist/terraform/modules/app/agentcore-pi/README.md +1 -3
  149. package/dist/terraform/modules/app/agentcore-pi/main.tf +42 -52
  150. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +3 -3
  151. package/dist/terraform/modules/app/agentcore-pi/scripts/reconcile_pi_runtime.mjs +175 -0
  152. package/dist/terraform/modules/app/agentcore-pi/variables.tf +35 -28
  153. package/dist/terraform/modules/app/agentcore-platform/main.tf +68 -0
  154. package/dist/terraform/modules/app/agentcore-runtime/main.tf +4 -20
  155. package/dist/terraform/modules/app/appsync-subscriptions/main.tf +127 -21
  156. package/dist/terraform/modules/app/appsync-subscriptions/outputs.tf +0 -6
  157. package/dist/terraform/modules/app/appsync-subscriptions/variables.tf +5 -0
  158. package/dist/terraform/modules/app/capability-broker/main.tf +2 -2
  159. package/dist/terraform/modules/app/capability-broker/variables.tf +11 -0
  160. package/dist/terraform/modules/app/deployment-control-plane/README.md +264 -0
  161. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +4 -1
  162. package/dist/terraform/modules/app/deployment-control-plane/main.tf +94 -0
  163. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +5 -0
  164. package/dist/terraform/modules/app/deployment-control-plane/runner.py +3689 -233
  165. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +2579 -140
  166. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +33 -0
  167. package/dist/terraform/modules/app/lambda-api/auth-state.tf +72 -0
  168. package/dist/terraform/modules/app/lambda-api/chat-latency-observability.tf +466 -0
  169. package/dist/terraform/modules/app/lambda-api/dispatch-dlq.tf +55 -0
  170. package/dist/terraform/modules/app/lambda-api/handlers.tf +531 -619
  171. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +350 -241
  172. package/dist/terraform/modules/app/lambda-api/main.tf +75 -13
  173. package/dist/terraform/modules/app/lambda-api/memory-alarms.tf +3 -28
  174. package/dist/terraform/modules/app/lambda-api/oauth-secrets.tf +1 -2
  175. package/dist/terraform/modules/app/lambda-api/outputs.tf +17 -10
  176. package/dist/terraform/modules/app/lambda-api/runtime-config.tf +3 -21
  177. package/dist/terraform/modules/app/lambda-api/turn-assertion.tf +45 -0
  178. package/dist/terraform/modules/app/lambda-api/variables.tf +307 -121
  179. package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/README.md +1 -1
  180. package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/main.tf +18 -18
  181. package/dist/terraform/modules/app/sandbox-log-scrubber/README.md +11 -10
  182. package/dist/terraform/modules/app/sandbox-log-scrubber/main.tf +5 -5
  183. package/dist/terraform/modules/app/static-site/main.tf +1 -1
  184. package/dist/terraform/modules/app/www-dns/main.tf +9 -27
  185. package/dist/terraform/modules/app/www-dns/variables.tf +4 -10
  186. package/dist/terraform/modules/data/aurora-postgres/README.md +34 -0
  187. package/dist/terraform/modules/data/aurora-postgres/alarms.tf +82 -0
  188. package/dist/terraform/modules/data/aurora-postgres/main.tf +27 -57
  189. package/dist/terraform/modules/data/aurora-postgres/outputs.tf +0 -9
  190. package/dist/terraform/modules/data/aurora-postgres/variables.tf +41 -0
  191. package/dist/terraform/modules/data/s3-buckets/main.tf +5 -6
  192. package/dist/terraform/modules/foundation/cognito/main.tf +367 -72
  193. package/dist/terraform/modules/foundation/cognito/outputs.tf +47 -0
  194. package/dist/terraform/modules/foundation/cognito/variables.tf +131 -9
  195. package/dist/terraform/modules/thinkwork/README.md +5 -1
  196. package/dist/terraform/modules/thinkwork/main.tf +459 -234
  197. package/dist/terraform/modules/thinkwork/outputs.tf +44 -62
  198. package/dist/terraform/modules/thinkwork/variables.tf +353 -89
  199. package/dist/terraform/schema.graphql +69 -36
  200. package/dist/workspace-defaults/files/INSTRUCTIONS.md +9 -11
  201. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +38 -35
  202. package/dist/workspace-defaults/files/ROUTER.md +1 -1
  203. package/dist/workspace-defaults/files/TOOLS.md +9 -39
  204. package/dist/workspace-defaults/files/USER.md +1 -0
  205. package/dist/workspace-defaults/files/agents/analyst/INSTRUCTIONS.md +6 -3
  206. package/dist/workspace-defaults/files/catalog-skills/brain-brief-builder/SKILL.md +165 -0
  207. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/SKILL.md +75 -0
  208. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  209. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  210. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/workflow-authoring.md +46 -0
  211. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +1 -1
  212. package/dist/workspace-defaults/files/skills/document-composer/SKILL.md +22 -3
  213. package/package.json +3 -2
  214. package/dist/drizzle/0261_thread_turns_origin_turn_index.sql +0 -11
  215. package/dist/plugins/company-data/README.md +0 -49
  216. package/dist/plugins/company-data/package.json +0 -21
  217. package/dist/plugins/company-data/src/index.ts +0 -30
  218. package/dist/plugins/company-data/src/manifest.ts +0 -26
  219. package/dist/plugins/company-data/test/manifest.test.ts +0 -116
  220. package/dist/plugins/company-data/tsconfig.json +0 -8
  221. package/dist/plugins/company-etl/README.md +0 -46
  222. package/dist/plugins/company-etl/package.json +0 -21
  223. package/dist/plugins/company-etl/src/index.ts +0 -29
  224. package/dist/plugins/company-etl/src/manifest.ts +0 -26
  225. package/dist/plugins/company-etl/test/manifest.test.ts +0 -108
  226. package/dist/plugins/company-etl/tsconfig.json +0 -8
  227. package/dist/plugins/lastmile/README.md +0 -50
  228. package/dist/plugins/lastmile/package.json +0 -23
  229. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +0 -661
  230. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +0 -572
  231. package/dist/plugins/lastmile/src/discovery.fixture.ts +0 -64
  232. package/dist/plugins/lastmile/src/index.ts +0 -46
  233. package/dist/plugins/lastmile/src/manifest.ts +0 -139
  234. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +0 -266
  235. package/dist/plugins/lastmile/test/discovery.test.ts +0 -88
  236. package/dist/plugins/lastmile/tsconfig.json +0 -8
  237. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +0 -409
  238. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +0 -359
  239. package/dist/plugins/workos-auth/package.json +0 -22
  240. package/dist/plugins/workos-auth/src/index.ts +0 -30
  241. package/dist/plugins/workos-auth/src/manifest.ts +0 -40
  242. package/dist/plugins/workos-auth/src/provider-contract.ts +0 -39
  243. package/dist/plugins/workos-auth/test/manifest.test.ts +0 -94
  244. package/dist/plugins/workos-auth/tsconfig.json +0 -8
  245. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +0 -61
  246. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +0 -227
  247. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +0 -277
  248. package/dist/terraform/modules/app/agentcore-code-interpreter/scripts/build_and_push_sandbox_base.sh +0 -70
  249. package/dist/terraform/modules/app/agentcore-harness/main.tf +0 -101
  250. package/dist/terraform/modules/app/agentcore-harness/outputs.tf +0 -9
  251. package/dist/terraform/modules/app/agentcore-harness/variables.tf +0 -25
  252. package/dist/terraform/modules/app/hindsight-memory/README.md +0 -89
  253. package/dist/terraform/modules/app/hindsight-memory/main.tf +0 -411
  254. package/dist/terraform/modules/data/bedrock-knowledge-base/main.tf +0 -102
  255. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/outputs.tf +0 -0
  256. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/sync-database.py +0 -0
  257. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/test_sync_database.py +0 -0
  258. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/variables.tf +0 -0
  259. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/README.md +0 -0
  260. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/main.tf +0 -0
  261. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/outputs.tf +0 -0
  262. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/variables.tf +0 -0
@@ -1,116 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { fileURLToPath } from "node:url";
3
- import { describe, expect, it } from "vitest";
4
-
5
- import {
6
- validatePluginManifest,
7
- type PluginComponentType,
8
- } from "@thinkwork/plugin-catalog/contracts";
9
- import { defineFirstPartyPluginPackage } from "@thinkwork/plugin-catalog/plugin-package";
10
-
11
- import { companyDataPluginPackage } from "../src";
12
- import {
13
- COMPANY_DATA_SETTINGS_SURFACE,
14
- companyDataManifest,
15
- } from "../src/manifest";
16
-
17
- describe("ThinkWork Data Warehouse plugin manifest", () => {
18
- it("validates as an inert shell plugin", () => {
19
- const validated = validatePluginManifest(companyDataManifest);
20
-
21
- expect(validated.pluginKey).toBe("company-data");
22
- expect(validated.displayName).toBe("ThinkWork Data Warehouse");
23
- expect(validated.versions[0].version).toBe("0.1.0");
24
- expect(validated.versions[0].requiredOauthScopes).toEqual([]);
25
- expect(validated.versions[0].capabilities).toEqual([]);
26
- expect(validated.versions[0].components).toEqual([
27
- {
28
- type: "ui-surface",
29
- key: "settings",
30
- displayName: "ThinkWork Data Warehouse settings",
31
- intendedMount: COMPANY_DATA_SETTINGS_SURFACE,
32
- },
33
- ]);
34
- });
35
-
36
- it("does not declare side-effecting components, OAuth scopes, or secrets", () => {
37
- const version = companyDataManifest.versions[0];
38
- const componentTypes = version.components.map(
39
- (component) => component.type as PluginComponentType,
40
- );
41
- const serializedManifest = JSON.stringify(companyDataManifest);
42
-
43
- expect(componentTypes).toEqual(["ui-surface"]);
44
- expect(componentTypes).not.toContain("infrastructure");
45
- expect(componentTypes).not.toContain("mcp-server");
46
- expect(componentTypes).not.toContain("skills");
47
- expect(version.requiredOauthScopes).toEqual([]);
48
- expect(serializedManifest).not.toMatch(
49
- /https?:\/\/|\.invalid|terraform|managedAppKey|endpointUrl|endpointFrom|credential|secret|skillMd/i,
50
- );
51
- });
52
-
53
- it("keeps customer-facing copy on the governed operational facts scope", () => {
54
- const customerFacingText = [
55
- companyDataManifest.displayName,
56
- companyDataManifest.description,
57
- ...companyDataManifest.versions[0].components.map(
58
- (component) => component.displayName,
59
- ),
60
- ].join("\n");
61
-
62
- expect(customerFacingText).toContain("ThinkWork Data Warehouse");
63
- expect(customerFacingText).toContain("governed operational facts");
64
- expect(customerFacingText).toContain("agent and UI reads");
65
- expect(customerFacingText).toContain(
66
- "later ThinkWork Data Warehouse releases",
67
- );
68
- expect(customerFacingText).not.toContain("Company Data");
69
- expect(customerFacingText).not.toMatch(
70
- /\b(stores?|loads?)\s+every\s+operational\s+row\s+in\s+Company\s+Brain/i,
71
- );
72
- expect(customerFacingText).not.toMatch(
73
- /\b(deploys?|provides?|operates?)\s+(analytics|BI|dashboards?|lakehouse query|ELT jobs?|extraction runners?|projection databases?)/i,
74
- );
75
- expect(customerFacingText).not.toMatch(
76
- /\b(replaces?|mutates?|writes? back to)\s+source systems?/i,
77
- );
78
- });
79
-
80
- it("defines a first-party package boundary under plugins/company-data", () => {
81
- const defined = defineFirstPartyPluginPackage(companyDataPluginPackage);
82
-
83
- expect(defined.packageKey).toBe("company-data");
84
- expect(defined.sourceRoot).toBe("plugins/company-data");
85
- expect(defined.ownedSources).toContainEqual({
86
- kind: "manifest",
87
- path: "plugins/company-data/src/manifest.ts",
88
- description:
89
- "Company Data catalog manifest for the shell-only plugin identity.",
90
- });
91
- expect(defined.ownedSources).toContainEqual({
92
- kind: "tests",
93
- path: "plugins/company-data/test",
94
- description:
95
- "Company Data package-local manifest and shell-boundary tests.",
96
- });
97
- expect(defined.compatibilityLinks).toEqual([]);
98
- });
99
-
100
- it("documents deferred resource deployment for future implementers", () => {
101
- const readmePath = fileURLToPath(new URL("../README.md", import.meta.url));
102
- const readme = readFileSync(readmePath, "utf8");
103
-
104
- expect(readme).toContain("intentionally does not deploy");
105
- expect(readme).toContain("extraction runners");
106
- expect(readme).toContain("projection database");
107
- expect(readme).toContain("mapping workflows");
108
- expect(readme).toContain("MCP");
109
- expect(readme).toContain("Context Engine providers");
110
- expect(readme).toContain("credentials");
111
- expect(readme).toContain("analytics UI");
112
- expect(readme).toContain("BI");
113
- expect(readme).toContain("source-system writes");
114
- expect(readme).toContain("Terraform-managed resources");
115
- });
116
- });
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "."
6
- },
7
- "include": ["./**/*.ts"]
8
- }
@@ -1,46 +0,0 @@
1
- # Company ETL Plugin
2
-
3
- The Company ETL plugin is the package-owned source boundary for the first-party
4
- ETL integration shell. This slice publishes the stable catalog
5
- identity and normal ThinkWork install path before any live integration runtime
6
- exists.
7
-
8
- The shell intentionally does not deploy connector runtime, ETL jobs, schedules,
9
- pipelines, MCP servers, skills, credentials, datalake, warehouse, query,
10
- monitoring, analytics UI, BI, bucket, warehouse, or Terraform-managed resources.
11
- Future Company ETL work should extend this `company-etl` package and version
12
- line with explicit requirements, handler-backed components, and deployed
13
- verification before introducing runtime capability.
14
-
15
- ## Owned Source
16
-
17
- - `src/manifest.ts` declares the catalog manifest with empty OAuth scopes,
18
- no capabilities, and one declared-only `ui-surface` component.
19
- - `test/manifest.test.ts` validates the shell boundary, manifest shape,
20
- customer-facing integration copy, and deferred-resource language.
21
-
22
- ## Shell Scope
23
-
24
- V1 is deliberately narrow:
25
-
26
- - Company ETL appears in the first-party plugin catalog as
27
- `company-etl@0.1.0`.
28
- - Tenant administrators can install the shell through the normal plugin
29
- install flow.
30
- - The plugin engine records only the install and one no-op UI-surface component
31
- with an empty handler reference.
32
- - Live connector runtime, ETL jobs, schedules, pipelines, MCP servers, skills,
33
- credentials, analytics UI, BI, lakehouse query UI, and infrastructure are
34
- deferred follow-up work.
35
-
36
- ## Verification Notes
37
-
38
- Package-local verification:
39
-
40
- ```bash
41
- pnpm --filter @thinkwork/plugin-company-etl test
42
- pnpm --filter @thinkwork/plugin-company-etl typecheck
43
- pnpm --filter @thinkwork/plugin-catalog test
44
- pnpm --filter @thinkwork/plugin-catalog typecheck
45
- node scripts/verify-plugin-source-boundary.mjs
46
- ```
@@ -1,21 +0,0 @@
1
- {
2
- "name": "@thinkwork/plugin-company-etl",
3
- "version": "0.0.0",
4
- "private": true,
5
- "type": "module",
6
- "main": "./src/index.ts",
7
- "exports": {
8
- ".": "./src/index.ts",
9
- "./manifest": "./src/manifest.ts"
10
- },
11
- "scripts": {
12
- "build": "tsc --build",
13
- "typecheck": "tsc --noEmit",
14
- "test": "vitest run"
15
- },
16
- "devDependencies": {
17
- "@thinkwork/plugin-catalog": "workspace:*",
18
- "typescript": "^5.5.0",
19
- "vitest": "^2.0.0"
20
- }
21
- }
@@ -1,29 +0,0 @@
1
- import { companyEtlManifest } from "./manifest";
2
-
3
- export const companyEtlPluginPackage = {
4
- packageKey: "company-etl",
5
- sourceRoot: "plugins/company-etl",
6
- manifest: companyEtlManifest,
7
- ownedSources: [
8
- {
9
- kind: "manifest",
10
- path: "plugins/company-etl/src/manifest.ts",
11
- description:
12
- "Company ETL catalog manifest for the shell-only plugin identity.",
13
- },
14
- {
15
- kind: "docs",
16
- path: "plugins/company-etl/README.md",
17
- description: "Company ETL package ownership and deferred resource notes.",
18
- },
19
- {
20
- kind: "tests",
21
- path: "plugins/company-etl/test",
22
- description:
23
- "Company ETL package-local manifest and shell-boundary tests.",
24
- },
25
- ],
26
- compatibilityLinks: [],
27
- } as const;
28
-
29
- export { companyEtlManifest };
@@ -1,26 +0,0 @@
1
- import type { PluginManifest } from "@thinkwork/plugin-catalog/contracts";
2
-
3
- export const COMPANY_ETL_SETTINGS_SURFACE =
4
- "settings.plugins.detail.tab" as const;
5
-
6
- export const companyEtlManifest = {
7
- pluginKey: "company-etl",
8
- displayName: "ThinkWork ETL",
9
- description:
10
- "Provides the tenant-managed ETL shell for moving data between SaaS apps, databases, and agent-accessible systems. Analytics dashboards, BI, warehouse query UI, and ThinkWork Data Warehouse projection behavior belong to separate plugins.",
11
- versions: [
12
- {
13
- version: "0.1.0",
14
- requiredOauthScopes: [],
15
- capabilities: [],
16
- components: [
17
- {
18
- type: "ui-surface",
19
- key: "settings",
20
- displayName: "ThinkWork ETL settings",
21
- intendedMount: COMPANY_ETL_SETTINGS_SURFACE,
22
- },
23
- ],
24
- },
25
- ],
26
- } satisfies PluginManifest;
@@ -1,108 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { fileURLToPath } from "node:url";
3
- import { describe, expect, it } from "vitest";
4
-
5
- import {
6
- validatePluginManifest,
7
- type PluginComponentType,
8
- } from "@thinkwork/plugin-catalog/contracts";
9
- import { defineFirstPartyPluginPackage } from "@thinkwork/plugin-catalog/plugin-package";
10
-
11
- import { companyEtlPluginPackage } from "../src";
12
- import {
13
- COMPANY_ETL_SETTINGS_SURFACE,
14
- companyEtlManifest,
15
- } from "../src/manifest";
16
-
17
- describe("ThinkWork ETL plugin manifest", () => {
18
- it("validates as an inert shell plugin", () => {
19
- const validated = validatePluginManifest(companyEtlManifest);
20
-
21
- expect(validated.pluginKey).toBe("company-etl");
22
- expect(validated.displayName).toBe("ThinkWork ETL");
23
- expect(validated.versions[0].version).toBe("0.1.0");
24
- expect(validated.versions[0].requiredOauthScopes).toEqual([]);
25
- expect(validated.versions[0].capabilities).toEqual([]);
26
- expect(validated.versions[0].components).toEqual([
27
- {
28
- type: "ui-surface",
29
- key: "settings",
30
- displayName: "ThinkWork ETL settings",
31
- intendedMount: COMPANY_ETL_SETTINGS_SURFACE,
32
- },
33
- ]);
34
- });
35
-
36
- it("does not declare side-effecting components, OAuth scopes, or secrets", () => {
37
- const version = companyEtlManifest.versions[0];
38
- const componentTypes = version.components.map(
39
- (component) => component.type as PluginComponentType,
40
- );
41
- const serializedManifest = JSON.stringify(companyEtlManifest);
42
-
43
- expect(componentTypes).toEqual(["ui-surface"]);
44
- expect(componentTypes).not.toContain("infrastructure");
45
- expect(componentTypes).not.toContain("mcp-server");
46
- expect(componentTypes).not.toContain("skills");
47
- expect(version.requiredOauthScopes).toEqual([]);
48
- expect(serializedManifest).not.toMatch(
49
- /https?:\/\/|\.invalid|terraform|managedAppKey|endpointUrl|endpointFrom|credential|secret|skillMd/i,
50
- );
51
- });
52
-
53
- it("keeps customer-facing copy on the ETL integration scope", () => {
54
- const customerFacingText = [
55
- companyEtlManifest.displayName,
56
- companyEtlManifest.description,
57
- ...companyEtlManifest.versions[0].components.map(
58
- (component) => component.displayName,
59
- ),
60
- ].join("\n");
61
-
62
- expect(customerFacingText).toContain("ThinkWork ETL");
63
- expect(customerFacingText).toContain("tenant-managed ETL shell");
64
- expect(customerFacingText).toContain("SaaS apps");
65
- expect(customerFacingText).toContain("agent-accessible systems");
66
- expect(customerFacingText).toContain("ThinkWork Data Warehouse projection");
67
- expect(customerFacingText).toContain("separate plugins");
68
- expect(customerFacingText).not.toContain("Company ETL");
69
- expect(customerFacingText).not.toContain("Company Data");
70
- expect(customerFacingText).not.toMatch(
71
- /\b(deploys?|provides?|operates?)\s+(analytics|BI|dashboards?|lakehouse query)/i,
72
- );
73
- });
74
-
75
- it("defines a first-party package boundary under plugins/company-etl", () => {
76
- const defined = defineFirstPartyPluginPackage(companyEtlPluginPackage);
77
-
78
- expect(defined.packageKey).toBe("company-etl");
79
- expect(defined.sourceRoot).toBe("plugins/company-etl");
80
- expect(defined.ownedSources).toContainEqual({
81
- kind: "manifest",
82
- path: "plugins/company-etl/src/manifest.ts",
83
- description:
84
- "Company ETL catalog manifest for the shell-only plugin identity.",
85
- });
86
- expect(defined.ownedSources).toContainEqual({
87
- kind: "tests",
88
- path: "plugins/company-etl/test",
89
- description:
90
- "Company ETL package-local manifest and shell-boundary tests.",
91
- });
92
- expect(defined.compatibilityLinks).toEqual([]);
93
- });
94
-
95
- it("documents deferred resource deployment for future implementers", () => {
96
- const readmePath = fileURLToPath(new URL("../README.md", import.meta.url));
97
- const readme = readFileSync(readmePath, "utf8");
98
-
99
- expect(readme).toContain("intentionally does not deploy");
100
- expect(readme).toContain("connector runtime");
101
- expect(readme).toContain("ETL jobs");
102
- expect(readme).toContain("analytics UI");
103
- expect(readme).toContain("BI");
104
- expect(readme).toContain("warehouse");
105
- expect(readme).toContain("MCP");
106
- expect(readme).toContain("Terraform-managed resources");
107
- });
108
- });
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "."
6
- },
7
- "include": ["./**/*.ts"]
8
- }
@@ -1,50 +0,0 @@
1
- # LastMile Plugin
2
-
3
- LastMile is a first-party MCP and skill plugin package for the THNK-31
4
- `plugins/<plugin-key>/` source boundary. It is skill/MCP-only in this migration
5
- and does not declare managed application infrastructure.
6
-
7
- ## Package Contract
8
-
9
- - `package.json` exposes `@thinkwork/plugin-lastmile`.
10
- - `src/index.ts` exports `lastmilePluginPackage` with owned source descriptors
11
- and the LastMile package contract.
12
- - `src/manifest.ts` owns the LastMile catalog manifest.
13
- - `src/api/tasks-adapter.ts` owns the LastMile task adapter for MCP task
14
- create/read/comment calls.
15
- - `src/discovery.fixture.ts` owns the recorded OAuth protected-resource
16
- metadata fixture used by drift tests.
17
- - `smoke/lastmile-plugin-smoke.mjs` owns the LastMile live plugin smoke.
18
- - `test/discovery.test.ts` keeps the manifest aligned with recorded protected
19
- resource discovery metadata.
20
-
21
- ## Verification
22
-
23
- ```bash
24
- pnpm --filter @thinkwork/plugin-lastmile test
25
- pnpm --filter @thinkwork/plugin-lastmile typecheck
26
- ```
27
-
28
- For deployed plugin-catalog verification, LastMile is the final practical gate:
29
-
30
- 1. Confirm the signed catalog artifact published from `plugins/lastmile` source
31
- contains the expected LastMile version and source commit.
32
- 2. Refresh the GitHub-backed catalog through Settings -> Plugins or wait for the
33
- API cache TTL, then confirm the latest verified version appears next to the
34
- tenant's installed pinned version.
35
- 3. Install or upgrade LastMile through ThinkWork, not by editing Terraform,
36
- local Docker, or vendor-side resources directly.
37
- 4. Run the package-owned smoke:
38
-
39
- ```bash
40
- SMOKE_ENABLE_LASTMILE_PLUGIN=1 \
41
- node plugins/lastmile/smoke/lastmile-plugin-smoke.mjs
42
-
43
- # After the manual OAuth consent step:
44
- SMOKE_ENABLE_LASTMILE_PLUGIN=1 \
45
- node plugins/lastmile/smoke/lastmile-plugin-smoke.mjs --post-activation
46
- ```
47
-
48
- Passing phase 2 means ThinkWork exposes `lastmile--crm`, `lastmile--tasks`, and
49
- `lastmile--routing` for the activated user through `/api/mcp/tools/list`, while
50
- the non-activated user remains excluded.
@@ -1,23 +0,0 @@
1
- {
2
- "name": "@thinkwork/plugin-lastmile",
3
- "version": "0.0.0",
4
- "private": true,
5
- "type": "module",
6
- "main": "./src/index.ts",
7
- "exports": {
8
- ".": "./src/index.ts",
9
- "./manifest": "./src/manifest.ts",
10
- "./discovery.fixture": "./src/discovery.fixture.ts",
11
- "./tasks-adapter": "./src/api/tasks-adapter.ts"
12
- },
13
- "scripts": {
14
- "build": "tsc --build",
15
- "typecheck": "tsc --noEmit",
16
- "test": "vitest run"
17
- },
18
- "devDependencies": {
19
- "@thinkwork/plugin-catalog": "workspace:*",
20
- "typescript": "^5.5.0",
21
- "vitest": "^2.0.0"
22
- }
23
- }