chainlesschain 0.166.142 → 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 (169) hide show
  1. package/README.md +107 -2
  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 +211 -177
  155. package/src/commands/setup.js +17 -0
  156. package/src/data/changelog.json +14 -1
  157. package/src/lib/llm-onboarding-catalog.json +4 -3
  158. package/src/lib/plugin-runtime/cli-goal-capabilities.js +1 -0
  159. package/src/lib/plugin-runtime/cli-goal-draft-request.js +24 -10
  160. package/src/lib/plugin-runtime/cli-goal-drafts.js +77 -30
  161. package/src/lib/plugin-runtime/examples/goal-task-creator/README.md +60 -0
  162. package/src/lib/plugin-runtime/examples/goal-task-creator/plugin.json +13 -0
  163. package/src/lib/plugin-runtime/examples/project-delivery-assistant/README.md +47 -14
  164. package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +8 -7
  165. package/src/lib/plugin-runtime/goal-extensions.js +1 -0
  166. package/src/lib/project-goal-connection.js +15 -3
  167. package/src/lib/project-goal-draft-connection.js +18 -11
  168. package/src/assets/web-panel/assets/index-C101Sec6.js +0 -1
  169. 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,
@@ -333,9 +331,8 @@ export function registerGoalCommand(program) {
333
331
  };
334
332
  const json = options.json;
335
333
  try {
336
- const { replayCliGoalEvents } = await import(
337
- "../lib/plugin-runtime/cli-goal-event-history.js"
338
- );
334
+ const { replayCliGoalEvents } =
335
+ await import("../lib/plugin-runtime/cli-goal-event-history.js");
339
336
  await replayCliGoalEvents(id, selection, async (page) => {
340
337
  const output = json
341
338
  ? JSON.stringify(page) + "\n"
@@ -447,197 +444,234 @@ export function registerGoalCommand(program) {
447
444
  }
448
445
  });
449
446
 
450
- goal
451
- .command("draft-request <id>")
452
- .description(
453
- "Export an untrusted description request for explicit desktop adoption",
454
- )
455
- .requiredOption(
456
- "--connection <file>",
457
- "Read one explicitly connected desktop goal",
458
- )
459
- .requiredOption("--plugin <name>", "Select the installed proposal plugin")
460
- .requiredOption(
461
- "--scope <scope>",
462
- "Select its user, project or local scope",
463
- )
464
- .requiredOption(
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",
480
- )
481
- .option(
482
- "--expected-store <storeId>",
483
- "Require the selected project goal store",
484
- )
485
- .option("--json", "Output the export result; no native draft is created")
486
- .action(async (id, options) => {
487
- try {
488
- const { exportCliGoalDraftRequest } = await import(
489
- "../lib/plugin-runtime/cli-goal-draft-request.js"
490
- );
491
- const result = await exportCliGoalDraftRequest(id, options);
492
- if (options.json) console.log(JSON.stringify(result, null, 2));
493
- else
494
- logger.log(
495
- stripVTControlCharacters(
496
- `Request exported: ${result.file}\nNo native draft has been saved. Import this file in the desktop and review the full text. Request: ${result.requestId}`,
497
- ),
498
- );
499
- } catch (error) {
500
- fail("draft-request", error);
501
- }
502
- });
503
-
504
- goal
505
- .command("draft-access")
506
- .description(
507
- "Export a plugin label for separate native pending-draft authorization",
508
- )
509
- .requiredOption(
510
- "--plugin <name>",
511
- "Select an installed, trusted proposal plugin",
512
- )
513
- .requiredOption(
514
- "--scope <scope>",
515
- "Its user, project or local installation scope",
516
- )
517
- .requiredOption(
518
- "--out <file>",
519
- "New access request file; contains no native authority",
520
- )
521
- .option("--json", "Output the access export result as JSON")
522
- .action(async (options) => {
523
- const captured = {
524
- ...options,
525
- cwd: process.cwd(),
526
- env: { ...process.env },
527
- };
528
- try {
529
- const { exportCliGoalDraftAccess } = await import(
530
- "../lib/plugin-runtime/cli-goal-drafts.js"
531
- );
532
- const result = await exportCliGoalDraftAccess(captured);
533
- if (captured.json) console.log(JSON.stringify(result, null, 2));
534
- else
535
- logger.log(
536
- stripVTControlCharacters(
537
- `Access request exported: ${result.file}\nOpen it in the desktop for separate native authorization; this file grants no permission.`,
538
- ),
539
- );
540
- } catch (error) {
541
- fail("draft-access", error);
542
- }
543
- });
544
-
545
- for (const [name, description] of [
546
- [
547
- "draft-sources",
548
- "Read current source IDs under a v3 pending-draft connection",
549
- ],
550
- [
551
- "draft-send",
552
- "Save one pending suggestion with a durable submission reference",
553
- ],
554
- ["draft-receipt", "Reconcile a recorded submission without resending it"],
555
- ]) {
556
- const command = goal
557
- .command(`${name} <id>`)
558
- .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
+ )
559
455
  .requiredOption(
560
456
  "--connection <file>",
561
- "Separately authorized v3 desktop pending-draft connection",
457
+ "Read one explicitly connected desktop goal",
562
458
  )
459
+ .requiredOption("--plugin <name>", "Select the installed proposal plugin")
563
460
  .requiredOption(
564
- "--plugin <name>",
565
- "Select the exact installed proposal plugin",
461
+ "--scope <scope>",
462
+ "Select its user, project or local scope",
566
463
  )
567
464
  .requiredOption(
568
- "--scope <scope>",
569
- "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",
570
480
  )
571
481
  .option(
572
482
  "--expected-store <storeId>",
573
483
  "Require the selected project goal store",
574
484
  )
575
- .option("--json", "Output the bounded result as JSON");
576
- if (name === "draft-sources")
577
- command.option(
578
- "--after <cursor>",
579
- "Continue after a returned source cursor",
580
- );
581
- else
582
- command.requiredOption(
583
- "--record <file>",
584
- "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",
585
510
  );
586
- if (name === "draft-send")
587
- 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
+ )
588
576
  .requiredOption(
589
- "--source <proposalId>",
590
- "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",
591
581
  )
