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.
- package/README.md +249 -14
- package/package.json +2 -2
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-BefmcZw2.js → AIOps-DNySV2Kf.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BBlS9rmj.js → ActionButton-ByFuxJsa.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DfNjXT9e.js → Analytics-ETbdywk5.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-CIBZPPMS.js → AppLayout-CuHekZaP.js} +2 -2
- package/src/assets/web-panel/assets/{Artifacts-CE66rTTZ.js → Artifacts-BJJq2BDq.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DOC8Lt8U.js → Audit-DXrietv8.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-9TMG041Q.js → BackgroundAgents-CFB1fxsr.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-us3KWb9F.js → Backup-VLtflRmp.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-D6Q95Wr5.js → BaseInput-BbqBaS2r.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BPrM5ARp.js → Chat-t0g7BXL8.js} +1 -1
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-Drs9vSc4.js → ChatBubbleRenderer-JNFsjV0j.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DqZGMV0o.js → Checkbox-BCSclHQb.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CmolL6wr.js → Codegen-BcyINEHT.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BwHSmoYQ.js → Col-C-0WNlwS.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DGWqobpd.js → Community-DxZeoORX.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-t_yy09-r.js → Compact-BNnX4jpz.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-D0S8-EsN.js → Compliance-KnjHtn9C.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Y1LiuRwP.js → Cowork-CDyCrhbX.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-FTqEw7QV.js → Cron-DxpS3D1G.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-C3rPZ4Qu.js → Crosschain-BSzTZYyc.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Ba2zySM-.js → DID-Bfj9Vdne.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-D6xyN2ND.js → Dashboard-CcERVdgo.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BF4QuXJw.js → Dropdown-BtYXAz6E.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-s9dUxq14.js → EmailListRenderer-fdCMeGXU.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-CoAKOfqZ.js → EvolutionSettings-LHxhcuF2.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CEznwH1c.js → FamilyGuardDashboard-MIgtLsos.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-rIzOt8-a.js → Federation-9-TOztwa.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BARFiExr.js → FormItemContext-BKcwEE6w.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DI0A4swS.js → GenericCardRenderer-DJBPVUK2.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DdmysND4.js → Git-C_XYISjG.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-DrdhwUz2.js → Governance-DWsbPrwq.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-Scm8tumd.js → Inference-D0_bYket.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-_6bgPs4W.js → KnowledgeGraph-BoA3VQlw.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DW_v7bSo.js → Logs-LEGItChf.js} +1 -1
- package/src/assets/web-panel/assets/{MarkdownRenderer-7JABuv1j.js → MarkdownRenderer-DOHVc-Uw.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-0h3YSvME.js → Marketplace-BKovl9NH.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Byrg0Y3e.js → McpTools-D61ktoGb.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-Cyoq-o29.js → Memory-CllorS0l.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-ISIlploU.js → MobileBridge-D-dJ78bk.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-04EncaRx.js → MobileProjects-CaxMKkd3.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BMzkpyOF.js → Mtc-qEc62Qsx.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-Cx7BR5sz.js → MtcAudit-BY68jOZJ.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-D4pmkSX4.js → Multisig-eCCR8ELt.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-CCfaaWNu.js → NLProgramming-VtGv8pky.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Mq-1ZyaH.js → Notes-CPkYQySe.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-rzf5V1TR.js → NotificationSettings-BuAvlHUu.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-OREUs5ue.js → OrderTableRenderer-CLf_HAGv.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BQfOATgw.js → Organization-DjujhMbD.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-D7Pa6aaA.js → Overflow-RznznTS4.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CaJ79ZsC.js → P2P-DSa5ot0t.js} +1 -1
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CtimQQN3.js → PdhVaultBrowser-oSEh6vkf.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-AzmmkLZ0.js → Permissions-CdOZguX9.js} +1 -1
- package/src/assets/web-panel/assets/{PersonalDataHub-BRU8ME7z.js → PersonalDataHub-B4--6iEF.js} +1 -1
- package/src/assets/web-panel/assets/{Pipeline-BnNqutXh.js → Pipeline-BnI57jE8.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-gMyZcxsz.js → Privacy-C8MId3ad.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-CkK-Fvr0.js → ProjectInit-DPGyYO8a.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-CGY_uiIX.js → ProjectSettings-qBMqaJaO.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-DBNC7xXG.js → Projects-Bq87Syce.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BVgWawtE.js → Providers-CVuG9Ugf.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DZILESCa.js → QrScannerModal-C94c8m3q.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DwRBzFWW.js → QuickAsk-BvfsXZ8s.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B3VxvUih.js → Recommend-CoezBYH9.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DM74lufU.js → RemoteSession-CcYC4v3u.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-DOOEuGHh.js → Reputation-diDbL4cO.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BZJYAo0S.js → Row-5qp3_fNS.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CYw44jcD.js → RssFeed-BCsMvpV4.js} +1 -1
- package/src/assets/web-panel/assets/{Search-CbypjDNG.js → Search-Br9nVxOp.js} +1 -1
- package/src/assets/web-panel/assets/{Security-0rSBDrXh.js → Security-BdOUzRfA.js} +1 -1
- package/src/assets/web-panel/assets/{Services-kqP79CBD.js → Services-Cp9TqzyN.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-BjxvGVfI.js → Skeleton-DSdWsUMR.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-SOoWyPCO.js → Skills-DRczAMTe.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-kdRVAT19.js → Sla-B6G_Vd8N.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DILtcMaJ.js → SpeechSettings-BCcLx5x4.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-C98Jauc4.js → SyncSettings-BFhwtxCp.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-Bw-KaQAs.js → Tasks-DGRE6VHO.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-CDJ027Hd.js → Templates-CJkJRFzd.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BqNV62UA.js → Tenant-CAOv6p00.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-B8aQ3GLO.js → Terminal-CDrwwrKj.js} +1 -1
- package/src/assets/web-panel/assets/{TimelineRenderer-BSpccq11.js → TimelineRenderer-DI0YE2SN.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BbGMoFO6.js → Tokens-DmqWTZSG.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-D75Mawa_.js → Trigger-CkXkhmjk.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BiK_Pk05.js → Trust-U8YJLcoJ.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-Dv2xX_b9.js → UkeySign-BLTozMmr.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CdBWfeEE.js → VideoEditing-DHKyFlZa.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Cvrp4agg.js → Wallet-DapBxIQt.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-D0Htlf3v.js → WebAuthn-CkvG3yOr.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-nuUBOHIF.js → WorkflowEditor-cNLsinXP.js} +1 -1
- package/src/assets/web-panel/assets/{chat-C6MLShIo.js → chat-BzgkgfMC.js} +1 -1
- package/src/assets/web-panel/assets/{colors-9G5FqFOC.js → colors-BPpVKQsb.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-0M49EurU.js → compact-item-zepznuTv.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CiDDLED_.js → createContext-BRto-SQH.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-wZvUczmn.js → hasIn-CqsmU_n6.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0JZ_ccM.js → index-B-bNzvdU.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_XOMujL.js → index-B0Z6rfV-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DwX9cOL6.js → index-B9_jRD2e.js} +1 -1
- package/src/assets/web-panel/assets/{index-DwUOiN8M.js → index-BEXKES7V.js} +1 -1
- package/src/assets/web-panel/assets/{index-8jz-X3xg.js → index-BGHd4D8F.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVV2mBbo.js → index-BLwY9y0X.js} +1 -1
- package/src/assets/web-panel/assets/{index-qJcOtd8J.js → index-B_l6gfDh.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6TAOS4G.js → index-BeBxP1M6.js} +1 -1
- package/src/assets/web-panel/assets/{index-C63qiwQz.js → index-BeSzdB7x.js} +1 -1
- package/src/assets/web-panel/assets/{index-k0BVfcwQ.js → index-BuBnM6Kz.js} +1 -1
- package/src/assets/web-panel/assets/{index-BXIY2BIN.js → index-Bz7pG8z3.js} +1 -1
- package/src/assets/web-panel/assets/{index-D51V5vmz.js → index-CBI-7Q3W.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWTcG128.js → index-CTk9gY88.js} +1 -1
- package/src/assets/web-panel/assets/{index-sBsJaBmM.js → index-CdHXVSZ4.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dclwd_lj.js → index-CmPnDXx4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlcOkfzz.js → index-CnezE05k.js} +1 -1
- package/src/assets/web-panel/assets/{index-DOxTmc3k.js → index-CwkhrUmw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cs66y4oC.js → index-CzoKAiyT.js} +3 -3
- package/src/assets/web-panel/assets/{index-BzeA3eRQ.js → index-DDPmr5Yr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdaLWIz-.js → index-DEbAW3Ec.js} +1 -1
- package/src/assets/web-panel/assets/{index-DvWRS-s7.js → index-DJSn3owP.js} +1 -1
- package/src/assets/web-panel/assets/{index-DN9t1qjW.js → index-DKa_jSfj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTCIIdoS.js → index-DUclk35X.js} +1 -1
- package/src/assets/web-panel/assets/{index-BmS2P_eX.js → index-DXkw-nt5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoxzvhoN.js → index-D_-w4KkD.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz1SAgnb.js → index-D_asIcU7.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfwJm0DU.js → index-Df_CY0We.js} +1 -1
- package/src/assets/web-panel/assets/{index-JhfNEldK.js → index-Dnvj_XU-.js} +1 -1
- package/src/assets/web-panel/assets/index-DruOFzuF.js +1 -0
- package/src/assets/web-panel/assets/{index-D9J_tLGk.js → index-DvGttIXQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcZxOXd8.js → index-JrVhUwyh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdUmgLxP.js → index-LVvzNdPa.js} +1 -1
- package/src/assets/web-panel/assets/{index-CTy9gD3m.js → index-Q5sAV7wp.js} +1 -1
- package/src/assets/web-panel/assets/{index-CtbFv3Et.js → index-S8fkzbQ_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCfxxScC.js → index-Z6DBe2RU.js} +1 -1
- package/src/assets/web-panel/assets/{index-dJ_V_Fqy.js → index-faHHtBKj.js} +1 -1
- package/src/assets/web-panel/assets/index-hhOrZ6HO.js +1 -0
- package/src/assets/web-panel/assets/{index-DeHSwWVG.js → index-w36TkwyO.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2wN6VIq.js → index-wbvZayBb.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DyIyjurJ.js → initDefaultProps-BlhbrsQk.js} +1 -1
- package/src/assets/web-panel/assets/{motion-B2D0PuTM.js → motion-UZx12NPM.js} +1 -1
- package/src/assets/web-panel/assets/{move-B22T5MnN.js → move-BTby5W4q.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-i4b7HNzF.js → mtc-parser-BOOaGiCg.js} +1 -1
- package/src/assets/web-panel/assets/{omit-ByNIr_gz.js → omit-BVylGzEr.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-_xP2RvxA.js → pickAttrs-Cp3Nflbr.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CVDvzK0z.js → placementArrow-BVXYvwH2.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CI1toXJ_.js → responsiveObserve-C67SbpBN.js} +1 -1
- package/src/assets/web-panel/assets/{slide-2_VosSRQ.js → slide-CnBvM22R.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CMiWWrZC.js → statusUtils-T8fy53tf.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DY8wTVCe.js → styleChecker-Bf7i4nlm.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DkdcgIyl.js → useFlexGapSupport-BUKk7jqw.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-gpl11PEF.js → useFs-T5lg6SpD.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DqnQ0H9y.js → usePersonalDataHub-Brvye8Tg.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CgY9xUvr.js → vnode-CK992ojP.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Ch0jan5_.js → zoom-CcABB_97.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/goal.js +340 -145
- package/src/commands/setup.js +17 -0
- package/src/data/changelog.json +26 -0
- package/src/lib/llm-onboarding-catalog.json +4 -3
- package/src/lib/plugin-runtime/cli-goal-capabilities.js +29 -0
- package/src/lib/plugin-runtime/cli-goal-draft-request.js +25 -15
- package/src/lib/plugin-runtime/cli-goal-drafts.js +78 -35
- package/src/lib/plugin-runtime/cli-goal-event-history.js +284 -0
- package/src/lib/plugin-runtime/cli-goal-events.js +175 -0
- package/src/lib/plugin-runtime/cli-goal-extension-host.js +21 -13
- package/src/lib/plugin-runtime/cli-project-goal-events.js +212 -0
- package/src/lib/plugin-runtime/examples/goal-project-observer/plugin.json +20 -0
- package/src/lib/plugin-runtime/examples/goal-status-observer/plugin.json +17 -0
- package/src/lib/plugin-runtime/examples/goal-task-creator/README.md +60 -0
- package/src/lib/plugin-runtime/examples/goal-task-creator/plugin.json +13 -0
- package/src/lib/plugin-runtime/examples/project-delivery-assistant/README.md +125 -0
- package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +8 -8
- package/src/lib/plugin-runtime/goal-extensions.js +17 -0
- package/src/lib/project-goal-connection.js +126 -30
- package/src/lib/project-goal-draft-connection.js +18 -11
- package/src/assets/web-panel/assets/index-C101Sec6.js +0 -1
- package/src/assets/web-panel/assets/index-D23TaGOp.js +0 -1
package/src/commands/goal.js
CHANGED
|
@@ -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 } =
|
|
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 } =
|
|
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("
|
|
288
|
+
.command("replay <id>")
|
|
291
289
|
.description(
|
|
292
|
-
"
|
|
290
|
+
"Read one retained event-history page and checkpoint acknowledged output",
|
|
293
291
|
)
|
|
294
292
|
.requiredOption(
|
|
295
293
|
"--connection <file>",
|
|
296
|
-
"
|
|
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
|
-
"--
|
|
309
|
-
"
|
|
297
|
+
"--checkpoint <file>",
|
|
298
|
+
"New or existing body-free event checkpoint",
|
|
310
299
|
)
|
|
311
|
-
.requiredOption("--
|
|
312
|
-
.
|
|
313
|
-
"--
|
|
314
|
-
"
|
|
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
|
-
"--
|
|
318
|
-
"
|
|
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
|
|
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 {
|
|
328
|
-
"../lib/plugin-runtime/cli-goal-
|
|
329
|
-
)
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
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("
|
|
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("
|
|
345
|
-
.description(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
"
|
|
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
|
-
.
|
|
387
|
+
.option(
|
|
353
388
|
"--scope <scope>",
|
|
354
|
-
"
|
|
389
|
+
"Select its user, project or local install scope",
|
|
355
390
|
)
|
|
356
|
-
.
|
|
357
|
-
"--
|
|
358
|
-
"
|
|
391
|
+
.option(
|
|
392
|
+
"--expected-store <storeId>",
|
|
393
|
+
"Require the store selected from goal catalog",
|
|
359
394
|
)
|
|
360
|
-
.option(
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
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
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
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 [
|
|
385
|
-
|
|
386
|
-
"draft-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
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
|
-
"
|
|
457
|
+
"Read one explicitly connected desktop goal",
|
|
401
458
|
)
|
|
459
|
+
.requiredOption("--plugin <name>", "Select the installed proposal plugin")
|
|
402
460
|
.requiredOption(
|
|
403
|
-
"--
|
|
404
|
-
"Select
|
|
461
|
+
"--scope <scope>",
|
|
462
|
+
"Select its user, project or local scope",
|
|
405
463
|
)
|
|
406
464
|
.requiredOption(
|
|
407
|
-
"--
|
|
408
|
-
"
|
|
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
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
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
|
-
|
|
426
|
-
|
|
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
|
-
"--
|
|
429
|
-
|
|
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
|
-
"--
|
|
433
|
-
"
|
|
583
|
+
"--plugin <name>",
|
|
584
|
+
"Select the exact installed proposal plugin",
|
|
434
585
|
)
|
|
435
|
-
.requiredOption("--title <text>", "Pending suggestion title")
|
|
436
586
|
.requiredOption(
|
|
437
|
-
"--
|
|
438
|
-
"
|
|
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
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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
|
-
|
|
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
|
-
|
|
464
|
-
|
|
667
|
+
} catch (error) {
|
|
668
|
+
fail(
|
|
669
|
+
creation ? name.replace("draft-", "draft-create-") : name,
|
|
670
|
+
error,
|
|
465
671
|
);
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
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");
|
package/src/commands/setup.js
CHANGED
|
@@ -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;
|
package/src/data/changelog.json
CHANGED
|
@@ -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": "
|
|
125
|
-
"cliLabel": "
|
|
124
|
+
"label": "Local compute / OpenAI compatible (LEXDATA / vLLM / SGLang)",
|
|
125
|
+
"cliLabel": "本地算力平台 / OpenAI 兼容 (力数/vLLM/SGLang等)",
|
|
126
126
|
"baseUrl": "",
|
|
127
127
|
"defaultModel": "",
|
|
128
|
-
"needsKey":
|
|
128
|
+
"needsKey": false,
|
|
129
|
+
"visionModel": ""
|
|
129
130
|
}
|
|
130
131
|
]
|
|
131
132
|
}
|