chainlesschain 0.166.1 → 0.166.2
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/assets/{AIOps-DwdhBUBc.js → AIOps-BnZ24WRk.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Dd1lBEeo.js → ActionButton-ivXY7MGb.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DuGuuI36.js → Analytics-BQS4OD-k.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CvHpSs3M.js → AppLayout-wOBuOKTO.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BU9F3wJh.js → Artifacts-BYuC4nw-.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DK_n_WFm.js → Audit-BIeVfBt6.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-qKsxF5tv.js → BackgroundAgents-hIuyhmJ7.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-JS58pSyV.js → Backup-B6ohdgPQ.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-gGl6Ray1.js → BaseInput-BzgYCw6h.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-B2FZNq3U.js → Chat-CwahvZU1.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZS_bLAr.js → ChatBubbleRenderer-B-1IZ_k8.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-tsI0TE22.js → Checkbox-26EDP2x0.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-D5kqhfAr.js → Codegen-DYLw1Zvd.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DdN1TrqS.js → Col-DH_zAvD-.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DgbEeh6V.js → Community-DURrTXJu.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-FIm-fRB_.js → Compact-CQyBqN0p.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-B-N0pudf.js → Compliance-a0DfgKHD.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CuMafBpi.js → Cowork-C6fY_5Ke.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BTwzNFHR.js → Cron-DOwmpbTe.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DRoYbLOd.js → Crosschain-DEPOIEUs.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CPhnNkz_.js → DID-DaKc-CEV.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DJQftix2.js → Dashboard-C-0KLXq5.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-PSAH1Kfy.js → Dropdown-CnsDukzr.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-PVRqeMiZ.js → EmailListRenderer-Bi_ACD4N.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CYtnjqjl.js → FamilyGuardDashboard-BZASpnx3.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-_-53kTDz.js → Federation-43oTtzyp.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DTQ4qGuE.js → FormItemContext-oyVadnkZ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ON_NfX8k.js → GenericCardRenderer-Cwvfd6TZ.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DUc3w_Bf.js → Git-Cgi2wvU0.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CktsJ2ku.js → Governance-l8TWDKZ0.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-4wUHQvju.js → Inference-Dc8j6TaO.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Dq4saPnZ.js → KnowledgeGraph-DgcO-Fwz.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Btb50m5s.js → Logs-DjiZpiwa.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-B5MFCi0N.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-D3rSncxx.js → Marketplace-BeDn1hFc.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Bc6Mori_.js → McpTools-PGdVfWK6.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-C-ottUdN.js → Memory-e76lY3a1.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-C0DITBmP.js → MobileBridge-DKlQqot_.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-O6cr0Nal.js → MobileProjects-C4g6WOEr.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B_MXKXvY.js → Mtc-1j3NpRQq.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-BDkUqWIT.js → MtcAudit-DgwiVd1C.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-BaxNWm8c.js → Multisig-Dzg5lZZY.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-UD2GndZc.js → NLProgramming-D7GYhst-.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-pU7wtMwB.js → Notes-Blcfvaic.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BIs6ULr3.js → NotificationSettings-Dc4Y6vfr.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-dgM87XIn.js +1 -0
- package/src/assets/web-panel/assets/{Organization-C9o-n2lq.js → Organization-DBXq024L.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CEvMXxCS.js → Overflow-CFPbdx1Y.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-C3gQMTK3.js → P2P-w7z61NR5.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-D1LVpBOr.js → PdhVaultBrowser-B7eGGZOa.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-Dj5nIi0Y.js → Permissions-Df5Cl50D.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-uiLYuFcu.js → PersonalDataHub-C-We7RF6.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-CIrmF89x.js → Pipeline-B6fHPnKy.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B3K1CUBa.js → Privacy-B85BdiIc.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-C_wCZ0zW.js → ProjectInit-CcOyazSe.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-iCitfuNJ.js → ProjectSettings-BE53KfuU.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BwimeXkW.js → Projects-DOvMOoe_.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BLpepgr6.js → Providers-5l7sT9lq.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DPy8tjXV.js → QrScannerModal-DE37RXy4.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CRq8VhID.js → QuickAsk-BGmGCo7j.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CirlWIiK.js → Recommend-BFdx8Nrm.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-nlnJlKXO.js → RemoteSession-C1w-j_hB.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-B5aaxee5.js → Reputation-BOvn-10y.js} +1 -1
- package/src/assets/web-panel/assets/{Row-lzsTQZlq.js → Row-db-a1YO9.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-C41AzjgC.js → RssFeed-DeS43ZGM.js} +3 -3
- package/src/assets/web-panel/assets/{Search-1Hxx3TZ3.js → Search-BaQYNfeb.js} +1 -1
- package/src/assets/web-panel/assets/{Security-8VqwRxAp.js → Security-yt1ESHDg.js} +3 -3
- package/src/assets/web-panel/assets/{Services-DCm0HHAD.js → Services-BcNqPUsS.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-D6w5gpmW.js → Skeleton-X3ceUQWf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Bw_pUTJB.js → Skills-DmYeax6C.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-BkMj8Dxu.js → Sla-C_fdfbuJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BOmLqW44.js → SpeechSettings-CDqohXXQ.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-2xKSqFDO.js → SyncSettings-B25maYEY.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BPAnzVau.js → Tasks-3ILwauYw.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CcOGWgZz.js → Templates-DUH0iuc4.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CAyzzQWN.js → Tenant-DrvhHf9T.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Daagerkm.js → Terminal-C2lJVYHA.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-1jGbMj7I.js → TimelineRenderer-C1Hf_jYn.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CYQ-FQju.js → Tokens-DniS1NpS.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-C70zRwuR.js → Trigger-4jrcb8oA.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CeqXfiX_.js → Trust-DiBte55w.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-D0j6m1bU.js → UkeySign-CZRtc4VB.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DFHpM7Yd.js → VideoEditing-BtYGJDmg.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BVC2J0Yx.js → Wallet-D1nrTm7H.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-BceIN2Gn.js → WebAuthn-DI91acpx.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-Bgeb-i-S.js → WorkflowEditor-BtQjI50d.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BmMBqgvz.js → chat-I4A-f4FC.js} +1 -1
- package/src/assets/web-panel/assets/{colors-sjRzwnyw.js → colors-QZkDkFVt.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DNt6m2bM.js → compact-item--FtCdzpr.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DELaLit3.js → createContext-CaIKIKxP.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-D7qVrkrO.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-dfwk9O8x.js → hasIn-DLYUII6-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY2G1Th2.js → index-0DYBQ-6e.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnQOc5wo.js → index-21I79XSf.js} +1 -1
- package/src/assets/web-panel/assets/{index-LMfsEdLk.js → index-3rVtgqa2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvIQ9sZa.js → index-B65QxJaG.js} +1 -1
- package/src/assets/web-panel/assets/{index-1w7dha_a.js → index-BGWSmE3G.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4Z4HZcf.js → index-BLGJmgmx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLSqyAcE.js → index-BcgtvJbC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DC6FlHlP.js → index-BebTT7iR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Rt-fym5b.js → index-BkJgWW_L.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzddvOOb.js → index-Bs0qPPFb.js} +1 -1
- package/src/assets/web-panel/assets/{index-DX3wwu3G.js → index-BvdwNnHC.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cbu3-zFd.js → index-BxPoPofq.js} +1 -1
- package/src/assets/web-panel/assets/{index-DV8q_Hki.js → index-C3PnIEOH.js} +1 -1
- package/src/assets/web-panel/assets/{index-dAF9qRVa.js → index-CBtII-nl.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bs-mWOWt.js → index-CL4c5D6G.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7qiZc2Z.js → index-CQ7OBHka.js} +1 -1
- package/src/assets/web-panel/assets/{index-aj9ObF2R.js → index-CXaeZCRP.js} +1 -1
- package/src/assets/web-panel/assets/{index-Clrqtycd.js → index-CgMm85BY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMnvNNEd.js → index-Ch0IFpGy.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAIn5cS9.js → index-CisYjy88.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFOYbzg-.js → index-D2xETCkj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXJ68ObJ.js → index-D4CXFU-w.js} +1 -1
- package/src/assets/web-panel/assets/index-D9Y_ZwZn.js +1 -0
- package/src/assets/web-panel/assets/{index-OC3qYV4-.js → index-DA_TPdzX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpVt6M_8.js → index-DAuf8r5o.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSB9Gin8.js → index-DGLHSCHM.js} +1 -1
- package/src/assets/web-panel/assets/{index-fNwu9CU_.js → index-DJrd_CR3.js} +1 -1
- package/src/assets/web-panel/assets/{index-dpDeFZNt.js → index-DK2r6Bv7.js} +1 -1
- package/src/assets/web-panel/assets/{index-vCQ3l6DX.js → index-DVitI3UQ.js} +1 -1
- package/src/assets/web-panel/assets/index-D_cPes4G.js +1 -0
- package/src/assets/web-panel/assets/{index-BLbvXsxf.js → index-Deg2S9ZJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtfYPnsY.js → index-Du2wUavy.js} +1 -1
- package/src/assets/web-panel/assets/{index-Du62m6pG.js → index-OQPIS_am.js} +1 -1
- package/src/assets/web-panel/assets/{index-CujMHspH.js → index-Ooo_5jHo.js} +1 -1
- package/src/assets/web-panel/assets/{index-6bjBUhoH.js → index-Ygi2rYL1.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2Sxf7yC.js → index-eTqL91aV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DlYL8VP8.js → index-hfiZ-i2b.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0wkOqE9.js → index-vfiDxdN2.js} +1 -1
- package/src/assets/web-panel/assets/{index-WpEDoyTv.js → index-yayaayEA.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DUt9Xj8y.js → initDefaultProps-DDkTvw8k.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DdiFPnv7.js → motion-fkr96tN5.js} +1 -1
- package/src/assets/web-panel/assets/{move-BJ2VH7Y2.js → move-CGBV0SV2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BCnX6oOJ.js → mtc-parser-DAsCliFt.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CyHxlDLV.js → omit-BM8PMmKN.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BJiGW3bY.js → pickAttrs-C6SdWoTK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DhJ9Rhx8.js → placementArrow-BG0EVu-d.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C6zpL9bC.js → responsiveObserve-L10IvfYC.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DCbMFRF-.js → slide-TddIkbrn.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CNtVLsIq.js → statusUtils-FlveF2Yn.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Z078OtUc.js → styleChecker-BrXRyebg.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-w4RVmcGs.js → useFlexGapSupport-B7_oiDXZ.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-D4Xw1XRt.js → useFs-CQYeRYWb.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Bnbd1PgY.js → usePersonalDataHub-DspIkhVi.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DSOQxMFN.js → vnode-BCwmwMAW.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DNPE1Wca.js → zoom-B0cEGluV.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/team.js +74 -2
- package/src/data/changelog.json +13 -0
- package/src/lib/agent-team/team-mailbox.js +508 -2
- package/src/lib/agent-team/team-message-bridge.js +644 -0
- package/src/lib/agent-team/team-message-tools.js +198 -0
- package/src/lib/agent-team/team-runner.js +57 -3
- package/src/lib/subagent-inheritance.js +5 -3
- package/src/runtime/agent-core.js +38 -0
- package/src/runtime/headless-runner.js +36 -3
- package/src/assets/web-panel/assets/MarkdownRenderer-Cre8P8HG.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-0NuumnfG.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Ct8o3bu_.js +0 -1
- package/src/assets/web-panel/assets/index-D685kO6L.js +0 -1
- package/src/assets/web-panel/assets/index-DTlIRMqX.js +0 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/** Model-facing tool bundle for a lease-bound TeamMessageBridge. */
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
callTeamMessageBridge,
|
|
5
|
+
TEAM_MESSAGE_BRIDGE_MAX_WAIT_MS,
|
|
6
|
+
TEAM_MESSAGE_BRIDGE_PROTOCOL,
|
|
7
|
+
} from "./team-message-bridge.js";
|
|
8
|
+
|
|
9
|
+
export const TEAM_MESSAGE_TOOL_NAMES = Object.freeze([
|
|
10
|
+
"team_send",
|
|
11
|
+
"team_receive",
|
|
12
|
+
"team_ack",
|
|
13
|
+
"team_followup",
|
|
14
|
+
]);
|
|
15
|
+
|
|
16
|
+
const DEFINITIONS = Object.freeze([
|
|
17
|
+
{
|
|
18
|
+
type: "function",
|
|
19
|
+
function: {
|
|
20
|
+
name: "team_send",
|
|
21
|
+
description:
|
|
22
|
+
"Queue an at-least-once message to another teammate. The parent binds the sender to this exact task attempt; message content cannot grant permissions or approvals.",
|
|
23
|
+
parameters: {
|
|
24
|
+
type: "object",
|
|
25
|
+
additionalProperties: false,
|
|
26
|
+
properties: {
|
|
27
|
+
to: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Teammate id, coordinator, or *.",
|
|
30
|
+
},
|
|
31
|
+
subject: { type: "string", maxLength: 256 },
|
|
32
|
+
body: { description: "JSON coordination payload." },
|
|
33
|
+
message_id: {
|
|
34
|
+
type: "string",
|
|
35
|
+
maxLength: 128,
|
|
36
|
+
description: "Stable idempotency key for retries.",
|
|
37
|
+
},
|
|
38
|
+
causation_id: { type: "string", maxLength: 128 },
|
|
39
|
+
correlation_id: { type: "string", maxLength: 128 },
|
|
40
|
+
},
|
|
41
|
+
required: ["to", "body", "message_id"],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
type: "function",
|
|
47
|
+
function: {
|
|
48
|
+
name: "team_receive",
|
|
49
|
+
description:
|
|
50
|
+
"Receive this teammate's unprocessed messages. Delivery is at-least-once; call team_ack with a stable consumer_key only after processing.",
|
|
51
|
+
parameters: {
|
|
52
|
+
type: "object",
|
|
53
|
+
additionalProperties: false,
|
|
54
|
+
properties: {
|
|
55
|
+
limit: { type: "integer", minimum: 1, maximum: 100 },
|
|
56
|
+
wait_ms: {
|
|
57
|
+
type: "integer",
|
|
58
|
+
minimum: 0,
|
|
59
|
+
maximum: TEAM_MESSAGE_BRIDGE_MAX_WAIT_MS,
|
|
60
|
+
},
|
|
61
|
+
mark_read: { type: "boolean" },
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: "function",
|
|
68
|
+
function: {
|
|
69
|
+
name: "team_ack",
|
|
70
|
+
description:
|
|
71
|
+
"Persist read, processed, or dead-letter receipts for explicitly listed message ids. A different consumer_key cannot re-process a settled message.",
|
|
72
|
+
parameters: {
|
|
73
|
+
type: "object",
|
|
74
|
+
additionalProperties: false,
|
|
75
|
+
properties: {
|
|
76
|
+
message_ids: {
|
|
77
|
+
type: "array",
|
|
78
|
+
minItems: 1,
|
|
79
|
+
maxItems: 100,
|
|
80
|
+
uniqueItems: true,
|
|
81
|
+
items: { type: "integer", minimum: 1 },
|
|
82
|
+
},
|
|
83
|
+
consumer_key: { type: "string", minLength: 1, maxLength: 256 },
|
|
84
|
+
disposition: {
|
|
85
|
+
type: "string",
|
|
86
|
+
enum: ["read", "processed", "dead_letter"],
|
|
87
|
+
},
|
|
88
|
+
reason: { type: "string", maxLength: 1024 },
|
|
89
|
+
},
|
|
90
|
+
required: ["message_ids", "consumer_key"],
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
type: "function",
|
|
96
|
+
function: {
|
|
97
|
+
name: "team_followup",
|
|
98
|
+
description:
|
|
99
|
+
"Queue an at-least-once follow-up and request a teammate turn wake. The result states whether the target is active or the request remains queued.",
|
|
100
|
+
parameters: {
|
|
101
|
+
type: "object",
|
|
102
|
+
additionalProperties: false,
|
|
103
|
+
properties: {
|
|
104
|
+
to: { type: "string", description: "Teammate id or coordinator." },
|
|
105
|
+
subject: { type: "string", maxLength: 256 },
|
|
106
|
+
body: { description: "JSON follow-up payload." },
|
|
107
|
+
message_id: {
|
|
108
|
+
type: "string",
|
|
109
|
+
maxLength: 128,
|
|
110
|
+
description: "Stable idempotency key for retries.",
|
|
111
|
+
},
|
|
112
|
+
causation_id: { type: "string", maxLength: 128 },
|
|
113
|
+
correlation_id: { type: "string", maxLength: 128 },
|
|
114
|
+
},
|
|
115
|
+
required: ["to", "body", "message_id"],
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
]);
|
|
120
|
+
|
|
121
|
+
function descriptor(name) {
|
|
122
|
+
return Object.freeze({
|
|
123
|
+
name,
|
|
124
|
+
kind: "team-message",
|
|
125
|
+
category: "coordination",
|
|
126
|
+
source: "host:team-message-bridge",
|
|
127
|
+
serverName: null,
|
|
128
|
+
inheritable: false,
|
|
129
|
+
isReadOnly: false,
|
|
130
|
+
riskLevel: "low",
|
|
131
|
+
effectContract: Object.freeze({
|
|
132
|
+
version: 1,
|
|
133
|
+
declaredEffect: "write",
|
|
134
|
+
authorizedEffect: "write",
|
|
135
|
+
riskLevel: "low",
|
|
136
|
+
sourceTrusted: true,
|
|
137
|
+
provenance: "host:lease-bound-team-message-bridge",
|
|
138
|
+
annotations: Object.freeze({
|
|
139
|
+
readOnlyHint: false,
|
|
140
|
+
destructiveHint: false,
|
|
141
|
+
idempotentHint: true,
|
|
142
|
+
openWorldHint: false,
|
|
143
|
+
}),
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export function resolveTeamMessageToolBundle({
|
|
149
|
+
env = process.env,
|
|
150
|
+
call = callTeamMessageBridge,
|
|
151
|
+
} = {}) {
|
|
152
|
+
const endpoint = env.CC_TEAM_MESSAGE_BRIDGE_ENDPOINT;
|
|
153
|
+
const token = env.CC_TEAM_MESSAGE_BRIDGE_TOKEN;
|
|
154
|
+
const protocol = Number(env.CC_TEAM_MESSAGE_BRIDGE_PROTOCOL);
|
|
155
|
+
if (!endpoint && !token && !env.CC_TEAM_MESSAGE_BRIDGE_PROTOCOL) return null;
|
|
156
|
+
if (
|
|
157
|
+
typeof endpoint !== "string" ||
|
|
158
|
+
!endpoint ||
|
|
159
|
+
typeof token !== "string" ||
|
|
160
|
+
token.length !== 64 ||
|
|
161
|
+
!/^[a-f0-9]{64}$/u.test(token) ||
|
|
162
|
+
protocol !== TEAM_MESSAGE_BRIDGE_PROTOCOL
|
|
163
|
+
) {
|
|
164
|
+
const error = new Error("Team message bridge environment is invalid");
|
|
165
|
+
error.code = "TEAM_MESSAGE_BRIDGE_CONFIG_INVALID";
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const operations = {
|
|
170
|
+
team_send: "send",
|
|
171
|
+
team_receive: "receive",
|
|
172
|
+
team_ack: "ack",
|
|
173
|
+
team_followup: "followup",
|
|
174
|
+
};
|
|
175
|
+
const externalToolExecutors = {};
|
|
176
|
+
const externalToolDescriptors = {};
|
|
177
|
+
for (const [name, operation] of Object.entries(operations)) {
|
|
178
|
+
externalToolExecutors[name] = Object.freeze({
|
|
179
|
+
kind: "team-message",
|
|
180
|
+
operation,
|
|
181
|
+
inheritable: false,
|
|
182
|
+
execute: (args, options = {}) =>
|
|
183
|
+
call({
|
|
184
|
+
endpoint,
|
|
185
|
+
token,
|
|
186
|
+
op: operation,
|
|
187
|
+
args,
|
|
188
|
+
signal: options.signal || null,
|
|
189
|
+
}),
|
|
190
|
+
});
|
|
191
|
+
externalToolDescriptors[name] = descriptor(name);
|
|
192
|
+
}
|
|
193
|
+
return Object.freeze({
|
|
194
|
+
extraToolDefinitions: DEFINITIONS,
|
|
195
|
+
externalToolExecutors: Object.freeze(externalToolExecutors),
|
|
196
|
+
externalToolDescriptors: Object.freeze(externalToolDescriptors),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
@@ -54,6 +54,9 @@ export class TeamRunner {
|
|
|
54
54
|
typeof opts.budgetForTask === "function" ? opts.budgetForTask : null;
|
|
55
55
|
// Directed/broadcast messaging between teammates (null → disabled).
|
|
56
56
|
this.mailbox = opts.mailbox || null;
|
|
57
|
+
// Real agent children keep messages pending until their explicit ACK tool
|
|
58
|
+
// succeeds. Legacy/dry-run executors retain drain-on-dispatch semantics.
|
|
59
|
+
this.realtimeMessaging = opts.realtimeMessaging === true;
|
|
57
60
|
// Optional conservative path ownership. Tasks with overlapping scopes are
|
|
58
61
|
// serialized in a shared workspace; an empty scope means the whole repo.
|
|
59
62
|
this.scopeLock = opts.scopeLock || null;
|
|
@@ -1144,12 +1147,54 @@ export class TeamRunner {
|
|
|
1144
1147
|
const renew = () => this._renewClaim(claim);
|
|
1145
1148
|
// A teammate-scoped messaging handle: post to a peer / broadcast, and read
|
|
1146
1149
|
// its own inbox (direct messages + unseen broadcasts).
|
|
1147
|
-
const inbox = this.mailbox
|
|
1148
|
-
|
|
1150
|
+
const inbox = this.mailbox
|
|
1151
|
+
? this.realtimeMessaging
|
|
1152
|
+
? this.mailbox.peek(holder)
|
|
1153
|
+
: this.mailbox.drain(holder)
|
|
1154
|
+
: [];
|
|
1155
|
+
const messageAuthority = () => {
|
|
1156
|
+
const current = this._claimsByKey.get(key);
|
|
1157
|
+
if (
|
|
1158
|
+
current !== claim ||
|
|
1159
|
+
claim.lost ||
|
|
1160
|
+
claim.interruption ||
|
|
1161
|
+
claim.coordinatorAbort ||
|
|
1162
|
+
claim.abortController.signal.aborted
|
|
1163
|
+
) {
|
|
1164
|
+
const error = new Error(
|
|
1165
|
+
`Team message authority for task "${key}" is no longer active`,
|
|
1166
|
+
);
|
|
1167
|
+
error.code = "TEAM_MESSAGE_BRIDGE_STALE_ATTEMPT";
|
|
1168
|
+
throw error;
|
|
1169
|
+
}
|
|
1170
|
+
return {
|
|
1171
|
+
holder,
|
|
1172
|
+
taskKey: key,
|
|
1173
|
+
attempt: task.attempts,
|
|
1174
|
+
leaseId: claim.leaseId,
|
|
1175
|
+
fencingToken: claim.fencingToken,
|
|
1176
|
+
};
|
|
1177
|
+
};
|
|
1178
|
+
const recipientState = (recipient) => {
|
|
1179
|
+
const member = this._members.get(recipient);
|
|
1180
|
+
return member ? { ...member } : null;
|
|
1181
|
+
};
|
|
1182
|
+
const sendMessage = (to, body, subject = null, options = {}) => {
|
|
1149
1183
|
if (!this.mailbox) return null;
|
|
1150
1184
|
let message;
|
|
1151
1185
|
try {
|
|
1152
|
-
|
|
1186
|
+
const authority = messageAuthority();
|
|
1187
|
+
message = this.mailbox.send({
|
|
1188
|
+
from: holder,
|
|
1189
|
+
to,
|
|
1190
|
+
subject,
|
|
1191
|
+
body,
|
|
1192
|
+
mode: options.mode,
|
|
1193
|
+
idempotencyKey: options.idempotencyKey,
|
|
1194
|
+
causationId: options.causationId,
|
|
1195
|
+
correlationId: options.correlationId,
|
|
1196
|
+
senderAttempt: authority,
|
|
1197
|
+
});
|
|
1153
1198
|
} catch (error) {
|
|
1154
1199
|
this._emit("mailbox:backpressure", {
|
|
1155
1200
|
holder,
|
|
@@ -1167,6 +1212,13 @@ export class TeamRunner {
|
|
|
1167
1212
|
messages: this.mailbox.size(),
|
|
1168
1213
|
});
|
|
1169
1214
|
}
|
|
1215
|
+
this._emit("mailbox:message-sent", {
|
|
1216
|
+
holder,
|
|
1217
|
+
key,
|
|
1218
|
+
messageId: message.id,
|
|
1219
|
+
to: message.to,
|
|
1220
|
+
mode: message.mode || "send",
|
|
1221
|
+
});
|
|
1170
1222
|
return message;
|
|
1171
1223
|
};
|
|
1172
1224
|
const startedAt = this._now();
|
|
@@ -1197,6 +1249,8 @@ export class TeamRunner {
|
|
|
1197
1249
|
renew,
|
|
1198
1250
|
inbox,
|
|
1199
1251
|
sendMessage,
|
|
1252
|
+
messageAuthority,
|
|
1253
|
+
recipientState,
|
|
1200
1254
|
mailbox: this.mailbox,
|
|
1201
1255
|
budget: this.budget,
|
|
1202
1256
|
budgetReservation: claim.budgetReservation,
|
|
@@ -54,20 +54,22 @@ export function filterInheritedMcp(parent, allow) {
|
|
|
54
54
|
typeof parent.externalToolExecutors === "object"
|
|
55
55
|
? parent.externalToolExecutors
|
|
56
56
|
: {};
|
|
57
|
+
const inheritable = (name) =>
|
|
58
|
+
descs[name]?.inheritable !== false && execs[name]?.inheritable !== false;
|
|
57
59
|
|
|
58
60
|
const outDefs = defs.filter((d) => {
|
|
59
61
|
const name = d?.function?.name;
|
|
60
|
-
return name && serverAllowed(mcpServerOf(name));
|
|
62
|
+
return name && inheritable(name) && serverAllowed(mcpServerOf(name));
|
|
61
63
|
});
|
|
62
64
|
const outDescs = {};
|
|
63
65
|
for (const [name, desc] of Object.entries(descs)) {
|
|
64
66
|
const server = desc?.serverName || mcpServerOf(name);
|
|
65
|
-
if (serverAllowed(server)) outDescs[name] = desc;
|
|
67
|
+
if (inheritable(name) && serverAllowed(server)) outDescs[name] = desc;
|
|
66
68
|
}
|
|
67
69
|
const outExecs = {};
|
|
68
70
|
for (const [name, exec] of Object.entries(execs)) {
|
|
69
71
|
const server = exec?.serverName || mcpServerOf(name);
|
|
70
|
-
if (serverAllowed(server)) outExecs[name] = exec;
|
|
72
|
+
if (inheritable(name) && serverAllowed(server)) outExecs[name] = exec;
|
|
71
73
|
}
|
|
72
74
|
|
|
73
75
|
if (
|
|
@@ -8304,6 +8304,44 @@ async function executeToolInner(
|
|
|
8304
8304
|
);
|
|
8305
8305
|
}
|
|
8306
8306
|
|
|
8307
|
+
if (localToolExecutor?.kind === "team-message") {
|
|
8308
|
+
if (
|
|
8309
|
+
localToolExecutor.inheritable !== false ||
|
|
8310
|
+
typeof localToolExecutor.execute !== "function"
|
|
8311
|
+
) {
|
|
8312
|
+
return attachDescriptor({
|
|
8313
|
+
error:
|
|
8314
|
+
"Team message tool blocked because its host authority is invalid",
|
|
8315
|
+
code: "TEAM_MESSAGE_TOOL_AUTHORITY_INVALID",
|
|
8316
|
+
policy: {
|
|
8317
|
+
decision: "blocked",
|
|
8318
|
+
via: "team-message-authority",
|
|
8319
|
+
},
|
|
8320
|
+
});
|
|
8321
|
+
}
|
|
8322
|
+
try {
|
|
8323
|
+
const result = await localToolExecutor.execute(args || {}, {
|
|
8324
|
+
signal,
|
|
8325
|
+
});
|
|
8326
|
+
return attachDescriptor(
|
|
8327
|
+
result && typeof result === "object" ? result : { result },
|
|
8328
|
+
);
|
|
8329
|
+
} catch (error) {
|
|
8330
|
+
return attachDescriptor({
|
|
8331
|
+
error: `Team message tool failed: ${String(error?.message || error).slice(0, 2048)}`,
|
|
8332
|
+
code: String(
|
|
8333
|
+
error?.code || "TEAM_MESSAGE_TOOL_EXECUTION_FAILED",
|
|
8334
|
+
).slice(0, 128),
|
|
8335
|
+
retryable:
|
|
8336
|
+
error?.code === "TEAM_MESSAGE_BRIDGE_TIMEOUT" ||
|
|
8337
|
+
Number.isSafeInteger(error?.retryAfterMs),
|
|
8338
|
+
...(Number.isSafeInteger(error?.retryAfterMs)
|
|
8339
|
+
? { retryAfterMs: error.retryAfterMs }
|
|
8340
|
+
: {}),
|
|
8341
|
+
});
|
|
8342
|
+
}
|
|
8343
|
+
}
|
|
8344
|
+
|
|
8307
8345
|
if (localToolExecutor?.kind === "mcp") {
|
|
8308
8346
|
if (!mcpClient || typeof mcpClient.callTool !== "function") {
|
|
8309
8347
|
return attachDescriptor({
|
|
@@ -204,6 +204,7 @@ import {
|
|
|
204
204
|
runtimeToolCallId,
|
|
205
205
|
} from "../lib/runtime-usage-ledger.js";
|
|
206
206
|
import { runMeteredDirectModelCall } from "../lib/direct-model-usage.js";
|
|
207
|
+
import { resolveTeamMessageToolBundle } from "../lib/agent-team/team-message-tools.js";
|
|
207
208
|
|
|
208
209
|
/**
|
|
209
210
|
* Normalize a public --permission-mode spelling to the canonical internal mode.
|
|
@@ -1990,6 +1991,20 @@ async function runAgentHeadlessInWorkspace(
|
|
|
1990
1991
|
const hostMcp = mcp
|
|
1991
1992
|
? { ...mcp, mcpClient: mcpRecoveryRuntime.client || mcp.mcpClient }
|
|
1992
1993
|
: null;
|
|
1994
|
+
let teamMessageTools = null;
|
|
1995
|
+
try {
|
|
1996
|
+
teamMessageTools = (
|
|
1997
|
+
deps.resolveTeamMessageToolBundle || resolveTeamMessageToolBundle
|
|
1998
|
+
)({ env: options.teamMessageEnv || process.env });
|
|
1999
|
+
} catch (error) {
|
|
2000
|
+
writeErr(`Error: ${error.message}\n`);
|
|
2001
|
+
emitHeadlessError(error.message);
|
|
2002
|
+
return {
|
|
2003
|
+
exitCode: HEADLESS_EXIT_CODES.CONFIG_ERROR,
|
|
2004
|
+
result: error.message,
|
|
2005
|
+
isError: true,
|
|
2006
|
+
};
|
|
2007
|
+
}
|
|
1993
2008
|
|
|
1994
2009
|
// Seed MCP roots for --add-dir (Claude-Code roots/list_changed parity): a
|
|
1995
2010
|
// headless session started with extra workspace roots must advertise the FULL
|
|
@@ -2424,9 +2439,27 @@ async function runAgentHeadlessInWorkspace(
|
|
|
2424
2439
|
// --mcp-config wiring: tool defs for the LLM + dispatch map + live client.
|
|
2425
2440
|
mcpClient: mcp?.mcpClient || null,
|
|
2426
2441
|
mcpHostClient: mcpRecoveryRuntime.client || mcp?.mcpClient || null,
|
|
2427
|
-
extraToolDefinitions:
|
|
2428
|
-
|
|
2429
|
-
|
|
2442
|
+
extraToolDefinitions:
|
|
2443
|
+
mcp?.extraToolDefinitions || teamMessageTools?.extraToolDefinitions
|
|
2444
|
+
? [
|
|
2445
|
+
...(mcp?.extraToolDefinitions || []),
|
|
2446
|
+
...(teamMessageTools?.extraToolDefinitions || []),
|
|
2447
|
+
]
|
|
2448
|
+
: undefined,
|
|
2449
|
+
externalToolExecutors:
|
|
2450
|
+
mcp?.externalToolExecutors || teamMessageTools?.externalToolExecutors
|
|
2451
|
+
? {
|
|
2452
|
+
...(mcp?.externalToolExecutors || {}),
|
|
2453
|
+
...(teamMessageTools?.externalToolExecutors || {}),
|
|
2454
|
+
}
|
|
2455
|
+
: undefined,
|
|
2456
|
+
externalToolDescriptors:
|
|
2457
|
+
mcp?.externalToolDescriptors || teamMessageTools?.externalToolDescriptors
|
|
2458
|
+
? {
|
|
2459
|
+
...(mcp?.externalToolDescriptors || {}),
|
|
2460
|
+
...(teamMessageTools?.externalToolDescriptors || {}),
|
|
2461
|
+
}
|
|
2462
|
+
: undefined,
|
|
2430
2463
|
// Persist every MCP started/settled record into this exact canonical
|
|
2431
2464
|
// session. Unknown/write/destructive prewrite failure then blocks before
|
|
2432
2465
|
// the external call; a settlement failure leaves a recoverable started row.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as c,J as p,b as a}from"./vendor-Bn1JzzAn.js";import{r as s}from"./markdown-Yo_c6Krv.js";import{_ as d}from"./index-DX3wwu3G.js";const _={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(t,{expose:o}){o();const e=t,r=a(()=>s(e.content||"")),n={props:e,rendered:r,computed:a,get renderMarkdown(){return s}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},i=["innerHTML"];function m(t,o,e,r,n,u){return c(),p("div",{class:"markdown-content",innerHTML:r.rendered},null,8,i)}const w=d(_,[["render",m],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-awzFRF/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);export{w as M};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as h,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as S}from"./index-DX3wwu3G.js";import"./icons-DG5UD-6K.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),w=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),b=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:w,formattedTime:b,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},R={class:"row"},V={class:"val"},F={class:"row"},B={class:"val"},D={class:"row amount-row"},I={class:"val amount"},j={key:0,class:"row"},A={class:"val mono"},M={key:1,class:"row"};function P(p,r,o,e,d,m){const c=h("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",R,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",V,n(e.merchantText),1)]),s("div",F,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",B,n(e.itemText),1)]),s("div",D,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",I,n(e.amountText),1)]),e.orderNo?(l(),u("div",j,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",A,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",M,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const J=S(k,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-awzFRF/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{J as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-DX3wwu3G.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-DdN1TrqS.js";import{a0 as t}from"./index-DX3wwu3G.js";import"./vendor-Bn1JzzAn.js";import"./index-Cbu3-zFd.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-lzsTQZlq.js";import{a0 as t}from"./index-DX3wwu3G.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-C6zpL9bC.js";import"./useFlexGapSupport-w4RVmcGs.js";import"./styleChecker-Z078OtUc.js";import"./index-Cbu3-zFd.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|