592
582
  .requiredOption(
593
- "--request-id <id>",
594
- "Stable request identity; preserve it when querying an unknown result",
583
+ "--plugin <name>",
584
+ "Select the exact installed proposal plugin",
595
585
  )
596
- .requiredOption("--title <text>", "Pending suggestion title")
597
586
  .requiredOption(
598
- "--description-file <file>",
599
- "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",
600
599
  );
601
- command.action(async (id, options) => {
602
- const captured = {
603
- ...options,
604
- cwd: process.cwd(),
605
- env: { ...process.env },
606
- };
607
- try {
608
- const host = await import("../lib/plugin-runtime/cli-goal-drafts.js");
609
- const run =
610
- name === "draft-sources"
611
- ? host.readCliGoalDraftSources
612
- : name === "draft-send"
613
- ? host.sendCliGoalDraft
614
- : host.readCliGoalDraftReceipt;
615
- const result = await run(id, captured);
616
- if (captured.json) console.log(JSON.stringify(result, null, 2));
617
- else if (name === "draft-sources") {
618
- 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
619
660
  logger.log(
620
661
  stripVTControlCharacters(
621
- `${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}`,
622
665
  ),
623
666
  );
624
- logger.log(
625
- `Scanned ${result.sources.scannedCount}; unavailable ${result.sources.unavailableCount}.`,
667
+ } catch (error) {
668
+ fail(
669
+ creation ? name.replace("draft-", "draft-create-") : name,
670
+ error,
626
671
  );
627
- if (result.sources.nextCursor)
628
- logger.log(`Next cursor: ${result.sources.nextCursor}`);
629
- } else
630
- logger.log(
631
- stripVTControlCharacters(
632
- result.state === "saved"
633
- ? `Pending suggestion saved: ${result.proposalId}\nTask modification still requires native preview and confirmation. Reference: ${result.record}`
634
- : `${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}`,
635
- ),
636
- );
637
- } catch (error) {
638
- fail(name, error);
639
- }
640
- });
672
+ }
673
+ });
674
+ }
641
675
  }
642
676
 
643
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,19 @@
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
+ },
4
17
  {
5
18
  "productVersion": null,
6
19
  "cliVersion": "0.166.142",
@@ -9,7 +22,7 @@
9
22
  "title": "",
10
23
  "sections": [
11
24
  {
12
- "heading": "Added - cc CLI 0.166.142: authorized goal events and retained recovery (candidate, 2026-11-05)",
25
+ "heading": "Added - cc CLI 0.166.142: authorized goal events and retained recovery (released, 2026-11-05)",
13
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."
14
27
  }
15
28
  ]
@@ -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
  }
@@ -8,6 +8,7 @@ export const CLI_GOAL_CAPABILITIES = Object.freeze([
8
8
  "panel:goal.summary",
9
9
  "panel:goal.evidence",
10
10
  "proposal:task.description.update",
11
+ "proposal:task.create",
11
12
  ]);
