@extrovert.dev/sdk 0.1.0-pre.4 → 0.1.0-pre.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -6,7 +6,7 @@
6
6
  * on 429/5xx, honors `Retry-After`, and surfaces every failure as a typed {@link ApiError}.
7
7
  */
8
8
  /** The library version, surfaced in the User-Agent. Kept in sync with package.json by build. */
9
- declare const SDK_VERSION = "0.1.0-pre.4";
9
+ declare const SDK_VERSION = "0.1.0-pre.6";
10
10
  interface RetryOptions {
11
11
  /** Max retry attempts for idempotent requests on 429/5xx/network errors. Default 2. */
12
12
  maxRetries: number;
@@ -58,7 +58,7 @@ type IsoTimestamp = string;
58
58
  * buy a new domain (`POST /v1/domains` with `mode: "purchased"`). `review:act` gates
59
59
  * the BYO reviewer decision plane.
60
60
  */
61
- type Scope = "mailbox:create" | "mailbox:read" | "mailbox:send" | "mailbox:quota" | "mailbox:delete" | "webhook:write" | "domain:manage" | "domain:purchase" | "review:act";
61
+ type Scope = "mailbox:create" | "mailbox:read" | "mailbox:send" | "mailbox:quota" | "mailbox:credentials" | "mailbox:delete" | "webhook:write" | "domain:manage" | "domain:purchase" | "review:act" | "signup:verify";
62
62
  /** How a Extrovert domain was onboarded (§7). */
63
63
  type OnboardingMode = "shared" | "purchased" | "ns_delegated" | "manual";
64
64
  /** Lifecycle status of an agent principal. */
@@ -520,6 +520,8 @@ interface SendRequest {
520
520
  * routes to needs_review with gate_outcome `held:low_confidence`.
521
521
  */
522
522
  category_confidence?: number;
523
+ /** Opaque token from the fresh getRules call used for this composition. */
524
+ composition_token?: string;
523
525
  }
524
526
  /**
525
527
  * Request body for the canonical thread-aware reply,
@@ -555,6 +557,7 @@ interface ReplyRequest {
555
557
  category_id?: string;
556
558
  /** Agent-supplied confidence (0..1); see {@link SendRequest.category_confidence}. */
557
559
  category_confidence?: number;
560
+ composition_token?: string;
558
561
  }
559
562
  /**
560
563
  * Request body for `POST /v1/inboxes/{addr}/messages/{id}/forward`. Re-sends the
@@ -589,6 +592,7 @@ interface ForwardRequest {
589
592
  category_id?: string;
590
593
  /** Agent-supplied confidence (0..1); see {@link SendRequest.category_confidence}. */
591
594
  category_confidence?: number;
595
+ composition_token?: string;
592
596
  /** See {@link SendRequest.idempotency_key} — sent as a header, never in the body. */
593
597
  idempotency_key?: string;
594
598
  }
@@ -811,6 +815,8 @@ interface SubmitRevisionRequest {
811
815
  html?: string;
812
816
  built_at?: IsoTimestamp;
813
817
  rules_version_seen?: number;
818
+ /** Opaque token from the fresh getRules call used for this redraft. */
819
+ composition_token?: string;
814
820
  /**
815
821
  * REPLACES the draft's attachments. Omit the field to leave them untouched;
816
822
  * send an empty array to clear them.
@@ -1185,6 +1191,14 @@ interface GetRulesParams {
1185
1191
  /** Narrow to one layer (general | category). Default returns both. */
1186
1192
  scope?: "general" | "category";
1187
1193
  }
1194
+ /** Stable effective rule stack plus an opaque proof for the next composition. */
1195
+ interface RuleSnapshot extends Page<Rule> {
1196
+ house_style_version: number;
1197
+ category_rules_version: number;
1198
+ rule_high_water: number;
1199
+ composition_token?: string;
1200
+ composition_token_expires_at?: IsoTimestamp;
1201
+ }
1188
1202
  /**
1189
1203
  * Save / edit a writing rule (append-only by supersession; spec §5.4; D11).
1190
1204
  *
@@ -1196,6 +1210,8 @@ interface GetRulesParams {
1196
1210
  * `scope` is the category axis, `rule_layer` is the ownership axis.)
1197
1211
  */
