Where state lives: the chain (balances, authorizations, directory, own services), the memory service (conversations, settings record), the runner's DO (identity root, sessions, running turns), the browser (key, language, theme, last-used runner and memory).
- Where each piece of state lives. The wallet is a key and holds nothing. On chain: token balances; authorizations (cap, used, reserved per wallet, agent, token); the service directory; which services are the wallet's own (directory owner). In the wallet's store (D51): the conversations (transcript, title, status, spends) and the wallet's settings record (My services and their default caps; default model, effort, runner and store). In the runner's DO: the identity root, the sessions, the running turns and a cache of the conversations it works on. In the browser only: the wallet key (exported and imported by the person), language, theme, and the last-used runner and store, with the provider's as the defaults (D43).
- Steven, 2026-10-23: "补上吧,没这个不行". The Conversations list and My services are read from the store; the Directory and the balances from the chain; a new browser finds the settings record in the default store and the preferred runner in it.
The memory service: a direct service (woodpecker@0a1b/memory, tMemory, fixed 1 per commit) that keeps the conversations and the settings record; the runner commits each completed turn; the owner signs in to it as to the runner.
- The store service returns, as a direct service. Kind
store (D34): durable conversation storage with commit, read and scan, plus the wallet's settings record. Default woodpecker@0a1b/store, token tStore, fixed 1 tStore per commit (D36), in My services from the start with the runner and the llm (D43), 50 tStore in the starter pack (D44). The runner commits each completed turn to the conversation's store with an Intent signed by the conversation's agent (token = tStore); the store's submitter reserves and settles on contract A. The owner wallet signs in to the store as to the runner (D47) and reads its conversations and writes its settings record free of charge; the agent that committed a conversation may read it. The store is chosen per wallet in Settings and per conversation in the New conversation dialog, next to the runner. Any wallet may deploy its own store from the store preset (a Worker + Durable Object storage, no upstream key). - Revises D48 for the store only: proxy tokens, nested billing, the Intent
fund field and the bundled deployment stay deferred. Consequence: the runner is replaceable; the conversations stay in the store when the runner changes.
- The service of D51 is called
memory: kind memory, default woodpecker@0a1b/memory, token tMemory, fixed 1 tMemory per commit. Nothing else is renamed: the "settings record" keeps its name, conversations keep theirs. - Steven, 2026-10-23: "memory 吧 就 store 改 memory 不要乱改其他的名字".
The kind cloud is renamed host; woodpecker@0a1b/cf keeps its name and its token tCloud.
- The kind
cloud is renamed hosting. A hosting service deploys and runs the Workers of gateways, runners and stores: deploy a Worker, put a secret, bind a Durable Object, read logs, delete (the D34 interfaces, unchanged). The service woodpecker@0a1b/cf keeps its name and its token tCloud; only its kind changes. Kinds are now runner, store, model, tool, hosting. - Proposed word
hosting (alternatives: host, deployer); Steven to confirm the word.
- The kind of D52 is
host (not hosting). woodpecker@0a1b/cf and tCloud unchanged. Kinds: runner, memory, model, tool, host. - Steven, 2026-10-23.