@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.
Files changed (221) hide show
  1. package/dist/server/client/daemon-client.d.ts +32 -1
  2. package/dist/server/client/daemon-client.d.ts.map +1 -1
  3. package/dist/server/client/daemon-client.js +69 -0
  4. package/dist/server/client/daemon-client.js.map +1 -1
  5. package/dist/server/server/agent/agent-management-mcp.d.ts.map +1 -1
  6. package/dist/server/server/agent/agent-management-mcp.js +6 -5
  7. package/dist/server/server/agent/agent-management-mcp.js.map +1 -1
  8. package/dist/server/server/agent/agent-response-loop.d.ts.map +1 -1
  9. package/dist/server/server/agent/agent-response-loop.js +0 -1
  10. package/dist/server/server/agent/agent-response-loop.js.map +1 -1
  11. package/dist/server/server/agent/agent-storage.d.ts +68 -68
  12. package/dist/server/server/agent/mcp-server.d.ts.map +1 -1
  13. package/dist/server/server/agent/mcp-server.js +6 -5
  14. package/dist/server/server/agent/mcp-server.js.map +1 -1
  15. package/dist/server/server/agent/mcp-shared.d.ts +30 -30
  16. package/dist/server/server/agent/provider-manifest.d.ts +2 -1
  17. package/dist/server/server/agent/provider-manifest.d.ts.map +1 -1
  18. package/dist/server/server/agent/provider-manifest.js +8 -69
  19. package/dist/server/server/agent/provider-manifest.js.map +1 -1
  20. package/dist/server/server/agent/provider-registry.d.ts.map +1 -1
  21. package/dist/server/server/agent/provider-registry.js +2 -10
  22. package/dist/server/server/agent/provider-registry.js.map +1 -1
  23. package/dist/server/server/agent/providers/claude/claude-models.d.ts +1 -1
  24. package/dist/server/server/agent/providers/claude/claude-models.d.ts.map +1 -1
  25. package/dist/server/server/agent/providers/claude/claude-models.js +4 -39
  26. package/dist/server/server/agent/providers/claude/claude-models.js.map +1 -1
  27. package/dist/server/server/agent/providers/claude/task-notification-tool-call.d.ts +2 -2
  28. package/dist/server/server/agent/providers/claude-agent.d.ts +2 -1
  29. package/dist/server/server/agent/providers/claude-agent.d.ts.map +1 -1
  30. package/dist/server/server/agent/providers/claude-agent.js +175 -46
  31. package/dist/server/server/agent/providers/claude-agent.js.map +1 -1
  32. package/dist/server/server/agent/providers/codex-app-server-agent.d.ts.map +1 -1
  33. package/dist/server/server/agent/providers/codex-app-server-agent.js +128 -72
  34. package/dist/server/server/agent/providers/codex-app-server-agent.js.map +1 -1
  35. package/dist/server/server/agent/providers/codex-rollout-timeline.d.ts.map +1 -1
  36. package/dist/server/server/agent/providers/codex-rollout-timeline.js +76 -0
  37. package/dist/server/server/agent/providers/codex-rollout-timeline.js.map +1 -1
  38. package/dist/server/server/agent/providers/seawork-models.d.ts +4 -0
  39. package/dist/server/server/agent/providers/seawork-models.d.ts.map +1 -0
  40. package/dist/server/server/agent/providers/seawork-models.js +128 -0
  41. package/dist/server/server/agent/providers/seawork-models.js.map +1 -0
  42. package/dist/server/server/agent/providers/tool-call-detail-primitives.d.ts +16 -16
  43. package/dist/server/server/bootstrap.d.ts.map +1 -1
  44. package/dist/server/server/bootstrap.js +35 -1
  45. package/dist/server/server/bootstrap.js.map +1 -1
  46. package/dist/server/server/bug-report-handler.d.ts +9 -0
  47. package/dist/server/server/bug-report-handler.d.ts.map +1 -0
  48. package/dist/server/server/bug-report-handler.js +111 -0
  49. package/dist/server/server/bug-report-handler.js.map +1 -0
  50. package/dist/server/server/bug-report-redact.d.ts +12 -0
  51. package/dist/server/server/bug-report-redact.d.ts.map +1 -0
  52. package/dist/server/server/bug-report-redact.js +63 -0
  53. package/dist/server/server/bug-report-redact.js.map +1 -0
  54. package/dist/server/server/chat/chat-rpc-schemas.d.ts +26 -26
  55. package/dist/server/server/chat/chat-types.d.ts +2 -2
  56. package/dist/server/server/config.d.ts.map +1 -1
  57. package/dist/server/server/config.js +6 -1
  58. package/dist/server/server/config.js.map +1 -1
  59. package/dist/server/server/exports.d.ts +4 -2
  60. package/dist/server/server/exports.d.ts.map +1 -1
  61. package/dist/server/server/exports.js +3 -0
  62. package/dist/server/server/exports.js.map +1 -1
  63. package/dist/server/server/index.js +54 -0
  64. package/dist/server/server/index.js.map +1 -1
  65. package/dist/server/server/loop/rpc-schemas.d.ts +775 -775
  66. package/dist/server/server/loop-service.d.ts +108 -108
  67. package/dist/server/server/persisted-config.d.ts +121 -121
  68. package/dist/server/server/pid-lock.d.ts.map +1 -1
  69. package/dist/server/server/pid-lock.js +35 -2
  70. package/dist/server/server/pid-lock.js.map +1 -1
  71. package/dist/server/server/sac/auth.d.ts +41 -0
  72. package/dist/server/server/sac/auth.d.ts.map +1 -0
  73. package/dist/server/server/sac/auth.js +103 -0
  74. package/dist/server/server/sac/auth.js.map +1 -0
  75. package/dist/server/server/sac/client.d.ts +15 -0
  76. package/dist/server/server/sac/client.d.ts.map +1 -0
  77. package/dist/server/server/sac/client.js +70 -0
  78. package/dist/server/server/sac/client.js.map +1 -0
  79. package/dist/server/server/sac/download.d.ts +10 -0
  80. package/dist/server/server/sac/download.d.ts.map +1 -0
  81. package/dist/server/server/sac/download.js +67 -0
  82. package/dist/server/server/sac/download.js.map +1 -0
  83. package/dist/server/server/sac/endpoints.d.ts +13 -0
  84. package/dist/server/server/sac/endpoints.d.ts.map +1 -0
  85. package/dist/server/server/sac/endpoints.js +16 -0
  86. package/dist/server/server/sac/endpoints.js.map +1 -0
  87. package/dist/server/server/sac/errors.d.ts +40 -0
  88. package/dist/server/server/sac/errors.d.ts.map +1 -0
  89. package/dist/server/server/sac/errors.js +47 -0
  90. package/dist/server/server/sac/errors.js.map +1 -0
  91. package/dist/server/server/sac/generate.d.ts +43 -0
  92. package/dist/server/server/sac/generate.d.ts.map +1 -0
  93. package/dist/server/server/sac/generate.js +206 -0
  94. package/dist/server/server/sac/generate.js.map +1 -0
  95. package/dist/server/server/sac/index.d.ts +22 -0
  96. package/dist/server/server/sac/index.d.ts.map +1 -0
  97. package/dist/server/server/sac/index.js +14 -0
  98. package/dist/server/server/sac/index.js.map +1 -0
  99. package/dist/server/server/sac/output.d.ts +22 -0
  100. package/dist/server/server/sac/output.d.ts.map +1 -0
  101. package/dist/server/server/sac/output.js +142 -0
  102. package/dist/server/server/sac/output.js.map +1 -0
  103. package/dist/server/server/sac/poll.d.ts +12 -0
  104. package/dist/server/server/sac/poll.d.ts.map +1 -0
  105. package/dist/server/server/sac/poll.js +67 -0
  106. package/dist/server/server/sac/poll.js.map +1 -0
  107. package/dist/server/server/sac/providers/alibaba.d.ts +2 -0
  108. package/dist/server/server/sac/providers/alibaba.d.ts.map +1 -0
  109. package/dist/server/server/sac/providers/alibaba.js +506 -0
  110. package/dist/server/server/sac/providers/alibaba.js.map +1 -0
  111. package/dist/server/server/sac/providers/audio.d.ts +2 -0
  112. package/dist/server/server/sac/providers/audio.d.ts.map +1 -0
  113. package/dist/server/server/sac/providers/audio.js +57 -0
  114. package/dist/server/server/sac/providers/audio.js.map +1 -0
  115. package/dist/server/server/sac/providers/index.d.ts +19 -0
  116. package/dist/server/server/sac/providers/index.d.ts.map +1 -0
  117. package/dist/server/server/sac/providers/index.js +32 -0
  118. package/dist/server/server/sac/providers/index.js.map +1 -0
  119. package/dist/server/server/sac/providers/kling.d.ts +2 -0
  120. package/dist/server/server/sac/providers/kling.d.ts.map +1 -0
  121. package/dist/server/server/sac/providers/kling.js +589 -0
  122. package/dist/server/server/sac/providers/kling.js.map +1 -0
  123. package/dist/server/server/sac/providers/nano.d.ts +2 -0
  124. package/dist/server/server/sac/providers/nano.d.ts.map +1 -0
  125. package/dist/server/server/sac/providers/nano.js +37 -0
  126. package/dist/server/server/sac/providers/nano.js.map +1 -0
  127. package/dist/server/server/sac/providers/pixverse.d.ts +2 -0
  128. package/dist/server/server/sac/providers/pixverse.d.ts.map +1 -0
  129. package/dist/server/server/sac/providers/pixverse.js +1017 -0
  130. package/dist/server/server/sac/providers/pixverse.js.map +1 -0
  131. package/dist/server/server/sac/providers/registry.d.ts +34 -0
  132. package/dist/server/server/sac/providers/registry.d.ts.map +1 -0
  133. package/dist/server/server/sac/providers/registry.js +57 -0
  134. package/dist/server/server/sac/providers/registry.js.map +1 -0
  135. package/dist/server/server/sac/providers/seaart.d.ts +4 -0
  136. package/dist/server/server/sac/providers/seaart.d.ts.map +1 -0
  137. package/dist/server/server/sac/providers/seaart.js +57 -0
  138. package/dist/server/server/sac/providers/seaart.js.map +1 -0
  139. package/dist/server/server/sac/providers/store.d.ts +12 -0
  140. package/dist/server/server/sac/providers/store.d.ts.map +1 -0
  141. package/dist/server/server/sac/providers/store.js +7 -0
  142. package/dist/server/server/sac/providers/store.js.map +1 -0
  143. package/dist/server/server/sac/providers/tencent-3d.d.ts +2 -0
  144. package/dist/server/server/sac/providers/tencent-3d.d.ts.map +1 -0
  145. package/dist/server/server/sac/providers/tencent-3d.js +210 -0
  146. package/dist/server/server/sac/providers/tencent-3d.js.map +1 -0
  147. package/dist/server/server/sac/providers/tencent-image.d.ts +2 -0
  148. package/dist/server/server/sac/providers/tencent-image.d.ts.map +1 -0
  149. package/dist/server/server/sac/providers/tencent-image.js +90 -0
  150. package/dist/server/server/sac/providers/tencent-image.js.map +1 -0
  151. package/dist/server/server/sac/providers/tencent-video.d.ts +2 -0
  152. package/dist/server/server/sac/providers/tencent-video.d.ts.map +1 -0
  153. package/dist/server/server/sac/providers/tencent-video.js +103 -0
  154. package/dist/server/server/sac/providers/tencent-video.js.map +1 -0
  155. package/dist/server/server/sac/providers/tripo3d.d.ts +2 -0
  156. package/dist/server/server/sac/providers/tripo3d.d.ts.map +1 -0
  157. package/dist/server/server/sac/providers/tripo3d.js +302 -0
  158. package/dist/server/server/sac/providers/tripo3d.js.map +1 -0
  159. package/dist/server/server/sac/providers/vidu.d.ts +2 -0
  160. package/dist/server/server/sac/providers/vidu.d.ts.map +1 -0
  161. package/dist/server/server/sac/providers/vidu.js +965 -0
  162. package/dist/server/server/sac/providers/vidu.js.map +1 -0
  163. package/dist/server/server/sac/providers/volces-3d.d.ts +2 -0
  164. package/dist/server/server/sac/providers/volces-3d.d.ts.map +1 -0
  165. package/dist/server/server/sac/providers/volces-3d.js +77 -0
  166. package/dist/server/server/sac/providers/volces-3d.js.map +1 -0
  167. package/dist/server/server/sac/providers/volces-video.d.ts +2 -0
  168. package/dist/server/server/sac/providers/volces-video.d.ts.map +1 -0
  169. package/dist/server/server/sac/providers/volces-video.js +392 -0
  170. package/dist/server/server/sac/providers/volces-video.js.map +1 -0
  171. package/dist/server/server/sac/providers/volces.d.ts +2 -0
  172. package/dist/server/server/sac/providers/volces.d.ts.map +1 -0
  173. package/dist/server/server/sac/providers/volces.js +301 -0
  174. package/dist/server/server/sac/providers/volces.js.map +1 -0
  175. package/dist/server/server/sac/types.d.ts +59 -0
  176. package/dist/server/server/sac/types.d.ts.map +1 -0
  177. package/dist/server/server/sac/types.js +5 -0
  178. package/dist/server/server/sac/types.js.map +1 -0
  179. package/dist/server/server/schedule/rpc-schemas.d.ts +493 -493
  180. package/dist/server/server/schedule/types.d.ts +140 -140
  181. package/dist/server/server/session.d.ts +9 -2
  182. package/dist/server/server/session.d.ts.map +1 -1
  183. package/dist/server/server/session.js +137 -19
  184. package/dist/server/server/session.js.map +1 -1
  185. package/dist/server/server/speech/speech-types.d.ts +2 -2
  186. package/dist/server/server/workspace-registry.d.ts +4 -4
  187. package/dist/server/shared/messages.d.ts +17455 -15917
  188. package/dist/server/shared/messages.d.ts.map +1 -1
  189. package/dist/server/shared/messages.js +83 -0
  190. package/dist/server/shared/messages.js.map +1 -1
  191. package/dist/server/utils/spawn.d.ts.map +1 -1
  192. package/dist/server/utils/spawn.js +8 -3
  193. package/dist/server/utils/spawn.js.map +1 -1
  194. package/dist/server/utils/worktree-metadata.d.ts +4 -4
  195. package/dist/src/server/pid-lock.js +35 -2
  196. package/dist/src/server/pid-lock.js.map +1 -1
  197. package/package.json +14 -9
  198. package/dist/server/server/agent/providers/acp-agent.d.ts +0 -202
  199. package/dist/server/server/agent/providers/acp-agent.d.ts.map +0 -1
  200. package/dist/server/server/agent/providers/acp-agent.js +0 -1650
  201. package/dist/server/server/agent/providers/acp-agent.js.map +0 -1
  202. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts +0 -16
  203. package/dist/server/server/agent/providers/copilot-acp-agent.d.ts.map +0 -1
  204. package/dist/server/server/agent/providers/copilot-acp-agent.js +0 -95
  205. package/dist/server/server/agent/providers/copilot-acp-agent.js.map +0 -1
  206. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts +0 -3
  207. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.d.ts.map +0 -1
  208. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js +0 -39
  209. package/dist/server/server/agent/providers/opencode/tool-call-detail-parser.js.map +0 -1
  210. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts +0 -13
  211. package/dist/server/server/agent/providers/opencode/tool-call-mapper.d.ts.map +0 -1
  212. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js +0 -144
  213. package/dist/server/server/agent/providers/opencode/tool-call-mapper.js.map +0 -1
  214. package/dist/server/server/agent/providers/opencode-agent.d.ts +0 -121
  215. package/dist/server/server/agent/providers/opencode-agent.d.ts.map +0 -1
  216. package/dist/server/server/agent/providers/opencode-agent.js +0 -1649
  217. package/dist/server/server/agent/providers/opencode-agent.js.map +0 -1
  218. package/dist/server/server/agent/providers/pi-acp-agent.d.ts +0 -28
  219. package/dist/server/server/agent/providers/pi-acp-agent.d.ts.map +0 -1
  220. package/dist/server/server/agent/providers/pi-acp-agent.js +0 -302
  221. 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"}