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
|
@@ -57,6 +57,21 @@ export function registerOrchestrateCommand(program) {
|
|
|
57
57
|
.option("--interval <min>", "Cron interval in minutes (watch mode)", "10")
|
|
58
58
|
.option("--webhook", "Start HTTP webhook server for IM platform commands")
|
|
59
59
|
.option("--webhook-port <port>", "Webhook server port", "18820")
|
|
60
|
+
.option(
|
|
61
|
+
"--webhook-secret-env <name>",
|
|
62
|
+
"Environment variable containing the webhook HMAC secret",
|
|
63
|
+
"CC_ORCHESTRATE_WEBHOOK_SECRET",
|
|
64
|
+
)
|
|
65
|
+
.option(
|
|
66
|
+
"--webhook-max-body-bytes <n>",
|
|
67
|
+
"Maximum authenticated webhook request body",
|
|
68
|
+
"262144",
|
|
69
|
+
)
|
|
70
|
+
.option(
|
|
71
|
+
"--webhook-rate-limit <n>",
|
|
72
|
+
"Maximum webhook requests per source and minute",
|
|
73
|
+
"30",
|
|
74
|
+
)
|
|
60
75
|
.option("--json", "Output as JSON")
|
|
61
76
|
.option("--verbose", "Verbose output");
|
|
62
77
|
|
|
@@ -90,8 +105,7 @@ export function registerOrchestrateCommand(program) {
|
|
|
90
105
|
return;
|
|
91
106
|
}
|
|
92
107
|
|
|
93
|
-
const { Orchestrator
|
|
94
|
-
await import("../lib/orchestrator.js");
|
|
108
|
+
const { Orchestrator } = await import("../lib/orchestrator.js");
|
|
95
109
|
|
|
96
110
|
const cwd = options.cwd ? path.resolve(options.cwd) : process.cwd();
|
|
97
111
|
|
|
@@ -137,7 +151,6 @@ export function registerOrchestrateCommand(program) {
|
|
|
137
151
|
// Build agent backends from --backends option
|
|
138
152
|
let agentsConfig;
|
|
139
153
|
if (options.backends) {
|
|
140
|
-
const { BACKEND_TYPE } = await import("../lib/agent-router.js");
|
|
141
154
|
const backendNames = options.backends.split(",").map((s) => s.trim());
|
|
142
155
|
agentsConfig = {
|
|
143
156
|
backends: backendNames.map((type) => ({ type, weight: 1 })),
|
|
@@ -340,8 +353,6 @@ export function registerOrchestrateCommand(program) {
|
|
|
340
353
|
// ─── Pretty (interactive) run ────────────────────────────────────
|
|
341
354
|
|
|
342
355
|
async function _runPretty(orch, taskText, options, cwd) {
|
|
343
|
-
const { TASK_STATUS } = await import("../lib/orchestrator.js");
|
|
344
|
-
|
|
345
356
|
console.log(chalk.bold.cyan("\n⚡ ChainlessChain Orchestrator\n"));
|
|
346
357
|
console.log(chalk.gray(` Task: `) + chalk.white(taskText.slice(0, 120)));
|
|
347
358
|
console.log(chalk.gray(` CWD: `) + chalk.white(cwd));
|
|
@@ -377,7 +388,7 @@ async function _runPretty(orch, taskText, options, cwd) {
|
|
|
377
388
|
spinner.text = `Running CI check (attempt ${attempt + 1})...`;
|
|
378
389
|
});
|
|
379
390
|
|
|
380
|
-
orch.on("ci:fail", ({
|
|
391
|
+
orch.on("ci:fail", ({ attempt }) => {
|
|
381
392
|
spinner.text = `CI failed (attempt ${attempt + 1}) — retrying with agents...`;
|
|
382
393
|
});
|
|
383
394
|
|
|
@@ -508,11 +519,25 @@ async function _webhookMode(cwd, options) {
|
|
|
508
519
|
const { createServer } = await import("http");
|
|
509
520
|
const { parseDingTalkIncoming, parseFeishuIncoming, parseWeComIncoming } =
|
|
510
521
|
await import("../lib/notifiers/index.js");
|
|
511
|
-
const { Orchestrator
|
|
522
|
+
const { Orchestrator } = await import("../lib/orchestrator.js");
|
|
523
|
+
const { WebhookSecurityGate } = await import("../lib/webhook-security.js");
|
|
512
524
|
|
|
513
525
|
const port = parseInt(options.webhookPort, 10) || 18820;
|
|
514
526
|
|
|
515
527
|
const orch = new Orchestrator({ cwd, verbose: options.verbose });
|
|
528
|
+
const secretEnvironmentName =
|
|
529
|
+
options.webhookSecretEnv || "CC_ORCHESTRATE_WEBHOOK_SECRET";
|
|
530
|
+
if (!/^[A-Z_][A-Z0-9_]{0,127}$/u.test(secretEnvironmentName)) {
|
|
531
|
+
throw new Error("--webhook-secret-env must be a valid environment name");
|
|
532
|
+
}
|
|
533
|
+
const securityGate = new WebhookSecurityGate({
|
|
534
|
+
secret: process.env[secretEnvironmentName],
|
|
535
|
+
maxRequestsPerMinute: parseInt(options.webhookRateLimit, 10) || 30,
|
|
536
|
+
});
|
|
537
|
+
const maxBodyBytes = Math.max(
|
|
538
|
+
1,
|
|
539
|
+
parseInt(options.webhookMaxBodyBytes, 10) || 262144,
|
|
540
|
+
);
|
|
516
541
|
|
|
517
542
|
const server = createServer(async (req, res) => {
|
|
518
543
|
if (req.method !== "POST") {
|
|
@@ -521,25 +546,71 @@ async function _webhookMode(cwd, options) {
|
|
|
521
546
|
return;
|
|
522
547
|
}
|
|
523
548
|
|
|
549
|
+
const url = req.url?.split("?")[0] || "/";
|
|
550
|
+
const channel =
|
|
551
|
+
url === "/wecom"
|
|
552
|
+
? "wecom"
|
|
553
|
+
: url === "/dingtalk"
|
|
554
|
+
? "dingtalk"
|
|
555
|
+
: url === "/feishu"
|
|
556
|
+
? "feishu"
|
|
557
|
+
: null;
|
|
558
|
+
if (!channel) {
|
|
559
|
+
res.writeHead(404);
|
|
560
|
+
res.end("Not Found");
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
if (Number(req.headers["content-length"] || 0) > maxBodyBytes) {
|
|
564
|
+
res.writeHead(413);
|
|
565
|
+
res.end("Payload Too Large");
|
|
566
|
+
req.resume();
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
524
569
|
const bodyChunks = [];
|
|
525
|
-
|
|
570
|
+
let bodyBytes = 0;
|
|
571
|
+
let bodyRejected = false;
|
|
572
|
+
req.on("data", (chunk) => {
|
|
573
|
+
if (bodyRejected) return;
|
|
574
|
+
bodyBytes += chunk.length;
|
|
575
|
+
if (bodyBytes > maxBodyBytes) {
|
|
576
|
+
bodyRejected = true;
|
|
577
|
+
res.writeHead(413);
|
|
578
|
+
res.end("Payload Too Large");
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
bodyChunks.push(chunk);
|
|
582
|
+
});
|
|
526
583
|
req.on("end", async () => {
|
|
584
|
+
if (bodyRejected) return;
|
|
527
585
|
// Decode once: per-chunk toString() would corrupt a multi-byte UTF-8
|
|
528
586
|
// char (e.g. Chinese IM webhook text) split across a chunk boundary.
|
|
529
587
|
const body = Buffer.concat(bodyChunks).toString("utf-8");
|
|
530
588
|
let taskText = null;
|
|
531
|
-
let source =
|
|
589
|
+
let source = `webhook:${channel}`;
|
|
590
|
+
let verified;
|
|
532
591
|
|
|
533
|
-
|
|
592
|
+
try {
|
|
593
|
+
verified = securityGate.verify({
|
|
594
|
+
channel,
|
|
595
|
+
headers: req.headers,
|
|
596
|
+
body,
|
|
597
|
+
remoteAddress: req.socket.remoteAddress || "unknown",
|
|
598
|
+
});
|
|
599
|
+
} catch (error) {
|
|
600
|
+
if (error?.retryAfterSeconds) {
|
|
601
|
+
res.setHeader("Retry-After", String(error.retryAfterSeconds));
|
|
602
|
+
}
|
|
603
|
+
res.writeHead(error?.statusCode || 401);
|
|
604
|
+
res.end("Unauthorized");
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
534
607
|
|
|
535
608
|
try {
|
|
536
609
|
if (url === "/wecom") {
|
|
537
610
|
taskText = parseWeComIncoming(body);
|
|
538
|
-
source = TASK_SOURCE.CLI;
|
|
539
611
|
} else if (url === "/dingtalk") {
|
|
540
612
|
const parsed = JSON.parse(body);
|
|
541
613
|
taskText = parseDingTalkIncoming(parsed);
|
|
542
|
-
source = TASK_SOURCE.CLI;
|
|
543
614
|
} else if (url === "/feishu") {
|
|
544
615
|
const parsed = JSON.parse(body);
|
|
545
616
|
// Feishu challenge verification
|
|
@@ -549,13 +620,8 @@ async function _webhookMode(cwd, options) {
|
|
|
549
620
|
return;
|
|
550
621
|
}
|
|
551
622
|
taskText = parseFeishuIncoming(parsed);
|
|
552
|
-
source = TASK_SOURCE.CLI;
|
|
553
|
-
} else {
|
|
554
|
-
res.writeHead(404);
|
|
555
|
-
res.end("Not Found");
|
|
556
|
-
return;
|
|
557
623
|
}
|
|
558
|
-
} catch
|
|
624
|
+
} catch {
|
|
559
625
|
res.writeHead(400);
|
|
560
626
|
res.end("Bad Request");
|
|
561
627
|
return;
|
|
@@ -586,6 +652,7 @@ async function _webhookMode(cwd, options) {
|
|
|
586
652
|
.addTask(taskText, {
|
|
587
653
|
source,
|
|
588
654
|
cwd,
|
|
655
|
+
dataPolicy: verified.dataPolicy,
|
|
589
656
|
runCI: options.ci !== false,
|
|
590
657
|
notify: true,
|
|
591
658
|
})
|
package/src/commands/serve.js
CHANGED
|
@@ -5,11 +5,25 @@
|
|
|
5
5
|
|
|
6
6
|
import { logger } from "../lib/logger.js";
|
|
7
7
|
import { createAgentRuntimeFactory } from "../runtime/runtime-factory.js";
|
|
8
|
+
import path from "node:path";
|
|
8
9
|
|
|
9
10
|
export function registerServeCommand(program) {
|
|
10
11
|
program
|
|
11
12
|
.command("serve")
|
|
12
13
|
.description("Start WebSocket server for remote CLI access")
|
|
14
|
+
.option(
|
|
15
|
+
"--app-server",
|
|
16
|
+
"Run the canonical CC App Server over stdio instead of the legacy WebSocket server",
|
|
17
|
+
)
|
|
18
|
+
.option(
|
|
19
|
+
"--app-server-state-dir <path>",
|
|
20
|
+
"Owner-controlled rollout directory for --app-server",
|
|
21
|
+
)
|
|
22
|
+
.option(
|
|
23
|
+
"--app-server-queue-cap <n>",
|
|
24
|
+
"Maximum queued App Server requests",
|
|
25
|
+
"256",
|
|
26
|
+
)
|
|
13
27
|
.option("-p, --port <port>", "Port number", "18800")
|
|
14
28
|
.option("-H, --host <host>", "Bind host", "127.0.0.1")
|
|
15
29
|
.option(
|
|
@@ -45,6 +59,31 @@ export function registerServeCommand(program) {
|
|
|
45
59
|
)
|
|
46
60
|
.action(async (opts) => {
|
|
47
61
|
try {
|
|
62
|
+
if (opts.appServer) {
|
|
63
|
+
const [
|
|
64
|
+
{ runStdioAppServer },
|
|
65
|
+
{ JsonlRolloutStore },
|
|
66
|
+
{ CliAgentKernelAdapter },
|
|
67
|
+
] = await Promise.all([
|
|
68
|
+
import("../lib/app-server/stdio-transport.js"),
|
|
69
|
+
import("../lib/app-server/rollout-store.js"),
|
|
70
|
+
import("../lib/app-server/cli-agent-kernel-adapter.js"),
|
|
71
|
+
]);
|
|
72
|
+
const stateDirectory = opts.appServerStateDir
|
|
73
|
+
? path.resolve(opts.appServerStateDir)
|
|
74
|
+
: undefined;
|
|
75
|
+
await runStdioAppServer({
|
|
76
|
+
store: new JsonlRolloutStore({ directory: stateDirectory }),
|
|
77
|
+
kernel: new CliAgentKernelAdapter({
|
|
78
|
+
cwd: opts.project ? path.resolve(opts.project) : process.cwd(),
|
|
79
|
+
}),
|
|
80
|
+
maxQueuedRequests: Math.max(
|
|
81
|
+
1,
|
|
82
|
+
parseInt(opts.appServerQueueCap, 10) || 256,
|
|
83
|
+
),
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
48
87
|
const runtime = createAgentRuntimeFactory().createServerRuntime({
|
|
49
88
|
port: parseInt(opts.port, 10),
|
|
50
89
|
host: opts.host,
|
package/src/commands/team.js
CHANGED
|
@@ -46,6 +46,7 @@ import { stopBackgroundAgentChildTree } from "../lib/background-agent-supervisor
|
|
|
46
46
|
import { redactSecrets } from "../lib/secret-scan.js";
|
|
47
47
|
import { tightenPermissionMode } from "../lib/subagent-contract.js";
|
|
48
48
|
import { TeamRunStateLock } from "../lib/agent-team/team-run-state-lock.js";
|
|
49
|
+
import { registerGraphCommand } from "./graph.js";
|
|
49
50
|
import {
|
|
50
51
|
computeTeamAdjudicationEvidenceDigest,
|
|
51
52
|
TeamAdjudicationStore,
|
|
@@ -1453,6 +1454,7 @@ export function registerTeamCommand(program, { logger } = {}) {
|
|
|
1453
1454
|
buildAgentPrompt: buildTeamAgentPrompt,
|
|
1454
1455
|
});
|
|
1455
1456
|
registerTeamMergeReviewCommands(team, { logger: log });
|
|
1457
|
+
registerGraphCommand(team);
|
|
1456
1458
|
|
|
1457
1459
|
team
|
|
1458
1460
|
.command("control-bindings")
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.0",
|
|
7
|
+
"cliVersions": ["0.2.0", "0.165.10", "0.166.0"],
|
|
8
|
+
"date": "2026-08-24",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added - cc CLI 0.166.0 + Agent SDKs 0.2.0: canonical App Server and Graph kernels",
|
|
13
|
+
"body": "> `chainlesschain` **0.165.10 -> 0.166.0**,\n> `@chainlesschain/agent-sdk` **0.1.7 -> 0.2.0**, and\n> `chainlesschain-agent-sdk` **0.1.0 -> 0.2.0** (release candidate,\n> 2026-08-24). `@chainlesschain/agent-protocol` remains a private build-time\n> source of truth and is not a runtime dependency or public package.\n\n- **Canonical cross-language protocol**: one private schema and deterministic\n generator now produce the TypeScript and Python App Server contracts,\n including Python 3.10-compatible reserved-field and optional-key handling.\n- **Durable App Server**: JSON-RPC request/notification streaming, thread\n lifecycle, subscriptions, checkpoints, compaction, replay, and forking share\n JSONL, memory, and capability-gated SQLite rollout stores.\n- **Graph execution kernel**: durable DAG execution adds checkpointed state,\n interrupt/resume, record/replay, event projections, evaluation hooks, and\n observable execution evidence.\n- **Secure integrations**: signed webhook delivery rejects stale or replayed\n requests, the Codex App adapter consumes the canonical protocol, and the\n governed `cc exec` path is exposed without duplicating authority.\n- **Release validation**: publication requires this exact release commit to\n pass the complete Linux, Windows, and macOS `CLI CI` and\n `CLI Strict Sandbox` matrices, plus Python 3.10/3.12/3.13 SDK conformance,\n before the immutable npm and PyPI tags are created."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.165.10",
|
|
20
|
+
"cliVersions": ["0.3.6", "0.165.9", "0.165.10"],
|
|
21
|
+
"date": "2026-08-24",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.165.10: restore Docker-optional startup",
|
|
26
|
+
"body": "> `chainlesschain` **0.165.9 -> 0.165.10** and\n> `@chainlesschain/session-core` **0.3.5 -> 0.3.6** (hotfix candidate,\n> 2026-08-24). `@chainlesschain/personal-data-hub` remains **0.4.59** and\n> `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Windows startup regression**: starting `cc` without an explicit container\n sandbox no longer requires Docker or exits with configuration code 6 when\n Docker is unavailable. Explicit `--sandbox`,\n `--sandbox-mode workspace-write|strict`, and managed sandbox policy remain\n fail-closed.\n- **Session contract delivery**: publish the `runtime-claims` export added\n after `session-core@0.3.5`, and pin the CLI to `session-core@0.3.6`, so npm\n installs receive the same runtime contract used by the release source.\n- **Release status**: publication requires this candidate's exact commit to\n pass the complete Linux, Windows, and macOS `CLI CI` and\n `CLI Strict Sandbox` matrices before the immutable npm tag is created."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.165.9",
|