Skip to content

Commit 24a4b6c

Browse files
committed
Preserve nested filenames for skill versions
1 parent 93ac7c7 commit 24a4b6c

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/resources/beta/skills/versions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export class Versions extends APIResource {
3939
]),
4040
},
4141
this._client,
42+
false,
4243
),
4344
);
4445
}

tests/api-resources/beta/skills/versions.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
import Anthropic, { toFile } from '@anthropic-ai/sdk';
4+
import { mockFetch } from '../../../lib/mock-fetch';
45

56
const client = new Anthropic({
67
apiKey: 'my-anthropic-api-key',
@@ -33,6 +34,39 @@ describe('resource versions', () => {
3334
).rejects.toThrow(Anthropic.NotFoundError);
3435
});
3536

37+
test('create: preserves nested skill filenames in multipart uploads', async () => {
38+
const { fetch: mock, handleRequest } = mockFetch();
39+
const fetch: typeof globalThis.fetch = (req, init) => {
40+
if (typeof req === 'string' && req.startsWith('data:,')) {
41+
return globalThis.fetch(req, init);
42+
}
43+
44+
return mock(req, init);
45+
};
46+
const skillsClient = new Anthropic({ apiKey: 'my-anthropic-api-key', fetch, maxRetries: 0 });
47+
48+
handleRequest(async (_req, init) => {
49+
expect(init?.body).toBeInstanceOf(FormData);
50+
51+
const form = init?.body as FormData;
52+
const file = form.get('files[]');
53+
expect(file).toBeInstanceOf(File);
54+
expect((file as File).name).toBe('my-skill/SKILL.md');
55+
56+
return new Response(JSON.stringify({ id: 'skill_version_123' }), {
57+
headers: { 'content-type': 'application/json' },
58+
});
59+
});
60+
61+
const response = await skillsClient.beta.skills.versions
62+
.create('skill_id', {
63+
files: [await toFile(Buffer.from('Example data'), 'my-skill/SKILL.md')],
64+
})
65+
.asResponse();
66+
67+
expect(response).toBeInstanceOf(Response);
68+
});
69+
3670
test('retrieve: only required params', async () => {
3771
const responsePromise = client.beta.skills.versions.retrieve('version', { skill_id: 'skill_id' });
3872
const rawResponse = await responsePromise.asResponse();

0 commit comments

Comments
 (0)