@happyvertical/smrt-ingestion 0.57.29 → 0.57.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/PROPOSALS.md +145 -9
  2. package/README.md +12 -0
  3. package/REVIEW.md +9 -0
  4. package/dist/chunks/{execution-Dv3G0d62.js → execution-BxkUOtLf.js} +119 -3
  5. package/dist/chunks/execution-BxkUOtLf.js.map +1 -0
  6. package/dist/chunks/{feedback-PLOZth0a.js → feedback-D69e1hX5.js} +3 -3
  7. package/dist/chunks/{feedback-PLOZth0a.js.map → feedback-D69e1hX5.js.map} +1 -1
  8. package/dist/chunks/proposal-contracts-CqVVPvqq.js.map +1 -1
  9. package/dist/chunks/{reviewer-instruction-zn11aVA5.js → reviewer-instruction-Ip4W4f0j.js} +2 -2
  10. package/dist/chunks/{reviewer-instruction-zn11aVA5.js.map → reviewer-instruction-Ip4W4f0j.js.map} +1 -1
  11. package/dist/execution-internal.d.ts +4 -0
  12. package/dist/execution-internal.d.ts.map +1 -1
  13. package/dist/execution.d.ts +7 -0
  14. package/dist/execution.d.ts.map +1 -1
  15. package/dist/execution.js +1 -1
  16. package/dist/failure-capture.d.ts +73 -0
  17. package/dist/failure-capture.d.ts.map +1 -0
  18. package/dist/manifest.json +1 -1
  19. package/dist/models.js +1 -1
  20. package/dist/models.js.map +1 -1
  21. package/dist/proposal-contracts.d.ts +8 -0
  22. package/dist/proposal-contracts.d.ts.map +1 -1
  23. package/dist/proposal-dto.d.ts +39 -0
  24. package/dist/proposal-dto.d.ts.map +1 -1
  25. package/dist/proposal-sdk.d.ts.map +1 -1
  26. package/dist/proposal-validation.d.ts +2 -1
  27. package/dist/proposal-validation.d.ts.map +1 -1
  28. package/dist/proposals.d.ts +2 -0
  29. package/dist/proposals.d.ts.map +1 -1
  30. package/dist/proposals.js +235 -22
  31. package/dist/proposals.js.map +1 -1
  32. package/dist/provider-failure.d.ts +15 -0
  33. package/dist/provider-failure.d.ts.map +1 -1
  34. package/dist/server.d.ts +15 -0
  35. package/dist/server.d.ts.map +1 -1
  36. package/dist/server.js +39 -6
  37. package/dist/server.js.map +1 -1
  38. package/dist/smrt-knowledge.json +14 -14
  39. package/package.json +17 -17
  40. package/dist/chunks/execution-Dv3G0d62.js.map +0 -1
@@ -94,6 +94,14 @@ export interface ProposalConfiguration extends DecisionSettings {
94
94
  identity: ProviderIdentity;
95
95
  };
96
96
  limits: GenerationLimits;
97
+ /**
98
+ * Opt-in, bounded, redacted capture of the model output on a failed
99
+ * interpretation attempt (#4285). Text requires a host redactor; absent or
100
+ * failed redaction retains no text. Off when absent. Not public read
101
+ * configuration: it never enters frozen configuration, digests or
102
+ * `proposalReadConfiguration`. See PROPOSALS.md.
103
+ */
104
+ failureCapture?: import('./failure-capture.js').FailureCaptureConfiguration;
97
105
  }
98
106
  /** Credential-free configuration for validating persisted proposal snapshots. */
99
107
  export interface ProposalReadConfiguration extends DecisionSettings {
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-contracts.d.ts","sourceRoot":"","sources":["../src/proposal-contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposal-contracts.d.ts","sourceRoot":"","sources":["../src/proposal-contracts.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,16 @@ export interface MissingFieldsCorrection {
77
77
  /** Declared fields that were not actually missing. */
78
78
  removed: number;
79
79
  }
80
+ /**
81
+ * Value-free record that the validator dropped invented targets from offered
82
+ * candidate fields (#4289): counts only, never IDs, labels or field names.
83
+ */
84
+ export interface UnofferedTargetsDropped {
85
+ /** Suggestions that had at least one target dropped. */
86
+ suggestions: number;
87
+ /** Candidate fields whose unoffered value was dropped. */
88
+ fields: number;
89
+ }
80
90
  export interface GenerationOutput {
81
91
  version: 1;
82
92
  outcome: 'proposals' | 'unknown' | 'ambiguous' | 'no_action' | 'needs_review' | 'provider_error';
@@ -146,6 +156,8 @@ export interface GenerationOutput {
146
156
  };
147
157
  /** Present only when a declaration was corrected; absent output is unchanged. */
148
158
  missingFieldsCorrection?: MissingFieldsCorrection;
159
+ /** Present only when an invented target was dropped; absent output is unchanged. */
160
+ unofferedTargetsDropped?: UnofferedTargetsDropped;
149
161
  };
150
162
  automaticActionEligible: false;
151
163
  }
