chainlesschain 0.162.162 → 0.162.163

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 (192) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-ClI2ALgv.js → AIOps-BQ0kgfA1.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BDjRcJaK.js → ActionButton-Dr1MDANe.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DikSRsaT.js → Analytics-CZ5vsaXW.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-9mLhMFmz.js → AppLayout-BIBga881.js} +3 -3
  6. package/src/assets/web-panel/assets/{Artifacts-BSr88BrH.js → Artifacts-vpXHRU3u.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-CdvyimOF.js → Audit-B8exuoub.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-D3_hCedh.js → BackgroundAgents-923evRRN.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-Cyvv9RHf.js → Backup-sr_sswlQ.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-BZM14kt8.js → BaseInput-CnW-4XKT.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-DrQSokVz.js → Chat-FZCsTZIL.js} +6 -6
  12. package/src/assets/web-panel/assets/ChatBubbleRenderer-DDPd9qT0.js +1 -0
  13. package/src/assets/web-panel/assets/{Checkbox-bFLYeWMV.js → Checkbox-DFrxB59H.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-7mN7xJXT.js → Codegen-_b6WEel8.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DAB5ZWm7.js → Col-CkbnnZ-K.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-B_1TymaK.js → Community-BxM_82zW.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-Bq1uSWLJ.js → Compact-DYinP45R.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-CyiE1jEe.js → Compliance-DyXp3sSP.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-Cpk0D7vm.js → Cowork-BEr2DhW7.js} +2 -2
  20. package/src/assets/web-panel/assets/{Cron-d_Lv3rdB.js → Cron-B-Vwo1hN.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-DMqhHjMR.js → Crosschain-DbLxKddd.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-Br-oPuBw.js → DID-BsQ_LFw9.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-CfLW_RaP.js → Dashboard-lVlXQHu5.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-DZnTOExV.js → Dropdown-Beo_foO7.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-DHIUHDv1.js → EmailListRenderer-DszHIXED.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Bw3t3myu.js → FamilyGuardDashboard-DcAwoh81.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-D9cpQPAY.js → Federation-CuJLa2eb.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-Jdczr9Mr.js → FormItemContext-Cxd1lxhc.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-BT8ZMpC5.js → GenericCardRenderer-BBvq5Jsw.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-DjARip2b.js → Git-WqPKetx6.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-BgWbSRcj.js → Governance-CWYtY3ke.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-CfouJciM.js → Inference-BnX1iiNV.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-50l7mrAr.js → KnowledgeGraph-BJuM8GN5.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-rq50H84B.js → Logs-DqLMNntm.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-DUPIEdQH.js → MarkdownRenderer-BqYwEYou.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-BYgPDmHU.js → Marketplace-_vGfmhNl.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-5DVgcFdx.js → McpTools-BeJDOkDj.js} +3 -3
  38. package/src/assets/web-panel/assets/{Memory-B70LPk7f.js → Memory-Da0EEZDO.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-De8ssA5Y.js → MobileBridge-DSuzcCCy.js} +1 -1
  40. package/src/assets/web-panel/assets/MobileProjects-D0RAk4e8.js +1 -0
  41. package/src/assets/web-panel/assets/{Mtc-RJsOTsIA.js → Mtc-BE9YgdA0.js} +2 -2
  42. package/src/assets/web-panel/assets/{MtcAudit-Crh-6BEK.js → MtcAudit-fC2BpO5S.js} +5 -5
  43. package/src/assets/web-panel/assets/{Multisig-wuoR5l3x.js → Multisig-D24Xxqw3.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-U2Mji4fZ.js → NLProgramming-Bs3oGvS8.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-CdTZAyDH.js → Notes-BFjmAA-3.js} +3 -3
  46. package/src/assets/web-panel/assets/{NotificationSettings-C-FucWE7.js → NotificationSettings-BX_9Bhv0.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-DCYFTeaI.js → OrderTableRenderer-wjkZwJXI.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-an3OF85L.js → Organization-DBcdsVEP.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-C-1vmYFe.js → Overflow-DDyaF9vC.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-Cwh47xKg.js → P2P-BB78L4he.js} +2 -2
  51. package/src/assets/web-panel/assets/{PdhVaultBrowser-Dm38GT0k.js → PdhVaultBrowser-DqTiZFum.js} +3 -3
  52. package/src/assets/web-panel/assets/{Permissions-DS2Y8awD.js → Permissions-INbnWv4j.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-BQNziA0I.js → PersonalDataHub-BST-VmTq.js} +3 -3
  54. package/src/assets/web-panel/assets/{Pipeline-DF85L1ue.js → Pipeline-CE7_tS2k.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-BuLornF-.js → Privacy-hK5L8dOB.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-C3Y31IwX.js → ProjectInit-BvkkUoDn.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-BCPiI8aD.js → ProjectSettings-u7_EUtkm.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-BZ6s4k6g.js → Projects-5Fmt_8Nw.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-D3Wp022X.js → Providers-B9eanarR.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-CUJfQkH4.js → QrScannerModal-C0dX5N2f.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-UAc0EO8l.js → QuickAsk-CKTpG-PZ.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-BaxKupcs.js → Recommend-Px_w_XQM.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-C75NNnXZ.js → RemoteSession-Di0fnYkM.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-BVXynZAk.js → Reputation-vesnWjXt.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-C5MRZ0bi.js → Row-exbY6LkT.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-DAKkEYka.js → RssFeed-B3O3x70t.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-DvWv9YOA.js → Search-uRA0DhNz.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-B5peafW1.js → Security-CViqdH6K.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-UQmvPEaG.js → Services-CkXS97WN.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-C3bhWpuF.js → Skeleton-DxW5WYnE.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-DfkKf9_H.js → Skills-CLxmGFse.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-DqMSjlBM.js → Sla-Cr5fziXq.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-C-WbxWUX.js → SpeechSettings-H0JSb3cp.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-CYuHZ4N2.js → SyncSettings-DMYWMae7.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-CyeAyB9d.js → Tasks-CbYyDdF4.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-BTCeQnpq.js → Templates-Cpc8JjiK.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-BifQuA9Y.js → Tenant-CRh77Jda.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-Bx_9Bocf.js → Terminal-4D8tNBO5.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-BX0RFCOm.js → TimelineRenderer-D41jzzbG.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-CGHrCmUS.js → Tokens-C_jWEy6b.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-DlqaY4SO.js → Trigger-Dk1ZUhsy.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-DfOmj-ay.js → Trust-CLVy4l7m.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-B72jH5fE.js → UkeySign-C-FeqFDj.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-BT-63fqv.js → VideoEditing-CqVZzyMm.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-Dsul3sHr.js → Wallet-DX9BW9pu.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-Izkwwdgy.js → WebAuthn-7hQDpWw_.js} +2 -2
  87. package/src/assets/web-panel/assets/{WorkflowEditor-D3FHSiH1.js → WorkflowEditor-6XqUAO0j.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-CmVz5z3U.js → chat-5R_vkaJG.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-CuLgyJBp.js → colors-huUPZdC-.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-Ml1YkXpw.js → compact-item-CfJlgisE.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-BvjJ48bs.js → createContext-jO8heofr.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-DeIrCfH-.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-DVC0157C.js → hasIn-DY8Vxqx7.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DJyN28Et.js → index-A48PtXw9.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CudmwNBV.js → index-B300RPnT.js} +3 -3
  96. package/src/assets/web-panel/assets/{index-BbepULSc.js → index-B74OXFxC.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DYXHFr4r.js → index-BAON7TzU.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BzG-x9p4.js → index-BCqxyvqp.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-wvb_FtaV.js → index-BHE8OIls.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-QXzlT9KD.js → index-BQS-uPOK.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DukDVXCv.js → index-BRXOP09X.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CFYVQMvu.js → index-BYLBPpt8.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BydjdZnl.js → index-BfCx4pFT.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CmFNvNLZ.js → index-BliaT02i.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-KMqhcF7l.js → index-BmqGerpC.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-Ck_52dz_.js → index-BsBtRWbA.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-C229ABfy.js → index-BtEXSoPL.js} +1 -1
  108. package/src/assets/web-panel/assets/index-BxUKMRpP.js +1 -0
  109. package/src/assets/web-panel/assets/{index-C_H_S-DY.js → index-Bxax9vQ6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-B0S8NzO6.js → index-C2iVSFpy.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BjHBpRYZ.js → index-CA6sO5VD.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Bzr0rB5T.js → index-CA90TZxG.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DDGaOWBV.js → index-CLhBh-qE.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Dt5KMjwJ.js → index-CRElRhyS.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BbPtzB8M.js → index-Cbe9G0V4.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C_vRgTl9.js → index-ChvHubX3.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BpFJHiTv.js → index-Cis_Ip7H.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-KjgKdZe-.js → index-Cjxbu68P.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-vG4XSJ1d.js → index-CzKmteNS.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BUt8kTIB.js → index-D0pet5Uy.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BfuKP4qe.js → index-D1VLuww0.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-4SBta3d7.js → index-DXBcvUnf.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DC_OI9H2.js → index-Db1cLWir.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DuGszaWY.js → index-DoI2sZm7.js} +1 -1
  125. package/src/assets/web-panel/assets/index-DscU9iPI.js +1 -0
  126. package/src/assets/web-panel/assets/{index-4wcgvPoF.js → index-KRHroryI.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-D3lD5qap.js → index-d1xkbtNz.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-B_EvG_GW.js → index-dKx57io7.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CXkJH-lK.js → index-j3O2EEJe.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BiC6dQZG.js → index-p85YaaKw.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cw0Rjy87.js → index-v3pTaEQm.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-C_XuRgGn.js → index-vXs3B8GJ.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-BDgd2YZ8.js → initDefaultProps-MCB7-raZ.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-ErtrXdYe.js → motion-UWDF9swV.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-_GPPNCgs.js → move-CsTmgXZU.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-DRLL-8V2.js → mtc-parser-fQy6KGLg.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-p86sl023.js → omit-woPnEjd1.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-BTu7cMLH.js → pickAttrs-Bs2dZ1gf.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-BEKz6Isr.js → placementArrow-C7EVgPkg.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve-Ck42c9MP.js → responsiveObserve-BH2kYCTN.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-1CEvuPsB.js → slide-BFBP2V_e.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-BDfdx1GJ.js → statusUtils-xdDxDYse.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-B4K46m5w.js → styleChecker-aAWgPPQf.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-DoIVpJNq.js → useFlexGapSupport-DkGSAWoO.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-DdAWi-ln.js → useFs-BrOih40N.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-iUu6k8dx.js → usePersonalDataHub-eIYrgMqO.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-DZz4R6Tw.js → vnode-B8lutNSE.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-DXlf9sA3.js → zoom-CffNre7V.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/agenda.js +254 -23
  151. package/src/commands/agent.js +105 -11
  152. package/src/commands/context.js +125 -14
  153. package/src/commands/hook.js +181 -7
  154. package/src/commands/plugin.js +239 -1
  155. package/src/commands/review.js +347 -2
  156. package/src/data/changelog.json +9 -4
  157. package/src/gateways/ws/remote-session-protocol.js +39 -0
  158. package/src/gateways/ws/session-protocol.js +5 -2
  159. package/src/lib/agent-schedule-store.js +289 -10
  160. package/src/lib/channels/channel-manager.js +54 -2
  161. package/src/lib/cli-context-engineering.js +9 -2
  162. package/src/lib/context-breakdown.js +116 -0
  163. package/src/lib/doctor-checkup.js +52 -0
  164. package/src/lib/hook-event-log.cjs +193 -0
  165. package/src/lib/interaction-adapter.js +34 -4
  166. package/src/lib/json-schema-output.js +46 -12
  167. package/src/lib/json-schema-validate.js +143 -3
  168. package/src/lib/plugin-runtime/capability-consent.js +175 -0
  169. package/src/lib/plugin-runtime/policy.js +62 -0
  170. package/src/lib/plugin-runtime/scopes.js +20 -4
  171. package/src/lib/project-instructions.js +128 -0
  172. package/src/lib/repl-goal.js +132 -0
  173. package/src/lib/repl-rewind.js +52 -0
  174. package/src/lib/schedule-planner.js +17 -1
  175. package/src/lib/settings-hook-events.cjs +13 -0
  176. package/src/lib/settings-loader.cjs +42 -0
  177. package/src/lib/side-effect-ledger-store.js +88 -0
  178. package/src/lib/side-effect-ledger.js +296 -0
  179. package/src/lib/sub-agent-context.js +74 -5
  180. package/src/lib/subagent-inheritance.js +112 -0
  181. package/src/lib/turn-binding-store.js +119 -0
  182. package/src/repl/agent-repl.js +136 -0
  183. package/src/repl/permission-tier.js +28 -0
  184. package/src/runtime/agent-core.js +376 -10
  185. package/src/runtime/coding-agent-contract-shared.cjs +60 -1
  186. package/src/runtime/headless-runner.js +267 -0
  187. package/src/runtime/headless-stream.js +60 -1
  188. package/src/assets/web-panel/assets/ChatBubbleRenderer-HwJR-C6B.js +0 -1
  189. package/src/assets/web-panel/assets/MobileProjects-D10VISps.js +0 -1
  190. package/src/assets/web-panel/assets/devWarning-DhiGrbsh.js +0 -1
  191. package/src/assets/web-panel/assets/index-B7a1TrU6.js +0 -1
  192. package/src/assets/web-panel/assets/index-C2B1KRja.js +0 -1
@@ -44,6 +44,8 @@ import {
44
44
  appendTokenUsage as jsonlAppendTokenUsage,
45
45
  appendToolCallCompact as jsonlAppendToolCallCompact,
46
46
  appendCompactEvent as jsonlAppendCompactEvent,
47
+ appendEvent as jsonlAppendEvent,
48
+ readEvents as jsonlReadEvents,
47
49
  rebuildMessages as jsonlRebuildMessages,
48
50
  sessionExists as jsonlSessionExists,
49
51
  getLastSessionId as jsonlGetLastSessionId,
@@ -461,6 +463,8 @@ export async function runAgentHeadless(options = {}, deps = {}) {
461
463
  appendToolCallCompact:
462
464
  deps.appendToolCallCompact || jsonlAppendToolCallCompact,
463
465
  appendCompactEvent: deps.appendCompactEvent || jsonlAppendCompactEvent,
466
+ appendEvent: deps.appendEvent || jsonlAppendEvent,
467
+ readEvents: deps.readEvents || jsonlReadEvents,
464
468
  getLastSessionId: deps.getLastSessionId || jsonlGetLastSessionId,
465
469
  verifySession: deps.verifySession || jsonlVerifySession,
466
470
  };
@@ -744,12 +748,35 @@ export async function runAgentHeadless(options = {}, deps = {}) {
744
748
  outputStyleBody = null;
745
749
  }
746
750
 
751
+ // Large-monorepo context lever: `instructionExcludes` (settings.json or an
752
+ // explicit caller/SDK option) suppresses cc.md/CLAUDE.md/AGENTS.md, path-scoped
753
+ // rules, and @imports that resolve into legacy/vendor/generated subtrees.
754
+ // Explicit option wins; otherwise union across the layered settings files.
755
+ let instructionExcludes = Array.isArray(options.instructionExcludes)
756
+ ? options.instructionExcludes
757
+ : null;
758
+ if (!instructionExcludes) {
759
+ try {
760
+ const { readStringArraySetting } =
761
+ await import("../lib/settings-loader.cjs");
762
+ const fromSettings = readStringArraySetting("instructionExcludes", {
763
+ cwd,
764
+ settingsFile: options.settingsFile,
765
+ });
766
+ if (fromSettings && fromSettings.length)
767
+ instructionExcludes = fromSettings;
768
+ } catch {
769
+ instructionExcludes = null; // fail-open
770
+ }
771
+ }
772
+
747
773
  const systemContent = composeSystemPrompt(
748
774
  buildSystemPrompt(cwd, { additionalDirectories }),
749
775
  {
750
776
  systemPrompt: options.systemPrompt,
751
777
  appendSystemPrompt: options.appendSystemPrompt,
752
778
  outputStyle: outputStyleBody,
779
+ instructionExcludes,
753
780
  },
754
781
  );
755
782
 
@@ -1068,6 +1095,10 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1068
1095
  model,
1069
1096
  provider,
1070
1097
  recorder: _otlpRecorder,
1098
+ // --otlp-content: opt in to stamping prompt CONTENT onto --otlp spans. Off by
1099
+ // default → content stays redacted (agent-core omits it entirely, so default
1100
+ // OTLP output is byte-identical). Only meaningful when a recorder is attached.
1101
+ otlpIncludeContent: options.otlpContent === true,
1071
1102
  hookSupervisor: _hookSupervisor,
1072
1103
  // Extended thinking (Anthropic; opt-in via --think/--ultrathink). null/off
1073
1104
  // → chatWithTools sends no thinking field. thinkingBudget (--thinking-budget)
@@ -1091,6 +1122,13 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1091
1122
  approvalGate,
1092
1123
  permissionRules,
1093
1124
  settingsHooks,
1125
+ // Seed the subagent-contract CEILING with this run's permission mode so a
1126
+ // spawned sub-agent inherits/tightens from it (tighten-only): a
1127
+ // `--permission-mode bypassPermissions` run can hand a child bypass (→ allow
1128
+ // confirmer), a `--permission-mode plan` run clamps children to read-only,
1129
+ // while a "default" run resolves children to "default" exactly as before
1130
+ // (byte-identical — the previous null ceiling also yielded "default").
1131
+ subAgentContract: { permissionMode: options.permissionMode || "default" },
1094
1132
  classifyAllShell,
1095
1133
  enabledToolNames,
1096
1134
  disabledTools,
@@ -1278,6 +1316,138 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1278
1316
  };
1279
1317
  };