12
13
 
13
14
  export function cliGoalExtensionHost(activeCapabilities) {
@@ -3,9 +3,11 @@ import path from "node:path";
3
3
  import { cliGoalExtensionHost } from "./cli-goal-capabilities.js";
4
4
  import { createProjectGoalConnection } from "../project-goal-connection.js";
5
5
  import { collectGoalExtensions } from "./goal-extensions.js";
6
- import { createGoalDraftRequest } from "@chainlesschain/session-core/goal-draft-request-contract";
6
+ import {
7
+ createGoalDraftRequest,
8
+ createGoalTaskCreateRequest,
9
+ } from "@chainlesschain/session-core/goal-draft-request-contract";
7
10
  import { digestBusinessObjectContent as digest } from "@chainlesschain/session-core/business-object-contract";
8
- const HOST = cliGoalExtensionHost(["proposal:task.description.update"]);
9
11
  function fail(code) {
10
12
  throw new Error(code);
11
13
  }
@@ -49,12 +51,19 @@ export function readGoalDraftDescription(file) {
49
51
  }
50
52
  }
51
53
  export async function exportCliGoalDraftRequest(id, options = {}) {
54
+ return exportRequest(id, options, false);
55
+ }
56
+ export async function exportCliGoalTaskCreateRequest(id, options = {}) {
57
+ return exportRequest(id, options, true);
58
+ }
59
+ async function exportRequest(id, options, creation) {
52
60
  options = Object.freeze({
53
61
  ...options,
54
62
  env: Object.freeze({ ...(options.env || process.env) }),
55
63
  });
56
64
  const cwd = path.resolve(options.cwd || process.cwd()),
57
65
  env = Object.freeze({ ...(options.env || process.env) });
66
+ const type = creation ? "task.create" : "task.description.update";
58
67
  if (
59
68
  !options.connection ||
60
69
  !options.plugin ||
@@ -73,7 +82,7 @@ export async function exportCliGoalDraftRequest(id, options = {}) {
73
82
  const hostOptions = {
74
83
  cwd,
75
84
  env,
76
- host: HOST,
85
+ host: cliGoalExtensionHost([`proposal:${type}`]),
77
86
  managedSettingsFile: options.managedSettingsFile,
78
87
  };
79
88
  const admitted = () =>
@@ -81,12 +90,11 @@ export async function exportCliGoalDraftRequest(id, options = {}) {
81
90
  (entry) => entry.name === options.plugin && entry.scope === options.scope,
82
91
  );
83
92
  const plugin = admitted();
84
- if (
85
- !plugin ||
86
- !plugin.declaration.proposals.includes("task.description.update")
87
- )
93
+ if (!plugin || !plugin.declaration.proposals.includes(type))
88
94
  fail("GOAL_DRAFT_PLUGIN_NOT_ADMITTED");
89
- const request = createGoalDraftRequest({
95
+ const request = (
96
+ creation ? createGoalTaskCreateRequest : createGoalDraftRequest
97
+ )({
90
98
  declaredPlugin: {
91
99
  name: plugin.name,
92
100
  scope: plugin.scope,
@@ -94,7 +102,8 @@ export async function exportCliGoalDraftRequest(id, options = {}) {
94
102
  },
95
103
  declarationDigest: digest(plugin.declaration),
96
104
  proposal: {
97
- type: "task.description.update",
105
+ type,
106
+ ...(creation ? { taskType: options.taskType } : {}),
98
107
  goalRef: snapshot.goalRef,
99
108
  sourceRef: options.source,
100
109
  requestId: options.requestId,
@@ -123,12 +132,17 @@ export async function exportCliGoalDraftRequest(id, options = {}) {
123
132
  fs.closeSync(fd);
124
133
  }
125
134
  return {
126
- schema: "chainlesschain.goal-draft-export/v1",
135
+ schema: creation
136
+ ? "chainlesschain.goal-task-create-export/v1"
137
+ : "chainlesschain.goal-draft-export/v1",
127
138
  state: "request-exported",
128
139
  goalRef: request.proposal.goalRef,
129
140
  declaredPlugin: request.declaredPlugin,
130
141
  requestId: request.proposal.requestId,
131
142
  contentDigest: request.contentDigest,
132
143
  file,
144
+ ...(creation
145
+ ? { type: "task.create", taskType: request.proposal.taskType }
146
+ : {}),
133
147
  };
134
148
  }