thinkwork-cli 0.13.2 → 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 (231) hide show
  1. package/README.md +3 -14
  2. package/dist/{api-client-JYZXYQJR.js → api-client-4P4JZOBX.js} +1 -1
  3. package/dist/{chunk-Z2F6RJFR.js → chunk-4OMDWYZQ.js} +4 -5
  4. package/dist/{chunk-ILZKG5WV.js → chunk-AD2NIWB5.js} +434 -69
  5. package/dist/chunk-MWQ7RO76.js +137 -0
  6. package/dist/{chunk-DVPBI5HM.js → chunk-OLUQ4U2Z.js} +26 -26
  7. package/dist/{chunk-QOERT44A.js → chunk-YQCYD6NE.js} +57 -44
  8. package/dist/cli.js +4400 -16431
  9. package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +0 -1
  10. package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +0 -1
  11. package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +0 -14
  12. package/dist/{dist-es-CRV46D5B.js → dist-es-2OTNTL4N.js} +4 -4
  13. package/dist/{dist-es-ENBUC3JP.js → dist-es-2XVAH4BQ.js} +2 -2
  14. package/dist/{dist-es-DCY4IC3Y.js → dist-es-3DPDUJAH.js} +2 -2
  15. package/dist/{dist-es-G7PTG75M.js → dist-es-BNZTBBVC.js} +1 -1
  16. package/dist/{dist-es-GKDBE7E6.js → dist-es-CD2RBDAC.js} +1 -1
  17. package/dist/{dist-es-R7FGL2IB.js → dist-es-I4FW57PS.js} +1 -1
  18. package/dist/{dist-es-USORBXZ5.js → dist-es-KVFWJNDY.js} +4 -4
  19. package/dist/{dist-es-HY3535OI.js → dist-es-PS73DWNL.js} +2 -2
  20. package/dist/{dist-es-LDE437AM.js → dist-es-S3NZQFGT.js} +1 -1
  21. package/dist/{dist-es-G54LBMRN.js → dist-es-SGCA4P32.js} +1 -1
  22. package/dist/{dist-es-Q57SZXZ7.js → dist-es-WBM6J4RA.js} +2 -2
  23. package/dist/{dist-es-P26FWFLT.js → dist-es-ZGVADYIF.js} +8 -8
  24. package/dist/drizzle/0227_analyst_reader_role.sql +17 -26
  25. package/dist/drizzle/0230_analyst_rls.sql +28 -45
  26. package/dist/drizzle/0261_native_auth_control_plane.sql +7 -3
  27. package/dist/drizzle/0270_tool_execution_ledger.sql +115 -0
  28. package/dist/drizzle/0271_ontology_twin_declarations.sql +47 -0
  29. package/dist/drizzle/0272_identity_graph_projection_cursor.sql +23 -0
  30. package/dist/drizzle/0273_twin_materialization_suggestions.sql +29 -0
  31. package/dist/drizzle/0274_tenant_mcp_twin_keys.sql +59 -0
  32. package/dist/drizzle/0275_identity_bulk_rebuild_fence.sql +30 -0
  33. package/dist/drizzle/0276_tool_execution_ledger_allow_cascade_delete.sql +18 -0
  34. package/dist/drizzle/0277_knowledge_base_sources.sql +107 -0
  35. package/dist/drizzle/0278_kb_page_transcription.sql +55 -0
  36. package/dist/drizzle/0279_mcp_servers_off_plugin_provenance.sql +93 -0
  37. package/dist/drizzle/0280_work_item_external_refs_drop_plane_provider.sql +46 -0
  38. package/dist/drizzle/0281_tenant_mcp_twin_keys_expiry_suffix.sql +9 -0
  39. package/dist/drizzle/0282_tenant_mcp_twin_keys_grants.sql +24 -0
  40. package/dist/drizzle/0283_agents_agentcore_runtime_dispatch.sql +13 -0
  41. package/dist/drizzle/0284_user_brain_claims.sql +69 -0
  42. package/dist/drizzle/0285_tenant_mcp_twin_keys_trusted_subsystem.sql +30 -0
  43. package/dist/drizzle/0286_brain_analytics_key.sql +26 -0
  44. package/dist/drizzle/0287_brain_subject.sql +25 -0
  45. package/dist/drizzle/0288_multi_lane_identities.sql +25 -0
  46. package/dist/{loadSso-DJVB7BXE.js → loadSso-ETCXTR4I.js} +2 -2
  47. package/dist/{loadSso-JAMNA3WY.js → loadSso-UBD7KUHE.js} +2 -2
  48. package/dist/plugins/README.md +2 -2
  49. package/dist/plugins/catalog/package.json +0 -3
  50. package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +6 -3
  51. package/dist/plugins/catalog/src/__tests__/catalog.test.ts +21 -21
  52. package/dist/plugins/catalog/src/__tests__/contracts.test.ts +102 -25
  53. package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +7 -6
  54. package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -15
  55. package/dist/plugins/catalog/src/contracts.ts +15 -0
  56. package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -18
  57. package/dist/plugins/n8n/test/integrated-app-contract.test.ts +1 -1
  58. package/dist/plugins/twenty/package.json +2 -1
  59. package/dist/plugins/twenty/scripts/LAMBDA_DEPLOY.md +114 -0
  60. package/dist/plugins/twenty/scripts/build-lambda.sh +29 -0
  61. package/dist/plugins/twenty/scripts/configure-product-views.ts +195 -0
  62. package/dist/plugins/twenty/scripts/lambda-handler.ts +49 -0
  63. package/dist/plugins/twenty/scripts/lib/__tests__/load-attachments.test.ts +38 -0
  64. package/dist/plugins/twenty/scripts/lib/__tests__/load-records.test.ts +145 -2
  65. package/dist/plugins/twenty/scripts/lib/__tests__/mappers.test.ts +397 -151
  66. package/dist/plugins/twenty/scripts/lib/__tests__/members-ensure.test.ts +28 -129
  67. package/dist/plugins/twenty/scripts/lib/__tests__/provision-members-db.test.ts +10 -0
  68. package/dist/plugins/twenty/scripts/lib/__tests__/schema-ensure.test.ts +13 -8
  69. package/dist/plugins/twenty/scripts/lib/lastmile-reader.ts +222 -2
  70. package/dist/plugins/twenty/scripts/lib/load-attachments.ts +29 -0
  71. package/dist/plugins/twenty/scripts/lib/load-records.ts +160 -43
  72. package/dist/plugins/twenty/scripts/lib/mappers.ts +368 -152
  73. package/dist/plugins/twenty/scripts/lib/members-ensure.ts +43 -268
  74. package/dist/plugins/twenty/scripts/lib/provision-members-db.ts +57 -0
  75. package/dist/plugins/twenty/scripts/lib/schema-ensure.ts +136 -31
  76. package/dist/plugins/twenty/scripts/migrate-lastmile.ts +254 -152
  77. package/dist/plugins/twenty/scripts/provision-twenty-members.ts +44 -1
  78. package/dist/plugins/twenty/scripts/purge-lastmile-import.ts +178 -0
  79. package/dist/plugins/twenty/scripts/restructure-products.ts +312 -0
  80. package/dist/plugins/twenty/scripts/retag-stage-values.ts +362 -0
  81. package/dist/plugins/twenty/test/manifest.test.ts +2 -4
  82. package/dist/scripts/post-deploy.sh +79 -1
  83. package/dist/{signin-UGDWTGS4.js → signin-5QZNRSOO.js} +2 -2
  84. package/dist/{sso-oidc-Q4VXANXY.js → sso-oidc-XK673P54.js} +2 -2
  85. package/dist/{sts-CWLSE3GH.js → sts-OXI2UALF.js} +6 -134
  86. package/dist/{sts-DNZLNVOV.js → sts-SQW4NBK3.js} +6 -134
  87. package/dist/terraform/examples/greenfield/main.tf +233 -175
  88. package/dist/terraform/examples/greenfield/terraform.tfvars.example +12 -8
  89. package/dist/terraform/modules/app/agentcore-admin/main.tf +47 -0
  90. package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +39 -47
  91. package/dist/terraform/modules/app/agentcore-code-interpreter/main.tf +13 -66
  92. package/dist/terraform/modules/app/agentcore-identity/main.tf +106 -26
  93. package/dist/terraform/modules/app/agentcore-identity/outputs.tf +6 -6
  94. package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +216 -99
  95. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +6 -9
  96. package/dist/terraform/modules/app/agentcore-identity/scripts/delete_workload_identity.sh +19 -0
  97. package/dist/terraform/modules/app/agentcore-identity/scripts/ensure_workload_identity.sh +29 -0
  98. package/dist/terraform/modules/app/agentcore-identity/scripts/read_identity.sh +22 -7
  99. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +17 -46
  100. package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +65 -3
  101. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/after.tf +15 -0
  102. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/before.tf +7 -0
  103. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-after.tf +8 -0
  104. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-before.tf +9 -0
  105. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-after.tf +3 -0
  106. package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-before.tf +3 -0
  107. package/dist/terraform/modules/app/agentcore-identity/variables.tf +6 -0
  108. package/dist/terraform/modules/app/agentcore-memory/README.md +46 -9
  109. package/dist/terraform/modules/app/agentcore-memory/main.tf +27 -10
  110. package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +156 -24
  111. package/dist/terraform/modules/app/agentcore-pi/README.md +1 -3
  112. package/dist/terraform/modules/app/agentcore-pi/main.tf +42 -52
  113. package/dist/terraform/modules/app/agentcore-pi/outputs.tf +3 -3
  114. package/dist/terraform/modules/app/agentcore-pi/scripts/reconcile_pi_runtime.mjs +175 -0
  115. package/dist/terraform/modules/app/agentcore-pi/variables.tf +35 -28
  116. package/dist/terraform/modules/app/agentcore-platform/main.tf +68 -0
  117. package/dist/terraform/modules/app/agentcore-runtime/main.tf +4 -20
  118. package/dist/terraform/modules/app/capability-broker/main.tf +2 -2
  119. package/dist/terraform/modules/app/capability-broker/variables.tf +11 -0
  120. package/dist/terraform/modules/app/deployment-control-plane/README.md +264 -0
  121. package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +4 -1
  122. package/dist/terraform/modules/app/deployment-control-plane/main.tf +94 -0
  123. package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +5 -0
  124. package/dist/terraform/modules/app/deployment-control-plane/runner.py +2641 -124
  125. package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +2034 -154
  126. package/dist/terraform/modules/app/deployment-control-plane/variables.tf +33 -0
  127. package/dist/terraform/modules/app/lambda-api/auth-state.tf +72 -0
  128. package/dist/terraform/modules/app/lambda-api/chat-latency-observability.tf +466 -0
  129. package/dist/terraform/modules/app/lambda-api/dispatch-dlq.tf +55 -0
  130. package/dist/terraform/modules/app/lambda-api/handlers.tf +411 -723
  131. package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +262 -198
  132. package/dist/terraform/modules/app/lambda-api/main.tf +51 -13
  133. package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +4 -181
  134. package/dist/terraform/modules/app/lambda-api/memory-alarms.tf +3 -28
  135. package/dist/terraform/modules/app/lambda-api/oauth-secrets.tf +1 -2
  136. package/dist/terraform/modules/app/lambda-api/outputs.tf +17 -45
  137. package/dist/terraform/modules/app/lambda-api/turn-assertion.tf +45 -0
  138. package/dist/terraform/modules/app/lambda-api/variables.tf +219 -126
  139. package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/README.md +1 -1
  140. package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/main.tf +18 -18
  141. package/dist/terraform/modules/app/sandbox-log-scrubber/README.md +11 -10
  142. package/dist/terraform/modules/app/sandbox-log-scrubber/main.tf +5 -5
  143. package/dist/terraform/modules/app/static-site/main.tf +1 -1
  144. package/dist/terraform/modules/app/www-dns/main.tf +9 -27
  145. package/dist/terraform/modules/app/www-dns/variables.tf +4 -10
  146. package/dist/terraform/modules/data/aurora-postgres/README.md +34 -0
  147. package/dist/terraform/modules/data/aurora-postgres/alarms.tf +82 -0
  148. package/dist/terraform/modules/data/aurora-postgres/main.tf +27 -57
  149. package/dist/terraform/modules/data/aurora-postgres/outputs.tf +0 -9
  150. package/dist/terraform/modules/data/aurora-postgres/variables.tf +41 -0
  151. package/dist/terraform/modules/data/s3-buckets/main.tf +5 -6
  152. package/dist/terraform/modules/foundation/cognito/main.tf +81 -8
  153. package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
  154. package/dist/terraform/modules/foundation/cognito/variables.tf +24 -12
  155. package/dist/terraform/modules/thinkwork/README.md +5 -1
  156. package/dist/terraform/modules/thinkwork/main.tf +376 -374
  157. package/dist/terraform/modules/thinkwork/outputs.tf +12 -158
  158. package/dist/terraform/modules/thinkwork/variables.tf +246 -89
  159. package/dist/workspace-defaults/files/INSTRUCTIONS.md +9 -11
  160. package/dist/workspace-defaults/files/MEMORY_GUIDE.md +38 -35
  161. package/dist/workspace-defaults/files/ROUTER.md +1 -1
  162. package/dist/workspace-defaults/files/TOOLS.md +9 -39
  163. package/dist/workspace-defaults/files/agents/analyst/INSTRUCTIONS.md +6 -3
  164. package/dist/workspace-defaults/files/catalog-skills/brain-brief-builder/SKILL.md +165 -0
  165. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/SKILL.md +75 -0
  166. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
  167. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
  168. package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/workflow-authoring.md +46 -0
  169. package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +1 -1
  170. package/dist/workspace-defaults/files/skills/document-composer/SKILL.md +22 -3
  171. package/package.json +1 -1
  172. package/dist/drizzle/0261_managed_harness_multiplayer.sql +0 -313
  173. package/dist/drizzle/0262_parallel_harness_threads.sql +0 -9
  174. package/dist/drizzle/0264_harness_tool_execution_ledger.sql +0 -113
  175. package/dist/plugins/company-data/README.md +0 -49
  176. package/dist/plugins/company-data/package.json +0 -21
  177. package/dist/plugins/company-data/src/index.ts +0 -30
  178. package/dist/plugins/company-data/src/manifest.ts +0 -26
  179. package/dist/plugins/company-data/test/manifest.test.ts +0 -116
  180. package/dist/plugins/company-data/tsconfig.json +0 -8
  181. package/dist/plugins/company-etl/README.md +0 -46
  182. package/dist/plugins/company-etl/package.json +0 -21
  183. package/dist/plugins/company-etl/src/index.ts +0 -29
  184. package/dist/plugins/company-etl/src/manifest.ts +0 -26
  185. package/dist/plugins/company-etl/test/manifest.test.ts +0 -108
  186. package/dist/plugins/company-etl/tsconfig.json +0 -8
  187. package/dist/plugins/lastmile/README.md +0 -50
  188. package/dist/plugins/lastmile/package.json +0 -23
  189. package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +0 -661
  190. package/dist/plugins/lastmile/src/api/tasks-adapter.ts +0 -572
  191. package/dist/plugins/lastmile/src/discovery.fixture.ts +0 -64
  192. package/dist/plugins/lastmile/src/index.ts +0 -46
  193. package/dist/plugins/lastmile/src/manifest.ts +0 -139
  194. package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +0 -266
  195. package/dist/plugins/lastmile/test/discovery.test.ts +0 -88
  196. package/dist/plugins/lastmile/tsconfig.json +0 -8
  197. package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +0 -409
  198. package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +0 -359
  199. package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +0 -61
  200. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +0 -227
  201. package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +0 -277
  202. package/dist/terraform/modules/app/agentcore-code-interpreter/scripts/build_and_push_sandbox_base.sh +0 -70
  203. package/dist/terraform/modules/app/agentcore-gateway/main.tf +0 -305
  204. package/dist/terraform/modules/app/agentcore-gateway/outputs.tf +0 -44
  205. package/dist/terraform/modules/app/agentcore-gateway/scripts/delete_gateway.sh +0 -93
  206. package/dist/terraform/modules/app/agentcore-gateway/scripts/read_gateway.sh +0 -33
  207. package/dist/terraform/modules/app/agentcore-gateway/scripts/reconcile_gateway.sh +0 -543
  208. package/dist/terraform/modules/app/agentcore-gateway/variables.tf +0 -70
  209. package/dist/terraform/modules/app/agentcore-harness/main.tf +0 -330
  210. package/dist/terraform/modules/app/agentcore-harness/outputs.tf +0 -72
  211. package/dist/terraform/modules/app/agentcore-harness/scripts/delete_harness.sh +0 -5
  212. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-lifecycle.mjs +0 -430
  213. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-readback.mjs +0 -180
  214. package/dist/terraform/modules/app/agentcore-harness/scripts/harness-tool-contract.mjs +0 -193
  215. package/dist/terraform/modules/app/agentcore-harness/scripts/prune_harness.sh +0 -5
  216. package/dist/terraform/modules/app/agentcore-harness/scripts/read_harness.sh +0 -5
  217. package/dist/terraform/modules/app/agentcore-harness/scripts/reconcile_harness.sh +0 -5
  218. package/dist/terraform/modules/app/agentcore-harness/variables.tf +0 -96
  219. package/dist/terraform/modules/app/hindsight-memory/README.md +0 -89
  220. package/dist/terraform/modules/app/hindsight-memory/main.tf +0 -411
  221. package/dist/terraform/modules/app/lambda-api/agentcore-harness-alarms.tf +0 -88
  222. package/dist/terraform/modules/app/lambda-api/agentcore-identity-alarms.tf +0 -91
  223. package/dist/terraform/modules/data/bedrock-knowledge-base/main.tf +0 -102
  224. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/outputs.tf +0 -0
  225. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/sync-database.py +0 -0
  226. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/test_sync_database.py +0 -0
  227. /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/variables.tf +0 -0
  228. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/README.md +0 -0
  229. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/main.tf +0 -0
  230. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/outputs.tf +0 -0
  231. /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/variables.tf +0 -0
@@ -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
- }