1280
1318
 
1319
+ // --goal-condition: session-level completion-condition engine (P1). After each
1320
+ // outer turn an independent checker judges a completion CONDITION; if unmet and
1321
+ // budget remains, a follow-up user turn re-drives the agent — until met
1322
+ // (goal_completed) or a budget is exhausted (goal_exhausted). OPT-IN: when
1323
+ // unset, `goalEngine` is null and the outer loop runs exactly once, so one-shot
1324
+ // `cc agent -p` behavior is byte-for-byte unchanged.
1325
+ let goalEngine = null;
1326
+ let _goalHelpers = null;
1327
+ let _goalTokensSeen = 0; // per-turn usage deltas (engine totals == run total)
1328
+ let _goalCostSeen = 0;
1329
+ // Model-judged conditions reuse the run's own model as an independent
1330
+ // evaluator (mirrors --goal-assess). Overridable via deps for tests.
1331
+ const _defaultGoalJudge = async (cond, transcript) => {
1332
+ const { chatWithTools } = await import("./agent-core.js");
1333
+ const { firstBalancedJson } = await import("../lib/json-schema-output.js");
1334
+ const judgePrompt =
1335
+ `You are judging whether a coding session met a completion condition.\n` +
1336
+ `Condition: ${cond.text || cond.source}\n\n` +
1337
+ `Latest assistant output:\n${String(transcript.finalText || "").slice(0, 2000)}\n\n` +
1338
+ `Reply with STRICT JSON only: {"met": true|false, "reason": "<short>"}.`;
1339
+ const r = await chatWithTools([{ role: "user", content: judgePrompt }], {
1340
+ model,
1341
+ provider,
1342
+ baseUrl,
1343
+ apiKey,
1344
+ enabledToolNames: [],
1345
+ });
1346
+ const text = r?.message?.content || "";
1347
+ let met = false;
1348
+ let reason = "model judge returned no verdict";
1349
+ const block = firstBalancedJson(text, "{");
1350
+ if (block) {
1351
+ try {
1352
+ const parsed = JSON.parse(block);
1353
+ met = parsed.met === true;
1354
+ if (typeof parsed.reason === "string" && parsed.reason.trim())
1355
+ reason = parsed.reason.trim();
1356
+ else reason = met ? "condition met" : "condition not met";
1357
+ } catch {
1358
+ /* tolerant: a non-JSON verdict stays unmet */
1359
+ }
1360
+ }
1361
+ return {
1362
+ met,
1363
+ reason,
1364
+ evidence: { kind: "model", raw: text.slice(0, 200) },
1365
+ };
1366
+ };
1367
+ // Persist the engine snapshot as a hash-chained `goal_snapshot` session event
1368
+ // (best-effort, only when persisting). Re-read on --resume so an unfinished
1369
+ // goal continues across processes with its outerTurns/tokens/cost/startedAtMs
1370
+ // intact. rebuildMessages ignores this event type, so it never pollutes model
1371
+ // context. Defined here so the outer loop can call it after each evaluate().
1372
+ const persistGoalSnapshot = () => {
1373
+ if (!persist || !goalEngine) return;
1374
+ try {
1375
+ store.appendEvent(sessionId, "goal_snapshot", goalEngine.snapshot());
1376
+ } catch {
1377
+ // best-effort — never fail the run over persistence
1378
+ }
1379
+ };
1380
+ if (options.goalCondition) {
1381
+ try {
1382
+ const eng = await import("../lib/goal-condition-engine.js");
1383
+ const goalNow = () => (deps.now ? deps.now() : Date.now());
1384
+ // Cross-process resume: if the resumed session persisted an UNFINISHED
1385
+ // goal, continue it (fromSnapshot keeps accumulated progress + startedAtMs)
1386
+ // rather than starting fresh. A finished (done) snapshot is ignored — the
1387
+ // prior goal already concluded, so --goal-condition begins a new cycle. On
1388
+ // restore the persisted condition/budget win over freshly-passed flags, so
1389
+ // a resume faithfully continues the same goal.
1390
+ let restoredSnap = null;
1391
+ if (resumeId) {
1392
+ try {
1393
+ const events = store.readEvents(resumeId) || [];
1394
+ for (let i = events.length - 1; i >= 0; i--) {
1395
+ const ev = events[i];
1396
+ if (ev && ev.type === "goal_snapshot") {
1397
+ const snap = ev.data;
1398
+ if (snap && snap.state && snap.state.done !== true)
1399
+ restoredSnap = snap;
1400
+ break; // only the latest goal_snapshot matters
1401
+ }
1402
+ }
1403
+ } catch {
1404
+ restoredSnap = null; // unreadable transcript → start fresh
1405
+ }
1406
+ }
1407
+ if (restoredSnap) {
1408
+ goalEngine = eng.GoalConditionEngine.fromSnapshot(restoredSnap, {
1409
+ now: goalNow,
1410
+ });
1411
+ } else {
1412
+ goalEngine = new eng.GoalConditionEngine({
1413
+ condition: options.goalCondition,
1414
+ budget: {
1415
+ maxOuterTurns: options.maxOuterTurns,
1416
+ maxTokens: options.goalMaxTokens,
1417
+ maxCostUsd: options.goalMaxCostUsd,
1418
+ maxTimeMs: options.goalMaxTimeMs,
1419
+ },
1420
+ now: goalNow,
1421
+ });
1422
+ }
1423
+ _goalHelpers = {
1424
+ isDeterministicCondition: eng.isDeterministicCondition,
1425
+ runDeterministicCheck: eng.runDeterministicCheck,
1426
+ GOAL_DECISION: eng.GOAL_DECISION,
1427
+ };
1428
+ const started = goalEngine.start();
1429
+ emitStream({
1430
+ type: started.type,
1431
+ condition: started.condition,
1432
+ budget: started.budget,
1433
+ resumed: Boolean(restoredSnap),
1434
+ });
1435
+ persistGoalSnapshot(); // checkpoint the starting/restored state
1436
+ if (isText)
1437
+ writeErr(
1438
+ ` ◎ goal-condition ${restoredSnap ? "resumed" : "active"}: ` +
1439
+ `${goalEngine.condition.source} ` +
1440
+ `(outer turn ${goalEngine.state.outerTurns + 1}/` +
1441
+ `${goalEngine.budget.maxOuterTurns})\n`,
1442
+ );
1443
+ } catch (err) {
1444
+ // A bad spec should have been rejected at the command layer; fail-open so
1445
+ // a malformed condition never aborts an otherwise-valid run.
1446
+ goalEngine = null;
1447
+ if (isText) writeErr(` goal-condition ignored: ${err.message}\n`);
1448
+ }
1449
+ }
1450
+
1281
1451
  // A Ctrl-C (SIGINT) / SIGTERM terminates Node WITHOUT unwinding the `finally`
