@adcp/sdk 7.2.0 → 7.4.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 (96) hide show
  1. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  2. package/dist/lib/core/SingleAgentClient.d.ts +58 -14
  3. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  4. package/dist/lib/core/SingleAgentClient.js +68 -26
  5. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  6. package/dist/lib/errors/index.d.ts +8 -3
  7. package/dist/lib/errors/index.d.ts.map +1 -1
  8. package/dist/lib/errors/index.js +1 -1
  9. package/dist/lib/errors/index.js.map +1 -1
  10. package/dist/lib/index.d.ts +2 -2
  11. package/dist/lib/index.d.ts.map +1 -1
  12. package/dist/lib/index.js.map +1 -1
  13. package/dist/lib/protocols/index.d.ts +16 -6
  14. package/dist/lib/protocols/index.d.ts.map +1 -1
  15. package/dist/lib/protocols/index.js.map +1 -1
  16. package/dist/lib/protocols/responseSizeLimit.js +7 -0
  17. package/dist/lib/protocols/responseSizeLimit.js.map +1 -1
  18. package/dist/lib/registry/index.d.ts +36 -3
  19. package/dist/lib/registry/index.d.ts.map +1 -1
  20. package/dist/lib/registry/index.js +41 -5
  21. package/dist/lib/registry/index.js.map +1 -1
  22. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  23. package/dist/lib/server/create-adcp-server.d.ts +95 -0
  24. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  25. package/dist/lib/server/create-adcp-server.js +543 -35
  26. package/dist/lib/server/create-adcp-server.js.map +1 -1
  27. package/dist/lib/server/example-tld-guard.d.ts +9 -0
  28. package/dist/lib/server/example-tld-guard.d.ts.map +1 -0
  29. package/dist/lib/server/example-tld-guard.js +25 -0
  30. package/dist/lib/server/example-tld-guard.js.map +1 -0
  31. package/dist/lib/server/idempotency/store.d.ts +6 -5
  32. package/dist/lib/server/idempotency/store.d.ts.map +1 -1
  33. package/dist/lib/server/idempotency/store.js +11 -14
  34. package/dist/lib/server/idempotency/store.js.map +1 -1
  35. package/dist/lib/server/index.d.ts +5 -3
  36. package/dist/lib/server/index.d.ts.map +1 -1
  37. package/dist/lib/server/index.js +17 -4
  38. package/dist/lib/server/index.js.map +1 -1
  39. package/dist/lib/server/test-controller-bridge.d.ts +885 -1
  40. package/dist/lib/server/test-controller-bridge.d.ts.map +1 -1
  41. package/dist/lib/server/test-controller-bridge.js +1502 -2
  42. package/dist/lib/server/test-controller-bridge.js.map +1 -1
  43. package/dist/lib/testing/client.d.ts +8 -0
  44. package/dist/lib/testing/client.d.ts.map +1 -1
  45. package/dist/lib/testing/client.js +73 -2
  46. package/dist/lib/testing/client.js.map +1 -1
  47. package/dist/lib/testing/compliance/comply.d.ts +10 -1
  48. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  49. package/dist/lib/testing/compliance/comply.js +11 -31
  50. package/dist/lib/testing/compliance/comply.js.map +1 -1
  51. package/dist/lib/testing/compliance/index.d.ts +1 -1
  52. package/dist/lib/testing/compliance/index.d.ts.map +1 -1
  53. package/dist/lib/testing/compliance/index.js +2 -1
  54. package/dist/lib/testing/compliance/index.js.map +1 -1
  55. package/dist/lib/testing/index.d.ts +2 -2
  56. package/dist/lib/testing/index.d.ts.map +1 -1
  57. package/dist/lib/testing/index.js +17 -3
  58. package/dist/lib/testing/index.js.map +1 -1
  59. package/dist/lib/testing/scenarios/error-compliance.d.ts.map +1 -1
  60. package/dist/lib/testing/scenarios/error-compliance.js +11 -1
  61. package/dist/lib/testing/scenarios/error-compliance.js.map +1 -1
  62. package/dist/lib/testing/storyboard/parallel-dispatch.d.ts.map +1 -1
  63. package/dist/lib/testing/storyboard/parallel-dispatch.js +6 -4
  64. package/dist/lib/testing/storyboard/parallel-dispatch.js.map +1 -1
  65. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  66. package/dist/lib/testing/storyboard/validations.js +18 -7
  67. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  68. package/dist/lib/types/core.generated.d.ts +1212 -20
  69. package/dist/lib/types/core.generated.d.ts.map +1 -1
  70. package/dist/lib/types/core.generated.js +1 -1
  71. package/dist/lib/types/index.d.ts +2 -0
  72. package/dist/lib/types/index.d.ts.map +1 -1
  73. package/dist/lib/types/index.js +4 -0
  74. package/dist/lib/types/index.js.map +1 -1
  75. package/dist/lib/types/inline-enums.generated.d.ts +6 -2
  76. package/dist/lib/types/inline-enums.generated.d.ts.map +1 -1
  77. package/dist/lib/types/inline-enums.generated.js +11 -5
  78. package/dist/lib/types/inline-enums.generated.js.map +1 -1
  79. package/dist/lib/types/schemas.generated.d.ts +26202 -26253
  80. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  81. package/dist/lib/types/schemas.generated.js +1353 -1300
  82. package/dist/lib/types/schemas.generated.js.map +1 -1
  83. package/dist/lib/types/tools.generated.d.ts +1082 -21
  84. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  85. package/dist/lib/types/wellknown-schemas.generated.d.ts +2 -2
  86. package/dist/lib/validation/sync-creatives.d.ts +6 -6
  87. package/dist/lib/version.d.ts +3 -3
  88. package/dist/lib/version.js +3 -3
  89. package/examples/hello_creative_adapter_ad_server.ts +5 -0
  90. package/examples/hello_creative_adapter_template.ts +5 -0
  91. package/examples/hello_seller_adapter_guaranteed.ts +5 -0
  92. package/examples/hello_seller_adapter_non_guaranteed.ts +5 -0
  93. package/examples/hello_seller_adapter_social.ts +5 -0
  94. package/examples/hello_si_adapter_brand.ts +5 -0
  95. package/package.json +3 -2
  96. package/skills/call-adcp-agent/SKILL.md +1 -0
