chainlesschain 0.162.149 → 0.162.151
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 +3 -2
- package/src/assets/web-panel/assets/{AIOps-BJif14yR.js → AIOps-DuEOzebi.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CXek6gJY.js → ActionButton-C6GiJa5H.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BgQhdAJi.js → Analytics-BBIiL_pO.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DTYl5NtR.js → AppLayout-CuI2gZRy.js} +3 -3
- package/src/assets/web-panel/assets/{Audit-BzATQAeR.js → Audit-CbUjfr-K.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BzdPEQhL.js → Backup-CsSW9ljf.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BM0KVh8E.js → BaseInput-kM3rLe7F.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-D7fHXHkz.js → Chat-kfE51YN3.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-Wm34RR-b.js → ChatBubbleRenderer-Bg2FTW6A.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CAiSQ9vO.js → Checkbox-jYb1uj-M.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Df40CrEe.js → Codegen-X9XiD5Lj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DIT2fNFU.js → Col-BfbHu1xI.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CSTIbW2k.js → Community-c4oJMFS-.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DtqXZZUi.js → Compact-BFmnZpH7.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CUtzw6o7.js → Compliance-s9shVHBS.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CezmlnmU.js → Cowork-C5da--TC.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-P4BITarg.js → Cron-9kNbyNE4.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BRRiYwvq.js → Crosschain-C1k3NJD4.js} +1 -1
- package/src/assets/web-panel/assets/{DID-L5ijB9i4.js → DID-DkheEvNK.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CFxro4ob.js → Dashboard-C3FuSGmJ.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BmAFCQ71.js → Dropdown-CAV6FMFD.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DJBCEuon.js → EmailListRenderer-Cc-Ulc4l.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-z4oLq6eT.js → FamilyGuardDashboard-8CitHEtv.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DsVCpHMF.js → Federation-DFSZ5KDt.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DP3bP5th.js → FormItemContext-CEWCtnG2.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BAXP2Gc6.js → GenericCardRenderer-CwRzNzmX.js} +1 -1
- package/src/assets/web-panel/assets/{Git-I3g_bAw9.js → Git-0rgDM7cJ.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-jHS5-ioS.js → Governance-CfBKtK9F.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CPL7sfx9.js → Inference-CzcUVvud.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Jf236h4C.js → KnowledgeGraph-Dwc4YL4A.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Cm2tcSKg.js → Logs-DgFPwR2F.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-CZK82rhi.js → Marketplace-DnpPTbGU.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CZCeji7a.js → McpTools-DRxxINyW.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-3l2KVS9k.js → Memory-OhmW_6Z3.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-VYdpoLh6.js → MobileBridge-DkTW-RK5.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CiB9cmm1.js → MobileProjects-DpCGV_lI.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-wCFZbBuL.js → Mtc--vmkL0AS.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-1a3THIyG.js → MtcAudit-DGoFWjD4.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-DMzLB2hG.js → Multisig-B4kWgq95.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D9wZbf6l.js → NLProgramming-YQwvommE.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-hrFe2ZM-.js → Notes-CgjtUADJ.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CHGX5Jwm.js → NotificationSettings-6JDrpBG5.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-PM6IlxjO.js +1 -0
- package/src/assets/web-panel/assets/{Organization-By7FkhtY.js → Organization-8McOT_OF.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow--khGSzJn.js → Overflow-DAZpSCGc.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CAG9dH35.js → P2P-B7l2ZWLy.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-B3SQZmK9.js → PdhVaultBrowser-W1Ud-NAL.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-D35ec6JA.js → Permissions-Czm_w9u_.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CxBF7hW_.js → PersonalDataHub-B4F0_ZVM.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-s6EtOO1s.js → Pipeline-B37aFiWv.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BbJYmWmO.js → Privacy-94KBnRrD.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-VGQq1jMT.js → ProjectInit-B5h8_dlh.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-B1ew3Teh.js → ProjectSettings-lmeI3Lpm.js} +2 -2
- package/src/assets/web-panel/assets/Projects-D5AYOasl.js +1 -0
- package/src/assets/web-panel/assets/{Providers-mrO47FIK.js → Providers-B3cNWwJg.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-IJF2mHyw.js → QrScannerModal-CHRvOw1R.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CU0wN_Z0.js → QuickAsk-D1JMgFEd.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DhN37R6G.js → Recommend-EYWGR79p.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-D_xOX_hu.js → RemoteSession-BAMC2pJt.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-D_Ssv7uH.js → Reputation-X2Hk1XG_.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Kx5dKxX7.js → Row-Eq98LRtU.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BlGwqZkY.js → RssFeed-i76s6z_o.js} +2 -2
- package/src/assets/web-panel/assets/{Search-hLFQzxpb.js → Search-D_Es7CAI.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DMlvsVt4.js → Security-kayD2e94.js} +3 -3
- package/src/assets/web-panel/assets/{Services-Bd0Qsj2m.js → Services-Ctsm6ul8.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DFclq9X3.js → Skeleton-CRNYlfdf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BNtln2qY.js → Skills-DkZYpF4-.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Dch5H19G.js → Sla-DXkoBcOP.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-2UfQcU1g.js → SpeechSettings-DXi_GI1d.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CD9YQr4i.js → SyncSettings-rNKpfomn.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BNu-7MzI.js → Tasks-XF4uPtG-.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-D1n9CaIR.js → Templates-i0Hzfeyu.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DenL3iBW.js → Tenant-sMpHAi27.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-BoZvaYAl.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-D87IfukO.js → TimelineRenderer-yuC6K7Rf.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BkiZc8E3.js → Tokens-B8O8i0s6.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BNRSytGN.js → Trigger-Bv6yrlCr.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Bwbd4X2m.js → Trust-C4mW95Ev.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B8O2bs0o.js → UkeySign-DV6yKaHn.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C2fL8zmH.js → VideoEditing-UI479-sD.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BORYDdE1.js → Wallet-M5oV9EVP.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C0V5S2FM.js → WebAuthn-DDyDHPDR.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-2dR0fcHL.js → WorkflowEditor-RoBv4rqk.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BmuAFAn8.js → chat-Cw1mE5LS.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CN3smMcK.js → colors-BFP62Gwf.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DCnxb4kW.js → compact-item-17HL6pyC.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-vlR43pHn.js → createContext-D55X4fZX.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CqbHYuRc.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-D04tHYFd.js → hasIn-D3E5mNsP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbVsQBOH.js → index--44J50mc.js} +1 -1
- package/src/assets/web-panel/assets/{index-TslMTwNy.js → index-ASPYTzMK.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTOCnIQ7.js → index-BC6zxOlU.js} +1 -1
- package/src/assets/web-panel/assets/{index-ljuBiQW9.js → index-BEa1RW4c.js} +1 -1
- package/src/assets/web-panel/assets/{index-jzR7Ujuw.js → index-BQmZg5si.js} +1 -1
- package/src/assets/web-panel/assets/{index-BudvKQfG.js → index-BY_xZ2jy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CP9m9Ggr.js → index-BgN5G5vF.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cr-A0FYJ.js → index-BnGpft-Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5LZVZ0L.js → index-Bq83UBDr.js} +1 -1
- package/src/assets/web-panel/assets/{index-ToUh2b1-.js → index-Bzpp2z2S.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbADHwhr.js → index-CFYGn88j.js} +1 -1
- package/src/assets/web-panel/assets/{index-ClhAHDK3.js → index-CGyTos4p.js} +1 -1
- package/src/assets/web-panel/assets/index-CKBI1U5K.js +1 -0
- package/src/assets/web-panel/assets/{index-C-6NO5il.js → index-CLEzsZ8A.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8vwp4qp.js → index-CR9rNUvi.js} +1 -1
- package/src/assets/web-panel/assets/{index-_FIkN3jd.js → index-CW6LLoJO.js} +1 -1
- package/src/assets/web-panel/assets/{index-D65_XseV.js → index-C_MfcrLf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CnXebZLL.js → index-Cdvk2_2q.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_n8_vfI.js → index-CjCwi7we.js} +1 -1
- package/src/assets/web-panel/assets/index-CkLp6DTO.js +1 -0
- package/src/assets/web-panel/assets/{index-DDwLgQY9.js → index-CvCFKojj.js} +1 -1
- package/src/assets/web-panel/assets/{index-430S68MN.js → index-D4LHSde4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXRg8GFQ.js → index-DCLu84x-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTtRscUa.js → index-DD_qGBrt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BasvsWDM.js → index-DIRvdwBX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeGDEXFs.js → index-DOjA8bvj.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsAsCPJ6.js → index-Da27u6j0.js} +1 -1
- package/src/assets/web-panel/assets/{index-D28DeAAB.js → index-DkBVYlE4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CngCC8hC.js → index-DtAnPBWP.js} +1 -1
- package/src/assets/web-panel/assets/{index-B78xL3s2.js → index-DzG7mkgW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIpY0qM5.js → index-H9_X1Cg_.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5Sxb1sE.js → index-ITeEHb8L.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTPEZTk1.js → index-KtLJXn4s.js} +1 -1
- package/src/assets/web-panel/assets/{index-hpvvtAZ3.js → index-RYZgFIwo.js} +1 -1
- package/src/assets/web-panel/assets/{index-HhNjnCfe.js → index-gAVxDiTZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTWg-18U.js → index-paVubXzn.js} +1 -1
- package/src/assets/web-panel/assets/{index-BqhASEL4.js → index-tUH_6bdJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DYAtmqiv.js → index-tVRPgYGr.js} +1 -1
- package/src/assets/web-panel/assets/{index-0DnaZGkC.js → index-uSsiwgZ2.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C3wUb4je.js → initDefaultProps-Ckp7xVZS.js} +1 -1
- package/src/assets/web-panel/assets/{motion-D-jYFUNA.js → motion-DUZgCpn6.js} +1 -1
- package/src/assets/web-panel/assets/{move-tqb8nwJ2.js → move-B2rttglH.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DSOjMJMz.js → mtc-parser-BYWcLTuN.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CJ7VimIW.js → omit-DhHqKeFx.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-qXiG1iT3.js → pickAttrs-ANpJaWMO.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CkGBcy1Z.js → placementArrow-CfZWe7CA.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D3WvTlLO.js → responsiveObserve-D7Xz2y-R.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BEE2ftge.js → slide-DekqCBY9.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CsfBpxiG.js → statusUtils-BET6XU7h.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-xPrIiJPI.js → styleChecker-qHmJjV62.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C5Yd-SCR.js → useFlexGapSupport-BoMCTNyu.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-D_MDS8HI.js → useFs-TdW-NgFC.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BqJh-usA.js → usePersonalDataHub-Dyox7wCu.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-chm_p-gz.js → vnode-XUn5S8CP.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-3-YDNz0Z.js → zoom-Ls77i8hn.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-manifest.json +8 -1
- package/src/commands/a2a.js +19 -4
- package/src/commands/activitypub.js +20 -3
- package/src/commands/agent.js +27 -5
- package/src/commands/audit.js +40 -24
- package/src/commands/changelog.js +148 -0
- package/src/commands/codeintel.js +68 -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 +7 -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 +125 -5
- 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 +9 -2
- 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/data/changelog.json +189 -0
- package/src/gateways/ws/message-dispatcher.js +5 -2
- package/src/gateways/ws/remote-session-protocol.js +110 -42
- package/src/harness/jsonl-session-store.js +12 -5
- package/src/harness/plugin-manager.js +16 -4
- package/src/harness/remote-command-ledger.js +46 -15
- package/src/harness/worktree-isolator.js +16 -6
- package/src/index.js +2 -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 +2 -0
- package/src/lib/agent-economy.js +262 -29
- package/src/lib/agent-network.js +7 -1
- package/src/lib/agent-team/team-runner.js +25 -9
- package/src/lib/agent-team/team-worktree.js +36 -4
- package/src/lib/async-hook-supervisor.cjs +102 -16
- package/src/lib/audit-logger.js +7 -6
- package/src/lib/autonomous-developer.js +60 -0
- package/src/lib/changelog.js +252 -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 +89 -1
- package/src/lib/eval/tasks.js +170 -0
- package/src/lib/eval/trend.js +16 -1
- 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__/lsp-client.test.js +11 -0
- package/src/lib/lsp/__tests__/lsp-manager.test.js +69 -0
- package/src/lib/lsp/benchmark.js +257 -0
- package/src/lib/lsp/lsp-client.js +30 -9
- package/src/lib/lsp/lsp-manager.js +54 -2
- package/src/lib/lsp/lsp-server-registry.js +15 -4
- 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-runtime/__tests__/remote-source.test.js +256 -0
- package/src/lib/plugin-runtime/hooks.js +20 -4
- package/src/lib/plugin-runtime/install.js +9 -1
- package/src/lib/plugin-runtime/monitors.js +20 -4
- package/src/lib/plugin-runtime/policy.js +9 -1
- package/src/lib/plugin-runtime/remote-source.js +240 -0
- package/src/lib/plugin-runtime/signature.js +16 -0
- package/src/lib/pqc-manager.js +64 -0
- package/src/lib/reputation-optimizer.js +101 -0
- package/src/lib/sandbox-egress-proxy.js +195 -59
- package/src/lib/sandbox-fs-policy.js +112 -0
- package/src/lib/sandbox-network-policy.js +44 -5
- package/src/lib/sandbox-v2.js +14 -14
- package/src/lib/scim-manager.js +36 -0
- package/src/lib/session-manager.js +5 -2
- package/src/lib/settings-hooks.cjs +1 -0
- package/src/lib/siem-exporter.js +45 -0
- package/src/lib/skill-loader.js +20 -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 +12 -1
- 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 +17 -2
- package/src/runtime/__tests__/auto-pin.test.js +104 -0
- package/src/runtime/agent-core.js +241 -68
- package/src/runtime/auto-pin.js +117 -0
- package/src/runtime/headless-runner.js +35 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-CRIFE2Tj.js +0 -1
- package/src/assets/web-panel/assets/Projects-CGcNIs_g.js +0 -1
- package/src/assets/web-panel/assets/Terminal-ZzU0Io1Y.js +0 -3
- package/src/assets/web-panel/assets/devWarning-DxwmsL4j.js +0 -1
- package/src/assets/web-panel/assets/index-Cg2ldRfU.js +0 -1
- package/src/assets/web-panel/assets/index-Dwzo-dtJ.js +0 -1
package/src/commands/init.js
CHANGED
|
@@ -608,7 +608,7 @@ chainlesschain cli-anything register <tool-name>
|
|
|
608
608
|
* Auto-detects which backend is available and uses the best one.
|
|
609
609
|
*/
|
|
610
610
|
|
|
611
|
-
const { execSync, spawn } = require("child_process");
|
|
611
|
+
const { execSync, spawn, spawnSync } = require("child_process");
|
|
612
612
|
const fs = require("fs");
|
|
613
613
|
const path = require("path");
|
|
614
614
|
const https = require("https");
|
|
@@ -734,9 +734,14 @@ async function audioGenHandler(params) {
|
|
|
734
734
|
// 2. piper-tts (offline, free)
|
|
735
735
|
if (commandExists("piper")) {
|
|
736
736
|
try {
|
|
737
|
-
|
|
737
|
+
// Pass the text via stdin with NO shell — an echo-pipe only escaped
|
|
738
|
+
// double-quotes, so backticks / \$(...) in \`text\` would still execute.
|
|
739
|
+
const r = spawnSync("piper", ["--output_file", outputPath], {
|
|
740
|
+
input: text,
|
|
738
741
|
encoding: "utf-8",
|
|
739
742
|
});
|
|
743
|
+
if (r.error) throw r.error;
|
|
744
|
+
if (r.status !== 0) throw new Error(r.stderr || "piper exited " + r.status);
|
|
740
745
|
return {
|
|
741
746
|
success: true,
|
|
742
747
|
backend: "piper-tts",
|
|
@@ -1630,6 +1635,40 @@ function callLLM(prompt) {
|
|
|
1630
1635
|
return null;
|
|
1631
1636
|
}
|
|
1632
1637
|
|
|
1638
|
+
// ── Extract first balanced JSON block (inlined from lib/json-schema-output) ──
|
|
1639
|
+
// Must live INSIDE this handler: the module-scope import in init.js is NOT
|
|
1640
|
+
// emitted into the generated CJS handler, so referencing it here would throw
|
|
1641
|
+
// ReferenceError (swallowed by the surrounding try/catch → xlsx/pptx edits
|
|
1642
|
+
// would always report "格式不正确" even on valid LLM output).
|
|
1643
|
+
function firstBalancedJson(text, only) {
|
|
1644
|
+
const s = String(text || "");
|
|
1645
|
+
for (let i = 0; i < s.length; i++) {
|
|
1646
|
+
const open = s[i];
|
|
1647
|
+
if (open !== "{" && open !== "[") continue;
|
|
1648
|
+
if (only && open !== only) continue;
|
|
1649
|
+
const close = open === "{" ? "}" : "]";
|
|
1650
|
+
let depth = 0;
|
|
1651
|
+
let inStr = false;
|
|
1652
|
+
let esc = false;
|
|
1653
|
+
for (let j = i; j < s.length; j++) {
|
|
1654
|
+
const c = s[j];
|
|
1655
|
+
if (inStr) {
|
|
1656
|
+
if (esc) esc = false;
|
|
1657
|
+
else if (c === "\\\\") esc = true;
|
|
1658
|
+
else if (c === '"') inStr = false;
|
|
1659
|
+
continue;
|
|
1660
|
+
}
|
|
1661
|
+
if (c === '"') inStr = true;
|
|
1662
|
+
else if (c === open) depth++;
|
|
1663
|
+
else if (c === close) {
|
|
1664
|
+
depth--;
|
|
1665
|
+
if (depth === 0) return s.slice(i, j + 1);
|
|
1666
|
+
}
|
|
1667
|
+
}
|
|
1668
|
+
}
|
|
1669
|
+
return null;
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1633
1672
|
// ── Output path helper ────────────────────────────────────────────────────────
|
|
1634
1673
|
function buildOutputPath(inputFile, outputDir) {
|
|
1635
1674
|
const ext = path.extname(inputFile);
|
|
@@ -2391,6 +2430,11 @@ The AI assistant will follow these guidelines when working in this project.
|
|
|
2391
2430
|
},
|
|
2392
2431
|
};
|
|
2393
2432
|
|
|
2433
|
+
// Test-only: expose the skill handler templates so a regression test can load
|
|
2434
|
+
// the emitted CJS handler and verify its free identifiers resolve (e.g. that
|
|
2435
|
+
// firstBalancedJson is inlined, not left dangling from a module-scope import).
|
|
2436
|
+
export const _SKILL_TEMPLATES = SKILL_TEMPLATES;
|
|
2437
|
+
|
|
2394
2438
|
export function registerInitCommand(program) {
|
|
2395
2439
|
program
|
|
2396
2440
|
.command("init")
|
package/src/commands/kg.js
CHANGED
|
@@ -11,6 +11,7 @@ import { parseJsonOption } from "../lib/parse-json-option.js";
|
|
|
11
11
|
import { bootstrap, shutdown } from "../runtime/bootstrap.js";
|
|
12
12
|
import {
|
|
13
13
|
ensureKnowledgeGraphTables,
|
|
14
|
+
loadFromDb as loadKgFromDb,
|
|
14
15
|
listEntityTypes,
|
|
15
16
|
addEntity,
|
|
16
17
|
getEntity,
|
|
@@ -65,6 +66,9 @@ function _dbFromCtx(ctx) {
|
|
|
65
66
|
}
|
|
66
67
|
const db = ctx.db.getDatabase();
|
|
67
68
|
ensureKnowledgeGraphTables(db);
|
|
69
|
+
// The CLI is one-shot: hydrate the in-memory graph from the DB so persisted
|
|
70
|
+
// entities/relations are visible (and mutations resolve) this invocation.
|
|
71
|
+
loadKgFromDb(db);
|
|
68
72
|
return db;
|
|
69
73
|
}
|
|
70
74
|
|
package/src/commands/loop.js
CHANGED
|
@@ -379,7 +379,12 @@ export function registerLoopCommand(program) {
|
|
|
379
379
|
res.durationMs = Date.now() - t0;
|
|
380
380
|
// --dynamic: read the iteration's [[loop:next]] / [[loop:stop]]
|
|
381
381
|
// directive and surface it to runLoop as done / nextDelayMs.
|
|
382
|
-
|
|
382
|
+
// Use the RESOLVED `dynamic` (not raw options.dynamic): on
|
|
383
|
+
// `cc loop --resume`, dynamic is rehydrated from saved config while
|
|
384
|
+
// options.dynamic is false — gating on the raw flag would skip
|
|
385
|
+
// directive parsing and the model's [[loop:stop]] would be ignored,
|
|
386
|
+
// running the loop forever.
|
|
387
|
+
if (dynamic) {
|
|
383
388
|
const d = parseLoopDirectives(res.output);
|
|
384
389
|
res.done = d.done;
|
|
385
390
|
if (d.nextDelayMs != null) res.nextDelayMs = d.nextDelayMs;
|
package/src/commands/lowcode.js
CHANGED
|
@@ -684,8 +684,18 @@ export function registerLowcodeCommand(program) {
|
|
|
684
684
|
let ctx;
|
|
685
685
|
try {
|
|
686
686
|
ctx = await bootstrap();
|
|
687
|
-
|
|
688
|
-
|
|
687
|
+
if (!ctx.db) {
|
|
688
|
+
spinner.fail("Database not available");
|
|
689
|
+
process.exitCode = 1;
|
|
690
|
+
return;
|
|
691
|
+
}
|
|
692
|
+
// Every sibling unwraps the raw better-sqlite3 handle before use;
|
|
693
|
+
// ensureLowcodeTables/deployApp call db.exec()/db.prepare(), which the
|
|
694
|
+
// ctx.db WRAPPER doesn't expose — passing the wrapper threw "db.exec is
|
|
695
|
+
// not a function" and made `lowcode deploy` fail 100% of the time.
|
|
696
|
+
const db = ctx.db.getDatabase();
|
|
697
|
+
ensureLowcodeTables(db);
|
|
698
|
+
const result = deployApp(db, appId, {
|
|
689
699
|
outputDir: options.output || undefined,
|
|
690
700
|
});
|
|
691
701
|
spinner.succeed(
|
|
@@ -696,6 +706,9 @@ export function registerLowcodeCommand(program) {
|
|
|
696
706
|
logger.log(` Deployed: ${result.deployedAt}`);
|
|
697
707
|
} catch (err) {
|
|
698
708
|
spinner.fail(chalk.red(`Deploy failed: ${err.message}`));
|
|
709
|
+
// Signal failure to the shell (siblings exit(1)); exitCode (not exit())
|
|
710
|
+
// so the finally teardown below still runs.
|
|
711
|
+
process.exitCode = 1;
|
|
699
712
|
} finally {
|
|
700
713
|
if (ctx) await shutdown(ctx);
|
|
701
714
|
}
|
|
@@ -11,6 +11,7 @@ import { parseJsonOption } from "../lib/parse-json-option.js";
|
|
|
11
11
|
import { bootstrap, shutdown } from "../runtime/bootstrap.js";
|
|
12
12
|
import {
|
|
13
13
|
ensureMarketplaceTables,
|
|
14
|
+
loadFromDb as loadMarketplaceFromDb,
|
|
14
15
|
listServiceStatus,
|
|
15
16
|
listInvocationStatus,
|
|
16
17
|
publishService,
|
|
@@ -55,6 +56,11 @@ function _dbFromCtx(ctx) {
|
|
|
55
56
|
}
|
|
56
57
|
const db = ctx.db.getDatabase();
|
|
57
58
|
ensureMarketplaceTables(db);
|
|
59
|
+
// Rehydrate the in-memory _services/_invocations Maps from the DB — the CLI is
|
|
60
|
+
// one-shot, so without this every read is Map-only-empty and a service
|
|
61
|
+
// published in a prior invocation is invisible (record/show/status throw
|
|
62
|
+
// "Service not found").
|
|
63
|
+
loadMarketplaceFromDb(db);
|
|
58
64
|
return db;
|
|
59
65
|
}
|
|
60
66
|
|
|
@@ -155,7 +161,7 @@ export function registerMarketplaceCommand(program) {
|
|
|
155
161
|
)
|
|
156
162
|
.option("-o, --owner <did>", "Filter by owner DID")
|
|
157
163
|
.option("-n, --name <substring>", "Name substring filter")
|
|
158
|
-
.option("--limit <n>", "Maximum entries", parseInt, 50)
|
|
164
|
+
.option("--limit <n>", "Maximum entries", (v) => parseInt(v, 10), 50)
|
|
159
165
|
.option("--json", "Output as JSON")
|
|
160
166
|
.action(async (options) => {
|
|
161
167
|
try {
|
|
@@ -286,7 +292,7 @@ export function registerMarketplaceCommand(program) {
|
|
|
286
292
|
.option("-s, --service <id>", "Filter by service")
|
|
287
293
|
.option("-c, --caller <did>", "Filter by caller")
|
|
288
294
|
.option("-S, --status <s>", "Filter by status")
|
|
289
|
-
.option("--limit <n>", "Maximum entries", parseInt, 50)
|
|
295
|
+
.option("--limit <n>", "Maximum entries", (v) => parseInt(v, 10), 50)
|
|
290
296
|
.option("--json", "Output as JSON")
|
|
291
297
|
.action(async (options) => {
|
|
292
298
|
try {
|
|
@@ -467,7 +473,11 @@ export function registerMarketplaceCommand(program) {
|
|
|
467
473
|
mp.command("complete-invocation <invocation-id>")
|
|
468
474
|
.description("Complete a V2 invocation (RUNNING → SUCCESS)")
|
|
469
475
|
.option("-o, --output <json>", "JSON-encoded output")
|
|
470
|
-
.option(
|
|
476
|
+
.option(
|
|
477
|
+
"-d, --duration-ms <n>",
|
|
478
|
+
"Duration in milliseconds",
|
|
479
|
+
intArg("--duration-ms"),
|
|
480
|
+
)
|
|
471
481
|
.option("--json", "Output as JSON")
|
|
472
482
|
.action(async (invocationId, options) => {
|
|
473
483
|
try {
|
|
@@ -497,7 +507,11 @@ export function registerMarketplaceCommand(program) {
|
|
|
497
507
|
mp.command("fail-invocation <invocation-id>")
|
|
498
508
|
.description("Fail a V2 invocation")
|
|
499
509
|
.option("-m, --message <msg>", "Error message")
|
|
500
|
-
.option(
|
|
510
|
+
.option(
|
|
511
|
+
"-d, --duration-ms <n>",
|
|
512
|
+
"Duration in milliseconds",
|
|
513
|
+
intArg("--duration-ms"),
|
|
514
|
+
)
|
|
501
515
|
.action(async (invocationId, options) => {
|
|
502
516
|
try {
|
|
503
517
|
const ctx = await bootstrap({ verbose: program.opts().verbose });
|
|
@@ -516,7 +530,11 @@ export function registerMarketplaceCommand(program) {
|
|
|
516
530
|
|
|
517
531
|
mp.command("timeout-invocation <invocation-id>")
|
|
518
532
|
.description("Timeout a V2 invocation")
|
|
519
|
-
.option(
|
|
533
|
+
.option(
|
|
534
|
+
"-d, --duration-ms <n>",
|
|
535
|
+
"Duration in milliseconds",
|
|
536
|
+
intArg("--duration-ms"),
|
|
537
|
+
)
|
|
520
538
|
.action(async (invocationId, options) => {
|
|
521
539
|
try {
|
|
522
540
|
const ctx = await bootstrap({ verbose: program.opts().verbose });
|
|
@@ -616,7 +634,23 @@ export function registerMarketplaceCommand(program) {
|
|
|
616
634
|
.option("--json", "Output JSON")
|
|
617
635
|
.action(async (itemId, options) => {
|
|
618
636
|
try {
|
|
619
|
-
|
|
637
|
+
// A malformed --threshold-fen becomes NaN (parseInt("abc")), and
|
|
638
|
+
// `NaN ?? default` keeps NaN (nullish coalescing only catches
|
|
639
|
+
// null/undefined) — so `amountFen >= NaN` is always false and a large
|
|
640
|
+
// order that must route through M-of-N multisig would silently take the
|
|
641
|
+
// direct path. Reject a non-finite explicit override (mirrors the
|
|
642
|
+
// --amount-fen guard below); fall back to the default only when omitted.
|
|
643
|
+
let threshold = LARGE_PURCHASE_THRESHOLD_FEN;
|
|
644
|
+
if (options.thresholdFen !== undefined) {
|
|
645
|
+
if (
|
|
646
|
+
!Number.isFinite(options.thresholdFen) ||
|
|
647
|
+
options.thresholdFen < 0
|
|
648
|
+
) {
|
|
649
|
+
logger.error("--threshold-fen must be a non-negative integer");
|
|
650
|
+
process.exit(2);
|
|
651
|
+
}
|
|
652
|
+
threshold = options.thresholdFen;
|
|
653
|
+
}
|
|
620
654
|
const amountFen = options.amountFen;
|
|
621
655
|
if (!Number.isFinite(amountFen) || amountFen <= 0) {
|
|
622
656
|
logger.error("--amount-fen must be positive integer");
|
package/src/commands/matrix.js
CHANGED
|
@@ -9,6 +9,7 @@ import { logger } from "../lib/logger.js";
|
|
|
9
9
|
import { bootstrap, shutdown } from "../runtime/bootstrap.js";
|
|
10
10
|
import {
|
|
11
11
|
ensureMatrixTables,
|
|
12
|
+
loadFromDb,
|
|
12
13
|
login,
|
|
13
14
|
listRooms,
|
|
14
15
|
sendMessage,
|
|
@@ -45,6 +46,7 @@ export function registerMatrixCommand(program) {
|
|
|
45
46
|
}
|
|
46
47
|
const db = ctx.db.getDatabase();
|
|
47
48
|
ensureMatrixTables(db);
|
|
49
|
+
loadFromDb(db);
|
|
48
50
|
|
|
49
51
|
const result = login(
|
|
50
52
|
db,
|
|
@@ -75,6 +77,7 @@ export function registerMatrixCommand(program) {
|
|
|
75
77
|
}
|
|
76
78
|
const db = ctx.db.getDatabase();
|
|
77
79
|
ensureMatrixTables(db);
|
|
80
|
+
loadFromDb(db);
|
|
78
81
|
|
|
79
82
|
const rooms = listRooms();
|
|
80
83
|
if (options.json) {
|
|
@@ -108,6 +111,7 @@ export function registerMatrixCommand(program) {
|
|
|
108
111
|
}
|
|
109
112
|
const db = ctx.db.getDatabase();
|
|
110
113
|
ensureMatrixTables(db);
|
|
114
|
+
loadFromDb(db);
|
|
111
115
|
|
|
112
116
|
const result = sendMessage(db, roomId, message, options.type);
|
|
113
117
|
logger.success(`Message sent to ${chalk.cyan(roomId)}`);
|
|
@@ -133,9 +137,15 @@ export function registerMatrixCommand(program) {
|
|
|
133
137
|
}
|
|
134
138
|
const db = ctx.db.getDatabase();
|
|
135
139
|
ensureMatrixTables(db);
|
|
140
|
+
loadFromDb(db);
|
|
136
141
|
|
|
137
142
|
const messages = getMessages(roomId, {
|
|
138
|
-
limit: numericOption(options.limit, {
|
|
143
|
+
limit: numericOption(options.limit, {
|
|
144
|
+
name: "--limit",
|
|
145
|
+
integer: true,
|
|
146
|
+
min: 1,
|
|
147
|
+
fallback: 50,
|
|
148
|
+
}),
|
|
139
149
|
});
|
|
140
150
|
if (options.json) {
|
|
141
151
|
console.log(JSON.stringify(messages, null, 2));
|
|
@@ -165,6 +175,7 @@ export function registerMatrixCommand(program) {
|
|
|
165
175
|
}
|
|
166
176
|
const db = ctx.db.getDatabase();
|
|
167
177
|
ensureMatrixTables(db);
|
|
178
|
+
loadFromDb(db);
|
|
168
179
|
|
|
169
180
|
const result = joinRoom(db, roomId);
|
|
170
181
|
logger.success(`Joined room ${chalk.cyan(result.room.roomId)}`);
|
|
@@ -203,6 +214,7 @@ export function registerMatrixCommand(program) {
|
|
|
203
214
|
}
|
|
204
215
|
const db = ctx.db.getDatabase();
|
|
205
216
|
ensureMatrixTables(db);
|
|
217
|
+
loadFromDb(db);
|
|
206
218
|
|
|
207
219
|
const result = sendThreadReply(db, {
|
|
208
220
|
roomId,
|
|
@@ -239,6 +251,7 @@ export function registerMatrixCommand(program) {
|
|
|
239
251
|
}
|
|
240
252
|
const db = ctx.db.getDatabase();
|
|
241
253
|
ensureMatrixTables(db);
|
|
254
|
+
loadFromDb(db);
|
|
242
255
|
|
|
243
256
|
const messages = getThreadMessages(roomId, rootEventId);
|
|
244
257
|
if (options.json) {
|
|
@@ -270,6 +283,7 @@ export function registerMatrixCommand(program) {
|
|
|
270
283
|
}
|
|
271
284
|
const db = ctx.db.getDatabase();
|
|
272
285
|
ensureMatrixTables(db);
|
|
286
|
+
loadFromDb(db);
|
|
273
287
|
|
|
274
288
|
const roots = getThreadRoots(roomId);
|
|
275
289
|
if (options.json) {
|
|
@@ -310,6 +324,7 @@ export function registerMatrixCommand(program) {
|
|
|
310
324
|
}
|
|
311
325
|
const db = ctx.db.getDatabase();
|
|
312
326
|
ensureMatrixTables(db);
|
|
327
|
+
loadFromDb(db);
|
|
313
328
|
|
|
314
329
|
const result = createSpace(db, { name, topic: options.topic });
|
|
315
330
|
if (options.json) {
|
|
@@ -339,6 +354,7 @@ export function registerMatrixCommand(program) {
|
|
|
339
354
|
}
|
|
340
355
|
const db = ctx.db.getDatabase();
|
|
341
356
|
ensureMatrixTables(db);
|
|
357
|
+
loadFromDb(db);
|
|
342
358
|
|
|
343
359
|
const result = addSpaceChild(db, {
|
|
344
360
|
spaceId,
|
|
@@ -372,6 +388,7 @@ export function registerMatrixCommand(program) {
|
|
|
372
388
|
}
|
|
373
389
|
const db = ctx.db.getDatabase();
|
|
374
390
|
ensureMatrixTables(db);
|
|
391
|
+
loadFromDb(db);
|
|
375
392
|
|
|
376
393
|
const result = removeSpaceChild(db, { spaceId, childRoomId });
|
|
377
394
|
if (result.removed) {
|
|
@@ -401,6 +418,7 @@ export function registerMatrixCommand(program) {
|
|
|
401
418
|
}
|
|
402
419
|
const db = ctx.db.getDatabase();
|
|
403
420
|
ensureMatrixTables(db);
|
|
421
|
+
loadFromDb(db);
|
|
404
422
|
|
|
405
423
|
const children = listSpaceChildren(spaceId);
|
|
406
424
|
if (options.json) {
|
|
@@ -432,6 +450,7 @@ export function registerMatrixCommand(program) {
|
|
|
432
450
|
}
|
|
433
451
|
const db = ctx.db.getDatabase();
|
|
434
452
|
ensureMatrixTables(db);
|
|
453
|
+
loadFromDb(db);
|
|
435
454
|
|
|
436
455
|
const spaces = listSpaces();
|
|
437
456
|
if (options.json) {
|
package/src/commands/memory.js
CHANGED
|
@@ -603,7 +603,10 @@ export function registerMemoryCommand(program) {
|
|
|
603
603
|
(process.platform === "win32" ? "notepad" : "nano");
|
|
604
604
|
const filePath = `${memoryDir}/MEMORY.md`;
|
|
605
605
|
try {
|
|
606
|
-
|
|
606
|
+
// Escape any `"` in the path so it can't break out of the quoted
|
|
607
|
+
// arg (editor stays unquoted so `$EDITOR` values with args work).
|
|
608
|
+
const safePath = filePath.replace(/"/g, '\\"');
|
|
609
|
+
execSync(`${editor} "${safePath}"`, { stdio: "inherit" });
|
|
607
610
|
logger.success("Memory file updated");
|
|
608
611
|
} catch {
|
|
609
612
|
logger.error(
|
package/src/commands/mtc.js
CHANGED
|
@@ -2355,7 +2355,13 @@ function registerFederationGovernanceCommands(fed) {
|
|
|
2355
2355
|
.action((hostFed, trustedFed, options) => {
|
|
2356
2356
|
try {
|
|
2357
2357
|
const roster = (options.member || []).map((entry) => {
|
|
2358
|
-
|
|
2358
|
+
// Split on the FIRST colon only: a pubkey_id is itself colon-delimited
|
|
2359
|
+
// (`sha256:<base64url>`), so `split(":", 2)` would silently DROP the
|
|
2360
|
+
// digest tail (pubkey_id becomes just "sha256") and write a corrupt
|
|
2361
|
+
// trust anchor that can never match a real member at verification.
|
|
2362
|
+
const idx = entry.indexOf(":");
|
|
2363
|
+
const member_id = idx >= 0 ? entry.slice(0, idx) : "";
|
|
2364
|
+
const pubkey_id = idx >= 0 ? entry.slice(idx + 1) : "";
|
|
2359
2365
|
if (!member_id || !pubkey_id) {
|
|
2360
2366
|
throw new Error(
|
|
2361
2367
|
`bad --member entry "${entry}", expected id:pubkey_id`,
|
package/src/commands/nostr.js
CHANGED
|
@@ -9,6 +9,7 @@ import { logger } from "../lib/logger.js";
|
|
|
9
9
|
import { bootstrap, shutdown } from "../runtime/bootstrap.js";
|
|
10
10
|
import {
|
|
11
11
|
ensureNostrTables,
|
|
12
|
+
loadFromDb,
|
|
12
13
|
listRelays,
|
|
13
14
|
addRelay,
|
|
14
15
|
publishEvent,
|
|
@@ -39,6 +40,7 @@ export function registerNostrCommand(program) {
|
|
|
39
40
|
}
|
|
40
41
|
const db = ctx.db.getDatabase();
|
|
41
42
|
ensureNostrTables(db);
|
|
43
|
+
loadFromDb(db);
|
|
42
44
|
|
|
43
45
|
const relays = listRelays();
|
|
44
46
|
if (options.json) {
|
|
@@ -73,6 +75,7 @@ export function registerNostrCommand(program) {
|
|
|
73
75
|
}
|
|
74
76
|
const db = ctx.db.getDatabase();
|
|
75
77
|
ensureNostrTables(db);
|
|
78
|
+
loadFromDb(db);
|
|
76
79
|
|
|
77
80
|
const relay = addRelay(db, url);
|
|
78
81
|
logger.success(`Relay added: ${chalk.cyan(relay.url)}`);
|
|
@@ -101,10 +104,15 @@ export function registerNostrCommand(program) {
|
|
|
101
104
|
}
|
|
102
105
|
const db = ctx.db.getDatabase();
|
|
103
106
|
ensureNostrTables(db);
|
|
107
|
+
loadFromDb(db);
|
|
104
108
|
|
|
105
109
|
const result = publishEvent(
|
|
106
110
|
db,
|
|
107
|
-
numericOption(options.kind, {
|
|
111
|
+
numericOption(options.kind, {
|
|
112
|
+
name: "--kind",
|
|
113
|
+
integer: true,
|
|
114
|
+
min: 0,
|
|
115
|
+
}),
|
|
108
116
|
content,
|
|
109
117
|
options.pubkey,
|
|
110
118
|
[],
|
|
@@ -140,9 +148,24 @@ export function registerNostrCommand(program) {
|
|
|
140
148
|
}
|
|
141
149
|
const db = ctx.db.getDatabase();
|
|
142
150
|
ensureNostrTables(db);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
151
|
+
loadFromDb(db);
|
|
152
|
+
|
|
153
|
+
const filter = {
|
|
154
|
+
limit: numericOption(options.limit, {
|
|
155
|
+
name: "--limit",
|
|
156
|
+
integer: true,
|
|
157
|
+
min: 1,
|
|
158
|
+
fallback: 50,
|
|
159
|
+
}),
|
|
160
|
+
};
|
|
161
|
+
if (options.kind)
|
|
162
|
+
filter.kinds = [
|
|
163
|
+
numericOption(options.kind, {
|
|
164
|
+
name: "--kind",
|
|
165
|
+
integer: true,
|
|
166
|
+
min: 0,
|
|
167
|
+
}),
|
|
168
|
+
];
|
|
146
169
|
const events = getEvents(filter);
|
|
147
170
|
if (options.json) {
|
|
148
171
|
console.log(JSON.stringify(events, null, 2));
|
|
@@ -218,6 +241,7 @@ export function registerNostrCommand(program) {
|
|
|
218
241
|
}
|
|
219
242
|
const db = ctx.db.getDatabase();
|
|
220
243
|
ensureNostrTables(db);
|
|
244
|
+
loadFromDb(db);
|
|
221
245
|
|
|
222
246
|
const result = publishDirectMessage(db, {
|
|
223
247
|
senderPrivkey: options.senderPriv,
|
|
@@ -259,6 +283,7 @@ export function registerNostrCommand(program) {
|
|
|
259
283
|
}
|
|
260
284
|
const db = ctx.db.getDatabase();
|
|
261
285
|
ensureNostrTables(db);
|
|
286
|
+
loadFromDb(db);
|
|
262
287
|
|
|
263
288
|
const events = getEvents({ kinds: [4], limit: 1000 });
|
|
264
289
|
const event = events.find((e) => e.id === eventId);
|
|
@@ -305,6 +330,7 @@ export function registerNostrCommand(program) {
|
|
|
305
330
|
}
|
|
306
331
|
const db = ctx.db.getDatabase();
|
|
307
332
|
ensureNostrTables(db);
|
|
333
|
+
loadFromDb(db);
|
|
308
334
|
|
|
309
335
|
const result = publishDeletion(db, {
|
|
310
336
|
eventIds,
|
|
@@ -349,6 +375,7 @@ export function registerNostrCommand(program) {
|
|
|
349
375
|
}
|
|
350
376
|
const db = ctx.db.getDatabase();
|
|
351
377
|
ensureNostrTables(db);
|
|
378
|
+
loadFromDb(db);
|
|
352
379
|
|
|
353
380
|
const result = publishReaction(db, {
|
|
354
381
|
targetEventId,
|
package/src/commands/note.js
CHANGED
|
@@ -7,7 +7,7 @@ import chalk from "chalk";
|
|
|
7
7
|
import { numericOption } from "../lib/cli-numeric.js";
|
|
8
8
|
import { logger } from "../lib/logger.js";
|
|
9
9
|
import { bootstrap, shutdown } from "../runtime/bootstrap.js";
|
|
10
|
-
import { likePrefix } from "../lib/sql-like.js";
|
|
10
|
+
import { likePrefix, escapeLike } from "../lib/sql-like.js";
|
|
11
11
|
import { safeJsonParse } from "../lib/safe-json.js";
|
|
12
12
|
import {
|
|
13
13
|
ensureVersionsTable,
|
|
@@ -259,7 +259,7 @@ export function registerNoteCommand(program) {
|
|
|
259
259
|
`Category: ${note.category} Created: ${note.created_at}`,
|
|
260
260
|
),
|
|
261
261
|
);
|
|
262
|
-
const tags =
|
|
262
|
+
const tags = safeJsonParse(note.tags, []);
|
|
263
263
|
if (tags.length > 0) {
|
|
264
264
|
logger.log(chalk.gray(`Tags: ${tags.join(", ")}`));
|
|
265
265
|
}
|
|
@@ -291,10 +291,13 @@ export function registerNoteCommand(program) {
|
|
|
291
291
|
const rawDb = ctx.db.getDatabase();
|
|
292
292
|
ensureNotesTable(rawDb);
|
|
293
293
|
|
|
294
|
-
|
|
294
|
+
// Escape LIKE metacharacters so a `%`/`_` in the user's query matches
|
|
295
|
+
// literally instead of acting as a wildcard (`search "%"` would
|
|
296
|
+
// otherwise match every note). Mirrors the `id LIKE ? ESCAPE '\'` sites.
|
|
297
|
+
const pattern = `%${escapeLike(query)}%`;
|
|
295
298
|
const notes = rawDb
|
|
296
299
|
.prepare(
|
|
297
|
-
"SELECT id, title, category, created_at FROM notes WHERE deleted_at IS NULL AND (title LIKE ? OR content LIKE ?) ORDER BY created_at DESC LIMIT 50",
|
|
300
|
+
"SELECT id, title, category, created_at FROM notes WHERE deleted_at IS NULL AND (title LIKE ? ESCAPE '\\' OR content LIKE ? ESCAPE '\\') ORDER BY created_at DESC LIMIT 50",
|
|
298
301
|
)
|
|
299
302
|
.all(pattern, pattern);
|
|
300
303
|
|