1282
1452
  // below, so its background-task reaper is bypassed — a backgrounded run_shell
1283
1453
  // task (e.g. a dev server) this run spawned would be orphaned. Install a
@@ -1492,6 +1662,103 @@ export async function runAgentHeadless(options = {}, deps = {}) {
1492
1662
  );
1493
1663
  }
1494
1664
  }
1665
+ // ── goal-condition re-drive (opt-in via --goal-condition) ─────────────
1666
+ // After the turn settles (and any auto-rewake fix), evaluate the session
1667
+ // completion condition. Unmet + budget remaining → append a follow-up user
1668
+ // turn and re-drive; met → goal_completed; budget spent → goal_exhausted.
1669
+ // Cost / max-turns exhaustion of the INNER loop stops here regardless.
1670
+ if (
1671
+ goalEngine &&
1672
+ _goalHelpers &&
1673
+ !goalEngine.done &&
1674
+ !stopForCost &&
1675
+ endReason !== "cost-budget-exhausted" &&
1676
+ endReason !== "max_turns"
1677
+ ) {
1678
+ // Feed this turn's usage DELTA so the engine's totals equal the run's
1679
+ // cumulative usage (recordTurnUsage accumulates).
1680
+ const curTokens =
1681
+ usage.input_tokens +
1682
+ usage.output_tokens +
1683
+ usage.cache_read_input_tokens +
1684
+ usage.cache_creation_input_tokens;
1685
+ const curCost = costBudget ? Number(costBudget.spentUsd) || 0 : 0;
1686
+ goalEngine.recordTurnUsage({
1687
+ tokens: curTokens - _goalTokensSeen,
1688
+ costUsd: curCost - _goalCostSeen,
1689
+ });
1690
+ _goalTokensSeen = curTokens;
1691
+ _goalCostSeen = curCost;
1692
+
1693
+ const cond = goalEngine.condition;
1694
+ let evaluation;
1695
+ try {
1696
+ if (_goalHelpers.isDeterministicCondition(cond)) {
1697
+ const gc = deps.goalCheck || {};
1698
+ const spawnSync =
1699
+ gc.spawnSync || (await import("node:child_process")).spawnSync;
1700
+ const existsSync =
1701
+ gc.existsSync || (await import("node:fs")).existsSync;
1702
+ evaluation = _goalHelpers.runDeterministicCheck(cond, {
1703
+ spawnSync,
1704
+ existsSync,
1705
+ cwd,
1706
+ lastOutput: finalText,
1707
+ });
1708
+ } else {
1709
+ const judge = deps.goalConditionJudge || _defaultGoalJudge;
1710
+ evaluation = await judge(cond, {
1711
+ prompt: options.prompt,
1712
+ finalText,
1713
+ toolCalls,
1714
+ });
1715
+ }
1716
+ } catch (err) {
1717
+ evaluation = {
1718
+ met: false,
1719
+ reason: `goal check failed: ${err.message}`,
1720
+ evidence: { error: true },
1721
+ };
1722
+ }
1723
+
1724
+ const { decision, events } = goalEngine.evaluate(evaluation);
1725
+ for (const ev of events) {
1726
+ emitStream(ev);
1727
+ if (isText) {
1728
+ if (ev.type === "goal_completed")
1729
+ writeErr(` ✔ goal-condition met: ${ev.reason}\n`);
1730
+ else if (ev.type === "goal_exhausted")
1731
+ writeErr(
1732
+ ` ⛔ goal-condition unmet (${ev.limit}): ${ev.reason}\n`,
1733
+ );
1734
+ else if (ev.type === "goal_evaluated")
1735
+ writeErr(
1736
+ ` ◎ goal-condition ${ev.met ? "met" : "not met"}: ${ev.reason}\n`,
1737
+ );
1738
+ }
1739
+ }
1740
+ // Checkpoint the post-evaluate state (outerTurns incremented, and
1741
+ // done/outcome on a terminal decision) so a crash or Ctrl-C between here
1742
+ // and the next turn still resumes at the right point.
1743
+ persistGoalSnapshot();
1744
+ if (decision === _goalHelpers.GOAL_DECISION.CONTINUE) {
1745
+ messages.push({
1746
+ role: "user",
1747
+ content:
1748
+ `The completion condition is not yet met: ${evaluation.reason}.\n` +
1749
+ `Keep working toward: "${cond.source}". When you believe it is ` +
1750
+ `satisfied, make sure it actually passes.`,
1751
+ });
1752
+ finalText = "";
1753
+ endReason = "complete";
1754
+ if (isText)
1755
+ writeErr(
1756
+ ` ↻ goal-condition re-drive — outer turn ${goalEngine.state.outerTurns + 1}\n`,
1757
+ );
1758
+ continue; // re-drive: run another outer turn
1759
+ }
1760
+ // complete | exhausted → fall through to the break below.
1761
+ }
1495
1762
  break;