@@ -171,4 +183,31 @@ export type GeneratedPreview = {
171
183
  export interface GenerationAnalysisOutput {
172
184
  proposals: GenerationOutput;
173
185
  }
186
+ /** What a failed-attempt capture holds (#4285). */
187
+ export type FailedAttemptCaptureSource =
188
+ /** The provider's reply text, refused by the SDK adapter (e.g. invalid JSON). */
189
+ 'raw_response'
190
+ /** The generator's parsed output that failed validation or a limit, as JSON. */
191
+ | 'generated_output';
192
+ export type FailedAttemptCaptureStatus = 'captured' | 'redaction_failed';
193
+ /**
194
+ * Opt-in diagnostic capture of a failed interpretation attempt. It contains
195
+ * document-derived model output: read it only through the reviewer-authorized
196
+ * `getFailedAttemptCapture`, and never put it in lists, logs or telemetry.
197
+ */
198
+ export interface FailedAttemptCapture {
199
+ itemId: string;
200
+ attemptId: string;
201
+ source: FailedAttemptCaptureSource;
202
+ /** `redaction_failed`: the host hook was missing or failed; no text stored. */
203
+ status: FailedAttemptCaptureStatus;
204
+ /** Redacted, bounded text; present only when `status` is `captured`. */
205
+ text?: string;
206
+ /** The text was cut at `maxBytes` (or at the generation output bound). */
207
+ truncated: boolean;
208
+ /** A hook was configured; the host owns its semantic redaction policy. */
209
+ redacted: boolean;
210
+ maxBytes: number;
211
+ capturedAt: string;
212
+ }
174
213
  //# sourceMappingURL=proposal-dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-dto.d.ts","sourceRoot":"","sources":["../src/proposal-dto.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,YAAY,CAAC;IAC5B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,MAAM,EAAE,cAAc,CAAC;CACxB;AACD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AACzB,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,yFAAyF;IACzF,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzC,UAAU,EAAE,YAAY,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,SAAS,EACL;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAClD;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AACD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AACD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,yBAAyB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,kBAAkB,GAAG,cAAc,CAAC;CAClD;AACD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EACH,WAAW,GACX,SAAS,GACT,WAAW,GACX,WAAW,GACX,cAAc,GACd,gBAAgB,CAAC;IACrB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,MAAM,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,KAAK,CAAC;QACb,OAAO,EAAE,oBAAoB,CAAC;QAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;KACjC,CAAC,CAAC;IACH,UAAU,EAAE;QACV,QAAQ,CAAC,EAAE;YACT,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,EAAE,OAAO,mBAAmB,EAAE,kBAAkB,CAAC;SAC3D,CAAC;QACF,oEAAoE;QACpE,mBAAmB,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD,oBAAoB,EAAE,MAAM,CAAC;QAC7B,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,UAAU,EAAE,gBAAgB,CAAC;QAC7B,uEAAuE;QACvE,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,EAAE;YACR,UAAU,EAAE,OAAO,CAAC;YACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,uEAAuE;YACvE,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;YAC9B,yEAAyE;YACzE,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,OAAO,CAAC,EAAE,YAAY,CAAC;YACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAChC,CAAC;QACF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B;;;WAGG;QACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B;;;WAGG;QACH,aAAa,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QACpD;;;WAGG;QACH,OAAO,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/C,iFAAiF;QACjF,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;KACnD,CAAC;IACF,uBAAuB,EAAE,KAAK,CAAC;CAChC;AACD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,UAAU,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AACD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAEzC,sFAAsF;AACtF,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,gBAAgB,CAAC;CAC7B"}
1
+ {"version":3,"file":"proposal-dto.d.ts","sourceRoot":"","sources":["../src/proposal-dto.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-sdk.d.ts","sourceRoot":"","sources":["../src/proposal-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAuBjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAuBzD,CAAC;AAgCH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAsEtD;AAiDD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEpE;AAiKD,8FAA8F;AAC9F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EACjC,kBAAkB,EAAE,gBAAgB,EACpC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/C,iBAAiB,CAqEnB;AAED,gFAAgF;AAChF,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,QAAQ,CAAC,GACtD,cAAc,CAYhB"}
1
+ {"version":3,"file":"proposal-sdk.d.ts","sourceRoot":"","sources":["../src/proposal-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAGZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,KAAK,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EACV,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AA4BjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAuBzD,CAAC;AAgCH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAsEtD;AAiDD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEpE;AAiKD,8FAA8F;AAC9F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EACjC,kBAAkB,EAAE,gBAAgB,EACpC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/C,iBAAiB,CAwFnB;AAED,gFAAgF;AAChF,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,iBAAiB,GAAG,QAAQ,CAAC,GACtD,cAAc,CAYhB"}
@@ -2,7 +2,7 @@ import { type ErrorObject } from 'ajv';
2
2
  import type { IntakeValues } from './execution-dto.js';
3
3
  import type { ExtractionResult } from './extraction-types.js';
4
4
  import type { GenerationLimits } from './proposal-contracts.js';
5
- import type { GenerationOutput, MissingFieldsCorrection } from './proposal-dto.js';
5
+ import type { GenerationOutput, MissingFieldsCorrection, UnofferedTargetsDropped } from './proposal-dto.js';
6
6
  export { schemaOwnedPath } from './argument-issues.js';
7
7
  /** Longest persisted reason; the rest is cut so the publication envelope stays bounded. */
8
8
  export declare const PROPOSAL_REASON_LIMIT = 1000;
@@ -235,5 +235,6 @@ export declare function dedupeGeneratedLists(raw: unknown): {
235
235
  export declare function validateSuggestions(raw: unknown, offered: GenerationOutput['offered'], extraction: ExtractionResult[], limits: GenerationLimits, revision: number): Pick<GenerationOutput, 'outcome' | 'suggestions' | 'splits'> & {
236
236
  missingFieldsCorrection?: MissingFieldsCorrection;
237
237
  splitsDropped?: NonNullable<GenerationOutput['provenance']['splitsDropped']>;
238
+ unofferedTargetsDropped?: UnofferedTargetsDropped;
238
239
  };
239
240
  //# sourceMappingURL=proposal-validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proposal-validation.d.ts","sourceRoot":"","sources":["../src/proposal-validation.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAEV,gBAAgB,EAChB,uBAAuB,EAExB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,2FAA2F;AAC3F,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAO7C;AACD;;;GAGG;AACH,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAG9C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,OAAO,EAClB,KAAK,SAAK,EACV,QAAQ,SAA8B,GACrC,MAAM,CAkDR;AACD,gHAAgH;AAChH,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAGhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,GAChB,MAAM,EAAE,GAAG,SAAS,CAuBtB;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAInD;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAM,GAAG,MAAM,CAItD;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAehE;AAwCD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuFxD;AACD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAsCA;AACD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,UAAU,EAAE,gBAAgB,EAAE,EAC9B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC,GAAG;IAChE,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,aAAa,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;CAC9E,CAgKA"}
1
+ {"version":3,"file":"proposal-validation.d.ts","sourceRoot":"","sources":["../src/proposal-validation.ts"],"names":[],"mappings":"AAAA,OAAY,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAEV,gBAAgB,EAChB,uBAAuB,EAEvB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,2FAA2F;AAC3F,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAO7C;AACD;;;GAGG;AACH,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAG9C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,CAAC,EAAE,OAAO,EAClB,KAAK,SAAK,EACV,QAAQ,SAA8B,GACrC,MAAM,CAkDR;AACD,gHAAgH;AAChH,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAGhD;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,SAAS,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,OAAO,GAChB,MAAM,EAAE,GAAG,SAAS,CAuBtB;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAInD;AACD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAM,GAAG,MAAM,CAItD;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAehE;AAwCD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuFxD;AACD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAsCA;AACD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC,EACpC,UAAU,EAAE,gBAAgB,EAAE,EAC9B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,GACf,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC,GAAG;IAChE,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,aAAa,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7E,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD,CA6NA"}
@@ -3,6 +3,7 @@ import { generationSnapshotRead, type TransactionRunner } from './execution-inte
3
3
  import type { GenerationStageConfiguration, GenerativeProposalInput, ProposalConfiguration, ProposalReadConfiguration } from './proposal-contracts.js';
4
4
  import type { CandidatePage, CompletedAnalysisSnapshot, GeneratedPreview, GenerationOutput, PreviewGeneratedInput, ProposalCatalogEntry } from './proposal-dto.js';
5
5
  import type { AnalysisLease, IngestionOptions, IngestionService } from './server.js';
6
+ export { FAILURE_CAPTURE_DEFAULT_MAX_BYTES, FAILURE_CAPTURE_MAX_BYTES, type FailureCaptureConfiguration, } from './failure-capture.js';
6
7
  export type * from './proposal-contracts.js';
7
8
  export type { ProposalConfiguration, ProposalReadConfiguration, } from './proposal-contracts.js';
8
9
  export { proposalReadConfiguration } from './proposal-contracts.js';
@@ -26,6 +27,7 @@ export declare class IngestionProposalService {
26
27
  /** Frozen public decision settings; defaults are omitted so existing digests hold. */
27
28
  private decisionSettings;
28
29
  private readonly config;
30
+ private readonly failureCapture?;
29
31
  private generation;
30
32
  private handler;
31
33
  private entry;
@@ -1 +1 @@
1
- {"version":3,"file":"proposals.d.ts","sourceRoot":"","sources":["../src/proposals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposals.d.ts","sourceRoot":"","sources":["../src/proposals.ts"],"names":[],"mappings":"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"}
package/dist/proposals.js CHANGED
@@ -1,8 +1,8 @@
1
- import { C as __toESM, _ as HandlerArgumentsInvalidError, b as generationSnapshotRead, d as schemaOwnedPath, f as require_ajv, h as GenerationSnapshotStaleError, i as intakeBindingDigest, n as IntakeExecutionService, u as describeArgumentRefusal, y as discoveryTransaction } from "./chunks/execution-Dv3G0d62.js";
1
+ import { A as __toESM, D as generationSnapshotRead, E as discoveryTransaction, S as prepareFailureCapture, T as completeWithFailureCapture, _ as HandlerArgumentsInvalidError, b as FAILURE_CAPTURE_MAX_BYTES, d as schemaOwnedPath, f as require_ajv, h as GenerationSnapshotStaleError, i as intakeBindingDigest, n as IntakeExecutionService, u as describeArgumentRefusal, w as analysisLeaseRemaining, x as assertFailureCapture, y as FAILURE_CAPTURE_DEFAULT_MAX_BYTES } from "./chunks/execution-BxkUOtLf.js";
2
2
  import { a as providerIdentity } from "./chunks/extraction-providers-C66ADDVe.js";
3
3
  import { n as assertProposalLimits, o as proposeDocumentSplits, r as SplitGroupError, t as proposalReadConfiguration } from "./chunks/proposal-contracts-CqVVPvqq.js";
4
- import { i as reviewerInstructionView } from "./chunks/reviewer-instruction-zn11aVA5.js";
5
- import { n as IntakeFeedbackService, t as FeedbackRetrievalDeniedError } from "./chunks/feedback-PLOZth0a.js";
4
+ import { i as reviewerInstructionView } from "./chunks/reviewer-instruction-Ip4W4f0j.js";
5
+ import { n as IntakeFeedbackService, t as FeedbackRetrievalDeniedError } from "./chunks/feedback-D69e1hX5.js";
6
6
  import { executeDecision, isEmbeddedDatabase, withEmbeddedWriteTransaction } from "@happyvertical/smrt-core";
7
7
  import { AIError } from "@happyvertical/ai";
8
8
  //#region src/proposal-validation.ts
@@ -307,13 +307,42 @@ function validateSuggestions(raw, offered, extraction, limits, revision) {
307
307
  added: 0,
308
308
  removed: 0
309
309
  };
310
+ const unoffered = {
311
+ suggestions: 0,
312
+ fields: 0
313
+ };
314
+ const droppedValues = [];
310
315
  const suggestions = input.suggestions.map((suggestion, index) => {
311
316
  const path = `/suggestions/${index}`;
312
317
  const entry = offered.find(({ handler }) => handler.id === suggestion.handlerId && handler.version === suggestion.handlerVersion);
313
318
  if (!entry || suggestion.alternatives.some((key) => !offeredKeys.has(key))) throw new ProposalValidationError("Unoffered handler", path);
314
319
  const schema = ajv.compile(entry.handler.argsSchema);
315
- const missing = schema(suggestion.args) ? [] : missingRequiredFields(schema.errors, entry.handler.argsSchema, suggestion.args);
320
+ let missing = schema(suggestion.args) ? [] : missingRequiredFields(schema.errors, entry.handler.argsSchema, suggestion.args);
316
321
  if (!missing) throw new ProposalValidationError("Invalid handler arguments", `${path}/args ${describeSchemaErrors(schema.errors, entry.handler.argsSchema, suggestion.args)}`);
322
+ const declaredProperties = entry.handler.argsSchema.properties;
323
+ const dropped2 = [];
324
+ for (const [field, reference] of Object.entries(entry.handler.references)) {
325
+ if (!Object.hasOwn(suggestion.args, field)) continue;
326
+ const value = suggestion.args[field];
327
+ if (reference.kind === "candidate") {
328
+ if (!entry.candidates.some((candidate) => candidate.model === reference.model && candidate.id === value)) {
329
+ if (typeof value !== "string" || !declaredProperties || typeof declaredProperties !== "object" || !Object.hasOwn(declaredProperties, field)) throw new ProposalValidationError("Unoffered target", `${path}/args/${field}`);
330
+ dropped2.push(field);
331
+ }
332
+ } else if (!extraction.some((result) => result.evidence.id === value)) throw new ProposalValidationError("Unknown evidence", `${path}/args/${field}`);
333
+ }
334
+ let args = suggestion.args;
335
+ if (dropped2.length) {
336
+ args = Object.fromEntries(Object.entries(suggestion.args).filter(([field]) => !dropped2.includes(field)));
337
+ missing = schema(args) ? [] : missingRequiredFields(schema.errors, entry.handler.argsSchema, args);
338
+ if (!missing) throw new ProposalValidationError("Unoffered target", `${path}/args/${dropped2[0]}`);
339
+ for (const field of dropped2) droppedValues.push({
340
+ value: suggestion.args[field],
341
+ path: `${path}/args/${field}`
342
+ });
343
+ unoffered.suggestions += 1;
344
+ unoffered.fields += dropped2.length;
345
+ }
317
346
  const declared = suggestion.missingFields;
318
347
  const added = missing.filter((field) => !declared.includes(field));
319
348
  const removed = declared.filter((field) => !missing.includes(field));
@@ -324,18 +353,12 @@ function validateSuggestions(raw, offered, extraction, limits, revision) {
324
353
  correction.added += added.length;
325
354
  correction.removed += removed.length;
326
355
  }
327
- for (const [field, reference] of Object.entries(entry.handler.references)) {
328
- if (!Object.hasOwn(suggestion.args, field)) continue;
329
- const value = suggestion.args[field];
330
- if (reference.kind === "candidate") {
331
- if (!entry.candidates.some((candidate) => candidate.model === reference.model && candidate.id === value)) throw new ProposalValidationError("Unoffered target", `${path}/args/${field}`);
332
- } else if (!extraction.some((result) => result.evidence.id === value)) throw new ProposalValidationError("Unknown evidence", `${path}/args/${field}`);
333
- }
334
356
  for (const [position, reference] of suggestion.evidence.entries()) assertEvidenceReference(reference, extraction, `${path}/evidence/${position}`);
335
357
  return {
336
358
  ...structuredClone(suggestion),
359
+ args: structuredClone(args),
337
360
  missingFields,
338
- disposition: corrected || missingFields.length || input.outcome !== "proposals" ? "needs_review" : "ready_for_review"
361
+ disposition: corrected || dropped2.length || missingFields.length || input.outcome !== "proposals" ? "needs_review" : "ready_for_review"
339
362
  };
340
363
  });
341
364
  const seen = /* @__PURE__ */ new Set();
@@ -358,6 +381,14 @@ function validateSuggestions(raw, offered, extraction, limits, revision) {
358
381
  digest: result.digest
359
382
  }];
360
383
  });
384
+ if (droppedValues.length) {
385
+ const kept = JSON.stringify({
386
+ suggestions,
387
+ splits
388
+ });
389
+ const echoed = droppedValues.find(({ value }) => kept.includes(JSON.stringify(value).slice(1, -1)));
390
+ if (echoed) throw new ProposalValidationError("Unoffered target", echoed.path);
391
+ }
361
392
  return {
362
393
  outcome: input.outcome,
363
394
  suggestions,
@@ -366,12 +397,98 @@ function validateSuggestions(raw, offered, extraction, limits, revision) {
366
397
  ...dropped ? { splitsDropped: {
367
398
  count: dropped,
368
399
  checks: ["split_groups"]
369
- } } : {}
400
+ } } : {},
401
+ ...unoffered.suggestions ? { unofferedTargetsDropped: unoffered } : {}
370
402
  };
371
403
  }
372
404
  function assertEvidenceReference(reference, extraction, path) {
373
405
  if (!extraction.find((entry) => entry.evidence.id === reference.evidenceId)?.segments.some((segment) => intakeBindingDigest(segment.location) === intakeBindingDigest(reference.location))) throw new ProposalValidationError("Unknown evidence location", path);
374
406
  }
407
+ var FINISH_REASONS = /* @__PURE__ */ new Set([
408
+ "stop",
409
+ "length",
410
+ "tool_calls",
411
+ "content_filter"
412
+ ]);
413
+ var RESPONSE_PROBLEMS = {
414
+ finish_reason: "provider response incomplete",
415
+ truncated: "provider response incomplete (truncated)",
416
+ tool_calls: "provider response contained tool calls",
417
+ unexpected_model: "provider response came from an unexpected model",
418
+ no_text_content: "provider response had no text content",
419
+ empty_content: "provider response was empty",
420
+ output_limit: "provider response exceeded the output limit",
421
+ invalid_json: "provider response was not valid JSON"
422
+ };
423
+ var ProposalResponseError = class extends Error {
424
+ constructor(problem, message, finishReason) {
425
+ super(message);
426
+ this.problem = problem;
427
+ if (problem === "finish_reason") this.finishReason = typeof finishReason === "string" && FINISH_REASONS.has(finishReason) ? finishReason : "other";
428
+ }
429
+ problem;
430
+ name = "ProposalResponseError";
431
+ finishReason;
432
+ };
433
+ var rawOutputs = /* @__PURE__ */ new WeakMap();
434
+ function attachRawProviderOutput(error, text) {
435
+ if (typeof text === "string") rawOutputs.set(error, text);
436
+ return error;
437
+ }
438
+ function rawProviderOutput(error) {
439
+ return error && typeof error === "object" ? rawOutputs.get(error) : void 0;
440
+ }
441
+ var NETWORK_CODES = /* @__PURE__ */ new Set([
442
+ "ECONNABORTED",
443
+ "ECONNREFUSED",
444
+ "ECONNRESET",
445
+ "EAI_AGAIN",
446
+ "EHOSTDOWN",
447
+ "EHOSTUNREACH",
448
+ "ENETDOWN",
449
+ "ENETRESET",
450
+ "ENETUNREACH",
451
+ "ENOTFOUND",
452
+ "EPIPE",
453
+ "EPROTO",
454
+ "ETIMEDOUT",
455
+ "ERR_SSL_WRONG_VERSION_NUMBER",
456
+ "ERR_STREAM_PREMATURE_CLOSE",
457
+ "ERR_TLS_CERT_ALTNAME_INVALID",
458
+ "CERT_HAS_EXPIRED",
459
+ "DEPTH_ZERO_SELF_SIGNED_CERT",
460
+ "SELF_SIGNED_CERT_IN_CHAIN",
461
+ "UNABLE_TO_VERIFY_LEAF_SIGNATURE",
462
+ "UND_ERR_ABORTED",
463
+ "UND_ERR_BODY_TIMEOUT",
464
+ "UND_ERR_CLOSED",
465
+ "UND_ERR_CONNECT_TIMEOUT",
466
+ "UND_ERR_DESTROYED",
467
+ "UND_ERR_HEADERS_OVERFLOW",
468
+ "UND_ERR_HEADERS_TIMEOUT",
469
+ "UND_ERR_INFO",
470
+ "UND_ERR_INVALID_ARG",
471
+ "UND_ERR_INVALID_RETURN_VALUE",
472
+ "UND_ERR_NOT_SUPPORTED",
473
+ "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH",
474
+ "UND_ERR_RES_CONTENT_LENGTH_MISMATCH",
475
+ "UND_ERR_RES_EXCEEDED_MAX_SIZE",
476
+ "UND_ERR_RESPONSE_STATUS_CODE",
477
+ "UND_ERR_SOCKET"
478
+ ]);
479
+ var NETWORK_TIMEOUT_CODES = /* @__PURE__ */ new Set([
480
+ "ETIMEDOUT",
481
+ "UND_ERR_BODY_TIMEOUT",
482
+ "UND_ERR_CONNECT_TIMEOUT",
483
+ "UND_ERR_HEADERS_TIMEOUT"
484
+ ]);
485
+ var ABORT_NAMES = /* @__PURE__ */ new Set(["AbortError", "TimeoutError"]);
486
+ var SDK_TRANSPORT_MESSAGES = {
487
+ "Connection error.": "connection error",
488
+ "Request timed out.": "timeout",
489
+ "Request was aborted.": "aborted",
490
+ "(no status code or body)": "no status or body"
491
+ };
375
492
  var SCHEMA_KEYWORDS = /* @__PURE__ */ new Set([
376
493
  "$anchor",
377
494
  "$comment",
@@ -482,16 +599,65 @@ function rejectedKeywords(message) {
482
599
  for (const [, token] of message.matchAll(/["'`]([$A-Za-z]{2,40})["'`]/g)) if (SCHEMA_KEYWORDS.has(token)) found.add(token);
483
600
  return [...found].sort();
484
601
  }
602
+ function className(error) {
603
+ if (!error || typeof error !== "object") return void 0;
604
+ const ctor = Object.getPrototypeOf(error)?.constructor;
605
+ const name = typeof ctor === "function" && Object.getOwnPropertyDescriptor(ctor, "name")?.value;
606
+ return typeof name === "string" && /^[A-Z][A-Za-z0-9]{0,63}$/.test(name) && /(?:Error|Exception)$/.test(name) ? name : void 0;
607
+ }
608
+ function networkCode(error) {
609
+ let current = error;
610
+ for (let depth = 0; depth < 4 && current; depth++) {
611
+ const code = field$1(current, "code");
612
+ if (typeof code === "string" && NETWORK_CODES.has(code)) return code;
613
+ const errors = field$1(current, "errors");
614
+ if (Array.isArray(errors)) for (const entry of errors.slice(0, 4)) {
615
+ const nested = field$1(entry, "code");
616
+ if (typeof nested === "string" && NETWORK_CODES.has(nested)) return nested;
617
+ }
618
+ current = field$1(current, "cause");
619
+ }
620
+ }
621
+ function abortName(error) {
622
+ let current = error;
623
+ for (let depth = 0; depth < 4 && current; depth++) {
624
+ const name = field$1(current, "name");
625
+ if (typeof name === "string" && ABORT_NAMES.has(name)) return name;
626
+ current = field$1(current, "cause");
627
+ }
628
+ }
629
+ function responseReason(error) {
630
+ const phrase = RESPONSE_PROBLEMS[error.problem];
631
+ return error.problem === "finish_reason" ? `${phrase} (finish reason ${error.finishReason ?? "other"})` : phrase;
632
+ }
485
633
  function providerFailureReason(error) {
486
- const name = field$1(error, "name");
634
+ if (error instanceof ProposalResponseError && Object.hasOwn(RESPONSE_PROBLEMS, error.problem)) return responseReason(error);
487
635
  const sdk = error instanceof AIError && typeof error.code === "string" && SDK_ERROR_CODES.has(error.code) ? error : void 0;
488
- if (name === "AbortError" || name === "TimeoutError" || sdk && SDK_ABORT_CODES.has(sdk.code)) return "provider call aborted or timed out";
489
636
  const message = sdk && typeof sdk.message === "string" ? sdk.message : "";
637
+ const transport = sdk && Object.hasOwn(SDK_TRANSPORT_MESSAGES, message) ? SDK_TRANSPORT_MESSAGES[message] : void 0;
638
+ const foreign = !sdk;
639
+ const cls = foreign ? className(error) : void 0;
640
+ const network = networkCode(error);
641
+ const aborted = foreign ? abortName(error) : void 0;
642
+ const facts = [
643
+ ...cls ? [`class ${cls}`] : [],
644
+ ...aborted ? [`name ${aborted}`] : [],
645
+ ...network ? [`network ${network}`] : [],
646
+ ...transport ? [`transport ${transport}`] : []
647
+ ];
490
648
  const status = structuredStatus(error) ?? structuredStatus(field$1(error, "cause")) ?? (sdk ? sdkMessageStatus(sdk.code, message) : void 0);
649
+ if (sdk && SDK_ABORT_CODES.has(sdk.code) || transport === "timeout" || transport === "aborted" || status === void 0 && (aborted !== void 0 || network !== void 0 && NETWORK_TIMEOUT_CODES.has(network))) {
650
+ const details2 = [...sdk ? [`code ${sdk.code}`] : [], ...facts];
651
+ return `provider call aborted or timed out${details2.length ? ` (${details2.join(", ")})` : ""}`.slice(0, 500);
652
+ }
491
653
  const code = sdk?.code;
492
654
  const keywords = sdk ? rejectedKeywords(message) : [];
493
655
  const category = keywords.length ? "rejected the response schema" : status !== void 0 && status >= 400 && status < 500 ? "rejected the request" : status !== void 0 && status >= 500 ? "returned a server error" : "call failed";
494
- const details = [...status !== void 0 ? [`HTTP ${status}`] : [], ...code ? [`code ${code}`] : []];
656
+ const details = [
657
+ ...status !== void 0 ? [`HTTP ${status}`] : [],
658
+ ...code ? [`code ${code}`] : [],
659
+ ...facts
660
+ ];
495
661
  let reason = `provider ${category}${details.length ? ` (${details.join(", ")})` : ""}`;
496
662
  if (keywords.length) reason += `; unsupported response-schema keywords: ${keywords.join(", ")}`;
497
663
  return reason.slice(0, 500);
@@ -831,10 +997,23 @@ function createSDKProposalGenerator(client, configuredIdentity, limits) {
831
997
  responseSchema,
832
998
  continueOnLength: false
833
999
  });
834
- if (response.finishReason !== "stop" || response.truncated || response.toolCalls?.length || !acceptsResponseModel(identity, response.model)) throw new Error("Incomplete or unexpected proposal response");
835
- if (typeof response.content !== "string" || Buffer.byteLength(response.content) > options.maxOutputBytes) throw new Error("Proposal output limit");
1000
+ const refusal = (problem, message, finishReason) => attachRawProviderOutput(new ProposalResponseError(problem, message, finishReason), response.content);
1001
+ const incomplete = "Incomplete or unexpected proposal response";
1002
+ if (response.finishReason !== "stop") throw refusal("finish_reason", incomplete, response.finishReason);
1003
+ if (response.truncated) throw refusal("truncated", incomplete);
1004
+ if (response.toolCalls?.length) throw refusal("tool_calls", incomplete);
1005
+ if (!acceptsResponseModel(identity, response.model)) throw refusal("unexpected_model", incomplete);
1006
+ if (typeof response.content !== "string") throw refusal("no_text_content", "Proposal output limit");
1007
+ if (Buffer.byteLength(response.content) > options.maxOutputBytes) throw refusal("output_limit", "Proposal output limit");
1008
+ if (!response.content.trim()) throw refusal("empty_content", "Proposal response was empty");
1009
+ let output;
1010
+ try {
1011
+ output = JSON.parse(response.content);
1012
+ } catch {
1013
+ throw refusal("invalid_json", "Proposal response was not valid JSON");
1014
+ }
836
1015
  return {
837
- output: JSON.parse(response.content),
1016
+ output,
838
1017
  completion: "unknown",
839
1018
  usage: safeUsage(response.usage),
840
1019
  ...response.model && response.model !== identity.model ? { responseModel: response.model } : {}
@@ -915,6 +1094,15 @@ var IngestionProposalService = class {
915
1094
  text(this.config.version);
916
1095
  text(this.config.promptVersion);
917
1096
  assertProposalLimits(this.config.limits);
1097
+ if ("failureCapture" in config) assertFailureCapture(config.failureCapture);
1098
+ if ("failureCapture" in config && config.failureCapture) {
1099
+ const capture = config.failureCapture;
1100
+ this.failureCapture = Object.freeze({
1101
+ enabled: capture.enabled,
1102
+ ...capture.maxBytes === void 0 ? {} : { maxBytes: capture.maxBytes },
1103
+ ...capture.redact ? { redact: capture.redact.bind(capture) } : {}
1104
+ });
1105
+ }
918
1106
  if ("identity" in config.generator) this.generator = {
919
1107
  identity: this.identity,
920
1108
  generate: config.generator.generate.bind(config.generator)
@@ -944,6 +1132,7 @@ var IngestionProposalService = class {
944
1132
  };
945
1133
  }
946
1134
  config;
1135
+ failureCapture;
947
1136
  generation() {
948
1137
  if (!this.generator) throw new Error("Intake proposal generation is not configured");
949
1138
  return this.generator;
@@ -1206,6 +1395,8 @@ var IngestionProposalService = class {
1206
1395
  automaticActionEligible: false
1207
1396
  };
1208
1397
  let failure;
1398
+ let captureCandidate;
1399
+ let capture;
1209
1400
  const publication = () => ({
1210
1401
  status: failure ? "partial" : "completed",
1211
1402
  provider: "smrt-ingestion-proposals",
@@ -1313,25 +1504,37 @@ var IngestionProposalService = class {
1313
1504
  maxOutputBytes: maxBytes
1314
1505
  });
1315
1506
  } catch (error) {
1507
+ const raw = rawProviderOutput(error);
1508
+ if (raw !== void 0) captureCandidate = {
1509
+ source: "raw_response",
1510
+ text: () => raw
1511
+ };
1316
1512
  throw new StageFailure("unavailable", providerFailureReason(error));
1317
1513
  }
1318
1514
  });
1319
1515
  await this.live(lease, expected.catalogDigest, output.offered, output.provenance.feedback);
1516
+ captureCandidate = {
1517
+ source: "generated_output",
1518
+ text: () => JSON.stringify(generated.output)
1519
+ };
1320
1520
  if (!["complete", "unknown"].includes(generated.completion)) throw new StageFailure("malformed_output", "Generator declared no validated completion");
1321
1521
  if (generated.completion === "unknown") output.warnings.push("generation_completion_unknown");
1322
1522
  if (bytes(generated.output) > maxBytes) throw new StageFailure("limit");
1323
1523
  const deduped = dedupeGeneratedLists(generated.output);
1324
- const { missingFieldsCorrection, splitsDropped, ...validated } = validateSuggestions(deduped.output, output.offered, extraction, this.config.limits, generation.revision);
1524
+ const { missingFieldsCorrection, splitsDropped, unofferedTargetsDropped, ...validated } = validateSuggestions(deduped.output, output.offered, extraction, this.config.limits, generation.revision);
1325
1525
  Object.assign(output, validated);
1326
1526
  if (missingFieldsCorrection) output.provenance.missingFieldsCorrection = missingFieldsCorrection;
1327
1527
  if (deduped.removed) output.provenance.duplicatesRemoved = deduped.removed;
1328
1528
  if (splitsDropped) output.provenance.splitsDropped = splitsDropped;
1529
+ if (unofferedTargetsDropped) output.provenance.unofferedTargetsDropped = unofferedTargetsDropped;
1530
+ captureCandidate = void 0;
1329
1531
  if (humanCorrection) {
1330
1532
  const correction = record(humanCorrection);
1331
1533
  if (correction.kind !== "logical_split" || !output.splits.some((split) => split.evidenceId === correction.evidenceId && intakeBindingDigest(split.groups) === intakeBindingDigest(correction.groups))) {
1332
1534
  output.outcome = "needs_review";
1333
1535
  output.suggestions = [];
1334
1536
  delete output.provenance.missingFieldsCorrection;
1537
+ delete output.provenance.unofferedTargetsDropped;
1335
1538
  output.warnings.push("human_split_not_respected");
1336
1539
  }
1337
1540
  }
@@ -1346,7 +1549,14 @@ var IngestionProposalService = class {
1346
1549
  }
1347
1550
  }
1348
1551
  } catch (error) {
1552
+ const candidate = captureCandidate;
1553
+ captureCandidate = void 0;
1349
1554
  await this.live(lease, expected.catalogDigest);
1555
+ if (candidate && this.failureCapture?.enabled === true) capture = await prepareFailureCapture(this.failureCapture, candidate, {
1556
+ inputBytes: this.config.limits.maxOutputBytes,
1557
+ timeoutMs: this.failureCapture.redact ? Math.min(this.config.limits.timeoutMs, Math.floor(await this.service[analysisLeaseRemaining](lease).catch(() => 0) / 2)) : this.config.limits.timeoutMs,
1558
+ now: this.options.now?.() ?? /* @__PURE__ */ new Date()
1559
+ });
1350
1560
  failure = error instanceof StageFailure ? error.category : "malformed_output";
1351
1561
  const reason = error instanceof StageFailure || error instanceof ProposalValidationError ? error.reason : void 0;
1352
1562
  if (reason) output.provenance.failure = {
@@ -1359,6 +1569,7 @@ var IngestionProposalService = class {
1359
1569
  output.splits = [];
1360
1570
  delete output.provenance.duplicatesRemoved;
1361
1571
  delete output.provenance.splitsDropped;
1572
+ delete output.provenance.unofferedTargetsDropped;
1362
1573
  output.warnings.push(failure);
1363
1574
  }
1364
1575
  if (bytes(publication()) > maxBytes) {
@@ -1372,11 +1583,13 @@ var IngestionProposalService = class {
1372
1583
  delete output.provenance.missingFieldsCorrection;
1373
1584
  delete output.provenance.duplicatesRemoved;
1374
1585
  delete output.provenance.splitsDropped;
1586
+ delete output.provenance.unofferedTargetsDropped;
1375
1587
  output.warnings.push("output_limit");
1376
1588
  if (bytes(publication()) > maxBytes) return this.service.failAnalysis(lease, "limit");
1377
1589
  }
1378
1590
  await this.live(lease, expected.catalogDigest, output.offered, output.provenance.feedback);
1379
- return this.service.completeAnalysis(lease, publication());
1591
+ if (!failure || !capture) return this.service.completeAnalysis(lease, publication());
1592
+ return this.service[completeWithFailureCapture](lease, publication(), capture);
1380
1593
  }
1381
1594
  async decide(lease, output, input) {
1382
1595
  const configured = this.decision;
@@ -1682,6 +1895,6 @@ var IngestionProposalService = class {
1682
1895
  }
1683
1896
  };
1684
1897
  //#endregion
1685
- export { IngestionProposalService, createSDKProposalDecisionClient, createSDKProposalGenerator, proposalInstructions, proposalInstructionsFor, proposalReadConfiguration, reviewerGuidanceInstructions };
1898
+ export { FAILURE_CAPTURE_DEFAULT_MAX_BYTES, FAILURE_CAPTURE_MAX_BYTES, IngestionProposalService, createSDKProposalDecisionClient, createSDKProposalGenerator, proposalInstructions, proposalInstructionsFor, proposalReadConfiguration, reviewerGuidanceInstructions };
1686
1899
 
1687
1900
  //# sourceMappingURL=proposals.js.map