chainlesschain 0.162.176 → 0.162.178
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 +10 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-BDLu5Elz.js → AIOps-DRftcSue.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DH5us-CK.js → ActionButton-BFvUaMKR.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BZ0u8IFG.js → Analytics-C0-Rru4P.js} +3 -3
- package/src/assets/web-panel/assets/AppLayout-bx-BCljj.js +9 -0
- package/src/assets/web-panel/assets/{Artifacts-Br2YBbh_.js → Artifacts-DAJ8B3Un.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-C3C6a482.js → Audit-hOk4L1lr.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CzHvebcj.js → BackgroundAgents-3pbDpM9z.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DZNHYDFd.js → Backup-BtziGDn9.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-VRiC4fIx.js → BaseInput-kmshphJ3.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Cm08WWAD.js → Chat-d7tGSosA.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CGHYrugQ.js → ChatBubbleRenderer-p-_PBpX_.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DtByk7d7.js → Checkbox-C4Eh4Tz5.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CphXXOfD.js → Codegen-r7gmhZyA.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Hz86TnLR.js → Col-U7mDaGlL.js} +1 -1
- package/src/assets/web-panel/assets/{Community-HP03ltpD.js → Community-Bpu8aH1T.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B_N1mqQz.js → Compact-CHb2XBJe.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CVztRpi8.js → Compliance-Cn_r4dey.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-wUVOyZih.js → Cowork-CdMWfDcz.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-DW5TLJKw.js → Cron-BtnREHWy.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CrAFGhWH.js → Crosschain-BKI9TSzr.js} +1 -1
- package/src/assets/web-panel/assets/{DID-pA-oD8ke.js → DID-pkNubzzJ.js} +2 -2
- package/src/assets/web-panel/assets/Dashboard-1rrz1snN.js +3 -0
- package/src/assets/web-panel/assets/{Dropdown-EweJcsek.js → Dropdown-DLyFVxDc.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C9xVLPG4.js → EmailListRenderer-CtUWfYVq.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CDcEEqlu.js → FamilyGuardDashboard-B8eX2Qe4.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DtZda9A_.js → Federation-D8lsDGus.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CiYdcVz3.js → FormItemContext-CRYt_aIw.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DA13uwA0.js → GenericCardRenderer-ClKzY8_N.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DzRhZD1O.js → Git-BXj5Dney.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D5RMgOSb.js → Governance-Cm-I8RMz.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BgrPfSNk.js → Inference-CPvbhvgt.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DzjnD571.js → KnowledgeGraph-sYNDZaoi.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BhWzVDtN.js → Logs-BZY_3CRZ.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BDape9cx.js → MarkdownRenderer-up0BW6pv.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DJtL5GV7.js → Marketplace-C5MEJ2Qe.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CZcQygI7.js → McpTools-ihdrn43I.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-DUWSDUUu.js → Memory-Br8bPMlh.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BTwq2WKY.js → MobileBridge-BNntgrYW.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-BdV915mw.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-BiGugEQm.js → Mtc-A3wDmlqL.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DY7a6gUe.js → MtcAudit-CF-mBLWM.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BQbDu_w7.js → Multisig-Iy2k_MSo.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-CM2wXTLv.js → NLProgramming-kk0W7HUb.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DI6gGs1v.js → Notes-B5u5t_4S.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BsZOLWAB.js → NotificationSettings-BN0POf6_.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CHkSUrXB.js +1 -0
- package/src/assets/web-panel/assets/{Organization-Cds0_tXr.js → Organization-DwWQESuN.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-WunYMD87.js → Overflow-DG6klrcC.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Bo6j4DDv.js → P2P-BwJcKkgZ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Bh2XPD5f.js → PdhVaultBrowser-BwOHG0in.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-EMvMMC8N.js → Permissions-CGMXe4TX.js} +4 -4
- package/src/assets/web-panel/assets/PersonalDataHub-ziYqg7-A.js +8 -0
- package/src/assets/web-panel/assets/{Pipeline-BOx8HOgL.js → Pipeline-BzJfeoGt.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-tBeTVQVM.js → Privacy-DLh3Bblx.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CVYg1W4M.js → ProjectInit-USVWW36c.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Dvt5I7y1.js → ProjectSettings-CiiOn62h.js} +2 -2
- package/src/assets/web-panel/assets/Projects-6V-PNmcA.js +1 -0
- package/src/assets/web-panel/assets/{Providers-Ct8xqY-E.js → Providers-CBPWWzpu.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Cni8Ooja.js → QrScannerModal-QVwoRUq3.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BJVLKdxr.js → QuickAsk-CXnR-2Vn.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DPG8Rbbm.js → Recommend-ClaNzjmF.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DsdR7dCt.js → RemoteSession-C3rGw8vJ.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Csg1YM-b.js → Reputation-Ci-OWAoP.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D9DoFoEf.js → Row-DRhAwXOS.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BsvKrXMS.js → RssFeed-BQLJQ2_y.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DFUStfgQ.js → Search-QQUpkfFd.js} +1 -1
- package/src/assets/web-panel/assets/{Security-ILg1zxdK.js → Security-DdXKzuKT.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Dd41PCaY.js → Services-x2Zh62Qd.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Bzo1cN80.js → Skeleton-GdY4KwRz.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BDHh17P0.js → Skills-Bv4tY1Fd.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-jl7UTiRY.js → Sla-C3QnM-11.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BePa-RF6.js → SpeechSettings-Bl3ytvmI.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DiqqDKGZ.js → SyncSettings-Wp9IwTsP.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DYQ_6lxj.js → Tasks-CF3rIrDe.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-JiDeI06L.js → Templates-CGfvVVM9.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-hhgI6zwS.js → Tenant-CVXmwQ3U.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-bvwrt03E.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-B8uB5Llk.js → TimelineRenderer-D0g74KhH.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-C3b_6r2z.js → Tokens-BH4IwzlT.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-tIP7HKVe.js → Trigger-DJOpM533.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-vjoc11vJ.js → Trust-B43EPRLr.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DUPBnGuH.js → UkeySign-BmBFG-em.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CBvhUY5T.js → VideoEditing-n9oJwB8k.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DUaQ0uA5.js → Wallet-D5QeivHp.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DllSivjE.js → WebAuthn-DcNy7igO.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-xc8D3uO6.js → WorkflowEditor-BVjc7-5-.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BVicU7oA.js → chat-Dy5Tfj3m.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DJzLmhLm.js → colors-C4c2CNZU.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BvYRfThE.js → compact-item-DPa3O5vN.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DGXxCBKR.js → createContext-TLcfNA6_.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BAwdDA_5.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-SBDJB1y4.js → hasIn-D41LVFkp.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7HimK0M.js → index-0oevYjfT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCdRAgjy.js → index-388pLGJ1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO1itZaY.js → index-B8nLBZbv.js} +3 -3
- package/src/assets/web-panel/assets/{index-DvUTDYXX.js → index-BPTGAjee.js} +1 -1
- package/src/assets/web-panel/assets/{index-hxTODbM1.js → index-BPtrOBmW.js} +1 -1
- package/src/assets/web-panel/assets/{index-wcCL-miV.js → index-BQiIxHBy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKyEivf8.js → index-BSM1cHVK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJZf9DhV.js → index-BYPr9fkz.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHVLJ8q0.js → index-BsQ7Ev6i.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs2rmLFt.js → index-Btk9qLL2.js} +1 -1
- package/src/assets/web-panel/assets/{index-z1ZylsLq.js → index-BvmziZSG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf-O_g_8.js → index-BvopLC_T.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMarmfrv.js → index-C7xhTVyP.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoJAO1Lm.js → index-CNk_ZooP.js} +1 -1
- package/src/assets/web-panel/assets/{index-9gdI7uUW.js → index-CQrEHoOG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bf-ctERC.js → index-CSxex23J.js} +1 -1
- package/src/assets/web-panel/assets/{index-MjC4G09d.js → index-CVjgm992.js} +1 -1
- package/src/assets/web-panel/assets/{index-e4fXH_WO.js → index-CWK4zOPe.js} +1 -1
- package/src/assets/web-panel/assets/{index-xfluRkCT.js → index-CX0VsoP4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRfiXB_p.js → index-CXl0YPNG.js} +1 -1
- package/src/assets/web-panel/assets/{index-d5BVd-cL.js → index-Cip7LWml.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dm_77jgR.js → index-Cq_hlWNt.js} +1 -1
- package/src/assets/web-panel/assets/{index-YJkzy8ZF.js → index-CzZ49YZL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtwqO5qo.js → index-D2Nkivlm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYqz4Wrr.js → index-DBUgRs4D.js} +1 -1
- package/src/assets/web-panel/assets/index-DEjVkdzq.js +1 -0
- package/src/assets/web-panel/assets/{index-CdGY9P8a.js → index-DNsBj2Ob.js} +1 -1
- package/src/assets/web-panel/assets/{index-DonCnfMr.js → index-Di4X8cfI.js} +1 -1
- package/src/assets/web-panel/assets/{index-1SdDS6lR.js → index-DljFsVGI.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnjPdvR6.js → index-Korc3QIe.js} +1 -1
- package/src/assets/web-panel/assets/index-LMOc5xrS.js +1 -0
- package/src/assets/web-panel/assets/{index-VMfwIH5G.js → index-MKZDje0H.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKrvvWm4.js → index-OHAfRu_3.js} +1 -1
- package/src/assets/web-panel/assets/{index-FxZzRyE1.js → index-WEJr8PL5.js} +1 -1
- package/src/assets/web-panel/assets/{index-Crk5NTb0.js → index-WinCp6du.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCqRS6da.js → index-Yjr6cqSK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTrBGBJs.js → index-iQ6gtFih.js} +1 -1
- package/src/assets/web-panel/assets/{index-lpaGoTH3.js → index-pt3s7yvV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CloCgBUR.js → index-tQ3igERQ.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C1zO1KnY.js → initDefaultProps-BFZu87WZ.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CWLtEGmC.js → motion-DJIo7qvt.js} +1 -1
- package/src/assets/web-panel/assets/{move-DzD_C3Vm.js → move-Cfr5qknL.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-D880PYJl.js → mtc-parser-Bgc-OadH.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CFR_z2ov.js → omit-X3WI-TNp.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-srIhgrSC.js → pickAttrs-pJhU9IxK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-C1rXpibP.js → placementArrow-BNg_Vj3T.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C30gRcSS.js → responsiveObserve-TeSEGQ5-.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CvtKiMfV.js → slide-D_t_P0bv.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DNHO7ITG.js → statusUtils-DrrIMwAT.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Dt_Sl-g4.js → styleChecker-BjZCuFRm.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Cjev42Gh.js → useFlexGapSupport-rTFdlqdQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-Baxglj2V.js → useFs-BidCpfLX.js} +1 -1
- package/src/assets/web-panel/assets/usePersonalDataHub-C5mHttA9.js +1 -0
- package/src/assets/web-panel/assets/{vnode-mIRkdT7o.js → vnode-BrbcRiHZ.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-HzI5DlH_.js → zoom-PISX7AkR.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/__tests__/hub-wechat.test.js +45 -0
- package/src/commands/agenda.js +22 -6
- package/src/commands/agent.js +3 -3
- package/src/commands/background-session.js +16 -6
- package/src/commands/batch.js +79 -27
- package/src/commands/changelog.js +15 -4
- package/src/commands/context.js +33 -1
- package/src/commands/eval.js +21 -6
- package/src/commands/hook.js +2 -2
- package/src/commands/hub.js +473 -39
- package/src/commands/init.js +212 -110
- package/src/commands/llm.js +22 -6
- package/src/commands/loop.js +9 -2
- package/src/commands/skill.js +13 -1
- package/src/commands/statusline.js +3 -3
- package/src/data/changelog.json +53 -5
- package/src/gateways/ws/personal-data-hub-protocol.js +22 -2
- package/src/harness/background-task-manager.js +18 -6
- package/src/harness/background-task-worker.js +11 -18
- package/src/harness/golden-transcript.js +3 -0
- package/src/harness/mcp-client.js +9 -15
- package/src/harness/worktree-isolator.js +18 -21
- package/src/index.js +18 -7
- package/src/lib/agent-core.js +5 -0
- package/src/lib/agent-ipc-bus.js +12 -3
- package/src/lib/agent-team/team-worktree.js +28 -6
- package/src/lib/agent-worktree.js +20 -19
- package/src/lib/approval-authority-store.js +891 -0
- package/src/lib/async-hook-supervisor.cjs +134 -24
- package/src/lib/async-hook-supervisor.js +47 -0
- package/src/lib/background-agent-supervisor.js +35 -12
- package/src/lib/background-interaction-resolver.js +399 -54
- package/src/lib/background-session-transport.js +3 -1
- package/src/lib/background-task-manager.js +5 -1
- package/src/lib/changelog.js +57 -0
- package/src/lib/chrome-connector.js +6 -2
- package/src/lib/claude-code-bridge.js +24 -8
- package/src/lib/cli-anything-bridge.js +82 -25
- package/src/lib/context-breakdown.js +82 -3
- package/src/lib/doctor-checkup.js +18 -6
- package/src/lib/eval/tasks.js +25 -31
- package/src/lib/event-runtime-host.js +225 -0
- package/src/lib/event-runtime-store.js +102 -21
- package/src/lib/event-runtime-worker.js +70 -2
- package/src/lib/hook-runner.cjs +71 -36
- package/src/lib/hook-runner.js +55 -0
- package/src/lib/hooks-v2-producers.js +33 -8
- package/src/lib/hooks-v2-runtime.js +360 -40
- package/src/lib/host-adb-bridge.js +18 -3
- package/src/lib/interaction-adapter.js +66 -0
- package/src/lib/lsp/__tests__/benchmark.test.js +61 -0
- package/src/lib/lsp/__tests__/lsp-client.test.js +6 -1
- package/src/lib/lsp/benchmark.js +20 -4
- package/src/lib/lsp/lsp-client.js +6 -4
- package/src/lib/lsp/lsp-server-registry.js +0 -2
- package/src/lib/operation-fingerprint.js +107 -2
- package/src/lib/orchestrator.js +8 -2
- package/src/lib/packer/pack-update-applier.js +14 -2
- package/src/lib/packer/smoke-runner.js +18 -5
- package/src/lib/paths.js +1 -1
- package/src/lib/pdh-dedicated-batch-collectors.js +124 -0
- package/src/lib/personal-data-hub-wiring.js +327 -52
- package/src/lib/plugin-monitor-supervisor.js +20 -13
- package/src/lib/plugin-runtime/install.js +10 -3
- package/src/lib/process-execution-broker/credential-agent.js +954 -111
- package/src/lib/process-execution-broker/index.js +369 -85
- package/src/lib/process-execution-broker/platform-sandbox.js +320 -140
- package/src/lib/provider-http-error.js +94 -0
- package/src/lib/remote-approval-bridge.js +222 -26
- package/src/lib/repl-bang-memorize.js +10 -2
- package/src/lib/repl-goal.js +19 -2
- package/src/lib/settings-hook-events.cjs +13 -8
- package/src/lib/settings-hook-events.js +20 -0
- package/src/lib/side-effect-ledger-store.js +65 -14
- package/src/lib/skill-loader.js +215 -12
- package/src/lib/skill-packs/generator.js +18 -9
- package/src/lib/skill-process-broker.js +85 -0
- package/src/lib/slash-commands.js +10 -2
- package/src/lib/status-line.cjs +28 -7
- package/src/lib/status-line.js +33 -0
- package/src/lib/sub-agent-context.js +42 -0
- package/src/lib/turn-binding-store.js +64 -15
- package/src/lib/turn-binding.js +85 -16
- package/src/repl/agent-repl.js +88 -49
- package/src/repl/remote-approval.js +13 -13
- package/src/repl/repl-turn-binding.js +46 -16
- package/src/runtime/agent-core.js +419 -84
- package/src/runtime/coding-agent-contract-shared.cjs +16 -0
- package/src/runtime/headless-runner.js +172 -44
- package/src/runtime/headless-stream.js +221 -11
- package/src/runtime/session-slash-commands.js +506 -0
- package/src/skills/video-editing/extractors/audio-extractor.js +13 -5
- package/src/skills/video-editing/extractors/video-extractor.js +13 -3
- package/src/skills/video-editing/media-process.js +20 -0
- package/src/skills/video-editing/render/audio-mix.js +13 -3
- package/src/skills/video-editing/render/ffmpeg-concat.js +7 -2
- package/src/skills/video-editing/render/ffmpeg-extract.js +7 -2
- package/src/workers/background-agent-worker.js +76 -40
- package/src/assets/web-panel/assets/AppLayout-Duu8xR14.js +0 -9
- package/src/assets/web-panel/assets/Dashboard-CXrd5gAw.js +0 -3
- package/src/assets/web-panel/assets/MobileProjects-NZvvfDME.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-C48mu09U.js +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-AX3ypUDV.js +0 -9
- package/src/assets/web-panel/assets/Projects-Cc7FC9-e.js +0 -1
- package/src/assets/web-panel/assets/Terminal-CjTZPa37.js +0 -3
- package/src/assets/web-panel/assets/devWarning-BT46Y_QI.js +0 -1
- package/src/assets/web-panel/assets/index-B7nuIywP.js +0 -1
- package/src/assets/web-panel/assets/index-ycwAfC-i.js +0 -1
- package/src/assets/web-panel/assets/usePersonalDataHub-B4NkcLaP.js +0 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import statusLine from "./status-line.cjs";
|
|
2
|
+
import executionBroker from "./process-execution-broker/index.js";
|
|
3
|
+
|
|
4
|
+
const brokerRunner = executionBroker.spawnSync.bind(executionBroker);
|
|
5
|
+
|
|
6
|
+
export function renderStatusLine(config, context, options = {}) {
|
|
7
|
+
return statusLine.renderStatusLine(config, context, {
|
|
8
|
+
...options,
|
|
9
|
+
runProcess:
|
|
10
|
+
options.runProcess || statusLine._deps.runProcess || brokerRunner,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function getStatusLine(options = {}) {
|
|
15
|
+
return statusLine.getStatusLine({
|
|
16
|
+
...options,
|
|
17
|
+
runProcess:
|
|
18
|
+
options.runProcess || statusLine._deps.runProcess || brokerRunner,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const {
|
|
23
|
+
loadStatusLineConfig,
|
|
24
|
+
buildContext,
|
|
25
|
+
formatTokens,
|
|
26
|
+
shortenPath,
|
|
27
|
+
renderDefaultStatusLine,
|
|
28
|
+
isStatusLineDisabled,
|
|
29
|
+
terminalSize,
|
|
30
|
+
_deps,
|
|
31
|
+
} = statusLine;
|
|
32
|
+
|
|
33
|
+
export default { ...statusLine, renderStatusLine, getStatusLine };
|
|
@@ -110,6 +110,11 @@ export class SubAgentContext {
|
|
|
110
110
|
// symlinkDirectories } — only materialize the needed packages and reuse
|
|
111
111
|
// approved dep dirs. null → full checkout (byte-identical default).
|
|
112
112
|
this._worktreeOptions = options.worktreeOptions || null;
|
|
113
|
+
// Recovery lineage collected from the child agent-loop event stream.
|
|
114
|
+
// These are provider/runtime identifiers, not reconstructed log labels.
|
|
115
|
+
this._runId = null;
|
|
116
|
+
this._checkpointIds = [];
|
|
117
|
+
this._toolUseIds = [];
|
|
113
118
|
|
|
114
119
|
// ── Isolated state ──────────────────────────────────────────────
|
|
115
120
|
// Independent message history — never shared with parent
|
|
@@ -399,6 +404,22 @@ export class SubAgentContext {
|
|
|
399
404
|
for await (const event of gen) {
|
|
400
405
|
this._iterationCount++;
|
|
401
406
|
|
|
407
|
+
if (event.type === "run-started" && event.runId) {
|
|
408
|
+
this._runId = String(event.runId);
|
|
409
|
+
}
|
|
410
|
+
if (event.type === "checkpoint" && event.id) {
|
|
411
|
+
const checkpointId = String(event.id);
|
|
412
|
+
if (!this._checkpointIds.includes(checkpointId)) {
|
|
413
|
+
this._checkpointIds.push(checkpointId);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (event.type === "tool-executing" && event.tool_use_id) {
|
|
417
|
+
const toolUseId = String(event.tool_use_id);
|
|
418
|
+
if (!this._toolUseIds.includes(toolUseId)) {
|
|
419
|
+
this._toolUseIds.push(toolUseId);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
402
423
|
if (event.type === "token-usage" && this._onUsage) {
|
|
403
424
|
// Forward real usage to the spawner. A nested child's event already
|
|
404
425
|
// carries its own attribution frame — preserve it (deepest wins).
|
|
@@ -604,6 +625,26 @@ export class SubAgentContext {
|
|
|
604
625
|
}
|
|
605
626
|
}
|
|
606
627
|
|
|
628
|
+
/**
|
|
629
|
+
* Serializable child→parent recovery lineage. Worktree paths are included
|
|
630
|
+
* for local restore UX; executable merge callbacks and tool payloads are not.
|
|
631
|
+
*/
|
|
632
|
+
recoveryBinding(result = this.result) {
|
|
633
|
+
const worktree = result?.worktree || null;
|
|
634
|
+
return {
|
|
635
|
+
childAgentId: this.id,
|
|
636
|
+
parentAgentId: this.parentId || null,
|
|
637
|
+
traceId: this._runId,
|
|
638
|
+
parentTraceId: this._hookParentTraceId || null,
|
|
639
|
+
checkpointIds: [...this._checkpointIds],
|
|
640
|
+
toolUseIds: [...this._toolUseIds],
|
|
641
|
+
worktreeId:
|
|
642
|
+
worktree?.branch || this._worktreeBranch || null,
|
|
643
|
+
worktreePath:
|
|
644
|
+
worktree?.path || this._worktreePath || null,
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
|
|
607
648
|
/**
|
|
608
649
|
* True when this sub-agent has been asked to stop — either via an external
|
|
609
650
|
* abort signal or via this context's own `abort()` (precise single-agent
|
|
@@ -647,6 +688,7 @@ export class SubAgentContext {
|
|
|
647
688
|
iterationCount: this._iterationCount,
|
|
648
689
|
createdAt: this.createdAt,
|
|
649
690
|
completedAt: this.completedAt,
|
|
691
|
+
recoveryBinding: this.recoveryBinding(),
|
|
650
692
|
worktree: this._worktreePath
|
|
651
693
|
? { path: this._worktreePath, branch: this._worktreeBranch }
|
|
652
694
|
: null,
|
|
@@ -35,46 +35,85 @@ export const _deps = {
|
|
|
35
35
|
readEvents: storeReadEvents,
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
+
export class TurnBindingPersistenceError extends Error {
|
|
39
|
+
constructor(operation, sessionId, cause) {
|
|
40
|
+
const detail = cause?.message || String(cause || "unknown persistence error");
|
|
41
|
+
super(`Turn binding ${operation} failed for ${sessionId}: ${detail}`, {
|
|
42
|
+
cause,
|
|
43
|
+
});
|
|
44
|
+
this.name = "TurnBindingPersistenceError";
|
|
45
|
+
this.code =
|
|
46
|
+
operation === "read"
|
|
47
|
+
? "TURN_BINDING_READ_FAILED"
|
|
48
|
+
: "TURN_BINDING_PERSIST_FAILED";
|
|
49
|
+
this.operation = operation;
|
|
50
|
+
this.sessionId = sessionId;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function persistenceFailure(operation, sessionId, cause, failIfUnavailable) {
|
|
55
|
+
if (!failIfUnavailable) return false;
|
|
56
|
+
throw new TurnBindingPersistenceError(operation, sessionId, cause);
|
|
57
|
+
}
|
|
58
|
+
|
|
38
59
|
/**
|
|
39
60
|
* Append the current binding table as a new chained event. Each call writes the
|
|
40
61
|
* FULL table (append-only snapshot), so the newest event is authoritative — a
|
|
41
62
|
* later `loadTurnBindingLog` never has to merge partial deltas across a chain
|
|
42
63
|
* that a compaction could have truncated.
|
|
43
64
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
65
|
+
* Turn/checkpoint binding is Critical state. Persistence fails closed by
|
|
66
|
+
* default; diagnostic callers may explicitly opt into advisory behavior.
|
|
46
67
|
*
|
|
47
68
|
* @param {string} sessionId
|
|
48
69
|
* @param {TurnBindingLog|object} log a TurnBindingLog or its toJSON() shape
|
|
70
|
+
* @param {{failIfUnavailable?:boolean}} [opts]
|
|
49
71
|
* @returns {boolean} true when the snapshot was written
|
|
50
72
|
*/
|
|
51
|
-
export function persistTurnBinding(sessionId, log) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
73
|
+
export function persistTurnBinding(sessionId, log, opts = {}) {
|
|
74
|
+
const failIfUnavailable = opts.failIfUnavailable !== false;
|
|
75
|
+
if (!sessionId || !log) {
|
|
76
|
+
return persistenceFailure(
|
|
77
|
+
"write",
|
|
78
|
+
sessionId || "<missing-session>",
|
|
79
|
+
new TypeError("sessionId and binding log are required"),
|
|
80
|
+
failIfUnavailable,
|
|
81
|
+
);
|
|
82
|
+
}
|
|
55
83
|
try {
|
|
84
|
+
const snapshot = log instanceof TurnBindingLog ? log.toJSON() : log;
|
|
85
|
+
if (!snapshot || !Array.isArray(snapshot.turns)) {
|
|
86
|
+
throw new TypeError("binding snapshot must contain a turns array");
|
|
87
|
+
}
|
|
56
88
|
_deps.appendEvent(sessionId, TURN_BINDING_EVENT, snapshot);
|
|
57
89
|
return true;
|
|
58
|
-
} catch {
|
|
59
|
-
|
|
60
|
-
return false;
|
|
90
|
+
} catch (error) {
|
|
91
|
+
return persistenceFailure("write", sessionId, error, failIfUnavailable);
|
|
61
92
|
}
|
|
62
93
|
}
|
|
63
94
|
|
|
64
95
|
/**
|
|
65
96
|
* Rebuild the TurnBindingLog from the LATEST persisted snapshot in a session
|
|
66
|
-
* transcript. Returns an empty log when the session has no binding event
|
|
67
|
-
*
|
|
97
|
+
* transcript. Returns an empty log when the session has no binding event.
|
|
98
|
+
* Read/corruption errors fail closed unless explicitly marked advisory.
|
|
68
99
|
*
|
|
69
100
|
* @param {string} sessionId
|
|
101
|
+
* @param {{failIfUnavailable?:boolean}} [opts]
|
|
70
102
|
* @returns {TurnBindingLog}
|
|
71
103
|
*/
|
|
72
|
-
export function loadTurnBindingLog(sessionId) {
|
|
104
|
+
export function loadTurnBindingLog(sessionId, opts = {}) {
|
|
105
|
+
const failIfUnavailable = opts.failIfUnavailable !== false;
|
|
73
106
|
let events = [];
|
|
74
107
|
try {
|
|
75
108
|
events = _deps.readEvents(sessionId) || [];
|
|
76
|
-
} catch {
|
|
77
|
-
|
|
109
|
+
} catch (error) {
|
|
110
|
+
const fallback = persistenceFailure(
|
|
111
|
+
"read",
|
|
112
|
+
sessionId || "<missing-session>",
|
|
113
|
+
error,
|
|
114
|
+
failIfUnavailable,
|
|
115
|
+
);
|
|
116
|
+
if (fallback === false) return new TurnBindingLog();
|
|
78
117
|
}
|
|
79
118
|
// Newest snapshot wins — scan backwards for the first well-formed one.
|
|
80
119
|
for (let i = events.length - 1; i >= 0; i--) {
|
|
@@ -85,7 +124,17 @@ export function loadTurnBindingLog(sessionId) {
|
|
|
85
124
|
e.data &&
|
|
86
125
|
Array.isArray(e.data.turns)
|
|
87
126
|
) {
|
|
88
|
-
|
|
127
|
+
try {
|
|
128
|
+
return TurnBindingLog.fromJSON(e.data);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
const fallback = persistenceFailure(
|
|
131
|
+
"read",
|
|
132
|
+
sessionId || "<missing-session>",
|
|
133
|
+
error,
|
|
134
|
+
failIfUnavailable,
|
|
135
|
+
);
|
|
136
|
+
if (fallback === false) return new TurnBindingLog();
|
|
137
|
+
}
|
|
89
138
|
}
|
|
90
139
|
}
|
|
91
140
|
return new TurnBindingLog();
|
package/src/lib/turn-binding.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* -> toolCallIds[] (tool_use_ids this turn issued)
|
|
14
14
|
* -> permissionDecisionIds[] (approval decisions made this turn)
|
|
15
15
|
* -> childAgentIds[] (sub-agents spawned this turn)
|
|
16
|
+
* -> childBindings[] (child trace/checkpoint/worktree lineage)
|
|
16
17
|
* -> worktreeId (isolation worktree, if any)
|
|
17
18
|
* -> coverage: full | partial | none
|
|
18
19
|
*
|
|
@@ -90,6 +91,7 @@ function emptyRecord(turnId, conversationOffset) {
|
|
|
90
91
|
toolCallIds: [],
|
|
91
92
|
permissionDecisionIds: [],
|
|
92
93
|
childAgentIds: [],
|
|
94
|
+
childBindings: [],
|
|
93
95
|
worktreeId: null,
|
|
94
96
|
// side-effect flags → coverage (kept internal; surfaced via `coverage`)
|
|
95
97
|
_flags: {
|
|
@@ -160,6 +162,39 @@ export class TurnBindingLog {
|
|
|
160
162
|
return this;
|
|
161
163
|
}
|
|
162
164
|
|
|
165
|
+
recordChildBinding(turnId, binding) {
|
|
166
|
+
if (!binding || typeof binding !== "object") return this;
|
|
167
|
+
const childAgentId =
|
|
168
|
+
binding.childAgentId == null ? null : String(binding.childAgentId);
|
|
169
|
+
if (!childAgentId) return this;
|
|
170
|
+
const normalized = {
|
|
171
|
+
childAgentId,
|
|
172
|
+
parentAgentId:
|
|
173
|
+
binding.parentAgentId == null ? null : String(binding.parentAgentId),
|
|
174
|
+
traceId: binding.traceId == null ? null : String(binding.traceId),
|
|
175
|
+
parentTraceId:
|
|
176
|
+
binding.parentTraceId == null ? null : String(binding.parentTraceId),
|
|
177
|
+
checkpointIds: Array.isArray(binding.checkpointIds)
|
|
178
|
+
? [...new Set(binding.checkpointIds.map(String))]
|
|
179
|
+
: [],
|
|
180
|
+
toolUseIds: Array.isArray(binding.toolUseIds)
|
|
181
|
+
? [...new Set(binding.toolUseIds.map(String))]
|
|
182
|
+
: [],
|
|
183
|
+
worktreeId:
|
|
184
|
+
binding.worktreeId == null ? null : String(binding.worktreeId),
|
|
185
|
+
worktreePath:
|
|
186
|
+
binding.worktreePath == null ? null : String(binding.worktreePath),
|
|
187
|
+
};
|
|
188
|
+
const rec = this._rec(turnId);
|
|
189
|
+
const index = rec.childBindings.findIndex(
|
|
190
|
+
(item) => item.childAgentId === childAgentId,
|
|
191
|
+
);
|
|
192
|
+
if (index === -1) rec.childBindings.push(normalized);
|
|
193
|
+
else rec.childBindings[index] = normalized;
|
|
194
|
+
pushUnique(rec.childAgentIds, childAgentId);
|
|
195
|
+
return this;
|
|
196
|
+
}
|
|
197
|
+
|
|
163
198
|
/** Bind (or re-bind to the earliest) file checkpoint for this turn. */
|
|
164
199
|
bindCheckpoint(turnId, checkpointId) {
|
|
165
200
|
const rec = this._rec(turnId);
|
|
@@ -231,6 +266,11 @@ export class TurnBindingLog {
|
|
|
231
266
|
toolCallIds: [...rec.toolCallIds],
|
|
232
267
|
permissionDecisionIds: [...rec.permissionDecisionIds],
|
|
233
268
|
childAgentIds: [...rec.childAgentIds],
|
|
269
|
+
childBindings: rec.childBindings.map((binding) => ({
|
|
270
|
+
...binding,
|
|
271
|
+
checkpointIds: [...binding.checkpointIds],
|
|
272
|
+
toolUseIds: [...binding.toolUseIds],
|
|
273
|
+
})),
|
|
234
274
|
worktreeId: rec.worktreeId,
|
|
235
275
|
coverage: computeCoverage(rec._flags),
|
|
236
276
|
};
|
|
@@ -260,6 +300,22 @@ export class TurnBindingLog {
|
|
|
260
300
|
childAgentIds: Array.isArray(r.childAgentIds)
|
|
261
301
|
? [...r.childAgentIds]
|
|
262
302
|
: [],
|
|
303
|
+
childBindings: Array.isArray(r.childBindings)
|
|
304
|
+
? r.childBindings.map((binding) => ({
|
|
305
|
+
childAgentId: String(binding.childAgentId),
|
|
306
|
+
parentAgentId: binding.parentAgentId ?? null,
|
|
307
|
+
traceId: binding.traceId ?? null,
|
|
308
|
+
parentTraceId: binding.parentTraceId ?? null,
|
|
309
|
+
checkpointIds: Array.isArray(binding.checkpointIds)
|
|
310
|
+
? binding.checkpointIds.map(String)
|
|
311
|
+
: [],
|
|
312
|
+
toolUseIds: Array.isArray(binding.toolUseIds)
|
|
313
|
+
? binding.toolUseIds.map(String)
|
|
314
|
+
: [],
|
|
315
|
+
worktreeId: binding.worktreeId ?? null,
|
|
316
|
+
worktreePath: binding.worktreePath ?? null,
|
|
317
|
+
}))
|
|
318
|
+
: [],
|
|
263
319
|
worktreeId: r.worktreeId ?? null,
|
|
264
320
|
_flags: { ...emptyRecord(id)._flags, ...(r._flags || {}) },
|
|
265
321
|
});
|
|
@@ -428,16 +484,12 @@ export function buildTurnBindingFromMarks(turns = [], marks = []) {
|
|
|
428
484
|
/**
|
|
429
485
|
* Stateful feeder turning raw agent-loop events into TurnBindingLog records —
|
|
430
486
|
* the SHARED producer core for every runner (headless and the interactive
|
|
431
|
-
* REPL)
|
|
432
|
-
*
|
|
433
|
-
* tool-call ids are synthesized `<nonce>:c<seq>` and turn ids `<nonce>:t<seq>`
|
|
434
|
-
* (mirrors the side-effect ledger's op-id scheme — stable within a run, unique
|
|
435
|
-
* across resumes as long as `nonce` is per-run unique).
|
|
487
|
+
* REPL). Provider tool ids are consumed directly; ids are synthesized only for
|
|
488
|
+
* legacy/custom event sources that omit `tool_use_id`.
|
|
436
489
|
*
|
|
437
|
-
*
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
* prune) does.
|
|
490
|
+
* Every begun turn marks the table dirty. Tool-free turns still need an
|
|
491
|
+
* explicit `full` coverage record; otherwise restore/history consumers cannot
|
|
492
|
+
* distinguish "nothing happened" from "the producer failed to record".
|
|
441
493
|
*
|
|
442
494
|
* @param {{log?: TurnBindingLog, nonce?: string}} [opts]
|
|
443
495
|
*/
|
|
@@ -458,8 +510,7 @@ export function createTurnBindingFeed({
|
|
|
458
510
|
* contract `pickPersistedTurn` relies on). `supersede: true` first prunes
|
|
459
511
|
* records at/after that offset (live-REPL rewind/clear/compaction rule);
|
|
460
512
|
* append-only runners leave it off. `worktreeId` stamps the run's isolation
|
|
461
|
-
* worktree onto the record
|
|
462
|
-
* turn in a worktree still writes nothing).
|
|
513
|
+
* worktree onto the record.
|
|
463
514
|
*/
|
|
464
515
|
beginTurn(
|
|
465
516
|
conversationOffset,
|
|
@@ -471,6 +522,7 @@ export function createTurnBindingFeed({
|
|
|
471
522
|
currentTurnId = `${nonce}:t${turnSeq++}`;
|
|
472
523
|
log.startTurn(currentTurnId, { conversationOffset });
|
|
473
524
|
if (worktreeId != null) log.setWorktree(currentTurnId, worktreeId);
|
|
525
|
+
dirty = true;
|
|
474
526
|
return currentTurnId;
|
|
475
527
|
},
|
|
476
528
|
currentTurnId: () => currentTurnId,
|
|
@@ -486,27 +538,41 @@ export function createTurnBindingFeed({
|
|
|
486
538
|
}
|
|
487
539
|
break;
|
|
488
540
|
case "tool-executing": {
|
|
489
|
-
const callId =
|
|
541
|
+
const callId =
|
|
542
|
+
event.tool_use_id == null
|
|
543
|
+
? `${nonce}:c${callSeq++}`
|
|
544
|
+
: String(event.tool_use_id);
|
|
490
545
|
currentCallId = callId;
|
|
491
546
|
log.recordToolCall(turnId, callId, { name: event.tool });
|
|
492
547
|
dirty = true;
|
|
493
548
|
break;
|
|
494
549
|
}
|
|
495
550
|
case "tool-result": {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
551
|
+
const callId =
|
|
552
|
+
event.tool_use_id == null
|
|
553
|
+
? currentCallId
|
|
554
|
+
: String(event.tool_use_id);
|
|
555
|
+
// New core events expose the exact decision id. Legacy/custom event
|
|
556
|
+
// sources retain the deterministic compatibility derivation.
|
|
499
557
|
const policy = event.result?.policy;
|
|
500
558
|
if (policy && (policy.via || policy.decision)) {
|
|
501
559
|
log.recordPermissionDecision(
|
|
502
560
|
turnId,
|
|
503
|
-
|
|
561
|
+
event.permission_decision_id ||
|
|
562
|
+
`${callId || "call"}:perm:${policy.via || policy.decision}`,
|
|
504
563
|
);
|
|
505
564
|
dirty = true;
|
|
506
565
|
}
|
|
566
|
+
if (event.result?.userEdited === true) {
|
|
567
|
+
log.markUserEdit(turnId);
|
|
568
|
+
dirty = true;
|
|
569
|
+
}
|
|
507
570
|
// Foreground spawn_sub_agent reports its child id on the result.
|
|
508
571
|
if (event.result?.subAgentId) {
|
|
509
572
|
log.recordChildAgent(turnId, event.result.subAgentId);
|
|
573
|
+
if (event.result.childBinding) {
|
|
574
|
+
log.recordChildBinding(turnId, event.result.childBinding);
|
|
575
|
+
}
|
|
510
576
|
dirty = true;
|
|
511
577
|
}
|
|
512
578
|
currentCallId = null;
|
|
@@ -515,6 +581,9 @@ export function createTurnBindingFeed({
|
|
|
515
581
|
case "background-sub-agent-result":
|
|
516
582
|
if (event.subAgentId) {
|
|
517
583
|
log.recordChildAgent(turnId, event.subAgentId);
|
|
584
|
+
if (event.childBinding) {
|
|
585
|
+
log.recordChildBinding(turnId, event.childBinding);
|
|
586
|
+
}
|
|
518
587
|
dirty = true;
|
|
519
588
|
}
|
|
520
589
|
break;
|