dreamcontext 0.9.0 → 0.9.1

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 (119) hide show
  1. package/dist/dashboard/assets/{BrainCanvas3D-hy-bJKIJ.js → BrainCanvas3D-BvuUW-Ij.js} +1 -1
  2. package/dist/dashboard/assets/{_baseUniq-DduL-UlQ.js → _baseUniq-BNAWiBFl.js} +1 -1
  3. package/dist/dashboard/assets/{ar-SA-G6X2FPQ2-CrmB7xfA.js → ar-SA-G6X2FPQ2-rNEb6-jN.js} +1 -1
  4. package/dist/dashboard/assets/{arc-sHUGY_nD.js → arc-DDLjNpXk.js} +1 -1
  5. package/dist/dashboard/assets/{architectureDiagram-Q4EWVU46-DgYle1Hc.js → architectureDiagram-Q4EWVU46-P208qO4N.js} +1 -1
  6. package/dist/dashboard/assets/{az-AZ-76LH7QW2-xoplM1zS.js → az-AZ-76LH7QW2-Dwql62JX.js} +1 -1
  7. package/dist/dashboard/assets/{bg-BG-XCXSNQG7-BF4iIrZQ.js → bg-BG-XCXSNQG7-BgteTNp8.js} +1 -1
  8. package/dist/dashboard/assets/{blockDiagram-DXYQGD6D-YPBR1t-F.js → blockDiagram-DXYQGD6D-BDSceoPt.js} +1 -1
  9. package/dist/dashboard/assets/{bn-BD-2XOGV67Q-KGLt7gMU.js → bn-BD-2XOGV67Q-BYJ6_efF.js} +1 -1
  10. package/dist/dashboard/assets/{c4Diagram-AHTNJAMY-B1KEuF7Q.js → c4Diagram-AHTNJAMY-CRbiwdrM.js} +1 -1
  11. package/dist/dashboard/assets/{ca-ES-6MX7JW3Y-BYuoubhq.js → ca-ES-6MX7JW3Y-CtFrXfas.js} +1 -1
  12. package/dist/dashboard/assets/channel-CJWWthUO.js +1 -0
  13. package/dist/dashboard/assets/{chunk-4BX2VUAB-BALrhoW_.js → chunk-4BX2VUAB-kqN0Cg_r.js} +1 -1
  14. package/dist/dashboard/assets/{chunk-4TB4RGXK-8uLOmmU8.js → chunk-4TB4RGXK-CpwYPUdR.js} +1 -1
  15. package/dist/dashboard/assets/{chunk-55IACEB6-D2hViX7K.js → chunk-55IACEB6-CQ_4M3g4.js} +1 -1
  16. package/dist/dashboard/assets/{chunk-EDXVE4YY-C9foqo-F.js → chunk-EDXVE4YY--HdVil0f.js} +1 -1
  17. package/dist/dashboard/assets/{chunk-FMBD7UC4-D1G0o3Ow.js → chunk-FMBD7UC4-CrbfOH-q.js} +1 -1
  18. package/dist/dashboard/assets/{chunk-OYMX7WX6-CiVziVyS.js → chunk-OYMX7WX6-BrcCZnqx.js} +1 -1
  19. package/dist/dashboard/assets/{chunk-QZHKN3VN-DE5GBsSY.js → chunk-QZHKN3VN-Cby58gGN.js} +1 -1
  20. package/dist/dashboard/assets/{chunk-YZCP3GAM-BpQQIx3b.js → chunk-YZCP3GAM-tvOjDART.js} +1 -1
  21. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-D8yKg5c-.js +1 -0
  22. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-D8yKg5c-.js +1 -0
  23. package/dist/dashboard/assets/clone-DkTWs9rv.js +1 -0
  24. package/dist/dashboard/assets/{cose-bilkent-S5V4N54A-KvwZaKE7.js → cose-bilkent-S5V4N54A-CuwbWQzD.js} +1 -1
  25. package/dist/dashboard/assets/{cs-CZ-2BRQDIVT-xYBULEJ9.js → cs-CZ-2BRQDIVT-DfVAwqqU.js} +1 -1
  26. package/dist/dashboard/assets/{da-DK-5WZEPLOC-DF2tyJRb.js → da-DK-5WZEPLOC-D1QJqNxG.js} +1 -1
  27. package/dist/dashboard/assets/{dagre-KV5264BT-Du_qjhF2.js → dagre-KV5264BT-Bbf-wMho.js} +1 -1
  28. package/dist/dashboard/assets/{de-DE-XR44H4JA-DlmZt5e9.js → de-DE-XR44H4JA-CbCdH8Mp.js} +1 -1
  29. package/dist/dashboard/assets/{diagram-5BDNPKRD-D7slatQr.js → diagram-5BDNPKRD-CvMJJUvv.js} +1 -1
  30. package/dist/dashboard/assets/{diagram-G4DWMVQ6-DiCZYy5B.js → diagram-G4DWMVQ6-BBz7ebE8.js} +1 -1
  31. package/dist/dashboard/assets/{diagram-MMDJMWI5-BxckEUHv.js → diagram-MMDJMWI5-U7IcL5ZQ.js} +1 -1
  32. package/dist/dashboard/assets/{diagram-TYMM5635-BGh7adH7.js → diagram-TYMM5635-BfTLwlSm.js} +1 -1
  33. package/dist/dashboard/assets/{el-GR-BZB4AONW-3_nYTnDJ.js → el-GR-BZB4AONW-DvGrscY6.js} +1 -1
  34. package/dist/dashboard/assets/{erDiagram-SMLLAGMA-Bgu7PR3l.js → erDiagram-SMLLAGMA-C1ncTn9B.js} +1 -1
  35. package/dist/dashboard/assets/{es-ES-U4NZUMDT-Blp-jVT8.js → es-ES-U4NZUMDT-BlawPkmw.js} +1 -1
  36. package/dist/dashboard/assets/{eu-ES-A7QVB2H4-DksJfC54.js → eu-ES-A7QVB2H4-p5lXDFKY.js} +1 -1
  37. package/dist/dashboard/assets/{fa-IR-HGAKTJCU-DgwscI8H.js → fa-IR-HGAKTJCU-DbY6Wzu9.js} +1 -1
  38. package/dist/dashboard/assets/{fi-FI-Z5N7JZ37-D5xWl1j1.js → fi-FI-Z5N7JZ37-HyRJneut.js} +1 -1
  39. package/dist/dashboard/assets/{flowDiagram-DWJPFMVM-DRYxEOwt.js → flowDiagram-DWJPFMVM-tySa4G4z.js} +1 -1
  40. package/dist/dashboard/assets/{fr-FR-RHASNOE6-C5ic6hfW.js → fr-FR-RHASNOE6-C0ElnhzM.js} +1 -1
  41. package/dist/dashboard/assets/{ganttDiagram-T4ZO3ILL-CNf0-tRS.js → ganttDiagram-T4ZO3ILL-BQsJPxAU.js} +1 -1
  42. package/dist/dashboard/assets/{gitGraphDiagram-UUTBAWPF-B-fWXvro.js → gitGraphDiagram-UUTBAWPF-B2jHjMzI.js} +1 -1
  43. package/dist/dashboard/assets/{gl-ES-HMX3MZ6V-CYsGLfzn.js → gl-ES-HMX3MZ6V-D5qSPU7d.js} +1 -1
  44. package/dist/dashboard/assets/{graph-CqM3kXVs.js → graph-deVQIt7H.js} +1 -1
  45. package/dist/dashboard/assets/{he-IL-6SHJWFNN-DZp7dZBD.js → he-IL-6SHJWFNN-CNsRxzJL.js} +1 -1
  46. package/dist/dashboard/assets/{hi-IN-IWLTKZ5I-DZ-8BLt8.js → hi-IN-IWLTKZ5I-CCLXIBWK.js} +1 -1
  47. package/dist/dashboard/assets/{hu-HU-A5ZG7DT2-cIzehzha.js → hu-HU-A5ZG7DT2-Dq17BfYB.js} +1 -1
  48. package/dist/dashboard/assets/{id-ID-SAP4L64H-CHmT4Y6G.js → id-ID-SAP4L64H-CRL19WJa.js} +1 -1
  49. package/dist/dashboard/assets/{index-WuRpIREk.js → index-BO_pjfQA.js} +1 -1
  50. package/dist/dashboard/assets/index-CQkBs_Vm.js +484 -0
  51. package/dist/dashboard/assets/index-aCkhI_aO.css +1 -0
  52. package/dist/dashboard/assets/{infoDiagram-42DDH7IO-zeTnmz1D.js → infoDiagram-42DDH7IO-DKXhFQx1.js} +1 -1
  53. package/dist/dashboard/assets/{ishikawaDiagram-UXIWVN3A-Bb756K5U.js → ishikawaDiagram-UXIWVN3A-ixuXBV9q.js} +1 -1
  54. package/dist/dashboard/assets/{it-IT-JPQ66NNP-D6lXGD0z.js → it-IT-JPQ66NNP-B-3gnXYZ.js} +1 -1
  55. package/dist/dashboard/assets/{ja-JP-DBVTYXUO-DyuGqonM.js → ja-JP-DBVTYXUO-GCqLTdC-.js} +1 -1
  56. package/dist/dashboard/assets/{journeyDiagram-VCZTEJTY-DFWvXLzk.js → journeyDiagram-VCZTEJTY-Cda6rfE1.js} +1 -1
  57. package/dist/dashboard/assets/{kaa-6HZHGXH3-oNCeqt-A.js → kaa-6HZHGXH3-DUr4YiJc.js} +1 -1
  58. package/dist/dashboard/assets/{kab-KAB-ZGHBKWFO-DfP6kptf.js → kab-KAB-ZGHBKWFO-DGcoDq7_.js} +1 -1
  59. package/dist/dashboard/assets/{kanban-definition-6JOO6SKY-DhKLuu7C.js → kanban-definition-6JOO6SKY-8II0TptL.js} +1 -1
  60. package/dist/dashboard/assets/{kk-KZ-P5N5QNE5-B63w7yii.js → kk-KZ-P5N5QNE5-OnQ3fZQr.js} +1 -1
  61. package/dist/dashboard/assets/{km-KH-HSX4SM5Z-C8nYbGAM.js → km-KH-HSX4SM5Z-BgLH2RAX.js} +1 -1
  62. package/dist/dashboard/assets/{ko-KR-MTYHY66A-D3wzPaIE.js → ko-KR-MTYHY66A-BFRlVzp3.js} +1 -1
  63. package/dist/dashboard/assets/{ku-TR-6OUDTVRD-C59UaChS.js → ku-TR-6OUDTVRD-KXxCpHg7.js} +1 -1
  64. package/dist/dashboard/assets/{layout-CtFtUFag.js → layout-Bk1_SQxF.js} +1 -1
  65. package/dist/dashboard/assets/{linear-DubzSxx7.js → linear-NBVeSfQr.js} +1 -1
  66. package/dist/dashboard/assets/{lt-LT-XHIRWOB4-C_buJu91.js → lt-LT-XHIRWOB4-zYih94tH.js} +1 -1
  67. package/dist/dashboard/assets/{lv-LV-5QDEKY6T-BhQWVAR-.js → lv-LV-5QDEKY6T-BfR2lGJU.js} +1 -1
  68. package/dist/dashboard/assets/{min-DcWdHBie.js → min-Czsp1-lf.js} +1 -1
  69. package/dist/dashboard/assets/{mindmap-definition-QFDTVHPH-BSWtNXnF.js → mindmap-definition-QFDTVHPH-B7iHNGK3.js} +1 -1
  70. package/dist/dashboard/assets/{mr-IN-CRQNXWMA-DEac6VeJ.js → mr-IN-CRQNXWMA-CbecgcF-.js} +1 -1
  71. package/dist/dashboard/assets/{my-MM-5M5IBNSE-DcSFgD6q.js → my-MM-5M5IBNSE-CsdHXw4v.js} +1 -1
  72. package/dist/dashboard/assets/{nb-NO-T6EIAALU-CMd5OV1y.js → nb-NO-T6EIAALU-r8FpCRvQ.js} +1 -1
  73. package/dist/dashboard/assets/{nl-NL-IS3SIHDZ-CX2kfxhY.js → nl-NL-IS3SIHDZ-Dp3Z4P6_.js} +1 -1
  74. package/dist/dashboard/assets/{nn-NO-6E72VCQL-MpSm1-uc.js → nn-NO-6E72VCQL-CQcuUlUa.js} +1 -1
  75. package/dist/dashboard/assets/{oc-FR-POXYY2M6-Nso9HjoJ.js → oc-FR-POXYY2M6-Dz9rwf28.js} +1 -1
  76. package/dist/dashboard/assets/{pa-IN-N4M65BXN-Bc_09DWN.js → pa-IN-N4M65BXN-AuAonL3w.js} +1 -1
  77. package/dist/dashboard/assets/{percentages-BXMCSKIN-DP6uG13u.js → percentages-BXMCSKIN-D9EnbREi.js} +7 -7
  78. package/dist/dashboard/assets/{pica-CMpqUhac.js → pica---loOZLP.js} +1 -1
  79. package/dist/dashboard/assets/{pieDiagram-DEJITSTG-BNsvSiV8.js → pieDiagram-DEJITSTG-CiDTXifX.js} +1 -1
  80. package/dist/dashboard/assets/{pl-PL-T2D74RX3-CJWz-KGN.js → pl-PL-T2D74RX3-4k9qJgDf.js} +1 -1
  81. package/dist/dashboard/assets/{pt-BR-5N22H2LF-DHX3cV6G.js → pt-BR-5N22H2LF-DvKuT6kK.js} +1 -1
  82. package/dist/dashboard/assets/{pt-PT-UZXXM6DQ-CU_RnGju.js → pt-PT-UZXXM6DQ-ijbr_1VI.js} +1 -1
  83. package/dist/dashboard/assets/{quadrantDiagram-34T5L4WZ-CnG8TUp0.js → quadrantDiagram-34T5L4WZ-Bu9Comci.js} +1 -1
  84. package/dist/dashboard/assets/{requirementDiagram-MS252O5E-CVzV4vf5.js → requirementDiagram-MS252O5E-D62TW6xA.js} +1 -1
  85. package/dist/dashboard/assets/{ro-RO-JPDTUUEW-aYl76VP7.js → ro-RO-JPDTUUEW-C0llzWmG.js} +1 -1
  86. package/dist/dashboard/assets/{ru-RU-B4JR7IUQ-B_y9bRe1.js → ru-RU-B4JR7IUQ-BeSwVB2r.js} +1 -1
  87. package/dist/dashboard/assets/{sankeyDiagram-XADWPNL6-CZLhklJg.js → sankeyDiagram-XADWPNL6-TlSEi12K.js} +1 -1
  88. package/dist/dashboard/assets/{sequenceDiagram-FGHM5R23-DjCIzK1N.js → sequenceDiagram-FGHM5R23-ScKG2Xsm.js} +1 -1
  89. package/dist/dashboard/assets/{si-LK-N5RQ5JYF-DYVfARgr.js → si-LK-N5RQ5JYF-DWeue3dw.js} +1 -1
  90. package/dist/dashboard/assets/{sk-SK-C5VTKIMK-B6Mg_bJ9.js → sk-SK-C5VTKIMK-C2sh3w4f.js} +1 -1
  91. package/dist/dashboard/assets/{sl-SI-NN7IZMDC-Ck2a-g0A.js → sl-SI-NN7IZMDC-CeXk9ucf.js} +1 -1
  92. package/dist/dashboard/assets/{stateDiagram-FHFEXIEX-D9Z-sJAh.js → stateDiagram-FHFEXIEX-BB1JoyXM.js} +1 -1
  93. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-BqR3Ofhf.js +1 -0
  94. package/dist/dashboard/assets/{subset-shared.chunk-CE199FVY.js → subset-shared.chunk-CWvpWWsn.js} +1 -1
  95. package/dist/dashboard/assets/{subset-worker.chunk-DKgKGIuW.js → subset-worker.chunk-D7Ec71V-.js} +1 -1
  96. package/dist/dashboard/assets/{sv-SE-XGPEYMSR-C9Hkuq3i.js → sv-SE-XGPEYMSR-8YPrynz7.js} +1 -1
  97. package/dist/dashboard/assets/{ta-IN-2NMHFXQM-IEhskXEC.js → ta-IN-2NMHFXQM-CmMKeEZv.js} +1 -1
  98. package/dist/dashboard/assets/{th-TH-HPSO5L25-DTb8f2Te.js → th-TH-HPSO5L25-BIxym374.js} +1 -1
  99. package/dist/dashboard/assets/{timeline-definition-GMOUNBTQ-n1YhmZQ4.js → timeline-definition-GMOUNBTQ-Cx1z6jhx.js} +1 -1
  100. package/dist/dashboard/assets/{tr-TR-DEFEU3FU-CnEnSvd1.js → tr-TR-DEFEU3FU-BZUk--nT.js} +1 -1
  101. package/dist/dashboard/assets/{uk-UA-QMV73CPH-CV5yaOns.js → uk-UA-QMV73CPH-DKP6R9nZ.js} +1 -1
  102. package/dist/dashboard/assets/{vennDiagram-DHZGUBPP-EZuBw-Y1.js → vennDiagram-DHZGUBPP-CHrTxlSz.js} +1 -1
  103. package/dist/dashboard/assets/{vi-VN-M7AON7JQ-C_pZqaaY.js → vi-VN-M7AON7JQ-D1tkx3Op.js} +1 -1
  104. package/dist/dashboard/assets/{wardley-RL74JXVD-CEAA3DK-.js → wardley-RL74JXVD-DuzpwUu5.js} +1 -1
  105. package/dist/dashboard/assets/{wardleyDiagram-NUSXRM2D-DhmpY-nw.js → wardleyDiagram-NUSXRM2D-x03tOVd0.js} +1 -1
  106. package/dist/dashboard/assets/{xychartDiagram-5P7HB3ND-BCfqQ3yb.js → xychartDiagram-5P7HB3ND-CufD9zuW.js} +1 -1
  107. package/dist/dashboard/assets/{zh-CN-LNUGB5OW-C9EPIaEx.js → zh-CN-LNUGB5OW-CpicUYEV.js} +1 -1
  108. package/dist/dashboard/assets/{zh-HK-E62DVLB3-RZGyfbKw.js → zh-HK-E62DVLB3-DyNkpg-N.js} +1 -1
  109. package/dist/dashboard/assets/{zh-TW-RAJ6MFWO-CfQ4KbkI.js → zh-TW-RAJ6MFWO-Cg30MEjI.js} +1 -1
  110. package/dist/dashboard/index.html +2 -2
  111. package/dist/index.js +553 -287
  112. package/package.json +1 -1
  113. package/dist/dashboard/assets/channel-BvyIgIvU.js +0 -1
  114. package/dist/dashboard/assets/classDiagram-6PBFFD2Q-B2f-mNIc.js +0 -1
  115. package/dist/dashboard/assets/classDiagram-v2-HSJHXN6E-B2f-mNIc.js +0 -1
  116. package/dist/dashboard/assets/clone-BOZwMwp7.js +0 -1
  117. package/dist/dashboard/assets/index-B_cYqPxr.js +0 -482
  118. package/dist/dashboard/assets/index-D1nedbBU.css +0 -1
  119. package/dist/dashboard/assets/stateDiagram-v2-QKLJ7IA2-nhVyYoyX.js +0 -1
