@oracle-agent/oracle 0.23.1 → 0.24.0
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/README.md +16 -13
- package/SECURITY.md +9 -8
- package/SETUP.md +36 -9
- package/dist/bin/desk-server.mjs +17 -17
- package/dist/bin/oracle.mjs +13 -8
- package/dist/cli/commands/sign.mjs +23 -0
- package/dist/cli/commands/signer.mjs +13 -0
- package/dist/data/desk-data.mjs +14 -14
- package/dist/index.mjs +20 -20
- package/dist/local-signer/index.mjs +4 -0
- package/package.json +4 -3
- package/public/service/la.oracle.local-signer.plist +7 -0
- package/public/service/oracle-signer-task.ps1 +5 -0
- package/public/service/oracle-signer.service +16 -0
package/README.md
CHANGED
|
@@ -45,10 +45,13 @@ Oracle can run standalone model auth directly with API keys or Claude, Codex,
|
|
|
45
45
|
and Grok OAuth. OAuth credentials use the OS keychain when available, with a
|
|
46
46
|
private `0600` local fallback when keychain storage is unavailable.
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
Oracle is **prepare-only by default and on hosted surfaces**. A self-hoster may
|
|
49
|
+
explicitly initialize the optional encrypted local vault and run a short-lived,
|
|
50
|
+
loopback-only signer. Every normal action requires exact one-use human
|
|
51
|
+
confirmation and policy checks; autonomous trading additionally requires
|
|
52
|
+
`ORACLE_AUTONOMOUS_TRADING=1`. Never paste a seed, key, passphrase, or signer
|
|
53
|
+
token into Oracle chat or argv. The private `@oracle-agent/agent` admin package
|
|
54
|
+
remains separate and is not included here.
|
|
52
55
|
|
|
53
56
|
---
|
|
54
57
|
|
|
@@ -203,7 +206,7 @@ known answer. This matters: the canonical QuoterV2 address also has bytecode on
|
|
|
203
206
|
Base, but does not price that chain's pairs. A codesize check would have
|
|
204
207
|
allowlisted the wrong contract.
|
|
205
208
|
|
|
206
|
-
**
|
|
209
|
+
**73 provider modules** in the read/quote catalog, covering **219 unique
|
|
207
210
|
protocols/venues** across EVM, Solana, and Bitcoin (115 EVM + cross-chain, 98
|
|
208
211
|
Solana venues backed by 101 verified Jupiter program IDs, 6 Bitcoin surfaces).
|
|
209
212
|
One module can cover many protocols: the Jupiter module alone routes 98 Solana
|
|
@@ -389,20 +392,20 @@ oracle chain use hyperliquid
|
|
|
389
392
|
oracle setup # telegram / discord / slack messaging
|
|
390
393
|
```
|
|
391
394
|
|
|
392
|
-
Terminal and configured messaging channels are
|
|
393
|
-
`oracle` profile.
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
395
|
+
Terminal and configured messaging channels are untrusted proposers into the
|
|
396
|
+
same Hermes `oracle` profile. They cannot self-confirm or directly invoke the
|
|
397
|
+
optional signer. Signing stays in the user wallet or in the explicitly enabled,
|
|
398
|
+
loopback-only public local signer after independent local confirmation and
|
|
399
|
+
sealed-policy checks. Private Administrator execution remains separate.
|
|
397
400
|
|
|
398
401
|
Lanes: `oracle` (router), `polymarket-agent`, `hyperliquid-agent`,
|
|
399
402
|
`robinhood-agent`, `solana-agent`, `bitcoin-agent`, `stable-agent`,
|
|
400
403
|
`protocol-builder`, plus `_template` for your own. Details in
|
|
401
404
|
[`docs/profiles.md`](docs/profiles.md).
|
|
402
405
|
|
|
403
|
-
Every lane
|
|
404
|
-
|
|
405
|
-
|
|
406
|
+
Every model lane remains unable to authorize signing. It may only read,
|
|
407
|
+
simulate, and prepare; local key initialization arms user-initiated actions,
|
|
408
|
+
while Disarm is globally dominant. An existing `SOUL.md` is never overwritten without
|
|
406
409
|
`--force`, and `--force` writes a timestamped backup first.
|
|
407
410
|
|
|
408
411
|
Oracle does not issue its own model credential. Standalone chat uses the OAuth
|
package/SECURITY.md
CHANGED
|
@@ -44,9 +44,9 @@ model is treated as an untrusted proposer.
|
|
|
44
44
|
|
|
45
45
|
Consequences of that assumption, which are the invariants worth attacking:
|
|
46
46
|
|
|
47
|
-
1. **
|
|
48
|
-
|
|
49
|
-
the npm artifact.
|
|
47
|
+
1. **Hosted/default operation never holds a key.** An explicit self-host setup
|
|
48
|
+
may hold one only in the encrypted local vault. Private Administrator modules
|
|
49
|
+
are excluded from public entrypoints and the npm artifact.
|
|
50
50
|
2. **Model output is not authorization.** A grant is authorization, and a grant
|
|
51
51
|
is signed by the owner, scoped, and expiring.
|
|
52
52
|
3. **Destinations are allowlisted per chain and fail closed.** An empty allowlist
|
|
@@ -77,11 +77,12 @@ A security claim that isn't enforced by a test is just a comment.
|
|
|
77
77
|
These are not public-package custody holes. They are operator constraints that
|
|
78
78
|
still apply after the public boundary hardening:
|
|
79
79
|
|
|
80
|
-
1. **
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
1. **Public self-host custody is local and explicit.** The optional signer uses
|
|
81
|
+
an scrypt/AES-GCM encrypted local vault and short-lived loopback daemon.
|
|
82
|
+
Hosted/default operation remains prepare-only. This cannot protect against
|
|
83
|
+
malware in an unlocked signer process; use hardware custody for that threat.
|
|
84
|
+
The private `@oracle-agent/agent` admin package remains separate and must not
|
|
85
|
+
appear in this package or its publish artifact.
|
|
85
86
|
2. **Prepare helpers that validate executable routes require an attestation
|
|
86
87
|
secret** (`requireSigned`) so they cannot be used as a softer pre-broadcast
|
|
87
88
|
gate than `enforceTxPolicy`.
|
package/SETUP.md
CHANGED
|
@@ -1,18 +1,45 @@
|
|
|
1
1
|
# Oracle setup
|
|
2
2
|
|
|
3
|
-
Oracle's public CLI is
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
The
|
|
8
|
-
on npm and is not part of public onboarding.
|
|
3
|
+
Oracle's public CLI is prepare-only unless a user deliberately enables its
|
|
4
|
+
self-hosted signer. The optional signer uses an AES-256-GCM/scrypt encrypted
|
|
5
|
+
vault on the user's machine, listens only on loopback, and signs only exact
|
|
6
|
+
confirmed artifacts within configured policy. Hosted Oracle remains
|
|
7
|
+
prepare-only. The private `@oracle-agent/agent` admin package is not imported.
|
|
9
8
|
|
|
10
9
|
## Requirements
|
|
11
10
|
|
|
12
11
|
- Node.js `20.19.0` or newer
|
|
13
12
|
- npm
|
|
14
13
|
- A supported model login or API key for chat
|
|
15
|
-
- A user-controlled wallet
|
|
14
|
+
- A user-controlled wallet, external or in the optional encrypted local vault
|
|
15
|
+
|
|
16
|
+
## Local self-hosted signer
|
|
17
|
+
|
|
18
|
+
Never paste a key or passphrase into Oracle, chat, or argv. Use a hidden TTY or
|
|
19
|
+
owner-only (`0600`) files:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
oracle sign init
|
|
23
|
+
oracle sign import --key-file /protected/key --passphrase-file /protected/passphrase
|
|
24
|
+
oracle sign policy --policy-file /protected/policy.json
|
|
25
|
+
oracle sign doctor
|
|
26
|
+
oracle signer --credential-service oracle-local-signer --session-seconds 120
|
|
27
|
+
# protected-file fallback, and the required Windows behavior:
|
|
28
|
+
oracle signer --passphrase-file /protected/passphrase --session-seconds 120
|
|
29
|
+
oracle sign lock
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Configure and HMAC-seal `~/.config/oracle/signer/signer-policy.json` with non-empty surface, action, chain,
|
|
33
|
+
destination, selector, spender, and owner allowlists plus explicit value,
|
|
34
|
+
approval, gas/fee, slippage, expiry, and RPC bounds. Empty allowlists fail
|
|
35
|
+
closed. Exact one-use confirmation binds the final gas-populated artifact, which
|
|
36
|
+
is checked again immediately before broadcast. Lock/disarm always wins.
|
|
37
|
+
|
|
38
|
+
Service templates ship under `public/service/` for Linux systemd, macOS
|
|
39
|
+
launchd, and Windows Task Scheduler/PowerShell. Linux/macOS can retrieve the
|
|
40
|
+
passphrase from the logged-in user's keyring; Windows currently requires an
|
|
41
|
+
ACL-protected file. Installation is deliberately not automatic. Never put a
|
|
42
|
+
passphrase in service argv or an inherited environment.
|
|
16
43
|
|
|
17
44
|
Linux, Windows, and macOS apps are in beta.
|
|
18
45
|
|
|
@@ -113,8 +140,8 @@ and a submitted transaction is not a confirmed receipt.
|
|
|
113
140
|
| Chat, research, market data | yes | none |
|
|
114
141
|
| Quotes and simulations | yes | none |
|
|
115
142
|
| Unsigned transaction / typed-data preparation | yes | user's wallet reviews and signs |
|
|
116
|
-
| Signing, submission, broadcast |
|
|
117
|
-
| Automatic trading |
|
|
143
|
+
| Signing, submission, broadcast | optional self-host only | encrypted local vault, sealed policy, exact local confirmation |
|
|
144
|
+
| Automatic trading | explicit self-host only | exact env `1`, autonomous policy mode, and verified trigger attestation |
|
|
118
145
|
|
|
119
146
|
Never paste a seed phrase, private key, hardware-wallet recovery phrase, vault
|
|
120
147
|
passphrase, signer token, bot token, or provider credential into chat.
|