Two structural fixes for demo concurrency (3 single-slot suppliers thrashed
under Open WebUI's ~3 conversations per message):
Multi-slot suppliers (MAX_CHAT_SESSIONS, default 1):
- SupplierState is now capacity-aware: a Set of active escrow refs with
free-until-full status semantics, ref-scoped release(ref) (also fixes the
latent bug where handler catch-alls released another request's slot), and
a walletMutex serializing every wallet-spending chain op — Claim, Submit,
and wallet-health consolidation queue instead of racing the single
working/collateral UTxO. /status gains active_sessions/max_sessions.
Entry-ticket settle mode (CHAT_SETTLE_MODE=ticket, default full, both sides):
- The buyer's escrow post at session open is the ONLY chain op. The supplier
verifies the Open escrow as an entry ticket but never Claims/Submits
(/v1/chat/start → {status:"ticket"}; /v1/chat/end → receipt-less
{status:"ended"}); no hard-cap timer, so sessions may outlive deliver_by.
Used tickets can't reopen sessions (records retained; 409 session_exists).
- Buyer SDK: startChat/endChat are settle-mode aware, driven by the
supplier's response — mixed-mode rollout windows settle correctly.
- Gateway: ticket closes bill cost 0; the sweeper Reclaims Open tickets
after deliver_by WITHOUT closing live sessions (the conversation and its
affinity mirror survive their reclaimed ticket), gates reclaims on
deliver_by, and keeps an in-process settled-refs memory so terminal
indexer rows aren't retried every sweep forever.
Deployment (kimi-chat trio + gateway): ticket mode, 8 slots per supplier,
idle policy gateway 10 min / supplier 15 min (fixes the inversion where the
supplier idle-closed before the gateway janitor).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
26 lines
711 B
TypeScript
26 lines
711 B
TypeScript
/**
|
|
* buyer/src/sdk/index.ts — SDK barrel export.
|
|
*/
|
|
|
|
export { Marketplace } from "./Marketplace.js";
|
|
export type { MarketplaceOpts, NetworkParams } from "./Marketplace.js";
|
|
export type {
|
|
SubmitPromptResult,
|
|
TaskRecord,
|
|
TaskStatus,
|
|
ProgressEvent,
|
|
ProgressEventType,
|
|
SupplierView,
|
|
DiscoverSuppliersOptions,
|
|
SubmitPromptOptions,
|
|
AcceptResultOptions,
|
|
ReclaimOptions,
|
|
GetTaskHistoryOptions,
|
|
ChatSettleMode,
|
|
StartChatResult,
|
|
EndChatResult,
|
|
} from "./types.js";
|
|
export { ReceiptVerificationError, IndexerError, SupplierError } from "./types.js";
|
|
export type { TaskHistoryStore } from "./history.js";
|
|
export { MemoryTaskHistoryStore, LocalStorageTaskHistoryStore } from "./history.js";
|