scoutline 0.1.0 → 0.2.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.
Files changed (206) hide show
  1. package/README.md +170 -5
  2. package/bin/scoutline.js +36 -15
  3. package/dist/capabilities/diagnostics.d.ts +97 -0
  4. package/dist/capabilities/diagnostics.d.ts.map +1 -0
  5. package/dist/capabilities/diagnostics.js +88 -0
  6. package/dist/capabilities/diagnostics.js.map +1 -0
  7. package/dist/capabilities/quota.d.ts +99 -0
  8. package/dist/capabilities/quota.d.ts.map +1 -0
  9. package/dist/capabilities/quota.js +129 -0
  10. package/dist/capabilities/quota.js.map +1 -0
  11. package/dist/capabilities/search.d.ts +110 -0
  12. package/dist/capabilities/search.d.ts.map +1 -0
  13. package/dist/capabilities/search.js +21 -0
  14. package/dist/capabilities/search.js.map +1 -0
  15. package/dist/capabilities/vision.d.ts +156 -0
  16. package/dist/capabilities/vision.d.ts.map +1 -0
  17. package/dist/capabilities/vision.js +111 -0
  18. package/dist/capabilities/vision.js.map +1 -0
  19. package/dist/command-invocation.d.ts +58 -0
  20. package/dist/command-invocation.d.ts.map +1 -0
  21. package/dist/command-invocation.js +95 -0
  22. package/dist/command-invocation.js.map +1 -0
  23. package/dist/commands/code.d.ts +11 -4
  24. package/dist/commands/code.d.ts.map +1 -1
  25. package/dist/commands/code.js +16 -42
  26. package/dist/commands/code.js.map +1 -1
  27. package/dist/commands/doctor.d.ts +58 -3
  28. package/dist/commands/doctor.d.ts.map +1 -1
  29. package/dist/commands/doctor.js +154 -52
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/quota.d.ts +45 -3
  32. package/dist/commands/quota.d.ts.map +1 -1
  33. package/dist/commands/quota.js +116 -60
  34. package/dist/commands/quota.js.map +1 -1
  35. package/dist/commands/read.d.ts +15 -1
  36. package/dist/commands/read.d.ts.map +1 -1
  37. package/dist/commands/read.js +53 -54
  38. package/dist/commands/read.js.map +1 -1
  39. package/dist/commands/repo.d.ts +8 -3
  40. package/dist/commands/repo.d.ts.map +1 -1
  41. package/dist/commands/repo.js +40 -78
  42. package/dist/commands/repo.js.map +1 -1
  43. package/dist/commands/search.d.ts +27 -2
  44. package/dist/commands/search.d.ts.map +1 -1
  45. package/dist/commands/search.js +95 -103
  46. package/dist/commands/search.js.map +1 -1
  47. package/dist/commands/tools.d.ts +9 -3
  48. package/dist/commands/tools.d.ts.map +1 -1
  49. package/dist/commands/tools.js +29 -59
  50. package/dist/commands/tools.js.map +1 -1
  51. package/dist/commands/vision.d.ts +35 -9
  52. package/dist/commands/vision.d.ts.map +1 -1
  53. package/dist/commands/vision.js +184 -131
  54. package/dist/commands/vision.js.map +1 -1
  55. package/dist/index.d.ts +42 -1
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +389 -207
  58. package/dist/index.js.map +1 -1
  59. package/dist/lib/cache.d.ts +61 -0
  60. package/dist/lib/cache.d.ts.map +1 -1
  61. package/dist/lib/cache.js +74 -11
  62. package/dist/lib/cache.js.map +1 -1
  63. package/dist/lib/code-mode.d.ts +13 -0
  64. package/dist/lib/code-mode.d.ts.map +1 -1
  65. package/dist/lib/code-mode.js +26 -6
  66. package/dist/lib/code-mode.js.map +1 -1
  67. package/dist/lib/config.d.ts.map +1 -1
  68. package/dist/lib/config.js +15 -18
  69. package/dist/lib/config.js.map +1 -1
  70. package/dist/lib/errors.d.ts +65 -10
  71. package/dist/lib/errors.d.ts.map +1 -1
  72. package/dist/lib/errors.js +135 -19
  73. package/dist/lib/errors.js.map +1 -1
  74. package/dist/lib/execution.d.ts +76 -0
  75. package/dist/lib/execution.d.ts.map +1 -0
  76. package/dist/lib/execution.js +177 -0
  77. package/dist/lib/execution.js.map +1 -0
  78. package/dist/lib/index.d.ts +10 -2
  79. package/dist/lib/index.d.ts.map +1 -1
  80. package/dist/lib/index.js +10 -2
  81. package/dist/lib/index.js.map +1 -1
  82. package/dist/lib/mcp-client.d.ts +46 -11
  83. package/dist/lib/mcp-client.d.ts.map +1 -1
  84. package/dist/lib/mcp-client.js +92 -27
  85. package/dist/lib/mcp-client.js.map +1 -1
  86. package/dist/lib/mcp-config.d.ts +17 -0
  87. package/dist/lib/mcp-config.d.ts.map +1 -1
  88. package/dist/lib/mcp-config.js +29 -0
  89. package/dist/lib/mcp-config.js.map +1 -1
  90. package/dist/lib/monitor-client.d.ts +17 -3
  91. package/dist/lib/monitor-client.d.ts.map +1 -1
  92. package/dist/lib/monitor-client.js +23 -69
  93. package/dist/lib/monitor-client.js.map +1 -1
  94. package/dist/lib/output.d.ts +53 -7
  95. package/dist/lib/output.d.ts.map +1 -1
  96. package/dist/lib/output.js +126 -39
  97. package/dist/lib/output.js.map +1 -1
  98. package/dist/lib/redact.d.ts +62 -3
  99. package/dist/lib/redact.d.ts.map +1 -1
  100. package/dist/lib/redact.js +165 -31
  101. package/dist/lib/redact.js.map +1 -1
  102. package/dist/lib/tty.d.ts +7 -20
  103. package/dist/lib/tty.d.ts.map +1 -1
  104. package/dist/lib/tty.js +51 -30
  105. package/dist/lib/tty.js.map +1 -1
  106. package/dist/node-command-invocation-adapter.d.ts +28 -0
  107. package/dist/node-command-invocation-adapter.d.ts.map +1 -0
  108. package/dist/node-command-invocation-adapter.js +88 -0
  109. package/dist/node-command-invocation-adapter.js.map +1 -0
  110. package/dist/providers/minimax/adapter.d.ts +47 -0
  111. package/dist/providers/minimax/adapter.d.ts.map +1 -0
  112. package/dist/providers/minimax/adapter.js +443 -0
  113. package/dist/providers/minimax/adapter.js.map +1 -0
  114. package/dist/providers/minimax/config.d.ts +32 -0
  115. package/dist/providers/minimax/config.d.ts.map +1 -0
  116. package/dist/providers/minimax/config.js +84 -0
  117. package/dist/providers/minimax/config.js.map +1 -0
  118. package/dist/providers/minimax/media.d.ts +34 -0
  119. package/dist/providers/minimax/media.d.ts.map +1 -0
  120. package/dist/providers/minimax/media.js +92 -0
  121. package/dist/providers/minimax/media.js.map +1 -0
  122. package/dist/providers/minimax/quota-client.d.ts +37 -0
  123. package/dist/providers/minimax/quota-client.d.ts.map +1 -0
  124. package/dist/providers/minimax/quota-client.js +78 -0
  125. package/dist/providers/minimax/quota-client.js.map +1 -0
  126. package/dist/providers/minimax/quota.d.ts +48 -0
  127. package/dist/providers/minimax/quota.d.ts.map +1 -0
  128. package/dist/providers/minimax/quota.js +120 -0
  129. package/dist/providers/minimax/quota.js.map +1 -0
  130. package/dist/providers/minimax/sdk-client.d.ts +29 -0
  131. package/dist/providers/minimax/sdk-client.d.ts.map +1 -0
  132. package/dist/providers/minimax/sdk-client.js +50 -0
  133. package/dist/providers/minimax/sdk-client.js.map +1 -0
  134. package/dist/providers/minimax/vision-attestations.d.ts +29 -0
  135. package/dist/providers/minimax/vision-attestations.d.ts.map +1 -0
  136. package/dist/providers/minimax/vision-attestations.js +54 -0
  137. package/dist/providers/minimax/vision-attestations.js.map +1 -0
  138. package/dist/providers/minimax/vision-conformance.d.ts +184 -0
  139. package/dist/providers/minimax/vision-conformance.d.ts.map +1 -0
  140. package/dist/providers/minimax/vision-conformance.js +369 -0
  141. package/dist/providers/minimax/vision-conformance.js.map +1 -0
  142. package/dist/providers/minimax/vision-mappings/chart.d.ts +35 -0
  143. package/dist/providers/minimax/vision-mappings/chart.d.ts.map +1 -0
  144. package/dist/providers/minimax/vision-mappings/chart.js +55 -0
  145. package/dist/providers/minimax/vision-mappings/chart.js.map +1 -0
  146. package/dist/providers/minimax/vision-mappings/common.d.ts +60 -0
  147. package/dist/providers/minimax/vision-mappings/common.d.ts.map +1 -0
  148. package/dist/providers/minimax/vision-mappings/common.js +75 -0
  149. package/dist/providers/minimax/vision-mappings/common.js.map +1 -0
  150. package/dist/providers/minimax/vision-mappings/diagnose-error.d.ts +35 -0
  151. package/dist/providers/minimax/vision-mappings/diagnose-error.d.ts.map +1 -0
  152. package/dist/providers/minimax/vision-mappings/diagnose-error.js +55 -0
  153. package/dist/providers/minimax/vision-mappings/diagnose-error.js.map +1 -0
  154. package/dist/providers/minimax/vision-mappings/diagram.d.ts +35 -0
  155. package/dist/providers/minimax/vision-mappings/diagram.d.ts.map +1 -0
  156. package/dist/providers/minimax/vision-mappings/diagram.js +55 -0
  157. package/dist/providers/minimax/vision-mappings/diagram.js.map +1 -0
  158. package/dist/providers/minimax/vision-mappings/extract-text.d.ts +35 -0
  159. package/dist/providers/minimax/vision-mappings/extract-text.d.ts.map +1 -0
  160. package/dist/providers/minimax/vision-mappings/extract-text.js +55 -0
  161. package/dist/providers/minimax/vision-mappings/extract-text.js.map +1 -0
  162. package/dist/providers/minimax/vision-mappings/ui-artifact.d.ts +35 -0
  163. package/dist/providers/minimax/vision-mappings/ui-artifact.d.ts.map +1 -0
  164. package/dist/providers/minimax/vision-mappings/ui-artifact.js +69 -0
  165. package/dist/providers/minimax/vision-mappings/ui-artifact.js.map +1 -0
  166. package/dist/providers/minimax/vision-mappings.generated.d.ts +29 -0
  167. package/dist/providers/minimax/vision-mappings.generated.d.ts.map +1 -0
  168. package/dist/providers/minimax/vision-mappings.generated.js +29 -0
  169. package/dist/providers/minimax/vision-mappings.generated.js.map +1 -0
  170. package/dist/providers/minimax/vision-revisions.d.ts +22 -0
  171. package/dist/providers/minimax/vision-revisions.d.ts.map +1 -0
  172. package/dist/providers/minimax/vision-revisions.js +27 -0
  173. package/dist/providers/minimax/vision-revisions.js.map +1 -0
  174. package/dist/providers/registry.d.ts +36 -0
  175. package/dist/providers/registry.d.ts.map +1 -0
  176. package/dist/providers/registry.js +45 -0
  177. package/dist/providers/registry.js.map +1 -0
  178. package/dist/providers/selection.d.ts +44 -0
  179. package/dist/providers/selection.d.ts.map +1 -0
  180. package/dist/providers/selection.js +85 -0
  181. package/dist/providers/selection.js.map +1 -0
  182. package/dist/providers/types.d.ts +247 -0
  183. package/dist/providers/types.d.ts.map +1 -0
  184. package/dist/providers/types.js +127 -0
  185. package/dist/providers/types.js.map +1 -0
  186. package/dist/providers/zai/adapter.d.ts +35 -0
  187. package/dist/providers/zai/adapter.d.ts.map +1 -0
  188. package/dist/providers/zai/adapter.js +619 -0
  189. package/dist/providers/zai/adapter.js.map +1 -0
  190. package/dist/providers/zai/credentials.d.ts +38 -0
  191. package/dist/providers/zai/credentials.d.ts.map +1 -0
  192. package/dist/providers/zai/credentials.js +60 -0
  193. package/dist/providers/zai/credentials.js.map +1 -0
  194. package/dist/providers/zai/media.d.ts +38 -0
  195. package/dist/providers/zai/media.d.ts.map +1 -0
  196. package/dist/providers/zai/media.js +107 -0
  197. package/dist/providers/zai/media.js.map +1 -0
  198. package/dist/providers/zai/monitor-client.d.ts +53 -0
  199. package/dist/providers/zai/monitor-client.d.ts.map +1 -0
  200. package/dist/providers/zai/monitor-client.js +117 -0
  201. package/dist/providers/zai/monitor-client.js.map +1 -0
  202. package/dist/providers/zai/quota.d.ts +47 -0
  203. package/dist/providers/zai/quota.d.ts.map +1 -0
  204. package/dist/providers/zai/quota.js +127 -0
  205. package/dist/providers/zai/quota.js.map +1 -0
  206. package/package.json +10 -5
