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.
- package/README.md +3 -14
- package/dist/{api-client-JYZXYQJR.js → api-client-4P4JZOBX.js} +1 -1
- package/dist/{chunk-Z2F6RJFR.js → chunk-4OMDWYZQ.js} +4 -5
- package/dist/{chunk-ILZKG5WV.js → chunk-AD2NIWB5.js} +434 -69
- package/dist/chunk-MWQ7RO76.js +137 -0
- package/dist/{chunk-DVPBI5HM.js → chunk-OLUQ4U2Z.js} +26 -26
- package/dist/{chunk-QOERT44A.js → chunk-YQCYD6NE.js} +57 -44
- package/dist/cli.js +4400 -16431
- package/dist/commands/enterprise/templates/deploy-repo/scripts/apply-release.mjs +0 -1
- package/dist/commands/enterprise/templates/deploy-repo/scripts/smoke.mjs +0 -1
- package/dist/commands/enterprise/templates/deploy-repo/terraform/main.tf +0 -14
- package/dist/{dist-es-CRV46D5B.js → dist-es-2OTNTL4N.js} +4 -4
- package/dist/{dist-es-ENBUC3JP.js → dist-es-2XVAH4BQ.js} +2 -2
- package/dist/{dist-es-DCY4IC3Y.js → dist-es-3DPDUJAH.js} +2 -2
- package/dist/{dist-es-G7PTG75M.js → dist-es-BNZTBBVC.js} +1 -1
- package/dist/{dist-es-GKDBE7E6.js → dist-es-CD2RBDAC.js} +1 -1
- package/dist/{dist-es-R7FGL2IB.js → dist-es-I4FW57PS.js} +1 -1
- package/dist/{dist-es-USORBXZ5.js → dist-es-KVFWJNDY.js} +4 -4
- package/dist/{dist-es-HY3535OI.js → dist-es-PS73DWNL.js} +2 -2
- package/dist/{dist-es-LDE437AM.js → dist-es-S3NZQFGT.js} +1 -1
- package/dist/{dist-es-G54LBMRN.js → dist-es-SGCA4P32.js} +1 -1
- package/dist/{dist-es-Q57SZXZ7.js → dist-es-WBM6J4RA.js} +2 -2
- package/dist/{dist-es-P26FWFLT.js → dist-es-ZGVADYIF.js} +8 -8
- package/dist/drizzle/0227_analyst_reader_role.sql +17 -26
- package/dist/drizzle/0230_analyst_rls.sql +28 -45
- package/dist/drizzle/0261_native_auth_control_plane.sql +7 -3
- package/dist/drizzle/0270_tool_execution_ledger.sql +115 -0
- package/dist/drizzle/0271_ontology_twin_declarations.sql +47 -0
- package/dist/drizzle/0272_identity_graph_projection_cursor.sql +23 -0
- package/dist/drizzle/0273_twin_materialization_suggestions.sql +29 -0
- package/dist/drizzle/0274_tenant_mcp_twin_keys.sql +59 -0
- package/dist/drizzle/0275_identity_bulk_rebuild_fence.sql +30 -0
- package/dist/drizzle/0276_tool_execution_ledger_allow_cascade_delete.sql +18 -0
- package/dist/drizzle/0277_knowledge_base_sources.sql +107 -0
- package/dist/drizzle/0278_kb_page_transcription.sql +55 -0
- package/dist/drizzle/0279_mcp_servers_off_plugin_provenance.sql +93 -0
- package/dist/drizzle/0280_work_item_external_refs_drop_plane_provider.sql +46 -0
- package/dist/drizzle/0281_tenant_mcp_twin_keys_expiry_suffix.sql +9 -0
- package/dist/drizzle/0282_tenant_mcp_twin_keys_grants.sql +24 -0
- package/dist/drizzle/0283_agents_agentcore_runtime_dispatch.sql +13 -0
- package/dist/drizzle/0284_user_brain_claims.sql +69 -0
- package/dist/drizzle/0285_tenant_mcp_twin_keys_trusted_subsystem.sql +30 -0
- package/dist/drizzle/0286_brain_analytics_key.sql +26 -0
- package/dist/drizzle/0287_brain_subject.sql +25 -0
- package/dist/drizzle/0288_multi_lane_identities.sql +25 -0
- package/dist/{loadSso-DJVB7BXE.js → loadSso-ETCXTR4I.js} +2 -2
- package/dist/{loadSso-JAMNA3WY.js → loadSso-UBD7KUHE.js} +2 -2
- package/dist/plugins/README.md +2 -2
- package/dist/plugins/catalog/package.json +0 -3
- package/dist/plugins/catalog/src/__tests__/build-catalog.test.ts +6 -3
- package/dist/plugins/catalog/src/__tests__/catalog.test.ts +21 -21
- package/dist/plugins/catalog/src/__tests__/contracts.test.ts +102 -25
- package/dist/plugins/catalog/src/__tests__/plugin-package.test.ts +7 -6
- package/dist/plugins/catalog/src/__tests__/plugin-registry.test.ts +0 -15
- package/dist/plugins/catalog/src/contracts.ts +15 -0
- package/dist/plugins/catalog/src/registry/generated-first-party.ts +0 -18
- package/dist/plugins/n8n/test/integrated-app-contract.test.ts +1 -1
- package/dist/plugins/twenty/package.json +2 -1
- package/dist/plugins/twenty/scripts/LAMBDA_DEPLOY.md +114 -0
- package/dist/plugins/twenty/scripts/build-lambda.sh +29 -0
- package/dist/plugins/twenty/scripts/configure-product-views.ts +195 -0
- package/dist/plugins/twenty/scripts/lambda-handler.ts +49 -0
- package/dist/plugins/twenty/scripts/lib/__tests__/load-attachments.test.ts +38 -0
- package/dist/plugins/twenty/scripts/lib/__tests__/load-records.test.ts +145 -2
- package/dist/plugins/twenty/scripts/lib/__tests__/mappers.test.ts +397 -151
- package/dist/plugins/twenty/scripts/lib/__tests__/members-ensure.test.ts +28 -129
- package/dist/plugins/twenty/scripts/lib/__tests__/provision-members-db.test.ts +10 -0
- package/dist/plugins/twenty/scripts/lib/__tests__/schema-ensure.test.ts +13 -8
- package/dist/plugins/twenty/scripts/lib/lastmile-reader.ts +222 -2
- package/dist/plugins/twenty/scripts/lib/load-attachments.ts +29 -0
- package/dist/plugins/twenty/scripts/lib/load-records.ts +160 -43
- package/dist/plugins/twenty/scripts/lib/mappers.ts +368 -152
- package/dist/plugins/twenty/scripts/lib/members-ensure.ts +43 -268
- package/dist/plugins/twenty/scripts/lib/provision-members-db.ts +57 -0
- package/dist/plugins/twenty/scripts/lib/schema-ensure.ts +136 -31
- package/dist/plugins/twenty/scripts/migrate-lastmile.ts +254 -152
- package/dist/plugins/twenty/scripts/provision-twenty-members.ts +44 -1
- package/dist/plugins/twenty/scripts/purge-lastmile-import.ts +178 -0
- package/dist/plugins/twenty/scripts/restructure-products.ts +312 -0
- package/dist/plugins/twenty/scripts/retag-stage-values.ts +362 -0
- package/dist/plugins/twenty/test/manifest.test.ts +2 -4
- package/dist/scripts/post-deploy.sh +79 -1
- package/dist/{signin-UGDWTGS4.js → signin-5QZNRSOO.js} +2 -2
- package/dist/{sso-oidc-Q4VXANXY.js → sso-oidc-XK673P54.js} +2 -2
- package/dist/{sts-CWLSE3GH.js → sts-OXI2UALF.js} +6 -134
- package/dist/{sts-DNZLNVOV.js → sts-SQW4NBK3.js} +6 -134
- package/dist/terraform/examples/greenfield/main.tf +233 -175
- package/dist/terraform/examples/greenfield/terraform.tfvars.example +12 -8
- package/dist/terraform/modules/app/agentcore-admin/main.tf +47 -0
- package/dist/terraform/modules/app/agentcore-code-interpreter/README.md +39 -47
- package/dist/terraform/modules/app/agentcore-code-interpreter/main.tf +13 -66
- package/dist/terraform/modules/app/agentcore-identity/main.tf +106 -26
- package/dist/terraform/modules/app/agentcore-identity/outputs.tf +6 -6
- package/dist/terraform/modules/app/agentcore-identity/scripts/bootstrap_twenty_oauth_client.sh +216 -99
- package/dist/terraform/modules/app/agentcore-identity/scripts/delete_identity.sh +6 -9
- package/dist/terraform/modules/app/agentcore-identity/scripts/delete_workload_identity.sh +19 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/ensure_workload_identity.sh +29 -0
- package/dist/terraform/modules/app/agentcore-identity/scripts/read_identity.sh +22 -7
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_identity.sh +17 -46
- package/dist/terraform/modules/app/agentcore-identity/scripts/reconcile_twenty_provider.mjs +65 -3
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/after.tf +15 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/before.tf +7 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-after.tf +8 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/identity-before.tf +9 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-after.tf +3 -0
- package/dist/terraform/modules/app/agentcore-identity/tests/tainted-marker/thinkwork-before.tf +3 -0
- package/dist/terraform/modules/app/agentcore-identity/variables.tf +6 -0
- package/dist/terraform/modules/app/agentcore-memory/README.md +46 -9
- package/dist/terraform/modules/app/agentcore-memory/main.tf +27 -10
- package/dist/terraform/modules/app/agentcore-memory/scripts/create_or_find_memory.sh +156 -24
- package/dist/terraform/modules/app/agentcore-pi/README.md +1 -3
- package/dist/terraform/modules/app/agentcore-pi/main.tf +42 -52
- package/dist/terraform/modules/app/agentcore-pi/outputs.tf +3 -3
- package/dist/terraform/modules/app/agentcore-pi/scripts/reconcile_pi_runtime.mjs +175 -0
- package/dist/terraform/modules/app/agentcore-pi/variables.tf +35 -28
- package/dist/terraform/modules/app/agentcore-platform/main.tf +68 -0
- package/dist/terraform/modules/app/agentcore-runtime/main.tf +4 -20
- package/dist/terraform/modules/app/capability-broker/main.tf +2 -2
- package/dist/terraform/modules/app/capability-broker/variables.tf +11 -0
- package/dist/terraform/modules/app/deployment-control-plane/README.md +264 -0
- package/dist/terraform/modules/app/deployment-control-plane/buildspec.yml +4 -1
- package/dist/terraform/modules/app/deployment-control-plane/main.tf +94 -0
- package/dist/terraform/modules/app/deployment-control-plane/outputs.tf +5 -0
- package/dist/terraform/modules/app/deployment-control-plane/runner.py +2641 -124
- package/dist/terraform/modules/app/deployment-control-plane/test_runner_bundle.py +2034 -154
- package/dist/terraform/modules/app/deployment-control-plane/variables.tf +33 -0
- package/dist/terraform/modules/app/lambda-api/auth-state.tf +72 -0
- package/dist/terraform/modules/app/lambda-api/chat-latency-observability.tf +466 -0
- package/dist/terraform/modules/app/lambda-api/dispatch-dlq.tf +55 -0
- package/dist/terraform/modules/app/lambda-api/handlers.tf +411 -723
- package/dist/terraform/modules/app/lambda-api/iam-grouped.tf +262 -198
- package/dist/terraform/modules/app/lambda-api/main.tf +51 -13
- package/dist/terraform/modules/app/lambda-api/mcp-oauth.tf +4 -181
- package/dist/terraform/modules/app/lambda-api/memory-alarms.tf +3 -28
- package/dist/terraform/modules/app/lambda-api/oauth-secrets.tf +1 -2
- package/dist/terraform/modules/app/lambda-api/outputs.tf +17 -45
- package/dist/terraform/modules/app/lambda-api/turn-assertion.tf +45 -0
- package/dist/terraform/modules/app/lambda-api/variables.tf +219 -126
- package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/README.md +1 -1
- package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/main.tf +18 -18
- package/dist/terraform/modules/app/sandbox-log-scrubber/README.md +11 -10
- package/dist/terraform/modules/app/sandbox-log-scrubber/main.tf +5 -5
- package/dist/terraform/modules/app/static-site/main.tf +1 -1
- package/dist/terraform/modules/app/www-dns/main.tf +9 -27
- package/dist/terraform/modules/app/www-dns/variables.tf +4 -10
- package/dist/terraform/modules/data/aurora-postgres/README.md +34 -0
- package/dist/terraform/modules/data/aurora-postgres/alarms.tf +82 -0
- package/dist/terraform/modules/data/aurora-postgres/main.tf +27 -57
- package/dist/terraform/modules/data/aurora-postgres/outputs.tf +0 -9
- package/dist/terraform/modules/data/aurora-postgres/variables.tf +41 -0
- package/dist/terraform/modules/data/s3-buckets/main.tf +5 -6
- package/dist/terraform/modules/foundation/cognito/main.tf +81 -8
- package/dist/terraform/modules/foundation/cognito/outputs.tf +5 -0
- package/dist/terraform/modules/foundation/cognito/variables.tf +24 -12
- package/dist/terraform/modules/thinkwork/README.md +5 -1
- package/dist/terraform/modules/thinkwork/main.tf +376 -374
- package/dist/terraform/modules/thinkwork/outputs.tf +12 -158
- package/dist/terraform/modules/thinkwork/variables.tf +246 -89
- package/dist/workspace-defaults/files/INSTRUCTIONS.md +9 -11
- package/dist/workspace-defaults/files/MEMORY_GUIDE.md +38 -35
- package/dist/workspace-defaults/files/ROUTER.md +1 -1
- package/dist/workspace-defaults/files/TOOLS.md +9 -39
- package/dist/workspace-defaults/files/agents/analyst/INSTRUCTIONS.md +6 -3
- package/dist/workspace-defaults/files/catalog-skills/brain-brief-builder/SKILL.md +165 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/SKILL.md +75 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/mcp-tooling.md +40 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/validation-and-handoff.md +40 -0
- package/dist/workspace-defaults/files/catalog-skills/n8n-workflow-operator/references/workflow-authoring.md +46 -0
- package/dist/workspace-defaults/files/skills/artifact-builder/references/crm-dashboard.md +1 -1
- package/dist/workspace-defaults/files/skills/document-composer/SKILL.md +22 -3
- package/package.json +1 -1
- package/dist/drizzle/0261_managed_harness_multiplayer.sql +0 -313
- package/dist/drizzle/0262_parallel_harness_threads.sql +0 -9
- package/dist/drizzle/0264_harness_tool_execution_ledger.sql +0 -113
- package/dist/plugins/company-data/README.md +0 -49
- package/dist/plugins/company-data/package.json +0 -21
- package/dist/plugins/company-data/src/index.ts +0 -30
- package/dist/plugins/company-data/src/manifest.ts +0 -26
- package/dist/plugins/company-data/test/manifest.test.ts +0 -116
- package/dist/plugins/company-data/tsconfig.json +0 -8
- package/dist/plugins/company-etl/README.md +0 -46
- package/dist/plugins/company-etl/package.json +0 -21
- package/dist/plugins/company-etl/src/index.ts +0 -29
- package/dist/plugins/company-etl/src/manifest.ts +0 -26
- package/dist/plugins/company-etl/test/manifest.test.ts +0 -108
- package/dist/plugins/company-etl/tsconfig.json +0 -8
- package/dist/plugins/lastmile/README.md +0 -50
- package/dist/plugins/lastmile/package.json +0 -23
- package/dist/plugins/lastmile/smoke/lastmile-plugin-smoke.mjs +0 -661
- package/dist/plugins/lastmile/src/api/tasks-adapter.ts +0 -572
- package/dist/plugins/lastmile/src/discovery.fixture.ts +0 -64
- package/dist/plugins/lastmile/src/index.ts +0 -46
- package/dist/plugins/lastmile/src/manifest.ts +0 -139
- package/dist/plugins/lastmile/test/api/tasks-adapter.test.ts +0 -266
- package/dist/plugins/lastmile/test/discovery.test.ts +0 -88
- package/dist/plugins/lastmile/tsconfig.json +0 -8
- package/dist/plugins/n8n/smoke/n8n-managed-app-smoke.mjs +0 -409
- package/dist/plugins/twenty/smoke/twenty-managed-app-smoke.mjs +0 -359
- package/dist/terraform/modules/app/agentcore-code-interpreter/Dockerfile.sandbox-base +0 -61
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/sitecustomize.py +0 -227
- package/dist/terraform/modules/app/agentcore-code-interpreter/sandbox/test_sitecustomize.py +0 -277
- package/dist/terraform/modules/app/agentcore-code-interpreter/scripts/build_and_push_sandbox_base.sh +0 -70
- package/dist/terraform/modules/app/agentcore-gateway/main.tf +0 -305
- package/dist/terraform/modules/app/agentcore-gateway/outputs.tf +0 -44
- package/dist/terraform/modules/app/agentcore-gateway/scripts/delete_gateway.sh +0 -93
- package/dist/terraform/modules/app/agentcore-gateway/scripts/read_gateway.sh +0 -33
- package/dist/terraform/modules/app/agentcore-gateway/scripts/reconcile_gateway.sh +0 -543
- package/dist/terraform/modules/app/agentcore-gateway/variables.tf +0 -70
- package/dist/terraform/modules/app/agentcore-harness/main.tf +0 -330
- package/dist/terraform/modules/app/agentcore-harness/outputs.tf +0 -72
- package/dist/terraform/modules/app/agentcore-harness/scripts/delete_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/scripts/harness-lifecycle.mjs +0 -430
- package/dist/terraform/modules/app/agentcore-harness/scripts/harness-readback.mjs +0 -180
- package/dist/terraform/modules/app/agentcore-harness/scripts/harness-tool-contract.mjs +0 -193
- package/dist/terraform/modules/app/agentcore-harness/scripts/prune_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/scripts/read_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/scripts/reconcile_harness.sh +0 -5
- package/dist/terraform/modules/app/agentcore-harness/variables.tf +0 -96
- package/dist/terraform/modules/app/hindsight-memory/README.md +0 -89
- package/dist/terraform/modules/app/hindsight-memory/main.tf +0 -411
- package/dist/terraform/modules/app/lambda-api/agentcore-harness-alarms.tf +0 -88
- package/dist/terraform/modules/app/lambda-api/agentcore-identity-alarms.tf +0 -91
- package/dist/terraform/modules/data/bedrock-knowledge-base/main.tf +0 -102
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/outputs.tf +0 -0
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/sync-database.py +0 -0
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/scripts/test_sync_database.py +0 -0
- /package/dist/{plugins/n8n/terraform → terraform/modules/app}/n8n/variables.tf +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/README.md +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/main.tf +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/outputs.tf +0 -0
- /package/dist/{plugins/twenty/terraform → terraform/modules/app}/twenty/variables.tf +0 -0
|
@@ -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,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
|
-
}
|