@oracle-agent/oracle 0.28.27 → 0.28.29
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 +10 -3
- package/SETUP.md +3 -0
- package/dist/assets/skills/bankrbot/SKILL.md +24 -0
- package/dist/assets/skills/oracle-agentic-crypto/SKILL.md +39 -0
- package/dist/assets/skills/oracle-chain-graphs-telegram-cards/SKILL.md +2 -0
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/assets/skills/oracle-uniswap-v4-hooks/SKILL.md +31 -0
- package/dist/assets/skills/oracle-x402/SKILL.md +30 -0
- package/dist/bin/desk-server.mjs +28 -26
- package/dist/bin/oracle-data-mcp.mjs +32 -12
- package/dist/bin/oracle-gateway.mjs +39 -26
- package/dist/bin/oracle-mev-arb-shadow.mjs +5 -5
- package/dist/bin/oracle-mev-shadow.mjs +5 -5
- package/dist/bin/oracle-public-server.mjs +4 -4
- package/dist/bin/oracle-route.mjs +15 -15
- package/dist/bin/oracle-scan.mjs +11 -11
- package/dist/bin/oracle.mjs +4 -3
- package/dist/cli/commands/auth.mjs +6 -6
- package/dist/cli/commands/chat.mjs +155 -155
- package/dist/cli/commands/doctor.mjs +1 -1
- package/dist/cli/commands/eval.mjs +77 -77
- package/dist/cli/commands/harness.mjs +4 -4
- package/dist/cli/commands/model.mjs +157 -157
- package/dist/cli/commands/receipt.mjs +1 -1
- package/dist/cli/commands/setup.mjs +23 -23
- package/dist/cli/commands/signer.mjs +8 -8
- package/dist/cli/commands/snipe.mjs +24 -0
- package/dist/cli/commands/swap.mjs +25 -25
- package/dist/cli/commands/venues.mjs +1 -1
- package/dist/control/approval-binding.mjs +1 -0
- package/dist/control/finality.mjs +1 -0
- package/dist/control-plane/index.mjs +6 -0
- package/dist/data/desk-data.mjs +26 -24
- package/dist/governance-prepare.mjs +2 -0
- package/dist/index.mjs +44 -31
- package/dist/local-marketplace.mjs +3 -0
- package/dist/local-pack-registry.mjs +3 -0
- package/dist/local-signer/index.mjs +3 -3
- package/dist/local-signer/runtime.mjs +8 -8
- package/dist/local-x402.mjs +3 -0
- package/dist/nft/index.mjs +1 -1
- package/dist/notifications/index.mjs +3 -0
- package/dist/position-health.mjs +2 -0
- package/dist/router/index.mjs +2 -2
- package/dist/router/prepare-bridge.mjs +2 -2
- package/dist/safety-intelligence.mjs +1 -0
- package/dist/scanner/index.mjs +3 -3
- package/dist/task.d.mts +130 -0
- package/dist/task.mjs +2 -0
- package/dist/tax-lots.mjs +5 -0
- package/dist/tenant-rbac.mjs +1 -0
- package/dist/workflow-telemetry.mjs +1 -0
- package/package.json +17 -2
- package/public/agent-connect/index.html +2 -2
- package/public/install.sh +2 -2
- package/public/oracle-splash/index.html +2 -2
- package/public/oracle-splash/install.sh +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createHash as ee,randomBytes as te}from"node:crypto";var X=Object.freeze(["owner","operator","agent","viewer"]),J=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry"]),G=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Oe=Object.freeze(["owner"]),be=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),Te=new Set(X),Ee=new Set(J),_e=new Set(Object.values(G));var q=/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/;var Q=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read"])}),Ae=Object.freeze(Object.fromEntries(Object.entries(Q).map(([e,t])=>[e,Object.freeze([...t])]))),h=class extends Error{constructor(t,n="invalid-context"){super(t),this.name="TenantContextError",this.code=n}};function k(e,t){let n=String(e??"").trim();if(!q.test(n))throw new h(`${t} is invalid`);return n}function C(e,t){let n=k(e,"tenantId"),r=k(t,"workflowId");if(n.includes(":")||r.includes(":"))throw new h("stream key parts must not contain ':'","invalid-stream-key");return`${n}:${r}`}var L=1,$=1,ne=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),re=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),S=Object.freeze(["taskId","intentId","planId","runId","eventId"]);function I(e,t){return C(e,t)}var p=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),D=new Set(ne),oe=new Set(re),ae=new Set(S),ie=/^[0-9a-f]{32}$/,j=/^[0-9a-f]{16}$/,se=/^[0-9a-f]{64}$/,v=new WeakSet,ce=/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,95}$/,V=/^[A-Za-z0-9][A-Za-z0-9._:@/-]{0,127}$/,de=/^[A-Za-z][A-Za-z0-9_.-]*$/,le=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]),ue=/(?:^|\s)Bearer\s+\S+|-----BEGIN [A-Z ]*PRIVATE KEY-----|\bxprv[0-9A-Za-z]{20,}\b|\bsk-[A-Za-z0-9_-]{16,}\b|[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{16,}/i,fe=/(?:0x)?[0-9a-fA-F]{66,}/,pe=/[A-Za-z0-9+/=_-]{96,}/,a=class extends Error{constructor(t,n="invalid-telemetry"){super(t),this.name="WorkflowTelemetryError",this.code=n}};function w(e){return!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function u(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))u(t)}return e}function E(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(E).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${E(e[t])}`).join(",")}}`}function K(e){return ee("sha256").update(E(e)).digest("hex")}function R(e,t,n){let r=n?n(e,t):te(e).toString("hex");return String(r??"").trim().toLowerCase()}function O(e={}){if(e==null)return{};if(!w(e))throw new a("correlation must be a plain object");let t=Object.keys(e).filter(r=>!ae.has(r));if(t.length)throw new a(`unknown correlation fields: ${t.sort().join(", ")}`);let n={};for(let r of S){if(e[r]==null)continue;let o=String(e[r]).trim();if(!V.test(o))throw new a(`${r} is invalid`);n[r]=o}return n}function f(e){if(!w(e)||e.schemaVersion!==L)throw new a("trace context version is invalid","invalid-trace");if(!ie.test(e.traceId||"")||!j.test(e.spanId||"")||/^0+$/.test(e.traceId)||/^0+$/.test(e.spanId))throw new a("trace or span id is invalid","invalid-trace");if(e.parentSpanId!==null&&!j.test(e.parentSpanId||""))throw new a("parent span id is invalid","invalid-trace");if(typeof e.sampled!="boolean")throw new a("sampled must be boolean","invalid-trace");return O(e.correlation),e}function _({traceId:e,spanId:t,parentSpanId:n=null,sampled:r=!1,correlation:o={}}={},{idFactory:s}={}){let i=e==null?R(16,"trace",s):String(e).trim().toLowerCase(),c=t==null?R(8,"span",s):String(t).trim().toLowerCase(),l=n==null?null:String(n).trim().toLowerCase(),d=u({schemaVersion:L,traceId:i,spanId:c,parentSpanId:l,sampled:r===!0,correlation:O(o)});return f(d)}var je=_;function Re(e,{spanId:t,correlation:n={}}={},{idFactory:r}={}){f(e);let o=O(n),s={...e.correlation};for(let[i,c]of Object.entries(o)){if(s[i]!=null&&s[i]!==c)throw new a(`correlation ${i} cannot change inside a trace`,"correlation-conflict");s[i]=c}return _({traceId:e.traceId,spanId:t,parentSpanId:e.spanId,sampled:e.sampled,correlation:s},{idFactory:r})}function we(e){return f(e),`00-${e.traceId}-${e.spanId}-${e.sampled?"01":"00"}`}function me(e,{correlation:t={}}={}){let n=/^00-([0-9a-f]{32})-([0-9a-f]{16})-(0[01])$/.exec(String(e??"").trim().toLowerCase());if(!n||/^0+$/.test(n[1])||/^0+$/.test(n[2]))throw new a("traceparent is invalid","invalid-traceparent");return _({traceId:n[1],spanId:n[2],sampled:n[3]==="01",correlation:t})}var Y=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});function x(e,t){if(e?.get&&typeof e.get=="function")return e.get(t);if(!e||typeof e!="object")return null;let n=t.toLowerCase();for(let[r,o]of Object.entries(e))if(r.toLowerCase()===n)return o;return null}function xe(e,t={}){f(e);let n={};n.traceparent=we(e);for(let[r,o]of Object.entries(Y))e.correlation[r]!=null&&(n[o]=e.correlation[r]);return u(n)}function ze(e){let t={};for(let[n,r]of Object.entries(Y)){let o=x(e,r);o!=null&&String(o).trim()&&(t[n]=String(o).trim())}return me(x(e,"traceparent"),{correlation:t})}function z(e){let t=String(e).replace(/[^a-z0-9]/gi,"").toLowerCase();return le.some(n=>t.includes(n))}function ye(e){return ue.test(e)||fe.test(e)||pe.test(e)?{value:"[REDACTED]",redacted:!0,truncated:!1}:e.length>p.maxStringLength?{value:`${e.slice(0,p.maxStringLength-1)}\u2026`,redacted:!1,truncated:!0}:{value:e,redacted:!1,truncated:!1}}function P(e){if(typeof e=="string")return ye(e);if(typeof e=="boolean")return{value:e,redacted:!1,truncated:!1};if(typeof e=="number"&&Number.isFinite(e))return{value:e,redacted:!1,truncated:!1};if(Array.isArray(e)){let t=e.slice(0,p.maxArrayLength),n=[],r=!1,o=e.length>t.length;for(let s of t){if(!["string","boolean","number"].includes(typeof s))return null;let i=P(s);if(!i)return null;n.push(i.value),r||=i.redacted,o||=i.truncated}return{value:n,redacted:r,truncated:o}}return null}function he(e={}){if(!w(e))throw new a("telemetry attributes must be a plain object");let t={},n=0,r=0,o=0,s=Object.keys(e).sort();for(let i of s){if(Object.keys(t).length>=p.maxAttributes){r+=1;continue}if(i.length>p.maxKeyLength||!de.test(i)||z(i)){r+=1,z(i)&&(n+=1);continue}let c=P(e[i]);if(!c){r+=1;continue}t[i]=c.value,c.redacted&&(n+=1),c.truncated&&(o+=1)}return u({attributes:t,redactedCount:n,droppedCount:r,truncatedCount:o})}function g(e,t){if(!Number.isSafeInteger(e)||e<0)throw new a(`${t} must be a non-negative integer milliseconds value`);return e}function M(e){if(e==null)return null;let t=String(e).trim();if(!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(t))throw new a("outcomeCode is invalid");return t}function Ie({streamKey:e,tenantId:t,workflowId:n,sourceEvent:r}){let o=e??r?.streamKey??null,s=t??r?.tenantId??null,i=n??r?.workflowId??null;if(o!=null){let c=String(o).trim();if(s!=null&&i!=null){let l=I(s,i);if(c!==l)throw new a("streamKey must equal tenantId:workflowId","invalid-stream-key");return l}if(!/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}:[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/.test(c)||c.split(":").length!==2)throw new a("streamKey must be tenantId:workflowId","invalid-stream-key");return c}return s!=null&&i!=null?I(s,i):null}function U({trace:e,name:t,kind:n,diagnosticOutcome:r=null,outcome:o=null,outcomeCode:s=null,startedAt:i,endedAt:c,attributes:l,authority:d,sourceEvent:m=null,streamKey:F=null,tenantId:W=null,workflowId:Z=null}){f(e);let A=String(t??"").trim();if(!ce.test(A))throw new a("workflow telemetry name is invalid");if(!oe.has(n))throw new a("workflow telemetry kind is invalid");let H=d==="ledger_projection"?o:r;if(!D.has(H))throw new a("workflow telemetry outcome is invalid");let b=g(i,"startedAt"),T=g(c,"endedAt");if(T<b)throw new a("endedAt must not be before startedAt");let y=he(l),B=Ie({streamKey:F,tenantId:W,workflowId:Z,sourceEvent:m}),N={schemaVersion:$,recordType:"oracle.workflow.telemetry",authority:d,streamKey:B,trace:{traceId:e.traceId,spanId:e.spanId,parentSpanId:e.parentSpanId,sampled:e.sampled},correlation:{...e.correlation},name:A,kind:n,...d==="ledger_projection"?{outcome:o,sourceEvent:{...m}}:{diagnosticOutcome:r},outcomeCode:M(s),startedAt:b,endedAt:T,durationMs:T-b,attributes:{...y.attributes},attributePolicy:{redactedCount:y.redactedCount,droppedCount:y.droppedCount,truncatedCount:y.truncatedCount}};return u({...N,recordId:K(N)})}function ge({trace:e,name:t,kind:n="workflow",outcome:r,outcomeCode:o=null,startedAt:s,endedAt:i,attributes:c={},tenantId:l=null,workflowId:d=null,streamKey:m=null}={}){return U({trace:e,name:t,kind:n,diagnosticOutcome:r,outcomeCode:o,startedAt:s,endedAt:i,attributes:c,authority:"diagnostic",tenantId:l,workflowId:d,streamKey:m})}function Le(e,{validateLedgerEvent:t}={}){if(!w(e))throw new a("ledger event must be a plain object","invalid-ledger-event");if(typeof t!="function"||t(e)!==!0)throw new a("ledger event validation failed","invalid-ledger-event");let n=String(e.eventId??"").trim(),r=String(e.eventHash??e.hash??"").trim().toLowerCase();if(!V.test(n)||!se.test(r))throw new a("ledger event id or hash is invalid","invalid-ledger-event");let o=O(e.correlation);for(let d of S)if(o[d]==null)throw new a(`ledger event correlation requires ${d}`,"invalid-ledger-event");if(o.eventId!==n)throw new a("ledger eventId does not match correlation","invalid-ledger-event");if(!D.has(e.outcome))throw new a("ledger event outcome is invalid","invalid-ledger-event");let s=e.tenantId==null?null:String(e.tenantId).trim(),i=e.workflowId==null?null:String(e.workflowId).trim(),c=null;if(s&&i){if(c=I(s,i),e.streamKey!=null&&String(e.streamKey).trim()!==c)throw new a("ledger streamKey must equal tenantId:workflowId","invalid-stream-key")}else if(e.streamKey!=null){let d=String(e.streamKey).split(":");if(d.length!==2)throw new a("ledger streamKey must be tenantId:workflowId","invalid-stream-key");c=I(d[0],d[1])}let l=u({eventId:n,eventHash:r,correlation:o,outcome:e.outcome,outcomeCode:M(e.outcomeCode),startedAt:g(e.startedAt,"ledger event startedAt"),endedAt:g(e.endedAt,"ledger event endedAt"),tenantId:s,workflowId:i,streamKey:c});if(l.endedAt<l.startedAt)throw new a("ledger event endedAt must not be before startedAt","invalid-ledger-event");return v.add(l),l}function $e({sourceEvent:e,trace:t,name:n,kind:r="workflow",attributes:o={}}={}){if(!v.has(e))throw new a("a validated ledger source event is required","unvalidated-ledger-event");f(t);for(let s of S)if(t.correlation[s]!==e.correlation[s])throw new a(`trace correlation ${s} does not match ledger event`,"ledger-correlation-mismatch");return U({trace:t,name:n,kind:r,outcome:e.outcome,outcomeCode:e.outcomeCode,startedAt:e.startedAt,endedAt:e.endedAt,attributes:o,authority:"ledger_projection",sourceEvent:{eventId:e.eventId,eventHash:e.eventHash},tenantId:e.tenantId,workflowId:e.workflowId,streamKey:e.streamKey})}function Se(e){if(!w(e)||!Object.isFrozen(e)||e.schemaVersion!==$||e.recordType!=="oracle.workflow.telemetry")return!1;let{recordId:t,...n}=e;return typeof t=="string"&&t===K(n)}function De({exporter:e=null}={}){if(e!=null&&typeof e!="function"&&typeof e?.export!="function")throw new a("exporter must be a function or expose export(record)");let t=typeof e=="function"?e:e?.export?.bind(e);return Object.freeze({exporterConfigured:!!t,defaultExporter:"none",async emit(n){let r=Se(n)?n:ge(n);if(!t)return Object.freeze({record:r,exported:!1,exporterFailed:!1});try{return await t(r),Object.freeze({record:r,exported:!0,exporterFailed:!1})}catch{return Object.freeze({record:r,exported:!1,exporterFailed:!0})}}})}export{S as CORRELATION_KEYS,p as TELEMETRY_ATTRIBUTE_LIMITS,L as TRACE_CONTEXT_VERSION,re as WORKFLOW_KINDS,ne as WORKFLOW_OUTCOMES,$ as WORKFLOW_TELEMETRY_VERSION,a as WorkflowTelemetryError,Re as createChildTraceContext,je as createRootTraceContext,_ as createTraceContext,De as createWorkflowTelemetry,ge as createWorkflowTelemetryRecord,ze as extractTraceContext,we as formatTraceparent,xe as injectTraceContext,Se as isWorkflowTelemetryRecord,me as parseTraceparent,$e as projectWorkflowTelemetryFromLedgerEvent,he as sanitizeTelemetryAttributes,Le as validateWorkflowTelemetrySourceEvent,I as workflowTelemetryStreamKey};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oracle-agent/oracle",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.29",
|
|
4
4
|
"description": "Oracle: standalone multichain agent control plane with an optional encrypted, loopback-only self-hosted signer.",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"type": "module",
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"exports": {
|
|
48
48
|
".": "./dist/index.mjs",
|
|
49
|
+
"./task": "./dist/task.mjs",
|
|
49
50
|
"./farming": "./dist/data/providers/farming.mjs",
|
|
50
51
|
"./data": "./dist/data/desk-data.mjs",
|
|
51
52
|
"./policy": "./dist/public-control/policy-schema.mjs",
|
|
@@ -65,20 +66,34 @@
|
|
|
65
66
|
"./universal-solana-nft-transfer": "./dist/data/providers/universal-solana-nft-transfer.mjs",
|
|
66
67
|
"./universal-ordinals-transfer": "./dist/data/providers/universal-ordinals-transfer.mjs",
|
|
67
68
|
"./prepare-envelope": "./dist/prepare-envelope.mjs",
|
|
69
|
+
"./approval-binding": "./dist/control/approval-binding.mjs",
|
|
68
70
|
"./connect": "./dist/onboarding/harness-configs.mjs",
|
|
71
|
+
"./finality": "./dist/control/finality.mjs",
|
|
69
72
|
"./receipts": "./dist/action-receipts.mjs",
|
|
73
|
+
"./tax-lots": "./dist/tax-lots.mjs",
|
|
74
|
+
"./position-health": "./dist/position-health.mjs",
|
|
75
|
+
"./governance-prepare": "./dist/governance-prepare.mjs",
|
|
70
76
|
"./risk": "./dist/portfolio-risk.mjs",
|
|
77
|
+
"./safety-intelligence": "./dist/safety-intelligence.mjs",
|
|
71
78
|
"./watch": "./dist/watch-preferences.mjs",
|
|
72
79
|
"./signals": "./dist/signals/index.mjs",
|
|
73
80
|
"./strategy": "./dist/strategy/index.mjs",
|
|
74
81
|
"./agent-grants": "./dist/public-api/agent-grants.mjs",
|
|
75
|
-
"./
|
|
82
|
+
"./control-plane": "./dist/control-plane/index.mjs",
|
|
83
|
+
"./tenant-rbac": "./dist/tenant-rbac.mjs",
|
|
84
|
+
"./workflow-telemetry": "./dist/workflow-telemetry.mjs",
|
|
85
|
+
"./local-signer": "./dist/local-signer/index.mjs",
|
|
86
|
+
"./local-marketplace": "./dist/local-marketplace.mjs",
|
|
87
|
+
"./local-x402": "./dist/local-x402.mjs",
|
|
88
|
+
"./local-pack-registry": "./dist/local-pack-registry.mjs",
|
|
89
|
+
"./notifications": "./dist/notifications/index.mjs"
|
|
76
90
|
},
|
|
77
91
|
"dependencies": {
|
|
78
92
|
"@msgpack/msgpack": "^3.1.3",
|
|
79
93
|
"@noble/curves": "^2.2.0",
|
|
80
94
|
"@noble/hashes": "^2.3.0",
|
|
81
95
|
"@scure/base": "^2.2.0",
|
|
96
|
+
"@scure/bip39": "^1.6.0",
|
|
82
97
|
"@scure/btc-signer": "2.3.0",
|
|
83
98
|
"@solana/addresses": "^7.0.0",
|
|
84
99
|
"@solana/transaction-messages": "7.0.0",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<a class="wordmark" href="/">ORACLE</a>
|
|
14
14
|
<p class="eyebrow">AGENT CONNECT</p>
|
|
15
15
|
<h1>Give your agent market context.<br /><span>Keep custody local.</span></h1>
|
|
16
|
-
<p class="lede">Use Oracle's native harness, or connect
|
|
16
|
+
<p class="lede">Use Oracle's native harness, or connect Oracle MCP into the agent you already run. Skills, quotes, swap cards, and prepare land in Claude or Codex. The model proposes actions; you review and authorize them through your local operator.</p>
|
|
17
17
|
</header>
|
|
18
18
|
|
|
19
19
|
<section class="card setup" aria-labelledby="connection-title">
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
<div>
|
|
75
75
|
<p class="eyebrow">SEPARATE EXECUTION LANE</p>
|
|
76
76
|
<h2 id="operator-title">Install the local operator to execute</h2>
|
|
77
|
-
<p>The cloud/read MCP can research, quote, simulate, and
|
|
77
|
+
<p>The cloud/read MCP can research, quote, simulate, prepare, and load Oracle skills. Execution belongs in a separate local process under your policy and approval controls. Self-host: start the local signer, then MCP queue/ack fills the prepared artifact.</p>
|
|
78
78
|
<div class="command"><code>npx @oracle-agent/oracle init</code><button id="copy-install" type="button">Copy</button></div>
|
|
79
79
|
</div>
|
|
80
80
|
</section>
|
package/public/install.sh
CHANGED
|
@@ -275,8 +275,8 @@ EOF
|
|
|
275
275
|
local oracle_bin=""
|
|
276
276
|
if [ -x "$PKG_DIR/node_modules/.bin/oracle" ]; then
|
|
277
277
|
oracle_bin="$PKG_DIR/node_modules/.bin/oracle"
|
|
278
|
-
elif [ -f "$PKG_DIR/node_modules/@oracle-agent/oracle/bin/oracle.mjs" ]; then
|
|
279
|
-
oracle_bin="$PKG_DIR/node_modules/@oracle-agent/oracle/bin/oracle.mjs"
|
|
278
|
+
elif [ -f "$PKG_DIR/node_modules/@oracle-agent/oracle/dist/bin/oracle.mjs" ]; then
|
|
279
|
+
oracle_bin="$PKG_DIR/node_modules/@oracle-agent/oracle/dist/bin/oracle.mjs"
|
|
280
280
|
else
|
|
281
281
|
die "install finished but oracle binary missing under $PKG_DIR"
|
|
282
282
|
fi
|
|
@@ -1555,7 +1555,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1555
1555
|
<div class="selfcustody rv">
|
|
1556
1556
|
<p class="section-label rv">Works in any harness</p>
|
|
1557
1557
|
<h2 class="section-title rv" data-split>Ask in <em>your</em> agent.</h2>
|
|
1558
|
-
<p class="section-lede rv">Oracle installs as an MCP server, so the
|
|
1558
|
+
<p class="section-lede rv">Oracle installs as an MCP server, so Claude, Codex, Cursor and the rest get Oracle skills, live swap cards, quotes, and prepare. Type the request the way you would say it. With <code>oracle signer</code> running on this machine they can also fill through the local signer — same path as Telegram Allow. Keys stay here. You authorize.</p>
|
|
1559
1559
|
<div class="agent-install rv">
|
|
1560
1560
|
<span>Add Oracle to your agent:</span>
|
|
1561
1561
|
<div class="install-cmds">
|
|
@@ -1614,7 +1614,7 @@ footer{margin-top:clamp(72px,12vh,120px);border-top:1px solid var(--line);paddin
|
|
|
1614
1614
|
<noscript><p class="agent-ask">move 5k usdc into weth, cheapest route</p></noscript>
|
|
1615
1615
|
</figure>
|
|
1616
1616
|
</div>
|
|
1617
|
-
<p class="agent-caption rv">Same tool from the terminal, the desktop app, any MCP client, or your agent on Telegram, Discord, WhatsApp and Signal. Buzz integration shipped. Hosted/keyless cannot hold keys. Self-host
|
|
1617
|
+
<p class="agent-caption rv">Same tool from the terminal, the desktop app, any MCP client, or your agent on Telegram, Discord, WhatsApp and Signal. Buzz integration shipped. Hosted/keyless cannot hold keys. Self-host fill is MCP <code>signer_queue</code> then <code>signer_ack</code> on the local signer.</p>
|
|
1618
1618
|
<div class="agent-icons rv" style="display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:14px"><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69.01-.03.01-.14-.07-.2-.08-.06-.19-.04-.27-.02-.12.03-1.96 1.25-5.54 3.66-.52.36-1 .53-1.42.52-.47-.01-1.37-.26-2.03-.48-.82-.27-1.47-.42-1.41-.87.03-.24.36-.49.99-.74 3.87-1.69 6.45-2.8 7.74-3.34 3.69-1.53 4.45-1.8 4.95-1.81.11 0 .36.03.52.17.14.12.18.28.2.4.02.11.04.37.01.56z" fill="#229ED9"/></svg>Telegram</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M19.27 5.33C17.94 4.71 14.48 3.26 10.68 4.77a27.98 27.98 0 0 0-6.02 3.13c-.87.51-1.3.9-1.23 1.44.07.46.57.73 1.42 1.12l.33.15c.85.38 1.28.57 1.43 1.01.08.23.07.6-.08 1.1-.15.51-.5 1.15-1.02 2.02-.34.57-.5.85-.37.99.14.15.48.11 1.09-.26 1.76-1.07 3.18-1.93 4.23-2.59 3.22-2.06 5.08-2.82 5.55-2.28.18.21.06.84-.34 1.85-.39 1.01-1.05 2.32-1.51 3.13-.24.43-.37.64-.45.74-.11.14-.2.16-.3.15-.3-.03-.73-.45-1.41-1.3-.5-.62-.94-1.08-1.26-1.25-.64-.34-1.08-.13-1.14.26-.05.29.14.61.56 1.02.43.41 1.15 1.06 1.56 1.5.53.58.82.98.85 1.28.02.24-.04.47-.46.75-.42.27-.86.41-1.34.41-.41 0-.86-.1-1.35-.29-1.7-.68-3.25-1.94-4.64-3.79a18.7 18.7 0 0 1-3.13-5.08c-.38-.79-.16-1.31.41-1.63.47-.27 1.12-.22 1.96.14a10.26 10.26 0 0 1 3.74 2.28c.36.35.68.52.96.52.21 0 .44-.07.69-.22.37-.22.65-.6.86-1.13.21-.53.34-1.14.34-1.57 0-.5-.15-.88-.45-1.12-.52-.42-1.44-.52-2.76-.3-1.71.28-3.62 1.03-5.72 2.24l-.86.49a6.72 6.72 0 0 1-1.02.51c-.37.14-.64.17-.81.09-.18-.1-.24-.29-.2-.58.04-.3.16-.56.36-.76z" fill="#5865F2"/></svg>Discord</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403-.008-.005h.008l.005-.002h-.005V19.5c0-.248.009-.498.005-.746l.003-.003c.009 0 .018.001.027.002h-.02l-.011.008-.004.024zm-.006-.225h-.003l-.008.003.003.011.003-.005a.018.018 0 0 1 .005-.009zm-.004.17h.003l-.005-.002.002.001v.001zm.02-.003.003.003-.002-.002-.001-.001zM12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0z" fill="#25D366"/></svg>WhatsApp</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM7.64 15.52c-.38-.66-.6-1.41-.6-2.2 0-2.63 2.14-4.77 4.77-4.77 1.27 0 2.47.5 3.37 1.4.9.9 1.4 2.1 1.4 3.37 0 2.63-2.14 4.77-4.77 4.77-.79 0-1.54-.22-2.2-.6L7.5 18l.14-2.48z" fill="#3B82F6"/></svg>Signal</span><span style="display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border:1px solid var(--line);border-radius:999px;font-family:var(--mono);font-size:10px;color:var(--cool);letter-spacing:.08em"><svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" stroke="#7C4DFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>Buzz</span></div>
|
|
1619
1619
|
<div class="venues rv">
|
|
1620
1620
|
<div class="venues-head"><span>models // harnesses</span><span><b>bring your own model</b> · oracle is the control plane</span></div>
|
|
@@ -275,8 +275,8 @@ EOF
|
|
|
275
275
|
local oracle_bin=""
|
|
276
276
|
if [ -x "$PKG_DIR/node_modules/.bin/oracle" ]; then
|
|
277
277
|
oracle_bin="$PKG_DIR/node_modules/.bin/oracle"
|
|
278
|
-
elif [ -f "$PKG_DIR/node_modules/@oracle-agent/oracle/bin/oracle.mjs" ]; then
|
|
279
|
-
oracle_bin="$PKG_DIR/node_modules/@oracle-agent/oracle/bin/oracle.mjs"
|
|
278
|
+
elif [ -f "$PKG_DIR/node_modules/@oracle-agent/oracle/dist/bin/oracle.mjs" ]; then
|
|
279
|
+
oracle_bin="$PKG_DIR/node_modules/@oracle-agent/oracle/dist/bin/oracle.mjs"
|
|
280
280
|
else
|
|
281
281
|
die "install finished but oracle binary missing under $PKG_DIR"
|
|
282
282
|
fi
|