@@ -248,14 +248,14 @@ export declare const BrandJsonSchema: z.ZodUnion<readonly [z.ZodObject<{
248
248
  html: "html";
249
249
  javascript: "javascript";
250
250
  daast: "daast";
251
- brief: "brief";
252
- catalog: "catalog";
253
251
  image: "image";
254
252
  video: "video";
255
253
  text: "text";
256
254
  webhook: "webhook";
257
255
  css: "css";
258
256
  markdown: "markdown";
257
+ brief: "brief";
258
+ catalog: "catalog";
259
259
  }>;
260
260
  url: z.ZodString;
261
261
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -32,7 +32,7 @@ export declare const SyncCreativesItemSchema: z.ZodObject<{
32
32
  contacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
33
33
  role: z.ZodUnion<readonly [z.ZodLiteral<"billing">, z.ZodLiteral<"legal">, z.ZodLiteral<"creative">, z.ZodLiteral<"general">]>;
34
34
  name: z.ZodOptional<z.ZodString>;
35
- email: z.ZodOptional<z.ZodString>;
35
+ email: z.ZodOptional<z.ZodEmail>;
36
36
  phone: z.ZodOptional<z.ZodString>;
37
37
  }, z.core.$loose>>>;
38
38
  bank: z.ZodOptional<z.ZodObject<{
@@ -53,7 +53,7 @@ export declare const SyncCreativesItemSchema: z.ZodObject<{
53
53
  setup: z.ZodOptional<z.ZodObject<{
54
54
  url: z.ZodOptional<z.ZodString>;
55
55
  message: z.ZodString;
56
- expires_at: z.ZodOptional<z.ZodString>;
56
+ expires_at: z.ZodOptional<z.ZodISODateTime>;
57
57
  }, z.core.$loose>>;
58
58
  account_scope: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"operator">, z.ZodLiteral<"brand">, z.ZodLiteral<"operator_brand">, z.ZodLiteral<"agent">]>>;
59
59
  governance_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -132,7 +132,7 @@ export declare const SyncCreativesSuccessStrictSchema: z.ZodObject<{
132
132
  contacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
133
133
  role: z.ZodUnion<readonly [z.ZodLiteral<"billing">, z.ZodLiteral<"legal">, z.ZodLiteral<"creative">, z.ZodLiteral<"general">]>;
134
134
  name: z.ZodOptional<z.ZodString>;
135
- email: z.ZodOptional<z.ZodString>;
135
+ email: z.ZodOptional<z.ZodEmail>;
136
136
  phone: z.ZodOptional<z.ZodString>;
137
137
  }, z.core.$loose>>>;
138
138
  bank: z.ZodOptional<z.ZodObject<{
@@ -153,7 +153,7 @@ export declare const SyncCreativesSuccessStrictSchema: z.ZodObject<{
153
153
  setup: z.ZodOptional<z.ZodObject<{
154
154
  url: z.ZodOptional<z.ZodString>;
155
155
  message: z.ZodString;
156
- expires_at: z.ZodOptional<z.ZodString>;
156
+ expires_at: z.ZodOptional<z.ZodISODateTime>;
157
157
  }, z.core.$loose>>;
158
158
  account_scope: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"operator">, z.ZodLiteral<"brand">, z.ZodLiteral<"operator_brand">, z.ZodLiteral<"agent">]>>;
159
159
  governance_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -246,7 +246,7 @@ export declare const SyncCreativesResponseStrictSchema: z.ZodUnion<readonly [z.Z
246
246
  contacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
247
247
  role: z.ZodUnion<readonly [z.ZodLiteral<"billing">, z.ZodLiteral<"legal">, z.ZodLiteral<"creative">, z.ZodLiteral<"general">]>;
248
248
  name: z.ZodOptional<z.ZodString>;
249
- email: z.ZodOptional<z.ZodString>;
249
+ email: z.ZodOptional<z.ZodEmail>;
250
250
  phone: z.ZodOptional<z.ZodString>;
251
251
  }, z.core.$loose>>>;
252
252
  bank: z.ZodOptional<z.ZodObject<{
@@ -267,7 +267,7 @@ export declare const SyncCreativesResponseStrictSchema: z.ZodUnion<readonly [z.Z
267
267
  setup: z.ZodOptional<z.ZodObject<{
268
268
  url: z.ZodOptional<z.ZodString>;
269
269
  message: z.ZodString;
270
- expires_at: z.ZodOptional<z.ZodString>;
270
+ expires_at: z.ZodOptional<z.ZodISODateTime>;
271
271
  }, z.core.$loose>>;
272
272
  account_scope: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"operator">, z.ZodLiteral<"brand">, z.ZodLiteral<"operator_brand">, z.ZodLiteral<"agent">]>>;
273
273
  governance_agents: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * AdCP SDK library version
3
3
  */
4
- export declare const LIBRARY_VERSION = "7.2.0";
4
+ export declare const LIBRARY_VERSION = "7.4.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: "7.2.0";
36
+ readonly library: "7.4.0";
37
37
  readonly adcp: "3.0.11";
38
38
  readonly compatibleVersions: readonly ["v2.5", "v2.6", "v3", "3.0.0-beta.1", "3.0.0-beta.3", "3.0.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"];
39
- readonly generatedAt: "2026-05-12T23:51:47.164Z";
39
+ readonly generatedAt: "2026-05-16T15:53:19.396Z";
40
40
  };
41
41
  /**
42
42
  * Get the AdCP specification version this library is built for
@@ -11,7 +11,7 @@ exports.parseAdcpMajorVersion = parseAdcpMajorVersion;
11
11
  /**
12
12
  * AdCP SDK library version
13
13
  */
14
- exports.LIBRARY_VERSION = '7.2.0';
14
+ exports.LIBRARY_VERSION = '7.4.0';
15
15
  /**
16
16
  * AdCP specification version this library is built for
17
17
  */
@@ -52,10 +52,10 @@ exports.COMPATIBLE_ADCP_VERSIONS = [
52
52
  * Full version information
53
53
  */
54
54
  exports.VERSION_INFO = {
55
- library: '7.2.0',
55
+ library: '7.4.0',
56
56
  adcp: '3.0.11',
57
57
  compatibleVersions: exports.COMPATIBLE_ADCP_VERSIONS,
58
- generatedAt: '2026-05-12T23:51:47.164Z',
58
+ generatedAt: '2026-05-16T15:53:19.396Z',
59
59
  };
60
60
  /**
61
61
  * Get the AdCP specification version this library is built for
@@ -60,6 +60,7 @@ import {
60
60
  memoryBackend,
61
61
  serve,
62
62
  verifyApiKey,
63
+ assertNoExampleTlds,
63
64
  type AccountStore,
64
65
  type Account,
65
66
  type CreativeAdServerPlatform,
@@ -86,6 +87,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
86
87
  const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${PORT}`;
87
88
 
88
89
  const KNOWN_PUBLISHERS = ['creative-network.example', 'acmeoutdoor.example', 'pinnacle-agency.example'];
90
+ assertNoExampleTlds(
91
+ { KNOWN_PUBLISHERS },
92
+ { allowIn: ['test', 'development'], checklistPath: 'examples/hello_creative_adapter_ad_server.ts' }
93
+ );
89
94
  const SANDBOX_ID_PREFIX = 'sandbox_';
90
95
 
91
96
  // ---------------------------------------------------------------------------
@@ -38,6 +38,7 @@ import {
38
38
  memoryBackend,
39
39
  AdcpError,
40
40
  defineCreativeBuilderPlatform,
41
+ assertNoExampleTlds,
41
42
  type DecisioningPlatform,
42
43
  type CreativeBuilderPlatform,
43
44
  type BuildCreativeReturn,
@@ -72,6 +73,10 @@ const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${
72
73
  // platforms expose a global format catalog or the workspace tied to the API
73
74
  // key's principal; the mock fixture keys templates per workspace.
74
75
  const DEFAULT_LISTING_WORKSPACE = process.env['DEFAULT_LISTING_WORKSPACE'] ?? 'ws_acme_studio';
76
+ assertNoExampleTlds(
77
+ { DEFAULT_LISTING_WORKSPACE, PUBLIC_AGENT_URL },
78
+ { allowIn: ['test', 'development'], checklistPath: 'examples/hello_creative_adapter_template.ts' }
79
+ );
75
80
 
76
81
  // ---------------------------------------------------------------------------
77
82
  // Upstream client — SWAP for production.
@@ -68,6 +68,7 @@ import {
68
68
  AdcpError,
69
69
  getAccountMode,
70
70
  assertMediaBuyTransition,
71
+ assertNoExampleTlds,
71
72
  type DecisioningPlatform,
72
73
  type SalesCorePlatform,
73
74
  type SalesIngestionPlatform,
@@ -101,6 +102,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
101
102
  const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${PORT}`;
102
103
 
103
104
  const KNOWN_PUBLISHERS = ['acmeoutdoor.example', 'pinnacle-agency.example', 'premium-sports.example'];
105
+ assertNoExampleTlds(
106
+ { KNOWN_PUBLISHERS },
107
+ { allowIn: ['test', 'development'], checklistPath: 'examples/hello_seller_adapter_guaranteed.ts' }
108
+ );
104
109
 
105
110
  // SWAP: the seller's minimum committable max_variance_percent — the
106
111
  // buyer-vs-seller billing-count delta this seller will tolerate before
@@ -62,6 +62,7 @@ import {
62
62
  createMediaBuyStore,
63
63
  InMemoryStateStore,
64
64
  assertMediaBuyTransition,
65
+ assertNoExampleTlds,
65
66
  type DecisioningPlatform,
66
67
  type SalesCorePlatform,
67
68
  type SalesIngestionPlatform,
@@ -96,6 +97,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
96
97
  const PUBLIC_AGENT_URL = process.env['PUBLIC_AGENT_URL'] ?? `http://127.0.0.1:${PORT}`;
97
98
 
98
99
  const KNOWN_PUBLISHERS = ['remnant-network.example', 'acmeoutdoor.example', 'pinnacle-agency.example'];
100
+ assertNoExampleTlds(
101
+ { KNOWN_PUBLISHERS },
102
+ { allowIn: ['test', 'development'], checklistPath: 'examples/hello_seller_adapter_non_guaranteed.ts' }
103
+ );
99
104
 
100
105
  // TEST-ONLY: id-prefix used by the sandbox arm in `accounts.resolve` so
101
106
  // production sellers don't need this; remove the sandbox arm + this
@@ -38,6 +38,7 @@ import {
38
38
  AdcpError,
39
39
  defineSalesPlatform,
40
40
  defineAudiencePlatform,
41
+ assertNoExampleTlds,
41
42
  type DecisioningPlatform,
42
43
  type SalesPlatform,
43
44
  type AudiencePlatform,
@@ -303,6 +304,10 @@ interface AdvertiserMeta {
303
304
  // AdCP-side identifiers from the mock's seed data. SWAP: replace with a
304
305
  // real `/advertiser/list` call.
305
306
  const KNOWN_ADVERTISERS = ['acmeoutdoor.example', 'summit-media.example'];
307
+ assertNoExampleTlds(
308
+ { KNOWN_ADVERTISERS },
309
+ { allowIn: ['test', 'development'], checklistPath: 'examples/hello_seller_adapter_social.ts' }
310
+ );
306
311
 
307
312
  // Buyer event_source_id → upstream pixel_id translation map. The mock
308
313
  // ignores buyer-supplied pixel_id and assigns its own (`px_<uuid>`); buyers
@@ -47,6 +47,7 @@ import {
47
47
  createUpstreamHttpClient,
48
48
  memoryBackend,
49
49
  AdcpError,
50
+ assertNoExampleTlds,
50
51
  type AccountStore,
51
52
  type Account,
52
53
  } from '@adcp/sdk/server';
@@ -81,6 +82,10 @@ const ADCP_AUTH_TOKEN = process.env['ADCP_AUTH_TOKEN'] ?? 'sk_harness_do_not_use
81
82
  // tenant), so a hardcoded default is fine. Multi-brand deployments derive
82
83
  // from `ctx.authInfo` per-API-key binding instead.
83
84
  const DEFAULT_LISTING_BRAND = process.env['DEFAULT_LISTING_BRAND'] ?? 'brand_nova_motors';
85
+ assertNoExampleTlds(
86
+ { DEFAULT_LISTING_BRAND },
87
+ { allowIn: ['test', 'development'], checklistPath: 'examples/hello_si_adapter_brand.ts' }
88
+ );
84
89
 
85
90
  // ---------------------------------------------------------------------------
86
91
  // Upstream client — SWAP for production.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adcp/sdk",
3
- "version": "7.2.0",
3
+ "version": "7.4.0",
4
4
  "description": "AdCP SDK — client, server, and compliance harnesses for the AdContext Protocol (MCP + A2A)",
5
5
  "workspaces": [
6
6
  ".",
@@ -202,12 +202,13 @@
202
202
  ],
203
203
  "scripts": {
204
204
  "prepare": "node scripts/install-hooks.js 2>/dev/null || true",
205
+ "sync:agents": "node scripts/import-claude-agents.mjs",
205
206
  "prepublishOnly": "npm run clean && npm run sync-schemas:all && (test -f src/lib/types/tools.generated.ts || npm run generate-types) && npm run build:lib && node --test-timeout=60000 --test-force-exit --test test/lib/adcp-client.test.js test/lib/validation.test.js test/lib/zod-schemas.test.js",
206
207
  "build": "npm run build:lib",
207
208
  "build:lib": "npm run sync-version && npm run schemas:ensure && tsx scripts/generate-wire-spec-fields.ts && tsc --project tsconfig.lib.json && tsx scripts/copy-schemas-to-dist.ts",
208
209
  "build:test-agents": "npm run build:lib && tsc -p test-agents/tsconfig.json --rootDir test-agents",
209
210
  "pretest": "npm run schemas:ensure",
210
- "test": "NODE_ENV=test node --test-timeout=60000 --test-force-exit --test test/*.test.js test/lib/*.test.js",
211
+ "test": "NODE_ENV=test node --test-timeout=60000 --test-force-exit --test test/*.test.js test/lib/*.test.js && npm test --workspace=packages/eslint-plugin --if-present",
211
212
  "pretest:lib": "npm run schemas:ensure",
212
213
  "test:lib": "NODE_ENV=test node --test-timeout=60000 --test-force-exit --test test/lib/*.test.js",
213
214
  "pretest:examples": "npm run build",
@@ -240,6 +240,7 @@ Quick lookup before reading the full envelope. Match what you see in `adcp_error
240
240
  | `recovery: 'transient'` (rate limit, 5xx, timeout) | Server-side, retry-safe | Retry with the **same** `idempotency_key`. |
241
241
  | `recovery: 'correctable'` | Buyer-side fix | Read `issues[]`, patch the pointers, resend. Most cases close in one attempt. |
242
242
  | `recovery: 'terminal'` (account suspended, payment required, …) | Requires human action | Don't retry. Surface to the user. |
243
+ | `[adcp] Warning: agent … does not expose get_adcp_capabilities` (one-shot per client, `@adcp/client` only) | Seller didn't ship v3 discovery — routed through the v2 adapter with idempotency-TTL guarantee unknown | Branch on `client.isSyntheticV2()` before dispatch. Tighten retry policy (lower attempt cap, longer backoff) or fall back to natural-key recovery for these sellers. Same predicate also flags synthetic v3 caveat — see `isSyntheticV2()` JSDoc. |
243
244
  | HTTP 401 with `WWW-Authenticate` header | Missing or expired credential | Add `Authorization` per the agent's auth spec; re-auth if applicable. If the challenge `scheme` is `Basic` (gateway-fronted agents — Apigee, Kong, AWS API GW), the SDK / CLI need `auth: { type: 'basic', username, password }` or `--auth user:pass --auth-scheme basic` — `Bearer` will never succeed against that gateway. **Saved aliases**: if registered with `--auth-scheme basic`, the scheme persists in `~/.adcp/config.json` and auto-applies on every later invocation — don't redundantly repeat the flag on each call. |
244
245
 
245
246
  If your symptom isn't here, fall through to the next section.