chainlesschain 0.162.185 → 0.162.186
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/bin/chainlesschain.js +21 -5
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-Co4ipAKx.js → AIOps-DTXiO-TB.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BpsoDrDq.js → ActionButton-BbmDW-Pz.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DMUqeBik.js → Analytics-CSfgXJuD.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-C6fD_dXr.js → AppLayout-BS0FFLb7.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-DW0YlQlV.js → Artifacts-B19WFPK2.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DXtHiiFK.js → Audit-CQhZBi7n.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BgmF62U-.js → BackgroundAgents-BOLZCpGH.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D8vhVLQC.js → Backup-Dz3R_ePD.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D7nCtY2X.js → BaseInput-CYfgMpax.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CBZLEV2G.js → Chat-5CymMr1j.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-B2A_TJtl.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DJLkeD4M.js → Checkbox-CDXHVYcu.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Cs6xO8Fd.js → Codegen-uq9Z9oiS.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Dtx9wxfT.js → Col-BuW1K_65.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DiigJg4n.js → Community-Bbg-PvRY.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B67oMDDL.js → Compact-co0pPPTw.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BBDl-Jos.js → Compliance-B-pFAv7z.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Ba98hSsa.js → Cowork-54ZQS4gC.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DBWQZIz7.js → Cron-B1BF2Seq.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-OcrKzxAt.js → Crosschain-Dey6qQTj.js} +1 -1
- package/src/assets/web-panel/assets/{DID-mW2eSbjM.js → DID-ltERvfAj.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BmsDPmKJ.js → Dashboard-DuWxOcqN.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CVzmCyRx.js → Dropdown-CrZ8ekTo.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-vVgqKzhh.js → EmailListRenderer-fIyHXhUS.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CWY5t_ZJ.js → FamilyGuardDashboard-BtRyrRPm.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-ZGomhjxr.js → Federation-EUC6Wydj.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DyaknbLr.js → FormItemContext-BOpka2G-.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CmIvN1qr.js → GenericCardRenderer-BXtrrYHn.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DQOJIYkG.js → Git-8WMb7PiR.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CMiY-EEp.js → Governance-DNWOeDTV.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D6IXuucf.js → Inference-Bne9b_Lb.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-6jkTL0hV.js → KnowledgeGraph-Cp-6Us9b.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-N0jD-349.js → Logs-Ck-uSPAx.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DxjsdAXw.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-WhYuhBxm.js → Marketplace-Vdq7brrJ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DTeO28xy.js → McpTools-ggLnw4hY.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-MSHzPSE-.js → Memory-BKIjNVCU.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Cyqs3J3W.js → MobileBridge-BElCY25a.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-7IN2hWHg.js → MobileProjects-DpLgovdH.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-MWBnezNM.js → Mtc-bNdrF_Zh.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DQu35Nu-.js → MtcAudit-Dw8w1Cqk.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-CQS_M-DP.js → Multisig-CfGKvlqc.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-WD16vQvY.js → NLProgramming-D6OJf7YN.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DqsiSwOq.js → Notes-B3n_LzIS.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-D3LoxO-P.js → NotificationSettings-Uu1V_ICM.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C5jPoTd6.js → OrderTableRenderer-aGyWwWcp.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-48aMBJso.js → Organization-qjFFmuwK.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-j-a2XkhR.js → Overflow-J4ZgnwZz.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BYpBNYnh.js → P2P-YEZF-uVH.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CYCsrrLg.js → PdhVaultBrowser-yqx7fwqk.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-ZRXGXDFb.js → Permissions-DdEjlZ02.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-6OWUPHyL.js → PersonalDataHub-DbAPYvns.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-FcjlDK9E.js → Pipeline-Bxlk_ZJU.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-vD_6Tldp.js → Privacy-CpE-05tz.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B_CHOLXp.js → ProjectInit-DWlhcGHT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-rEiqQ2da.js → ProjectSettings-BnH6BiTQ.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CHw2fXDB.js +1 -0
- package/src/assets/web-panel/assets/{Providers-Dgtt97B4.js → Providers-Bdz_sTyb.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DaGVylZO.js → QrScannerModal-BHh2b3pH.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DP2_2x3u.js → QuickAsk-D84M09pe.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-D29yj4ki.js → Recommend-Czc30K6M.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-Ue2wnBLp.js → RemoteSession-q_TU5qxt.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-CrxIHqeC.js → Reputation-CnTce4WM.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BgSzJPCn.js → Row-C60UFLay.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-AwhYOrP9.js → RssFeed-BOUFEu9_.js} +3 -3
- package/src/assets/web-panel/assets/{Search-D2shpEcm.js → Search-D4__blE-.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BtKzhTbT.js → Security-BoOm7_JK.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BY0DsUSm.js → Services-AvzrW6HA.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-B3Sb0UI9.js → Skeleton-BZlrHozi.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Ne5w0bDs.js → Skills-CKaMLuk0.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-C8VkaP4T.js → Sla-DYCNJF8h.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-BvCSU6d2.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-CwFafrUg.js → SyncSettings-B6tW8dVO.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-yJuKoDlR.js → Tasks-oNC_2NVz.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DYn9qCmx.js → Templates-DvLPvvjL.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DkKReHvn.js → Tenant-BDt9UBn_.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-r6bd-owt.js → Terminal-ddCUnH-X.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Mq2juUC3.js → TimelineRenderer-CA4sDL47.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BnMw7MRi.js → Tokens-By03hnVs.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CTzKp4o9.js → Trigger-Dz2mH-ZU.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BBrSZm9U.js → Trust-DShSWHeJ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D9fDvEMq.js → UkeySign-JN8lP3gt.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DUi5ve-0.js → VideoEditing-BgPy4gV3.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-C8Fi1P8_.js → Wallet-CQGEsXw_.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-s1LppYi2.js → WebAuthn-D8xR-ds_.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DJL2C4lj.js → WorkflowEditor-Df61_p1p.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D3F2ndOB.js → chat-fdPby427.js} +1 -1
- package/src/assets/web-panel/assets/{colors-B7739-e3.js → colors-Dimqhufo.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CcJbFTF4.js → compact-item-DHayKcqZ.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CuP_DEFS.js → createContext-hZUhypRH.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-ePxoBp92.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-6YEXfIik.js → hasIn-Dw7zC_dV.js} +1 -1
- package/src/assets/web-panel/assets/{index-LfRlSmqe.js → index--DVpUpz3.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_75jYWk.js → index-BHJUptSx.js} +1 -1
- package/src/assets/web-panel/assets/{index-fWgUQZ9d.js → index-BIxxvaGN.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3pctdCb.js → index-BM5BNqp9.js} +1 -1
- package/src/assets/web-panel/assets/index-BTBDdCoo.js +1 -0
- package/src/assets/web-panel/assets/{index-CxradkS6.js → index-BVHdkz8F.js} +22 -22
- package/src/assets/web-panel/assets/{index-CRuoRapN.js → index-BYdNwhkv.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0K_rFC1.js → index-Bhmpp3cm.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bru_kpZl.js → index-BuMSdwno.js} +1 -1
- package/src/assets/web-panel/assets/{index-b9cuvFEv.js → index-BwnUluxu.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6Ij_2uw.js → index-C1yMYKi-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Gxw09e9R.js → index-C8XXPz2n.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXdnfDVK.js → index-CBQK-LEF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Nz-MUHD1.js → index-CIOE8tt6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIID4XcP.js → index-CPZ3U5iH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxSqVMGh.js → index-CTiVrnpR.js} +1 -1
- package/src/assets/web-panel/assets/{index-eR6H6NR7.js → index-CcpDboUd.js} +1 -1
- package/src/assets/web-panel/assets/index-CfOGx8Ns.js +1 -0
- package/src/assets/web-panel/assets/{index-CY0zd_jc.js → index-CsCo_A0I.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGsE7MQz.js → index-CuaVa8tX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV11jpeO.js → index-CvKHpaao.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bh4hcNWW.js → index-D7jQEwB6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDRlBaDt.js → index-DAjvkQ4K.js} +1 -1
- package/src/assets/web-panel/assets/{index-BhIKnQAW.js → index-DC2R4zvM.js} +1 -1
- package/src/assets/web-panel/assets/{index-4h3lpWJ3.js → index-DJP7TjWm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHvxXXNA.js → index-DSlda4-6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlSvpNMf.js → index-DVM_KgzF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dox44j29.js → index-DX1DwDFI.js} +1 -1
- package/src/assets/web-panel/assets/{index-yOZYSNmG.js → index-DnwDYBnG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dsy7_x4s.js → index-DxoPzPHy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsdSnHQE.js → index-DyEhrvpm.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjI9MkId.js → index-DzJXkoZs.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYYSLEjn.js → index-JE6Udz2r.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3haorUt.js → index-Urt2R5aE.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0zdPyTD.js → index-cEnkyHtX.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3ZA_h1j.js → index-j0pxzOu7.js} +1 -1
- package/src/assets/web-panel/assets/{index-mfWQRSLn.js → index-lPjBQJCy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpEKmjoa.js → index-ulvBurtw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOHUo3aM.js → index-y5LHQ5Ck.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-CJ1Bq2L3.js → initDefaultProps-B4pR3px5.js} +1 -1
- package/src/assets/web-panel/assets/{motion-rYJN_vzf.js → motion-CE7dWPPs.js} +1 -1
- package/src/assets/web-panel/assets/{move-DnDK2gTP.js → move-Hw8cUObc.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CKnXy7ES.js → mtc-parser-CvRjE4Fa.js} +1 -1
- package/src/assets/web-panel/assets/{omit-3nRc3hWT.js → omit-CkFeLVre.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Ddjj3sLu.js → pickAttrs-5ZMqmbbb.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CbsbphQY.js → placementArrow-BZ4oeZ0q.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D9aZ4VDJ.js → responsiveObserve-lwoiX_Us.js} +1 -1
- package/src/assets/web-panel/assets/{slide-D4pvdFj0.js → slide-D_as37l8.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-C2W-vY-S.js → statusUtils-BsA-4Bs7.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cbq5150d.js → styleChecker-BVar4sLQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BA2B7R82.js → useFlexGapSupport-j1IwVpGd.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CLrwg3xg.js → useFs-7Q9bEnUp.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DQeAI5qs.js → usePersonalDataHub-BBwTIRMd.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-8BDGy-YU.js → vnode-C7Dk-M8w.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B2SzFprl.js → zoom-D3UHaTFB.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/eval.js +7 -0
- package/src/commands/status.js +55 -0
- package/src/commands/team.js +31 -6
- package/src/data/changelog.json +13 -0
- package/src/lazy-dispatch.js +12 -1
- package/src/lib/observability/index.js +191 -19
- package/src/lib/observability/otlp-exporter.js +1209 -207
- package/src/lib/otlp-exporter.js +8 -36
- package/src/program-base.js +9 -2
- package/src/runtime/headless-runner.js +45 -21
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CtDb-2Qu.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-BL1IVXm-.js +0 -1
- package/src/assets/web-panel/assets/Projects-Bg8obRAM.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BQdIEYP9.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Cj_36GHq.js +0 -1
- package/src/assets/web-panel/assets/index-CezFrAmD.js +0 -1
- package/src/assets/web-panel/assets/index-Cxgguez6.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as d}from"./index-
|
|
1
|
+
import{u as d}from"./index-BVHdkz8F.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as v}from"./index-
|
|
1
|
+
import{u as v}from"./index-BVHdkz8F.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as i,h as a,w as l}from"./index-
|
|
1
|
+
import{N as i,h as a,w as l}from"./index-BVHdkz8F.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function V(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function v(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,V as b,c,v as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./index-
|
|
1
|
+
import{K as o}from"./index-BVHdkz8F.js";import{i as f}from"./motion-CE7dWPPs.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
|
|
2
2
|
${t}-enter,
|
|
3
3
|
${t}-appear
|
|
4
4
|
`]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// Injected by web-ui-server.js at serve time
|
|
9
9
|
window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
|
|
10
10
|
</script>
|
|
11
|
-
<script type="module" crossorigin src="./assets/index-
|
|
11
|
+
<script type="module" crossorigin src="./assets/index-BVHdkz8F.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
|
package/src/commands/eval.js
CHANGED
|
@@ -284,6 +284,13 @@ export function registerEvalCommand(program, { logger } = {}) {
|
|
|
284
284
|
(log.error || console.error)(` otlp write failed: ${e.message}`);
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
|
+
try {
|
|
288
|
+
const { exportTelemetryRecorder } =
|
|
289
|
+
await import("../lib/observability/index.js");
|
|
290
|
+
exportTelemetryRecorder(recorder);
|
|
291
|
+
} catch {
|
|
292
|
+
// Collector export is best-effort and never changes evaluation gates.
|
|
293
|
+
}
|
|
287
294
|
|
|
288
295
|
// Append to the trend history (a compact record — pass counts + per-task
|
|
289
296
|
// pass/fail + a timestamp/label — so `cc eval --trend` can chart it).
|
package/src/commands/status.js
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import logger from "../lib/logger.js";
|
|
3
3
|
import { collectStatusReport } from "../runtime/diagnostics.js";
|
|
4
|
+
import { getObservabilityRuntime } from "../lib/observability/index.js";
|
|
5
|
+
|
|
6
|
+
export function collectOtlpStatus(runtime = getObservabilityRuntime()) {
|
|
7
|
+
return (
|
|
8
|
+
runtime?.getStats?.() || {
|
|
9
|
+
enabled: false,
|
|
10
|
+
protocol: "http/json",
|
|
11
|
+
tracesEndpoint: null,
|
|
12
|
+
metricsEndpoint: null,
|
|
13
|
+
queued: 0,
|
|
14
|
+
queueCapacity: 0,
|
|
15
|
+
queuePressure: "normal",
|
|
16
|
+
enqueued: 0,
|
|
17
|
+
exported: 0,
|
|
18
|
+
retried: 0,
|
|
19
|
+
dropped: 0,
|
|
20
|
+
permanentFailures: 0,
|
|
21
|
+
recovered: 0,
|
|
22
|
+
spoolErrors: 0,
|
|
23
|
+
configurationErrors: [],
|
|
24
|
+
lastError: null,
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
}
|
|
4
28
|
|
|
5
29
|
export function registerStatusCommand(program) {
|
|
6
30
|
program
|
|
@@ -10,6 +34,9 @@ export function registerStatusCommand(program) {
|
|
|
10
34
|
.action(async (options) => {
|
|
11
35
|
try {
|
|
12
36
|
const report = await collectStatusReport();
|
|
37
|
+
report.observability = {
|
|
38
|
+
otlp: collectOtlpStatus(),
|
|
39
|
+
};
|
|
13
40
|
|
|
14
41
|
if (options.json) {
|
|
15
42
|
console.log(JSON.stringify(report, null, 2));
|
|
@@ -66,6 +93,34 @@ export function registerStatusCommand(program) {
|
|
|
66
93
|
logger.log(` ${icon} ${p.name}: ${p.port}`);
|
|
67
94
|
}
|
|
68
95
|
|
|
96
|
+
const otlp = report.observability.otlp;
|
|
97
|
+
logger.log(chalk.bold("\n OpenTelemetry Collector\n"));
|
|
98
|
+
if (!otlp.enabled) {
|
|
99
|
+
logger.log(` ${chalk.gray("○")} OTLP export disabled`);
|
|
100
|
+
if (otlp.configurationErrors?.length) {
|
|
101
|
+
logger.log(
|
|
102
|
+
` configuration: ${otlp.configurationErrors.join("; ")}`,
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
logger.log(
|
|
107
|
+
` ${chalk.green("●")} ${otlp.protocol} · queue ${otlp.queued}/${otlp.queueCapacity} (${otlp.queuePressure})`,
|
|
108
|
+
);
|
|
109
|
+
logger.log(` traces: ${otlp.tracesEndpoint || "disabled"}`);
|
|
110
|
+
logger.log(` metrics: ${otlp.metricsEndpoint || "disabled"}`);
|
|
111
|
+
if (otlp.retried || otlp.dropped || otlp.permanentFailures) {
|
|
112
|
+
logger.log(
|
|
113
|
+
` retries ${otlp.retried}, dropped ${otlp.dropped}, permanent failures ${otlp.permanentFailures}`,
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
if (otlp.configurationErrors?.length) {
|
|
117
|
+
logger.log(
|
|
118
|
+
` configuration: ${otlp.configurationErrors.join("; ")}`,
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
if (otlp.lastError) logger.log(` last error: ${otlp.lastError}`);
|
|
122
|
+
}
|
|
123
|
+
|
|
69
124
|
logger.newline();
|
|
70
125
|
} catch (err) {
|
|
71
126
|
logger.error(`Status check failed: ${err.message}`);
|
package/src/commands/team.js
CHANGED
|
@@ -573,17 +573,26 @@ export function registerTeamCommand(program, { logger } = {}) {
|
|
|
573
573
|
});
|
|
574
574
|
else runTask = async () => ({ dryRun: true });
|
|
575
575
|
|
|
576
|
-
//
|
|
577
|
-
//
|
|
578
|
-
// workflow.name so a collector can reassemble the run as one workflow.
|
|
576
|
+
// Workflow tracing (Claude-Code 2.1.202 parity): every task execution can
|
|
577
|
+
// be written to a local OTLP file, exported to a Collector, or both.
|
|
579
578
|
let recorder = null;
|
|
580
|
-
|
|
579
|
+
let collectorEnabled = false;
|
|
580
|
+
try {
|
|
581
|
+
const { isOtlpCollectorEnabled } =
|
|
582
|
+
await import("../lib/observability/index.js");
|
|
583
|
+
collectorEnabled = isOtlpCollectorEnabled();
|
|
584
|
+
} catch {
|
|
585
|
+
collectorEnabled = false;
|
|
586
|
+
}
|
|
587
|
+
const workflowRunId = `team-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
588
|
+
const workflowName = path.basename(options.tasks);
|
|
589
|
+
if (options.otlp || collectorEnabled) {
|
|
581
590
|
const { TelemetryRecorder } =
|
|
582
591
|
await import("../lib/telemetry/span-recorder.js");
|
|
583
592
|
recorder = new TelemetryRecorder({
|
|
584
593
|
defaultAttributes: {
|
|
585
|
-
"workflow.run_id":
|
|
586
|
-
"workflow.name":
|
|
594
|
+
"workflow.run_id": workflowRunId,
|
|
595
|
+
"workflow.name": workflowName,
|
|
587
596
|
},
|
|
588
597
|
});
|
|
589
598
|
}
|
|
@@ -682,6 +691,22 @@ export function registerTeamCommand(program, { logger } = {}) {
|
|
|
682
691
|
}
|
|
683
692
|
}
|
|
684
693
|
|
|
694
|
+
if (collectorEnabled) {
|
|
695
|
+
try {
|
|
696
|
+
const { exportTelemetryRecorder, exportTeamTelemetry } =
|
|
697
|
+
await import("../lib/observability/index.js");
|
|
698
|
+
if (recorder) exportTelemetryRecorder(recorder);
|
|
699
|
+
exportTeamTelemetry({
|
|
700
|
+
workflowRunId,
|
|
701
|
+
workflowName,
|
|
702
|
+
summary,
|
|
703
|
+
budget,
|
|
704
|
+
});
|
|
705
|
+
} catch {
|
|
706
|
+
// Collector export is best-effort and never changes team settlement.
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
685
710
|
// Worktree integration: sequentially preview (and optionally merge) each
|
|
686
711
|
// committed branch back to base, then remove the worktrees. Conflicts are
|
|
687
712
|
// reported, never force-merged.
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.162.186",
|
|
7
|
+
"cliVersions": ["0.162.185", "0.162.186"],
|
|
8
|
+
"date": "2026-07-29",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added — cc CLI 0.162.186: standard OpenTelemetry Collector export",
|
|
13
|
+
"body": "> `chainlesschain` **0.162.185 → 0.162.186** (2026-07-29).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.57**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Standard Collector protocols**: traces and metrics export over OTLP/HTTP\n JSON, OTLP/HTTP protobuf, or OTLP/gRPC, with standard global and per-signal\n endpoint, protocol, header, timeout, compression, service, and resource\n environment variables.\n- **Enterprise transport**: HTTPS and HTTP/2 gRPC support custom CA trust plus\n client certificate/key mTLS without allowing custom headers to override\n protocol framing.\n- **Bounded delivery**: batching, queue-pressure reporting, `Retry-After` and\n exponential retries, permanent-failure/drop counters, and atomic per-process\n crash spools provide bounded recovery without stealing a live process queue.\n- **Real runtime wiring**: agent, eval, and team recorders feed the Collector;\n team runs add task, token, USD cost, failure, and completion aggregates with\n workflow dimensions. Normal and gated exits perform a final flush.\n- **Private by default**: prompt, response, and tool-argument content stays\n local unless explicitly enabled; all exported string attributes and events\n continue through secret redaction.\n- **Release validation gate**: publication requires this exact release commit\n to pass `CLI CI` and `CLI Strict Sandbox` on their configured Ubuntu,\n Windows, and macOS runners; local tests remain supplementary."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
4
17
|
{
|
|
5
18
|
"productVersion": null,
|
|
6
19
|
"cliVersion": "0.162.185",
|
package/src/lazy-dispatch.js
CHANGED
|
@@ -24,9 +24,20 @@ const manifest = JSON.parse(
|
|
|
24
24
|
/** Return the first top-level command token in a process argv array. */
|
|
25
25
|
export function resolveCommandToken(argv = []) {
|
|
26
26
|
const args = Array.isArray(argv) ? argv.slice(2) : [];
|
|
27
|
-
for (
|
|
27
|
+
for (let index = 0; index < args.length; index++) {
|
|
28
|
+
const token = args[index];
|
|
28
29
|
if (token === "--") return null;
|
|
29
30
|
if (token === "--verbose" || token === "--quiet") continue;
|
|
31
|
+
if (token === "--otlp-endpoint" || token === "--jsii-runtime") {
|
|
32
|
+
index++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (
|
|
36
|
+
token.startsWith("--otlp-endpoint=") ||
|
|
37
|
+
token.startsWith("--jsii-runtime=")
|
|
38
|
+
) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
30
41
|
if (["--help", "-h", "--version", "-v", "-V"].includes(token)) return null;
|
|
31
42
|
if (!token.startsWith("-")) return token;
|
|
32
43
|
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Process-level observability runtime.
|
|
3
|
+
*
|
|
4
|
+
* It bridges the existing W3C TraceContext / MetricsCollector and the
|
|
5
|
+
* TelemetryRecorder used by agent, eval and team runs into one standard OTLP
|
|
6
|
+
* Collector exporter. Collector export is opt-in and content remains absent
|
|
7
|
+
* unless the caller explicitly enabled the existing `--otlp-content` switch.
|
|
4
8
|
*/
|
|
5
9
|
|
|
6
10
|
import {
|
|
@@ -11,25 +15,193 @@ import {
|
|
|
11
15
|
metricsCollector,
|
|
12
16
|
MetricsCollector,
|
|
13
17
|
} from "../execution-trace/metrics-collector.js";
|
|
18
|
+
import { OtlpExporter, resolveOtlpConfig } from "./otlp-exporter.js";
|
|
14
19
|
|
|
15
|
-
export {
|
|
20
|
+
export {
|
|
21
|
+
traceContext,
|
|
22
|
+
TraceContext,
|
|
23
|
+
metricsCollector,
|
|
24
|
+
MetricsCollector,
|
|
25
|
+
OtlpExporter,
|
|
26
|
+
resolveOtlpConfig,
|
|
27
|
+
};
|
|
16
28
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
function collectedMetrics(collector) {
|
|
30
|
+
const raw = collector?.collect?.();
|
|
31
|
+
const source = raw?.resourceMetrics?.[0]?.scopeMetrics?.[0]?.metrics || [];
|
|
32
|
+
return source.map((metric) => {
|
|
33
|
+
if (metric.type === "counter") {
|
|
34
|
+
return {
|
|
35
|
+
name: metric.name,
|
|
36
|
+
type: "sum",
|
|
37
|
+
value: metric.value,
|
|
38
|
+
attributes: metric.labels,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (metric.type === "histogram") {
|
|
42
|
+
return {
|
|
43
|
+
name: metric.name,
|
|
44
|
+
type: "histogram",
|
|
45
|
+
count: metric.count,
|
|
46
|
+
sum: metric.sum,
|
|
47
|
+
attributes: metric.labels,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
name: metric.name,
|
|
52
|
+
type: "gauge",
|
|
53
|
+
value: metric.value,
|
|
54
|
+
attributes: metric.labels,
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export class ObservabilityRuntime {
|
|
60
|
+
constructor(options = {}, deps = {}) {
|
|
61
|
+
this.traceContext = deps.traceContext || traceContext;
|
|
62
|
+
this.metricsCollector = deps.metricsCollector || metricsCollector;
|
|
63
|
+
this.exporter =
|
|
64
|
+
deps.exporter ||
|
|
65
|
+
new OtlpExporter(
|
|
66
|
+
{
|
|
67
|
+
...options,
|
|
68
|
+
config:
|
|
69
|
+
options.config ||
|
|
70
|
+
resolveOtlpConfig(options, deps.env || process.env, deps),
|
|
71
|
+
},
|
|
72
|
+
deps,
|
|
73
|
+
);
|
|
74
|
+
this._closed = false;
|
|
75
|
+
this._onSpanEnd = (span) => this.exporter.exportSpans([span]);
|
|
76
|
+
if (this.exporter.enabled) {
|
|
77
|
+
this.traceContext.on("span:end", this._onSpanEnd);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get enabled() {
|
|
82
|
+
return this.exporter.enabled && !this._closed;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
exportRecorder(recorder, { redact = true } = {}) {
|
|
86
|
+
if (!this.enabled || !recorder?.toOtlp) return false;
|
|
87
|
+
return this.exporter.exportTracePayload(recorder.toOtlp({ redact }), {
|
|
88
|
+
redact,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
exportTeamSummary({ workflowRunId, workflowName, summary, budget } = {}) {
|
|
93
|
+
if (!this.enabled) return false;
|
|
94
|
+
const attributes = {
|
|
95
|
+
"workflow.run_id": workflowRunId || "unknown",
|
|
96
|
+
"workflow.name": workflowName || "team",
|
|
97
|
+
};
|
|
98
|
+
const stats = summary?.stats || {};
|
|
99
|
+
const budgetStatus = budget?.status?.() || budget || {};
|
|
100
|
+
return this.exporter.exportMetrics([
|
|
101
|
+
{
|
|
102
|
+
name: "chainlesschain.team.tasks",
|
|
103
|
+
type: "gauge",
|
|
104
|
+
unit: "{task}",
|
|
105
|
+
value: Number(budgetStatus.tasks ?? summary?.executions) || 0,
|
|
106
|
+
attributes,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
name: "chainlesschain.team.tokens",
|
|
110
|
+
type: "gauge",
|
|
111
|
+
unit: "{token}",
|
|
112
|
+
value: Number(budgetStatus.tokens) || 0,
|
|
113
|
+
attributes,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: "chainlesschain.team.cost",
|
|
117
|
+
type: "gauge",
|
|
118
|
+
unit: "USD",
|
|
119
|
+
value: Number(budgetStatus.spentUsd) || 0,
|
|
120
|
+
attributes,
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "chainlesschain.team.failures",
|
|
124
|
+
type: "gauge",
|
|
125
|
+
unit: "{failure}",
|
|
126
|
+
value: Number(stats.failed) || 0,
|
|
127
|
+
attributes,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "chainlesschain.team.completed",
|
|
131
|
+
type: "gauge",
|
|
132
|
+
unit: "{task}",
|
|
133
|
+
value: Number(stats.completed) || 0,
|
|
134
|
+
attributes,
|
|
135
|
+
},
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
captureMetrics() {
|
|
140
|
+
if (!this.enabled) return false;
|
|
141
|
+
const metrics = collectedMetrics(this.metricsCollector);
|
|
142
|
+
return metrics.length > 0 ? this.exporter.exportMetrics(metrics) : false;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async shutdown(options = {}) {
|
|
146
|
+
if (this._closed) return this.exporter.getStats();
|
|
147
|
+
this.traceContext.off("span:end", this._onSpanEnd);
|
|
148
|
+
this.captureMetrics();
|
|
149
|
+
const stats = await this.exporter.shutdown(options);
|
|
150
|
+
this._closed = true;
|
|
151
|
+
return stats;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
getStats() {
|
|
155
|
+
return this.exporter.getStats();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
let defaultRuntime = null;
|
|
160
|
+
|
|
161
|
+
export function resolveOtlpEndpointFromArgv(argv = process.argv) {
|
|
162
|
+
const args = Array.isArray(argv) ? argv.slice(2) : [];
|
|
163
|
+
for (let index = 0; index < args.length; index++) {
|
|
164
|
+
const token = args[index];
|
|
165
|
+
if (token === "--otlp-endpoint") return args[index + 1] || null;
|
|
166
|
+
if (token.startsWith("--otlp-endpoint=")) {
|
|
167
|
+
return token.slice("--otlp-endpoint=".length) || null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export function initObservability(options = {}, deps = {}) {
|
|
174
|
+
if (defaultRuntime && !defaultRuntime._closed) return defaultRuntime;
|
|
175
|
+
defaultRuntime = new ObservabilityRuntime(options, deps);
|
|
176
|
+
return defaultRuntime;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export function getObservabilityRuntime() {
|
|
180
|
+
return defaultRuntime;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function isOtlpCollectorEnabled() {
|
|
184
|
+
return defaultRuntime?.enabled === true;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export function exportTelemetryRecorder(recorder, options) {
|
|
188
|
+
return defaultRuntime?.exportRecorder(recorder, options) || false;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export function exportTeamTelemetry(summary) {
|
|
192
|
+
return defaultRuntime?.exportTeamSummary(summary) || false;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export async function shutdownObservability(options) {
|
|
196
|
+
return defaultRuntime?.shutdown(options);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** Test-only lifecycle seam; avoids state leaking across module-level tests. */
|
|
200
|
+
export async function resetObservabilityForTests() {
|
|
201
|
+
if (defaultRuntime && !defaultRuntime._closed) {
|
|
202
|
+
await defaultRuntime.shutdown({ timeoutMs: 0 });
|
|
203
|
+
}
|
|
204
|
+
defaultRuntime = null;
|
|
33
205
|
}
|
|
34
206
|
|
|
35
207
|
export * from "../execution-trace/index.js";
|