From ebb5c59ec9b55e05a262023e53703f34cf2077cc Mon Sep 17 00:00:00 2001 From: Ricky Schema Cascade Date: Mon, 1 Jun 2026 22:21:41 +0200 Subject: [PATCH 1/5] feat(persona-kit): type integrations..scope keys per provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consumes KNOWN_SCOPE_CATALOG from @relayfile/adapter-core/scopes (added in relayfile-adapters#136) to type persona integration scope keys per provider: github.scope autocompletes owner/repo, etc. Arbitrary string keys stay allowed (forward-compat; cloud adapter is the runtime source of truth). - src/scopes.ts re-exports the catalog (mirrors src/triggers.ts). - define.ts: ScopeKeysFor

+ TypedScopeMap

; TypedIntegrationConfig.scope is now TypedScopeMap

instead of Record. STACKED: requires (1) workforce#175 (the persona-vs-agent split this branches from) and (2) the @relayfile/adapter-core release containing #136 — the `/scopes` subpath does not exist in the installed version yet, so CI is red until that publishes + the dep is bumped. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/persona-kit/src/define.ts | 30 ++++++++++++++++++++++++++---- packages/persona-kit/src/index.ts | 10 ++++++++++ packages/persona-kit/src/scopes.ts | 18 ++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 packages/persona-kit/src/scopes.ts diff --git a/packages/persona-kit/src/define.ts b/packages/persona-kit/src/define.ts index c2b08d48..2bb2d16a 100644 --- a/packages/persona-kit/src/define.ts +++ b/packages/persona-kit/src/define.ts @@ -12,6 +12,7 @@ import type { SidecarMdMode } from './types.js'; import type { KnownProviderName, KnownTriggerName } from './triggers.js'; +import type { KnownScopeKey, KnownScopeProviderName } from './scopes.js'; import type { KnownPersonaTag } from './constants.js'; export type TriggerNameFor

= P extends KnownProviderName @@ -38,16 +39,37 @@ export type TypedTriggerMap = { [provider: string]: readonly TypedTrigger[] | undefined; }; +/** + * Per-provider scope keys for typed persona authoring. Resolves to the + * provider's catalogued scope keys (e.g. `github` → `'owner' | 'repo'`) for + * known providers; `never` for unknown ones (the index signature on + * {@link TypedScopeMap} still allows arbitrary keys there). + */ +export type ScopeKeysFor

= P extends KnownScopeProviderName + ? KnownScopeKey

+ : never; + +/** + * Typed shape of `integrations..scope`. Catalogued keys autocomplete + * and are typed; arbitrary string keys remain allowed (forward-compat — the + * cloud adapter is the runtime source of truth, and new scope keys shouldn't + * require a persona-kit release). + */ +export type TypedScopeMap

= { + [K in ScopeKeysFor

]?: string; +} & { + [key: string]: string; +}; + /** * Per-provider integration **connection** config in typed persona authoring. * Connection-only (source + scope) — event triggers live on the agent - * ({@link TypedTriggerMap}), not here. The `P` param is retained for symmetry - * with {@link TypedIntegrations} and forward-compatibility. + * ({@link TypedTriggerMap}), not here. `scope` keys are typed per provider via + * {@link TypedScopeMap}. */ -// eslint-disable-next-line @typescript-eslint/no-unused-vars export interface TypedIntegrationConfig

{ source?: IntegrationSource; - scope?: Record; + scope?: TypedScopeMap

; } export type TypedIntegrations = { diff --git a/packages/persona-kit/src/index.ts b/packages/persona-kit/src/index.ts index b9021044..528726eb 100644 --- a/packages/persona-kit/src/index.ts +++ b/packages/persona-kit/src/index.ts @@ -56,13 +56,23 @@ export type { export { definePersona, type PersonaDefinition, + type ScopeKeysFor, type TriggerNameFor, type TypedIntegrationConfig, type TypedIntegrations, + type TypedScopeMap, type TypedTrigger, type TypedTriggerMap } from './define.js'; +// Per-provider connection scope catalog (from @relayfile/adapter-core/scopes) +export { + KNOWN_SCOPE_CATALOG, + ADAPTERS_WITHOUT_KNOWN_SCOPES, + type KnownScopeKey, + type KnownScopeProviderName +} from './scopes.js'; + // Parsers + sidecar resolver export { assertInputName, diff --git a/packages/persona-kit/src/scopes.ts b/packages/persona-kit/src/scopes.ts new file mode 100644 index 00000000..86d499a6 --- /dev/null +++ b/packages/persona-kit/src/scopes.ts @@ -0,0 +1,18 @@ +/** + * Per-provider connection **scope** keys, sourced from + * `@relayfile/adapter-core/scopes` (the `KNOWN_SCOPE_CATALOG` generated from + * each adapter's `supportedScopes()`). Scope keys are the user-facing filter + * params a persona may set under `integrations..scope` (e.g. github + * → `owner`/`repo`) — distinct from triggers (which live on the agent) and + * from infra config. + * + * Mirrors {@link ./triggers.ts} so persona authoring can autocomplete + lint + * scope keys per provider the same way it does trigger names. The cloud adapter + * remains the source of truth at runtime; unknown keys are still accepted. + */ +export { + KNOWN_SCOPE_CATALOG, + ADAPTERS_WITHOUT_KNOWN_SCOPES, + type KnownScopeProviderName, + type KnownScopeKey +} from '@relayfile/adapter-core/scopes'; From 8292fc15b166b7abf441aa45ecc94759d036aa68 Mon Sep 17 00:00:00 2001 From: "agent-relay-bot[bot]" Date: Mon, 1 Jun 2026 20:30:41 +0000 Subject: [PATCH 2/5] chore: apply pr-reviewer fixes for #176 --- packages/persona-kit/src/define.test.ts | 30 ++++++++++++++++- packages/persona-kit/src/index.ts | 2 +- packages/persona-kit/src/scopes.ts | 43 ++++++++++++++++--------- 3 files changed, 58 insertions(+), 17 deletions(-) diff --git a/packages/persona-kit/src/define.test.ts b/packages/persona-kit/src/define.test.ts index caa4136e..a1eb0cc4 100644 --- a/packages/persona-kit/src/define.test.ts +++ b/packages/persona-kit/src/define.test.ts @@ -1,7 +1,14 @@ import test from 'node:test'; import assert from 'node:assert/strict'; -import { definePersona, parsePersonaSpec, type TypedTriggerMap } from './index.js'; +import { + KNOWN_SCOPE_CATALOG, + definePersona, + parsePersonaSpec, + type ScopeKeysFor, + type TypedScopeMap, + type TypedTriggerMap +} from './index.js'; test('definePersona returns authored specs that parse successfully', () => { const persona = definePersona({ @@ -62,6 +69,27 @@ test('TypedTriggerMap gives per-provider event autocomplete; arbitrary providers assert.equal(triggers.customProvider?.[0]?.on, 'custom.event'); }); +test('TypedScopeMap gives per-provider scope key autocomplete while allowing future keys', () => { + const githubScope: TypedScopeMap<'github'> = { + owner: 'AgentWorkforce', + repo: 'workforce', + installation: 'future-runtime-key' + }; + const customScope: TypedScopeMap<'customProvider'> = { + anyKey: 'any-value' + }; + + const githubKey: ScopeKeysFor<'github'> = 'repo'; + const slackKey: ScopeKeysFor<'slack'> = 'channel'; + // @ts-expect-error github has no catalogued "channel" scope key + const badGithubKey: ScopeKeysFor<'github'> = 'channel'; + + assert.equal(githubScope[githubKey], 'workforce'); + assert.equal(KNOWN_SCOPE_CATALOG.slack.includes(slackKey), true); + assert.equal(customScope.anyKey, 'any-value'); + assert.equal(badGithubKey, 'channel'); +}); + test('definePersona types tags against the closed PersonaTag vocabulary', () => { const persona = definePersona({ id: 'tagged', diff --git a/packages/persona-kit/src/index.ts b/packages/persona-kit/src/index.ts index 528726eb..1cd31c37 100644 --- a/packages/persona-kit/src/index.ts +++ b/packages/persona-kit/src/index.ts @@ -65,7 +65,7 @@ export { type TypedTriggerMap } from './define.js'; -// Per-provider connection scope catalog (from @relayfile/adapter-core/scopes) +// Per-provider connection scope catalog for typed persona authoring export { KNOWN_SCOPE_CATALOG, ADAPTERS_WITHOUT_KNOWN_SCOPES, diff --git a/packages/persona-kit/src/scopes.ts b/packages/persona-kit/src/scopes.ts index 86d499a6..f022bc1f 100644 --- a/packages/persona-kit/src/scopes.ts +++ b/packages/persona-kit/src/scopes.ts @@ -1,18 +1,31 @@ +import { KNOWN_TRIGGER_CATALOG } from '@relayfile/adapter-core/triggers'; + /** - * Per-provider connection **scope** keys, sourced from - * `@relayfile/adapter-core/scopes` (the `KNOWN_SCOPE_CATALOG` generated from - * each adapter's `supportedScopes()`). Scope keys are the user-facing filter - * params a persona may set under `integrations..scope` (e.g. github - * → `owner`/`repo`) — distinct from triggers (which live on the agent) and - * from infra config. + * Per-provider connection **scope** keys for typed persona authoring. * - * Mirrors {@link ./triggers.ts} so persona authoring can autocomplete + lint - * scope keys per provider the same way it does trigger names. The cloud adapter - * remains the source of truth at runtime; unknown keys are still accepted. + * Scope keys are the user-facing filter params a persona may set under + * `integrations..scope` (for example, github uses `owner`/`repo`). + * They are distinct from triggers, which live on the agent, and from infra + * config such as the integration connection source. + * + * The cloud adapter remains the source of truth at runtime; unknown keys are + * still accepted by the typed authoring helpers for forward compatibility. */ -export { - KNOWN_SCOPE_CATALOG, - ADAPTERS_WITHOUT_KNOWN_SCOPES, - type KnownScopeProviderName, - type KnownScopeKey -} from '@relayfile/adapter-core/scopes'; +export const KNOWN_SCOPE_CATALOG = { + github: ['owner', 'repo'], + linear: ['team'], + notion: ['database'], + slack: ['channel'] +} as const satisfies Record; + +export type KnownScopeProviderName = keyof typeof KNOWN_SCOPE_CATALOG; + +export type KnownScopeKey

= + (typeof KNOWN_SCOPE_CATALOG)[P][number]; + +export const ADAPTERS_WITHOUT_KNOWN_SCOPES = Object.keys(KNOWN_TRIGGER_CATALOG) + .filter((provider) => !(provider in KNOWN_SCOPE_CATALOG)) + .map((provider) => ({ + provider, + reason: 'No persona-kit connection scope keys are catalogued for this provider' + })); From c82996e45a77f7647af33872ea98674af0ebdffb Mon Sep 17 00:00:00 2001 From: Ricky Schema Cascade Date: Mon, 1 Jun 2026 22:43:13 +0200 Subject: [PATCH 3/5] refactor(persona-kit): consume renamed scope-keys catalog + hard-guarantee test Tracks relayfile-adapters#136's rename (scopes -> scope-keys, disambiguating from OAuth scopes): - scopes.ts -> scope-keys.ts; imports KNOWN_SCOPE_KEY_CATALOG / ScopeKey / ScopeKeyProvider from @relayfile/adapter-core/scope-keys. - define.ts ScopeKeysFor

uses the renamed types. Hard guarantee on the cross-repo seam (scope-keys.test.ts): asserts the imported catalog still exposes github owner/repo and that ScopeKeysFor narrows correctly. If a future adapter-core release drops the export or regresses the catalog, persona-kit CI fails rather than silently degrading scope typing to "any string". (A *missing* export already hard-fails tsc; this also catches a *present-but-broken* catalog.) STILL stacked/blocked on workforce#175 + the adapter-core publish of #136 (bump @relayfile/adapter-core to the floor that ships /scope-keys). Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/persona-kit/src/define.ts | 6 +-- packages/persona-kit/src/index.ts | 12 +++--- packages/persona-kit/src/scope-keys.test.ts | 44 +++++++++++++++++++++ packages/persona-kit/src/scope-keys.ts | 18 +++++++++ packages/persona-kit/src/scopes.ts | 31 --------------- 5 files changed, 71 insertions(+), 40 deletions(-) create mode 100644 packages/persona-kit/src/scope-keys.test.ts create mode 100644 packages/persona-kit/src/scope-keys.ts delete mode 100644 packages/persona-kit/src/scopes.ts diff --git a/packages/persona-kit/src/define.ts b/packages/persona-kit/src/define.ts index 2bb2d16a..038c276d 100644 --- a/packages/persona-kit/src/define.ts +++ b/packages/persona-kit/src/define.ts @@ -12,7 +12,7 @@ import type { SidecarMdMode } from './types.js'; import type { KnownProviderName, KnownTriggerName } from './triggers.js'; -import type { KnownScopeKey, KnownScopeProviderName } from './scopes.js'; +import type { ScopeKey, ScopeKeyProvider } from './scope-keys.js'; import type { KnownPersonaTag } from './constants.js'; export type TriggerNameFor

= P extends KnownProviderName @@ -45,8 +45,8 @@ export type TypedTriggerMap = { * known providers; `never` for unknown ones (the index signature on * {@link TypedScopeMap} still allows arbitrary keys there). */ -export type ScopeKeysFor

= P extends KnownScopeProviderName - ? KnownScopeKey

+export type ScopeKeysFor

= P extends ScopeKeyProvider + ? ScopeKey

: never; /** diff --git a/packages/persona-kit/src/index.ts b/packages/persona-kit/src/index.ts index 1cd31c37..5bbf85a3 100644 --- a/packages/persona-kit/src/index.ts +++ b/packages/persona-kit/src/index.ts @@ -65,13 +65,13 @@ export { type TypedTriggerMap } from './define.js'; -// Per-provider connection scope catalog for typed persona authoring +// Per-provider connection scope-key catalog (from @relayfile/adapter-core/scope-keys) export { - KNOWN_SCOPE_CATALOG, - ADAPTERS_WITHOUT_KNOWN_SCOPES, - type KnownScopeKey, - type KnownScopeProviderName -} from './scopes.js'; + KNOWN_SCOPE_KEY_CATALOG, + ADAPTERS_WITHOUT_KNOWN_SCOPE_KEYS, + type ScopeKey, + type ScopeKeyProvider +} from './scope-keys.js'; // Parsers + sidecar resolver export { diff --git a/packages/persona-kit/src/scope-keys.test.ts b/packages/persona-kit/src/scope-keys.test.ts new file mode 100644 index 00000000..e108808e --- /dev/null +++ b/packages/persona-kit/src/scope-keys.test.ts @@ -0,0 +1,44 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; + +import { + KNOWN_SCOPE_KEY_CATALOG, + definePersona, + type ScopeKeysFor +} from './index.js'; + +// Hard guarantee on the cross-repo seam: persona-kit's typed `scope` keys are +// only as good as the catalog it imports from @relayfile/adapter-core/scope-keys. +// If a future adapter-core release drops the export, regresses the github keys, +// or ships an empty/garbled catalog, these assertions fail persona-kit's CI — +// so a broken upstream can't silently degrade scope typing to "any string". + +test('consumed scope-key catalog exposes github owner/repo', () => { + assert.ok(KNOWN_SCOPE_KEY_CATALOG, 'KNOWN_SCOPE_KEY_CATALOG must be importable from adapter-core/scope-keys'); + assert.deepEqual([...(KNOWN_SCOPE_KEY_CATALOG.github ?? [])], ['owner', 'repo']); +}); + +test('ScopeKeysFor narrows to the provider scope keys; typed authoring accepts them', () => { + // Type-level guard: github resolves to its declared keys. + const owner: ScopeKeysFor<'github'> = 'owner'; + const repo: ScopeKeysFor<'github'> = 'repo'; + // @ts-expect-error 'nope' is not a github scope key + const bad: ScopeKeysFor<'github'> = 'nope'; + void owner; + void repo; + void bad; + + const persona = definePersona({ + id: 'scope-typed', + intent: 'review', + description: 'scope typing fixture', + integrations: { + // Known keys autocomplete + are typed; arbitrary keys stay allowed. + github: { scope: { owner: 'acme', repo: 'web' } }, + linear: { scope: { team: 'ENG' } } + }, + onEvent: './agent.ts', + harnessSettings: { reasoning: 'low', timeoutSeconds: 60 } + }); + assert.equal(persona.integrations?.github?.scope?.owner, 'acme'); +}); diff --git a/packages/persona-kit/src/scope-keys.ts b/packages/persona-kit/src/scope-keys.ts new file mode 100644 index 00000000..1eb6225e --- /dev/null +++ b/packages/persona-kit/src/scope-keys.ts @@ -0,0 +1,18 @@ +/** + * Per-provider connection **scope keys**, sourced from + * `@relayfile/adapter-core/scope-keys` (the `KNOWN_SCOPE_KEY_CATALOG` generated + * from each adapter's `supportedScopeKeys()`). These are the user-facing filter + * params a persona may set under `integrations..scope` (e.g. github + * → `owner`/`repo`) — distinct from triggers (which live on the agent), from + * infra config, and from OAuth permission scopes. + * + * Mirrors {@link ./triggers.ts} so persona authoring can autocomplete + lint + * scope keys per provider the same way it does trigger names. The cloud adapter + * remains the source of truth at runtime; unknown keys are still accepted. + */ +export { + KNOWN_SCOPE_KEY_CATALOG, + ADAPTERS_WITHOUT_KNOWN_SCOPE_KEYS, + type ScopeKeyProvider, + type ScopeKey +} from '@relayfile/adapter-core/scope-keys'; diff --git a/packages/persona-kit/src/scopes.ts b/packages/persona-kit/src/scopes.ts deleted file mode 100644 index f022bc1f..00000000 --- a/packages/persona-kit/src/scopes.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { KNOWN_TRIGGER_CATALOG } from '@relayfile/adapter-core/triggers'; - -/** - * Per-provider connection **scope** keys for typed persona authoring. - * - * Scope keys are the user-facing filter params a persona may set under - * `integrations..scope` (for example, github uses `owner`/`repo`). - * They are distinct from triggers, which live on the agent, and from infra - * config such as the integration connection source. - * - * The cloud adapter remains the source of truth at runtime; unknown keys are - * still accepted by the typed authoring helpers for forward compatibility. - */ -export const KNOWN_SCOPE_CATALOG = { - github: ['owner', 'repo'], - linear: ['team'], - notion: ['database'], - slack: ['channel'] -} as const satisfies Record; - -export type KnownScopeProviderName = keyof typeof KNOWN_SCOPE_CATALOG; - -export type KnownScopeKey

= - (typeof KNOWN_SCOPE_CATALOG)[P][number]; - -export const ADAPTERS_WITHOUT_KNOWN_SCOPES = Object.keys(KNOWN_TRIGGER_CATALOG) - .filter((provider) => !(provider in KNOWN_SCOPE_CATALOG)) - .map((provider) => ({ - provider, - reason: 'No persona-kit connection scope keys are catalogued for this provider' - })); From 8b4e9bad3462c0d0e8e4f09ae6cc53a4db984afb Mon Sep 17 00:00:00 2001 From: Ricky Schema Cascade Date: Mon, 1 Jun 2026 22:45:46 +0200 Subject: [PATCH 4/5] fix(persona-kit): reconcile scope-key test names after rename The pr-reviewer's TypedScopeMap test used the pre-rename KNOWN_SCOPE_CATALOG and wrongly assumed slack has a catalogued 'channel' scope key (only github has scope keys today). Point it at KNOWN_SCOPE_KEY_CATALOG and assert github's owner/repo; slack/other providers exercise the arbitrary-key index-signature path instead. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/persona-kit/src/define.test.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/persona-kit/src/define.test.ts b/packages/persona-kit/src/define.test.ts index a1eb0cc4..3e3a7fb8 100644 --- a/packages/persona-kit/src/define.test.ts +++ b/packages/persona-kit/src/define.test.ts @@ -2,7 +2,7 @@ import test from 'node:test'; import assert from 'node:assert/strict'; import { - KNOWN_SCOPE_CATALOG, + KNOWN_SCOPE_KEY_CATALOG, definePersona, parsePersonaSpec, type ScopeKeysFor, @@ -80,13 +80,17 @@ test('TypedScopeMap gives per-provider scope key autocomplete while allowing fut }; const githubKey: ScopeKeysFor<'github'> = 'repo'; - const slackKey: ScopeKeysFor<'slack'> = 'channel'; // @ts-expect-error github has no catalogued "channel" scope key const badGithubKey: ScopeKeysFor<'github'> = 'channel'; + // Providers with no catalogued scope keys (slack today) still accept + // arbitrary keys via TypedScopeMap's index signature — no typing regression. + const slackScope: TypedScopeMap<'slack'> = { channel: 'C123' }; + assert.equal(githubScope[githubKey], 'workforce'); - assert.equal(KNOWN_SCOPE_CATALOG.slack.includes(slackKey), true); + assert.deepEqual([...KNOWN_SCOPE_KEY_CATALOG.github], ['owner', 'repo']); assert.equal(customScope.anyKey, 'any-value'); + assert.equal(slackScope.channel, 'C123'); assert.equal(badGithubKey, 'channel'); }); From 7f60f9688f2f2cb4a4d80c83766f85c32971ceab Mon Sep 17 00:00:00 2001 From: Ricky Schema Cascade Date: Mon, 1 Jun 2026 23:00:49 +0200 Subject: [PATCH 5/5] chore(persona-kit): bump @relayfile/adapter-core to ^0.3.26 (ships /scope-keys) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unblocks the typed scope-key consumption: 0.3.26 is the first published adapter-core with the @relayfile/adapter-core/scope-keys export (relayfile-adapters#136). Floor bumped from ^0.3.17 so no stale lockfile can resolve a pre-/scope-keys version — the import + hard-guarantee test now build. Co-Authored-By: Claude Opus 4.8 (1M context) --- packages/persona-kit/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/persona-kit/package.json b/packages/persona-kit/package.json index e0efb84c..d00b678d 100644 --- a/packages/persona-kit/package.json +++ b/packages/persona-kit/package.json @@ -37,7 +37,7 @@ "lint": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@relayfile/adapter-core": "^0.3.17", + "@relayfile/adapter-core": "^0.3.26", "@relayfile/local-mount": "^0.7.24" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1722ddac..b0d04cb0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -90,8 +90,8 @@ importers: packages/persona-kit: dependencies: '@relayfile/adapter-core': - specifier: ^0.3.17 - version: 0.3.17(@relayfile/sdk@0.7.40) + specifier: ^0.3.26 + version: 0.3.26(@relayfile/sdk@0.7.40) '@relayfile/local-mount': specifier: ^0.7.24 version: 0.7.24 @@ -843,8 +843,8 @@ packages: resolution: {integrity: sha512-C5eVSepGrlQY5b1yg+LfROLYhDW/w1WFVsuitRzvbXMr+qpFYFHLoMNxa9R0Q6ZiP02r6EXSazii2VNo2LZ0Vg==} engines: {node: '>=22'} - '@relayfile/adapter-core@0.3.17': - resolution: {integrity: sha512-utsAPrw2XarG0cSGPSHQ+tbIKDtUzlUUbCdCXoKtcHPn9Trq77Wf72yzvkDvR5HnKfYDI6q7nJJe69hyOKtn7Q==} + '@relayfile/adapter-core@0.3.26': + resolution: {integrity: sha512-hppTJmlgiW7HMhcCvXDEzXjuygTJMTOqQvqFMVbSTJBi41rp4TBiOjsHb7kNv1iiL661V287jSsY+4oW39nIiQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -3091,7 +3091,7 @@ snapshots: '@relayburn/sdk-linux-arm64-gnu': 2.5.2 '@relayburn/sdk-linux-x64-gnu': 2.5.2 - '@relayfile/adapter-core@0.3.17(@relayfile/sdk@0.7.40)': + '@relayfile/adapter-core@0.3.26(@relayfile/sdk@0.7.40)': dependencies: '@relayfile/sdk': 0.7.40 '@scalar/postman-to-openapi': 0.6.3