adam-agent-server 1.5.0 → 1.6.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/dist/App-WJMHK5EO.js +13 -0
- package/dist/adam-automator-skills-UFW5TXCC.js +18 -0
- package/dist/adam-tools-IAZSLWYB.js +1 -0
- package/dist/approval-handler-HQO62WK2.js +1 -0
- package/dist/audit-manager-LC5EQXCI.js +1 -0
- package/dist/bree-engine-M5CZ6A62.js +1 -0
- package/dist/channels-5TFYQN5Z.js +1 -0
- package/dist/{channels-HYSB2EEK.js → channels-J4STJ4X2.js} +1 -1
- package/dist/{chunk-BR2JY5X2.js → chunk-2H7UOW4P.js} +1 -1
- package/dist/{chunk-VRJ7R766.js → chunk-3LY6PD6A.js} +1 -1
- package/dist/{chunk-YVS565QY.js → chunk-4C5ITATX.js} +1 -1
- package/dist/{chunk-R4GIIQ7G.js → chunk-52PR7XTN.js} +1 -1
- package/dist/chunk-5OQZPUBV.js +79 -0
- package/dist/{chunk-Y3AMO6WC.js → chunk-7446ZS6D.js} +1 -1
- package/dist/{chunk-GBTG5B5R.js → chunk-7ZGSJCX5.js} +1 -1
- package/dist/{chunk-QWCRZDZS.js → chunk-DBP7GPWG.js} +2 -2
- package/dist/{chunk-5XUR3M23.js → chunk-DWRYIN5N.js} +1 -1
- package/dist/{chunk-RAW263MQ.js → chunk-FIN36WAP.js} +4 -4
- package/dist/{chunk-2DLVAKH7.js → chunk-FXQAUQTI.js} +1 -1
- package/dist/{chunk-6FXNB7NE.js → chunk-FZCNYKNT.js} +1 -1
- package/dist/{chunk-7L2WQM7N.js → chunk-G5ESQEXN.js} +1 -1
- package/dist/chunk-GGIHDFRW.js +6 -0
- package/dist/{chunk-HDP7A4XY.js → chunk-GMMWA5EG.js} +1 -1
- package/dist/chunk-HWLSHTVX.js +27 -0
- package/dist/{chunk-ISZJV72D.js → chunk-I7ZZKPHE.js} +1 -1
- package/dist/{chunk-5V36ACKZ.js → chunk-IZNEOYRP.js} +1 -1
- package/dist/{chunk-6775OYXA.js → chunk-MDBVKBC7.js} +1 -1
- package/dist/chunk-MJSSCKMB.js +23 -0
- package/dist/{chunk-INNDBLZE.js → chunk-MRTJFYPR.js} +1 -1
- package/dist/{chunk-YHVFZB6Q.js → chunk-N4ES7TCL.js} +1 -1
- package/dist/{chunk-JAS3TUZX.js → chunk-NCFVJCNQ.js} +26 -7
- package/dist/{chunk-H7VDC6FY.js → chunk-P5ZXNBNV.js} +1 -1
- package/dist/{chunk-7K4AQBDD.js → chunk-PG6LMSX6.js} +1 -1
- package/dist/{chunk-QVKI7H7W.js → chunk-RLJYEEQC.js} +1 -1
- package/dist/{chunk-2CMR5AG7.js → chunk-SWP2JC54.js} +1 -1
- package/dist/{chunk-H54ZXA26.js → chunk-TNL2LZB7.js} +1 -1
- package/dist/{chunk-5S6BMWD2.js → chunk-TSPQ44HT.js} +1 -1
- package/dist/{chunk-Z4D3L2HR.js → chunk-V32YF3J5.js} +1 -1
- package/dist/{chunk-XL46AGRZ.js → chunk-VVSZZK5T.js} +2 -2
- package/dist/{chunk-HTPUEIFT.js → chunk-WAG3MNMC.js} +5 -5
- package/dist/{chunk-VRP4LTHY.js → chunk-YDVTWPNA.js} +1 -1
- package/dist/{chunk-C6BOQJJF.js → chunk-YHVYX3F4.js} +1 -1
- package/dist/{chunk-23VZKIB6.js → chunk-YXYIA24D.js} +1 -1
- package/dist/chunk-ZL5JXLAX.js +49 -0
- package/dist/cli.js +2 -2
- package/dist/{config-EMNKHR3W.js → config-KFPS7IEH.js} +1 -1
- package/dist/config-ZBNGRASI.js +1 -0
- package/dist/db-PZ2V7UCK.js +1 -0
- package/dist/delivery-log-ACNJ66RD.js +1 -0
- package/dist/engine-5DHYHDAP.js +1 -0
- package/dist/{evolution-audit-LZSQPDHH.js → evolution-audit-OQDGPKYI.js} +1 -1
- package/dist/{external-api-7XV2PXPC.js → external-api-V74YTLBY.js} +1 -1
- package/dist/index.js +16 -13
- package/dist/{learner-IJN6B7KV.js → learner-QCD6BH2J.js} +1 -1
- package/dist/{logger-QCJUU7GV.js → logger-WEXZORHP.js} +1 -1
- package/dist/{memories-ZII5QSTJ.js → memories-QGMRSBJJ.js} +1 -1
- package/dist/{memory-extractor-DIYJFBCI.js → memory-extractor-3MRK43A2.js} +2 -2
- package/dist/memory-service-M5ADGITG.js +1 -0
- package/dist/outbound-gateway-QRL36F7K.js +1 -0
- package/dist/role-presets-DLO3XS54.js +1 -0
- package/dist/role-workspace-URSOBCDH.js +1 -0
- package/dist/roles-KYXNMO5H.js +1 -0
- package/dist/session-manager-LZ77OT7A.js +1 -0
- package/dist/task-templates-YPNWJOVV.js +1 -0
- package/dist/workflow-executor-3WMS2WV3.js +1 -0
- package/package.json +1 -1
- package/web/dist/assets/{AlertDialog-r3y6IhpW.js → AlertDialog-CfeiyMrc.js} +1 -1
- package/web/dist/assets/{Button-BjXgrQ95.js → Button-DuQctNms.js} +1 -1
- package/web/dist/assets/{Card-C153tGfJ.js → Card-rKfViPS2.js} +1 -1
- package/web/dist/assets/{ChannelDetail-C2uAZv1u.js → ChannelDetail-DHT8fW0C.js} +1 -1
- package/web/dist/assets/{Channels-C62Qrg-n.js → Channels-YHGNXcRu.js} +2 -2
- package/web/dist/assets/{Chat-kH2owmB_.js → Chat-Dv_Izjx3.js} +1 -1
- package/web/dist/assets/{Dashboard-BhD8SpFb.js → Dashboard-DsHC5W4C.js} +1 -1
- package/web/dist/assets/{EmptyState-CXwJFCDQ.js → EmptyState-CIdIlMbn.js} +1 -1
- package/web/dist/assets/{EnvVarEditor-GSapLD96.js → EnvVarEditor-Dxy1Kz1Z.js} +1 -1
- package/web/dist/assets/EventDefDetail-CwprP2ch.js +1 -0
- package/web/dist/assets/Events-B19a8cEG.js +1 -0
- package/web/dist/assets/{Evolution-BO5hysLD.js → Evolution-DT6iZvil.js} +1 -1
- package/web/dist/assets/{GoalDetail-cxa8OvEi.js → GoalDetail-BALsnPQl.js} +1 -1
- package/web/dist/assets/{Goals-Dz3qqp_l.js → Goals-BJIsKgfH.js} +1 -1
- package/web/dist/assets/{Logs-Ckp3-hYV.js → Logs-Cv15aV3l.js} +1 -1
- package/web/dist/assets/{Memories-DEuSRoP3.js → Memories-CKAXhAso.js} +1 -1
- package/web/dist/assets/{NotFound-Bvn39vSk.js → NotFound-DitXhq_y.js} +1 -1
- package/web/dist/assets/{PageHeader-BMvN0xiB.js → PageHeader-CHSgtxPw.js} +1 -1
- package/web/dist/assets/Plugins-NO0S2spH.js +1 -0
- package/web/dist/assets/{RoleDetail-BWMjP9aZ.js → RoleDetail-1FNyCD4u.js} +2 -2
- package/web/dist/assets/{Roles-DD7NBDku.js → Roles-grfjw2zy.js} +1 -1
- package/web/dist/assets/{SectionHeader-CiCj3Is0.js → SectionHeader-C2WpiwJ5.js} +1 -1
- package/web/dist/assets/{Settings-BlU19KuR.js → Settings-9LRLfa_4.js} +1 -1
- package/web/dist/assets/{Strategies-CJ_q94-v.js → Strategies-BMyd_7_5.js} +1 -1
- package/web/dist/assets/{Switch-CoUUy5jr.js → Switch-CULsD-kC.js} +1 -1
- package/web/dist/assets/{Table-CaFJieh_.js → Table-DuOLbyJQ.js} +1 -1
- package/web/dist/assets/{TaskDetail-DVrjU-E6.js → TaskDetail-C2yXy8gE.js} +2 -2
- package/web/dist/assets/Work-dftf35Me.js +1 -0
- package/web/dist/assets/index-D4IubNPI.css +2 -0
- package/web/dist/assets/index-qYKJGoIB.js +2 -0
- package/web/dist/assets/{useIsMobileLayout-Bwrm84kJ.js → useIsMobileLayout-C6KIQjuh.js} +1 -1
- package/web/dist/assets/{vendor-icons-BlMaTTx3.js → vendor-icons-Dk0hMuJz.js} +1 -1
- package/web/dist/assets/{vendor-react-7e01TWy7.js → vendor-react-C6faO6LO.js} +1 -1
- package/web/dist/assets/{vendor-state-Bj70wnRm.js → vendor-state-DahK0J-G.js} +1 -1
- package/web/dist/index.html +7 -7
- package/dist/App-JGH6G5US.js +0 -13
- package/dist/adam-tools-W5AOIGEQ.js +0 -1
- package/dist/approval-handler-ORD4MUVM.js +0 -1
- package/dist/audit-manager-YCJT2WP5.js +0 -1
- package/dist/bree-engine-R5YLSDCL.js +0 -1
- package/dist/channels-JCMPPQED.js +0 -1
- package/dist/chunk-2YAP4YJV.js +0 -57
- package/dist/chunk-DZEVMYPB.js +0 -19
- package/dist/chunk-GY52JA5I.js +0 -10
- package/dist/chunk-MTWLLE26.js +0 -49
- package/dist/chunk-S3BAIZ4Q.js +0 -6
- package/dist/config-XMQS2NPT.js +0 -1
- package/dist/db-YUYXVV3A.js +0 -1
- package/dist/delivery-log-VKONLSVD.js +0 -1
- package/dist/engine-BM5BMPIC.js +0 -1
- package/dist/memory-service-QMYJPBAE.js +0 -1
- package/dist/outbound-gateway-6K6P2BEH.js +0 -1
- package/dist/role-presets-K2BDRZBS.js +0 -1
- package/dist/roles-L34L5MK3.js +0 -1
- package/dist/session-manager-GRJ3FV3L.js +0 -1
- package/dist/task-templates-23YOAF3E.js +0 -1
- package/dist/workflow-executor-JTUWX5DC.js +0 -1
- package/web/dist/assets/Plugins-CRym22JF.js +0 -1
- package/web/dist/assets/Work-BMl61RRi.js +0 -1
- package/web/dist/assets/index-DcXMQByM.css +0 -2
- package/web/dist/assets/index-pF--tN9F.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as i}from"./chunk-UQJZU3R5.js";import{c as p}from"./chunk-7IFLU3CY.js";import{d as c}from"./chunk-GSMC3VUM.js";import{f as d,h as R}from"./chunk-WBAPIPST.js";import{c as g,h as y}from"./chunk-
|
|
1
|
+
import{a as i}from"./chunk-UQJZU3R5.js";import{c as p}from"./chunk-7IFLU3CY.js";import{d as c}from"./chunk-GSMC3VUM.js";import{f as d,h as R}from"./chunk-WBAPIPST.js";import{c as g,h as y}from"./chunk-MRTJFYPR.js";R();import{readFileSync as P,existsSync as _}from"fs";import{resolve as O}from"path";import{homedir as E}from"os";import{parse as w}from"yaml";y();var T=g("config");function S(e){return e.replace(/\$\{(\w+)}/g,(t,r)=>process.env[r]??"")}function h(e){return e.startsWith("~/")?O(E(),e.slice(2)):e}function u(e){if(typeof e=="string")return S(e);if(Array.isArray(e))return e.map(u);if(e!==null&&typeof e=="object"){let t={};for(let[r,n]of Object.entries(e))t[r]=u(n);return t}return e}function m(e,t){let r={...e};for(let n of Object.keys(t)){let s=t[n],o=e[n];s!==null&&typeof s=="object"&&!Array.isArray(s)&&o!==null&&typeof o=="object"&&!Array.isArray(o)?r[n]=m(o,s):r[n]=s}return r}function v(e){return e.defaults.deniedReadPaths&&(e.defaults.deniedReadPaths=e.defaults.deniedReadPaths.map(h)),e.defaults.sensitivePaths&&!e.defaults.deniedReadPaths&&(T.warn("config.defaults.sensitivePaths is deprecated \u2014 use config.defaults.deniedReadPaths instead. Values have been migrated automatically."),e.defaults.deniedReadPaths=e.defaults.sensitivePaths.map(h)),e}function k(){let e={};for(let t of process.argv.slice(2)){let r=t.match(/^--([a-z-]+)=(.+)$/);r&&(e[r[1]]=r[2])}return e}function A(e){let t=process.env.ADAM_PORT;t&&(e.server.port=parseInt(t,10));let r=process.env.ANTHROPIC_MODEL;r&&(e.defaults.model=r);let n=process.env.ADAM_API_KEY;return n&&(e.server.apiKey=n),e}function C(e){let t=k();return t.port&&(e.server.port=parseInt(t.port,10)),t.host&&(e.server.host=t.host),t.timeout&&(e.defaults.timeout=parseInt(t.timeout,10)),t["api-key"]&&(e.server.apiKey=t["api-key"]),e}function D(e){let t=e??d,r={};if(_(t)){let f=P(t,"utf-8"),l=w(f);l&&(r=u(l))}let n=m(i,r),s=A(n),o=C(s);return v(o)}function I(){let e=JSON.parse(JSON.stringify(i)),t=A(e),r=C(t);return v(r)}function V(){let e={},t={ANTHROPIC_API_KEY:"anthropic.apiKey",ANTHROPIC_BASE_URL:"anthropic.baseUrl",ANTHROPIC_MODEL:"anthropic.model",ANTHROPIC_DEFAULT_OPUS_MODEL:"anthropic.defaultOpusModel",ANTHROPIC_DEFAULT_SONNET_MODEL:"anthropic.defaultSonnetModel",ANTHROPIC_DEFAULT_HAIKU_MODEL:"anthropic.defaultHaikuModel",ANTHROPIC_SMALL_FAST_MODEL:"anthropic.smallFastModel",ADAM_PORT:"server.port",ADAM_API_KEY:"server.apiKey"},r={};for(let[s,o]of Object.entries(t)){let a=process.env[s];if(a&&a.length>0)if(o==="server.port"){let f=parseInt(a,10);isNaN(f)||(e[o]=f)}else e[o]=a}let n=p();if(n)for(let[s,o]of Object.entries(n))s in t||s.startsWith("ANTHROPIC_")||s.startsWith("ADAM_")||(r[s]=o);return Object.keys(r).length>0&&(e["defaults.env"]=r),e}function j(){try{return c().defaults}catch{return i.defaults}}function W(){try{return c().chat??i.chat}catch{return i.chat}}export{D as a,I as b,V as c,j as d,W as e};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as s,d as o}from"./chunk-
|
|
1
|
+
import{b as s,d as o}from"./chunk-NCFVJCNQ.js";o();function i(e){return{id:e.id,ruleId:e.rule_id??void 0,taskId:e.task_id??void 0,status:e.status,target:JSON.parse(e.target),content:e.content,attempts:e.attempts,error:e.error??void 0,createdAt:e.created_at,deliveredAt:e.delivered_at??void 0,expiresAt:e.expires_at,source:e.source,messageType:e.message_type??void 0}}var u=1440*60*1e3;function p(e){s().prepare(`
|
|
2
2
|
INSERT INTO delivery_log (id, rule_id, task_id, status, target, content,
|
|
3
3
|
attempts, error, created_at, delivered_at, expires_at, source, message_type)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as S,h as x}from"./chunk-
|
|
1
|
+
import{c as S,h as x}from"./chunk-MRTJFYPR.js";x();import*as s from"fs";import*as l from"path";import{homedir as F}from"os";var v=S("embedding"),M=null,A=!1;async function L(){if(A)throw new Error("onnxruntime-node native binding not available. Embedding disabled.");if(!M)try{M=await import("./dist-CDWBOTZS.js")}catch(e){throw A=!0,v.warn({error:e.message},"onnxruntime-node not available"),new Error("onnxruntime-node native binding not available. Embedding disabled.")}return M}var P=l.join(F(),".adam","models"),N="all-MiniLM-L6-v2",T="model.onnx",B="tokenizer.json",O="https://huggingface.co/Xenova/all-MiniLM-L6-v2/resolve/main/onnx/model_quantized.onnx",j="https://huggingface.co/Xenova/all-MiniLM-L6-v2/resolve/main/tokenizer.json",R=384,y=null,k=null;function z(){let e=l.join(P,N);return s.existsSync(e)||s.mkdirSync(e,{recursive:!0}),e}async function _(e,t){if(s.existsSync(t))return;v.info({file:l.basename(t)},"Downloading model file");let f=await fetch(e);if(!f.ok)throw new Error(`Failed to download ${e}: ${f.status}`);let i=Buffer.from(await f.arrayBuffer());s.writeFileSync(t,i),v.info({file:l.basename(t),sizeMb:(i.length/1024/1024).toFixed(1)},"Model file downloaded")}async function U(){let e=z(),t=l.join(e,T),f=l.join(e,B);return await _(O,t),await _(j,f),t}function $(){if(k)return k;let e=l.join(z(),B);if(!s.existsSync(e))throw new Error("Tokenizer not found. Run generateEmbedding first to download.");return k=JSON.parse(s.readFileSync(e,"utf-8")),k}function q(e,t=128){let i=$().model.vocab,w=i["[CLS]"]??101,I=i["[SEP]"]??102,u=i["[UNK]"]??100,E=i["[PAD]"]??0,p=e.toLowerCase().replace(/[^\w\s\u4e00-\u9fff\u3040-\u309f\u30a0-\u30ff]/g," ").split(/\s+/).filter(Boolean),r=[w];for(let o of p){if(r.length>=t-1)break;if(i[o]!==void 0){r.push(i[o]);continue}let d=!1,n=o,m=!0;for(;n.length>0&&r.length<t-1;){let D=!1;for(let g=n.length;g>0;g--){let b=m?n.slice(0,g):`##${n.slice(0,g)}`;if(i[b]!==void 0){r.push(i[b]),n=n.slice(g),m=!1,D=!0,d=!0;break}}if(!D)if(n.length>=2){let g=n.slice(0,2),b=i[g]??i[`##${g}`]??u;r.push(b),n=n.slice(2),d=!0}else r.push(u),n=""}d||r.push(u)}r.push(I);let h=new BigInt64Array(t),a=new BigInt64Array(t),c=new BigInt64Array(t);for(let o=0;o<t;o++)o<r.length?(h[o]=BigInt(r[o]),a[o]=1n):(h[o]=BigInt(E),a[o]=0n),c[o]=0n;return{inputIds:h,attentionMask:a,tokenTypeIds:c}}async function C(){if(y)return y;let e=await L(),t=await U();return y=await e.InferenceSession.create(t,{executionProviders:["cpu"]}),y}async function Z(e){let t=await L(),f=await C(),{inputIds:i,attentionMask:w,tokenTypeIds:I}=q(e),u=i.length,E={input_ids:new t.Tensor("int64",i,[1,u]),attention_mask:new t.Tensor("int64",w,[1,u]),token_type_ids:new t.Tensor("int64",I,[1,u])},p=await f.run(E),h=(p.last_hidden_state??p[Object.keys(p)[0]]).data,a=R,c=new Float32Array(a),o=0;for(let n=0;n<u;n++)if(w[n]===1n){o++;for(let m=0;m<a;m++)c[m]+=h[n*a+m]}if(o>0)for(let n=0;n<a;n++)c[n]/=o;let d=0;for(let n=0;n<a;n++)d+=c[n]*c[n];if(d=Math.sqrt(d),d>0)for(let n=0;n<a;n++)c[n]/=d;return c}function G(){let e=l.join(z(),T);return s.existsSync(e)}export{Z as a,G as b};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as t,d}from"./chunk-
|
|
1
|
+
import{b as t,d}from"./chunk-NCFVJCNQ.js";d();function s(e){return{id:e.id,taskId:e.task_id,roleId:void 0,plan:JSON.parse(e.plan_json),status:e.status,approvalType:e.approval_type??void 0,deviationReport:e.deviation_report_json?JSON.parse(e.deviation_report_json):void 0,learnedRules:e.learned_rules_json?JSON.parse(e.learned_rules_json):void 0,createdAt:e.created_at,approvedAt:e.approved_at??void 0,reviewedAt:e.reviewed_at??void 0}}function p(e){t().prepare(`
|
|
2
2
|
INSERT INTO task_plans (id, task_id, plan_json, status, approval_type,
|
|
3
3
|
deviation_report_json, learned_rules_json, created_at, approved_at, reviewed_at)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as o,d as u}from"./chunk-
|
|
1
|
+
import{b as o,d as u}from"./chunk-NCFVJCNQ.js";u();import{v4 as a}from"uuid";function R(t){o().prepare(`
|
|
2
2
|
INSERT INTO evolution_audit (id, timestamp, old_rules, new_rules, diff, trigger_task_id, role_id, source)
|
|
3
3
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
4
4
|
`).run(a(),t.timestamp,t.oldRules,t.newRules,t.diff,t.triggerTaskId??null,t.roleId??null,t.source??"reflection")}function f(t=100,e=0){return o().prepare(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as h,b as u,c,d as m,e as v,f as x}from"./chunk-
|
|
1
|
+
import{a as h,b as u,c,d as m,e as v,f as x}from"./chunk-FXQAUQTI.js";import{a as l}from"./chunk-SWP2JC54.js";import{b as S,d as y}from"./chunk-GMMWA5EG.js";import{a as i}from"./chunk-L7JP7DUO.js";import{a as C}from"./chunk-YHVYX3F4.js";import{e as p}from"./chunk-PG6LMSX6.js";import{v4 as D}from"uuid";import{v4 as I}from"uuid";function _(e){if(e.length<20)return null;let t=e.trim();return t.length>300?{content:`User request: ${t.slice(0,280)}...`,importance:3,type:"thought"}:{content:`User request: ${t}`,importance:3,type:"thought"}}function b(e){if(e.length<20)return null;let t=e.trim();return t.length>400?{content:`Assistant response: ${t.slice(0,370)}...`,importance:2,type:"event"}:{content:`Assistant response: ${t}`,importance:2,type:"event"}}function N(e){let t=S(e,200,0),s=[];for(let o of t){let r=o.role==="user"?_(o.content):b(o.content);r&&s.push(r)}return{facts:s}}function $(e){let t=e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(s=>s.length>2);return[...new Set(t)].slice(0,20)}async function A(e,t){let{facts:s}=N(e),o=0;for(let r of s){let f=r.content.slice(0,500),g;try{g=await l(f)}catch{}let M=$(f),T={id:I(),roleId:t,type:r.type,content:f,embedding:g,keywords:M,importance:r.importance,sourceType:"session_archive",createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"};C(T),o++}return o}var n=new Map,a;function w(e){return`${e.type}:${e.channelId??""}:${e.chatId??""}`}function F(){n.clear();let e=m("active",1e3);for(let t of e)n.set(t.id,t)}function Q(e,t){let s=Date.now(),o={id:D(),status:"active",source:e,createdAt:s,lastActiveAt:s,messageCount:0};return h(o),n.set(o.id,o),i.emit({type:"session_created",session:o}),o}function V(e){for(let s of n.values())if(w(s.source)===w(e))return s;let t=v(e);return t&&n.set(t.id,t),t}function B(e){let t=n.get(e);return t||u(e)}function E(e){let t=Date.now();c(e,{status:"archived",archivedAt:t}),p().archiveExtractMemory&&u(e)&&A(e,"role-chat-manager").catch(()=>{}),n.delete(e),i.emit({type:"session_archived",sessionId:e})}function W(e){c(e,{status:"active",archivedAt:void 0});let t=u(e);return t&&(n.set(t.id,t),i.emit({type:"session_restored",session:t})),t}function X(e){y(e),x(e),n.delete(e),i.emit({type:"session_deleted",sessionId:e})}function Y(e){let t=Date.now();c(e,{lastActiveAt:t});let s=n.get(e);s&&(s.lastActiveAt=t)}function Z(e){let t=B(e);if(t){let s=t.messageCount+1;c(e,{messageCount:s});let o=n.get(e);o&&(o.messageCount=s)}}function ee(e){return m(e)}function P(){let t=p().sessionTimeoutMinutes*60*1e3,s=Date.now();for(let o of n.values())if(s-o.lastActiveAt>t)try{E(o.id)}catch{}}function R(e=6e4){d(),a=setInterval(P,e)}function d(){a&&(clearInterval(a),a=void 0)}function te(){return a}function se(){F(),R()}function oe(){d(),n.clear()}function ne(){d(),n.clear()}export{F as a,Q as b,V as c,B as d,E as e,W as f,X as g,Y as h,Z as i,ee as j,R as k,d as l,te as m,se as n,oe as o,ne as p};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as C}from"./chunk-
|
|
1
|
+
import{b as C}from"./chunk-YXYIA24D.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as D,c as f,d as w}from"./chunk-RLJYEEQC.js";import{c as M,h as U}from"./chunk-MRTJFYPR.js";function O(s,c,n){switch(c){case"wechat":return $(s);case"telegram":return s;case"slack":return P(s);case"webhook":return JSON.stringify({result:s,taskId:n,timestamp:new Date().toISOString()});default:return $(s)}}function $(s){return s.replace(/^#{1,6}\s+/gm,"").replace(/\*\*(.+?)\*\*/g,"$1").replace(/\*(.+?)\*/g,"$1").replace(/__(.+?)__/g,"$1").replace(/_(.+?)_/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/```[\s\S]*?```/g,c=>c.replace(/```\w*\n?/g,"").trim()).replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\n{3,}/g,`
|
|
2
2
|
|
|
3
|
-
`).trim()}function P(s){return s.replace(/\*\*(.+?)\*\*/g,"*$1*").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>")}U();import{v4 as T}from"uuid";var x=M("adam"),v=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;isRecentlySent(c){return this._recentlySentIds.has(c)}async send(c){let{taskId:n,channelId:a,chatId:m,content:y,messageType:d,platform:E,webhookUrl:h,replyMarkup:I,mediaUrl:S,mediaType:b}=c,R=d!=="reply"&&!!n,r;if(R){r=`${n}:${a??"none"}:${m??"none"}:${d}`;let t=this._dedupCache.get(r);if(t&&Date.now()-t.timestamp<300*1e3)return x.debug({dedupKey:r},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:t.logEntryId}}if(a){let t=Date.now(),i=6e4,o=this._rateLimitWindows.get(a);o||(o=[],this._rateLimitWindows.set(a,o));let u=t-i;for(;o.length>0&&o[0]<u;)o.shift();if(o.length>=60){let l=T();return x.warn({channelId:a,count:o.length},"Rate limited, not sending"),{success:!1,logEntryId:l,error:"rate_limited"}}o.push(t)}let L=E??(a?C(a)?.platform:void 0)??"unknown",k=h?y:O(y,L,n),e=T(),g={id:e,ruleId:void 0,taskId:n??void 0,status:"pending",target:a&&m?{type:"channel",channelId:a,chatId:m}:h?{type:"webhook",webhookUrl:h}:{type:"channel",channelId:a??"",chatId:m??""},content:k,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:d};D(g),r&&this._dedupCache.set(r,{logEntryId:e,timestamp:Date.now()});try{if(h){let t=await fetch(h,{method:"POST",body:JSON.stringify({result:y,taskId:n,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(t.ok)return w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,logEntryId:e};{let i=`Webhook returned ${t.status}`;return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}else if(a&&m){let{getChannelManager:t}=await import("./channels-
|
|
3
|
+
`).trim()}function P(s){return s.replace(/\*\*(.+?)\*\*/g,"*$1*").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>")}U();import{v4 as T}from"uuid";var x=M("adam"),v=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;isRecentlySent(c){return this._recentlySentIds.has(c)}async send(c){let{taskId:n,channelId:a,chatId:m,content:y,messageType:d,platform:E,webhookUrl:h,replyMarkup:I,mediaUrl:S,mediaType:b}=c,R=d!=="reply"&&!!n,r;if(R){r=`${n}:${a??"none"}:${m??"none"}:${d}`;let t=this._dedupCache.get(r);if(t&&Date.now()-t.timestamp<300*1e3)return x.debug({dedupKey:r},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:t.logEntryId}}if(a){let t=Date.now(),i=6e4,o=this._rateLimitWindows.get(a);o||(o=[],this._rateLimitWindows.set(a,o));let u=t-i;for(;o.length>0&&o[0]<u;)o.shift();if(o.length>=60){let l=T();return x.warn({channelId:a,count:o.length},"Rate limited, not sending"),{success:!1,logEntryId:l,error:"rate_limited"}}o.push(t)}let L=E??(a?C(a)?.platform:void 0)??"unknown",k=h?y:O(y,L,n),e=T(),g={id:e,ruleId:void 0,taskId:n??void 0,status:"pending",target:a&&m?{type:"channel",channelId:a,chatId:m}:h?{type:"webhook",webhookUrl:h}:{type:"channel",channelId:a??"",chatId:m??""},content:k,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:d};D(g),r&&this._dedupCache.set(r,{logEntryId:e,timestamp:Date.now()});try{if(h){let t=await fetch(h,{method:"POST",body:JSON.stringify({result:y,taskId:n,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(t.ok)return w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,logEntryId:e};{let i=`Webhook returned ${t.status}`;return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}else if(a&&m){let{getChannelManager:t}=await import("./channels-5TFYQN5Z.js"),i=t();if(!i){let l="ChannelManager not available";return f(e,"failed",l),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:l,messageType:d}),{success:!1,logEntryId:e,error:l}}let o={content:k,...I?{replyMarkup:I}:{},...S?{mediaUrl:S}:{},...b?{mediaType:b}:{}},u=await i.sendMessage(a,m,o);if(u===null){let l="Channel adapter send failed (returned null)";return f(e,"failed",l),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:l,messageType:d}),{success:!1,logEntryId:e,error:l}}return u&&(this._recentlySentIds.add(u),setTimeout(()=>this._recentlySentIds.delete(u),300*1e3)),w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,messageId:u??void 0,logEntryId:e}}else{let t="No channelId/chatId or webhookUrl provided";return f(e,"failed",t),r&&this._dedupCache.delete(r),{success:!1,logEntryId:e,error:t}}}catch(t){let i=t instanceof Error?t.message:String(t);return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}},_=null;function W(){return _||(_=new v),_}function q(s){return W().isRecentlySent(s)}export{v as a,W as b,q as c};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c,d as m}from"./chunk-GGIHDFRW.js";import{b as a,d as _}from"./chunk-NCFVJCNQ.js";import{c as s,h as f}from"./chunk-MRTJFYPR.js";import{readFileSync as p,existsSync as l}from"fs";import{fileURLToPath as A}from"url";import{dirname as I,join as r}from"path";var O=A(import.meta.url),g=I(O),i,n;function u(){let e=r(g,"..","package.json");if(l(e))return e;let o=r(g,"..","..","package.json");return l(o)?o:r(process.cwd(),"package.json")}function P(){if(i===void 0){let e=u();i=JSON.parse(p(e,"utf-8")).version}return i}function S(){if(n===void 0){let e=u();n=JSON.parse(p(e,"utf-8")).name}return n}_();f();import{dirname as h,join as R}from"path";import{fileURLToPath as T}from"url";var y=h(T(import.meta.url)),d=R(y,"..");var k=d,U=s("cli:register-ai-digest"),t="ai-hourly-digest";function x(){try{if(m(t)){console.log(`[INFO] AI Digest template already exists (${t})`);return}}catch{}let e={id:t,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",autoSelectRole:!0,requirements:{},prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
|
|
2
2
|
|
|
3
3
|
\u641C\u7D22\u6765\u6E90:
|
|
4
4
|
1. Hacker News AI \u677F\u5757 (https://news.ycombinator.com/front?day=1)
|
|
@@ -11,7 +11,7 @@ import{a as c,b as m}from"./chunk-S3BAIZ4Q.js";import{b as a,d as _}from"./chunk
|
|
|
11
11
|
- \u6807\u9898\uFF1A[\u6587\u7AE0\u6807\u9898]
|
|
12
12
|
- \u6765\u6E90\uFF1A[\u7F51\u7AD9/\u5E73\u53F0\u540D\u79F0]
|
|
13
13
|
- \u94FE\u63A5\uFF1A[\u5B8C\u6574 URL]
|
|
14
|
-
- \u6838\u5FC3\u4EF7\u503C\uFF1A[1-2 \u53E5\u8BDD\u8BF4\u660E\u4E3A\u4EC0\u4E48\u8FD9\u7BC7\u6587\u7AE0\u503C\u5F97\u770B]`},{id:"summarize_article",dependsOn:["search_ai_news"],prompt:`\u9605\u8BFB\u5E76\u603B\u7ED3\u8FD9\u7BC7\u6587\u7AE0\u3002
|
|
14
|
+
- \u6838\u5FC3\u4EF7\u503C\uFF1A[1-2 \u53E5\u8BDD\u8BF4\u660E\u4E3A\u4EC0\u4E48\u8FD9\u7BC7\u6587\u7AE0\u503C\u5F97\u770B]`},{id:"summarize_article",dependsOn:["search_ai_news"],autoSelectRole:!0,requirements:{},prompt:`\u9605\u8BFB\u5E76\u603B\u7ED3\u8FD9\u7BC7\u6587\u7AE0\u3002
|
|
15
15
|
|
|
16
16
|
\u6587\u7AE0\u4FE1\u606F:
|
|
17
17
|
{{search_ai_news.result}}
|
|
@@ -32,18 +32,18 @@ import{a as c,b as m}from"./chunk-S3BAIZ4Q.js";import{b as a,d as _}from"./chunk
|
|
|
32
32
|
[\u8FD9\u9879\u5DE5\u4F5C\u7684\u610F\u4E49\u6216\u5BF9\u884C\u4E1A\u7684\u5F71\u54CD]
|
|
33
33
|
|
|
34
34
|
## \u539F\u6587\u94FE\u63A5
|
|
35
|
-
[\u6587\u7AE0 URL]`},{id:"save_to_omnifocus",dependsOn:["summarize_article"],prompt:`\u5C06\u6587\u7AE0\u603B\u7ED3\u4FDD\u5B58\u5230 Omnifocus\u3002
|
|
35
|
+
[\u6587\u7AE0 URL]`},{id:"save_to_omnifocus",dependsOn:["summarize_article"],autoSelectRole:!0,requirements:{},prompt:`\u5C06\u6587\u7AE0\u603B\u7ED3\u4FDD\u5B58\u5230 Omnifocus\u3002
|
|
36
36
|
|
|
37
37
|
\u603B\u7ED3\u5185\u5BB9:
|
|
38
38
|
{{summarize_article.result}}
|
|
39
39
|
|
|
40
40
|
\u63D0\u53D6\u6587\u7AE0\u6807\u9898\u548C\u5B8C\u6574\u603B\u7ED3\uFF0C\u7136\u540E\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u6DFB\u52A0\u5230 Omnifocus Inbox\uFF1A
|
|
41
41
|
|
|
42
|
-
osascript ${
|
|
42
|
+
osascript ${k}/scripts/add-to-omnifocus.applescript "[\u6587\u7AE0\u6807\u9898] AI \u524D\u6CBF\u901F\u9012" "[\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9]"
|
|
43
43
|
|
|
44
44
|
\u6CE8\u610F\uFF1A
|
|
45
45
|
- \u5C06 [\u6587\u7AE0\u6807\u9898] \u66FF\u6362\u4E3A\u5B9E\u9645\u6807\u9898
|
|
46
46
|
- \u5C06 [\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9] \u66FF\u6362\u4E3A\u5B8C\u6574\u7684\u603B\u7ED3\u6587\u672C\uFF08\u5305\u542B\u6838\u5FC3\u53D1\u73B0\u3001\u6280\u672F\u7EC6\u8282\u3001\u5F71\u54CD/\u610F\u4E49\u548C\u539F\u6587\u94FE\u63A5\uFF09
|
|
47
47
|
- \u603B\u7ED3\u5185\u5BB9\u4F7F\u7528\u6362\u884C\u7B26\u5206\u9694\u5404\u90E8\u5206
|
|
48
48
|
|
|
49
|
-
\u5B8C\u6210\u540E\u8F93\u51FA\uFF1A\u5DF2\u4FDD\u5B58\u5230 Omnifocus\uFF1A[\u4EFB\u52A1\u6807\u9898]`}],config:{timeout:300},tags:["ai","digest","hourly","automation"],createdAt:Date.now()};c(e),console.log(`[INFO] Registered AI Hourly Digest task template (${t})`),console.log("[INFO] Cron schedule: 0 * * * * (every hour at minute 0)")}import.meta.url===`file://${process.argv[1]}`&&(console.log("Initializing database..."),a(),console.log("Registering AI Digest template..."),
|
|
49
|
+
\u5B8C\u6210\u540E\u8F93\u51FA\uFF1A\u5DF2\u4FDD\u5B58\u5230 Omnifocus\uFF1A[\u4EFB\u52A1\u6807\u9898]`}],config:{timeout:300},tags:["ai","digest","hourly","automation"],createdAt:Date.now()};c(e),console.log(`[INFO] Registered AI Hourly Digest task template (${t})`),console.log("[INFO] Cron schedule: 0 * * * * (every hour at minute 0)")}import.meta.url===`file://${process.argv[1]}`&&(console.log("Initializing database..."),a(),console.log("Registering AI Digest template..."),x(),console.log("Done."),process.exit(0));export{d as a,P as b,S as c,x as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as w,h as S}from"./chunk-WBAPIPST.js";import{c as g,h as P}from"./chunk-
|
|
1
|
+
import{d as w,h as S}from"./chunk-WBAPIPST.js";import{c as g,h as P}from"./chunk-MRTJFYPR.js";P();S();import{readFileSync as v,existsSync as E}from"fs";import{join as p}from"path";import{homedir as R}from"os";var T=g("ws"),x=p(R(),".adam"),f=p(x,"adam.port"),b=p(w,"adam.key");function d(){let n=process.env.ADAM_API_KEY;if(n)return n;if(E(b))return v(b,"utf-8").trim()||void 0}function m(){if(!E(f))return null;let n=parseInt(v(f,"utf-8").trim(),10);return isNaN(n)?null:n}function C(){let n=m();if(!n)throw new Error("Server not running. Run: adam server start");return`http://localhost:${n}`}var u=class extends Error{constructor(e,s){super(s);this.status=e;this.name="ApiError"}};async function A(n,t={}){let s=`${C()}${n}`,r=d(),o=await fetch(s,{method:t.method||"GET",headers:{"Content-Type":"application/json",...r?{"x-api-key":r}:{},...t.headers},body:t.body?JSON.stringify(t.body):void 0});if(!o.ok){let a=await o.text().catch(()=>"Unknown error");throw new u(o.status,a)}return o.headers.get("content-type")?.includes("application/json")?o.json():o.text()}function D(){return A("/healthz")}var k=class{ws=null;callbacks=new Map;reconnectAttempts=0;reconnectTimer=null;url;constructor(t="/events"){let e=m();if(!e)throw new Error("Server not running. Run: adam server start");let s=d(),r=new URL(`ws://localhost:${e}${t}`);s&&r.searchParams.set("api_key",s),this.url=r.toString()}connect(){return new Promise((t,e)=>{try{this.ws=new WebSocket(this.url),this.ws.onopen=()=>{this.reconnectAttempts=0,t()},this.ws.onmessage=s=>{try{let r=JSON.parse(s.data),{type:o,data:c,...a}=r,i=this.callbacks.get(o);i&&i.forEach(l=>l(c??a))}catch(r){T.error({error:r},"Failed to parse WebSocket message")}},this.ws.onclose=()=>{this.scheduleReconnect()},this.ws.onerror=s=>{e(s)}}catch(s){e(s)}})}scheduleReconnect(){let t=[1e3,2e3,4e3,8e3,15e3],e=t[Math.min(this.reconnectAttempts,t.length-1)];this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>{this.connect().catch(()=>{})},e)}on(t,e){this.callbacks.has(t)||this.callbacks.set(t,new Set),this.callbacks.get(t).add(e)}off(t,e){this.callbacks.get(t)?.delete(e)}close(){this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.ws?.close()}isConnected(){return this.ws?.readyState===WebSocket.OPEN}},y=class{ws=null;callbacks=new Map;url;constructor(t){let e=m();if(!e)throw new Error("Server not running. Run: adam server start");let s=d(),r=new URL(`ws://localhost:${e}/tasks/${t}/stream`);s&&r.searchParams.set("api_key",s),this.url=r.toString()}connect(){return new Promise((t,e)=>{try{this.ws=new WebSocket(this.url),this.ws.onopen=()=>{t()},this.ws.onmessage=s=>{try{let r=JSON.parse(s.data),{type:o,data:c,...a}=r,i=this.callbacks.get(o);i&&i.forEach(h=>h(c??a));let l=this.callbacks.get("*");l&&l.forEach(h=>h(r))}catch(r){T.error({error:r},"Failed to parse task stream message")}},this.ws.onerror=s=>{e(s)},this.ws.onclose=()=>{}}catch(s){e(s)}})}on(t,e){this.callbacks.has(t)||this.callbacks.set(t,new Set),this.callbacks.get(t).add(e)}off(t,e){this.callbacks.get(t)?.delete(e)}close(){this.ws?.close()}isConnected(){return this.ws?.readyState===WebSocket.OPEN}};export{d as a,A as b,D as c,k as d,y as e};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{l as f,r as h}from"./chunk-
|
|
1
|
+
import{l as f,r as h}from"./chunk-7ZGSJCX5.js";import{b as u,d as E}from"./chunk-NCFVJCNQ.js";E();h();function l(e){return{id:e.id,roleId:e.role_id,type:e.type,content:e.content,embedding:e.embedding?new Float32Array(e.embedding.buffer,e.embedding.byteOffset,e.embedding.byteLength/4):void 0,keywords:e.keywords?JSON.parse(e.keywords):[],importance:e.importance,sourceType:e.source_type,sourceTaskId:e.source_task_id??void 0,evidence:e.evidence?JSON.parse(e.evidence):void 0,createdAt:e.created_at,lastAccessed:e.last_accessed,retrievedCount:e.retrieved_count,tier:e.tier,supersededBy:e.superseded_by??void 0}}function b(e){return Buffer.from(e.buffer,e.byteOffset,e.byteLength)}function v(e){u().prepare(`
|
|
2
2
|
INSERT INTO memories (id, role_id, type, content, embedding, keywords,
|
|
3
3
|
importance, source_type, source_task_id, evidence,
|
|
4
4
|
created_at, last_accessed, retrieved_count, tier, superseded_by)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as s,d as i}from"./chunk-
|
|
1
|
+
import{b as s,d as i}from"./chunk-NCFVJCNQ.js";i();function l(e){return{id:e.id,name:e.name,platform:e.platform,enabled:e.enabled===1,status:e.status,config:JSON.parse(e.config),linkedRoleId:e.linked_role_id??void 0,allowedChatIds:e.allowed_chat_ids?JSON.parse(e.allowed_chat_ids):void 0,createdAt:e.created_at,updatedAt:e.updated_at??void 0,lastMessageAt:e.last_message_at??void 0,messageCount:e.message_count}}function o(e){s().prepare(`
|
|
2
2
|
INSERT INTO channels (id, name, platform, enabled, status, config, linked_role_id,
|
|
3
3
|
allowed_chat_ids, created_at, updated_at, last_message_at, message_count)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import{e as J}from"./chunk-HWLSHTVX.js";import{i as x,j as v,q as b}from"./chunk-MDBVKBC7.js";import{b as y}from"./chunk-I7ZZKPHE.js";import{a as u}from"./chunk-L7JP7DUO.js";import{p as C}from"./chunk-YHVYX3F4.js";import{c as _,d as l,f as g,h as A}from"./chunk-GGIHDFRW.js";import{d as k}from"./chunk-PG6LMSX6.js";import{o as I,r as W}from"./chunk-7ZGSJCX5.js";import{c as p,h as T}from"./chunk-MRTJFYPR.js";T();W();import{v4 as m}from"uuid";import{CronExpressionParser as S}from"cron-parser";T();import{v4 as D}from"uuid";var d=p("scheduler"),R=new J;async function O(n,t={}){let e=t.executionId??D();if(d.info({templateName:n.name,executionId:e,trigger:t.triggerContext},"Dispatching template"),n.goalIds&&n.goalIds.length>0){for(let r of n.goalIds){let o=v(r);if(!o){d.warn({goalId:r,templateId:n.id},"Goal reference not found, skipping");continue}let c=D();x({id:c,name:o.name,description:o.description,roleId:o.roleId,metricType:o.metricType,targetValue:o.targetValue,currentValue:0,deadline:o.deadline,budgetUsd:o.budgetUsd,status:"active",createdAt:Date.now(),sourceSessionId:n.sourceSessionId,deliverTo:n.deliverTo,reportTo:n.reportTo});let a=await b({prompt:`Decompose and execute goal: ${o.name}. ${o.description??""}`,roleId:n.rolePreference??o.roleId,config:{...k()},deliverTo:n.deliverTo,reportTo:n.reportTo,sourceSessionId:n.sourceSessionId,parentId:c,templateId:n.id});if(!a.ok){d.error({templateId:n.id,sourceGoalId:r,newGoalId:c,code:a.code,reason:a.reason},"Decomposition task admission failed");continue}d.info({templateId:n.id,sourceGoalId:r,newGoalId:c,taskId:a.taskId},"Goal reference triggered, dispatched decomposition task")}return}let s=await R.execute(n,e,{eventId:t.triggerContext?.eventId});d.info({templateName:n.name,executionId:e,status:s.status,steps:s.stepResults.size},"Workflow execution finished")}var i=p("scheduler"),f="ai-hourly-digest";function E(){if(l(f)){i.debug({templateId:f},"Built-in template already exists");return}let t={id:f,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",autoSelectRole:!0,requirements:{},prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
|
|
2
|
+
|
|
3
|
+
\u641C\u7D22\u6765\u6E90:
|
|
4
|
+
1. Hacker News AI \u677F\u5757 (https://news.ycombinator.com/front?day=1)
|
|
5
|
+
2. ArXiv cs.AI \u6700\u65B0\u8BBA\u6587 (https://arxiv.org/list/cs.AI/recent)
|
|
6
|
+
3. Reddit r/MachineLearning \u70ED\u95E8\u5E16\u5B50
|
|
7
|
+
|
|
8
|
+
\u627E\u51FA\u4E00\u7BC7\u6700\u6709\u4EF7\u503C\u3001\u6700\u6709\u6280\u672F\u6DF1\u5EA6\u7684\u6587\u7AE0\u3002
|
|
9
|
+
|
|
10
|
+
\u8F93\u51FA\u683C\u5F0F:
|
|
11
|
+
- \u6807\u9898\uFF1A[\u6587\u7AE0\u6807\u9898]
|
|
12
|
+
- \u6765\u6E90\uFF1A[\u7F51\u7AD9/\u5E73\u53F0\u540D\u79F0]
|
|
13
|
+
- \u94FE\u63A5\uFF1A[\u5B8C\u6574 URL]
|
|
14
|
+
- \u6838\u5FC3\u4EF7\u503C\uFF1A[1-2 \u53E5\u8BDD\u8BF4\u660E\u4E3A\u4EC0\u4E48\u8FD9\u7BC7\u6587\u7AE0\u503C\u5F97\u770B]`},{id:"summarize_article",dependsOn:["search_ai_news"],autoSelectRole:!0,requirements:{},prompt:`\u9605\u8BFB\u5E76\u603B\u7ED3\u8FD9\u7BC7\u6587\u7AE0\u3002
|
|
15
|
+
|
|
16
|
+
\u6587\u7AE0\u4FE1\u606F:
|
|
17
|
+
{{search_ai_news.result}}
|
|
18
|
+
|
|
19
|
+
\u8BF7:
|
|
20
|
+
1. \u7528 WebFetch \u83B7\u53D6\u6587\u7AE0\u5B8C\u6574\u5185\u5BB9
|
|
21
|
+
2. \u63D0\u53D6\u6838\u5FC3\u89C2\u70B9\u548C\u6280\u672F\u7EC6\u8282
|
|
22
|
+
3. \u7528\u4E2D\u6587\u5199\u51FA 300-500 \u5B57\u7684\u603B\u7ED3
|
|
23
|
+
|
|
24
|
+
\u603B\u7ED3\u7ED3\u6784:
|
|
25
|
+
## \u6838\u5FC3\u53D1\u73B0
|
|
26
|
+
[\u6587\u7AE0\u6700\u91CD\u8981\u7684\u53D1\u73B0/\u521B\u65B0\u70B9]
|
|
27
|
+
|
|
28
|
+
## \u6280\u672F\u7EC6\u8282
|
|
29
|
+
[\u5173\u952E\u7684\u6280\u672F\u65B9\u6CD5/\u5B9E\u73B0\u7EC6\u8282]
|
|
30
|
+
|
|
31
|
+
## \u5F71\u54CD/\u610F\u4E49
|
|
32
|
+
[\u8FD9\u9879\u5DE5\u4F5C\u7684\u610F\u4E49\u6216\u5BF9\u884C\u4E1A\u7684\u5F71\u54CD]
|
|
33
|
+
|
|
34
|
+
## \u539F\u6587\u94FE\u63A5
|
|
35
|
+
[\u6587\u7AE0 URL]`},{id:"save_to_omnifocus",dependsOn:["summarize_article"],autoSelectRole:!0,requirements:{},prompt:`\u5C06\u6587\u7AE0\u603B\u7ED3\u4FDD\u5B58\u5230 Omnifocus\u3002
|
|
36
|
+
|
|
37
|
+
\u603B\u7ED3\u5185\u5BB9:
|
|
38
|
+
{{summarize_article.result}}
|
|
39
|
+
|
|
40
|
+
\u63D0\u53D6\u6587\u7AE0\u6807\u9898\u548C\u5B8C\u6574\u603B\u7ED3\uFF0C\u7136\u540E\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u6DFB\u52A0\u5230 Omnifocus Inbox\uFF1A
|
|
41
|
+
|
|
42
|
+
osascript /Users/norvyn/Code/Projects/Adam/scripts/add-to-omnifocus.applescript "[\u6587\u7AE0\u6807\u9898] AI \u524D\u6CBF\u901F\u9012" "[\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9]"
|
|
43
|
+
|
|
44
|
+
\u6CE8\u610F\uFF1A
|
|
45
|
+
- \u5C06 [\u6587\u7AE0\u6807\u9898] \u66FF\u6362\u4E3A\u5B9E\u9645\u6807\u9898
|
|
46
|
+
- \u5C06 [\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9] \u66FF\u6362\u4E3A\u5B8C\u6574\u7684\u603B\u7ED3\u6587\u672C\uFF08\u5305\u542B\u6838\u5FC3\u53D1\u73B0\u3001\u6280\u672F\u7EC6\u8282\u3001\u5F71\u54CD/\u610F\u4E49\u548C\u539F\u6587\u94FE\u63A5\uFF09
|
|
47
|
+
- \u603B\u7ED3\u5185\u5BB9\u4F7F\u7528\u6362\u884C\u7B26\u5206\u9694\u5404\u90E8\u5206
|
|
48
|
+
|
|
49
|
+
\u5B8C\u6210\u540E\u8F93\u51FA\uFF1A\u5DF2\u4FDD\u5B58\u5230 Omnifocus\uFF1A[\u4EFB\u52A1\u6807\u9898]`}],config:{timeout:300},tags:["ai","digest","hourly","automation"],createdAt:Date.now()};_(t),i.info({templateId:f,cron:"0 * * * *"},"Registered built-in AI Hourly Digest template")}var P=class{cronJobs=new Map;started=!1;taskCompletionHandler=null;workflowCompletionHandler=null;async start(){if(this.started)return;this.started=!0,E();let t=g(!0),e=0;for(let r of t)r.trigger.type==="cron"&&r.trigger.cron&&(this.scheduleCronJob(r),e++);let s=0;for(let r of t)r.trigger.type==="once"&&r.trigger.runAt&&(this.scheduleOnceJob(r.id),s++);this.taskCompletionHandler=r=>{r.newStatus==="completed"&&this.checkTemplateCompleteTriggers(r.taskId).catch(o=>{i.error({taskId:r.taskId,error:o},"Template-complete trigger check failed")})},u.on("task_status_change",this.taskCompletionHandler),this.workflowCompletionHandler=r=>{(r.status==="completed"||r.status==="partial")&&this.checkWorkflowCompleteTriggers(r.templateId).catch(o=>{i.error({templateId:r.templateId,error:o},"Workflow-complete trigger check failed")})},u.on("workflow_status_change",this.workflowCompletionHandler),this.cronJobs.set("memory-cleanup",setInterval(()=>{this.runMemoryCleanup()},36e5)),i.info({cronCount:e,onceCount:s},"Bree engine started with cron jobs + memory cleanup")}runMemoryCleanup(){try{let t=I(void 0,1e3,0),e=0;for(let s of t)e+=C(s.id);e>0&&i.info({totalCleaned:e},"Memory cleanup completed")}catch(t){i.warn({error:t},"Memory cleanup failed")}}async stop(){for(let[,t]of this.cronJobs)clearTimeout(t),clearInterval(t);this.cronJobs.clear(),this.taskCompletionHandler&&(u.off("task_status_change",this.taskCompletionHandler),this.taskCompletionHandler=null),this.workflowCompletionHandler&&(u.off("workflow_status_change",this.workflowCompletionHandler),this.workflowCompletionHandler=null),this.started=!1,i.info("Bree engine stopped")}scheduleCronJob(t){let e=`template-${t.id}`;this.cronJobs.has(e)&&(clearTimeout(this.cronJobs.get(e)),this.cronJobs.delete(e));let s;try{s=S.parse(t.trigger.cron)}catch{i.warn({templateId:t.id,cron:t.trigger.cron},"Invalid cron expression");return}let r=()=>{let h=s.next().getTime()-Date.now();return Math.max(h,1e3)},o=()=>{this.executeCronTrigger(t.id).catch(h=>{i.error({templateId:t.id,error:h},"Cron trigger failed")});let w=setTimeout(o,r());this.cronJobs.set(e,w)},c=r(),a=setTimeout(o,c);this.cronJobs.set(e,a),i.debug({jobName:e,nextRun:new Date(Date.now()+c).toISOString()},"Scheduled cron job")}async executeCronTrigger(t){let e=l(t);!e||!e.enabled||(i.info({templateName:e.name},"Cron triggered"),await this.executeWorkflow(e,m()))}async scheduleJob(t){let e=l(t);e&&e.trigger.type==="cron"&&e.trigger.cron&&this.scheduleCronJob(e)}async unscheduleJob(t){let e=`template-${t}`,s=this.cronJobs.get(e);s&&(clearTimeout(s),this.cronJobs.delete(e))}async runNow(t){let e=l(t);if(!e)throw new Error(`Template ${t} not found`);let s=m();return this.executeWorkflow(e,s).catch(r=>{i.error({templateId:t,error:r},"Workflow execution failed")}),s}async checkTemplateCompleteTriggers(t){let e=y(t);if(!e||!e.templateId)return;let r=g(!0).filter(o=>o.trigger.type!=="template_complete"||!o.trigger.event?!1:o.trigger.event===`template_complete:${e.templateId}`);for(let o of r)i.info({templateName:o.name,sourceTemplateId:e.templateId},"Template-complete trigger matched"),await this.executeWorkflow(o,m())}async executeWorkflow(t,e){await O(t,{executionId:e,triggerContext:{source:"bree"}})}async checkWorkflowCompleteTriggers(t){let s=g(!0).filter(r=>r.trigger.type!=="workflow_complete"||!r.trigger.event?!1:r.trigger.event===`workflow_complete:${t}`);for(let r of s)i.info({templateName:r.name,sourceTemplateId:t},"Workflow-complete trigger matched"),await this.executeWorkflow(r,m())}scheduleOnceJob(t){let e=l(t);if(!e||!e.enabled||e.trigger.type!=="once")return;let r=(e.trigger.runAt?new Date(e.trigger.runAt).getTime():0)-Date.now();if(r<=0){i.info({templateId:t,runAt:e.trigger.runAt},"Once-shot template past due, executing immediately"),this.executeOnceTrigger(t).catch(a=>{i.error({templateId:t,error:a},"Once trigger execution failed")});return}let o=`template-${t}`;this.cronJobs.has(o)&&clearTimeout(this.cronJobs.get(o));let c=setTimeout(()=>{this.cronJobs.delete(o),this.executeOnceTrigger(t).catch(a=>{i.error({templateId:t,error:a},"Once trigger execution failed")})},r);this.cronJobs.set(o,c),i.info({templateId:t,runAt:e.trigger.runAt,delayMs:r},"Scheduled once-shot job")}async executeOnceTrigger(t){let e=l(t);!e||!e.enabled||(i.info({templateName:e.name},"Once-shot triggered"),await this.executeWorkflow(e,m()),A(t),i.info({templateId:t},"Once-shot template auto-disabled after execution"))}},H=null;function ee(){return H}function te(n){H=n}export{O as a,P as b,ee as c,te as d};
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as W,b as h,c as z,e as V}from"./chunk-
|
|
2
|
+
import{a as W,b as h,c as z,e as V}from"./chunk-YDVTWPNA.js";import{a as B,b as J,d as G}from"./chunk-WAG3MNMC.js";import{a as q}from"./chunk-T33BLZV2.js";import"./chunk-GGIHDFRW.js";import{b as _}from"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import{c as M,e as K,g as de}from"./chunk-G5ESQEXN.js";import{b as H,c as j,d as ce}from"./chunk-NCFVJCNQ.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";import{Command as we}from"commander";import{fork as ue}from"child_process";import{readFileSync as L,writeFileSync as me,existsSync as v,unlinkSync as $,mkdirSync as pe,openSync as ge}from"fs";import{join as D}from"path";import{homedir as fe}from"os";var P=D(fe(),".adam"),S=D(P,"adam.pid"),k=D(P,"adam.port"),b=D(P,"server.log");function he(){v(P)||pe(P,{recursive:!0})}function C(){if(!v(S))return null;let e=parseInt(L(S,"utf-8").trim(),10);return isNaN(e)?null:e}function ve(){if(!v(k))return null;let e=parseInt(L(k,"utf-8").trim(),10);return isNaN(e)?null:e}function A(e){try{return process.kill(e,0),!0}catch{return!1}}async function N(){he();let e=C();if(e&&A(e))throw new Error(`Server already running (PID ${e})`);v(S)&&$(S),v(k)&&$(k);let o=ge(b,"a"),t=D(B,"dist/index.js"),n=ue(t,[],{detached:!0,stdio:["ignore",o,o,"ipc"]}),l=await new Promise((i,c)=>{let g=setTimeout(()=>{n.kill(),c(new Error(`Server start timeout. Check logs: ${b}`))},1e4);n.on("message",a=>{if(a&&typeof a=="object"&&a.type==="ready"){clearTimeout(g);let s=a.port;s?i(s):c(new Error("Ready signal received but missing port"))}}),n.on("exit",a=>{clearTimeout(g);let s=v(b)?L(b,"utf-8").split(`
|
|
3
3
|
`).slice(-10).join(`
|
|
4
4
|
`):"";c(new Error(`Server exited with code ${a}.
|
|
5
5
|
${s?`Last log lines:
|
|
@@ -14,4 +14,4 @@ Task cancelled.`)),process.exit(130)};process.on("SIGINT",l);let i=new V(n);awai
|
|
|
14
14
|
`));let i={Anthropic:[["anthropic.apiKey",t["anthropic.apiKey"]],["anthropic.baseUrl",t["anthropic.baseUrl"]],["anthropic.model",t["anthropic.model"]],["anthropic.defaultOpusModel",t["anthropic.defaultOpusModel"]],["anthropic.defaultSonnetModel",t["anthropic.defaultSonnetModel"]],["anthropic.defaultHaikuModel",t["anthropic.defaultHaikuModel"]],["anthropic.smallFastModel",t["anthropic.smallFastModel"]]],Defaults:[["defaults.model",t["defaults.model"]],["defaults.effort",t["defaults.effort"]],["defaults.maxTurns",t["defaults.maxTurns"]],["defaults.maxBudgetUsd",t["defaults.maxBudgetUsd"]],["defaults.timeout",t["defaults.timeout"]]],Server:[["server.port",t["server.port"]],["server.host",t["server.host"]],["server.apiKey",t["server.apiKey"]],["server.timezone",t["server.timezone"]]],Logging:[["logging.level",t["logging.level"]]],Evolution:[["roles.evolution.triggerEvery",t["roles.evolution.triggerEvery"]],["roles.evolution.reflectionThreshold",t["roles.evolution.reflectionThreshold"]]],Chat:[["chat.sessionTimeoutMinutes",t["chat.sessionTimeoutMinutes"]],["chat.maxSessionTurns",t["chat.maxSessionTurns"]],["chat.autoTitle",t["chat.autoTitle"]],["chat.archiveExtractMemory",t["chat.archiveExtractMemory"]]]},c={"anthropic.apiKey":"API Key","anthropic.baseUrl":"Base URL","anthropic.model":"Model","anthropic.defaultOpusModel":"Default Opus","anthropic.defaultSonnetModel":"Default Sonnet","anthropic.defaultHaikuModel":"Default Haiku","anthropic.smallFastModel":"Small Fast","defaults.model":"Default Model","defaults.effort":"Effort","defaults.maxTurns":"Max Turns","defaults.maxBudgetUsd":"Max Budget (USD)","defaults.timeout":"Timeout (sec)","server.port":"Port","server.host":"Host","server.apiKey":"API Key","server.timezone":"Timezone","logging.level":"Log Level","roles.evolution.triggerEvery":"Evolution Trigger Every","chat.sessionTimeoutMinutes":"Session Timeout (min)","chat.maxSessionTurns":"Max Session Turns","chat.autoTitle":"Auto Title","chat.archiveExtractMemory":"Archive Extract Memory","roles.evolution.reflectionThreshold":"Reflection Threshold"};for(let[g,a]of Object.entries(i)){let s=a.filter(([,r])=>r!=null&&r!=="");if(s.length!==0){console.log(O.cyan(`${g}:`));for(let[r,m]of s){let f=c[r]??r,R=r.includes("apiKey")||r.includes("token")||r.includes("secret")?se(String(m)):String(m);console.log(` ${f}: ${R}`)}console.log("")}}if(n){console.log(O.bold(`.env File Values:
|
|
15
15
|
`));let g=["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","ANTHROPIC_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_SMALL_FAST_MODEL"];for(let a of g)if(a in n){let s=a.includes("API_KEY");console.log(` ${a}: ${s?se(n[a]):n[a]}`)}console.log("")}}}finally{j()}}function se(e){return!e||e.length<8?"****":e.slice(0,4)+"****"}import w from"chalk";async function ae(e){try{let o=e.limit??"20",t=await h(`/evolution-audit?limit=${o}`);if(t.length===0){console.log(w.dim("No evolution records yet"));return}console.log(w.bold(`Evolution Audit Log (${t.length} records)
|
|
16
16
|
`));for(let n of t){let l=new Date(n.timestamp).toLocaleString();console.log(w.bold(`[${l}]`)+(n.triggerTaskId?w.dim(` task: ${n.triggerTaskId.slice(0,8)}`):"")),console.log(w.dim(" Diff:"));for(let i of n.diff.split(`
|
|
17
|
-
`))i.startsWith("+")?console.log(w.green(` ${i}`)):i.startsWith("-")?console.log(w.red(` ${i}`)):console.log(w.dim(` ${i}`));console.log()}}catch(o){console.error(w.red(o.message)),process.exit(1)}}import p from"chalk";import{WebSocket as Se}from"ws";async function le(e){let o=I(),t=e.port?Number(e.port):o.port??7100,n=W(),l=new URL(`ws://localhost:${t}/events`);n&&l.searchParams.set("api_key",n);let i=l.toString(),c=e.component,g=e.level;function a(){let r=new Se(i);r.on("open",()=>{console.log(p.dim(`Connected to ${i}`)),e.follow&&console.log(p.dim("Following logs... (Ctrl+C to exit)"))}),r.on("message",m=>{try{let f=JSON.parse(m.toString());if(f.type==="log_event"&&f.msg){if(c&&f.component!==c||g&&f.level!==g)return;s(f)}}catch{}}),r.on("error",m=>{console.error(p.red(`WebSocket error: ${m.message}`))}),r.on("close",()=>{e.follow&&(console.log(p.yellow("Connection closed, reconnecting...")),setTimeout(a,1e3))})}function s(r){let m=q(r.timestamp),x={debug:p.gray,info:p.blue,warn:p.yellow,error:p.red,fatal:p.bgRed.white}[r.level]||p.white,R=p.cyan(`[${r.component}]`);console.log(`${p.dim(m)} ${x(r.level.toUpperCase().padEnd(5))} ${R} ${r.msg}`),r.metadata&&typeof r.metadata=="object"&&Object.keys(r.metadata).length>0&&console.log(p.dim(" ")+p.dim(JSON.stringify(r.metadata)))}a(),await new Promise(r=>{process.on("SIGINT",()=>r()),process.on("SIGTERM",()=>r()),e.follow||setTimeout(r,3e3)})}var y=new we;y.name("adam").description("Adam Agent Server CLI").version(J());var E=y.command("server").description("Server management");E.command("start").description("Start the server daemon").action(async()=>{try{let{pid:e,port:o}=await N();console.log(`Server started (PID ${e}, port ${o})`)}catch(e){console.error("Failed to start server:",e.message),process.exit(1)}});E.command("stop").description("Stop the server daemon").action(async()=>{try{await U(),console.log("Server stopped")}catch(e){console.error("Failed to stop server:",e.message),process.exit(1)}});E.command("restart").description("Restart the server daemon").action(async()=>{try{I().running&&(await U(),console.log("Server stopped"));let{pid:o,port:t}=await N();console.log(`Server restarted (PID ${o}, port ${t})`)}catch(e){console.error("Failed to restart server:",e.message),process.exit(1)}});E.command("status").description("Show server status").action(()=>{let e=I();e.running?console.log(`Server is running (PID ${e.pid}, port ${e.port})`):e.pid?console.log("Server not running (stale PID file)"):console.log("Server not running")});E.command("logs").description("Show server logs").option("-f, --follow","Follow log output").action(async e=>{let o=Y();if(!Te(o)){console.log("No log file found");return}if(e.follow){let t=be(o,{encoding:"utf-8"});for await(let n of t)process.stdout.write(n)}else console.log(ke(o,"utf-8"))});y.command("run <prompt>").description("Submit a task and stream output").option("--model <model>","Model to use").option("--timeout <seconds>","Task timeout",parseInt).option("--budget <usd>","Max budget in USD",parseFloat).option("--template <name>","Task template to use").option("--workspace <path>","Workspace directory").option("--no-approval","Auto-approve all approval requests").option("--json","Output as JSON").option("--server <url>","Server URL").action(X);var F=y.command("tasks").description("Task management");F.command("list").description("List recent tasks").option("-s, --status <status>","Filter by status").option("-l, --limit <number>","Limit results","20").action(te);F.command("show <id>").description("Show task details").action(re);F.command("cancel <id>").description("Cancel a running task").action(ne);y.command("config").description("Display current configuration").option("--json","Output as JSON").action(ie);y.command("evolution").description("Show self-evolution audit log").option("-l, --limit <number>","Limit results","20").action(ae);y.command("logs").description("Stream server logs in real-time via WebSocket").option("-f, --follow","Follow logs continuously").option("-c, --component <component>","Filter by component (manager, worker, scheduler, api, ws)").option("-l, --level <level>","Filter by level (debug, info, warn, error)").option("-p, --port <port>","Server port").action(le);y.command("register-ai-digest").description("Register the AI Hourly Digest task template (cron: every hour)").action(()=>{try{G(),console.log("AI Digest template registered successfully")}catch(e){console.error("Failed to register AI Digest template:",e.message),process.exit(1)}});y.action(async()=>{try{await z()}catch{I().running?console.error("Server is running but not responding. Check: adam server logs"):console.error("Server not running. Run: adam server start"),process.exit(1)}let e=(await import("./App-
|
|
17
|
+
`))i.startsWith("+")?console.log(w.green(` ${i}`)):i.startsWith("-")?console.log(w.red(` ${i}`)):console.log(w.dim(` ${i}`));console.log()}}catch(o){console.error(w.red(o.message)),process.exit(1)}}import p from"chalk";import{WebSocket as Se}from"ws";async function le(e){let o=I(),t=e.port?Number(e.port):o.port??7100,n=W(),l=new URL(`ws://localhost:${t}/events`);n&&l.searchParams.set("api_key",n);let i=l.toString(),c=e.component,g=e.level;function a(){let r=new Se(i);r.on("open",()=>{console.log(p.dim(`Connected to ${i}`)),e.follow&&console.log(p.dim("Following logs... (Ctrl+C to exit)"))}),r.on("message",m=>{try{let f=JSON.parse(m.toString());if(f.type==="log_event"&&f.msg){if(c&&f.component!==c||g&&f.level!==g)return;s(f)}}catch{}}),r.on("error",m=>{console.error(p.red(`WebSocket error: ${m.message}`))}),r.on("close",()=>{e.follow&&(console.log(p.yellow("Connection closed, reconnecting...")),setTimeout(a,1e3))})}function s(r){let m=q(r.timestamp),x={debug:p.gray,info:p.blue,warn:p.yellow,error:p.red,fatal:p.bgRed.white}[r.level]||p.white,R=p.cyan(`[${r.component}]`);console.log(`${p.dim(m)} ${x(r.level.toUpperCase().padEnd(5))} ${R} ${r.msg}`),r.metadata&&typeof r.metadata=="object"&&Object.keys(r.metadata).length>0&&console.log(p.dim(" ")+p.dim(JSON.stringify(r.metadata)))}a(),await new Promise(r=>{process.on("SIGINT",()=>r()),process.on("SIGTERM",()=>r()),e.follow||setTimeout(r,3e3)})}var y=new we;y.name("adam").description("Adam Agent Server CLI").version(J());var E=y.command("server").description("Server management");E.command("start").description("Start the server daemon").action(async()=>{try{let{pid:e,port:o}=await N();console.log(`Server started (PID ${e}, port ${o})`)}catch(e){console.error("Failed to start server:",e.message),process.exit(1)}});E.command("stop").description("Stop the server daemon").action(async()=>{try{await U(),console.log("Server stopped")}catch(e){console.error("Failed to stop server:",e.message),process.exit(1)}});E.command("restart").description("Restart the server daemon").action(async()=>{try{I().running&&(await U(),console.log("Server stopped"));let{pid:o,port:t}=await N();console.log(`Server restarted (PID ${o}, port ${t})`)}catch(e){console.error("Failed to restart server:",e.message),process.exit(1)}});E.command("status").description("Show server status").action(()=>{let e=I();e.running?console.log(`Server is running (PID ${e.pid}, port ${e.port})`):e.pid?console.log("Server not running (stale PID file)"):console.log("Server not running")});E.command("logs").description("Show server logs").option("-f, --follow","Follow log output").action(async e=>{let o=Y();if(!Te(o)){console.log("No log file found");return}if(e.follow){let t=be(o,{encoding:"utf-8"});for await(let n of t)process.stdout.write(n)}else console.log(ke(o,"utf-8"))});y.command("run <prompt>").description("Submit a task and stream output").option("--model <model>","Model to use").option("--timeout <seconds>","Task timeout",parseInt).option("--budget <usd>","Max budget in USD",parseFloat).option("--template <name>","Task template to use").option("--workspace <path>","Workspace directory").option("--no-approval","Auto-approve all approval requests").option("--json","Output as JSON").option("--server <url>","Server URL").action(X);var F=y.command("tasks").description("Task management");F.command("list").description("List recent tasks").option("-s, --status <status>","Filter by status").option("-l, --limit <number>","Limit results","20").action(te);F.command("show <id>").description("Show task details").action(re);F.command("cancel <id>").description("Cancel a running task").action(ne);y.command("config").description("Display current configuration").option("--json","Output as JSON").action(ie);y.command("evolution").description("Show self-evolution audit log").option("-l, --limit <number>","Limit results","20").action(ae);y.command("logs").description("Stream server logs in real-time via WebSocket").option("-f, --follow","Follow logs continuously").option("-c, --component <component>","Filter by component (manager, worker, scheduler, api, ws)").option("-l, --level <level>","Filter by level (debug, info, warn, error)").option("-p, --port <port>","Server port").action(le);y.command("register-ai-digest").description("Register the AI Hourly Digest task template (cron: every hour)").action(()=>{try{G(),console.log("AI Digest template registered successfully")}catch(e){console.error("Failed to register AI Digest template:",e.message),process.exit(1)}});y.action(async()=>{try{await z()}catch{I().running?console.error("Server is running but not responding. Check: adam server logs"):console.error("Server not running. Run: adam server start"),process.exit(1)}let e=(await import("./App-WJMHK5EO.js")).default,{waitUntilExit:o}=Ie($e.createElement(e));await o()});y.parse();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g}from"./chunk-G5ESQEXN.js";import"./chunk-NCFVJCNQ.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";g();export{f as deleteConfigValue,c as getAllConfig,a as getConfigValue,e as isConfigEmpty,d as seedConfig,b as setConfigValue};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as b,b as c,d,e}from"./chunk-PG6LMSX6.js";import{a}from"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as DEFAULT_CONFIG,e as getChatConfig,d as getDefaults,b as loadConfig,c as loadDefaultConfig};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d}from"./chunk-NCFVJCNQ.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";d();export{c as closeDb,b as getDb,a as runMigrations};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i}from"./chunk-RLJYEEQC.js";import"./chunk-NCFVJCNQ.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as TTL_MS,g as cleanupExpired,b as createDeliveryLog,i as getDeliveryLogByRule,h as getDeliveryLogByTask,f as getFailedDeliveries,e as getPendingDeliveries,d as markDelivered,c as updateDeliveryLogStatus};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d}from"./chunk-P5ZXNBNV.js";import"./chunk-2H7UOW4P.js";import"./chunk-FXQAUQTI.js";import"./chunk-4C5ITATX.js";import"./chunk-GMMWA5EG.js";import"./chunk-I7ZZKPHE.js";import"./chunk-VVSZZK5T.js";import"./chunk-YXYIA24D.js";import"./chunk-L7JP7DUO.js";import"./chunk-RLJYEEQC.js";import"./chunk-NCFVJCNQ.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as DeliveryEngine,b as getDeliveryEngine,c as initDeliveryEngine,d as stopDeliveryEngine};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e}from"./chunk-TSPQ44HT.js";import"./chunk-NCFVJCNQ.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as createEvolutionAudit,e as generateDiff,d as getLatestRoleEvolution,b as listEvolutionAudit,c as listEvolutionAuditByRole};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as i}from"./chunk-UQJZU3R5.js";import"./chunk-WBAPIPST.js";import{c as a,h as c}from"./chunk-
|
|
1
|
+
import{a as i}from"./chunk-UQJZU3R5.js";import"./chunk-WBAPIPST.js";import{c as a,h as c}from"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";c();var u=a("agent");async function m(n){let e=f();if(e.length===0)return{scores:[],errors:[]};let s=[],r=[];for(let t of e)try{let o=await l(t);o!==null&&s.push({nodeId:n,score:o,source:t.name,fetchedAt:Date.now()})}catch(o){r.push(`External API "${t.name}" (${t.url}): ${o instanceof Error?o.message:String(o)}`),u.warn({endpoint:t.name,error:o},"External API fetch failed")}return{scores:s,errors:r}}async function l(n){let e=await fetch(n.url,{signal:AbortSignal.timeout(5e3),headers:{Accept:"application/json"}});if(!e.ok)throw new Error(`HTTP ${e.status} ${e.statusText}`);let s=await e.json(),r=p(s,n.scorePath);if(typeof r!="number"||isNaN(r))throw new Error(`Score at "${n.scorePath}" is not a number: ${JSON.stringify(r)}`);return Math.max(0,Math.min(1,r))}function p(n,e){let s=e.replace(/^\$\.?/,""),r=n;for(let t of s.split(".")){if(r==null||typeof r!="object")return;r=r[t]}return r}function f(){return i.externalApis??[]}export{m as collectExternalApiScores};
|