1496
1763
  }
1497
1764
  } catch (err) {
@@ -1035,12 +1035,55 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
1035
1035
  } catch {
1036
1036
  outputStyleBody = null;
1037
1037
  }
1038
+ // Large-monorepo context lever: `instructionExcludes` (settings.json or an
1039
+ // explicit caller/SDK option) suppresses instruction/rule/@import files that
1040
+ // resolve into excluded subtrees. Explicit option wins; else union settings.
1041
+ let instructionExcludes = Array.isArray(options.instructionExcludes)
1042
+ ? options.instructionExcludes
1043
+ : null;
1044
+ if (!instructionExcludes) {
1045
+ try {
1046
+ const { readStringArraySetting } =
1047
+ await import("../lib/settings-loader.cjs");
1048
+ const fromSettings = readStringArraySetting("instructionExcludes", {
1049
+ cwd,
1050
+ settingsFile: options.settingsFile,
1051
+ });
1052
+ if (fromSettings && fromSettings.length)
1053
+ instructionExcludes = fromSettings;
1054
+ } catch {
1055
+ instructionExcludes = null; // fail-open
1056
+ }
1057
+ }
1058
+ // --json-schema (P2 §"JSON Schema 与流式结构化结果"): resolve + meta-validate
1059
+ // the schema up front (fail-fast on a broken contract, mirroring the
1060
+ // single-prompt path), then inject its output contract into the system prompt
1061
+ // so the model's final reply is JSON. A per-turn `structured_result` event is
1062
+ // emitted after each turn below. Off by default → nothing changes.
1063
+ let _jsonSchema = null;
1064
+ let _jso = null;
1065
+ if (options.jsonSchema) {
1066
+ try {
1067
+ _jso = await import("../lib/json-schema-output.js");
1068
+ _jsonSchema = _jso.loadSchemaFile(_jso._deps.fs, options.jsonSchema);
1069
+ } catch (err) {
1070
+ // Fail-fast, exactly like `cc agent -p --json-schema` on a bad schema.
1071
+ writeErr(`Error: ${err.message}\n`);
1072
+ return { exitCode: 1, turns: 0 };
1073
+ }
1074
+ }
1075
+
1038
1076
  const systemContent = composeSystemPrompt(
1039
1077
  buildSystemPrompt(cwd, { additionalDirectories }),
1040
1078
  {
1041
1079
  systemPrompt: options.systemPrompt,
1042
- appendSystemPrompt: options.appendSystemPrompt,
1080
+ appendSystemPrompt: _jsonSchema
1081
+ ? [options.appendSystemPrompt, _jso.buildSchemaInstruction(_jsonSchema)]
1082
+ .filter(Boolean)
1083
+ .join("\n\n")
1084
+ : options.appendSystemPrompt,
1043
1085
  outputStyle: outputStyleBody,
1086
+ instructionExcludes,
1044
1087
  },
1045
1088
  );