@@ -0,0 +1,619 @@
1
+ /**
2
+ * Z.AI Search Adapter (DESIGN.md §5, §7, §11 — P2-03).
3
+ *
4
+ * Implements the real Z.AI Provider Descriptor with Search support.
5
+ * The Adapter owns credentials, transport lifecycle, Provider field
6
+ * mapping, and failure normalization. Shared execution owns cache and
7
+ * retry policy, so Adapter invocations disable client-owned cache and
8
+ * retries (`noCache: true, disableRetry: true`).
9
+ *
10
+ * Boundary rules (ARCHITECTURE.md §2):
11
+ * - May import capability types, normalized errors, Provider-specific
12
+ * transport (ZaiMcpClient), and Provider identity types.
13
+ * - Must NOT import command presentation, output mode, or another
14
+ * Provider's Adapter.
15
+ *
16
+ * Field mapping (DESIGN.md §7):
17
+ * title -> title
18
+ * link -> url
19
+ * content -> summary
20
+ * media -> source
21
+ * publish_date -> date
22
+ *
23
+ * The Adapter sends only `search_query`, domain, recency, content size,
24
+ * and location to the Provider. It NEVER sends count.
25
+ */
26
+ import crypto from "node:crypto";
27
+ import { ApiError, AuthError, NetworkError, TimeoutError, ValidationError, } from "../../lib/errors.js";
28
+ import { getMcpToolName } from "../../lib/mcp-config.js";
29
+ import { ZaiMcpClient, } from "../../lib/mcp-client.js";
30
+ import { buildCacheKey } from "../../lib/cache.js";
31
+ import { isZaiConfigured, requireZaiApiKey } from "./credentials.js";
32
+ import { resolveImageSource, resolveVideoSource } from "./media.js";
33
+ import { createZaiQuotaCapability } from "./quota.js";
34
+ const SEARCH_TOOL_PUBLIC_NAME = getMcpToolName("search", "web_search_prime");
35
+ const VISION_ANALYZE_TOOL_PUBLIC_NAME = getMcpToolName("vision", "analyze_image");
36
+ // ---------------------------------------------------------------------------
37
+ // Vision Capability — operations wired in this Adapter (P3-03, P3-04)
38
+ // ---------------------------------------------------------------------------
39
+ /**
40
+ * Public dotted MCP tool names for every Z.AI Vision operation. Each
41
+ * resolves internally through the P2-03 name-translation fix. The Adapter
42
+ * invokes only the raw tool path; it does NOT call the high-level
43
+ * `ZaiMcpClient` wrapper methods.
44
+ */
45
+ const VISION_UI_TO_ARTIFACT_TOOL_PUBLIC_NAME = getMcpToolName("vision", "ui_to_artifact");
46
+ const VISION_EXTRACT_TEXT_TOOL_PUBLIC_NAME = getMcpToolName("vision", "extract_text_from_screenshot");
47
+ const VISION_DIAGNOSE_ERROR_TOOL_PUBLIC_NAME = getMcpToolName("vision", "diagnose_error_screenshot");
48
+ const VISION_DIAGRAM_TOOL_PUBLIC_NAME = getMcpToolName("vision", "understand_technical_diagram");
49
+ const VISION_CHART_TOOL_PUBLIC_NAME = getMcpToolName("vision", "analyze_data_visualization");
50
+ const VISION_DIFF_TOOL_PUBLIC_NAME = getMcpToolName("vision", "ui_diff_check");
51
+ const VISION_VIDEO_TOOL_PUBLIC_NAME = getMcpToolName("vision", "analyze_video");
52
+ /**
53
+ * Vision operations the Z.AI Adapter implements. P3-03 wired the general
54
+ * single-image interpretation; P3-04 adds every specialized operation so
55
+ * selecting Z.AI preserves Phase 1 behaviour (DESIGN.md §8: "Z.AI maps
56
+ * all current operations to dedicated MCP operations"). The descriptor
57
+ * advertises exactly what this set contains.
58
+ */
59
+ const ZAI_VISION_OPERATIONS = new Set([
60
+ "interpret-image",
61
+ "ui-artifact",
62
+ "extract-text",
63
+ "diagnose-error",
64
+ "diagram",
65
+ "chart",
66
+ "diff",
67
+ "video",
68
+ ]);
69
+ // ---------------------------------------------------------------------------
70
+ // Provider-owned legacy cache candidate
71
+ // ---------------------------------------------------------------------------
72
+ /**
73
+ * Build the legacy Z.AI cache key for a request. The shape mirrors the
74
+ * pre-P2-05 `buildCacheKey` calls the search command made through
75
+ * `ZaiMcpClient.webSearch`. `legacyCount` reconstructs the old `count`
76
+ * argument so an existing on-disk entry can still be served.
77
+ */
78
+ function buildLegacyZaiSearchKey(apiKey, request, legacyCount) {
79
+ const args = { search_query: request.query };
80
+ if (legacyCount !== undefined) {
81
+ args.count = legacyCount;
82
+ }
83
+ if (request.controls?.domain) {
84
+ args.search_domain_filter = request.controls.domain;
85
+ }
86
+ if (request.controls?.recency) {
87
+ args.search_recency_filter = request.controls.recency;
88
+ }
89
+ if (request.controls?.contentSize) {
90
+ args.content_size = request.controls.contentSize;
91
+ }
92
+ if (request.controls?.location) {
93
+ args.location = request.controls.location;
94
+ }
95
+ return buildCacheKey(SEARCH_TOOL_PUBLIC_NAME, args);
96
+ }
97
+ /**
98
+ * Decode a raw legacy Z.AI search entry into normalized `SearchSource[]`.
99
+ * Returns `null` for any shape that is not a `WebSearchResult[]` so the
100
+ * cache layer treats invalid legacy data as a miss.
101
+ */
102
+ function decodeLegacyZaiSearch(raw) {
103
+ if (!Array.isArray(raw))
104
+ return null;
105
+ const out = [];
106
+ for (const entry of raw) {
107
+ if (!entry || typeof entry !== "object")
108
+ return null;
109
+ const record = entry;
110
+ const title = typeof record.title === "string" ? record.title : "";
111
+ const link = typeof record.link === "string" ? record.link : "";
112
+ const content = typeof record.content === "string" ? record.content : "";
113
+ if (!title || !link || !content) {
114
+ // Invalid legacy entry — treat the whole candidate as a miss.
115
+ return null;
116
+ }
117
+ const source = { title, url: link, summary: content };
118
+ if (typeof record.media === "string" && record.media.length > 0) {
119
+ source.source = record.media;
120
+ }
121
+ if (typeof record.publish_date === "string" && record.publish_date.length > 0) {
122
+ source.date = record.publish_date;
123
+ }
124
+ out.push(source);
125
+ }
126
+ return out;
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Provider-owned credential fingerprint
130
+ // ---------------------------------------------------------------------------
131
+ function credentialFingerprint(apiKey) {
132
+ return crypto.createHash("sha256").update(apiKey).digest("hex");
133
+ }
134
+ function createZaiSearchCapability(options) {
135
+ const { env, clientFactory } = options;
136
+ // Credential resolution is shared (Fixup A — B4/B7): the alias
137
+ // `ZAI_API_KEY` is accepted and a missing key is a configuration
138
+ // failure (ConfigurationError, exit 3), not an auth failure.
139
+ function resolveApiKey() {
140
+ return requireZaiApiKey(env);
141
+ }
142
+ const capability = {
143
+ validate(request) {
144
+ if (!request || typeof request.query !== "string" || !request.query.trim()) {
145
+ throw new ValidationError("Search query must contain at least one non-whitespace character");
146
+ }
147
+ },
148
+ cacheIdentity(request, compatibility) {
149
+ const apiKey = resolveApiKey();
150
+ const legacyCandidates = [
151
+ {
152
+ key: buildLegacyZaiSearchKey(apiKey, request, compatibility?.legacyCount),
153
+ decode: decodeLegacyZaiSearch,
154
+ },
155
+ ];
156
+ // Mirror only `query` and Provider controls into identity. Count is
157
+ // never part of identity (it enters only the legacy key above).
158
+ const identityRequest = {
159
+ query: request.query,
160
+ };
161
+ if (request.controls) {
162
+ identityRequest.controls = request.controls;
163
+ }
164
+ return {
165
+ provider: "zai",
166
+ capability: "search",
167
+ credentialFingerprint: credentialFingerprint(apiKey),
168
+ request: identityRequest,
169
+ legacyCandidates,
170
+ };
171
+ },
172
+ async invoke(request) {
173
+ // Validate before any transport access.
174
+ capability.validate(request);
175
+ // Disable client-owned cache and retry so shared execution is the
176
+ // single policy owner.
177
+ const clientOptions = {
178
+ enableVision: false,
179
+ noCache: true,
180
+ disableRetry: true,
181
+ };
182
+ const client = clientFactory(clientOptions);
183
+ try {
184
+ const args = buildZaiSearchArgs(request);
185
+ const raw = await invokeZaiSearch(client, args);
186
+ return normalizeZaiSearchResults(raw);
187
+ }
188
+ finally {
189
+ await client.close().catch(() => { });
190
+ }
191
+ },
192
+ };
193
+ return capability;
194
+ }
195
+ /**
196
+ * Build the Z.AI Provider request arguments. The Adapter sends only
197
+ * `search_query`, domain, recency, content size, and location. Count is
198
+ * NEVER included — it remains command-local.
199
+ */
200
+ function buildZaiSearchArgs(request) {
201
+ const args = { search_query: request.query };
202
+ const controls = request.controls;
203
+ if (controls?.domain) {
204
+ args.search_domain_filter = controls.domain;
205
+ }
206
+ if (controls?.recency) {
207
+ args.search_recency_filter = controls.recency;
208
+ }
209
+ if (controls?.contentSize) {
210
+ args.content_size = controls.contentSize;
211
+ }
212
+ if (controls?.location) {
213
+ args.location = controls.location;
214
+ }
215
+ return args;
216
+ }
217
+ async function invokeZaiSearch(client, args) {
218
+ try {
219
+ const result = await client.callToolRaw(SEARCH_TOOL_PUBLIC_NAME, args);
220
+ if (!Array.isArray(result)) {
221
+ throw new ApiError("Z.AI search returned a non-array result", 500);
222
+ }
223
+ return result;
224
+ }
225
+ catch (error) {
226
+ throw normalizeZaiError(error);
227
+ }
228
+ }
229
+ /**
230
+ * Map a Provider failure into a normalized error. Numeric codes, raw
231
+ * response bodies, and UTCP stack data are discarded (NFR-006).
232
+ *
233
+ * Typed transport errors thrown by the lower-level client (AuthError,
234
+ * ApiError, NetworkError, TimeoutError) are re-wrapped with sanitized
235
+ * messages so a raw Provider response body embedded upstream never
236
+ * survives to public output. The `statusCode` is preserved so the
237
+ * shared execution layer can classify retryability (DESIGN.md §10).
238
+ * Our own `ValidationError` (from Capability `validate()`) carries a
239
+ * clean, human-authored message and is returned verbatim.
240
+ */
241
+ function normalizeZaiError(error) {
242
+ // Validation messages are authored by Scoutline and are safe to surface.
243
+ if (error instanceof ValidationError) {
244
+ return error;
245
+ }
246
+ // Re-wrap typed transport errors with clean messages. The raw message
247
+ // is discarded; only code + statusCode (retry signal) survive.
248
+ if (error instanceof AuthError) {
249
+ return new AuthError("Z.AI authentication failed");
250
+ }
251
+ if (error instanceof NetworkError) {
252
+ return new NetworkError("Z.AI network error");
253
+ }
254
+ if (error instanceof TimeoutError) {
255
+ // Fixup D: preserve the original error's duration instead of
256
+ // reconstructing it from an ambient process.env that may differ from
257
+ // the injected env. The rewrapped error carries the same duration.
258
+ return new TimeoutError(error.durationMs);
259
+ }
260
+ if (error instanceof ApiError) {
261
+ const statusCode = inferStatusCode("", error.statusCode);
262
+ return new ApiError("Z.AI request failed", statusCode);
263
+ }
264
+ const message = error instanceof Error ? error.message : String(error);
265
+ const lower = message.toLowerCase();
266
+ if (lower.includes("401") ||
267
+ lower.includes("403") ||
268
+ lower.includes("unauthorized") ||
269
+ lower.includes("forbidden")) {
270
+ return new AuthError("Z.AI authentication failed");
271
+ }
272
+ if (lower.includes("timeout") || lower.includes("timed out") || lower.includes("etimedout")) {
273
+ return new TimeoutError(parseInt(process.env.Z_AI_TIMEOUT || "30000", 10));
274
+ }
275
+ if (lower.includes("econnrefused") ||
276
+ lower.includes("econnreset") ||
277
+ lower.includes("network") ||
278
+ lower.includes("enotfound") ||
279
+ lower.includes("fetch failed")) {
280
+ return new NetworkError("Z.AI network error");
281
+ }
282
+ // Default: API_ERROR with no stack or raw body.
283
+ return new ApiError("Z.AI search request failed", inferStatusCode(lower));
284
+ }
285
+ /**
286
+ * Resolve a stable HTTP-style status code for retry classification.
287
+ * Explicit client errors (404, 400, 410, 422) map to their real codes
288
+ * so the execution layer treats them as terminal (DESIGN.md §10).
289
+ * Retryable server errors (429, 500, 502, 503, 504) map to themselves.
290
+ * An unknown failure defaults to 500 (transient), preserving shipped
291
+ * behaviour for genuine "unexpected system" conditions.
292
+ *
293
+ * When the caller already carries a numeric status (a typed ApiError),
294
+ * that status is honoured directly so retryability is never lost.
295
+ */
296
+ function inferStatusCode(lower, known) {
297
+ if (typeof known === "number" && Number.isFinite(known))
298
+ return known;
299
+ if (lower.includes("404") || lower.includes("not found"))
300
+ return 404;
301
+ if (lower.includes("400") || lower.includes("bad request"))
302
+ return 400;
303
+ if (lower.includes("410") || lower.includes("gone"))
304
+ return 410;
305
+ if (lower.includes("422") || lower.includes("unprocessable"))
306
+ return 422;
307
+ if (lower.includes("429") || lower.includes("rate limit"))
308
+ return 429;
309
+ if (lower.includes("500") || lower.includes("internal"))
310
+ return 500;
311
+ if (lower.includes("502") || lower.includes("bad gateway"))
312
+ return 502;
313
+ if (lower.includes("503") || lower.includes("service unavailable"))
314
+ return 503;
315
+ if (lower.includes("504") || lower.includes("gateway timeout"))
316
+ return 504;
317
+ return 500;
318
+ }
319
+ /**
320
+ * Map Provider response fields to normalized `SearchSource[]`. Unknown
321
+ * fields are discarded.
322
+ */
323
+ function normalizeZaiSearchResults(raw) {
324
+ const out = [];
325
+ for (const entry of raw) {
326
+ if (!entry || typeof entry !== "object")
327
+ continue;
328
+ const title = typeof entry.title === "string" ? entry.title : "";
329
+ const link = typeof entry.link === "string" ? entry.link : "";
330
+ const content = typeof entry.content === "string" ? entry.content : "";
331
+ const source = { title, url: link, summary: content };
332
+ if (typeof entry.media === "string" && entry.media.length > 0) {
333
+ source.source = entry.media;
334
+ }
335
+ if (typeof entry.publish_date === "string" && entry.publish_date.length > 0) {
336
+ source.date = entry.publish_date;
337
+ }
338
+ out.push(source);
339
+ }
340
+ return out;
341
+ }
342
+ /**
343
+ * Build the Z.AI Vision Capability. Maps `interpret-image` to the
344
+ * `vision.analyze_image` MCP operation through the same raw-tool path as
345
+ * Search. The validated image source maps to `image_source`; the
346
+ * instruction maps to `prompt`. Only a nonempty text result is normalized;
347
+ * Provider envelopes and error bodies stay inside the Adapter.
348
+ *
349
+ * Vision never uses the response cache (FR-022) and never retries inside
350
+ * the Adapter transport; shared execution owns the retry policy.
351
+ */
352
+ function createZaiVisionCapability(options) {
353
+ const { env, clientFactory } = options;
354
+ // Shared credential resolver (Fixup A — B4/B7).
355
+ function resolveApiKey() {
356
+ return requireZaiApiKey(env);
357
+ }
358
+ const capability = {
359
+ supports(operation) {
360
+ return ZAI_VISION_OPERATIONS.has(operation);
361
+ },
362
+ async invoke(request) {
363
+ // Credential resolved for the transport; media resolved inside
364
+ // `buildZaiVisionInvocation` to the validated Z.AI source (absolute
365
+ // path or HTTP(S) URL) — the media module never reads file content.
366
+ // Unsupported operations never reach here: the descriptor-level
367
+ // gate and `supports()` reject first (defence in depth).
368
+ resolveApiKey();
369
+ const { toolName, args } = buildZaiVisionInvocation(request);
370
+ // Disable client-owned cache and retry so shared execution is the
371
+ // single policy owner. Vision enables the Z.AI vision MCP server.
372
+ const clientOptions = {
373
+ enableVision: true,
374
+ noCache: true,
375
+ disableRetry: true,
376
+ };
377
+ const client = clientFactory(clientOptions);
378
+ try {
379
+ const raw = await invokeZaiVision(client, toolName, args);
380
+ return normalizeZaiVisionResult(raw);
381
+ }
382
+ finally {
383
+ await client.close().catch(() => { });
384
+ }
385
+ },
386
+ };
387
+ return capability;
388
+ }
389
+ /**
390
+ * Map a discriminated `VisionRequest` to its dedicated Z.AI MCP tool name
391
+ * and arguments, resolving media through the Z.AI media Module. Field
392
+ * names mirror the characterized transport schema (see `mcp-client.ts`
393
+ * and the live discovery fixtures). Optional fields are omitted when
394
+ * absent so the Provider receives the same request shape Phase 1 sent.
395
+ */
396
+ function buildZaiVisionInvocation(request) {
397
+ switch (request.operation) {
398
+ case "interpret-image":
399
+ return {
400
+ toolName: VISION_ANALYZE_TOOL_PUBLIC_NAME,
401
+ args: {
402
+ image_source: resolveImageSource(request.source),
403
+ prompt: request.instruction,
404
+ },
405
+ };
406
+ case "ui-artifact":
407
+ return {
408
+ toolName: VISION_UI_TO_ARTIFACT_TOOL_PUBLIC_NAME,
409
+ args: {
410
+ image_source: resolveImageSource(request.source),
411
+ output_type: request.outputType,
412
+ prompt: request.instruction,
413
+ },
414
+ };
415
+ case "extract-text": {
416
+ const args = {
417
+ image_source: resolveImageSource(request.source),
418
+ prompt: request.instruction,
419
+ };
420
+ if (request.programmingLanguage) {
421
+ args.programming_language = request.programmingLanguage;
422
+ }
423
+ return { toolName: VISION_EXTRACT_TEXT_TOOL_PUBLIC_NAME, args };
424
+ }
425
+ case "diagnose-error": {
426
+ const args = {
427
+ image_source: resolveImageSource(request.source),
428
+ prompt: request.instruction,
429
+ };
430
+ if (request.context) {
431
+ args.context = request.context;
432
+ }
433
+ return { toolName: VISION_DIAGNOSE_ERROR_TOOL_PUBLIC_NAME, args };
434
+ }
435
+ case "diagram": {
436
+ const args = {
437
+ image_source: resolveImageSource(request.source),
438
+ prompt: request.instruction,
439
+ };
440
+ if (request.diagramType) {
441
+ args.diagram_type = request.diagramType;
442
+ }
443
+ return { toolName: VISION_DIAGRAM_TOOL_PUBLIC_NAME, args };
444
+ }
445
+ case "chart": {
446
+ const args = {
447
+ image_source: resolveImageSource(request.source),
448
+ prompt: request.instruction,
449
+ };
450
+ if (request.focus) {
451
+ args.analysis_focus = request.focus;
452
+ }
453
+ return { toolName: VISION_CHART_TOOL_PUBLIC_NAME, args };
454
+ }
455
+ case "diff":
456
+ return {
457
+ toolName: VISION_DIFF_TOOL_PUBLIC_NAME,
458
+ args: {
459
+ expected_image_source: resolveImageSource(request.expectedSource),
460
+ actual_image_source: resolveImageSource(request.actualSource),
461
+ prompt: request.instruction,
462
+ },
463
+ };
464
+ case "video":
465
+ return {
466
+ toolName: VISION_VIDEO_TOOL_PUBLIC_NAME,
467
+ args: {
468
+ video_source: resolveVideoSource(request.source),
469
+ prompt: request.instruction,
470
+ },
471
+ };
472
+ }
473
+ }
474
+ async function invokeZaiVision(client, toolName, args) {
475
+ try {
476
+ return await client.callToolRaw(toolName, args);
477
+ }
478
+ catch (error) {
479
+ throw normalizeZaiError(error);
480
+ }
481
+ }
482
+ /**
483
+ * Normalize the Z.AI vision result to a nonempty text string. The
484
+ * `vision.analyze_image` MCP operation returns direct text; an empty,
485
+ * whitespace-only, or non-string value is a malformed result.
486
+ */
487
+ function normalizeZaiVisionResult(raw) {
488
+ if (typeof raw === "string" && raw.trim().length > 0) {
489
+ return raw;
490
+ }
491
+ throw new ApiError("Z.AI vision returned an empty or malformed result", 500);
492
+ }
493
+ /**
494
+ * Build the Z.AI DiagnosticsCapability. Z.AI connectivity is probed
495
+ * through tool discovery: a UTCP client is constructed and `listTools`
496
+ * is called once. The probe authenticates and verifies the MCP
497
+ * transport without a generative request. Shared execution wraps this
498
+ * in the retry policy; the Adapter transport performs one attempt.
499
+ */
500
+ function createZaiDiagnosticsCapability(options) {
501
+ const { env, clientFactory } = options;
502
+ return {
503
+ async invoke(diagOptions) {
504
+ if (!diagOptions.probe)
505
+ return;
506
+ // Shared credential resolver (Fixup A — B4/B7): missing key is a
507
+ // configuration failure (ConfigurationError, exit 3).
508
+ requireZaiApiKey(env);
509
+ // Disable client-owned cache and retry so shared execution is the
510
+ // single policy owner. Diagnostics needs no vision MCP server.
511
+ const clientOptions = {
512
+ enableVision: false,
513
+ noCache: true,
514
+ disableRetry: true,
515
+ };
516
+ const client = clientFactory(clientOptions);
517
+ try {
518
+ await client.listTools();
519
+ }
520
+ catch (error) {
521
+ throw normalizeZaiError(error);
522
+ }
523
+ finally {
524
+ await client.close().catch(() => { });
525
+ }
526
+ },
527
+ };
528
+ }
529
+ // ---------------------------------------------------------------------------
530
+ // Descriptor factory
531
+ // ---------------------------------------------------------------------------
532
+ /**
533
+ * Default Z.AI client factory bound to {@link ZaiMcpClient}. Tests inject
534
+ * a fake factory through {@link createZaiDescriptor}'s dependencies.
535
+ */
536
+ function defaultZaiClientFactory(options) {
537
+ // The Provider-types `ZaiMcpClientOptions` declares a narrower
538
+ // `utcpFactory` return type (`UtcpClientPort`) than the
539
+ // `ZaiMcpClient` constructor's local interface (`UtcpClient`). The
540
+ // runtime object is structurally compatible — the narrower port is a
541
+ // behavioural subset the client consumes via duck-typing — so we cast
542
+ // at the boundary instead of leaking the SDK type outward.
543
+ const client = new ZaiMcpClient(options);
544
+ // Adapt the rich ZaiMcpClient surface to the narrow
545
+ // ZaiAdapterClientPort the Z.AI Search Adapter needs.
546
+ return {
547
+ callToolRaw(name, args) {
548
+ return client.callToolRaw(name, args);
549
+ },
550
+ listTools() {
551
+ return client.listTools();
552
+ },
553
+ close() {
554
+ return client.close();
555
+ },
556
+ };
557
+ }
558
+ /**
559
+ * Build the Z.AI Provider Descriptor. The descriptor advertises the
560
+ * Search Capability and constructs an Adapter whose `search` Capability
561
+ * owns credentials, transport lifecycle, Provider field mapping, and
562
+ * failure normalization. Construction is side-effect-free; transport is
563
+ * built and torn down per invocation.
564
+ */
565
+ export function createZaiDescriptor(dependencies) {
566
+ const clientFactory = dependencies?.clientFactory ?? defaultZaiClientFactory;
567
+ // Quota-monitor transport injection (tests). Production uses the
568
+ // global fetch and timers resolved inside the monitor client.
569
+ const quotaTransport = {};
570
+ if (dependencies?.quotaFetch) {
571
+ quotaTransport.fetch = dependencies.quotaFetch;
572
+ }
573
+ if (dependencies?.quotaSetTimeout) {
574
+ quotaTransport.setTimeout = dependencies.quotaSetTimeout;
575
+ }
576
+ if (dependencies?.quotaClearTimeout) {
577
+ quotaTransport.clearTimeout = dependencies.quotaClearTimeout;
578
+ }
579
+ return {
580
+ id: "zai",
581
+ isConfigured(env) {
582
+ // Shared resolver honours the ZAI_API_KEY alias (Fixup A — B4).
583
+ return isZaiConfigured(env);
584
+ },
585
+ capabilities() {
586
+ return new Set([
587
+ "search",
588
+ "vision.interpret-image",
589
+ "vision.ui-artifact",
590
+ "vision.extract-text",
591
+ "vision.diagnose-error",
592
+ "vision.diagram",
593
+ "vision.chart",
594
+ "vision.diff",
595
+ "vision.video",
596
+ "quota",
597
+ "diagnostics",
598
+ ]);
599
+ },
600
+ create(context) {
601
+ const search = createZaiSearchCapability({
602
+ env: context.env,
603
+ clientFactory,
604
+ });
605
+ const vision = createZaiVisionCapability({
606
+ env: context.env,
607
+ clientFactory,
608
+ });
609
+ const quotaOptions = { env: context.env, ...quotaTransport };
610
+ const quota = createZaiQuotaCapability(quotaOptions);
611
+ const diagnostics = createZaiDiagnosticsCapability({
612
+ env: context.env,
613
+ clientFactory,
614
+ });
615
+ return { id: "zai", search, vision, quota, diagnostics };
616
+ },
617
+ };
618
+ }
619
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/providers/zai/adapter.ts"],"names":[],"mappings":"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"}