@seawork/server 1.0.4 → 1.0.10-rc.4
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/server/client/daemon-client.d.ts +32 -1
- package/dist/server/client/daemon-client.d.ts.map +1 -1
- package/dist/server/client/daemon-client.js +69 -0
- package/dist/server/client/daemon-client.js.map +1 -1
- package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -1
- package/dist/server/server/agent/agent-management-mcp.js +6 -5
- package/dist/server/server/agent/agent-management-mcp.js.map +1 -1
- package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
- package/dist/server/server/agent/agent-response-loop.js +0 -1
- package/dist/server/server/agent/agent-response-loop.js.map +1 -1
- package/dist/server/server/agent/agent-storage.d.ts +68 -68
- package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
- package/dist/server/server/agent/mcp-server.js +6 -5
- package/dist/server/server/agent/mcp-server.js.map +1 -1
- package/dist/server/server/agent/mcp-shared.d.ts +30 -30
- package/dist/server/server/agent/provider-manifest.d.ts +2 -1
- package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
- package/dist/server/server/agent/provider-manifest.js +8 -69
- package/dist/server/server/agent/provider-manifest.js.map +1 -1
- package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
- package/dist/server/server/agent/provider-registry.js +2 -10
- package/dist/server/server/agent/provider-registry.js.map +1 -1
- package/dist/server/server/agent/providers/claude/claude-models.d.ts +1 -1
- package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude/claude-models.js +4 -39
- package/dist/server/server/agent/providers/claude/claude-models.js.map +1 -1
- package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
- package/dist/server/server/agent/providers/claude-agent.d.ts +2 -1
- package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/claude-agent.js +175 -46
- package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-app-server-agent.js +128 -72
- package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
- package/dist/server/server/agent/providers/codex-rollout-timeline.js +76 -0
- package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
- package/dist/server/server/agent/providers/seawork-models.d.ts +4 -0
- package/dist/server/server/agent/providers/seawork-models.d.ts.map +1 -0
- package/dist/server/server/agent/providers/seawork-models.js +128 -0
- package/dist/server/server/agent/providers/seawork-models.js.map +1 -0
- package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +16 -16
- package/dist/server/server/bootstrap.d.ts.map +1 -1
- package/dist/server/server/bootstrap.js +35 -1
- package/dist/server/server/bootstrap.js.map +1 -1
- package/dist/server/server/bug-report-handler.d.ts +9 -0
- package/dist/server/server/bug-report-handler.d.ts.map +1 -0
- package/dist/server/server/bug-report-handler.js +111 -0
- package/dist/server/server/bug-report-handler.js.map +1 -0
- package/dist/server/server/bug-report-redact.d.ts +12 -0
- package/dist/server/server/bug-report-redact.d.ts.map +1 -0
- package/dist/server/server/bug-report-redact.js +63 -0
- package/dist/server/server/bug-report-redact.js.map +1 -0
- package/dist/server/server/chat/chat-rpc-schemas.d.ts +26 -26
- package/dist/server/server/chat/chat-types.d.ts +2 -2
- package/dist/server/server/config.d.ts.map +1 -1
- package/dist/server/server/config.js +6 -1
- package/dist/server/server/config.js.map +1 -1
- package/dist/server/server/exports.d.ts +4 -2
- package/dist/server/server/exports.d.ts.map +1 -1
- package/dist/server/server/exports.js +3 -0
- package/dist/server/server/exports.js.map +1 -1
- package/dist/server/server/index.js +54 -0
- package/dist/server/server/index.js.map +1 -1
- package/dist/server/server/loop/rpc-schemas.d.ts +775 -775
- package/dist/server/server/loop-service.d.ts +108 -108
- package/dist/server/server/persisted-config.d.ts +121 -121
- package/dist/server/server/pid-lock.d.ts.map +1 -1
- package/dist/server/server/pid-lock.js +35 -2
- package/dist/server/server/pid-lock.js.map +1 -1
- package/dist/server/server/sac/auth.d.ts +41 -0
- package/dist/server/server/sac/auth.d.ts.map +1 -0
- package/dist/server/server/sac/auth.js +103 -0
- package/dist/server/server/sac/auth.js.map +1 -0
- package/dist/server/server/sac/client.d.ts +15 -0
- package/dist/server/server/sac/client.d.ts.map +1 -0
- package/dist/server/server/sac/client.js +70 -0
- package/dist/server/server/sac/client.js.map +1 -0
- package/dist/server/server/sac/download.d.ts +10 -0
- package/dist/server/server/sac/download.d.ts.map +1 -0
- package/dist/server/server/sac/download.js +67 -0
- package/dist/server/server/sac/download.js.map +1 -0
- package/dist/server/server/sac/endpoints.d.ts +13 -0
- package/dist/server/server/sac/endpoints.d.ts.map +1 -0
- package/dist/server/server/sac/endpoints.js +16 -0
- package/dist/server/server/sac/endpoints.js.map +1 -0
- package/dist/server/server/sac/errors.d.ts +40 -0
- package/dist/server/server/sac/errors.d.ts.map +1 -0
- package/dist/server/server/sac/errors.js +47 -0
- package/dist/server/server/sac/errors.js.map +1 -0
- package/dist/server/server/sac/generate.d.ts +43 -0
- package/dist/server/server/sac/generate.d.ts.map +1 -0
- package/dist/server/server/sac/generate.js +206 -0
- package/dist/server/server/sac/generate.js.map +1 -0
- package/dist/server/server/sac/index.d.ts +22 -0
- package/dist/server/server/sac/index.d.ts.map +1 -0
- package/dist/server/server/sac/index.js +14 -0
- package/dist/server/server/sac/index.js.map +1 -0
- package/dist/server/server/sac/output.d.ts +22 -0
- package/dist/server/server/sac/output.d.ts.map +1 -0
- package/dist/server/server/sac/output.js +142 -0
- package/dist/server/server/sac/output.js.map +1 -0
- package/dist/server/server/sac/poll.d.ts +12 -0
- package/dist/server/server/sac/poll.d.ts.map +1 -0
- package/dist/server/server/sac/poll.js +67 -0
- package/dist/server/server/sac/poll.js.map +1 -0
- package/dist/server/server/sac/providers/alibaba.d.ts +2 -0
- package/dist/server/server/sac/providers/alibaba.d.ts.map +1 -0
- package/dist/server/server/sac/providers/alibaba.js +506 -0
- package/dist/server/server/sac/providers/alibaba.js.map +1 -0
- package/dist/server/server/sac/providers/audio.d.ts +2 -0
- package/dist/server/server/sac/providers/audio.d.ts.map +1 -0
- package/dist/server/server/sac/providers/audio.js +57 -0
- package/dist/server/server/sac/providers/audio.js.map +1 -0
- package/dist/server/server/sac/providers/index.d.ts +19 -0
- package/dist/server/server/sac/providers/index.d.ts.map +1 -0
- package/dist/server/server/sac/providers/index.js +32 -0
- package/dist/server/server/sac/providers/index.js.map +1 -0
- package/dist/server/server/sac/providers/kling.d.ts +2 -0
- package/dist/server/server/sac/providers/kling.d.ts.map +1 -0
- package/dist/server/server/sac/providers/kling.js +589 -0
- package/dist/server/server/sac/providers/kling.js.map +1 -0
- package/dist/server/server/sac/providers/nano.d.ts +2 -0
- package/dist/server/server/sac/providers/nano.d.ts.map +1 -0
- package/dist/server/server/sac/providers/nano.js +37 -0
- package/dist/server/server/sac/providers/nano.js.map +1 -0
- package/dist/server/server/sac/providers/pixverse.d.ts +2 -0
- package/dist/server/server/sac/providers/pixverse.d.ts.map +1 -0
- package/dist/server/server/sac/providers/pixverse.js +1017 -0
- package/dist/server/server/sac/providers/pixverse.js.map +1 -0
- package/dist/server/server/sac/providers/registry.d.ts +34 -0
- package/dist/server/server/sac/providers/registry.d.ts.map +1 -0
- package/dist/server/server/sac/providers/registry.js +57 -0
- package/dist/server/server/sac/providers/registry.js.map +1 -0
- package/dist/server/server/sac/providers/seaart.d.ts +4 -0
- package/dist/server/server/sac/providers/seaart.d.ts.map +1 -0
- package/dist/server/server/sac/providers/seaart.js +57 -0
- package/dist/server/server/sac/providers/seaart.js.map +1 -0
- package/dist/server/server/sac/providers/store.d.ts +12 -0
- package/dist/server/server/sac/providers/store.d.ts.map +1 -0
- package/dist/server/server/sac/providers/store.js +7 -0
- package/dist/server/server/sac/providers/store.js.map +1 -0
- package/dist/server/server/sac/providers/tencent-3d.d.ts +2 -0
- package/dist/server/server/sac/providers/tencent-3d.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tencent-3d.js +210 -0
- package/dist/server/server/sac/providers/tencent-3d.js.map +1 -0
- package/dist/server/server/sac/providers/tencent-image.d.ts +2 -0
- package/dist/server/server/sac/providers/tencent-image.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tencent-image.js +90 -0
- package/dist/server/server/sac/providers/tencent-image.js.map +1 -0
- package/dist/server/server/sac/providers/tencent-video.d.ts +2 -0
- package/dist/server/server/sac/providers/tencent-video.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tencent-video.js +103 -0
- package/dist/server/server/sac/providers/tencent-video.js.map +1 -0
- package/dist/server/server/sac/providers/tripo3d.d.ts +2 -0
- package/dist/server/server/sac/providers/tripo3d.d.ts.map +1 -0
- package/dist/server/server/sac/providers/tripo3d.js +302 -0
- package/dist/server/server/sac/providers/tripo3d.js.map +1 -0
- package/dist/server/server/sac/providers/vidu.d.ts +2 -0
- package/dist/server/server/sac/providers/vidu.d.ts.map +1 -0
- package/dist/server/server/sac/providers/vidu.js +965 -0
- package/dist/server/server/sac/providers/vidu.js.map +1 -0
- package/dist/server/server/sac/providers/volces-3d.d.ts +2 -0
- package/dist/server/server/sac/providers/volces-3d.d.ts.map +1 -0
- package/dist/server/server/sac/providers/volces-3d.js +77 -0
- package/dist/server/server/sac/providers/volces-3d.js.map +1 -0
- package/dist/server/server/sac/providers/volces-video.d.ts +2 -0
- package/dist/server/server/sac/providers/volces-video.d.ts.map +1 -0
- package/dist/server/server/sac/providers/volces-video.js +392 -0
- package/dist/server/server/sac/providers/volces-video.js.map +1 -0
- package/dist/server/server/sac/providers/volces.d.ts +2 -0
- package/dist/server/server/sac/providers/volces.d.ts.map +1 -0
- package/dist/server/server/sac/providers/volces.js +301 -0
- package/dist/server/server/sac/providers/volces.js.map +1 -0
- package/dist/server/server/sac/types.d.ts +59 -0
- package/dist/server/server/sac/types.d.ts.map +1 -0
- package/dist/server/server/sac/types.js +5 -0
- package/dist/server/server/sac/types.js.map +1 -0
- package/dist/server/server/schedule/rpc-schemas.d.ts +493 -493
- package/dist/server/server/schedule/types.d.ts +140 -140
- package/dist/server/server/session.d.ts +9 -2
- package/dist/server/server/session.d.ts.map +1 -1
- package/dist/server/server/session.js +137 -19
- package/dist/server/server/session.js.map +1 -1
- package/dist/server/server/speech/speech-types.d.ts +2 -2
- package/dist/server/server/workspace-registry.d.ts +4 -4
- package/dist/server/shared/messages.d.ts +17455 -15917
- package/dist/server/shared/messages.d.ts.map +1 -1
- package/dist/server/shared/messages.js +83 -0
- package/dist/server/shared/messages.js.map +1 -1
- package/dist/server/utils/spawn.d.ts.map +1 -1
- package/dist/server/utils/spawn.js +8 -3
- package/dist/server/utils/spawn.js.map +1 -1
- package/dist/server/utils/worktree-metadata.d.ts +4 -4
- package/dist/src/server/pid-lock.js +35 -2
- package/dist/src/server/pid-lock.js.map +1 -1
- package/package.json +14 -9
- package/dist/server/server/agent/providers/acp-agent.d.ts +0 -202
- package/dist/server/server/agent/providers/acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/acp-agent.js +0 -1650
- package/dist/server/server/agent/providers/acp-agent.js.map +0 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +0 -16
- package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/copilot-acp-agent.js +0 -95
- package/dist/server/server/agent/providers/copilot-acp-agent.js.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +0 -3
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
- package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +0 -13
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +0 -1
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +0 -144
- package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
- package/dist/server/server/agent/providers/opencode-agent.d.ts +0 -121
- package/dist/server/server/agent/providers/opencode-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/opencode-agent.js +0 -1649
- package/dist/server/server/agent/providers/opencode-agent.js.map +0 -1
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
- package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
- package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
- package/dist/server/server/agent/providers/pi-acp-agent.js.map +0 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC authentication - Read API key from ~/.seawork/auth.json
|
|
3
|
+
*
|
|
4
|
+
* The auth.json file is created by Seawork desktop app after login.
|
|
5
|
+
* Format:
|
|
6
|
+
* {
|
|
7
|
+
* "token": "api_key_here",
|
|
8
|
+
* "email": "user@example.com",
|
|
9
|
+
* "balance": "100",
|
|
10
|
+
* "base_url": "https://..."
|
|
11
|
+
* }
|
|
12
|
+
*/
|
|
13
|
+
import { readFileSync, existsSync } from "fs";
|
|
14
|
+
import { join } from "path";
|
|
15
|
+
import { homedir } from "os";
|
|
16
|
+
import { SACError, ExitCode } from "./errors.js";
|
|
17
|
+
/**
|
|
18
|
+
* Get the path to the auth.json file
|
|
19
|
+
*/
|
|
20
|
+
export function getAuthFilePath(seaworkHome) {
|
|
21
|
+
const home = seaworkHome || process.env.SEAWORK_HOME || join(homedir(), ".seawork");
|
|
22
|
+
return join(home, "auth.json");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Load auth config from ~/.seawork/auth.json
|
|
26
|
+
*/
|
|
27
|
+
export function loadAuthConfig(seaworkHome) {
|
|
28
|
+
const authPath = getAuthFilePath(seaworkHome);
|
|
29
|
+
if (!existsSync(authPath)) {
|
|
30
|
+
return {};
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const content = readFileSync(authPath, "utf-8");
|
|
34
|
+
const parsed = JSON.parse(content);
|
|
35
|
+
return {
|
|
36
|
+
token: typeof parsed.token === "string" ? parsed.token : undefined,
|
|
37
|
+
email: typeof parsed.email === "string" ? parsed.email : undefined,
|
|
38
|
+
balance: typeof parsed.balance === "string" ? parsed.balance : undefined,
|
|
39
|
+
base_url: typeof parsed.base_url === "string" ? parsed.base_url : undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get SAC API key from environment or auth.json
|
|
48
|
+
* Priority: SAC_API_KEY env > SEAART_API_KEY env > ~/.seawork/auth.json token
|
|
49
|
+
*/
|
|
50
|
+
export function getSACApiKey(seaworkHome) {
|
|
51
|
+
// Environment variables take precedence
|
|
52
|
+
const envKey = process.env.SAC_API_KEY || process.env.SEAART_API_KEY;
|
|
53
|
+
if (envKey) {
|
|
54
|
+
return envKey;
|
|
55
|
+
}
|
|
56
|
+
// Fall back to auth.json
|
|
57
|
+
const auth = loadAuthConfig(seaworkHome);
|
|
58
|
+
return auth.token;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Default multimodal gateway URL (fallback if auth.json has no base_url)
|
|
62
|
+
*/
|
|
63
|
+
const DEFAULT_MULTIMODAL_BASE_URL = "https://openresty-gateway.api.seaart.ai/model";
|
|
64
|
+
/**
|
|
65
|
+
* Convert LLM gateway URL to multimodal gateway URL
|
|
66
|
+
* e.g., "https://example.com/llm" -> "https://example.com/model"
|
|
67
|
+
*/
|
|
68
|
+
function toMultimodalUrl(llmBaseUrl) {
|
|
69
|
+
// Replace /llm suffix with /model
|
|
70
|
+
if (llmBaseUrl.endsWith("/llm")) {
|
|
71
|
+
return llmBaseUrl.slice(0, -4) + "/model";
|
|
72
|
+
}
|
|
73
|
+
// If no /llm suffix, append /model
|
|
74
|
+
return llmBaseUrl.replace(/\/$/, "") + "/model";
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get SAC multimodal base URL
|
|
78
|
+
* Priority: SAC_MULTIMODAL_BASE_URL env > derived from auth.json base_url > default
|
|
79
|
+
*/
|
|
80
|
+
export function getSACBaseUrl(seaworkHome) {
|
|
81
|
+
// Environment variable takes precedence
|
|
82
|
+
const envUrl = process.env.SAC_MULTIMODAL_BASE_URL;
|
|
83
|
+
if (envUrl) {
|
|
84
|
+
return envUrl;
|
|
85
|
+
}
|
|
86
|
+
// Derive from auth.json base_url (LLM gateway -> multimodal gateway)
|
|
87
|
+
const auth = loadAuthConfig(seaworkHome);
|
|
88
|
+
if (auth.base_url) {
|
|
89
|
+
return toMultimodalUrl(auth.base_url);
|
|
90
|
+
}
|
|
91
|
+
return DEFAULT_MULTIMODAL_BASE_URL;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get SAC API key or throw an error if not found
|
|
95
|
+
*/
|
|
96
|
+
export function requireSACApiKey(seaworkHome) {
|
|
97
|
+
const apiKey = getSACApiKey(seaworkHome);
|
|
98
|
+
if (!apiKey) {
|
|
99
|
+
throw new SACError("No SAC API key found.", ExitCode.AUTH, "Please login via Seawork app first, or set SAC_API_KEY environment variable.");
|
|
100
|
+
}
|
|
101
|
+
return apiKey;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/server/sac/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC HTTP client
|
|
3
|
+
*/
|
|
4
|
+
import type { SACConfig } from "./types.js";
|
|
5
|
+
export interface RequestOpts {
|
|
6
|
+
url: string;
|
|
7
|
+
method?: string;
|
|
8
|
+
body?: unknown;
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
timeout?: number;
|
|
11
|
+
noAuth?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function request(config: SACConfig, opts: RequestOpts, apiKey?: string): Promise<Response>;
|
|
14
|
+
export declare function requestJson<T>(config: SACConfig, opts: RequestOpts, apiKey?: string): Promise<T>;
|
|
15
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/server/sac/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,QAAQ,CAAC,CAyEnB;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAWZ"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC HTTP client
|
|
3
|
+
*/
|
|
4
|
+
import { SACError, ExitCode, mapApiError } from "./errors.js";
|
|
5
|
+
export async function request(config, opts, apiKey) {
|
|
6
|
+
const headers = {
|
|
7
|
+
"Content-Type": "application/json",
|
|
8
|
+
"User-Agent": "seawork-sac/1.0.0",
|
|
9
|
+
...opts.headers,
|
|
10
|
+
};
|
|
11
|
+
if (!opts.noAuth) {
|
|
12
|
+
const token = apiKey || config.apiKey;
|
|
13
|
+
if (!token) {
|
|
14
|
+
throw new SACError("No API key found.", ExitCode.AUTH, "Set env var: export SAC_API_KEY=<token>\nOr add to: ~/.seawork/auth.json");
|
|
15
|
+
}
|
|
16
|
+
headers["Authorization"] = `Bearer ${token}`;
|
|
17
|
+
if (config.verbose) {
|
|
18
|
+
process.stderr.write(`> ${opts.method ?? "GET"} ${opts.url}\n`);
|
|
19
|
+
process.stderr.write(`> Auth: ${token.slice(0, 8)}...\n`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const timeoutMs = (opts.timeout ?? config.timeout) * 1000;
|
|
23
|
+
let res;
|
|
24
|
+
try {
|
|
25
|
+
res = await fetch(opts.url, {
|
|
26
|
+
method: opts.method ?? "GET",
|
|
27
|
+
headers,
|
|
28
|
+
body: opts.body ? JSON.stringify(opts.body) : undefined,
|
|
29
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
if (err instanceof Error) {
|
|
34
|
+
if (err.name === "TimeoutError" || err.name === "AbortError") {
|
|
35
|
+
throw new SACError(`Request timed out after ${config.timeout}s`, ExitCode.TIMEOUT, "Try increasing --timeout or retry later.");
|
|
36
|
+
}
|
|
37
|
+
if (err.message.includes("ECONNREFUSED") ||
|
|
38
|
+
err.message.includes("ENOTFOUND") ||
|
|
39
|
+
err.message.includes("fetch failed")) {
|
|
40
|
+
throw new SACError(`Network error: ${err.message}`, ExitCode.NETWORK, "Check your network connection.");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
if (config.verbose) {
|
|
46
|
+
process.stderr.write(`< ${res.status} ${res.statusText}\n`);
|
|
47
|
+
}
|
|
48
|
+
if (!res.ok) {
|
|
49
|
+
let body = {};
|
|
50
|
+
try {
|
|
51
|
+
body = (await res.json());
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
/* non-JSON */
|
|
55
|
+
}
|
|
56
|
+
throw mapApiError(res.status, body, opts.url);
|
|
57
|
+
}
|
|
58
|
+
return res;
|
|
59
|
+
}
|
|
60
|
+
export async function requestJson(config, opts, apiKey) {
|
|
61
|
+
const res = await request(config, opts, apiKey);
|
|
62
|
+
try {
|
|
63
|
+
return (await res.json());
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
const contentType = res.headers.get("content-type") || "";
|
|
67
|
+
throw new SACError(`API returned non-JSON response (${contentType || "unknown type"}). Server may be experiencing issues.`, ExitCode.GENERAL);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/server/sac/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC file download utilities
|
|
3
|
+
*/
|
|
4
|
+
export declare function downloadFile(url: string, destPath: string, opts?: {
|
|
5
|
+
quiet?: boolean;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
size: number;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function formatBytes(bytes: number): string;
|
|
10
|
+
//# sourceMappingURL=download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../../src/server/sac/download.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyD3B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC file download utilities
|
|
3
|
+
*/
|
|
4
|
+
import { createWriteStream, unlinkSync } from "fs";
|
|
5
|
+
import { createProgressBar } from "./output.js";
|
|
6
|
+
import { SACError, ExitCode } from "./errors.js";
|
|
7
|
+
export async function downloadFile(url, destPath, opts) {
|
|
8
|
+
const res = await fetch(url);
|
|
9
|
+
if (!res.ok) {
|
|
10
|
+
throw new SACError(`Download failed: HTTP ${res.status}`, ExitCode.GENERAL);
|
|
11
|
+
}
|
|
12
|
+
const contentLength = Number(res.headers.get("content-length") || 0);
|
|
13
|
+
const reader = res.body?.getReader();
|
|
14
|
+
if (!reader)
|
|
15
|
+
throw new SACError("No response body", ExitCode.GENERAL);
|
|
16
|
+
const writer = createWriteStream(destPath);
|
|
17
|
+
const progress = contentLength > 0 && !opts?.quiet ? createProgressBar(contentLength, "Downloading") : null;
|
|
18
|
+
let received = 0;
|
|
19
|
+
let completed = false;
|
|
20
|
+
try {
|
|
21
|
+
const writeError = new Promise((_, reject) => {
|
|
22
|
+
writer.on("error", reject);
|
|
23
|
+
});
|
|
24
|
+
while (true) {
|
|
25
|
+
const { done, value } = (await Promise.race([
|
|
26
|
+
reader.read(),
|
|
27
|
+
writeError,
|
|
28
|
+
]));
|
|
29
|
+
if (done)
|
|
30
|
+
break;
|
|
31
|
+
const ok = writer.write(value);
|
|
32
|
+
if (!ok)
|
|
33
|
+
await new Promise((r) => writer.once("drain", r));
|
|
34
|
+
received += value.byteLength;
|
|
35
|
+
progress?.update(received);
|
|
36
|
+
}
|
|
37
|
+
completed = true;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
reader.releaseLock();
|
|
41
|
+
progress?.finish();
|
|
42
|
+
await new Promise((resolve, reject) => {
|
|
43
|
+
writer.on("finish", resolve);
|
|
44
|
+
writer.on("error", reject);
|
|
45
|
+
writer.end();
|
|
46
|
+
});
|
|
47
|
+
if (!completed) {
|
|
48
|
+
try {
|
|
49
|
+
unlinkSync(destPath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* best effort */
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { size: received };
|
|
57
|
+
}
|
|
58
|
+
export function formatBytes(bytes) {
|
|
59
|
+
if (bytes < 1024)
|
|
60
|
+
return `${bytes} B`;
|
|
61
|
+
if (bytes < 1024 * 1024)
|
|
62
|
+
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
63
|
+
if (bytes < 1024 * 1024 * 1024)
|
|
64
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
65
|
+
return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../src/server/sac/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC API endpoints
|
|
3
|
+
*/
|
|
4
|
+
import type { SACConfig } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* POST /v1/generation - create a generation task
|
|
7
|
+
*/
|
|
8
|
+
export declare function generationEndpoint(config: SACConfig): string;
|
|
9
|
+
/**
|
|
10
|
+
* GET /v1/generation/task/{id} - query task status
|
|
11
|
+
*/
|
|
12
|
+
export declare function taskEndpoint(config: SACConfig, taskId: string): string;
|
|
13
|
+
//# sourceMappingURL=endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../../../src/server/sac/endpoints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC API endpoints
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* POST /v1/generation - create a generation task
|
|
6
|
+
*/
|
|
7
|
+
export function generationEndpoint(config) {
|
|
8
|
+
return `${config.multimodalBaseUrl}/v1/generation`;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* GET /v1/generation/task/{id} - query task status
|
|
12
|
+
*/
|
|
13
|
+
export function taskEndpoint(config, taskId) {
|
|
14
|
+
return `${config.multimodalBaseUrl}/v1/generation/task/${taskId}`;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=endpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../src/server/sac/endpoints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,OAAO,GAAG,MAAM,CAAC,iBAAiB,gBAAgB,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB,EAAE,MAAc;IAC5D,OAAO,GAAG,MAAM,CAAC,iBAAiB,uBAAuB,MAAM,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC error handling - Exit codes and error types
|
|
3
|
+
*/
|
|
4
|
+
export declare const ExitCode: {
|
|
5
|
+
readonly SUCCESS: 0;
|
|
6
|
+
readonly GENERAL: 1;
|
|
7
|
+
readonly USAGE: 2;
|
|
8
|
+
readonly AUTH: 3;
|
|
9
|
+
readonly QUOTA: 4;
|
|
10
|
+
readonly TIMEOUT: 5;
|
|
11
|
+
readonly NETWORK: 6;
|
|
12
|
+
readonly CONTENT_FILTER: 10;
|
|
13
|
+
};
|
|
14
|
+
export type ExitCode = (typeof ExitCode)[keyof typeof ExitCode];
|
|
15
|
+
export declare class SACError extends Error {
|
|
16
|
+
readonly exitCode: ExitCode;
|
|
17
|
+
readonly hint?: string;
|
|
18
|
+
/** Optional task ID to surface when a poll/network failure interrupts a generation. */
|
|
19
|
+
taskId?: string;
|
|
20
|
+
constructor(message: string, exitCode?: ExitCode, hint?: string);
|
|
21
|
+
toJSON(): {
|
|
22
|
+
error: {
|
|
23
|
+
task_id?: string | undefined;
|
|
24
|
+
hint?: string | undefined;
|
|
25
|
+
code: ExitCode;
|
|
26
|
+
message: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export { SACError as CLIError };
|
|
31
|
+
export interface ApiErrorBody {
|
|
32
|
+
error?: {
|
|
33
|
+
message?: string;
|
|
34
|
+
code?: string | number;
|
|
35
|
+
};
|
|
36
|
+
message?: string;
|
|
37
|
+
code?: string | number;
|
|
38
|
+
}
|
|
39
|
+
export declare function mapApiError(status: number, body: ApiErrorBody, url?: string): SACError;
|
|
40
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/server/sac/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEJ,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,QAA2B,EAAE,IAAI,CAAC,EAAE,MAAM;IAOjF,MAAM;;;;;;;;CAUP;AAED,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,CAAC;AAEhC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CA0BtF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC error handling - Exit codes and error types
|
|
3
|
+
*/
|
|
4
|
+
export const ExitCode = {
|
|
5
|
+
SUCCESS: 0,
|
|
6
|
+
GENERAL: 1,
|
|
7
|
+
USAGE: 2,
|
|
8
|
+
AUTH: 3,
|
|
9
|
+
QUOTA: 4,
|
|
10
|
+
TIMEOUT: 5,
|
|
11
|
+
NETWORK: 6,
|
|
12
|
+
CONTENT_FILTER: 10,
|
|
13
|
+
};
|
|
14
|
+
export class SACError extends Error {
|
|
15
|
+
constructor(message, exitCode = ExitCode.GENERAL, hint) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "SACError";
|
|
18
|
+
this.exitCode = exitCode;
|
|
19
|
+
this.hint = hint;
|
|
20
|
+
}
|
|
21
|
+
toJSON() {
|
|
22
|
+
return {
|
|
23
|
+
error: {
|
|
24
|
+
code: this.exitCode,
|
|
25
|
+
message: this.message,
|
|
26
|
+
...(this.hint ? { hint: this.hint } : {}),
|
|
27
|
+
...(this.taskId ? { task_id: this.taskId } : {}),
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export { SACError as CLIError };
|
|
33
|
+
export function mapApiError(status, body, url) {
|
|
34
|
+
const apiMsg = body.error?.message || body.message || `HTTP ${status}`;
|
|
35
|
+
const urlHint = url ? `\nURL: ${url}` : "";
|
|
36
|
+
if (status === 401 || status === 403) {
|
|
37
|
+
return new SACError(`Authentication failed (HTTP ${status}).${urlHint}`, ExitCode.AUTH, "Log in via the Seawork app again, or set SAC_API_KEY environment variable.");
|
|
38
|
+
}
|
|
39
|
+
if (status === 429) {
|
|
40
|
+
return new SACError(`Rate limit exceeded. ${apiMsg}`, ExitCode.QUOTA, "Please wait and retry.");
|
|
41
|
+
}
|
|
42
|
+
if (status === 408 || status === 504) {
|
|
43
|
+
return new SACError(`Request timed out (HTTP ${status}).`, ExitCode.TIMEOUT, "Try increasing --timeout or retry later.");
|
|
44
|
+
}
|
|
45
|
+
return new SACError(`API error: ${apiMsg} (HTTP ${status})${urlHint}`, ExitCode.GENERAL);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/server/sac/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,CAAC;IACV,cAAc,EAAE,EAAE;CACV,CAAC;AAIX,MAAM,OAAO,QAAS,SAAQ,KAAK;IAMjC,YAAY,OAAe,EAAE,WAAqB,QAAQ,CAAC,OAAO,EAAE,IAAa;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjD;SACF,CAAC;IACJ,CAAC;CACF;AAED,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,CAAC;AAWhC,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,IAAkB,EAAE,GAAY;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,MAAM,EAAE,CAAC;IAEvE,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,IAAI,QAAQ,CACjB,+BAA+B,MAAM,KAAK,OAAO,EAAE,EACnD,QAAQ,CAAC,IAAI,EACb,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,QAAQ,CAAC,wBAAwB,MAAM,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;IAClG,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,IAAI,QAAQ,CACjB,2BAA2B,MAAM,IAAI,EACrC,QAAQ,CAAC,OAAO,EAChB,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,cAAc,MAAM,UAAU,MAAM,IAAI,OAAO,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAC multi-modal generation core logic
|
|
3
|
+
*/
|
|
4
|
+
import type { SACConfig, GlobalFlags, TaskResponse } from "./types.js";
|
|
5
|
+
import { getProvider, allModels, modelsByCategory, modelsByProvider } from "./providers/registry.js";
|
|
6
|
+
export { allModels, modelsByCategory, modelsByProvider, getProvider };
|
|
7
|
+
export declare const DEFAULT_IMAGE_MODEL = "volces_seedream_4_5";
|
|
8
|
+
export declare const DEFAULT_VIDEO_MODEL = "volces_seedance_1_5_pro";
|
|
9
|
+
export declare const DEFAULT_AUDIO_MODEL = "lyria_3_pro_preview";
|
|
10
|
+
export declare const DEFAULT_3D_TEXT_MODEL = "tripo3d_text_to_model";
|
|
11
|
+
export declare const DEFAULT_3D_IMAGE_MODEL = "tripo3d_image_to_model";
|
|
12
|
+
export declare const DEFAULT_3D_MULTIVIEW_MODEL = "tripo3d_multiview_to_model";
|
|
13
|
+
export interface GenerateOptions {
|
|
14
|
+
config: SACConfig;
|
|
15
|
+
flags: GlobalFlags;
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface GenerateResult {
|
|
19
|
+
request?: Record<string, unknown>;
|
|
20
|
+
taskId?: string;
|
|
21
|
+
status?: string;
|
|
22
|
+
urls?: string[];
|
|
23
|
+
saved?: string[];
|
|
24
|
+
raw?: TaskResponse;
|
|
25
|
+
}
|
|
26
|
+
export declare function generateImage(opts: GenerateOptions): Promise<GenerateResult>;
|
|
27
|
+
export declare function generateVideo(opts: GenerateOptions): Promise<GenerateResult>;
|
|
28
|
+
export declare function generateAudio(opts: GenerateOptions): Promise<GenerateResult>;
|
|
29
|
+
export declare function generate3d(opts: GenerateOptions): Promise<GenerateResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Query task status
|
|
32
|
+
*/
|
|
33
|
+
export declare function queryTask(config: SACConfig, taskId: string, opts?: {
|
|
34
|
+
wait?: boolean;
|
|
35
|
+
intervalSec?: number;
|
|
36
|
+
timeoutSec?: number;
|
|
37
|
+
apiKey?: string;
|
|
38
|
+
}): Promise<TaskResponse>;
|
|
39
|
+
/**
|
|
40
|
+
* Extract result URLs from task response
|
|
41
|
+
*/
|
|
42
|
+
export declare function extractUrls(data: TaskResponse): string[];
|
|
43
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/server/sac/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAA4B,YAAY,EAAE,MAAM,YAAY,CAAC;AAMjG,OAAO,EACL,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC;AAEtE,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAuLD,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAElF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAElF;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAElF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAE/E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IACL,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAQxD"}
|