chainlesschain 0.166.141 → 0.166.143

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 (175) hide show
  1. package/README.md +249 -14
  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-BefmcZw2.js → AIOps-DNySV2Kf.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-BBlS9rmj.js → ActionButton-ByFuxJsa.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-DfNjXT9e.js → Analytics-ETbdywk5.js} +1 -1
  8. package/src/assets/web-panel/assets/{AppLayout-CIBZPPMS.js → AppLayout-CuHekZaP.js} +2 -2
  9. package/src/assets/web-panel/assets/{Artifacts-CE66rTTZ.js → Artifacts-BJJq2BDq.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-DOC8Lt8U.js → Audit-DXrietv8.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-9TMG041Q.js → BackgroundAgents-CFB1fxsr.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-us3KWb9F.js → Backup-VLtflRmp.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-D6Q95Wr5.js → BaseInput-BbqBaS2r.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-BPrM5ARp.js → Chat-t0g7BXL8.js} +1 -1
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-Drs9vSc4.js → ChatBubbleRenderer-JNFsjV0j.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-DqZGMV0o.js → Checkbox-BCSclHQb.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-CmolL6wr.js → Codegen-BcyINEHT.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-BwHSmoYQ.js → Col-C-0WNlwS.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-DGWqobpd.js → Community-DxZeoORX.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-t_yy09-r.js → Compact-BNnX4jpz.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-D0S8-EsN.js → Compliance-KnjHtn9C.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-Y1LiuRwP.js → Cowork-CDyCrhbX.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cron-FTqEw7QV.js → Cron-DxpS3D1G.js} +1 -1
  24. package/src/assets/web-panel/assets/{Crosschain-C3rPZ4Qu.js → Crosschain-BSzTZYyc.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-Ba2zySM-.js → DID-Bfj9Vdne.js} +1 -1
  26. package/src/assets/web-panel/assets/{Dashboard-D6xyN2ND.js → Dashboard-CcERVdgo.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-BF4QuXJw.js → Dropdown-BtYXAz6E.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-s9dUxq14.js → EmailListRenderer-fdCMeGXU.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-CoAKOfqZ.js → EvolutionSettings-LHxhcuF2.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CEznwH1c.js → FamilyGuardDashboard-MIgtLsos.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-rIzOt8-a.js → Federation-9-TOztwa.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-BARFiExr.js → FormItemContext-BKcwEE6w.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-DI0A4swS.js → GenericCardRenderer-DJBPVUK2.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-DdmysND4.js → Git-C_XYISjG.js} +1 -1
  35. package/src/assets/web-panel/assets/{Governance-DrdhwUz2.js → Governance-DWsbPrwq.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-Scm8tumd.js → Inference-D0_bYket.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-_6bgPs4W.js → KnowledgeGraph-BoA3VQlw.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-DW_v7bSo.js → Logs-LEGItChf.js} +1 -1
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-7JABuv1j.js → MarkdownRenderer-DOHVc-Uw.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-0h3YSvME.js → Marketplace-BKovl9NH.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-Byrg0Y3e.js → McpTools-D61ktoGb.js} +1 -1
  42. package/src/assets/web-panel/assets/{Memory-Cyoq-o29.js → Memory-CllorS0l.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileBridge-ISIlploU.js → MobileBridge-D-dJ78bk.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-04EncaRx.js → MobileProjects-CaxMKkd3.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-BMzkpyOF.js → Mtc-qEc62Qsx.js} +1 -1
  46. package/src/assets/web-panel/assets/{MtcAudit-Cx7BR5sz.js → MtcAudit-BY68jOZJ.js} +1 -1
  47. package/src/assets/web-panel/assets/{Multisig-D4pmkSX4.js → Multisig-eCCR8ELt.js} +1 -1
  48. package/src/assets/web-panel/assets/{NLProgramming-CCfaaWNu.js → NLProgramming-VtGv8pky.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Mq-1ZyaH.js → Notes-CPkYQySe.js} +1 -1
  50. package/src/assets/web-panel/assets/{NotificationSettings-rzf5V1TR.js → NotificationSettings-BuAvlHUu.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-OREUs5ue.js → OrderTableRenderer-CLf_HAGv.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-BQfOATgw.js → Organization-DjujhMbD.js} +1 -1
  53. package/src/assets/web-panel/assets/{Overflow-D7Pa6aaA.js → Overflow-RznznTS4.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-CaJ79ZsC.js → P2P-DSa5ot0t.js} +1 -1
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-CtimQQN3.js → PdhVaultBrowser-oSEh6vkf.js} +2 -2
  56. package/src/assets/web-panel/assets/{Permissions-AzmmkLZ0.js → Permissions-CdOZguX9.js} +1 -1
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BRU8ME7z.js → PersonalDataHub-B4--6iEF.js} +1 -1
  58. package/src/assets/web-panel/assets/{Pipeline-BnNqutXh.js → Pipeline-BnI57jE8.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-gMyZcxsz.js → Privacy-C8MId3ad.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-CkK-Fvr0.js → ProjectInit-DPGyYO8a.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectSettings-CGY_uiIX.js → ProjectSettings-qBMqaJaO.js} +1 -1
  62. package/src/assets/web-panel/assets/{Projects-DBNC7xXG.js → Projects-Bq87Syce.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-BVgWawtE.js → Providers-CVuG9Ugf.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-DZILESCa.js → QrScannerModal-C94c8m3q.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-DwRBzFWW.js → QuickAsk-BvfsXZ8s.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-B3VxvUih.js → Recommend-CoezBYH9.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-DM74lufU.js → RemoteSession-CcYC4v3u.js} +1 -1
  68. package/src/assets/web-panel/assets/{Reputation-DOOEuGHh.js → Reputation-diDbL4cO.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-BZJYAo0S.js → Row-5qp3_fNS.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-CYw44jcD.js → RssFeed-BCsMvpV4.js} +1 -1
  71. package/src/assets/web-panel/assets/{Search-CbypjDNG.js → Search-Br9nVxOp.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-0rSBDrXh.js → Security-BdOUzRfA.js} +1 -1
  73. package/src/assets/web-panel/assets/{Services-kqP79CBD.js → Services-Cp9TqzyN.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skeleton-BjxvGVfI.js → Skeleton-DSdWsUMR.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-SOoWyPCO.js → Skills-DRczAMTe.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-kdRVAT19.js → Sla-B6G_Vd8N.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-DILtcMaJ.js → SpeechSettings-BCcLx5x4.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-C98Jauc4.js → SyncSettings-BFhwtxCp.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tasks-Bw-KaQAs.js → Tasks-DGRE6VHO.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-CDJ027Hd.js → Templates-CJkJRFzd.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-BqNV62UA.js → Tenant-CAOv6p00.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-B8aQ3GLO.js → Terminal-CDrwwrKj.js} +1 -1
  83. package/src/assets/web-panel/assets/{TimelineRenderer-BSpccq11.js → TimelineRenderer-DI0YE2SN.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-BbGMoFO6.js → Tokens-DmqWTZSG.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-D75Mawa_.js → Trigger-CkXkhmjk.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-BiK_Pk05.js → Trust-U8YJLcoJ.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-Dv2xX_b9.js → UkeySign-BLTozMmr.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-CdBWfeEE.js → VideoEditing-DHKyFlZa.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-Cvrp4agg.js → Wallet-DapBxIQt.js} +1 -1
  90. package/src/assets/web-panel/assets/{WebAuthn-D0Htlf3v.js → WebAuthn-CkvG3yOr.js} +1 -1
  91. package/src/assets/web-panel/assets/{WorkflowEditor-nuUBOHIF.js → WorkflowEditor-cNLsinXP.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-C6MLShIo.js → chat-BzgkgfMC.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-9G5FqFOC.js → colors-BPpVKQsb.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-0M49EurU.js → compact-item-zepznuTv.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-CiDDLED_.js → createContext-BRto-SQH.js} +1 -1
  96. package/src/assets/web-panel/assets/{hasIn-wZvUczmn.js → hasIn-CqsmU_n6.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B0JZ_ccM.js → index-B-bNzvdU.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B_XOMujL.js → index-B0Z6rfV-.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DwX9cOL6.js → index-B9_jRD2e.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DwUOiN8M.js → index-BEXKES7V.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-8jz-X3xg.js → index-BGHd4D8F.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BVV2mBbo.js → index-BLwY9y0X.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-qJcOtd8J.js → index-B_l6gfDh.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B6TAOS4G.js → index-BeBxP1M6.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C63qiwQz.js → index-BeSzdB7x.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-k0BVfcwQ.js → index-BuBnM6Kz.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BXIY2BIN.js → index-Bz7pG8z3.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-D51V5vmz.js → index-CBI-7Q3W.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BWTcG128.js → index-CTk9gY88.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-sBsJaBmM.js → index-CdHXVSZ4.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Dclwd_lj.js → index-CmPnDXx4.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BlcOkfzz.js → index-CnezE05k.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DOxTmc3k.js → index-CwkhrUmw.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Cs66y4oC.js → index-CzoKAiyT.js} +3 -3
  115. package/src/assets/web-panel/assets/{index-BzeA3eRQ.js → index-DDPmr5Yr.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CdaLWIz-.js → index-DEbAW3Ec.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DvWRS-s7.js → index-DJSn3owP.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DN9t1qjW.js → index-DKa_jSfj.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BTCIIdoS.js → index-DUclk35X.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BmS2P_eX.js → index-DXkw-nt5.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CoxzvhoN.js → index-D_-w4KkD.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Cz1SAgnb.js → index-D_asIcU7.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BfwJm0DU.js → index-Df_CY0We.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-JhfNEldK.js → index-Dnvj_XU-.js} +1 -1
  125. package/src/assets/web-panel/assets/index-DruOFzuF.js +1 -0
  126. package/src/assets/web-panel/assets/{index-D9J_tLGk.js → index-DvGttIXQ.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DcZxOXd8.js → index-JrVhUwyh.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CdUmgLxP.js → index-LVvzNdPa.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CTy9gD3m.js → index-Q5sAV7wp.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CtbFv3Et.js → index-S8fkzbQ_.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BCfxxScC.js → index-Z6DBe2RU.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-dJ_V_Fqy.js → index-faHHtBKj.js} +1 -1
  133. package/src/assets/web-panel/assets/index-hhOrZ6HO.js +1 -0
  134. package/src/assets/web-panel/assets/{index-DeHSwWVG.js → index-w36TkwyO.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-D2wN6VIq.js → index-wbvZayBb.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-DyIyjurJ.js → initDefaultProps-BlhbrsQk.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-B2D0PuTM.js → motion-UZx12NPM.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-B22T5MnN.js → move-BTby5W4q.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-i4b7HNzF.js → mtc-parser-BOOaGiCg.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-ByNIr_gz.js → omit-BVylGzEr.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-_xP2RvxA.js → pickAttrs-Cp3Nflbr.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-CVDvzK0z.js → placementArrow-BVXYvwH2.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-CI1toXJ_.js → responsiveObserve-C67SbpBN.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-2_VosSRQ.js → slide-CnBvM22R.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-CMiWWrZC.js → statusUtils-T8fy53tf.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-DY8wTVCe.js → styleChecker-Bf7i4nlm.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DkdcgIyl.js → useFlexGapSupport-BUKk7jqw.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-gpl11PEF.js → useFs-T5lg6SpD.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-DqnQ0H9y.js → usePersonalDataHub-Brvye8Tg.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-CgY9xUvr.js → vnode-CK992ojP.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-Ch0jan5_.js → zoom-CcABB_97.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/command-help-index.json +1 -1
  154. package/src/commands/goal.js +340 -145
  155. package/src/commands/setup.js +17 -0
  156. package/src/data/changelog.json +26 -0
  157. package/src/lib/llm-onboarding-catalog.json +4 -3
  158. package/src/lib/plugin-runtime/cli-goal-capabilities.js +29 -0
  159. package/src/lib/plugin-runtime/cli-goal-draft-request.js +25 -15
  160. package/src/lib/plugin-runtime/cli-goal-drafts.js +78 -35
  161. package/src/lib/plugin-runtime/cli-goal-event-history.js +284 -0
  162. package/src/lib/plugin-runtime/cli-goal-events.js +175 -0
  163. package/src/lib/plugin-runtime/cli-goal-extension-host.js +21 -13
  164. package/src/lib/plugin-runtime/cli-project-goal-events.js +212 -0
  165. package/src/lib/plugin-runtime/examples/goal-project-observer/plugin.json +20 -0
  166. package/src/lib/plugin-runtime/examples/goal-status-observer/plugin.json +17 -0
  167. package/src/lib/plugin-runtime/examples/goal-task-creator/README.md +60 -0
  168. package/src/lib/plugin-runtime/examples/goal-task-creator/plugin.json +13 -0
  169. package/src/lib/plugin-runtime/examples/project-delivery-assistant/README.md +125 -0
  170. package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +8 -8
  171. package/src/lib/plugin-runtime/goal-extensions.js +17 -0
  172. package/src/lib/project-goal-connection.js +126 -30
  173. package/src/lib/project-goal-draft-connection.js +18 -11
  174. package/src/assets/web-panel/assets/index-C101Sec6.js +0 -1
  175. package/src/assets/web-panel/assets/index-D23TaGOp.js +0 -1
@@ -198,9 +198,8 @@ export function registerGoalCommand(program) {
198
198
  .option("--json", "Output the metadata page as JSON")
199
199
  .action(async (options) => {
200
200
  try {
201
- const { readCliGoalCatalog } = await import(
202
- "../lib/cli-goal-catalog.js"
203
- );
201
+ const { readCliGoalCatalog } =
202
+ await import("../lib/cli-goal-catalog.js");
204
203
  const readCatalog =
205
204
  options.connection !== undefined
206
205
  ? (await import("../lib/project-goal-connection.js"))
@@ -250,9 +249,8 @@ export function registerGoalCommand(program) {
250
249
  .option("--json", "Output the read-only panel snapshot as JSON")
251
250
  .action(async (id, options) => {
252
251
  try {
253
- const { readCliGoalExtensionPanels } = await import(
254
- "../lib/plugin-runtime/cli-goal-extension-host.js"
255
- );
252
+ const { readCliGoalExtensionPanels } =
253
+ await import("../lib/plugin-runtime/cli-goal-extension-host.js");
256
254
  const result = await readCliGoalExtensionPanels(id, {
257
255
  plugin: options.plugin,
258
256
  scope: options.scope,
@@ -287,196 +285,393 @@ export function registerGoalCommand(program) {
287
285
  });
288
286
 
289
287
  goal
290
- .command("draft-request <id>")
288
+ .command("replay <id>")
291
289
  .description(
292
- "Export an untrusted description request for explicit desktop adoption",
290
+ "Read one retained event-history page and checkpoint acknowledged output",
293
291
  )
294
292
  .requiredOption(
295
293
  "--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",
294
+ "Select a separately authorized v5 history connection",
306
295
  )
307
296
  .requiredOption(
308
- "--request-id <id>",
309
- "Stable request identity; reuse the same file for retry",
297
+ "--checkpoint <file>",
298
+ "New or existing body-free event checkpoint",
310
299
  )
311
- .requiredOption("--title <text>", "Request title")
312
- .requiredOption(
313
- "--description-file <file>",
314
- "UTF-8 proposed description, at most 8192 bytes",
300
+ .requiredOption("--plugin <name>", "Select the admitted event observer")
301
+ .option(
302
+ "--checkpoint-mode <mode>",
303
+ "auto|new|resume; new refuses existing files, resume requires one",
304
+ "auto",
315
305
  )
316
306
  .requiredOption(
317
- "--out <file>",
318
- "New request file; never overwrites an existing file",
307
+ "--scope <scope>",
308
+ "Select its user, project or local install scope",
319
309
  )
320
310
  .option(
321
311
  "--expected-store <storeId>",
322
- "Require the selected project goal store",
312
+ "Require the selected native goal store",
313
+ )
314
+ .option(
315
+ "--json",
316
+ "Output one bounded page as JSON; exit zero means checkpoint committed",
323
317
  )
324
- .option("--json", "Output the export result; no native draft is created")
325
318
  .action(async (id, options) => {
319
+ const controller = new AbortController(),
320
+ stop = () => controller.abort();
321
+ process.on("SIGINT", stop);
322
+ process.on("SIGTERM", stop);
323
+ const selection = {
324
+ connection: options.connection,
325
+ checkpoint: options.checkpoint,
326
+ checkpointMode: options.checkpointMode,
327
+ plugin: options.plugin,
328
+ scope: options.scope,
329
+ expectedStore: options.expectedStore,
330
+ signal: controller.signal,
331
+ };
332
+ const json = options.json;
326
333
  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
- );
334
+ const { replayCliGoalEvents } =
335
+ await import("../lib/plugin-runtime/cli-goal-event-history.js");
336
+ await replayCliGoalEvents(id, selection, async (page) => {
337
+ const output = json
338
+ ? JSON.stringify(page) + "\n"
339
+ : stripVTControlCharacters(
340
+ [
341
+ `Retained history for ${page.goalRef.id}; at-least-once delivery.`,
342
+ ...(page.truncated
343
+ ? ["Earlier history is outside the retention window."]
344
+ : []),
345
+ ...page.entries.map(
346
+ (entry) =>
347
+ `${entry.sequence} ${entry.recordedAt} ${entry.event.summary}`,
348
+ ),
349
+ page.hasMore
350
+ ? "More retained events remain; run the same command with the same checkpoint."
351
+ : "Reached this page's recorded watermark; this does not prove goal completion.",
352
+ ].join("\n") + "\n",
353
+ );
354
+ await new Promise((resolve, reject) => {
355
+ const abort = () => reject(new Error("GOAL_EVENT_REPLAY_ABORTED"));
356
+ controller.signal.addEventListener("abort", abort, { once: true });
357
+ if (controller.signal.aborted) {
358
+ controller.signal.removeEventListener("abort", abort);
359
+ abort();
360
+ return;
361
+ }
362
+ process.stdout.write(output, (error) => {
363
+ controller.signal.removeEventListener("abort", abort);
364
+ if (error) reject(error);
365
+ else resolve();
366
+ });
367
+ });
368
+ return true;
369
+ });
338
370
  } catch (error) {
339
- fail("draft-request", error);
371
+ fail("replay", error);
372
+ } finally {
373
+ controller.abort();
374
+ process.removeListener("SIGINT", stop);
375
+ process.removeListener("SIGTERM", stop);
340
376
  }
341
377
  });
342
378
 
343
379
  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",
380
+ .command("watch <id>")
381
+ .description("Observe authorized goal changes for a bounded time")
382
+ .requiredOption("--plugin <name>", "Select one installed event observer")
383
+ .option(
384
+ "--connection <file>",
385
+ "Use a separately authorized desktop event connection",
351
386
  )
352
- .requiredOption(
387
+ .option(
353
388
  "--scope <scope>",
354
- "Its user, project or local installation scope",
389
+ "Select its user, project or local install scope",
355
390
  )
356
- .requiredOption(
357
- "--out <file>",
358
- "New access request file; contains no native authority",
391
+ .option(
392
+ "--expected-store <storeId>",
393
+ "Require the store selected from goal catalog",
359
394
  )
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
- };
395
+ .option(
396
+ "--interval <ms>",
397
+ "Polling interval (250–60000 milliseconds)",
398
+ "1000",
399
+ )
400
+ .option("--duration <seconds>", "Stop after 1–900 seconds", "60")
401
+ .option(
402
+ "--json",
403
+ "Output ready and event records as newline-delimited JSON",
404
+ )
405
+ .action(async (id, options) => {
406
+ const controller = new AbortController();
407
+ const stop = () => controller.abort();
408
+ process.on("SIGINT", stop);
409
+ process.on("SIGTERM", stop);
367
410
  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);
411
+ const selection = {
412
+ plugin: options.plugin,
413
+ scope: options.scope,
414
+ expectedStore: options.expectedStore,
415
+ connection: options.connection,
416
+ intervalMs: Number(options.interval),
417
+ durationMs: Number(options.duration) * 1000,
418
+ signal: controller.signal,
419
+ };
420
+ const json = options.json;
421
+ const watch =
422
+ selection.connection !== undefined
423
+ ? (await import("../lib/plugin-runtime/cli-project-goal-events.js"))
424
+ .watchCliProjectGoalEvents
425
+ : (await import("../lib/plugin-runtime/cli-goal-events.js"))
426
+ .watchCliGoalExtensionEvents;
427
+ for await (const record of watch(id, selection)) {
428
+ if (json) console.log(JSON.stringify(record));
429
+ else
430
+ logger.log(
431
+ stripVTControlCharacters(
432
+ record.kind === "ready"
433
+ ? `Observing ${record.goalRef.id}; polling, no history replay. Ctrl+C to stop.`
434
+ : `${record.observedAt} ${record.event.summary}`,
435
+ ),
436
+ );
437
+ }
438
+ } catch (err) {
439
+ fail("watch", err);
440
+ } finally {
441
+ controller.abort();
442
+ process.removeListener("SIGINT", stop);
443
+ process.removeListener("SIGTERM", stop);
381
444
  }
382
445
  });
383
446
 
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)
447
+ for (const creation of [false, true]) {
448
+ const exportCommand = goal
449
+ .command(creation ? "draft-create-request <id>" : "draft-request <id>")
450
+ .description(
451
+ creation
452
+ ? "Export an untrusted task-creation request for explicit desktop adoption"
453
+ : "Export an untrusted description request for explicit desktop adoption",
454
+ )
398
455
  .requiredOption(
399
456
  "--connection <file>",
400
- "Separately authorized v3 desktop pending-draft connection",
457
+ "Read one explicitly connected desktop goal",
401
458
  )
459
+ .requiredOption("--plugin <name>", "Select the installed proposal plugin")
402
460
  .requiredOption(
403
- "--plugin <name>",
404
- "Select the exact installed proposal plugin",
461
+ "--scope <scope>",
462
+ "Select its user, project or local scope",
405
463
  )
406
464
  .requiredOption(
407
- "--scope <scope>",
408
- "Its user, project or local installation scope",
465
+ "--source <proposalId>",
466
+ "Exact native risk proposal ID copied from the desktop",
467
+ )
468
+ .requiredOption(
469
+ "--request-id <id>",
470
+ "Stable request identity; reuse the same file for retry",
471
+ )
472
+ .requiredOption("--title <text>", "Request title")
473
+ .requiredOption(
474
+ "--description-file <file>",
475
+ "UTF-8 proposed description, at most 8192 bytes",
476
+ )
477
+ .requiredOption(
478
+ "--out <file>",
479
+ "New request file; never overwrites an existing file",
409
480
  )
410
481
  .option(
411
482
  "--expected-store <storeId>",
412
483
  "Require the selected project goal store",
413
484
  )
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",
485
+ .option("--json", "Output the export result; no native draft is created")
486
+ .action(async (id, options) => {
487
+ try {
488
+ const { exportCliGoalDraftRequest, exportCliGoalTaskCreateRequest } =
489
+ await import("../lib/plugin-runtime/cli-goal-draft-request.js");
490
+ const result = await (
491
+ creation
492
+ ? exportCliGoalTaskCreateRequest
493
+ : exportCliGoalDraftRequest
494
+ )(id, options);
495
+ if (options.json) console.log(JSON.stringify(result, null, 2));
496
+ else
497
+ logger.log(
498
+ stripVTControlCharacters(
499
+ `Request exported: ${result.file}\nNo native draft has been saved. Import this file in the desktop and review the full text. Request: ${result.requestId}`,
500
+ ),
501
+ );
502
+ } catch (error) {
503
+ fail(creation ? "draft-create-request" : "draft-request", error);
504
+ }
505
+ });
506
+ if (creation)
507
+ exportCommand.requiredOption(
508
+ "--task-type <type>",
509
+ "Explicit native task type for this pending creation request",
424
510
  );
425
- if (name === "draft-send")
426
- command
511
+ }
512
+
513
+ for (const creation of [false, true]) {
514
+ goal
515
+ .command(creation ? "draft-create-access" : "draft-access")
516
+ .description(
517
+ "Export a plugin label for separate native pending-draft authorization",
518
+ )
519
+ .requiredOption(
520
+ "--plugin <name>",
521
+ "Select an installed, trusted proposal plugin",
522
+ )
523
+ .requiredOption(
524
+ "--scope <scope>",
525
+ "Its user, project or local installation scope",
526
+ )
527
+ .requiredOption(
528
+ "--out <file>",
529
+ "New access request file; contains no native authority",
530
+ )
531
+ .option("--json", "Output the access export result as JSON")
532
+ .action(async (options) => {
533
+ const captured = {
534
+ ...options,
535
+ cwd: process.cwd(),
536
+ env: { ...process.env },
537
+ };
538
+ try {
539
+ const { exportCliGoalDraftAccess, exportCliGoalCreateDraftAccess } =
540
+ await import("../lib/plugin-runtime/cli-goal-drafts.js");
541
+ const result = await (
542
+ creation ? exportCliGoalCreateDraftAccess : exportCliGoalDraftAccess
543
+ )(captured);
544
+ if (captured.json) console.log(JSON.stringify(result, null, 2));
545
+ else
546
+ logger.log(
547
+ stripVTControlCharacters(
548
+ `Access request exported: ${result.file}\nOpen it in the desktop for separate native authorization; this file grants no permission.`,
549
+ ),
550
+ );
551
+ } catch (error) {
552
+ fail(creation ? "draft-create-access" : "draft-access", error);
553
+ }
554
+ });
555
+ }
556
+
557
+ for (const creation of [false, true]) {
558
+ for (const [name, description] of [
559
+ [
560
+ "draft-sources",
561
+ "Read current source IDs under a v3 pending-draft connection",
562
+ ],
563
+ [
564
+ "draft-send",
565
+ "Save one pending suggestion with a durable submission reference",
566
+ ],
567
+ ["draft-receipt", "Reconcile a recorded submission without resending it"],
568
+ ]) {
569
+ const command = goal
570
+ .command(
571
+ `${creation ? name.replace("draft-", "draft-create-") : name} <id>`,
572
+ )
573
+ .description(
574
+ creation ? description.replace("v3", "v6 creation") : description,
575
+ )
427
576
  .requiredOption(
428
- "--source <proposalId>",
429
- "Exact source ID returned by draft-sources",
577
+ "--connection <file>",
578
+ creation
579
+ ? "Separately authorized v6 creation pending-draft connection"
580
+ : "Separately authorized v3 desktop pending-draft connection",
430
581
  )
431
582
  .requiredOption(
432
- "--request-id <id>",
433
- "Stable request identity; preserve it when querying an unknown result",
583
+ "--plugin <name>",
584
+ "Select the exact installed proposal plugin",
434
585
  )
435
- .requiredOption("--title <text>", "Pending suggestion title")
436
586
  .requiredOption(
437
- "--description-file <file>",
438
- "UTF-8 proposed description, at most 8192 bytes",
587
+ "--scope <scope>",
588
+ "Its user, project or local installation scope",
589
+ )
590
+ .option(
591
+ "--expected-store <storeId>",
592
+ "Require the selected project goal store",
593
+ )
594
+ .option("--json", "Output the bounded result as JSON");
595
+ if (name === "draft-sources")
596
+ command.option(
597
+ "--after <cursor>",
598
+ "Continue after a returned source cursor",
439
599
  );
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)
600
+ else
601
+ command.requiredOption(
602
+ "--record <file>",
603
+ "Durable no-credential submission reference; an existing reference is only queried",
604
+ );
605
+ if (name === "draft-send")
606
+ command
607
+ .requiredOption(
608
+ "--source <proposalId>",
609
+ "Exact source ID returned by draft-sources",
610
+ )
611
+ .requiredOption(
612
+ "--request-id <id>",
613
+ "Stable request identity; preserve it when querying an unknown result",
614
+ )
615
+ .requiredOption("--title <text>", "Pending suggestion title")
616
+ .requiredOption(
617
+ "--description-file <file>",
618
+ "UTF-8 proposed description, at most 8192 bytes",
619
+ );
620
+ if (creation && name === "draft-send")
621
+ command.requiredOption(
622
+ "--task-type <type>",
623
+ "Explicit native task type; saved pending only",
624
+ );
625
+ command.action(async (id, options) => {
626
+ const captured = {
627
+ ...options,
628
+ cwd: process.cwd(),
629
+ env: { ...process.env },
630
+ };
631
+ try {
632
+ const host = await import("../lib/plugin-runtime/cli-goal-drafts.js");
633
+ const run =
634
+ name === "draft-sources"
635
+ ? creation
636
+ ? host.readCliGoalCreateDraftSources
637
+ : host.readCliGoalDraftSources
638
+ : name === "draft-send"
639
+ ? creation
640
+ ? host.sendCliGoalCreateDraft
641
+ : host.sendCliGoalDraft
642
+ : creation
643
+ ? host.readCliGoalCreateDraftReceipt
644
+ : host.readCliGoalDraftReceipt;
645
+ const result = await run(id, captured);
646
+ if (captured.json) console.log(JSON.stringify(result, null, 2));
647
+ else if (name === "draft-sources") {
648
+ for (const source of result.sources.entries)
649
+ logger.log(
650
+ stripVTControlCharacters(
651
+ `${source.id} task ${source.sourceTaskId} review ${source.reviewId}`,
652
+ ),
653
+ );
654
+ logger.log(
655
+ `Scanned ${result.sources.scannedCount}; unavailable ${result.sources.unavailableCount}.`,
656
+ );
657
+ if (result.sources.nextCursor)
658
+ logger.log(`Next cursor: ${result.sources.nextCursor}`);
659
+ } else
458
660
  logger.log(
459
661
  stripVTControlCharacters(
460
- `${source.id} task ${source.sourceTaskId} review ${source.reviewId}`,
662
+ result.state === "saved"
663
+ ? `Pending suggestion saved: ${result.proposalId}\nTask ${creation ? "creation" : "modification"} still requires native preview and confirmation. Reference: ${result.record}`
664
+ : `${result.state === "unknown" ? "Submission result unknown" : "No matching submission existed at query time"}. No automatic resend was performed.\nQuery the same reference with ${creation ? "draft-create-receipt" : "draft-receipt"}: ${result.record}`,
461
665
  ),
462
666
  );
463
- logger.log(
464
- `Scanned ${result.sources.scannedCount}; unavailable ${result.sources.unavailableCount}.`,
667
+ } catch (error) {
668
+ fail(
669
+ creation ? name.replace("draft-", "draft-create-") : name,
670
+ error,
465
671
  );
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
- });
672
+ }
673
+ });
674
+ }
480
675
  }
481
676
 
482
677
  const kr = goal.command("kr").description("Manage key results");
@@ -27,6 +27,7 @@ import {
27
27
  askPassword,
28
28
  } from "../lib/prompts.js";
29
29
  import logger from "../lib/logger.js";
30
+ import { normalizeLlmEndpoint } from "../lib/llm-connection-resolution.js";
30
31
  import {
31
32
  assessEvolutionDeploymentReadiness,
32
33
  getEvolutionDeploymentStatus,
@@ -151,6 +152,10 @@ async function runSetup(options) {
151
152
  // Abort before changing provider/baseUrl so an old provider's credential
152
153
  // can never be paired with and sent to a newly selected endpoint.
153
154
  assertRequiredProviderCredential(providerInfo, apiKey);
155
+ } else if (provider === "custom") {
156
+ apiKey = await askPassword(
157
+ "Enter the platform API key (optional; leave blank if not required):",
158
+ );
154
159
  }
155
160
 
156
161
  if (provider === "custom" || providerInfo.isProxy) {
@@ -187,6 +192,18 @@ async function runSetup(options) {
187
192
 
188
193
  // Step 7: Save config
189
194
  const applySetupValues = (config) => {
195
+ const previous = config.llm || {};
196
+ const sameTarget =
197
+ previous.provider === provider &&
198
+ normalizeLlmEndpoint(
199
+ provider,
200
+ previous.baseUrl || providerInfo.defaultBaseUrl,
201
+ ) === normalizeLlmEndpoint(provider, baseUrl);
202
+ if (provider === "custom" && !apiKey && !sameTarget) {
203
+ delete previous.apiKey;
204
+ delete previous.apiKeyHelper;
205
+ }
206
+ config.llm = previous;
190
207
  config.setupCompleted = true;
191
208
  config.completedAt = new Date().toISOString();
192
209
  config.edition = edition;
@@ -1,6 +1,32 @@
1
1
  {
2
2
  "source": "CHANGELOG.md",
3
3
  "releases": [
4
+ {
5
+ "productVersion": null,
6
+ "cliVersion": "0.166.143",
7
+ "cliVersions": ["0.166.143"],
8
+ "date": "2026-11-06",
9
+ "title": "",
10
+ "sections": [
11
+ {
12
+ "heading": "Added - cc CLI 0.166.143: local compute and pending task creation (candidate, 2026-11-06)",
13
+ "body": "- Pair Session Core 0.3.26, Open VSX 0.37.179 and JetBrains 0.4.196 after exact-source three-OS gates and OIDC upstream publication/readback.\n- Add local OpenAI-compatible platform choices (LEXDATA / vLLM / SGLang) in both IDEs, optional platform credentials, explicit HTTP consent and atomic configuration/readback; do not reuse old target credentials when switching keyless endpoints.\n- Add controlled goal task-creation request files, v6 pending-draft connections and the admitted project-delivery-assistant 0.3.0 declaration; native preview/confirmation and matching desktop support remain required.\n- Desktop source also includes per-call governed Ollama, Volcengine and private OpenAI drafting, Memory output authorization and durable no-retry recovery. This release does not publish desktop/mobile clients.\n- Preserve the two synthetic real Volcengine cases (1,176 tokens, unknown cost) separately from the 374 focused regressions/22 checks. LEXDATA actual inference, real GUI and independent business-effect acceptance remain unverified."
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ "productVersion": null,
19
+ "cliVersion": "0.166.142",
20
+ "cliVersions": ["0.166.142"],
21
+ "date": "2026-11-05",
22
+ "title": "",
23
+ "sections": [
24
+ {
25
+ "heading": "Added - cc CLI 0.166.142: authorized goal events and retained recovery (released, 2026-11-05)",
26
+ "body": "- Add standalone status and separately authorized native risk/action observation, plus a transactional retained event journal in Session Core 0.3.25.\n- Add one-page CLI replay with durable new/resume checkpoints, at-least-once delivery, and explicit VS Code / JetBrains recovery controls.\n- Compose the data-only project-delivery-assistant 0.2.0 scenario with full declaration consent and per-operation capability limits; native confirmation remains separate from pending drafts.\n- Pair Open VSX 0.37.178 and JetBrains 0.4.195 only after the exact-source CLI matrices, OIDC publication and public package verification. Real GUI and business-effect acceptance remain separate."
27
+ }
28
+ ]
29
+ },
4
30
  {
5
31
  "productVersion": null,
6
32
  "cliVersion": "0.166.141",
@@ -121,11 +121,12 @@
121
121
  },
122
122
  {
123
123
  "id": "custom",
124
- "label": "Custom provider (vLLM / TGI / compatible service)",
125
- "cliLabel": "自定义 Provider (自建服务/vLLM/TGI等)",
124
+ "label": "Local compute / OpenAI compatible (LEXDATA / vLLM / SGLang)",
125
+ "cliLabel": "本地算力平台 / OpenAI 兼容 (力数/vLLM/SGLang等)",
126
126
  "baseUrl": "",
127
127
  "defaultModel": "",
128
- "needsKey": true
128
+ "needsKey": false,
129
+ "visionModel": ""
129
130
  }
130
131
  ]
131
132
  }