Skip to content

Commit d7912fa

Browse files
authored
feat: switch installer to Claude Opus 5.5 and bump @workos/skills to 0.8.0 (#265)
* feat: switch installer to Claude Opus 5.5 and bump @workos/skills to 0.8.0 * test(evals): gate eval tools like production and accept authkitProxy The eval harness passed every tool in allowedTools, which skips installerCanUseTool. Eval agents could run commands the shipped installer denies, including curl and read-only workos CLI calls against the developer's signed-in account. allowedTools is now empty, as in production. authkit-nextjs 4.4 makes authkitMiddleware a deprecated alias of authkitProxy; the Next.js grader accepts both.
1 parent 54e0fba commit d7912fa

6 files changed

Lines changed: 14 additions & 11 deletions

File tree

‎bun.lock‎

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"@workos/emulate": "^0.14.0",
3232
"@workos/migrations": "^2.6.0",
3333
"@workos/openapi-spec": "^0.123.0",
34-
"@workos/skills": "0.7.3",
34+
"@workos/skills": "0.8.0",
3535
"chalk": "^6.0.1",
3636
"diff": "^9.0.0",
3737
"fast-glob": "^3.3.3",

‎src/cli.config.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import pkg from '../package.json' with { type: 'json' };
44
export const version = pkg.version;
55

66
export const config = {
7-
model: 'claude-opus-4-5-20251101',
7+
model: 'claude-opus-5-5',
88
doctorModel: 'claude-haiku-4-5-20251001',
99

1010
// Production defaults - override via env vars for local dev.

‎tests/evals/__tests__/agent-executor.spec.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ describe('AgentExecutor', () => {
109109
const [agentRunConfig] = mockRunAgent.mock.calls[0];
110110
expect(agentRunConfig.workingDirectory).toBe(testDir);
111111
expect(agentRunConfig.model).toBe('test-model');
112-
expect(agentRunConfig.allowedTools).toContain('Skill');
113-
expect(agentRunConfig.allowedTools).toContain('Write');
112+
// Must match production so every tool call goes through installerCanUseTool
113+
expect(agentRunConfig.allowedTools).toEqual([]);
114114
expect(agentRunConfig.mcpServers).toBeUndefined();
115115
// Direct mode — no gateway URL
116116
expect(agentRunConfig.sdkEnv.ANTHROPIC_API_KEY).toBe('sk-ant-test');

‎tests/evals/agent-executor.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,9 @@ export class AgentExecutor {
138138
const agentRunConfig: AgentRunConfig = {
139139
workingDirectory: this.workDir,
140140
model: process.env.EVAL_MODEL ?? getConfig().model,
141-
allowedTools: ['Skill', 'Read', 'Write', 'Edit', 'Bash', 'Glob', 'Grep', 'WebFetch'],
141+
// Empty like production: listed tools skip installerCanUseTool, which would let
142+
// eval agents run commands (e.g. `workos`, `curl`) the shipped installer denies.
143+
allowedTools: [],
142144
sdkEnv,
143145
claudeExecutablePath: await ensureClaudeCodeExecutable(),
144146
};

‎tests/evals/graders/nextjs.grader.ts‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,9 @@ export class NextjsGrader implements Grader {
113113
const sdkImportChecks = await this.fileGrader.checkFileContains(middlewareFile, ['@workos-inc/authkit-nextjs']);
114114
checks.push(...sdkImportChecks);
115115

116-
// Check for authkit integration: authkitMiddleware OR (authkit + handleAuthkitProxy, or its deprecated alias handleAuthkitHeaders)
117-
const middlewareChecks = await this.fileGrader.checkFileContains(middlewareFile, ['authkitMiddleware']);
116+
// Check for authkit integration: authkitProxy (or its deprecated alias authkitMiddleware)
117+
// OR (authkit + handleAuthkitProxy, or its deprecated alias handleAuthkitHeaders)
118+
const middlewareChecks = await this.fileGrader.checkFileContains(middlewareFile, [/authkit(Proxy|Middleware)\b/]);
118119
const composableChecks = await this.fileGrader.checkFileContains(middlewareFile, [
119120
'authkit(',
120121
/handleAuthkit(Proxy|Headers)\b/,
@@ -127,10 +128,10 @@ export class NextjsGrader implements Grader {
127128
name: 'AuthKit middleware integration',
128129
passed: usesAuthkitMiddleware || usesComposable,
129130
message: usesAuthkitMiddleware
130-
? 'Uses authkitMiddleware'
131+
? 'Uses authkitProxy/authkitMiddleware'
131132
: usesComposable
132133
? 'Uses authkit() composable with handleAuthkitProxy'
133-
: 'Missing authkitMiddleware or authkit() composable integration',
134+
: 'Missing authkitProxy/authkitMiddleware or authkit() composable integration',
134135
};
135136
checks.push(authkitCheck);
136137

0 commit comments

Comments
 (0)