| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(mastra): add @corsair-dev/mastra ToolProvider for Mastra (#1491) * feat(mastra): add @corsair-dev/mastra ToolProvider for Mastra * feat(mastra): move to adapters/ and address review - move packages/mastra -> adapters/mastra; wire adapters/* into the workspace, publish-changed, deploy/pr-checks, and turbo filters - resolveTenant: a decodable connectionId is authoritative over the tenant function (authorize and resolve can't diverge) - add getToolSchema for the editor tool-detail view - add revokeConnection + supportsRevoke (via corsair manage.disconnect) - peer @mastra/core >=1.64.0; form-field docstrings; README tool recipes - demo/mastra: minimal Mastra playground app * fix(mastra): harden tenant isolation and close review gaps - resolveTenant: the configured tenant is authoritative. A pinned string is never overridden by a connectionId, and when the caller is known a connectionId naming a different tenant is rejected (no cross-tenant access). A fresh connection under a function resolver throws instead of silently opening OAuth under a fallback tenant (Mastra passes no context to authorize). - Document connectionId as an unsigned, server-minted handle. - Require zod ^4.4.0 so z.unknown() rejects omitted required fields. - CI: build/test the full lane over adapters/* too, not just packages/*. - demo: pin the LLM gateway host; ignore SQLite sidecar files. * fix(mastra): optional @mastra/core peer, run checks in CI, document fresh-auth limit * docs(mastra): document ToolAction<any> constraint from @mastra/core base class * chore: regenerate lockfile to resolve missing ts-jest entry * fix(mastra): narrow corsair config field and invokeOperation types * fix(corsair): make AnyCorsairInstance accept real createCorsair() results AnyCorsairInstance instantiated the client generics with a fake shallow plugin shape, expanding the per-plugin mapped types to a structure no real instance matches — so every createCorsair() result was rejected (TS2322) and callers had to cast. Parameterize with an empty plugin set instead: that is the shape common to all instances, so any concrete client is a structural superset and assigns. Drops the widening casts the mastra checks needed. * fix(corsair): accept multi-tenant wrapper in AnyCorsairInstance The empty-plugin-set fix covered single-tenant and tenant-scoped clients but rejected the multi-tenant wrapper: the wrapper is matched by its plugin-tuple argument, and an empty tuple is not assignable from a real one. Give the wrapper member the open plugin array; the two structurally-matched clients keep the empty set. Verified all three instance shapes assign with no cast. * fix(mastra): require a root instance in config; drop narrating comments Narrow the provider config from AnyCorsairInstance to the manage-bearing root instances (single-tenant client or multi-tenant wrapper) via Extract, so a withTenant() scope — which has no manage — is a compile error, not a runtime throw. Drops the now-unneeded manage cast. Also strip narrating comments flagged in review across the adapter, core type, and demo. * build(mastra): keep check files out of the published dts The declaration build shipped stray *.check.d.ts.map into dist; scope it to src minus *.check.ts so the package publishes only its real modules. | 6 天前 | |
fix: update docs and plugin icons for new plugins | 6 天前 | |
update introspection methods | 3 个月前 | |
chore: add git hooks for lint and commit messages (#402) | 2 个月前 | |
fix: update docs and plugin icons for new plugins | 6 天前 | |
ci: add PR checks workflow, CI/CD automation, and code quality tooling (#259) (#268) | 2 个月前 | |
fix: update docs and plugin icons for new plugins | 6 天前 | |
webhook tenant matcher for all plugins | 2 个月前 | |
fix(ci): skip uninstalled plugins in readmes check (#1727) | 3 天前 | |
fix(ci): skip uninstalled plugins in readmes check (#1727) | 3 天前 | |
fix(generator): scaffold jest wiring and display name registration (#434) * fix(generator): scaffold jest wiring and display name registration * fix(generator): complete jest aliases and neutral starter comment * fix(generator): use proven jest config verbatim and deepen starter test * fix(generator): restore corsair core jest alias | 2 个月前 | |
feat(frpc): ship frpc as per-platform npm packages (#803) * feat(frpc): ship frpc as per-platform npm packages Add @corsair-dev/frpc-<platform>-<arch> optional-dependency packages (the esbuild/Turbopack pattern) so corsair resolves frpc from the npm registry instead of a postinstall download — no build script for pnpm to block. resolveFrpcBinary prefers the installed platform package and falls back to the existing postinstall cache (kept for now). Binaries are materialized at publish by scripts/prepare-frpc-packages.mjs (SHA256-verified, frp Apache-2.0 LICENSE + NOTICE bundled), git-ignored, and version-locked to corsair via workspace:*. * fix(frpc): materialize binaries at publish + guard version reuse Address review: (1) each platform package now has a prepack hook that runs prepare-frpc-packages.mjs for its own target, so publishing from a fresh checkout always includes the binary in the tarball; (2) prepare skips only when a .frpc-version marker matches the current FRPC_VERSION, so a binary left from a previous version is re-downloaded + re-verified rather than republished stale. prepare accepts an optional single-target arg for the per-package hook. * chore(frpc): bump platform packages to 0.1.115 (lockstep with corsair) * fix(frpc): add build script so publish tooling materializes the binary publish-changed.mjs runs `pnpm --filter <pkg> build` before publishing each package. The frpc packages had no build script; add one that runs the prepare step (prepack delegates to it), so both release paths — publish-changed.mjs and the turbo `pnpm release` — materialize each binary, not just the prepack hook. * fix(frpc): drop build task + fix EXDEV in prepare script The build task I added made turbo run prepare-frpc-packages.mjs for all six packages during the www app deploy (they are in www's dep graph via corsair's optionalDeps), which both wasted work and failed. Revert to prepack-only: publish-changed.mjs's `pnpm --filter build` is a lenient no-op and `pnpm publish` still fires prepack; turbo no longer runs anything for these packages. Also fix a real latent bug the deploy surfaced: prepare renamed the binary from /tmp into the package dir, which is EXDEV (cross-device) on Linux CI. Use copyFileSync so it works regardless of filesystem. * feat(cli): show the CORSAIR banner + live URL on `corsair http` The banner was orphaned in the old `corsair setup` flow; wire it into the `http` command's success output (it printed plain lines before). Swap the pirate glyph for a celebratory banner + the live tunnel URL. * chore(pr-gate): exclude frpc-* binary packages from the plugin gate The frpc-<platform>-<arch> packages are prebuilt binary shims for the dev tunnel, not integrations, so the plugin rules (per-package tests, demo video, one-plugin-per-PR scope) don't apply. Skip them in pluginOf so the gate no longer flags this PR. * chore(scripts): exclude frpc-* binary packages from plugin validators validate:plugins and validate:docs both scan packages/* and treat every non-ignored dir as an integration, so the frpc-<platform>-<arch> binary shims tripped the structural checks (index.ts, endpoints, jest). Skip them the same way the PR gate does. * fix(frpc): make frpc-binary parse under ts-jest and resolve in the ESM build createRequire(import.meta.url) is ESM-only; ts-jest transpiles this file to CJS, where import.meta and a `const require` both fail to parse — breaking every suite that transitively imports it. Seed createRequire from __filename (tsup `shims` defines it in the ESM build), rename the local to nodeRequire, and map corsair/hub to source in jest so slack/linear don't resolve it to the built dist that now carries the import.meta shim. * refactor(frpc): single source of truth for version + checksums The pinned frp version and the SHA256 table the download paths verify against were duplicated across postinstall-frpc.mjs and prepare-frpc-packages.mjs, kept in sync only by a comment — a drift risk on a security-relevant constant. Extract both to scripts/frpc-release.json, read by each script, and ship it via the package `files` so the end-user postinstall resolves it too. frpc-binary.ts keeps its version literal (a runtime cache-path segment, non-security) with a pointer to the JSON. * chore(frpc): bump corsair + frpc packages to 0.1.117 npm latest is 0.1.116 (without optionalDependencies) and 0.1.115 is already published, so the frpc optional deps only reach `npm i corsair` once latest advances past 0.1.116. workspace:* pins each frpc package to the exact 0.1.117 at publish time (verified via pnpm pack). | 29 天前 | |
lint fixes and try-catch block fix | 5 个月前 | |
fix(ci): isolate npm publish failures and sort lockfile (#1014) | 22 天前 | |
fix(ci): isolate npm publish failures and sort lockfile (#1014) | 22 天前 | |
fix: update docs and plugin icons for new plugins | 6 天前 | |
feat: Add Webhook Tenant Matcher for all Plugins (#293) | 2 个月前 | |
feat(frpc): ship frpc as per-platform npm packages (#803) * feat(frpc): ship frpc as per-platform npm packages Add @corsair-dev/frpc-<platform>-<arch> optional-dependency packages (the esbuild/Turbopack pattern) so corsair resolves frpc from the npm registry instead of a postinstall download — no build script for pnpm to block. resolveFrpcBinary prefers the installed platform package and falls back to the existing postinstall cache (kept for now). Binaries are materialized at publish by scripts/prepare-frpc-packages.mjs (SHA256-verified, frp Apache-2.0 LICENSE + NOTICE bundled), git-ignored, and version-locked to corsair via workspace:*. * fix(frpc): materialize binaries at publish + guard version reuse Address review: (1) each platform package now has a prepack hook that runs prepare-frpc-packages.mjs for its own target, so publishing from a fresh checkout always includes the binary in the tarball; (2) prepare skips only when a .frpc-version marker matches the current FRPC_VERSION, so a binary left from a previous version is re-downloaded + re-verified rather than republished stale. prepare accepts an optional single-target arg for the per-package hook. * chore(frpc): bump platform packages to 0.1.115 (lockstep with corsair) * fix(frpc): add build script so publish tooling materializes the binary publish-changed.mjs runs `pnpm --filter <pkg> build` before publishing each package. The frpc packages had no build script; add one that runs the prepare step (prepack delegates to it), so both release paths — publish-changed.mjs and the turbo `pnpm release` — materialize each binary, not just the prepack hook. * fix(frpc): drop build task + fix EXDEV in prepare script The build task I added made turbo run prepare-frpc-packages.mjs for all six packages during the www app deploy (they are in www's dep graph via corsair's optionalDeps), which both wasted work and failed. Revert to prepack-only: publish-changed.mjs's `pnpm --filter build` is a lenient no-op and `pnpm publish` still fires prepack; turbo no longer runs anything for these packages. Also fix a real latent bug the deploy surfaced: prepare renamed the binary from /tmp into the package dir, which is EXDEV (cross-device) on Linux CI. Use copyFileSync so it works regardless of filesystem. * feat(cli): show the CORSAIR banner + live URL on `corsair http` The banner was orphaned in the old `corsair setup` flow; wire it into the `http` command's success output (it printed plain lines before). Swap the pirate glyph for a celebratory banner + the live tunnel URL. * chore(pr-gate): exclude frpc-* binary packages from the plugin gate The frpc-<platform>-<arch> packages are prebuilt binary shims for the dev tunnel, not integrations, so the plugin rules (per-package tests, demo video, one-plugin-per-PR scope) don't apply. Skip them in pluginOf so the gate no longer flags this PR. * chore(scripts): exclude frpc-* binary packages from plugin validators validate:plugins and validate:docs both scan packages/* and treat every non-ignored dir as an integration, so the frpc-<platform>-<arch> binary shims tripped the structural checks (index.ts, endpoints, jest). Skip them the same way the PR gate does. * fix(frpc): make frpc-binary parse under ts-jest and resolve in the ESM build createRequire(import.meta.url) is ESM-only; ts-jest transpiles this file to CJS, where import.meta and a `const require` both fail to parse — breaking every suite that transitively imports it. Seed createRequire from __filename (tsup `shims` defines it in the ESM build), rename the local to nodeRequire, and map corsair/hub to source in jest so slack/linear don't resolve it to the built dist that now carries the import.meta shim. * refactor(frpc): single source of truth for version + checksums The pinned frp version and the SHA256 table the download paths verify against were duplicated across postinstall-frpc.mjs and prepare-frpc-packages.mjs, kept in sync only by a comment — a drift risk on a security-relevant constant. Extract both to scripts/frpc-release.json, read by each script, and ship it via the package `files` so the end-user postinstall resolves it too. frpc-binary.ts keeps its version literal (a runtime cache-path segment, non-security) with a pointer to the JSON. * chore(frpc): bump corsair + frpc packages to 0.1.117 npm latest is 0.1.116 (without optionalDependencies) and 0.1.115 is already published, so the frpc optional deps only reach `npm i corsair` once latest advances past 0.1.116. workspace:* pins each frpc package to the exact 0.1.117 at publish time (verified via pnpm pack). | 29 天前 | |
feat(mastra): add @corsair-dev/mastra ToolProvider for Mastra (#1491) * feat(mastra): add @corsair-dev/mastra ToolProvider for Mastra * feat(mastra): move to adapters/ and address review - move packages/mastra -> adapters/mastra; wire adapters/* into the workspace, publish-changed, deploy/pr-checks, and turbo filters - resolveTenant: a decodable connectionId is authoritative over the tenant function (authorize and resolve can't diverge) - add getToolSchema for the editor tool-detail view - add revokeConnection + supportsRevoke (via corsair manage.disconnect) - peer @mastra/core >=1.64.0; form-field docstrings; README tool recipes - demo/mastra: minimal Mastra playground app * fix(mastra): harden tenant isolation and close review gaps - resolveTenant: the configured tenant is authoritative. A pinned string is never overridden by a connectionId, and when the caller is known a connectionId naming a different tenant is rejected (no cross-tenant access). A fresh connection under a function resolver throws instead of silently opening OAuth under a fallback tenant (Mastra passes no context to authorize). - Document connectionId as an unsigned, server-minted handle. - Require zod ^4.4.0 so z.unknown() rejects omitted required fields. - CI: build/test the full lane over adapters/* too, not just packages/*. - demo: pin the LLM gateway host; ignore SQLite sidecar files. * fix(mastra): optional @mastra/core peer, run checks in CI, document fresh-auth limit * docs(mastra): document ToolAction<any> constraint from @mastra/core base class * chore: regenerate lockfile to resolve missing ts-jest entry * fix(mastra): narrow corsair config field and invokeOperation types * fix(corsair): make AnyCorsairInstance accept real createCorsair() results AnyCorsairInstance instantiated the client generics with a fake shallow plugin shape, expanding the per-plugin mapped types to a structure no real instance matches — so every createCorsair() result was rejected (TS2322) and callers had to cast. Parameterize with an empty plugin set instead: that is the shape common to all instances, so any concrete client is a structural superset and assigns. Drops the widening casts the mastra checks needed. * fix(corsair): accept multi-tenant wrapper in AnyCorsairInstance The empty-plugin-set fix covered single-tenant and tenant-scoped clients but rejected the multi-tenant wrapper: the wrapper is matched by its plugin-tuple argument, and an empty tuple is not assignable from a real one. Give the wrapper member the open plugin array; the two structurally-matched clients keep the empty set. Verified all three instance shapes assign with no cast. * fix(mastra): require a root instance in config; drop narrating comments Narrow the provider config from AnyCorsairInstance to the manage-bearing root instances (single-tenant client or multi-tenant wrapper) via Extract, so a withTenant() scope — which has no manage — is a compile error, not a runtime throw. Drops the now-unneeded manage cast. Also strip narrating comments flagged in review across the adapter, core type, and demo. * build(mastra): keep check files out of the published dts The declaration build shipped stray *.check.d.ts.map into dist; scope it to src minus *.check.ts so the package publishes only its real modules. | 6 天前 | |
fix(ci): isolate npm publish failures and sort lockfile (#1014) | 22 天前 | |
fix(ci): isolate npm publish failures and sort lockfile (#1014) | 22 天前 | |
feat(frpc): ship frpc as per-platform npm packages (#803) * feat(frpc): ship frpc as per-platform npm packages Add @corsair-dev/frpc-<platform>-<arch> optional-dependency packages (the esbuild/Turbopack pattern) so corsair resolves frpc from the npm registry instead of a postinstall download — no build script for pnpm to block. resolveFrpcBinary prefers the installed platform package and falls back to the existing postinstall cache (kept for now). Binaries are materialized at publish by scripts/prepare-frpc-packages.mjs (SHA256-verified, frp Apache-2.0 LICENSE + NOTICE bundled), git-ignored, and version-locked to corsair via workspace:*. * fix(frpc): materialize binaries at publish + guard version reuse Address review: (1) each platform package now has a prepack hook that runs prepare-frpc-packages.mjs for its own target, so publishing from a fresh checkout always includes the binary in the tarball; (2) prepare skips only when a .frpc-version marker matches the current FRPC_VERSION, so a binary left from a previous version is re-downloaded + re-verified rather than republished stale. prepare accepts an optional single-target arg for the per-package hook. * chore(frpc): bump platform packages to 0.1.115 (lockstep with corsair) * fix(frpc): add build script so publish tooling materializes the binary publish-changed.mjs runs `pnpm --filter <pkg> build` before publishing each package. The frpc packages had no build script; add one that runs the prepare step (prepack delegates to it), so both release paths — publish-changed.mjs and the turbo `pnpm release` — materialize each binary, not just the prepack hook. * fix(frpc): drop build task + fix EXDEV in prepare script The build task I added made turbo run prepare-frpc-packages.mjs for all six packages during the www app deploy (they are in www's dep graph via corsair's optionalDeps), which both wasted work and failed. Revert to prepack-only: publish-changed.mjs's `pnpm --filter build` is a lenient no-op and `pnpm publish` still fires prepack; turbo no longer runs anything for these packages. Also fix a real latent bug the deploy surfaced: prepare renamed the binary from /tmp into the package dir, which is EXDEV (cross-device) on Linux CI. Use copyFileSync so it works regardless of filesystem. * feat(cli): show the CORSAIR banner + live URL on `corsair http` The banner was orphaned in the old `corsair setup` flow; wire it into the `http` command's success output (it printed plain lines before). Swap the pirate glyph for a celebratory banner + the live tunnel URL. * chore(pr-gate): exclude frpc-* binary packages from the plugin gate The frpc-<platform>-<arch> packages are prebuilt binary shims for the dev tunnel, not integrations, so the plugin rules (per-package tests, demo video, one-plugin-per-PR scope) don't apply. Skip them in pluginOf so the gate no longer flags this PR. * chore(scripts): exclude frpc-* binary packages from plugin validators validate:plugins and validate:docs both scan packages/* and treat every non-ignored dir as an integration, so the frpc-<platform>-<arch> binary shims tripped the structural checks (index.ts, endpoints, jest). Skip them the same way the PR gate does. * fix(frpc): make frpc-binary parse under ts-jest and resolve in the ESM build createRequire(import.meta.url) is ESM-only; ts-jest transpiles this file to CJS, where import.meta and a `const require` both fail to parse — breaking every suite that transitively imports it. Seed createRequire from __filename (tsup `shims` defines it in the ESM build), rename the local to nodeRequire, and map corsair/hub to source in jest so slack/linear don't resolve it to the built dist that now carries the import.meta shim. * refactor(frpc): single source of truth for version + checksums The pinned frp version and the SHA256 table the download paths verify against were duplicated across postinstall-frpc.mjs and prepare-frpc-packages.mjs, kept in sync only by a comment — a drift risk on a security-relevant constant. Extract both to scripts/frpc-release.json, read by each script, and ship it via the package `files` so the end-user postinstall resolves it too. frpc-binary.ts keeps its version literal (a runtime cache-path segment, non-security) with a pointer to the JSON. * chore(frpc): bump corsair + frpc packages to 0.1.117 npm latest is 0.1.116 (without optionalDependencies) and 0.1.115 is already published, so the frpc optional deps only reach `npm i corsair` once latest advances past 0.1.116. workspace:* pins each frpc package to the exact 0.1.117 at publish time (verified via pnpm pack). | 29 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 6 天前 | ||
| 6 天前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 6 天前 | ||
| 2 个月前 | ||
| 6 天前 | ||
| 2 个月前 | ||
| 3 天前 | ||
| 3 天前 | ||
| 2 个月前 | ||
| 29 天前 | ||
| 5 个月前 | ||
| 22 天前 | ||
| 22 天前 | ||
| 6 天前 | ||
| 2 个月前 | ||
| 29 天前 | ||
| 6 天前 | ||
| 22 天前 | ||
| 22 天前 | ||
| 29 天前 |