chainlesschain 0.166.106 → 0.166.108

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 (225) hide show
  1. package/README.md +187 -8
  2. package/package.json +2 -2
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-CKwEku2e.js → AIOps-B5HWUFaS.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-BSUOuTpW.js → ActionButton-DCIKpxoQ.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-CGxvL_FI.js → Analytics-dsgvjCEQ.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-bCPwz-5w.js → AppLayout-DWDH5Qbm.js} +5 -5
  9. package/src/assets/web-panel/assets/{Artifacts-2_BOWo6e.js → Artifacts-BD8S8kzU.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-CBOruzgW.js → Audit-CDXv4Aoj.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-lg0IU5HN.js → BackgroundAgents-BLAQ5Uy0.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-OspCi452.js → Backup-moPac6tF.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-BMkliqlz.js → BaseInput-C_6nzsLU.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-BfoiUZwp.js → Chat-cYuslkFG.js} +6 -6
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BjnfMwep.js → ChatBubbleRenderer-Ceh3MG6M.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-jTMlkNQZ.js → Checkbox-Qjb-XOX_.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-CycyJcnU.js → Codegen-IYRWXlMA.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-BVWlReQj.js → Col-CsQ9jv8M.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-CKRHl4xK.js → Community-BbNmfTwe.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-BtpfMdhT.js → Compact-SShDx-nr.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-DtHB1Ct1.js → Compliance-CLWhKIJp.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-D_8X7-RK.js → Cowork-D4tK9_s3.js} +2 -2
  23. package/src/assets/web-panel/assets/{Cron-DMCOyvEa.js → Cron-D7GnfQ1z.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-CeHdsu7m.js → Crosschain-TG86SH3X.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-CL6mR6zX.js → DID-6pue0NCO.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-oz9n6DC7.js → Dashboard-BwkJ29du.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-CbWm8mWu.js → Dropdown-DEvpYDof.js} +1 -1
  28. package/src/assets/web-panel/assets/EmailListRenderer-CQj7UlKJ.js +1 -0
  29. package/src/assets/web-panel/assets/{EvolutionSettings-DPwqgRYm.js → EvolutionSettings-tpvPMM9W.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DkV4YMFj.js → FamilyGuardDashboard-CWYFW75O.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-CpUKHIOH.js → Federation-gRIi96rM.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-C6KXRgjR.js → FormItemContext-B7Nr3YkV.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-C5Y4L5E3.js → GenericCardRenderer-b1BgGgLT.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-CBwKdF8s.js → Git-Dis1jjO7.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-Dt-OR7Aa.js → Governance-C4Yg99Am.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-Czkl-Lhl.js → Inference-D4UQRbGu.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-C7NE4949.js → KnowledgeGraph-Co_kLMAq.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-CoAuZiMG.js → Logs-D4BRp7bg.js} +2 -2
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-DTkjTwGI.js → MarkdownRenderer-Dgy8arQI.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-IzrV-7zH.js → Marketplace-ys0j1vr9.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-DYEea7aS.js → McpTools-B3ZvRZe_.js} +2 -2
  42. package/src/assets/web-panel/assets/{Memory-Uqe7ZrV6.js → Memory-BOa0jbr-.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-D092EGyM.js → MobileBridge-CWJRmUbj.js} +1 -1
  44. package/src/assets/web-panel/assets/MobileProjects-7ty8vTpj.js +1 -0
  45. package/src/assets/web-panel/assets/{Mtc-gg4jzfB-.js → Mtc-CCcOk5m5.js} +5 -5
  46. package/src/assets/web-panel/assets/{MtcAudit-BibGfs71.js → MtcAudit-vlrrScbQ.js} +4 -4
  47. package/src/assets/web-panel/assets/{Multisig-BmB5yRXP.js → Multisig-C8K59S_8.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-BBSlPDyY.js → NLProgramming-oTpFYVme.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Bui3-KiC.js → Notes-BhqAJWiz.js} +3 -3
  50. package/src/assets/web-panel/assets/{NotificationSettings-ovXtbHe5.js → NotificationSettings-DCnV1CJM.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-Bq-qD7eG.js → OrderTableRenderer-CZGnsrVW.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-DacIY9oJ.js → Organization-DX1LuQlJ.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-CX8osheZ.js → Overflow-CbfKrFdT.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-1lnikqVp.js → P2P-BEwYZuHL.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-DCrU-V6A.js → PdhVaultBrowser-YNmWbwd7.js} +3 -3
  56. package/src/assets/web-panel/assets/{Permissions-Dfcb6kM2.js → Permissions-DyZ18LiA.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-dvgai4hf.js → PersonalDataHub-B2J3aw2g.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-nymAEtnK.js → Pipeline-CXl2ZlhQ.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-D0Vd91oM.js → Privacy-I5SDmgAp.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-BpUBcu7o.js → ProjectInit-Crl9tXw3.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-DIzwTT-M.js → ProjectSettings-DCFtFlSK.js} +2 -2
  62. package/src/assets/web-panel/assets/{Projects-Den4RUw6.js → Projects-Do5BQq1i.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-Cq8p-M0d.js → Providers-Cb7OWa3y.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-DSmqOfYk.js → QrScannerModal-CJmhAU-s.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-BDHCeSnA.js → QuickAsk-Cu6lEWou.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-B_9M8oF4.js → Recommend-Crip3jLB.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-5ot4leHy.js → RemoteSession-KxYY-2CB.js} +3 -3
  68. package/src/assets/web-panel/assets/{Reputation-B3F013PY.js → Reputation-D0vN-htI.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-BMyBJnZw.js → Row-wqzd_xCD.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-WmV0l52g.js → RssFeed-8lsPfb0a.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-Wl80yXnR.js → Search-C-e8qAeU.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-gbDMKb5m.js → Security-CMM9WgFy.js} +4 -4
  73. package/src/assets/web-panel/assets/{Services-Bx2Bjhah.js → Services-CZdxjN2B.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-BvJNybjV.js → Skeleton-BI3XNk35.js} +1 -1
  75. package/src/assets/web-panel/assets/Skills-DMlsh9It.js +1 -0
  76. package/src/assets/web-panel/assets/{Sla-BM9gyZwc.js → Sla-HQruznKY.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-Bu9FL9Tz.js → SpeechSettings-Dl-MFq3w.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-D8ICJsMt.js → SyncSettings-BU224vDm.js} +2 -2
  79. package/src/assets/web-panel/assets/Tasks-DESg3yCs.js +1 -0
  80. package/src/assets/web-panel/assets/{Templates-BJzpTD0W.js → Templates-Jb3TPz4Q.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-BN8eX4R2.js → Tenant-CQ-GTrfa.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-CjtP9bpq.js → Terminal-BbMl3Rue.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-CpNRa4XW.js → TimelineRenderer-CS_vstKF.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-2lNNvNAH.js → Tokens-BaopVl1f.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-DxtxXyPg.js → Trigger-DtnD4WUN.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-CakzGeF9.js → Trust-CsvG4Tmf.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-CvJeRXwV.js → UkeySign-C1-A-cOV.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-D80pMzcO.js → VideoEditing-CNgJPdSL.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-BF-VOBmZ.js → Wallet-CdF41501.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-DXyoAzE_.js → WebAuthn-D-JmxD5g.js} +4 -4
  91. package/src/assets/web-panel/assets/{WorkflowEditor-X6CDxzrF.js → WorkflowEditor-C0XunR13.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-BcUhqjeA.js → chat-BBAZpD_G.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-Dw4bKaCm.js → colors-BxSxO5BX.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-BWhu5Eri.js → compact-item-BoxL8pg5.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-BLJ9JKoN.js → createContext-W5JAyZmY.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-BI5TZ7EX.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-DIkCiJbt.js → hasIn-HpiKDPVC.js} +1 -1
  98. package/src/assets/web-panel/assets/index-9-JLDK5n.js +1 -0
  99. package/src/assets/web-panel/assets/{index-BAwcMKaD.js → index-9caMEwQ-.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-0mHbawfQ.js → index-B05_YRHZ.js} +1 -1
  101. package/src/assets/web-panel/assets/index-B7m8ioaQ.js +1 -0
  102. package/src/assets/web-panel/assets/{index-D3wp_jgy.js → index-B9VxE1C-.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BotMuGS2.js → index-BA3WWQAT.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-LOsZYbic.js → index-BSJ0cAle.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C5qms36i.js → index-BW4PP5GN.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CDfB6hWf.js → index-BZAbaY64.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BipG-tDs.js → index-Ba4usRFM.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CgsVg5Up.js → index-BgMViZIY.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CTPoBbIR.js → index-BtFAEG08.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DKzG3kBM.js → index-Bwn6k_qw.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-PRYboDFm.js → index-C4uI7WCB.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DQbWGvE4.js → index-C5kqii-G.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B1fufz1A.js → index-C7GIUWWF.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DjEP26Te.js → index-CM_gdohF.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BcTch6Fp.js → index-CRg3aOoj.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-04SKBH8l.js → index-CcyzZloJ.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DHLW27Je.js → index-CehxfRUR.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-5vzPcr1g.js → index-D6m6B4Wy.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DV4FSjmI.js → index-DSyfxxQS.js} +3 -3
  120. package/src/assets/web-panel/assets/{index-D5vFJmmX.js → index-DaJk9U9V.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BxLDNxEQ.js → index-DcmAiq_Y.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-D-Erv8A9.js → index-DdEcQ1rp.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CqGqoID5.js → index-DinY7IQa.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BGMzh2oj.js → index-DkSnlgK_.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BxfimJOH.js → index-DlPvZgv8.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DOjQi7oU.js → index-DuM9I1If.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-uMtx6e3D.js → index-DwidpDEE.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CXJ8t1hK.js → index-IO2I7nzu.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-Cmc7qH2C.js → index-JrMBRi62.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BaStonJm.js → index-QzlEbtRL.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cr05twNa.js → index-V6VIJe2N.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BGFqk1-E.js → index-_38IJqoP.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-u0tqS0iq.js → index-_p4e3KfB.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-D1r2R4a-.js → index-gvfIRZxJ.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CFGOV-YT.js → index-ooP1pQCt.js} +1 -1
  136. package/src/assets/web-panel/assets/{index-BUC4TZWg.js → index-p6rNtYud.js} +1 -1
  137. package/src/assets/web-panel/assets/{initDefaultProps-Bx6Hj_FG.js → initDefaultProps-Dfn6M05J.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BSWivB70.js → motion-BRRwFqGO.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-Dv1Pg9R7.js → move-DpDPN6zR.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-Bqtl8fsk.js → mtc-parser-BHlSE87F.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-DpOBjOSQ.js → omit-CEOri_L5.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-D-M-dz48.js → pickAttrs-DqICh-ad.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-DsTLAifk.js → placementArrow-DQizFFiV.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-BVTetMpc.js → responsiveObserve-DmFHPdvC.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-abEcz-Cv.js → slide-s2s1XS3T.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-CBhrdU2G.js → statusUtils-IwEIbBan.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-CFq8ZCKa.js → styleChecker-CIFLlbXH.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-o4eE7fDV.js → useFlexGapSupport-CFkN2Cgh.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-Hs9W8ihi.js → useFs-BSY6O48s.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-Bnet5Jho.js → usePersonalDataHub-iJl3VnU0.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-DJfN4kWs.js → vnode-vu8ReMs7.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-BzV-2e7X.js → zoom-CeSrYAHp.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +2 -2
  155. package/src/commands/agent.js +20 -20
  156. package/src/commands/goal.js +299 -1
  157. package/src/commands/plugin.js +129 -68
  158. package/src/constants.js +2 -2
  159. package/src/data/changelog.json +29 -3
  160. package/src/harness/jsonl-session-store.js +128 -5
  161. package/src/harness/prompt-compressor.js +18 -10
  162. package/src/harness/structured-handoff.js +151 -13
  163. package/src/lib/agent-session-export.js +20 -0
  164. package/src/lib/background-agent-supervisor.js +54 -0
  165. package/src/lib/cli-goal-catalog.js +129 -0
  166. package/src/lib/cli-goal-source.js +119 -0
  167. package/src/lib/coding-task-guidance.js +2 -1
  168. package/src/lib/config-schema.js +1 -1
  169. package/src/lib/context-memory-kernel/live-compaction.js +75 -12
  170. package/src/lib/eval/stream-terminal.js +27 -2
  171. package/src/lib/evolution/evolution-artifact-ports.js +22 -11
  172. package/src/lib/evolution/evolution-file-witness.js +86 -63
  173. package/src/lib/evolution/evolution-ledger-file-backend.js +22 -0
  174. package/src/lib/evolution/evolution-ledger-file-manifest-catalog.js +34 -35
  175. package/src/lib/evolution/evolution-ledger-file-manifest-head-store.js +32 -39
  176. package/src/lib/evolution/evolution-ledger.js +367 -169
  177. package/src/lib/evolution/evolution-manifest-state-reader.js +58 -0
  178. package/src/lib/evolution/evolution-physical-state-reader.js +308 -0
  179. package/src/lib/evolution/evolution-witness-segments.js +12 -13
  180. package/src/lib/evolution/governed-wiki-pruning-ledger-adapter.js +82 -56
  181. package/src/lib/evolution/rrsi-observed-text-index.js +17 -1
  182. package/src/lib/evolution/rrsi-tenant-index-anchor-history.js +5 -0
  183. package/src/lib/execution-location-failure-site.js +20 -3
  184. package/src/lib/goal-store.js +8 -1
  185. package/src/lib/image-input.js +43 -14
  186. package/src/lib/llm-providers.js +1 -0
  187. package/src/lib/plugin-runtime/capabilities.js +10 -0
  188. package/src/lib/plugin-runtime/cli-goal-draft-request.js +138 -0
  189. package/src/lib/plugin-runtime/cli-goal-drafts.js +413 -0
  190. package/src/lib/plugin-runtime/cli-goal-extension-host.js +234 -0
  191. package/src/lib/plugin-runtime/examples/goal-description-drafter/plugin.json +17 -0
  192. package/src/lib/plugin-runtime/examples/goal-evidence-viewer/plugin.json +25 -0
  193. package/src/lib/plugin-runtime/examples/goal-progress-viewer/plugin.json +21 -0
  194. package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +38 -0
  195. package/src/lib/plugin-runtime/goal-extension-contract.js +190 -0
  196. package/src/lib/plugin-runtime/goal-extensions.js +277 -0
  197. package/src/lib/plugin-runtime/install.js +40 -40
  198. package/src/lib/plugin-runtime/manifest.js +12 -0
  199. package/src/lib/plugin-runtime/policy.js +1 -0
  200. package/src/lib/project-goal-connection.js +225 -0
  201. package/src/lib/project-goal-draft-connection.js +217 -0
  202. package/src/lib/read-file-loop-guard.js +124 -8
  203. package/src/lib/session-host-snapshot.js +3 -0
  204. package/src/lib/session-message-provenance.js +24 -5
  205. package/src/lib/session-tool-round.js +39 -0
  206. package/src/lib/session-transcript-history.js +2 -0
  207. package/src/lib/session-transcript-page.js +4 -1
  208. package/src/lib/session-transcript-structure.js +4 -0
  209. package/src/lib/task-model-selector.js +1 -1
  210. package/src/repl/agent-repl.js +14 -7
  211. package/src/repl/config-summary.js +1 -1
  212. package/src/runtime/__tests__/message-roles.test.js +29 -0
  213. package/src/runtime/agent-core.js +116 -44
  214. package/src/runtime/headless-runner.js +191 -34
  215. package/src/runtime/headless-stream.js +144 -48
  216. package/src/runtime/message-roles.js +43 -0
  217. package/src/runtime/policies/agent-policy.js +1 -0
  218. package/src/workers/background-agent-worker.js +146 -47
  219. package/src/assets/web-panel/assets/EmailListRenderer-DXlmbC45.js +0 -1
  220. package/src/assets/web-panel/assets/MobileProjects-CwA1VoVJ.js +0 -1
  221. package/src/assets/web-panel/assets/Skills-Tz4rQcDp.js +0 -1
  222. package/src/assets/web-panel/assets/Tasks-B6MowBDo.js +0 -1
  223. package/src/assets/web-panel/assets/devWarning-D_MJgDGJ.js +0 -1
  224. package/src/assets/web-panel/assets/index-BP8log78.js +0 -1
  225. package/src/assets/web-panel/assets/index-PexF9zYf.js +0 -1
@@ -336,7 +336,7 @@ export function registerAgentCommand(program, dependencies = {}) {
336
336
  )
337
337
  .option(
338
338
  "--vision-model <id>",
339
- "Model to use when an image is attached (default: config llm.visionModel or doubao-seed-2-0-lite-260215)",
339
+ "Explicit image model override (otherwise: multimodal main model, then config llm.visionModel or doubao-seed-2-0-lite-260215)",
340
340
  )
341
341
  .option("--session <id>", "Resume a previous agent session")
342
342
  .option(
@@ -1417,29 +1417,12 @@ export function registerAgentCommand(program, dependencies = {}) {
1417
1417
  }
1418
1418
  }
1419
1419
 
1420
- // When an image is attached, default the run to the configured vision LLM
1421
- // (config.llm provider/baseUrl/apiKey + llm.visionModel | --vision-model |
1422
- // doubao default) so `cc agent --image foo.png` works without extra flags.
1423
- // Explicit --provider/--model/etc. always win; no image 鈫?unchanged.
1424
- const visionLlm = resolveVisionLlm({
1425
- hasImage: images.length > 0,
1426
- flags: {
1427
- provider: options.provider,
1428
- model: explicitCliModel,
1429
- baseUrl: options.baseUrl,
1430
- apiKey: options.apiKey,
1431
- visionModel: options.visionModel,
1432
- },
1433
- llm: loadConfig().llm || {},
1434
- });
1435
-
1436
1420
  // Config-default LLM (parity with cc ask/chat): a bare `cc agent` honors
1437
1421
  // config.json `llm` (provider/model/baseUrl/apiKey) instead of silently
1438
1422
  // assuming local ollama 鈥?this is what makes the editor chat panel work
1439
1423
  // against a cloud-configured setup. Explicit --provider wins outright;
1440
- // the vision resolution above still overrides for --image runs. Applied
1441
- // AFTER resolveVisionLlm so config defaults don't masquerade as explicit
1442
- // flags there, and BEFORE every dispatch (headless/stream/REPL) since
1424
+ // resolve the main model before checking whether it can handle images,
1425
+ // and BEFORE every dispatch (headless/stream/REPL) since
1443
1426
  // they all read options.provider/model/baseUrl/apiKey.
1444
1427
  {
1445
1428
  const { applyAgentModelDefaults, reconcileConfigLlmProvider } =
@@ -1497,6 +1480,21 @@ export function registerAgentCommand(program, dependencies = {}) {
1497
1480
  }
1498
1481
  }
1499
1482
 
1483
+ const visionLlm = resolveVisionLlm({
1484
+ hasImage: images.length > 0,
1485
+ flags: {
1486
+ model: explicitCliModel,
1487
+ visionModel: options.visionModel,
1488
+ },
1489
+ llm: {
1490
+ ...loadConfig().llm,
1491
+ provider: options.provider,
1492
+ model: options.model,
1493
+ baseUrl: options.baseUrl,
1494
+ apiKey: options.apiKey,
1495
+ },
1496
+ });
1497
+
1500
1498
  // Claude-Code 2.1.183 parity: warn up front if the now-resolved model is
1501
1499
  // a provider-retired snapshot, before the run fails with an opaque "model
1502
1500
  // not found". (The "auto-updated to a newer model" half is handled by the
@@ -1980,6 +1978,7 @@ export function registerAgentCommand(program, dependencies = {}) {
1980
1978
  prompt,
1981
1979
  images,
1982
1980
  model: visionLlm.model || options.model,
1981
+ visionModel: options.visionModel,
1983
1982
  thinking,
1984
1983
  thinkingBudget,
1985
1984
  provider: visionLlm.provider || options.provider,
@@ -2239,6 +2238,7 @@ export function registerAgentCommand(program, dependencies = {}) {
2239
2238
  skillRetrievalRevocationReader,
2240
2239
  }).createAgentRuntime({
2241
2240
  model: options.model,
2241
+ visionModel: options.visionModel,
2242
2242
  thinking,
2243
2243
  thinkingBudget,
2244
2244
  provider: options.provider,
@@ -18,6 +18,7 @@
18
18
  */
19
19
 
20
20
  import chalk from "chalk";
21
+ import { stripVTControlCharacters } from "node:util";
21
22
  import { logger } from "../lib/logger.js";
22
23
 
23
24
  const STATUS_COLOR = {
@@ -180,7 +181,304 @@ export function registerGoalCommand(program) {
180
181
  }
181
182
  });
182
183
 
183
- // ── kr (key results) ──────────────────────────────────────────────────
184
+ goal
185
+ .command("catalog")
186
+ .description(
187
+ "Read a bounded page of standalone goal metadata for selection",
188
+ )
189
+ .option(
190
+ "--after <cursor>",
191
+ "Continue from the previous page in the same store",
192
+ )
193
+ .option("--limit <n>", "Candidates per page (1–20)", "20")
194
+ .option(
195
+ "--connection <file>",
196
+ "Read the single goal in a temporary desktop connection",
197
+ )
198
+ .option("--json", "Output the metadata page as JSON")
199
+ .action(async (options) => {
200
+ try {
201
+ const { readCliGoalCatalog } = await import(
202
+ "../lib/cli-goal-catalog.js"
203
+ );
204
+ const readCatalog =
205
+ options.connection !== undefined
206
+ ? (await import("../lib/project-goal-connection.js"))
207
+ .readProjectGoalCatalog
208
+ : readCliGoalCatalog;
209
+ const result = await readCatalog({
210
+ connection: options.connection,
211
+ after: options.after,
212
+ limit: Number(options.limit),
213
+ });
214
+ if (options.json) {
215
+ console.log(JSON.stringify(result, null, 2));
216
+ return;
217
+ }
218
+ for (const entry of result.entries)
219
+ logger.log(
220
+ stripVTControlCharacters(
221
+ `${entry.id} ${entry.status} ${entry.title}`,
222
+ ),
223
+ );
224
+ logger.log(
225
+ `Scanned ${result.scannedCount}; skipped ${result.skippedCount} invalid sources; ${result.invalidNameCount} invalid names in directory.`,
226
+ );
227
+ if (result.nextCursor)
228
+ logger.log(`Next page: cc goal catalog --after ${result.nextCursor}`);
229
+ } catch (err) {
230
+ fail("catalog", err);
231
+ }
232
+ });
233
+
234
+ goal
235
+ .command("panels <id>")
236
+ .description("Read authorized extension panels for a standalone CLI goal")
237
+ .option("--plugin <name>", "Select one installed plugin")
238
+ .option(
239
+ "--connection <file>",
240
+ "Read through a temporary, explicitly authorized desktop connection",
241
+ )
242
+ .option(
243
+ "--expected-store <storeId>",
244
+ "Require the store selected from goal catalog",
245
+ )
246
+ .option(
247
+ "--scope <scope>",
248
+ "Select its user, project or local install scope",
249
+ )
250
+ .option("--json", "Output the read-only panel snapshot as JSON")
251
+ .action(async (id, options) => {
252
+ try {
253
+ const { readCliGoalExtensionPanels } = await import(
254
+ "../lib/plugin-runtime/cli-goal-extension-host.js"
255
+ );
256
+ const result = await readCliGoalExtensionPanels(id, {
257
+ plugin: options.plugin,
258
+ scope: options.scope,
259
+ expectedStore: options.expectedStore,
260
+ connection: options.connection,
261
+ });
262
+ if (options.json) {
263
+ console.log(JSON.stringify(result, null, 2));
264
+ return;
265
+ }
266
+ logger.log(
267
+ `Goal panel snapshot: ${result.goalRef.id} (revision ${result.goalRef.revision})`,
268
+ );
269
+ for (const panel of result.panels) {
270
+ logger.log(
271
+ stripVTControlCharacters(
272
+ `\n${panel.plugin.name} [${panel.plugin.scope}]\n${panel.text}`,
273
+ ),
274
+ );
275
+ }
276
+ if (!result.panels.length)
277
+ logger.log("No authorized goal panels are available.");
278
+ for (const entry of result.dropped)
279
+ logger.log(
280
+ stripVTControlCharacters(
281
+ ` ${entry.name || "plugins"}: ${entry.reason}`,
282
+ ),
283
+ );
284
+ } catch (err) {
285
+ fail("panels", err);
286
+ }
287
+ });
288
+
289
+ goal
290
+ .command("draft-request <id>")
291
+ .description(
292
+ "Export an untrusted description request for explicit desktop adoption",
293
+ )
294
+ .requiredOption(
295
+ "--connection <file>",
296
+ "Read one explicitly connected desktop goal",
297
+ )
298
+ .requiredOption("--plugin <name>", "Select the installed proposal plugin")
299
+ .requiredOption(
300
+ "--scope <scope>",
301
+ "Select its user, project or local scope",
302
+ )
303
+ .requiredOption(
304
+ "--source <proposalId>",
305
+ "Exact native risk proposal ID copied from the desktop",
306
+ )
307
+ .requiredOption(
308
+ "--request-id <id>",
309
+ "Stable request identity; reuse the same file for retry",
310
+ )
311
+ .requiredOption("--title <text>", "Request title")
312
+ .requiredOption(
313
+ "--description-file <file>",
314
+ "UTF-8 proposed description, at most 8192 bytes",
315
+ )
316
+ .requiredOption(
317
+ "--out <file>",
318
+ "New request file; never overwrites an existing file",
319
+ )
320
+ .option(
321
+ "--expected-store <storeId>",
322
+ "Require the selected project goal store",
323
+ )
324
+ .option("--json", "Output the export result; no native draft is created")
325
+ .action(async (id, options) => {
326
+ try {
327
+ const { exportCliGoalDraftRequest } = await import(
328
+ "../lib/plugin-runtime/cli-goal-draft-request.js"
329
+ );
330
+ const result = await exportCliGoalDraftRequest(id, options);
331
+ if (options.json) console.log(JSON.stringify(result, null, 2));
332
+ else
333
+ logger.log(
334
+ stripVTControlCharacters(
335
+ `Request exported: ${result.file}\nNo native draft has been saved. Import this file in the desktop and review the full text. Request: ${result.requestId}`,
336
+ ),
337
+ );
338
+ } catch (error) {
339
+ fail("draft-request", error);
340
+ }
341
+ });
342
+
343
+ goal
344
+ .command("draft-access")
345
+ .description(
346
+ "Export a plugin label for separate native pending-draft authorization",
347
+ )
348
+ .requiredOption(
349
+ "--plugin <name>",
350
+ "Select an installed, trusted proposal plugin",
351
+ )
352
+ .requiredOption(
353
+ "--scope <scope>",
354
+ "Its user, project or local installation scope",
355
+ )
356
+ .requiredOption(
357
+ "--out <file>",
358
+ "New access request file; contains no native authority",
359
+ )
360
+ .option("--json", "Output the access export result as JSON")
361
+ .action(async (options) => {
362
+ const captured = {
363
+ ...options,
364
+ cwd: process.cwd(),
365
+ env: { ...process.env },
366
+ };
367
+ try {
368
+ const { exportCliGoalDraftAccess } = await import(
369
+ "../lib/plugin-runtime/cli-goal-drafts.js"
370
+ );
371
+ const result = await exportCliGoalDraftAccess(captured);
372
+ if (captured.json) console.log(JSON.stringify(result, null, 2));
373
+ else
374
+ logger.log(
375
+ stripVTControlCharacters(
376
+ `Access request exported: ${result.file}\nOpen it in the desktop for separate native authorization; this file grants no permission.`,
377
+ ),
378
+ );
379
+ } catch (error) {
380
+ fail("draft-access", error);
381
+ }
382
+ });
383
+
384
+ for (const [name, description] of [
385
+ [
386
+ "draft-sources",
387
+ "Read current source IDs under a v3 pending-draft connection",
388
+ ],
389
+ [
390
+ "draft-send",
391
+ "Save one pending suggestion with a durable submission reference",
392
+ ],
393
+ ["draft-receipt", "Reconcile a recorded submission without resending it"],
394
+ ]) {
395
+ const command = goal
396
+ .command(`${name} <id>`)
397
+ .description(description)
398
+ .requiredOption(
399
+ "--connection <file>",
400
+ "Separately authorized v3 desktop pending-draft connection",
401
+ )
402
+ .requiredOption(
403
+ "--plugin <name>",
404
+ "Select the exact installed proposal plugin",
405
+ )
406
+ .requiredOption(
407
+ "--scope <scope>",
408
+ "Its user, project or local installation scope",
409
+ )
410
+ .option(
411
+ "--expected-store <storeId>",
412
+ "Require the selected project goal store",
413
+ )
414
+ .option("--json", "Output the bounded result as JSON");
415
+ if (name === "draft-sources")
416
+ command.option(
417
+ "--after <cursor>",
418
+ "Continue after a returned source cursor",
419
+ );
420
+ else
421
+ command.requiredOption(
422
+ "--record <file>",
423
+ "Durable no-credential submission reference; an existing reference is only queried",
424
+ );
425
+ if (name === "draft-send")
426
+ command
427
+ .requiredOption(
428
+ "--source <proposalId>",
429
+ "Exact source ID returned by draft-sources",
430
+ )
431
+ .requiredOption(
432
+ "--request-id <id>",
433
+ "Stable request identity; preserve it when querying an unknown result",
434
+ )
435
+ .requiredOption("--title <text>", "Pending suggestion title")
436
+ .requiredOption(
437
+ "--description-file <file>",
438
+ "UTF-8 proposed description, at most 8192 bytes",
439
+ );
440
+ command.action(async (id, options) => {
441
+ const captured = {
442
+ ...options,
443
+ cwd: process.cwd(),
444
+ env: { ...process.env },
445
+ };
446
+ try {
447
+ const host = await import("../lib/plugin-runtime/cli-goal-drafts.js");
448
+ const run =
449
+ name === "draft-sources"
450
+ ? host.readCliGoalDraftSources
451
+ : name === "draft-send"
452
+ ? host.sendCliGoalDraft
453
+ : host.readCliGoalDraftReceipt;
454
+ const result = await run(id, captured);
455
+ if (captured.json) console.log(JSON.stringify(result, null, 2));
456
+ else if (name === "draft-sources") {
457
+ for (const source of result.sources.entries)
458
+ logger.log(
459
+ stripVTControlCharacters(
460
+ `${source.id} task ${source.sourceTaskId} review ${source.reviewId}`,
461
+ ),
462
+ );
463
+ logger.log(
464
+ `Scanned ${result.sources.scannedCount}; unavailable ${result.sources.unavailableCount}.`,
465
+ );
466
+ if (result.sources.nextCursor)
467
+ logger.log(`Next cursor: ${result.sources.nextCursor}`);
468
+ } else
469
+ logger.log(
470
+ stripVTControlCharacters(
471
+ result.state === "saved"
472
+ ? `Pending suggestion saved: ${result.proposalId}\nTask modification still requires native preview and confirmation. Reference: ${result.record}`
473
+ : `${result.state === "unknown" ? "Submission result unknown" : "No matching submission existed at query time"}. No automatic resend was performed.\nQuery the same reference with draft-receipt: ${result.record}`,
474
+ ),
475
+ );
476
+ } catch (error) {
477
+ fail(name, error);
478
+ }
479
+ });
480
+ }
481
+
184
482
  const kr = goal.command("kr").description("Manage key results");
185
483
 
186
484
  kr.command("add <id> <text>")