@adcp/sdk 15.3.0 → 15.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/lib/advanced.d.mts +2 -2
  2. package/dist/lib/advanced.d.ts +2 -2
  3. package/dist/lib/advanced.js +8 -2
  4. package/dist/lib/advanced.mjs +8 -2
  5. package/dist/lib/core/AgentClient.d.mts +4 -0
  6. package/dist/lib/core/AgentClient.d.ts +4 -0
  7. package/dist/lib/core/AgentClient.js +8 -0
  8. package/dist/lib/core/AgentClient.mjs +8 -0
  9. package/dist/lib/core/SingleAgentClient.d.mts +154 -0
  10. package/dist/lib/core/SingleAgentClient.d.ts +154 -0
  11. package/dist/lib/core/SingleAgentClient.js +661 -23
  12. package/dist/lib/core/SingleAgentClient.mjs +666 -23
  13. package/dist/lib/core/agent-discovery-cache.d.mts +103 -0
  14. package/dist/lib/core/agent-discovery-cache.d.ts +103 -0
  15. package/dist/lib/core/agent-discovery-cache.js +121 -0
  16. package/dist/lib/core/agent-discovery-cache.mjs +92 -0
  17. package/dist/lib/index.d.mts +5 -3
  18. package/dist/lib/index.d.ts +5 -3
  19. package/dist/lib/index.js +7 -0
  20. package/dist/lib/index.mjs +6 -0
  21. package/dist/lib/protocols/index.d.mts +2 -2
  22. package/dist/lib/protocols/index.d.ts +2 -2
  23. package/dist/lib/protocols/index.js +1 -1
  24. package/dist/lib/protocols/index.mjs +1 -1
  25. package/dist/lib/protocols/mcp-call-context.d.mts +109 -0
  26. package/dist/lib/protocols/mcp-call-context.d.ts +109 -0
  27. package/dist/lib/protocols/mcp-call-context.js +221 -0
  28. package/dist/lib/protocols/mcp-call-context.mjs +186 -0
  29. package/dist/lib/protocols/mcp-modern.d.mts +9 -1
  30. package/dist/lib/protocols/mcp-modern.d.ts +9 -1
  31. package/dist/lib/protocols/mcp-modern.js +180 -104
  32. package/dist/lib/protocols/mcp-modern.mjs +193 -104
  33. package/dist/lib/protocols/mcp-scope.d.mts +15 -0
  34. package/dist/lib/protocols/mcp-scope.d.ts +15 -0
  35. package/dist/lib/protocols/mcp.d.mts +4 -2
  36. package/dist/lib/protocols/mcp.d.ts +4 -2
  37. package/dist/lib/protocols/mcp.js +178 -154
  38. package/dist/lib/protocols/mcp.mjs +189 -153
  39. package/dist/lib/protocols/transportDiagnostics.d.mts +33 -1
  40. package/dist/lib/protocols/transportDiagnostics.d.ts +33 -1
  41. package/dist/lib/protocols/transportDiagnostics.js +128 -12
  42. package/dist/lib/protocols/transportDiagnostics.mjs +128 -12
  43. package/dist/lib/reporting/gcs/index.d.mts +2 -0
  44. package/dist/lib/reporting/gcs/index.d.ts +2 -0
  45. package/dist/lib/reporting/gcs/index.js +3 -0
  46. package/dist/lib/reporting/gcs/index.mjs +2 -0
  47. package/dist/lib/reporting/gcs/row-provider.d.mts +32 -0
  48. package/dist/lib/reporting/gcs/row-provider.d.ts +32 -0
  49. package/dist/lib/reporting/gcs/row-provider.js +205 -0
  50. package/dist/lib/reporting/gcs/row-provider.mjs +188 -0
  51. package/dist/lib/reporting/ledger/change-feed.d.mts +41 -0
  52. package/dist/lib/reporting/ledger/change-feed.d.ts +41 -0
  53. package/dist/lib/reporting/ledger/change-feed.js +101 -0
  54. package/dist/lib/reporting/ledger/change-feed.mjs +74 -0
  55. package/dist/lib/reporting/ledger/handler.d.mts +6 -0
  56. package/dist/lib/reporting/ledger/handler.d.ts +6 -0
  57. package/dist/lib/reporting/ledger/handler.js +51 -8
  58. package/dist/lib/reporting/ledger/handler.mjs +50 -8
  59. package/dist/lib/reporting/ledger/index.d.mts +5 -0
  60. package/dist/lib/reporting/ledger/index.d.ts +5 -0
  61. package/dist/lib/reporting/ledger/index.js +11 -1
  62. package/dist/lib/reporting/ledger/index.mjs +5 -0
  63. package/dist/lib/reporting/ledger/lifecycle.js +3 -2
  64. package/dist/lib/reporting/ledger/lifecycle.mjs +3 -2
  65. package/dist/lib/reporting/ledger/managed-postgres.d.mts +2 -0
  66. package/dist/lib/reporting/ledger/managed-postgres.d.ts +2 -0
  67. package/dist/lib/reporting/ledger/managed-postgres.js +26 -6
  68. package/dist/lib/reporting/ledger/managed-postgres.mjs +26 -6
  69. package/dist/lib/reporting/ledger/managed.d.mts +9 -0
  70. package/dist/lib/reporting/ledger/managed.d.ts +9 -0
  71. package/dist/lib/reporting/ledger/managed.js +18 -0
  72. package/dist/lib/reporting/ledger/managed.mjs +18 -0
  73. package/dist/lib/reporting/ledger/postgres.d.mts +179 -1
  74. package/dist/lib/reporting/ledger/postgres.d.ts +179 -1
  75. package/dist/lib/reporting/ledger/postgres.js +882 -19
  76. package/dist/lib/reporting/ledger/postgres.mjs +890 -19
  77. package/dist/lib/reporting/ledger/producer.js +13 -3
  78. package/dist/lib/reporting/ledger/producer.mjs +13 -3
  79. package/dist/lib/reporting/ledger/revision-metadata.d.mts +17 -0
  80. package/dist/lib/reporting/ledger/revision-metadata.d.ts +17 -0
  81. package/dist/lib/reporting/ledger/revision-metadata.js +71 -0
  82. package/dist/lib/reporting/ledger/revision-metadata.mjs +44 -0
  83. package/dist/lib/reporting/ledger/row-encoding.d.mts +128 -0
  84. package/dist/lib/reporting/ledger/row-encoding.d.ts +128 -0
  85. package/dist/lib/reporting/ledger/row-encoding.js +355 -0
  86. package/dist/lib/reporting/ledger/row-encoding.mjs +315 -0
  87. package/dist/lib/reporting/ledger/row-storage-errors.d.mts +7 -0
  88. package/dist/lib/reporting/ledger/row-storage-errors.d.ts +7 -0
  89. package/dist/lib/reporting/ledger/row-storage-errors.js +41 -0
  90. package/dist/lib/reporting/ledger/row-storage-errors.mjs +16 -0
  91. package/dist/lib/reporting/ledger/row-storage-migration.d.mts +41 -0
  92. package/dist/lib/reporting/ledger/row-storage-migration.d.ts +41 -0
  93. package/dist/lib/reporting/ledger/row-storage-migration.js +234 -0
  94. package/dist/lib/reporting/ledger/row-storage-migration.mjs +208 -0
  95. package/dist/lib/reporting/ledger/row-storage-object.d.mts +112 -0
  96. package/dist/lib/reporting/ledger/row-storage-object.d.ts +112 -0
  97. package/dist/lib/reporting/ledger/row-storage-object.js +281 -0
  98. package/dist/lib/reporting/ledger/row-storage-object.mjs +239 -0
  99. package/dist/lib/reporting/ledger/row-storage-provider-io.d.mts +51 -0
  100. package/dist/lib/reporting/ledger/row-storage-provider-io.d.ts +51 -0
  101. package/dist/lib/reporting/ledger/row-storage-provider-io.js +152 -0
  102. package/dist/lib/reporting/ledger/row-storage-provider-io.mjs +119 -0
  103. package/dist/lib/reporting/ledger/row-storage.d.mts +224 -0
  104. package/dist/lib/reporting/ledger/row-storage.d.ts +224 -0
  105. package/dist/lib/reporting/ledger/row-storage.js +692 -0
  106. package/dist/lib/reporting/ledger/row-storage.mjs +680 -0
  107. package/dist/lib/reporting/ledger/types.d.mts +45 -0
  108. package/dist/lib/reporting/ledger/types.d.ts +45 -0
  109. package/dist/lib/reporting/service/index.d.mts +41 -1
  110. package/dist/lib/reporting/service/index.d.ts +41 -1
  111. package/dist/lib/reporting/service/index.js +68 -1
  112. package/dist/lib/reporting/service/index.mjs +70 -1
  113. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  114. package/dist/lib/signing/agent-resolver/fetch-helpers.js +1 -1
  115. package/dist/lib/signing/agent-resolver/fetch-helpers.mjs +1 -1
  116. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  117. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  118. package/dist/lib/version.d.mts +3 -3
  119. package/dist/lib/version.d.ts +3 -3
  120. package/dist/lib/version.js +3 -3
  121. package/dist/lib/version.mjs +3 -3
  122. package/docs/README.md +1 -1
  123. package/docs/TYPE-SUMMARY.md +35 -2
  124. package/docs/guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md +142 -0
  125. package/docs/guides/EXISTING-PLATFORM.md +43 -12
  126. package/docs/guides/REPORTING-LEDGER.md +209 -0
  127. package/docs/llms.txt +4 -2
  128. package/docs/migration-14.x-rc-worksheet.md +4 -4
  129. package/docs/recipes/verifying-inbound-webhooks.md +8 -0
  130. package/package.json +1 -1
