chainlesschain 0.165.9 → 0.166.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/completions/_cc +2 -1
- package/completions/cc.bash +2 -2
- package/completions/cc.fish +2 -2
- package/completions/cc.ps1 +2 -1
- package/package.json +2 -2
- package/src/assets/web-panel/assets/{AIOps-DxwjrnEA.js → AIOps-D5_pwQ7M.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-JdbYowzn.js → ActionButton-DgoYO32D.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C06GCahv.js → Analytics-BIpoZ4QH.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BUVEEyi1.js → AppLayout-BJ3XrCEe.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-D_ORzkJd.js → Artifacts-DUFs_izZ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-8o_Y5ejG.js → Audit-BZdPwwfL.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DrkHd5VU.js → BackgroundAgents-DK9Fn-8B.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CKBZCX11.js → Backup-Bd6bOhV_.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-C8HkI399.js → BaseInput-CRnWlXrd.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-zb2H2Wux.js → Chat-D1G_yEl6.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BDcNpU_F.js → ChatBubbleRenderer-DDAlEtm-.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-MwPtQmNz.js → Checkbox-CP35SH7R.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-3p5QCkFK.js → Codegen-DugeL4pj.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BPLlhn52.js → Col-DPuJsvKg.js} +1 -1
- package/src/assets/web-panel/assets/{Community-C-3dBNOM.js → Community-CZqNjNNp.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BUcy-F_b.js → Compact-eeyIPEAb.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CI8NxT8m.js → Compliance-MGzTw87k.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DaDEBS-Q.js → Cowork-D3goVIA5.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BSv9HXu5.js → Cron-9HA8hLLG.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-yuiKlJmv.js → Crosschain-DCSOX3l6.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D6LfldB0.js → DID-ji3lN5Bc.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CBhLqG61.js → Dashboard-DlZvF1E5.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BG8pIl3O.js → Dropdown-2FyZcow9.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CY92VIE6.js → EmailListRenderer-qH2bSpSY.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-1Q_ehauM.js → FamilyGuardDashboard-Bfx47wZj.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-D3XirJIU.js → Federation-DhGcZbIv.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DfI9UuGZ.js → FormItemContext-BMgi9_YQ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-IeCZk2m7.js → GenericCardRenderer-DugMac-4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DzK4IJAZ.js → Git-D943BpH-.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BHf5KfmQ.js → Governance-DZ66a8Aa.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BmaxSALS.js → Inference-B00Mp2tN.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-BgePFLA9.js → KnowledgeGraph-BdwXXO2Q.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-nqgxpOc4.js → Logs-_MVXyYWc.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-hOTeNyi7.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Bu8to-86.js → Marketplace-CxeHRsnO.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BFWTzEk0.js → McpTools-BOieTxZ4.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-B026G2GA.js → Memory-BQD26CM3.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CM2Eeg6I.js → MobileBridge-CPJ8ZlvR.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-B79Ob3hy.js → MobileProjects-D7qRVu0y.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CxevSZuV.js → Mtc-BOyndGuk.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-X396cPEX.js → MtcAudit-CXQ_8ZoR.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-HWIB_aZ1.js → Multisig-32Oh9KbH.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-gnYD1Xwy.js → NLProgramming-CFAd00CX.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Dn2Gf_J1.js → Notes-BBCY_qJA.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BRKBQ5rq.js → NotificationSettings-uaQ0PdmW.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Dy___Cgo.js → OrderTableRenderer-kpBxJ-SG.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-cqfccxnt.js → Organization-CmFn7Oeo.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CSX4FHN3.js → Overflow-R_avat3a.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Bwa4aghp.js → P2P-BIhLFmkY.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Dhszyjig.js → PdhVaultBrowser-DTJjk-_i.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CXzTyk6e.js → Permissions-CkzYv8Yb.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CFCAAJbb.js → PersonalDataHub--0QvN2Nz.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BPJbx6xt.js → Pipeline-Bfw5gQCH.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BbiXvEHz.js → Privacy-DicjKfax.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-B-s7-wSD.js → ProjectInit-DUl_ykBp.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Dyug206y.js → ProjectSettings-CPYDvN8a.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BtAI5Fwo.js → Projects-DnZ9_fAr.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-JpIPmz6N.js → Providers-BX1jP31w.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CZdoN64A.js → QrScannerModal-COab5qUl.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BwvnoRIT.js → QuickAsk-CdKQ_JZ0.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-ASMlMQrD.js → Recommend-BPFHg8pK.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BiJzKFKi.js → RemoteSession-CqrfTJvO.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-C80TWLIO.js → Reputation-DM-l8Pb3.js} +1 -1
- package/src/assets/web-panel/assets/{Row-C1VNmjmX.js → Row-CKGBTeCw.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-T2MyGUlG.js → RssFeed-Wb0YHIkc.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DXM6O83L.js → Search-DiBjxKv-.js} +1 -1
- package/src/assets/web-panel/assets/{Security-nv69kU7W.js → Security-BAVEmbWP.js} +4 -4
- package/src/assets/web-panel/assets/{Services-AyHWe7Qj.js → Services-A_a3TIRn.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-D6PWLxFI.js → Skeleton-CloHJ-I7.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BqVeOmNQ.js → Skills-CkvV5hKa.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BegIPl9M.js → Sla-BYozxxsV.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CKJn3xk-.js → SpeechSettings-CWianiZF.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Th4cnAMl.js → SyncSettings-BR4G75do.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BuKfBroh.js → Tasks-D6gyUVrM.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CMuWN8Ac.js → Templates-DbfYIRzT.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-C4je8E8Q.js → Tenant-BHutvukT.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-agJESOcO.js → Terminal-CYEiy2wJ.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D2qDuVZ_.js → TimelineRenderer-D9s1AxfE.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Cvmn99rH.js → Tokens-ij9vxnoy.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-D_QYIHH8.js → Trigger-Dq_DCVeQ.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BmzvQLnX.js → Trust-Bs6wdfoH.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D_LopHwH.js → UkeySign-CLazyr5t.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DoWl3PhQ.js → VideoEditing-viWotIHA.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-5NYcAkxe.js → Wallet-DlZ-A78d.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-B-_Q3ewp.js → WebAuthn-DSmOND3Y.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-CHET-gi2.js → WorkflowEditor-BempLOJi.js} +1 -1
- package/src/assets/web-panel/assets/{chat-C6nvb-n6.js → chat-CyJzf4JI.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CTDE9LTX.js → colors-C62q7WrL.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-KnemdF8D.js → compact-item-7dYM1KW3.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DUJR3Uek.js → createContext-CYTy7z2Q.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BdTg_AMF.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CFNTaby8.js → hasIn-DHoclUqm.js} +1 -1
- package/src/assets/web-panel/assets/{index-65HO56Bv.js → index-2C8Xx2UO.js} +1 -1
- package/src/assets/web-panel/assets/{index-ox6mIwE2.js → index-3pI7AfmD.js} +1 -1
- package/src/assets/web-panel/assets/{index-JGTiDeOW.js → index-4gWv-Ubg.js} +1 -1
- package/src/assets/web-panel/assets/{index-rVDD7AAR.js → index-94ktimZG.js} +1 -1
- package/src/assets/web-panel/assets/{index-OmuhFYKE.js → index-9uR7rc9a.js} +1 -1
- package/src/assets/web-panel/assets/index-B6WvFV4N.js +1 -0
- package/src/assets/web-panel/assets/index-BKgfptzA.js +1 -0
- package/src/assets/web-panel/assets/{index-CquKnw5r.js → index-BMRmxFU_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzReoLyh.js → index-BMxvWauP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DP-PbO11.js → index-BghdJ87W.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSD9_I2_.js → index-Bzz0aJ86.js} +1 -1
- package/src/assets/web-panel/assets/{index-DF1Y0Vuw.js → index-C2efftJb.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8RtbSkV.js → index-C5YWYlW9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHfUdnJH.js → index-CVTnruDt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwZM1rod.js → index-CW86F2Zw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyEtHvEE.js → index-CZRBvN6i.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ceu92a8D.js → index-CjeViaU-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DJyPeBBk.js → index-CnEZ4ZHj.js} +3 -3
- package/src/assets/web-panel/assets/{index-BdiC4LOs.js → index-D6BC4mmz.js} +1 -1
- package/src/assets/web-panel/assets/{index-k6uorYmf.js → index-DA-_807C.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqPpJkte.js → index-DAYanuSk.js} +1 -1
- package/src/assets/web-panel/assets/{index-NtAcnJYW.js → index-DHgSRimK.js} +1 -1
- package/src/assets/web-panel/assets/{index-Wlc7o_C8.js → index-DJzZaPlb.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKvBF3Ov.js → index-DK84lAS0.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcF0D7UZ.js → index-DKdv8cju.js} +1 -1
- package/src/assets/web-panel/assets/{index-CnLpuTAU.js → index-DNLD3nZY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZgCRMxk.js → index-DOFAwpUK.js} +1 -1
- package/src/assets/web-panel/assets/{index-v-mtxmWH.js → index-DYKwGrAn.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cc7dbl_p.js → index-DghnbMlY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BuizJo2E.js → index-DhJjifZe.js} +1 -1
- package/src/assets/web-panel/assets/{index-NUR0If7O.js → index-DkczsbiP.js} +1 -1
- package/src/assets/web-panel/assets/{index-u0h6QqVV.js → index-DvEtHpLc.js} +1 -1
- package/src/assets/web-panel/assets/{index-bxTPfdri.js → index-Dyq9tK5u.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfJzS3Qa.js → index-LK1MZoBj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DF-fcTvQ.js → index-NuNCstRO.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXWg1crv.js → index-QXtrdrub.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTetEUWd.js → index-XrsAHHQN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHqSqnW7.js → index-ZXYp76IB.js} +1 -1
- package/src/assets/web-panel/assets/{index-C96N9xeL.js → index-lHfNxiB5.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-qEt8dI-t.js → initDefaultProps-CwCl5sFQ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DetKPWy-.js → motion-BFJFy70N.js} +1 -1
- package/src/assets/web-panel/assets/{move-BeNYeDV2.js → move-ByrtVGq8.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-C0q0MK_T.js → mtc-parser-BFiH1mT3.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DLKkrKpE.js → omit-bdvgpivj.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Bw1tWsY8.js → pickAttrs-BlfuuE3s.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DeesBLbd.js → placementArrow-t2SC3DMy.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-bqLhxHhn.js → responsiveObserve-CoEXv2Li.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DGCXRoQm.js → slide-BfXCf0Fu.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-H-re3Egl.js → statusUtils-DNsdyOuS.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BXg4qGX_.js → styleChecker-9aHukmoG.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CKLb2KA6.js → useFlexGapSupport-dTkPxzHN.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CTAhHeyw.js → useFs-DINwfItP.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BQ4pDh5g.js → usePersonalDataHub-Bj_RriBV.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-jrSK6j4j.js → vnode-BzRAZrTc.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-fOQE24pw.js → zoom-CamPjkeK.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +4 -4
- package/src/command-manifest.json +1 -1
- package/src/commands/agent.js +1 -1
- package/src/commands/graph.js +100 -0
- package/src/commands/mcp.js +49 -21
- package/src/commands/orchestrate.js +85 -18
- package/src/commands/serve.js +39 -0
- package/src/commands/team.js +2 -0
- package/src/data/changelog.json +26 -0
- package/src/generated/cc-agent-protocol.schema.json +1964 -0
- package/src/lib/agent-sandbox.js +4 -7
- package/src/lib/app-server/bounded-queue.js +87 -0
- package/src/lib/app-server/cli-agent-kernel-adapter.js +309 -0
- package/src/lib/app-server/protocol.js +125 -0
- package/src/lib/app-server/rollout-store.js +603 -0
- package/src/lib/app-server/server.js +922 -0
- package/src/lib/app-server/sqlite-rollout-store.js +315 -0
- package/src/lib/app-server/stdio-transport.js +118 -0
- package/src/lib/codex-app-server-adapter.js +249 -0
- package/src/lib/graph-kernel/adapters.js +238 -0
- package/src/lib/graph-kernel/compiler.js +911 -0
- package/src/lib/graph-kernel/eval.js +207 -0
- package/src/lib/graph-kernel/event-store.js +101 -0
- package/src/lib/graph-kernel/index.js +7 -0
- package/src/lib/graph-kernel/runtime.js +2660 -0
- package/src/lib/graph-kernel/trace-reducer.js +315 -0
- package/src/lib/graph-kernel/trigger-adapter.js +183 -0
- package/src/lib/orchestrator.js +2 -1
- package/src/lib/record-replay/index.js +1 -0
- package/src/lib/record-replay/skill-recorder.js +386 -0
- package/src/lib/webhook-security.js +159 -0
- package/src/repl/agent-repl.js +5 -4
- package/src/repl/prompt-interactions.js +11 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-xkX6izBt.js +0 -1
- package/src/assets/web-panel/assets/devWarning-1DqLH1KX.js +0 -1
- package/src/assets/web-panel/assets/index-BhJtcPWo.js +0 -1
- package/src/assets/web-panel/assets/index-Cq8MWPDT.js +0 -1
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"lowcode": "Usage: chainlesschain lowcode [options] [command]\n\nLow-code application platform\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <name> Create a new low-code application\n list [options] List all low-code applications\n preview <app-id> Preview application info\n publish <app-id> Publish an application\n components [options] List available built-in components\n datasource [options] <app-id> <name> <type> Add a data source to an application\n versions [options] <app-id> Show version history for an application\n rollback <app-id> <version> Rollback application to a previous version\n export [options] <app-id> Export application definition\n categories [options] List component categories (V2)\n datasource-types [options] List supported data source types (V2)\n statuses [options] List canonical app statuses (V2)\n components-v2 [options] List built-in components with category filter (V2)\n datasource-v2 [options] <app-id> <name> <type> Register a validated data source (V2)\n test-connection [options] <datasource-id> Heuristic connection check for a data source (V2)\n set-status <app-id> <status> Update app status with validated transition (V2)\n archive <app-id> Archive an application (V2)\n status-history [options] <app-id> Show status transition history for an app (V2)\n clone [options] <source-id> Clone an application (V2)\n export-json [options] <app-id> Export an app as canonical JSON (V2)\n import-json <file> Import an app from a canonical JSON file (V2)\n stats-v2 [options] Low-code platform statistics (V2)\n deploy [options] <app-id> Deploy application as static HTML bundle\n enums-v2 Show V2 enums (app maturity + build lifecycle)\n config-v2 Show V2 config thresholds\n set-max-active-apps-v2 <n> Set max active apps per owner\n set-max-pending-builds-v2 <n> Set max pending builds per app\n set-app-idle-ms-v2 <n> Set app idle threshold (ms)\n set-build-stuck-ms-v2 <n> Set build stuck threshold (ms)\n register-app-v2 [options] <id> <owner> Register V2 app\n activate-app-v2 <id> Activate app\n pause-app-v2 <id> Pause app\n archive-app-v2 <id> Archive app (terminal)\n touch-app-v2 <id> Touch app lastTouchedAt\n get-app-v2 <id> Get V2 app\n list-apps-v2 List V2 apps\n create-build-v2 [options] <id> <appId> Create V2 app build (queued)\n start-build-v2 <id> Start build\n succeed-build-v2 <id> Succeed build\n fail-build-v2 <id> [reason] Fail build\n cancel-build-v2 <id> [reason] Cancel build\n get-build-v2 <id> Get V2 build\n list-builds-v2 List V2 builds\n auto-pause-idle-v2 Auto-pause idle active apps\n auto-fail-stuck-v2 Auto-fail stuck building builds\n gov-stats-v2 V2 governance aggregate stats\n help [command] display help for command\n",
|
|
89
89
|
"marketplace": "Usage: chainlesschain marketplace [options] [command]\n\nSkill marketplace — publish skill services, record invocations, view stats\n\nOptions:\n -h, --help display help for command\n\nCommands:\n status-types [options] List known service statuses\n invocation-statuses [options] List known invocation statuses\n publish [options] <name> Publish a skill service\n list [options] List skill services\n show [options] <service-id> Show full details of a skill service\n status [options] <service-id> <new-status> Transition service status (draft|published|deprecated|suspended)\n record [options] <service-id> Record a skill invocation against a published service\n invocations [options] List skill invocations\n stats [options] Aggregate invocation stats (optionally scoped to a service)\n service-statuses-v2 [options] List V2 service statuses (frozen enum)\n invocation-statuses-v2 [options] List V2 invocation statuses (frozen enum)\n pricing-models [options] List V2 pricing models (frozen enum)\n default-max-concurrent Show default per-service concurrency cap\n max-concurrent Show current per-service concurrency cap\n active-invocation-count [service-id] Show count of PENDING + RUNNING invocations (all services by default)\n set-max-concurrent <n> Set the per-service concurrency cap\n begin-v2 [options] <service-id> Begin a V2 invocation (creates PENDING, enforces cap)\n start-invocation [options] <invocation-id> Start a V2 invocation (PENDING → RUNNING)\n complete-invocation [options] <invocation-id> Complete a V2 invocation (RUNNING → SUCCESS)\n fail-invocation [options] <invocation-id> Fail a V2 invocation\n timeout-invocation [options] <invocation-id> Timeout a V2 invocation\n set-invocation-status [options] <invocation-id> <status> Set V2 invocation status via the state machine\n stats-v2 [options] V2 aggregated stats\n purchase [options] <itemId> Initiate a purchase. Large orders (≥ threshold) route through M-of-N multisig.\n consume [options] <proposalId> Execute a multisig-gated purchase after threshold reached (marks proposal consumed)\n help [command] display help for command\n",
|
|
90
90
|
"matrix": "Usage: chainlesschain matrix [options] [command]\n\nMatrix bridge — rooms, messaging, E2EE\n\nOptions:\n -h, --help display help for command\n\nCommands:\n login [options] Login to a Matrix homeserver\n rooms [options] List joined rooms\n send [options] <room-id> <message> Send a message to a room\n messages [options] <room-id> Get messages from a room\n join <room-id> Join a Matrix room\n thread Matrix threaded replies (m.thread\n relation)\n space Matrix Spaces — hierarchical room\n grouping (m.space)\n enums-v2 Show V2 enums\n register-room-v2 [options] Register a matrix room profile (pending)\n activate-room-v2 <id> Activate room\n mute-room-v2 <id> Mute room\n archive-room-v2 <id> Archive room (terminal)\n touch-room-v2 <id> Refresh lastTouchedAt\n get-room-v2 <id> Get a room\n list-rooms-v2 List rooms\n create-msg-v2 [options] Create a matrix message (queued)\n start-msg-v2 <id> Transition msg to sending\n deliver-msg-v2 <id> Transition msg to delivered\n fail-msg-v2 [options] <id> Fail msg\n cancel-msg-v2 [options] <id> Cancel msg\n get-msg-v2 <id> Get msg\n list-msgs-v2 List msgs\n set-max-active-rooms-v2 <n> Set per-owner active cap\n set-max-pending-msgs-v2 <n> Set per-room pending cap\n set-room-idle-ms-v2 <n> Set idle threshold\n set-msg-stuck-ms-v2 <n> Set stuck threshold\n auto-mute-idle-rooms-v2 Auto-mute idle rooms\n auto-fail-stuck-msgs-v2 Auto-fail stuck sending msgs\n stats-v2 V2 aggregate stats\n help [command] display help for command\n",
|
|
91
|
-
"mcp": "Usage: chainlesschain mcp [options] [command]\n\nMCP server management and tool execution\n\nOptions:\n -h, --help display help for command\n\nCommands:\n login [options] <target> Authorize a remote MCP server via OAuth (opens a browser, or prints the URL in headless/SSH environments); stores the token. <target> is a URL or a configured server name.\n logout <target> Delete the stored OAuth token for a remote MCP server (<target> is a URL or a configured server name)\n auth [options] List stored MCP OAuth tokens\n serve [options] Expose local file tools (read/list/search/write, root-confined) as a Streamable-HTTP MCP server for other clients\n computer-use [options] Expose GUI control (screenshot/window-list/click/type/scroll/clipboard/app-launch) as a Streamable-HTTP MCP server. OFF by default; input verbs need confirm:true; high-risk apps (terminals/IDEs/settings/password managers) always confirm\n servers|list [options] List configured MCP servers\n materialize-package [options] <name> Replace one exact JavaScript package launcher with a content-addressed, guarded dependency capsule\n trust-executable [options] <name> Review and trust the current executable and interpreter-entrypoint bytes for one stdio MCP server\n add [options] <name> Add or update an MCP server configuration\n remove [options] <name> Remove an MCP server configuration\n get [options] <name> Show one MCP server configuration and its source\n doctor [options] [name] Validate MCP configuration and test transport handshakes\n connect [options] <name> Connect to an MCP server\n disconnect <name> Disconnect from an MCP server\n tools [options] List available MCP tools\n call [options] <tool> Call an MCP tool\n resources [options] List resources exposed by MCP servers\n read-resource [options] <uri> Read an MCP resource by URI\n prompts [options] List prompts exposed by MCP servers\n get-prompt [options] <name> Fetch a rendered MCP prompt by name\n trust-helper [options] <name> Trust the exact headers helper command for a workspace-local MCP server\n trust-project [options] Re-trust the project .mcp.json after reviewing a content change (records its fingerprint for --project-mcp runs)\n scaffold [options] <name> Scaffold a new MCP server project (stdio or http+sse)\n registry Browse the curated catalog of community MCP servers\n server-maturities-v2 List MCP server maturity states (V2)\n invocation-lifecycle-v2 List MCP invocation lifecycle states (V2)\n stats-v2 Show MCP registry V2 stats\n config-v2 Show MCP registry V2 config\n register-server-v2 <id> <owner> <endpoint> Register an MCP server (V2)\n activate-server-v2 <id> Activate an MCP server (V2)\n degrade-server-v2 <id> Degrade an MCP server (V2)\n retire-server-v2 <id> Retire an MCP server (V2)\n touch-server-v2 <id> Touch an MCP server (V2)\n get-server-v2 <id> Get an MCP server (V2)\n list-servers-v2 List MCP servers (V2)\n create-invocation-v2 <id> <serverId> <tool> Create an MCP invocation (V2)\n dispatch-invocation-v2 <id> Dispatch an MCP invocation (V2)\n complete-invocation-v2 <id> Complete an MCP invocation (V2)\n fail-invocation-v2 <id> [reason] Fail an MCP invocation (V2)\n cancel-invocation-v2 <id> [reason] Cancel an MCP invocation (V2)\n get-invocation-v2 <id> Get an MCP invocation (V2)\n list-invocations-v2 List MCP invocations (V2)\n auto-degrade-idle-servers-v2 Auto-degrade idle MCP servers (V2)\n auto-fail-stuck-invocations-v2 Auto-fail stuck MCP invocations (V2)\n set-max-active-servers-v2 <n> Set max active servers per owner (V2)\n set-max-pending-invocations-v2 <n> Set max pending invocations per server (V2)\n set-server-idle-ms-v2 <n> Set MCP server idle timeout in ms (V2)\n set-invocation-stuck-ms-v2 <n> Set MCP invocation stuck timeout in ms (V2)\n reset-state-v2 Reset MCP registry V2 in-memory state\n help [command] display help for command\n",
|
|
91
|
+
"mcp": "Usage: chainlesschain mcp [options] [command]\n\nMCP server management and tool execution\n\nOptions:\n -h, --help display help for command\n\nCommands:\n login [options] <target> Authorize a remote MCP server via OAuth (opens a browser, or prints the URL in headless/SSH environments); stores the token. <target> is a URL or a configured server name.\n logout <target> Delete the stored OAuth token for a remote MCP server (<target> is a URL or a configured server name)\n auth [options] List stored MCP OAuth tokens\n serve [options] Expose local file tools (read/list/search/write, root-confined) as a Streamable-HTTP MCP server for other clients\n computer-use [options] Expose GUI control (screenshot/window-list/click/type/scroll/clipboard/app-launch) as a Streamable-HTTP MCP server. OFF by default; input verbs need confirm:true; high-risk apps (terminals/IDEs/settings/password managers) always confirm\n servers|list [options] List configured MCP servers\n materialize-package [options] <name> Replace one exact JavaScript package launcher with a content-addressed, guarded dependency capsule\n trust-executable [options] <name> Review and trust the current executable and interpreter-entrypoint bytes for one stdio MCP server\n add [options] <name> Add or update an MCP server configuration\n remove [options] <name> Remove an MCP server configuration\n get [options] <name> Show one MCP server configuration and its source\n doctor [options] [name] Validate MCP configuration and test transport handshakes\n connect [options] <name> Connect to an MCP server and verify its capabilities\n disconnect <name> Disconnect from an MCP server\n tools [options] List available MCP tools\n call [options] <tool> Call an MCP tool\n resources [options] List resources exposed by MCP servers\n read-resource [options] <uri> Read an MCP resource by URI\n prompts [options] List prompts exposed by MCP servers\n get-prompt [options] <name> Fetch a rendered MCP prompt by name\n trust-helper [options] <name> Trust the exact headers helper command for a workspace-local MCP server\n trust-project [options] Re-trust the project .mcp.json after reviewing a content change (records its fingerprint for --project-mcp runs)\n scaffold [options] <name> Scaffold a new MCP server project (stdio or http+sse)\n registry Browse the curated catalog of community MCP servers\n server-maturities-v2 List MCP server maturity states (V2)\n invocation-lifecycle-v2 List MCP invocation lifecycle states (V2)\n stats-v2 Show MCP registry V2 stats\n config-v2 Show MCP registry V2 config\n register-server-v2 <id> <owner> <endpoint> Register an MCP server (V2)\n activate-server-v2 <id> Activate an MCP server (V2)\n degrade-server-v2 <id> Degrade an MCP server (V2)\n retire-server-v2 <id> Retire an MCP server (V2)\n touch-server-v2 <id> Touch an MCP server (V2)\n get-server-v2 <id> Get an MCP server (V2)\n list-servers-v2 List MCP servers (V2)\n create-invocation-v2 <id> <serverId> <tool> Create an MCP invocation (V2)\n dispatch-invocation-v2 <id> Dispatch an MCP invocation (V2)\n complete-invocation-v2 <id> Complete an MCP invocation (V2)\n fail-invocation-v2 <id> [reason] Fail an MCP invocation (V2)\n cancel-invocation-v2 <id> [reason] Cancel an MCP invocation (V2)\n get-invocation-v2 <id> Get an MCP invocation (V2)\n list-invocations-v2 List MCP invocations (V2)\n auto-degrade-idle-servers-v2 Auto-degrade idle MCP servers (V2)\n auto-fail-stuck-invocations-v2 Auto-fail stuck MCP invocations (V2)\n set-max-active-servers-v2 <n> Set max active servers per owner (V2)\n set-max-pending-invocations-v2 <n> Set max pending invocations per server (V2)\n set-server-idle-ms-v2 <n> Set MCP server idle timeout in ms (V2)\n set-invocation-stuck-ms-v2 <n> Set MCP invocation stuck timeout in ms (V2)\n reset-state-v2 Reset MCP registry V2 in-memory state\n help [command] display help for command\n",
|
|
92
92
|
"mcpscaf": "Usage: chainlesschain mcpscaf [options] [command]\n\nMCP Scaffold V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n stale-profile-v2 <id>\n archive-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-generation-v2 [options] <id> <profileId>\n generating-generation-v2 <id>\n generate-generation-v2 <id>\n fail-generation-v2 <id> [reason]\n cancel-generation-v2 <id> [reason]\n get-generation-v2 <id>\n list-generations-v2\n auto-stale-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
|
|
93
93
|
"meminj": "Usage: chainlesschain meminj [options] [command]\n\nMemory Injection V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-rule-v2 [options] <id> <owner>\n activate-rule-v2 <id>\n pause-rule-v2 <id>\n archive-rule-v2 <id>\n touch-rule-v2 <id>\n get-rule-v2 <id>\n list-rules-v2\n create-injection-v2 [options] <id> <ruleId>\n injecting-injection-v2 <id>\n apply-injection-v2 <id>\n fail-injection-v2 <id> [reason]\n cancel-injection-v2 <id> [reason]\n get-injection-v2 <id>\n list-injections-v2\n auto-pause-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
|
|
94
94
|
"memory": "Usage: chainlesschain memory [options] [command]\n\nPersistent memory and daily notes\n\nOptions:\n -h, --help display help for command\n\nCommands:\n files [options] List the project-memory files cc agent\n auto-loads here (cc.md hierarchy + imports\n + path-scoped rules)\n show [options] Show memory entries\n export [options] Export all memory entries as JSON (module\n 101 §8.3 backup)\n import [options] Import memory entries from a JSON array\n file (idempotent upsert by id; §8.3)\n add [options] <text> Add a memory entry\n search [options] <query> Search memory entries\n delete <id> Delete a memory entry\n daily [options] [date] View or append to daily notes\n recall [options] [query] Recall scoped memory (session-core\n MemoryStore)\n store [options] <content> Write a scoped memory (session-core\n MemoryStore)\n consolidate [options] Consolidate a session's trace into scoped\n memory\n file [options] View or edit the long-term MEMORY.md file\n entry-maturities-v2 List V2 entry maturity states\n consolidation-lifecycles-v2 List V2 consolidation job lifecycle states\n stats-v2 Show V2 governance stats\n get-max-active-entries-v2 Get max active entries per category\n set-max-active-entries-v2 <n> Set max active entries per category\n get-max-running-jobs-v2 Get max running jobs per source\n set-max-running-jobs-v2 <n> Set max running jobs per source\n get-entry-idle-ms-v2 Get entry idle threshold (ms)\n set-entry-idle-ms-v2 <n> Set entry idle threshold (ms)\n get-job-stuck-ms-v2 Get job stuck threshold (ms)\n set-job-stuck-ms-v2 <n> Set job stuck threshold (ms)\n active-entry-count-v2 <category> Count active entries for a category\n running-job-count-v2 <source> Count running jobs for a source\n register-entry-v2 [options] <id> Register a V2 entry\n get-entry-v2 <id> Get a V2 entry\n list-entries-v2 [options] List V2 entries\n activate-entry-v2 <id> pending|parked → active\n park-entry-v2 <id> active → parked\n archive-entry-v2 <id> → archived (terminal)\n touch-entry-v2 <id> Update lastSeenAt\n create-job-v2 [options] <id> Create a V2 consolidation job\n get-job-v2 <id> Get a V2 consolidation job\n list-jobs-v2 [options] List V2 consolidation jobs\n start-job-v2 <id> queued → running\n succeed-job-v2 <id> running → succeeded (terminal)\n fail-job-v2 <id> running → failed (terminal)\n cancel-job-v2 <id> queued|running → cancelled (terminal)\n auto-park-idle-entries-v2 Flip idle active entries → parked\n auto-fail-stuck-jobs-v2 Flip stuck running jobs → failed\n help [command] display help for command\n",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"note": "Usage: chainlesschain note [options] [command]\n\nNote and knowledge base management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n add [options] <title> Add a new note\n list [options] List notes\n show [options] <id> Show note content\n search [options] <query> Search notes\n delete [options] <id> Delete a note (soft delete)\n history [options] <id> Show version history for a note\n diff [options] <id> <v1> <v2> Show diff between two versions of a note\n revert [options] <id> <version> Revert a note to a specific version\n note-maturities-v2 List V2 note maturity states\n revision-lifecycles-v2 List V2 revision lifecycle states\n stats-v2 Show V2 governance stats\n get-max-active-notes-v2 Get max active notes per author\n set-max-active-notes-v2 <n> Set max active notes per author\n get-max-open-revs-v2 Get max open revisions per note\n set-max-open-revs-v2 <n> Set max open revisions per note\n get-note-idle-ms-v2 Get note idle threshold (ms)\n set-note-idle-ms-v2 <n> Set note idle threshold (ms)\n get-rev-stuck-ms-v2 Get revision stuck threshold (ms)\n set-rev-stuck-ms-v2 <n> Set revision stuck threshold (ms)\n active-note-count-v2 <authorId> Count active notes for an author\n open-rev-count-v2 <noteId> Count open revisions for a note\n register-note-v2 [options] <id> Register a V2 note\n get-note-v2 <id> Get a V2 note\n list-notes-v2 [options] List V2 notes\n activate-note-v2 <id> draft|locked → active\n lock-note-v2 <id> active → locked\n archive-note-v2 <id> → archived (terminal)\n touch-note-v2 <id> Update lastSeenAt\n create-revision-v2 [options] <id> Create a V2 revision\n get-revision-v2 <id> Get a V2 revision\n list-revisions-v2 [options] List V2 revisions\n review-revision-v2 <id> proposed → reviewed\n apply-revision-v2 <id> reviewed → applied (non-terminal)\n supersede-revision-v2 <id> reviewed|applied → superseded (terminal)\n discard-revision-v2 <id> → discarded (terminal)\n auto-lock-idle-notes-v2 Flip idle active notes → locked\n auto-discard-stale-revisions-v2 Flip stale proposed/reviewed → discarded\n help [command] display help for command\n",
|
|
101
101
|
"notification": "Usage: chainlesschain notification|notif [options] [command]\n\nPush notifications to paired mobile devices\n\nOptions:\n -h, --help display help for command\n\nCommands:\n send [options] Send a push notification to a paired iPhone/Android\n help [command] display help for command\n",
|
|
102
102
|
"ops": "Usage: chainlesschain ops [options] [command]\n\nAutonomous operations / AIOps\n\nOptions:\n -h, --help display help for command\n\nCommands:\n severities [options] List severity levels\n statuses [options] List incident statuses\n algorithms [options] List detection algorithms\n rollback-types [options] List rollback types\n baseline-update [options] <metric> Update metric baseline from values\n baseline-show [options] <metric> Show metric baseline\n baselines [options] List metric baselines\n detect [options] <metric> <value> Detect anomaly for a metric value\n incident-create [options] Create an incident manually\n incident-show [options] <id> Show incident details\n incident-ack [options] <id> Acknowledge an incident\n incident-resolve [options] <id> Resolve an incident\n incident-close [options] <id> Close a resolved incident\n incidents [options] List incidents\n playbook-create [options] Create remediation playbook\n playbook-show [options] <id> Show playbook details\n playbook-toggle [options] <id> <on|off> Enable or disable a playbook\n playbook-record [options] <id> <success|failure> Record playbook execution result\n playbooks [options] List playbooks\n postmortem [options] <id> Generate postmortem for resolved incident\n stats [options] AIOps statistics\n playbook-maturities-v2 [options] List playbook V2 maturity states\n remediation-lifecycles-v2 [options] List remediation V2 lifecycle states\n default-max-active-playbooks-per-owner Show default max-active-playbooks-per-owner\n max-active-playbooks-per-owner Show current max-active-playbooks-per-owner\n set-max-active-playbooks-per-owner <n> Set max-active-playbooks-per-owner\n default-max-pending-remediations-per-owner Show default max-pending-remediations-per-owner\n max-pending-remediations-per-owner Show current max-pending-remediations-per-owner\n set-max-pending-remediations-per-owner <n> Set max-pending-remediations-per-owner\n default-playbook-stale-ms Show default playbook-stale-ms\n playbook-stale-ms Show current playbook-stale-ms\n set-playbook-stale-ms <ms> Set playbook-stale-ms\n default-remediation-timeout-ms Show default remediation-timeout-ms\n remediation-timeout-ms Show current remediation-timeout-ms\n set-remediation-timeout-ms <ms> Set remediation-timeout-ms\n active-playbook-count [options] Active playbook count (optionally scoped by owner)\n pending-remediation-count [options] Pending/executing remediation count (optionally scoped by owner)\n register-playbook-v2 [options] <playbook-id> Register a V2 playbook\n playbook-v2 <playbook-id> Get V2 playbook record\n set-playbook-maturity-v2 [options] <playbook-id> <status> Set playbook V2 maturity status\n activate-playbook [options] <playbook-id> Transition playbook → active\n deprecate-playbook-v2 [options] <playbook-id> Transition playbook → deprecated\n retire-playbook [options] <playbook-id> Transition playbook → retired (terminal)\n touch-playbook-activity <playbook-id> Bump lastUsedAt for a playbook\n submit-remediation-v2 [options] <remediation-id> Submit a V2 remediation\n remediation-v2 <remediation-id> Get V2 remediation record\n set-remediation-status-v2 [options] <remediation-id> <status> Set remediation V2 status\n start-remediation [options] <remediation-id> Transition remediation → executing\n complete-remediation [options] <remediation-id> Transition remediation → succeeded (terminal)\n fail-remediation [options] <remediation-id> Transition remediation → failed (terminal)\n abort-remediation [options] <remediation-id> Transition remediation → aborted (terminal)\n auto-retire-stale-playbooks Bulk-flip stale playbooks → retired\n auto-timeout-stuck-remediations Bulk-flip stuck executing remediations → failed\n stats-v2 [options] Show V2 AIOps stats (all-enum-key)\n help [command] display help for command\n",
|
|
103
|
-
"orchestrate": "Usage: chainlesschain orchestrate [options] [task]\n\nOrchestrate AI coding tasks: ChainlessChain → Claude Code/Codex agents → CI/CD\n→ Notify\n\nOptions:\n -a, --agents <n>
|
|
103
|
+
"orchestrate": "Usage: chainlesschain orchestrate [options] [task]\n\nOrchestrate AI coding tasks: ChainlessChain → Claude Code/Codex agents → CI/CD\n→ Notify\n\nOptions:\n -a, --agents <n> Max parallel agents (default: \"3\")\n --ci <command> CI command to run after agents complete\n (default: \"npm test\")\n --no-ci Skip CI/CD verification step\n --source <type> Input source:\n cli|sentry|github|file|wecom|dingtalk|feishu\n (default: \"cli\")\n --file <path> Read task from file (use with --source file)\n --context <text> Extra context for the task (e.g. stack trace)\n --cwd <path> Project root directory (default: current dir)\n --provider <name> LLM provider for decomposition\n --model <name> Model for decomposition LLM calls\n --cli-tool <name> Execution CLI: claude|codex (auto-detected)\n --backends <list> Agent backends:\n claude,codex,gemini,openai,ollama\n (comma-separated)\n --strategy <name> Agent routing:\n round-robin|by-type|parallel-all|primary\n (default: \"round-robin\")\n --retries <n> Max CI retry cycles (default: \"3\")\n --timeout <sec> Per-agent timeout in seconds (default: \"300\")\n --no-notify Disable notifications\n --status Show orchestrator and agent pool status\n --watch Start cron watch mode\n --interval <min> Cron interval in minutes (watch mode) (default:\n \"10\")\n --webhook Start HTTP webhook server for IM platform\n commands\n --webhook-port <port> Webhook server port (default: \"18820\")\n --webhook-secret-env <name> Environment variable containing the webhook\n HMAC secret (default:\n \"CC_ORCHESTRATE_WEBHOOK_SECRET\")\n --webhook-max-body-bytes <n> Maximum authenticated webhook request body\n (default: \"262144\")\n --webhook-rate-limit <n> Maximum webhook requests per source and minute\n (default: \"30\")\n --json Output as JSON\n --verbose Verbose output\n -h, --help display help for command\n",
|
|
104
104
|
"orchgov": "Usage: chainlesschain orchgov [options] [command]\n\nOrchestrator V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n pause-profile-v2 <id>\n retire-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-task-v2 [options] <id> <profileId>\n dispatch-task-v2 <id>\n complete-task-v2 <id>\n fail-task-v2 <id> [reason]\n cancel-task-v2 <id> [reason]\n get-task-v2 <id>\n list-tasks-v2\n auto-pause-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
|
|
105
105
|
"org": "Usage: chainlesschain org [options] [command]\n\nOrganization, team, and approval management\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <name> Create a new organization\n list [options] List all organizations\n show [options] <org-id> Show organization details\n delete [options] <org-id> Delete an organization\n invite [options] <org-id> <user-id> Invite a member to an organization\n members [options] <org-id> List organization members\n team-create [options] <org-id> <team-name> Create a team\n teams [options] <org-id> List teams in an organization\n approval-submit [options] <org-id> <title> Submit an approval request\n approvals [options] List approval requests\n approve [options] <approval-id> Approve a request\n reject [options] <approval-id> Reject a request\n maturities-v2 List org maturity states (V2)\n member-lifecycles-v2 List member lifecycle states (V2)\n stats-v2 Show V2 org/member stats\n max-active-orgs-per-owner [n] Get/set max active orgs per owner (V2)\n max-active-members-per-org [n] Get/set max active members per org (V2)\n org-idle-ms [ms] Get/set org idle window ms (V2)\n invite-stale-ms [ms] Get/set invite stale window ms (V2)\n active-org-count-v2 <owner> Count active orgs for owner (V2)\n active-member-count-v2 <orgId> Count active members for org (V2)\n register-org-v2 [options] <id> Register a new provisional org (V2)\n org-v2 <id> Show org by id (V2)\n list-orgs-v2 [options] List orgs (V2)\n set-org-maturity-v2 <id> <next> Transition org maturity (V2)\n activate-org-v2 <id> Activate org (V2)\n suspend-org-v2 <id> Suspend org (V2)\n archive-org-v2 <id> Archive org terminally (V2)\n touch-org-v2 <id> Update org lastSeenAt (V2)\n invite-member-v2 [options] <id> Invite a member to an org (V2)\n member-v2 <id> Show member by id (V2)\n list-members-v2 [options] List members (V2)\n set-member-status-v2 <id> <next> Transition member status (V2)\n activate-member-v2 <id> Activate member (V2)\n suspend-member-v2 <id> Suspend member (V2)\n revoke-member-v2 <id> Revoke member terminally (V2)\n depart-member-v2 <id> Depart member terminally (V2)\n auto-archive-idle-orgs Auto-archive non-provisional orgs idle past window (V2)\n auto-revoke-stale-invites Auto-revoke invited members stale past window (V2)\n help [command] display help for command\n",
|
|
106
106
|
"output-style": "Usage: chainlesschain output-style|output-styles [options] [command]\n\nList / show agent output-style personas\n\nOptions:\n -h, --help display help for command\n\nCommands:\n list|ls [options] List built-in + .claude/output-styles/*.md personas\n show [options] <name> Show a style's metadata and body\n new [options] <name> Scaffold a new style under .claude/output-styles/\n help [command] display help for command\n",
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
"sandbox": "Usage: chainlesschain sandbox [options] [command]\n\nSecurity sandbox v2 — isolated agent execution environments\n\nOptions:\n -h, --help display help for command\n\nCommands:\n create [options] <agent-id> Create a new sandbox for an agent\n exec [options] <sandbox-id> <code> Execute code within a sandbox\n destroy [options] <sandbox-id> Destroy a sandbox\n list [options] List active sandboxes\n audit [options] [sandbox-id] Show audit log for sandboxes\n quota [options] <sandbox-id> Show or set sandbox quota\n monitor [options] <sandbox-id> Monitor sandbox behavior and detect suspicious patterns\n prune [options] Destroy sandboxes whose ttl or idle-ttl has expired (Phase 4)\n statuses [options] List sandbox lifecycle status enum values (Phase 87)\n permission-types [options] List permission type enum values (Phase 87)\n risk-levels [options] List risk level enum values (Phase 87)\n quota-types [options] List quota type enum values (Phase 87)\n pause [options] <id> Pause a running sandbox (Phase 87)\n resume [options] <id> Resume a paused sandbox (Phase 87)\n terminate [options] <id> Terminate a sandbox (Phase 87 canonical; more explicit than destroy)\n set-quota-typed [options] <id> <type> <limit> Set a single quota by type (Phase 87)\n check-permission [options] <id> <type> <target> Check whether a sandbox may perform a permission op (Phase 87)\n check-quota [options] <id> <type> [amount] Check quota availability for a type (Phase 87)\n risk-score [options] <id> Compute risk score + risk level for a sandbox (Phase 87)\n risk-level [options] <score> Map a risk score to a RISK_LEVEL bucket (Phase 87)\n auto-isolate [options] <id> Auto-isolate a sandbox: record + terminate (Phase 87)\n isolations [options] List isolation records (Phase 87)\n audit-filter [options] [id] Filter audit log by event types / time range (Phase 87)\n stats-v2 [options] Extended V2 stats (byStatus / auditByAction / isolations) (Phase 87)\n help [command] display help for command\n",
|
|
135
135
|
"scim": "Usage: chainlesschain scim [options] [command]\n\nSCIM provisioning — user management, connectors, sync\n\nOptions:\n -h, --help display help for command\n\nCommands:\n users SCIM user management\n connectors [options] List SCIM connectors\n sync <connector-id> Trigger SCIM provisioning sync\n status [options] Show SCIM provisioning status\n identity-lifecycles-v2 [options] List V2 identity lifecycle states\n sync-lifecycles-v2 [options] List V2 sync-job lifecycle states\n stats-v2 [options] Show V2 SCIM stats\n get-max-provisioned-v2 Get max provisioned identities per\n connector\n set-max-provisioned-v2 <n> Set max provisioned identities per\n connector\n get-max-running-sync-v2 Get max running sync jobs per connector\n set-max-running-sync-v2 <n> Set max running sync jobs per connector\n get-identity-idle-ms-v2 Get identity idle ms\n set-identity-idle-ms-v2 <ms> Set identity idle ms\n get-sync-stuck-ms-v2 Get sync-job stuck ms\n set-sync-stuck-ms-v2 <ms> Set sync-job stuck ms\n provisioned-count-v2 <connectorId> Count provisioned identities for\n connector\n running-sync-count-v2 <connectorId> Count running sync jobs for connector\n register-identity-v2 [options] <id> Register V2 identity (initial=pending)\n get-identity-v2 <id> Get V2 identity by id\n list-identities-v2 [options] List V2 identities\n provision-identity-v2 <id> Transition identity → provisioned\n suspend-identity-v2 <id> Transition identity → suspended\n deprovision-identity-v2 <id> Transition identity → deprovisioned\n (terminal)\n touch-identity-v2 <id> Update identity lastSeenAt\n create-sync-job-v2 [options] <id> Create V2 sync job (initial=queued)\n get-sync-job-v2 <id> Get V2 sync job by id\n list-sync-jobs-v2 [options] List V2 sync jobs\n start-sync-job-v2 <id> Transition sync job → running\n succeed-sync-job-v2 <id> Transition sync job → succeeded\n (terminal)\n fail-sync-job-v2 <id> Transition sync job → failed (terminal)\n cancel-sync-job-v2 <id> Transition sync job → cancelled\n (terminal)\n auto-deprovision-idle-v2 Auto-deprovision idle identities; output\n flipped\n auto-fail-stuck-sync-v2 Auto-fail stuck running syncs; output\n flipped\n help [command] display help for command\n",
|
|
136
136
|
"search": "Usage: chainlesschain search [options] <query>\n\nSearch knowledge base (BM25 + vector hybrid)\n\nArguments:\n query Search query\n\nOptions:\n --mode <mode> Search mode: bm25, vector, hybrid (default: \"hybrid\")\n --top-k <n> Number of results (default: \"10\")\n --threshold <n> Minimum score threshold (default: \"0\")\n --json Output as JSON\n -h, --help display help for command\n",
|
|
137
|
-
"serve": "Usage: chainlesschain serve [options]\n\nStart WebSocket server for remote CLI access\n\nOptions:\n -p, --port <port> Port number (default: \"18800\")\n -H, --host <host> Bind host (default: \"127.0.0.1\")\n --token <token> Authentication token (required for remote\n access)\n --max-connections <n> Maximum concurrent connections (default:\n \"10\")\n --timeout <ms> Command execution timeout in milliseconds\n (default: \"30000\")\n --allow-remote Allow non-localhost connections (requires\n --token)\n --project <path> Default project root for sessions\n --remote-session-relay-url <url> Signaling relay URL for Remote Session\n pairing\n --remote-session-peer-id <id> Stable relay peer ID for this local runtime\n --http-port <port> Hosted HTTP port for Phase 5 envelope SSE\n (disabled if unset)\n --bundle <path> Agent bundle directory; may execute local\n MCP commands from mcp.json\n -h, --help display help for command\n",
|
|
137
|
+
"serve": "Usage: chainlesschain serve [options]\n\nStart WebSocket server for remote CLI access\n\nOptions:\n --app-server Run the canonical CC App Server over stdio\n instead of the legacy WebSocket server\n --app-server-state-dir <path> Owner-controlled rollout directory for\n --app-server\n --app-server-queue-cap <n> Maximum queued App Server requests\n (default: \"256\")\n -p, --port <port> Port number (default: \"18800\")\n -H, --host <host> Bind host (default: \"127.0.0.1\")\n --token <token> Authentication token (required for remote\n access)\n --max-connections <n> Maximum concurrent connections (default:\n \"10\")\n --timeout <ms> Command execution timeout in milliseconds\n (default: \"30000\")\n --allow-remote Allow non-localhost connections (requires\n --token)\n --project <path> Default project root for sessions\n --remote-session-relay-url <url> Signaling relay URL for Remote Session\n pairing\n --remote-session-peer-id <id> Stable relay peer ID for this local runtime\n --http-port <port> Hosted HTTP port for Phase 5 envelope SSE\n (disabled if unset)\n --bundle <path> Agent bundle directory; may execute local\n MCP commands from mcp.json\n -h, --help display help for command\n",
|
|
138
138
|
"services": "Usage: chainlesschain services [options] [command]\n\nManage Docker backend services\n\nOptions:\n -h, --help display help for command\n\nCommands:\n up [services...] Start Docker services\n down Stop Docker services\n logs [options] [services...] View service logs\n pull Pull latest service images\n help [command] display help for command\n",
|
|
139
139
|
"seshhook": "Usage: chainlesschain seshhook [options] [command]\n\nSession Hooks V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n disable-profile-v2 <id>\n retire-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-invocation-v2 [options] <id> <profileId>\n running-invocation-v2 <id>\n complete-invocation-v2 <id>\n fail-invocation-v2 <id> [reason]\n cancel-invocation-v2 <id> [reason]\n get-invocation-v2 <id>\n list-invocations-v2\n auto-disable-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
|
|
140
140
|
"seshsearch": "Usage: chainlesschain seshsearch [options] [command]\n\nSession Search V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-profile-v2 [options] <id> <owner>\n activate-profile-v2 <id>\n stale-profile-v2 <id>\n archive-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-query-v2 [options] <id> <profileId>\n searching-query-v2 <id>\n complete-query-v2 <id>\n fail-query-v2 <id> [reason]\n cancel-query-v2 <id> [reason]\n get-query-v2 <id>\n list-queries-v2\n auto-stale-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"subagent": "Usage: chainlesschain subagent [options] [command]\n\nSub-agent registry V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n maturities-v2\n task-lifecycle-v2\n stats-v2\n config-v2\n register-profile-v2 <id> <owner> [role]\n activate-profile-v2 <id>\n pause-profile-v2 <id>\n retire-profile-v2 <id>\n touch-profile-v2 <id>\n get-profile-v2 <id>\n list-profiles-v2\n create-task-v2 <id> <profileId> [desc]\n start-task-v2 <id>\n complete-task-v2 <id>\n fail-task-v2 <id> [reason]\n cancel-task-v2 <id> [reason]\n get-task-v2 <id>\n list-tasks-v2\n auto-pause-idle-v2\n auto-fail-stuck-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n reset-state-v2\n help [command] display help for command\n",
|
|
159
159
|
"svccont": "Usage: chainlesschain svccont [options] [command]\n\nService Container V2 governance\n\nOptions:\n -h, --help display help for command\n\nCommands:\n enums-v2\n config-v2\n set-max-active-v2 <n>\n set-max-pending-v2 <n>\n set-idle-ms-v2 <n>\n set-stuck-ms-v2 <n>\n register-container-v2 [options] <id> <owner>\n activate-container-v2 <id>\n degrade-container-v2 <id>\n decommission-container-v2 <id>\n touch-container-v2 <id>\n get-container-v2 <id>\n list-containers-v2\n create-resolution-v2 [options] <id> <containerId>\n resolving-resolution-v2 <id>\n resolve-resolution-v2 <id>\n fail-resolution-v2 <id> [reason]\n cancel-resolution-v2 <id> [reason]\n get-resolution-v2 <id>\n list-resolutions-v2\n auto-degrade-idle-v2\n auto-fail-stuck-v2\n gov-stats-v2\n reset-state-v2\n help [command] display help for command\n",
|
|
160
160
|
"sync": "Usage: chainlesschain sync [options] [command]\n\nFile and knowledge synchronization\n\nOptions:\n -h, --help display help for command\n\nCommands:\n status [options] Show sync status\n push [options] Push local changes to remote\n pull [options] Pull remote changes to local\n conflicts [options] Show sync conflicts\n resolve [options] <conflict-id> Resolve a sync conflict\n log [options] Show sync operation log\n clear [options] Clear all sync data\n resource-maturities-v2 [options] List V2 resource maturity states\n run-lifecycles-v2 [options] List V2 sync-run lifecycle states\n stats-v2 [options] Show V2 sync stats\n get-max-active-resources-v2 Get max active resources per owner\n set-max-active-resources-v2 <n> Set max active resources per owner\n get-max-running-runs-v2 Get max running runs per resource\n set-max-running-runs-v2 <n> Set max running runs per resource\n get-resource-idle-ms-v2 Get resource idle ms\n set-resource-idle-ms-v2 <ms> Set resource idle ms\n get-run-stuck-ms-v2 Get run stuck ms\n set-run-stuck-ms-v2 <ms> Set run stuck ms\n active-resource-count-v2 <owner> Count active resources for owner\n running-run-count-v2 <resourceId> Count running runs for resource\n register-resource-v2 [options] <id> Register V2 resource (initial=pending)\n get-resource-v2 <id> Get V2 resource by id\n list-resources-v2 [options] List V2 resources\n activate-resource-v2 <id> Transition resource → active\n pause-resource-v2 <id> Transition resource → paused\n archive-resource-v2 <id> Transition resource → archived\n (terminal)\n touch-resource-v2 <id> Update resource lastSeenAt\n create-sync-run-v2 [options] <id> Create V2 sync run (initial=queued)\n get-sync-run-v2 <id> Get V2 sync run by id\n list-sync-runs-v2 [options] List V2 sync runs\n start-sync-run-v2 <id> Transition sync run → running\n succeed-sync-run-v2 <id> Transition sync run → succeeded\n (terminal)\n fail-sync-run-v2 <id> Transition sync run → failed (terminal)\n cancel-sync-run-v2 <id> Transition sync run → cancelled\n (terminal)\n auto-archive-idle-v2 Auto-archive idle resources; output\n flipped\n auto-fail-stuck-runs-v2 Auto-fail stuck running syncs; output\n flipped\n help [command] display help for command\n",
|
|
161
|
-
"team": "Usage: chainlesschain team [options] [command]\n\nRun a declared task graph across N teammates (exclusive leases + dependency\nDAG)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n queue Coordinate durable multi-process worktree\n teammates\n merge-review Review, atomically publish, and safely roll back\n multi-agent branches\n control-bindings [options] Show state/attempt/adjudication CAS values for\n durable human control\n plan [options] Show the topological wave schedule for a task\n graph (no run)\n adjudications [options] List durable side-effect adjudication cases for a\n team state\n interrupt [options] Request durable human takeover of an active team\n task\n adjudicate [options] Apply a one-shot retry/accept/cancel decision to\n an ambiguous task\n run [options] Run a task graph with N cooperating teammates\n help [command] display help for command\n",
|
|
161
|
+
"team": "Usage: chainlesschain team [options] [command]\n\nRun a declared task graph across N teammates (exclusive leases + dependency\nDAG)\n\nOptions:\n -h, --help display help for command\n\nCommands:\n queue Coordinate durable multi-process worktree\n teammates\n merge-review Review, atomically publish, and safely roll back\n multi-agent branches\n graph Inspect, time-travel, diff, and evaluate\n canonical GraphRuns\n control-bindings [options] Show state/attempt/adjudication CAS values for\n durable human control\n plan [options] Show the topological wave schedule for a task\n graph (no run)\n adjudications [options] List durable side-effect adjudication cases for a\n team state\n interrupt [options] Request durable human takeover of an active team\n task\n adjudicate [options] Apply a one-shot retry/accept/cancel decision to\n an ambiguous task\n run [options] Run a task graph with N cooperating teammates\n help [command] display help for command\n",
|
|
162
162
|
"tech": "Usage: chainlesschain tech [options] [command]\n\nTech Learning Engine — stack analysis, anti-pattern detection, practice store\n\nOptions:\n -h, --help display help for command\n\nCommands:\n types [options] List known tech types, practice levels, anti-patterns\n analyze [options] [path] Analyze tech stack of a project directory\n profile [options] [path] Show the last analyzed profile for a path\n detect [options] <file> Detect anti-patterns in a single file\n practice [options] <tech-type> <tech-name> <pattern> <level> Record a learned practice (tech-type: language|framework|library|database|tool|pattern)\n practices [options] List recorded practices\n recommend [options] Recommend practices based on the analyzed stack\n profile-maturities-v2 List profile maturity states (V2)\n learning-runs-v2 List learning run states (V2)\n stats-v2 Tech Learning V2 stats\n max-active-profiles-per-owner [options] Get/set max active profiles per owner (V2)\n max-studying-runs-per-learner [options] Get/set max studying runs per learner (V2)\n profile-stale-ms [options] Get/set profile stale threshold ms (V2)\n run-stuck-ms [options] Get/set run stuck threshold ms (V2)\n active-profile-count [options] Count active+stale profiles for owner (V2)\n studying-run-count [options] Count studying runs for learner (V2)\n create-profile-v2 [options] <id> Create a profile V2 (draft)\n profile-v2 <id> Show profile V2\n list-profiles-v2 [options] List profiles V2\n set-profile-maturity-v2 [options] <id> <status> Transition profile V2 to status\n activate-profile [options] <id> Transition profile → active (V2)\n mark-profile-stale [options] <id> Transition profile → stale (V2)\n archive-profile [options] <id> Transition profile → archived (V2)\n touch-profile <id> Update lastTouchedAt (V2)\n enqueue-run-v2 [options] <id> Enqueue a learning run (V2)\n run-v2 <id> Show learning run V2\n list-runs-v2 [options] List learning runs V2\n set-run-status-v2 [options] <id> <status> Transition run V2 to status\n start-run-v2 [options] <id> Transition run → studying (V2)\n complete-run-v2 [options] <id> Transition run → completed (V2)\n fail-run-v2 [options] <id> Transition run → failed (V2)\n abandon-run-v2 [options] <id> Transition run → abandoned (V2)\n auto-mark-stale-profiles Bulk auto-flip active→stale past threshold (V2)\n auto-fail-stuck-runs Bulk auto-fail studying runs past threshold (V2)\n help [command] display help for command\n",
|
|
163
163
|
"tenant": "Usage: chainlesschain tenant [options] [command]\n\nMulti-tenant SaaS — tenants, usage metering, subscriptions, quotas\n\nOptions:\n -h, --help display help for command\n\nCommands:\n plans [options] List available subscription plans\n metrics [options] List tracked usage metrics\n create [options] <name> <slug> Create a tenant\n configure [options] <tenant-id> Update tenant config / plan / status / name\n list [options] List tenants\n show [options] <tenant-id> Show tenant details\n delete [options] <tenant-id> Delete a tenant (soft by default; --hard cascades everything)\n record [options] <tenant-id> <metric> <value> Record a usage sample\n usage [options] <tenant-id> Aggregate usage for a tenant\n subscribe [options] <tenant-id> Start a new subscription (cancels any prior active one)\n subscription [options] <tenant-id> Show the active subscription for a tenant\n cancel <tenant-id> Cancel the active subscription\n subscriptions [options] List subscriptions\n check-quota [options] <tenant-id> <metric> Check a tenant's quota usage against their active plan\n stats [options] SaaS-wide statistics\n export <tenant-id> [output-file] Export tenant + subscriptions + usage as JSON\n import <input-file> Import tenant snapshot from JSON file\n maturities-v2 [options] List tenant V2 maturity states\n subscription-lifecycles-v2 [options] List subscription V2 lifecycle states\n default-max-active-tenants-per-plan Show default max-active-tenants-per-plan\n max-active-tenants-per-plan Show current max-active-tenants-per-plan\n set-max-active-tenants-per-plan <n> Set max-active-tenants-per-plan\n default-max-subscriptions-per-tenant Show default max-subscriptions-per-tenant\n max-subscriptions-per-tenant Show current max-subscriptions-per-tenant\n set-max-subscriptions-per-tenant <n> Set max-subscriptions-per-tenant\n default-tenant-idle-ms Show default tenant-idle-ms\n tenant-idle-ms Show current tenant-idle-ms\n set-tenant-idle-ms <ms> Set tenant-idle-ms\n default-past-due-grace-ms Show default past-due-grace-ms\n past-due-grace-ms Show current past-due-grace-ms\n set-past-due-grace-ms <ms> Set past-due-grace-ms\n active-tenant-count [options] Active tenant count (optionally scoped by plan)\n open-subscription-count [options] Open subscription count (optionally scoped by tenant)\n register-v2 [options] <tenant-id> Register a V2 tenant\n tenant-v2 <tenant-id> Get V2 tenant record\n set-maturity-v2 [options] <tenant-id> <status> Set tenant V2 maturity status\n activate [options] <tenant-id> Transition tenant → active\n suspend [options] <tenant-id> Transition tenant → suspended\n archive-v2 [options] <tenant-id> Transition tenant → archived\n cancel-tenant [options] <tenant-id> Transition tenant → cancelled (terminal)\n touch-activity <tenant-id> Bump lastActivityAt for a tenant\n subscription-register-v2 [options] <subscription-id> Register a V2 subscription\n subscription-v2 <subscription-id> Get V2 subscription record\n set-subscription-status-v2 [options] <subscription-id> <status> Set subscription V2 status\n activate-subscription [options] <subscription-id> Transition subscription → active\n mark-past-due [options] <subscription-id> Transition subscription → past_due\n cancel-subscription-v2 [options] <subscription-id> Transition subscription → cancelled (terminal)\n expire-subscription [options] <subscription-id> Transition subscription → expired (terminal)\n auto-archive-idle-tenants Bulk-flip idle tenants → archived\n auto-expire-past-due-subscriptions Bulk-flip past-due subscriptions past grace → expired\n stats-v2 [options] Show V2 SaaS stats (all-enum-key)\n help [command] display help for command\n",
|
|
164
164
|
"terminal-setup": "Usage: chainlesschain terminal-setup [options]\n\nBind Shift+Enter to a REPL newline (Claude-Code parity)\n\nOptions:\n --apply Write the keybinding (VS Code only; otherwise prints steps)\n -h, --help display help for command\n",
|
package/src/commands/agent.js
CHANGED
|
@@ -231,7 +231,7 @@ export function resolveAgentObservabilityScope(options = {}) {
|
|
|
231
231
|
export function registerAgentCommand(program) {
|
|
232
232
|
program
|
|
233
233
|
.command("agent")
|
|
234
|
-
.
|
|
234
|
+
.aliases(["a", "exec"])
|
|
235
235
|
.description(
|
|
236
236
|
"Start an agentic AI session (reads/writes files, runs commands)",
|
|
237
237
|
)
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { JsonlRolloutStore } from "../lib/app-server/rollout-store.js";
|
|
3
|
+
import {
|
|
4
|
+
GraphEventStore,
|
|
5
|
+
defaultGraphEventStoreDirectory,
|
|
6
|
+
} from "../lib/graph-kernel/event-store.js";
|
|
7
|
+
import {
|
|
8
|
+
diffGraphTrace,
|
|
9
|
+
locateBlockedRoot,
|
|
10
|
+
reduceGraphTrace,
|
|
11
|
+
timeTravelGraphTrace,
|
|
12
|
+
} from "../lib/graph-kernel/trace-reducer.js";
|
|
13
|
+
import {
|
|
14
|
+
enforceGraphEvalThresholds,
|
|
15
|
+
evaluateGraphProjection,
|
|
16
|
+
} from "../lib/graph-kernel/eval.js";
|
|
17
|
+
|
|
18
|
+
function store(directory) {
|
|
19
|
+
return new GraphEventStore({
|
|
20
|
+
rolloutStore: new JsonlRolloutStore({
|
|
21
|
+
directory: path.resolve(directory || defaultGraphEventStoreDirectory()),
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function print(value) {
|
|
27
|
+
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function registerGraphCommand(program) {
|
|
31
|
+
const graph = program
|
|
32
|
+
.command("graph")
|
|
33
|
+
.description(
|
|
34
|
+
"Inspect, time-travel, diff, and evaluate canonical GraphRuns",
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
graph
|
|
38
|
+
.command("inspect <runId>")
|
|
39
|
+
.description(
|
|
40
|
+
"Project a durable GraphRun into Agent/Task/Artifact/Trace views",
|
|
41
|
+
)
|
|
42
|
+
.option("--state-dir <path>", "Graph rollout directory")
|
|
43
|
+
.option("--at-seq <n>", "Time-travel through a durable event sequence")
|
|
44
|
+
.option("--blocked-root <nodeId>", "Locate a deterministic blocked root")
|
|
45
|
+
.option("--include-content", "Include message and HumanTask content")
|
|
46
|
+
.action((runId, options) => {
|
|
47
|
+
const events = store(options.stateDir).read(runId);
|
|
48
|
+
const projection = options.atSeq
|
|
49
|
+
? timeTravelGraphTrace(events, Number(options.atSeq), {
|
|
50
|
+
includeContent: options.includeContent === true,
|
|
51
|
+
})
|
|
52
|
+
: reduceGraphTrace(events, {
|
|
53
|
+
includeContent: options.includeContent === true,
|
|
54
|
+
});
|
|
55
|
+
print(
|
|
56
|
+
options.blockedRoot
|
|
57
|
+
? {
|
|
58
|
+
projection,
|
|
59
|
+
blockedRoot: locateBlockedRoot(projection, options.blockedRoot),
|
|
60
|
+
}
|
|
61
|
+
: projection,
|
|
62
|
+
);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
graph
|
|
66
|
+
.command("diff <runId>")
|
|
67
|
+
.description("Diff two time-travel projections of one GraphRun")
|
|
68
|
+
.requiredOption("--from-seq <n>", "First durable event sequence")
|
|
69
|
+
.requiredOption("--to-seq <n>", "Second durable event sequence")
|
|
70
|
+
.option("--state-dir <path>", "Graph rollout directory")
|
|
71
|
+
.action((runId, options) => {
|
|
72
|
+
const events = store(options.stateDir).read(runId);
|
|
73
|
+
print(
|
|
74
|
+
diffGraphTrace(
|
|
75
|
+
timeTravelGraphTrace(events, Number(options.fromSeq)),
|
|
76
|
+
timeTravelGraphTrace(events, Number(options.toSeq)),
|
|
77
|
+
),
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
graph
|
|
82
|
+
.command("eval <runId>")
|
|
83
|
+
.description(
|
|
84
|
+
"Evaluate a durable GraphRun and optionally enforce thresholds",
|
|
85
|
+
)
|
|
86
|
+
.option("--state-dir <path>", "Graph rollout directory")
|
|
87
|
+
.option(
|
|
88
|
+
"--thresholds <json>",
|
|
89
|
+
'Metric threshold object, e.g. \'{"deadlocked":{"max":0}}\'',
|
|
90
|
+
)
|
|
91
|
+
.action((runId, options) => {
|
|
92
|
+
const projection = reduceGraphTrace(store(options.stateDir).read(runId));
|
|
93
|
+
const report = evaluateGraphProjection(projection);
|
|
94
|
+
const gate = options.thresholds
|
|
95
|
+
? enforceGraphEvalThresholds(report, JSON.parse(options.thresholds))
|
|
96
|
+
: null;
|
|
97
|
+
print({ report, gate });
|
|
98
|
+
if (gate && !gate.passed) process.exitCode = 2;
|
|
99
|
+
});
|
|
100
|
+
}
|
package/src/commands/mcp.js
CHANGED
|
@@ -100,7 +100,9 @@ export function isHeadlessEnv(env = process.env, platform = process.platform) {
|
|
|
100
100
|
return !(env.DISPLAY || env.WAYLAND_DISPLAY);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
// Singleton MCP client for
|
|
103
|
+
// Singleton MCP client for commands that deliberately keep a connection open
|
|
104
|
+
// in the current process. Normal CLI queries use connectForQuery() so they do
|
|
105
|
+
// not depend on state from a previous (and therefore different) process.
|
|
104
106
|
let mcpClient = null;
|
|
105
107
|
const PROJECT_MCP_FILE_TRUST = Symbol("projectMcpFileTrust");
|
|
106
108
|
|
|
@@ -184,9 +186,11 @@ async function resolveAuthTargetUrl(program, target) {
|
|
|
184
186
|
}
|
|
185
187
|
|
|
186
188
|
/**
|
|
187
|
-
* Connect MCP server(s) for a one-shot query (resources / prompts).
|
|
189
|
+
* Connect MCP server(s) for a one-shot query (tools / resources / prompts).
|
|
190
|
+
* Connects
|
|
188
191
|
* the named server, or every registered server when `serverName` is omitted.
|
|
189
|
-
* Returns `{ client, connected }`; the caller must
|
|
192
|
+
* Returns `{ client, connected }`; the caller must disconnect the client and
|
|
193
|
+
* `await shutdown()`.
|
|
190
194
|
*/
|
|
191
195
|
async function connectForQuery(program, serverName) {
|
|
192
196
|
const ctx = await bootstrap({ verbose: program.opts().verbose });
|
|
@@ -1712,17 +1716,23 @@ export function registerMcpCommand(program) {
|
|
|
1712
1716
|
|
|
1713
1717
|
mcp
|
|
1714
1718
|
.command("connect")
|
|
1715
|
-
.description("Connect to an MCP server")
|
|
1719
|
+
.description("Connect to an MCP server and verify its capabilities")
|
|
1716
1720
|
.argument("<name>", "Server name (configured or command)")
|
|
1717
1721
|
.option("--mode <mode>", "Runtime mode (local | lan | hosted)")
|
|
1718
1722
|
.option("--force", "Bypass mode compatibility check")
|
|
1723
|
+
.option(
|
|
1724
|
+
"--stay-open",
|
|
1725
|
+
"Keep the MCP connection open in this process until interrupted",
|
|
1726
|
+
)
|
|
1719
1727
|
.option("--json", "Output as JSON")
|
|
1720
1728
|
.action(async (name, options) => {
|
|
1729
|
+
let client = null;
|
|
1730
|
+
let spinner = null;
|
|
1731
|
+
let connectionEstablished = false;
|
|
1721
1732
|
try {
|
|
1722
1733
|
const ctx = await bootstrap({ verbose: program.opts().verbose });
|
|
1723
1734
|
if (!ctx.db) {
|
|
1724
|
-
|
|
1725
|
-
process.exit(1);
|
|
1735
|
+
throw new Error("Database not available");
|
|
1726
1736
|
}
|
|
1727
1737
|
|
|
1728
1738
|
const db = ctx.db.getDatabase();
|
|
@@ -1734,10 +1744,9 @@ export function registerMcpCommand(program) {
|
|
|
1734
1744
|
|
|
1735
1745
|
if (!serverConfig) {
|
|
1736
1746
|
const names = visible.map((s) => s.name);
|
|
1737
|
-
|
|
1747
|
+
throw new Error(
|
|
1738
1748
|
`${notFoundWithSuggestion(name, names, { noun: "Server" })}. Use 'mcp add' first.`,
|
|
1739
1749
|
);
|
|
1740
|
-
process.exit(1);
|
|
1741
1750
|
}
|
|
1742
1751
|
|
|
1743
1752
|
const mode = resolveMode(options);
|
|
@@ -1746,19 +1755,19 @@ export function registerMcpCommand(program) {
|
|
|
1746
1755
|
mode,
|
|
1747
1756
|
);
|
|
1748
1757
|
if (!check.allowed && !options.force) {
|
|
1749
|
-
|
|
1758
|
+
throw new Error(
|
|
1750
1759
|
`Server "${name}" blocked in mode "${mode}": ${check.reason}. Use --force to override.`,
|
|
1751
1760
|
);
|
|
1752
|
-
process.exit(1);
|
|
1753
1761
|
}
|
|
1754
1762
|
|
|
1755
|
-
|
|
1756
|
-
|
|
1763
|
+
spinner = ora(`Connecting to ${name}...`).start();
|
|
1764
|
+
client = getClient();
|
|
1757
1765
|
|
|
1758
1766
|
const result = await client.connect(
|
|
1759
1767
|
name,
|
|
1760
1768
|
authorizeMcpRowForConnect(serverConfig),
|
|
1761
1769
|
);
|
|
1770
|
+
connectionEstablished = true;
|
|
1762
1771
|
spinner.stop();
|
|
1763
1772
|
|
|
1764
1773
|
if (options.json) {
|
|
@@ -1783,10 +1792,18 @@ export function registerMcpCommand(program) {
|
|
|
1783
1792
|
}
|
|
1784
1793
|
}
|
|
1785
1794
|
|
|
1786
|
-
|
|
1795
|
+
if (options.stayOpen && !options.json) {
|
|
1796
|
+
logger.info("Connection kept open; press Ctrl+C to stop.");
|
|
1797
|
+
}
|
|
1787
1798
|
} catch (err) {
|
|
1799
|
+
spinner?.stop();
|
|
1788
1800
|
logger.error(`Connection failed: ${err.message}`);
|
|
1789
|
-
process.
|
|
1801
|
+
process.exitCode = 1;
|
|
1802
|
+
} finally {
|
|
1803
|
+
if (!options.stayOpen || !connectionEstablished) {
|
|
1804
|
+
await client?.disconnectAll();
|
|
1805
|
+
await shutdown();
|
|
1806
|
+
}
|
|
1790
1807
|
}
|
|
1791
1808
|
});
|
|
1792
1809
|
|
|
@@ -1817,14 +1834,15 @@ export function registerMcpCommand(program) {
|
|
|
1817
1834
|
.option("-s, --server <name>", "Filter by server name")
|
|
1818
1835
|
.option("--json", "Output as JSON")
|
|
1819
1836
|
.action(async (options) => {
|
|
1837
|
+
let client = null;
|
|
1820
1838
|
try {
|
|
1821
|
-
|
|
1839
|
+
({ client } = await connectForQuery(program, options.server));
|
|
1822
1840
|
const tools = client.listTools(options.server);
|
|
1823
1841
|
|
|
1824
1842
|
if (options.json) {
|
|
1825
1843
|
console.log(JSON.stringify(tools, null, 2));
|
|
1826
1844
|
} else if (tools.length === 0) {
|
|
1827
|
-
logger.info("No tools available.
|
|
1845
|
+
logger.info("No tools available.");
|
|
1828
1846
|
} else {
|
|
1829
1847
|
logger.log(chalk.bold(`MCP Tools (${tools.length}):\n`));
|
|
1830
1848
|
for (const t of tools) {
|
|
@@ -1838,7 +1856,10 @@ export function registerMcpCommand(program) {
|
|
|
1838
1856
|
}
|
|
1839
1857
|
} catch (err) {
|
|
1840
1858
|
logger.error(`Failed: ${err.message}`);
|
|
1841
|
-
process.
|
|
1859
|
+
process.exitCode = 1;
|
|
1860
|
+
} finally {
|
|
1861
|
+
await client?.disconnectAll();
|
|
1862
|
+
await shutdown();
|
|
1842
1863
|
}
|
|
1843
1864
|
});
|
|
1844
1865
|
|
|
@@ -1851,8 +1872,10 @@ export function registerMcpCommand(program) {
|
|
|
1851
1872
|
.option("-a, --args <json>", "Tool arguments as JSON")
|
|
1852
1873
|
.option("--json", "Output as JSON")
|
|
1853
1874
|
.action(async (tool, options) => {
|
|
1875
|
+
let client = null;
|
|
1876
|
+
let spinner = null;
|
|
1854
1877
|
try {
|
|
1855
|
-
|
|
1878
|
+
({ client } = await connectForQuery(program, options.server));
|
|
1856
1879
|
|
|
1857
1880
|
// Find which server has this tool
|
|
1858
1881
|
let serverName = options.server;
|
|
@@ -1863,13 +1886,14 @@ export function registerMcpCommand(program) {
|
|
|
1863
1886
|
logger.error(
|
|
1864
1887
|
`Tool "${tool}" not found. Run 'mcp tools' to see available tools.`,
|
|
1865
1888
|
);
|
|
1866
|
-
process.
|
|
1889
|
+
process.exitCode = 1;
|
|
1890
|
+
return;
|
|
1867
1891
|
}
|
|
1868
1892
|
serverName = match.server;
|
|
1869
1893
|
}
|
|
1870
1894
|
|
|
1871
1895
|
const args = parseJsonOption(options.args, "--args", {});
|
|
1872
|
-
|
|
1896
|
+
spinner = ora(`Calling ${tool}...`).start();
|
|
1873
1897
|
|
|
1874
1898
|
const result = await client.callTool(serverName, tool, args);
|
|
1875
1899
|
spinner.stop();
|
|
@@ -1893,8 +1917,12 @@ export function registerMcpCommand(program) {
|
|
|
1893
1917
|
}
|
|
1894
1918
|
}
|
|
1895
1919
|
} catch (err) {
|
|
1920
|
+
spinner?.stop();
|
|
1896
1921
|
logger.error(`Tool call failed: ${err.message}`);
|
|
1897
|
-
process.
|
|
1922
|
+
process.exitCode = 1;
|
|
1923
|
+
} finally {
|
|
1924
|
+
await client?.disconnectAll();
|
|
1925
|
+
await shutdown();
|
|
1898
1926
|
}
|
|
1899
1927
|
});
|
|
1900
1928
|
|