@memnexus-ai/cli 1.7.235 → 1.7.237
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/memories.d.ts +6 -0
- package/dist/commands/memories.d.ts.map +1 -1
- package/dist/commands/memories.js +135 -13
- package/dist/commands/memories.js.map +1 -1
- package/dist/lib/api-client.d.ts +17 -1
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +42 -11
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/renderable-retrieval.d.ts +54 -0
- package/dist/lib/renderable-retrieval.d.ts.map +1 -1
- package/dist/lib/renderable-retrieval.js +117 -4
- package/dist/lib/renderable-retrieval.js.map +1 -1
- package/dist/lib/retry.d.ts +32 -0
- package/dist/lib/retry.d.ts.map +1 -1
- package/dist/lib/retry.js +89 -5
- package/dist/lib/retry.js.map +1 -1
- package/package.json +2 -2
package/dist/lib/api-client.d.ts
CHANGED
|
@@ -9,7 +9,23 @@ import { Memnexus } from '@memnexus-ai/typescript-sdk';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function getSdk(): Memnexus;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* Get an SDK instance whose transport makes exactly ONE attempt per call.
|
|
13
|
+
*
|
|
14
|
+
* Used by `mx memories recall`/`digest`, which owns its retry policy in
|
|
15
|
+
* lib/retry.ts (withRecallRetry). The default SDK transport retries every
|
|
16
|
+
* failure up to 3 times, POST included, and each digest attempt runs a fresh
|
|
17
|
+
* server-side LLM synthesis (GH #5570).
|
|
18
|
+
*
|
|
19
|
+
* Why a separate instance rather than a per-request override: the SDK's
|
|
20
|
+
* RetryHandler is built once per service from `SdkConfig.retry` when the client
|
|
21
|
+
* is constructed. The per-operation `retry` block the generator writes onto
|
|
22
|
+
* each request (releases/sdk-generator/src/generators/typescript/
|
|
23
|
+
* service-generator.ts) is stored on the Request but never read by the
|
|
24
|
+
* RetryHandler, so the client config is the only lever the SDK honours.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getSingleAttemptSdk(): Memnexus;
|
|
27
|
+
/**
|
|
28
|
+
* Reset the cached SDK instances
|
|
13
29
|
*
|
|
14
30
|
* Useful for testing or when configuration changes
|
|
15
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAmBvD;;;;;;;GAOG;AACH,wBAAgB,MAAM,IAAI,QAAQ,CAYjC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAY9C;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAG/B;AAGD,eAAO,MAAM,YAAY,eAAS,CAAC;AACnC,eAAO,MAAM,cAAc,iBAAW,CAAC;AAGvC,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB;;GAEG;AACH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC;CACH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,WAAW,GAAG,CAAC,GAAG,SAAS,CAwBrF"}
|
package/dist/lib/api-client.js
CHANGED
|
@@ -5,13 +5,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.resetApiClient = exports.getApiClient = void 0;
|
|
7
7
|
exports.getSdk = getSdk;
|
|
8
|
+
exports.getSingleAttemptSdk = getSingleAttemptSdk;
|
|
8
9
|
exports.resetSdk = resetSdk;
|
|
9
10
|
exports.extractResponseData = extractResponseData;
|
|
10
11
|
const typescript_sdk_1 = require("@memnexus-ai/typescript-sdk");
|
|
11
12
|
const config_1 = require("./config");
|
|
12
13
|
const chalk_1 = __importDefault(require("chalk"));
|
|
13
|
-
// Cached SDK
|
|
14
|
+
// Cached SDK instances
|
|
14
15
|
let cachedSdk = null;
|
|
16
|
+
let cachedSingleAttemptSdk = null;
|
|
17
|
+
/** Read the CLI's API URL and key, exiting with the login hint when no key is set. */
|
|
18
|
+
function sdkConfigFromCli() {
|
|
19
|
+
const apiKey = config_1.config.getApiKey();
|
|
20
|
+
if (!apiKey) {
|
|
21
|
+
console.error(chalk_1.default.red('Error: No API key configured.'));
|
|
22
|
+
console.log(chalk_1.default.yellow('Run: mx auth login --api-key <your-key>'));
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
return { baseUrl: config_1.config.getApiUrl(), token: apiKey };
|
|
26
|
+
}
|
|
15
27
|
/**
|
|
16
28
|
* Get the configured SDK instance
|
|
17
29
|
*
|
|
@@ -24,28 +36,47 @@ function getSdk() {
|
|
|
24
36
|
if (cachedSdk) {
|
|
25
37
|
return cachedSdk;
|
|
26
38
|
}
|
|
27
|
-
const apiKey = config_1.config.getApiKey();
|
|
28
|
-
if (!apiKey) {
|
|
29
|
-
console.error(chalk_1.default.red('Error: No API key configured.'));
|
|
30
|
-
console.log(chalk_1.default.yellow('Run: mx auth login --api-key <your-key>'));
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
const apiUrl = config_1.config.getApiUrl();
|
|
34
39
|
// Create SDK instance with configuration
|
|
35
40
|
cachedSdk = new typescript_sdk_1.Memnexus({
|
|
36
|
-
|
|
37
|
-
token: apiKey,
|
|
41
|
+
...sdkConfigFromCli(),
|
|
38
42
|
timeoutMs: 30000,
|
|
39
43
|
});
|
|
40
44
|
return cachedSdk;
|
|
41
45
|
}
|
|
42
46
|
/**
|
|
43
|
-
*
|
|
47
|
+
* Get an SDK instance whose transport makes exactly ONE attempt per call.
|
|
48
|
+
*
|
|
49
|
+
* Used by `mx memories recall`/`digest`, which owns its retry policy in
|
|
50
|
+
* lib/retry.ts (withRecallRetry). The default SDK transport retries every
|
|
51
|
+
* failure up to 3 times, POST included, and each digest attempt runs a fresh
|
|
52
|
+
* server-side LLM synthesis (GH #5570).
|
|
53
|
+
*
|
|
54
|
+
* Why a separate instance rather than a per-request override: the SDK's
|
|
55
|
+
* RetryHandler is built once per service from `SdkConfig.retry` when the client
|
|
56
|
+
* is constructed. The per-operation `retry` block the generator writes onto
|
|
57
|
+
* each request (releases/sdk-generator/src/generators/typescript/
|
|
58
|
+
* service-generator.ts) is stored on the Request but never read by the
|
|
59
|
+
* RetryHandler, so the client config is the only lever the SDK honours.
|
|
60
|
+
*/
|
|
61
|
+
function getSingleAttemptSdk() {
|
|
62
|
+
if (cachedSingleAttemptSdk) {
|
|
63
|
+
return cachedSingleAttemptSdk;
|
|
64
|
+
}
|
|
65
|
+
cachedSingleAttemptSdk = new typescript_sdk_1.Memnexus({
|
|
66
|
+
...sdkConfigFromCli(),
|
|
67
|
+
timeoutMs: 30000,
|
|
68
|
+
retry: { attempts: 1 },
|
|
69
|
+
});
|
|
70
|
+
return cachedSingleAttemptSdk;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Reset the cached SDK instances
|
|
44
74
|
*
|
|
45
75
|
* Useful for testing or when configuration changes
|
|
46
76
|
*/
|
|
47
77
|
function resetSdk() {
|
|
48
78
|
cachedSdk = null;
|
|
79
|
+
cachedSingleAttemptSdk = null;
|
|
49
80
|
}
|
|
50
81
|
// Legacy aliases for backwards compatibility during migration
|
|
51
82
|
exports.getApiClient = getSdk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":";;;;;;AA2BA,wBAYC;AAiBD,kDAYC;AAOD,4BAGC;AAqCD,kDAwBC;AA3ID,gEAAuD;AACvD,qCAAkC;AAClC,kDAA0B;AAE1B,uBAAuB;AACvB,IAAI,SAAS,GAAoB,IAAI,CAAC;AACtC,IAAI,sBAAsB,GAAoB,IAAI,CAAC;AAEnD,sFAAsF;AACtF,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,eAAM,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,eAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,MAAM;IACpB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,SAAS,GAAG,IAAI,yBAAQ,CAAC;QACvB,GAAG,gBAAgB,EAAE;QACrB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,mBAAmB;IACjC,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO,sBAAsB,CAAC;IAChC,CAAC;IAED,sBAAsB,GAAG,IAAI,yBAAQ,CAAC;QACpC,GAAG,gBAAgB,EAAE;QACrB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;KACvB,CAAC,CAAC;IAEH,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAgB,QAAQ;IACtB,SAAS,GAAG,IAAI,CAAC;IACjB,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC;AAED,8DAA8D;AACjD,QAAA,YAAY,GAAG,MAAM,CAAC;AACtB,QAAA,cAAc,GAAG,QAAQ,CAAC;AAkBvC;;;;;;;;;;;;;;GAcG;AACH,SAAgB,mBAAmB,CAAc,QAAqB;IACpE,2CAA2C;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC,IAAS,CAAC;IAC5B,CAAC;IAED,sCAAsC;IACtC,IAAI,QAAQ,CAAC,GAAG,YAAY,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;YACzC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAM,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;YACtC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,IAAI,QAAQ,CAAC,GAAG,IAAI,OAAO,QAAQ,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,QAAQ,CAAC,GAAQ,CAAC;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -42,6 +42,17 @@
|
|
|
42
42
|
* stdout, and only when degraded — matching the server convention that a
|
|
43
43
|
* healthy response gains no new fields (search.schema.ts).
|
|
44
44
|
*
|
|
45
|
+
* ANCHOR-GATE SUPPRESSION (#5450) — A SECOND, DISTINCT CONDITION
|
|
46
|
+
*
|
|
47
|
+
* The fulltext-anchor gate can discard a non-empty candidate set and return `[]`
|
|
48
|
+
* while every branch reports healthy, so `degraded` is false. The server already
|
|
49
|
+
* discloses it (`meta.anchorGateSuppressed`, `meta.anchorGateDiscardedCount`);
|
|
50
|
+
* the CLI dropped it, and the human surfaces printed "Found 0 results". It is
|
|
51
|
+
* carried as `AnchorSuppressionState`, kept apart from `DegradationState`
|
|
52
|
+
* because a suppressed empty is not a branch failure. JSON/YAML stdout is
|
|
53
|
+
* UNCHANGED for this condition: the markers already ride through `meta`
|
|
54
|
+
* untouched, and machine callers may depend on the current shape.
|
|
55
|
+
*
|
|
45
56
|
* This module deliberately has no imports: colouring is the caller's job, and a
|
|
46
57
|
* dependency-free module keeps the type-level enforcement test cheap to run.
|
|
47
58
|
*/
|
|
@@ -62,6 +73,22 @@ export interface DegradationState {
|
|
|
62
73
|
readonly degraded: boolean;
|
|
63
74
|
readonly failures: readonly BranchFailure[];
|
|
64
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Whether the fulltext-anchor gate threw candidates away on this response
|
|
78
|
+
* (GH #5450), and how many.
|
|
79
|
+
*
|
|
80
|
+
* SEPARATE from `DegradationState` on purpose. The gate can null a candidate set
|
|
81
|
+
* while every retrieval branch reports ok, so `degraded` is FALSE on this path
|
|
82
|
+
* and the CLI's degraded warning never fires. Folding the two together would
|
|
83
|
+
* mislabel a healthy-but-suppressed response as a branch failure and lose the
|
|
84
|
+
* discarded count. `suppressed` is never optional and `discardedCount` is always
|
|
85
|
+
* a number, for the same reason `failures` is always an array: there is no
|
|
86
|
+
* `undefined` for a renderer to read as "fine".
|
|
87
|
+
*/
|
|
88
|
+
export interface AnchorSuppressionState {
|
|
89
|
+
readonly suppressed: boolean;
|
|
90
|
+
readonly discardedCount: number;
|
|
91
|
+
}
|
|
65
92
|
/** A normalised search hit: `{ memory, score, matchedVia }`. */
|
|
66
93
|
export interface SearchResultItem {
|
|
67
94
|
readonly memory: Record<string, any>;
|
|
@@ -72,6 +99,11 @@ export interface SearchResultItem {
|
|
|
72
99
|
export declare const DEGRADED_MARKER = "\u26A0 Degraded retrieval";
|
|
73
100
|
/** Suffix appended to a command's headline when the response is degraded. */
|
|
74
101
|
export declare const DEGRADED_HEADLINE_SUFFIX = " \u2014 INCOMPLETE (degraded retrieval)";
|
|
102
|
+
/**
|
|
103
|
+
* Shared marker text for a suppressed result set. Distinct string from
|
|
104
|
+
* `DEGRADED_MARKER` so the two conditions stay greppable apart in agent logs.
|
|
105
|
+
*/
|
|
106
|
+
export declare const SUPPRESSED_MARKER = "\u26A0 Results DISCARDED (anchor gate)";
|
|
75
107
|
/**
|
|
76
108
|
* The stderr warning line for a response, or null when the response is healthy.
|
|
77
109
|
* Plain text — the caller applies colour.
|
|
@@ -84,6 +116,23 @@ export declare function degradationWarningLine(health: DegradationState): string
|
|
|
84
116
|
export declare function degradationSummaryLine(health: DegradationState): string | null;
|
|
85
117
|
/** Headline suffix for spinners; empty string when healthy. */
|
|
86
118
|
export declare function degradationHeadlineSuffix(health: DegradationState): string;
|
|
119
|
+
/**
|
|
120
|
+
* The stderr warning line for a suppressed result set, or null when nothing was
|
|
121
|
+
* discarded. Plain text — the caller applies colour.
|
|
122
|
+
*
|
|
123
|
+
* The wording has one job: an agent skimming this output must not conclude that
|
|
124
|
+
* nothing exists. That conclusion is the actual harm in #5450 — every roleguide
|
|
125
|
+
* in this repo gates work on a memory search, and a cheerful "Found 0 results"
|
|
126
|
+
* passes that gate with a wrong answer.
|
|
127
|
+
*/
|
|
128
|
+
export declare function suppressionWarningLine(suppression: AnchorSuppressionState): string | null;
|
|
129
|
+
/**
|
|
130
|
+
* A one-line marker for human stdout renderers (table footer, llm/compact
|
|
131
|
+
* header). Null when nothing was discarded.
|
|
132
|
+
*/
|
|
133
|
+
export declare function suppressionSummaryLine(suppression: AnchorSuppressionState): string | null;
|
|
134
|
+
/** Headline suffix for spinners; empty string when nothing was discarded. */
|
|
135
|
+
export declare function suppressionHeadlineSuffix(suppression: AnchorSuppressionState): string;
|
|
87
136
|
/**
|
|
88
137
|
* A search response that has been through the health mapping.
|
|
89
138
|
*
|
|
@@ -101,6 +150,11 @@ export declare class RenderableSearchResult {
|
|
|
101
150
|
readonly temporalMetadata: any;
|
|
102
151
|
/** Retrieval health. Always populated. */
|
|
103
152
|
readonly health: DegradationState;
|
|
153
|
+
/**
|
|
154
|
+
* Anchor-gate suppression (#5450). Always populated, and deliberately NOT
|
|
155
|
+
* folded into `health`: a suppressed empty is not a branch failure.
|
|
156
|
+
*/
|
|
157
|
+
readonly suppression: AnchorSuppressionState;
|
|
104
158
|
private readonly body;
|
|
105
159
|
private constructor();
|
|
106
160
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderable-retrieval.d.ts","sourceRoot":"","sources":["../../src/lib/renderable-retrieval.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"renderable-retrieval.d.ts","sourceRoot":"","sources":["../../src/lib/renderable-retrieval.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,22 +43,45 @@
|
|
|
43
43
|
* stdout, and only when degraded — matching the server convention that a
|
|
44
44
|
* healthy response gains no new fields (search.schema.ts).
|
|
45
45
|
*
|
|
46
|
+
* ANCHOR-GATE SUPPRESSION (#5450) — A SECOND, DISTINCT CONDITION
|
|
47
|
+
*
|
|
48
|
+
* The fulltext-anchor gate can discard a non-empty candidate set and return `[]`
|
|
49
|
+
* while every branch reports healthy, so `degraded` is false. The server already
|
|
50
|
+
* discloses it (`meta.anchorGateSuppressed`, `meta.anchorGateDiscardedCount`);
|
|
51
|
+
* the CLI dropped it, and the human surfaces printed "Found 0 results". It is
|
|
52
|
+
* carried as `AnchorSuppressionState`, kept apart from `DegradationState`
|
|
53
|
+
* because a suppressed empty is not a branch failure. JSON/YAML stdout is
|
|
54
|
+
* UNCHANGED for this condition: the markers already ride through `meta`
|
|
55
|
+
* untouched, and machine callers may depend on the current shape.
|
|
56
|
+
*
|
|
46
57
|
* This module deliberately has no imports: colouring is the caller's job, and a
|
|
47
58
|
* dependency-free module keeps the type-level enforcement test cheap to run.
|
|
48
59
|
*/
|
|
49
60
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.RenderableContextBriefing = exports.RenderableDigestResult = exports.RenderableSearchResult = exports.DEGRADED_HEADLINE_SUFFIX = exports.DEGRADED_MARKER = void 0;
|
|
61
|
+
exports.RenderableContextBriefing = exports.RenderableDigestResult = exports.RenderableSearchResult = exports.SUPPRESSED_MARKER = exports.DEGRADED_HEADLINE_SUFFIX = exports.DEGRADED_MARKER = void 0;
|
|
51
62
|
exports.degradationWarningLine = degradationWarningLine;
|
|
52
63
|
exports.degradationSummaryLine = degradationSummaryLine;
|
|
53
64
|
exports.degradationHeadlineSuffix = degradationHeadlineSuffix;
|
|
65
|
+
exports.suppressionWarningLine = suppressionWarningLine;
|
|
66
|
+
exports.suppressionSummaryLine = suppressionSummaryLine;
|
|
67
|
+
exports.suppressionHeadlineSuffix = suppressionHeadlineSuffix;
|
|
54
68
|
/** Shared marker text. Every surface uses this string so it is greppable. */
|
|
55
69
|
exports.DEGRADED_MARKER = '⚠ Degraded retrieval';
|
|
56
70
|
/** Suffix appended to a command's headline when the response is degraded. */
|
|
57
71
|
exports.DEGRADED_HEADLINE_SUFFIX = ' — INCOMPLETE (degraded retrieval)';
|
|
72
|
+
/**
|
|
73
|
+
* Shared marker text for a suppressed result set. Distinct string from
|
|
74
|
+
* `DEGRADED_MARKER` so the two conditions stay greppable apart in agent logs.
|
|
75
|
+
*/
|
|
76
|
+
exports.SUPPRESSED_MARKER = '⚠ Results DISCARDED (anchor gate)';
|
|
58
77
|
const HEALTHY = Object.freeze({
|
|
59
78
|
degraded: false,
|
|
60
79
|
failures: Object.freeze([]),
|
|
61
80
|
});
|
|
81
|
+
const NOT_SUPPRESSED = Object.freeze({
|
|
82
|
+
suppressed: false,
|
|
83
|
+
discardedCount: 0,
|
|
84
|
+
});
|
|
62
85
|
/**
|
|
63
86
|
* Branch names are server-supplied and land on stderr, which agents read.
|
|
64
87
|
* Constrain them to an identifier shape and cap the count rather than echoing
|
|
@@ -103,6 +126,29 @@ function readDegradation(container) {
|
|
|
103
126
|
return HEALTHY;
|
|
104
127
|
return Object.freeze({ degraded: true, failures: readBranchFailures(c.branchFailures) });
|
|
105
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Read the fulltext-anchor-gate disclosure from a wire `meta` container
|
|
131
|
+
* (`meta.anchorGateSuppressed` + `meta.anchorGateDiscardedCount`, attached by
|
|
132
|
+
* the SearchHealth class in core-api/src/routes/memories.routes.ts).
|
|
133
|
+
*
|
|
134
|
+
* The server was already correct: it discloses both fields. The CLI dropped them
|
|
135
|
+
* because `readDegradation` is keyed on `degraded`, which is false here (#5450).
|
|
136
|
+
* This is the single place those two field names are read.
|
|
137
|
+
*
|
|
138
|
+
* Tolerant of either field arriving alone: the count is authoritative when it is
|
|
139
|
+
* a positive number, and a bare `anchorGateSuppressed: true` still counts as
|
|
140
|
+
* suppressed (with an unknown count) rather than being silently dropped.
|
|
141
|
+
*/
|
|
142
|
+
function readAnchorSuppression(container) {
|
|
143
|
+
const c = container;
|
|
144
|
+
if (!c || typeof c !== 'object')
|
|
145
|
+
return NOT_SUPPRESSED;
|
|
146
|
+
const raw = c.anchorGateDiscardedCount;
|
|
147
|
+
const count = typeof raw === 'number' && Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;
|
|
148
|
+
if (c.anchorGateSuppressed !== true && count === 0)
|
|
149
|
+
return NOT_SUPPRESSED;
|
|
150
|
+
return Object.freeze({ suppressed: true, discardedCount: count });
|
|
151
|
+
}
|
|
106
152
|
/**
|
|
107
153
|
* build-context reports failure per SECTION rather than per search branch
|
|
108
154
|
* (`meta.timedOutSections` / `meta.failedSections`, memories.routes.ts). Map
|
|
@@ -206,6 +252,66 @@ function degradationSummaryLine(health) {
|
|
|
206
252
|
function degradationHeadlineSuffix(health) {
|
|
207
253
|
return health.degraded ? exports.DEGRADED_HEADLINE_SUFFIX : '';
|
|
208
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* How the discarded count reads when the server sent the flag but no number.
|
|
257
|
+
*
|
|
258
|
+
* "CANDIDATE result", not "matching result" (#5450 review): the count is
|
|
259
|
+
* `anchorGateDiscardedCount`, which counts candidates the gate REJECTED, and
|
|
260
|
+
* rejecting weak candidates is what the gate is for — some fraction of them are
|
|
261
|
+
* genuinely irrelevant. Claiming N *matching* memories were withheld would send
|
|
262
|
+
* an agent re-querying for memories that are not there, and reporting to its own
|
|
263
|
+
* caller that the store holds matches it could not retrieve.
|
|
264
|
+
*
|
|
265
|
+
* The subject AND its verb are returned together ("1 candidate result was" /
|
|
266
|
+
* "28 candidate results were"): the verb has to agree with the singularised
|
|
267
|
+
* noun, so a call site that supplies its own hard-coded "were" produces
|
|
268
|
+
* "1 candidate result were". These lines exist to be believed by an agent
|
|
269
|
+
* skimming them — a visible grammar error in a warning whose whole job is to
|
|
270
|
+
* carry authority undermines it. Call sites must not add a verb.
|
|
271
|
+
*/
|
|
272
|
+
function discardedPhrase(suppression) {
|
|
273
|
+
if (suppression.discardedCount === 1)
|
|
274
|
+
return '1 candidate result was';
|
|
275
|
+
return suppression.discardedCount > 0
|
|
276
|
+
? `${suppression.discardedCount} candidate results were`
|
|
277
|
+
: 'candidate results were';
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* The stderr warning line for a suppressed result set, or null when nothing was
|
|
281
|
+
* discarded. Plain text — the caller applies colour.
|
|
282
|
+
*
|
|
283
|
+
* The wording has one job: an agent skimming this output must not conclude that
|
|
284
|
+
* nothing exists. That conclusion is the actual harm in #5450 — every roleguide
|
|
285
|
+
* in this repo gates work on a memory search, and a cheerful "Found 0 results"
|
|
286
|
+
* passes that gate with a wrong answer.
|
|
287
|
+
*/
|
|
288
|
+
function suppressionWarningLine(suppression) {
|
|
289
|
+
if (!suppression.suppressed)
|
|
290
|
+
return null;
|
|
291
|
+
return (`${exports.SUPPRESSED_MARKER} — ${discardedPhrase(suppression)} retrieved and then DISCARDED ` +
|
|
292
|
+
'by the fulltext-anchor gate before output. This result set is short or empty because ' +
|
|
293
|
+
'results were THROWN AWAY, not because nothing matched. It is NOT evidence that nothing ' +
|
|
294
|
+
'exists — re-run with different wording, or use --format json to read ' +
|
|
295
|
+
'meta.anchorGateDiscardedCount.');
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* A one-line marker for human stdout renderers (table footer, llm/compact
|
|
299
|
+
* header). Null when nothing was discarded.
|
|
300
|
+
*/
|
|
301
|
+
function suppressionSummaryLine(suppression) {
|
|
302
|
+
if (!suppression.suppressed)
|
|
303
|
+
return null;
|
|
304
|
+
return (`${exports.SUPPRESSED_MARKER} — ${discardedPhrase(suppression)} DISCARDED before output. ` +
|
|
305
|
+
'An empty or short result set here is NOT evidence that nothing exists.');
|
|
306
|
+
}
|
|
307
|
+
/** Headline suffix for spinners; empty string when nothing was discarded. */
|
|
308
|
+
function suppressionHeadlineSuffix(suppression) {
|
|
309
|
+
if (!suppression.suppressed)
|
|
310
|
+
return '';
|
|
311
|
+
return suppression.discardedCount > 0
|
|
312
|
+
? ` — ${suppression.discardedCount} DISCARDED, not proof of absence`
|
|
313
|
+
: ' — results DISCARDED, not proof of absence';
|
|
314
|
+
}
|
|
209
315
|
function normaliseResults(raw) {
|
|
210
316
|
if (!Array.isArray(raw))
|
|
211
317
|
return Object.freeze([]);
|
|
@@ -223,6 +329,7 @@ class RenderableSearchResult {
|
|
|
223
329
|
searchMethod;
|
|
224
330
|
temporalMetadata;
|
|
225
331
|
health;
|
|
332
|
+
suppression;
|
|
226
333
|
body;
|
|
227
334
|
constructor(
|
|
228
335
|
/** Normalised `{ memory, score, matchedVia }` hits. */
|
|
@@ -234,12 +341,18 @@ class RenderableSearchResult {
|
|
|
234
341
|
/** `meta.temporalMetadata`, when present. */
|
|
235
342
|
temporalMetadata,
|
|
236
343
|
/** Retrieval health. Always populated. */
|
|
237
|
-
health,
|
|
344
|
+
health,
|
|
345
|
+
/**
|
|
346
|
+
* Anchor-gate suppression (#5450). Always populated, and deliberately NOT
|
|
347
|
+
* folded into `health`: a suppressed empty is not a branch failure.
|
|
348
|
+
*/
|
|
349
|
+
suppression, body) {
|
|
238
350
|
this.results = results;
|
|
239
351
|
this.total = total;
|
|
240
352
|
this.searchMethod = searchMethod;
|
|
241
353
|
this.temporalMetadata = temporalMetadata;
|
|
242
354
|
this.health = health;
|
|
355
|
+
this.suppression = suppression;
|
|
243
356
|
this.body = body;
|
|
244
357
|
}
|
|
245
358
|
/**
|
|
@@ -255,7 +368,7 @@ class RenderableSearchResult {
|
|
|
255
368
|
const b = (body ?? {});
|
|
256
369
|
const results = normaliseResults(b.data);
|
|
257
370
|
const meta = b.meta;
|
|
258
|
-
return new RenderableSearchResult(results, typeof meta?.total === 'number' ? meta.total : results.length, typeof meta?.searchMethod === 'string' ? meta.searchMethod : undefined, meta?.temporalMetadata, readDegradation(meta), b);
|
|
371
|
+
return new RenderableSearchResult(results, typeof meta?.total === 'number' ? meta.total : results.length, typeof meta?.searchMethod === 'string' ? meta.searchMethod : undefined, meta?.temporalMetadata, readDegradation(meta), readAnchorSuppression(meta), b);
|
|
259
372
|
}
|
|
260
373
|
/**
|
|
261
374
|
* Map a `/api/memories` list body (recap's no-query path). The list endpoint
|
|
@@ -265,7 +378,7 @@ class RenderableSearchResult {
|
|
|
265
378
|
static fromListResponse(body) {
|
|
266
379
|
const b = (body ?? {});
|
|
267
380
|
const results = Object.freeze((Array.isArray(b.data) ? b.data : []).map((m) => ({ memory: m })));
|
|
268
|
-
return new RenderableSearchResult(results, results.length, undefined, undefined, HEALTHY, b);
|
|
381
|
+
return new RenderableSearchResult(results, results.length, undefined, undefined, HEALTHY, NOT_SUPPRESSED, b);
|
|
269
382
|
}
|
|
270
383
|
/**
|
|
271
384
|
* The JSON/YAML payload: the response body with results normalised, plus a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderable-retrieval.js","sourceRoot":"","sources":["../../src/lib/renderable-retrieval.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"renderable-retrieval.js","sourceRoot":"","sources":["../../src/lib/renderable-retrieval.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/retry.d.ts
CHANGED
|
@@ -177,4 +177,36 @@ export interface SingleShotRetryOptions {
|
|
|
177
177
|
* exponential backoff with jitter; either way capped at `maxWaitMs`.
|
|
178
178
|
*/
|
|
179
179
|
export declare function withSingleShotRetry<T>(fn: () => Promise<T>, opts: SingleShotRetryOptions): Promise<T>;
|
|
180
|
+
/** Maximum retries (beyond the first attempt) for one recall/digest call. */
|
|
181
|
+
export declare const RECALL_MAX_RETRIES = 1;
|
|
182
|
+
/** Largest server Retry-After the recall path will wait for before its one retry. */
|
|
183
|
+
export declare const RECALL_RETRY_AFTER_CAP_MS = 30000;
|
|
184
|
+
export interface RecallRetryOptions {
|
|
185
|
+
/** Sleep function (injectable for tests). Defaults to the real timer. */
|
|
186
|
+
sleep?: (ms: number) => Promise<void>;
|
|
187
|
+
/**
|
|
188
|
+
* Process retry budget (MX_CLI_MAX_RETRIES). The recall budget is
|
|
189
|
+
* min(this, RECALL_MAX_RETRIES), so 0 disables the recall retry too.
|
|
190
|
+
*/
|
|
191
|
+
maxRetries?: number;
|
|
192
|
+
/** Base backoff for the 502/504/408 retry. */
|
|
193
|
+
baseBackoffMs?: number;
|
|
194
|
+
/** Cap on the honoured 429 Retry-After. */
|
|
195
|
+
retryAfterCapMs?: number;
|
|
196
|
+
/** [0,1) source for jitter — injectable for deterministic tests. */
|
|
197
|
+
random?: () => number;
|
|
198
|
+
/** Called before the sleep so the caller can print a STDERR-only notice. */
|
|
199
|
+
onRetry?: SingleShotRetryOptions['onRetry'];
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* How long to wait before retrying a failed recall/digest attempt, or null when
|
|
203
|
+
* the failure must not be retried. Pure — see the policy table above.
|
|
204
|
+
*/
|
|
205
|
+
export declare function recallRetryWaitMs(error: any, opts?: Pick<RecallRetryOptions, 'baseBackoffMs' | 'retryAfterCapMs' | 'random'>): number | null;
|
|
206
|
+
/**
|
|
207
|
+
* Run a recall/digest call with the recall retry policy: at most one retry
|
|
208
|
+
* total, per {@link recallRetryWaitMs}. The final error propagates unchanged so
|
|
209
|
+
* the caller can report its cause.
|
|
210
|
+
*/
|
|
211
|
+
export declare function withRecallRetry<T>(fn: () => Promise<T>, opts?: RecallRetryOptions): Promise<T>;
|
|
180
212
|
//# sourceMappingURL=retry.d.ts.map
|
package/dist/lib/retry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/lib/retry.ts"],"names":[],"mappings":"AAiBA,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAEzD;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAEpD;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAE7D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAEzC;AA+BD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAUxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAGhD;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,+FAI9B,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQvD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/lib/retry.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/retry.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.SINGLE_SHOT_MAX_RETRIES = exports.SINGLE_SHOT_MAX_WAIT_MS = exports.SINGLE_SHOT_BASE_BACKOFF_MS = exports.SINGLE_SHOT_MAX_RETRIES_MAX = exports.SINGLE_SHOT_MAX_RETRIES_MIN = exports.SINGLE_SHOT_DEFAULT_MAX_RETRIES = exports.NON_NAME_CONFLICT_409_CODES = void 0;
|
|
6
|
+
exports.RECALL_RETRY_AFTER_CAP_MS = exports.RECALL_MAX_RETRIES = exports.SINGLE_SHOT_MAX_RETRIES = exports.SINGLE_SHOT_MAX_WAIT_MS = exports.SINGLE_SHOT_BASE_BACKOFF_MS = exports.SINGLE_SHOT_MAX_RETRIES_MAX = exports.SINGLE_SHOT_MAX_RETRIES_MIN = exports.SINGLE_SHOT_DEFAULT_MAX_RETRIES = exports.NON_NAME_CONFLICT_409_CODES = void 0;
|
|
7
7
|
exports.httpStatus = httpStatus;
|
|
8
8
|
exports.isRateLimitError = isRateLimitError;
|
|
9
9
|
exports.isServiceUnavailableError = isServiceUnavailableError;
|
|
@@ -16,6 +16,8 @@ exports.getRetryAfterMs = getRetryAfterMs;
|
|
|
16
16
|
exports.sleep = sleep;
|
|
17
17
|
exports.resolveMaxRetries = resolveMaxRetries;
|
|
18
18
|
exports.withSingleShotRetry = withSingleShotRetry;
|
|
19
|
+
exports.recallRetryWaitMs = recallRetryWaitMs;
|
|
20
|
+
exports.withRecallRetry = withRecallRetry;
|
|
19
21
|
const chalk_1 = __importDefault(require("chalk"));
|
|
20
22
|
// ── Single-shot retry helper (PO CLI-latency directive, item 3) ──────────────
|
|
21
23
|
// Scripted single-request commands (`mx memories search/get/recall/create/list/
|
|
@@ -204,8 +206,12 @@ function isNameConflictError(error) {
|
|
|
204
206
|
function getRetryAfterMs(error) {
|
|
205
207
|
const data = error?.data ?? error?.response?.data ?? {};
|
|
206
208
|
const secs = data?.retryAfter ?? data?.retry_after;
|
|
207
|
-
if (typeof secs === 'number' &&
|
|
208
|
-
|
|
209
|
+
if (typeof secs === 'number' && secs >= 0) {
|
|
210
|
+
// Check the CONVERTED value: a finite `secs` such as 1e308 overflows to
|
|
211
|
+
// Infinity when scaled to ms, and would then be printed as "Infinitys".
|
|
212
|
+
const ms = Math.round(secs * 1000);
|
|
213
|
+
if (Number.isFinite(ms))
|
|
214
|
+
return ms;
|
|
209
215
|
}
|
|
210
216
|
const headers = error?.headers ?? error?.response?.headers;
|
|
211
217
|
let headerVal;
|
|
@@ -219,8 +225,9 @@ function getRetryAfterMs(error) {
|
|
|
219
225
|
}
|
|
220
226
|
if (headerVal !== undefined && headerVal !== null) {
|
|
221
227
|
const n = parseInt(String(headerVal), 10);
|
|
222
|
-
|
|
223
|
-
|
|
228
|
+
const ms = n * 1000;
|
|
229
|
+
if (Number.isFinite(ms) && n >= 0)
|
|
230
|
+
return ms;
|
|
224
231
|
}
|
|
225
232
|
return null;
|
|
226
233
|
}
|
|
@@ -320,4 +327,81 @@ async function withSingleShotRetry(fn, opts) {
|
|
|
320
327
|
}
|
|
321
328
|
}
|
|
322
329
|
}
|
|
330
|
+
// ── Recall/digest retry policy (P0 recall fix, step 1 — GH #5570) ─────────────
|
|
331
|
+
// POST /api/memories/digest runs an LLM synthesis on the server for EVERY
|
|
332
|
+
// attempt, and that synthesis shares one Azure deployment with nothing else. The
|
|
333
|
+
// generic idempotent-read policy above (up to 3 retries on 429/502/503/504/408)
|
|
334
|
+
// stacked on the SDK transport's own 3 attempts turned one failing recall into
|
|
335
|
+
// 3-12 server digests, each burning tokens on the deployment that was already
|
|
336
|
+
// returning 429 — so the retries caused the next failures. Measured on dev
|
|
337
|
+
// 2026-10-14; see GH #5570 comment 6176381407.
|
|
338
|
+
//
|
|
339
|
+
// This policy replaces retryRead for the recall/digest call ONLY. The rule is
|
|
340
|
+
// "retry only when a retry cannot add synthesis load the server did not invite":
|
|
341
|
+
//
|
|
342
|
+
// 503 (any reason, incl. deadline_exceeded): NOT retried. deadline_exceeded
|
|
343
|
+
// means the server ran out of its 20s budget; the synthesis it started is
|
|
344
|
+
// not cancelled, so a retry doubles the load that caused the timeout.
|
|
345
|
+
// 500: NOT retried (unchanged at this layer; previously retried by the SDK).
|
|
346
|
+
// In the measured incident this is Azure returning 429 to core-api.
|
|
347
|
+
// 429: retried ONCE, and only when the server supplies a `retryAfter` hint in
|
|
348
|
+
// the response BODY no larger than RECALL_RETRY_AFTER_CAP_MS. A
|
|
349
|
+
// Retry-After HEADER is not honoured on this path: the SDK's SdkError keeps
|
|
350
|
+
// status and body but drops response headers, so a header-only hint never
|
|
351
|
+
// reaches the CLI and is treated as no hint (fail, do not retry).
|
|
352
|
+
// No hint → fail: retrying blind is what amplified the incident. A hint
|
|
353
|
+
// above the cap → fail, rather than retrying before the server asked.
|
|
354
|
+
// 502/504/408 (gateway/transport): retried ONCE with a short backoff.
|
|
355
|
+
// Anything else (aborts, 4xx): never retried.
|
|
356
|
+
//
|
|
357
|
+
// The retry budget is one retry TOTAL per invocation, across all statuses, so a
|
|
358
|
+
// recall makes at most 2 server attempts. MX_CLI_MAX_RETRIES=0 still disables it.
|
|
359
|
+
/** Maximum retries (beyond the first attempt) for one recall/digest call. */
|
|
360
|
+
exports.RECALL_MAX_RETRIES = 1;
|
|
361
|
+
/** Largest server Retry-After the recall path will wait for before its one retry. */
|
|
362
|
+
exports.RECALL_RETRY_AFTER_CAP_MS = 30_000;
|
|
363
|
+
/**
|
|
364
|
+
* How long to wait before retrying a failed recall/digest attempt, or null when
|
|
365
|
+
* the failure must not be retried. Pure — see the policy table above.
|
|
366
|
+
*/
|
|
367
|
+
function recallRetryWaitMs(error, opts = {}) {
|
|
368
|
+
const status = httpStatus(error);
|
|
369
|
+
if (status === 429) {
|
|
370
|
+
const hinted = getRetryAfterMs(error);
|
|
371
|
+
const cap = opts.retryAfterCapMs ?? exports.RECALL_RETRY_AFTER_CAP_MS;
|
|
372
|
+
if (hinted === null || hinted > cap)
|
|
373
|
+
return null;
|
|
374
|
+
return hinted;
|
|
375
|
+
}
|
|
376
|
+
if (status === 502 || status === 504 || status === 408) {
|
|
377
|
+
const base = opts.baseBackoffMs ?? exports.SINGLE_SHOT_BASE_BACKOFF_MS;
|
|
378
|
+
const random = opts.random ?? Math.random;
|
|
379
|
+
return base + Math.floor(random() * 250);
|
|
380
|
+
}
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Run a recall/digest call with the recall retry policy: at most one retry
|
|
385
|
+
* total, per {@link recallRetryWaitMs}. The final error propagates unchanged so
|
|
386
|
+
* the caller can report its cause.
|
|
387
|
+
*/
|
|
388
|
+
async function withRecallRetry(fn, opts = {}) {
|
|
389
|
+
const maxRetries = Math.min(exports.RECALL_MAX_RETRIES, opts.maxRetries ?? exports.SINGLE_SHOT_MAX_RETRIES);
|
|
390
|
+
const doSleep = opts.sleep ?? sleep;
|
|
391
|
+
let attempt = 0;
|
|
392
|
+
for (;;) {
|
|
393
|
+
try {
|
|
394
|
+
return await fn();
|
|
395
|
+
}
|
|
396
|
+
catch (error) {
|
|
397
|
+
const waitMs = attempt < maxRetries ? recallRetryWaitMs(error, opts) : null;
|
|
398
|
+
if (waitMs === null) {
|
|
399
|
+
throw error;
|
|
400
|
+
}
|
|
401
|
+
attempt++;
|
|
402
|
+
opts.onRetry?.({ attempt, maxRetries, waitMs, status: httpStatus(error) });
|
|
403
|
+
await doSleep(waitMs);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
323
407
|
//# sourceMappingURL=retry.js.map
|