chainlesschain 0.166.77 → 0.166.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -7
- package/completions/_cc +1 -1
- package/completions/cc.bash +1 -1
- package/completions/cc.fish +1 -1
- package/completions/cc.ps1 +1 -1
- package/package.json +1 -1
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +10 -0
- package/src/assets/linux-subreaper/linux-arm64/supervisor +0 -0
- package/src/assets/linux-subreaper/linux-x64/manifest.json +10 -0
- package/src/assets/linux-subreaper/linux-x64/supervisor +0 -0
- package/src/assets/web-panel/assets/{AIOps-CpiCBhRh.js → AIOps-DSyZEY2G.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CnU-Xvx-.js → ActionButton-DhNyZ577.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BJW-CNtf.js → Analytics-HMMpxmyi.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-UFQJL3G9.js → AppLayout-CwKMM5Ie.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-Dr_IUDoY.js → Artifacts-CNzDmph7.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-aglWo6rr.js → Audit-DxWpUW3V.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-Dm_TCiXC.js → BackgroundAgents-C1R2ST-P.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DUdX4-gA.js → Backup-B6biTaEV.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BTcLjy1o.js → BaseInput-CVnkD2Z5.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Bhy9qZrl.js → Chat-Dbewl4Je.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-D0WrJQaQ.js → ChatBubbleRenderer-DVZ6SwC5.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CblrPa21.js → Checkbox-BqqiF1JE.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-SEAHzOlr.js → Codegen-BVMkGumc.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DJz8iFOR.js → Col-DmiRHy96.js} +1 -1
- package/src/assets/web-panel/assets/{Community-RufKhcQt.js → Community-BDlpygqA.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Dlifx08U.js → Compact-B2NME_m-.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DdhQWcHh.js → Compliance-BlzDLE-R.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BLNn6oOm.js → Cowork-C8raPybB.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Dv-JWY2d.js → Cron-DA8Py0zP.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-k7Pz7O-b.js → Crosschain-DU2XyHqB.js} +1 -1
- package/src/assets/web-panel/assets/{DID-C_10syUW.js → DID-Df098fT_.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CMyH6Szx.js → Dashboard-D1rT702x.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DjmD2Saa.js → Dropdown-BweXGo1O.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-36_IRUSo.js → EmailListRenderer-B9ShbgJH.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-D75_iBoc.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DEgf9kyP.js → FamilyGuardDashboard-DrznZFVs.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DGO1wQls.js → Federation-DQZ2adIA.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Doj1FmKW.js → FormItemContext-DN30Dowh.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-GzOU27iT.js → GenericCardRenderer-DRdt0j1e.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Dd7D1EDK.js → Git-wwRgStzk.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-6IY8LcjI.js → Governance-CI4Uw0Nh.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BB9gl8q1.js → Inference-5TuE2AJI.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CeCed5wd.js → KnowledgeGraph-oXyvmFSR.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CYOeHuaI.js → Logs-ewudSWuv.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-Bk8Zqc2R.js → MarkdownRenderer-Cz5nyufm.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-D-_xgHgM.js → Marketplace-DcZeWFrs.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-NnaUTF5t.js → McpTools-BcV9p1RS.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CndN9pMt.js → Memory-CMhYvugt.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BXblFmhY.js → MobileBridge-5RP2uwvT.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CC26Dm2k.js → MobileProjects-BIuM9Ze4.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BhaqWCiW.js → Mtc-DmBszTDe.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-D6fktM2w.js → MtcAudit-Czdp5ZGt.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-CFvahz7s.js → Multisig-DRWUuNr-.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Co73Ivya.js → NLProgramming-IRQQN0-c.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-B4g33L1o.js → Notes-CGhD1lW9.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-lXd17EbN.js → NotificationSettings-BtyPgQAh.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BiOB0GIi.js → OrderTableRenderer-yUaqwCty.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-JQ7_wQIA.js → Organization-C3kTVn5i.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-gwgJgozQ.js → Overflow-C2-0iZhq.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-D9L_0gie.js → P2P-CISoEUxA.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CbOPsFE9.js → PdhVaultBrowser-NfTVtvKQ.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-Cz42HNQf.js → Permissions-CfK0jJhm.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DjorYtrF.js → PersonalDataHub-OsVxxh_j.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-DyWPhmm5.js → Pipeline-DEmK_Ch2.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DyfLMl2j.js → Privacy-D61s73b0.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CyqDx1OE.js → ProjectInit-DkLF5gHb.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DsBw0Csy.js → ProjectSettings-BA7odTrI.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-CRaSI25Z.js → Projects-CdI1GcAG.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CCI_klN-.js → Providers-D9BYyP1r.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DNsnlDdS.js → QrScannerModal-CXMItUDD.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-B9r2iaee.js → QuickAsk-8-tF9ffZ.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BJDe03GR.js → Recommend-C2QGWOSi.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-J7JR3rRo.js → RemoteSession-B1M_v1lx.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-DR39AJeV.js → Reputation-D0WZHgv1.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Dh77m3NZ.js → Row-D6nf9-c-.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BUdg28nJ.js → RssFeed-ClZ6M-mN.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BNC7sGhj.js → Search-ZWkt8vuO.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DISENGI7.js → Security-BUlQut2m.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BBBGpJ1-.js → Services-Cd_3xJOc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DMcIoIv2.js → Skeleton-C8e2-cHW.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-QAyFbI3r.js → Skills-DucVRJp1.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CSg5wLH7.js → Sla-Csr5pUwI.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DMPxTc5x.js → SpeechSettings-CXvyaRAT.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CPG7l30y.js → SyncSettings-KdsIcV5h.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Y1kOVvVL.js → Tasks-B-eHmJm9.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-jt9NagL0.js → Templates-BglVeaLK.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DauuJICx.js → Tenant-BBbQ8qan.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-E9rnKeGq.js → Terminal-Ca_pCVBi.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Cc7z2APG.js → TimelineRenderer-YD6XG_vZ.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CV0UthRA.js → Tokens-2lRoeVli.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BFcJJGfu.js → Trigger-C-3XNAU9.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BAydbNJA.js → Trust-k-1PxdLG.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DcOS6sqL.js → UkeySign-FG-qW646.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BLHJZvif.js → VideoEditing-BNOe1cmd.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-4QFLKHwW.js → Wallet-D5C3i2Kw.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BocEOOSj.js → WebAuthn-BOpztqd3.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DCfF7D0B.js → WorkflowEditor-BpVrpUEv.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CxvfsYGr.js → chat-DIuMHb38.js} +1 -1
- package/src/assets/web-panel/assets/{colors-KtQB9DmQ.js → colors-CTFJPyzQ.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Dx4J6arN.js → compact-item-CONfmJcW.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Cq0olgzo.js → createContext-RkW5CRrz.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DaEBln_q.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Bf9-h3D-.js → hasIn-CW4XOjDC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CK2U_AHi.js → index-7wMSBCU7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMR-keCL.js → index-Akmg1WdH.js} +1 -1
- package/src/assets/web-panel/assets/{index-6dDDSCHD.js → index-B54qoVff.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmQuG0fr.js → index-B8r2t0Ch.js} +1 -1
- package/src/assets/web-panel/assets/{index-ClUfSChI.js → index-B9XoBoty.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3xfiItB.js → index-B9aS2VLu.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQDR-_ai.js → index-BFs1Tznc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZWjYfWt.js → index-BKgaRT0b.js} +1 -1
- package/src/assets/web-panel/assets/{index-nmyDOh_b.js → index-BM7bOUvu.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_8UcDan.js → index-BMg2JFmW.js} +1 -1
- package/src/assets/web-panel/assets/{index-C9yaUHm9.js → index-BRZsPxNn.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz7f4Jaq.js → index-Bf19fKef.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpO6DKuu.js → index-BkAbfBF-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFdEDvFn.js → index-CBjb2A5R.js} +1 -1
- package/src/assets/web-panel/assets/{index-gt5N6VM_.js → index-CEZWQthY.js} +1 -1
- package/src/assets/web-panel/assets/{index-0fi8DIVQ.js → index-CFGLf88d.js} +1 -1
- package/src/assets/web-panel/assets/{index-hSzyoXri.js → index-CLUa68JH.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cy865Hhq.js → index-CM2X25Er.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDAe1UmZ.js → index-CX4T2uKN.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMcC4cbj.js → index-CixqfdRk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsCdl2Od.js → index-CkRojEip.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnU-dUWd.js → index-Cvmc3f25.js} +1 -1
- package/src/assets/web-panel/assets/{index-Br1mDMfO.js → index-D-lpTPS8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CaIclw-E.js → index-D59GbWCN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBRlZdZj.js → index-DAESljiJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8WuPI-h.js → index-DDHUx4Yz.js} +1 -1
- package/src/assets/web-panel/assets/index-DG1mcYTa.js +1 -0
- package/src/assets/web-panel/assets/{index-D2BfSIrn.js → index-DP5pPedy.js} +1 -1
- package/src/assets/web-panel/assets/index-DRs5Pe8u.js +1 -0
- package/src/assets/web-panel/assets/{index-CqnggDos.js → index-DSlXL6Ju.js} +1 -1
- package/src/assets/web-panel/assets/{index-_FIz-0tp.js → index-DWCJnn2O.js} +1 -1
- package/src/assets/web-panel/assets/{index-BKtQyb2o.js → index-DWY7YwDu.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfrFNMvz.js → index-DZTwP364.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHmdMKYl.js → index-DidrMvOx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO6XvO-C.js → index-Dj3K5kHs.js} +1 -1
- package/src/assets/web-panel/assets/{index-iE9tqEN5.js → index-YaeGscSw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DI5bRqNG.js → index-YlMnFNOi.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cfsn7N18.js → index-asWsB34i.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeYP_kT9.js → index-gkjiFjQd.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DvzKJ6o5.js → initDefaultProps-BOr4igh3.js} +1 -1
- package/src/assets/web-panel/assets/{motion-D1yTvmxW.js → motion-CK469n2j.js} +1 -1
- package/src/assets/web-panel/assets/{move-DxtSIF8K.js → move-DzjudlYQ.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BDsQgIHY.js → mtc-parser-BQaKUxC6.js} +1 -1
- package/src/assets/web-panel/assets/{omit-UVBJW8kh.js → omit-MciovCFD.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D4QqtTyX.js → pickAttrs-DDPJ4zAz.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-QXmu6vBf.js → placementArrow-Cznyb-jI.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D-PmXO9M.js → responsiveObserve-AJK3SLzJ.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CKbGxEZJ.js → slide-CPQ28wu7.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BbgXPkXm.js → statusUtils-CFjzvqf_.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DOr9rk68.js → styleChecker-BPyFfTuR.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-B2wO2r36.js → useFlexGapSupport-Dq7N6R05.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-SeVGBK34.js → useFs-C3GS0uTc.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DUJBCxjD.js → usePersonalDataHub-BhgIVzP_.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CF4EYsig.js → vnode-4ZD9-MDr.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-pRUs5pqI.js → zoom-Bx4MRVNW.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/command-manifest.json +1 -1
- package/src/commands/checkpoint.js +42 -7
- package/src/commands/orchestrate.js +85 -25
- package/src/commands/session-location.js +5 -0
- package/src/commands/session-show.js +109 -1
- package/src/commands/session.js +26 -2
- package/src/commands/tokens.js +9 -4
- package/src/data/changelog.json +13 -0
- package/src/generated/cc-agent-protocol.schema.json +71 -0
- package/src/harness/jsonl-session-store.js +357 -114
- package/src/harness/mcp-client.js +44 -1
- package/src/lib/agent-router.js +35 -7
- package/src/lib/app-server/server.js +14 -0
- package/src/lib/background-agent-supervisor.js +14 -4
- package/src/lib/causal-observability.js +64 -1
- package/src/lib/checkpoint-summary-projection.js +98 -0
- package/src/lib/checkpoint-timeline-authority.js +15 -51
- package/src/lib/claude-code-bridge.js +302 -60
- package/src/lib/codex-app-server-adapter.js +161 -35
- package/src/lib/cost-budget.js +4 -0
- package/src/lib/doctor-checkup.js +31 -2
- package/src/lib/durable-security-store.js +6 -1
- package/src/lib/evolution/evolution-artifact-identity.js +21 -0
- package/src/lib/evolution/evolution-artifact-ports.js +5 -11
- package/src/lib/evolution/evolution-eval-cohort-receipt-reconciliation.js +389 -0
- package/src/lib/execution-location-failure-site.js +63 -0
- package/src/lib/execution-location-target.js +102 -8
- package/src/lib/external-agent-adapters.js +2 -0
- package/src/lib/image-file-boundary.js +154 -0
- package/src/lib/image-input.js +16 -3
- package/src/lib/llm-pricing.js +114 -8
- package/src/lib/mcp-call-ledger-store.js +7 -2
- package/src/lib/model-capabilities.js +21 -10
- package/src/lib/model-context-catalog.js +60 -1
- package/src/lib/openai-responses.js +7 -1
- package/src/lib/orchestrator.js +8 -2
- package/src/lib/process-execution-broker/index.js +93 -1
- package/src/lib/process-execution-broker/linux-subreaper-artifact.js +120 -0
- package/src/lib/process-execution-broker/linux-subreaper-helper.js +344 -0
- package/src/lib/process-execution-broker/linux-subreaper-process.js +326 -0
- package/src/lib/process-execution-broker/linux-subreaper-supervisor.c +360 -0
- package/src/lib/process-execution-broker/owned-posix-process-group-worker.mjs +131 -0
- package/src/lib/process-execution-broker/owned-posix-process-group.js +267 -0
- package/src/lib/process-execution-broker/process-ownership-journal.js +297 -0
- package/src/lib/process-execution-broker/process-ownership-quarantine.js +91 -0
- package/src/lib/runtime-usage-ledger.js +3 -0
- package/src/lib/secure-fs.js +158 -42
- package/src/lib/session-branch-history.js +240 -0
- package/src/lib/session-history-origins.js +285 -0
- package/src/lib/session-input-receipt.js +110 -0
- package/src/lib/session-resource-budget.js +8 -8
- package/src/lib/session-transcript-history.js +456 -0
- package/src/lib/session-transcript-page.js +164 -0
- package/src/lib/session-transcript-reference.js +38 -0
- package/src/lib/session-usage.js +8 -0
- package/src/lib/token-tracker.js +32 -54
- package/src/lib/usage-pricing-context.js +93 -0
- package/src/runtime/headless-stream.js +202 -4
- package/src/assets/web-panel/assets/EvolutionSettings-CmtU0XmM.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CmgDNkoO.js +0 -1
- package/src/assets/web-panel/assets/index-BpIZ2S01.js +0 -1
- package/src/assets/web-panel/assets/index-C-VmKuyv.js +0 -1
|
@@ -16,13 +16,42 @@ import fs from "fs";
|
|
|
16
16
|
import path from "path";
|
|
17
17
|
import { logger } from "../lib/logger.js";
|
|
18
18
|
|
|
19
|
+
function agentOptions(options) {
|
|
20
|
+
if (options.cliTool && options.backends)
|
|
21
|
+
throw new Error("Choose --cli-tool or --backends, not both");
|
|
22
|
+
if (options.cliTool && !["claude", "codex"].includes(options.cliTool))
|
|
23
|
+
throw new Error("--cli-tool must be claude or codex");
|
|
24
|
+
const selected = options.backends || options.cliTool;
|
|
25
|
+
const config = { strategy: options.strategy || "round-robin" };
|
|
26
|
+
if (selected) {
|
|
27
|
+
const types = selected.split(",").map((s) => s.trim());
|
|
28
|
+
if (
|
|
29
|
+
types.some(
|
|
30
|
+
(type) =>
|
|
31
|
+
![
|
|
32
|
+
"claude",
|
|
33
|
+
"codex",
|
|
34
|
+
"gemini",
|
|
35
|
+
"openai",
|
|
36
|
+
"anthropic",
|
|
37
|
+
"ollama",
|
|
38
|
+
].includes(type),
|
|
39
|
+
)
|
|
40
|
+
) {
|
|
41
|
+
throw new Error("Unknown orchestrate backend; see orchestrate --help");
|
|
42
|
+
}
|
|
43
|
+
config.backends = types.map((type) => ({ type, weight: 1 }));
|
|
44
|
+
}
|
|
45
|
+
return config;
|
|
46
|
+
}
|
|
47
|
+
|
|
19
48
|
export function registerOrchestrateCommand(program, dependencies = {}) {
|
|
20
49
|
const evolutionCompositionFactory =
|
|
21
50
|
dependencies.evolutionCompositionFactory ?? null;
|
|
22
51
|
const cmd = program
|
|
23
52
|
.command("orchestrate [task]")
|
|
24
53
|
.description(
|
|
25
|
-
"Orchestrate AI coding tasks:
|
|
54
|
+
"Orchestrate AI coding tasks (experimental): API text generation only; external Claude/Codex execution is blocked pending governance admission. Use cc agent for tool execution.",
|
|
26
55
|
)
|
|
27
56
|
.option("-a, --agents <n>", "Max parallel agents", "3")
|
|
28
57
|
.option(
|
|
@@ -41,10 +70,13 @@ export function registerOrchestrateCommand(program, dependencies = {}) {
|
|
|
41
70
|
.option("--cwd <path>", "Project root directory (default: current dir)")
|
|
42
71
|
.option("--provider <name>", "LLM provider for decomposition")
|
|
43
72
|
.option("--model <name>", "Model for decomposition LLM calls")
|
|
44
|
-
.option(
|
|
73
|
+
.option(
|
|
74
|
+
"--cli-tool <name>",
|
|
75
|
+
"Select claude|codex (currently blocked by governance preflight)",
|
|
76
|
+
)
|
|
45
77
|
.option(
|
|
46
78
|
"--backends <list>",
|
|
47
|
-
"
|
|
79
|
+
"Backends: claude,codex (blocked), gemini,openai,anthropic,ollama (text only)",
|
|
48
80
|
)
|
|
49
81
|
.option(
|
|
50
82
|
"--strategy <name>",
|
|
@@ -89,26 +121,45 @@ export function registerOrchestrateCommand(program, dependencies = {}) {
|
|
|
89
121
|
await import("../lib/claude-code-bridge.js");
|
|
90
122
|
const claude = detectClaudeCode();
|
|
91
123
|
const codex = detectCodex();
|
|
124
|
+
const { AgentRouter } = await import("../lib/agent-router.js");
|
|
125
|
+
const backends = new AgentRouter({
|
|
126
|
+
backends: [
|
|
127
|
+
{ type: "claude", installed: claude.found },
|
|
128
|
+
{ type: "codex", installed: codex.found },
|
|
129
|
+
],
|
|
130
|
+
}).summary();
|
|
131
|
+
if (options.json) {
|
|
132
|
+
console.log(
|
|
133
|
+
JSON.stringify(
|
|
134
|
+
{ cliTools: { claude, codex }, backends, alternative: "cc agent" },
|
|
135
|
+
null,
|
|
136
|
+
2,
|
|
137
|
+
),
|
|
138
|
+
);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
92
141
|
console.log(chalk.bold("\n\uD83D\uDD0D AI CLI Detection\n"));
|
|
93
142
|
console.log(
|
|
94
143
|
claude.found
|
|
95
|
-
? chalk.
|
|
144
|
+
? chalk.yellow(
|
|
145
|
+
` claude ${claude.version} — installed, execution blocked`,
|
|
146
|
+
)
|
|
96
147
|
: chalk.red(
|
|
97
148
|
" \u2717 claude not found (install: npm i -g @anthropic-ai/claude-code)",
|
|
98
149
|
),
|
|
99
150
|
);
|
|
100
151
|
console.log(
|
|
101
152
|
codex.found
|
|
102
|
-
? chalk.
|
|
153
|
+
? chalk.yellow(
|
|
154
|
+
` codex ${codex.version} — installed, execution blocked`,
|
|
155
|
+
)
|
|
103
156
|
: chalk.gray(" \u2717 codex not found"),
|
|
104
157
|
);
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
);
|
|
111
|
-
}
|
|
158
|
+
console.log(
|
|
159
|
+
chalk.yellow(
|
|
160
|
+
"\n External CLI model requests cannot be attested; installing a CLI does not enable execution. Use cc agent for tool execution.\n",
|
|
161
|
+
),
|
|
162
|
+
);
|
|
112
163
|
return;
|
|
113
164
|
}
|
|
114
165
|
|
|
@@ -156,16 +207,7 @@ export function registerOrchestrateCommand(program, dependencies = {}) {
|
|
|
156
207
|
}
|
|
157
208
|
|
|
158
209
|
// Build agent backends from --backends option
|
|
159
|
-
|
|
160
|
-
if (options.backends) {
|
|
161
|
-
const backendNames = options.backends.split(",").map((s) => s.trim());
|
|
162
|
-
agentsConfig = {
|
|
163
|
-
backends: backendNames.map((type) => ({ type, weight: 1 })),
|
|
164
|
-
strategy: options.strategy || "round-robin",
|
|
165
|
-
};
|
|
166
|
-
} else if (options.strategy && options.strategy !== "round-robin") {
|
|
167
|
-
agentsConfig = { strategy: options.strategy };
|
|
168
|
-
}
|
|
210
|
+
const agentsConfig = agentOptions(options);
|
|
169
211
|
|
|
170
212
|
// Build orchestrator
|
|
171
213
|
const orch = new Orchestrator({
|
|
@@ -471,11 +513,21 @@ async function _showStatus(cwd, options) {
|
|
|
471
513
|
claude: claude.found ? claude.version : "not found",
|
|
472
514
|
codex: codex.found ? codex.version : "not found",
|
|
473
515
|
},
|
|
474
|
-
activeCliTool:
|
|
516
|
+
activeCliTool: "none",
|
|
517
|
+
alternative: "cc agent",
|
|
475
518
|
};
|
|
476
519
|
|
|
477
520
|
const { AgentRouter } = await import("../lib/agent-router.js");
|
|
478
|
-
const
|
|
521
|
+
const config = agentOptions(options);
|
|
522
|
+
const router = config.backends
|
|
523
|
+
? new AgentRouter({
|
|
524
|
+
...config,
|
|
525
|
+
backends: config.backends.map((b) => ({
|
|
526
|
+
...b,
|
|
527
|
+
installed: { claude, codex }[b.type]?.found ?? null,
|
|
528
|
+
})),
|
|
529
|
+
})
|
|
530
|
+
: AgentRouter.autoDetect({ ...config, cliDetections: { claude, codex } });
|
|
479
531
|
const backends = router.summary();
|
|
480
532
|
|
|
481
533
|
if (options.json) {
|
|
@@ -498,10 +550,16 @@ async function _showStatus(cwd, options) {
|
|
|
498
550
|
for (const b of backends) {
|
|
499
551
|
const icon = b.kind === "cli" ? "🖥" : "🌐";
|
|
500
552
|
console.log(
|
|
501
|
-
` ${icon} ${chalk.cyan(b.type.padEnd(12))} ${
|
|
553
|
+
` ${icon} ${chalk.cyan(b.type.padEnd(12))} ${b.executionMode} — ${b.blockedReason}`,
|
|
502
554
|
);
|
|
503
555
|
}
|
|
504
556
|
|
|
557
|
+
console.log(
|
|
558
|
+
chalk.yellow(
|
|
559
|
+
" Installed/configured does not mean runnable. Use cc agent for tool execution.",
|
|
560
|
+
),
|
|
561
|
+
);
|
|
562
|
+
|
|
505
563
|
console.log();
|
|
506
564
|
console.log(chalk.bold(" Notification Channels"));
|
|
507
565
|
const { NotificationManager } = await import("../lib/notifiers/index.js");
|
|
@@ -534,6 +592,7 @@ async function _webhookMode(cwd, options, evolutionCompositionFactory = null) {
|
|
|
534
592
|
|
|
535
593
|
const orch = new Orchestrator({
|
|
536
594
|
cwd,
|
|
595
|
+
agents: agentOptions(options),
|
|
537
596
|
verbose: options.verbose,
|
|
538
597
|
evolutionCompositionFactory,
|
|
539
598
|
});
|
|
@@ -751,6 +810,7 @@ async function _watchMode(cwd, options, evolutionCompositionFactory = null) {
|
|
|
751
810
|
|
|
752
811
|
const orch = new Orchestrator({
|
|
753
812
|
cwd,
|
|
813
|
+
agents: agentOptions(options),
|
|
754
814
|
verbose: options.verbose,
|
|
755
815
|
evolutionCompositionFactory,
|
|
756
816
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { TextDecoder } from "node:util";
|
|
4
|
+
import { formatExecutionLocationFailureSite } from "../lib/execution-location-failure-site.js";
|
|
4
5
|
import {
|
|
5
6
|
buildExecutionLocationCatalog,
|
|
6
7
|
buildExecutionLocationHandoffPreview,
|
|
@@ -1124,6 +1125,8 @@ function runAction(action, options = {}) {
|
|
|
1124
1125
|
writeProjection(projection, options);
|
|
1125
1126
|
return projection.allowed === false ? 2 : 0;
|
|
1126
1127
|
} catch (error) {
|
|
1128
|
+
if (options.json)
|
|
1129
|
+
process.stderr.write(formatExecutionLocationFailureSite(error));
|
|
1127
1130
|
process.stderr.write(`Execution location failed: ${error.message}\n`);
|
|
1128
1131
|
return 1;
|
|
1129
1132
|
}
|
|
@@ -1145,6 +1148,8 @@ async function runAsyncAction(action, options = {}) {
|
|
|
1145
1148
|
writeProjection(projection, options);
|
|
1146
1149
|
return projection.allowed === false ? 2 : 0;
|
|
1147
1150
|
} catch (error) {
|
|
1151
|
+
if (options.json)
|
|
1152
|
+
process.stderr.write(formatExecutionLocationFailureSite(error));
|
|
1148
1153
|
process.stderr.write(`Execution location failed: ${error.message}\n`);
|
|
1149
1154
|
return 1;
|
|
1150
1155
|
}
|
|
@@ -2,6 +2,8 @@ import chalk from "chalk";
|
|
|
2
2
|
import { numericOption } from "../lib/cli-numeric.js";
|
|
3
3
|
import { logger } from "../lib/logger.js";
|
|
4
4
|
import { getPrLinks } from "../lib/pr-link-store.js";
|
|
5
|
+
import { readSessionTranscriptPage } from "../lib/session-transcript-page.js";
|
|
6
|
+
import { readSessionInputReceipt } from "../lib/session-input-receipt.js";
|
|
5
7
|
import {
|
|
6
8
|
getJsonlSessionMetadata,
|
|
7
9
|
rebuildMessages,
|
|
@@ -15,9 +17,30 @@ export function registerSessionShowSubcommand(session, program) {
|
|
|
15
17
|
.argument("<id>", "Session ID (or prefix)")
|
|
16
18
|
.option("-n, --limit <n>", "Max messages to show")
|
|
17
19
|
.option("--json", "Output as JSON")
|
|
20
|
+
.option(
|
|
21
|
+
"--history",
|
|
22
|
+
"Page verified display history across canonical compaction (requires --json)",
|
|
23
|
+
)
|
|
24
|
+
.option(
|
|
25
|
+
"--input-receipt <client-message-id>",
|
|
26
|
+
"Read verified input acceptance without replay (requires --json)",
|
|
27
|
+
)
|
|
28
|
+
.option(
|
|
29
|
+
"--page-size <n>",
|
|
30
|
+
"Verified context/history page size (1–100; requires --json)",
|
|
31
|
+
)
|
|
32
|
+
.option(
|
|
33
|
+
"--before <cursor>",
|
|
34
|
+
"Load the previous page in the selected view (requires --json)",
|
|
35
|
+
)
|
|
36
|
+
.option(
|
|
37
|
+
"--after <cursor>",
|
|
38
|
+
"Read new display messages after a history sync cursor (requires --json --history)",
|
|
39
|
+
)
|
|
18
40
|
.action(async (id, options) => {
|
|
19
41
|
let ctx = null;
|
|
20
42
|
let shutdown = null;
|
|
43
|
+
let changesSessionId = id;
|
|
21
44
|
try {
|
|
22
45
|
let sess = null;
|
|
23
46
|
|
|
@@ -26,7 +49,15 @@ export function registerSessionShowSubcommand(session, program) {
|
|
|
26
49
|
// if JSONL_SESSION is later disabled.
|
|
27
50
|
const authority = resolveSessionAuthority(id);
|
|
28
51
|
const jsonlId = authority?.readable ? authority.id : null;
|
|
52
|
+
changesSessionId = authority?.id || id;
|
|
29
53
|
if (authority && !authority.readable) {
|
|
54
|
+
if (options.after !== undefined && options.json)
|
|
55
|
+
throw Object.assign(
|
|
56
|
+
new Error("Canonical transcript is unavailable"),
|
|
57
|
+
{
|
|
58
|
+
code: "SESSION_TRANSCRIPT_UNAVAILABLE",
|
|
59
|
+
},
|
|
60
|
+
);
|
|
30
61
|
logger.error(
|
|
31
62
|
`Session ${authority.id} has canonical persistence evidence but no readable transcript (${authority.presence}).`,
|
|
32
63
|
);
|
|
@@ -34,6 +65,61 @@ export function registerSessionShowSubcommand(session, program) {
|
|
|
34
65
|
return;
|
|
35
66
|
}
|
|
36
67
|
if (jsonlId) {
|
|
68
|
+
if (
|
|
69
|
+
options.after !== undefined &&
|
|
70
|
+
(!options.json || !options.history || options.before)
|
|
71
|
+
)
|
|
72
|
+
throw new Error(
|
|
73
|
+
"History changes require --json --history without --before",
|
|
74
|
+
);
|
|
75
|
+
if (options.inputReceipt !== undefined) {
|
|
76
|
+
if (
|
|
77
|
+
!options.json ||
|
|
78
|
+
options.pageSize ||
|
|
79
|
+
options.before ||
|
|
80
|
+
options.after !== undefined ||
|
|
81
|
+
options.history ||
|
|
82
|
+
options.limit
|
|
83
|
+
)
|
|
84
|
+
throw new Error(
|
|
85
|
+
"Input receipt requires --json without pagination or --limit",
|
|
86
|
+
);
|
|
87
|
+
console.log(
|
|
88
|
+
JSON.stringify(
|
|
89
|
+
readSessionInputReceipt(jsonlId, options.inputReceipt),
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (
|
|
95
|
+
options.pageSize ||
|
|
96
|
+
options.before ||
|
|
97
|
+
options.history ||
|
|
98
|
+
options.after !== undefined
|
|
99
|
+
) {
|
|
100
|
+
if (!options.json)
|
|
101
|
+
throw new Error("Transcript pagination requires --json");
|
|
102
|
+
if (options.limit)
|
|
103
|
+
throw new Error(
|
|
104
|
+
"Transcript pagination cannot be combined with --limit",
|
|
105
|
+
);
|
|
106
|
+
const readPage = options.history
|
|
107
|
+
? (await import("../lib/session-transcript-history.js"))
|
|
108
|
+
.readSessionTranscriptHistory
|
|
109
|
+
: readSessionTranscriptPage;
|
|
110
|
+
const page = readPage(jsonlId, {
|
|
111
|
+
limit: numericOption(options.pageSize || "50", {
|
|
112
|
+
name: "--page-size",
|
|
113
|
+
integer: true,
|
|
114
|
+
min: 1,
|
|
115
|
+
max: 100,
|
|
116
|
+
}),
|
|
117
|
+
cursor: options.before || null,
|
|
118
|
+
...(options.after !== undefined ? { after: options.after } : {}),
|
|
119
|
+
});
|
|
120
|
+
console.log(JSON.stringify(page));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
37
123
|
const metadata = getJsonlSessionMetadata(jsonlId);
|
|
38
124
|
const messages = rebuildMessages(jsonlId);
|
|
39
125
|
sess = {
|
|
@@ -50,6 +136,16 @@ export function registerSessionShowSubcommand(session, program) {
|
|
|
50
136
|
// Keep SQLite and the application bootstrap outside the canonical
|
|
51
137
|
// JSONL read path. Legacy sessions still retain the original fallback.
|
|
52
138
|
if (!sess) {
|
|
139
|
+
if (
|
|
140
|
+
options.pageSize ||
|
|
141
|
+
options.before ||
|
|
142
|
+
options.after !== undefined ||
|
|
143
|
+
options.history ||
|
|
144
|
+
options.inputReceipt !== undefined
|
|
145
|
+
)
|
|
146
|
+
throw new Error(
|
|
147
|
+
"Verified transcript pages and input receipts require a canonical JSONL session",
|
|
148
|
+
);
|
|
53
149
|
const runtime = await import("../runtime/bootstrap.js");
|
|
54
150
|
const sessionManager = await import("../lib/session-manager.js");
|
|
55
151
|
shutdown = runtime.shutdown;
|
|
@@ -113,7 +209,19 @@ export function registerSessionShowSubcommand(session, program) {
|
|
|
113
209
|
logger.log("");
|
|
114
210
|
}
|
|
115
211
|
} catch (error) {
|
|
116
|
-
|
|
212
|
+
if (options.after !== undefined && options.json) {
|
|
213
|
+
console.log(
|
|
214
|
+
JSON.stringify({
|
|
215
|
+
schema: "chainlesschain.session-transcript-changes-error/v1",
|
|
216
|
+
sessionId: changesSessionId,
|
|
217
|
+
code:
|
|
218
|
+
typeof error.code === "string" && error.code.length <= 128
|
|
219
|
+
? error.code
|
|
220
|
+
: "SESSION_TRANSCRIPT_CHANGES_FAILED",
|
|
221
|
+
error: String(error.message).slice(0, 1000),
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
} else logger.error(`Failed: ${error.message}`);
|
|
117
225
|
process.exitCode = 1;
|
|
118
226
|
} finally {
|
|
119
227
|
if (ctx && shutdown) await shutdown();
|
package/src/commands/session.js
CHANGED
|
@@ -220,7 +220,7 @@ export function rankSessions(sessions, limit) {
|
|
|
220
220
|
.slice(0, limit);
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
export function registerSessionCommand(program) {
|
|
223
|
+
export function registerSessionCommand(program, dependencies = {}) {
|
|
224
224
|
const session = program
|
|
225
225
|
.command("session")
|
|
226
226
|
.description("Conversation session management");
|
|
@@ -737,13 +737,37 @@ export function registerSessionCommand(program) {
|
|
|
737
737
|
|
|
738
738
|
// Import and start chat REPL with restored messages
|
|
739
739
|
const { startChatRepl } = await import("../repl/chat-repl.js");
|
|
740
|
-
|
|
740
|
+
const {
|
|
741
|
+
resolveChatCommandEvolutionComposition,
|
|
742
|
+
assertChatSessionUsageAdmission,
|
|
743
|
+
} = await import("./chat.js");
|
|
744
|
+
const { readEvolutionCompositionFactory } =
|
|
745
|
+
await import("../lib/evolution/governed-model-turn.js");
|
|
746
|
+
const { loadEvolutionDeploymentCommandDependencies } =
|
|
747
|
+
await import("../lib/evolution/evolution-deployment-loader.js");
|
|
748
|
+
const { waitForAgentEvolutionSession } =
|
|
749
|
+
await import("../lib/evolution/agent-evolution-session-lifecycle.js");
|
|
750
|
+
assertChatSessionUsageAdmission(sess.id);
|
|
751
|
+
// Resume is a chat entrypoint. Use the target's authenticated chat
|
|
752
|
+
// deployment, loaded only here so read-only session commands need none.
|
|
753
|
+
const factory =
|
|
754
|
+
readEvolutionCompositionFactory(dependencies) ??
|
|
755
|
+
readEvolutionCompositionFactory(
|
|
756
|
+
(await loadEvolutionDeploymentCommandDependencies("chat")) || {},
|
|
757
|
+
);
|
|
758
|
+
const composition =
|
|
759
|
+
await resolveChatCommandEvolutionComposition(factory);
|
|
760
|
+
const ingress = composition.evolutionIngress;
|
|
761
|
+
await ingress.start();
|
|
762
|
+
const lifecycle = await startChatRepl({
|
|
741
763
|
model: options.model || sess.model || "qwen2:7b",
|
|
742
764
|
provider: options.provider || sess.provider || "ollama",
|
|
743
765
|
baseUrl: options.baseUrl || "http://localhost:11434",
|
|
744
766
|
resumeMessages: sess.messages,
|
|
745
767
|
sessionId: sess.id,
|
|
768
|
+
evolutionIngress: ingress,
|
|
746
769
|
});
|
|
770
|
+
await waitForAgentEvolutionSession(lifecycle, ingress);
|
|
747
771
|
} catch (err) {
|
|
748
772
|
logger.error(`Failed: ${err.message}`);
|
|
749
773
|
process.exitCode = 1;
|
package/src/commands/tokens.js
CHANGED
|
@@ -49,6 +49,11 @@ import {
|
|
|
49
49
|
clearExpired,
|
|
50
50
|
} from "../lib/response-cache.js";
|
|
51
51
|
|
|
52
|
+
function displayCost(value, unpriced = 0) {
|
|
53
|
+
if (value == null) return "unpriced";
|
|
54
|
+
return `$${Number(value).toFixed(4)}${unpriced ? ` (partial; ${unpriced} unpriced calls)` : ""}`;
|
|
55
|
+
}
|
|
56
|
+
|
|
52
57
|
export function registerTokensCommand(program) {
|
|
53
58
|
const tokens = program
|
|
54
59
|
.command("tokens")
|
|
@@ -99,7 +104,7 @@ export function registerTokensCommand(program) {
|
|
|
99
104
|
` Total tokens: ${chalk.cyan(stats.total_tokens.toLocaleString())}`,
|
|
100
105
|
);
|
|
101
106
|
logger.log(
|
|
102
|
-
` Total cost: ${chalk.yellow(
|
|
107
|
+
` Total cost: ${chalk.yellow(displayCost(stats.total_cost_usd, stats.unpriced_calls))}`,
|
|
103
108
|
);
|
|
104
109
|
logger.log(
|
|
105
110
|
` Avg response: ${chalk.gray(Math.round(stats.avg_response_time_ms) + "ms")}`,
|
|
@@ -108,7 +113,7 @@ export function registerTokensCommand(program) {
|
|
|
108
113
|
if (options.period !== "today") {
|
|
109
114
|
logger.log(chalk.bold("\n Today:"));
|
|
110
115
|
logger.log(
|
|
111
|
-
` Calls: ${chalk.cyan(todayStats.total_calls)} Tokens: ${chalk.cyan(todayStats.total_tokens.toLocaleString())} Cost: ${chalk.yellow(
|
|
116
|
+
` Calls: ${chalk.cyan(todayStats.total_calls)} Tokens: ${chalk.cyan(todayStats.total_tokens.toLocaleString())} Cost: ${chalk.yellow(displayCost(todayStats.total_cost_usd, todayStats.unpriced_calls))}`,
|
|
112
117
|
);
|
|
113
118
|
}
|
|
114
119
|
}
|
|
@@ -146,7 +151,7 @@ export function registerTokensCommand(program) {
|
|
|
146
151
|
` ${chalk.cyan(row.provider)}/${chalk.white(row.model)}`,
|
|
147
152
|
);
|
|
148
153
|
logger.log(
|
|
149
|
-
` Calls: ${row.calls} Tokens: ${row.total_tokens.toLocaleString()} Cost: ${chalk.yellow(
|
|
154
|
+
` Calls: ${row.calls} Tokens: ${row.total_tokens.toLocaleString()} Cost: ${chalk.yellow(displayCost(row.cost_usd, row.unpriced_calls))}`,
|
|
150
155
|
);
|
|
151
156
|
}
|
|
152
157
|
}
|
|
@@ -185,7 +190,7 @@ export function registerTokensCommand(program) {
|
|
|
185
190
|
logger.log(chalk.bold("Recent LLM Calls:\n"));
|
|
186
191
|
for (const e of entries) {
|
|
187
192
|
logger.log(
|
|
188
|
-
` ${chalk.gray(e.created_at)} ${chalk.cyan(e.provider)}/${chalk.white(e.model)} ${e.total_tokens} tokens ${chalk.yellow(
|
|
193
|
+
` ${chalk.gray(e.created_at)} ${chalk.cyan(e.provider)}/${chalk.white(e.model)} ${e.total_tokens} tokens ${chalk.yellow(displayCost(e.cost_usd))} ${chalk.gray(e.response_time_ms + "ms")}`,
|
|
189
194
|
);
|
|
190
195
|
}
|
|
191
196
|
}
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.78",
|
|
7
|
+
"cliVersions": ["0.166.78"],
|
|
8
|
+
"date": null,
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added - cc CLI 0.166.78: CLI and IDE recovery candidate",
|
|
13
|
+
"body": "- Add verified session history paging and recovery across CLI, VS Code, and\n JetBrains, including bounded input and draft handling.\n- Improve process lifecycle and IDE host recovery; keep approval and sandbox\n boundaries with the CLI host.\n- Repair cross-platform CI fixtures and release validation for the exact source\n commit. Publish child npm packages before the CLI, then the IDE extensions."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
4
17
|
{
|
|
5
18
|
"productVersion": null,
|
|
6
19
|
"cliVersion": "0.166.77",
|
|
@@ -2828,6 +2828,37 @@
|
|
|
2828
2828
|
}
|
|
2829
2829
|
}
|
|
2830
2830
|
},
|
|
2831
|
+
"AgentTranscriptReferences": {
|
|
2832
|
+
"type": "object",
|
|
2833
|
+
"additionalProperties": false,
|
|
2834
|
+
"required": [
|
|
2835
|
+
"schema",
|
|
2836
|
+
"sessionId",
|
|
2837
|
+
"assistantEventId"
|
|
2838
|
+
],
|
|
2839
|
+
"properties": {
|
|
2840
|
+
"schema": {
|
|
2841
|
+
"const": "chainlesschain.session-transcript-references/v1"
|
|
2842
|
+
},
|
|
2843
|
+
"sessionId": {
|
|
2844
|
+
"type": "string",
|
|
2845
|
+
"minLength": 1,
|
|
2846
|
+
"maxLength": 256
|
|
2847
|
+
},
|
|
2848
|
+
"assistantEventId": {
|
|
2849
|
+
"type": "string",
|
|
2850
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
2851
|
+
},
|
|
2852
|
+
"userEventId": {
|
|
2853
|
+
"type": "string",
|
|
2854
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
2855
|
+
},
|
|
2856
|
+
"clientMessageId": {
|
|
2857
|
+
"type": "string",
|
|
2858
|
+
"pattern": "^[a-zA-Z0-9_-]{1,80}$"
|
|
2859
|
+
}
|
|
2860
|
+
}
|
|
2861
|
+
},
|
|
2831
2862
|
"AgentResultStreamEvent": {
|
|
2832
2863
|
"type": "object",
|
|
2833
2864
|
"required": [
|
|
@@ -2868,6 +2899,9 @@
|
|
|
2868
2899
|
"type": "integer",
|
|
2869
2900
|
"minimum": 0
|
|
2870
2901
|
},
|
|
2902
|
+
"transcript_refs": {
|
|
2903
|
+
"$ref": "#/$defs/AgentTranscriptReferences"
|
|
2904
|
+
},
|
|
2871
2905
|
"duration_ms": {
|
|
2872
2906
|
"type": "integer",
|
|
2873
2907
|
"minimum": 0
|
|
@@ -3194,6 +3228,43 @@
|
|
|
3194
3228
|
"type": "string",
|
|
3195
3229
|
"maxLength": 64
|
|
3196
3230
|
},
|
|
3231
|
+
"permission_mode_state": {
|
|
3232
|
+
"type": "object",
|
|
3233
|
+
"required": [
|
|
3234
|
+
"correlation_id",
|
|
3235
|
+
"requested",
|
|
3236
|
+
"effective",
|
|
3237
|
+
"policy_revision"
|
|
3238
|
+
],
|
|
3239
|
+
"properties": {
|
|
3240
|
+
"correlation_id": {
|
|
3241
|
+
"type": "string",
|
|
3242
|
+
"pattern": "^[a-zA-Z0-9-]{1,80}$"
|
|
3243
|
+
},
|
|
3244
|
+
"requested": {
|
|
3245
|
+
"enum": [
|
|
3246
|
+
"default",
|
|
3247
|
+
"acceptEdits",
|
|
3248
|
+
"bypassPermissions"
|
|
3249
|
+
]
|
|
3250
|
+
},
|
|
3251
|
+
"effective": {
|
|
3252
|
+
"enum": [
|
|
3253
|
+
"default",
|
|
3254
|
+
"acceptEdits",
|
|
3255
|
+
"auto",
|
|
3256
|
+
"bypassPermissions",
|
|
3257
|
+
"dontAsk",
|
|
3258
|
+
"plan"
|
|
3259
|
+
]
|
|
3260
|
+
},
|
|
3261
|
+
"policy_revision": {
|
|
3262
|
+
"type": "string",
|
|
3263
|
+
"pattern": "^[a-f0-9]{16,64}$"
|
|
3264
|
+
}
|
|
3265
|
+
},
|
|
3266
|
+
"additionalProperties": true
|
|
3267
|
+
},
|
|
3197
3268
|
"tools": {
|
|
3198
3269
|
"type": "array",
|
|
3199
3270
|
"items": {
|