chainlesschain 0.162.188 → 0.162.193
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 +61 -11
- package/bin/chainlesschain.js +7 -52
- package/completions/_cc +209 -0
- package/completions/cc.bash +18 -0
- package/completions/cc.fish +13 -0
- package/completions/cc.ps1 +226 -0
- package/package.json +10 -2
- package/src/assets/web-panel/assets/{AIOps-Brr1LVcE.js → AIOps-DBLkaTje.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DQU74DKG.js → ActionButton-BAy-Qebo.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CYp9178y.js → Analytics-Dfb1Mlau.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DW4SCYsW.js → AppLayout-BbFkN8m0.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-CYlD_ed1.js → Artifacts-kM4-cEEH.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CWl1rZOi.js → Audit-BSQfYWf3.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BOR-LPsa.js → BackgroundAgents-CWDbI_fG.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DLpG7j1X.js → Backup-BxLPbq_Q.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-B35K9wdr.js → BaseInput-DuIbdrp6.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CwUJb9gB.js → Chat-NEmjGahU.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-1v6aMS1m.js → ChatBubbleRenderer-DfJEo-5_.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-pi3-tPNW.js → Checkbox-CaoeG3Ns.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-FyNF35eL.js → Codegen-BFf_g3xY.js} +1 -1
- package/src/assets/web-panel/assets/{Col-tGt_JDEr.js → Col-CNOd8mdQ.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CC7LonQX.js → Community-BhpDqz-i.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BGXrHHjE.js → Compact-CQ42T7Z6.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DSW0TBZ8.js → Compliance-DI5PcLMN.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Bhk7rbvE.js → Cowork-wYYZe0wR.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DxyiQ2NZ.js → Cron-Dlq03DD_.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-B2ZkxHok.js → Crosschain-BzqS8PP3.js} +1 -1
- package/src/assets/web-panel/assets/{DID-yOJV99eJ.js → DID-It55Yem7.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CKsttz7D.js → Dashboard-9HkH6oxn.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CVFldXSL.js → Dropdown-00e2YWRB.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-Bufv638J.js → EmailListRenderer-By-ugRDL.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-4ncjoIjL.js → FamilyGuardDashboard-C396yu5m.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DsknEDoX.js → Federation-BME5sbZY.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Cqe5jWXA.js → FormItemContext-B4TEZCr-.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-NAJaFKxc.js → GenericCardRenderer-_9CX9ieY.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CszKQpnl.js → Git-BrS6WVSr.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BXGodXi6.js → Governance-BMdCWnKF.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CkoYuG2c.js → Inference-Bcp3vzcA.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DFlEr_T0.js → KnowledgeGraph-DlLuqGY5.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CVaENddA.js → Logs-D-W_6x09.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-DElGPxCZ.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-CDlLT0fw.js → Marketplace-Dzn2guvI.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DdwOyszN.js → McpTools-uPict-KL.js} +6 -6
- package/src/assets/web-panel/assets/{Memory-DKQnkKuG.js → Memory-BCw43kOb.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DGseqlzJ.js → MobileBridge-DmV8Wv7F.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-COBbEOlj.js → MobileProjects-C-HaCmSM.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-O61Vwyli.js → Mtc-C6jxJ34Y.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-Dw2SyasS.js → MtcAudit-Za8ExwhQ.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-hSu_l8kf.js → Multisig-KKDbuEgb.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CX1Epurr.js → NLProgramming-Dj97zbCk.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-R9xX8o8_.js → Notes-DBXvMraU.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-jtSNLCuK.js → NotificationSettings-DOxITLYl.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-7DVjZwMM.js +1 -0
- package/src/assets/web-panel/assets/{Organization-Pu2WO-U3.js → Organization-D1i73mjb.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BjnqUyFp.js → Overflow-kW6Q3rvg.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-jjkvz44c.js → P2P-C-v_8p2v.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-tUbbY64W.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-D4yDpivd.js → Permissions-DkHxEZ58.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-0qsL6iH1.js → PersonalDataHub-DWuMPGrK.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-Cx7Ybrk2.js → Pipeline-30IYXWWm.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-PbfR_M_V.js → Privacy-DZNQ4RrH.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CyV6Gsub.js → ProjectInit-De2MCElf.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-C7KZ2Wdk.js → ProjectSettings-5uHk9wsC.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DQDjO-yK.js → Projects-XjDfrFLb.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-DyFVBBMX.js → Providers-Bgwj6gcE.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CzB1BC9_.js → QrScannerModal-gKql9umv.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Bk636mC1.js → QuickAsk-BWvmwkh7.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DoWxHIT3.js → Recommend-Uok4hZPd.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-oOVIv9wq.js → RemoteSession-DLJzTk9a.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-BucoReGG.js → Reputation-ZVwIPMSO.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DzmOdJU7.js → Row-CN04HxWR.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-C1tK7KGU.js → RssFeed-BdSrEG4g.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CSnInOqk.js → Search-5PwVd0IR.js} +1 -1
- package/src/assets/web-panel/assets/{Security-dlejr15l.js → Security-DdBo4zjN.js} +3 -3
- package/src/assets/web-panel/assets/{Services-BioPZuNh.js → Services-D3letU7M.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DWMibwpC.js → Skeleton--Jb83f1v.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BAAnx1B2.js → Skills-Bg-CulHX.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-jWNp4hNO.js → Sla-7QOa7S-X.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-y5kqKha-.js → SpeechSettings-DQwppjRw.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-B9GNsc3e.js → SyncSettings-dNPQGL-s.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BDBYKRen.js → Tasks-Ggs-Z48q.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DRiE5eaN.js → Templates-78TYHgRO.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BGlAvExF.js → Tenant-xHwwv9vO.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B8uzrbNY.js → Terminal-BJXSJfm4.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Df48iveY.js → TimelineRenderer-fLbjRhJw.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CcmHndN6.js → Tokens-oMSBSBmB.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DPkWxmQ2.js → Trigger-CfnY_wX_.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DTb5a5AV.js → Trust-AdyTgYKO.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CBmg5vch.js → UkeySign-C5K_81dS.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B0mZrz4O.js → VideoEditing-vcGVDqki.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Bxs7_mpd.js → Wallet-hhOc3hlY.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C8x3cMxU.js → WebAuthn-CVloC11s.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-DPrNznrP.js → WorkflowEditor-CYeE32R5.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D3bYWu7S.js → chat-CNROR5bN.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DY-PwMu4.js → colors-Cjx-cnwU.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-LDk10Kw6.js → compact-item-DOIfelvD.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-C-2MZnFq.js → createContext-DfA7UZ8u.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-ChcCBGs7.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BQIBjcnB.js → hasIn-BMSCzcfM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQVb2dWp.js → index-5-HXgOX5.js} +1 -1
- package/src/assets/web-panel/assets/{index-BdXnYMCZ.js → index-AWg-0M1S.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cx6D_dx2.js → index-B4iYzpkL.js} +1 -1
- package/src/assets/web-panel/assets/{index-_HRO_cIu.js → index-B5Udeb_6.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlRYqt3S.js → index-B7gf77CJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BrnRO9yE.js → index-BEMwBBHk.js} +1 -1
- package/src/assets/web-panel/assets/{index-VCh5zNJo.js → index-BM1y_9hM.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRI3ngNg.js → index-BUonmKSE.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3GNvExG.js → index-BbQ2eQ8H.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSvo_bp0.js → index-BemJ2u_E.js} +1 -1
- package/src/assets/web-panel/assets/{index-L6qixyLc.js → index-BolaOQxx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BI4KgcYC.js → index-BxOk9vkG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CY4KnaO9.js → index-By61ojUx.js} +1 -1
- package/src/assets/web-panel/assets/{index-L3smcoQX.js → index-C2K9SNVX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BX2b9Orc.js → index-C3L5gdiD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz4b6Z_7.js → index-C7xn0Nub.js} +1 -1
- package/src/assets/web-panel/assets/{index-COG61sRv.js → index-CAnvhwg6.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7FC8cP2.js → index-CEKMcOyU.js} +1 -1
- package/src/assets/web-panel/assets/{index-BN-xdSWZ.js → index-CNC5onm4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY2FIrmz.js → index-CVL27kXC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiTvBAr-.js → index-CVm1_i3t.js} +1 -1
- package/src/assets/web-panel/assets/{index-DhRt9cYJ.js → index-CdYBye8B.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5pgtZnY.js → index-ClNMrqEY.js} +1 -1
- package/src/assets/web-panel/assets/{index-7xKu7Fns.js → index-Cs6l7uRu.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4K1weKc.js → index-CshQbilz.js} +1 -1
- package/src/assets/web-panel/assets/{index-k7C_oDCO.js → index-Cyweh0Hy.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3Oq-DLL.js → index-DBpWXFed.js} +3 -3
- package/src/assets/web-panel/assets/{index-DYyLJPlF.js → index-DHtpHZAQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dh-tkpKQ.js → index-DLmn0BoK.js} +1 -1
- package/src/assets/web-panel/assets/{index-8JC9BJa1.js → index-DPAWBrMf.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dd2Km97U.js → index-DjEsxO5h.js} +1 -1
- package/src/assets/web-panel/assets/{index-KFZO_lcx.js → index-FBc_CJBd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTIZpPtG.js → index-Icdoqmzt.js} +1 -1
- package/src/assets/web-panel/assets/index-Q2IajL54.js +1 -0
- package/src/assets/web-panel/assets/index-bRkHgOMc.js +1 -0
- package/src/assets/web-panel/assets/{index-lmm9p-jm.js → index-dCd8cSUq.js} +1 -1
- package/src/assets/web-panel/assets/{index-HasPt4-h.js → index-m2vG9gG_.js} +1 -1
- package/src/assets/web-panel/assets/{index-CaslYch6.js → index-mTpHoEzr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbR6ROOa.js → index-ti_lnTWl.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-zQPSHf2C.js → initDefaultProps-Bu8k7H1Y.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CKCStGVk.js → motion-s3iVK41k.js} +1 -1
- package/src/assets/web-panel/assets/{move-BufVDGYF.js → move-B6B-E5Jz.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DcaFxy5D.js → mtc-parser-BiYgTidA.js} +1 -1
- package/src/assets/web-panel/assets/{omit-EScpkGdo.js → omit-pU1RdUDA.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-72hG_qfT.js → pickAttrs-Cdoq_SeM.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CMFWiH20.js → placementArrow-DIuvAn2K.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DKQHS41p.js → responsiveObserve-8w16YR2D.js} +1 -1
- package/src/assets/web-panel/assets/{slide-QVAFHTIQ.js → slide-VZ01cZe3.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DIz38e2G.js → statusUtils-lh8YMN8Z.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-zK5cyLby.js → styleChecker-CmDyreec.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DhZngk62.js → useFlexGapSupport-hiJWMU5y.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BvV2cvkg.js → useFs-Thnu-Iaj.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CRmxb9l3.js → usePersonalDataHub-LBdOxjwY.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CgQIbobP.js → vnode-Cg6lFY_X.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-D4XrrO0R.js → zoom-DVfsR1YO.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/cli-help.js +181 -0
- package/src/command-help-index.json +181 -0
- package/src/command-manifest.json +1107 -175
- package/src/command-surface-policy.js +197 -0
- package/src/commands/agent.js +98 -33
- package/src/commands/artifacts.js +400 -2
- package/src/commands/background-session.js +41 -3
- package/src/commands/checkpoint-managed.js +1059 -0
- package/src/commands/checkpoint-restore-recovery.js +1476 -0
- package/src/commands/checkpoint.js +950 -22
- package/src/commands/compact.js +101 -25
- package/src/commands/config.js +506 -20
- package/src/commands/doctor.js +4 -1
- package/src/commands/hub.js +1 -1
- package/src/commands/mcp.js +688 -24
- package/src/commands/pack.js +16 -2
- package/src/commands/plugin.js +20 -12
- package/src/commands/session-mcp-recovery.js +218 -0
- package/src/commands/session.js +470 -110
- package/src/commands/setup.js +36 -10
- package/src/commands/skill.js +181 -110
- package/src/commands/status.js +21 -5
- package/src/commands/team-distributed.js +3324 -0
- package/src/commands/team.js +1130 -74
- package/src/commands/update.js +68 -6
- package/src/constants.js +11 -0
- package/src/data/changelog.json +26 -0
- package/src/gateways/ws/action-protocol.js +10 -0
- package/src/gateways/ws/session-protocol.js +555 -27
- package/src/gateways/ws/ws-agent-handler.js +541 -14
- package/src/gateways/ws/ws-session-gateway.js +129 -22
- package/src/gateways/ws/ws-session-state.js +431 -0
- package/src/harness/background-task-manager.js +233 -36
- package/src/harness/jsonl-session-store.js +2551 -167
- package/src/harness/mcp-client.js +802 -61
- package/src/harness/prompt-compressor.js +227 -27
- package/src/harness/session-index.js +89 -38
- package/src/harness/session-list-index.js +254 -0
- package/src/harness/structured-handoff.js +410 -0
- package/src/lazy-dispatch.js +747 -84
- package/src/lib/__tests__/logger.test.js +50 -2
- package/src/lib/advisor-runtime.js +1047 -0
- package/src/lib/agent-core.js +2 -0
- package/src/lib/agent-sandbox.js +120 -26
- package/src/lib/agent-session-export.js +20 -0
- package/src/lib/agent-team/task-lease.js +271 -3
- package/src/lib/agent-team/team-adjudication.js +1501 -0
- package/src/lib/agent-team/team-budget.js +4 -1
- package/src/lib/agent-team/team-control-store.js +582 -0
- package/src/lib/agent-team/team-distributed-queue.js +5246 -0
- package/src/lib/agent-team/team-process-checkpoint.js +211 -0
- package/src/lib/agent-team/team-runner.js +543 -24
- package/src/lib/agent-team/team-worktree.js +1403 -95
- package/src/lib/artifact-store.js +131 -8
- package/src/lib/background-agent-supervisor.js +185 -13
- package/src/lib/background-interaction-journal.js +37 -9
- package/src/lib/background-launch-profile.js +1058 -0
- package/src/lib/checkpoint-restore-already-completed-controller.js +902 -0
- package/src/lib/checkpoint-restore-orchestrator.js +987 -0
- package/src/lib/checkpoint-restore-partial-rollback-controller.js +1953 -0
- package/src/lib/checkpoint-restore-recovery-controller.js +689 -0
- package/src/lib/checkpoint-restore-recovery.js +884 -0
- package/src/lib/checkpoint-restore-retention.js +126 -0
- package/src/lib/checkpoint-restore-saga.js +5079 -0
- package/src/lib/checkpoint-restore-session-recovery.js +1178 -0
- package/src/lib/checkpoint-restore-workspace-target-verifier.js +270 -0
- package/src/lib/checkpoint-store.js +1688 -97
- package/src/lib/checkpoint-timeline-authority.js +522 -0
- package/src/lib/checkpoint-timeline.js +642 -0
- package/src/lib/config-keys.js +18 -119
- package/src/lib/config-manager.js +446 -27
- package/src/lib/config-redaction.js +57 -0
- package/src/lib/config-schema.js +853 -0
- package/src/lib/cowork-mcp-tools.js +5 -0
- package/src/lib/cowork-task-runner.js +458 -63
- package/src/lib/delivery-coordinator.js +1234 -0
- package/src/lib/delivery-evidence.js +450 -0
- package/src/lib/doctor-checkup.js +199 -14
- package/src/lib/executable-path.js +34 -0
- package/src/lib/fatal-handler.js +16 -0
- package/src/lib/file-checkpoint.js +4909 -186
- package/src/lib/file-lines.js +125 -0
- package/src/lib/headless-config-command.js +16 -5
- package/src/lib/hook-runner.cjs +139 -38
- package/src/lib/hooks-v2-workspace-context.js +10 -0
- package/src/lib/impacted-gate-selector.js +424 -0
- package/src/lib/interaction-adapter.js +62 -0
- package/src/lib/jsonl-session-store.js +1 -35
- package/src/lib/logger.js +66 -14
- package/src/lib/managed-checkpoint-render.js +60 -0
- package/src/lib/managed-tool-checkpoint.js +194 -0
- package/src/lib/mcp-call-ledger-store.js +1069 -0
- package/src/lib/mcp-call-ledger.js +747 -0
- package/src/lib/mcp-client.js +5 -0
- package/src/lib/mcp-conflict-scheduler.js +468 -0
- package/src/lib/mcp-effect-contract.js +102 -0
- package/src/lib/mcp-headers-helper-trust.js +145 -0
- package/src/lib/mcp-headers-helper.js +616 -0
- package/src/lib/mcp-host-recovery-runtime.js +131 -0
- package/src/lib/mcp-ledger-recovery-admission.js +1065 -0
- package/src/lib/mcp-recovery-adjudication.js +443 -0
- package/src/lib/output-context.js +86 -0
- package/src/lib/packer/file-identity.js +170 -0
- package/src/lib/packer/index.js +3 -0
- package/src/lib/packer/native-update-state.js +277 -0
- package/src/lib/packer/pack-update-applier.js +1983 -136
- package/src/lib/packer/pack-update-checker.js +34 -0
- package/src/lib/packer/pack-update-downloader.js +875 -86
- package/src/lib/packer/pack-update-signature.js +86 -0
- package/src/lib/packer/pkg-config-generator.js +6 -0
- package/src/lib/paths.js +65 -10
- package/src/lib/plan-mode.js +831 -14
- package/src/lib/plan-persistence.js +540 -0
- package/src/lib/plugin-runtime/hooks.js +227 -69
- package/src/lib/plugin-runtime/plugin-options.js +189 -44
- package/src/lib/pr-automation-policy.js +146 -8
- package/src/lib/process-execution-broker/credential-agent.js +7 -0
- package/src/lib/process-execution-broker/index.js +491 -13
- package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +28 -1
- package/src/lib/process-execution-broker/linux-generic-bwrap.js +28 -4
- package/src/lib/process-execution-broker/platform-sandbox.js +92 -70
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +284 -19
- package/src/lib/process-execution-broker/workspace-transaction.js +4459 -0
- package/src/lib/project-instructions.js +165 -29
- package/src/lib/project-mcp-trust.js +67 -0
- package/src/lib/public-ide-capability-manifest.js +272 -0
- package/src/lib/public-ide-capability-validation.js +351 -0
- package/src/lib/secret-store.js +267 -43
- package/src/lib/secure-file-identity.js +433 -0
- package/src/lib/secure-fs.js +1089 -0
- package/src/lib/security-audit.js +58 -0
- package/src/lib/service-manager.js +34 -13
- package/src/lib/session-budget-runtime.js +1452 -0
- package/src/lib/session-host-snapshot.js +388 -0
- package/src/lib/session-message-provenance.js +429 -0
- package/src/lib/session-projection.js +804 -0
- package/src/lib/session-resource-budget.js +1495 -0
- package/src/lib/settings-hooks.cjs +138 -22
- package/src/lib/settings-loader.cjs +25 -2
- package/src/lib/side-effect-ledger-store.js +45 -23
- package/src/lib/skill-execution-identity.js +217 -0
- package/src/lib/skill-loader.js +299 -18
- package/src/lib/sub-agent-context.js +236 -28
- package/src/lib/sub-agent-registry.js +5 -0
- package/src/lib/subagent-contract.js +94 -0
- package/src/lib/todo-manager.js +185 -18
- package/src/lib/todo-persistence.js +417 -0
- package/src/lib/turn-binding-store.js +41 -23
- package/src/lib/turn-binding.js +160 -2
- package/src/lib/with-file-lock.js +165 -24
- package/src/lib/ws-chat-handler.js +21 -0
- package/src/program-base.js +18 -0
- package/src/repl/advisor-command.js +103 -0
- package/src/repl/agent-repl.js +2175 -146
- package/src/repl/btw-command.js +93 -10
- package/src/repl/clipboard-image.js +119 -0
- package/src/repl/config-summary.js +64 -108
- package/src/repl/prompt-editor.js +233 -0
- package/src/repl/prompt-interactions.js +344 -0
- package/src/repl/prompt-stash.js +354 -0
- package/src/repl/prompt-suggestions.js +312 -0
- package/src/repl/repl-keybindings.js +227 -0
- package/src/repl/session-recap.js +217 -0
- package/src/repl/slash-command-registry.js +22 -0
- package/src/repl/terminal-layout.js +88 -0
- package/src/runtime/agent-core.js +1630 -447
- package/src/runtime/coding-agent-contract-shared.cjs +13 -1
- package/src/runtime/coding-agent-managed-tool-policy.cjs +7 -2
- package/src/runtime/diagnostics.js +32 -13
- package/src/runtime/headless-runner.js +310 -118
- package/src/runtime/headless-stream.js +356 -95
- package/src/runtime/mcp-config.js +148 -14
- package/src/runtime/policies/agent-policy.js +14 -0
- package/src/runtime/status-diagnostics-lite.js +137 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-7iWGwZ-r.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BU2Yqq5H.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-69ca_WeR.js +0 -7
- package/src/assets/web-panel/assets/devWarning-B4dXIJqD.js +0 -1
- package/src/assets/web-panel/assets/index-C-C7DaG6.js +0 -1
- package/src/assets/web-panel/assets/index-DkfWzWtd.js +0 -1
package/src/commands/setup.js
CHANGED
|
@@ -8,7 +8,10 @@ import {
|
|
|
8
8
|
VERSION,
|
|
9
9
|
} from "../constants.js";
|
|
10
10
|
import { ensureHomeDir, getConfigPath } from "../lib/paths.js";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
setSecretConfigValue,
|
|
13
|
+
updateConfigAtomically,
|
|
14
|
+
} from "../lib/config-manager.js";
|
|
12
15
|
import {
|
|
13
16
|
isDockerAvailable,
|
|
14
17
|
isDockerComposeAvailable,
|
|
@@ -44,6 +47,14 @@ export function registerSetupCommand(program) {
|
|
|
44
47
|
});
|
|
45
48
|
}
|
|
46
49
|
|
|
50
|
+
export function assertRequiredProviderCredential(providerInfo, apiKey) {
|
|
51
|
+
if (providerInfo?.requiresApiKey && (apiKey === null || apiKey === "")) {
|
|
52
|
+
const error = new Error("An API key is required for the selected provider");
|
|
53
|
+
error.code = "SETUP_API_KEY_REQUIRED";
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
async function runSetup(options) {
|
|
48
59
|
logger.log(chalk.bold("\n ChainlessChain Setup Wizard\n"));
|
|
49
60
|
logger.log(` Version: ${VERSION}`);
|
|
@@ -102,6 +113,9 @@ async function runSetup(options) {
|
|
|
102
113
|
|
|
103
114
|
if (providerInfo.requiresApiKey) {
|
|
104
115
|
apiKey = await askPassword(`Enter ${providerInfo.name} API key:`);
|
|
116
|
+
// Abort before changing provider/baseUrl so an old provider's credential
|
|
117
|
+
// can never be paired with and sent to a newly selected endpoint.
|
|
118
|
+
assertRequiredProviderCredential(providerInfo, apiKey);
|
|
105
119
|
}
|
|
106
120
|
|
|
107
121
|
if (provider === "custom" || providerInfo.isProxy) {
|
|
@@ -143,15 +157,27 @@ async function runSetup(options) {
|
|
|
143
157
|
}
|
|
144
158
|
|
|
145
159
|
// Step 7: Save config
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
160
|
+
const applySetupValues = (config) => {
|
|
161
|
+
config.setupCompleted = true;
|
|
162
|
+
config.completedAt = new Date().toISOString();
|
|
163
|
+
config.edition = edition;
|
|
164
|
+
config.llm.provider = provider;
|
|
165
|
+
config.llm.baseUrl = baseUrl;
|
|
166
|
+
config.llm.model = model;
|
|
167
|
+
};
|
|
168
|
+
if (apiKey) {
|
|
169
|
+
// The provider settings, keychain write and config pointer switch form one
|
|
170
|
+
// locked transaction. A failed key write/save leaves the prior config and
|
|
171
|
+
// prior secret reference active.
|
|
172
|
+
setSecretConfigValue("llm.apiKey", apiKey, {
|
|
173
|
+
storage: "auto",
|
|
174
|
+
configMutator: applySetupValues,
|
|
175
|
+
});
|
|
176
|
+
} else {
|
|
177
|
+
// Preserve any existing secret reference when the selected provider needs
|
|
178
|
+
// no new key; never clear a usable credential before another write.
|
|
179
|
+
updateConfigAtomically(applySetupValues);
|
|
180
|
+
}
|
|
155
181
|
logger.success("Configuration saved");
|
|
156
182
|
|
|
157
183
|
// Step 8: Docker services
|
package/src/commands/skill.js
CHANGED
|
@@ -10,7 +10,6 @@ import chalk from "chalk";
|
|
|
10
10
|
import ora from "ora";
|
|
11
11
|
import fs from "fs";
|
|
12
12
|
import path from "path";
|
|
13
|
-
import { createSkillProcessBroker } from "../lib/skill-process-broker.js";
|
|
14
13
|
import { logger } from "../lib/logger.js";
|
|
15
14
|
import {
|
|
16
15
|
CLISkillLoader,
|
|
@@ -49,6 +48,9 @@ import {
|
|
|
49
48
|
} from "../lib/skill-loader.js";
|
|
50
49
|
import { getElectronUserDataDir } from "../lib/paths.js";
|
|
51
50
|
import { findProjectRoot } from "../lib/project-detector.js";
|
|
51
|
+
import { loadConfig } from "../lib/config-manager.js";
|
|
52
|
+
import { applyConfigLlmDefaults } from "../lib/llm-config-defaults.js";
|
|
53
|
+
import { BUILT_IN_PROVIDERS } from "../lib/llm-providers.js";
|
|
52
54
|
import {
|
|
53
55
|
generateCliPacks,
|
|
54
56
|
checkForUpdates,
|
|
@@ -71,7 +73,7 @@ function canRunOnPlatform(skill) {
|
|
|
71
73
|
return skill.os.includes(process.platform);
|
|
72
74
|
}
|
|
73
75
|
|
|
74
|
-
const SKILL_TEMPLATE_MD = (name) => `---
|
|
76
|
+
export const SKILL_TEMPLATE_MD = (name) => `---
|
|
75
77
|
name: ${name}
|
|
76
78
|
display-name: ${name}
|
|
77
79
|
description: Custom skill — edit this description
|
|
@@ -80,11 +82,15 @@ category: custom
|
|
|
80
82
|
tags: [custom]
|
|
81
83
|
user-invocable: true
|
|
82
84
|
handler: handler.js
|
|
85
|
+
isolation: true
|
|
83
86
|
---
|
|
84
87
|
|
|
85
88
|
# ${name}
|
|
86
89
|
|
|
87
|
-
Describe
|
|
90
|
+
Describe the task this skill performs. These instructions are authoritative;
|
|
91
|
+
the CLI executes them in an isolated child agent with a host-owned tool
|
|
92
|
+
allow-list. The handler file is an identity marker and is never imported into
|
|
93
|
+
the CLI process.
|
|
88
94
|
|
|
89
95
|
## Usage
|
|
90
96
|
|
|
@@ -93,29 +99,151 @@ chainlesschain skill run ${name} "your input"
|
|
|
93
99
|
\`\`\`
|
|
94
100
|
`;
|
|
95
101
|
|
|
96
|
-
const SKILL_TEMPLATE_HANDLER = (name) => `/**
|
|
97
|
-
*
|
|
102
|
+
export const SKILL_TEMPLATE_HANDLER = (name) => `/**
|
|
103
|
+
* Execution identity marker for ${name}.
|
|
104
|
+
*
|
|
105
|
+
* ChainlessChain CLI deliberately never imports this module. Put executable
|
|
106
|
+
* behavior in SKILL.md instructions and use approved agent tools; a future
|
|
107
|
+
* restricted worker may consume this metadata without granting process-local
|
|
108
|
+
* authority.
|
|
98
109
|
*/
|
|
110
|
+
export default Object.freeze({
|
|
111
|
+
skill: "${name}",
|
|
112
|
+
executionMode: "controlled-agent-tools",
|
|
113
|
+
});
|
|
114
|
+
`;
|
|
115
|
+
|
|
116
|
+
export function createControlledSkillScaffold(name, targetDir, io = fs) {
|
|
117
|
+
io.mkdirSync(targetDir, { recursive: true });
|
|
118
|
+
io.writeFileSync(
|
|
119
|
+
path.join(targetDir, "SKILL.md"),
|
|
120
|
+
SKILL_TEMPLATE_MD(name),
|
|
121
|
+
"utf-8",
|
|
122
|
+
);
|
|
123
|
+
io.writeFileSync(
|
|
124
|
+
path.join(targetDir, "handler.js"),
|
|
125
|
+
SKILL_TEMPLATE_HANDLER(name),
|
|
126
|
+
"utf-8",
|
|
127
|
+
);
|
|
128
|
+
return { name, targetDir, isolation: true };
|
|
129
|
+
}
|
|
99
130
|
|
|
100
|
-
|
|
101
|
-
async
|
|
102
|
-
|
|
103
|
-
|
|
131
|
+
export function createCliSkillReauthorizer(options = {}) {
|
|
132
|
+
return async (request) => {
|
|
133
|
+
if (options.assumeYes === true) return { authorized: true };
|
|
134
|
+
const stdin = options.stdin || process.stdin;
|
|
135
|
+
const stdout = options.stdout || process.stdout;
|
|
136
|
+
if (stdin?.isTTY !== true || stdout?.isTTY !== true) return false;
|
|
137
|
+
|
|
138
|
+
const confirm =
|
|
139
|
+
options.confirm || (await import("@inquirer/prompts")).confirm;
|
|
140
|
+
const skillId = request?.skill?.id || "unknown";
|
|
141
|
+
const source = request?.skill?.source || "unknown";
|
|
142
|
+
const digest = String(request?.currentDigest || "").slice(0, 24);
|
|
143
|
+
const authorized = await confirm({
|
|
144
|
+
message:
|
|
145
|
+
`Authorize isolated skill "${skillId}" from ${source} ` +
|
|
146
|
+
`for this process (${digest || "digest unavailable"})?`,
|
|
147
|
+
default: false,
|
|
148
|
+
});
|
|
149
|
+
return { authorized: authorized === true };
|
|
150
|
+
};
|
|
151
|
+
}
|
|
104
152
|
|
|
105
|
-
|
|
106
|
-
|
|
153
|
+
export function resolveControlledSkillLlmOptions({
|
|
154
|
+
config = loadConfig(),
|
|
155
|
+
env = process.env,
|
|
156
|
+
} = {}) {
|
|
157
|
+
const resolved = {};
|
|
158
|
+
// Match the existing command/cowork precedence: an explicit provider from
|
|
159
|
+
// the environment wins as a complete provider selection; otherwise the
|
|
160
|
+
// configured llm block supplies provider/model/baseUrl/apiKey.
|
|
161
|
+
if (!env.LLM_PROVIDER) {
|
|
162
|
+
applyConfigLlmDefaults(resolved, config?.llm || {});
|
|
163
|
+
}
|
|
164
|
+
const provider = resolved.provider || env.LLM_PROVIDER || "ollama";
|
|
165
|
+
const providerDefinition = BUILT_IN_PROVIDERS[provider];
|
|
166
|
+
return {
|
|
167
|
+
...resolved,
|
|
168
|
+
provider,
|
|
169
|
+
model: resolved.model || env.LLM_MODEL || providerDefinition?.models?.[0],
|
|
170
|
+
baseUrl: resolved.baseUrl || providerDefinition?.baseUrl,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
107
173
|
|
|
108
|
-
|
|
174
|
+
export async function runControlledSkill(options = {}) {
|
|
175
|
+
const {
|
|
176
|
+
name,
|
|
177
|
+
input = "",
|
|
178
|
+
cwd = process.cwd(),
|
|
179
|
+
loader,
|
|
180
|
+
executeTool = null,
|
|
181
|
+
llmOptions = null,
|
|
182
|
+
} = options;
|
|
183
|
+
if (
|
|
184
|
+
!loader ||
|
|
185
|
+
(typeof loader.getResolvedSkills !== "function" &&
|
|
186
|
+
typeof loader.loadAll !== "function")
|
|
187
|
+
) {
|
|
188
|
+
throw new TypeError("runControlledSkill requires a CLISkillLoader");
|
|
189
|
+
}
|
|
190
|
+
const skills =
|
|
191
|
+
typeof loader.getResolvedSkills === "function"
|
|
192
|
+
? loader.getResolvedSkills()
|
|
193
|
+
: loader.loadAll();
|
|
194
|
+
let skill = skills.find(
|
|
195
|
+
(candidate) => candidate.id === name || candidate.dirName === name,
|
|
196
|
+
);
|
|
197
|
+
if (!skill) {
|
|
198
|
+
return { error: `Skill not found: ${name}`, code: "CC_SKILL_NOT_FOUND" };
|
|
199
|
+
}
|
|
200
|
+
const executionContext = {
|
|
201
|
+
loadedBecause: "run_skill",
|
|
202
|
+
bodyIncluded: false,
|
|
203
|
+
};
|
|
204
|
+
if (typeof loader.materializeSkillForExecution === "function") {
|
|
205
|
+
skill = await loader.materializeSkillForExecution(skill, executionContext);
|
|
206
|
+
} else if (typeof loader.materializeSkill === "function") {
|
|
207
|
+
skill = loader.materializeSkill(skill, executionContext);
|
|
208
|
+
}
|
|
209
|
+
if (skill.isolation !== true) {
|
|
109
210
|
return {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
211
|
+
error:
|
|
212
|
+
`Skill "${skill.id}" is not configured for controlled execution. ` +
|
|
213
|
+
"Add isolation: true before running it.",
|
|
214
|
+
code: "CC_SKILL_DIRECT_HANDLER_BLOCKED",
|
|
113
215
|
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
216
|
+
}
|
|
217
|
+
if (!canRunOnPlatform(skill)) {
|
|
218
|
+
return {
|
|
219
|
+
error: `Skill "${skill.id}" is not supported on ${process.platform}`,
|
|
220
|
+
code: "CC_SKILL_PLATFORM_UNSUPPORTED",
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const dispatch =
|
|
224
|
+
executeTool || (await import("../runtime/agent-core.js")).executeTool;
|
|
225
|
+
const result = await dispatch(
|
|
226
|
+
"run_skill",
|
|
227
|
+
{ skill_name: skill.id, input: String(input) },
|
|
228
|
+
{
|
|
229
|
+
cwd,
|
|
230
|
+
skillLoader: loader,
|
|
231
|
+
...(llmOptions ? { llmOptions: { ...llmOptions } } : {}),
|
|
232
|
+
},
|
|
233
|
+
);
|
|
234
|
+
const nestedFailure = /^\s*Sub-agent failed:/i.test(
|
|
235
|
+
String(result?.summary || ""),
|
|
236
|
+
);
|
|
237
|
+
if (result?.error || nestedFailure) {
|
|
238
|
+
return {
|
|
239
|
+
...result,
|
|
240
|
+
success: false,
|
|
241
|
+
code: result?.code || "CC_SKILL_CONTROLLED_RUN_FAILED",
|
|
242
|
+
error: result?.error || result.summary,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
}
|
|
119
247
|
|
|
120
248
|
export function registerSkillCommand(program) {
|
|
121
249
|
const skill = program
|
|
@@ -321,95 +449,46 @@ export function registerSkillCommand(program) {
|
|
|
321
449
|
// skill run
|
|
322
450
|
skill
|
|
323
451
|
.command("run")
|
|
324
|
-
.description("Execute a skill")
|
|
452
|
+
.description("Execute a skill through a controlled agent/tool route")
|
|
325
453
|
.argument("<name>", "Skill name")
|
|
326
454
|
.argument("[input...]", "Input for the skill")
|
|
327
455
|
.option("--json", "Output as JSON")
|
|
456
|
+
.option("-y, --yes", "Authorize the current isolated skill digest")
|
|
328
457
|
.action(async (name, inputParts, options) => {
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
if (!s.hasHandler) {
|
|
338
|
-
logger.error(
|
|
339
|
-
`Skill "${s.id}" has no handler (documentation only). Cannot execute.`,
|
|
340
|
-
);
|
|
341
|
-
process.exit(1);
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
if (!canRunOnPlatform(s)) {
|
|
345
|
-
logger.error(`Skill "${s.id}" is not supported on ${process.platform}`);
|
|
346
|
-
process.exit(1);
|
|
347
|
-
}
|
|
348
|
-
|
|
458
|
+
const runLoader = new CLISkillLoader({
|
|
459
|
+
reauthorizeSkill: createCliSkillReauthorizer({
|
|
460
|
+
assumeYes: options.yes === true,
|
|
461
|
+
}),
|
|
462
|
+
});
|
|
463
|
+
const llmOptions = resolveControlledSkillLlmOptions();
|
|
464
|
+
let result;
|
|
349
465
|
try {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
466
|
+
result = await runControlledSkill({
|
|
467
|
+
name,
|
|
468
|
+
input: inputParts.join(" "),
|
|
469
|
+
cwd: process.cwd(),
|
|
470
|
+
loader: runLoader,
|
|
471
|
+
llmOptions,
|
|
353
472
|
});
|
|
354
473
|
} catch (error) {
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
const spinner = ora(`Running ${s.displayName}...`).start();
|
|
360
|
-
const input = inputParts.join(" ");
|
|
361
|
-
|
|
362
|
-
try {
|
|
363
|
-
const handlerPath = path.join(s.skillDir, "handler.js");
|
|
364
|
-
const imported = await import(
|
|
365
|
-
`file://${handlerPath.replace(/\\/g, "/")}`
|
|
366
|
-
);
|
|
367
|
-
const handler = imported.default || imported;
|
|
368
|
-
|
|
369
|
-
if (handler.init) {
|
|
370
|
-
await handler.init(s);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
const task = {
|
|
374
|
-
params: { input },
|
|
375
|
-
input,
|
|
376
|
-
action: input,
|
|
377
|
-
};
|
|
378
|
-
const context = {
|
|
379
|
-
projectRoot: process.cwd(),
|
|
380
|
-
workspacePath: process.cwd(),
|
|
381
|
-
workspaceRoot: process.cwd(),
|
|
382
|
-
processBroker: createSkillProcessBroker(s),
|
|
474
|
+
result = {
|
|
475
|
+
success: false,
|
|
476
|
+
code: error.code || "CC_SKILL_CONTROLLED_RUN_FAILED",
|
|
477
|
+
error: error.message,
|
|
383
478
|
};
|
|
479
|
+
}
|
|
384
480
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
for (const [key, val] of Object.entries(result.result)) {
|
|
394
|
-
if (typeof val === "string" && val.length > 200) {
|
|
395
|
-
logger.log(` ${chalk.cyan(key)}: ${val.substring(0, 200)}...`);
|
|
396
|
-
} else {
|
|
397
|
-
logger.log(` ${chalk.cyan(key)}: ${JSON.stringify(val)}`);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
} else {
|
|
402
|
-
logger.error(
|
|
403
|
-
result.message || result.error || "Skill execution failed",
|
|
404
|
-
);
|
|
405
|
-
}
|
|
406
|
-
} catch (err) {
|
|
407
|
-
spinner.fail(`Skill execution failed: ${err.message}`);
|
|
408
|
-
if (program.opts().verbose) {
|
|
409
|
-
console.error(err.stack);
|
|
481
|
+
if (options.json) {
|
|
482
|
+
console.log(JSON.stringify(result, null, 2));
|
|
483
|
+
} else if (result?.error) {
|
|
484
|
+
logger.error(result.error);
|
|
485
|
+
} else {
|
|
486
|
+
logger.success(result?.summary || "Skill completed");
|
|
487
|
+
if (Array.isArray(result?.toolsUsed) && result.toolsUsed.length > 0) {
|
|
488
|
+
logger.log(chalk.gray(` tools: ${result.toolsUsed.join(", ")}`));
|
|
410
489
|
}
|
|
411
|
-
process.exit(1);
|
|
412
490
|
}
|
|
491
|
+
if (result?.error) process.exitCode = 1;
|
|
413
492
|
});
|
|
414
493
|
|
|
415
494
|
// skill add — create a custom skill scaffold
|
|
@@ -444,17 +523,7 @@ export function registerSkillCommand(program) {
|
|
|
444
523
|
}
|
|
445
524
|
|
|
446
525
|
try {
|
|
447
|
-
|
|
448
|
-
fs.writeFileSync(
|
|
449
|
-
path.join(targetDir, "SKILL.md"),
|
|
450
|
-
SKILL_TEMPLATE_MD(name),
|
|
451
|
-
"utf-8",
|
|
452
|
-
);
|
|
453
|
-
fs.writeFileSync(
|
|
454
|
-
path.join(targetDir, "handler.js"),
|
|
455
|
-
SKILL_TEMPLATE_HANDLER(name),
|
|
456
|
-
"utf-8",
|
|
457
|
-
);
|
|
526
|
+
createControlledSkillScaffold(name, targetDir);
|
|
458
527
|
|
|
459
528
|
const scope = options.global ? "global" : "project";
|
|
460
529
|
logger.success(`Created ${scope} skill: ${chalk.cyan(name)}`);
|
|
@@ -464,7 +533,9 @@ export function registerSkillCommand(program) {
|
|
|
464
533
|
logger.log(
|
|
465
534
|
` ${chalk.gray("SKILL.md")} — Skill metadata and documentation`,
|
|
466
535
|
);
|
|
467
|
-
logger.log(
|
|
536
|
+
logger.log(
|
|
537
|
+
` ${chalk.gray("handler.js")} — controlled execution identity marker`,
|
|
538
|
+
);
|
|
468
539
|
logger.log("");
|
|
469
540
|
logger.log(
|
|
470
541
|
`Edit these files, then run: ${chalk.cyan(`chainlesschain skill run ${name} "test input"`)}`,
|
package/src/commands/status.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import logger from "../lib/logger.js";
|
|
3
|
-
import { collectStatusReport } from "../runtime/diagnostics.js";
|
|
4
|
-
import { getObservabilityRuntime } from "../lib/observability/index.js";
|
|
5
3
|
|
|
6
|
-
export function collectOtlpStatus(runtime =
|
|
4
|
+
export function collectOtlpStatus(runtime = null) {
|
|
7
5
|
return (
|
|
8
6
|
runtime?.getStats?.() || {
|
|
9
7
|
enabled: false,
|
|
@@ -31,11 +29,29 @@ export function registerStatusCommand(program) {
|
|
|
31
29
|
.command("status")
|
|
32
30
|
.description("Show status of ChainlessChain app and services")
|
|
33
31
|
.option("--json", "Output as machine-readable JSON")
|
|
32
|
+
.option("--deep", "Include Docker Compose service inspection")
|
|
34
33
|
.action(async (options) => {
|
|
35
34
|
try {
|
|
36
|
-
const report =
|
|
35
|
+
const report = options.deep
|
|
36
|
+
? await (
|
|
37
|
+
await import("../runtime/diagnostics.js")
|
|
38
|
+
).collectStatusReport({ deep: true })
|
|
39
|
+
: await (
|
|
40
|
+
await import("../runtime/status-diagnostics-lite.js")
|
|
41
|
+
).collectQuickStatusReport();
|
|
42
|
+
let observabilityRuntime = null;
|
|
43
|
+
if (
|
|
44
|
+
program.opts().otlpEndpoint ||
|
|
45
|
+
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ||
|
|
46
|
+
process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ||
|
|
47
|
+
process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
|
|
48
|
+
) {
|
|
49
|
+
observabilityRuntime = (
|
|
50
|
+
await import("../lib/observability/index.js")
|
|
51
|
+
).getObservabilityRuntime();
|
|
52
|
+
}
|
|
37
53
|
report.observability = {
|
|
38
|
-
otlp: collectOtlpStatus(),
|
|
54
|
+
otlp: collectOtlpStatus(observabilityRuntime),
|
|
39
55
|
};
|
|
40
56
|
|
|
41
57
|
if (options.json) {
|