@zackbart/connecta 0.33.0 → 0.34.1
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/CHANGELOG.md +65 -0
- package/README.md +100 -128
- package/SECURITY.md +1 -1
- package/bin/version.mjs +1 -1
- package/dist/activity.d.ts +3 -0
- package/dist/branding.d.ts +7 -0
- package/dist/branding.js +76 -9
- package/dist/catalog-drift.d.ts +30 -26
- package/dist/catalog-drift.js +169 -84
- package/dist/catalog-service.js +16 -2
- package/dist/config-value-sources.js +6 -1
- package/dist/config.d.ts +13 -2
- package/dist/config.js +36 -2
- package/dist/connector-caller.js +2 -1
- package/dist/connectors/api-connector.d.ts +3 -0
- package/dist/connectors/api-connector.js +5 -1
- package/dist/connectors/option-shapes.js +1 -1
- package/dist/connectors/remote-mcp.d.ts +2 -0
- package/dist/connectors/remote-mcp.js +5 -1
- package/dist/describe-config.d.ts +5 -1
- package/dist/describe-config.js +2 -0
- package/dist/execute.js +1 -11
- package/dist/fix-prompt.js +2 -2
- package/dist/index.js +1 -0
- package/dist/invocation.js +3 -2
- package/dist/membership.d.ts +2 -0
- package/dist/meta-tools.js +3 -2
- package/dist/oauth-callback-outcome.js +2 -2
- package/dist/operator-ui/agents.d.ts +1 -1
- package/dist/operator-ui/agents.js +16 -16
- package/dist/operator-ui/config-summary.js +565 -0
- package/dist/operator-ui/connection-map.js +376 -0
- package/dist/operator-ui/endpoints.js +45 -16
- package/dist/operator-ui/fix-prompts.js +1 -1
- package/dist/operator-ui/generated.js +4 -4
- package/dist/operator-ui/health.js +52 -0
- package/dist/operator-ui/member-page.js +13 -28
- package/dist/operator-ui/overview.js +123 -0
- package/dist/operator-ui/view.d.ts +26 -22
- package/dist/operator-ui/view.js +130 -96
- package/dist/page-styles.js +5 -3
- package/dist/provider.d.ts +6 -1
- package/dist/provider.js +18 -1
- package/dist/providers/_shared/google/workspace.d.ts +9 -4
- package/dist/providers/_shared/google/workspace.js +7 -3
- package/dist/providers/basecamp/index.d.ts +2 -0
- package/dist/providers/breeze/index.d.ts +2 -0
- package/dist/providers/ccb/index.d.ts +2 -0
- package/dist/providers/ccb/index.js +2 -2
- package/dist/providers/cloudflare/index.d.ts +2 -0
- package/dist/providers/cloudflare/index.js +5 -1
- package/dist/providers/cloudflare/openapi.generated.js +3296 -3206
- package/dist/providers/cloudflare/rest.js +19 -0
- package/dist/providers/cloudflare/skill.generated.js +2 -2
- package/dist/providers/cloudflare/value-safety.js +51 -18
- package/dist/providers/docs/index.js +1 -1
- package/dist/providers/docs/skill.generated.js +2 -2
- package/dist/providers/drive/index.js +1 -1
- package/dist/providers/drive/skill.generated.js +2 -2
- package/dist/providers/forms/index.js +1 -1
- package/dist/providers/forms/skill.generated.js +2 -2
- package/dist/providers/gmail/index.js +1 -1
- package/dist/providers/gmail/skill.generated.js +2 -2
- package/dist/providers/intercom/index.d.ts +24 -0
- package/dist/providers/intercom/index.js +121 -0
- package/dist/providers/intercom/skill.generated.js +8 -0
- package/dist/providers/linear/index.js +204 -19
- package/dist/providers/linear/skill.generated.js +2 -2
- package/dist/providers/mixpanel/index.d.ts +2 -0
- package/dist/providers/mixpanel/index.js +21 -17
- package/dist/providers/mixpanel/skill.generated.js +3 -3
- package/dist/providers/notion/index.d.ts +2 -0
- package/dist/providers/notion/index.js +1 -1
- package/dist/providers/notion/skill.generated.js +1 -1
- package/dist/providers/overflow/index.d.ts +2 -0
- package/dist/providers/overflow/index.js +1 -1
- package/dist/providers/overflow/skill.generated.js +2 -2
- package/dist/providers/planning-center/index.d.ts +2 -0
- package/dist/providers/planning-center/index.js +1 -1
- package/dist/providers/planning-center/skill.generated.js +4 -4
- package/dist/providers/revenuecat/index.d.ts +5 -3
- package/dist/providers/revenuecat/index.js +147 -7
- package/dist/providers/revenuecat/skill.generated.js +3 -3
- package/dist/providers/sheets/index.js +1 -1
- package/dist/providers/sheets/skill.generated.js +2 -2
- package/dist/providers/slides/index.js +1 -1
- package/dist/providers/slides/skill.generated.js +2 -2
- package/dist/providers/stripe/index.d.ts +2 -0
- package/dist/providers/stripe/index.js +50 -30
- package/dist/providers/stripe/skill.generated.js +2 -1
- package/dist/providers/tithely/index.d.ts +2 -0
- package/dist/providers/tithely/index.js +1 -1
- package/dist/providers/vercel/index.d.ts +2 -0
- package/dist/providers/vercel/index.js +2 -2
- package/dist/providers/vercel/openapi.generated.js +391 -374
- package/dist/providers/vercel/skill.generated.js +2 -2
- package/dist/providers/vercel/value-safety.js +14 -4
- package/dist/registry.d.ts +10 -14
- package/dist/registry.js +77 -62
- package/dist/routes/mcp.js +20 -13
- package/dist/routes/oauth.js +2 -2
- package/dist/routes/ui-data.js +8 -2
- package/dist/skills.js +18 -2
- package/dist/storage/sql.js +5 -1
- package/dist/types.d.ts +36 -11
- package/dist/ui.js +9 -4
- package/dist/usage-guide.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/documentation/README.md +2 -2
- package/documentation/architecture.md +66 -18
- package/documentation/auth.md +183 -67
- package/documentation/code-mode.md +30 -10
- package/documentation/deploying.md +5 -1
- package/documentation/integrating.md +64 -7
- package/documentation/meta-tools.md +38 -24
- package/documentation/migration-0.33.md +21 -13
- package/documentation/migration-0.34.md +67 -0
- package/documentation/operating.md +1 -1
- package/documentation/operator-tests.md +52 -20
- package/documentation/operator-ui.md +341 -104
- package/documentation/provider-auth-migration.md +22 -0
- package/examples/worker/AGENTS.md +15 -9
- package/examples/worker/README.md +41 -14
- package/examples/worker/src/connecta.config.ts +5 -4
- package/examples/worker/wrangler.jsonc +1 -1
- package/package.json +23 -19
- package/templates/node/AGENTS.md +13 -7
- package/templates/node/README.md +14 -11
- package/templates/node/package.json +1 -1
- package/templates/node/src/connecta.config.ts +2 -2
|
@@ -11,7 +11,8 @@ A deployable Worker that aggregates a downstream remote MCP and an in-code HTTP
|
|
|
11
11
|
API connector, guarded by Cloudflare Access. It uses three Cloudflare resources
|
|
12
12
|
and nothing else: one D1 database (`CONNECTA_DB`) for every piece of state, the
|
|
13
13
|
Worker Loader binding (`LOADER`) behind the six-tool surface, which requires
|
|
14
|
-
the Workers Paid plan, and
|
|
14
|
+
the Workers Paid plan, and two secrets: `DOWNSTREAM_TOKEN` (the example remote
|
|
15
|
+
MCP connector's token) and `CREDENTIAL_ENCRYPTION_KEY` (the credential vault).
|
|
15
16
|
|
|
16
17
|
This is also the **starting template for a deployment**: a real deployment
|
|
17
18
|
should be its own repository that pins an exact `@zackbart/connecta` version and
|
|
@@ -46,9 +47,11 @@ This example has no `package.json` of its own — it resolves the installed
|
|
|
46
47
|
package from the repository root.
|
|
47
48
|
|
|
48
49
|
```sh
|
|
49
|
-
|
|
50
|
+
pnpm install # from the repository root
|
|
50
51
|
|
|
51
52
|
wrangler d1 create connecta # paste the id into wrangler.jsonc
|
|
53
|
+
# In wrangler.jsonc also set PUBLIC_URL to this Worker's URL and
|
|
54
|
+
# CONNECTA_MAINTAINERS to your Access user ids (user_uuid, else email).
|
|
52
55
|
|
|
53
56
|
cd examples/worker
|
|
54
57
|
wrangler secret put DOWNSTREAM_TOKEN
|
|
@@ -140,7 +143,8 @@ auth. [Deploying Connecta](https://github.com/zackbart/connecta/blob/main/docume
|
|
|
140
143
|
records the untested cases and the propagation details.
|
|
141
144
|
|
|
142
145
|
The checked-in `access.dev` block gives `wrangler dev` a local operator
|
|
143
|
-
identity
|
|
146
|
+
identity; it requires Wrangler 4.123.0 or later, and earlier versions ignore it
|
|
147
|
+
with an unexpected-field warning. Remove the block to test the missing-Access refusal. It has no effect
|
|
144
148
|
on a deployed Worker's production identity.
|
|
145
149
|
|
|
146
150
|
### Optional resource management with Alchemy
|
|
@@ -228,12 +232,34 @@ Access adoption or preserve production identity.
|
|
|
228
232
|
|
|
229
233
|
### Copied into its own repository
|
|
230
234
|
|
|
231
|
-
The `
|
|
235
|
+
The `pnpm install` above is the connecta repository's, which already has every
|
|
232
236
|
dependency this file imports. A copy with its own `package.json` installs
|
|
233
237
|
Connecta and the separately installed `@cloudflare/codemode` peer:
|
|
234
238
|
|
|
235
239
|
```sh
|
|
236
|
-
npm install @zackbart/connecta
|
|
240
|
+
npm install --save-exact @zackbart/connecta@<version>
|
|
241
|
+
npm install @cloudflare/codemode
|
|
242
|
+
npm install --save-dev wrangler @cloudflare/workers-types typescript @types/node
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
A `tsconfig.json` like the following lets `tsc --noEmit` resolve `D1Database`,
|
|
246
|
+
`WorkerLoader`, and `ExecutionContext`. `wrangler` also serves
|
|
247
|
+
`scripts/copy-kv-to-d1.mjs`.
|
|
248
|
+
|
|
249
|
+
```json
|
|
250
|
+
{
|
|
251
|
+
"compilerOptions": {
|
|
252
|
+
"target": "ES2022",
|
|
253
|
+
"module": "ES2022",
|
|
254
|
+
"moduleResolution": "Bundler",
|
|
255
|
+
"lib": ["ES2022"],
|
|
256
|
+
"types": ["@cloudflare/workers-types", "node"],
|
|
257
|
+
"strict": true,
|
|
258
|
+
"skipLibCheck": true,
|
|
259
|
+
"noEmit": true
|
|
260
|
+
},
|
|
261
|
+
"include": ["src/**/*.ts"]
|
|
262
|
+
}
|
|
237
263
|
```
|
|
238
264
|
|
|
239
265
|
`@cloudflare/codemode` is the optional peer behind `execute_code`, declared in
|
|
@@ -250,12 +276,12 @@ Then list the maintainers' Access user ids (`user_uuid`, else email) in the
|
|
|
250
276
|
`CONNECTA_MAINTAINERS` var and point a maintainer's MCP client at
|
|
251
277
|
`<PUBLIC_URL>/mcp`. Other people use `<PUBLIC_URL>/mcp/<pool>`, and agents
|
|
252
278
|
`<PUBLIC_URL>/agent/<pool>`, for a pool that lists them in `members`. The example explicitly enables
|
|
253
|
-
`ui: operatorUi()`; open `<PUBLIC_URL>/` for
|
|
254
|
-
authentication controls. The page labels tool safety, offers fixed repair
|
|
279
|
+
`ui: operatorUi()`; open `<PUBLIC_URL>/` for endpoints, and each connector's Connection tab
|
|
280
|
+
(`/connectors/<id>`) for its authentication controls. The page labels tool safety, offers fixed repair
|
|
255
281
|
prompts for classified failures, and shows client setup commands for endpoints
|
|
256
282
|
the signed-in person may use. Those commands contain no token. There is no
|
|
257
|
-
separate Credentials tab. The
|
|
258
|
-
declared agent, is available to
|
|
283
|
+
separate Credentials tab. The Tokens page, listing one token slot per
|
|
284
|
+
declared agent, is available to signed-in maintainers.
|
|
259
285
|
|
|
260
286
|
## Select optional modules
|
|
261
287
|
|
|
@@ -281,9 +307,9 @@ See [inbound identity](../../documentation/auth.md#principals-visibility-and-ope
|
|
|
281
307
|
Machine clients are agents declared by name in `agents` in
|
|
282
308
|
`src/connecta.config.ts`; this example declares `ci`. Each agent has one
|
|
283
309
|
`cta_` token held by `accessTokens(storage)` over `CONNECTA_DB`, with no new
|
|
284
|
-
binding. An agent with no issued token admits nothing. A
|
|
285
|
-
|
|
286
|
-
`<PUBLIC_URL>/`, select
|
|
310
|
+
binding. An agent with no issued token admits nothing. A maintainer (an Access
|
|
311
|
+
identity listed in `CONNECTA_MAINTAINERS`) signs in and issues the first token.
|
|
312
|
+
Open `<PUBLIC_URL>/`, select Tokens, and issue the agent's token. Save the
|
|
287
313
|
returned `cta_` secret privately; it is returned once. Rotating replaces it
|
|
288
314
|
immediately: the old secret stops on its next request. An agent has no human
|
|
289
315
|
principal, so personal connectors are absent for it; connector and pool rules
|
|
@@ -380,7 +406,7 @@ with the `cta_` token alone:
|
|
|
380
406
|
CF_ACCESS_CLIENT_ID='REPLACE_WITH_ACCESS_CLIENT_ID' \
|
|
381
407
|
CF_ACCESS_CLIENT_SECRET='REPLACE_WITH_ACCESS_CLIENT_SECRET' \
|
|
382
408
|
CONNECTA_TOKEN='cta_REPLACE_WITH_STORED_SECRET' \
|
|
383
|
-
connecta doctor --url
|
|
409
|
+
npx connecta doctor --url https://connecta.example.workers.dev --pool ci
|
|
384
410
|
```
|
|
385
411
|
|
|
386
412
|
Doctor reports the configured `DynamicWorkerExecutor`, not a presumed Node
|
|
@@ -439,7 +465,8 @@ CREATE TABLE IF NOT EXISTS connecta_kv (
|
|
|
439
465
|
);
|
|
440
466
|
CREATE INDEX IF NOT EXISTS connecta_kv_expiry ON connecta_kv (expires_at_ms);
|
|
441
467
|
-- tool_call_activity: one row per completed call, keyset-paged on
|
|
442
|
-
-- (occurred_at_ms, id); see
|
|
468
|
+
-- (occurred_at_ms, id); see
|
|
469
|
+
-- https://github.com/zackbart/connecta/blob/main/src/storage/sql.ts
|
|
443
470
|
```
|
|
444
471
|
|
|
445
472
|
### Upgrading from 0.28
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* One MCP endpoint aggregating a downstream remote MCP and an HTTP API, guarded
|
|
5
5
|
* by Cloudflare Access. It needs three resources and nothing else: one D1
|
|
6
6
|
* database (CONNECTA_DB) holding every piece of state, the Worker Loader
|
|
7
|
-
* binding (LOADER) behind execute_code, and
|
|
8
|
-
*
|
|
7
|
+
* binding (LOADER) behind execute_code, and two secrets: DOWNSTREAM_TOKEN for
|
|
8
|
+
* the example Notion connector and CREDENTIAL_ENCRYPTION_KEY sealing
|
|
9
|
+
* credentials in that database. Access
|
|
9
10
|
* admits the request before this Worker runs and supplies trusted human
|
|
10
11
|
* identity through ctx.access. Machines use stored cta_ tokens inside connecta.
|
|
11
12
|
*
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
*
|
|
17
18
|
* Setup (this example has no package.json of its own — it self-references the
|
|
18
19
|
* installed `@zackbart/connecta` package):
|
|
19
|
-
* 1. `
|
|
20
|
+
* 1. `pnpm install` in the connecta repository root (../../ from here) so the
|
|
20
21
|
* package import and wrangler resolve. A copy in its own repository
|
|
21
22
|
* installs `@zackbart/connecta @cloudflare/codemode` instead. Codemode is
|
|
22
23
|
* an optional peer.
|
|
@@ -90,7 +91,7 @@ export default defineConfig((env: Env) => {
|
|
|
90
91
|
// alone is refused everywhere.
|
|
91
92
|
auth: [cloudflareAccessAuth()],
|
|
92
93
|
// Machine clients are agents declared here by name, each with one cta_
|
|
93
|
-
// token.
|
|
94
|
+
// token. A signed-in maintainer issues, rotates, and revokes it
|
|
94
95
|
// in the operator UI; removing a name stops its token on the next request.
|
|
95
96
|
agents: ["ci"],
|
|
96
97
|
// Always installed over the same D1 storage. An agent with no issued token
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"CONNECTA_MAINTAINERS": "operator@example.com",
|
|
19
19
|
},
|
|
20
20
|
|
|
21
|
-
// Local-only Access identity. Remove this block to exercise the
|
|
21
|
+
// Local-only Access identity (Wrangler 4.123.0 or later). Remove this block to exercise the
|
|
22
22
|
// unauthenticated path in `wrangler dev`; production identity comes from the
|
|
23
23
|
// Worker-level Access application, not from this file.
|
|
24
24
|
"access": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zackbart/connecta",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.34.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "One MCP to rule them all — a single MCP endpoint aggregating many downstream connectors behind a code-first surface of six meta-tools.",
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"engines": {
|
|
9
9
|
"node": ">=22.13.0"
|
|
10
10
|
},
|
|
11
|
+
"packageManager": "pnpm@12.4.2",
|
|
11
12
|
"publishConfig": {
|
|
12
13
|
"access": "public"
|
|
13
14
|
},
|
|
@@ -113,6 +114,10 @@
|
|
|
113
114
|
"types": "./dist/providers/infisical/index.d.ts",
|
|
114
115
|
"import": "./dist/providers/infisical/index.js"
|
|
115
116
|
},
|
|
117
|
+
"./providers/intercom": {
|
|
118
|
+
"types": "./dist/providers/intercom/index.d.ts",
|
|
119
|
+
"import": "./dist/providers/intercom/index.js"
|
|
120
|
+
},
|
|
116
121
|
"./providers/linear": {
|
|
117
122
|
"types": "./dist/providers/linear/index.d.ts",
|
|
118
123
|
"import": "./dist/providers/linear/index.js"
|
|
@@ -187,20 +192,20 @@
|
|
|
187
192
|
"build:operator-ui": "node scripts/build-operator-ui.mjs",
|
|
188
193
|
"check:operator-ui": "node scripts/build-operator-ui.mjs --check",
|
|
189
194
|
"check:clerk-sdk": "node scripts/build-clerk-sdk.mjs --check",
|
|
190
|
-
"build": "
|
|
195
|
+
"build": "pnpm run providers:generate && pnpm run clean && tsc -p tsconfig.build.json && node scripts/prune-declarations.mjs",
|
|
191
196
|
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.operator-ui.json --noEmit",
|
|
192
197
|
"test": "vitest run",
|
|
193
198
|
"test:browser:install": "playwright install chromium",
|
|
194
199
|
"test:browser": "playwright test",
|
|
195
200
|
"test:browser:snapshots": "node scripts/update-operator-snapshots.mjs",
|
|
196
|
-
"pretest:browser:snapshots": "
|
|
201
|
+
"pretest:browser:snapshots": "pnpm run build:operator-ui",
|
|
197
202
|
"test:node": "vitest run --project node",
|
|
198
203
|
"test:workers": "vitest run --project workers",
|
|
199
204
|
"check:docs": "node scripts/check-doc-links.mjs",
|
|
200
205
|
"check:lint": "oxlint -D correctness --report-unused-disable-directives .",
|
|
201
206
|
"check:unused": "knip --include dependencies,unlisted,exports,nsExports,types,nsTypes",
|
|
202
207
|
"check:examples": "tsc -p tsconfig.template.node.json && tsc -p tsconfig.examples.worker.json",
|
|
203
|
-
"check:security": "
|
|
208
|
+
"check:security": "pnpm audit --prod --audit-level moderate",
|
|
204
209
|
"check:package": "node scripts/check-package.mjs",
|
|
205
210
|
"check:declarations": "node scripts/check-declarations.mjs --dist .",
|
|
206
211
|
"check:bundle": "node scripts/bundle-size.mjs",
|
|
@@ -211,23 +216,23 @@
|
|
|
211
216
|
"eval:smoke": "tsx eval/run-smoke.ts",
|
|
212
217
|
"eval:perf": "tsx eval/run-perf.ts",
|
|
213
218
|
"eval:report": "tsx eval/report.ts",
|
|
214
|
-
"check:core": "
|
|
219
|
+
"check:core": "pnpm run format:check && pnpm run check:providers-generated && pnpm run check:docs && pnpm run check:changes && pnpm run check:operator-ui && pnpm run check:clerk-sdk && pnpm run check:lint && pnpm run check:unused && pnpm run typecheck && pnpm run test && pnpm run build && pnpm run check:declarations && pnpm run check:bundle && pnpm run check:examples",
|
|
215
220
|
"check:fast": "node scripts/check-fast.mjs",
|
|
216
|
-
"check": "
|
|
217
|
-
"release:check": "
|
|
218
|
-
"prepack": "
|
|
221
|
+
"check": "pnpm run check:core && pnpm run test:browser",
|
|
222
|
+
"release:check": "pnpm run check && pnpm run check:security && pnpm run check:package",
|
|
223
|
+
"prepack": "pnpm run check",
|
|
219
224
|
"check:changes": "node scripts/changelog.mjs --check && node scripts/check-node-suites.mjs && node --test scripts/changelog.test.mjs",
|
|
220
225
|
"changelog:assemble": "node scripts/changelog.mjs",
|
|
221
226
|
"providers:generate": "tsx scripts/generate-providers.mjs",
|
|
222
227
|
"check:providers-generated": "tsx scripts/generate-providers.mjs --check",
|
|
223
|
-
"prebuild": "node scripts/generate-version.mjs &&
|
|
224
|
-
"pretest": "node scripts/generate-version.mjs &&
|
|
225
|
-
"pretest:node": "node scripts/generate-version.mjs &&
|
|
226
|
-
"pretest:workers": "node scripts/generate-version.mjs &&
|
|
227
|
-
"pretest:browser": "
|
|
228
|
-
"pretypecheck": "node scripts/generate-version.mjs &&
|
|
229
|
-
"precheck:bundle": "
|
|
230
|
-
"precheck:fast": "
|
|
228
|
+
"prebuild": "node scripts/generate-version.mjs && pnpm run build:operator-ui",
|
|
229
|
+
"pretest": "node scripts/generate-version.mjs && pnpm run build:operator-ui",
|
|
230
|
+
"pretest:node": "node scripts/generate-version.mjs && pnpm run build:operator-ui",
|
|
231
|
+
"pretest:workers": "node scripts/generate-version.mjs && pnpm run build:operator-ui",
|
|
232
|
+
"pretest:browser": "pnpm run build:operator-ui",
|
|
233
|
+
"pretypecheck": "node scripts/generate-version.mjs && pnpm run build:operator-ui",
|
|
234
|
+
"precheck:bundle": "pnpm run build:operator-ui",
|
|
235
|
+
"precheck:fast": "pnpm run check:operator-ui",
|
|
231
236
|
"eval:regrade": "tsx eval/regrade.ts",
|
|
232
237
|
"eval:compare": "tsx eval/compare.ts",
|
|
233
238
|
"format": "oxfmt --write .",
|
|
@@ -263,8 +268,8 @@
|
|
|
263
268
|
"@cloudflare/codemode": "^0.5.0",
|
|
264
269
|
"@cloudflare/vitest-pool-workers": "^0.18.8",
|
|
265
270
|
"@cloudflare/workers-types": "^4.20250101.0 || ^5.0.0",
|
|
266
|
-
"@fontsource-variable/
|
|
267
|
-
"@fontsource-variable/
|
|
271
|
+
"@fontsource-variable/hanken-grotesk": "^5.3.0",
|
|
272
|
+
"@fontsource-variable/jetbrains-mono": "^5.3.0",
|
|
268
273
|
"@playwright/test": "^1.62.0",
|
|
269
274
|
"@radix-ui/react-dialog": "^1.2.0",
|
|
270
275
|
"@radix-ui/react-slot": "^1.4.0",
|
|
@@ -273,7 +278,6 @@
|
|
|
273
278
|
"@tailwindcss/oxide": "^4.3.3",
|
|
274
279
|
"@tanstack/react-query": "^5.104.1",
|
|
275
280
|
"@tanstack/react-router": "^1.170.41",
|
|
276
|
-
"@tanstack/react-table": "^8.21.3",
|
|
277
281
|
"@types/node": "^22.0.0",
|
|
278
282
|
"@types/react": "^19.3.0",
|
|
279
283
|
"@types/react-dom": "^19.3.0",
|
package/templates/node/AGENTS.md
CHANGED
|
@@ -42,13 +42,19 @@ tokens, upgrading, and diagnosis with `connecta doctor` to their procedures.
|
|
|
42
42
|
- Organize agent pools by connecta's agent pool layout:
|
|
43
43
|
`node_modules/@zackbart/connecta/documentation/auth.md#organizing-an-agents-pools`
|
|
44
44
|
([online](https://github.com/zackbart/connecta/blob/main/documentation/auth.md#organizing-an-agents-pools)).
|
|
45
|
-
Each agent keeps one Connecta connection whose
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
Each agent keeps one Connecta connection whose harness, never the model,
|
|
46
|
+
picks the pool per turn. Tiers are nested pools of shared connectors with
|
|
47
|
+
no `owner`, each spreading the tool list below. Recommended names are
|
|
48
|
+
`<agent>` for the lowest and `<agent>-<tier>` above it; any named pool,
|
|
49
|
+
including an existing `team` or `leadership` pool, may be a tier if all its
|
|
50
|
+
human members are cleared for it. A chat gets the most capable tier everyone
|
|
51
|
+
present is cleared for, and the lowest when anyone present is unknown.
|
|
52
|
+
`<agent>-<user>` (that user's highest tier plus their own connector ids,
|
|
53
|
+
`owner` set to their Workspace address) is used only in a one-on-one with
|
|
54
|
+
that user. List only cleared people in a tier, and never another person in
|
|
55
|
+
a `<agent>-<user>` pool: its per-user connectors act as that user for every
|
|
56
|
+
member. Never add a second Connecta connection or mount downstream tools
|
|
57
|
+
directly.
|
|
52
58
|
- Brand the operator UI in `operatorUi({ branding })`: product and owner names,
|
|
53
59
|
description, favicon, and `theme` (`accent`, `radius`, `fontFamily`,
|
|
54
60
|
`monoFamily`, `colorScheme`). Ask the deployment's owner for their brand
|
package/templates/node/README.md
CHANGED
|
@@ -55,6 +55,8 @@ npm start
|
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
The local commands read the process environment; they do not load `.env`.
|
|
58
|
+
To run them with the values in `.env`, export it into the shell first:
|
|
59
|
+
`set -a; . ./.env; set +a`.
|
|
58
60
|
Compose reads `.env` for the container commands below. Keep the returned
|
|
59
61
|
secret in a client secret store and out of source control and logs. A
|
|
60
62
|
rotation cannot recover an old secret; only the hash persists. An agent has no
|
|
@@ -118,9 +120,9 @@ server, then copy the old file into the database once, before the first start:
|
|
|
118
120
|
npx connecta migrate-state .connecta-state.json .connecta.sqlite
|
|
119
121
|
```
|
|
120
122
|
|
|
121
|
-
In the container,
|
|
122
|
-
|
|
123
|
-
/data/connecta.sqlite`. It copies every live entry with its expiry, keeps any
|
|
123
|
+
In the container, mount the old file and import it into the volume:
|
|
124
|
+
`docker compose run --rm -v "$PWD/.connecta-state.json:/import/state.json:ro"
|
|
125
|
+
connecta npx connecta migrate-state /import/state.json /data/connecta.sqlite`. It copies every live entry with its expiry, keeps any
|
|
124
126
|
key the database already holds, and never changes the old file; delete that
|
|
125
127
|
once the deployment is verified. The 0.28 activity log
|
|
126
128
|
(`.connecta-activity.jsonl`) is not imported; history starts fresh.
|
|
@@ -139,9 +141,9 @@ off. `.env.example` lists each one, and `npm run typecheck` checks every module
|
|
|
139
141
|
whether or not it is switched on.
|
|
140
142
|
|
|
141
143
|
The template explicitly enables `ui: operatorUi()` from
|
|
142
|
-
`@zackbart/connecta/ui`. Open `http://localhost:8787/` and
|
|
143
|
-
|
|
144
|
-
|
|
144
|
+
`@zackbart/connecta/ui`. Open `http://localhost:8787/` and sign in with
|
|
145
|
+
Clerk as a maintainer to inspect Connections and manage connections. Agent
|
|
146
|
+
`cta_` tokens are refused by every human route, the operator UI included. Omit that option and import for an API-only
|
|
145
147
|
server. OAuth callbacks remain in core even with no UI.
|
|
146
148
|
|
|
147
149
|
The page labels each tool as a read or write and each endpoint as writable or
|
|
@@ -215,13 +217,13 @@ Keep this key outside the database. Losing it makes saved values unreadable;
|
|
|
215
217
|
upgrades must reuse it. The shipped `time` connector declares no credential
|
|
216
218
|
slot. Add `credential: { label: "API token" }` to an `api()` connector and read
|
|
217
219
|
it through `await ctx.credential?.get()`, or use a Notion
|
|
218
|
-
connector with `auth: { type: "token" }`, which declares its own slot.
|
|
219
|
-
|
|
220
|
+
connector with `auth: { type: "token" }`, which declares its own slot. Maintainers manage the slot on that
|
|
221
|
+
connector's Connection tab (`/connectors/<id>`); there is no separate Credentials tab.
|
|
220
222
|
|
|
221
223
|
In 0.25.0, this vault also seals downstream OAuth tokens on their first read.
|
|
222
224
|
That is a one-way state migration for those tokens: rolling back to 0.24.x
|
|
223
225
|
requires authorizing each OAuth connector again. See the
|
|
224
|
-
[0.25.0 changelog](
|
|
226
|
+
[0.25.0 changelog](https://github.com/zackbart/connecta/blob/main/CHANGELOG.md#0250--2026-09-23) before upgrading a
|
|
225
227
|
deployment with existing OAuth connections.
|
|
226
228
|
|
|
227
229
|
A saved replacement takes effect on the next call. Connecta tests credentials
|
|
@@ -273,10 +275,11 @@ from `CONNECTA_TOKEN`; it never accepts the secret as a command-line argument.
|
|
|
273
275
|
Remote URLs must use HTTPS.
|
|
274
276
|
|
|
275
277
|
A fully-wired deployment reports exactly the same line as a bare one —
|
|
276
|
-
connector count,
|
|
278
|
+
connector count, the executor, the tool count, the negotiated MCP version, and
|
|
279
|
+
the package version:
|
|
277
280
|
|
|
278
281
|
```text
|
|
279
|
-
Connecta doctor passed: 1 connector(s), QuickJS executed, prescribed
|
|
282
|
+
Connecta doctor passed: 1 connector(s), QuickJS executed, prescribed 6-tool surface, MCP <version>, package <version>.
|
|
280
283
|
```
|
|
281
284
|
|
|
282
285
|
`QuickJS` is this deployment's sandbox, reported by the deployment itself —
|
|
@@ -92,8 +92,8 @@ export default defineConfig((env: Env) => {
|
|
|
92
92
|
// /mcp/<name>, and "agent:<name>" for a declared agent at /agent/<name>.
|
|
93
93
|
// A member connects their own account on the pool's personal connectors.
|
|
94
94
|
// `npm run doctor` checks /agent/local-machine with its token. The starter
|
|
95
|
-
// pool is the agent's base pool (shared connectors, no
|
|
96
|
-
// the agent as the agent pool layout requires.
|
|
95
|
+
// pool is the agent's base pool, its lowest tier (shared connectors, no
|
|
96
|
+
// owner), named after the agent as the agent pool layout requires.
|
|
97
97
|
pools: { "local-machine": { tools: ["time"], members: ["agent:local-machine"] } },
|
|
98
98
|
// Machine clients are agents declared here by name, each with one cta_
|
|
99
99
|
// token. Issue or rotate one locally with
|