@oracle-agent/oracle 0.35.19 → 0.35.21
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/dist/assets/skills/oracle-desk-product/SKILL.md +23 -17
- package/dist/assets/skills/oracle-mcp-install/SKILL.md +17 -22
- package/dist/assets/skills/protocol-api-key-integration/SKILL.md +14 -11
- package/dist/assets/skills/self-custodial-onchain-execution/SKILL.md +14 -13
- package/dist/assets/skills/trade-loop-circuit-breaker/SKILL.md +1 -1
- package/dist/bin/desk-server.mjs +30 -30
- package/dist/bin/oracle-data-mcp.mjs +17 -17
- package/dist/bin/oracle-gateway.mjs +3 -3
- package/dist/bin/oracle-public-server.mjs +5 -5
- package/dist/bin/oracle-telegram-mcp.mjs +5 -5
- package/dist/cli/commands/chat.mjs +200 -200
- package/dist/cli/commands/doctor.mjs +7 -7
- package/dist/cli/commands/eval.mjs +113 -113
- package/dist/cli/commands/extension-policy.mjs +1 -1
- package/dist/cli/commands/governance-prepare.mjs +5 -0
- package/dist/cli/commands/model.mjs +204 -204
- package/dist/cli/commands/portfolio-risk.mjs +4 -0
- package/dist/cli/commands/position-health.mjs +4 -0
- package/dist/cli/commands/safety-intelligence.mjs +4 -0
- package/dist/cli/commands/swap.mjs +12 -12
- package/dist/cli/commands/tax-lots.mjs +4 -0
- package/dist/cli/commands/telegram.mjs +6 -6
- package/dist/data/desk-data.mjs +26 -26
- package/dist/index.mjs +40 -40
- package/package.json +1 -1
- package/public/eval-report.json +22 -8
- package/public/oracle-splash/index.html +44 -23
- package/server.json +2 -2
- package/dist/assets/skills/oracle-best-execution.md +0 -27
- package/dist/assets/skills/oracle-desk.md +0 -27
- package/dist/assets/skills/oracle-receipts.md +0 -29
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import E from"node:fs";import
|
|
1
|
+
import E from"node:fs";import u from"node:path";import{homedir as g}from"node:os";var _=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","tax_lots","position_health","governance_prepare","safety_intelligence","portfolio_risk","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),d="deny",O=256*1024,w=128,l=Object.freeze({version:1,source:"default",defaultDecision:d,allow:_,deny:Object.freeze([])});function s(e){let t=new Set;if(!Array.isArray(e))return t;for(let o of e){if(typeof o!="string")continue;let r=o.trim();r.length===0||r.length>w||t.add(r)}return t}function x(e){return{allow:!1,reason:e}}function p(e){return{allow:!0,reason:e}}var i="extension-prepare-only",f=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","tax_lots","position_health","governance_prepare","safety_intelligence","portfolio_risk","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),c=new Set(f);function y(e=process.env){return e?.ORACLE_EXECUTION_MODE===i}function m(e,t=process.env){if(!y(t))return p("allowed: normal Oracle execution mode");let o=typeof e?.name=="string"?e.name.trim():"";return!o||!c.has(o)?x(`denied: tool "${o||"unknown"}" is outside extension prepare-only mode`):p(`allowed: tool "${o}" is inside extension prepare-only mode`)}function a(e,t=process.env){if(!y(t))return e;let o=[...s(e?.allow)].filter(n=>c.has(n)),r=new Set([...s(e?.deny),..._.filter(n=>!c.has(n))]);return Object.freeze({version:1,source:`${String(e?.source||"default")}:extension-prepare-only`,defaultDecision:d,allow:Object.freeze(o),deny:Object.freeze([...r])})}function b(e=process.env){let t=e&&e.ORACLE_CONFIG_DIR||u.join(g(),".config","oracle");return u.join(t,"tool-policy.json")}function h(e=process.env){try{let t=b(e),o=E.readFileSync(t,"utf8");if(typeof o!="string"||o.length>O)return a(l,e);let r=JSON.parse(o);if(!r||typeof r!="object"||Array.isArray(r))return a(l,e);let n=Array.isArray(r.allow)?s(r.allow):s(_);return a(Object.freeze({version:1,source:t,defaultDecision:d,allow:Object.freeze([...n]),deny:Object.freeze([...s(r.deny)])}),e)}catch{return a(l,e)}}function A(e=process.env){let t={...e,ORACLE_EXECUTION_MODE:i},o=h(t);return{ok:m({name:"signer_execute",args:{}},t).allow===!1&&!o.allow.includes("signer_execute"),version:1,mode:i,signerExecute:!1,tools:f}}var T={name:"extension-policy",summary:"attest the extension prepare-only tool boundary",group:"system",usage:"oracle extension-policy --json",async run(e){if(e.argv.length!==1||e.argv[0]!=="--json")return process.stderr.write(`oracle extension-policy requires --json
|
|
2
2
|
`),1;let t=A();return process.stdout.write(`${JSON.stringify(t)}
|
|
3
3
|
`),t.ok?0:1}};export{T as default,A as extensionPolicyAttestation};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{wordlists as H}from"ethers";var D=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),F=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],J=new Set([12,15,18,21,24]);function q(e){let o=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return J.has(o.length)&&o.every(t=>H.en.getWordIndex(t)>=0)}var U=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,M=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,K=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function X(e){let o=_(e);return K.has(o)||M.test(o)}var A=class extends Error{constructor(o){super(`action receipt refused: secret-bearing field at ${o}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function _(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function W(e){let o=_(e);return[...D].some(t=>o.includes(t))}function Y(e,o,t){if(typeof o=="string"){if(F.some(n=>n.test(o))||q(o))throw new A(t);if(U.test(o)&&!X(e))throw new A(t)}}function x(e,o="$",t=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Y(t,e,o),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${o}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((r,s)=>x(r,`${o}[${s}]`,t));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${o}`);let n={};for(let r of Object.keys(e).sort()){let s=`${o}.${r}`;if(W(r))throw new A(s);e[r]!==void 0&&(n[r]=x(e[r],s,r))}return n}function u(e){return x(e)}var O=1,y="Unsigned prepare material only; no vote, signature, or broadcast occurred.",Z=Object.freeze(["proposal","delegation","vote"]),Q=Object.freeze(["pending","active","succeeded","queued","executed","defeated","canceled","expired","unknown"]),ee=Object.freeze(["for","against","abstain"]),te=Object.freeze(["delegate","undelegate"]),oe=new Set(Z),re=new Set(Q),ne=new Set(ee),se=new Set(te),ae=/[\u0000-\u001f\u007f]/,ie=new Set(["active"]),ce=new Set(["executed","defeated","canceled","expired"]),R=class extends Error{constructor(o,t="GOVERNANCE_PREPARE_INVALID"){super(`governance prepare: ${o}`),this.name="GovernancePrepareError",this.code=t}};function i(e,o){throw new R(e,o)}function b(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let o of Object.values(e))b(o);Object.freeze(e)}return e}function g(e,o){return(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)&&i(`${o} must be a plain object`),e}function p(e,o,{optional:t=!1,lower:n=!1}={}){if(e==null&&t)return null;typeof e!="string"&&i(`${o} must be a string`);let r=e.trim();return r||i(`${o} is required`),ae.test(r)&&i(`${o} contains control characters`),r.length>2048&&i(`${o} is too long`),n?r.toLowerCase():r}function f(e,o,{optional:t=!1,positive:n=!1}={}){if(e==null&&t)return null;typeof e=="number"&&i(`${o} must be an exact decimal string or BigInt; Number coercion is refused`,"GOVERNANCE_UNSAFE_NUMBER");let r;typeof e=="bigint"?r=e.toString():typeof e=="string"?r=e.trim():i(`${o} must be an exact decimal string or BigInt`),/^\d+$/.test(r)||i(`${o} must be a non-negative base-10 integer string`);let s=BigInt(r);return n&&s===0n&&i(`${o} must be positive`),s.toString()}function w(e,o){return e==null?null:p(e,o)}function m(e,o){for(let t of o)if(e[t]!==void 0)return e[t]}function pe(e,o="action"){let t=p(e,o,{lower:!0});return oe.has(t)||i(`${o} must be proposal, delegation, or vote`),t}function de(e,o="proposal.state"){e==null&&i(`${o} is required`,"GOVERNANCE_MISSING_PROPOSAL_STATE");let t=p(e,o,{lower:!0});return re.has(t)||i(`${o} is not a recognized proposal state`),t==="unknown"&&i(`${o} is unknown; voting and execution fail closed`,"GOVERNANCE_UNKNOWN_PROPOSAL_STATE"),t}function le(e){let o=p(e,"support",{lower:!0});return ne.has(o)||i("support must be for, against, or abstain"),o}function N(e,{accountRequired:o=!0}={}){return b({chain:p(m(e,["chain","chainId","network"]),"chain",{lower:!0}),governor:p(m(e,["governor","governorAddress","governance","contract"]),"governor"),account:p(m(e,["account","address","owner","voter","from","proposer"]),"account",{optional:!o})})}function $(e,o){let t=w(o.tenantId??e.tenantId,"tenantId");return t?{tenantId:t}:{}}function S(e,o,t="asOf"){return f(o.asOf??e.asOf,t)}function ue(e,o={}){u(e),u(o);let t=g(e,"proposal");g(o,"options");let n=S(t,o),r=N(t,{accountRequired:!1}),s=p(m(t,["proposalId","id"]),"proposalId"),c=de(m(t,["state","status","proposalState"])),a=w(t.title??t.name,"title"),l=w(t.description??t.body??t.summary,"description"),d=w(t.proposer,"proposer"),v=f(t.startBlock??t.start,"startBlock",{optional:!0}),h=f(t.endBlock??t.end,"endBlock",{optional:!0}),E=f(t.forVotes??t.votesFor,"forVotes",{optional:!0}),z=f(t.againstVotes??t.votesAgainst,"againstVotes",{optional:!0}),L=f(t.abstainVotes??t.votesAbstain,"abstainVotes",{optional:!0}),B={recordVersion:O,recordType:"governance-proposal",label:y,asOf:n,chain:r.chain,governor:r.governor,proposalId:s,state:c,votable:ie.has(c),terminal:ce.has(c),title:a,description:l,proposer:d,startBlock:v,endBlock:h,tallies:{forVotes:E,againstVotes:z,abstainVotes:L},occurred:!1,...$(t,o)};return b(B)}function fe(e,o={}){u(e),u(o);let t=g(e,"intent");g(o,"options");let n=S(t,o),r=N(t),s=t.mode??(t.action==="undelegate"?"undelegate":"delegate"),c=p(s,"mode",{lower:!0});se.has(c)||i("mode must be delegate or undelegate");let a=c==="undelegate"?w(t.delegatee??t.to,"delegatee"):p(t.delegatee??t.to,"delegatee"),l=f(m(t,["votingPower","votes","power","balance"]),"votingPower",{positive:!0}),d={recordVersion:O,recordType:"governance-delegation-intent",label:y,action:"delegation",mode:c,asOf:n,chain:r.chain,governor:r.governor,account:r.account,delegatee:c==="undelegate"?a??r.account:a,votingPower:l,occurred:!1,...$(t,o)};return b(d)}function ge(e,o={}){u(e),u(o);let t=g(e,"intent");g(o,"options");let n=S(t,o),r=ue(t.proposal??t,o);r.votable||i(`proposal ${r.proposalId} is ${r.state} and is not votable`,"GOVERNANCE_PROPOSAL_NOT_VOTABLE");let s=N({...t,chain:t.chain??r.chain,governor:t.governor??r.governor}),c=le(t.support??t.choice??t.vote),a=f(m(t,["votingPower","votes","power","weight"]),"votingPower",{positive:!0}),l=w(t.reason??t.comment,"reason"),d={recordVersion:O,recordType:"governance-vote-intent",label:y,action:"vote",asOf:n,chain:s.chain,governor:s.governor,account:s.account,proposalId:r.proposalId,proposalState:r.state,support:c,votingPower:a,reason:l,occurred:!1,voted:!1,signed:!1,broadcast:!1,proposal:r,...$(t,o)};return b(d)}function ye(e,o={}){u(e);let t=g(e,"intent"),n=S(t,o),r=N(t),s=p(t.title??t.name,"title"),c=p(t.description??t.body,"description"),a=t.targets;(!Array.isArray(a)||a.length===0)&&i("targets must be a non-empty array");let l=(t.values??a.map(()=>"0")).map((h,E)=>f(h,`values[${E}]`));l.length!==a.length&&i("values length must match targets");let d=(t.calldatas??t.data??[]).map((h,E)=>p(String(h),`calldatas[${E}]`));d.length!==a.length&&i("calldatas length must match targets");let v=f(m(t,["votingPower","proposalThreshold","threshold"]),"votingPower",{positive:!0});return b({recordVersion:O,recordType:"governance-proposal-intent",label:y,action:"proposal",asOf:n,chain:r.chain,governor:r.governor,account:r.account,title:s,description:c,targets:a.map((h,E)=>p(h,`targets[${E}]`)),values:l,calldatas:d,votingPower:v,occurred:!1,...$(t,o)})}function me(e,o,t){return e==="vote"?ge(o,t):e==="delegation"?fe(o,t):ye(o,t)}function he(e){return e.action==="vote"?[`Unsigned vote preview for proposal ${e.proposalId} on ${e.governor}.`,`Support: ${e.support}. Voting power: ${e.votingPower} (exact base units).`,`Proposal state is ${e.proposalState}. No ballot is submitted.`,y]:e.action==="delegation"?[`Unsigned ${e.mode} preview on ${e.governor}.`,`Account ${e.account} \u2192 ${e.delegatee}. Voting power: ${e.votingPower}.`,"No delegation transaction is signed or broadcast.",y]:[`Unsigned proposal preview on ${e.governor}: ${e.title}.`,`${e.targets.length} target(s). Voting power: ${e.votingPower}.`,"No proposal is submitted.",y]}function I(e={},o={}){u(e),u(o);let t=g(e,"intent");g(o,"options"),o.asOf==null&&t.asOf==null&&i("explicit asOf required","GOVERNANCE_MISSING_ASOF");let n=pe(t.action??t.type??o.action??Ee(t)),r=me(n,{...t,action:n},o);return b({recordVersion:O,recordType:"governance-preview",label:y,action:n,asOf:r.asOf,occurred:!1,voted:!1,signed:!1,broadcast:!1,executionReady:!1,signingReady:!1,broadcastReady:!1,lines:he(r),intent:r,...$(t,o)})}function Ee(e){if(e.support!=null||e.choice!=null||e.proposalId!=null)return"vote";if(e.delegatee!=null||e.mode==="delegate"||e.mode==="undelegate")return"delegation";if(e.targets!=null||e.title!=null)return"proposal";i("action is required")}import P from"node:fs";var V=1024*1024;function C(e=[],o={}){let t=[],n={};for(let r=0;r<e.length;r+=1){let s=e[r];if(!s.startsWith("--")){t.push(s);continue}let c=s.indexOf("="),a=s.slice(2,c===-1?void 0:c),l=o[a];if(!l)throw new TypeError(`unknown option --${a}`);if(Object.hasOwn(n,a))throw new TypeError(`duplicate option --${a}`);if(l==="boolean"){if(c!==-1)throw new TypeError(`option --${a} does not take a value`);n[a]=!0;continue}let d=c===-1?e[++r]:s.slice(c+1);if(d==null||d===""||d.startsWith("--"))throw new TypeError(`option --${a} requires a value`);n[a]=d}return{positionals:t,options:n}}function j(e,o="input"){if(!e)throw new TypeError(`${o} JSON path or - is required`);let t=e==="-"?P.readFileSync(0):P.readFileSync(e);if(t.length>V)throw new RangeError(`${o} exceeds ${V} bytes`);let n;try{n=JSON.parse(t.toString("utf8"))}catch(r){throw new TypeError(`${o} must be valid JSON: ${r.message}`)}if(!n||typeof n!="object"||Array.isArray(n)||Object.getPrototypeOf(n)!==Object.prototype)throw new TypeError(`${o} must be a JSON object`);return n}function k(e,o=process.stdout){o.write(`${JSON.stringify(e,null,2)}
|
|
2
|
+
`)}function G(e,o=process.stderr){return o.write(`oracle: ${e instanceof Error?e.message:String(e)}
|
|
3
|
+
`),2}var T="oracle governance-prepare <input.json|-> --as-of <integer>",Re={name:"governance-prepare",summary:"preview a supplied governance intent without adapter calldata",group:"prepare",usage:T,async run(e){let o=e.argv??[];if(o.length===0||o.includes("--help")||o.includes("-h"))return process.stdout.write(`${T}
|
|
4
|
+
Semantic preview only. No adapter, calldata, vote, signature, or broadcast.
|
|
5
|
+
`),0;try{let{positionals:t,options:n}=C(o,{"as-of":"value"});if(t.length!==1||!n["as-of"])throw new TypeError(T);let r=j(t[0]);return k({preview:I(r,{asOf:n["as-of"]}),prepared:!1}),0}catch(t){return G(t)}}};export{Re as default};
|