chainlesschain 0.166.3 → 0.166.4
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/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-DZTvbk_H.js → AIOps-HcOh0ZbH.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-IaEVUN3o.js → ActionButton-DWjDqBhd.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CCQab0gl.js → Analytics-C6FS-y3W.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-Bs_0GVpx.js → AppLayout-DCN5cldF.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-Bm83-yJv.js → Artifacts-Crd-KE8P.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Bah1XDR5.js → Audit-BexuTQZc.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BPZA0B5d.js → BackgroundAgents-Dydkh-b5.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BMydWFiM.js → Backup-BYq21wMP.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-lhopFSZz.js → BaseInput-CmNZP6yM.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Bbbs5BP1.js → Chat-J6bD0zCl.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-BIAfOKCj.js → ChatBubbleRenderer-MEoaygnL.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CLEMA9J4.js → Checkbox-Ce-9vNmK.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-deCSwmnK.js → Codegen-zf7-Y-Eh.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CH-n8haq.js → Col-D-TkY0FD.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DJuAl6dw.js → Community-l300NA-1.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BMyLBmgs.js → Compact-D-9Q_hxc.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BK75Ss93.js → Compliance-DAJ8lLiQ.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-5XbJwKYq.js → Cowork-xmzZ967S.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Ezgir7IZ.js → Cron-CeGqO5W4.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CKuMoYA7.js → Crosschain-DXN0AE-4.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CxS244cH.js → DID-CtIKASPr.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-wrUKrsJy.js → Dashboard-DqRwT8NX.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-A6I91Z2J.js → Dropdown-ddIVljO1.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-BofaiRYY.js → EmailListRenderer-CcsFzV4y.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-D3eeNA64.js → FamilyGuardDashboard-PnlAUGcG.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DzK-3AjS.js → Federation-BlmLuQrL.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Dm6mYA8b.js → FormItemContext-dDovBj1Y.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BeWL-Q1b.js → GenericCardRenderer-DTvGshFr.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CtGCxg9p.js → Git-DuFR2xgA.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DZvFB46G.js → Governance-9EaNcJuq.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-ntqp4cmw.js → Inference-B-iYWH_r.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CrLYbqLe.js → KnowledgeGraph-BGBaKiLX.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CKA1PRhC.js → Logs-G3wmXzfa.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-hk0YwjTR.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-B8aPsXYv.js → Marketplace-BNARBeAv.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DQOgNdGS.js → McpTools-DST2cSSK.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-i9IK9B0M.js → Memory-piwDLsVH.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BynYvpv9.js → MobileBridge-D-W8zHdm.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DixivGuQ.js → MobileProjects-CwaYHlVP.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-OWPvWVNr.js → Mtc-C2dxnN7Q.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-Cqpg5C4A.js → MtcAudit-BwPZsV3N.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-CT5kMJIZ.js → Multisig-CUt8w2al.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BXD0Dz0h.js → NLProgramming-DwxErx27.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-T1w5p8N5.js → Notes-B-mXAZ84.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DFCThpKJ.js → NotificationSettings-Bd1fBAzd.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BJOuM0Kl.js → OrderTableRenderer-CCInnavw.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CSFcw86q.js → Organization-DTTONYZT.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BxVMuLTk.js → Overflow-H6lCZ1rE.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-B8qxY_yX.js → P2P-DyBZzeYW.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Bcq27Exy.js → PdhVaultBrowser-jj7LhT04.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CGBvJVXP.js → Permissions-B5nSQwsr.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DM9IEeJ3.js → PersonalDataHub-CACaQtlY.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-wEskx2-p.js → Pipeline-5y-DR_Bw.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DIA02lLJ.js → Privacy-BMSA3Ehd.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-uMXlNLHV.js → ProjectInit-VCOj1dTa.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Sy3NOtt7.js → ProjectSettings-CJaXO_iE.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-xFjfOkQM.js → Projects-C21-MQ3H.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CNyOpbg8.js → Providers-DZ1FNKUR.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-Dk1UVRwI.js → QrScannerModal-6DKc9UBX.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-B-UqLoLG.js → QuickAsk-Dyd0Ckrk.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CiTBVZvN.js → Recommend-CYW4-GJH.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BhABd516.js → RemoteSession-DLrfPy4F.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-Dq1xTCcN.js → Reputation-DfqPo1FI.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DbFc4sc7.js → Row-CR89H2x5.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-D7IBkkLm.js → RssFeed-B9QY7R-F.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BVyMlGoa.js → Search-CUDnzu4w.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BzMm9Be_.js → Security-CJ0CtM_Z.js} +3 -3
- package/src/assets/web-panel/assets/{Services-Dfk0kied.js → Services-CyrQ6F5U.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-C8B5mUit.js → Skeleton-DcwnKatQ.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BhKkYF3_.js +1 -0
- package/src/assets/web-panel/assets/{Sla-gnFelKfT.js → Sla-CWh-awh7.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B12gCQkK.js → SpeechSettings-BaUMNzx7.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CHWk9cpj.js → SyncSettings-D1Ijwwxl.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-B_zs9jkJ.js → Tasks-DFqjHi3T.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-PjdppQrI.js → Templates-Ct-9_ki3.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CH3aARxE.js → Tenant-zBkgyilh.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BqqrYyg3.js → Terminal-VVO2Hjfi.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-Dx9soq9f.js → TimelineRenderer-CX9pIkx3.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-C66KpDDZ.js → Tokens-DHaD6e_m.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DHxgGsap.js → Trigger-CFq9j3WV.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-3cct4QxN.js → Trust-DuF7gIYX.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Cs6UfDEH.js → UkeySign-DbuidXJX.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-jbu2EAQa.js → VideoEditing-B8IA9_qE.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BIykFB9D.js → Wallet-DdCglSIK.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DFgqKmHG.js → WebAuthn-CeteRsA8.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-CNg5bBiH.js → WorkflowEditor-DJhIbG__.js} +1 -1
- package/src/assets/web-panel/assets/{chat-B-6wzojE.js → chat-srOi_Wef.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BHAq7y9y.js → colors-HpVHsNGK.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CGJnSTnu.js → compact-item-DsLhrqWe.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Cx0ZF512.js → createContext-aOasIUuE.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B_acr36n.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DibIw3z7.js → hasIn-D5BVMimS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoySHSgZ.js → index-B615KD2o.js} +1 -1
- package/src/assets/web-panel/assets/{index-746-mNhw.js → index-BCp70IlO.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz5ety6j.js → index-BD64r0Tx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CH2A_Fdn.js → index-BGBvkNN3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZ7GbrgF.js → index-BNbsjeEc.js} +1 -1
- package/src/assets/web-panel/assets/{index-Aaeca8o4.js → index-BTwDhhvl.js} +1 -1
- package/src/assets/web-panel/assets/{index-woOjtit-.js → index-BigtYchO.js} +1 -1
- package/src/assets/web-panel/assets/index-BnLYpdox.js +1 -0
- package/src/assets/web-panel/assets/{index-B28jdxwR.js → index-Bu6TVdgQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2rOMBeN.js → index-C4tPtHU0.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCtW4F8-.js → index-CGVHW0nF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CrjkH_QU.js → index-CQEoGqMG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTWb3sbj.js → index-CQXp_uNd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRflLAdr.js → index-CSxJ4oRd.js} +1 -1
- package/src/assets/web-panel/assets/{index-SbQacweG.js → index-CUUs12L9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEXM3qSV.js → index-CVp_dHCs.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cuity3gy.js → index-ChGUPEwS.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjCJIttz.js → index-CvhVCHk-.js} +1 -1
- package/src/assets/web-panel/assets/{index-C6M2yHVE.js → index-D1xZMQrN.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUX9mq3M.js → index-D2XRXkZU.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bz3J0eVB.js → index-DQ5j1VKg.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXNcm44v.js → index-DRCIPsdm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BO-XxBD5.js → index-DV4y5rUj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJhS6i02.js → index-DcLBzIiI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoKu7Q9r.js → index-DiXsis7m.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1jAbIxx.js → index-Dpj-rEoV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiMLsIwd.js → index-Dum_r_oY.js} +1 -1
- package/src/assets/web-panel/assets/index-Dzmwsl_v.js +1 -0
- package/src/assets/web-panel/assets/{index-BAoFiV3n.js → index-LSz0ZOB8.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bmqjip63.js → index-Ow3SRXRX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BR2BiNtx.js → index-P6IMLmLT.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnsVRqCa.js → index-V0gpVTbS.js} +1 -1
- package/src/assets/web-panel/assets/{index-sI_1E0co.js → index-b0Y0hDhX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFTGp-aF.js → index-dPFzlII1.js} +1 -1
- package/src/assets/web-panel/assets/{index-0NWSa3Xq.js → index-fZnlPk7H.js} +1 -1
- package/src/assets/web-panel/assets/{index-CwcWpW1q.js → index-kYqi6zYp.js} +1 -1
- package/src/assets/web-panel/assets/{index-puIs3mTs.js → index-lFOfvZDn.js} +3 -3
- package/src/assets/web-panel/assets/{index-g0V_mLQ9.js → index-q--LtRh9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CY2E4Y99.js → index-vQ6jy8Ew.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Gbl9QOqg.js → initDefaultProps-1NU9yNpr.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BHh6ZzZu.js → motion-BZk2hQ6c.js} +1 -1
- package/src/assets/web-panel/assets/{move-mX6Rwrd1.js → move-BNvublME.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CuzZa_kI.js → mtc-parser-DWk5BUoL.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DjANYkpi.js → omit-DztYxX3x.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-C_3v40wY.js → pickAttrs-DURL8mtg.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-L2HgRede.js → placementArrow-B820R56z.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DIkGMHyT.js → responsiveObserve-DUAkGJL1.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C1hp5tD0.js → slide-uZQeNSo6.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DH1W2uFA.js → statusUtils-CGR1wFVq.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-dEaKQcv2.js → styleChecker-BIIPOMsQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-CD7j1zxt.js → useFlexGapSupport-rIB9c0g2.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-C8jXMvEM.js → useFs-CrJe1BJi.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-C4r-8mys.js → usePersonalDataHub-DyEoD3Qm.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DDuI6wgY.js → vnode-CjohPxI0.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Dd-DteT6.js → zoom-C5POL1_6.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +13 -0
- package/src/gateways/ws/remote-session-protocol.js +20 -15
- package/src/generated/cc-agent-protocol.schema.json +67 -1
- package/src/lib/app-server/protocol.js +1 -8
- package/src/lib/remote-approval-bridge.js +8 -12
- package/src/lib/remote-approval-decision.js +87 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-DtwoKxDJ.js +0 -1
- package/src/assets/web-panel/assets/Skills-BNTPoJn0.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CNq_RRw4.js +0 -1
- package/src/assets/web-panel/assets/index-B_H-RZ9i.js +0 -1
- package/src/assets/web-panel/assets/index-CkH9UQQL.js +0 -1
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"durable_human_task",
|
|
15
15
|
"bounded_transport",
|
|
16
16
|
"graph_effect_receipts",
|
|
17
|
-
"deterministic_trace"
|
|
17
|
+
"deterministic_trace",
|
|
18
|
+
"agent_stream_events"
|
|
18
19
|
]
|
|
19
20
|
},
|
|
20
21
|
"oneOf": [
|
|
@@ -1782,6 +1783,71 @@
|
|
|
1782
1783
|
}
|
|
1783
1784
|
}
|
|
1784
1785
|
},
|
|
1786
|
+
"AgentStreamEventType": {
|
|
1787
|
+
"enum": [
|
|
1788
|
+
"approval_request",
|
|
1789
|
+
"approval_resolved",
|
|
1790
|
+
"checkpoint",
|
|
1791
|
+
"compaction",
|
|
1792
|
+
"compaction-degraded",
|
|
1793
|
+
"compaction_usage_unknown",
|
|
1794
|
+
"cost_budget_exhausted",
|
|
1795
|
+
"elicitation_complete",
|
|
1796
|
+
"elicitation_deferred",
|
|
1797
|
+
"feedback_ack",
|
|
1798
|
+
"hook_progress",
|
|
1799
|
+
"hook_response",
|
|
1800
|
+
"hook_started",
|
|
1801
|
+
"iteration_budget_exhausted",
|
|
1802
|
+
"iteration_warning",
|
|
1803
|
+
"plan_update",
|
|
1804
|
+
"question_request",
|
|
1805
|
+
"question_resolved",
|
|
1806
|
+
"question_response_rejected",
|
|
1807
|
+
"raw",
|
|
1808
|
+
"recovery_degraded",
|
|
1809
|
+
"remote_control",
|
|
1810
|
+
"result",
|
|
1811
|
+
"resume_ack",
|
|
1812
|
+
"session_error",
|
|
1813
|
+
"slash_command_result",
|
|
1814
|
+
"stream_event",
|
|
1815
|
+
"stream_retry",
|
|
1816
|
+
"structured_result",
|
|
1817
|
+
"subagent_completed",
|
|
1818
|
+
"subagent_progress",
|
|
1819
|
+
"subagent_started",
|
|
1820
|
+
"system",
|
|
1821
|
+
"token_usage",
|
|
1822
|
+
"tool_result",
|
|
1823
|
+
"tool_use",
|
|
1824
|
+
"user"
|
|
1825
|
+
]
|
|
1826
|
+
},
|
|
1827
|
+
"AgentStreamEventEnvelope": {
|
|
1828
|
+
"type": "object",
|
|
1829
|
+
"required": [
|
|
1830
|
+
"type"
|
|
1831
|
+
],
|
|
1832
|
+
"properties": {
|
|
1833
|
+
"type": {
|
|
1834
|
+
"$ref": "#/$defs/AgentStreamEventType"
|
|
1835
|
+
},
|
|
1836
|
+
"seq": {
|
|
1837
|
+
"type": "integer",
|
|
1838
|
+
"minimum": 1
|
|
1839
|
+
},
|
|
1840
|
+
"trace_id": {
|
|
1841
|
+
"type": "string",
|
|
1842
|
+
"minLength": 1,
|
|
1843
|
+
"maxLength": 128,
|
|
1844
|
+
"pattern": "^[A-Za-z0-9._:-]+$"
|
|
1845
|
+
}
|
|
1846
|
+
},
|
|
1847
|
+
"additionalProperties": {
|
|
1848
|
+
"$ref": "#/$defs/JsonValue"
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1785
1851
|
"InitializeParams": {
|
|
1786
1852
|
"type": "object",
|
|
1787
1853
|
"additionalProperties": false,
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import schema from "../../generated/cc-agent-protocol.schema.json" with { type: "json" };
|
|
2
2
|
import { validate } from "../json-schema-validate.js";
|
|
3
3
|
|
|
4
|
-
const schema = JSON.parse(
|
|
5
|
-
readFileSync(
|
|
6
|
-
new URL("../../generated/cc-agent-protocol.schema.json", import.meta.url),
|
|
7
|
-
"utf8",
|
|
8
|
-
),
|
|
9
|
-
);
|
|
10
|
-
|
|
11
4
|
export const APP_SERVER_PROTOCOL_VERSION = schema["x-cc-protocol"].version;
|
|
12
5
|
export const APP_SERVER_MIN_PROTOCOL_VERSION =
|
|
13
6
|
schema["x-cc-protocol"].minimumCompatibleVersion;
|
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
resolveRemoteControlWsUrl,
|
|
53
53
|
} from "./remote-control.js";
|
|
54
54
|
import { logger } from "./logger.js";
|
|
55
|
+
import { normalizeRemoteApprovalDecision } from "./remote-approval-decision.js";
|
|
55
56
|
|
|
56
57
|
const DEFAULT_DECISION_TIMEOUT_MS = 5 * 60 * 1000;
|
|
57
58
|
const REMOTE_LEASE_AUTHORIZATION_KIND =
|
|
@@ -411,24 +412,19 @@ export class RemoteApprovalBridge {
|
|
|
411
412
|
// The device must echo the complete durable capability tuple. Missing,
|
|
412
413
|
// mismatched, stale, duplicate, or expired resolutions never settle an
|
|
413
414
|
// approval; only the store's successful CAS can return approved=true.
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
rawAnswer === "false" ||
|
|
420
|
-
rawAnswer === "yes" ||
|
|
421
|
-
rawAnswer === "no";
|
|
422
|
-
if (!hasDecision) {
|
|
415
|
+
const remoteDecision = normalizeRemoteApprovalDecision(message.event, {
|
|
416
|
+
requireCanonical:
|
|
417
|
+
message.memberCapabilities?.includes("approval-decision-v1") === true,
|
|
418
|
+
});
|
|
419
|
+
if (!remoteDecision.ok) {
|
|
423
420
|
this._recordSecurityError({
|
|
424
421
|
action: "approval.resolve",
|
|
425
422
|
requestId,
|
|
426
|
-
reason:
|
|
423
|
+
reason: remoteDecision.reason,
|
|
427
424
|
});
|
|
428
425
|
return;
|
|
429
426
|
}
|
|
430
|
-
const decision =
|
|
431
|
-
rawAnswer === true || rawAnswer === "true" || rawAnswer === "yes";
|
|
427
|
+
const decision = remoteDecision.approved;
|
|
432
428
|
let ackedLease = null;
|
|
433
429
|
// The server creates the lease before forwarding the resolve frame. Keep a
|
|
434
430
|
// strictly request-bound cancellation handle even when durable adoption of
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { validateApprovalDecision } from "./app-server/protocol.js";
|
|
2
|
+
|
|
3
|
+
export const REMOTE_APPROVAL_DECISION_CAPABILITY = "approval-decision-v1";
|
|
4
|
+
|
|
5
|
+
const LEGACY_TRUE = new Set([true, "true", "yes"]);
|
|
6
|
+
const LEGACY_FALSE = new Set([false, "false", "no"]);
|
|
7
|
+
|
|
8
|
+
function parseLegacyValue(value) {
|
|
9
|
+
if (LEGACY_TRUE.has(value)) return true;
|
|
10
|
+
if (LEGACY_FALSE.has(value)) return false;
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function invalid(reason) {
|
|
15
|
+
return Object.freeze({ ok: false, reason });
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Normalize a remote approval response at the transport boundary.
|
|
20
|
+
*
|
|
21
|
+
* New clients send a canonical ApprovalDecision plus the N-1 boolean
|
|
22
|
+
* projection. Legacy clients may still send only answer/approved. Remote
|
|
23
|
+
* binary approval UIs cannot safely review scoped grants, so only acceptOnce
|
|
24
|
+
* and decline are admitted here.
|
|
25
|
+
*/
|
|
26
|
+
export function normalizeRemoteApprovalDecision(
|
|
27
|
+
event,
|
|
28
|
+
{ requireCanonical = false } = {},
|
|
29
|
+
) {
|
|
30
|
+
if (!event || typeof event !== "object" || Array.isArray(event)) {
|
|
31
|
+
return invalid("decision-required");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const hasCanonical = Object.prototype.hasOwnProperty.call(event, "decision");
|
|
35
|
+
let canonicalApproved = null;
|
|
36
|
+
let canonicalKind = null;
|
|
37
|
+
if (hasCanonical) {
|
|
38
|
+
const validation = validateApprovalDecision(event.decision);
|
|
39
|
+
if (!validation.ok) return invalid("canonical-decision-invalid");
|
|
40
|
+
canonicalKind = event.decision.kind;
|
|
41
|
+
if (canonicalKind === "acceptOnce") canonicalApproved = true;
|
|
42
|
+
else if (canonicalKind === "decline") canonicalApproved = false;
|
|
43
|
+
else return invalid("remote-decision-kind-not-supported");
|
|
44
|
+
} else if (requireCanonical) {
|
|
45
|
+
return invalid("canonical-decision-required");
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const legacyValues = [];
|
|
49
|
+
for (const field of ["answer", "approved"]) {
|
|
50
|
+
const value = event[field];
|
|
51
|
+
// Preserve the old `answer ?? approved` behavior for a null answer.
|
|
52
|
+
if (value === null || value === undefined) continue;
|
|
53
|
+
const parsed = parseLegacyValue(value);
|
|
54
|
+
if (parsed === null) return invalid("legacy-decision-invalid");
|
|
55
|
+
legacyValues.push(parsed);
|
|
56
|
+
}
|
|
57
|
+
if (legacyValues.some((value) => value !== legacyValues[0])) {
|
|
58
|
+
return invalid("legacy-decision-conflict");
|
|
59
|
+
}
|
|
60
|
+
const legacyApproved = legacyValues.length > 0 ? legacyValues[0] : null;
|
|
61
|
+
|
|
62
|
+
if (canonicalApproved === null && legacyApproved === null) {
|
|
63
|
+
return invalid("decision-required");
|
|
64
|
+
}
|
|
65
|
+
if (
|
|
66
|
+
canonicalApproved !== null &&
|
|
67
|
+
legacyApproved !== null &&
|
|
68
|
+
canonicalApproved !== legacyApproved
|
|
69
|
+
) {
|
|
70
|
+
return invalid("canonical-legacy-decision-conflict");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return Object.freeze({
|
|
74
|
+
ok: true,
|
|
75
|
+
approved: canonicalApproved ?? legacyApproved,
|
|
76
|
+
kind: canonicalKind || (legacyApproved === true ? "acceptOnce" : "decline"),
|
|
77
|
+
canonical: hasCanonical,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function requireRemoteApprovalDecision(event, options) {
|
|
82
|
+
const result = normalizeRemoteApprovalDecision(event, options);
|
|
83
|
+
if (!result.ok) {
|
|
84
|
+
throw new TypeError(`Invalid remote approval decision: ${result.reason}`);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as c,J as d,b as s}from"./vendor-Bn1JzzAn.js";import{r as a}from"./markdown-Yo_c6Krv.js";import{_ as p}from"./index-puIs3mTs.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=s(()=>a(e.content||"")),n={props:e,rendered:r,computed:s,get renderMarkdown(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),d("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=p(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-8ddENe/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E,b as w,r as b,I as m,J as y,U as a,R as g,c as i,K as u,V as h,F as C,Z as L,N as O,o as M,P as p,Q as S,S as R}from"./vendor-Bn1JzzAn.js";import{u as I,_ as N}from"./index-puIs3mTs.js";import{u as q}from"./useShellMode-CgR0wCYM.js";import{p as P}from"./parsers-YNLm7sQ0.js";import{u as z}from"./chat-B-6wzojE.js";import{aa as V,aq as j,R as B}from"./icons-DG5UD-6K.js";const A=E("skills",()=>{const _=b(!1),t=b([]),n=b(""),e=b("all"),k=w(()=>{const o=new Set(["all"]);return t.value.forEach(l=>{l.category&&o.add(l.category),l.executionMode&&o.add(l.executionMode)}),[...o]}),v=w(()=>{let o=t.value;if(e.value!=="all"&&(o=o.filter(l=>l.category===e.value||l.executionMode===e.value)),n.value){const l=n.value.toLowerCase();o=o.filter(d=>d.name?.toLowerCase().includes(l)||d.description?.toLowerCase().includes(l)||d.title?.toLowerCase().includes(l))}return o});async function f(){const o=I();_.value=!0;try{if(q().isEmbedded){const c=await o.sendRaw({type:"skill.list"},2e4);c?.ok&&Array.isArray(c.result?.skills)?t.value=c.result.skills:(console.error("skill.list custom topic failed:",c?.error),t.value=[]);return}const{output:l}=await o.execute("skill list",2e4),d=P(l);t.value=d}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:n,selectedCategory:e,categories:k,filteredSkills:v,loadSkills:f}}),F={__name:"Skills",setup(_,{expose:t}){t();const n=A(),e=z(),k=O(),v=w(()=>n.categories.filter(r=>r!=="all").slice(0,6));function f(r){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[r]||r}function o(r){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[r]||r||"未知"}function l(r){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[r]||"default"}async function d(r){await e.createSession("agent"),k.push("/chat"),setTimeout(()=>{e.currentSessionId&&e.sendMessage(e.currentSessionId,`/skill run ${r}`)},300)}M(()=>{n.allSkills.length||n.loadSkills()});const c={skillsStore:n,chatStore:e,router:k,displayCategories:v,catLabel:f,modeLabel:o,modeColor:l,runSkill:d,computed:w,onMounted:M,get useRouter(){return O},get ReloadOutlined(){return B},get PlayCircleOutlined(){return j},get AppstoreOutlined(){return V},get useSkillsStore(){return A},get useChatStore(){return z}};return Object.defineProperty(c,"__isScriptSetup",{enumerable:!1,value:!0}),c}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},U={class:"page-sub"},T={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},D={key:0,style:{"text-align":"center",padding:"60px"}},G={class:"skills-grid"},J={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},K={style:{flex:"1","min-width":"0"}},W={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Z={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},H={style:{"margin-left":"12px","flex-shrink":"0"}},X={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},Y={style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}};function $(_,t,n,e,k,v){const f=m("a-button"),o=m("a-input-search"),l=m("a-radio-button"),d=m("a-radio-group"),c=m("a-spin"),r=m("a-tag"),x=m("a-card");return p(),y("div",null,[a("div",Q,[a("div",null,[t[3]||(t[3]=a("h2",{class:"page-title"},"技能管理",-1)),a("p",U,g(e.skillsStore.allSkills.length)+" 个可用技能",1)]),i(f,{type:"primary",ghost:"",loading:e.skillsStore.loading,onClick:t[0]||(t[0]=s=>e.skillsStore.loadSkills())},{icon:u(()=>[i(e.ReloadOutlined)]),default:u(()=>[t[4]||(t[4]=S(" 刷新 ",-1))]),_:1},8,["loading"])]),h(" Search & Filter "),a("div",T,[i(o,{value:e.skillsStore.searchQuery,"onUpdate:value":t[1]||(t[1]=s=>e.skillsStore.searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),i(d,{value:e.skillsStore.selectedCategory,"onUpdate:value":t[2]||(t[2]=s=>e.skillsStore.selectedCategory=s),"button-style":"solid"},{default:u(()=>[i(l,{value:"all"},{default:u(()=>[...t[5]||(t[5]=[S("全部",-1)])]),_:1}),(p(!0),y(C,null,L(e.displayCategories,s=>(p(),R(l,{key:s,value:s},{default:u(()=>[S(g(e.catLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),h(" Loading State "),e.skillsStore.loading?(p(),y("div",D,[i(c,{size:"large"}),t[6]||(t[6]=a("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):e.skillsStore.filteredSkills.length?(p(),y(C,{key:1},[h(" Skills Grid "),a("div",G,[(p(!0),y(C,null,L(e.skillsStore.filteredSkills,s=>(p(),R(x,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:u(()=>[a("div",J,[a("div",K,[a("div",W,g(s.name),1),a("div",Z,g(s.description||"暂无描述"),1)]),a("div",H,[i(r,{color:e.modeColor(s.executionMode),style:{"font-size":"10px"}},{default:u(()=>[S(g(e.modeLabel(s.executionMode)),1)]),_:2},1032,["color"])])]),a("div",X,[i(f,{size:"small",type:"primary",ghost:"",onClick:ee=>e.runSkill(s.name)},{icon:u(()=>[i(e.PlayCircleOutlined)]),default:u(()=>[t[7]||(t[7]=S(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])],2112)):(p(),y(C,{key:2},[h(" Empty State "),a("div",Y,[i(e.AppstoreOutlined,{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),a("div",null,g(e.skillsStore.allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)])],2112))])}const ie=N(F,[["render",$],["__scopeId","data-v-d64d43f5"],["__file","/tmp/cc-web-panel-8ddENe/repo/packages/web-panel/src/views/Skills.vue"]]);export{ie as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-puIs3mTs.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-CH-n8haq.js";import{a0 as t}from"./index-puIs3mTs.js";import"./vendor-Bn1JzzAn.js";import"./index-Aaeca8o4.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-DbFc4sc7.js";import{a0 as t}from"./index-puIs3mTs.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-DIkGMHyT.js";import"./useFlexGapSupport-CD7j1zxt.js";import"./styleChecker-dEaKQcv2.js";import"./index-Aaeca8o4.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|