POLYROB v1.0.1
Added
self-deployskill: an agent-facing bootstrap for a FRESH instance —
assess (model, wallet + funding per chain, email, X, autonomy grants, tool
catalog), provision what a lever exists for (own inbox, X account, standing
work), bundle the human-only asks into ONE message (API keys, funding
addresses read from a tool, env flags, a CAPTCHA), verify by a READ, and
report one readiness table. Until nowpolyrob initwas the human's wizard
and the setup interview covered only the owner contract.twitter_poll_results(tweet_id): reads the options, votes, shares,
voting_statusand end time of a poll the agent posted. The tool could post
a poll (poll_options) but no read asked forattachments.poll_ids, so the
agent could ask the community and never learn the answer. The
x-engagementskill now teaches the post → record id → read → aggregate loop
and pins poll answers as DATA.- X message reads distinguish legacy Direct Messages from encrypted X Chat,
support OAuth 2.0 PKCE user tokens, and can verify/decrypt Chat event history
with the official Chat XDK and account keys instead of misreporting ciphertext
or a legacy-only page as an empty inbox. - The
identitystatus section now reports the agent's reachable identities:
email:(the address it sends AS, ornone → remedy) andx:(API rail
configured / PARTIAL with the missing key names / none, plus the handle and
whether writes are armed). Env PRESENCE only, never a value. - A
liquiditystatus section on every seat (status snapshot,polyrob wallet overview, Telegram/wallet overview, consoleGET /api/webgate/liquidity)
lists the treasury's Uniswap v3 positions with their fees; on-chain
enumeration is opt-in and owner-only./lpis listed in the money verb
group on every chat surface. launchpad_statusnames the graduated pool (PoolKey + pool id) once a Pons
V2 curve has graduated, and states the fee reality: the LP fee is 0, the
hook collects, creator income is claimed via the escrow, and the launch
locker position cannot be withdrawn.X_SIGNUP_HANDLE/X_SIGNUP_DISCLOSURE: the @handlex_signup_start
requests and the automation-disclosure bio it writes.
Changed
- Post-1.0 alignment sweep: one home per shared rule instead of hand-carried
copies.core.event_logowns the telemetry db resolution and a fail-open
emit()(the recap reader used to ignoreTELEMETRY_EVENT_LOG_PATHand
create the db on read); every owner/admin CLI verb resolves its data home
throughcli/_admin_home.py(the deployed-home rule now also covers
apps,surface,cron,goals,journey, andowner pending's goal
board, which came from a third resolver); the sub-agent and owner-pause
refusals every money verb states live incore.wallet.authority; the
publish/app-service owner-turn clauses incore.security.owner_turn; the
ship rail's orchestrator/approval/workspace helpers intools/ship_common.py;
the goal board's status/kind vocabulary incore.goal_vocab; the/help
group order is read fromcore.verbs; the copy-layer engine is shared by
core.copyandwebview.copy; the Telegram update dedup is the core
IdempotencyStoreover its existing table. Twelve open-coded boolean
truth sets now parse throughcore.env, pinned shrink-only by
tests/test_bool_env_parse_ratchet.py. - Social-agent skills and toolsets now route public discovery, native X account
reads, encrypted Chat, browser inbox fallback, and approval-gated writes through
the capabilities that actually implement each operation. - REPL slash commands parse quoted arguments (
/steer "two words"is one
argument); an unbalanced quote is refused with the remedy. Free-text verbs
(/learn,/persona) keep the raw line./exportnames the formats the
REPL supports and points atpolyrob session exportfor the rest;/logs
prints the log directory instead of a CLI verb that does not exist. - The approval
awaitingevent names the provider that will decide. lp_collect/lp_removeset their receipt minimum from a simulated
collect, not the position's fee-growth estimate (core rounding leaves the
estimate several raw units high, which made a correct collect refuse).
Every position receipt also asserts the fungible legs. LP legs are no longer
written into the token-keyed position book: adding them double-counted
tokens already held, and removing them on withdrawal erased unrelated
holdings. Position receipts stay in the NFT and transaction telemetry until
an LP-specific basis exists.
Fixed
- Scheduled agent runs now propagate wall-clock cancellation and are recorded as
incomplete unless the agent actually callsdone(). The default cron budget is
ten minutes, preventing slow provider calls from silently turning unfinished
treasury rails into successful ticks. - Provider health distinguishes a sentinel on the serving provider from one on an
unused fallback. A credit-limited fallback is shown as a warning and explicitly
does not claim to block the live provider. - Live incremental streams claim the turn's reply latch after becoming visible,
preventingdone()bookkeeping from producing a second user-facing response. - Browser management accepts operator-configured CDP and WebSocket endpoints, so
hardened custody deployments can keep Chromium outside the signing service. - The owner's spend ceilings are read from the same home the preference
writers use.tx_guard, the wallet config fallback and the Telegram
/wallet autonomousverb resolved the preference store through the
process home (an empty tree under a service account), so an approved
budget.defi_autonomous_usdwas recorded and never read and the guard kept
refusing at the env default. Those seats may no longer call the process
home (ratcheted). - X self-registration:
XPageDriver.set_handle_and_profilewas apassstub
while the docs claimed the disclosure was written into the bio — no handle
and no disclosure were ever applied. It now edits/settings/screen_nameand
/settings/profilebest-effort and RETURNS what it applied; the signup
result carriesrequested_handle/handle_applied/bio_appliedand the tool
says plainly when the disclosure is NOT on the profile yet. The flow refuses
up front with the remedy when the agent has no email or no inbox client
(it used to fill an EMPTY email and pause several steps later on "no code
arrived"), provisions the AgentMail inbox idempotently before opening a
browser, and the default disclosure names the instance instead of the
owner's internal tenant id (operated by local). x_browserstays explicit-grant-only: it ishigh_impact+
delegate_blocked, so it is not on the CLI optional-registrar table and is
reached by explicittool_idsonly.- A per-profile daemon (
polyrob profile create --service) no longer loads
the primary instance's environment first: any key the profile did not
override leaked through (its Telegram token → a 409 fight, itsTWITTER_*
keys → the profile posted AS the primary, its owner ids and money flags). A
profile daemon reads its own environment files only. defi_trade.register_agent/set_agent_urireferencedos.environwith
no module-level import (latentNameError).- The coding and git tools resolve their confined root per TENANT, not the
anonymous bucket, on a multi-tenant server. - The
twitterextra now carrieschatxdk, which the encrypted X Chat reads
need; a base install without the extra still imports.
Deployment
- The signing service owns the wallet state directory while wallet artifacts
remain group-readable, allowing the durable submission journal to be created on
the first broadcast without weakening the service-identity boundary.
What's Changed
- release: POLYROB 1.0.1 by @themontreal in #17
Full Changelog: v1.0.0...v1.0.1