MVP demo: one operator-funded API key anyone can plug into an IDE/harness,
running real escrow-per-session marketplace conversations (llm.chat.v1)
behind the standard OpenAI /chat/completions wire shape.
- shared: ChatMessage gains tool role + tool_calls; normalizeChatMessage/
chatMessagesEquivalent keep supplier transcript and gateway mirror
hash-identical for receipts (field presence is part of the identity)
- supplier: /v1/chat/message accepts {messages,tools,tool_choice} alongside
legacy {content}; callOpenAiStream forwards tools, accumulates fragmented
delta.tool_calls, allows content-less tool turns; done frame carries the
assistant message verbatim + finish_reason + usage
- gateway: demo flag on api_keys (additive migration), create-demo-key CLI,
withdraw 403 + hidden deposit address for demo keys, per-IP demo rate
limit (demo keys skip the shared per-key limit), models filtered to chat
capability
- gateway executor (demoChat.ts): transcript-prefix affinity maps stateless
calls onto open sessions, forwards only unseen deltas, transparently
reopens on supplier idle-close; never falls back to one-shot (its settle
path assumes <=1 in-flight escrow per wallet)
- mutex scope: key mutex held only for chain work (open/close); off-chain
turns serialize on per-session locks so replicas serve users concurrently
- sweeper: chat-aware reclaim guard (35min vs 11min) and abandoned-session
cleanup; terminal state confirmed via on-chain queryUtxo (indexer keeps
lineage rows at their old state forever)
- deploy: kimi-chat replicas 2+3 compose files; chat idle timeout 2.5min
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
30 lines
761 B
JSON
30 lines
761 B
JSON
{
|
|
"name": "@marketplace/gateway",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"typecheck": "tsc --noEmit",
|
|
"start": "tsx src/index.ts",
|
|
"dev": "tsx src/index.ts",
|
|
"rotate-master-key": "tsx src/cli/rotate-master-key.ts",
|
|
"create-demo-key": "tsx src/cli/create-demo-key.ts"
|
|
},
|
|
"dependencies": {
|
|
"@marketplace/buyer": "workspace:*",
|
|
"@marketplace/shared": "workspace:*",
|
|
"@noble/ed25519": "^2.3.0",
|
|
"@noble/hashes": "^1.8.0",
|
|
"bech32": "^2.0.0",
|
|
"better-sqlite3": "^11.9.1",
|
|
"express": "^4.21.2"
|
|
},
|
|
"devDependencies": {
|
|
"@types/better-sqlite3": "^7.6.12",
|
|
"@types/express": "^5.0.3",
|
|
"supertest": "^7.0.0",
|
|
"tsx": "^4.19.0",
|
|
"typescript": "^5.7.2"
|
|
}
|
|
}
|