chore(eve): tooling - tighten dependency policies (#2034)

Signed-off-by: Andrew Barba <barba@hey.com>
This commit is contained in:
Andrew Barba
2026-08-13 11:23:01 -04:00
committed by GitHub
parent 02b7b7eb4d
commit 7031862fef
40 changed files with 805 additions and 2317 deletions
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
exec node ./scripts/pre-commit-fmt.mjs
+2 -3
View File
@@ -28,7 +28,6 @@ export const getTemplateEntries = cache(async (): Promise<TemplateEntry[]> => {
return composeTemplateEntries(templateManifest, JSON.parse(contents) as GeneratedTemplatesInput);
});
export const getTemplateEntry = cache(
async (slug: string): Promise<TemplateEntry | undefined> =>
(await getTemplateEntries()).find((entry) => entry.slug === slug),
export const getTemplateEntry = cache(async (slug: string): Promise<TemplateEntry | undefined> =>
(await getTemplateEntries()).find((entry) => entry.slug === slug),
);
-1
View File
@@ -69,7 +69,6 @@
"@opentelemetry/api": "1.9.1",
"@opentelemetry/exporter-trace-otlp-http": "0.221.0",
"@opentelemetry/sdk-trace-base": "catalog:",
"@photon-ai/chat-adapter-imessage": "3.2.0",
"@posthog/ai": "7.19.6",
"@resend/chat-sdk-adapter": "0.2.2",
"@tailwindcss/postcss": "4.3.0",
@@ -1,19 +0,0 @@
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "channel/photon-imessage",
"title": "Photon iMessage",
"description": "Connect an eve agent to iMessage through Photon with guided project and phone setup.",
"dependencies": ["@vercel/connect@0.5.0"],
"meta": {
"eve": {
"setup": {
"command": "eve",
"package": "eve",
"bin": "eve",
"args": ["integration", "setup", "photon"]
},
"requires": ">=0.29.0"
}
},
"type": "registry:item"
}
+122 -571
View File
File diff suppressed because it is too large Load Diff
+10 -12
View File
@@ -57,18 +57,16 @@ const syncedTemplates = await Promise.all(
const [files, readme] = await Promise.all([
Promise.all(
entry.files.map(
async (relativePath): Promise<TemplateFile> => ({
contents: await githubText(
rawContentsUrl(github, commit.sha, relativePath),
`Curation drift: "${relativePath}" is listed in the manifest for template ` +
`"${entry.slug}" but does not exist in ` +
`${github.owner}/${github.repo}@${commit.sha}`,
),
language: languageForPath(relativePath),
relativePath,
}),
),
entry.files.map(async (relativePath): Promise<TemplateFile> => ({
contents: await githubText(
rawContentsUrl(github, commit.sha, relativePath),
`Curation drift: "${relativePath}" is listed in the manifest for template ` +
`"${entry.slug}" but does not exist in ` +
`${github.owner}/${github.repo}@${commit.sha}`,
),
language: languageForPath(relativePath),
relativePath,
})),
),
githubText(
rawContentsUrl(github, commit.sha, "README.md"),
@@ -10,9 +10,6 @@
"typecheck": "eve build && tsc"
},
"dependencies": {
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
},
-1
View File
@@ -14,7 +14,6 @@
"dependencies": {
"@auth/core": "0.41.2",
"@vercel/connect": "catalog:",
"@vercel/oidc": "3.8.0",
"ai": "catalog:",
"eve": "workspace:*",
"next": "catalog:",
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
+1 -6
View File
@@ -12,13 +12,8 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"ai": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
"eve": "workspace:*"
},
"devDependencies": {
"@types/node": "catalog:",
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,12 +12,8 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
"eve": "workspace:*"
},
"devDependencies": {
"@types/node": "catalog:",
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,11 +12,7 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"ai": "catalog:",
"eve": "workspace:*"
},
"devDependencies": {
+1 -5
View File
@@ -12,12 +12,8 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
"eve": "workspace:*"
},
"devDependencies": {
"@types/node": "catalog:",
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -12,9 +12,6 @@
},
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
-3
View File
@@ -13,9 +13,6 @@
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@eve-e2e/dynamic-import-dependency": "file:./fixtures/dynamic-import-dependency",
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"@workflow/world-postgres": "catalog:",
"eve": "workspace:*",
"zod": "catalog:"
@@ -13,7 +13,6 @@
"dependencies": {
"@eve-e2e/config": "workspace:*",
"@workflow/world-postgres": "catalog:",
"ai": "catalog:",
"eve": "workspace:*"
},
"devDependencies": {
-1
View File
@@ -11,7 +11,6 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@opentelemetry/core": "catalog:",
"@opentelemetry/sdk-trace-base": "catalog:",
"@vercel/otel": "catalog:",
"eve": "workspace:*"
-321
View File
@@ -1,321 +0,0 @@
{
"$schema": "node_modules/konsistent/konsistent.schema.json",
"version": "v1",
"kebabToPascalMap": {
"github": "GitHub",
"junit": "JUnit",
"instruction": "Instructions"
},
"kebabToCamelMap": {
"github": "github",
"junit": "junit",
"instruction": "instructions"
},
"conventions": [
{
"name": "package-directories",
"description": "Workspace package folders keep their package metadata, changelog, TypeScript configs, and source entrypoint.",
"paths": "packages/{packageName}",
"must": {
"haveType": "directory",
"haveFiles": ["package.json", "CHANGELOG.md", "tsconfig.json", "src/index.ts"]
}
},
{
"name": "public-definitions",
"description": "Public definition requirements.",
"paths": [
"packages/eve/src/public/{conceptName:matches(^[a-z]+$)}s/index.ts",
"!packages/eve/src/public/connections",
"!packages/eve/src/public/definitions"
],
"must": [
{
"name": "public-barrels-must-reexport-their-concept-definition-function-and-type",
"description": "Public barrels re-export their concept's definition function and type.",
"must": {
"export": [
{
"name": "define${conceptName.toPascalCase()}",
"from": "#public/definitions/${conceptName.toCamelCase()}.js"
}
],
"exportTypes": [
{
"name": "${conceptName.toPascalCase()}Definition",
"from": "#public/definitions/${conceptName.toCamelCase()}.js"
}
],
"haveFiles": [
"../definitions/${conceptName.toCamelCase()}.ts",
"../../shared/${conceptName.toCamelCase()}-definition.ts"
]
}
},
{
"name": "public-definitions-must-import-from-matching-shared-definitions",
"description": "Public definitions must import from their matching shared definitions.",
"for": {
"files": ["../definitions/${conceptName.toCamelCase()}.ts"]
},
"must": {
"importFrom": "#shared/${conceptName.toCamelCase()}-definition.js"
}
},
{
"name": "compiler-manifest-must-export-matching-compiled-definitions",
"description": "Compiler manifest must export matching compiled definitions.",
"for": {
"files": ["../../compiler/manifest.ts"]
},
"must": {
"exportTypes": ["Compiled${conceptName.toPascalCase()}Definition"]
}
},
{
"name": "discover-manifest-must-export-matching-source-ref-types",
"description": "Discover manifest must export matching source ref types.",
"for": {
"files": ["../../discover/manifest.ts"]
},
"must": {
"exportTypes": ["${conceptName.toPascalCase()}SourceRef"]
}
},
{
"name": "runtime-types-file-must-export-matching-resolved-definitions",
"description": "Runtime types file must export matching compiled definitions.",
"for": {
"files": ["../../runtime/types.ts"]
},
"must": {
"exportTypes": ["Resolved${conceptName.toPascalCase()}Definition"]
}
}
]
},
{
"name": "public-channel-barrels",
"description": "Built-in public channel barrels re-export their channel factory and core channel types from the implementation module.",
"paths": "packages/eve/src/public/channels/{channelName}/index.ts",
"must": {
"export": [
{
"name": "${channelName.toCamelCase()}Channel",
"from": "#public/channels/${channelName}/${channelName.toCamelCase()}Channel.js"
}
],
"exportTypes": [
{
"name": "${channelName.toPascalCase()}Channel",
"from": "#public/channels/${channelName}/${channelName.toCamelCase()}Channel.js"
},
{
"name": "${channelName.toPascalCase()}ChannelConfig",
"from": "#public/channels/${channelName}/${channelName.toCamelCase()}Channel.js"
},
{
"name": "${channelName.toPascalCase()}ReceiveTarget",
"from": "#public/channels/${channelName}/${channelName.toCamelCase()}Channel.js"
}
]
}
},
{
"name": "public-sandbox-backends",
"description": "Public sandbox implementation barrels have matching backend implementation files.",
"paths": [
"packages/eve/src/public/sandbox/{sandboxName}.ts",
"!packages/eve/src/public/sandbox/index.ts",
"!packages/eve/src/public/sandbox/*-sandbox.ts"
],
"must": [
{
"name": "public-sandbox-barrels-must-reexport-their-backend",
"description": "Public sandbox barrels re-export their backend factory and create options from matching implementation files.",
"must": {
"haveFiles": ["backends/${sandboxName}.ts", "${sandboxName}-sandbox.ts"],
"export": [
{
"name": "${sandboxName.toFlatCase()}",
"from": "#public/sandbox/backends/${sandboxName}.js"
}
],
"exportTypes": [
{
"name": "${sandboxName.toPascalCase()}SandboxCreateOptions",
"from": "#public/sandbox/${sandboxName}-sandbox.js"
}
]
}
},
{
"name": "public-sandbox-options-must-export-create-options",
"description": "Public sandbox option files export the matching create options type.",
"for": {
"files": ["${sandboxName}-sandbox.ts"]
},
"must": {
"exportTypes": ["${sandboxName.toPascalCase()}SandboxCreateOptions"]
}
},
{
"name": "public-sandbox-backends-must-export-their-factory",
"description": "Public sandbox backend implementation files export the matching backend factory using the public create options type.",
"for": {
"files": ["backends/${sandboxName}.ts"]
},
"must": {
"importTypes": [
{
"name": "${sandboxName.toPascalCase()}SandboxCreateOptions",
"from": "#public/sandbox/${sandboxName}-sandbox.js"
}
],
"exportFunctions": [
{
"name": "${sandboxName.toFlatCase()}",
"receiveParamsOfTypes": ["${sandboxName.toPascalCase()}SandboxCreateOptions"]
}
]
}
}
]
},
{
"name": "eval-loaders",
"description": "Eval loaders must export their required symbols.",
"paths": [
"packages/eve/src/evals/loaders/{loaderName}.ts",
"!packages/eve/src/evals/loaders/index.ts"
],
"must": {
"exportFunctions": [
{
"name": "load${loaderName.toPascalCase()}",
"receiveParamsOfTypes": ["string"]
}
]
}
},
{
"name": "eval-reporters",
"description": "Eval reporters must export their required symbols.",
"paths": [
"packages/eve/src/evals/runner/reporters/{reporterName}.ts",
"!packages/eve/src/evals/runner/reporters/types.ts"
],
"must": [
{
"must": {
"importTypes": [
{
"name": "EvalReporter",
"from": "#evals/runner/reporters/types.js"
}
],
"declareClasses": [
{
"name": "${reporterName.toPascalCase()}Reporter",
"implement": ["EvalReporter"]
}
],
"exportTypes": ["${reporterName.toPascalCase()}ReporterConfig"],
"exportFunctions": [
{
"name": "${reporterName.toPascalCase()}",
"receiveParamsOfTypes": ["${reporterName.toPascalCase()}ReporterConfig"],
"returnValueOfType": "EvalReporter"
}
]
}
},
{
"for": {
"files": ["../../reporters/index.ts"]
},
"must": {
"export": [
{
"name": "${reporterName.toPascalCase()}",
"from": "#evals/runner/reporters/${reporterName}.js"
}
],
"exportTypes": [
{
"name": "${reporterName.toPascalCase()}ReporterConfig",
"from": "#evals/runner/reporters/${reporterName}.js"
}
]
}
}
]
},
{
"name": "agent-app-directories",
"description": "Workspace agent apps keep their authored agent entry and instructions in agent/.",
"paths": [
"apps/frameworks/{appName}",
"!apps/frameworks/README.md",
"apps/fixtures/{appName}",
"!apps/fixtures/README.md",
"apps/templates/{appName}",
"!apps/templates/README.md"
],
"must": {
"haveType": "directory",
"haveFiles": ["package.json", "tsconfig.json", "agent/agent.ts", "agent/instructions.md"]
}
},
{
"name": "e2e-fixture-directories",
"description": "Fixture-owned e2e apps share the same package, agent, and eval entry points.",
"paths": "e2e/fixtures/{fixtureName}",
"must": [
{
"must": {
"haveType": "directory",
"haveFiles": [
"package.json",
"tsconfig.json",
".vercelignore",
"agent/agent.ts",
"agent/instructions.md",
"evals/evals.config.ts"
]
}
},
{
"name": "e2e-eval-config-imports",
"description": "E2E eval config files use the public eve/evals config helper.",
"for": {
"files": "evals/evals.config.ts"
},
"must": {
"import": [
{
"name": "defineEvalConfig",
"from": "eve/evals"
}
]
}
},
{
"name": "e2e-eval-imports",
"description": "E2E eval files use the public eve/evals authoring helper.",
"for": {
"files": "evals/**/*.eval.ts"
},
"must": {
"import": [
{
"name": "defineEval",
"from": "eve/evals"
}
]
}
}
]
}
]
}
+5 -13
View File
@@ -21,9 +21,8 @@
"fmt": "oxfmt",
"guard:fixtures": "node ./scripts/guard-test-fixtures.mjs",
"guard:invariants": "node ./scripts/guard-invariants.mjs",
"konsistent": "konsistent",
"lint": "oxlint --fix",
"prepare": "simple-git-hooks",
"prepare": "node ./scripts/install-git-hooks.mjs",
"test": "pnpm test:unit && pnpm test:integration",
"test:e2e": "turbo run test:e2e --concurrency=1",
"test:integration": "turbo run test:integration",
@@ -39,23 +38,16 @@
"@changesets/cli": "2.31.0",
"@microsoft/api-extractor": "7.58.10",
"@types/node": "catalog:",
"ai": "catalog:",
"gray-matter": "4.0.3",
"konsistent": "1.0.0-beta.1",
"oxfmt": "0.58.0",
"oxlint": "1.73.0",
"simple-git-hooks": "2.13.1",
"oxfmt": "0.63.0",
"oxlint": "1.78.0",
"syncpack": "15.3.2",
"turbo": "2.9.18",
"typescript": "catalog:",
"vercel": "58.5.1",
"vitest": "catalog:"
},
"simple-git-hooks": {
"pre-commit": "node ./scripts/pre-commit-fmt.mjs"
"vercel": "58.5.1"
},
"engines": {
"node": ">=24"
},
"packageManager": "pnpm@11.15.0"
"packageManager": "pnpm@11.21.0"
}
@@ -155,10 +155,11 @@ describe("runRemoteAuthFlow", () => {
},
});
let deploymentCall = 0;
const resolveVercelDeployment = vi.fn<RemoteAuthFlowDeps["resolveVercelDeployment"]>(async () =>
deploymentCall++ === 0
? { kind: "not-found" }
: { kind: "resolved", target: SELECTED_TARGET },
const resolveVercelDeployment = vi.fn<RemoteAuthFlowDeps["resolveVercelDeployment"]>(
async () =>
deploymentCall++ === 0
? { kind: "not-found" }
: { kind: "resolved", target: SELECTED_TARGET },
);
const resolveOidcToken = vi.fn<RemoteAuthFlowDeps["resolveOidcToken"]>(async () => ({
kind: "resolved",
@@ -65,7 +65,9 @@ export const EXTENSION_CAPABILITY_VERSIONS = Object.fromEntries(
contract.current,
]),
) as {
readonly [TCapability in ExtensionCapability]: (typeof EXTENSION_CAPABILITY_CONTRACTS)[TCapability]["current"];
readonly [
TCapability in ExtensionCapability
]: (typeof EXTENSION_CAPABILITY_CONTRACTS)[TCapability]["current"];
};
/** Capability requirements stamped by one extension build. */
@@ -109,9 +109,10 @@ export function createSessionCommandInbox(): SessionCommandInboxHandle {
state.pending = true;
state.resolved = undefined;
const next = state.retired
? Promise.resolve(state.hook).then(
(value): IteratorResult<SessionInboxPayload> => ({ done: false, value }),
)
? Promise.resolve(state.hook).then((value): IteratorResult<SessionInboxPayload> => ({
done: false,
value,
}))
: state.iterator.next();
void next.then(
(result) => {
@@ -1653,12 +1653,10 @@ function createMockHook<T>(input: {
}
function createIteratorReturn(): () => Promise<IteratorResult<never>> {
return vi.fn(
async (): Promise<IteratorResult<never>> => ({
done: true,
value: undefined,
}),
);
return vi.fn(async (): Promise<IteratorResult<never>> => ({
done: true,
value: undefined,
}));
}
function nonTurnHookTokens(): string[] {
+2 -2
View File
@@ -336,8 +336,8 @@ async function runDriverLoop(input: {
expectedAttemptIds.size > 0 &&
[...expectedAttemptIds].every((attemptId) => collectedAuthPayloads.has(attemptId))
) {
const payloads = [...expectedAttemptIds].map(
(attemptId) => collectedAuthPayloads.get(attemptId)!,
const payloads = [...expectedAttemptIds].map((attemptId) =>
collectedAuthPayloads.get(attemptId)!,
);
collectedAuthPayloads.clear();
return { kind: "authorization-resume", payloads, sessionState };
@@ -60,13 +60,11 @@ export function computeChannelRouteRegistrations(
const activeFrameworkRoutes = getFrameworkChannelDefinitions()
.filter((channel) => !authoredNames.has(channel.name) && !disabledNames.has(channel.name))
.map(
(channel): NitroChannelRouteRegistration => ({
method: channel.method,
route: channel.urlPath,
cors: channel.cors,
}),
);
.map((channel): NitroChannelRouteRegistration => ({
method: channel.method,
route: channel.urlPath,
cors: channel.cors,
}));
// Concatenate framework defaults first, authored second. Each
// (method, route) pair is registered exactly once.
@@ -53,7 +53,9 @@ const MAX_TYPING_STATUS = 80;
type ChatSdkAdapters = Record<string, Adapter>;
type ChatSdkSendInput = string | UserContent | SendPayload;
type MutableDeliveryOptions<TState> = {
-readonly [Key in keyof ChannelAddressDeliveryOptions<TState>]: ChannelAddressDeliveryOptions<TState>[Key];
-readonly [
Key in keyof ChannelAddressDeliveryOptions<TState>
]: ChannelAddressDeliveryOptions<TState>[Key];
};
type EventData<T extends UnstampedMessageStreamEvent["type"]> =
Extract<UnstampedMessageStreamEvent, { type: T }> extends { data: infer D } ? D : undefined;
@@ -40,11 +40,9 @@ function fakeDeps(): ResolveProvisioningDeps {
return {
requireAuth: vi.fn(async () => {}),
isVercelAuthenticated: vi.fn(async () => true),
detectProjectResolution: vi.fn(
async (): Promise<ProjectResolution> => ({
kind: "unresolved",
}),
),
detectProjectResolution: vi.fn(async (): Promise<ProjectResolution> => ({
kind: "unresolved",
})),
pathExists: vi.fn(async () => true),
validateTeam: vi.fn(async () => {}),
resolveTeam: vi.fn(async () => "team"),
@@ -347,9 +345,10 @@ describe("resolveProvisioning box", () => {
it("adopts a detected on-disk link with a logged-in CLI, asking nothing", async () => {
const deps = fakeDeps();
deps.detectProjectResolution = vi.fn(
async (): Promise<ProjectResolution> => ({ kind: "linked", projectId: "prj_demo" }),
);
deps.detectProjectResolution = vi.fn(async (): Promise<ProjectResolution> => ({
kind: "linked",
projectId: "prj_demo",
}));
// A prompter with no configured answers: any select or password throws,
// proving the adopted link resolves every provisioning question.
const prompter = createPrompter();
@@ -383,9 +382,10 @@ describe("resolveProvisioning box", () => {
it("asks the question tree when the linked directory has no CLI login", async () => {
const deps = fakeDeps();
deps.detectProjectResolution = vi.fn(
async (): Promise<ProjectResolution> => ({ kind: "linked", projectId: "prj_demo" }),
);
deps.detectProjectResolution = vi.fn(async (): Promise<ProjectResolution> => ({
kind: "linked",
projectId: "prj_demo",
}));
deps.isVercelAuthenticated = vi.fn(async () => false);
const box = makeBox({
prompter: createPrompter({ selectValues: ["vercel", "new"] }),
@@ -148,9 +148,10 @@ describe("runInstallVercelCliFlow", () => {
await run(
{
getVercelAuthStatus: statusProbe("cli-missing", "authenticated"),
detectPackageManager: vi.fn(
async (): Promise<DetectedPackageManager> => ({ kind: "npm", source: "lockfile" }),
),
detectPackageManager: vi.fn(async (): Promise<DetectedPackageManager> => ({
kind: "npm",
source: "lockfile",
})),
},
spawnPackageManager,
);
@@ -109,7 +109,7 @@ describe("registerOtelPipeline", () => {
).toThrow();
const processor = (
registerOTel.mock.calls.at(-1)?.[0] as {
registerOTel.mock.calls.at(-1)![0] as {
spanProcessors: { onEnd(span: unknown): void }[];
}
).spanProcessors[0]!;
@@ -136,7 +136,7 @@ describe("registerOtelPipeline", () => {
}),
).toThrow();
const processor = (
registerOTel.mock.calls.at(-1)?.[0] as {
registerOTel.mock.calls.at(-1)![0] as {
spanProcessors: {
onEnd(span: unknown): void;
onStart(span: unknown, parentContext: unknown): void;
+578 -1220
View File
File diff suppressed because it is too large Load Diff
+17 -60
View File
@@ -5,23 +5,22 @@ packages:
- packages/*
allowBuilds:
# Registry templates import types only; this optional build is not needed.
"@google/genai": false
braintrust: false
"@mongodb-js/zstd": true
"@nestjs/core": true
"@parcel/watcher": false
bufferutil: false
cbor-extract: true
esbuild: true
node-liblzma: false
phase: false
protobufjs: true
sharp: true
simple-git-hooks: true
unrs-resolver: true
vue-demi: false
webgpu: true
"@google/genai": false # No-op preinstall.
"@parcel/watcher": false # Builds from source only when explicitly requested.
braintrust: false # Installs an optional CLI binary; the SDK does not need it.
bufferutil: false # The package already includes the supported prebuilt bindings.
esbuild: true # Verifies the installed platform binary.
phase: false # Would install its own Git hooks.
protobufjs: false # Only checks the package version.
sharp: false # Prebuilt platform packages need no install script.
unrs-resolver: false # Prebuilt platform packages need no repair script.
webgpu: true # Clears macOS quarantine from its packaged native binding.
ignoredOptionalDependencies:
- "@braintrust/bt-*"
- "@mongodb-js/zstd"
- cbor-extract
- node-liblzma
catalog:
"@ai-sdk/anthropic": "^4.0.36"
@@ -57,49 +56,7 @@ catalog:
minimumReleaseAge: 2880 # 2 days
minimumReleaseAgeExclude:
# Registry packages are explicitly reviewed before they are added to the eve registry.
- "@agent-browser/eve"
- "@agent-browser/sandbox"
- "@agentphone/chat-sdk-adapter"
- "@beeper/chat-adapter-matrix"
- "@browserbasehq/eve"
- "@chat-adapter/*"
- "@getdial/chat-sdk-adapter"
- "@github-tools/eve-extension"
- "@github-tools/sdk"
- "@kybernesis/arcana"
- "@kapso/chat-adapter"
- "@larksuite/vercel-chat-adapter"
- "@linqapp/chat-sdk-adapter"
- "@liveblocks/chat-sdk-adapter"
- "@novu/chat-sdk-adapter"
- "@photon-ai/chat-adapter-imessage"
- "@resend/chat-sdk-adapter"
- "@upstash/agentkit-eve-extension"
- "@vectorize-io/hindsight-eve"
- "@veltdev/chat-sdk-adapter"
- "@zernio/chat-sdk-adapter"
- chat
- chat-adapter-sendblue
- "@ai-sdk/*"
- "@photon-ai/chat-adapter-imessage"
- "@rolldown/*"
- "@typescript/typescript-*"
- "@turbo/*"
- "@workflow/*"
- "@vercel/*"
- "@vgpu/*"
- ai
- crossws
- experimental-ai-sdk-code-mode
- eve
- nf3
- "@workflow/*"
- nitro
- rolldown
# This release contains the reviewed package-config registry APIs used by the eve CLI.
- shadcn@4.16.0
- turbo
- typescript
- vercel
- workflow
- phase@0.0.1
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env node
import { spawnSync } from "node:child_process";
import { fileURLToPath } from "node:url";
const repoRoot = fileURLToPath(new URL("..", import.meta.url));
const gitProbe = spawnSync("git", ["rev-parse", "--is-inside-work-tree"], {
cwd: repoRoot,
encoding: "utf8",
stdio: ["ignore", "pipe", "ignore"],
});
if (gitProbe.status !== 0 || gitProbe.stdout.trim() !== "true") process.exit(0);
const result = spawnSync("git", ["config", "--local", "core.hooksPath", ".githooks"], {
cwd: repoRoot,
stdio: "inherit",
});
if (result.error) throw result.error;
if (result.status !== 0) process.exit(result.status ?? 1);
+1 -1
View File
@@ -19,7 +19,7 @@
// * Only Added / Copied / Modified / Renamed index entries are considered.
// Deletes and typechanges are ignored.
//
// Intentionally zero runtime deps — invoked by `simple-git-hooks`.
// Intentionally zero runtime deps — invoked by `.githooks/pre-commit`.
import { spawnSync } from "node:child_process";
import { existsSync } from "node:fs";