chainlesschain 0.166.1 → 0.166.3

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.
Files changed (174) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-DwdhBUBc.js → AIOps-DZTvbk_H.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-Dd1lBEeo.js → ActionButton-IaEVUN3o.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DuGuuI36.js → Analytics-CCQab0gl.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-CvHpSs3M.js → AppLayout-Bs_0GVpx.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-BU9F3wJh.js → Artifacts-Bm83-yJv.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-DK_n_WFm.js → Audit-Bah1XDR5.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-qKsxF5tv.js → BackgroundAgents-BPZA0B5d.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-JS58pSyV.js → Backup-BMydWFiM.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-gGl6Ray1.js → BaseInput-lhopFSZz.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-B2FZNq3U.js → Chat-Bbbs5BP1.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZS_bLAr.js → ChatBubbleRenderer-BIAfOKCj.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-tsI0TE22.js → Checkbox-CLEMA9J4.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-D5kqhfAr.js → Codegen-deCSwmnK.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DdN1TrqS.js → Col-CH-n8haq.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-DgbEeh6V.js → Community-DJuAl6dw.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-FIm-fRB_.js → Compact-BMyLBmgs.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-B-N0pudf.js → Compliance-BK75Ss93.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-CuMafBpi.js → Cowork-5XbJwKYq.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-BTwzNFHR.js → Cron-Ezgir7IZ.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-DRoYbLOd.js → Crosschain-CKuMoYA7.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-CPhnNkz_.js → DID-CxS244cH.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-DJQftix2.js → Dashboard-wrUKrsJy.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-PSAH1Kfy.js → Dropdown-A6I91Z2J.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-PVRqeMiZ.js → EmailListRenderer-BofaiRYY.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CYtnjqjl.js → FamilyGuardDashboard-D3eeNA64.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-_-53kTDz.js → Federation-DzK-3AjS.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-DTQ4qGuE.js → FormItemContext-Dm6mYA8b.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-ON_NfX8k.js → GenericCardRenderer-BeWL-Q1b.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-DUc3w_Bf.js → Git-CtGCxg9p.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-CktsJ2ku.js → Governance-DZvFB46G.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-4wUHQvju.js → Inference-ntqp4cmw.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-Dq4saPnZ.js → KnowledgeGraph-CrLYbqLe.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-Btb50m5s.js → Logs-CKA1PRhC.js} +2 -2
  35. package/src/assets/web-panel/assets/MarkdownRenderer-DtwoKxDJ.js +1 -0
  36. package/src/assets/web-panel/assets/{Marketplace-D3rSncxx.js → Marketplace-B8aPsXYv.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-Bc6Mori_.js → McpTools-DQOgNdGS.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-C-ottUdN.js → Memory-i9IK9B0M.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-C0DITBmP.js → MobileBridge-BynYvpv9.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-O6cr0Nal.js → MobileProjects-DixivGuQ.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-B_MXKXvY.js → Mtc-OWPvWVNr.js} +4 -4
  42. package/src/assets/web-panel/assets/{MtcAudit-BDkUqWIT.js → MtcAudit-Cqpg5C4A.js} +5 -5
  43. package/src/assets/web-panel/assets/{Multisig-BaxNWm8c.js → Multisig-CT5kMJIZ.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-UD2GndZc.js → NLProgramming-BXD0Dz0h.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-pU7wtMwB.js → Notes-T1w5p8N5.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-BIs6ULr3.js → NotificationSettings-DFCThpKJ.js} +1 -1
  47. package/src/assets/web-panel/assets/OrderTableRenderer-BJOuM0Kl.js +1 -0
  48. package/src/assets/web-panel/assets/{Organization-C9o-n2lq.js → Organization-CSFcw86q.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-CEvMXxCS.js → Overflow-BxVMuLTk.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-C3gQMTK3.js → P2P-B8qxY_yX.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-D1LVpBOr.js → PdhVaultBrowser-Bcq27Exy.js} +3 -3
  52. package/src/assets/web-panel/assets/{Permissions-Dj5nIi0Y.js → Permissions-CGBvJVXP.js} +3 -3
  53. package/src/assets/web-panel/assets/{PersonalDataHub-uiLYuFcu.js → PersonalDataHub-DM9IEeJ3.js} +6 -6
  54. package/src/assets/web-panel/assets/{Pipeline-CIrmF89x.js → Pipeline-wEskx2-p.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-B3K1CUBa.js → Privacy-DIA02lLJ.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-C_wCZ0zW.js → ProjectInit-uMXlNLHV.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-iCitfuNJ.js → ProjectSettings-Sy3NOtt7.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-BwimeXkW.js → Projects-xFjfOkQM.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-BLpepgr6.js → Providers-CNyOpbg8.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-DPy8tjXV.js → QrScannerModal-Dk1UVRwI.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CRq8VhID.js → QuickAsk-B-UqLoLG.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-CirlWIiK.js → Recommend-CiTBVZvN.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-nlnJlKXO.js → RemoteSession-BhABd516.js} +3 -3
  64. package/src/assets/web-panel/assets/{Reputation-B5aaxee5.js → Reputation-Dq1xTCcN.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-lzsTQZlq.js → Row-DbFc4sc7.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-C41AzjgC.js → RssFeed-D7IBkkLm.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-1Hxx3TZ3.js → Search-BVyMlGoa.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-8VqwRxAp.js → Security-BzMm9Be_.js} +3 -3
  69. package/src/assets/web-panel/assets/{Services-DCm0HHAD.js → Services-Dfk0kied.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-D6w5gpmW.js → Skeleton-C8B5mUit.js} +1 -1
  71. package/src/assets/web-panel/assets/Skills-BNTPoJn0.js +1 -0
  72. package/src/assets/web-panel/assets/{Sla-BkMj8Dxu.js → Sla-gnFelKfT.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-BOmLqW44.js → SpeechSettings-B12gCQkK.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-2xKSqFDO.js → SyncSettings-CHWk9cpj.js} +2 -2
  75. package/src/assets/web-panel/assets/Tasks-B_zs9jkJ.js +1 -0
  76. package/src/assets/web-panel/assets/{Templates-CcOGWgZz.js → Templates-PjdppQrI.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-CAyzzQWN.js → Tenant-CH3aARxE.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-Daagerkm.js → Terminal-BqqrYyg3.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-1jGbMj7I.js → TimelineRenderer-Dx9soq9f.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-CYQ-FQju.js → Tokens-C66KpDDZ.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-C70zRwuR.js → Trigger-DHxgGsap.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-CeqXfiX_.js → Trust-3cct4QxN.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-D0j6m1bU.js → UkeySign-Cs6UfDEH.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-DFHpM7Yd.js → VideoEditing-jbu2EAQa.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-BVC2J0Yx.js → Wallet-BIykFB9D.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-BceIN2Gn.js → WebAuthn-DFgqKmHG.js} +4 -4
  87. package/src/assets/web-panel/assets/{WorkflowEditor-Bgeb-i-S.js → WorkflowEditor-CNg5bBiH.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-BmMBqgvz.js → chat-B-6wzojE.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-sjRzwnyw.js → colors-BHAq7y9y.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-DNt6m2bM.js → compact-item-CGJnSTnu.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-DELaLit3.js → createContext-Cx0ZF512.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-CNq_RRw4.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-dfwk9O8x.js → hasIn-DibIw3z7.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-Du62m6pG.js → index-0NWSa3Xq.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-LMfsEdLk.js → index-746-mNhw.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-Cbu3-zFd.js → index-Aaeca8o4.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BXJ68ObJ.js → index-B1jAbIxx.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B4Z4HZcf.js → index-B28jdxwR.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-Bs-mWOWt.js → index-B2rOMBeN.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-B0wkOqE9.js → index-BAoFiV3n.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CtfYPnsY.js → index-BCtW4F8-.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CpVt6M_8.js → index-BEXM3qSV.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-1w7dha_a.js → index-BFTGp-aF.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-C2Sxf7yC.js → index-BJhS6i02.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B7qiZc2Z.js → index-BO-XxBD5.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DlYL8VP8.js → index-BR2BiNtx.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-dAF9qRVa.js → index-BRflLAdr.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BMnvNNEd.js → index-BTWb3sbj.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BvIQ9sZa.js → index-BZ7GbrgF.js} +1 -1
  110. package/src/assets/web-panel/assets/index-B_H-RZ9i.js +1 -0
  111. package/src/assets/web-panel/assets/{index-DC6FlHlP.js → index-BiMLsIwd.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-6bjBUhoH.js → index-Bmqjip63.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BSB9Gin8.js → index-BoySHSgZ.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-fNwu9CU_.js → index-Bz3J0eVB.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-dpDeFZNt.js → index-C6M2yHVE.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-WpEDoyTv.js → index-CH2A_Fdn.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CujMHspH.js → index-CUX9mq3M.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DFOYbzg-.js → index-CY2E4Y99.js} +1 -1
  119. package/src/assets/web-panel/assets/index-CkH9UQQL.js +1 -0
  120. package/src/assets/web-panel/assets/{index-CAIn5cS9.js → index-CoKu7Q9r.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-OC3qYV4-.js → index-CrjkH_QU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BzddvOOb.js → index-Cuity3gy.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Rt-fym5b.js → index-CwcWpW1q.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BLbvXsxf.js → index-Cz5ety6j.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-aj9ObF2R.js → index-DXNcm44v.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-vCQ3l6DX.js → index-DjCJIttz.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-Clrqtycd.js → index-DnsVRqCa.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DnQOc5wo.js → index-SbQacweG.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CLSqyAcE.js → index-g0V_mLQ9.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DX3wwu3G.js → index-puIs3mTs.js} +3 -3
  131. package/src/assets/web-panel/assets/{index-DY2G1Th2.js → index-sI_1E0co.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-DV8q_Hki.js → index-woOjtit-.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-DUt9Xj8y.js → initDefaultProps-Gbl9QOqg.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-DdiFPnv7.js → motion-BHh6ZzZu.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-BJ2VH7Y2.js → move-mX6Rwrd1.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-BCnX6oOJ.js → mtc-parser-CuzZa_kI.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-CyHxlDLV.js → omit-DjANYkpi.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-BJiGW3bY.js → pickAttrs-C_3v40wY.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-DhJ9Rhx8.js → placementArrow-L2HgRede.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-C6zpL9bC.js → responsiveObserve-DIkGMHyT.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-DCbMFRF-.js → slide-C1hp5tD0.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-CNtVLsIq.js → statusUtils-DH1W2uFA.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-Z078OtUc.js → styleChecker-dEaKQcv2.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-w4RVmcGs.js → useFlexGapSupport-CD7j1zxt.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-D4Xw1XRt.js → useFs-C8jXMvEM.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-Bnbd1PgY.js → usePersonalDataHub-C4r-8mys.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-DSOQxMFN.js → vnode-DDuI6wgY.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-DNPE1Wca.js → zoom-Dd-DteT6.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/team.js +239 -55
  151. package/src/data/changelog.json +26 -0
  152. package/src/lib/agent-team/task-lease.js +718 -6
  153. package/src/lib/agent-team/team-graph-projection.js +303 -0
  154. package/src/lib/agent-team/team-mailbox.js +508 -2
  155. package/src/lib/agent-team/team-message-bridge.js +722 -0
  156. package/src/lib/agent-team/team-message-tools.js +231 -0
  157. package/src/lib/agent-team/team-runner.js +1186 -10
  158. package/src/lib/agent-team/team-session-message-adapter.js +720 -0
  159. package/src/lib/app-server/cli-agent-kernel-adapter.js +1 -0
  160. package/src/lib/app-server/protocol.js +43 -0
  161. package/src/lib/app-server/server.js +8 -11
  162. package/src/lib/approval-grant-ledger.js +187 -0
  163. package/src/lib/session-message-fabric.js +265 -3
  164. package/src/lib/subagent-inheritance.js +5 -3
  165. package/src/runtime/agent-core.js +38 -0
  166. package/src/runtime/headless-runner.js +36 -3
  167. package/src/runtime/headless-stream.js +184 -19
  168. package/src/assets/web-panel/assets/MarkdownRenderer-Cre8P8HG.js +0 -1
  169. package/src/assets/web-panel/assets/OrderTableRenderer-0NuumnfG.js +0 -1
  170. package/src/assets/web-panel/assets/Skills-Bw_pUTJB.js +0 -1
  171. package/src/assets/web-panel/assets/Tasks-BPAnzVau.js +0 -1
  172. package/src/assets/web-panel/assets/devWarning-Ct8o3bu_.js +0 -1
  173. package/src/assets/web-panel/assets/index-D685kO6L.js +0 -1
  174. package/src/assets/web-panel/assets/index-DTlIRMqX.js +0 -1
@@ -0,0 +1,231 @@
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
+ "team_handoff",
15
+ ]);
16
+
17
+ const DEFINITIONS = Object.freeze([
18
+ {
19
+ type: "function",
20
+ function: {
21
+ name: "team_send",
22
+ description:
23
+ "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.",
24
+ parameters: {
25
+ type: "object",
26
+ additionalProperties: false,
27
+ properties: {
28
+ to: {
29
+ type: "string",
30
+ description: "Teammate id, coordinator, or *.",
31
+ },
32
+ subject: { type: "string", maxLength: 256 },
33
+ body: { description: "JSON coordination payload." },
34
+ message_id: {
35
+ type: "string",
36
+ maxLength: 128,
37
+ description: "Stable idempotency key for retries.",
38
+ },
39
+ causation_id: { type: "string", maxLength: 128 },
40
+ correlation_id: { type: "string", maxLength: 128 },
41
+ },
42
+ required: ["to", "body", "message_id"],
43
+ },
44
+ },
45
+ },
46
+ {
47
+ type: "function",
48
+ function: {
49
+ name: "team_receive",
50
+ description:
51
+ "Receive this teammate's unprocessed messages. Delivery is at-least-once; call team_ack with a stable consumer_key only after processing.",
52
+ parameters: {
53
+ type: "object",
54
+ additionalProperties: false,
55
+ properties: {
56
+ limit: { type: "integer", minimum: 1, maximum: 100 },
57
+ wait_ms: {
58
+ type: "integer",
59
+ minimum: 0,
60
+ maximum: TEAM_MESSAGE_BRIDGE_MAX_WAIT_MS,
61
+ },
62
+ mark_read: { type: "boolean" },
63
+ },
64
+ },
65
+ },
66
+ },
67
+ {
68
+ type: "function",
69
+ function: {
70
+ name: "team_ack",
71
+ description:
72
+ "Persist read, processed, or dead-letter receipts for explicitly listed message ids. A different consumer_key cannot re-process a settled message.",
73
+ parameters: {
74
+ type: "object",
75
+ additionalProperties: false,
76
+ properties: {
77
+ message_ids: {
78
+ type: "array",
79
+ minItems: 1,
80
+ maxItems: 100,
81
+ uniqueItems: true,
82
+ items: { type: "integer", minimum: 1 },
83
+ },
84
+ consumer_key: { type: "string", minLength: 1, maxLength: 256 },
85
+ disposition: {
86
+ type: "string",
87
+ enum: ["read", "processed", "dead_letter"],
88
+ },
89
+ reason: { type: "string", maxLength: 1024 },
90
+ },
91
+ required: ["message_ids", "consumer_key"],
92
+ },
93
+ },
94
+ },
95
+ {
96
+ type: "function",
97
+ function: {
98
+ name: "team_followup",
99
+ description:
100
+ "Queue an at-least-once follow-up and request a teammate turn wake. An idle teammate with a resumable session receives a new lease-bound turn; otherwise the result reports active, queued, processed, or dead-lettered state.",
101
+ parameters: {
102
+ type: "object",
103
+ additionalProperties: false,
104
+ properties: {
105
+ to: { type: "string", description: "Teammate id or coordinator." },
106
+ subject: { type: "string", maxLength: 256 },
107
+ body: { description: "JSON follow-up payload." },
108
+ message_id: {
109
+ type: "string",
110
+ maxLength: 128,
111
+ description: "Stable idempotency key for retries.",
112
+ },
113
+ causation_id: { type: "string", maxLength: 128 },
114
+ correlation_id: { type: "string", maxLength: 128 },
115
+ },
116
+ required: ["to", "body", "message_id"],
117
+ },
118
+ },
119
+ },
120
+ {
121
+ type: "function",
122
+ function: {
123
+ name: "team_handoff",
124
+ description:
125
+ "Manage explicit task custody transfer. Offer binds the current task revision, authority and lease fence; the recipient must accept before the source can atomically commit a new target lease. Status is read-only; reject/revoke/expire remain durable terminal evidence.",
126
+ parameters: {
127
+ type: "object",
128
+ additionalProperties: false,
129
+ properties: {
130
+ action: {
131
+ type: "string",
132
+ enum: ["offer", "accept", "reject", "commit", "revoke", "status"],
133
+ },
134
+ handoff_id: { type: "string", minLength: 1, maxLength: 160 },
135
+ to: { type: "string", minLength: 1, maxLength: 128 },
136
+ artifact_ids: {
137
+ type: "array",
138
+ maxItems: 64,
139
+ uniqueItems: true,
140
+ items: { type: "string", minLength: 1, maxLength: 160 },
141
+ },
142
+ preconditions: { description: "JSON acceptance preconditions." },
143
+ summary: { description: "JSON continuation context." },
144
+ ttl_ms: { type: "integer", minimum: 1, maximum: 86400000 },
145
+ reason: { type: "string", maxLength: 1024 },
146
+ },
147
+ required: ["action", "handoff_id"],
148
+ },
149
+ },
150
+ },
151
+ ]);
152
+
153
+ function descriptor(name) {
154
+ return Object.freeze({
155
+ name,
156
+ kind: "team-message",
157
+ category: "coordination",
158
+ source: "host:team-message-bridge",
159
+ serverName: null,
160
+ inheritable: false,
161
+ isReadOnly: false,
162
+ riskLevel: "low",
163
+ effectContract: Object.freeze({
164
+ version: 1,
165
+ declaredEffect: "write",
166
+ authorizedEffect: "write",
167
+ riskLevel: "low",
168
+ sourceTrusted: true,
169
+ provenance: "host:lease-bound-team-message-bridge",
170
+ annotations: Object.freeze({
171
+ readOnlyHint: false,
172
+ destructiveHint: false,
173
+ idempotentHint: true,
174
+ openWorldHint: false,
175
+ }),
176
+ }),
177
+ });
178
+ }
179
+
180
+ export function resolveTeamMessageToolBundle({
181
+ env = process.env,
182
+ call = callTeamMessageBridge,
183
+ } = {}) {
184
+ const endpoint = env.CC_TEAM_MESSAGE_BRIDGE_ENDPOINT;
185
+ const token = env.CC_TEAM_MESSAGE_BRIDGE_TOKEN;
186
+ const protocol = Number(env.CC_TEAM_MESSAGE_BRIDGE_PROTOCOL);
187
+ if (!endpoint && !token && !env.CC_TEAM_MESSAGE_BRIDGE_PROTOCOL) return null;
188
+ if (
189
+ typeof endpoint !== "string" ||
190
+ !endpoint ||
191
+ typeof token !== "string" ||
192
+ token.length !== 64 ||
193
+ !/^[a-f0-9]{64}$/u.test(token) ||
194
+ protocol !== TEAM_MESSAGE_BRIDGE_PROTOCOL
195
+ ) {
196
+ const error = new Error("Team message bridge environment is invalid");
197
+ error.code = "TEAM_MESSAGE_BRIDGE_CONFIG_INVALID";
198
+ throw error;
199
+ }
200
+
201
+ const operations = {
202
+ team_send: "send",
203
+ team_receive: "receive",
204
+ team_ack: "ack",
205
+ team_followup: "followup",
206
+ team_handoff: "handoff",
207
+ };
208
+ const externalToolExecutors = {};
209
+ const externalToolDescriptors = {};
210
+ for (const [name, operation] of Object.entries(operations)) {
211
+ externalToolExecutors[name] = Object.freeze({
212
+ kind: "team-message",
213
+ operation,
214
+ inheritable: false,
215
+ execute: (args, options = {}) =>
216
+ call({
217
+ endpoint,
218
+ token,
219
+ op: operation,
220
+ args,
221
+ signal: options.signal || null,
222
+ }),
223
+ });
224
+ externalToolDescriptors[name] = descriptor(name);
225
+ }
226
+ return Object.freeze({
227
+ extraToolDefinitions: DEFINITIONS,
228
+ externalToolExecutors: Object.freeze(externalToolExecutors),
229
+ externalToolDescriptors: Object.freeze(externalToolDescriptors),
230
+ });
231
+ }