1046
1089
  const messages = [{ role: "system", content: systemContent }];
@@ -2041,6 +2084,22 @@ export async function runAgentHeadlessStream(options = {}, deps = {}) {
2041
2084
  usage: outcome.usage,
2042
2085
  });
2043
2086
 
2087
+ // --json-schema (P2): emit this turn's structured verdict right after its
2088
+ // result — schema_digest + valid + value/errors from the turn's final text.
2089
+ // Never falls back to free text; an unparseable/invalid reply reports
2090
+ // valid:false with coded/pointered errors. Parity with single-prompt output.
2091
+ if (_jsonSchema) {
2092
+ const parsed = _jso.extractJsonPayload(String(outcome.finalText ?? ""));
2093
+ emit({
2094
+ ..._jso.buildStructuredResult(
2095
+ _jsonSchema,
2096
+ parsed.ok ? parsed.value : null,
2097
+ ),
2098
+ session_id: sessionId,
2099
+ turn: turns,
2100
+ });
2101
+ }
2102
+
2044
2103
  // Session-wide cost cap reached → stop accepting further turns.
2045
2104
  if (costStopped) break;
2046
2105
 
@@ -1 +0,0 @@
1
- import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-CudmwNBV.js";import"./icons-DG5UD-6K.js";const T={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},M={class:"bubble"},N={class:"meta"},R={class:"actor"},D={class:"time"},V={class:"body"};function q(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",M,[n("div",N,[n("span",R,a(r.actorLabel),1),n("span",D,a(r.formattedTime),1)]),n("div",V,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const j=k(T,[["render",q],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-PMRrTD/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{j as default};
@@ -1 +0,0 @@
1
- import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-CudmwNBV.js";import{a8 as M,M as y}from"./icons-DG5UD-6K.js";const B={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return y},get FolderOutlined(){return M}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},T={class:"subtitle"},k={class:"explainer"};function w(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",T,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",k,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(B,[["render",w],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-PMRrTD/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
@@ -1 +0,0 @@
1
- import{Q as r}from"./index-CudmwNBV.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-C5MRZ0bi.js";import{a0 as t}from"./index-CudmwNBV.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-Ck42c9MP.js";import"./useFlexGapSupport-DoIVpJNq.js";import"./styleChecker-B4K46m5w.js";import"./index-Ck_52dz_.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-DAB5ZWm7.js";import{a0 as t}from"./index-CudmwNBV.js";import"./vendor-Bn1JzzAn.js";import"./index-Ck_52dz_.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};