chainlesschain 0.162.148 → 0.162.150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-DwpCCp64.js → AIOps-CBLvrjeG.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-C9pBYocA.js → ActionButton-DYv2GtE0.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BWAkeXxK.js → Analytics-CL6PZ-Ww.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CivFGH6B.js → AppLayout-xuyHt4uA.js} +3 -3
- package/src/assets/web-panel/assets/{Audit-Cm8hRpZm.js → Audit-DOvSVycq.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DXdFMsE8.js → Backup-DMhfTswr.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-uAwSTeql.js → BaseInput-CQxDdm63.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-KU8eeJJE.js → Chat-BEeNhK2a.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-8nul8eTq.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-C6AMDkjd.js → Checkbox-CL04O-ER.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-t2moDxcO.js → Codegen-C50o-n7x.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DCcsRRhN.js → Col-CH-bDkzs.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DtB-8SAC.js → Community-DqAIMvSe.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CZm8THYA.js → Compact-C43fo_my.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-LiQgC7g1.js → Compliance-BERnMrdP.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CA8SAxht.js → Cowork-Baw3w1gp.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-CtRaF1wD.js → Cron-BEqAHF1-.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-6-br6Hub.js → Crosschain-CvnmKwK4.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Do2EccrL.js → DID-iMPxgVdt.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-wrXcbzGe.js → Dashboard--4SJX3YR.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-p3FsT245.js → Dropdown-BgLV6xgz.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-D95A2L8q.js → EmailListRenderer-Bvb8oUD8.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-cLuJW2zo.js → FamilyGuardDashboard-DpXPjJB5.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Brgq_cbN.js → Federation-BbFfJ1Xi.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DWLCkNgh.js → FormItemContext-DeGq1B-q.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BBqUfQd6.js → GenericCardRenderer-CNW7s9zM.js} +1 -1
- package/src/assets/web-panel/assets/{Git-8F090w4I.js → Git-L1PjW-lT.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CCogEbxb.js → Governance-PK-X58to.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CfLD7v7C.js → Inference-BePWEH-d.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DDuHJewd.js → KnowledgeGraph-LF_sBvdL.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CE8KSEVC.js → Logs-BKkfk9hy.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DmwpZmhT.js → Marketplace-BNMqUDla.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Bf7AazU8.js → McpTools-w4WPiyz2.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-D0QU_00S.js → Memory-DUKMVGNi.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-yXS9xdhx.js → MobileBridge-BWhiEyTJ.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BuDUoGUP.js → MobileProjects-Ocf5JEkX.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BYyHy28p.js → Mtc-D2B6MMhU.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-CK0aqpiZ.js → MtcAudit-DdYjCq1O.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-mNimKYeb.js → Multisig-Cb1hfuUZ.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-AioAJ0YA.js → NLProgramming-CTeImGp7.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CVVNCLHE.js → Notes-BjYNc7eQ.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-C4ABj-TK.js → NotificationSettings-Dn_NtRXQ.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DIp8Xcbd.js → OrderTableRenderer-DVYYIizh.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-uozl_gWK.js → Organization-Be2Kmr5j.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BCZOM2hK.js → Overflow-Cu_-qRlR.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CArcaiaj.js → P2P-DD2HoGzE.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Sgq2Srr8.js → PdhVaultBrowser-BRI7DVth.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BYrQrXnH.js → Permissions-C9Srcs2M.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BzHStAbz.js → PersonalDataHub-CUqcMgo1.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-k7KqxX1M.js → Pipeline-HBrQGLXt.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-IumTUWqx.js → Privacy-D-B0vjwh.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BRyImYTf.js → ProjectInit-eTeLIu9e.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BFIqTBFk.js → ProjectSettings-DrRqCsC6.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Dpid9CDg.js → Projects-1G9DNOhI.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CyyFnUPs.js → Providers-RkTZzpxP.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-C82cRx-X.js → QrScannerModal-BSCUgsgC.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DGxDF521.js → QuickAsk-CHgyM3Bz.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Cns-Am1y.js → Recommend-0lry4OZq.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-R7OqAIlg.js → RemoteSession-Cn45UroZ.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-D7mgPIYV.js → Reputation-Q-Zjb707.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B3lEURyd.js → Row-BdM70oda.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-9_UVrpBt.js → RssFeed-DmOAKKap.js} +2 -2
- package/src/assets/web-panel/assets/{Search-ClZeO80q.js → Search-Dwavbm07.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BNNJczEp.js → Security-DukXFCnk.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C5SjrWUj.js → Services-BIlRnITu.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Ci_obQ-g.js → Skeleton-YYVQdhhQ.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DdebN15P.js → Skills-B8_iYHz2.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-OinZP2vi.js → Sla-BdVrhT31.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CxzbNF51.js → SpeechSettings-CD3ggRx7.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-D06N_66b.js → SyncSettings-Bp02VZFH.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BdEdW0AZ.js → Tasks-DEVmCEsr.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-F1ctKmPa.js → Templates-B6czWc4N.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CVz1Urot.js → Tenant-BCJLv17r.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-CD132d2Y.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-Doitzjmf.js → TimelineRenderer-ZB-CvkZl.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BpyVRpVA.js → Tokens-BnSY0S-s.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-nWhWYTbU.js → Trigger-VZw9Oy2w.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DK_G-wLx.js → Trust-pZq7Hjd2.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B5yBUojO.js → UkeySign-DnQaqk4q.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C5D51qAe.js → VideoEditing-BEUfmvJV.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CLbL9K7v.js → Wallet-CoZKMXJ2.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DZUelI3V.js → WebAuthn-CBOGVx1I.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-8RPxt4KW.js → WorkflowEditor-huSKn7TT.js} +1 -1
- package/src/assets/web-panel/assets/{chat-4N4tOA3d.js → chat-A_3w6FBO.js} +1 -1
- package/src/assets/web-panel/assets/{colors-zbbGVrua.js → colors-D1Bem9Oy.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-D7iMkbnE.js → compact-item-CJYJj0oO.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CBzPJv-w.js → createContext-BkbFiKT4.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-WDr3_M_N.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-bHdrQSqZ.js → hasIn-CKvUafVY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbE5D0WL.js → index-AjrSPnvv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCr0geV9.js → index-B8i0lViZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiG1IZao.js → index-B9Svn0zc.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1s0Bz9O.js → index-BHdHSX06.js} +1 -1
- package/src/assets/web-panel/assets/{index-QFObYeo1.js → index-BHdailyo.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnBOpqv3.js → index-BJwlEnYo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdmMoYN1.js → index-BOoAQjJz.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUyjUkY7.js → index-BSgWxAOG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqdPyWm5.js → index-BdutMsne.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmqlJed-.js → index-BiDWxzbn.js} +1 -1
- package/src/assets/web-panel/assets/{index-S74FpAIn.js → index-By5a0T_W.js} +1 -1
- package/src/assets/web-panel/assets/{index-kmh1TxRa.js → index-C-WIY-FQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTIjjXry.js → index-C37f6iey.js} +1 -1
- package/src/assets/web-panel/assets/{index-BS4_Mwk6.js → index-C9bWmTcO.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBNr77E1.js → index-CBaosWRO.js} +1 -1
- package/src/assets/web-panel/assets/{index-QNAG4JtR.js → index-CBlBVJ_m.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bqmx24kh.js → index-CD62EEGo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQfu1U78.js → index-CUj-l7GM.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJ4ZGyW0.js → index-CVS8Ymuq.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ci009ijp.js → index-ChkXUj3f.js} +1 -1
- package/src/assets/web-panel/assets/{index-oDKNgCsP.js → index-Cj0OZ-37.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZb8F8YG.js → index-Co3OFL0t.js} +1 -1
- package/src/assets/web-panel/assets/{index-308gCGh7.js → index-Crp8CbRg.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPxkoKgA.js → index-D22zNXiS.js} +1 -1
- package/src/assets/web-panel/assets/{index-xYCm6W2h.js → index-DTs_D1OL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtbbdLnf.js → index-DfgCdFrN.js} +3 -3
- package/src/assets/web-panel/assets/{index-BsKehmmS.js → index-DjYrecNb.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkxK86vf.js → index-DpW9cf3e.js} +1 -1
- package/src/assets/web-panel/assets/index-Dwix3p4g.js +1 -0
- package/src/assets/web-panel/assets/{index-CvRMA9uT.js → index-F--HuPG1.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE9j5YgT.js → index-Fuk6t_3K.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7b1hGry.js → index-JEAGMii9.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1YDh7Wr.js → index-PF-mpv8K.js} +1 -1
- package/src/assets/web-panel/assets/index-SHaoZ0CA.js +1 -0
- package/src/assets/web-panel/assets/{index-CQ6NcfWz.js → index-b-sbVdjQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DyoNgbXl.js → index-pyvMVX8r.js} +1 -1
- package/src/assets/web-panel/assets/{index-DISWAYce.js → index-qNTtOVi_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4XKpj6c.js → index-tgO8iza6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CahryTX0.js → index-ttDQVhZy.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BD55yNBt.js → initDefaultProps-DtrnfsZH.js} +1 -1
- package/src/assets/web-panel/assets/{motion-B5Bbe77U.js → motion-D4zqSaX3.js} +1 -1
- package/src/assets/web-panel/assets/{move-CTvIqHEH.js → move-CGFGOUQj.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BkNyPQKB.js → mtc-parser-DH2HvkJl.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BaXJXgHA.js → omit-jJ2at5HX.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Bw6-YTxH.js → pickAttrs-CRyMT1Fv.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BLdbkLqJ.js → placementArrow-DZ_CX0Pt.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-IVYkzntU.js → responsiveObserve-wruHk-h5.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DFMFwwtY.js → slide-BGgx8q67.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CURYRtZ1.js → statusUtils-Do5M7gKm.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cfz63s1r.js → styleChecker-CRa-GZpX.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-COJL0KE3.js → useFlexGapSupport-BxPcq6pj.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-YLLojQQf.js → useFs-v5O2ZcJm.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BF_21qUC.js → usePersonalDataHub--z2FU0Px.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-9ZpkA7bb.js → vnode-1emidVKd.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DhtAfhl8.js → zoom-CcJaRyHs.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/assets/web-panel/remote-session-sw.js +43 -0
- package/src/command-manifest.json +22 -1
- package/src/commands/a2a.js +19 -4
- package/src/commands/activitypub.js +20 -3
- package/src/commands/agent.js +71 -10
- package/src/commands/audit.js +40 -24
- package/src/commands/codeintel.js +320 -0
- package/src/commands/collab.js +15 -2
- package/src/commands/compliance.js +5 -0
- package/src/commands/config.js +4 -1
- package/src/commands/dao.js +86 -14
- package/src/commands/dev.js +2 -0
- package/src/commands/did.js +7 -1
- package/src/commands/dlp.js +23 -1
- package/src/commands/economy.js +29 -3
- package/src/commands/eval.js +255 -0
- package/src/commands/evomap.js +26 -0
- package/src/commands/governance.js +17 -3
- package/src/commands/hardening.js +18 -0
- package/src/commands/incentive.js +5 -0
- package/src/commands/init.js +46 -2
- package/src/commands/kg.js +4 -0
- package/src/commands/loop.js +6 -1
- package/src/commands/lowcode.js +15 -2
- package/src/commands/marketplace.js +40 -6
- package/src/commands/matrix.js +20 -1
- package/src/commands/memory.js +4 -1
- package/src/commands/mtc.js +7 -1
- package/src/commands/nostr.js +31 -4
- package/src/commands/note.js +7 -4
- package/src/commands/plugin.js +474 -0
- package/src/commands/pqc.js +5 -0
- package/src/commands/reputation.js +10 -1
- package/src/commands/scim.js +6 -0
- package/src/commands/session.js +32 -10
- package/src/commands/siem.js +11 -0
- package/src/commands/sla.js +18 -3
- package/src/commands/social.js +38 -5
- package/src/commands/sso.js +10 -2
- package/src/commands/stress.js +23 -4
- package/src/commands/team.js +463 -0
- package/src/commands/tech.js +2 -0
- package/src/commands/tenant.js +10 -1
- package/src/commands/terraform.js +6 -0
- package/src/commands/update.js +1 -1
- package/src/commands/zkp.js +20 -0
- package/src/gateways/ws/message-dispatcher.js +48 -2
- package/src/gateways/ws/remote-session-protocol.js +140 -42
- package/src/gateways/ws/ws-server.js +1 -1
- package/src/harness/jsonl-session-store.js +12 -5
- package/src/harness/plugin-manager.js +16 -4
- package/src/harness/prompt-compressor.js +27 -1
- package/src/harness/remote-command-ledger.js +189 -0
- package/src/harness/remote-session-push-apns.js +246 -0
- package/src/harness/remote-session-push-errors.js +15 -0
- package/src/harness/remote-session-push-fcm.js +9 -25
- package/src/harness/remote-session-push-huawei.js +174 -0
- package/src/harness/remote-session-push-oppo.js +171 -0
- package/src/harness/remote-session-push-senders.js +42 -0
- package/src/harness/remote-session-push-vivo.js +179 -0
- package/src/harness/remote-session-push-web.js +299 -0
- package/src/harness/remote-session-push-xiaomi.js +99 -0
- package/src/harness/worktree-isolator.js +16 -6
- package/src/index.js +6 -0
- package/src/lib/__tests__/logger.test.js +5 -2
- package/src/lib/a2a-protocol.js +25 -1
- package/src/lib/activitypub-bridge.js +61 -0
- package/src/lib/agent-core.js +4 -0
- package/src/lib/agent-economy.js +262 -29
- package/src/lib/agent-network.js +7 -1
- package/src/lib/agent-sandbox.js +161 -5
- package/src/lib/agent-team/task-lease.js +434 -0
- package/src/lib/agent-team/team-budget.js +165 -0
- package/src/lib/agent-team/team-mailbox.js +106 -0
- package/src/lib/agent-team/team-runner.js +282 -0
- package/src/lib/agent-team/team-worktree.js +236 -0
- package/src/lib/agents.js +18 -0
- package/src/lib/async-hook-supervisor.cjs +391 -0
- package/src/lib/audit-logger.js +7 -6
- package/src/lib/autonomous-developer.js +60 -0
- package/src/lib/chat-core.js +17 -4
- package/src/lib/collaboration-governance.js +56 -0
- package/src/lib/community-governance.js +68 -0
- package/src/lib/compliance-manager.js +63 -0
- package/src/lib/cross-chain.js +5 -0
- package/src/lib/dao-governance.js +151 -2
- package/src/lib/did-manager.js +23 -10
- package/src/lib/dlp-engine.js +70 -0
- package/src/lib/eval/runner.js +251 -0
- package/src/lib/eval/tasks.js +626 -0
- package/src/lib/eval/trend.js +200 -0
- package/src/lib/evolution-system.js +92 -0
- package/src/lib/evomap-federation.js +55 -0
- package/src/lib/evomap-governance.js +94 -0
- package/src/lib/fatal-handler.js +17 -1
- package/src/lib/hardening-manager.js +73 -0
- package/src/lib/hierarchical-memory.js +14 -8
- package/src/lib/knowledge-exporter.js +8 -2
- package/src/lib/knowledge-graph.js +79 -0
- package/src/lib/llm-providers.js +23 -14
- package/src/lib/logger.js +4 -1
- package/src/lib/lsp/__tests__/benchmark.test.js +88 -0
- package/src/lib/lsp/__tests__/code-intelligence.integration.test.js +129 -0
- package/src/lib/lsp/__tests__/code-intelligence.test.js +228 -0
- package/src/lib/lsp/__tests__/jsonrpc-stream.test.js +104 -0
- package/src/lib/lsp/__tests__/lsp-client.test.js +269 -0
- package/src/lib/lsp/__tests__/lsp-manager.test.js +333 -0
- package/src/lib/lsp/__tests__/lsp-server-registry.test.js +128 -0
- package/src/lib/lsp/benchmark.js +257 -0
- package/src/lib/lsp/code-intelligence.js +356 -0
- package/src/lib/lsp/jsonrpc-stream.js +139 -0
- package/src/lib/lsp/lsp-client.js +339 -0
- package/src/lib/lsp/lsp-manager.js +375 -0
- package/src/lib/lsp/lsp-server-registry.js +196 -0
- package/src/lib/matrix-bridge.js +84 -0
- package/src/lib/memory-manager.js +5 -3
- package/src/lib/nostr-bridge.js +53 -0
- package/src/lib/permission-engine.js +22 -4
- package/src/lib/plugin-monitor-supervisor.js +238 -0
- package/src/lib/plugin-runtime/__tests__/remote-source.test.js +256 -0
- package/src/lib/plugin-runtime/agents.js +51 -0
- package/src/lib/plugin-runtime/bin.js +100 -0
- package/src/lib/plugin-runtime/hooks.js +100 -0
- package/src/lib/plugin-runtime/install.js +396 -0
- package/src/lib/plugin-runtime/lsp.js +75 -0
- package/src/lib/plugin-runtime/manifest.js +458 -0
- package/src/lib/plugin-runtime/mcp.js +89 -0
- package/src/lib/plugin-runtime/monitors.js +100 -0
- package/src/lib/plugin-runtime/policy.js +152 -0
- package/src/lib/plugin-runtime/reload.js +79 -0
- package/src/lib/plugin-runtime/remote-source.js +240 -0
- package/src/lib/plugin-runtime/scopes.js +197 -0
- package/src/lib/plugin-runtime/settings.js +119 -0
- package/src/lib/plugin-runtime/signature.js +107 -0
- package/src/lib/plugin-runtime/skills.js +43 -0
- package/src/lib/plugin-runtime/trust.js +140 -0
- package/src/lib/pqc-manager.js +64 -0
- package/src/lib/reputation-optimizer.js +101 -0
- package/src/lib/sandbox-egress-proxy.js +262 -0
- package/src/lib/sandbox-fs-policy.js +112 -0
- package/src/lib/sandbox-network-policy.js +151 -0
- package/src/lib/sandbox-v2.js +24 -18
- package/src/lib/scim-manager.js +36 -0
- package/src/lib/session-manager.js +5 -2
- package/src/lib/settings-hook-events.cjs +78 -6
- package/src/lib/settings-hooks.cjs +30 -3
- package/src/lib/settings-loader.cjs +35 -1
- package/src/lib/siem-exporter.js +45 -0
- package/src/lib/skill-loader.js +38 -2
- package/src/lib/skill-marketplace.js +83 -0
- package/src/lib/sla-manager.js +88 -0
- package/src/lib/social-manager.js +74 -0
- package/src/lib/stress-tester.js +65 -0
- package/src/lib/tech-learning-engine.js +75 -0
- package/src/lib/telemetry/span-recorder.js +237 -0
- package/src/lib/tenant-saas.js +107 -0
- package/src/lib/terraform-manager.js +67 -0
- package/src/lib/token-incentive.js +180 -29
- package/src/lib/wallet-manager.js +81 -35
- package/src/lib/zkp-engine.js +87 -0
- package/src/repl/agent-repl.js +417 -6
- package/src/runtime/__tests__/auto-pin.test.js +104 -0
- package/src/runtime/agent-core.js +771 -104
- package/src/runtime/auto-pin.js +117 -0
- package/src/runtime/coding-agent-contract-shared.cjs +82 -8
- package/src/runtime/coding-agent-policy.cjs +32 -7
- package/src/runtime/fallback-model.js +134 -7
- package/src/runtime/headless-runner.js +388 -108
- package/src/runtime/mcp-config.js +46 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DCNfbdlx.js +0 -1
- package/src/assets/web-panel/assets/Terminal-BvAK_Zel.js +0 -3
- package/src/assets/web-panel/assets/devWarning-C2Z5LRgq.js +0 -1
- package/src/assets/web-panel/assets/index-BGp6Yr-Y.js +0 -1
- package/src/assets/web-panel/assets/index-BXiw9dQf.js +0 -1
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSPClient — one connection to a single language server over stdio.
|
|
3
|
+
*
|
|
4
|
+
* Speaks JSON-RPC 2.0 framed by `jsonrpc-stream.js`. Responsibilities:
|
|
5
|
+
* - spawn the server process (stdio pipes, UTF-8)
|
|
6
|
+
* - the `initialize` / `initialized` handshake
|
|
7
|
+
* - correlate `request` id → Promise, dispatch `notification`s to listeners
|
|
8
|
+
* - request timeouts, graceful `shutdown`/`exit`, and process-level
|
|
9
|
+
* `error`/`exit` propagation
|
|
10
|
+
*
|
|
11
|
+
* Testability: all process spawning goes through `_deps.spawn` so tests inject a
|
|
12
|
+
* fake stdio pair (see cli-dev.md `_deps` pattern — `vi.mock("child_process")`
|
|
13
|
+
* does not intercept this file). Nothing here is language-specific.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { spawn as nodeSpawn } from "child_process";
|
|
17
|
+
import { EventEmitter } from "events";
|
|
18
|
+
import { encodeMessage, MessageBuffer } from "./jsonrpc-stream.js";
|
|
19
|
+
|
|
20
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 15_000;
|
|
21
|
+
const DEFAULT_INIT_TIMEOUT_MS = 30_000;
|
|
22
|
+
|
|
23
|
+
// Injectable so unit tests can supply a fake child process.
|
|
24
|
+
export const _deps = { spawn: nodeSpawn };
|
|
25
|
+
|
|
26
|
+
export class LSPClient extends EventEmitter {
|
|
27
|
+
/**
|
|
28
|
+
* @param {object} opts
|
|
29
|
+
* @param {string} opts.command server executable
|
|
30
|
+
* @param {string[]} [opts.args] server args (e.g. ["--stdio"])
|
|
31
|
+
* @param {string} opts.rootPath absolute project root
|
|
32
|
+
* @param {object} [opts.env] extra env vars
|
|
33
|
+
* @param {number} [opts.requestTimeoutMs]
|
|
34
|
+
* @param {object} [opts.capabilities] client capabilities override
|
|
35
|
+
*/
|
|
36
|
+
constructor(opts = {}) {
|
|
37
|
+
super();
|
|
38
|
+
this.command = opts.command;
|
|
39
|
+
this.args = Array.isArray(opts.args) ? opts.args : [];
|
|
40
|
+
this.rootPath = opts.rootPath;
|
|
41
|
+
this.env = opts.env || {};
|
|
42
|
+
this.requestTimeoutMs = opts.requestTimeoutMs || DEFAULT_REQUEST_TIMEOUT_MS;
|
|
43
|
+
this.capabilitiesOverride = opts.capabilities || null;
|
|
44
|
+
|
|
45
|
+
this._child = null;
|
|
46
|
+
this._buffer = new MessageBuffer();
|
|
47
|
+
this._nextId = 1;
|
|
48
|
+
/** @type {Map<number, {resolve,reject,timer}>} */
|
|
49
|
+
this._pending = new Map();
|
|
50
|
+
this._initialized = false;
|
|
51
|
+
this._closed = false;
|
|
52
|
+
/** server-reported capabilities from `initialize` */
|
|
53
|
+
this.serverCapabilities = null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
get running() {
|
|
57
|
+
return Boolean(this._child) && !this._closed;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** OS pid of the language-server process, or null before start / after exit. */
|
|
61
|
+
get pid() {
|
|
62
|
+
return this._child ? (this._child.pid ?? null) : null;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Spawn the process and run the initialize handshake. Resolves when ready. */
|
|
66
|
+
async start({ initTimeoutMs = DEFAULT_INIT_TIMEOUT_MS } = {}) {
|
|
67
|
+
if (this._child) throw new Error("LSPClient already started");
|
|
68
|
+
|
|
69
|
+
// shell:false — never route the server command through a shell (prevents
|
|
70
|
+
// command injection and GBK codepage surprises on Windows). Callers pass a
|
|
71
|
+
// resolved executable path; see lsp-server-registry.js. `.cmd`/`.bat` shims
|
|
72
|
+
// can't be spawned directly with shell:false since Node's CVE-2024-27980
|
|
73
|
+
// fix, so buildSpawnCommand rewrites them to an explicit `cmd.exe /d /s /c`
|
|
74
|
+
// invocation with verbatim args — still no shell, still injection-safe.
|
|
75
|
+
const spawnSpec = buildSpawnCommand(this.command, this.args);
|
|
76
|
+
this._child = _deps.spawn(spawnSpec.file, spawnSpec.args, {
|
|
77
|
+
cwd: this.rootPath,
|
|
78
|
+
env: { ...process.env, ...this.env },
|
|
79
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
80
|
+
shell: false,
|
|
81
|
+
windowsHide: true,
|
|
82
|
+
windowsVerbatimArguments: spawnSpec.windowsVerbatimArguments,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
this._child.on("error", (err) => {
|
|
86
|
+
this._failAll(err);
|
|
87
|
+
this.emit("error", err);
|
|
88
|
+
});
|
|
89
|
+
this._child.on("exit", (code, signal) => {
|
|
90
|
+
const wasClosed = this._closed;
|
|
91
|
+
this._closed = true;
|
|
92
|
+
this._failAll(
|
|
93
|
+
new Error(`language server exited (code=${code}, signal=${signal})`),
|
|
94
|
+
);
|
|
95
|
+
if (!wasClosed) this.emit("exit", { code, signal });
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// UTF-8 decode explicitly (encoding.md) — never rely on system default.
|
|
99
|
+
this._child.stdout.on("data", (chunk) => {
|
|
100
|
+
this._buffer.append(chunk);
|
|
101
|
+
for (const msg of this._buffer.readAll()) this._dispatch(msg);
|
|
102
|
+
});
|
|
103
|
+
// Surface server diagnostics/logs without corrupting the message channel.
|
|
104
|
+
this._child.stderr.on("data", (chunk) => {
|
|
105
|
+
this.emit("stderr", chunk.toString("utf8"));
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
try {
|
|
109
|
+
const initResult = await this.request(
|
|
110
|
+
"initialize",
|
|
111
|
+
this._initializeParams(),
|
|
112
|
+
{ timeoutMs: initTimeoutMs },
|
|
113
|
+
);
|
|
114
|
+
this.serverCapabilities = initResult?.capabilities || {};
|
|
115
|
+
this.notify("initialized", {});
|
|
116
|
+
this._initialized = true;
|
|
117
|
+
return this.serverCapabilities;
|
|
118
|
+
} catch (err) {
|
|
119
|
+
// The process spawned but the initialize handshake failed or timed out (a
|
|
120
|
+
// hung/slow/broken server). Don't leave it orphaned: an init HANG never
|
|
121
|
+
// fires 'exit', and the manager's crash-loop guard only counts exits, so
|
|
122
|
+
// the process would linger forever holding a port/file locks. Tear it down
|
|
123
|
+
// before rethrowing so the caller's failure path doesn't leak a server.
|
|
124
|
+
this._closed = true;
|
|
125
|
+
this._failAll(err);
|
|
126
|
+
try {
|
|
127
|
+
this._child.kill();
|
|
128
|
+
} catch {
|
|
129
|
+
/* already dead */
|
|
130
|
+
}
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
_initializeParams() {
|
|
136
|
+
const rootUri = pathToFileUri(this.rootPath);
|
|
137
|
+
return {
|
|
138
|
+
processId: process.pid,
|
|
139
|
+
clientInfo: { name: "chainlesschain-cc", version: "1" },
|
|
140
|
+
rootUri,
|
|
141
|
+
rootPath: this.rootPath,
|
|
142
|
+
workspaceFolders: [{ uri: rootUri, name: "workspace" }],
|
|
143
|
+
capabilities: this.capabilitiesOverride || defaultClientCapabilities(),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Send a JSON-RPC request and await its result. */
|
|
148
|
+
request(method, params, { timeoutMs } = {}) {
|
|
149
|
+
if (this._closed) {
|
|
150
|
+
return Promise.reject(new Error("LSPClient is closed"));
|
|
151
|
+
}
|
|
152
|
+
const id = this._nextId++;
|
|
153
|
+
const payload = { jsonrpc: "2.0", id, method, params };
|
|
154
|
+
return new Promise((resolve, reject) => {
|
|
155
|
+
const timer = setTimeout(() => {
|
|
156
|
+
this._pending.delete(id);
|
|
157
|
+
reject(
|
|
158
|
+
new Error(
|
|
159
|
+
`LSP request "${method}" timed out after ${timeoutMs || this.requestTimeoutMs}ms`,
|
|
160
|
+
),
|
|
161
|
+
);
|
|
162
|
+
}, timeoutMs || this.requestTimeoutMs);
|
|
163
|
+
// Don't keep the event loop alive purely for a pending LSP request.
|
|
164
|
+
if (typeof timer.unref === "function") timer.unref();
|
|
165
|
+
this._pending.set(id, { resolve, reject, timer });
|
|
166
|
+
this._write(payload);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/** Send a JSON-RPC notification (no response expected). */
|
|
171
|
+
notify(method, params) {
|
|
172
|
+
if (this._closed) return;
|
|
173
|
+
this._write({ jsonrpc: "2.0", method, params });
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
_write(payload) {
|
|
177
|
+
if (!this._child || !this._child.stdin.writable) return;
|
|
178
|
+
try {
|
|
179
|
+
this._child.stdin.write(encodeMessage(payload));
|
|
180
|
+
} catch (err) {
|
|
181
|
+
this.emit("error", err);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
_dispatch(msg) {
|
|
186
|
+
if (msg == null) return;
|
|
187
|
+
// Response to one of our requests.
|
|
188
|
+
if (Object.prototype.hasOwnProperty.call(msg, "id") && msg.method == null) {
|
|
189
|
+
const entry = this._pending.get(msg.id);
|
|
190
|
+
if (!entry) return; // late/duplicate response — ignore
|
|
191
|
+
this._pending.delete(msg.id);
|
|
192
|
+
clearTimeout(entry.timer);
|
|
193
|
+
if (msg.error) {
|
|
194
|
+
const e = new Error(msg.error.message || "LSP error");
|
|
195
|
+
e.code = msg.error.code;
|
|
196
|
+
e.data = msg.error.data;
|
|
197
|
+
entry.reject(e);
|
|
198
|
+
} else {
|
|
199
|
+
entry.resolve(msg.result);
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Server → client request (e.g. workspace/configuration). We don't act on
|
|
204
|
+
// these yet, but must reply so the server doesn't block; reply null.
|
|
205
|
+
if (msg.method != null && Object.prototype.hasOwnProperty.call(msg, "id")) {
|
|
206
|
+
this._write({ jsonrpc: "2.0", id: msg.id, result: null });
|
|
207
|
+
this.emit("serverRequest", msg);
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
// Notification from the server (diagnostics, logs, progress…).
|
|
211
|
+
if (msg.method != null) {
|
|
212
|
+
this.emit("notification", msg.method, msg.params);
|
|
213
|
+
this.emit(`notify:${msg.method}`, msg.params);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
_failAll(err) {
|
|
218
|
+
for (const [, entry] of this._pending) {
|
|
219
|
+
clearTimeout(entry.timer);
|
|
220
|
+
entry.reject(err);
|
|
221
|
+
}
|
|
222
|
+
this._pending.clear();
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** Graceful LSP shutdown → exit → kill fallback. Idempotent. */
|
|
226
|
+
async stop({ graceTimeoutMs = 2000 } = {}) {
|
|
227
|
+
if (!this._child || this._closed) {
|
|
228
|
+
this._closed = true;
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
if (this._initialized) {
|
|
233
|
+
await this.request("shutdown", null, { timeoutMs: graceTimeoutMs });
|
|
234
|
+
this.notify("exit", null);
|
|
235
|
+
}
|
|
236
|
+
} catch {
|
|
237
|
+
// Server unresponsive — fall through to hard kill.
|
|
238
|
+
} finally {
|
|
239
|
+
this._closed = true;
|
|
240
|
+
this._failAll(new Error("LSPClient stopped"));
|
|
241
|
+
try {
|
|
242
|
+
this._child.kill();
|
|
243
|
+
} catch {
|
|
244
|
+
/* already dead */
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Compute the actual (file, args) to spawn without a shell. On Windows a
|
|
252
|
+
* `.cmd`/`.bat` batch shim cannot be spawned with shell:false (EINVAL since
|
|
253
|
+
* Node's CVE-2024-27980 fix), so route it through `cmd.exe /d /s /c "<cmd>" …`
|
|
254
|
+
* with windowsVerbatimArguments so cmd.exe — not Node — parses the line. The
|
|
255
|
+
* command path is double-quoted (handles spaces) and our args are constant, so
|
|
256
|
+
* there is no injection surface. Everything else spawns verbatim.
|
|
257
|
+
*/
|
|
258
|
+
export function buildSpawnCommand(command, args = []) {
|
|
259
|
+
if (process.platform === "win32" && /\.(cmd|bat)$/i.test(command)) {
|
|
260
|
+
const comspec = process.env.ComSpec || "cmd.exe";
|
|
261
|
+
// Always quote the command path (a batch path can contain spaces/&); quote
|
|
262
|
+
// args only when they carry shell-significant characters. Verbatim args mean
|
|
263
|
+
// cmd.exe — not Node — parses this line, so our own quoting is authoritative.
|
|
264
|
+
const quotedCmd = `"${String(command).replace(/"/g, '""')}"`;
|
|
265
|
+
const quotedArgs = args.map((a) =>
|
|
266
|
+
/[\s"&|<>^]/.test(a) ? `"${String(a).replace(/"/g, '""')}"` : a,
|
|
267
|
+
);
|
|
268
|
+
return {
|
|
269
|
+
file: comspec,
|
|
270
|
+
args: ["/d", "/s", "/c", [quotedCmd, ...quotedArgs].join(" ")],
|
|
271
|
+
windowsVerbatimArguments: true,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
return { file: command, args, windowsVerbatimArguments: false };
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** LSP wants a `file://` URI; build one that round-trips on Windows and POSIX. */
|
|
278
|
+
export function pathToFileUri(p) {
|
|
279
|
+
if (!p) return "";
|
|
280
|
+
let normalized = String(p).replace(/\\/g, "/");
|
|
281
|
+
// Windows drive path → file:///C:/...
|
|
282
|
+
if (/^[a-zA-Z]:\//.test(normalized)) {
|
|
283
|
+
normalized = "/" + normalized;
|
|
284
|
+
}
|
|
285
|
+
const encoded = normalized
|
|
286
|
+
.split("/")
|
|
287
|
+
.map((seg) => encodeURIComponent(seg))
|
|
288
|
+
.join("/");
|
|
289
|
+
return "file://" + encoded;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Canonicalize a `file://` URI so keys match regardless of who produced them.
|
|
294
|
+
* Windows language servers echo back a lowercase drive letter
|
|
295
|
+
* (`file:///c%3A/…`) while `path.resolve` yields uppercase (`C%3A`), so a Map
|
|
296
|
+
* keyed on the raw URI misses. Lowercasing the drive letter reconciles both.
|
|
297
|
+
*/
|
|
298
|
+
export function normalizeUri(uri) {
|
|
299
|
+
if (!uri) return uri;
|
|
300
|
+
return String(uri).replace(
|
|
301
|
+
/^(file:\/\/\/)([A-Za-z])(%3[Aa]|:)/,
|
|
302
|
+
(_m, p, drive, colon) => p + drive.toLowerCase() + colon,
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** Convert a `file://` URI back to a native filesystem path. */
|
|
307
|
+
export function fileUriToPath(uri) {
|
|
308
|
+
if (!uri) return "";
|
|
309
|
+
let p = String(uri).replace(/^file:\/\//, "");
|
|
310
|
+
p = decodeURIComponent(p);
|
|
311
|
+
// /C:/... → C:/... on Windows
|
|
312
|
+
if (/^\/[a-zA-Z]:\//.test(p)) p = p.slice(1);
|
|
313
|
+
return process.platform === "win32" ? p.replace(/\//g, "\\") : p;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function defaultClientCapabilities() {
|
|
317
|
+
return {
|
|
318
|
+
textDocument: {
|
|
319
|
+
synchronization: { dynamicRegistration: false, didSave: true },
|
|
320
|
+
definition: { dynamicRegistration: false, linkSupport: false },
|
|
321
|
+
references: { dynamicRegistration: false },
|
|
322
|
+
hover: {
|
|
323
|
+
dynamicRegistration: false,
|
|
324
|
+
contentFormat: ["markdown", "plaintext"],
|
|
325
|
+
},
|
|
326
|
+
documentSymbol: {
|
|
327
|
+
dynamicRegistration: false,
|
|
328
|
+
hierarchicalDocumentSymbolSupport: true,
|
|
329
|
+
},
|
|
330
|
+
publishDiagnostics: { relatedInformation: true },
|
|
331
|
+
rename: { dynamicRegistration: false, prepareSupport: true },
|
|
332
|
+
},
|
|
333
|
+
workspace: {
|
|
334
|
+
workspaceFolders: true,
|
|
335
|
+
symbol: { dynamicRegistration: false },
|
|
336
|
+
configuration: true,
|
|
337
|
+
},
|
|
338
|
+
};
|
|
339
|
+
}
|