scoutline 0.1.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +394 -7
- package/bin/scoutline.js +36 -15
- package/dist/capabilities/diagnostics.d.ts +135 -0
- package/dist/capabilities/diagnostics.d.ts.map +1 -0
- package/dist/capabilities/diagnostics.js +139 -0
- package/dist/capabilities/diagnostics.js.map +1 -0
- package/dist/capabilities/quota.d.ts +99 -0
- package/dist/capabilities/quota.d.ts.map +1 -0
- package/dist/capabilities/quota.js +129 -0
- package/dist/capabilities/quota.js.map +1 -0
- package/dist/capabilities/reader.d.ts +227 -0
- package/dist/capabilities/reader.d.ts.map +1 -0
- package/dist/capabilities/reader.js +100 -0
- package/dist/capabilities/reader.js.map +1 -0
- package/dist/capabilities/repository.d.ts +221 -0
- package/dist/capabilities/repository.d.ts.map +1 -0
- package/dist/capabilities/repository.js +172 -0
- package/dist/capabilities/repository.js.map +1 -0
- package/dist/capabilities/search.d.ts +110 -0
- package/dist/capabilities/search.d.ts.map +1 -0
- package/dist/capabilities/search.js +21 -0
- package/dist/capabilities/search.js.map +1 -0
- package/dist/capabilities/vision.d.ts +156 -0
- package/dist/capabilities/vision.d.ts.map +1 -0
- package/dist/capabilities/vision.js +111 -0
- package/dist/capabilities/vision.js.map +1 -0
- package/dist/command-invocation.d.ts +58 -0
- package/dist/command-invocation.d.ts.map +1 -0
- package/dist/command-invocation.js +95 -0
- package/dist/command-invocation.js.map +1 -0
- package/dist/commands/cache.d.ts +106 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +203 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/code.d.ts +11 -4
- package/dist/commands/code.d.ts.map +1 -1
- package/dist/commands/code.js +16 -42
- package/dist/commands/code.js.map +1 -1
- package/dist/commands/doctor.d.ts +69 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +179 -52
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/quota.d.ts +45 -3
- package/dist/commands/quota.d.ts.map +1 -1
- package/dist/commands/quota.js +116 -60
- package/dist/commands/quota.js.map +1 -1
- package/dist/commands/read.d.ts +76 -2
- package/dist/commands/read.d.ts.map +1 -1
- package/dist/commands/read.js +260 -121
- package/dist/commands/read.js.map +1 -1
- package/dist/commands/repo.d.ts +55 -4
- package/dist/commands/repo.d.ts.map +1 -1
- package/dist/commands/repo.js +115 -172
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/repository-explorer.d.ts +147 -0
- package/dist/commands/repository-explorer.d.ts.map +1 -0
- package/dist/commands/repository-explorer.js +550 -0
- package/dist/commands/repository-explorer.js.map +1 -0
- package/dist/commands/search.d.ts +27 -2
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +95 -103
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/tools.d.ts +9 -3
- package/dist/commands/tools.d.ts.map +1 -1
- package/dist/commands/tools.js +29 -59
- package/dist/commands/tools.js.map +1 -1
- package/dist/commands/vision.d.ts +35 -9
- package/dist/commands/vision.d.ts.map +1 -1
- package/dist/commands/vision.js +184 -131
- package/dist/commands/vision.js.map +1 -1
- package/dist/index.d.ts +62 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +580 -223
- package/dist/index.js.map +1 -1
- package/dist/lib/cache.d.ts +178 -12
- package/dist/lib/cache.d.ts.map +1 -1
- package/dist/lib/cache.js +377 -39
- package/dist/lib/cache.js.map +1 -1
- package/dist/lib/code-mode.d.ts +13 -0
- package/dist/lib/code-mode.d.ts.map +1 -1
- package/dist/lib/code-mode.js +26 -6
- package/dist/lib/code-mode.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +15 -18
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +89 -11
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +168 -21
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/execution.d.ts +190 -0
- package/dist/lib/execution.d.ts.map +1 -0
- package/dist/lib/execution.js +383 -0
- package/dist/lib/execution.js.map +1 -0
- package/dist/lib/index.d.ts +10 -2
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +10 -2
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/mcp-client.d.ts +75 -16
- package/dist/lib/mcp-client.d.ts.map +1 -1
- package/dist/lib/mcp-client.js +173 -108
- package/dist/lib/mcp-client.js.map +1 -1
- package/dist/lib/mcp-config.d.ts +17 -0
- package/dist/lib/mcp-config.d.ts.map +1 -1
- package/dist/lib/mcp-config.js +29 -0
- package/dist/lib/mcp-config.js.map +1 -1
- package/dist/lib/monitor-client.d.ts +17 -3
- package/dist/lib/monitor-client.d.ts.map +1 -1
- package/dist/lib/monitor-client.js +23 -69
- package/dist/lib/monitor-client.js.map +1 -1
- package/dist/lib/output.d.ts +53 -7
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +126 -39
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/redact.d.ts +62 -3
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +165 -31
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/tool-cache.d.ts +86 -0
- package/dist/lib/tool-cache.d.ts.map +1 -0
- package/dist/lib/tool-cache.js +123 -0
- package/dist/lib/tool-cache.js.map +1 -0
- package/dist/lib/tty.d.ts +7 -20
- package/dist/lib/tty.d.ts.map +1 -1
- package/dist/lib/tty.js +51 -30
- package/dist/lib/tty.js.map +1 -1
- package/dist/node-command-invocation-adapter.d.ts +28 -0
- package/dist/node-command-invocation-adapter.d.ts.map +1 -0
- package/dist/node-command-invocation-adapter.js +88 -0
- package/dist/node-command-invocation-adapter.js.map +1 -0
- package/dist/providers/minimax/adapter.d.ts +49 -0
- package/dist/providers/minimax/adapter.d.ts.map +1 -0
- package/dist/providers/minimax/adapter.js +450 -0
- package/dist/providers/minimax/adapter.js.map +1 -0
- package/dist/providers/minimax/coding-plan-client.d.ts +60 -0
- package/dist/providers/minimax/coding-plan-client.d.ts.map +1 -0
- package/dist/providers/minimax/coding-plan-client.js +204 -0
- package/dist/providers/minimax/coding-plan-client.js.map +1 -0
- package/dist/providers/minimax/config.d.ts +32 -0
- package/dist/providers/minimax/config.d.ts.map +1 -0
- package/dist/providers/minimax/config.js +84 -0
- package/dist/providers/minimax/config.js.map +1 -0
- package/dist/providers/minimax/media.d.ts +88 -0
- package/dist/providers/minimax/media.d.ts.map +1 -0
- package/dist/providers/minimax/media.js +232 -0
- package/dist/providers/minimax/media.js.map +1 -0
- package/dist/providers/minimax/quota-client.d.ts +44 -0
- package/dist/providers/minimax/quota-client.d.ts.map +1 -0
- package/dist/providers/minimax/quota-client.js +83 -0
- package/dist/providers/minimax/quota-client.js.map +1 -0
- package/dist/providers/minimax/quota.d.ts +48 -0
- package/dist/providers/minimax/quota.d.ts.map +1 -0
- package/dist/providers/minimax/quota.js +120 -0
- package/dist/providers/minimax/quota.js.map +1 -0
- package/dist/providers/minimax/sdk-client.d.ts +29 -0
- package/dist/providers/minimax/sdk-client.d.ts.map +1 -0
- package/dist/providers/minimax/sdk-client.js +50 -0
- package/dist/providers/minimax/sdk-client.js.map +1 -0
- package/dist/providers/minimax/vision-attestations.d.ts +52 -0
- package/dist/providers/minimax/vision-attestations.d.ts.map +1 -0
- package/dist/providers/minimax/vision-attestations.js +79 -0
- package/dist/providers/minimax/vision-attestations.js.map +1 -0
- package/dist/providers/minimax/vision-conformance.d.ts +186 -0
- package/dist/providers/minimax/vision-conformance.d.ts.map +1 -0
- package/dist/providers/minimax/vision-conformance.js +371 -0
- package/dist/providers/minimax/vision-conformance.js.map +1 -0
- package/dist/providers/minimax/vision-mappings/chart.d.ts +35 -0
- package/dist/providers/minimax/vision-mappings/chart.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings/chart.js +55 -0
- package/dist/providers/minimax/vision-mappings/chart.js.map +1 -0
- package/dist/providers/minimax/vision-mappings/common.d.ts +60 -0
- package/dist/providers/minimax/vision-mappings/common.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings/common.js +75 -0
- package/dist/providers/minimax/vision-mappings/common.js.map +1 -0
- package/dist/providers/minimax/vision-mappings/diagnose-error.d.ts +35 -0
- package/dist/providers/minimax/vision-mappings/diagnose-error.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings/diagnose-error.js +55 -0
- package/dist/providers/minimax/vision-mappings/diagnose-error.js.map +1 -0
- package/dist/providers/minimax/vision-mappings/diagram.d.ts +35 -0
- package/dist/providers/minimax/vision-mappings/diagram.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings/diagram.js +55 -0
- package/dist/providers/minimax/vision-mappings/diagram.js.map +1 -0
- package/dist/providers/minimax/vision-mappings/extract-text.d.ts +35 -0
- package/dist/providers/minimax/vision-mappings/extract-text.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings/extract-text.js +55 -0
- package/dist/providers/minimax/vision-mappings/extract-text.js.map +1 -0
- package/dist/providers/minimax/vision-mappings/ui-artifact.d.ts +35 -0
- package/dist/providers/minimax/vision-mappings/ui-artifact.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings/ui-artifact.js +69 -0
- package/dist/providers/minimax/vision-mappings/ui-artifact.js.map +1 -0
- package/dist/providers/minimax/vision-mappings.generated.d.ts +29 -0
- package/dist/providers/minimax/vision-mappings.generated.d.ts.map +1 -0
- package/dist/providers/minimax/vision-mappings.generated.js +29 -0
- package/dist/providers/minimax/vision-mappings.generated.js.map +1 -0
- package/dist/providers/minimax/vision-revisions.d.ts +29 -0
- package/dist/providers/minimax/vision-revisions.d.ts.map +1 -0
- package/dist/providers/minimax/vision-revisions.js +34 -0
- package/dist/providers/minimax/vision-revisions.js.map +1 -0
- package/dist/providers/registry.d.ts +36 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +45 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/selection.d.ts +44 -0
- package/dist/providers/selection.d.ts.map +1 -0
- package/dist/providers/selection.js +85 -0
- package/dist/providers/selection.js.map +1 -0
- package/dist/providers/types.d.ts +281 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +127 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/zai/adapter.d.ts +35 -0
- package/dist/providers/zai/adapter.d.ts.map +1 -0
- package/dist/providers/zai/adapter.js +685 -0
- package/dist/providers/zai/adapter.js.map +1 -0
- package/dist/providers/zai/credentials.d.ts +38 -0
- package/dist/providers/zai/credentials.d.ts.map +1 -0
- package/dist/providers/zai/credentials.js +60 -0
- package/dist/providers/zai/credentials.js.map +1 -0
- package/dist/providers/zai/encoded-error.d.ts +90 -0
- package/dist/providers/zai/encoded-error.d.ts.map +1 -0
- package/dist/providers/zai/encoded-error.js +169 -0
- package/dist/providers/zai/encoded-error.js.map +1 -0
- package/dist/providers/zai/media.d.ts +38 -0
- package/dist/providers/zai/media.d.ts.map +1 -0
- package/dist/providers/zai/media.js +107 -0
- package/dist/providers/zai/media.js.map +1 -0
- package/dist/providers/zai/monitor-client.d.ts +53 -0
- package/dist/providers/zai/monitor-client.d.ts.map +1 -0
- package/dist/providers/zai/monitor-client.js +117 -0
- package/dist/providers/zai/monitor-client.js.map +1 -0
- package/dist/providers/zai/quota.d.ts +47 -0
- package/dist/providers/zai/quota.d.ts.map +1 -0
- package/dist/providers/zai/quota.js +127 -0
- package/dist/providers/zai/quota.js.map +1 -0
- package/dist/providers/zai/reader.d.ts +82 -0
- package/dist/providers/zai/reader.d.ts.map +1 -0
- package/dist/providers/zai/reader.js +490 -0
- package/dist/providers/zai/reader.js.map +1 -0
- package/dist/providers/zai/repository.d.ts +76 -0
- package/dist/providers/zai/repository.d.ts.map +1 -0
- package/dist/providers/zai/repository.js +715 -0
- package/dist/providers/zai/repository.js.map +1 -0
- package/package.json +11 -6
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Execution Contract (DESIGN.md §10).
|
|
3
|
+
*
|
|
4
|
+
* Owns cache lookup, legacy read-through, retry policy, and local count
|
|
5
|
+
* truncation for every Provider Capability. Capability Modules define
|
|
6
|
+
* shared meaning; Adapters perform a single transport attempt; this
|
|
7
|
+
* module is the single retry and cache-policy owner.
|
|
8
|
+
*
|
|
9
|
+
* Boundary rules (ARCHITECTURE.md §2):
|
|
10
|
+
* - May import capability types, Provider identity types, cache, and
|
|
11
|
+
* normalized errors.
|
|
12
|
+
* - Must NOT import a concrete Provider Adapter, UTCP, or `mmx-cli`.
|
|
13
|
+
* - Must NOT import command presentation or output mode modules.
|
|
14
|
+
*
|
|
15
|
+
* Order of operations for `executeSearch`:
|
|
16
|
+
* 1. `capability.validate(request)`
|
|
17
|
+
* 2. `capability.cacheIdentity(request, { legacyCount: options.count })`
|
|
18
|
+
* 3. Read the provider-partitioned cache key
|
|
19
|
+
* 4. Try and decode Adapter-supplied legacy candidates when applicable
|
|
20
|
+
* 5. Invoke through `executeProviderOperation`
|
|
21
|
+
* 6. Retry only normalized retryable failures
|
|
22
|
+
* 7. Cache the full normalized result
|
|
23
|
+
* 8. Apply local count truncation
|
|
24
|
+
*/
|
|
25
|
+
import { ScoutlineError } from "./errors.js";
|
|
26
|
+
import { buildProviderCacheKey } from "./cache.js";
|
|
27
|
+
const DEFAULT_BASE_DELAY_MS = 500;
|
|
28
|
+
const DEFAULT_MAX_DELAY_MS = 8000;
|
|
29
|
+
const DEFAULT_JITTER_MS = 250;
|
|
30
|
+
/**
|
|
31
|
+
* Default retry policy per operation. Search, quota, diagnostics, the
|
|
32
|
+
* three repository operations, and the reader operation allow one
|
|
33
|
+
* retry; Vision allows two to preserve shipped Z.AI behaviour. Base
|
|
34
|
+
* delay 500 ms, max delay 8000 ms, jitter up to 250 ms.
|
|
35
|
+
*
|
|
36
|
+
* The repository and reader operations inherit the existing single-
|
|
37
|
+
* retry non-Vision policy (DESIGN.md §18) without altering the
|
|
38
|
+
* behaviour of Search/Vision/Quota/Diagnostics; the new values are
|
|
39
|
+
* routed through the same default branch as Search/Quota/Diagnostics.
|
|
40
|
+
*/
|
|
41
|
+
export function defaultRetryPolicy(operation) {
|
|
42
|
+
const base = {
|
|
43
|
+
baseDelayMs: DEFAULT_BASE_DELAY_MS,
|
|
44
|
+
maxDelayMs: DEFAULT_MAX_DELAY_MS,
|
|
45
|
+
jitterMs: DEFAULT_JITTER_MS,
|
|
46
|
+
};
|
|
47
|
+
switch (operation) {
|
|
48
|
+
case "vision":
|
|
49
|
+
return { ...base, maxRetries: 2 };
|
|
50
|
+
case "search":
|
|
51
|
+
case "quota":
|
|
52
|
+
case "diagnostics":
|
|
53
|
+
case "repository-search":
|
|
54
|
+
case "repository-read-file":
|
|
55
|
+
case "repository-list-directory":
|
|
56
|
+
case "reader-fetch":
|
|
57
|
+
default:
|
|
58
|
+
return { ...base, maxRetries: 1 };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Classify whether a normalized error is retryable for a Provider
|
|
63
|
+
* operation. Authentication, validation, unsupported, content-policy,
|
|
64
|
+
* and exhausted-quota failures are terminal. Normalized timeout,
|
|
65
|
+
* network, HTTP 429, and any 5xx (statusCode 500..599, inclusive)
|
|
66
|
+
* equivalents are retryable.
|
|
67
|
+
*
|
|
68
|
+
* The 5xx range is matched as a closed interval so Provider-encoded
|
|
69
|
+
* statuses that the upstream gateway passes through verbatim (501,
|
|
70
|
+
* 505, 599, etc.) retry exactly once, matching Design §18 and
|
|
71
|
+
* FR-090. Other 4xx codes remain terminal.
|
|
72
|
+
*
|
|
73
|
+
* An explicit `retryable: true` on a `ScoutlineError` wins; an explicit
|
|
74
|
+
* `retryable: false` overrides a code-based default. Non-Scoutline
|
|
75
|
+
* errors never retry — Adapters must normalize failures before they
|
|
76
|
+
* leave the Adapter boundary.
|
|
77
|
+
*/
|
|
78
|
+
function isOperationRetryableError(error) {
|
|
79
|
+
if (!(error instanceof ScoutlineError))
|
|
80
|
+
return false;
|
|
81
|
+
// Explicit retryable flag wins over code-based defaults.
|
|
82
|
+
if (error.retryable)
|
|
83
|
+
return true;
|
|
84
|
+
switch (error.code) {
|
|
85
|
+
case "TIMEOUT_ERROR":
|
|
86
|
+
case "NETWORK_ERROR":
|
|
87
|
+
return true;
|
|
88
|
+
case "API_ERROR": {
|
|
89
|
+
// Design §18 / FR-090: 429 and any 5xx (500..599 inclusive) retry
|
|
90
|
+
// once. The interval is closed so encoded Provider statuses that
|
|
91
|
+
// pass through verbatim (501, 505, 599, ...) match the contract.
|
|
92
|
+
const status = error.statusCode;
|
|
93
|
+
return status !== undefined && (status === 429 || (status >= 500 && status <= 599));
|
|
94
|
+
}
|
|
95
|
+
default:
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generic uncached retry wrapper. Performs no I/O of its own; the
|
|
101
|
+
* caller supplies the invoke thunk and the cache strategy. Each
|
|
102
|
+
* outward Provider operation has exactly one retry wrapper; Adapter
|
|
103
|
+
* transport methods perform one attempt and never retry internally.
|
|
104
|
+
*/
|
|
105
|
+
export async function executeProviderOperation(operation, invoke, dependencies, retryPolicy) {
|
|
106
|
+
const policy = retryPolicy ?? defaultRetryPolicy(operation);
|
|
107
|
+
let attempt = 0;
|
|
108
|
+
for (;;) {
|
|
109
|
+
try {
|
|
110
|
+
return await invoke();
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (attempt >= policy.maxRetries)
|
|
114
|
+
throw error;
|
|
115
|
+
if (!isOperationRetryableError(error))
|
|
116
|
+
throw error;
|
|
117
|
+
const backoff = Math.min(policy.maxDelayMs, policy.baseDelayMs * Math.pow(2, attempt));
|
|
118
|
+
const jitter = Math.floor(dependencies.random() * policy.jitterMs);
|
|
119
|
+
await dependencies.sleep(backoff + jitter);
|
|
120
|
+
attempt += 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// ---------------------------------------------------------------------------
|
|
125
|
+
// Search execution
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
/**
|
|
128
|
+
* Apply command-level count truncation to a normalized result. Count
|
|
129
|
+
* is meaning local to the command Module: zero returns an empty list,
|
|
130
|
+
* a positive count slices, and an absent count returns everything.
|
|
131
|
+
*/
|
|
132
|
+
function applyCount(result, count) {
|
|
133
|
+
if (count === undefined)
|
|
134
|
+
return result;
|
|
135
|
+
if (count <= 0)
|
|
136
|
+
return [];
|
|
137
|
+
return result.slice(0, count);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Execute a normalized Search through the shared pipeline:
|
|
141
|
+
* validate → cache identity → new-key read → optional legacy
|
|
142
|
+
* read-through → invoke with retry → cache the full result → apply
|
|
143
|
+
* count truncation.
|
|
144
|
+
*
|
|
145
|
+
* Count never enters the cache identity request or the Provider
|
|
146
|
+
* request; it is supplied only as `legacyCount` so the Z.AI Adapter
|
|
147
|
+
* can reconstruct old keys.
|
|
148
|
+
*/
|
|
149
|
+
export async function executeSearch(capability, request, options, dependencies) {
|
|
150
|
+
// 1. Validate Capability request.
|
|
151
|
+
capability.validate(request);
|
|
152
|
+
// 2. Adapter-owned cache identity (after validation).
|
|
153
|
+
const identity = capability.cacheIdentity(request, {
|
|
154
|
+
legacyCount: options.count,
|
|
155
|
+
});
|
|
156
|
+
// 3. Read the provider-partitioned cache key.
|
|
157
|
+
const newKey = buildProviderCacheKey({
|
|
158
|
+
provider: identity.provider,
|
|
159
|
+
capability: identity.capability,
|
|
160
|
+
credentialFingerprint: identity.credentialFingerprint,
|
|
161
|
+
request: identity.request,
|
|
162
|
+
});
|
|
163
|
+
if (!options.noCache) {
|
|
164
|
+
const cached = await dependencies.cache.get(newKey);
|
|
165
|
+
if (cached !== null) {
|
|
166
|
+
return applyCount(cached, options.count);
|
|
167
|
+
}
|
|
168
|
+
// 4. Adapter-owned legacy candidates (Z.AI only). Invalid raw data
|
|
169
|
+
// is a miss; a valid hit populates the new key but the legacy
|
|
170
|
+
// file is never changed or deleted.
|
|
171
|
+
if (identity.legacyCandidates) {
|
|
172
|
+
for (const candidate of identity.legacyCandidates) {
|
|
173
|
+
const raw = await dependencies.cache.get(candidate.key);
|
|
174
|
+
if (raw === null)
|
|
175
|
+
continue;
|
|
176
|
+
const decoded = candidate.decode(raw);
|
|
177
|
+
if (decoded !== null) {
|
|
178
|
+
await dependencies.cache.set(newKey, decoded);
|
|
179
|
+
return applyCount(decoded, options.count);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// 5 + 6. Invoke through executeProviderOperation; retryable failures
|
|
185
|
+
// are retried with backoff driven by the injected sleep+random.
|
|
186
|
+
const result = await executeProviderOperation("search", () => capability.invoke(request), dependencies, options.retryPolicy);
|
|
187
|
+
// 7. Cache the full normalized result before count is applied.
|
|
188
|
+
if (!options.noCache) {
|
|
189
|
+
await dependencies.cache.set(newKey, result);
|
|
190
|
+
}
|
|
191
|
+
// 8. Local count truncation.
|
|
192
|
+
return applyCount(result, options.count);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Generic cache + retry executor for every cacheable Repository
|
|
196
|
+
* Capability operation (Search, Read File, Directory Listing).
|
|
197
|
+
*
|
|
198
|
+
* The observable order is fixed and exhaustively enumerated in
|
|
199
|
+
* DESIGN.md §18:
|
|
200
|
+
*
|
|
201
|
+
* 1. `operation.validate(request)` — throws `ValidationError`
|
|
202
|
+
* synchronously before any cache or Adapter work.
|
|
203
|
+
* 2. `operation.cacheIdentity(request)` — Adapter computes the
|
|
204
|
+
* provider-partitioned cache key and ordered legacy candidates
|
|
205
|
+
* from the validated request and a single resolved credential.
|
|
206
|
+
* 3. Read the provider-partitioned cache key and pass the raw value
|
|
207
|
+
* through `operation.decodeCached`. A valid decode returns
|
|
208
|
+
* immediately; `null` is a miss; malformed values never propagate
|
|
209
|
+
* through a generic cast.
|
|
210
|
+
* 4. For each legacy candidate, in declaration order, read the
|
|
211
|
+
* legacy key and pass it through the candidate's `decode`. A
|
|
212
|
+
* valid legacy hit is written through to the normalized key
|
|
213
|
+
* (the legacy file is never changed or deleted) and returned.
|
|
214
|
+
* A malformed legacy value is a miss.
|
|
215
|
+
* 5. `operation.invoke(request)` is wrapped through
|
|
216
|
+
* `executeProviderOperation` with the existing single-retry
|
|
217
|
+
* non-Vision policy. Each retry creates a fresh Adapter
|
|
218
|
+
* transport attempt; cache hits create no transport.
|
|
219
|
+
* 6. The normalized result is written to the provider-partitioned
|
|
220
|
+
* cache key.
|
|
221
|
+
*
|
|
222
|
+
* `--no-cache` skips steps 3, 4, and 6. It never skips validation
|
|
223
|
+
* (1), identity (2), invoke (5), or retry semantics.
|
|
224
|
+
*
|
|
225
|
+
* `executeRepositoryOperation` imports no Z.AI, MiniMax, MCP, UTCP,
|
|
226
|
+
* command-output, BFS, selection, or presentation module.
|
|
227
|
+
*/
|
|
228
|
+
export async function executeRepositoryOperation(operation, request, options, dependencies) {
|
|
229
|
+
// 1. Validate Capability request.
|
|
230
|
+
operation.validate(request);
|
|
231
|
+
// 2. Adapter-owned cache identity (after validation). The Adapter
|
|
232
|
+
// resolves its credential exactly once and returns legacy
|
|
233
|
+
// candidates alongside the full fingerprint and canonical
|
|
234
|
+
// request. Candidate construction performs no ambient
|
|
235
|
+
// environment read.
|
|
236
|
+
const identity = operation.cacheIdentity(request);
|
|
237
|
+
// 3. Provider-partitioned cache key.
|
|
238
|
+
//
|
|
239
|
+
// The key namespace is `<capability>-<operation>` rather than the
|
|
240
|
+
// umbrella Capability alone, so File and Directory operations —
|
|
241
|
+
// which share the `{ repository, path }` request shape — cannot
|
|
242
|
+
// collide. This composes the existing `buildProviderCacheKey` slot
|
|
243
|
+
// without mutating `buildProviderCacheKey` or its existing callers
|
|
244
|
+
// (Search, Vision, Quota, Diagnostics still pass a single Capability
|
|
245
|
+
// name). The canonical request object is unchanged; only the
|
|
246
|
+
// capability argument gains the operation suffix.
|
|
247
|
+
const newKey = buildProviderCacheKey({
|
|
248
|
+
provider: identity.provider,
|
|
249
|
+
capability: `${identity.capability}-${identity.operation}`,
|
|
250
|
+
credentialFingerprint: identity.credentialFingerprint,
|
|
251
|
+
request: identity.request,
|
|
252
|
+
});
|
|
253
|
+
if (!options.noCache) {
|
|
254
|
+
const raw = await dependencies.cache.get(newKey);
|
|
255
|
+
if (raw !== null) {
|
|
256
|
+
const decoded = operation.decodeCached(raw);
|
|
257
|
+
if (decoded !== null) {
|
|
258
|
+
return decoded;
|
|
259
|
+
}
|
|
260
|
+
// Malformed normalized value: treat as a miss and fall through.
|
|
261
|
+
}
|
|
262
|
+
// 4. Ordered legacy candidates. Each candidate's decode is
|
|
263
|
+
// total — invalid raw data is a miss. A valid legacy hit
|
|
264
|
+
// populates the new key but the legacy file is never
|
|
265
|
+
// changed or deleted.
|
|
266
|
+
for (const candidate of identity.legacyCandidates) {
|
|
267
|
+
const legacyRaw = await dependencies.cache.get(candidate.key);
|
|
268
|
+
if (legacyRaw === null)
|
|
269
|
+
continue;
|
|
270
|
+
const decoded = candidate.decode(legacyRaw);
|
|
271
|
+
if (decoded !== null) {
|
|
272
|
+
await dependencies.cache.set(newKey, decoded);
|
|
273
|
+
return decoded;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// 5. Retry-wrapped invoke. Auth, Validation, Unsupported, and
|
|
278
|
+
// exhausted Quota failures are terminal; transient timeout,
|
|
279
|
+
// network, and 5xx/429-equivalent failures get one retry.
|
|
280
|
+
const result = await executeProviderOperation(
|
|
281
|
+
// `operation.kind` is `RepositoryOperationKind`, which is
|
|
282
|
+
// composed into `ProviderOperation` directly — no cast needed
|
|
283
|
+
// and a future kind union change propagates automatically.
|
|
284
|
+
operation.kind, () => operation.invoke(request), dependencies, options.retryPolicy);
|
|
285
|
+
// 6. Cache the full normalized result before returning.
|
|
286
|
+
if (!options.noCache) {
|
|
287
|
+
await dependencies.cache.set(newKey, result);
|
|
288
|
+
}
|
|
289
|
+
return result;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Generic cache + retry executor for the Reader Capability's
|
|
293
|
+
* `reader-fetch` operation. Structurally identical to
|
|
294
|
+
* {@link executeRepositoryOperation}; the two are duplicated rather
|
|
295
|
+
* than shared because factoring them would widen this ticket's
|
|
296
|
+
* scope (modifying repository.ts further). Future consolidation is
|
|
297
|
+
* a separate refactor.
|
|
298
|
+
*
|
|
299
|
+
* The observable order is fixed:
|
|
300
|
+
*
|
|
301
|
+
* 1. `operation.validate(request)` — throws `ValidationError`
|
|
302
|
+
* synchronously before any cache or Adapter work.
|
|
303
|
+
* 2. `operation.cacheIdentity(request)` — Adapter computes the
|
|
304
|
+
* provider-partitioned cache key and ordered legacy candidates
|
|
305
|
+
* from the validated request and a single resolved credential.
|
|
306
|
+
* 3. Read the provider-partitioned cache key and pass the raw
|
|
307
|
+
* value through `operation.decodeCached`. A valid decode
|
|
308
|
+
* returns immediately; `null` is a miss; malformed values
|
|
309
|
+
* never propagate through a generic cast.
|
|
310
|
+
* 4. For each legacy candidate, in declaration order, read the
|
|
311
|
+
* legacy key and pass it through the candidate's `decode`. A
|
|
312
|
+
* valid legacy hit is written through to the normalized key
|
|
313
|
+
* (the legacy file is never changed or deleted) and returned.
|
|
314
|
+
* A malformed legacy value is a miss.
|
|
315
|
+
* 5. `operation.invoke(request)` is wrapped through
|
|
316
|
+
* `executeProviderOperation` with the single-retry non-Vision
|
|
317
|
+
* policy. Each retry creates a fresh Adapter transport attempt;
|
|
318
|
+
* cache hits create no transport.
|
|
319
|
+
* 6. The normalized result is written to the provider-partitioned
|
|
320
|
+
* cache key.
|
|
321
|
+
*
|
|
322
|
+
* `--no-cache` skips steps 3, 4, and 6. It never skips validation
|
|
323
|
+
* (1), identity (2), invoke (5), or retry semantics.
|
|
324
|
+
*
|
|
325
|
+
* `executeReaderOperation` imports no Z.AI, MiniMax, MCP, UTCP,
|
|
326
|
+
* command-output, selection, or presentation module.
|
|
327
|
+
*/
|
|
328
|
+
export async function executeReaderOperation(operation, request, options, dependencies) {
|
|
329
|
+
// 1. Validate Capability request.
|
|
330
|
+
operation.validate(request);
|
|
331
|
+
// 2. Adapter-owned cache identity (after validation). The Adapter
|
|
332
|
+
// resolves its credential exactly once and returns legacy
|
|
333
|
+
// candidates alongside the full fingerprint and canonical
|
|
334
|
+
// request. Candidate construction performs no ambient
|
|
335
|
+
// environment read.
|
|
336
|
+
const identity = operation.cacheIdentity(request);
|
|
337
|
+
// 3. Provider-partitioned cache key.
|
|
338
|
+
//
|
|
339
|
+
// The key namespace is `${capability}-${operation}` rather than the
|
|
340
|
+
// umbrella Capability alone, mirroring the repository convention so
|
|
341
|
+
// future Reader operations cannot collide. The capability argument
|
|
342
|
+
// gains the operation suffix.
|
|
343
|
+
const newKey = buildProviderCacheKey({
|
|
344
|
+
provider: identity.provider,
|
|
345
|
+
capability: `${identity.capability}-${identity.operation}`,
|
|
346
|
+
credentialFingerprint: identity.credentialFingerprint,
|
|
347
|
+
request: identity.request,
|
|
348
|
+
});
|
|
349
|
+
if (!options.noCache) {
|
|
350
|
+
const raw = await dependencies.cache.get(newKey);
|
|
351
|
+
if (raw !== null) {
|
|
352
|
+
const decoded = operation.decodeCached(raw);
|
|
353
|
+
if (decoded !== null) {
|
|
354
|
+
return decoded;
|
|
355
|
+
}
|
|
356
|
+
// Malformed normalized value: treat as a miss and fall through.
|
|
357
|
+
}
|
|
358
|
+
// 4. Ordered legacy candidates. Each candidate's decode is
|
|
359
|
+
// total — invalid raw data is a miss. A valid legacy hit
|
|
360
|
+
// populates the new key but the legacy file is never
|
|
361
|
+
// changed or deleted.
|
|
362
|
+
for (const candidate of identity.legacyCandidates) {
|
|
363
|
+
const legacyRaw = await dependencies.cache.get(candidate.key);
|
|
364
|
+
if (legacyRaw === null)
|
|
365
|
+
continue;
|
|
366
|
+
const decoded = candidate.decode(legacyRaw);
|
|
367
|
+
if (decoded !== null) {
|
|
368
|
+
await dependencies.cache.set(newKey, decoded);
|
|
369
|
+
return decoded;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// 5. Retry-wrapped invoke. Auth, Validation, Unsupported, and
|
|
374
|
+
// exhausted Quota failures are terminal; transient timeout,
|
|
375
|
+
// network, and 5xx/429-equivalent failures get one retry.
|
|
376
|
+
const result = await executeProviderOperation(operation.kind, () => operation.invoke(request), dependencies, options.retryPolicy);
|
|
377
|
+
// 6. Cache the full normalized result before returning.
|
|
378
|
+
if (!options.noCache) {
|
|
379
|
+
await dependencies.cache.set(newKey, result);
|
|
380
|
+
}
|
|
381
|
+
return result;
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=execution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/lib/execution.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Library exports for programmatic usage
|
|
2
|
+
* Library exports for programmatic usage.
|
|
3
|
+
*
|
|
4
|
+
* `formatErrorOutput` lives in `./output.js` (DESIGN.md §3, canonical
|
|
5
|
+
* invocation-local 2-arg form). `./errors.js` keeps a legacy 1-arg
|
|
6
|
+
* compat version that Phase 1 command handlers import directly until
|
|
7
|
+
* P1-10 migrates them. To avoid a duplicate-export error in this
|
|
8
|
+
* aggregator, the errors-module re-export below is explicit and omits
|
|
9
|
+
* `formatErrorOutput`; the canonical 2-arg version from `./output.js`
|
|
10
|
+
* wins through `export *` below.
|
|
3
11
|
*/
|
|
4
12
|
export * from "./config.js";
|
|
5
|
-
export
|
|
13
|
+
export { type ScoutlineErrorCode, type ScoutlineErrorOptions, ScoutlineError, ZaiError, ValidationError, ConfigurationError, UnsupportedCapabilityError, UnsupportedOptionError, AuthError, ApiError, NetworkError, TimeoutError, FileError, QuotaError, isRetryableError, getErrorExitCode, } from "./errors.js";
|
|
6
14
|
export * from "./output.js";
|
|
7
15
|
export * from "./image.js";
|
|
8
16
|
export * from "./api-client.js";
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,cAAc,EACd,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
|
package/dist/lib/index.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Library exports for programmatic usage
|
|
2
|
+
* Library exports for programmatic usage.
|
|
3
|
+
*
|
|
4
|
+
* `formatErrorOutput` lives in `./output.js` (DESIGN.md §3, canonical
|
|
5
|
+
* invocation-local 2-arg form). `./errors.js` keeps a legacy 1-arg
|
|
6
|
+
* compat version that Phase 1 command handlers import directly until
|
|
7
|
+
* P1-10 migrates them. To avoid a duplicate-export error in this
|
|
8
|
+
* aggregator, the errors-module re-export below is explicit and omits
|
|
9
|
+
* `formatErrorOutput`; the canonical 2-arg version from `./output.js`
|
|
10
|
+
* wins through `export *` below.
|
|
3
11
|
*/
|
|
4
12
|
export * from "./config.js";
|
|
5
|
-
export
|
|
13
|
+
export { ScoutlineError, ZaiError, ValidationError, ConfigurationError, UnsupportedCapabilityError, UnsupportedOptionError, AuthError, ApiError, NetworkError, TimeoutError, FileError, QuotaError, isRetryableError, getErrorExitCode, } from "./errors.js";
|
|
6
14
|
export * from "./output.js";
|
|
7
15
|
export * from "./image.js";
|
|
8
16
|
export * from "./api-client.js";
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,aAAa,CAAC;AAC5B,OAAO,EAGL,cAAc,EACd,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC"}
|
package/dist/lib/mcp-client.d.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* - Web Search: Real-time web search
|
|
8
8
|
* - Web Reader: Web page content extraction
|
|
9
9
|
*/
|
|
10
|
-
import { type Tool } from "@utcp/sdk";
|
|
10
|
+
import { UtcpClient, type Tool } from "@utcp/sdk";
|
|
11
11
|
import "@utcp/mcp";
|
|
12
|
+
import type { ReaderRawResponse } from "../capabilities/reader.js";
|
|
12
13
|
export interface ZReadSearchResult {
|
|
13
14
|
title: string;
|
|
14
15
|
content: string;
|
|
@@ -24,6 +25,23 @@ export interface WebSearchResult {
|
|
|
24
25
|
icon: string;
|
|
25
26
|
publish_date?: string;
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Constructor options for {@link ZaiMcpClient}.
|
|
30
|
+
*
|
|
31
|
+
* `utcpFactory` is a behaviour-preserving injection seam: when omitted the
|
|
32
|
+
* production path uses `UtcpClient.create()`. Tests inject a fake to avoid
|
|
33
|
+
* touching process globals.
|
|
34
|
+
*
|
|
35
|
+
* `disableRetry` (P2-03) lets the Z.AI Search Adapter hand retry policy
|
|
36
|
+
* to shared execution. When omitted, the client retains its existing
|
|
37
|
+
* direct-client retry behaviour.
|
|
38
|
+
*/
|
|
39
|
+
export interface ZaiMcpClientOptions {
|
|
40
|
+
enableVision?: boolean;
|
|
41
|
+
noCache?: boolean;
|
|
42
|
+
disableRetry?: boolean;
|
|
43
|
+
utcpFactory?: () => Promise<UtcpClient>;
|
|
44
|
+
}
|
|
27
45
|
/**
|
|
28
46
|
* Unified MCP client for all Z.AI MCP services
|
|
29
47
|
*/
|
|
@@ -32,10 +50,7 @@ export declare class ZaiMcpClient {
|
|
|
32
50
|
private initPromise;
|
|
33
51
|
private isInitialized;
|
|
34
52
|
private options;
|
|
35
|
-
constructor(options?:
|
|
36
|
-
enableVision?: boolean;
|
|
37
|
-
noCache?: boolean;
|
|
38
|
-
});
|
|
53
|
+
constructor(options?: ZaiMcpClientOptions);
|
|
39
54
|
/**
|
|
40
55
|
* Initialize the UTCP client and register all MCP servers
|
|
41
56
|
*/
|
|
@@ -49,18 +64,49 @@ export declare class ZaiMcpClient {
|
|
|
49
64
|
private getRetryCount;
|
|
50
65
|
private isRetriableError;
|
|
51
66
|
private resolveEnableVision;
|
|
52
|
-
private getToolCacheKey;
|
|
53
|
-
private getToolCachePath;
|
|
54
|
-
private readToolsCache;
|
|
55
|
-
private writeToolsCache;
|
|
56
67
|
/**
|
|
57
|
-
*
|
|
68
|
+
* Build the tool-cache config (D4 — adapter encapsulates the
|
|
69
|
+
* config + endpoints + vision-resolution inputs that the extracted
|
|
70
|
+
* `tool-cache.ts` needs to compute a stable key). Owned here because
|
|
71
|
+
* the inputs come from this class's options and the shared config
|
|
72
|
+
* module; the extracted module stays pure of `loadConfig` / `getMcpEndpoints`.
|
|
73
|
+
*/
|
|
74
|
+
private getToolCacheConfig;
|
|
75
|
+
/**
|
|
76
|
+
* List all discovered tools from registered MCP servers.
|
|
77
|
+
*
|
|
78
|
+
* Returns the PUBLIC projected view: internal UTCP names (e.g.
|
|
79
|
+
* `scoutline_zai.search.web_search_prime`) are rewritten to the
|
|
80
|
+
* stable dotted form (e.g. `scoutline.zai.search.web_search_prime`).
|
|
81
|
+
* The private unprojected discovery list is retained for invocation
|
|
82
|
+
* through {@link getTool} / {@link resolveToolName}.
|
|
58
83
|
*/
|
|
59
84
|
listTools(refresh?: boolean): Promise<Tool[]>;
|
|
60
85
|
/**
|
|
61
|
-
*
|
|
86
|
+
* Private unprojected discovery list. Tools keep their exact UTCP
|
|
87
|
+
* names so {@link getTool} can resolve public aliases back to the
|
|
88
|
+
* internal invocation identity.
|
|
89
|
+
*
|
|
90
|
+
* Tool-cache I/O is delegated to the extracted {@link tool-cache.ts}
|
|
91
|
+
* module (D1 — owns its I/O directly against the `tools/` subdir).
|
|
92
|
+
*/
|
|
93
|
+
private discoverTools;
|
|
94
|
+
/**
|
|
95
|
+
* Find a tool by exact internal name, public dotted name, or leaf
|
|
96
|
+
* suffix. Resolution order:
|
|
97
|
+
* 1. Exact discovered name (e.g. `scoutline_zai.search.web_search_prime`).
|
|
98
|
+
* 2. Public dotted name (e.g. `scoutline.zai.search.web_search_prime`):
|
|
99
|
+
* derive the provider-relative suffix after the public prefix and
|
|
100
|
+
* match exactly one discovered name ending in `.<suffix>`. Zero or
|
|
101
|
+
* multiple matches fail.
|
|
102
|
+
* 3. Legacy short-suffix fallback: a single discovered name ending in
|
|
103
|
+
* `.<name>` (e.g. for callers that pass only `web_search_prime`).
|
|
104
|
+
*
|
|
105
|
+
* Public names never replace the private discovered-name record — the
|
|
106
|
+
* returned {@link Tool} always carries its internal UTCP name.
|
|
62
107
|
*/
|
|
63
108
|
getTool(toolName: string): Promise<Tool | undefined>;
|
|
109
|
+
private findToolByResolvedName;
|
|
64
110
|
/**
|
|
65
111
|
* Resolve a tool name, accepting full names or suffixes
|
|
66
112
|
*/
|
|
@@ -69,6 +115,22 @@ export declare class ZaiMcpClient {
|
|
|
69
115
|
* Call a tool by full name or suffix
|
|
70
116
|
*/
|
|
71
117
|
callToolRaw<T>(toolName: string, args: Record<string, unknown>): Promise<T>;
|
|
118
|
+
/**
|
|
119
|
+
* P6-01A: invoke a tool while preserving the public dotted tool name as
|
|
120
|
+
* the cache identity, then resolve to the internal sanitized identity
|
|
121
|
+
* only on a cache miss.
|
|
122
|
+
*
|
|
123
|
+
* The legacy v0.2 repository cache contract (P0–P2) keyed entries under
|
|
124
|
+
* the public dotted name and returned them before any transport work.
|
|
125
|
+
* A naive `callToolRaw` migration routes through `resolveToolName` first,
|
|
126
|
+
* which forces discovery, registration, and `init()` even when a v0.2
|
|
127
|
+
* hit is present. This helper restores the legacy cache identity and
|
|
128
|
+
* skips discovery on hits while keeping the translation fix for misses.
|
|
129
|
+
*
|
|
130
|
+
* Other callers (`callTool`, `callToolRaw`, Vision, Search, Reader, raw
|
|
131
|
+
* tools) are unchanged.
|
|
132
|
+
*/
|
|
133
|
+
private callToolWithPublicCacheIdentity;
|
|
72
134
|
/**
|
|
73
135
|
* Search documentation and code in a GitHub repository
|
|
74
136
|
*/
|
|
@@ -105,7 +167,7 @@ export declare class ZaiMcpClient {
|
|
|
105
167
|
noGfm?: boolean;
|
|
106
168
|
keepImgDataUrl?: boolean;
|
|
107
169
|
withImagesSummary?: boolean;
|
|
108
|
-
}): Promise<
|
|
170
|
+
}): Promise<ReaderRawResponse>;
|
|
109
171
|
visionAnalyze(params: {
|
|
110
172
|
imageSource: string;
|
|
111
173
|
prompt: string;
|
|
@@ -150,10 +212,7 @@ export declare class ZaiMcpClient {
|
|
|
150
212
|
close(timeoutMs?: number): Promise<void>;
|
|
151
213
|
}
|
|
152
214
|
export declare class ZReadMcpClient extends ZaiMcpClient {
|
|
153
|
-
constructor(options?:
|
|
154
|
-
enableVision?: boolean;
|
|
155
|
-
noCache?: boolean;
|
|
156
|
-
});
|
|
215
|
+
constructor(options?: ZaiMcpClientOptions);
|
|
157
216
|
searchDoc(repo: string, query: string, language?: "zh" | "en"): Promise<string>;
|
|
158
217
|
getRepoStructure(repo: string, dirPath?: string): Promise<string>;
|
|
159
218
|
readFile(repo: string, path: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-client.ts"],"names":[],"mappings":"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"}
|