@slatesvideo/shared 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/auth.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ export declare const AGENT_DIR: string;
2
+ export declare const CONNECTION_FILE: string;
3
+ export interface AgentConnectionFile {
4
+ cloud: {
5
+ token: string | null;
6
+ };
7
+ desktop: {
8
+ enabled: boolean;
9
+ port: number | null;
10
+ token: string | null;
11
+ };
12
+ }
13
+ export declare function readConnection(): AgentConnectionFile;
14
+ export declare function writeConnection(data: AgentConnectionFile): void;
15
+ export declare function setCloudToken(token: string | null): void;
16
+ export declare function clearCloudToken(): void;
17
+ export declare function deleteConnection(): void;
18
+ export declare class MissingCloudTokenError extends Error {
19
+ code: string;
20
+ constructor();
21
+ }
22
+ export declare class MissingDesktopServerError extends Error {
23
+ code: string;
24
+ constructor();
25
+ }
26
+ export declare function requireCloudToken(): string;
27
+ export declare function requireDesktop(): {
28
+ port: number;
29
+ token: string;
30
+ };
31
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,SAAS,QAA6B,CAAA;AACnD,eAAO,MAAM,eAAe,QAA2C,CAAA;AAEvE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IAC/B,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAA;QAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACrB,CAAA;CACF;AAOD,wBAAgB,cAAc,IAAI,mBAAmB,CAepD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAG/D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAMxD;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,IAAI,SAAwB;;CAM7B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,IAAI,SAA2B;;CAMhC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED,wBAAgB,cAAc,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMhE"}
package/dist/auth.js ADDED
@@ -0,0 +1,80 @@
1
+ import { homedir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync, } from 'node:fs';
4
+ // Reads/writes ~/.slates/agent-connection.json — the single file the
5
+ // Slates desktop app produces and the MCP/CLI consume.
6
+ //
7
+ // The desktop app owns the desktop side (port + token) of this file. The
8
+ // CLI owns the cloud side (slates_sk_ token). Both can be present, both
9
+ // can be missing. We never assume one implies the other; tools that
10
+ // require the desktop server fail-fast with a clear message when only
11
+ // the cloud token is present, and vice versa.
12
+ export const AGENT_DIR = join(homedir(), '.slates');
13
+ export const CONNECTION_FILE = join(AGENT_DIR, 'agent-connection.json');
14
+ const EMPTY = {
15
+ cloud: { token: null },
16
+ desktop: { enabled: false, port: null, token: null },
17
+ };
18
+ export function readConnection() {
19
+ if (!existsSync(CONNECTION_FILE))
20
+ return { ...EMPTY, cloud: { ...EMPTY.cloud }, desktop: { ...EMPTY.desktop } };
21
+ try {
22
+ const parsed = JSON.parse(readFileSync(CONNECTION_FILE, 'utf-8'));
23
+ return {
24
+ cloud: { token: parsed.cloud?.token ?? null },
25
+ desktop: {
26
+ enabled: !!parsed.desktop?.enabled,
27
+ port: parsed.desktop?.port ?? null,
28
+ token: parsed.desktop?.token ?? null,
29
+ },
30
+ };
31
+ }
32
+ catch {
33
+ return { ...EMPTY, cloud: { ...EMPTY.cloud }, desktop: { ...EMPTY.desktop } };
34
+ }
35
+ }
36
+ export function writeConnection(data) {
37
+ if (!existsSync(AGENT_DIR))
38
+ mkdirSync(AGENT_DIR, { recursive: true });
39
+ writeFileSync(CONNECTION_FILE, JSON.stringify(data, null, 2), { mode: 0o600 });
40
+ }
41
+ export function setCloudToken(token) {
42
+ const cur = readConnection();
43
+ writeConnection({
44
+ ...cur,
45
+ cloud: { token },
46
+ });
47
+ }
48
+ export function clearCloudToken() {
49
+ setCloudToken(null);
50
+ }
51
+ export function deleteConnection() {
52
+ if (existsSync(CONNECTION_FILE))
53
+ unlinkSync(CONNECTION_FILE);
54
+ }
55
+ export class MissingCloudTokenError extends Error {
56
+ code = 'CLOUD_TOKEN_MISSING';
57
+ constructor() {
58
+ super('No Slates cloud token found. Run `slates login` to authorize, or open Slates → Settings → Agent Control → Connect Claude Code.');
59
+ }
60
+ }
61
+ export class MissingDesktopServerError extends Error {
62
+ code = 'DESKTOP_SERVER_MISSING';
63
+ constructor() {
64
+ super('Slates desktop is not running with Agent Control enabled. Open Slates → Settings → Agent Control → toggle on.');
65
+ }
66
+ }
67
+ export function requireCloudToken() {
68
+ const c = readConnection();
69
+ if (!c.cloud.token)
70
+ throw new MissingCloudTokenError();
71
+ return c.cloud.token;
72
+ }
73
+ export function requireDesktop() {
74
+ const c = readConnection();
75
+ if (!c.desktop.enabled || !c.desktop.port || !c.desktop.token) {
76
+ throw new MissingDesktopServerError();
77
+ }
78
+ return { port: c.desktop.port, token: c.desktop.token };
79
+ }
80
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const DEFAULT_CLOUD_BASE_URL: string;
2
+ export declare class SlatesCloudClient {
3
+ private readonly token;
4
+ private readonly baseUrl;
5
+ constructor(token?: string, baseUrl?: string);
6
+ get<T>(path: string): Promise<T>;
7
+ post<T>(path: string, body: unknown): Promise<T>;
8
+ private handle;
9
+ }
10
+ export interface SlatesUserInfo {
11
+ success: boolean;
12
+ user: {
13
+ id: string;
14
+ email: string;
15
+ name: string;
16
+ license_status: string;
17
+ tier: string;
18
+ credit_balance_cents: number;
19
+ credit_balance_dollars: string;
20
+ };
21
+ scopes: string[];
22
+ }
23
+ export interface CreditsBalance {
24
+ success: boolean;
25
+ credit_balance_cents: number;
26
+ credit_balance_dollars: string;
27
+ }
28
+ export interface ModelRegistryResponse {
29
+ success: boolean;
30
+ credit_markup: number;
31
+ models: Array<{
32
+ model: string;
33
+ cost_cents: number;
34
+ cost_dollars: string;
35
+ }>;
36
+ }
37
+ //# sourceMappingURL=cloud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.d.ts","sourceRoot":"","sources":["../../src/clients/cloud.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,QACgC,CAAA;AAMnE,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,GAAE,MAA4B,EACnC,OAAO,GAAE,MAA+B;IAGrD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAOhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;YAYxC,MAAM;CAiBrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,cAAc,EAAE,MAAM,CAAA;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,oBAAoB,EAAE,MAAM,CAAA;QAC5B,sBAAsB,EAAE,MAAM,CAAA;KAC/B,CAAA;IACD,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,sBAAsB,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,MAAM,CAAA;QAClB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAC,CAAA;CACH"}
@@ -0,0 +1,48 @@
1
+ import { requireCloudToken } from '../auth.js';
2
+ export const DEFAULT_CLOUD_BASE_URL = process.env.SLATES_CLOUD_BASE_URL ?? 'https://slates-api.fly.dev';
3
+ // Thin client for slates-api. Used for credit-aware ops that route through
4
+ // the user's account (generation proxy, credits balance, model registry,
5
+ // license checks). The desktop client below is the local equivalent.
6
+ export class SlatesCloudClient {
7
+ token;
8
+ baseUrl;
9
+ constructor(token = requireCloudToken(), baseUrl = DEFAULT_CLOUD_BASE_URL) {
10
+ this.token = token;
11
+ this.baseUrl = baseUrl;
12
+ }
13
+ async get(path) {
14
+ const res = await fetch(`${this.baseUrl}${path}`, {
15
+ headers: { Authorization: `Bearer ${this.token}` },
16
+ });
17
+ return this.handle(path, res);
18
+ }
19
+ async post(path, body) {
20
+ const res = await fetch(`${this.baseUrl}${path}`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ Authorization: `Bearer ${this.token}`,
25
+ },
26
+ body: JSON.stringify(body),
27
+ });
28
+ return this.handle(path, res);
29
+ }
30
+ async handle(path, res) {
31
+ const text = await res.text();
32
+ let parsed = null;
33
+ try {
34
+ parsed = text ? JSON.parse(text) : null;
35
+ }
36
+ catch {
37
+ // fall through
38
+ }
39
+ if (!res.ok) {
40
+ const detail = parsed && typeof parsed === 'object' && 'error' in parsed
41
+ ? parsed.error
42
+ : text || res.statusText;
43
+ throw new Error(`slates-api ${path} failed (${res.status}): ${detail}`);
44
+ }
45
+ return parsed;
46
+ }
47
+ }
48
+ //# sourceMappingURL=cloud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud.js","sourceRoot":"","sources":["../../src/clients/cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,CAAC,MAAM,sBAAsB,GACjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,4BAA4B,CAAA;AAEnE,2EAA2E;AAC3E,yEAAyE;AACzE,qEAAqE;AAErE,MAAM,OAAO,iBAAiB;IAET;IACA;IAFnB,YACmB,QAAgB,iBAAiB,EAAE,EACnC,UAAkB,sBAAsB;QADxC,UAAK,GAAL,KAAK,CAA8B;QACnC,YAAO,GAAP,OAAO,CAAiC;IACxD,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE;SACnD,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,MAAM,CAAI,IAAI,EAAE,GAAG,CAAC,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa;QACvC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;aACtC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,MAAM,CAAI,IAAI,EAAE,GAAG,CAAC,CAAA;IAClC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAI,IAAY,EAAE,GAAa;QACjD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7B,IAAI,MAAM,GAAY,IAAI,CAAA;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,MAAM,GACV,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,MAAM;gBACvD,CAAC,CAAE,MAA4B,CAAC,KAAK;gBACrC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAA;YAC5B,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,YAAY,GAAG,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAA;QACzE,CAAC;QACD,OAAO,MAAW,CAAA;IACpB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ export declare class SlatesDesktopClient {
2
+ private readonly token;
3
+ private readonly port;
4
+ constructor(opts?: {
5
+ token?: string;
6
+ port?: number;
7
+ });
8
+ private get baseUrl();
9
+ healthz(): Promise<{
10
+ ok: true;
11
+ service: string;
12
+ }>;
13
+ get<T>(path: string, params?: Record<string, string | number | boolean | null | undefined>): Promise<T>;
14
+ post<T>(path: string, body: unknown): Promise<T>;
15
+ private handle;
16
+ }
17
+ //# sourceMappingURL=desktop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop.d.ts","sourceRoot":"","sources":["../../src/clients/desktop.ts"],"names":[],"mappings":"AAOA,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;gBAEjB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;IAWpD,OAAO,KAAK,OAAO,GAElB;IAEK,OAAO,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAQjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAcvG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;YAYxC,MAAM;CAiBrB"}
@@ -0,0 +1,73 @@
1
+ import { requireDesktop } from '../auth.js';
2
+ // Thin client for the local Slates desktop HTTP server (127.0.0.1:PORT).
3
+ // All workflow/state ops (projects, characters, storyboards, frames,
4
+ // asset slot binding) go here. Generation routes through cloud, but the
5
+ // generated assets are saved into desktop projects via this client.
6
+ export class SlatesDesktopClient {
7
+ token;
8
+ port;
9
+ constructor(opts) {
10
+ if (opts?.token && opts.port) {
11
+ this.token = opts.token;
12
+ this.port = opts.port;
13
+ }
14
+ else {
15
+ const d = requireDesktop();
16
+ this.token = d.token;
17
+ this.port = d.port;
18
+ }
19
+ }
20
+ get baseUrl() {
21
+ return `http://127.0.0.1:${this.port}`;
22
+ }
23
+ async healthz() {
24
+ const res = await fetch(`${this.baseUrl}/agent/healthz`);
25
+ if (!res.ok) {
26
+ throw new Error(`Desktop healthz failed (${res.status})`);
27
+ }
28
+ return res.json();
29
+ }
30
+ async get(path, params) {
31
+ const url = new URL(`${this.baseUrl}${path}`);
32
+ if (params) {
33
+ for (const [k, v] of Object.entries(params)) {
34
+ if (v == null)
35
+ continue;
36
+ url.searchParams.set(k, String(v));
37
+ }
38
+ }
39
+ const res = await fetch(url.toString(), {
40
+ headers: { Authorization: `Bearer ${this.token}` },
41
+ });
42
+ return this.handle(path, res);
43
+ }
44
+ async post(path, body) {
45
+ const res = await fetch(`${this.baseUrl}${path}`, {
46
+ method: 'POST',
47
+ headers: {
48
+ 'Content-Type': 'application/json',
49
+ Authorization: `Bearer ${this.token}`,
50
+ },
51
+ body: JSON.stringify(body),
52
+ });
53
+ return this.handle(path, res);
54
+ }
55
+ async handle(path, res) {
56
+ const text = await res.text();
57
+ let parsed = null;
58
+ try {
59
+ parsed = text ? JSON.parse(text) : null;
60
+ }
61
+ catch {
62
+ // fall through
63
+ }
64
+ if (!res.ok) {
65
+ const detail = parsed && typeof parsed === 'object' && 'error' in parsed
66
+ ? parsed.error
67
+ : text || res.statusText;
68
+ throw new Error(`slates-desktop ${path} failed (${res.status}): ${detail}`);
69
+ }
70
+ return parsed;
71
+ }
72
+ }
73
+ //# sourceMappingURL=desktop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop.js","sourceRoot":"","sources":["../../src/clients/desktop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export * from './auth.js';
2
+ export { SlatesCloudClient, type SlatesUserInfo, type CreditsBalance, type ModelRegistryResponse } from './clients/cloud.js';
3
+ export { SlatesDesktopClient } from './clients/desktop.js';
4
+ export * as operations from './operations/index.js';
5
+ export { ALL_OPERATIONS, defaultContext, type Operation, type OperationContext, type OperationResult } from './operations/index.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC5H,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from './auth.js';
2
+ export { SlatesCloudClient } from './clients/cloud.js';
3
+ export { SlatesDesktopClient } from './clients/desktop.js';
4
+ export * as operations from './operations/index.js';
5
+ export { ALL_OPERATIONS, defaultContext } from './operations/index.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,OAAO,EAAE,iBAAiB,EAAwE,MAAM,oBAAoB,CAAA;AAC5H,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,cAAc,EAA+D,MAAM,uBAAuB,CAAA"}
@@ -0,0 +1,123 @@
1
+ import { z } from 'zod';
2
+ import { SlatesCloudClient } from '../clients/cloud.js';
3
+ import { SlatesDesktopClient } from '../clients/desktop.js';
4
+ export interface OperationContext {
5
+ cloud: () => SlatesCloudClient;
6
+ desktop: () => SlatesDesktopClient;
7
+ }
8
+ export declare function defaultContext(): OperationContext;
9
+ export interface OperationResult {
10
+ text: string;
11
+ images?: Array<{
12
+ data: string;
13
+ mimeType: string;
14
+ }>;
15
+ data?: unknown;
16
+ }
17
+ export interface Operation<I> {
18
+ id: string;
19
+ description: string;
20
+ input: z.ZodType<I>;
21
+ run: (input: I, ctx: OperationContext) => Promise<OperationResult>;
22
+ }
23
+ export declare const getWorkspaceState: Operation<{
24
+ projectId?: string;
25
+ }>;
26
+ export declare const getMe: Operation<Record<string, never>>;
27
+ export declare const getCreditBalance: Operation<Record<string, never>>;
28
+ export declare const listAvailableModels: Operation<Record<string, never>>;
29
+ export declare const estimateGenerationCost: Operation<{
30
+ model: string;
31
+ quantity?: number;
32
+ }>;
33
+ export declare const listProjects: Operation<Record<string, never>>;
34
+ export declare const createProject: Operation<{
35
+ name: string;
36
+ }>;
37
+ export declare const getProject: Operation<{
38
+ id: string;
39
+ }>;
40
+ export declare const listAssets: Operation<{
41
+ projectId: string;
42
+ }>;
43
+ export declare const getAssetImage: Operation<{
44
+ id: string;
45
+ fullRes?: boolean;
46
+ }>;
47
+ export declare const uploadReferenceImage: Operation<{
48
+ projectId: string;
49
+ filePath?: string;
50
+ dataUrl?: string;
51
+ }>;
52
+ export declare const listFolders: Operation<{
53
+ projectId: string;
54
+ }>;
55
+ export declare const createFolder: Operation<{
56
+ projectId: string;
57
+ name: string;
58
+ }>;
59
+ export declare const moveAssetsToFolder: Operation<{
60
+ assetIds: string[];
61
+ folderId: string | null;
62
+ }>;
63
+ export declare const listCharacters: Operation<{
64
+ projectId: string;
65
+ }>;
66
+ export declare const createCharacter: Operation<{
67
+ projectId: string;
68
+ name: string;
69
+ description?: string;
70
+ style?: 'realistic' | 'anime' | 'pixar' | 'comic-book';
71
+ }>;
72
+ export declare const setCharacterTurnaround: Operation<{
73
+ characterId: string;
74
+ assetId: string | null;
75
+ }>;
76
+ export declare const setCharacterExpression: Operation<{
77
+ characterId: string;
78
+ assetId: string | null;
79
+ }>;
80
+ export declare const listEnvironments: Operation<{
81
+ projectId: string;
82
+ }>;
83
+ export declare const createEnvironment: Operation<{
84
+ projectId: string;
85
+ name: string;
86
+ description?: string;
87
+ style?: 'realistic' | 'anime' | 'pixar' | 'comic-book';
88
+ }>;
89
+ export declare const listStoryboards: Operation<{
90
+ projectId: string;
91
+ }>;
92
+ export declare const createStoryboard: Operation<{
93
+ projectId: string;
94
+ name: string;
95
+ description?: string;
96
+ }>;
97
+ export declare const getStoryboardWithFrames: Operation<{
98
+ storyboardId: string;
99
+ }>;
100
+ export declare const addScene: Operation<{
101
+ storyboardId: string;
102
+ name: string;
103
+ position?: number;
104
+ }>;
105
+ export declare const addFrame: Operation<{
106
+ projectId: string;
107
+ storyboardId: string;
108
+ sceneId: string;
109
+ assetId: string;
110
+ shotLabel?: string;
111
+ notes?: string;
112
+ position?: number;
113
+ }>;
114
+ export declare const generateImage: Operation<{
115
+ prompt: string;
116
+ resolution?: '1k' | '2k' | '4k';
117
+ aspectRatio?: string;
118
+ count?: number;
119
+ referenceImageUrls?: string[];
120
+ confirm?: boolean;
121
+ }>;
122
+ export declare const ALL_OPERATIONS: ReadonlyArray<Operation<unknown>>;
123
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,446 @@
1
+ // Operations layer — the ONE place every Slates agent tool is defined.
2
+ // Both the MCP server and the CLI register these as their tool / command
3
+ // surface. Every operation:
4
+ //
5
+ // - has a stable string id (matches the MCP tool name)
6
+ // - has a Zod input schema (used for both MCP tool definition and CLI
7
+ // argument parsing)
8
+ // - returns a structured object that's JSON-encoded for CLI stdout and
9
+ // wrapped in MCP content blocks for the MCP path
10
+ // - chooses its transport (cloud vs desktop) internally — callers
11
+ // don't need to know which side a given op talks to
12
+ import { z } from 'zod';
13
+ import { SlatesCloudClient } from '../clients/cloud.js';
14
+ import { SlatesDesktopClient } from '../clients/desktop.js';
15
+ export function defaultContext() {
16
+ return {
17
+ cloud: () => new SlatesCloudClient(),
18
+ desktop: () => new SlatesDesktopClient(),
19
+ };
20
+ }
21
+ // ── Helpers ─────────────────────────────────────────────────────
22
+ function ok(data, text) {
23
+ return {
24
+ text: text ?? JSON.stringify(data, null, 2),
25
+ data,
26
+ };
27
+ }
28
+ // ── Workspace + identity ────────────────────────────────────────
29
+ export const getWorkspaceState = {
30
+ id: 'slates_get_workspace_state',
31
+ description: 'Snapshot of the user\'s Slates workspace: projects list, optional active project detail. Call once at the start of a workflow to seed your understanding.',
32
+ input: z.object({ projectId: z.string().optional() }),
33
+ async run(input, ctx) {
34
+ const desktop = ctx.desktop();
35
+ const { projects } = await desktop.get('/agent/projects');
36
+ let activeProject = undefined;
37
+ if (input.projectId) {
38
+ const r = await desktop.get('/agent/projects/get', { id: input.projectId });
39
+ activeProject = r.project;
40
+ }
41
+ return ok({ projects, activeProject });
42
+ },
43
+ };
44
+ export const getMe = {
45
+ id: 'slates_get_me',
46
+ description: 'Identity, license tier, and credit balance for the connected Slates account.',
47
+ input: z.object({}).strict(),
48
+ async run(_input, ctx) {
49
+ const me = await ctx.cloud().get('/api/agent/me');
50
+ return ok(me);
51
+ },
52
+ };
53
+ export const getCreditBalance = {
54
+ id: 'slates_get_credit_balance',
55
+ description: 'Current Slates credit balance, in cents and dollars. Call before any generation that costs credits.',
56
+ input: z.object({}).strict(),
57
+ async run(_input, ctx) {
58
+ const r = await ctx.cloud().get('/api/agent/credits/balance');
59
+ return ok(r);
60
+ },
61
+ };
62
+ export const listAvailableModels = {
63
+ id: 'slates_list_available_models',
64
+ description: 'Full registry of generation models with their per-call credit cost. Use this for cost estimation.',
65
+ input: z.object({}).strict(),
66
+ async run(_input, ctx) {
67
+ const r = await ctx.cloud().get('/api/agent/models');
68
+ return ok(r);
69
+ },
70
+ };
71
+ export const estimateGenerationCost = {
72
+ id: 'slates_estimate_generation_cost',
73
+ description: 'Pre-flight cost estimate. Call before any generate_* op so the user sees "this will cost N credits" up front. Pairs with the >$0.50 confirm gate.',
74
+ input: z.object({
75
+ model: z.string().describe('Model id, e.g. "nano-banana-2-2k" or "veo-3.1-fast-8s"'),
76
+ quantity: z.number().int().min(1).max(10).optional().describe('Number of generations (default 1)'),
77
+ }),
78
+ async run(input, ctx) {
79
+ const registry = await ctx.cloud().get('/api/agent/models');
80
+ const entry = registry.models.find((m) => m.model === input.model);
81
+ if (!entry) {
82
+ throw new Error(`Unknown model: ${input.model}. Use slates_list_available_models to see options.`);
83
+ }
84
+ const qty = input.quantity ?? 1;
85
+ const totalCents = entry.cost_cents * qty;
86
+ return ok({
87
+ model: input.model,
88
+ quantity: qty,
89
+ cost_per_cents: entry.cost_cents,
90
+ total_cents: totalCents,
91
+ total_dollars: (totalCents / 100).toFixed(2),
92
+ requires_confirm: totalCents > 50,
93
+ });
94
+ },
95
+ };
96
+ // ── Projects ────────────────────────────────────────────────────
97
+ export const listProjects = {
98
+ id: 'slates_list_projects',
99
+ description: 'List all Slates projects in the desktop workspace.',
100
+ input: z.object({}).strict(),
101
+ async run(_input, ctx) {
102
+ const r = await ctx.desktop().get('/agent/projects');
103
+ return ok(r);
104
+ },
105
+ };
106
+ export const createProject = {
107
+ id: 'slates_create_project',
108
+ description: 'Create a new Slates project. Returns the new project record.',
109
+ input: z.object({ name: z.string().min(1).max(120) }),
110
+ async run(input, ctx) {
111
+ const r = await ctx.desktop().post('/agent/projects', { name: input.name });
112
+ return ok(r);
113
+ },
114
+ };
115
+ export const getProject = {
116
+ id: 'slates_get_project',
117
+ description: 'Get a Slates project by id.',
118
+ input: z.object({ id: z.string().uuid() }),
119
+ async run(input, ctx) {
120
+ const r = await ctx.desktop().get('/agent/projects/get', { id: input.id });
121
+ return ok(r);
122
+ },
123
+ };
124
+ // ── Assets ──────────────────────────────────────────────────────
125
+ export const listAssets = {
126
+ id: 'slates_list_assets',
127
+ description: 'List all assets (images + videos) in a Slates project.',
128
+ input: z.object({ projectId: z.string().uuid() }),
129
+ async run(input, ctx) {
130
+ const r = await ctx.desktop().get('/agent/assets', {
131
+ projectId: input.projectId,
132
+ });
133
+ return ok(r);
134
+ },
135
+ };
136
+ export const getAssetImage = {
137
+ id: 'slates_get_asset_image',
138
+ description: 'Read an asset image off disk and return it inline as base64. Used for vision: the calling LLM sees the actual pixels. Default JPEG 85% ≤1024px long-edge for token economy. Pass fullRes=true for the original PNG.',
139
+ input: z.object({
140
+ id: z.string().uuid(),
141
+ fullRes: z.boolean().optional(),
142
+ }),
143
+ async run(input, ctx) {
144
+ const r = await ctx.desktop().get('/agent/assets/image', { id: input.id, fullRes: input.fullRes ?? false });
145
+ return {
146
+ text: `Loaded asset ${r.asset_id} (${r.bytes} bytes, ${r.mimeType}) from ${r.file_path}`,
147
+ images: [{ data: r.data, mimeType: r.mimeType }],
148
+ data: { asset_id: r.asset_id, file_path: r.file_path, bytes: r.bytes, mimeType: r.mimeType },
149
+ };
150
+ },
151
+ };
152
+ export const uploadReferenceImage = {
153
+ id: 'slates_upload_reference_image',
154
+ description: 'Add a reference image to a Slates project. Pass either filePath (absolute path to a local file) or dataUrl (base64 data: URL) — exactly one.',
155
+ input: z
156
+ .object({
157
+ projectId: z.string().uuid(),
158
+ filePath: z.string().optional(),
159
+ dataUrl: z.string().optional(),
160
+ })
161
+ .refine((d) => !!d.filePath !== !!d.dataUrl, {
162
+ message: 'Pass exactly one of filePath or dataUrl',
163
+ }),
164
+ async run(input, ctx) {
165
+ const desktop = ctx.desktop();
166
+ if (input.filePath) {
167
+ const r = await desktop.post('/agent/assets/upload', {
168
+ projectId: input.projectId,
169
+ filePath: input.filePath,
170
+ type: 'image',
171
+ });
172
+ return ok(r);
173
+ }
174
+ const r = await desktop.post('/agent/assets/upload-base64', {
175
+ projectId: input.projectId,
176
+ dataUrl: input.dataUrl,
177
+ });
178
+ return ok(r);
179
+ },
180
+ };
181
+ // ── Folders ─────────────────────────────────────────────────────
182
+ export const listFolders = {
183
+ id: 'slates_list_folders',
184
+ description: 'List asset folders in a project.',
185
+ input: z.object({ projectId: z.string().uuid() }),
186
+ async run(input, ctx) {
187
+ return ok(await ctx.desktop().get('/agent/folders', { projectId: input.projectId }));
188
+ },
189
+ };
190
+ export const createFolder = {
191
+ id: 'slates_create_folder',
192
+ description: 'Create a new asset folder in a project.',
193
+ input: z.object({
194
+ projectId: z.string().uuid(),
195
+ name: z.string().min(1).max(120),
196
+ }),
197
+ async run(input, ctx) {
198
+ return ok(await ctx
199
+ .desktop()
200
+ .post('/agent/folders', { projectId: input.projectId, name: input.name }));
201
+ },
202
+ };
203
+ export const moveAssetsToFolder = {
204
+ id: 'slates_move_assets_to_folder',
205
+ description: 'Move one or more assets into a folder, or to the project root (folderId=null).',
206
+ input: z.object({
207
+ assetIds: z.array(z.string().uuid()).min(1),
208
+ folderId: z.string().uuid().nullable(),
209
+ }),
210
+ async run(input, ctx) {
211
+ return ok(await ctx.desktop().post('/agent/folders/move-assets', input));
212
+ },
213
+ };
214
+ // ── Characters ──────────────────────────────────────────────────
215
+ export const listCharacters = {
216
+ id: 'slates_list_characters',
217
+ description: 'List characters in a Slates project.',
218
+ input: z.object({ projectId: z.string().uuid() }),
219
+ async run(input, ctx) {
220
+ return ok(await ctx.desktop().get('/agent/characters', { projectId: input.projectId }));
221
+ },
222
+ };
223
+ export const createCharacter = {
224
+ id: 'slates_create_character',
225
+ description: 'Create a new character in a Slates project.',
226
+ input: z.object({
227
+ projectId: z.string().uuid(),
228
+ name: z.string().min(1).max(120),
229
+ description: z.string().optional(),
230
+ style: z.enum(['realistic', 'anime', 'pixar', 'comic-book']).optional(),
231
+ }),
232
+ async run(input, ctx) {
233
+ return ok(await ctx.desktop().post('/agent/characters', input));
234
+ },
235
+ };
236
+ export const setCharacterTurnaround = {
237
+ id: 'slates_set_character_turnaround_asset',
238
+ description: 'Bind an image asset to the character\'s turnaround slot (or clear with assetId=null). The user sees the character card update live.',
239
+ input: z.object({
240
+ characterId: z.string().uuid(),
241
+ assetId: z.string().uuid().nullable(),
242
+ }),
243
+ async run(input, ctx) {
244
+ return ok(await ctx.desktop().post('/agent/characters/update', {
245
+ id: input.characterId,
246
+ data: { turnaroundAssetId: input.assetId },
247
+ }));
248
+ },
249
+ };
250
+ export const setCharacterExpression = {
251
+ id: 'slates_set_character_expression_asset',
252
+ description: 'Bind an image asset to the character\'s expression-sheet slot (or clear with assetId=null).',
253
+ input: z.object({
254
+ characterId: z.string().uuid(),
255
+ assetId: z.string().uuid().nullable(),
256
+ }),
257
+ async run(input, ctx) {
258
+ return ok(await ctx.desktop().post('/agent/characters/update', {
259
+ id: input.characterId,
260
+ data: { expressionAssetId: input.assetId },
261
+ }));
262
+ },
263
+ };
264
+ // ── Environments ────────────────────────────────────────────────
265
+ export const listEnvironments = {
266
+ id: 'slates_list_environments',
267
+ description: 'List environments in a Slates project.',
268
+ input: z.object({ projectId: z.string().uuid() }),
269
+ async run(input, ctx) {
270
+ return ok(await ctx.desktop().get('/agent/environments', { projectId: input.projectId }));
271
+ },
272
+ };
273
+ export const createEnvironment = {
274
+ id: 'slates_create_environment',
275
+ description: 'Create a new environment in a Slates project.',
276
+ input: z.object({
277
+ projectId: z.string().uuid(),
278
+ name: z.string().min(1).max(120),
279
+ description: z.string().optional(),
280
+ style: z.enum(['realistic', 'anime', 'pixar', 'comic-book']).optional(),
281
+ }),
282
+ async run(input, ctx) {
283
+ return ok(await ctx.desktop().post('/agent/environments', input));
284
+ },
285
+ };
286
+ // ── Storyboards ─────────────────────────────────────────────────
287
+ export const listStoryboards = {
288
+ id: 'slates_list_storyboards',
289
+ description: 'List storyboards in a Slates project.',
290
+ input: z.object({ projectId: z.string().uuid() }),
291
+ async run(input, ctx) {
292
+ return ok(await ctx.desktop().get('/agent/storyboards', { projectId: input.projectId }));
293
+ },
294
+ };
295
+ export const createStoryboard = {
296
+ id: 'slates_create_storyboard',
297
+ description: 'Create a new storyboard with a default first scene. Returns the storyboard record.',
298
+ input: z.object({
299
+ projectId: z.string().uuid(),
300
+ name: z.string().min(1).max(120),
301
+ description: z.string().optional(),
302
+ }),
303
+ async run(input, ctx) {
304
+ return ok(await ctx.desktop().post('/agent/storyboards', input));
305
+ },
306
+ };
307
+ export const getStoryboardWithFrames = {
308
+ id: 'slates_get_storyboard_with_frames',
309
+ description: 'Deep-fetch a storyboard with all scenes and frames.',
310
+ input: z.object({ storyboardId: z.string().uuid() }),
311
+ async run(input, ctx) {
312
+ const desktop = ctx.desktop();
313
+ const [storyboard, scenes] = await Promise.all([
314
+ desktop.get('/agent/storyboards/get', { id: input.storyboardId }),
315
+ desktop.get('/agent/scenes/full', { storyboardId: input.storyboardId }),
316
+ ]);
317
+ return ok({ ...storyboard, scenes: scenes.scenes });
318
+ },
319
+ };
320
+ export const addScene = {
321
+ id: 'slates_add_scene',
322
+ description: 'Add a new scene to a storyboard.',
323
+ input: z.object({
324
+ storyboardId: z.string().uuid(),
325
+ name: z.string().min(1).max(120),
326
+ position: z.number().int().min(0).optional(),
327
+ }),
328
+ async run(input, ctx) {
329
+ return ok(await ctx.desktop().post('/agent/scenes', input));
330
+ },
331
+ };
332
+ export const addFrame = {
333
+ id: 'slates_add_frame',
334
+ description: 'Add a frame (asset reference) to a scene.',
335
+ input: z.object({
336
+ projectId: z.string().uuid(),
337
+ storyboardId: z.string().uuid(),
338
+ sceneId: z.string().uuid(),
339
+ assetId: z.string().uuid(),
340
+ shotLabel: z.string().optional(),
341
+ notes: z.string().optional(),
342
+ position: z.number().int().min(0).optional(),
343
+ }),
344
+ async run(input, ctx) {
345
+ return ok(await ctx.desktop().post('/agent/frames', input));
346
+ },
347
+ };
348
+ // ── Generation (cloud-routed, credits-default) ──────────────────
349
+ export const generateImage = {
350
+ id: 'slates_generate_image',
351
+ description: 'Generate an image via Slates credits using the default Nano Banana 2 model. Returns inline image(s) so the calling LLM can evaluate them. Estimate cost first with slates_estimate_generation_cost. NOTE: MCP/CLI generation always charges credits — BYOK is desktop-UI only by design.',
352
+ input: z.object({
353
+ prompt: z.string().min(1).max(4000),
354
+ resolution: z.enum(['1k', '2k', '4k']).optional(),
355
+ aspectRatio: z.string().optional(),
356
+ count: z.number().int().min(1).max(4).optional(),
357
+ referenceImageUrls: z.array(z.string().url()).max(14).optional(),
358
+ confirm: z.boolean().optional().describe('Set true to bypass the >$0.50 cost confirm gate.'),
359
+ }),
360
+ async run(input, ctx) {
361
+ const resolution = input.resolution ?? '2k';
362
+ const model = `nano-banana-2-${resolution}`;
363
+ const cloud = ctx.cloud();
364
+ const registry = await cloud.get('/api/agent/models');
365
+ const entry = registry.models.find((m) => m.model === model);
366
+ if (!entry)
367
+ throw new Error(`Model not in registry: ${model}`);
368
+ const totalCents = entry.cost_cents * (input.count ?? 1);
369
+ if (totalCents > 50 && !input.confirm) {
370
+ return ok({
371
+ requires_confirm: true,
372
+ model,
373
+ estimated_cents: totalCents,
374
+ estimated_dollars: (totalCents / 100).toFixed(2),
375
+ message: 'Cost exceeds $0.50. Re-call with confirm=true to proceed, or pick a smaller resolution / count.',
376
+ });
377
+ }
378
+ // Generation itself routes through /proxy/generate, which is the
379
+ // existing slates-api credit-aware path. The desktop app handles the
380
+ // proxy interaction — here we use the cloud client to call /proxy
381
+ // ourselves so the agent can run without the desktop server. The
382
+ // proxy returns base64 image bytes inline (Google streaming path) or
383
+ // an asynced jobId we'd poll. For v1 we go through nano-banana on fal,
384
+ // which returns a CDN URL; we fetch the URL and base64-encode here.
385
+ const proxyResult = await cloud.post('/proxy/generate', {
386
+ provider: 'fal',
387
+ type: 'image',
388
+ model,
389
+ endpoint: 'fal-ai/nano-banana-2/edit',
390
+ params: {
391
+ prompt: input.prompt,
392
+ aspect_ratio: input.aspectRatio ?? '1:1',
393
+ num_images: input.count ?? 1,
394
+ ...(input.referenceImageUrls && input.referenceImageUrls.length > 0
395
+ ? { image_urls: input.referenceImageUrls }
396
+ : {}),
397
+ },
398
+ });
399
+ if (!proxyResult.success || !proxyResult.data) {
400
+ throw new Error(proxyResult.error ?? 'Generation failed');
401
+ }
402
+ const urls = (proxyResult.data.images ?? []).map((i) => i.url).filter((u) => !!u);
403
+ const images = [];
404
+ for (const url of urls) {
405
+ const r = await fetch(url);
406
+ const buf = Buffer.from(await r.arrayBuffer());
407
+ const mt = r.headers.get('content-type') || 'image/png';
408
+ images.push({ data: buf.toString('base64'), mimeType: mt });
409
+ }
410
+ return {
411
+ text: `Generated ${urls.length} image(s) for prompt: "${input.prompt.slice(0, 60)}${input.prompt.length > 60 ? '...' : ''}"`,
412
+ images,
413
+ data: { urls, model },
414
+ };
415
+ },
416
+ };
417
+ // ── Aggregation ─────────────────────────────────────────────────
418
+ export const ALL_OPERATIONS = [
419
+ getWorkspaceState,
420
+ getMe,
421
+ getCreditBalance,
422
+ listAvailableModels,
423
+ estimateGenerationCost,
424
+ listProjects,
425
+ createProject,
426
+ getProject,
427
+ listAssets,
428
+ getAssetImage,
429
+ uploadReferenceImage,
430
+ listFolders,
431
+ createFolder,
432
+ moveAssetsToFolder,
433
+ listCharacters,
434
+ createCharacter,
435
+ setCharacterTurnaround,
436
+ setCharacterExpression,
437
+ listEnvironments,
438
+ createEnvironment,
439
+ listStoryboards,
440
+ createStoryboard,
441
+ getStoryboardWithFrames,
442
+ addScene,
443
+ addFrame,
444
+ generateImage,
445
+ ];
446
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@slatesvideo/shared",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ },
12
+ "./auth": "./dist/auth.js",
13
+ "./clients/cloud": "./dist/clients/cloud.js",
14
+ "./clients/desktop": "./dist/clients/desktop.js",
15
+ "./operations": "./dist/operations/index.js"
16
+ },
17
+ "files": ["dist"],
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "typecheck": "tsc --noEmit"
21
+ },
22
+ "dependencies": {
23
+ "zod": "^3.23.0"
24
+ },
25
+ "devDependencies": {
26
+ "typescript": "^5.7.0"
27
+ }
28
+ }