chainlesschain 0.165.3 → 0.165.5
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 +151 -29
- package/package.json +2 -2
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-BiHNUlbU.js → AIOps-CEeYTeDB.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-D-UFjDRQ.js → ActionButton-BeRUQ3V2.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DazVsDgW.js → Analytics-DrV718XF.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DXh9UfNJ.js → AppLayout-Cd2Frt7Q.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-CZ6tsceY.js → Artifacts-CUJMlORU.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-RyxnBr_h.js → Audit-CXJcfT6p.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BWS51Q6X.js → BackgroundAgents-DOv6Z7H9.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BRtPcUul.js → Backup-BwdDyBI0.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CGd4vZYY.js → BaseInput-BmLn4kYH.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-h8ijVwCg.js → Chat-COg8pAW2.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-4gGkdGgA.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-NyF6dPl8.js → Checkbox-BCP4uoU8.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-Ci4OOxr5.js → Codegen-pRt6Y9JI.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CwTkc9BM.js → Col-DLaprKhS.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DW_tM82m.js → Community-DyATsz5f.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DEvHRV4S.js → Compact-BXAaupZK.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BbjBEEfD.js → Compliance-DpcJBELr.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-10IXBaBa.js → Cowork-DG4EFWyd.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BZkbpd5I.js → Cron-F6Oy5n2P.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CFQ8L_6v.js → Crosschain-BOdgtalX.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BDF6AkXe.js → DID-DT1dSkjH.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CoOdWMi4.js → Dashboard-NBUIqWzC.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DEsGmu8Y.js → Dropdown-CSpHeMYB.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BS89SWlK.js → EmailListRenderer-CEG0xISr.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-C1FpCHiI.js → FamilyGuardDashboard-BTZ0BZna.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BzvpVmLA.js → Federation-BuuCTn2V.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BeC259PQ.js → FormItemContext-KAVceevk.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-azgG3bmV.js → GenericCardRenderer-DnHpcQvW.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BmSSowc5.js → Git-C_B_0HwB.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CTBCSyQZ.js → Governance-DPSZuzuu.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DA5xyk4a.js → Inference-BV-06V7q.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-D1gPHNig.js → KnowledgeGraph-wpDuupn6.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BPmLf1AR.js → Logs-Bseca1_I.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-SVLOg49H.js → MarkdownRenderer-B4RLp2zs.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DtUFcR0E.js → Marketplace-d3kM4DDL.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DS_kqBv-.js → McpTools-DQ_xZ23i.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-Fvh7XL7V.js → Memory-CRIeYO4L.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-C7itAP45.js → MobileBridge-BsllIa9l.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-BUuQy30X.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-B57MiNLK.js → Mtc-BOFDIzrC.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-BXfCUcM7.js → MtcAudit-BQg-vyvG.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-yaJ-ZcF6.js → Multisig-Bo1jrPdN.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CoaUCKrO.js → NLProgramming-Bmod8alw.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BKLM_65R.js → Notes-CGGFL8w-.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DoDtK9uZ.js → NotificationSettings-BsZvCJxC.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BJ28TGr-.js → OrderTableRenderer-C1-Quo_h.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-MuGsdoIb.js → Organization-BjOeDYOi.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BLUN9J4R.js → Overflow-DwVV3l5A.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DWuoBUPd.js → P2P-Cu3DQT9W.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CUi37YPj.js → PdhVaultBrowser-Cg0gR7dH.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BYQg2pcr.js → Permissions-CsAXxRN5.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CAxoV2xu.js → PersonalDataHub-C-nNmnYp.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-B33wGvIO.js → Pipeline-BOnW7nNc.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-A8yXTORP.js → Privacy-ClLSyGKt.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-D49I2I1O.js → ProjectInit-DuLvjjq7.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Ci73jJDw.js → ProjectSettings-DQYYbDD9.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-CF-yD6Cn.js → Projects-Drw8MBGK.js} +1 -1
- package/src/assets/web-panel/assets/Providers-ckqHQe6K.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-Brza0ykJ.js → QrScannerModal-DW5BXk-G.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DFydhjxL.js → QuickAsk-DDLnhNTp.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DLF8_NhA.js → Recommend-PJQ2C91U.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-dyuStW3x.js → RemoteSession-s6wmda34.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-5F3tA6yw.js → Reputation-DC2sb-I3.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Ca2A57S5.js → Row-hPGk1eGj.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B0bxBkq_.js → RssFeed-RIvfZql0.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CFNvHalZ.js → Search-DFg1G1eR.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DSoH3Hav.js → Security-D6H5p8Dp.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BHpfEmBQ.js → Services-nxYiFV_w.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Dsh-QNmn.js → Skeleton-BmgFNAdB.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BhT1NkSU.js → Skills-CsaaD2av.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DY9snPeJ.js → Sla-yM5y9yvK.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CWaX0_Cx.js → SpeechSettings-DPy1XMYh.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-B690y_TC.js → SyncSettings-CFVhEyyr.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-2N-w3zWd.js → Tasks-DdO02Inn.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BjwQOQYC.js → Templates-Eo2d8Llu.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CUqHErxY.js → Tenant-ChESOXgy.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-C13rXvNy.js → Terminal-BJ7oDxTI.js} +2 -2
- package/src/assets/web-panel/assets/TimelineRenderer-hWX0fUvz.js +1 -0
- package/src/assets/web-panel/assets/{Tokens-BXHLGXYC.js → Tokens-DVBZQnd-.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-1e5i65o3.js → Trigger-D89cQfVq.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-FLGqNHs5.js → Trust-BIVSb4-V.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BbaR_LJB.js → UkeySign-B58gWopl.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-NOp4RIov.js → VideoEditing-DhHI7bmG.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-B7DW7bG4.js → Wallet-C4FheWS_.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-BptSUWix.js → WebAuthn-DnPRq-Bx.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-CAJnDOXS.js → WorkflowEditor-BerRPjpJ.js} +1 -1
- package/src/assets/web-panel/assets/{chat-I8LgG1-Z.js → chat-BzZ52iKr.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CWe7SOVD.js → colors-BI_E4BAn.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Cx3u3CA3.js → compact-item-d50mr3yk.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CgD5ArwY.js → createContext-C6FsQ1IH.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CagEcIex.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-BfQWiXN8.js → hasIn-DLZEMgLP.js} +1 -1
- package/src/assets/web-panel/assets/{index-BuEQSorC.js → index-9H_M2jju.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiI-xPRH.js → index-A5CDWP7y.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAVy98u7.js → index-AHr7ryWf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUAR7RY-.js → index-B81mo1Et.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlIyt1qF.js → index-BAE3hwev.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dcdm_Z2c.js → index-BB9SqVSt.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWZ3REg6.js → index-BRGx3w6T.js} +3 -3
- package/src/assets/web-panel/assets/{index-B6yChzt1.js → index-BTpIOTfR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeizoQVZ.js → index-BZjjdQ62.js} +1 -1
- package/src/assets/web-panel/assets/{index-e8BM1yY1.js → index-BcSUl9fA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNYFQxAW.js → index-BeM4hfht.js} +1 -1
- package/src/assets/web-panel/assets/{index-DGMYTN5W.js → index-Bmr_vxXD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BREnPKGo.js → index-BoNZlzhQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1cX4Rxu.js → index-C3k8kevG.js} +1 -1
- package/src/assets/web-panel/assets/{index-3iKP9OTJ.js → index-CLoTQr0W.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1UjHdgZ.js → index-CO8DAF7U.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cy_cCJlr.js → index-CRN5TRTQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0nDKhWv.js → index-CUaEHfQ0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DslTuqro.js → index-CVzuawCX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAUnl4Jv.js → index-CdKt9fOd.js} +1 -1
- package/src/assets/web-panel/assets/{index-CMu16vPC.js → index-CgkoH3_g.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-rIKccl.js → index-CjuKZBqJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bx7BNIRH.js → index-Co7s9LsB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Doc0Ftpd.js → index-D-aBumtY.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cd79NQAx.js → index-DE0V6cp-.js} +1 -1
- package/src/assets/web-panel/assets/{index-V-kIHzAV.js → index-DY4j5zkF.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bi24S7Dw.js → index-Dec0Kf_Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCJEY2T0.js → index-DoFtCVZ7.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0ztiqtB.js → index-DqkbHHg8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CcX4FSPf.js → index-DsscwxPE.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdRkCwm4.js → index-GXE0D8Nx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmgtY58H.js → index-IPkwSAW_.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQDKYbnv.js → index-KNGgO4Wm.js} +1 -1
- package/src/assets/web-panel/assets/{index-87gMxqhN.js → index-Pvf30m8Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmrdUwzU.js → index-Q5Tn735s.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFb-XIKy.js → index-TWG-_D1M.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsQcURkA.js → index-Y2-q7QLm.js} +1 -1
- package/src/assets/web-panel/assets/index-pzT9PpOU.js +1 -0
- package/src/assets/web-panel/assets/index-z1kFadaX.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-DiBszVdG.js → initDefaultProps-D-4Hzgej.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BGIFFozv.js → motion-D4Wl4xU7.js} +1 -1
- package/src/assets/web-panel/assets/{move-D5W7mp7B.js → move-Cd5eQvL0.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-JFIlxJ7F.js → mtc-parser-B4ilslCW.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CQ3o6LIU.js → omit-Ckarx-tf.js} +1 -1
- package/src/assets/web-panel/assets/parsers-YNLm7sQ0.js +4 -0
- package/src/assets/web-panel/assets/{pickAttrs-R8MIlXo3.js → pickAttrs-QJ0bpCmc.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-sW7ylSky.js → placementArrow-CKHm-tq8.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Cnl39Vbz.js → responsiveObserve-CV6a_w_Y.js} +1 -1
- package/src/assets/web-panel/assets/{slide-sn8tFd14.js → slide-mHpeQFgk.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-IKKY_QxZ.js → statusUtils-DIaQNQWA.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BNpV4Nqs.js → styleChecker-PJpzavV8.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BWyT_eoU.js → useFlexGapSupport-BH7zTw8S.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-D09p6_U9.js → useFs-BDNG3JDd.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CzW3TkJZ.js → usePersonalDataHub-CY2VWdUg.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-3s3WoAKB.js → vnode-D0kw9jhz.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Cjy_673s.js → zoom-B5g7TN7r.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +105 -35
- package/src/commands/artifacts.js +598 -33
- package/src/commands/cowork.js +200 -5
- package/src/commands/session-budget.js +155 -0
- package/src/commands/session-location.js +968 -1
- package/src/commands/session.js +23 -2
- package/src/data/changelog.json +28 -2
- package/src/gateways/ws/artifact-protocol.js +77 -13
- package/src/gateways/ws/message-dispatcher.js +57 -0
- package/src/gateways/ws/session-protocol.js +391 -24
- package/src/gateways/ws/ws-agent-handler.js +191 -14
- package/src/gateways/ws/ws-server.js +14 -3
- package/src/gateways/ws/ws-session-gateway.js +101 -5
- package/src/harness/jsonl-session-store.js +1210 -0
- package/src/lib/agent-team/team-runner.js +43 -13
- package/src/lib/artifact-access-ledger.js +462 -0
- package/src/lib/artifact-cleanup-ledger.js +861 -0
- package/src/lib/artifact-deletion-ledger.js +678 -0
- package/src/lib/artifact-recovery.js +970 -0
- package/src/lib/artifact-store.js +256 -51
- package/src/lib/artifact-workbench-projection.js +171 -0
- package/src/lib/command-lifecycle-report.js +8 -4
- package/src/lib/cowork-adapter.js +9 -5
- package/src/lib/cowork-task-runner.js +20 -0
- package/src/lib/cowork-workflow.js +178 -20
- package/src/lib/direct-model-usage.js +62 -22
- package/src/lib/dynamic-workflow-runtime.js +3592 -112
- package/src/lib/execution-location-result-apply.js +339 -0
- package/src/lib/execution-location-result-artifact.js +271 -0
- package/src/lib/execution-location-result-review.js +253 -0
- package/src/lib/execution-location-result-store.js +331 -0
- package/src/lib/execution-location-result.js +617 -0
- package/src/lib/execution-location-target.js +240 -3
- package/src/lib/managed-tool-checkpoint.js +47 -4
- package/src/lib/mcp-stdio-executable-identity.js +16 -0
- package/src/lib/mcp-stdio-native-code-policy.js +74 -0
- package/src/lib/mcp-stdio-package-materialization.js +12 -3
- package/src/lib/process-execution-broker/index.js +112 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +57 -3
- package/src/lib/process-execution-broker/workspace-transaction.js +29 -0
- package/src/lib/session-budget-production-root.js +376 -0
- package/src/lib/session-budget-runtime.js +109 -18
- package/src/lib/session-budget-usage.js +63 -0
- package/src/lib/session-host-snapshot.js +19 -2
- package/src/lib/session-projection.js +126 -10
- package/src/lib/session-resource-budget.js +766 -105
- package/src/lib/sub-agent-context.js +69 -22
- package/src/lib/web-ui-server.js +12 -1
- package/src/repl/agent-repl.js +237 -16
- package/src/runtime/agent-core.js +135 -0
- package/src/runtime/headless-runner.js +135 -46
- package/src/runtime/headless-stream.js +133 -25
- package/src/runtime/policies/agent-policy.js +10 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-D7tcdDS9.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-DGbP36-3.js +0 -1
- package/src/assets/web-panel/assets/Providers-D-etEhg5.js +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-CpbWcya_.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DLv_872g.js +0 -1
- package/src/assets/web-panel/assets/index-CdiGCibe.js +0 -1
- package/src/assets/web-panel/assets/index-D_0z-gyz.js +0 -1
- package/src/assets/web-panel/assets/parsers-UEvh_ShA.js +0 -4
package/src/commands/session.js
CHANGED
|
@@ -67,6 +67,7 @@ import { registerSessionMcpRecoveryCommands } from "./session-mcp-recovery.js";
|
|
|
67
67
|
import { registerSessionShowSubcommand } from "./session-show.js";
|
|
68
68
|
import { registerSessionObservabilitySubcommand } from "./session-observability.js";
|
|
69
69
|
import { registerSessionLocationSubcommands } from "./session-location.js";
|
|
70
|
+
import { registerSessionBudgetCommands } from "./session-budget.js";
|
|
70
71
|
|
|
71
72
|
export const _deps = {
|
|
72
73
|
execFileSync: (...args) => executionBroker.execFileSync(...args),
|
|
@@ -224,6 +225,7 @@ export function registerSessionCommand(program) {
|
|
|
224
225
|
|
|
225
226
|
registerSessionMcpRecoveryCommands(session);
|
|
226
227
|
registerSessionLocationSubcommands(session);
|
|
228
|
+
registerSessionBudgetCommands(session);
|
|
227
229
|
|
|
228
230
|
// session list
|
|
229
231
|
session
|
|
@@ -318,6 +320,7 @@ export function registerSessionCommand(program) {
|
|
|
318
320
|
let remote = [];
|
|
319
321
|
let team = [];
|
|
320
322
|
let workflow = [];
|
|
323
|
+
let dynamicWorkflow = [];
|
|
321
324
|
let artifacts = [];
|
|
322
325
|
let prLinks = {};
|
|
323
326
|
|
|
@@ -382,6 +385,22 @@ export function registerSessionCommand(program) {
|
|
|
382
385
|
} catch (error) {
|
|
383
386
|
sourceErrors.workflow = error?.message || String(error);
|
|
384
387
|
}
|
|
388
|
+
try {
|
|
389
|
+
const { listDynamicWorkflowWorkbenchStates } =
|
|
390
|
+
await import("../lib/dynamic-workflow-runtime.js");
|
|
391
|
+
const discovered = listDynamicWorkflowWorkbenchStates(projectRoot, {
|
|
392
|
+
limit,
|
|
393
|
+
});
|
|
394
|
+
dynamicWorkflow = discovered.runs.map((item) => ({
|
|
395
|
+
...item,
|
|
396
|
+
cwd: projectRoot,
|
|
397
|
+
}));
|
|
398
|
+
if (discovered.invalidCount > 0) {
|
|
399
|
+
sourceErrors.dynamicWorkflow = `${discovered.invalidCount} durable workflow state file(s) failed validation`;
|
|
400
|
+
}
|
|
401
|
+
} catch (error) {
|
|
402
|
+
sourceErrors.dynamicWorkflow = error?.message || String(error);
|
|
403
|
+
}
|
|
385
404
|
try {
|
|
386
405
|
// A file checkpoint is advertised only after the existing CLI git
|
|
387
406
|
// engine proves that the exact worktree is supported. Copy-mode
|
|
@@ -431,8 +450,9 @@ export function registerSessionCommand(program) {
|
|
|
431
450
|
// checkpoint action unavailable with its explicit reason.
|
|
432
451
|
}
|
|
433
452
|
try {
|
|
434
|
-
const { ArtifactStore } =
|
|
435
|
-
|
|
453
|
+
const { ArtifactStore, publicArtifactMetadata } =
|
|
454
|
+
await import("../lib/artifact-store.js");
|
|
455
|
+
artifacts = new ArtifactStore().list().map(publicArtifactMetadata);
|
|
436
456
|
} catch {
|
|
437
457
|
// Summaries are optional; absence never removes a session.
|
|
438
458
|
}
|
|
@@ -451,6 +471,7 @@ export function registerSessionCommand(program) {
|
|
|
451
471
|
remote,
|
|
452
472
|
team,
|
|
453
473
|
workflow,
|
|
474
|
+
dynamicWorkflow,
|
|
454
475
|
artifacts,
|
|
455
476
|
prLinks,
|
|
456
477
|
sourceErrors,
|
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.165.5",
|
|
7
|
+
"cliVersions": ["0.165.4", "0.165.5"],
|
|
8
|
+
"date": "2026-08-20",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Added - cc CLI 0.165.5: governed recovery and native add-on policy",
|
|
13
|
+
"body": "> `chainlesschain` **0.165.4 -> 0.165.5** (candidate; not yet published,\n> 2026-08-20).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.59**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Recoverable Artifact workflows**: inspect and settle orphaned Artifact\n writes through a bounded CLI-owned recovery projection, retain exact\n access/deletion evidence, and surface workbench state without letting IDE\n clients derive storage mutations.\n- **Durable workflow recovery**: plan and resume interrupted workflow stages\n through persisted authority and checkpoint evidence, with tighter session\n and execution-location projections for CLI, WebSocket, and IDE consumers.\n- **Native MCP add-on policy**: admit only supported native loader shapes and\n validated executable/package identities. Unsupported or ambiguous native\n add-ons now return typed fail-closed rejections instead of crossing the\n strict process boundary.\n- **Release-candidate gates**: add cross-host Marketplace, accessibility,\n execution-location, context/permission, and live-provider campaigns while\n keeping CI dependency installation clean and deterministic.\n- **Release status**: publication requires this exact candidate commit to pass\n the complete Linux, Windows, and macOS `CLI CI` and `CLI Strict Sandbox`\n matrices. The immutable npm tag and registry readback will be recorded only\n after those gates succeed."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.165.4",
|
|
20
|
+
"cliVersions": ["0.165.3", "0.165.4"],
|
|
21
|
+
"date": "2026-08-20",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.165.4: first install without a native build toolchain",
|
|
26
|
+
"body": "> `chainlesschain` **0.165.3 -> 0.165.4** (published from exact SHA\n> `86abb5f65e39f0dd553040fbfce07277336dfeeb`, 2026-08-20).\n> CLI release includes `@chainlesschain/personal-data-hub` **0.4.59**;\n> `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Portable first install**: Personal Data Hub now declares\n `better-sqlite3-multiple-ciphers` as an optional dependency. If a prebuilt\n binary cannot be downloaded, npm may skip the failed `node-gyp` fallback\n instead of aborting `npm install -g chainlesschain`; the CLI remains usable\n through its bundled `sql.js` WASM fallback.\n- **No-toolchain install gate**: the Windows and Linux global-install smoke\n deliberately disables native prebuilds and points node-gyp at a nonexistent\n Python executable. The packed candidate must still install and both `cc` and\n `chainlesschain` must start without `--ignore-scripts`.\n- **Published release evidence**: immutable tag `v-npm-0-165-4`, three-OS\n `CLI CI` (`32375466808`), `CLI Strict Sandbox` (`32375466552`), npm release\n (`32375466545`), and independent registry readback (`32377326843`) all bind\n exact SHA `86abb5f65e`. npm reports `latest=0.165.4`; the public tarball\n SHA-1 is `69ad469872d4e51d1cc2af7223d81eb6fed1dc50`."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.165.3",
|
|
@@ -10,7 +36,7 @@
|
|
|
10
36
|
"sections": [
|
|
11
37
|
{
|
|
12
38
|
"heading": "Fixed — cc CLI 0.165.3: durable background keeper retirement",
|
|
13
|
-
"body": "> `chainlesschain` **0.165.2 -> 0.165.3** (
|
|
39
|
+
"body": "> `chainlesschain` **0.165.2 -> 0.165.3** (published from exact SHA\n> `7d3eb9ea8046330e2b264bf2309337ebbbbcbacc`, 2026-08-19).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.58**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Durable keeper retirement evidence**: a Worker accepts a lost keeper\n response only when the persisted retirement record matches the exact worker\n generation, turn attempt, process identities, start anchors, and cleanup\n confirmation. Ambiguous or partial records continue to fail closed.\n- **Bounded keeper health probes**: Windows process-identity checks are delayed\n until the application heartbeat is actually silent, avoiding synchronized\n helper-process storms while preserving an exact-identity backstop before\n cleanup.\n- **Recoverable lock publication**: a lock owned by a provably dead process can\n be reclaimed even when that owner published its release marker but crashed\n before removing its private staging path. Active or identity-mismatched\n owners remain fenced.\n- **Idempotent bootstrap release**: a matching bootstrap release can be replayed\n after READY, and the Worker retransmits it when READY is repeated. Nonce,\n generation, attempt, wrapper PID, and runtime PID mismatches remain rejected.\n- **Release status**: immutable tag `v-npm-0-165-3` and the public npm package\n bind exact SHA `7d3eb9ea80`. Its push `CLI CI` (`32212502595`),\n `CLI Strict Sandbox` (`32212502463`), and npm release (`32212502480`) passed;\n it is now superseded by the fully read-back `0.165.4` production baseline."
|
|
14
40
|
}
|
|
15
41
|
]
|
|
16
42
|
},
|
|
@@ -23,7 +49,7 @@
|
|
|
23
49
|
"sections": [
|
|
24
50
|
{
|
|
25
51
|
"heading": "Fixed — cc CLI 0.165.2: governed plugins and keeper handoff reliability",
|
|
26
|
-
"body": "> `chainlesschain` **0.165.1 → 0.165.2** (
|
|
52
|
+
"body": "> `chainlesschain` **0.165.1 → 0.165.2** (published from exact SHA\n> `775d5667bc7bdcf8fed3f834d3ba2eda43526128`, 2026-08-18).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.58**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Governed plugin transactions and provenance**: marketplace payload,\n activation, install, update, transaction recovery, and provenance decisions\n bind immutable source identities and digests. Registry cache entries are\n content-addressed, while corrupt, stale, or mismatched recovery evidence\n continues to fail closed.\n- **Strict plugin execution boundaries**: the remaining live plugin fixtures\n now execute in the strict Linux sandbox, MCP security soak provisions its\n required Bubblewrap boundary explicitly, and release fixtures exercise the\n production activation path instead of accepting inactive coverage.\n- **Durable workflow authority**: provider requests and settlements, nested and\n parallel tool effects, child and descendant calls, and timeout outcomes gain\n durable identity-bound receipts so retries cannot silently reuse ambiguous\n execution authority.\n- **Background keeper lock handoff**: an owner that durably publishes its exact\n release marker treats the marker as the logical handoff even when another\n contender wins physical cleanup. Wrong, corrupt, or active foreign claimants\n remain rejected, and POSIX/Windows process identity and cleanup races retain\n bounded fail-closed handling.\n- **Scheduler campaign continuity**: scheduled long-soak dispatches use a pinned\n campaign identity, refuse overlapping segments, and can auto-finalize only\n after the required cross-platform evidence window is complete.\n- **Cross-platform release stability**: generated command help stays in sync;\n POSIX fsync-failure fixtures match the actual read mode; registry cache tests\n follow immutable URL-plus-digest semantics; and macOS marketplace replay uses\n isolated local scope instead of leaking state through the runner user home.\n- **Release status**: immutable tag `v-npm-0-165-2` and the public npm package\n bind exact SHA `775d5667bc`. Its `CLI CI` (`32110231013`),\n `CLI Strict Sandbox` (`32110230842`), and npm release (`32114134884`) passed.\n Later releases supersede it; the 72-hour scheduler campaign and signed native\n distribution remain separate evidence boundaries."
|
|
27
53
|
}
|
|
28
54
|
]
|
|
29
55
|
},
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* mime, encoding, content, size,
|
|
12
12
|
* truncated, previewable}
|
|
13
13
|
* artifact-remove {artifactId} → {type:"artifact-remove", removed, found}
|
|
14
|
-
* artifact-clean {}
|
|
14
|
+
* artifact-clean {cleanupId?} → {type:"artifact-clean", cleanupId,
|
|
15
|
+
* removed, settled, cleanup}
|
|
15
16
|
*
|
|
16
17
|
* Preview policy: text mimes stream as utf8 (capped, `truncated` flagged);
|
|
17
18
|
* images as base64 (hard cap — an oversized image reports previewable:false
|
|
@@ -25,6 +26,10 @@
|
|
|
25
26
|
|
|
26
27
|
import path from "node:path";
|
|
27
28
|
import { readFileSync, statSync } from "node:fs";
|
|
29
|
+
import { publicArtifactMetadata } from "../../lib/artifact-store.js";
|
|
30
|
+
import { authorizeArtifactContentAccess } from "../../lib/artifact-access-ledger.js";
|
|
31
|
+
import { settleArtifactDeletion } from "../../lib/artifact-deletion-ledger.js";
|
|
32
|
+
import { settleArtifactCleanup } from "../../lib/artifact-cleanup-ledger.js";
|
|
28
33
|
|
|
29
34
|
/** Text preview cap (utf8 chars ≈ bytes for the common case). */
|
|
30
35
|
export const TEXT_PREVIEW_CAP = 256 * 1024;
|
|
@@ -61,7 +66,11 @@ export async function handleArtifactList(server, id, ws, message) {
|
|
|
61
66
|
if (message.kind) {
|
|
62
67
|
artifacts = artifacts.filter((e) => e.kind === String(message.kind));
|
|
63
68
|
}
|
|
64
|
-
server._send(ws, {
|
|
69
|
+
server._send(ws, {
|
|
70
|
+
id,
|
|
71
|
+
type: "artifact-list",
|
|
72
|
+
artifacts: artifacts.map(publicArtifactMetadata),
|
|
73
|
+
});
|
|
65
74
|
} catch (err) {
|
|
66
75
|
sendError(server, id, ws, "ARTIFACT_LIST_FAILED", err.message);
|
|
67
76
|
}
|
|
@@ -86,7 +95,7 @@ export async function handleArtifactShow(server, id, ws, message) {
|
|
|
86
95
|
server._send(ws, {
|
|
87
96
|
id,
|
|
88
97
|
type: "artifact-show",
|
|
89
|
-
artifact:
|
|
98
|
+
artifact: publicArtifactMetadata(entry),
|
|
90
99
|
});
|
|
91
100
|
} catch (err) {
|
|
92
101
|
sendError(server, id, ws, "ARTIFACT_SHOW_FAILED", err.message);
|
|
@@ -161,9 +170,17 @@ export async function handleArtifactContent(server, id, ws, message) {
|
|
|
161
170
|
reason: `image exceeds the ${IMAGE_PREVIEW_CAP} byte preview cap`,
|
|
162
171
|
});
|
|
163
172
|
}
|
|
164
|
-
const
|
|
173
|
+
const authorization = authorizeArtifactContentAccess(store, {
|
|
174
|
+
artifactId: entry.id,
|
|
175
|
+
client: "websocket",
|
|
176
|
+
action: "preview",
|
|
177
|
+
accessId: message.accessId,
|
|
178
|
+
});
|
|
179
|
+
const body = readFileSync(authorization.storedPath);
|
|
165
180
|
return server._send(ws, {
|
|
166
181
|
...base,
|
|
182
|
+
access: authorization.access,
|
|
183
|
+
accessRecorded: authorization.recorded,
|
|
167
184
|
previewable: true,
|
|
168
185
|
encoding: "base64",
|
|
169
186
|
truncated: false,
|
|
@@ -172,13 +189,23 @@ export async function handleArtifactContent(server, id, ws, message) {
|
|
|
172
189
|
}
|
|
173
190
|
// text
|
|
174
191
|
const cap = Math.min(
|
|
175
|
-
Number(message.maxBytes) > 0
|
|
192
|
+
Number(message.maxBytes) > 0
|
|
193
|
+
? Number(message.maxBytes)
|
|
194
|
+
: TEXT_PREVIEW_CAP,
|
|
176
195
|
TEXT_PREVIEW_CAP,
|
|
177
196
|
);
|
|
178
|
-
const
|
|
197
|
+
const authorization = authorizeArtifactContentAccess(store, {
|
|
198
|
+
artifactId: entry.id,
|
|
199
|
+
client: "websocket",
|
|
200
|
+
action: "preview",
|
|
201
|
+
accessId: message.accessId,
|
|
202
|
+
});
|
|
203
|
+
const text = readFileSync(authorization.storedPath, "utf-8");
|
|
179
204
|
const truncated = text.length > cap;
|
|
180
205
|
server._send(ws, {
|
|
181
206
|
...base,
|
|
207
|
+
access: authorization.access,
|
|
208
|
+
accessRecorded: authorization.recorded,
|
|
182
209
|
previewable: true,
|
|
183
210
|
encoding: "utf8",
|
|
184
211
|
truncated,
|
|
@@ -195,25 +222,62 @@ export async function handleArtifactRemove(server, id, ws, message) {
|
|
|
195
222
|
return sendError(server, id, ws, "NO_ARTIFACT_ID", "artifactId required");
|
|
196
223
|
}
|
|
197
224
|
const store = await loadStore();
|
|
198
|
-
const
|
|
225
|
+
const deletion = settleArtifactDeletion(store, {
|
|
226
|
+
deletionId: message.deletionId,
|
|
227
|
+
artifactId: message.artifactId,
|
|
228
|
+
reason: "explicit",
|
|
229
|
+
client: "websocket",
|
|
230
|
+
});
|
|
199
231
|
server._send(ws, {
|
|
200
232
|
id,
|
|
201
233
|
type: "artifact-remove",
|
|
202
234
|
artifactId: message.artifactId,
|
|
203
|
-
|
|
204
|
-
found,
|
|
235
|
+
deletionId: deletion.deletionId,
|
|
236
|
+
removed: deletion.found ? message.artifactId : null,
|
|
237
|
+
found: deletion.found,
|
|
238
|
+
settled: deletion.settled,
|
|
239
|
+
recorded: deletion.recorded,
|
|
240
|
+
deletion: deletion.deletion,
|
|
205
241
|
});
|
|
206
242
|
} catch (err) {
|
|
207
|
-
|
|
243
|
+
server._send(ws, {
|
|
244
|
+
id,
|
|
245
|
+
type: "error",
|
|
246
|
+
code: "ARTIFACT_REMOVE_FAILED",
|
|
247
|
+
message: err.message,
|
|
248
|
+
deletionId: err.deletionId || message.deletionId || null,
|
|
249
|
+
});
|
|
208
250
|
}
|
|
209
251
|
}
|
|
210
252
|
|
|
211
253
|
export async function handleArtifactClean(server, id, ws, message) {
|
|
212
254
|
try {
|
|
213
255
|
const store = await loadStore();
|
|
214
|
-
const
|
|
215
|
-
|
|
256
|
+
const cleanup = settleArtifactCleanup(store, {
|
|
257
|
+
cleanupId: message.cleanupId,
|
|
258
|
+
client: "websocket",
|
|
259
|
+
});
|
|
260
|
+
server._send(ws, {
|
|
261
|
+
id,
|
|
262
|
+
type: "artifact-clean",
|
|
263
|
+
cleanupId: cleanup.cleanupId,
|
|
264
|
+
removed: cleanup.removed,
|
|
265
|
+
removedNow: cleanup.removedNow,
|
|
266
|
+
alreadyAbsent: cleanup.alreadyAbsent,
|
|
267
|
+
selected: cleanup.selected,
|
|
268
|
+
settled: cleanup.settled,
|
|
269
|
+
recorded: cleanup.recorded,
|
|
270
|
+
cleanup: cleanup.cleanup,
|
|
271
|
+
items: cleanup.items,
|
|
272
|
+
});
|
|
216
273
|
} catch (err) {
|
|
217
|
-
|
|
274
|
+
server._send(ws, {
|
|
275
|
+
id,
|
|
276
|
+
type: "error",
|
|
277
|
+
code: "ARTIFACT_CLEAN_FAILED",
|
|
278
|
+
message: err.message,
|
|
279
|
+
cleanupId: err.cleanupId || message.cleanupId || null,
|
|
280
|
+
...(err.cleanup ? { cleanup: err.cleanup } : {}),
|
|
281
|
+
});
|
|
218
282
|
}
|
|
219
283
|
}
|
|
@@ -76,6 +76,61 @@ async function executeWithIdempotency(server, id, ws, message, stream) {
|
|
|
76
76
|
return outcome;
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Persist a schema-declared secret received over the authenticated WS
|
|
81
|
+
* connection without ever placing it in a CLI command string or process argv.
|
|
82
|
+
*
|
|
83
|
+
* `server._setSecretConfigValue` is an injection seam for focused protocol
|
|
84
|
+
* tests. Production servers lazily load the same config manager used by
|
|
85
|
+
* `cc config set-secret`, so desktop web-shell and standalone `cc ui` share
|
|
86
|
+
* one storage implementation.
|
|
87
|
+
*/
|
|
88
|
+
export async function handleConfigSetSecret(server, id, ws, message) {
|
|
89
|
+
const key = message?.key;
|
|
90
|
+
const value = message?.value;
|
|
91
|
+
|
|
92
|
+
if (typeof key !== "string" || !key) {
|
|
93
|
+
server._send(ws, {
|
|
94
|
+
id,
|
|
95
|
+
type: "error",
|
|
96
|
+
code: "CONFIG_SECRET_INVALID_KEY",
|
|
97
|
+
message: "A schema-declared secret key is required",
|
|
98
|
+
});
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
102
|
+
server._send(ws, {
|
|
103
|
+
id,
|
|
104
|
+
type: "error",
|
|
105
|
+
code: "CONFIG_SECRET_EMPTY",
|
|
106
|
+
message: "Secret input was empty; configuration was not changed",
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
try {
|
|
112
|
+
const setSecretConfigValue =
|
|
113
|
+
server._setSecretConfigValue ||
|
|
114
|
+
(await import("../../lib/config-manager.js")).setSecretConfigValue;
|
|
115
|
+
const result = setSecretConfigValue(key, value, { storage: "auto" });
|
|
116
|
+
server._send(ws, {
|
|
117
|
+
id,
|
|
118
|
+
type: "config-set-secret-result",
|
|
119
|
+
success: true,
|
|
120
|
+
key,
|
|
121
|
+
storage: result.storage,
|
|
122
|
+
backend: result.backend ?? null,
|
|
123
|
+
});
|
|
124
|
+
} catch (error) {
|
|
125
|
+
server._send(ws, {
|
|
126
|
+
id,
|
|
127
|
+
type: "error",
|
|
128
|
+
code: error?.code || "CONFIG_SECRET_WRITE_FAILED",
|
|
129
|
+
message: error?.message || "Could not save configuration secret",
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
79
134
|
export function createWsMessageDispatcher(server) {
|
|
80
135
|
return {
|
|
81
136
|
async dispatch(clientId, ws, message) {
|
|
@@ -123,6 +178,8 @@ export function createWsMessageDispatcher(server) {
|
|
|
123
178
|
"permission-rules-get": () => server._handlePermissionRulesGet(id, ws),
|
|
124
179
|
"permission-rules-set": () =>
|
|
125
180
|
server._handlePermissionRulesSet(id, ws, message),
|
|
181
|
+
"config-set-secret": () =>
|
|
182
|
+
handleConfigSetSecret(server, id, ws, message),
|
|
126
183
|
"slash-command": () => server._handleSlashCommand(id, ws, message),
|
|
127
184
|
"session-answer": () => server._handleSessionAnswer(id, ws, message),
|
|
128
185
|
"remote-session-create": () =>
|