chainlesschain 0.166.0 → 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.
Files changed (166) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-D5_pwQ7M.js → AIOps-BnZ24WRk.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-DgoYO32D.js → ActionButton-ivXY7MGb.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-BIpoZ4QH.js → Analytics-BQS4OD-k.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BJ3XrCEe.js → AppLayout-wOBuOKTO.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-DUFs_izZ.js → Artifacts-BYuC4nw-.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-BZdPwwfL.js → Audit-BIeVfBt6.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-DK9Fn-8B.js → BackgroundAgents-hIuyhmJ7.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-Bd6bOhV_.js → Backup-B6ohdgPQ.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-CRnWlXrd.js → BaseInput-BzgYCw6h.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-D1G_yEl6.js → Chat-CwahvZU1.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DDAlEtm-.js → ChatBubbleRenderer-B-1IZ_k8.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-CP35SH7R.js → Checkbox-26EDP2x0.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-DugeL4pj.js → Codegen-DYLw1Zvd.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DPuJsvKg.js → Col-DH_zAvD-.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-CZqNjNNp.js → Community-DURrTXJu.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-eeyIPEAb.js → Compact-CQyBqN0p.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-MGzTw87k.js → Compliance-a0DfgKHD.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-D3goVIA5.js → Cowork-C6fY_5Ke.js} +3 -3
  20. package/src/assets/web-panel/assets/{Cron-9HA8hLLG.js → Cron-DOwmpbTe.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-DCSOX3l6.js → Crosschain-DEPOIEUs.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-ji3lN5Bc.js → DID-DaKc-CEV.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-DlZvF1E5.js → Dashboard-C-0KLXq5.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-2FyZcow9.js → Dropdown-CnsDukzr.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-qH2bSpSY.js → EmailListRenderer-Bi_ACD4N.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bfx47wZj.js → FamilyGuardDashboard-BZASpnx3.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-DhGcZbIv.js → Federation-43oTtzyp.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-BMgi9_YQ.js → FormItemContext-oyVadnkZ.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-DugMac-4.js → GenericCardRenderer-Cwvfd6TZ.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-D943BpH-.js → Git-Cgi2wvU0.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-DZ66a8Aa.js → Governance-l8TWDKZ0.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-B00Mp2tN.js → Inference-Dc8j6TaO.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-BdwXXO2Q.js → KnowledgeGraph-DgcO-Fwz.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-_MVXyYWc.js → Logs-DjiZpiwa.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-hOTeNyi7.js → MarkdownRenderer-B5MFCi0N.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-CxeHRsnO.js → Marketplace-BeDn1hFc.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-BOieTxZ4.js → McpTools-PGdVfWK6.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-BQD26CM3.js → Memory-e76lY3a1.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-CPJ8ZlvR.js → MobileBridge-DKlQqot_.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-D7qRVu0y.js → MobileProjects-C4g6WOEr.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-BOyndGuk.js → Mtc-1j3NpRQq.js} +4 -4
  42. package/src/assets/web-panel/assets/{MtcAudit-CXQ_8ZoR.js → MtcAudit-DgwiVd1C.js} +2 -2
  43. package/src/assets/web-panel/assets/{Multisig-32Oh9KbH.js → Multisig-Dzg5lZZY.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-CFAd00CX.js → NLProgramming-D7GYhst-.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-BBCY_qJA.js → Notes-Blcfvaic.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-uaQ0PdmW.js → NotificationSettings-Dc4Y6vfr.js} +1 -1
  47. package/src/assets/web-panel/assets/OrderTableRenderer-dgM87XIn.js +1 -0
  48. package/src/assets/web-panel/assets/{Organization-CmFn7Oeo.js → Organization-DBXq024L.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-R_avat3a.js → Overflow-CFPbdx1Y.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-BIhLFmkY.js → P2P-w7z61NR5.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-DTJjk-_i.js → PdhVaultBrowser-B7eGGZOa.js} +3 -3
  52. package/src/assets/web-panel/assets/{Permissions-CkzYv8Yb.js → Permissions-Df5Cl50D.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub--0QvN2Nz.js → PersonalDataHub-C-We7RF6.js} +5 -5
  54. package/src/assets/web-panel/assets/{Pipeline-Bfw5gQCH.js → Pipeline-B6fHPnKy.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-DicjKfax.js → Privacy-B85BdiIc.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-DUl_ykBp.js → ProjectInit-CcOyazSe.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-CPYDvN8a.js → ProjectSettings-BE53KfuU.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-DnZ9_fAr.js → Projects-DOvMOoe_.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-BX1jP31w.js → Providers-5l7sT9lq.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-COab5qUl.js → QrScannerModal-DE37RXy4.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CdKQ_JZ0.js → QuickAsk-BGmGCo7j.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-BPFHg8pK.js → Recommend-BFdx8Nrm.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-CqrfTJvO.js → RemoteSession-C1w-j_hB.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-DM-l8Pb3.js → Reputation-BOvn-10y.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-CKGBTeCw.js → Row-db-a1YO9.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-Wb0YHIkc.js → RssFeed-DeS43ZGM.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-DiBjxKv-.js → Search-BaQYNfeb.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-BAVEmbWP.js → Security-yt1ESHDg.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-A_a3TIRn.js → Services-BcNqPUsS.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-CloHJ-I7.js → Skeleton-X3ceUQWf.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-CkvV5hKa.js → Skills-DmYeax6C.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-BYozxxsV.js → Sla-C_fdfbuJ.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-CWianiZF.js → SpeechSettings-CDqohXXQ.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-BR4G75do.js → SyncSettings-B25maYEY.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-D6gyUVrM.js → Tasks-3ILwauYw.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-DbfYIRzT.js → Templates-DUH0iuc4.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-BHutvukT.js → Tenant-DrvhHf9T.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-CYEiy2wJ.js → Terminal-C2lJVYHA.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-D9s1AxfE.js → TimelineRenderer-C1Hf_jYn.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-ij9vxnoy.js → Tokens-DniS1NpS.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-Dq_DCVeQ.js → Trigger-4jrcb8oA.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-Bs6wdfoH.js → Trust-DiBte55w.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-CLazyr5t.js → UkeySign-CZRtc4VB.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-viWotIHA.js → VideoEditing-BtYGJDmg.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-DlZ-A78d.js → Wallet-D1nrTm7H.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-DSmOND3Y.js → WebAuthn-DI91acpx.js} +5 -5
  87. package/src/assets/web-panel/assets/{WorkflowEditor-BempLOJi.js → WorkflowEditor-BtQjI50d.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-CyJzf4JI.js → chat-I4A-f4FC.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-C62q7WrL.js → colors-QZkDkFVt.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-7dYM1KW3.js → compact-item--FtCdzpr.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-CYTy7z2Q.js → createContext-CaIKIKxP.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-D7qVrkrO.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-DHoclUqm.js → hasIn-DLYUII6-.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-CW86F2Zw.js → index-0DYBQ-6e.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-C2efftJb.js → index-21I79XSf.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-4gWv-Ubg.js → index-3rVtgqa2.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-QXtrdrub.js → index-B65QxJaG.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BMxvWauP.js → index-BGWSmE3G.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-Dyq9tK5u.js → index-BLGJmgmx.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DYKwGrAn.js → index-BcgtvJbC.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BMRmxFU_.js → index-BebTT7iR.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-XrsAHHQN.js → index-BkJgWW_L.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-2C8Xx2UO.js → index-Bs0qPPFb.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CnEZ4ZHj.js → index-BvdwNnHC.js} +3 -3
  105. package/src/assets/web-panel/assets/{index-DkczsbiP.js → index-BxPoPofq.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DvEtHpLc.js → index-C3PnIEOH.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DK84lAS0.js → index-CBtII-nl.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DKdv8cju.js → index-CL4c5D6G.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CjeViaU-.js → index-CQ7OBHka.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DhJjifZe.js → index-CXaeZCRP.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BghdJ87W.js → index-CgMm85BY.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-lHfNxiB5.js → index-Ch0IFpGy.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DJzZaPlb.js → index-CisYjy88.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DghnbMlY.js → index-D2xETCkj.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-C5YWYlW9.js → index-D4CXFU-w.js} +1 -1
  116. package/src/assets/web-panel/assets/index-D9Y_ZwZn.js +1 -0
  117. package/src/assets/web-panel/assets/{index-LK1MZoBj.js → index-DA_TPdzX.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DOFAwpUK.js → index-DAuf8r5o.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DA-_807C.js → index-DGLHSCHM.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-9uR7rc9a.js → index-DJrd_CR3.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CVTnruDt.js → index-DK2r6Bv7.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-ZXYp76IB.js → index-DVitI3UQ.js} +1 -1
  123. package/src/assets/web-panel/assets/index-D_cPes4G.js +1 -0
  124. package/src/assets/web-panel/assets/{index-Bzz0aJ86.js → index-Deg2S9ZJ.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DHgSRimK.js → index-Du2wUavy.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-94ktimZG.js → index-OQPIS_am.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-3pI7AfmD.js → index-Ooo_5jHo.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DNLD3nZY.js → index-Ygi2rYL1.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CZRBvN6i.js → index-eTqL91aV.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-D6BC4mmz.js → index-hfiZ-i2b.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DAYanuSk.js → index-vfiDxdN2.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-NuNCstRO.js → index-yayaayEA.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-CwCl5sFQ.js → initDefaultProps-DDkTvw8k.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-BFJFy70N.js → motion-fkr96tN5.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-ByrtVGq8.js → move-CGBV0SV2.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-BFiH1mT3.js → mtc-parser-DAsCliFt.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-bdvgpivj.js → omit-BM8PMmKN.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-BlfuuE3s.js → pickAttrs-C6SdWoTK.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-t2SC3DMy.js → placementArrow-BG0EVu-d.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-CoEXv2Li.js → responsiveObserve-L10IvfYC.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-BfXCf0Fu.js → slide-TddIkbrn.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-DNsdyOuS.js → statusUtils-FlveF2Yn.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-9aHukmoG.js → styleChecker-BrXRyebg.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-dTkPxzHN.js → useFlexGapSupport-B7_oiDXZ.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-DINwfItP.js → useFs-CQYeRYWb.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-Bj_RriBV.js → usePersonalDataHub-DspIkhVi.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-BzRAZrTc.js → vnode-BCwmwMAW.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-CamPjkeK.js → zoom-B0cEGluV.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/team.js +74 -2
  151. package/src/data/changelog.json +26 -0
  152. package/src/generated/cc-agent-protocol.schema.json +49 -0
  153. package/src/lib/agent-team/team-mailbox.js +508 -2
  154. package/src/lib/agent-team/team-message-bridge.js +644 -0
  155. package/src/lib/agent-team/team-message-tools.js +198 -0
  156. package/src/lib/agent-team/team-runner.js +57 -3
  157. package/src/lib/graph-kernel/compiler.js +548 -16
  158. package/src/lib/graph-kernel/runtime.js +1158 -30
  159. package/src/lib/graph-kernel/trace-reducer.js +101 -7
  160. package/src/lib/subagent-inheritance.js +5 -3
  161. package/src/runtime/agent-core.js +38 -0
  162. package/src/runtime/headless-runner.js +36 -3
  163. package/src/assets/web-panel/assets/OrderTableRenderer-kpBxJ-SG.js +0 -1
  164. package/src/assets/web-panel/assets/devWarning-BdTg_AMF.js +0 -1
  165. package/src/assets/web-panel/assets/index-B6WvFV4N.js +0 -1
  166. package/src/assets/web-panel/assets/index-BKgfptzA.js +0 -1
@@ -25,20 +25,41 @@ function durationMs(attempt) {
25
25
  }
26
26
 
27
27
  function criticalPath(definition, attempts) {
28
- const nodes = new Map(definition.nodes.map((node) => [node.id, node]));
28
+ const compensationNodeIds = new Set(
29
+ [
30
+ ...definition.nodes.map((node) => node.compensationNodeId),
31
+ ...definition.edges
32
+ .filter((edge) => edge.kind === "compensation")
33
+ .map((edge) => edge.to),
34
+ ].filter((nodeId) => typeof nodeId === "string"),
35
+ );
36
+ const forwardNodes = definition.nodes.filter(
37
+ (node) => !compensationNodeIds.has(node.id),
38
+ );
39
+ const nodes = new Map(forwardNodes.map((node) => [node.id, node]));
29
40
  const duration = new Map(
30
- definition.nodes.map((node) => [
41
+ forwardNodes.map((node) => [
31
42
  node.id,
32
- Math.max(
33
- 0,
43
+ [
34
44
  ...attempts
35
45
  .filter((attempt) => attempt.nodeId === node.id)
36
- .map(durationMs),
37
- ),
46
+ .reduce((iterations, attempt) => {
47
+ const key = JSON.stringify(attempt.iterationPath || []);
48
+ iterations.set(
49
+ key,
50
+ Math.max(iterations.get(key) || 0, durationMs(attempt)),
51
+ );
52
+ return iterations;
53
+ }, new Map())
54
+ .values(),
55
+ ].reduce((total, value) => total + value, 0),
38
56
  ]),
39
57
  );
40
58
  const dependencies = new Map(
41
- definition.nodes.map((node) => [node.id, new Set(node.dependsOn)]),
59
+ forwardNodes.map((node) => [
60
+ node.id,
61
+ new Set(node.dependsOn.filter((nodeId) => nodes.has(nodeId))),
62
+ ]),
42
63
  );
43
64
  for (const edge of definition.edges) {
44
65
  if (
@@ -137,7 +158,34 @@ export function reduceGraphTrace(
137
158
  const handoffs = [...mapFromEntries(state.handoffs).values()];
138
159
  const humanTasks = [...mapFromEntries(state.humanTasks).values()];
139
160
  const agents = [...mapFromEntries(state.agents).values()];
161
+ const loopStates = [...mapFromEntries(state.loopStates).values()].sort(
162
+ (left, right) => left.regionId.localeCompare(right.regionId),
163
+ );
164
+ const iterationFrames = [
165
+ ...mapFromEntries(state.iterationFrames).values(),
166
+ ].sort(
167
+ (left, right) =>
168
+ left.regionId.localeCompare(right.regionId) ||
169
+ left.iterationPath.join(".").localeCompare(right.iterationPath.join(".")),
170
+ );
171
+ const subgraphRuns = [...mapFromEntries(state.subgraphRuns).values()].sort(
172
+ (left, right) => left.nodeId.localeCompare(right.nodeId),
173
+ );
140
174
  const definition = state.definition;
175
+ const compensationForNode = new Map([
176
+ ...definition.nodes
177
+ .filter((node) => node.compensationNodeId)
178
+ .map((node) => [node.compensationNodeId, node.id]),
179
+ ...definition.edges
180
+ .filter((edge) => edge.kind === "compensation")
181
+ .map((edge) => [edge.to, edge.from]),
182
+ ]);
183
+ const compensationByNode = new Map(
184
+ [...compensationForNode].map(([targetId, sourceId]) => [
185
+ sourceId,
186
+ targetId,
187
+ ]),
188
+ );
141
189
  const taskNodes = definition.nodes.map((node) => ({
142
190
  id: node.id,
143
191
  kind: node.kind,
@@ -145,8 +193,12 @@ export function reduceGraphTrace(
145
193
  blockedRoot: nodeStates.get(node.id)?.blockedRoot || null,
146
194
  acceptedAttemptId: nodeStates.get(node.id)?.acceptedAttemptId || null,
147
195
  attemptIds: nodeStates.get(node.id)?.attemptIds || [],
196
+ iterationPath: nodeStates.get(node.id)?.iterationPath || [],
148
197
  writeSet: node.writeSet || [],
149
198
  workspaceIsolation: node.workspaceIsolation || null,
199
+ compensationNodeId:
200
+ node.compensationNodeId || compensationByNode.get(node.id) || null,
201
+ compensationForNodeId: compensationForNode.get(node.id) || null,
150
202
  }));
151
203
  const dependencyEdges = [
152
204
  ...definition.nodes.flatMap((node) =>
@@ -160,6 +212,26 @@ export function reduceGraphTrace(
160
212
  ),
161
213
  ...definition.edges,
162
214
  ];
215
+ const compensationEdgeKeys = new Set(
216
+ dependencyEdges
217
+ .filter((edge) => edge.kind === "compensation")
218
+ .map((edge) => `${edge.from}\0${edge.to}`),
219
+ );
220
+ for (const node of definition.nodes) {
221
+ if (
222
+ !node.compensationNodeId ||
223
+ compensationEdgeKeys.has(`${node.id}\0${node.compensationNodeId}`)
224
+ ) {
225
+ continue;
226
+ }
227
+ dependencyEdges.push({
228
+ id: `compensation:${node.id}:${node.compensationNodeId}`,
229
+ from: node.id,
230
+ to: node.compensationNodeId,
231
+ kind: "compensation",
232
+ when: "always",
233
+ });
234
+ }
163
235
  const artifactEdges = artifacts.flatMap((artifact) => [
164
236
  {
165
237
  from: artifact.producerNodeId,
@@ -213,6 +285,7 @@ export function reduceGraphTrace(
213
285
  revisionDigest: state.revisionDigest,
214
286
  phase: state.phase,
215
287
  status: state.status,
288
+ compensation: clone(state.compensation || null),
216
289
  agentTree,
217
290
  taskGraph: { nodes: taskNodes, edges: dependencyEdges },
218
291
  artifactGraph: { artifacts, edges: artifactEdges },
@@ -221,6 +294,27 @@ export function reduceGraphTrace(
221
294
  attempts,
222
295
  handoffs,
223
296
  humanTasks,
297
+ iterationGraph: {
298
+ loops: loopStates,
299
+ frames: iterationFrames,
300
+ attempts: attempts.map((attempt) => ({
301
+ id: attempt.id,
302
+ nodeId: attempt.nodeId,
303
+ iterationPath: attempt.iterationPath || [],
304
+ attempt: attempt.attempt || 1,
305
+ status: attempt.status,
306
+ })),
307
+ },
308
+ subgraphGraph: {
309
+ runs: subgraphRuns,
310
+ edges: subgraphRuns.map((relation) => ({
311
+ from: relation.nodeId,
312
+ to: `run:${relation.childRunId}`,
313
+ kind: "subgraph_call",
314
+ revisionDigest: relation.revisionDigest,
315
+ status: relation.status,
316
+ })),
317
+ },
224
318
  criticalPath: criticalPath(definition, attempts),
225
319
  timeline,
226
320
  };
@@ -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: mcp?.extraToolDefinitions || undefined,
2428
- externalToolExecutors: mcp?.externalToolExecutors || undefined,
2429
- externalToolDescriptors: mcp?.externalToolDescriptors || undefined,
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{I as w,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-CnEZ4ZHj.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),b=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"}),h=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:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},P={class:"val amount"},j={key:0,class:"row"},A={class:"val mono"},F={key:1,class:"row"};function K(p,r,o,e,d,m){const c=w("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",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",P,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",F,[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",K],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-OP7nKs/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{J as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-CnEZ4ZHj.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-DPuJsvKg.js";import{a0 as t}from"./index-CnEZ4ZHj.js";import"./vendor-Bn1JzzAn.js";import"./index-DkczsbiP.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-CKGBTeCw.js";import{a0 as t}from"./index-CnEZ4ZHj.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-CoEXv2Li.js";import"./useFlexGapSupport-dTkPxzHN.js";import"./styleChecker-9aHukmoG.js";import"./index-DkczsbiP.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};