@@ -198,6 +198,21 @@ export interface ReportingLedgerAdjustmentV1 {
198
198
  }
199
199
  export type ReportingLedgerRevisionSnapshotV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
200
200
  export type ReportingLedgerRevisionMetadataV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
201
+ export type ReportingLedgerAdjustmentMetadataV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
+ export interface ReportingRevisionRowsReadV1 {
203
+ reporting_revision_id: string;
204
+ account_id: string;
205
+ /** Zero-based ordinal of the first row to return. */
206
+ offset: number;
207
+ /** Maximum rows to return; at least 1. */
208
+ limit: number;
209
+ signal?: AbortSignal;
210
+ }
211
+ export interface ReportingRevisionRowsPageV1 {
212
+ rows: Record<string, unknown>[];
213
+ /** Total rows in the revision. */
214
+ total: number;
215
+ }
201
216
  export type ReportingLedgerAdjustmentSnapshotV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
217
  export interface ReportingLedgerConsumerStatusV1 {
203
218
  consumerStatusId: string;
@@ -741,6 +756,14 @@ export interface ReportingLedgerStore {
741
756
  }>;
742
757
  getObligation(reporting_obligation_id: string, account_id?: string): Promise<ReportingLedgerObligationV1 | null>;
743
758
  listObligations(account_id?: string): Promise<ReportingLedgerObligationV1[]>;
759
+ /**
760
+ * Optional: periods whose ledger records were retired by retention. The
761
+ * planner treats them as already covered so it never re-creates them.
762
+ */
763
+ listRetiredObligationOrdinals?(account_id?: string): Promise<{
764
+ configurationId: string;
765
+ periodOrdinal: number;
766
+ }[]>;
744
767
  listLifecycleDueObligations(input: {
745
768
  ledgerAsOf: string;
746
769
  account_id?: string;
@@ -761,12 +784,34 @@ export interface ReportingLedgerStore {
761
784
  }>;
762
785
  /** Returns an exact row-bearing revision only when it belongs to the resolved account. */
763
786
  getRevision(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionV1 | null>;
787
+ /**
788
+ * Optional row-free counterpart of `getRevision`, scoped to the resolved
789
+ * account. Exact-read handlers prefer it so they never load every row to
790
+ * serve one page.
791
+ */
792
+ getRevisionMetadata?(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionMetadataV1 | null>;
793
+ /**
794
+ * Optional: one page of a revision's rows in ordinal order, only when the
795
+ * revision belongs to the resolved account. `total` is the revision's row
796
+ * count. Stores that keep rows outside the revision document verify every
797
+ * row they return against the committed binding before returning it.
798
+ */
799
+ readRevisionRows?(input: ReportingRevisionRowsReadV1): Promise<ReportingRevisionRowsPageV1 | null>;
764
800
  listRevisions(reporting_obligation_id: string): Promise<ReportingLedgerRevisionV1[]>;
801
+ /**
802
+ * Optional: every retained revision for one obligation without
803
+ * materializing rows. The producer, lifecycle reconciler and status ingest
804
+ * prefer it and otherwise fall back to `listRevisions` with rows dropped.
805
+ * When `account_id` is supplied, only that account's revisions are returned.
806
+ */
807
+ listRevisionMetadata?(reporting_obligation_id: string, account_id?: string): Promise<ReportingLedgerRevisionMetadataV1[]>;
765
808
  commitAdjustment(adjustment: ReportingLedgerAdjustmentV1, lease: ReportingLedgerLeaseV1): Promise<{
766
809
  inserted: boolean;
767
810
  value: ReportingLedgerAdjustmentV1;
768
811
  }>;
769
812
  listAdjustments(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentV1[]>;
813
+ /** Optional row-free counterpart of `listAdjustments`, preferred when present. */
814
+ listAdjustmentMetadata?(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentMetadataV1[]>;
770
815
  putConsumerStatus(status: ReportingLedgerConsumerStatusV1): Promise<{
771
816
  inserted: boolean;
772
817
  value: ReportingLedgerConsumerStatusV1;
@@ -198,6 +198,21 @@ export interface ReportingLedgerAdjustmentV1 {
198
198
  }
199
199
  export type ReportingLedgerRevisionSnapshotV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
200
200
  export type ReportingLedgerRevisionMetadataV1 = Omit<ReportingLedgerRevisionV1, 'rows'>;
201
+ export type ReportingLedgerAdjustmentMetadataV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
+ export interface ReportingRevisionRowsReadV1 {
203
+ reporting_revision_id: string;
204
+ account_id: string;
205
+ /** Zero-based ordinal of the first row to return. */
206
+ offset: number;
207
+ /** Maximum rows to return; at least 1. */
208
+ limit: number;
209
+ signal?: AbortSignal;
210
+ }
211
+ export interface ReportingRevisionRowsPageV1 {
212
+ rows: Record<string, unknown>[];
213
+ /** Total rows in the revision. */
214
+ total: number;
215
+ }
201
216
  export type ReportingLedgerAdjustmentSnapshotV1 = Omit<ReportingLedgerAdjustmentV1, 'rows'>;
202
217
  export interface ReportingLedgerConsumerStatusV1 {
203
218
  consumerStatusId: string;
@@ -741,6 +756,14 @@ export interface ReportingLedgerStore {
741
756
  }>;
742
757
  getObligation(reporting_obligation_id: string, account_id?: string): Promise<ReportingLedgerObligationV1 | null>;
743
758
  listObligations(account_id?: string): Promise<ReportingLedgerObligationV1[]>;
759
+ /**
760
+ * Optional: periods whose ledger records were retired by retention. The
761
+ * planner treats them as already covered so it never re-creates them.
762
+ */
763
+ listRetiredObligationOrdinals?(account_id?: string): Promise<{
764
+ configurationId: string;
765
+ periodOrdinal: number;
766
+ }[]>;
744
767
  listLifecycleDueObligations(input: {
745
768
  ledgerAsOf: string;
746
769
  account_id?: string;
@@ -761,12 +784,34 @@ export interface ReportingLedgerStore {
761
784
  }>;
762
785
  /** Returns an exact row-bearing revision only when it belongs to the resolved account. */
763
786
  getRevision(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionV1 | null>;
787
+ /**
788
+ * Optional row-free counterpart of `getRevision`, scoped to the resolved
789
+ * account. Exact-read handlers prefer it so they never load every row to
790
+ * serve one page.
791
+ */
792
+ getRevisionMetadata?(reporting_revision_id: string, account_id: string): Promise<ReportingLedgerRevisionMetadataV1 | null>;
793
+ /**
794
+ * Optional: one page of a revision's rows in ordinal order, only when the
795
+ * revision belongs to the resolved account. `total` is the revision's row
796
+ * count. Stores that keep rows outside the revision document verify every
797
+ * row they return against the committed binding before returning it.
798
+ */
799
+ readRevisionRows?(input: ReportingRevisionRowsReadV1): Promise<ReportingRevisionRowsPageV1 | null>;
764
800
  listRevisions(reporting_obligation_id: string): Promise<ReportingLedgerRevisionV1[]>;
801
+ /**
802
+ * Optional: every retained revision for one obligation without
803
+ * materializing rows. The producer, lifecycle reconciler and status ingest
804
+ * prefer it and otherwise fall back to `listRevisions` with rows dropped.
805
+ * When `account_id` is supplied, only that account's revisions are returned.
806
+ */
807
+ listRevisionMetadata?(reporting_obligation_id: string, account_id?: string): Promise<ReportingLedgerRevisionMetadataV1[]>;
765
808
  commitAdjustment(adjustment: ReportingLedgerAdjustmentV1, lease: ReportingLedgerLeaseV1): Promise<{
766
809
  inserted: boolean;
767
810
  value: ReportingLedgerAdjustmentV1;
768
811
  }>;
769
812
  listAdjustments(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentV1[]>;
813
+ /** Optional row-free counterpart of `listAdjustments`, preferred when present. */
814
+ listAdjustmentMetadata?(reporting_obligation_id: string): Promise<ReportingLedgerAdjustmentMetadataV1[]>;
770
815
  putConsumerStatus(status: ReportingLedgerConsumerStatusV1): Promise<{
771
816
  inserted: boolean;
772
817
  value: ReportingLedgerConsumerStatusV1;
@@ -4,7 +4,7 @@ import type { DecisioningPlatform } from '../../server/decisioning/platform.mjs'
4
4
  import type { ReliableReportingPlatform } from '../../server/decisioning/specialisms/reporting.mjs';
5
5
  import type { ReportingDeliveryCapabilities, ReportingDeliveryOffering } from '../../types/tools.generated.mjs';
6
6
  import { type CreatePostgresPersistentNotificationRuntimeOptions, type PostgresPersistentNotificationRuntime } from '../../server/notification-subscriptions/index.mjs';
7
- import { REPORTING_LEDGER_MIGRATION, PostgresReportingLedgerStore, PostgresReportingManagedDeliveryStore, type CreateReportingProducerOptionsV1, type ReportingConsumerMismatchEscalationV1, type ReportingLedgerConfigurationV1, type ReportingLedgerStore, type ReportingProducerContactV1, type ReportingProducerV1, type ReportingManagedDeliveryAdapterV1, type ReportingManagedDeliveryRuntimeV1, type PostgresReportingManagedDeliveryStoreOptions, type PostgresReportingNotificationActivityOptions, type PostgresReportingNotificationActivityRuntime, type ReportingPgPool, type ReportingSourceWithReaderV1 } from '../ledger/index.mjs';
7
+ import { REPORTING_LEDGER_MIGRATION, PostgresReportingLedgerStore, PostgresReportingManagedDeliveryStore, type CreateReportingProducerOptionsV1, type ReportingConsumerMismatchEscalationV1, type ReportingLedgerConfigurationV1, type ReportingLedgerStore, type ReportingProducerContactV1, type ReportingProducerV1, type ReportingManagedDeliveryAdapterV1, type ReportingManagedDeliveryRuntimeV1, type PostgresReportingManagedDeliveryStoreOptions, type PostgresReportingNotificationActivityOptions, type PostgresReportingNotificationActivityRuntime, type ReportingPgPool, type ReportingRowStorageOptionsV1, type ReportingSourceWithReaderV1 } from '../ledger/index.mjs';
8
8
  import { type PostgresReportingWebhookActivityV1 } from '../webhook-activity.mjs';
9
9
  import type { InlineReportingReplayRetentionV1 } from '../source/index.mjs';
10
10
  import { type InlineReportingDeliveryFetchV1, type ReportingSourceOfferingV1 } from '../source/index.mjs';
@@ -196,6 +196,35 @@ export type CreatePostgresReliableReportingProductionServiceOptionsV1<TCtxMeta =
196
196
  publisherScope: string;
197
197
  /** Explicit acknowledgement required by the authoritative Core store. */
198
198
  acknowledgeIsolatedDatabase: true;
199
+ /**
200
+ * Store new revision rows as verified canonical JSONL chunks. Adds
201
+ * `REPORTING_ROW_STORAGE_MIGRATION` (PostgreSQL 13+) to `setup.migrations`
202
+ * and probes it before publishing capabilities.
203
+ */
204
+ rowStorage?: boolean | ReportingRowStorageOptionsV1;
205
+ /**
206
+ * Opt in to period-aligned retention. Each scheduler pass retires whole
207
+ * periods once `max(statusRetentionDays, recordRetentionDays)` has elapsed
208
+ * since both the period end and its latest publication, deleting their
209
+ * rows and ledger records and leaving a tombstone. Abandoned row uploads
210
+ * and expired cursor snapshots are always swept.
211
+ */
212
+ retention?: {
213
+ enabled: true;
214
+ recordRetentionDays?: number;
215
+ limit?: number;
216
+ };
217
+ /**
218
+ * Maintain the host change feed (`changesAfter`, `getCurrentRevision`,
219
+ * `listCurrentRevisions` on `stores.core`). Adds
220
+ * `REPORTING_LEDGER_CHANGES_MIGRATION` (PostgreSQL 13+); the scheduler prunes
221
+ * changes older than `changeRetentionDays` (default 30) unless a registered
222
+ * consumer updated within `maxFeedHoldDays` (default 7) still needs them.
223
+ */
224
+ changeFeed?: boolean | {
225
+ changeRetentionDays?: number;
226
+ maxFeedHoldDays?: number;
227
+ };
199
228
  notifications: ProductionNotificationOptions;
200
229
  managedDelivery: {
201
230
  adapter: ReportingManagedDeliveryAdapterV1;
@@ -273,3 +302,14 @@ export interface PostgresReliableReportingProductionServiceV1<TCtxMeta = Record<
273
302
  */
274
303
  export declare function createPostgresReliableReportingProductionService<TCtxMeta = Record<string, unknown>>(options: CreatePostgresReliableReportingProductionServiceOptionsV1<TCtxMeta>): Promise<PostgresReliableReportingProductionServiceV1<TCtxMeta>>;
275
304
  export * from './conformance.mjs';
305
+ /**
306
+ * A scheduled maintenance pass completed but could not process some items
307
+ * (for example, a retention period whose objects could not be deleted). The
308
+ * pass resumes them next time; repeated reports need operator attention.
309
+ */
310
+ export declare class ReportingMaintenancePartialFailureError extends Error {
311
+ readonly task: string;
312
+ readonly failedCount: number;
313
+ readonly failedIds: readonly string[];
314
+ constructor(task: string, failedCount: number, failedIds: readonly string[]);
315
+ }
@@ -4,7 +4,7 @@ import type { DecisioningPlatform } from '../../server/decisioning/platform';
4
4
  import type { ReliableReportingPlatform } from '../../server/decisioning/specialisms/reporting';
5
5
  import type { ReportingDeliveryCapabilities, ReportingDeliveryOffering } from '../../types/tools.generated';
6
6
  import { type CreatePostgresPersistentNotificationRuntimeOptions, type PostgresPersistentNotificationRuntime } from '../../server/notification-subscriptions';
7
- import { REPORTING_LEDGER_MIGRATION, PostgresReportingLedgerStore, PostgresReportingManagedDeliveryStore, type CreateReportingProducerOptionsV1, type ReportingConsumerMismatchEscalationV1, type ReportingLedgerConfigurationV1, type ReportingLedgerStore, type ReportingProducerContactV1, type ReportingProducerV1, type ReportingManagedDeliveryAdapterV1, type ReportingManagedDeliveryRuntimeV1, type PostgresReportingManagedDeliveryStoreOptions, type PostgresReportingNotificationActivityOptions, type PostgresReportingNotificationActivityRuntime, type ReportingPgPool, type ReportingSourceWithReaderV1 } from '../ledger';
7
+ import { REPORTING_LEDGER_MIGRATION, PostgresReportingLedgerStore, PostgresReportingManagedDeliveryStore, type CreateReportingProducerOptionsV1, type ReportingConsumerMismatchEscalationV1, type ReportingLedgerConfigurationV1, type ReportingLedgerStore, type ReportingProducerContactV1, type ReportingProducerV1, type ReportingManagedDeliveryAdapterV1, type ReportingManagedDeliveryRuntimeV1, type PostgresReportingManagedDeliveryStoreOptions, type PostgresReportingNotificationActivityOptions, type PostgresReportingNotificationActivityRuntime, type ReportingPgPool, type ReportingRowStorageOptionsV1, type ReportingSourceWithReaderV1 } from '../ledger';
8
8
  import { type PostgresReportingWebhookActivityV1 } from '../webhook-activity';
9
9
  import type { InlineReportingReplayRetentionV1 } from '../source';
10
10
  import { type InlineReportingDeliveryFetchV1, type ReportingSourceOfferingV1 } from '../source';
@@ -196,6 +196,35 @@ export type CreatePostgresReliableReportingProductionServiceOptionsV1<TCtxMeta =
196
196
  publisherScope: string;
197
197
  /** Explicit acknowledgement required by the authoritative Core store. */
198
198
  acknowledgeIsolatedDatabase: true;
199
+ /**
200
+ * Store new revision rows as verified canonical JSONL chunks. Adds
201
+ * `REPORTING_ROW_STORAGE_MIGRATION` (PostgreSQL 13+) to `setup.migrations`
202
+ * and probes it before publishing capabilities.
203
+ */
204
+ rowStorage?: boolean | ReportingRowStorageOptionsV1;
205
+ /**
206
+ * Opt in to period-aligned retention. Each scheduler pass retires whole
207
+ * periods once `max(statusRetentionDays, recordRetentionDays)` has elapsed
208
+ * since both the period end and its latest publication, deleting their
209
+ * rows and ledger records and leaving a tombstone. Abandoned row uploads
210
+ * and expired cursor snapshots are always swept.
211
+ */
212
+ retention?: {
213
+ enabled: true;
214
+ recordRetentionDays?: number;
215
+ limit?: number;
216
+ };
217
+ /**
218
+ * Maintain the host change feed (`changesAfter`, `getCurrentRevision`,
219
+ * `listCurrentRevisions` on `stores.core`). Adds
220
+ * `REPORTING_LEDGER_CHANGES_MIGRATION` (PostgreSQL 13+); the scheduler prunes
221
+ * changes older than `changeRetentionDays` (default 30) unless a registered
222
+ * consumer updated within `maxFeedHoldDays` (default 7) still needs them.
223
+ */
224
+ changeFeed?: boolean | {
225
+ changeRetentionDays?: number;
226
+ maxFeedHoldDays?: number;
227
+ };
199
228
  notifications: ProductionNotificationOptions;
200
229
  managedDelivery: {
201
230
  adapter: ReportingManagedDeliveryAdapterV1;
@@ -273,3 +302,14 @@ export interface PostgresReliableReportingProductionServiceV1<TCtxMeta = Record<
273
302
  */
274
303
  export declare function createPostgresReliableReportingProductionService<TCtxMeta = Record<string, unknown>>(options: CreatePostgresReliableReportingProductionServiceOptionsV1<TCtxMeta>): Promise<PostgresReliableReportingProductionServiceV1<TCtxMeta>>;
275
304
  export * from './conformance';
305
+ /**
306
+ * A scheduled maintenance pass completed but could not process some items
307
+ * (for example, a retention period whose objects could not be deleted). The
308
+ * pass resumes them next time; repeated reports need operator attention.
309
+ */
310
+ export declare class ReportingMaintenancePartialFailureError extends Error {
311
+ readonly task: string;
312
+ readonly failedCount: number;
313
+ readonly failedIds: readonly string[];
314
+ constructor(task: string, failedCount: number, failedIds: readonly string[]);
315
+ }
@@ -19,6 +19,7 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
20
  var service_exports = {};
21
21
  __export(service_exports, {
22
+ ReportingMaintenancePartialFailureError: () => ReportingMaintenancePartialFailureError,
22
23
  createPostgresReliableReportingProductionService: () => createPostgresReliableReportingProductionService,
23
24
  createReliableReportingService: () => createReliableReportingService
24
25
  });
@@ -369,7 +370,9 @@ async function createPostgresReliableReportingProductionService(options) {
369
370
  managedDelivery: true,
370
371
  ...options.obligatedConsumers ? { obligatedConsumers: options.obligatedConsumers } : {},
371
372
  ...options.consumerMismatchEscalation ? { consumerMismatchEscalation: options.consumerMismatchEscalation } : {},
372
- notificationActivityPort: notificationActivity.port
373
+ notificationActivityPort: notificationActivity.port,
374
+ ...options.rowStorage ? { rowStorage: options.rowStorage } : {},
375
+ ...options.changeFeed ? { changeFeed: true } : {}
373
376
  });
374
377
  const managedStore = new import_ledger.PostgresReportingManagedDeliveryStore(options.db, {
375
378
  ...options.managedDelivery.store,
@@ -385,12 +388,15 @@ async function createPostgresReliableReportingProductionService(options) {
385
388
  const core = createReliableReportingService(coreOptions);
386
389
  const migrations = Object.freeze([
387
390
  import_ledger.REPORTING_LEDGER_MIGRATION,
391
+ ...options.rowStorage ? [import_ledger.REPORTING_ROW_STORAGE_MIGRATION] : [],
392
+ ...options.changeFeed ? [import_ledger.REPORTING_LEDGER_CHANGES_MIGRATION] : [],
388
393
  import_ledger.REPORTING_MANAGED_DELIVERY_MIGRATION,
389
394
  ...notifications.migrations.all,
390
395
  ...notificationActivity.migrations.all,
391
396
  ...webhookActivity.migrations.all
392
397
  ]);
393
398
  await options.applyMigrations?.(migrations);
399
+ await coreStore.readyRowStorage();
394
400
  await notifications.probe();
395
401
  await notificationActivity.probe();
396
402
  await webhookActivity.probe();
@@ -500,6 +506,52 @@ async function createPostgresReliableReportingProductionService(options) {
500
506
  for (const result of pruneResults) {
501
507
  if (result.status === "rejected" && !signal.aborted) await reportAuxiliaryError(scheduler, result.reason);
502
508
  }
509
+ const ledgerMaintenance = [
510
+ ["snapshot sweep", (0, import_ledger.sweepExpiredReportingLedgerState)(options.db, 1e3)],
511
+ ["row upload sweep", coreStore.sweepRowWriteIntents({ limit: 100, signal })],
512
+ ...options.changeFeed ? [
513
+ [
514
+ "change-feed pruning",
515
+ coreStore.pruneChanges(
516
+ typeof options.changeFeed === "object" ? {
517
+ ...options.changeFeed.changeRetentionDays !== void 0 ? { changeRetentionDays: options.changeFeed.changeRetentionDays } : {},
518
+ ...options.changeFeed.maxFeedHoldDays !== void 0 ? { maxFeedHoldDays: options.changeFeed.maxFeedHoldDays } : {}
519
+ } : {}
520
+ )
521
+ ]
522
+ ] : [],
523
+ ...options.retention?.enabled ? [
524
+ [
525
+ "retention",
526
+ coreStore.retireExpiredPeriods({
527
+ statusRetentionDays: options.statusRetentionDays,
528
+ ...options.retention.recordRetentionDays !== void 0 ? { recordRetentionDays: options.retention.recordRetentionDays } : {},
529
+ limit: options.retention.limit ?? 100,
530
+ signal
531
+ })
532
+ ]
533
+ ] : []
534
+ ];
535
+ const maintenanceResults = await Promise.allSettled(ledgerMaintenance.map(([, task]) => task));
536
+ for (const [index, result] of maintenanceResults.entries()) {
537
+ const name = ledgerMaintenance[index][0];
538
+ if (result.status === "rejected") {
539
+ if (!signal.aborted) await reportAuxiliaryError(scheduler, result.reason);
540
+ continue;
541
+ }
542
+ const value = result.value;
543
+ const failed = Array.isArray(value?.failed) ? value.failed.length : typeof value?.failed === "number" ? value.failed : 0;
544
+ if (failed > 0 && !signal.aborted) {
545
+ await reportAuxiliaryError(
546
+ scheduler,
547
+ new ReportingMaintenancePartialFailureError(
548
+ name,
549
+ failed,
550
+ value?.failures?.length ? value.failures.map((entry) => `${entry.reporting_obligation_id} (${entry.cause})`) : Array.isArray(value?.failed) ? value.failed : []
551
+ )
552
+ );
553
+ }
554
+ }
503
555
  const accountIds = rotate(await deploymentWideAccountIds(coreStore), auxiliaryRotation);
504
556
  auxiliaryRotation += 1;
505
557
  for (const accountId of accountIds) {
@@ -1147,8 +1199,23 @@ function deepFreeze(value) {
1147
1199
  }
1148
1200
  return value;
1149
1201
  }
1202
+ class ReportingMaintenancePartialFailureError extends Error {
1203
+ constructor(task, failedCount, failedIds) {
1204
+ super(
1205
+ `Reporting ${task} could not process ${failedCount} item(s)${failedIds.length ? `: ${failedIds.slice(0, 20).join(", ")}` : ""}`
1206
+ );
1207
+ this.task = task;
1208
+ this.failedCount = failedCount;
1209
+ this.failedIds = failedIds;
1210
+ this.name = "ReportingMaintenancePartialFailureError";
1211
+ }
1212
+ task;
1213
+ failedCount;
1214
+ failedIds;
1215
+ }
1150
1216
  // Annotate the CommonJS export names for ESM import in node:
1151
1217
  0 && (module.exports = {
1218
+ ReportingMaintenancePartialFailureError,
1152
1219
  createPostgresReliableReportingProductionService,
1153
1220
  createReliableReportingService,
1154
1221
  ...require('./conformance.js')
@@ -8,7 +8,10 @@ import {
8
8
  import {
9
9
  REPORTING_LEDGER_MIGRATION,
10
10
  REPORTING_MANAGED_DELIVERY_MIGRATION,
11
+ REPORTING_ROW_STORAGE_MIGRATION,
12
+ REPORTING_LEDGER_CHANGES_MIGRATION,
11
13
  PostgresReportingLedgerStore,
14
+ sweepExpiredReportingLedgerState,
12
15
  PostgresReportingManagedDeliveryStore,
13
16
  createPostgresReportingNotificationActivityRuntime,
14
17
  createPostgresReportingNotificationAttemptCheckpoint,
@@ -376,7 +379,9 @@ async function createPostgresReliableReportingProductionService(options) {
376
379
  managedDelivery: true,
377
380
  ...options.obligatedConsumers ? { obligatedConsumers: options.obligatedConsumers } : {},
378
381
  ...options.consumerMismatchEscalation ? { consumerMismatchEscalation: options.consumerMismatchEscalation } : {},
379
- notificationActivityPort: notificationActivity.port
382
+ notificationActivityPort: notificationActivity.port,
383
+ ...options.rowStorage ? { rowStorage: options.rowStorage } : {},
384
+ ...options.changeFeed ? { changeFeed: true } : {}
380
385
  });
381
386
  const managedStore = new PostgresReportingManagedDeliveryStore(options.db, {
382
387
  ...options.managedDelivery.store,
@@ -392,12 +397,15 @@ async function createPostgresReliableReportingProductionService(options) {
392
397
  const core = createReliableReportingService(coreOptions);
393
398
  const migrations = Object.freeze([
394
399
  REPORTING_LEDGER_MIGRATION,
400
+ ...options.rowStorage ? [REPORTING_ROW_STORAGE_MIGRATION] : [],
401
+ ...options.changeFeed ? [REPORTING_LEDGER_CHANGES_MIGRATION] : [],
395
402
  REPORTING_MANAGED_DELIVERY_MIGRATION,
396
403
  ...notifications.migrations.all,
397
404
  ...notificationActivity.migrations.all,
398
405
  ...webhookActivity.migrations.all
399
406
  ]);
400
407
  await options.applyMigrations?.(migrations);
408
+ await coreStore.readyRowStorage();
401
409
  await notifications.probe();
402
410
  await notificationActivity.probe();
403
411
  await webhookActivity.probe();
@@ -507,6 +515,52 @@ async function createPostgresReliableReportingProductionService(options) {
507
515
  for (const result of pruneResults) {
508
516
  if (result.status === "rejected" && !signal.aborted) await reportAuxiliaryError(scheduler, result.reason);
509
517
  }
518
+ const ledgerMaintenance = [
519
+ ["snapshot sweep", sweepExpiredReportingLedgerState(options.db, 1e3)],
520
+ ["row upload sweep", coreStore.sweepRowWriteIntents({ limit: 100, signal })],
521
+ ...options.changeFeed ? [
522
+ [
523
+ "change-feed pruning",
524
+ coreStore.pruneChanges(
525
+ typeof options.changeFeed === "object" ? {
526
+ ...options.changeFeed.changeRetentionDays !== void 0 ? { changeRetentionDays: options.changeFeed.changeRetentionDays } : {},
527
+ ...options.changeFeed.maxFeedHoldDays !== void 0 ? { maxFeedHoldDays: options.changeFeed.maxFeedHoldDays } : {}
528
+ } : {}
529
+ )
530
+ ]
531
+ ] : [],
532
+ ...options.retention?.enabled ? [
533
+ [
534
+ "retention",
535
+ coreStore.retireExpiredPeriods({
536
+ statusRetentionDays: options.statusRetentionDays,
537
+ ...options.retention.recordRetentionDays !== void 0 ? { recordRetentionDays: options.retention.recordRetentionDays } : {},
538
+ limit: options.retention.limit ?? 100,
539
+ signal
540
+ })
541
+ ]
542
+ ] : []
543
+ ];
544
+ const maintenanceResults = await Promise.allSettled(ledgerMaintenance.map(([, task]) => task));
545
+ for (const [index, result] of maintenanceResults.entries()) {
546
+ const name = ledgerMaintenance[index][0];
547
+ if (result.status === "rejected") {
548
+ if (!signal.aborted) await reportAuxiliaryError(scheduler, result.reason);
549
+ continue;
550
+ }
551
+ const value = result.value;
552
+ const failed = Array.isArray(value?.failed) ? value.failed.length : typeof value?.failed === "number" ? value.failed : 0;
553
+ if (failed > 0 && !signal.aborted) {
554
+ await reportAuxiliaryError(
555
+ scheduler,
556
+ new ReportingMaintenancePartialFailureError(
557
+ name,
558
+ failed,
559
+ value?.failures?.length ? value.failures.map((entry) => `${entry.reporting_obligation_id} (${entry.cause})`) : Array.isArray(value?.failed) ? value.failed : []
560
+ )
561
+ );
562
+ }
563
+ }
510
564
  const accountIds = rotate(await deploymentWideAccountIds(coreStore), auxiliaryRotation);
511
565
  auxiliaryRotation += 1;
512
566
  for (const accountId of accountIds) {
@@ -1155,7 +1209,22 @@ function deepFreeze(value) {
1155
1209
  return value;
1156
1210
  }
1157
1211
  export * from "./conformance.mjs";
1212
+ class ReportingMaintenancePartialFailureError extends Error {
1213
+ constructor(task, failedCount, failedIds) {
1214
+ super(
1215
+ `Reporting ${task} could not process ${failedCount} item(s)${failedIds.length ? `: ${failedIds.slice(0, 20).join(", ")}` : ""}`
1216
+ );
1217
+ this.task = task;
1218
+ this.failedCount = failedCount;
1219
+ this.failedIds = failedIds;
1220
+ this.name = "ReportingMaintenancePartialFailureError";
1221
+ }
1222
+ task;
1223
+ failedCount;
1224
+ failedIds;
1225
+ }
1158
1226
  export {
1227
+ ReportingMaintenancePartialFailureError,
1159
1228
  createPostgresReliableReportingProductionService,
1160
1229
  createReliableReportingService
1161
1230
  };
@@ -4,5 +4,5 @@
4
4
  "source_sha": "4e553ad955f83b49c7d221ab5c3ff78237ad02e3",
5
5
  "source_tarball_sha256": "580656d6466ef9f0d1119985e6726c2efea718dc671e2ad30957fcb2fd54af0f",
6
6
  "upstream_adcp_version": "2.5.3",
7
- "synced_at": "2026-10-08T14:21:02.333Z"
7
+ "synced_at": "2026-10-09T05:22:53.040Z"
8
8
  }
@@ -118,7 +118,7 @@ function classifyDiscoveryFailure(error) {
118
118
  return { dns_error: "fetch_failed" };
119
119
  }
120
120
  function isPermanentDiscoveryFailure(detail) {
121
- return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500;
121
+ return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500 && detail.http_status !== 408 && detail.http_status !== 429;
122
122
  }
123
123
  // Annotate the CommonJS export names for ESM import in node:
124
124
  0 && (module.exports = {
@@ -91,7 +91,7 @@ function classifyDiscoveryFailure(error) {
91
91
  return { dns_error: "fetch_failed" };
92
92
  }
93
93
  function isPermanentDiscoveryFailure(detail) {
94
- return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500;
94
+ return detail.dns_error === "ssrf_refused" || detail.http_status !== void 0 && detail.http_status >= 400 && detail.http_status < 500 && detail.http_status !== 408 && detail.http_status !== 429;
95
95
  }
96
96
  export {
97
97
  DEFAULT_CONNECT_TIMEOUT_MS,
@@ -197,7 +197,7 @@ export interface UpstreamTrafficQueryResult {
197
197
  */
198
198
  export declare function runValidations(validations: StoryboardValidation[], context: ValidationContext): ValidationResult[];
199
199
  /** Capability semver emitted in run summaries and used for advisory expiry. */
200
- export declare const RUNNER_CAPABILITY_VERSION = "15.3.0";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "15.5.0";
201
201
  /** True when a failed validation contributes to the owning step's grade. */
202
202
  export declare function validationFailsStep(result: ValidationResult): boolean;
203
203
  /**
@@ -197,7 +197,7 @@ export interface UpstreamTrafficQueryResult {
197
197
  */
198
198
  export declare function runValidations(validations: StoryboardValidation[], context: ValidationContext): ValidationResult[];
199
199
  /** Capability semver emitted in run summaries and used for advisory expiry. */
200
- export declare const RUNNER_CAPABILITY_VERSION = "15.3.0";
200
+ export declare const RUNNER_CAPABILITY_VERSION = "15.5.0";
201
201
  /** True when a failed validation contributes to the owning step's grade. */
202
202
  export declare function validationFailsStep(result: ValidationResult): boolean;
203
203
  /**
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "15.3.0";
4
+ export declare const LIBRARY_VERSION = "15.5.0";
5
5
  /**
6
6
  * AdCP specification version this library is built for
7
7
  */
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
33
33
  * Full version information
34
34
  */
35
35
  export declare const VERSION_INFO: {
36
- readonly library: "15.3.0";
36
+ readonly library: "15.5.0";
37
37
  readonly adcp: "3.2.3";
38
38
  readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0", "3.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "3.0.16", "3.0.17", "3.0.18", "3.0.19", "3.0.20", "3.0.21", "3.0.22", "3.0.23", "3.0.24", "3.0.25", "3.1.0", "3.1", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.1.14", "3.1.15", "3.1.16", "3.1.17", "3.1.18", "3.1.19", "3.1.20", "3.1.21", "3.1.22", "3.1.23", "3.1.24", "3.2.1", "3.2", "3.2.2", "3.2.3"];
39
- readonly generatedAt: "2026-10-08T13:30:50.878Z";
39
+ readonly generatedAt: "2026-10-09T04:52:03.760Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "15.3.0";
4
+ export declare const LIBRARY_VERSION = "15.5.0";
5
5
  /**
6
6
  * AdCP specification version this library is built for
7
7
  */
@@ -33,10 +33,10 @@ export type AdcpVersion = (typeof COMPATIBLE_ADCP_VERSIONS)[number];
33
33
  * Full version information
34
34
  */
35
35
  export declare const VERSION_INFO: {
36
- readonly library: "15.3.0";
36
+ readonly library: "15.5.0";
37
37
  readonly adcp: "3.2.3";
38
38
  readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0", "3.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.7", "3.0.8", "3.0.9", "3.0.10", "3.0.11", "3.0.12", "3.0.13", "3.0.14", "3.0.15", "3.0.16", "3.0.17", "3.0.18", "3.0.19", "3.0.20", "3.0.21", "3.0.22", "3.0.23", "3.0.24", "3.0.25", "3.1.0", "3.1", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.1.7", "3.1.8", "3.1.9", "3.1.10", "3.1.11", "3.1.12", "3.1.13", "3.1.14", "3.1.15", "3.1.16", "3.1.17", "3.1.18", "3.1.19", "3.1.20", "3.1.21", "3.1.22", "3.1.23", "3.1.24", "3.2.1", "3.2", "3.2.2", "3.2.3"];
39
- readonly generatedAt: "2026-10-08T13:30:50.878Z";
39
+ readonly generatedAt: "2026-10-09T04:52:03.760Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -31,7 +31,7 @@ __export(version_exports, {
31
31
  toReleasePrecisionVersion: () => toReleasePrecisionVersion
32
32
  });
33
33
  module.exports = __toCommonJS(version_exports);
34
- const LIBRARY_VERSION = "15.3.0";
34
+ const LIBRARY_VERSION = "15.5.0";
35
35
  const ADCP_VERSION = "3.2.3";
36
36
  const ADCP_MAJOR_VERSION = 3;
37
37
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -97,10 +97,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
97
97
  "3.2.3"
98
98
  ];
99
99
  const VERSION_INFO = {
100
- library: "15.3.0",
100
+ library: "15.5.0",
101
101
  adcp: "3.2.3",
102
102
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
103
- generatedAt: "2026-10-08T13:30:50.878Z"
103
+ generatedAt: "2026-10-09T04:52:03.760Z"
104
104
  };
105
105
  function getAdcpVersion() {
106
106
  return ADCP_VERSION;
@@ -1,4 +1,4 @@
1
- const LIBRARY_VERSION = "15.3.0";
1
+ const LIBRARY_VERSION = "15.5.0";
2
2
  const ADCP_VERSION = "3.2.3";
3
3
  const ADCP_MAJOR_VERSION = 3;
4
4
  const COMPATIBLE_ADCP_VERSIONS = [
@@ -64,10 +64,10 @@ const COMPATIBLE_ADCP_VERSIONS = [
64
64
  "3.2.3"
65
65
  ];
66
66
  const VERSION_INFO = {
67
- library: "15.3.0",
67
+ library: "15.5.0",
68
68
  adcp: "3.2.3",
69
69
  compatibleVersions: COMPATIBLE_ADCP_VERSIONS,
70
- generatedAt: "2026-10-08T13:30:50.878Z"
70
+ generatedAt: "2026-10-09T04:52:03.760Z"
71
71
  };
72
72
  function getAdcpVersion() {
73
73
  return ADCP_VERSION;
package/docs/README.md CHANGED
@@ -23,7 +23,7 @@ list_products → buy_products → control_media_buy
23
23
 
24
24
  Use the [buyer quick start](./guides/BUYER-QUICKSTART-3.2.md). For the complete
25
25
  tool and type inventory, use [llms.txt](./llms.txt) and the
26
- [type summary](./TYPE-SUMMARY.md).
26
+ [type summary](./TYPE-SUMMARY.md). For server-side callers that create a client per request, see [discovery caching and MCP session reuse](./guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md).
27
27
 
28
28
  ## Upgrade from SDK 14.0
29
29