@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.
@@ -9,7 +9,23 @@ import { Memnexus } from '@memnexus-ai/typescript-sdk';
9
9
  */
10
10
  export declare function getSdk(): Memnexus;
11
11
  /**
12
- * Reset the cached SDK instance
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;AAOvD;;;;;;;GAOG;AACH,wBAAgB,MAAM,IAAI,QAAQ,CAsBjC;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAE/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"}
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"}
@@ -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 instance
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
- baseUrl: apiUrl,
37
- token: apiKey,
41
+ ...sdkConfigFromCli(),
38
42
  timeoutMs: 30000,
39
43
  });
40
44
  return cachedSdk;
41
45
  }
42
46
  /**
43
- * Reset the cached SDK instance
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":";;;;;;AAeA,wBAsBC;AAOD,4BAEC;AAqCD,kDAwBC;AA3GD,gEAAuD;AACvD,qCAAkC;AAClC,kDAA0B;AAE1B,sBAAsB;AACtB,IAAI,SAAS,GAAoB,IAAI,CAAC;AAEtC;;;;;;;GAOG;AACH,SAAgB,MAAM;IACpB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,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;IAED,MAAM,MAAM,GAAG,eAAM,CAAC,SAAS,EAAE,CAAC;IAElC,yCAAyC;IACzC,SAAS,GAAG,IAAI,yBAAQ,CAAC;QACvB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,SAAgB,QAAQ;IACtB,SAAS,GAAG,IAAI,CAAC;AACnB,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"}
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":"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"}
1
+ {"version":3,"file":"renderable-retrieval.d.ts","sourceRoot":"","sources":["../../src/lib/renderable-retrieval.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAElE,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC7C;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,6EAA6E;AAC7E,eAAO,MAAM,eAAe,8BAAyB,CAAC;AAEtD,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,4CAAuC,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,2CAAsC,CAAC;AAmKrE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAU9E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAK9E;AAED,+DAA+D;AAC/D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE1E;AA0BD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CASzF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,sBAAsB,GAAG,MAAM,GAAG,IAAI,CAMzF;AAED,6EAA6E;AAC7E,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,sBAAsB,GAAG,MAAM,CAKrF;AAWD;;;;;GAKG;AACH,qBAAa,sBAAsB;IAE/B,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE;IAC7C,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,yCAAyC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;IACzC,6CAA6C;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,GAAG;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IACjC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,sBAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhBvB,OAAO;IAmBP;;;;;;;;OAQG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB;IAe7D;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB;IAgB9D;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAa1C;AAED;;;;;;GAMG;AACH,qBAAa,sBAAsB;IAE/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACvB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,SAAS;IACpC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,SAAS;IACpC,QAAQ,CAAC,uBAAuB,EAAE,GAAG;IACrC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO;IAYP,iFAAiF;IACjF,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB;IAe7D,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAS1C;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IAElC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;IAHnC,OAAO;IAMP,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,yBAAyB;IAKhE,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAS1C"}
@@ -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, body) {
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":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;;;AA0KH,wDAUC;AAMD,wDAKC;AAGD,8DAEC;AAvKD,6EAA6E;AAChE,QAAA,eAAe,GAAG,sBAAsB,CAAC;AAEtD,6EAA6E;AAChE,QAAA,wBAAwB,GAAG,oCAAoC,CAAC;AAE7E,MAAM,OAAO,GAAqB,MAAM,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAA6B;CACxD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,GAAY;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IACjD,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAa,EAAE,IAAI,IAAK,KAAa,EAAE,MAAM,CAAC,CAAC;QACvF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1E,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAE,KAAa,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,MAAM,IAAI,gBAAgB;YAAE,MAAM;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,SAAkB;IACzC,MAAM,CAAC,GAAG,SAAgF,CAAC;IAC3F,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,SAAkB;IAChD,MAAM,CAAC,GAAG,SAGG,CAAC;IACd,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IACvE,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,MAA2B,EAAE,EAAE;QAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO;QAChC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC1E,IAAI,QAAQ,CAAC,MAAM,IAAI,gBAAgB;gBAAE,OAAO;YAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IACvC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,MAAwB;IAC7C,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,qBAAqB,CAC5B,SAAkB,EAClB,MAAwB;IAExB,MAAM,CAAC,GAAG,SAAoC,CAAC;IAC/C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,SAAkB,EAClB,MAAwB;IAExB,MAAM,CAAC,GAAG,SAAoC,CAAC;IAC/C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,MAA2B,EAAE,EAAE,CAC5C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,OAAO;QACL,GAAG,CAAC;QACJ,GAAG,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,MAAwB;IAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;QACzB,CAAC,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxC,CAAC,CAAC,uCAAuC,CAAC;IAC5C,OAAO,CACL,GAAG,uBAAe,MAAM,MAAM,gDAAgD;QAC9E,iCAAiC,CAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,MAAwB;IAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,GAAG,uBAAe,GAAG,MAAM,kCAAkC,CAAC;AACvE,CAAC;AAED,+DAA+D;AAC/D,SAAgB,yBAAyB,CAAC,MAAwB;IAChE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gCAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAgC,CAAC;IACjF,OAAO,MAAM,CAAC,MAAM,CAClB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CACjB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,EAAE,CAC9E,CACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAa,sBAAsB;IAGtB;IAEA;IAEA;IAEA;IAEA;IACQ;IAXnB;IACE,uDAAuD;IAC9C,OAAoC;IAC7C,oEAAoE;IAC3D,KAAa;IACtB,yCAAyC;IAChC,YAAgC;IACzC,6CAA6C;IACpC,gBAAqB;IAC9B,0CAA0C;IACjC,MAAwB,EAChB,IAA6B;QATrC,YAAO,GAAP,OAAO,CAA6B;QAEpC,UAAK,GAAL,KAAK,CAAQ;QAEb,iBAAY,GAAZ,YAAY,CAAoB;QAEhC,qBAAgB,GAAhB,gBAAgB,CAAK;QAErB,WAAM,GAAN,MAAM,CAAkB;QAChB,SAAI,GAAJ,IAAI,CAAyB;IAC7C,CAAC;IAEJ;;;;;;;;OAQG;IACH,MAAM,CAAC,eAAe,CAAC,IAAa;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;QAC9C,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAuC,CAAC;QACvD,OAAO,IAAI,sBAAsB,CAC/B,OAAO,EACP,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAC7D,OAAO,IAAI,EAAE,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EACtE,IAAI,EAAE,gBAAgB,EACtB,eAAe,CAAC,IAAI,CAAC,EACrB,CAAC,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAa;QACnC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAC3B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CACxC,CAAC;QACjC,OAAO,IAAI,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED;;;OAGG;IACH,cAAc;QACZ,sEAAsE;QACtE,qEAAqE;QACrE,gBAAgB;QAChB,OAAO;YACL,GAAG,IAAI,CAAC,IAAI;YACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;gBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;CACF;AApED,wDAoEC;AAED;;;;;;GAMG;AACH,MAAa,sBAAsB;IAEtB;IAEA;IACA;IACA;IACA;IACA;IACA;IACQ;IATnB,YACW,MAAc;IACvB,2EAA2E;IAClE,QAA6B,EAC7B,OAAc,EACd,QAA2B,EAC3B,QAA2B,EAC3B,uBAA4B,EAC5B,MAAwB,EAChB,IAA6B;QARrC,WAAM,GAAN,MAAM,CAAQ;QAEd,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,YAAO,GAAP,OAAO,CAAO;QACd,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,4BAAuB,GAAvB,uBAAuB,CAAK;QAC5B,WAAM,GAAN,MAAM,CAAkB;QAChB,SAAI,GAAJ,IAAI,CAAyB;IAC7C,CAAC;IAEJ,iFAAiF;IACjF,MAAM,CAAC,eAAe,CAAC,IAAa;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAwB,CAAC;QAC3D,OAAO,IAAI,sBAAsB,CAC/B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAC5C,QAAQ,EACR,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EACzC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAClD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAClD,CAAC,CAAC,uBAAuB,EACzB,eAAe,CAAC,QAAQ,CAAC,EACzB,CAAC,CACF,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,OAAO;YACL,GAAG,IAAI,CAAC,IAAI;YACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS;gBAClC,CAAC,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBACtE,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;CACF;AAtCD,wDAsCC;AAED;;;;;GAKG;AACH,MAAa,yBAAyB;IAGzB;IACA;IAHX;IACE,+DAA+D;IACtD,IAAyB,EACzB,MAAwB;QADxB,SAAI,GAAJ,IAAI,CAAqB;QACzB,WAAM,GAAN,MAAM,CAAkB;IAChC,CAAC;IAEJ,MAAM,CAAC,eAAe,CAAC,IAAa;QAClC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;QAC9C,OAAO,IAAI,yBAAyB,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,cAAc;QACZ,OAAO;YACL,GAAG,IAAI,CAAC,IAAI;YACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS;gBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC9D,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;CACF;AArBD,8DAqBC"}
1
+ {"version":3,"file":"renderable-retrieval.js","sourceRoot":"","sources":["../../src/lib/renderable-retrieval.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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,CAoBzD;AAED,sEAAsE;AACtE,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAGD,mFAAmF;AACnF,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,6EAA6E;AAC7E,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,mFAAmF;AACnF,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAA2C,GACjE,MAAM,CAiBR;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAoD,CAAC;AAEzF,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,KAAK,IAAI,CAAC;CACZ;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
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' && Number.isFinite(secs) && secs >= 0) {
208
- return Math.round(secs * 1000);
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
- if (Number.isFinite(n) && n >= 0)
223
- return n * 1000;
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