package/dist/index.js CHANGED
@@ -25,9 +25,9 @@ var __export = (target, all) => {
25
25
  };
26
26
  var __copyProps = (to, from, except, desc) => {
27
27
  if (from && typeof from === "object" || typeof from === "function") {
28
- for (let key of __getOwnPropNames(from))
29
- if (!__hasOwnProp.call(to, key) && key !== except)
30
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
28
+ for (let key2 of __getOwnPropNames(from))
29
+ if (!__hasOwnProp.call(to, key2) && key2 !== except)
30
+ __defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
31
31
  }
32
32
  return to;
33
33
  };
@@ -1006,9 +1006,9 @@ var require_option = __commonJS({
1006
1006
  this.positiveOptions.set(option.attributeName(), option);
1007
1007
  }
1008
1008
  });
1009
- this.negativeOptions.forEach((value, key) => {
1010
- if (this.positiveOptions.has(key)) {
1011
- this.dualOptions.add(key);
1009
+ this.negativeOptions.forEach((value, key2) => {
1010
+ if (this.positiveOptions.has(key2)) {
1011
+ this.dualOptions.add(key2);
1012
1012
  }
1013
1013
  });
1014
1014
  }
@@ -1928,11 +1928,11 @@ Expecting one of '${allowedValues.join("', '")}'`);
1928
1928
  * @param {string} key
1929
1929
  * @return {object} value
1930
1930
  */
1931
- getOptionValue(key) {
1931
+ getOptionValue(key2) {
1932
1932
  if (this._storeOptionsAsProperties) {
1933
- return this[key];
1933
+ return this[key2];
1934
1934
  }
1935
- return this._optionValues[key];
1935
+ return this._optionValues[key2];
1936
1936
  }
1937
1937
  /**
1938
1938
  * Store option value.
@@ -1941,8 +1941,8 @@ Expecting one of '${allowedValues.join("', '")}'`);
1941
1941
  * @param {object} value
1942
1942
  * @return {Command} `this` command for chaining
1943
1943
  */
1944
- setOptionValue(key, value) {
1945
- return this.setOptionValueWithSource(key, value, void 0);
1944
+ setOptionValue(key2, value) {
1945
+ return this.setOptionValueWithSource(key2, value, void 0);
1946
1946
  }
1947
1947
  /**
1948
1948
  * Store option value and where the value came from.
@@ -1952,13 +1952,13 @@ Expecting one of '${allowedValues.join("', '")}'`);
1952
1952
  * @param {string} source - expected values are default/config/env/cli/implied
1953
1953
  * @return {Command} `this` command for chaining
1954
1954
  */
1955
- setOptionValueWithSource(key, value, source) {
1955
+ setOptionValueWithSource(key2, value, source) {
1956
1956
  if (this._storeOptionsAsProperties) {
1957
- this[key] = value;
1957
+ this[key2] = value;
1958
1958
  } else {
1959
- this._optionValues[key] = value;
1959
+ this._optionValues[key2] = value;
1960
1960
  }
1961
- this._optionValueSources[key] = source;
1961
+ this._optionValueSources[key2] = source;
1962
1962
  return this;
1963
1963
  }
1964
1964
  /**
@@ -1968,8 +1968,8 @@ Expecting one of '${allowedValues.join("', '")}'`);
1968
1968
  * @param {string} key
1969
1969
  * @return {string}
1970
1970
  */
1971
- getOptionValueSource(key) {
1972
- return this._optionValueSources[key];
1971
+ getOptionValueSource(key2) {
1972
+ return this._optionValueSources[key2];
1973
1973
  }
1974
1974
  /**
1975
1975
  * Get source of option value. See also .optsWithGlobals().
@@ -1978,11 +1978,11 @@ Expecting one of '${allowedValues.join("', '")}'`);
1978
1978
  * @param {string} key
1979
1979
  * @return {string}
1980
1980
  */
1981
- getOptionValueSourceWithGlobals(key) {
1981
+ getOptionValueSourceWithGlobals(key2) {
1982
1982
  let source;
1983
1983
  this._getCommandAndAncestors().forEach((cmd) => {
1984
- if (cmd.getOptionValueSource(key) !== void 0) {
1985
- source = cmd.getOptionValueSource(key);
1984
+ if (cmd.getOptionValueSource(key2) !== void 0) {
1985
+ source = cmd.getOptionValueSource(key2);
1986
1986
  }
1987
1987
  });
1988
1988
  return source;
@@ -2703,8 +2703,8 @@ Expecting one of '${allowedValues.join("', '")}'`);
2703
2703
  const result = {};
2704
2704
  const len = this.options.length;
2705
2705
  for (let i = 0; i < len; i++) {
2706
- const key = this.options[i].attributeName();
2707
- result[key] = key === this._versionOptionName ? this._version : this[key];
2706
+ const key2 = this.options[i].attributeName();
2707
+ result[key2] = key2 === this._versionOptionName ? this._version : this[key2];
2708
2708
  }
2709
2709
  return result;
2710
2710
  }
@@ -3624,7 +3624,7 @@ function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
3624
3624
  return 1;
3625
3625
  }
3626
3626
  if ("CI" in env) {
3627
- if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key) => key in env)) {
3627
+ if (["GITHUB_ACTIONS", "GITEA_ACTIONS", "CIRCLECI"].some((key2) => key2 in env)) {
3628
3628
  return 3;
3629
3629
  }
3630
3630
  if (["TRAVIS", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
@@ -3890,23 +3890,23 @@ var isUpKey, isDownKey, isSpaceKey, isBackspaceKey, isTabKey, isNumberKey, isEnt
3890
3890
  var init_key = __esm({
3891
3891
  "node_modules/@inquirer/core/dist/esm/lib/key.js"() {
3892
3892
  "use strict";
3893
- isUpKey = (key, keybindings = []) => (
3893
+ isUpKey = (key2, keybindings = []) => (
3894
3894
  // The up key
3895
- key.name === "up" || // Vim keybinding: hjkl keys map to left/down/up/right
3896
- keybindings.includes("vim") && key.name === "k" || // Emacs keybinding: Ctrl+P means "previous" in Emacs navigation conventions
3897
- keybindings.includes("emacs") && key.ctrl && key.name === "p"
3895
+ key2.name === "up" || // Vim keybinding: hjkl keys map to left/down/up/right
3896
+ keybindings.includes("vim") && key2.name === "k" || // Emacs keybinding: Ctrl+P means "previous" in Emacs navigation conventions
3897
+ keybindings.includes("emacs") && key2.ctrl && key2.name === "p"
3898
3898
  );
3899
- isDownKey = (key, keybindings = []) => (
3899
+ isDownKey = (key2, keybindings = []) => (
3900
3900
  // The down key
3901
- key.name === "down" || // Vim keybinding: hjkl keys map to left/down/up/right
3902
- keybindings.includes("vim") && key.name === "j" || // Emacs keybinding: Ctrl+N means "next" in Emacs navigation conventions
3903
- keybindings.includes("emacs") && key.ctrl && key.name === "n"
3901
+ key2.name === "down" || // Vim keybinding: hjkl keys map to left/down/up/right
3902
+ keybindings.includes("vim") && key2.name === "j" || // Emacs keybinding: Ctrl+N means "next" in Emacs navigation conventions
3903
+ keybindings.includes("emacs") && key2.ctrl && key2.name === "n"
3904
3904
  );
3905
- isSpaceKey = (key) => key.name === "space";
3906
- isBackspaceKey = (key) => key.name === "backspace";
3907
- isTabKey = (key) => key.name === "tab";
3908
- isNumberKey = (key) => "1234567890".includes(key.name);
3909
- isEnterKey = (key) => key.name === "enter" || key.name === "return";
3905
+ isSpaceKey = (key2) => key2.name === "space";
3906
+ isBackspaceKey = (key2) => key2.name === "backspace";
3907
+ isTabKey = (key2) => key2.name === "tab";
3908
+ isNumberKey = (key2) => "1234567890".includes(key2.name);
3909
+ isEnterKey = (key2) => key2.name === "enter" || key2.name === "return";
3910
3910
  }
3911
3911
  });
3912
3912
 
@@ -4512,9 +4512,9 @@ function isPlainObject(value) {
4512
4512
  function deepMerge(...objects) {
4513
4513
  const output = {};
4514
4514
  for (const obj of objects) {
4515
- for (const [key, value] of Object.entries(obj)) {
4516
- const prevValue = output[key];
4517
- output[key] = isPlainObject(prevValue) && isPlainObject(value) ? deepMerge(prevValue, value) : value;
4515
+ for (const [key2, value] of Object.entries(obj)) {
4516
+ const prevValue = output[key2];
4517
+ output[key2] = isPlainObject(prevValue) && isPlainObject(value) ? deepMerge(prevValue, value) : value;
4518
4518
  }
4519
4519
  }
4520
4520
  return output;
@@ -4643,9 +4643,9 @@ var require_cli_width = __commonJS({
4643
4643
  if (!options2) {
4644
4644
  return defaultOpts;
4645
4645
  }
4646
- Object.keys(defaultOpts).forEach(function(key) {
4647
- if (!options2[key]) {
4648
- options2[key] = defaultOpts[key];
4646
+ Object.keys(defaultOpts).forEach(function(key2) {
4647
+ if (!options2[key2]) {
4648
+ options2[key2] = defaultOpts[key2];
4649
4649
  }
4650
4650
  });
4651
4651
  return options2;
@@ -4938,8 +4938,8 @@ var require_conversions = __commonJS({
4938
4938
  "use strict";
4939
4939
  var cssKeywords = require_color_name();
4940
4940
  var reverseKeywords = {};
4941
- for (const key of Object.keys(cssKeywords)) {
4942
- reverseKeywords[cssKeywords[key]] = key;
4941
+ for (const key2 of Object.keys(cssKeywords)) {
4942
+ reverseKeywords[cssKeywords[key2]] = key2;
4943
4943
  }
4944
4944
  var convert = {
4945
4945
  rgb: { channels: 3, labels: "rgb" },
@@ -6141,12 +6141,12 @@ var require_lib = __commonJS({
6141
6141
  this._prompt = opts.prompt || null;
6142
6142
  this._hadControl = false;
6143
6143
  }
6144
- #destSrc(key, def) {
6144
+ #destSrc(key2, def) {
6145
6145
  if (this._dest) {
6146
- return this._dest[key];
6146
+ return this._dest[key2];
6147
6147
  }
6148
6148
  if (this._src) {
6149
- return this._src[key];
6149
+ return this._src[key2];
6150
6150
  }
6151
6151
  return def;
6152
6152
  }
@@ -6835,7 +6835,7 @@ var init_esm5 = __esm({
6835
6835
  disabledChoice: (text) => import_yoctocolors_cjs3.default.dim(`- ${text}`),
6836
6836
  renderSelectedChoices: (selectedChoices) => selectedChoices.map((choice) => choice.short).join(", "),
6837
6837
  description: (text) => import_yoctocolors_cjs3.default.cyan(text),
6838
- keysHelpTip: (keys) => keys.map(([key, action]) => `${import_yoctocolors_cjs3.default.bold(key)} ${import_yoctocolors_cjs3.default.dim(action)}`).join(import_yoctocolors_cjs3.default.dim(" \u2022 "))
6838
+ keysHelpTip: (keys) => keys.map(([key2, action]) => `${import_yoctocolors_cjs3.default.bold(key2)} ${import_yoctocolors_cjs3.default.dim(action)}`).join(import_yoctocolors_cjs3.default.dim(" \u2022 "))
6839
6839
  },
6840
6840
  helpMode: "always",
6841
6841
  keybindings: []
@@ -6865,8 +6865,8 @@ var init_esm5 = __esm({
6865
6865
  }, [items]);
6866
6866
  const [active, setActive] = useState(bounds.first);
6867
6867
  const [errorMsg, setError] = useState();
6868
- useKeypress(async (key) => {
6869
- if (isEnterKey(key)) {
6868
+ useKeypress(async (key2) => {
6869
+ if (isEnterKey(key2)) {
6870
6870
  const selection = items.filter(isChecked);
6871
6871
  const isValid = await validate([...selection]);
6872
6872
  if (required && !items.some(isChecked)) {
@@ -6877,25 +6877,25 @@ var init_esm5 = __esm({
6877
6877
  } else {
6878
6878
  setError(isValid || "You must select a valid value");
6879
6879
  }
6880
- } else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {
6881
- if (loop || isUpKey(key, keybindings) && active !== bounds.first || isDownKey(key, keybindings) && active !== bounds.last) {
6882
- const offset = isUpKey(key, keybindings) ? -1 : 1;
6880
+ } else if (isUpKey(key2, keybindings) || isDownKey(key2, keybindings)) {
6881
+ if (loop || isUpKey(key2, keybindings) && active !== bounds.first || isDownKey(key2, keybindings) && active !== bounds.last) {
6882
+ const offset = isUpKey(key2, keybindings) ? -1 : 1;
6883
6883
  let next = active;
6884
6884
  do {
6885
6885
  next = (next + offset + items.length) % items.length;
6886
6886
  } while (!isSelectable(items[next]));
6887
6887
  setActive(next);
6888
6888
  }
6889
- } else if (isSpaceKey(key)) {
6889
+ } else if (isSpaceKey(key2)) {
6890
6890
  setError(void 0);
6891
6891
  setItems(items.map((choice, i) => i === active ? toggle(choice) : choice));
6892
- } else if (key.name === shortcuts.all) {
6892
+ } else if (key2.name === shortcuts.all) {
6893
6893
  const selectAll = items.some((choice) => isSelectable(choice) && !choice.checked);
6894
6894
  setItems(items.map(check(selectAll)));
6895
- } else if (key.name === shortcuts.invert) {
6895
+ } else if (key2.name === shortcuts.invert) {
6896
6896
  setItems(items.map(toggle));
6897
- } else if (isNumberKey(key)) {
6898
- const selectedIndex = Number(key.name) - 1;
6897
+ } else if (isNumberKey(key2)) {
6898
+ const selectedIndex = Number(key2.name) - 1;
6899
6899
  let selectableIndex = -1;
6900
6900
  const position = items.findIndex((item) => {
6901
6901
  if (Separator.isSeparator(item))
@@ -12611,17 +12611,17 @@ var require_safer = __commonJS({
12611
12611
  var buffer = __require("buffer");
12612
12612
  var Buffer2 = buffer.Buffer;
12613
12613
  var safer = {};
12614
- var key;
12615
- for (key in buffer) {
12616
- if (!buffer.hasOwnProperty(key)) continue;
12617
- if (key === "SlowBuffer" || key === "Buffer") continue;
12618
- safer[key] = buffer[key];
12614
+ var key2;
12615
+ for (key2 in buffer) {
12616
+ if (!buffer.hasOwnProperty(key2)) continue;
12617
+ if (key2 === "SlowBuffer" || key2 === "Buffer") continue;
12618
+ safer[key2] = buffer[key2];
12619
12619
  }
12620
12620
  var Safer = safer.Buffer = {};
12621
- for (key in Buffer2) {
12622
- if (!Buffer2.hasOwnProperty(key)) continue;
12623
- if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
12624
- Safer[key] = Buffer2[key];
12621
+ for (key2 in Buffer2) {
12622
+ if (!Buffer2.hasOwnProperty(key2)) continue;
12623
+ if (key2 === "allocUnsafe" || key2 === "allocUnsafeSlow") continue;
12624
+ Safer[key2] = Buffer2[key2];
12625
12625
  }
12626
12626
  safer.Buffer.prototype = Buffer2.prototype;
12627
12627
  if (!Safer.from || Safer.from === Uint8Array.from) {
@@ -12724,9 +12724,9 @@ var require_merge_exports = __commonJS({
12724
12724
  "use strict";
12725
12725
  var hasOwn = typeof Object.hasOwn === "undefined" ? Function.call.bind(Object.prototype.hasOwnProperty) : Object.hasOwn;
12726
12726
  function mergeModules(target, module3) {
12727
- for (var key in module3) {
12728
- if (hasOwn(module3, key)) {
12729
- target[key] = module3[key];
12727
+ for (var key2 in module3) {
12728
+ if (hasOwn(module3, key2)) {
12729
+ target[key2] = module3[key2];
12730
12730
  }
12731
12731
  }
12732
12732
  }
@@ -16314,8 +16314,8 @@ var require_lib3 = __commonJS({
16314
16314
  enc = codecDef;
16315
16315
  break;
16316
16316
  case "object":
16317
- for (var key in codecDef) {
16318
- codecOptions[key] = codecDef[key];
16317
+ for (var key2 in codecDef) {
16318
+ codecOptions[key2] = codecDef[key2];
16319
16319
  }
16320
16320
  if (!codecOptions.encodingName) {
16321
16321
  codecOptions.encodingName = enc;
@@ -16669,11 +16669,11 @@ var init_esm7 = __esm({
16669
16669
  startEditor(rl);
16670
16670
  }
16671
16671
  }, []);
16672
- useKeypress((key, rl) => {
16672
+ useKeypress((key2, rl) => {
16673
16673
  if (status !== "idle") {
16674
16674
  return;
16675
16675
  }
16676
- if (isEnterKey(key)) {
16676
+ if (isEnterKey(key2)) {
16677
16677
  startEditor(rl);
16678
16678
  }
16679
16679
  });
@@ -16717,15 +16717,15 @@ var init_esm8 = __esm({
16717
16717
  const [value, setValue] = useState("");
16718
16718
  const theme = makeTheme(config.theme);
16719
16719
  const prefix = usePrefix({ status, theme });
16720
- useKeypress((key, rl) => {
16720
+ useKeypress((key2, rl) => {
16721
16721
  if (status !== "idle")
16722
16722
  return;
16723
- if (isEnterKey(key)) {
16723
+ if (isEnterKey(key2)) {
16724
16724
  const answer = getBooleanValue(value, config.default);
16725
16725
  setValue(transformer(answer));
16726
16726
  setStatus2("done");
16727
16727
  done(answer);
16728
- } else if (isTabKey(key)) {
16728
+ } else if (isTabKey(key2)) {
16729
16729
  const answer = boolToString(!getBooleanValue(value, config.default));
16730
16730
  rl.clearLine(0);
16731
16731
  rl.write(answer);
@@ -16777,11 +16777,11 @@ var init_esm9 = __esm({
16777
16777
  }
16778
16778
  return true;
16779
16779
  }
16780
- useKeypress(async (key, rl) => {
16780
+ useKeypress(async (key2, rl) => {
16781
16781
  if (status !== "idle") {
16782
16782
  return;
16783
16783
  }
16784
- if (isEnterKey(key)) {
16784
+ if (isEnterKey(key2)) {
16785
16785
  const answer = value || defaultValue;
16786
16786
  setStatus2("loading");
16787
16787
  const isValid = await validate(answer);
@@ -16798,9 +16798,9 @@ var init_esm9 = __esm({
16798
16798
  setError(isValid);
16799
16799
  setStatus2("idle");
16800
16800
  }
16801
- } else if (isBackspaceKey(key) && !value) {
16801
+ } else if (isBackspaceKey(key2) && !value) {
16802
16802
  setDefaultValue(void 0);
16803
- } else if (isTabKey(key) && !value) {
16803
+ } else if (isTabKey(key2) && !value) {
16804
16804
  setDefaultValue(void 0);
16805
16805
  rl.clearLine(0);
16806
16806
  rl.write(defaultValue);
@@ -16870,11 +16870,11 @@ var init_esm10 = __esm({
16870
16870
  const [defaultValue = "", setDefaultValue] = useState(validDefault);
16871
16871
  const [errorMsg, setError] = useState();
16872
16872
  const prefix = usePrefix({ status, theme });
16873
- useKeypress(async (key, rl) => {
16873
+ useKeypress(async (key2, rl) => {
16874
16874
  if (status !== "idle") {
16875
16875
  return;
16876
16876
  }
16877
- if (isEnterKey(key)) {
16877
+ if (isEnterKey(key2)) {
16878
16878
  const input2 = value || defaultValue;
16879
16879
  const answer = input2 === "" ? void 0 : Number(input2);
16880
16880
  setStatus2("loading");
@@ -16894,9 +16894,9 @@ var init_esm10 = __esm({
16894
16894
  setError(isValid || "You must provide a valid numeric value");
16895
16895
  setStatus2("idle");
16896
16896
  }
16897
- } else if (isBackspaceKey(key) && !value) {
16897
+ } else if (isBackspaceKey(key2) && !value) {
16898
16898
  setDefaultValue(void 0);
16899
- } else if (isTabKey(key) && !value) {
16899
+ } else if (isTabKey(key2) && !value) {
16900
16900
  setDefaultValue(void 0);
16901
16901
  rl.clearLine(0);
16902
16902
  rl.write(defaultValue);
@@ -17092,8 +17092,8 @@ var init_esm12 = __esm({
17092
17092
  }
17093
17093
  return { first, last };
17094
17094
  }, [choices]);
17095
- useKeypress((key, rl) => {
17096
- if (isEnterKey(key)) {
17095
+ useKeypress((key2, rl) => {
17096
+ if (isEnterKey(key2)) {
17097
17097
  const [selectedChoice] = getSelectedChoice(value, choices);
17098
17098
  if (isSelectableChoice(selectedChoice)) {
17099
17099
  setValue(selectedChoice.short);
@@ -17104,14 +17104,14 @@ var init_esm12 = __esm({
17104
17104
  } else {
17105
17105
  setError(`"${import_yoctocolors_cjs5.default.red(value)}" isn't an available option`);
17106
17106
  }
17107
- } else if (isUpKey(key) || isDownKey(key)) {
17107
+ } else if (isUpKey(key2) || isDownKey(key2)) {
17108
17108
  rl.clearLine(0);
17109
17109
  const [selectedChoice, active] = getSelectedChoice(value, choices);
17110
17110
  if (!selectedChoice) {
17111
- const firstChoice = isDownKey(key) ? choices.find(isSelectableChoice) : choices.findLast(isSelectableChoice);
17111
+ const firstChoice = isDownKey(key2) ? choices.find(isSelectableChoice) : choices.findLast(isSelectableChoice);
17112
17112
  setValue(firstChoice.key);
17113
- } else if (loop || isUpKey(key) && active !== bounds.first || isDownKey(key) && active !== bounds.last) {
17114
- const offset = isUpKey(key) ? -1 : 1;
17113
+ } else if (loop || isUpKey(key2) && active !== bounds.first || isDownKey(key2) && active !== bounds.last) {
17114
+ const offset = isUpKey(key2) ? -1 : 1;
17115
17115
  let next = active;
17116
17116
  do {
17117
17117
  next = (next + offset + choices.length) % choices.length;
@@ -17163,11 +17163,11 @@ var init_esm13 = __esm({
17163
17163
  const [errorMsg, setError] = useState();
17164
17164
  const [value, setValue] = useState("");
17165
17165
  const prefix = usePrefix({ status, theme });
17166
- useKeypress(async (key, rl) => {
17166
+ useKeypress(async (key2, rl) => {
17167
17167
  if (status !== "idle") {
17168
17168
  return;
17169
17169
  }
17170
- if (isEnterKey(key)) {
17170
+ if (isEnterKey(key2)) {
17171
17171
  const answer = value;
17172
17172
  setStatus2("loading");
17173
17173
  const isValid = await validate(answer);
@@ -17249,7 +17249,7 @@ var init_esm14 = __esm({
17249
17249
  disabled: (text) => import_yoctocolors_cjs6.default.dim(`- ${text}`),
17250
17250
  searchTerm: (text) => import_yoctocolors_cjs6.default.cyan(text),
17251
17251
  description: (text) => import_yoctocolors_cjs6.default.cyan(text),
17252
- keysHelpTip: (keys) => keys.map(([key, action]) => `${import_yoctocolors_cjs6.default.bold(key)} ${import_yoctocolors_cjs6.default.dim(action)}`).join(import_yoctocolors_cjs6.default.dim(" \u2022 "))
17252
+ keysHelpTip: (keys) => keys.map(([key2, action]) => `${import_yoctocolors_cjs6.default.bold(key2)} ${import_yoctocolors_cjs6.default.dim(action)}`).join(import_yoctocolors_cjs6.default.dim(" \u2022 "))
17253
17253
  },
17254
17254
  helpMode: "always"
17255
17255
  };
@@ -17294,8 +17294,8 @@ var init_esm14 = __esm({
17294
17294
  };
17295
17295
  }, [searchTerm]);
17296
17296
  const selectedChoice = searchResults[active];
17297
- useKeypress(async (key, rl) => {
17298
- if (isEnterKey(key)) {
17297
+ useKeypress(async (key2, rl) => {
17298
+ if (isEnterKey(key2)) {
17299
17299
  if (selectedChoice) {
17300
17300
  setStatus2("loading");
17301
17301
  const isValid = await validate(selectedChoice.value);
@@ -17312,14 +17312,14 @@ var init_esm14 = __esm({
17312
17312
  } else {
17313
17313
  rl.write(searchTerm);
17314
17314
  }
17315
- } else if (isTabKey(key) && selectedChoice) {
17315
+ } else if (isTabKey(key2) && selectedChoice) {
17316
17316
  rl.clearLine(0);
17317
17317
  rl.write(selectedChoice.name);
17318
17318
  setSearchTerm(selectedChoice.name);
17319
- } else if (status !== "loading" && (isUpKey(key) || isDownKey(key))) {
17319
+ } else if (status !== "loading" && (isUpKey(key2) || isDownKey(key2))) {
17320
17320
  rl.clearLine(0);
17321
- if (isUpKey(key) && active !== bounds.first || isDownKey(key) && active !== bounds.last) {
17322
- const offset = isUpKey(key) ? -1 : 1;
17321
+ if (isUpKey(key2) && active !== bounds.first || isDownKey(key2) && active !== bounds.last) {
17322
+ const offset = isUpKey(key2) ? -1 : 1;
17323
17323
  let next = active;
17324
17324
  do {
17325
17325
  next = (next + offset + searchResults.length) % searchResults.length;
@@ -17429,7 +17429,7 @@ var init_esm15 = __esm({
17429
17429
  style: {
17430
17430
  disabled: (text) => import_yoctocolors_cjs7.default.dim(`- ${text}`),
17431
17431
  description: (text) => import_yoctocolors_cjs7.default.cyan(text),
17432
- keysHelpTip: (keys) => keys.map(([key, action]) => `${import_yoctocolors_cjs7.default.bold(key)} ${import_yoctocolors_cjs7.default.dim(action)}`).join(import_yoctocolors_cjs7.default.dim(" \u2022 "))
17432
+ keysHelpTip: (keys) => keys.map(([key2, action]) => `${import_yoctocolors_cjs7.default.bold(key2)} ${import_yoctocolors_cjs7.default.dim(action)}`).join(import_yoctocolors_cjs7.default.dim(" \u2022 "))
17433
17433
  },
17434
17434
  helpMode: "always",
17435
17435
  indexMode: "hidden",
@@ -17459,22 +17459,22 @@ var init_esm15 = __esm({
17459
17459
  }, [config.default, items]);
17460
17460
  const [active, setActive] = useState(defaultItemIndex === -1 ? bounds.first : defaultItemIndex);
17461
17461
  const selectedChoice = items[active];
17462
- useKeypress((key, rl) => {
17462
+ useKeypress((key2, rl) => {
17463
17463
  clearTimeout(searchTimeoutRef.current);
17464
- if (isEnterKey(key)) {
17464
+ if (isEnterKey(key2)) {
17465
17465
  setStatus2("done");
17466
17466
  done(selectedChoice.value);
17467
- } else if (isUpKey(key, keybindings) || isDownKey(key, keybindings)) {
17467
+ } else if (isUpKey(key2, keybindings) || isDownKey(key2, keybindings)) {
17468
17468
  rl.clearLine(0);
17469
- if (loop || isUpKey(key, keybindings) && active !== bounds.first || isDownKey(key, keybindings) && active !== bounds.last) {
17470
- const offset = isUpKey(key, keybindings) ? -1 : 1;
17469
+ if (loop || isUpKey(key2, keybindings) && active !== bounds.first || isDownKey(key2, keybindings) && active !== bounds.last) {
17470
+ const offset = isUpKey(key2, keybindings) ? -1 : 1;
17471
17471
  let next = active;
17472
17472
  do {
17473
17473
  next = (next + offset + items.length) % items.length;
17474
17474
  } while (!isSelectable3(items[next]));
17475
17475
  setActive(next);
17476
17476
  }
17477
- } else if (isNumberKey(key) && !Number.isNaN(Number(rl.line))) {
17477
+ } else if (isNumberKey(key2) && !Number.isNaN(Number(rl.line))) {
17478
17478
  const selectedIndex = Number(rl.line) - 1;
17479
17479
  let selectableIndex = -1;
17480
17480
  const position = items.findIndex((item2) => {
@@ -17490,7 +17490,7 @@ var init_esm15 = __esm({
17490
17490
  searchTimeoutRef.current = setTimeout(() => {
17491
17491
  rl.clearLine(0);
17492
17492
  }, 700);
17493
- } else if (isBackspaceKey(key)) {
17493
+ } else if (isBackspaceKey(key2)) {
17494
17494
  rl.clearLine(0);
17495
17495
  } else if (searchEnabled) {
17496
17496
  const searchTerm = rl.line.toLowerCase();
@@ -18711,14 +18711,14 @@ var require_extend_shallow = __commonJS({
18711
18711
  return o;
18712
18712
  };
18713
18713
  function assign(a, b) {
18714
- for (var key in b) {
18715
- if (hasOwn(b, key)) {
18716
- a[key] = b[key];
18714
+ for (var key2 in b) {
18715
+ if (hasOwn(b, key2)) {
18716
+ a[key2] = b[key2];
18717
18717
  }
18718
18718
  }
18719
18719
  }
18720
- function hasOwn(obj, key) {
18721
- return Object.prototype.hasOwnProperty.call(obj, key);
18720
+ function hasOwn(obj, key2) {
18721
+ return Object.prototype.hasOwnProperty.call(obj, key2);
18722
18722
  }
18723
18723
  }
18724
18724
  });
@@ -18846,12 +18846,12 @@ var require_common = __commonJS({
18846
18846
  return [sequence];
18847
18847
  }
18848
18848
  function extend(target, source) {
18849
- var index, length, key, sourceKeys;
18849
+ var index, length, key2, sourceKeys;
18850
18850
  if (source) {
18851
18851
  sourceKeys = Object.keys(source);
18852
18852
  for (index = 0, length = sourceKeys.length; index < length; index += 1) {
18853
- key = sourceKeys[index];
18854
- target[key] = source[key];
18853
+ key2 = sourceKeys[index];
18854
+ target[key2] = source[key2];
18855
18855
  }
18856
18856
  }
18857
18857
  return target;
@@ -19756,10 +19756,10 @@ var require_set = __commonJS({
19756
19756
  var _hasOwnProperty = Object.prototype.hasOwnProperty;
19757
19757
  function resolveYamlSet(data) {
19758
19758
  if (data === null) return true;
19759
- var key, object = data;
19760
- for (key in object) {
19761
- if (_hasOwnProperty.call(object, key)) {
19762
- if (object[key] !== null) return false;
19759
+ var key2, object = data;
19760
+ for (key2 in object) {
19761
+ if (_hasOwnProperty.call(object, key2)) {
19762
+ if (object[key2] !== null) return false;
19763
19763
  }
19764
19764
  }
19765
19765
  return true;
@@ -20020,16 +20020,16 @@ var require_loader = __commonJS({
20020
20020
  (c - 65536 & 1023) + 56320
20021
20021
  );
20022
20022
  }
20023
- function setProperty(object, key, value) {
20024
- if (key === "__proto__") {
20025
- Object.defineProperty(object, key, {
20023
+ function setProperty(object, key2, value) {
20024
+ if (key2 === "__proto__") {
20025
+ Object.defineProperty(object, key2, {
20026
20026
  configurable: true,
20027
20027
  enumerable: true,
20028
20028
  writable: true,
20029
20029
  value
20030
20030
  });
20031
20031
  } else {
20032
- object[key] = value;
20032
+ object[key2] = value;
20033
20033
  }
20034
20034
  }
20035
20035
  var simpleEscapeCheck = new Array(256);
@@ -20131,16 +20131,16 @@ var require_loader = __commonJS({
20131
20131
  }
20132
20132
  }
20133
20133
  function mergeMappings(state, destination, source, overridableKeys) {
20134
- var sourceKeys, key, index, quantity;
20134
+ var sourceKeys, key2, index, quantity;
20135
20135
  if (!common2.isObject(source)) {
20136
20136
  throwError(state, "cannot merge mappings; the provided source object is unacceptable");
20137
20137
  }
20138
20138
  sourceKeys = Object.keys(source);
20139
20139
  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
20140
- key = sourceKeys[index];
20141
- if (!_hasOwnProperty.call(destination, key)) {
20142
- setProperty(destination, key, source[key]);
20143
- overridableKeys[key] = true;
20140
+ key2 = sourceKeys[index];
20141
+ if (!_hasOwnProperty.call(destination, key2)) {
20142
+ setProperty(destination, key2, source[key2]);
20143
+ overridableKeys[key2] = true;
20144
20144
  }
20145
20145
  }
20146
20146
  }
@@ -21710,8 +21710,8 @@ var require_utils2 = __commonJS({
21710
21710
  "use strict";
21711
21711
  var stripBom = require_strip_bom_string();
21712
21712
  var typeOf = require_kind_of();
21713
- exports2.define = function(obj, key, val) {
21714
- Reflect.defineProperty(obj, key, {
21713
+ exports2.define = function(obj, key2, val) {
21714
+ Reflect.defineProperty(obj, key2, {
21715
21715
  enumerable: false,
21716
21716
  configurable: true,
21717
21717
  writable: true,
@@ -23579,8 +23579,8 @@ var require_to_regex_range = __commonJS({
23579
23579
  function compare(a, b) {
23580
23580
  return a > b ? 1 : b > a ? -1 : 0;
23581
23581
  }
23582
- function contains(arr, key, val) {
23583
- return arr.some((ele) => ele[key] === val);
23582
+ function contains(arr, key2, val) {
23583
+ return arr.some((ele) => ele[key2] === val);
23584
23584
  }
23585
23585
  function countNines(min, len) {
23586
23586
  return Number(String(min).slice(0, -len) + "9".repeat(len));
@@ -26207,7 +26207,7 @@ var require_micromatch = __commonJS({
26207
26207
  }
26208
26208
  let keys = micromatch(Object.keys(obj), patterns, options2);
26209
26209
  let res = {};
26210
- for (let key of keys) res[key] = obj[key];
26210
+ for (let key2 of keys) res[key2] = obj[key2];
26211
26211
  return res;
26212
26212
  };
26213
26213
  micromatch.some = (list, patterns, options2) => {
@@ -26906,9 +26906,9 @@ var require_run_parallel = __commonJS({
26906
26906
  if (!pending) {
26907
26907
  done(null);
26908
26908
  } else if (keys) {
26909
- keys.forEach(function(key) {
26910
- tasks[key](function(err, result) {
26911
- each(key, err, result);
26909
+ keys.forEach(function(key2) {
26910
+ tasks[key2](function(err, result) {
26911
+ each(key2, err, result);
26912
26912
  });
26913
26913
  });
26914
26914
  } else {
@@ -30149,8 +30149,8 @@ function copyObsidianConfig(destDir) {
30149
30149
  }
30150
30150
  function replaceTokens(content, tokens) {
30151
30151
  let result = content;
30152
- for (const [key, value] of Object.entries(tokens)) {
30153
- result = result.replaceAll(`{{${key}}}`, value);
30152
+ for (const [key2, value] of Object.entries(tokens)) {
30153
+ result = result.replaceAll(`{{${key2}}}`, value);
30154
30154
  }
30155
30155
  return result;
30156
30156
  }
@@ -31373,12 +31373,12 @@ function registerFeaturesCommand(program2) {
31373
31373
  error(`Feature not found: ${name}`);
31374
31374
  return;
31375
31375
  }
31376
- const key = field.toLowerCase();
31376
+ const key2 = field.toLowerCase();
31377
31377
  const value = valueParts.join(" ").trim();
31378
31378
  const updates = {};
31379
- if (key === "tags" || key === "related_tasks" || key === "related-tasks") {
31380
- updates[key === "tags" ? "tags" : "related_tasks"] = parseCsv(value);
31381
- } else if (key === "status") {
31379
+ if (key2 === "tags" || key2 === "related_tasks" || key2 === "related-tasks") {
31380
+ updates[key2 === "tags" ? "tags" : "related_tasks"] = parseCsv(value);
31381
+ } else if (key2 === "status") {
31382
31382
  if (!VALID_FEATURE_STATUSES.includes(value)) {
31383
31383
  error(`Status must be one of: ${VALID_FEATURE_STATUSES.join(", ")}`);
31384
31384
  return;
@@ -31390,7 +31390,7 @@ function registerFeaturesCommand(program2) {
31390
31390
  }
31391
31391
  updates.updated = today();
31392
31392
  updateFrontmatterFields(file, updates);
31393
- success(`Set ${key} on ${basename5(file, ".md")}`);
31393
+ success(`Set ${key2} on ${basename5(file, ".md")}`);
31394
31394
  });
31395
31395
  features.command("insert").argument("<name>").argument(
31396
31396
  "<section>",
@@ -31979,23 +31979,23 @@ function filterTasks(tasks, filter = {}) {
31979
31979
  return true;
31980
31980
  });
31981
31981
  }
31982
- function groupRank(groupBy, key) {
31982
+ function groupRank(groupBy, key2) {
31983
31983
  if (groupBy === "priority") {
31984
- const i = PRIORITY_ORDER.indexOf(key.toLowerCase());
31984
+ const i = PRIORITY_ORDER.indexOf(key2.toLowerCase());
31985
31985
  return i === -1 ? 99 : i;
31986
31986
  }
31987
31987
  if (groupBy === "status") {
31988
- const i = STATUS_ORDER.indexOf(key.toLowerCase());
31988
+ const i = STATUS_ORDER.indexOf(key2.toLowerCase());
31989
31989
  return i === -1 ? 99 : i;
31990
31990
  }
31991
- return key === NONE_KEY[groupBy] ? 99 : 0;
31991
+ return key2 === NONE_KEY[groupBy] ? 99 : 0;
31992
31992
  }
31993
31993
  function groupTasks(tasks, groupBy) {
31994
31994
  const map = /* @__PURE__ */ new Map();
31995
- const push = (key, t) => {
31996
- const arr = map.get(key);
31995
+ const push = (key2, t) => {
31996
+ const arr = map.get(key2);
31997
31997
  if (arr) arr.push(t);
31998
- else map.set(key, [t]);
31998
+ else map.set(key2, [t]);
31999
31999
  };
32000
32000
  for (const t of tasks) {
32001
32001
  if (groupBy === "tag") {
@@ -32009,7 +32009,7 @@ function groupTasks(tasks, groupBy) {
32009
32009
  push(t.status || NONE_KEY.status, t);
32010
32010
  }
32011
32011
  }
32012
- return [...map.keys()].sort((a, b) => groupRank(groupBy, a) - groupRank(groupBy, b) || a.localeCompare(b, "en", { sensitivity: "base" })).map((key) => ({ key, tasks: map.get(key) }));
32012
+ return [...map.keys()].sort((a, b) => groupRank(groupBy, a) - groupRank(groupBy, b) || a.localeCompare(b, "en", { sensitivity: "base" })).map((key2) => ({ key: key2, tasks: map.get(key2) }));
32013
32013
  }
32014
32014
  function collectTags(tasks) {
32015
32015
  const counts = /* @__PURE__ */ new Map();
@@ -32064,19 +32064,23 @@ function isSafeTaskSlug(slug) {
32064
32064
  function hasBacklogTag(tags) {
32065
32065
  return Array.isArray(tags) && tags.some((t) => String(t).toLowerCase() === BACKLOG_TAG);
32066
32066
  }
32067
+ function isSet(v) {
32068
+ return v !== null && v !== void 0;
32069
+ }
32067
32070
  function normalizeBacklogFields(prev, patch) {
32068
32071
  const nextTags = patch.tags !== void 0 ? patch.tags : prev.tags;
32069
32072
  const nextDue = patch.due_date !== void 0 ? patch.due_date : prev.due_date ?? null;
32070
- if (!hasBacklogTag(nextTags) || nextDue === null || nextDue === void 0) return patch;
32071
- const dueExplicit = patch.due_date !== void 0 && patch.due_date !== null;
32073
+ const nextStart = patch.start_date !== void 0 ? patch.start_date : prev.start_date ?? null;
32074
+ if (!hasBacklogTag(nextTags) || !isSet(nextDue) && !isSet(nextStart)) return patch;
32075
+ const dateExplicit = patch.due_date !== void 0 && patch.due_date !== null || patch.start_date !== void 0 && patch.start_date !== null;
32072
32076
  const backlogAdded = patch.tags !== void 0 && hasBacklogTag(patch.tags) && !hasBacklogTag(prev.tags);
32073
- if (dueExplicit && !backlogAdded) {
32077
+ if (dateExplicit && !backlogAdded) {
32074
32078
  const tags = (Array.isArray(nextTags) ? nextTags : []).filter(
32075
32079
  (t) => String(t).toLowerCase() !== BACKLOG_TAG
32076
32080
  );
32077
32081
  return { ...patch, tags };
32078
32082
  }
32079
- return { ...patch, due_date: null };
32083
+ return { ...patch, due_date: null, start_date: null };
32080
32084
  }
32081
32085
  function getTaskTemplate() {
32082
32086
  const candidates = [
@@ -32186,6 +32190,7 @@ function readTaskFile(filePath) {
32186
32190
  related_feature: data.related_feature ?? null,
32187
32191
  version: data.version ?? null,
32188
32192
  rice: normalizeRice(data.rice),
32193
+ start_date: data.start_date ?? null,
32189
32194
  due_date: data.due_date ?? null,
32190
32195
  assignee: data.assignee ?? null,
32191
32196
  why: readSectionSafe(filePath, "Why"),
@@ -32253,8 +32258,8 @@ var init_local = __esm({
32253
32258
  return readTaskFile(path2);
32254
32259
  }
32255
32260
  async create(input2) {
32256
- if (input2.due_date && (input2.tags ?? []).some((t) => t.toLowerCase() === BACKLOG_TAG)) {
32257
- input2 = { ...input2, due_date: null };
32261
+ if ((input2.due_date || input2.start_date) && (input2.tags ?? []).some((t) => t.toLowerCase() === BACKLOG_TAG)) {
32262
+ input2 = { ...input2, due_date: null, start_date: null };
32258
32263
  }
32259
32264
  const slug = slugify(input2.name.trim());
32260
32265
  if (!isSafeTaskSlug(slug)) {
@@ -32271,6 +32276,9 @@ var init_local = __esm({
32271
32276
  if (input2.rice) {
32272
32277
  updateFrontmatterFields(filePath, { rice: input2.rice });
32273
32278
  }
32279
+ if (input2.start_date) {
32280
+ updateFrontmatterFields(filePath, { start_date: input2.start_date });
32281
+ }
32274
32282
  if (input2.due_date) {
32275
32283
  updateFrontmatterFields(filePath, { due_date: input2.due_date });
32276
32284
  }
@@ -32332,6 +32340,9 @@ ${input2.why || "(To be defined)"}
32332
32340
  - Task created.
32333
32341
  `;
32334
32342
  writeFileSync19(filePath, content, "utf-8");
32343
+ if (input2.start_date) {
32344
+ updateFrontmatterFields(filePath, { start_date: input2.start_date });
32345
+ }
32335
32346
  if (input2.due_date) {
32336
32347
  updateFrontmatterFields(filePath, { due_date: input2.due_date });
32337
32348
  }
@@ -32340,7 +32351,7 @@ ${input2.why || "(To be defined)"}
32340
32351
  }
32341
32352
  async updateFields(slug, fields, opts) {
32342
32353
  const path2 = this.requirePath(slug);
32343
- if (fields.tags !== void 0 || fields.due_date !== void 0) {
32354
+ if (fields.tags !== void 0 || fields.due_date !== void 0 || fields.start_date !== void 0) {
32344
32355
  const { data: prev } = readFrontmatter(path2);
32345
32356
  fields = normalizeBacklogFields(prev, fields);
32346
32357
  }
@@ -32407,6 +32418,7 @@ ${input2.why || "(To be defined)"}
32407
32418
  pendingQueue: 0,
32408
32419
  errors: [],
32409
32420
  failedPushes: [],
32421
+ warnings: [],
32410
32422
  watermark: null,
32411
32423
  noop: true
32412
32424
  };
@@ -32591,8 +32603,8 @@ function priorityToClickUp(priority) {
32591
32603
  }
32592
32604
  function priorityFromClickUp(p) {
32593
32605
  if (!p) return "medium";
32594
- const key = String(p.id ?? p.priority ?? "").toLowerCase();
32595
- return PRIORITY_FROM_CLICKUP[key] ?? "medium";
32606
+ const key2 = String(p.id ?? p.priority ?? "").toLowerCase();
32607
+ return PRIORITY_FROM_CLICKUP[key2] ?? "medium";
32596
32608
  }
32597
32609
  function tagsToClickUp(tags, version) {
32598
32610
  const out = [...tags];
@@ -32607,12 +32619,12 @@ function tagsFromClickUp(remote) {
32607
32619
  version: versionTag ? versionTag.slice("version:".length) : null
32608
32620
  };
32609
32621
  }
32610
- function dueDateToClickUp(date) {
32622
+ function calendarDateToClickUp(date) {
32611
32623
  if (!date) return null;
32612
32624
  const ms = Date.parse(`${date}T12:00:00Z`);
32613
32625
  return Number.isFinite(ms) ? ms : null;
32614
32626
  }
32615
- function dueDateFromClickUp(value) {
32627
+ function calendarDateFromClickUp(value) {
32616
32628
  const ms = serverTimeMs(value ?? null);
32617
32629
  return ms === null ? null : new Date(ms).toISOString().split("T")[0];
32618
32630
  }
@@ -32649,7 +32661,7 @@ function splitChangelogEntries(changelogSection) {
32649
32661
  function normalizeEntry(entry) {
32650
32662
  return entry.replace(/\s+/g, " ").trim();
32651
32663
  }
32652
- var STATUS_CANDIDATES, STATUS_FROM_CLICKUP, PRIORITY_TO_CLICKUP, PRIORITY_FROM_CLICKUP;
32664
+ var STATUS_CANDIDATES, STATUS_FROM_CLICKUP, PRIORITY_TO_CLICKUP, PRIORITY_FROM_CLICKUP, dueDateToClickUp, dueDateFromClickUp, startDateToClickUp, startDateFromClickUp;
32653
32665
  var init_clickup_map = __esm({
32654
32666
  "src/lib/task-backend/clickup-map.ts"() {
32655
32667
  "use strict";
@@ -32685,6 +32697,10 @@ var init_clickup_map = __esm({
32685
32697
  normal: "medium",
32686
32698
  low: "low"
32687
32699
  };
32700
+ dueDateToClickUp = calendarDateToClickUp;
32701
+ dueDateFromClickUp = calendarDateFromClickUp;
32702
+ startDateToClickUp = calendarDateToClickUp;
32703
+ startDateFromClickUp = calendarDateFromClickUp;
32688
32704
  }
32689
32705
  });
32690
32706
 
@@ -32703,9 +32719,9 @@ function matchCustomFields(defs) {
32703
32719
  }
32704
32720
  return bindings;
32705
32721
  }
32706
- function localFieldValue(fm, key) {
32722
+ function localFieldValue(fm, key2) {
32707
32723
  const rice = fm.rice ?? null;
32708
- switch (key) {
32724
+ switch (key2) {
32709
32725
  case "urgency":
32710
32726
  return strOrNull2(fm.urgency);
32711
32727
  case "description":
@@ -33376,12 +33392,12 @@ var init_sync_state = __esm({
33376
33392
  state.members = members;
33377
33393
  this.writeSyncState(state);
33378
33394
  }
33379
- readThrottle(key) {
33380
- return this.readSyncState()[key] ?? null;
33395
+ readThrottle(key2) {
33396
+ return this.readSyncState()[key2] ?? null;
33381
33397
  }
33382
- writeThrottle(key, at) {
33398
+ writeThrottle(key2, at) {
33383
33399
  const state = this.readSyncState();
33384
- state[key] = at;
33400
+ state[key2] = at;
33385
33401
  this.writeSyncState(state);
33386
33402
  }
33387
33403
  /** Advance the global pull watermark (server time, monotonic). */
@@ -33877,6 +33893,7 @@ var init_clickup = __esm({
33877
33893
  pendingQueue: 0,
33878
33894
  errors: [],
33879
33895
  failedPushes: [],
33896
+ warnings: [],
33880
33897
  watermark: null,
33881
33898
  noop: false
33882
33899
  };
@@ -33959,16 +33976,31 @@ var init_clickup = __esm({
33959
33976
  const currentEntries = splitChangelogEntries(task.changelog);
33960
33977
  const baseNorm = new Set(baseEntries.map(normalizeEntry));
33961
33978
  const newEntries = currentEntries.filter((e) => !baseNorm.has(normalizeEntry(e)));
33962
- const assigneeIds = assigneeSlugsOf(task.raw, task.tags).map((s) => this.memberIdFor(s)).filter((id) => id !== null).map(Number);
33979
+ const assigneeIds = [];
33980
+ const unmappedAssignees = [];
33981
+ for (const s of assigneeSlugsOf(task.raw, task.tags)) {
33982
+ const id = this.memberIdFor(s);
33983
+ if (id !== null) assigneeIds.push(Number(id));
33984
+ else unmappedAssignees.push(s);
33985
+ }
33986
+ if (unmappedAssignees.length > 0) {
33987
+ report.warnings.push(
33988
+ `push ${slug}: assignee ${unmappedAssignees.map((s) => `person:${s}`).join(", ")} maps to no ClickUp member \u2014 left unassigned (add them to the list, or map with \`dreamcontext config clickup-member <slug> <id>\`).`
33989
+ );
33990
+ }
33963
33991
  const mappedStatus = statusToClickUp(task.status, this.ledger.readListStatuses());
33964
33992
  const isBacklog = task.tags.some((t) => t.toLowerCase() === BACKLOG_TAG);
33965
33993
  const dueLocal = isBacklog ? null : task.raw.due_date ?? null;
33966
- const baseFmDue = entry?.base_snapshot ? (0, import_gray_matter5.default)(entry.base_snapshot.body).data.due_date ?? null : null;
33994
+ const startLocal = isBacklog ? null : task.raw.start_date ?? null;
33995
+ const baseSnapshotFm = entry?.base_snapshot ? (0, import_gray_matter5.default)(entry.base_snapshot.body).data : null;
33996
+ const baseFmDue = baseSnapshotFm?.due_date ?? null;
33997
+ const baseFmStart = baseSnapshotFm?.start_date ?? null;
33967
33998
  const fields = {
33968
33999
  name: task.name,
33969
34000
  description: bodyToDescription(task.body),
33970
34001
  ...mappedStatus !== null ? { status: mappedStatus } : {},
33971
34002
  priority: priorityToClickUp(task.priority),
34003
+ ...startLocal !== null || baseFmStart !== null ? { start_date: startDateToClickUp(startLocal), start_date_time: false } : {},
33972
34004
  ...dueLocal !== null || baseFmDue !== null ? { due_date: dueDateToClickUp(dueLocal), due_date_time: false } : {}
33973
34005
  };
33974
34006
  let remoteId = this.ledger.remoteIdFor(slug);
@@ -34189,6 +34221,7 @@ var init_clickup = __esm({
34189
34221
  const remotePriority = priorityFromClickUp(remote.priority);
34190
34222
  const remoteDesc = (remote.description ?? "").replace(/\r\n/g, "\n").trim();
34191
34223
  const remoteDue = dueDateFromClickUp(remote.due_date);
34224
+ const remoteStart = startDateFromClickUp(remote.start_date);
34192
34225
  const remoteAssignees = [
34193
34226
  ...new Set(
34194
34227
  (remote.assignees ?? []).map(
@@ -34213,6 +34246,7 @@ var init_clickup = __esm({
34213
34246
  related_feature: null,
34214
34247
  version: remoteVersion,
34215
34248
  rice: null,
34249
+ start_date: remoteStart,
34216
34250
  due_date: remoteDue,
34217
34251
  created_by: "clickup",
34218
34252
  updated_by: "clickup"
@@ -34310,7 +34344,12 @@ var init_clickup = __esm({
34310
34344
  local.raw.due_date ?? null,
34311
34345
  remoteDue
34312
34346
  );
34313
- const scalarResults = [statusM, priorityM, nameM, tagsM, versionM, assigneeM, dueM];
34347
+ const startM = scalar(
34348
+ baseFm?.start_date ?? null,
34349
+ local.raw.start_date ?? null,
34350
+ remoteStart
34351
+ );
34352
+ const scalarResults = [statusM, priorityM, nameM, tagsM, versionM, assigneeM, dueM, startM];
34314
34353
  const anyLocalWin = scalarResults.some((r) => r.winner === "local") || fieldWinners.some((r) => r.winner === "local");
34315
34354
  const anyRemoteWin = scalarResults.some((r) => r.winner === "remote") || fieldWinners.some((r) => r.winner === "remote");
34316
34355
  const remoteAddedEntries = mergedEntries.length > localEntries.length;
@@ -34327,6 +34366,7 @@ var init_clickup = __esm({
34327
34366
  tags: withPersonTags(tagsM.value, assigneeM.value),
34328
34367
  version: versionM.value,
34329
34368
  // Product rule: backlog ⇒ undated (applies to remote-originated state too).
34369
+ start_date: tagsM.value.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : startM.value,
34330
34370
  due_date: tagsM.value.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : dueM.value,
34331
34371
  updated_at: remoteContributed && remoteTime !== null ? dateOf(remoteTime) : local.updated_at,
34332
34372
  // updated_by records the WINNER of the merge.
@@ -34355,17 +34395,17 @@ var init_clickup = __esm({
34355
34395
  if (keptLocal) {
34356
34396
  const remoteFmOverrides = {};
34357
34397
  let remoteRice = normalizeRice(fm.rice);
34358
- for (const [key, value] of Object.entries(remoteFieldState)) {
34359
- if (RICE_KEYS.includes(key)) {
34360
- remoteRice = mergeRice(remoteRice, { [key]: value ?? void 0 });
34361
- } else if (key === "version") {
34398
+ for (const [key2, value] of Object.entries(remoteFieldState)) {
34399
+ if (RICE_KEYS.includes(key2)) {
34400
+ remoteRice = mergeRice(remoteRice, { [key2]: value ?? void 0 });
34401
+ } else if (key2 === "version") {
34362
34402
  remoteFmOverrides.version = value;
34363
34403
  } else {
34364
- remoteFmOverrides[key] = value;
34404
+ remoteFmOverrides[key2] = value;
34365
34405
  }
34366
34406
  }
34367
34407
  const remoteRender = this.renderMirror(
34368
- { ...fm, name: remote.name, status: remoteStatus, priority: remotePriority, tags: withPersonTags(remoteTags, remoteAssignees), version: remoteVersion, due_date: remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : remoteDue, ...remoteFmOverrides, rice: remoteRice },
34408
+ { ...fm, name: remote.name, status: remoteStatus, priority: remotePriority, tags: withPersonTags(remoteTags, remoteAssignees), version: remoteVersion, start_date: remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : remoteStart, due_date: remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : remoteDue, ...remoteFmOverrides, rice: remoteRice },
34369
34409
  remoteDesc,
34370
34410
  remoteEntries
34371
34411
  );
@@ -34395,7 +34435,8 @@ var init_clickup = __esm({
34395
34435
  ["tags", tagsM, stripPersonTags(local.tags)],
34396
34436
  ["version", versionM, local.version],
34397
34437
  ["assignees", assigneeM, assigneeSlugsOf(local.raw, local.tags)],
34398
- ["due_date", dueM, local.raw.due_date ?? null]
34438
+ ["due_date", dueM, local.raw.due_date ?? null],
34439
+ ["start_date", startM, local.raw.start_date ?? null]
34399
34440
  ];
34400
34441
  for (const [field, merged, from] of namedScalars) {
34401
34442
  if (merged.winner === "remote") {
@@ -34590,6 +34631,53 @@ function bodyToIssueBody(body) {
34590
34631
  }
34591
34632
  return out.join("\n").trimEnd() + "\n";
34592
34633
  }
34634
+ function renderDatesBlock(start, due) {
34635
+ const parts = [];
34636
+ if (start) parts.push(`**Start:** ${start}`);
34637
+ if (due) parts.push(`**Due:** ${due}`);
34638
+ if (parts.length === 0) return "";
34639
+ return `${DATES_OPEN}
34640
+ > \u{1F5D3}\uFE0F ${parts.join(" \xB7 ")}
34641
+ ${DATES_CLOSE}`;
34642
+ }
34643
+ function parseDatesBlock(body) {
34644
+ if (!body) return { start: null, due: null };
34645
+ const open = body.indexOf(DATES_OPEN);
34646
+ const close = body.indexOf(DATES_CLOSE);
34647
+ if (open === -1 || close === -1 || close < open) return { start: null, due: null };
34648
+ const inner = body.slice(open + DATES_OPEN.length, close);
34649
+ const startMatch = inner.match(/\*\*Start:\*\*\s*/);
34650
+ const dueMatch = inner.match(/\*\*Due:\*\*\s*/);
34651
+ const after = (m) => {
34652
+ if (!m || m.index === void 0) return null;
34653
+ const d = inner.slice(m.index + m[0].length).match(DATE_RE);
34654
+ return d ? d[1] : null;
34655
+ };
34656
+ return { start: after(startMatch), due: after(dueMatch) };
34657
+ }
34658
+ function stripDatesBlock(body) {
34659
+ if (!body) return "";
34660
+ const open = body.indexOf(DATES_OPEN);
34661
+ const close = body.indexOf(DATES_CLOSE);
34662
+ if (open === -1 || close === -1 || close < open) return body;
34663
+ const before = body.slice(0, open).replace(/\n+$/, "");
34664
+ const after = body.slice(close + DATES_CLOSE.length).replace(/^\n+/, "");
34665
+ if (before && after) return `${before}
34666
+
34667
+ ${after}`;
34668
+ return before || after;
34669
+ }
34670
+ function composeIssueBody(prose, start, due) {
34671
+ const cleanProse = stripDatesBlock(prose).trimEnd();
34672
+ const block = renderDatesBlock(start, due);
34673
+ if (!block) return cleanProse ? `${cleanProse}
34674
+ ` : "";
34675
+ return cleanProse ? `${block}
34676
+
34677
+ ${cleanProse}
34678
+ ` : `${block}
34679
+ `;
34680
+ }
34593
34681
  function githubTimeMs(iso) {
34594
34682
  if (iso === null || iso === void 0) return null;
34595
34683
  const ms = Date.parse(iso);
@@ -34599,7 +34687,7 @@ function githubTimeIso(ms) {
34599
34687
  if (ms === null || ms === void 0 || !Number.isFinite(ms)) return null;
34600
34688
  return new Date(ms).toISOString();
34601
34689
  }
34602
- var PRIORITY_PREFIX, URGENCY_PREFIX, VERSION_PREFIX, DC_PREFIX, STATE_REASON_COMPLETED, STATE_REASON_NOT_PLANNED, STATE_REASON_REOPENED, DELETED_SENTINEL, STATUS_TO_LABEL, LABEL_TO_STATUS, PRIORITIES;
34690
+ var PRIORITY_PREFIX, URGENCY_PREFIX, VERSION_PREFIX, DC_PREFIX, STATE_REASON_COMPLETED, STATE_REASON_NOT_PLANNED, STATE_REASON_REOPENED, DELETED_SENTINEL, STATUS_TO_LABEL, LABEL_TO_STATUS, PRIORITIES, DATES_OPEN, DATES_CLOSE, DATE_RE;
34603
34691
  var init_github_map = __esm({
34604
34692
  "src/lib/task-backend/github-map.ts"() {
34605
34693
  "use strict";
@@ -34623,6 +34711,9 @@ var init_github_map = __esm({
34623
34711
  [`${DC_PREFIX}todo`]: "todo"
34624
34712
  };
34625
34713
  PRIORITIES = /* @__PURE__ */ new Set(["critical", "high", "medium", "low"]);
34714
+ DATES_OPEN = "<!-- dc:dates -->";
34715
+ DATES_CLOSE = "<!-- /dc:dates -->";
34716
+ DATE_RE = /\b(\d{4}-\d{2}-\d{2})\b/;
34626
34717
  }
34627
34718
  });
34628
34719
 
@@ -35004,6 +35095,7 @@ var init_github = __esm({
35004
35095
  pendingQueue: 0,
35005
35096
  errors: [],
35006
35097
  failedPushes: [],
35098
+ warnings: [],
35007
35099
  watermark: null,
35008
35100
  noop: false
35009
35101
  };
@@ -35083,7 +35175,18 @@ var init_github = __esm({
35083
35175
  const currentEntries = splitChangelogEntries(task.changelog);
35084
35176
  const baseNorm = new Set(baseEntries.map(normalizeEntry));
35085
35177
  const newEntries = currentEntries.filter((e) => !baseNorm.has(normalizeEntry(e)));
35086
- const assignees = assigneeSlugsOf2(task.raw, task.tags).map((s) => this.loginForSlug(s)).filter((login) => login !== null);
35178
+ const assignees = [];
35179
+ const unmappedAssignees = [];
35180
+ for (const s of assigneeSlugsOf2(task.raw, task.tags)) {
35181
+ const login = this.loginForSlug(s);
35182
+ if (login !== null) assignees.push(login);
35183
+ else unmappedAssignees.push(s);
35184
+ }
35185
+ if (unmappedAssignees.length > 0) {
35186
+ report.warnings.push(
35187
+ `push ${slug}: assignee ${unmappedAssignees.map((s) => `person:${s}`).join(", ")} is not a collaborator on this repo \u2014 left unassigned (invite them, or use a \`person:<slug>\` matching their GitHub login).`
35188
+ );
35189
+ }
35087
35190
  const labels = labelsToGitHub({
35088
35191
  tags: stripPersonTags2(task.tags),
35089
35192
  priority: task.priority,
@@ -35091,7 +35194,10 @@ var init_github = __esm({
35091
35194
  version: task.version,
35092
35195
  status: task.status
35093
35196
  });
35094
- const body = bodyToIssueBody(task.body);
35197
+ const isBacklog = task.tags.some((t) => t.toLowerCase() === BACKLOG_TAG);
35198
+ const startLocal = isBacklog ? null : task.raw.start_date ?? null;
35199
+ const dueLocal = isBacklog ? null : task.raw.due_date ?? null;
35200
+ const body = composeIssueBody(bodyToIssueBody(task.body), startLocal, dueLocal);
35095
35201
  let remoteId = this.ledger.remoteIdFor(slug);
35096
35202
  let serverTime = null;
35097
35203
  if (!remoteId) {
@@ -35273,7 +35379,12 @@ var init_github = __esm({
35273
35379
  const remoteComments = await this.fetchIssueComments(adapter, owner, repo, remoteId);
35274
35380
  const remoteEntries = remoteComments.map((c) => (c.body ?? "").trim()).filter(Boolean);
35275
35381
  const { tags: remoteTags, priority: remotePriority, urgency: remoteUrgency, version: remoteVersion } = labelsFromGitHub(issue.labels);
35276
- const remoteBody = (issue.body ?? "").replace(/\r\n/g, "\n").trim();
35382
+ const normalizedIssueBody = (issue.body ?? "").replace(/\r\n/g, "\n");
35383
+ const { start: remoteStartRaw, due: remoteDueRaw } = parseDatesBlock(normalizedIssueBody);
35384
+ const remoteBacklog = remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG);
35385
+ const remoteStart = remoteBacklog ? null : remoteStartRaw;
35386
+ const remoteDue = remoteBacklog ? null : remoteDueRaw;
35387
+ const remoteBody = stripDatesBlock(normalizedIssueBody).trim();
35277
35388
  const remoteAssignees = [
35278
35389
  ...new Set(
35279
35390
  (issue.assignees ?? []).map((a) => {
@@ -35302,7 +35413,8 @@ var init_github = __esm({
35302
35413
  related_feature: null,
35303
35414
  version: remoteVersion,
35304
35415
  rice: null,
35305
- due_date: null,
35416
+ start_date: remoteStart,
35417
+ due_date: remoteDue,
35306
35418
  created_by: "github",
35307
35419
  updated_by: "github"
35308
35420
  };
@@ -35386,7 +35498,17 @@ var init_github = __esm({
35386
35498
  assigneeSlugsOf2(local.raw, local.tags),
35387
35499
  remoteAssignees
35388
35500
  );
35389
- const scalarResults = [statusM, priorityM, urgencyM, nameM, tagsM, versionM, assigneeM];
35501
+ const dueM = scalar(
35502
+ baseFm?.due_date ?? null,
35503
+ local.raw.due_date ?? null,
35504
+ remoteDue
35505
+ );
35506
+ const startM = scalar(
35507
+ baseFm?.start_date ?? null,
35508
+ local.raw.start_date ?? null,
35509
+ remoteStart
35510
+ );
35511
+ const scalarResults = [statusM, priorityM, urgencyM, nameM, tagsM, versionM, assigneeM, dueM, startM];
35390
35512
  const anyLocalWin = scalarResults.some((r) => r.winner === "local");
35391
35513
  const anyRemoteWin = scalarResults.some((r) => r.winner === "remote");
35392
35514
  const remoteAddedEntries = mergedEntries.length > localEntries.length;
@@ -35403,7 +35525,8 @@ var init_github = __esm({
35403
35525
  urgency: urgencyM.value,
35404
35526
  tags: withPersonTags2(tagsM.value, assigneeM.value),
35405
35527
  version: versionM.value,
35406
- due_date: tagsM.value.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : local.raw.due_date ?? null,
35528
+ start_date: tagsM.value.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : startM.value,
35529
+ due_date: tagsM.value.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : dueM.value,
35407
35530
  updated_at: remoteContributed && remoteTime !== null ? dateOf2(remoteTime) : local.updated_at,
35408
35531
  updated_by: anyRemoteWin || conflicts.length > 0 ? "github" : local.raw.updated_by ?? null
35409
35532
  };
@@ -35420,7 +35543,8 @@ var init_github = __esm({
35420
35543
  urgency: remoteUrgency ?? fm.urgency,
35421
35544
  tags: withPersonTags2(remoteTags, remoteAssignees),
35422
35545
  version: remoteVersion,
35423
- due_date: remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : local.raw.due_date ?? null
35546
+ start_date: remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : remoteStart,
35547
+ due_date: remoteTags.some((t) => t.toLowerCase() === BACKLOG_TAG) ? null : remoteDue
35424
35548
  },
35425
35549
  remoteBody,
35426
35550
  remoteEntries
@@ -35451,7 +35575,9 @@ var init_github = __esm({
35451
35575
  ["name", nameM, local.name],
35452
35576
  ["tags", tagsM, stripPersonTags2(local.tags)],
35453
35577
  ["version", versionM, local.version],
35454
- ["assignees", assigneeM, assigneeSlugsOf2(local.raw, local.tags)]
35578
+ ["assignees", assigneeM, assigneeSlugsOf2(local.raw, local.tags)],
35579
+ ["due_date", dueM, local.raw.due_date ?? null],
35580
+ ["start_date", startM, local.raw.start_date ?? null]
35455
35581
  ];
35456
35582
  for (const [field, merged, from] of namedScalars) {
35457
35583
  if (merged.winner === "remote") {
@@ -36891,6 +37017,10 @@ function registerSleepCommand(program2) {
36891
37017
  warn(`Task sync: completed with ${report.errors.length} non-fatal error(s):`);
36892
37018
  for (const e of report.errors) warn(` ${e}`);
36893
37019
  }
37020
+ if (report.warnings.length > 0) {
37021
+ warn(`Task sync: ${report.warnings.length} assignment warning(s):`);
37022
+ for (const w of report.warnings) warn(` ${w}`);
37023
+ }
36894
37024
  }
36895
37025
  } catch (err) {
36896
37026
  warn(`Task sync: skipped \u2014 ${err.message ?? err}`);
@@ -37151,6 +37281,34 @@ var init_knowledge = __esm({
37151
37281
  }
37152
37282
  });
37153
37283
 
37284
+ // src/lib/task-backend/member-match.ts
37285
+ function key(s) {
37286
+ return slugify(foldAscii(s));
37287
+ }
37288
+ function matchesSegment(slug, q) {
37289
+ return slug === q || slug.startsWith(`${q}-`) || slug.split("-").includes(q);
37290
+ }
37291
+ function matchMember(input2, members) {
37292
+ const q = key(input2);
37293
+ if (!q) return { kind: "none" };
37294
+ const real = members.filter((m) => m.id !== "");
37295
+ const exact = real.find((m) => m.slug === q);
37296
+ if (exact) return { kind: "exact", member: exact };
37297
+ const matches = real.filter(
37298
+ (m) => matchesSegment(m.slug, q) || matchesSegment(key(m.name), q)
37299
+ );
37300
+ if (matches.length === 1) return { kind: "fuzzy", member: matches[0] };
37301
+ if (matches.length > 1) return { kind: "ambiguous", matches };
37302
+ return { kind: "none" };
37303
+ }
37304
+ var init_member_match = __esm({
37305
+ "src/lib/task-backend/member-match.ts"() {
37306
+ "use strict";
37307
+ init_id();
37308
+ init_clickup_map();
37309
+ }
37310
+ });
37311
+
37154
37312
  // src/cli/commands/tasks.ts
37155
37313
  import { join as join43, basename as basename12, dirname as dirname22 } from "path";
37156
37314
  function getStateDir() {
@@ -37160,6 +37318,57 @@ function getStateDir() {
37160
37318
  function collectOption(value, previous) {
37161
37319
  return previous.concat(value);
37162
37320
  }
37321
+ function isCalendarDate(value) {
37322
+ return /^\d{4}-\d{2}-\d{2}$/.test(value) && !Number.isNaN(Date.parse(`${value}T00:00:00Z`));
37323
+ }
37324
+ async function setTaskDate(backend, slug, field, raw) {
37325
+ const label = field === "start_date" ? "Start date" : "Due date";
37326
+ if (raw.toLowerCase() === "clear") {
37327
+ await backend.updateFields(slug, { [field]: null, updated_at: today() });
37328
+ success(`${label} cleared on ${slug}`);
37329
+ return;
37330
+ }
37331
+ if (!isCalendarDate(raw)) {
37332
+ error(`${label} must be a valid YYYY-MM-DD (or "clear").`);
37333
+ return;
37334
+ }
37335
+ const before = await backend.get(slug);
37336
+ const start = field === "start_date" ? raw : before?.start_date ?? null;
37337
+ const due = field === "due_date" ? raw : before?.due_date ?? null;
37338
+ if (start && due && start > due) {
37339
+ error(`Start date (${start}) cannot be after the due date (${due}). Adjust or clear the other date first.`);
37340
+ return;
37341
+ }
37342
+ const updated = await backend.updateFields(slug, { [field]: raw, updated_at: today() });
37343
+ success(`${label} on ${slug}: ${raw}`);
37344
+ if (before?.tags.some((t) => t.toLowerCase() === "backlog") && !updated.tags.some((t) => t.toLowerCase() === "backlog")) {
37345
+ console.log(source_default.dim(" backlog tag removed \u2014 a dated task is planned, not backlog."));
37346
+ }
37347
+ }
37348
+ async function resolvePersonSlug(backend, input2) {
37349
+ const fallback = slugify(input2);
37350
+ if (!backend.listMembers) return { slug: fallback };
37351
+ let members;
37352
+ try {
37353
+ members = await backend.listMembers();
37354
+ } catch {
37355
+ return { slug: fallback };
37356
+ }
37357
+ if (members.length === 0) return { slug: fallback };
37358
+ const match = matchMember(input2, members);
37359
+ if (match.kind === "exact" || match.kind === "fuzzy") {
37360
+ if (match.member.slug !== fallback) {
37361
+ console.log(source_default.dim(` \u2192 assignee "${input2}" resolved to ${match.member.slug} (${match.member.name}).`));
37362
+ }
37363
+ return { slug: match.member.slug };
37364
+ }
37365
+ if (match.kind === "ambiguous") {
37366
+ error(`Ambiguous assignee "${input2}" \u2014 matches ${match.matches.map((m) => m.slug).join(", ")}. Be more specific.`);
37367
+ return { abort: true };
37368
+ }
37369
+ warn(`"${input2}" matches no member on the "${backend.name}" backend \u2014 recording person:${fallback}, but it will NOT sync until they are a member (see \`dreamcontext tasks members\`).`);
37370
+ return { slug: fallback };
37371
+ }
37163
37372
  function renderTaskLine(t, opts = {}) {
37164
37373
  const statusColor2 = t.status === "in_progress" ? source_default.yellow : t.status === "in_review" ? source_default.magenta : t.status === "completed" ? source_default.green : source_default.white;
37165
37374
  const prio = t.priority !== "-" ? source_default.dim(` [${t.priority}]`) : "";
@@ -37267,7 +37476,7 @@ function registerTasksCommand(program2) {
37267
37476
  console.log(` ${c.tag.padEnd(width)} ${source_default.dim(String(c.count))}`);
37268
37477
  }
37269
37478
  });
37270
- tasks.command("create").argument("<name>").description("Create a new task").option("-d, --description <desc>", "Task description").option("-p, --priority <priority>", "Priority (critical, high, medium, low)").option("-u, --urgency <level>", "Urgency (critical, high, medium, low)").option("-s, --status <status>", "Status (todo, in_progress, in_review, completed)").option("-t, --tags <tags>", "Comma-separated tags").option("-w, --why <why>", "Why is this task needed?").option("-v, --version <version>", "Version/milestone").option("--person <name>", "Responsible person (records a person:<slug> tag when multi-person)").option("--reach <n>", "RICE reach (integer 1\u201310)").option("--impact <n>", "RICE impact (integer 1\u20135)").option("--confidence <n>", "RICE confidence (25, 50, 75, or 100)").option("--effort <n>", "RICE effort in weeks (> 0, \u2264 52)").option("--due <date>", "Due date (YYYY-MM-DD)").action(async (name, opts) => {
37479
+ tasks.command("create").argument("<name>").description("Create a new task").option("-d, --description <desc>", "Task description").option("-p, --priority <priority>", "Priority (critical, high, medium, low)").option("-u, --urgency <level>", "Urgency (critical, high, medium, low)").option("-s, --status <status>", "Status (todo, in_progress, in_review, completed)").option("-t, --tags <tags>", "Comma-separated tags").option("-w, --why <why>", "Why is this task needed?").option("-v, --version <version>", "Version/milestone").option("--person <name>", "Responsible person (records a person:<slug> tag when multi-person)").option("--reach <n>", "RICE reach (integer 1\u201310)").option("--impact <n>", "RICE impact (integer 1\u20135)").option("--confidence <n>", "RICE confidence (25, 50, 75, or 100)").option("--effort <n>", "RICE effort in weeks (> 0, \u2264 52)").option("--start <date>", "Planned start date (YYYY-MM-DD)").option("--due <date>", "Due/end date (YYYY-MM-DD)").action(async (name, opts) => {
37271
37480
  const backend = getTaskBackend();
37272
37481
  const slug = slugify(name);
37273
37482
  if (await backend.get(slug) !== null) {
@@ -37296,7 +37505,9 @@ function registerTasksCommand(program2) {
37296
37505
  if (opts.person && opts.person.trim()) {
37297
37506
  const projectRoot = dirname22(ensureContextRoot());
37298
37507
  if (isMultiPerson(readSetupConfig(projectRoot))) {
37299
- const personTag = `person:${slugify(opts.person)}`;
37508
+ const resolved = await resolvePersonSlug(backend, opts.person);
37509
+ if ("abort" in resolved) return;
37510
+ const personTag = `person:${resolved.slug}`;
37300
37511
  if (!tags.includes(personTag)) tags.push(personTag);
37301
37512
  }
37302
37513
  }
@@ -37316,8 +37527,16 @@ function registerTasksCommand(program2) {
37316
37527
  }
37317
37528
  riceBlock = mergeRice(null, riceInput);
37318
37529
  }
37319
- if (opts.due !== void 0 && !/^\d{4}-\d{2}-\d{2}$/.test(opts.due)) {
37320
- error("Due date must be YYYY-MM-DD.");
37530
+ if (opts.due !== void 0 && !isCalendarDate(opts.due)) {
37531
+ error("Due date must be a valid YYYY-MM-DD.");
37532
+ return;
37533
+ }
37534
+ if (opts.start !== void 0 && !isCalendarDate(opts.start)) {
37535
+ error("Start date must be a valid YYYY-MM-DD.");
37536
+ return;
37537
+ }
37538
+ if (opts.start && opts.due && opts.start > opts.due) {
37539
+ error(`Start date (${opts.start}) cannot be after the due date (${opts.due}).`);
37321
37540
  return;
37322
37541
  }
37323
37542
  try {
@@ -37331,6 +37550,7 @@ function registerTasksCommand(program2) {
37331
37550
  why,
37332
37551
  version,
37333
37552
  rice: riceBlock,
37553
+ start_date: opts.start ?? null,
37334
37554
  due_date: opts.due ?? null,
37335
37555
  variant: "cli"
37336
37556
  });
@@ -37410,25 +37630,17 @@ function registerTasksCommand(program2) {
37410
37630
  await backend.delete(slug);
37411
37631
  success(`Task deleted: ${slug}${backend.name !== "local" ? " (remote deletion on next sync)" : ""}`);
37412
37632
  });
37413
- tasks.command("due").argument("<name>", "Task slug or name").argument("<date>", 'YYYY-MM-DD, or "clear" to remove').description("Set or clear a task due date").action(async (name, date) => {
37633
+ tasks.command("start").argument("<name>", "Task slug or name").argument("<date>", 'YYYY-MM-DD, or "clear" to remove').description("Set or clear a task planned start date (the range start)").action(async (name, date) => {
37414
37634
  const backend = getTaskBackend();
37415
37635
  const slug = await resolveTaskSlug(backend, name);
37416
37636
  if (!slug) return;
37417
- if (date.toLowerCase() === "clear") {
37418
- await backend.updateFields(slug, { due_date: null, updated_at: today() });
37419
- success(`Due date cleared on ${slug}`);
37420
- return;
37421
- }
37422
- if (!/^\d{4}-\d{2}-\d{2}$/.test(date) || Number.isNaN(Date.parse(`${date}T00:00:00Z`))) {
37423
- error('Due date must be a valid YYYY-MM-DD (or "clear").');
37424
- return;
37425
- }
37426
- const before = await backend.get(slug);
37427
- const updated = await backend.updateFields(slug, { due_date: date, updated_at: today() });
37428
- success(`Due date on ${slug}: ${date}`);
37429
- if (before?.tags.some((t) => t.toLowerCase() === "backlog") && !updated.tags.some((t) => t.toLowerCase() === "backlog")) {
37430
- console.log(source_default.dim(" backlog tag removed \u2014 a dated task is planned, not backlog."));
37431
- }
37637
+ await setTaskDate(backend, slug, "start_date", date);
37638
+ });
37639
+ tasks.command("due").argument("<name>", "Task slug or name").argument("<date>", 'YYYY-MM-DD, or "clear" to remove').description("Set or clear a task due/end date (the range end)").action(async (name, date) => {
37640
+ const backend = getTaskBackend();
37641
+ const slug = await resolveTaskSlug(backend, name);
37642
+ if (!slug) return;
37643
+ await setTaskDate(backend, slug, "due_date", date);
37432
37644
  });
37433
37645
  tasks.command("tag").argument("<name>", "Task slug or name").argument("<tags...>", "Tags to add (or remove with --remove); person:<slug> assigns a person").description("Add or remove tags on a task").option("--remove", "Remove the given tags instead of adding them").action(async (name, tagArgs, opts) => {
37434
37646
  const backend = getTaskBackend();
@@ -37449,13 +37661,28 @@ function registerTasksCommand(program2) {
37449
37661
  const drop = new Set(given.map((t) => t.toLowerCase()));
37450
37662
  next = task.tags.filter((t) => !drop.has(t.toLowerCase()));
37451
37663
  } else {
37452
- next = [...task.tags];
37664
+ const addTags = [];
37453
37665
  for (const t of given) {
37666
+ if (t.startsWith("person:")) {
37667
+ const raw = t.slice("person:".length).trim();
37668
+ if (!raw) {
37669
+ error("Empty assignee: `person:` needs a slug, e.g. `person:emrecan-tetik` (see `dreamcontext tasks members`).");
37670
+ return;
37671
+ }
37672
+ const resolved = await resolvePersonSlug(backend, raw);
37673
+ if ("abort" in resolved) return;
37674
+ addTags.push(`person:${resolved.slug}`);
37675
+ } else {
37676
+ addTags.push(t);
37677
+ }
37678
+ }
37679
+ next = [...task.tags];
37680
+ for (const t of addTags) {
37454
37681
  if (!next.some((x) => x.toLowerCase() === t.toLowerCase())) next.push(t);
37455
37682
  }
37456
37683
  const persons = next.filter((t) => t.startsWith("person:"));
37457
37684
  if (persons.length > 1) {
37458
- const keep = given.filter((t) => t.startsWith("person:")).pop() ?? persons[persons.length - 1];
37685
+ const keep = addTags.filter((t) => t.startsWith("person:")).pop() ?? persons[persons.length - 1];
37459
37686
  next = next.filter((t) => !t.startsWith("person:") || t === keep);
37460
37687
  }
37461
37688
  }
@@ -37587,6 +37814,9 @@ function registerTasksCommand(program2) {
37587
37814
  for (const e of report.errors) {
37588
37815
  console.log(source_default.red(` error: ${e}`));
37589
37816
  }
37817
+ for (const w of report.warnings) {
37818
+ console.log(source_default.yellow(` warning: ${w}`));
37819
+ }
37590
37820
  } catch (err) {
37591
37821
  if (opts.hook) {
37592
37822
  console.log(source_default.dim(`tasks sync: skipped (${err.message ?? err})`));
@@ -37753,6 +37983,7 @@ var init_tasks = __esm({
37753
37983
  init_prompt();
37754
37984
  init_id();
37755
37985
  init_format();
37986
+ init_member_match();
37756
37987
  init_setup_config();
37757
37988
  init_active_version();
37758
37989
  init_rice();
@@ -41032,9 +41263,9 @@ function detectSalience(distilled) {
41032
41263
  const push = (message, salience) => {
41033
41264
  const clamped = clamp(message);
41034
41265
  if (!clamped) return;
41035
- const key = `${salience}::${clamped.toLowerCase()}`;
41036
- if (seen.has(key)) return;
41037
- seen.add(key);
41266
+ const key2 = `${salience}::${clamped.toLowerCase()}`;
41267
+ if (seen.has(key2)) return;
41268
+ seen.add(key2);
41038
41269
  moments.push({ message: clamped, salience });
41039
41270
  };
41040
41271
  for (const msg of distilled.userMessages) {
@@ -41378,9 +41609,9 @@ function haikuRecall(rawPrompt, contextRoot, opts) {
41378
41609
  const seen = /* @__PURE__ */ new Set();
41379
41610
  subset = [];
41380
41611
  for (const h of ranked) {
41381
- const key = docKey(h.doc);
41382
- if (seen.has(key)) continue;
41383
- seen.add(key);
41612
+ const key2 = docKey(h.doc);
41613
+ if (seen.has(key2)) continue;
41614
+ seen.add(key2);
41384
41615
  subset.push(h.doc);
41385
41616
  }
41386
41617
  } else {
@@ -41404,17 +41635,17 @@ function haikuRecall(rawPrompt, contextRoot, opts) {
41404
41635
  }
41405
41636
  const hits = [];
41406
41637
  for (const entry of rawDocs) {
41407
- let key;
41638
+ let key2;
41408
41639
  let reason = "";
41409
41640
  if (typeof entry === "string") {
41410
- key = entry;
41641
+ key2 = entry;
41411
41642
  } else if (entry && typeof entry === "object" && typeof entry.key === "string") {
41412
- key = entry.key;
41643
+ key2 = entry.key;
41413
41644
  reason = String(entry.reason ?? "");
41414
41645
  } else {
41415
41646
  continue;
41416
41647
  }
41417
- const doc = lookup.get(key);
41648
+ const doc = lookup.get(key2);
41418
41649
  if (!doc) continue;
41419
41650
  hits.push({ doc, score: 0, rankScore: 0, snippet: reason });
41420
41651
  if (hits.length >= 3) break;
@@ -43248,6 +43479,26 @@ async function handleTasksCreate(req, res, _params, contextRoot) {
43248
43479
  }
43249
43480
  riceBlock = mergeRice(null, riceInput);
43250
43481
  }
43482
+ const isYmdDate = (v) => typeof v === "string" && /^\d{4}-\d{2}-\d{2}$/.test(v) && !Number.isNaN(Date.parse(`${v}T00:00:00Z`));
43483
+ let startDate = null;
43484
+ let dueDate = null;
43485
+ for (const [key2, set] of [["start_date", (v) => {
43486
+ startDate = v;
43487
+ }], ["due_date", (v) => {
43488
+ dueDate = v;
43489
+ }]]) {
43490
+ if (body[key2] !== void 0 && body[key2] !== null) {
43491
+ if (!isYmdDate(body[key2])) {
43492
+ sendError(res, 400, `invalid_${key2}`, `${key2} must be YYYY-MM-DD or null.`);
43493
+ return;
43494
+ }
43495
+ set(body[key2]);
43496
+ }
43497
+ }
43498
+ if (startDate && dueDate && startDate > dueDate) {
43499
+ sendError(res, 400, "invalid_date_range", `start_date (${startDate}) cannot be after due_date (${dueDate}).`);
43500
+ return;
43501
+ }
43251
43502
  const backend = backendFor(contextRoot);
43252
43503
  let task;
43253
43504
  try {
@@ -43260,6 +43511,8 @@ async function handleTasksCreate(req, res, _params, contextRoot) {
43260
43511
  why,
43261
43512
  version,
43262
43513
  rice: riceBlock,
43514
+ start_date: startDate,
43515
+ due_date: dueDate,
43263
43516
  variant: "dashboard"
43264
43517
  });
43265
43518
  } catch (err) {
@@ -43343,7 +43596,11 @@ async function handleTasksMembers(_req, res, _params, contextRoot) {
43343
43596
  if (!bySlug.has(m.slug)) bySlug.set(m.slug, m);
43344
43597
  }
43345
43598
  for (const m of remote) bySlug.set(m.slug, m);
43346
- sendJson(res, 200, { members: [...bySlug.values()] });
43599
+ let members = [...bySlug.values()];
43600
+ if (backend.listMembers && remote.length > 0) {
43601
+ members = members.filter((m) => m.id !== "");
43602
+ }
43603
+ sendJson(res, 200, { members });
43347
43604
  }
43348
43605
  async function handleTasksContainers(_req, res, _params, contextRoot) {
43349
43606
  const backend = backendFor(contextRoot);
@@ -43446,7 +43703,7 @@ async function handleTasksUpdate(req, res, params, contextRoot) {
43446
43703
  });
43447
43704
  }
43448
43705
  }
43449
- const allowedFields = ["status", "priority", "urgency", "description", "tags", "name", "related_feature", "version", "due_date", "assignee"];
43706
+ const allowedFields = ["status", "priority", "urgency", "description", "tags", "name", "related_feature", "version", "start_date", "due_date", "assignee"];
43450
43707
  for (const field of allowedFields) {
43451
43708
  if (body[field] !== void 0) {
43452
43709
  const oldVal = oldData[field] ?? null;
@@ -43491,9 +43748,18 @@ async function handleTasksUpdate(req, res, params, contextRoot) {
43491
43748
  sendError(res, 400, "invalid_assignee", "assignee must be a string or null.");
43492
43749
  return;
43493
43750
  }
43494
- if (updates.due_date !== void 0 && updates.due_date !== null) {
43495
- if (typeof updates.due_date !== "string" || !/^\d{4}-\d{2}-\d{2}$/.test(updates.due_date)) {
43496
- sendError(res, 400, "invalid_due_date", "due_date must be YYYY-MM-DD or null.");
43751
+ const isYmd = (v) => typeof v === "string" && /^\d{4}-\d{2}-\d{2}$/.test(v) && !Number.isNaN(Date.parse(`${v}T00:00:00Z`));
43752
+ for (const dateField of ["start_date", "due_date"]) {
43753
+ if (updates[dateField] !== void 0 && updates[dateField] !== null && !isYmd(updates[dateField])) {
43754
+ sendError(res, 400, `invalid_${dateField}`, `${dateField} must be YYYY-MM-DD or null.`);
43755
+ return;
43756
+ }
43757
+ }
43758
+ {
43759
+ const effStart = updates.start_date !== void 0 ? updates.start_date : existing.start_date;
43760
+ const effDue = updates.due_date !== void 0 ? updates.due_date : existing.due_date;
43761
+ if (isYmd(effStart) && isYmd(effDue) && effStart > effDue) {
43762
+ sendError(res, 400, "invalid_date_range", `start_date (${effStart}) cannot be after due_date (${effDue}).`);
43497
43763
  return;
43498
43764
  }
43499
43765
  }
@@ -44803,27 +45069,27 @@ var require_lrucache = __commonJS({
44803
45069
  this.max = 1e3;
44804
45070
  this.map = /* @__PURE__ */ new Map();
44805
45071
  }
44806
- get(key) {
44807
- const value = this.map.get(key);
45072
+ get(key2) {
45073
+ const value = this.map.get(key2);
44808
45074
  if (value === void 0) {
44809
45075
  return void 0;
44810
45076
  } else {
44811
- this.map.delete(key);
44812
- this.map.set(key, value);
45077
+ this.map.delete(key2);
45078
+ this.map.set(key2, value);
44813
45079
  return value;
44814
45080
  }
44815
45081
  }
44816
- delete(key) {
44817
- return this.map.delete(key);
45082
+ delete(key2) {
45083
+ return this.map.delete(key2);
44818
45084
  }
44819
- set(key, value) {
44820
- const deleted = this.delete(key);
45085
+ set(key2, value) {
45086
+ const deleted = this.delete(key2);
44821
45087
  if (!deleted && value !== void 0) {
44822
45088
  if (this.map.size >= this.max) {
44823
45089
  const firstKey = this.map.keys().next().value;
44824
45090
  this.delete(firstKey);
44825
45091
  }
44826
- this.map.set(key, value);
45092
+ this.map.set(key2, value);
44827
45093
  }
44828
45094
  return this;
44829
45095
  }
@@ -47650,9 +47916,9 @@ var require_color = __commonJS({
47650
47916
  };
47651
47917
  var __copyProps2 = (to, from, except, desc) => {
47652
47918
  if (from && typeof from === "object" || typeof from === "function") {
47653
- for (let key of __getOwnPropNames2(from))
47654
- if (!__hasOwnProp2.call(to, key) && key !== except)
47655
- __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
47919
+ for (let key2 of __getOwnPropNames2(from))
47920
+ if (!__hasOwnProp2.call(to, key2) && key2 !== except)
47921
+ __defProp2(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc2(from, key2)) || desc.enumerable });
47656
47922
  }
47657
47923
  return to;
47658
47924
  };
@@ -47979,8 +48245,8 @@ var require_color = __commonJS({
47979
48245
  }
47980
48246
  var color_string_default = cs;
47981
48247
  var reverseKeywords = {};
47982
- for (const key of Object.keys(color_name_default)) {
47983
- reverseKeywords[color_name_default[key]] = key;
48248
+ for (const key2 of Object.keys(color_name_default)) {
48249
+ reverseKeywords[color_name_default[key2]] = key2;
47984
48250
  }
47985
48251
  var convert = {
47986
48252
  rgb: { channels: 3, labels: "rgb" },
@@ -49288,9 +49554,9 @@ var require_colour2 = __commonJS({
49288
49554
  throw is.invalidParameterError("background", "object or string", value);
49289
49555
  }
49290
49556
  }
49291
- function _setBackgroundColourOption(key, value) {
49557
+ function _setBackgroundColourOption(key2, value) {
49292
49558
  if (is.defined(value)) {
49293
- this.options[key] = _getBackgroundColourOption(value);
49559
+ this.options[key2] = _getBackgroundColourOption(value);
49294
49560
  }
49295
49561
  }
49296
49562
  module2.exports = (Sharp) => {
@@ -50122,11 +50388,11 @@ var require_output = __commonJS({
50122
50388
  }
50123
50389
  return this;
50124
50390
  }
50125
- function _setBooleanOption(key, val) {
50391
+ function _setBooleanOption(key2, val) {
50126
50392
  if (is.bool(val)) {
50127
- this.options[key] = val;
50393
+ this.options[key2] = val;
50128
50394
  } else {
50129
- throw is.invalidParameterError(key, "boolean", val);
50395
+ throw is.invalidParameterError(key2, "boolean", val);
50130
50396
  }
50131
50397
  }
50132
50398
  function _read() {
@@ -50415,16 +50681,16 @@ function parseEmbeddedFiles(body) {
50415
50681
  }
50416
50682
  return out;
50417
50683
  }
50418
- function cacheGet(key) {
50419
- const hit = assetCache.get(key);
50684
+ function cacheGet(key2) {
50685
+ const hit = assetCache.get(key2);
50420
50686
  if (hit) {
50421
- assetCache.delete(key);
50422
- assetCache.set(key, hit);
50687
+ assetCache.delete(key2);
50688
+ assetCache.set(key2, hit);
50423
50689
  }
50424
50690
  return hit;
50425
50691
  }
50426
- function cacheSet(key, value) {
50427
- assetCache.set(key, value);
50692
+ function cacheSet(key2, value) {
50693
+ assetCache.set(key2, value);
50428
50694
  while (assetCache.size > ASSET_CACHE_MAX) {
50429
50695
  const oldest = assetCache.keys().next().value;
50430
50696
  if (oldest === void 0) break;
@@ -50442,8 +50708,8 @@ async function loadAssetDataURL(abs, maxDim, quality) {
50442
50708
  } catch {
50443
50709
  return null;
50444
50710
  }
50445
- const key = `${abs}:${mtimeMs}:${maxDim}:${quality}`;
50446
- const cached = cacheGet(key);
50711
+ const key2 = `${abs}:${mtimeMs}:${maxDim}:${quality}`;
50712
+ const cached = cacheGet(key2);
50447
50713
  if (cached) return cached;
50448
50714
  const ext = extname5(abs).toLowerCase();
50449
50715
  const origMime = IMAGE_MIME[ext] ?? "application/octet-stream";
@@ -50456,7 +50722,7 @@ async function loadAssetDataURL(abs, maxDim, quality) {
50456
50722
  dataURL: `data:image/webp;base64,${buf.toString("base64")}`,
50457
50723
  bytes: buf.length
50458
50724
  };
50459
- cacheSet(key, out);
50725
+ cacheSet(key2, out);
50460
50726
  return out;
50461
50727
  } catch {
50462
50728
  }
@@ -50468,7 +50734,7 @@ async function loadAssetDataURL(abs, maxDim, quality) {
50468
50734
  dataURL: `data:${origMime};base64,${raw.toString("base64")}`,
50469
50735
  bytes: raw.length
50470
50736
  };
50471
- assetCache.set(key, out);
50737
+ assetCache.set(key2, out);
50472
50738
  return out;
50473
50739
  } catch {
50474
50740
  return null;
@@ -51670,13 +51936,13 @@ async function handleConfigUpdate(req, res, _params, contextRoot) {
51670
51936
  }
51671
51937
  const raw = body.clickup;
51672
51938
  const picked = {};
51673
- for (const key of ["teamId", "spaceId", "listId"]) {
51674
- if (raw[key] !== void 0) {
51675
- if (typeof raw[key] !== "string" || !raw[key].trim()) {
51676
- sendError(res, 400, "invalid_clickup", `clickup.${key} must be a non-empty string.`);
51939
+ for (const key2 of ["teamId", "spaceId", "listId"]) {
51940
+ if (raw[key2] !== void 0) {
51941
+ if (typeof raw[key2] !== "string" || !raw[key2].trim()) {
51942
+ sendError(res, 400, "invalid_clickup", `clickup.${key2} must be a non-empty string.`);
51677
51943
  return;
51678
51944
  }
51679
- picked[key] = raw[key].trim();
51945
+ picked[key2] = raw[key2].trim();
51680
51946
  }
51681
51947
  }
51682
51948
  if (raw.changelogTarget !== void 0) {
@@ -51696,13 +51962,13 @@ async function handleConfigUpdate(req, res, _params, contextRoot) {
51696
51962
  }
51697
51963
  const raw = body.github;
51698
51964
  const picked = {};
51699
- for (const key of ["owner", "repo"]) {
51700
- if (raw[key] !== void 0) {
51701
- if (typeof raw[key] !== "string" || !raw[key].trim()) {
51702
- sendError(res, 400, "invalid_github", `github.${key} must be a non-empty string.`);
51965
+ for (const key2 of ["owner", "repo"]) {
51966
+ if (raw[key2] !== void 0) {
51967
+ if (typeof raw[key2] !== "string" || !raw[key2].trim()) {
51968
+ sendError(res, 400, "invalid_github", `github.${key2} must be a non-empty string.`);
51703
51969
  return;
51704
51970
  }
51705
- picked[key] = raw[key].trim();
51971
+ picked[key2] = raw[key2].trim();
51706
51972
  }
51707
51973
  }
51708
51974
  if (raw.changelogTarget !== void 0) {
@@ -52348,9 +52614,9 @@ async function handleLauncherFederationGraph(_req, res, _params, _contextRoot) {
52348
52614
  if (c.status === "stale") continue;
52349
52615
  connections.push({ from: v.name, to: c.vault, direction: c.direction });
52350
52616
  if (c.direction !== "out" && c.direction !== "both") continue;
52351
- const key = `${v.name} ${c.vault}`;
52352
- if (seen.has(key)) continue;
52353
- seen.add(key);
52617
+ const key2 = `${v.name} ${c.vault}`;
52618
+ if (seen.has(key2)) continue;
52619
+ seen.add(key2);
52354
52620
  edges.push({ source: v.name, target: c.vault, active: shareableByName.get(c.vault) === true });
52355
52621
  }
52356
52622
  }
@@ -54566,15 +54832,15 @@ function parseEnv(raw) {
54566
54832
  if (raw.startsWith("export ", i)) i += "export ".length;
54567
54833
  const keyStart = i;
54568
54834
  while (i < n && raw[i] !== "=" && raw[i] !== "\n" && raw[i] !== "\r") i++;
54569
- const key = raw.slice(keyStart, i).trim();
54835
+ const key2 = raw.slice(keyStart, i).trim();
54570
54836
  if (i >= n || raw[i] !== "=") {
54571
- if (key) errors.push({ line, message: `missing '=' for key ${key}` });
54837
+ if (key2) errors.push({ line, message: `missing '=' for key ${key2}` });
54572
54838
  readToEol();
54573
54839
  continue;
54574
54840
  }
54575
54841
  i++;
54576
- if (!KEY_RE.test(key)) {
54577
- errors.push({ line, message: `invalid key: ${JSON.stringify(key)}` });
54842
+ if (!KEY_RE.test(key2)) {
54843
+ errors.push({ line, message: `invalid key: ${JSON.stringify(key2)}` });
54578
54844
  readToEol();
54579
54845
  continue;
54580
54846
  }
@@ -54625,7 +54891,7 @@ function parseEnv(raw) {
54625
54891
  i++;
54626
54892
  }
54627
54893
  if (i > n) {
54628
- errors.push({ line: startLine, message: `unterminated double-quoted value for ${key}` });
54894
+ errors.push({ line: startLine, message: `unterminated double-quoted value for ${key2}` });
54629
54895
  }
54630
54896
  readToEol();
54631
54897
  } else if (i < n && raw[i] === "'") {
@@ -54637,7 +54903,7 @@ function parseEnv(raw) {
54637
54903
  }
54638
54904
  if (i < n && raw[i] === "'") {
54639
54905
  i++;
54640
- } else errors.push({ line: startLine, message: `unterminated single-quoted value for ${key}` });
54906
+ } else errors.push({ line: startLine, message: `unterminated single-quoted value for ${key2}` });
54641
54907
  readToEol();
54642
54908
  } else {
54643
54909
  let raw_value = "";
@@ -54650,7 +54916,7 @@ function parseEnv(raw) {
54650
54916
  value = raw_value.trim();
54651
54917
  readToEol();
54652
54918
  }
54653
- values[key] = value;
54919
+ values[key2] = value;
54654
54920
  }
54655
54921
  return { values, errors };
54656
54922
  }
@@ -55730,11 +55996,11 @@ function isCreate(init) {
55730
55996
  init.path.replace(/\?.*$/, "")
55731
55997
  );
55732
55998
  }
55733
- function idemCachePath(key) {
55734
- return `${MARKETING_PATHS.byIdemDir()}/${key}.json`;
55999
+ function idemCachePath(key2) {
56000
+ return `${MARKETING_PATHS.byIdemDir()}/${key2}.json`;
55735
56001
  }
55736
- function readIdem(key) {
55737
- const p = idemCachePath(key);
56002
+ function readIdem(key2) {
56003
+ const p = idemCachePath(key2);
55738
56004
  if (!existsSync81(p)) return null;
55739
56005
  try {
55740
56006
  return JSON.parse(readFileSync60(p, "utf8"));
@@ -60736,13 +61002,13 @@ function registerConfigCommand(program2) {
60736
61002
  const cfg = readSetupConfig(projectRoot);
60737
61003
  if (process.stdin.isTTY) {
60738
61004
  if (!token) {
60739
- const key = (await promptInput({
61005
+ const key2 = (await promptInput({
60740
61006
  message: "ClickUp API key (pk_\u2026; goes to the gitignored secrets file \u2014 leave empty to add later):"
60741
61007
  })).trim();
60742
- if (key) {
61008
+ if (key2) {
60743
61009
  try {
60744
- writeClickUpToken(projectRoot, key);
60745
- success(`ClickUp token stored (${maskToken(key)}).`);
61010
+ writeClickUpToken(projectRoot, key2);
61011
+ success(`ClickUp token stored (${maskToken(key2)}).`);
60746
61012
  } catch (err) {
60747
61013
  error(err.message);
60748
61014
  }
@@ -60831,13 +61097,13 @@ function registerConfigCommand(program2) {
60831
61097
  const cfg = readSetupConfig(projectRoot);
60832
61098
  if (process.stdin.isTTY) {
60833
61099
  if (!token) {
60834
- const key = (await promptInput({
61100
+ const key2 = (await promptInput({
60835
61101
  message: "GitHub token (classic PAT with `repo`, or fine-grained with Issues + Metadata; goes to the gitignored secrets file \u2014 leave empty to add later):"
60836
61102
  })).trim();
60837
- if (key) {
61103
+ if (key2) {
60838
61104
  try {
60839
- writeGitHubToken(projectRoot, key);
60840
- success(`GitHub token stored (${maskToken(key)}).`);
61105
+ writeGitHubToken(projectRoot, key2);
61106
+ success(`GitHub token stored (${maskToken(key2)}).`);
60841
61107
  } catch (err) {
60842
61108
  error(err.message);
60843
61109
  }