1198
1212
  interface SaveRuleRequest {
1213
+ /** Stable retry key, sent as Idempotency-Key and omitted from the JSON body. */
1214
+ idempotency_key?: string;
1199
1215
  /** Defaults from category_id (general iff empty). */
1200
1216
  scope?: "general" | "category";
1201
1217
  /** Category id (cat_…); empty = house-style/general (D2). */
@@ -1619,13 +1635,13 @@ interface SignUpRequest {
1619
1635
  }
1620
1636
  /**
1621
1637
  * Response from `POST /v1/agent/sign-up`. The `agent_key` is a LIMITED-scope key
1622
- * (read-only) until the emailed code is confirmed via `POST /v1/agent/verify`.
1623
- * The OTP itself is never returned — it is emailed to `human_email`.
1638
+ * (read-only) that expires with the emailed code. Successful verification revokes
1639
+ * it and returns a replacement full-scope key. The OTP itself is never returned.
1624
1640
  */
1625
1641
  interface SignUpResponse {
1626
1642
  customer_id: string;
1627
1643
  agent_id: string;
1628
- /** Limited-scope agent key, shown once. Re-calling signup rotates it. */
1644
+ /** Limited-scope bootstrap key, shown once and bounded by `otp_expires_at`. */
1629
1645
  agent_key: string;
1630
1646
  key_prefix: string;
1631
1647
  scopes: Scope[];
@@ -1642,17 +1658,40 @@ interface VerifyRequest {
1642
1658
  /** The one-time code delivered to the signup human email. */
1643
1659
  otp: string;
1644
1660
  }
1661
+ /** One copy-ready MCP operation in the post-verification mailbox handoff. */
1662
+ interface MailboxQuickstartCall {
1663
+ tool: "read_messages" | "get_message" | "wait_for_email";
1664
+ arguments: Record<string, unknown>;
1665
+ }
1645
1666
  /**
1646
- * Response from `POST /v1/agent/verify`. On success a NEW full-scope `agent_key`
1647
- * is returned (shown once); switch to it for subsequent calls.
1667
+ * Safe, MCP-first next calls for the inbox returned by signup verification.
1668
+ * SDK callers can use `address` with the typed inbox/message resources instead;
1669
+ * these calls keep agent runtimes from inventing raw HTTP routes or parsers.
1670
+ */
1671
+ interface MailboxQuickstart {
1672
+ inbox: string;
1673
+ list_mail: MailboxQuickstartCall;
1674
+ read_message: MailboxQuickstartCall;
1675
+ wait_for_mail: MailboxQuickstartCall;
1676
+ }
1677
+ /**
1678
+ * Response from `POST /v1/agent/verify`. On success the bootstrap key is revoked
1679
+ * and a NEW full-scope `agent_key` is returned; switch to it for subsequent calls.
1680
+ * `address` repeats the ready inbox so the handoff remains self-contained after
1681
+ * a process restart or context compaction.
1648
1682
  */
1649
1683
  interface VerifyResponse {
1650
1684
  agent_id: string;
1651
1685
  agent_key: string;
1652
1686
  key_prefix: string;
1653
1687
  scopes: Scope[];
1688
+ /** The signup inbox, ready for immediate list/read/wait/send operations. */
1689
+ address: string;
1654
1690
  verified: boolean;
1655
1691
  message: string;
1692
+ mailbox_quickstart: MailboxQuickstart;
1693
+ /** One-time email-bound owner claim for the human console, when freshly seeded. */
1694
+ org_claim_token?: string;
1656
1695
  }
1657
1696
  /**
1658
1697
  * Response from `GET /v1/auth/me` — the verified principal behind the key.
@@ -1840,7 +1879,7 @@ interface Transport {
1840
1879
  proposeGraduation(categoryId: string, req: ProposeGraduationRequest, signal?: AbortSignal): Promise<GraduationStatus>;
1841
1880
  getScanBacklogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus>;
1842
1881
  getCategoryPacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState>;
1843
- getRules(params: GetRulesParams, signal?: AbortSignal): Promise<Page<Rule>>;
1882
+ getRules(params: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot>;
1844
1883
  saveRule(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule>;
1845
1884
  promoteRule(ruleId: string, toScope: "general" | "category", signal?: AbortSignal): Promise<Rule>;
1846
1885
  retireRule(ruleId: string, signal?: AbortSignal): Promise<Rule>;
@@ -2059,7 +2098,7 @@ declare class MockBackend {
2059
2098
  /** rank a rule for the §7 ladder (mock mirror of the server's deterministic order). */
2060
2099
  private ruleRank;
2061
2100
  /** Get the ORDERED active rule set (mock) — §7 ladder + category-before-general. */
2062
- getRules(params?: GetRulesParams): Page<Rule>;
2101
+ getRules(params?: GetRulesParams): RuleSnapshot;
2063
2102
  /** Save / edit a rule (mock) — append-only by supersession (D11). */
2064
2103
  saveRule(req: SaveRuleRequest): Rule;
2065
2104
  /** Promote a rule between layers (mock, via supersession), or undefined when unknown. */
@@ -2976,7 +3015,7 @@ declare class Rules {
2976
3015
  private readonly ctx;
2977
3016
  constructor(ctx: ResourceContext);
2978
3017
  /** Get the ORDERED active rule set (precedence ladder applied; NO LLM). */
2979
- get(params?: GetRulesParams, signal?: AbortSignal): Promise<Page<Rule>>;
3018
+ get(params?: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot>;
2980
3019
  /**
2981
3020
  * Save / edit a rule (append-only by supersession; D11). An agent-plane save is
2982
3021
  * ALWAYS project-layer: the saved rule's `rule_layer` is `project`, bound to the
@@ -3103,11 +3142,17 @@ declare class ExtrovertClient {
3103
3142
  * + a first inbox and returns a LIMITED-scope (read-only) agent key; a one-time
3104
3143
  * code is emailed to `human_email`. Call {@link verify} with the code to unlock
3105
3144
  * full scopes. Idempotent on `human_email`: re-calling rotates the key + resends.
3145
+ * When free signup is paused, this throws an `ApiError` with status 403 and
3146
+ * code `signup_disabled` without creating account state.
3106
3147
  */
3107
3148
  signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse>;
3108
3149
  /**
3109
3150
  * Confirm the emailed signup code and receive a NEW full-scope agent key (shown
3110
3151
  * once). Must be called with the limited key from {@link signUp} as the bearer.
3152
+ * The result repeats the ready inbox address and includes MCP-first list/read/wait
3153
+ * calls; SDK callers can pass `address` directly to `inboxes` and `messages`.
3154
+ * Pending verification is also fail-closed with 403 `signup_disabled` while
3155
+ * free signup is paused.
3111
3156
  */
3112
3157
  verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse>;
3113
3158
  /** Introspect the principal behind the current key (`GET /v1/auth/me`). */
@@ -3674,7 +3719,7 @@ declare function signWebhook(secret: string, body: string, timestampSeconds: num
3674
3719
  *
3675
3720
  * ## Provisional, pre-1.0 (0.x)
3676
3721
  *
3677
- * {@link CONTRACT_VERSION} is **`0.1.0-pre.4`** — a deliberately **provisional**, pre-1.0
3722
+ * {@link CONTRACT_VERSION} is **`0.1.0-pre.6`** — a deliberately **provisional**, pre-1.0
3678
3723
  * contract. It is open and documented, but it MAY still evolve before 1.0: there
3679
3724
  * are no external users yet, and the **D20 shared-pool auto-send governor** is a
3680
3725
  * hard prerequisite before onboarding external users. Pin the version; expect
@@ -3731,12 +3776,12 @@ interface DiffJson {
3731
3776
  /**
3732
3777
  * The published version of the Extrovert Review-Loop open contract (D14).
3733
3778
  *
3734
- * **`0.1.0-pre.4` — PROVISIONAL, pre-1.0.** Versioned *with the SDK* (this package's
3779
+ * **`0.1.0-pre.6` — PROVISIONAL, pre-1.0.** Versioned *with the SDK* (this package's
3735
3780
  * `package.json` version) and aligned to the openapi `info.version`. Open and
3736
3781
  * documented, but MAY still evolve before 1.0 (no external users yet; the D20
3737
3782
  * shared-pool governor is required before external users). Pin it.
3738
3783
  */
3739
- declare const CONTRACT_VERSION: "0.1.0-pre.4";
3784
+ declare const CONTRACT_VERSION: "0.1.0-pre.6";
3740
3785
  /** The stability posture of a published contract version. */
3741
3786
  type ContractStability = "provisional" | "stable";
3742
3787
  /**
@@ -3779,4 +3824,4 @@ interface ContractManifest {
3779
3824
  */
3780
3825
  declare const CONTRACT_MANIFEST: ContractManifest;
3781
3826
 
3782
- export { API_VERSION_HEADER, type AccountRiskDial, type AckReviewEventEntry, type AckReviewEventRequest, type AckReviewEventResult, type AddContactListRequest, type Agent, type AgentStatus, ApiError, type ApiErrorBody, type Attachment, type AttachmentDownload, type AttachmentInput, AuthenticationError, type BatchUpdateMessagesRequest, type BatchUpdateResult, BornStaleError, BreadthRequiredError, CONTRACT_MANIFEST, CONTRACT_VERSION, CURRENT_API_VERSION, Categories, type Category, type CategoryPacingState, type CategoryRiskDial, ConflictError, ConnectionError, type ContactListDirection, type ContactListEntry, type ContactListKind, ContactLists, type ContractManifest, type ContractStability, type CreateInboxRequest, type Cursor, DEFAULT_BASE_URL, type DeleteResult, type DiffHunk, type DiffJson, type Domain, type DomainOffboard, type DomainRecord, type DomainScope, Domains, type EffectiveRiskDial, type EmailAddress, type EnrollRequest, type EnrollResponse, type ExtractedCredentials, ExtrovertClient as Extrovert, ExtrovertClient, type ExtrovertClientOptions, ForbiddenScopeError, type ForwardRequest, type GetInboxParams, type GetRuleAuditParams, type GetRulesParams, type GraduationStatus, IdempotencyConflictError, type Inbox, type InboxCredentials, InboxHandle, type InboxInclude, type InboxMetadata, type InboxMetadataPatch, type InboxMetadataValue, type InboxStatus, Inboxes, IntentRequiredError, type IsoTimestamp, type Job, type KeyTier, type List, type ListCategoriesParams, type ListInboxesParams, type ListMessagesParams, ListPage, type ListParams, type ListReviewEventsParams, type ListReviewsParams, type ListSuppressionsParams, type ListThreadsParams, MOCK_BASE_URL, type MailFolder, type MarkReadRequest, type Message, type MessageDirection, Messages, MockBackend, NotFoundError, type OnboardDomainRequest, type OnboardingMode, PROBLEM_CODES, type PacingItem, type Page, type PageFetcher, PaymentRequiredError, PermissionError, type PostReviewChatRequest, type Problem, type ProblemCode, type ProblemField, type ProjectInboxListParams, ProjectInboxes, Projects, type ProposeCategoryRequest, type ProposeGraduationRequest, type QueuedForReviewResult, REVIEW_PROBLEM_RETRYABLE, RateLimitError, RecipientSuppressedError, type RegisterWebhookRequest, type ReplyRequest, type RestampReviewRequest, type Review, ReviewConflictError, type ReviewDecisionContext, type ReviewEvent, type ReviewEventCursor, type ReviewEventReason, ReviewEvents, type ReviewEventsResult, type ReviewFeedback, type ReviewFeedbackComment, type ReviewInclude, type ReviewIntent, type ReviewMode, type ReviewPolicy, type ReviewState, type ReviewTurn, type ReviewerAction, type ReviewerDecisionRequest, type ReviewerDecisionResult, Reviews, type RiskDial, type Rule, type RuleAuditEntry, type RuleLayer, Rules, SDK_VERSION, type SaveRuleRequest, type ScanBacklogStatus, type Scope, type SearchMessagesParams, SendNeedsReconciliationError, type SendOutcome, type SendRequest, type SendResult, type SentResult, type SignUpRequest, type SignUpResponse, StaleError, type StreamEvent, type StreamOptions, type SubmitForReviewResult, type SubmitRevisionRequest, type SuppressionEntry, type SuppressionPrecheck, type SuppressionScope, type SuppressionSource, Suppressions, TerminalError, type Thread, type ThreadDetail, Threads, TimeoutError, UnavailableError, type UpdateCategoryRequest, type UpdateInboxRequest, type UpdateWebhookRequest, ValidationError, type VerifyRequest, type VerifyResponse, type VerifyWebhookOptions, type WaitForEmailRequest, type WaitForEmailResult, type WaitForReviewEventParams, type Webhook, type WebhookEvent, type WebhookPayload, Webhooks, type WhoAmI, WrongStateError, extractCredentials, extractLink, extractOtp, isProblemCode, isQueuedForReview, isSentImmediately, listPage, parseKeyTier, parseProblem, parseWebhook, reviewIdOf, sentMessageIdOf, serializeInclude, signWebhook, threadIdOf, tierAllowsOrgWildcard, tierNeedsExplicitBreadth, verifyWebhookSignature };
3827
+ export { API_VERSION_HEADER, type AccountRiskDial, type AckReviewEventEntry, type AckReviewEventRequest, type AckReviewEventResult, type AddContactListRequest, type Agent, type AgentStatus, ApiError, type ApiErrorBody, type Attachment, type AttachmentDownload, type AttachmentInput, AuthenticationError, type BatchUpdateMessagesRequest, type BatchUpdateResult, BornStaleError, BreadthRequiredError, CONTRACT_MANIFEST, CONTRACT_VERSION, CURRENT_API_VERSION, Categories, type Category, type CategoryPacingState, type CategoryRiskDial, ConflictError, ConnectionError, type ContactListDirection, type ContactListEntry, type ContactListKind, ContactLists, type ContractManifest, type ContractStability, type CreateInboxRequest, type Cursor, DEFAULT_BASE_URL, type DeleteResult, type DiffHunk, type DiffJson, type Domain, type DomainOffboard, type DomainRecord, type DomainScope, Domains, type EffectiveRiskDial, type EmailAddress, type EnrollRequest, type EnrollResponse, type ExtractedCredentials, ExtrovertClient as Extrovert, ExtrovertClient, type ExtrovertClientOptions, ForbiddenScopeError, type ForwardRequest, type GetInboxParams, type GetRuleAuditParams, type GetRulesParams, type GraduationStatus, IdempotencyConflictError, type Inbox, type InboxCredentials, InboxHandle, type InboxInclude, type InboxMetadata, type InboxMetadataPatch, type InboxMetadataValue, type InboxStatus, Inboxes, IntentRequiredError, type IsoTimestamp, type Job, type KeyTier, type List, type ListCategoriesParams, type ListInboxesParams, type ListMessagesParams, ListPage, type ListParams, type ListReviewEventsParams, type ListReviewsParams, type ListSuppressionsParams, type ListThreadsParams, MOCK_BASE_URL, type MailFolder, type MailboxQuickstart, type MailboxQuickstartCall, type MarkReadRequest, type Message, type MessageDirection, Messages, MockBackend, NotFoundError, type OnboardDomainRequest, type OnboardingMode, PROBLEM_CODES, type PacingItem, type Page, type PageFetcher, PaymentRequiredError, PermissionError, type PostReviewChatRequest, type Problem, type ProblemCode, type ProblemField, type ProjectInboxListParams, ProjectInboxes, Projects, type ProposeCategoryRequest, type ProposeGraduationRequest, type QueuedForReviewResult, REVIEW_PROBLEM_RETRYABLE, RateLimitError, RecipientSuppressedError, type RegisterWebhookRequest, type ReplyRequest, type RestampReviewRequest, type Review, ReviewConflictError, type ReviewDecisionContext, type ReviewEvent, type ReviewEventCursor, type ReviewEventReason, ReviewEvents, type ReviewEventsResult, type ReviewFeedback, type ReviewFeedbackComment, type ReviewInclude, type ReviewIntent, type ReviewMode, type ReviewPolicy, type ReviewState, type ReviewTurn, type ReviewerAction, type ReviewerDecisionRequest, type ReviewerDecisionResult, Reviews, type RiskDial, type Rule, type RuleAuditEntry, type RuleLayer, type RuleSnapshot, Rules, SDK_VERSION, type SaveRuleRequest, type ScanBacklogStatus, type Scope, type SearchMessagesParams, SendNeedsReconciliationError, type SendOutcome, type SendRequest, type SendResult, type SentResult, type SignUpRequest, type SignUpResponse, StaleError, type StreamEvent, type StreamOptions, type SubmitForReviewResult, type SubmitRevisionRequest, type SuppressionEntry, type SuppressionPrecheck, type SuppressionScope, type SuppressionSource, Suppressions, TerminalError, type Thread, type ThreadDetail, Threads, TimeoutError, UnavailableError, type UpdateCategoryRequest, type UpdateInboxRequest, type UpdateWebhookRequest, ValidationError, type VerifyRequest, type VerifyResponse, type VerifyWebhookOptions, type WaitForEmailRequest, type WaitForEmailResult, type WaitForReviewEventParams, type Webhook, type WebhookEvent, type WebhookPayload, Webhooks, type WhoAmI, WrongStateError, extractCredentials, extractLink, extractOtp, isProblemCode, isQueuedForReview, isSentImmediately, listPage, parseKeyTier, parseProblem, parseWebhook, reviewIdOf, sentMessageIdOf, serializeInclude, signWebhook, threadIdOf, tierAllowsOrgWildcard, tierNeedsExplicitBreadth, verifyWebhookSignature };
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  * on 429/5xx, honors `Retry-After`, and surfaces every failure as a typed {@link ApiError}.
7
7
  */
8
8
  /** The library version, surfaced in the User-Agent. Kept in sync with package.json by build. */
9
- declare const SDK_VERSION = "0.1.0-pre.4";
9
+ declare const SDK_VERSION = "0.1.0-pre.6";
10
10
  interface RetryOptions {
11
11
  /** Max retry attempts for idempotent requests on 429/5xx/network errors. Default 2. */
12
12
  maxRetries: number;
@@ -58,7 +58,7 @@ type IsoTimestamp = string;
58
58
  * buy a new domain (`POST /v1/domains` with `mode: "purchased"`). `review:act` gates
59
59
  * the BYO reviewer decision plane.
60
60
  */
61
- type Scope = "mailbox:create" | "mailbox:read" | "mailbox:send" | "mailbox:quota" | "mailbox:delete" | "webhook:write" | "domain:manage" | "domain:purchase" | "review:act";
61
+ type Scope = "mailbox:create" | "mailbox:read" | "mailbox:send" | "mailbox:quota" | "mailbox:credentials" | "mailbox:delete" | "webhook:write" | "domain:manage" | "domain:purchase" | "review:act" | "signup:verify";
62
62
  /** How a Extrovert domain was onboarded (§7). */
63
63
  type OnboardingMode = "shared" | "purchased" | "ns_delegated" | "manual";
64
64
  /** Lifecycle status of an agent principal. */
@@ -520,6 +520,8 @@ interface SendRequest {
520
520
  * routes to needs_review with gate_outcome `held:low_confidence`.
521
521
  */
522
522
  category_confidence?: number;
523
+ /** Opaque token from the fresh getRules call used for this composition. */
524
+ composition_token?: string;
523
525
  }
524
526
  /**
525
527
  * Request body for the canonical thread-aware reply,
@@ -555,6 +557,7 @@ interface ReplyRequest {
555
557
  category_id?: string;
556
558
  /** Agent-supplied confidence (0..1); see {@link SendRequest.category_confidence}. */
557
559
  category_confidence?: number;
560
+ composition_token?: string;
558
561
  }
559
562
  /**
560
563
  * Request body for `POST /v1/inboxes/{addr}/messages/{id}/forward`. Re-sends the
@@ -589,6 +592,7 @@ interface ForwardRequest {
589
592
  category_id?: string;
590
593
  /** Agent-supplied confidence (0..1); see {@link SendRequest.category_confidence}. */
591
594
  category_confidence?: number;
595
+ composition_token?: string;
592
596
  /** See {@link SendRequest.idempotency_key} — sent as a header, never in the body. */
593
597
  idempotency_key?: string;
594
598
  }
@@ -811,6 +815,8 @@ interface SubmitRevisionRequest {
811
815
  html?: string;
812
816
  built_at?: IsoTimestamp;
813
817
  rules_version_seen?: number;
818
+ /** Opaque token from the fresh getRules call used for this redraft. */
819
+ composition_token?: string;
814
820
  /**
815
821
  * REPLACES the draft's attachments. Omit the field to leave them untouched;
816
822
  * send an empty array to clear them.
@@ -1185,6 +1191,14 @@ interface GetRulesParams {
1185
1191
  /** Narrow to one layer (general | category). Default returns both. */
1186
1192
  scope?: "general" | "category";
1187
1193
  }
1194
+ /** Stable effective rule stack plus an opaque proof for the next composition. */
1195
+ interface RuleSnapshot extends Page<Rule> {
1196
+ house_style_version: number;
1197
+ category_rules_version: number;
1198
+ rule_high_water: number;
1199
+ composition_token?: string;
1200
+ composition_token_expires_at?: IsoTimestamp;
1201
+ }
1188
1202
  /**
1189
1203
  * Save / edit a writing rule (append-only by supersession; spec §5.4; D11).
1190
1204
  *
@@ -1196,6 +1210,8 @@ interface GetRulesParams {
1196
1210
  * `scope` is the category axis, `rule_layer` is the ownership axis.)
1197
1211
  */
1198
1212
  interface SaveRuleRequest {
1213
+ /** Stable retry key, sent as Idempotency-Key and omitted from the JSON body. */
1214
+ idempotency_key?: string;
1199
1215
  /** Defaults from category_id (general iff empty). */
1200
1216
  scope?: "general" | "category";
1201
1217
  /** Category id (cat_…); empty = house-style/general (D2). */
@@ -1619,13 +1635,13 @@ interface SignUpRequest {
1619
1635
  }
1620
1636
  /**
1621
1637
  * Response from `POST /v1/agent/sign-up`. The `agent_key` is a LIMITED-scope key
1622
- * (read-only) until the emailed code is confirmed via `POST /v1/agent/verify`.
1623
- * The OTP itself is never returned — it is emailed to `human_email`.
1638
+ * (read-only) that expires with the emailed code. Successful verification revokes
1639
+ * it and returns a replacement full-scope key. The OTP itself is never returned.
1624
1640
  */
1625
1641
  interface SignUpResponse {
1626
1642
  customer_id: string;
1627
1643
  agent_id: string;
1628
- /** Limited-scope agent key, shown once. Re-calling signup rotates it. */
1644
+ /** Limited-scope bootstrap key, shown once and bounded by `otp_expires_at`. */
1629
1645
  agent_key: string;
1630
1646
  key_prefix: string;
1631
1647
  scopes: Scope[];
@@ -1642,17 +1658,40 @@ interface VerifyRequest {
1642
1658
  /** The one-time code delivered to the signup human email. */
1643
1659
  otp: string;
1644
1660
  }
1661
+ /** One copy-ready MCP operation in the post-verification mailbox handoff. */
1662
+ interface MailboxQuickstartCall {
1663
+ tool: "read_messages" | "get_message" | "wait_for_email";
1664
+ arguments: Record<string, unknown>;
1665
+ }
1645
1666
  /**
1646
- * Response from `POST /v1/agent/verify`. On success a NEW full-scope `agent_key`
1647
- * is returned (shown once); switch to it for subsequent calls.
1667
+ * Safe, MCP-first next calls for the inbox returned by signup verification.
1668
+ * SDK callers can use `address` with the typed inbox/message resources instead;
1669
+ * these calls keep agent runtimes from inventing raw HTTP routes or parsers.
1670
+ */
1671
+ interface MailboxQuickstart {
1672
+ inbox: string;
1673
+ list_mail: MailboxQuickstartCall;
1674
+ read_message: MailboxQuickstartCall;
1675
+ wait_for_mail: MailboxQuickstartCall;
1676
+ }
1677
+ /**
1678
+ * Response from `POST /v1/agent/verify`. On success the bootstrap key is revoked
1679
+ * and a NEW full-scope `agent_key` is returned; switch to it for subsequent calls.
1680
+ * `address` repeats the ready inbox so the handoff remains self-contained after
1681
+ * a process restart or context compaction.
1648
1682
  */
1649
1683
  interface VerifyResponse {
1650
1684
  agent_id: string;
1651
1685
  agent_key: string;
1652
1686
  key_prefix: string;
1653
1687
  scopes: Scope[];
1688
+ /** The signup inbox, ready for immediate list/read/wait/send operations. */
1689
+ address: string;
1654
1690
  verified: boolean;
1655
1691
  message: string;
1692
+ mailbox_quickstart: MailboxQuickstart;
1693
+ /** One-time email-bound owner claim for the human console, when freshly seeded. */
1694
+ org_claim_token?: string;
1656
1695
  }
1657
1696
  /**
1658
1697
  * Response from `GET /v1/auth/me` — the verified principal behind the key.
@@ -1840,7 +1879,7 @@ interface Transport {
1840
1879
  proposeGraduation(categoryId: string, req: ProposeGraduationRequest, signal?: AbortSignal): Promise<GraduationStatus>;
1841
1880
  getScanBacklogStatus(categoryId: string, signal?: AbortSignal): Promise<ScanBacklogStatus>;
1842
1881
  getCategoryPacingState(categoryId: string, signal?: AbortSignal): Promise<CategoryPacingState>;
1843
- getRules(params: GetRulesParams, signal?: AbortSignal): Promise<Page<Rule>>;
1882
+ getRules(params: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot>;
1844
1883
  saveRule(req: SaveRuleRequest, signal?: AbortSignal): Promise<Rule>;
1845
1884
  promoteRule(ruleId: string, toScope: "general" | "category", signal?: AbortSignal): Promise<Rule>;
1846
1885
  retireRule(ruleId: string, signal?: AbortSignal): Promise<Rule>;
@@ -2059,7 +2098,7 @@ declare class MockBackend {
2059
2098
  /** rank a rule for the §7 ladder (mock mirror of the server's deterministic order). */
2060
2099
  private ruleRank;
2061
2100
  /** Get the ORDERED active rule set (mock) — §7 ladder + category-before-general. */
2062
- getRules(params?: GetRulesParams): Page<Rule>;
2101
+ getRules(params?: GetRulesParams): RuleSnapshot;
2063
2102
  /** Save / edit a rule (mock) — append-only by supersession (D11). */
2064
2103
  saveRule(req: SaveRuleRequest): Rule;
2065
2104
  /** Promote a rule between layers (mock, via supersession), or undefined when unknown. */
@@ -2976,7 +3015,7 @@ declare class Rules {
2976
3015
  private readonly ctx;
2977
3016
  constructor(ctx: ResourceContext);
2978
3017
  /** Get the ORDERED active rule set (precedence ladder applied; NO LLM). */
2979
- get(params?: GetRulesParams, signal?: AbortSignal): Promise<Page<Rule>>;
3018
+ get(params?: GetRulesParams, signal?: AbortSignal): Promise<RuleSnapshot>;
2980
3019
  /**
2981
3020
  * Save / edit a rule (append-only by supersession; D11). An agent-plane save is
2982
3021
  * ALWAYS project-layer: the saved rule's `rule_layer` is `project`, bound to the
@@ -3103,11 +3142,17 @@ declare class ExtrovertClient {
3103
3142
  * + a first inbox and returns a LIMITED-scope (read-only) agent key; a one-time
3104
3143
  * code is emailed to `human_email`. Call {@link verify} with the code to unlock
3105
3144
  * full scopes. Idempotent on `human_email`: re-calling rotates the key + resends.
3145
+ * When free signup is paused, this throws an `ApiError` with status 403 and
3146
+ * code `signup_disabled` without creating account state.
3106
3147
  */
3107
3148
  signUp(req: SignUpRequest, signal?: AbortSignal): Promise<SignUpResponse>;
3108
3149
  /**
3109
3150
  * Confirm the emailed signup code and receive a NEW full-scope agent key (shown
3110
3151
  * once). Must be called with the limited key from {@link signUp} as the bearer.
3152
+ * The result repeats the ready inbox address and includes MCP-first list/read/wait
3153
+ * calls; SDK callers can pass `address` directly to `inboxes` and `messages`.
3154
+ * Pending verification is also fail-closed with 403 `signup_disabled` while
3155
+ * free signup is paused.
3111
3156
  */
3112
3157
  verify(req: VerifyRequest, signal?: AbortSignal): Promise<VerifyResponse>;
3113
3158
  /** Introspect the principal behind the current key (`GET /v1/auth/me`). */
@@ -3674,7 +3719,7 @@ declare function signWebhook(secret: string, body: string, timestampSeconds: num
3674
3719
  *
3675
3720
  * ## Provisional, pre-1.0 (0.x)
3676
3721
  *
3677
- * {@link CONTRACT_VERSION} is **`0.1.0-pre.4`** — a deliberately **provisional**, pre-1.0
3722
+ * {@link CONTRACT_VERSION} is **`0.1.0-pre.6`** — a deliberately **provisional**, pre-1.0
3678
3723
  * contract. It is open and documented, but it MAY still evolve before 1.0: there
3679
3724
  * are no external users yet, and the **D20 shared-pool auto-send governor** is a
3680
3725
  * hard prerequisite before onboarding external users. Pin the version; expect
@@ -3731,12 +3776,12 @@ interface DiffJson {
3731
3776
  /**
3732
3777
  * The published version of the Extrovert Review-Loop open contract (D14).
3733
3778
  *
3734
- * **`0.1.0-pre.4` — PROVISIONAL, pre-1.0.** Versioned *with the SDK* (this package's
3779
+ * **`0.1.0-pre.6` — PROVISIONAL, pre-1.0.** Versioned *with the SDK* (this package's
3735
3780
  * `package.json` version) and aligned to the openapi `info.version`. Open and
3736
3781
  * documented, but MAY still evolve before 1.0 (no external users yet; the D20
3737
3782
  * shared-pool governor is required before external users). Pin it.
3738
3783
  */
3739
- declare const CONTRACT_VERSION: "0.1.0-pre.4";
3784
+ declare const CONTRACT_VERSION: "0.1.0-pre.6";
3740
3785
  /** The stability posture of a published contract version. */
3741
3786
  type ContractStability = "provisional" | "stable";
3742
3787
  /**
@@ -3779,4 +3824,4 @@ interface ContractManifest {
3779
3824
  */
3780
3825
  declare const CONTRACT_MANIFEST: ContractManifest;
3781
3826
 
3782
- export { API_VERSION_HEADER, type AccountRiskDial, type AckReviewEventEntry, type AckReviewEventRequest, type AckReviewEventResult, type AddContactListRequest, type Agent, type AgentStatus, ApiError, type ApiErrorBody, type Attachment, type AttachmentDownload, type AttachmentInput, AuthenticationError, type BatchUpdateMessagesRequest, type BatchUpdateResult, BornStaleError, BreadthRequiredError, CONTRACT_MANIFEST, CONTRACT_VERSION, CURRENT_API_VERSION, Categories, type Category, type CategoryPacingState, type CategoryRiskDial, ConflictError, ConnectionError, type ContactListDirection, type ContactListEntry, type ContactListKind, ContactLists, type ContractManifest, type ContractStability, type CreateInboxRequest, type Cursor, DEFAULT_BASE_URL, type DeleteResult, type DiffHunk, type DiffJson, type Domain, type DomainOffboard, type DomainRecord, type DomainScope, Domains, type EffectiveRiskDial, type EmailAddress, type EnrollRequest, type EnrollResponse, type ExtractedCredentials, ExtrovertClient as Extrovert, ExtrovertClient, type ExtrovertClientOptions, ForbiddenScopeError, type ForwardRequest, type GetInboxParams, type GetRuleAuditParams, type GetRulesParams, type GraduationStatus, IdempotencyConflictError, type Inbox, type InboxCredentials, InboxHandle, type InboxInclude, type InboxMetadata, type InboxMetadataPatch, type InboxMetadataValue, type InboxStatus, Inboxes, IntentRequiredError, type IsoTimestamp, type Job, type KeyTier, type List, type ListCategoriesParams, type ListInboxesParams, type ListMessagesParams, ListPage, type ListParams, type ListReviewEventsParams, type ListReviewsParams, type ListSuppressionsParams, type ListThreadsParams, MOCK_BASE_URL, type MailFolder, type MarkReadRequest, type Message, type MessageDirection, Messages, MockBackend, NotFoundError, type OnboardDomainRequest, type OnboardingMode, PROBLEM_CODES, type PacingItem, type Page, type PageFetcher, PaymentRequiredError, PermissionError, type PostReviewChatRequest, type Problem, type ProblemCode, type ProblemField, type ProjectInboxListParams, ProjectInboxes, Projects, type ProposeCategoryRequest, type ProposeGraduationRequest, type QueuedForReviewResult, REVIEW_PROBLEM_RETRYABLE, RateLimitError, RecipientSuppressedError, type RegisterWebhookRequest, type ReplyRequest, type RestampReviewRequest, type Review, ReviewConflictError, type ReviewDecisionContext, type ReviewEvent, type ReviewEventCursor, type ReviewEventReason, ReviewEvents, type ReviewEventsResult, type ReviewFeedback, type ReviewFeedbackComment, type ReviewInclude, type ReviewIntent, type ReviewMode, type ReviewPolicy, type ReviewState, type ReviewTurn, type ReviewerAction, type ReviewerDecisionRequest, type ReviewerDecisionResult, Reviews, type RiskDial, type Rule, type RuleAuditEntry, type RuleLayer, Rules, SDK_VERSION, type SaveRuleRequest, type ScanBacklogStatus, type Scope, type SearchMessagesParams, SendNeedsReconciliationError, type SendOutcome, type SendRequest, type SendResult, type SentResult, type SignUpRequest, type SignUpResponse, StaleError, type StreamEvent, type StreamOptions, type SubmitForReviewResult, type SubmitRevisionRequest, type SuppressionEntry, type SuppressionPrecheck, type SuppressionScope, type SuppressionSource, Suppressions, TerminalError, type Thread, type ThreadDetail, Threads, TimeoutError, UnavailableError, type UpdateCategoryRequest, type UpdateInboxRequest, type UpdateWebhookRequest, ValidationError, type VerifyRequest, type VerifyResponse, type VerifyWebhookOptions, type WaitForEmailRequest, type WaitForEmailResult, type WaitForReviewEventParams, type Webhook, type WebhookEvent, type WebhookPayload, Webhooks, type WhoAmI, WrongStateError, extractCredentials, extractLink, extractOtp, isProblemCode, isQueuedForReview, isSentImmediately, listPage, parseKeyTier, parseProblem, parseWebhook, reviewIdOf, sentMessageIdOf, serializeInclude, signWebhook, threadIdOf, tierAllowsOrgWildcard, tierNeedsExplicitBreadth, verifyWebhookSignature };
3827
+ export { API_VERSION_HEADER, type AccountRiskDial, type AckReviewEventEntry, type AckReviewEventRequest, type AckReviewEventResult, type AddContactListRequest, type Agent, type AgentStatus, ApiError, type ApiErrorBody, type Attachment, type AttachmentDownload, type AttachmentInput, AuthenticationError, type BatchUpdateMessagesRequest, type BatchUpdateResult, BornStaleError, BreadthRequiredError, CONTRACT_MANIFEST, CONTRACT_VERSION, CURRENT_API_VERSION, Categories, type Category, type CategoryPacingState, type CategoryRiskDial, ConflictError, ConnectionError, type ContactListDirection, type ContactListEntry, type ContactListKind, ContactLists, type ContractManifest, type ContractStability, type CreateInboxRequest, type Cursor, DEFAULT_BASE_URL, type DeleteResult, type DiffHunk, type DiffJson, type Domain, type DomainOffboard, type DomainRecord, type DomainScope, Domains, type EffectiveRiskDial, type EmailAddress, type EnrollRequest, type EnrollResponse, type ExtractedCredentials, ExtrovertClient as Extrovert, ExtrovertClient, type ExtrovertClientOptions, ForbiddenScopeError, type ForwardRequest, type GetInboxParams, type GetRuleAuditParams, type GetRulesParams, type GraduationStatus, IdempotencyConflictError, type Inbox, type InboxCredentials, InboxHandle, type InboxInclude, type InboxMetadata, type InboxMetadataPatch, type InboxMetadataValue, type InboxStatus, Inboxes, IntentRequiredError, type IsoTimestamp, type Job, type KeyTier, type List, type ListCategoriesParams, type ListInboxesParams, type ListMessagesParams, ListPage, type ListParams, type ListReviewEventsParams, type ListReviewsParams, type ListSuppressionsParams, type ListThreadsParams, MOCK_BASE_URL, type MailFolder, type MailboxQuickstart, type MailboxQuickstartCall, type MarkReadRequest, type Message, type MessageDirection, Messages, MockBackend, NotFoundError, type OnboardDomainRequest, type OnboardingMode, PROBLEM_CODES, type PacingItem, type Page, type PageFetcher, PaymentRequiredError, PermissionError, type PostReviewChatRequest, type Problem, type ProblemCode, type ProblemField, type ProjectInboxListParams, ProjectInboxes, Projects, type ProposeCategoryRequest, type ProposeGraduationRequest, type QueuedForReviewResult, REVIEW_PROBLEM_RETRYABLE, RateLimitError, RecipientSuppressedError, type RegisterWebhookRequest, type ReplyRequest, type RestampReviewRequest, type Review, ReviewConflictError, type ReviewDecisionContext, type ReviewEvent, type ReviewEventCursor, type ReviewEventReason, ReviewEvents, type ReviewEventsResult, type ReviewFeedback, type ReviewFeedbackComment, type ReviewInclude, type ReviewIntent, type ReviewMode, type ReviewPolicy, type ReviewState, type ReviewTurn, type ReviewerAction, type ReviewerDecisionRequest, type ReviewerDecisionResult, Reviews, type RiskDial, type Rule, type RuleAuditEntry, type RuleLayer, type RuleSnapshot, Rules, SDK_VERSION, type SaveRuleRequest, type ScanBacklogStatus, type Scope, type SearchMessagesParams, SendNeedsReconciliationError, type SendOutcome, type SendRequest, type SendResult, type SentResult, type SignUpRequest, type SignUpResponse, StaleError, type StreamEvent, type StreamOptions, type SubmitForReviewResult, type SubmitRevisionRequest, type SuppressionEntry, type SuppressionPrecheck, type SuppressionScope, type SuppressionSource, Suppressions, TerminalError, type Thread, type ThreadDetail, Threads, TimeoutError, UnavailableError, type UpdateCategoryRequest, type UpdateInboxRequest, type UpdateWebhookRequest, ValidationError, type VerifyRequest, type VerifyResponse, type VerifyWebhookOptions, type WaitForEmailRequest, type WaitForEmailResult, type WaitForReviewEventParams, type Webhook, type WebhookEvent, type WebhookPayload, Webhooks, type WhoAmI, WrongStateError, extractCredentials, extractLink, extractOtp, isProblemCode, isQueuedForReview, isSentImmediately, listPage, parseKeyTier, parseProblem, parseWebhook, reviewIdOf, sentMessageIdOf, serializeInclude, signWebhook, threadIdOf, tierAllowsOrgWildcard, tierNeedsExplicitBreadth, verifyWebhookSignature };
package/dist/index.js CHANGED
@@ -266,7 +266,7 @@ var CURRENT_API_VERSION = "2026-06-23";
266
266
  var API_VERSION_HEADER = "Extrovert-Version";
267
267
 
268
268
  // src/http.ts
269
- var SDK_VERSION = "0.1.0-pre.4";
269
+ var SDK_VERSION = "0.1.0-pre.6";
270
270
  function buildUrl(baseUrl, path, query) {
271
271
  const base = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
272
272
  const rel = path.startsWith("/") ? path : `/${path}`;
@@ -623,6 +623,23 @@ function decodeMockCursor(cursor) {
623
623
  return 0;
624
624
  }
625
625
  }
626
+ function mailboxQuickstart(address) {
627
+ return {
628
+ inbox: address,
629
+ list_mail: {
630
+ tool: "read_messages",
631
+ arguments: { inbox: address, limit: 20, unread_only: false }
632
+ },
633
+ read_message: {
634
+ tool: "get_message",
635
+ arguments: { id: "<message_id from read_messages>", format: "text", variant: "extracted" }
636
+ },
637
+ wait_for_mail: {
638
+ tool: "wait_for_email",
639
+ arguments: { inbox: address, since_now: true }
640
+ }
641
+ };
642
+ }
626
643
  var SHARED_SUBDOMAIN = "smtp.extrovert.dev";
627
644
  var MOCK_ORG_ID = "org_mock";
628
645
  var MOCK_PROJECT_ID = "prj_mock";
@@ -933,14 +950,14 @@ var MockBackend = class {
933
950
  const customerId = existing?.customerId ?? `cus_pn_signup_${rid("c").slice(2)}`;
934
951
  const agentId = existing?.agentId ?? rid("agt");
935
952
  const address = existing?.address ?? `${req.username ?? randomHandle()}@smtp.extrovert.dev`;
936
- const otp = String(Math.floor(1e5 + Math.random() * 9e5));
953
+ const otp = "492013";
937
954
  this.state.signupByEmail.set(email, { customerId, agentId, address, otp, verified: false });
938
955
  return {
939
956
  customer_id: customerId,
940
957
  agent_id: agentId,
941
958
  agent_key: `pk_agent_${agentId.slice(4)}_${rid("sk").slice(3)}`,
942
959
  key_prefix: `pk_agent_${agentId.slice(4, 8)}`,
943
- scopes: ["mailbox:read"],
960
+ scopes: ["signup:verify"],
944
961
  address,
945
962
  verified: false,
946
963
  otp_sent_to: email,
@@ -958,8 +975,10 @@ var MockBackend = class {
958
975
  agent_key: `pk_agent_${s.agentId.slice(4)}_${rid("sk").slice(3)}`,
959
976
  key_prefix: `pk_agent_${s.agentId.slice(4, 8)}`,
960
977
  scopes: ["mailbox:create", "mailbox:read", "mailbox:send"],
978
+ address: s.address,
961
979
  verified: true,
962
- message: "Verified. Use the new agent_key (full scopes)."
980
+ message: "Verified. The inbox is ready; use read_messages, then get_message with a returned message id.",
981
+ mailbox_quickstart: mailboxQuickstart(s.address)
963
982
  };
964
983
  }
965
984
  }
@@ -1969,7 +1988,15 @@ var MockBackend = class {
1969
1988
  category = active.filter((r) => r.scope === "category" && r.category_id === params.category_id).sort(byRank);
1970
1989
  }
1971
1990
  const items = [...category, ...general];
1972
- return { items, total: items.length };
1991
+ return {
1992
+ items,
1993
+ total: items.length,
1994
+ house_style_version: 1,
1995
+ category_rules_version: params.category_id ? 1 : 0,
1996
+ rule_high_water: params.category_id ? 1 : 0,
1997
+ composition_token: params.scope ? void 0 : `cmp_fixture_${params.category_id ?? "general"}`,
1998
+ composition_token_expires_at: params.scope ? void 0 : new Date(Date.now() + 6e5).toISOString()
1999
+ };
1973
2000
  }
1974
2001
  /** Save / edit a rule (mock) — append-only by supersession (D11). */
1975
2002
  saveRule(req) {
@@ -3577,7 +3604,13 @@ var HttpTransport = class {
3577
3604
  });
3578
3605
  }
3579
3606
  saveRule(req, signal) {
3580
- return this.call({ method: "PUT", path: "/v1/rules", body: req, signal });
3607
+ return this.call({
3608
+ method: "PUT",
3609
+ path: "/v1/rules",
3610
+ body: withoutIdempotencyKey(req),
3611
+ idempotencyKey: req.idempotency_key,
3612
+ signal
3613
+ });
3581
3614
  }
3582
3615
  promoteRule(ruleId, toScope, signal) {
3583
3616
  return this.call({
@@ -4974,6 +5007,8 @@ var ExtrovertClient = class _ExtrovertClient {
4974
5007
  * + a first inbox and returns a LIMITED-scope (read-only) agent key; a one-time
4975
5008
  * code is emailed to `human_email`. Call {@link verify} with the code to unlock
4976
5009
  * full scopes. Idempotent on `human_email`: re-calling rotates the key + resends.
5010
+ * When free signup is paused, this throws an `ApiError` with status 403 and
5011
+ * code `signup_disabled` without creating account state.
4977
5012
  */
4978
5013
  signUp(req, signal) {
4979
5014
  return this.transport.signUp(req, signal);
@@ -4981,6 +5016,10 @@ var ExtrovertClient = class _ExtrovertClient {
4981
5016
  /**
4982
5017
  * Confirm the emailed signup code and receive a NEW full-scope agent key (shown
4983
5018
  * once). Must be called with the limited key from {@link signUp} as the bearer.
5019
+ * The result repeats the ready inbox address and includes MCP-first list/read/wait
5020
+ * calls; SDK callers can pass `address` directly to `inboxes` and `messages`.
5021
+ * Pending verification is also fail-closed with 403 `signup_disabled` while
5022
+ * free signup is paused.
4984
5023
  */
4985
5024
  verify(req, signal) {
4986
5025
  return this.transport.verify(req, signal);
@@ -5148,7 +5187,7 @@ async function signWebhook(secret, body, timestampSeconds) {
5148
5187
  }
5149
5188
 
5150
5189
  // src/contract.ts
5151
- var CONTRACT_VERSION = "0.1.0-pre.4";
5190
+ var CONTRACT_VERSION = "0.1.0-pre.6";
5152
5191
  var CONTRACT_MANIFEST = {
5153
5192
  name: "extrovert.review-loop",
5154
5193
  version: CONTRACT_VERSION,