@runcofactor/cli 0.13.0 → 0.15.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 (149) hide show
  1. package/dist/account-62I7FG5G.js +255 -0
  2. package/dist/account-62I7FG5G.js.map +1 -0
  3. package/dist/{api-catalog-7HLEN7C2.js → api-catalog-CAJUASVC.js} +5 -5
  4. package/dist/{attachment-OVNQD6Z2.js → attachment-RL4AZUJE.js} +5 -5
  5. package/dist/augmentor-GAF3MFY6.js +198 -0
  6. package/dist/augmentor-GAF3MFY6.js.map +1 -0
  7. package/dist/{auth-VUHL74FH.js → auth-DURHUZDW.js} +3 -3
  8. package/dist/{chunk-YN763NWQ.js → chunk-26U3DGUM.js} +10 -4
  9. package/dist/chunk-26U3DGUM.js.map +1 -0
  10. package/dist/{chunk-JZMJUPZP.js → chunk-32P26BZT.js} +3 -3
  11. package/dist/chunk-32P26BZT.js.map +1 -0
  12. package/dist/{chunk-QQVWGWPI.js → chunk-5R4HMSNX.js} +8561 -1511
  13. package/dist/chunk-5R4HMSNX.js.map +1 -0
  14. package/dist/{chunk-VGTKUOYS.js → chunk-AQPJQ5AE.js} +2 -2
  15. package/dist/{chunk-CQE46HSM.js → chunk-CFJXYPTF.js} +14 -8
  16. package/dist/chunk-CFJXYPTF.js.map +1 -0
  17. package/dist/{chunk-NL7CVG56.js → chunk-CJEKEW7R.js} +57 -10
  18. package/dist/chunk-CJEKEW7R.js.map +1 -0
  19. package/dist/{chunk-Z5LUTUDN.js → chunk-G5SXUXSU.js} +3 -3
  20. package/dist/{chunk-ZTOE3ND3.js → chunk-HKQ5XQAQ.js} +4 -4
  21. package/dist/{chunk-PZ4LCN6K.js → chunk-IGHDIWZU.js} +2 -2
  22. package/dist/{chunk-QGI4UCJX.js → chunk-IWKJQZJQ.js} +124 -74
  23. package/dist/chunk-IWKJQZJQ.js.map +1 -0
  24. package/dist/{chunk-ZD3KHESI.js → chunk-KRWRUU6R.js} +27 -7
  25. package/dist/chunk-KRWRUU6R.js.map +1 -0
  26. package/dist/{chunk-CRHPDPRS.js → chunk-PXFDH6YL.js} +63 -8
  27. package/dist/{chunk-CRHPDPRS.js.map → chunk-PXFDH6YL.js.map} +1 -1
  28. package/dist/{chunk-EJ4U242G.js → chunk-UZ2ZA5A6.js} +2 -2
  29. package/dist/{chunk-EEN2TZUQ.js → chunk-VKBTI5EF.js} +3 -3
  30. package/dist/{chunk-ENDHMYEJ.js → chunk-ZXRVFFCY.js} +3 -3
  31. package/dist/{credential-LO2SEEHU.js → credential-JGVSEGVH.js} +5 -5
  32. package/dist/{credential-template-ZN7W7734.js → credential-template-CWWMOKB2.js} +5 -5
  33. package/dist/{debug-workflow-R3RYYAXK.js → debug-workflow-BXRU72YZ.js} +5 -5
  34. package/dist/{docs-DIAFBDXQ.js → docs-PVBXPTGR.js} +95 -11
  35. package/dist/docs-PVBXPTGR.js.map +1 -0
  36. package/dist/{doctor-NZPUSCRE.js → doctor-RHMKD4W5.js} +3 -3
  37. package/dist/{environment-RQVU4P5M.js → environment-WZKIO3R3.js} +5 -5
  38. package/dist/{feature-flag-XG26RURR.js → feature-flag-K5REGGDY.js} +98 -12
  39. package/dist/feature-flag-K5REGGDY.js.map +1 -0
  40. package/dist/index.js +107 -51
  41. package/dist/index.js.map +1 -1
  42. package/dist/{init-EDNLKGPT.js → init-FFUZO5D7.js} +5 -5
  43. package/dist/{install-FYZ3HNZK.js → install-XRKEQAFZ.js} +5 -5
  44. package/dist/{issues-NNRVTJ4L.js → issues-I3V6GEXU.js} +5 -5
  45. package/dist/{knobs-A2BOBH22.js → knobs-6WLJMB44.js} +7 -6
  46. package/dist/knobs-6WLJMB44.js.map +1 -0
  47. package/dist/{list-F33VZ4BJ.js → list-PHC7VYNS.js} +5 -5
  48. package/dist/{local-DQDTM3XA.js → local-VGYRSW22.js} +7 -7
  49. package/dist/{login-BUMVIB36.js → login-QPU2BKG2.js} +5 -5
  50. package/dist/{mcp-B5Y5CDMQ.js → mcp-LA452TOA.js} +9 -9
  51. package/dist/{mcp-B5Y5CDMQ.js.map → mcp-LA452TOA.js.map} +1 -1
  52. package/dist/{pdf-extract-ABWV3L5X.js → pdf-extract-YHE54XU4.js} +2 -2
  53. package/dist/product-RSZV5HMB.js +346 -0
  54. package/dist/product-RSZV5HMB.js.map +1 -0
  55. package/dist/{property-NJ4SRXQG.js → property-YP4GHQAR.js} +5 -5
  56. package/dist/{psql-VBZFCMNR.js → psql-XGLBI6T7.js} +3 -3
  57. package/dist/{record-WAO36O7G.js → record-KWKHP2ZY.js} +6 -6
  58. package/dist/{redis-DHZXHL4S.js → redis-VJGCUJPV.js} +3 -3
  59. package/dist/redis-VJGCUJPV.js.map +1 -0
  60. package/dist/{release-STJKUKTE.js → release-NDRHPW6V.js} +5 -5
  61. package/dist/{sandbox-DWSGLY7B.js → sandbox-OOCANWOG.js} +51 -7
  62. package/dist/sandbox-OOCANWOG.js.map +1 -0
  63. package/dist/{scenarios-HCIDY725.js → scenarios-2HRLCGFY.js} +5 -5
  64. package/dist/{session-Y5RHU54D.js → session-M4ULYDYP.js} +8 -9
  65. package/dist/session-M4ULYDYP.js.map +1 -0
  66. package/dist/{skill-23WAHUOB.js → skill-4DGPRDUC.js} +10 -10
  67. package/dist/{skill-23WAHUOB.js.map → skill-4DGPRDUC.js.map} +1 -1
  68. package/dist/skills/debug-run/SKILL.md +7 -1
  69. package/dist/skills/debug-run/history/1.3.1.md +279 -0
  70. package/dist/skills/debug-run/version.json +1 -1
  71. package/dist/skills/optimize-cache/SKILL.md +41 -4
  72. package/dist/{spec-LM5XHOQ5.js → spec-XZ2TKUFZ.js} +5 -5
  73. package/dist/{src-BGDRMOKC.js → src-2FK3JHGW.js} +315 -104
  74. package/dist/src-2FK3JHGW.js.map +1 -0
  75. package/dist/{src-NCJPUAE6.js → src-CV57ZD6I.js} +10 -8
  76. package/dist/{src-22RI5VP2.js → src-HL7HEJIW.js} +2 -2
  77. package/dist/{src-Y3K7UJEF.js → src-OU7544PM.js} +6 -4
  78. package/dist/{start-SWY55CZX.js → start-IYKF3C3X.js} +5 -5
  79. package/dist/{tag-YSU2XXPI.js → tag-T45MMSCH.js} +6 -6
  80. package/dist/{task-NLBKLD7D.js → task-MCUHAVTD.js} +5 -5
  81. package/dist/{test-suite-QCPWZ2LS.js → test-suite-BICBRSBP.js} +10 -8
  82. package/dist/{test-suite-QCPWZ2LS.js.map → test-suite-BICBRSBP.js.map} +1 -1
  83. package/dist/trace-2BAPMYAS.js +16 -0
  84. package/dist/{triage-TT4BMDBU.js → triage-M3RZ2ASB.js} +6 -6
  85. package/dist/{upgrade-6ZUFETKX.js → upgrade-4QCRAUHP.js} +3 -3
  86. package/dist/{workflow-2CX3ZNOQ.js → workflow-4J23FV7K.js} +86 -15
  87. package/dist/workflow-4J23FV7K.js.map +1 -0
  88. package/dist/{workflow-cache-GXNE6SU2.js → workflow-cache-XPSK6KC7.js} +26 -13
  89. package/dist/workflow-cache-XPSK6KC7.js.map +1 -0
  90. package/dist/{workflow-debug-PRX3DWGD.js → workflow-debug-W4USZH35.js} +9 -9
  91. package/dist/{workflow-proposals-BW327WGL.js → workflow-proposals-5E3DTYZB.js} +5 -7
  92. package/dist/workflow-proposals-5E3DTYZB.js.map +1 -0
  93. package/package.json +5 -1
  94. package/dist/chunk-CQE46HSM.js.map +0 -1
  95. package/dist/chunk-JZMJUPZP.js.map +0 -1
  96. package/dist/chunk-NL7CVG56.js.map +0 -1
  97. package/dist/chunk-QGI4UCJX.js.map +0 -1
  98. package/dist/chunk-QQVWGWPI.js.map +0 -1
  99. package/dist/chunk-YN763NWQ.js.map +0 -1
  100. package/dist/chunk-ZD3KHESI.js.map +0 -1
  101. package/dist/docs-DIAFBDXQ.js.map +0 -1
  102. package/dist/feature-flag-XG26RURR.js.map +0 -1
  103. package/dist/knobs-A2BOBH22.js.map +0 -1
  104. package/dist/redis-DHZXHL4S.js.map +0 -1
  105. package/dist/sandbox-DWSGLY7B.js.map +0 -1
  106. package/dist/session-Y5RHU54D.js.map +0 -1
  107. package/dist/src-BGDRMOKC.js.map +0 -1
  108. package/dist/trace-A3ZY6K26.js +0 -16
  109. package/dist/workflow-2CX3ZNOQ.js.map +0 -1
  110. package/dist/workflow-cache-GXNE6SU2.js.map +0 -1
  111. package/dist/workflow-proposals-BW327WGL.js.map +0 -1
  112. /package/dist/{api-catalog-7HLEN7C2.js.map → api-catalog-CAJUASVC.js.map} +0 -0
  113. /package/dist/{attachment-OVNQD6Z2.js.map → attachment-RL4AZUJE.js.map} +0 -0
  114. /package/dist/{auth-VUHL74FH.js.map → auth-DURHUZDW.js.map} +0 -0
  115. /package/dist/{chunk-VGTKUOYS.js.map → chunk-AQPJQ5AE.js.map} +0 -0
  116. /package/dist/{chunk-Z5LUTUDN.js.map → chunk-G5SXUXSU.js.map} +0 -0
  117. /package/dist/{chunk-ZTOE3ND3.js.map → chunk-HKQ5XQAQ.js.map} +0 -0
  118. /package/dist/{chunk-PZ4LCN6K.js.map → chunk-IGHDIWZU.js.map} +0 -0
  119. /package/dist/{chunk-EJ4U242G.js.map → chunk-UZ2ZA5A6.js.map} +0 -0
  120. /package/dist/{chunk-EEN2TZUQ.js.map → chunk-VKBTI5EF.js.map} +0 -0
  121. /package/dist/{chunk-ENDHMYEJ.js.map → chunk-ZXRVFFCY.js.map} +0 -0
  122. /package/dist/{credential-LO2SEEHU.js.map → credential-JGVSEGVH.js.map} +0 -0
  123. /package/dist/{credential-template-ZN7W7734.js.map → credential-template-CWWMOKB2.js.map} +0 -0
  124. /package/dist/{debug-workflow-R3RYYAXK.js.map → debug-workflow-BXRU72YZ.js.map} +0 -0
  125. /package/dist/{doctor-NZPUSCRE.js.map → doctor-RHMKD4W5.js.map} +0 -0
  126. /package/dist/{environment-RQVU4P5M.js.map → environment-WZKIO3R3.js.map} +0 -0
  127. /package/dist/{init-EDNLKGPT.js.map → init-FFUZO5D7.js.map} +0 -0
  128. /package/dist/{install-FYZ3HNZK.js.map → install-XRKEQAFZ.js.map} +0 -0
  129. /package/dist/{issues-NNRVTJ4L.js.map → issues-I3V6GEXU.js.map} +0 -0
  130. /package/dist/{list-F33VZ4BJ.js.map → list-PHC7VYNS.js.map} +0 -0
  131. /package/dist/{local-DQDTM3XA.js.map → local-VGYRSW22.js.map} +0 -0
  132. /package/dist/{login-BUMVIB36.js.map → login-QPU2BKG2.js.map} +0 -0
  133. /package/dist/{pdf-extract-ABWV3L5X.js.map → pdf-extract-YHE54XU4.js.map} +0 -0
  134. /package/dist/{property-NJ4SRXQG.js.map → property-YP4GHQAR.js.map} +0 -0
  135. /package/dist/{psql-VBZFCMNR.js.map → psql-XGLBI6T7.js.map} +0 -0
  136. /package/dist/{record-WAO36O7G.js.map → record-KWKHP2ZY.js.map} +0 -0
  137. /package/dist/{release-STJKUKTE.js.map → release-NDRHPW6V.js.map} +0 -0
  138. /package/dist/{scenarios-HCIDY725.js.map → scenarios-2HRLCGFY.js.map} +0 -0
  139. /package/dist/{spec-LM5XHOQ5.js.map → spec-XZ2TKUFZ.js.map} +0 -0
  140. /package/dist/{src-NCJPUAE6.js.map → src-CV57ZD6I.js.map} +0 -0
  141. /package/dist/{src-22RI5VP2.js.map → src-HL7HEJIW.js.map} +0 -0
  142. /package/dist/{src-Y3K7UJEF.js.map → src-OU7544PM.js.map} +0 -0
  143. /package/dist/{start-SWY55CZX.js.map → start-IYKF3C3X.js.map} +0 -0
  144. /package/dist/{tag-YSU2XXPI.js.map → tag-T45MMSCH.js.map} +0 -0
  145. /package/dist/{task-NLBKLD7D.js.map → task-MCUHAVTD.js.map} +0 -0
  146. /package/dist/{trace-A3ZY6K26.js.map → trace-2BAPMYAS.js.map} +0 -0
  147. /package/dist/{triage-TT4BMDBU.js.map → triage-M3RZ2ASB.js.map} +0 -0
  148. /package/dist/{upgrade-6ZUFETKX.js.map → upgrade-4QCRAUHP.js.map} +0 -0
  149. /package/dist/{workflow-debug-PRX3DWGD.js.map → workflow-debug-W4USZH35.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  PlaywrightClient
4
- } from "./chunk-QQVWGWPI.js";
4
+ } from "./chunk-5R4HMSNX.js";
5
5
 
6
6
  // src/local-browser/host.ts
7
7
  var HEARTBEAT_INTERVAL_MS = 3e4;
@@ -410,4 +410,4 @@ export {
410
410
  LocalBrowserHost,
411
411
  USER_PAUSED_ERROR
412
412
  };
413
- //# sourceMappingURL=chunk-EJ4U242G.js.map
413
+ //# sourceMappingURL=chunk-UZ2ZA5A6.js.map
@@ -1,12 +1,12 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  apiRequest
4
- } from "./chunk-CQE46HSM.js";
4
+ } from "./chunk-CFJXYPTF.js";
5
5
  import {
6
6
  getArgValue,
7
7
  hasFlag,
8
8
  resolveConfig
9
- } from "./chunk-PZ4LCN6K.js";
9
+ } from "./chunk-IGHDIWZU.js";
10
10
 
11
11
  // src/tag.ts
12
12
  import process from "process";
@@ -423,4 +423,4 @@ export {
423
423
  applyWorkflowTagFlags,
424
424
  runTag
425
425
  };
426
- //# sourceMappingURL=chunk-EEN2TZUQ.js.map
426
+ //# sourceMappingURL=chunk-VKBTI5EF.js.map
@@ -1,12 +1,12 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  apiRequest
4
- } from "./chunk-CQE46HSM.js";
4
+ } from "./chunk-CFJXYPTF.js";
5
5
  import {
6
6
  getArgValue,
7
7
  hasFlag,
8
8
  resolveConfig
9
- } from "./chunk-PZ4LCN6K.js";
9
+ } from "./chunk-IGHDIWZU.js";
10
10
 
11
11
  // src/triage.ts
12
12
  import process from "process";
@@ -268,4 +268,4 @@ export {
268
268
  isTriageEnabledForExecution,
269
269
  runTriage
270
270
  };
271
- //# sourceMappingURL=chunk-ENDHMYEJ.js.map
271
+ //# sourceMappingURL=chunk-ZXRVFFCY.js.map
@@ -3,7 +3,7 @@ import {
3
3
  apiRequest,
4
4
  fetchProperties,
5
5
  getApplicationArg
6
- } from "./chunk-CQE46HSM.js";
6
+ } from "./chunk-CFJXYPTF.js";
7
7
  import {
8
8
  apiFetch,
9
9
  exitOnFailure
@@ -12,10 +12,10 @@ import {
12
12
  getArgValue,
13
13
  hasFlag,
14
14
  resolveConfig
15
- } from "./chunk-PZ4LCN6K.js";
16
- import "./chunk-JZMJUPZP.js";
15
+ } from "./chunk-IGHDIWZU.js";
16
+ import "./chunk-32P26BZT.js";
17
17
  import "./chunk-JWHYXEA2.js";
18
- import "./chunk-QGI4UCJX.js";
18
+ import "./chunk-IWKJQZJQ.js";
19
19
  import "./chunk-VKVL7WBN.js";
20
20
 
21
21
  // src/credential.ts
@@ -451,4 +451,4 @@ async function runCredential(argv) {
451
451
  export {
452
452
  runCredential
453
453
  };
454
- //# sourceMappingURL=credential-LO2SEEHU.js.map
454
+ //# sourceMappingURL=credential-JGVSEGVH.js.map
@@ -3,16 +3,16 @@ import {
3
3
  apiRequest,
4
4
  fetchProperties,
5
5
  getApplicationArg
6
- } from "./chunk-CQE46HSM.js";
6
+ } from "./chunk-CFJXYPTF.js";
7
7
  import "./chunk-3CZU7XCS.js";
8
8
  import {
9
9
  getArgValue,
10
10
  hasFlag,
11
11
  resolveConfig
12
- } from "./chunk-PZ4LCN6K.js";
13
- import "./chunk-JZMJUPZP.js";
12
+ } from "./chunk-IGHDIWZU.js";
13
+ import "./chunk-32P26BZT.js";
14
14
  import "./chunk-JWHYXEA2.js";
15
- import "./chunk-QGI4UCJX.js";
15
+ import "./chunk-IWKJQZJQ.js";
16
16
  import "./chunk-VKVL7WBN.js";
17
17
 
18
18
  // src/credential-template.ts
@@ -290,4 +290,4 @@ async function runCredentialTemplate(argv) {
290
290
  export {
291
291
  runCredentialTemplate
292
292
  };
293
- //# sourceMappingURL=credential-template-ZN7W7734.js.map
293
+ //# sourceMappingURL=credential-template-CWWMOKB2.js.map
@@ -7,16 +7,16 @@ import {
7
7
  } from "./chunk-J6SH7GQT.js";
8
8
  import {
9
9
  downloadStorageState
10
- } from "./chunk-CQE46HSM.js";
10
+ } from "./chunk-CFJXYPTF.js";
11
11
  import "./chunk-3CZU7XCS.js";
12
12
  import {
13
13
  getArgValue,
14
14
  hasFlag,
15
15
  resolveConfig
16
- } from "./chunk-PZ4LCN6K.js";
17
- import "./chunk-JZMJUPZP.js";
16
+ } from "./chunk-IGHDIWZU.js";
17
+ import "./chunk-32P26BZT.js";
18
18
  import "./chunk-JWHYXEA2.js";
19
- import "./chunk-QGI4UCJX.js";
19
+ import "./chunk-IWKJQZJQ.js";
20
20
  import "./chunk-VKVL7WBN.js";
21
21
 
22
22
  // src/debug-workflow.ts
@@ -257,4 +257,4 @@ async function runDebugWorkflow(argv) {
257
257
  export {
258
258
  runDebugWorkflow
259
259
  };
260
- //# sourceMappingURL=debug-workflow-R3RYYAXK.js.map
260
+ //# sourceMappingURL=debug-workflow-BXRU72YZ.js.map
@@ -1,18 +1,18 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  apiRequest
4
- } from "./chunk-CQE46HSM.js";
4
+ } from "./chunk-CFJXYPTF.js";
5
5
  import "./chunk-3CZU7XCS.js";
6
6
  import {
7
7
  getArgValue,
8
8
  hasFlag,
9
9
  resolveConfig
10
- } from "./chunk-PZ4LCN6K.js";
11
- import "./chunk-JZMJUPZP.js";
10
+ } from "./chunk-IGHDIWZU.js";
11
+ import "./chunk-32P26BZT.js";
12
12
  import {
13
13
  getSubDir
14
14
  } from "./chunk-JWHYXEA2.js";
15
- import "./chunk-QGI4UCJX.js";
15
+ import "./chunk-IWKJQZJQ.js";
16
16
  import "./chunk-VKVL7WBN.js";
17
17
 
18
18
  // src/docs.ts
@@ -25,9 +25,9 @@ function parseNavFields(argv) {
25
25
  const section = getArgValue(argv, "--section");
26
26
  const group = getArgValue(argv, "--group");
27
27
  const order = getArgValue(argv, "--order");
28
- if (section != null) out.navSection = section;
29
- if (group != null) out.navGroup = group;
30
- if (order != null) {
28
+ if (section !== null && section !== void 0) out.navSection = section;
29
+ if (group !== null && group !== void 0) out.navGroup = group;
30
+ if (order !== null && order !== void 0) {
31
31
  const n = Number.parseInt(order, 10);
32
32
  if (Number.isNaN(n)) {
33
33
  console.error("Error: --order must be an integer.");
@@ -289,6 +289,83 @@ async function handleDelete(argv, apiUrl, token, orgMode) {
289
289
  }
290
290
  console.log(`Deleted page: ${slug}`);
291
291
  }
292
+ async function handleNav(argv, apiUrl, token) {
293
+ const [action, ...rest] = argv;
294
+ switch (action) {
295
+ case void 0:
296
+ case "list": {
297
+ const result = await apiRequest(
298
+ apiUrl,
299
+ token,
300
+ "GET",
301
+ "/public/docs/nav"
302
+ );
303
+ const groups = result.data?.groups ?? [];
304
+ if (hasFlag(rest, "--json")) {
305
+ console.log(JSON.stringify(groups, null, 2));
306
+ return;
307
+ }
308
+ if (groups.length === 0) {
309
+ console.log("No sidebar groups found.");
310
+ return;
311
+ }
312
+ const keyWidth = Math.max(3, ...groups.map((g) => g.key.length));
313
+ const titleWidth = Math.max(5, ...groups.map((g) => g.title.length));
314
+ console.log(`| ${"Key".padEnd(keyWidth)} | ${"Title".padEnd(titleWidth)} | Order |`);
315
+ console.log(`| ${"-".repeat(keyWidth)} | ${"-".repeat(titleWidth)} | ----- |`);
316
+ for (const g of groups) {
317
+ console.log(`| ${g.key.padEnd(keyWidth)} | ${g.title.padEnd(titleWidth)} | ${String(g.sortOrder).padEnd(5)} |`);
318
+ }
319
+ return;
320
+ }
321
+ case "set": {
322
+ const key = rest[0];
323
+ if (!key || key.startsWith("--")) {
324
+ console.error("Usage: canary docs nav set <key> [--title <text>] [--order <n>]");
325
+ process.exit(1);
326
+ }
327
+ const title = getArgValue(rest, "--title");
328
+ const orderRaw = getArgValue(rest, "--order");
329
+ const body = {};
330
+ if (title !== null && title !== void 0) body.title = title;
331
+ if (orderRaw !== null && orderRaw !== void 0) {
332
+ const n = Number.parseInt(orderRaw, 10);
333
+ if (Number.isNaN(n)) {
334
+ console.error("Error: --order must be an integer.");
335
+ process.exit(1);
336
+ }
337
+ body.sortOrder = n;
338
+ }
339
+ await apiRequest(apiUrl, token, "PUT", `/superadmin/docs/nav?key=${encodeURIComponent(key)}`, body);
340
+ console.log(`Updated sidebar group: ${key}`);
341
+ return;
342
+ }
343
+ case "reorder": {
344
+ const keys = rest.filter((a) => !a.startsWith("--"));
345
+ if (keys.length === 0) {
346
+ console.error("Usage: canary docs nav reorder <key1> <key2> ...");
347
+ process.exit(1);
348
+ }
349
+ await apiRequest(apiUrl, token, "PUT", "/superadmin/docs/nav/reorder", { keys });
350
+ console.log(`Reordered ${keys.length} sidebar groups.`);
351
+ return;
352
+ }
353
+ case "delete": {
354
+ const key = rest[0];
355
+ if (!key || key.startsWith("--")) {
356
+ console.error("Usage: canary docs nav delete <key>");
357
+ process.exit(1);
358
+ }
359
+ await apiRequest(apiUrl, token, "DELETE", `/superadmin/docs/nav?key=${encodeURIComponent(key)}`);
360
+ console.log(`Deleted sidebar group: ${key}`);
361
+ return;
362
+ }
363
+ default:
364
+ console.error(`Unknown nav action: ${action}`);
365
+ console.error("Actions: list, set <key>, reorder <keys...>, delete <key>");
366
+ process.exit(1);
367
+ }
368
+ }
292
369
  function printDocsHelp() {
293
370
  console.log(
294
371
  [
@@ -303,15 +380,19 @@ function printDocsHelp() {
303
380
  " history <slug> Show version history",
304
381
  " create <slug> --file <path> --title ... Create new page",
305
382
  " delete <slug> Soft-delete a page",
383
+ " nav list [--json] List sidebar groups + order",
384
+ " nav set <key> [--title <t>] [--order n] Create or update a sidebar group",
385
+ " nav reorder <key1> <key2> ... Set sidebar group order",
386
+ " nav delete <key> Remove a sidebar group",
306
387
  "",
307
388
  "Options:",
308
389
  " --org Use org-scoped endpoints (requires auth)",
309
390
  " --file <path> Path to markdown file",
310
391
  " --title <text> Page title (create only)",
311
392
  " --description <text> Page description (create only)",
312
- " --section <text> Sidebar section (data-driven nav; create/push)",
313
- " --group <text> Sidebar sub-group within the section (create/push)",
314
- " --order <n> Sort order within the section/group (create/push)",
393
+ " --group <key> Sidebar group key the page belongs to (see `nav list`; create/push)",
394
+ " --order <n> Sort order within the group (create/push)",
395
+ " --section <text> Deprecated; sidebar grouping is driven by --group now",
315
396
  " --message <text> Version commit message",
316
397
  " --limit <n> Max results for search (default: 8, max: 20)",
317
398
  " --output <path> Output path for pull (default: <tmpdir>/canary/docs/<slug>.md)",
@@ -355,6 +436,9 @@ async function runDocs(argv) {
355
436
  case "delete":
356
437
  await handleDelete(rest, apiUrl, token, orgMode);
357
438
  break;
439
+ case "nav":
440
+ await handleNav(rest, apiUrl, token);
441
+ break;
358
442
  default:
359
443
  console.error(`Unknown sub-command: ${subCommand}`);
360
444
  printDocsHelp();
@@ -364,4 +448,4 @@ async function runDocs(argv) {
364
448
  export {
365
449
  runDocs
366
450
  };
367
- //# sourceMappingURL=docs-DIAFBDXQ.js.map
451
+ //# sourceMappingURL=docs-PVBXPTGR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs.ts"],"sourcesContent":["/**\n * CLI Documentation Management\n *\n * Allows agents and superadmins to list, pull, edit, and push documentation pages.\n * Supports both global (public/superadmin) and org-scoped (--org) modes.\n */\n\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport { getSubDir } from '@chatsdet/tmp';\nimport process from 'node:process';\nimport { resolveConfig, getArgValue, hasFlag } from './auth.js';\nimport { apiRequest } from './cli-helpers.js';\n\ntype DocsPageListItem = {\n slug: string;\n title: string;\n description: string | null;\n updatedAt: string;\n publishedBy: string | null;\n};\n\ntype DocsVersionItem = {\n version: number;\n title: string;\n checksum: string;\n message: string | null;\n createdBy: string;\n createdAt: string;\n};\n\ntype DocsApiResponse = {\n ok: boolean;\n error?: string;\n data?: {\n slug?: string;\n title?: string;\n pages?: DocsPageListItem[];\n content?: string;\n versions?: DocsVersionItem[];\n };\n};\n\nconst DEFAULT_PULL_DIR = getSubDir('docs');\n\n/**\n * Parse the optional data-driven sidebar-placement flags. Only present flags\n * are included, so `push`/`create` without them leaves existing values intact.\n */\nfunction parseNavFields(argv: string[]): {\n navSection?: string;\n navGroup?: string;\n navOrder?: number;\n} {\n const out: { navSection?: string; navGroup?: string; navOrder?: number } = {};\n const section = getArgValue(argv, '--section');\n const group = getArgValue(argv, '--group');\n const order = getArgValue(argv, '--order');\n if (section !== null && section !== undefined) out.navSection = section;\n if (group !== null && group !== undefined) out.navGroup = group;\n if (order !== null && order !== undefined) {\n const n = Number.parseInt(order, 10);\n if (Number.isNaN(n)) {\n console.error('Error: --order must be an integer.');\n process.exit(1);\n }\n out.navOrder = n;\n }\n return out;\n}\n\n/** Return the base path prefix for read endpoints based on --org flag */\nfunction readPrefix(orgMode: boolean): string {\n return orgMode ? '/docs' : '/public/docs';\n}\n\n/** Return the base path prefix for write endpoints based on --org flag */\nfunction writePrefix(orgMode: boolean): string {\n return orgMode ? '/docs' : '/superadmin/docs';\n}\n\nasync function handleList(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const jsonOutput = hasFlag(argv, '--json');\n const result = await apiRequest<DocsApiResponse>(apiUrl, token, 'GET', `${readPrefix(orgMode)}/pages`);\n const pages: DocsPageListItem[] = result.data?.pages ?? [];\n\n if (jsonOutput) {\n console.log(JSON.stringify(pages, null, 2));\n return;\n }\n\n if (pages.length === 0) {\n console.log('No documentation pages found.');\n return;\n }\n\n // Default: markdown table for easy consumption by agents and humans\n const slugWidth = Math.max(4, ...pages.map((p) => p.slug.length));\n const titleWidth = Math.max(5, ...pages.map((p) => p.title.length));\n const header = `| ${'Slug'.padEnd(slugWidth)} | ${'Title'.padEnd(titleWidth)} | Updated | Published By |`;\n const sep = `| ${'-'.repeat(slugWidth)} | ${'-'.repeat(titleWidth)} | ---------- | ------------ |`;\n console.log(header);\n console.log(sep);\n for (const page of pages) {\n const date = new Date(page.updatedAt).toISOString().slice(0, 10);\n const by = page.publishedBy ?? '';\n console.log(`| ${page.slug.padEnd(slugWidth)} | ${page.title.padEnd(titleWidth)} | ${date} | ${by.padEnd(12)} |`);\n }\n}\n\nasync function fetchDocContent(slug: string, apiUrl: string, token: string, orgMode: boolean): Promise<string> {\n if (orgMode) {\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'GET',\n `/docs/pages/content?slug=${encodeURIComponent(slug)}`\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n return result.data?.content ?? '';\n }\n\n const res = await fetch(`${apiUrl}/public/docs/pages/raw?slug=${encodeURIComponent(slug)}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (res.status === 404) {\n console.error(`Error: Page not found: ${slug}`);\n process.exit(1);\n }\n\n if (!res.ok) {\n console.error(`Error: ${res.statusText}`);\n process.exit(1);\n }\n\n return res.text();\n}\n\nasync function handleGet(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs get <slug>');\n process.exit(1);\n }\n\n const content = await fetchDocContent(slug, apiUrl, token, orgMode);\n console.log(content);\n}\n\nasync function handlePull(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs pull <slug> [--output <path>]');\n process.exit(1);\n }\n\n const outputPath = getArgValue(argv, '--output') ?? path.join(DEFAULT_PULL_DIR, `${slug}.md`);\n const content = await fetchDocContent(slug, apiUrl, token, orgMode);\n\n await mkdir(path.dirname(outputPath), { recursive: true });\n await writeFile(outputPath, content, 'utf8');\n console.log(`Pulled ${slug} → ${outputPath}`);\n}\n\nasync function handlePush(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs push <slug> --file <path> [--message <text>]');\n process.exit(1);\n }\n\n const filePath = getArgValue(argv, '--file');\n if (!filePath) {\n console.error('Error: Missing --file <path>.');\n process.exit(1);\n }\n\n const message = getArgValue(argv, '--message') ?? undefined;\n const createdBy = getArgValue(argv, '--created-by') ?? undefined;\n\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n console.error(`Error: Could not read file: ${filePath}`);\n process.exit(1);\n }\n\n // Strip `export const meta = { ... };` block so raw JS isn't stored as doc content\n content = content.replace(/^\\s*export\\s+const\\s+meta\\s*=\\s*\\{[^}]*\\};\\s*/, '');\n\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'PUT',\n `${writePrefix(orgMode)}/pages?slug=${encodeURIComponent(slug)}`,\n { content, message, createdBy, ...parseNavFields(argv) }\n );\n\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n\n console.log(`Published new version of ${slug}`);\n}\n\nasync function handleHistory(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs history <slug>');\n process.exit(1);\n }\n\n const jsonOutput = hasFlag(argv, '--json');\n\n const res = await fetch(`${apiUrl}${readPrefix(orgMode)}/pages/versions?slug=${encodeURIComponent(slug)}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }));\n console.error(`Error: ${(body as { error?: string }).error ?? res.statusText}`);\n process.exit(1);\n }\n\n const body = (await res.json()) as DocsApiResponse;\n const versions = body.data?.versions ?? [];\n\n if (jsonOutput) {\n console.log(JSON.stringify(versions, null, 2));\n return;\n }\n\n if (versions.length === 0) {\n console.log(`No versions found for ${slug}.`);\n return;\n }\n\n for (const v of versions) {\n const date = new Date(v.createdAt).toISOString().slice(0, 19).replace('T', ' ');\n const msg = v.message ? ` — ${v.message}` : '';\n console.log(` v${v.version} ${date} ${v.createdBy}${msg}`);\n }\n}\n\nasync function handleCreate(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs create <slug> --file <path> --title <text>');\n process.exit(1);\n }\n\n const filePath = getArgValue(argv, '--file');\n const title = getArgValue(argv, '--title');\n\n if (!filePath) {\n console.error('Error: Missing --file <path>.');\n process.exit(1);\n }\n if (!title) {\n console.error('Error: Missing --title <text>.');\n process.exit(1);\n }\n\n const description = getArgValue(argv, '--description') ?? undefined;\n const message = getArgValue(argv, '--message') ?? undefined;\n\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n console.error(`Error: Could not read file: ${filePath}`);\n process.exit(1);\n }\n\n // Strip `export const meta = { ... };` block so raw JS isn't stored as doc content\n content = content.replace(/^\\s*export\\s+const\\s+meta\\s*=\\s*\\{[^}]*\\};\\s*/, '');\n\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'POST',\n `${writePrefix(orgMode)}/pages`,\n {\n slug,\n title,\n description,\n content,\n message,\n ...parseNavFields(argv),\n }\n );\n\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n\n console.log(`Created page: ${slug}`);\n}\n\ntype DocsSearchResult = {\n path: string;\n title: string;\n description: string | null;\n excerpt: string;\n};\n\ntype DocsSearchResponse = {\n ok: boolean;\n error?: string;\n data?: { results: DocsSearchResult[] };\n};\n\nasync function handleSearch(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const query = argv.filter((a) => !a.startsWith('--')).join(' ').trim();\n if (!query) {\n console.error('Error: Missing search query.');\n console.error('Usage: canary docs search <query> [--limit <n>] [--json]');\n process.exit(1);\n }\n\n const jsonOutput = hasFlag(argv, '--json');\n const limitArg = getArgValue(argv, '--limit');\n const params = new URLSearchParams({ q: query });\n if (limitArg) params.set('limit', limitArg);\n\n const searchPath = orgMode ? '/docs/search' : '/public/docs/search';\n const res = await fetch(`${apiUrl}${searchPath}?${params.toString()}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }));\n console.error(`Error: ${(body as { error?: string }).error ?? res.statusText}`);\n process.exit(1);\n }\n\n const body = (await res.json()) as DocsSearchResponse;\n const results = body.data?.results ?? [];\n\n if (jsonOutput) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log('No results found.');\n return;\n }\n\n for (const r of results) {\n const desc = r.description ? ` ${r.description}` : '';\n const excerpt = r.excerpt\n ? ` ${r.excerpt.replace(/<\\/?mark>/g, '').replace(/\\n/g, ' ').slice(0, 120)}`\n : '';\n console.log(` ${r.path ?? r.title}`);\n if (r.title) console.log(` ${r.title}${desc}`);\n if (excerpt) console.log(` ${excerpt}`);\n console.log();\n }\n}\n\nasync function handleDelete(argv: string[], apiUrl: string, token: string, orgMode: boolean): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs delete <slug>');\n process.exit(1);\n }\n\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'DELETE',\n `${writePrefix(orgMode)}/pages?slug=${encodeURIComponent(slug)}`\n );\n\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n\n console.log(`Deleted page: ${slug}`);\n}\n\ntype DocsNavGroup = { key: string; title: string; sortOrder: number };\n\nasync function handleNav(argv: string[], apiUrl: string, token: string): Promise<void> {\n const [action, ...rest] = argv;\n\n switch (action) {\n case undefined:\n case 'list': {\n const result = await apiRequest<{ ok: boolean; data?: { groups: DocsNavGroup[] }; error?: string }>(\n apiUrl,\n token,\n 'GET',\n '/public/docs/nav'\n );\n const groups = result.data?.groups ?? [];\n if (hasFlag(rest, '--json')) {\n console.log(JSON.stringify(groups, null, 2));\n return;\n }\n if (groups.length === 0) {\n console.log('No sidebar groups found.');\n return;\n }\n const keyWidth = Math.max(3, ...groups.map((g) => g.key.length));\n const titleWidth = Math.max(5, ...groups.map((g) => g.title.length));\n console.log(`| ${'Key'.padEnd(keyWidth)} | ${'Title'.padEnd(titleWidth)} | Order |`);\n console.log(`| ${'-'.repeat(keyWidth)} | ${'-'.repeat(titleWidth)} | ----- |`);\n for (const g of groups) {\n console.log(`| ${g.key.padEnd(keyWidth)} | ${g.title.padEnd(titleWidth)} | ${String(g.sortOrder).padEnd(5)} |`);\n }\n return;\n }\n case 'set': {\n const key = rest[0];\n if (!key || key.startsWith('--')) {\n console.error('Usage: canary docs nav set <key> [--title <text>] [--order <n>]');\n process.exit(1);\n }\n const title = getArgValue(rest, '--title');\n const orderRaw = getArgValue(rest, '--order');\n const body: Record<string, unknown> = {};\n if (title !== null && title !== undefined) body.title = title;\n if (orderRaw !== null && orderRaw !== undefined) {\n const n = Number.parseInt(orderRaw, 10);\n if (Number.isNaN(n)) {\n console.error('Error: --order must be an integer.');\n process.exit(1);\n }\n body.sortOrder = n;\n }\n await apiRequest(apiUrl, token, 'PUT', `/superadmin/docs/nav?key=${encodeURIComponent(key)}`, body);\n console.log(`Updated sidebar group: ${key}`);\n return;\n }\n case 'reorder': {\n const keys = rest.filter((a) => !a.startsWith('--'));\n if (keys.length === 0) {\n console.error('Usage: canary docs nav reorder <key1> <key2> ...');\n process.exit(1);\n }\n await apiRequest(apiUrl, token, 'PUT', '/superadmin/docs/nav/reorder', { keys });\n console.log(`Reordered ${keys.length} sidebar groups.`);\n return;\n }\n case 'delete': {\n const key = rest[0];\n if (!key || key.startsWith('--')) {\n console.error('Usage: canary docs nav delete <key>');\n process.exit(1);\n }\n await apiRequest(apiUrl, token, 'DELETE', `/superadmin/docs/nav?key=${encodeURIComponent(key)}`);\n console.log(`Deleted sidebar group: ${key}`);\n return;\n }\n default:\n console.error(`Unknown nav action: ${action}`);\n console.error('Actions: list, set <key>, reorder <keys...>, delete <key>');\n process.exit(1);\n }\n}\n\nfunction printDocsHelp(): void {\n console.log(\n [\n 'Usage: canary docs <sub-command> [options]',\n '',\n 'Sub-commands:',\n ' list List all doc pages',\n ' get <slug> Print content to stdout',\n ' search <query> Full-text search docs',\n ' pull <slug> [--output <path>] Download to local file',\n ' push <slug> --file <path> [--message] Publish new version',\n ' history <slug> Show version history',\n ' create <slug> --file <path> --title ... Create new page',\n ' delete <slug> Soft-delete a page',\n ' nav list [--json] List sidebar groups + order',\n ' nav set <key> [--title <t>] [--order n] Create or update a sidebar group',\n ' nav reorder <key1> <key2> ... Set sidebar group order',\n ' nav delete <key> Remove a sidebar group',\n '',\n 'Options:',\n ' --org Use org-scoped endpoints (requires auth)',\n ' --file <path> Path to markdown file',\n ' --title <text> Page title (create only)',\n ' --description <text> Page description (create only)',\n ' --group <key> Sidebar group key the page belongs to (see `nav list`; create/push)',\n ' --order <n> Sort order within the group (create/push)',\n ' --section <text> Deprecated; sidebar grouping is driven by --group now',\n ' --message <text> Version commit message',\n ' --limit <n> Max results for search (default: 8, max: 20)',\n ' --output <path> Output path for pull (default: <tmpdir>/canary/docs/<slug>.md)',\n ' --json Output as JSON (list, history, search)',\n ' --env <env> Target environment (prod, dev)',\n ' --api-url <url> API URL override',\n ' --token <key> API token override',\n ].join('\\n')\n );\n}\n\nexport async function runDocs(argv: string[]): Promise<void> {\n const [subCommand, ...rest] = argv;\n\n if (!subCommand || subCommand === 'help' || hasFlag(argv, '--help', '-h')) {\n printDocsHelp();\n return;\n }\n\n const { apiUrl, token } = await resolveConfig(argv);\n const orgMode = hasFlag(rest, '--org');\n\n switch (subCommand) {\n case 'list':\n await handleList(rest, apiUrl, token, orgMode);\n break;\n case 'get':\n await handleGet(rest, apiUrl, token, orgMode);\n break;\n case 'search':\n await handleSearch(rest, apiUrl, token, orgMode);\n break;\n case 'pull':\n await handlePull(rest, apiUrl, token, orgMode);\n break;\n case 'push':\n await handlePush(rest, apiUrl, token, orgMode);\n break;\n case 'history':\n await handleHistory(rest, apiUrl, token, orgMode);\n break;\n case 'create':\n await handleCreate(rest, apiUrl, token, orgMode);\n break;\n case 'delete':\n await handleDelete(rest, apiUrl, token, orgMode);\n break;\n case 'nav':\n await handleNav(rest, apiUrl, token);\n break;\n default:\n console.error(`Unknown sub-command: ${subCommand}`);\n printDocsHelp();\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["body"]}
@@ -8,10 +8,10 @@ import {
8
8
  envToProfile,
9
9
  getArgValue,
10
10
  readStoredAuth
11
- } from "./chunk-PZ4LCN6K.js";
11
+ } from "./chunk-IGHDIWZU.js";
12
12
  import {
13
13
  readBrandEnv
14
- } from "./chunk-JZMJUPZP.js";
14
+ } from "./chunk-32P26BZT.js";
15
15
  import "./chunk-VKVL7WBN.js";
16
16
 
17
17
  // src/doctor.ts
@@ -133,4 +133,4 @@ async function runAuthDoctor(argv) {
133
133
  export {
134
134
  runAuthDoctor
135
135
  };
136
- //# sourceMappingURL=doctor-NZPUSCRE.js.map
136
+ //# sourceMappingURL=doctor-RHMKD4W5.js.map
@@ -2,16 +2,16 @@ import { createRequire as __cr } from "module"; const require = __cr(import.meta
2
2
  import {
3
3
  apiRequest,
4
4
  fetchProperties
5
- } from "./chunk-CQE46HSM.js";
5
+ } from "./chunk-CFJXYPTF.js";
6
6
  import "./chunk-3CZU7XCS.js";
7
7
  import {
8
8
  getArgValue,
9
9
  hasFlag,
10
10
  resolveConfig
11
- } from "./chunk-PZ4LCN6K.js";
12
- import "./chunk-JZMJUPZP.js";
11
+ } from "./chunk-IGHDIWZU.js";
12
+ import "./chunk-32P26BZT.js";
13
13
  import "./chunk-JWHYXEA2.js";
14
- import "./chunk-QGI4UCJX.js";
14
+ import "./chunk-IWKJQZJQ.js";
15
15
  import "./chunk-VKVL7WBN.js";
16
16
 
17
17
  // src/environment.ts
@@ -218,4 +218,4 @@ async function runEnvironment(argv) {
218
218
  export {
219
219
  runEnvironment
220
220
  };
221
- //# sourceMappingURL=environment-RQVU4P5M.js.map
221
+ //# sourceMappingURL=environment-WZKIO3R3.js.map
@@ -4,20 +4,41 @@ import {
4
4
  fetchList,
5
5
  parseLifecycleStage,
6
6
  toLifecycleLabel
7
- } from "./chunk-CQE46HSM.js";
7
+ } from "./chunk-CFJXYPTF.js";
8
8
  import "./chunk-3CZU7XCS.js";
9
9
  import {
10
10
  getArgValue,
11
11
  hasFlag,
12
12
  resolveConfig
13
- } from "./chunk-PZ4LCN6K.js";
14
- import "./chunk-JZMJUPZP.js";
13
+ } from "./chunk-IGHDIWZU.js";
14
+ import "./chunk-32P26BZT.js";
15
15
  import "./chunk-JWHYXEA2.js";
16
- import "./chunk-QGI4UCJX.js";
16
+ import "./chunk-IWKJQZJQ.js";
17
17
  import "./chunk-VKVL7WBN.js";
18
18
 
19
19
  // src/feature-flag.ts
20
20
  import process from "process";
21
+ import { readFileSync } from "fs";
22
+ function readContent(value) {
23
+ if (value.startsWith("@")) {
24
+ return readFileSync(value.slice(1), "utf8");
25
+ }
26
+ return value;
27
+ }
28
+ var DAY_MS = 24 * 60 * 60 * 1e3;
29
+ var DEFAULT_REVIEW_INTERVAL_DAYS = 7;
30
+ var DEFAULT_MAX_WINDOW_DAYS = 30;
31
+ function bakeStatus(flag) {
32
+ if (!flag.bakeStartedAt) return { ageDays: 0, burning: false };
33
+ const startedMs = new Date(flag.bakeStartedAt).getTime();
34
+ const ageMs = Date.now() - startedMs;
35
+ const maxWindow = flag.bakeMaxWindowDays ?? DEFAULT_MAX_WINDOW_DAYS;
36
+ return { ageDays: Math.floor(ageMs / DAY_MS), burning: ageMs > maxWindow * DAY_MS };
37
+ }
38
+ function formatBakeSuffix(flag) {
39
+ const { ageDays, burning } = bakeStatus(flag);
40
+ return ` baked=${ageDays}d${burning ? " \u{1F525}BURNING" : ""}`;
41
+ }
21
42
  function fetchFlags(apiUrl, token) {
22
43
  return fetchList(apiUrl, token, "/superadmin/feature-flags", "flags");
23
44
  }
@@ -36,10 +57,11 @@ async function handleList(argv, apiUrl, token) {
36
57
  const orgCount = flag.organizations?.length ?? 0;
37
58
  const userCount = flag.users?.length ?? 0;
38
59
  const lifecycle = `lifecycle=${toLifecycleLabel(flag.lifecycleStage)}`;
39
- const finalValue = flag.lifecycleStage === "active" ? "" : ` final=${flag.finalValue === true ? "true" : "false"}`;
60
+ const finalValue = flag.lifecycleStage === "active" || flag.lifecycleStage === "baking" ? "" : ` final=${flag.finalValue === true ? "true" : "false"}`;
61
+ const bake = flag.lifecycleStage === "baking" ? formatBakeSuffix(flag) : "";
40
62
  const stale = flag.isStale ? " [STALE]" : "";
41
63
  const product = flag.productCardId ? ` product=${flag.productTitle ?? flag.productCardId}` : "";
42
- console.log(` ${flag.name} ${flag.description ?? ""} (${lifecycle}${finalValue}) [orgs=${orgCount}, users=${userCount}]${product}${stale}`);
64
+ console.log(` ${flag.name} ${flag.description ?? ""} (${lifecycle}${finalValue})${bake} [orgs=${orgCount}, users=${userCount}]${product}${stale}`);
43
65
  }
44
66
  }
45
67
  async function handleCreate(argv, apiUrl, token) {
@@ -218,20 +240,21 @@ async function handleLifecycle(argv, apiUrl, token) {
218
240
  const name = argv[0];
219
241
  if (!name || name.startsWith("--")) {
220
242
  console.error("Error: Missing flag name.");
221
- console.error("Usage: canary feature-flag lifecycle <name> --stage <active|deprecated|ready_for_cleanup> [--final-value true|false]");
243
+ console.error('Usage: canary feature-flag lifecycle <name> --stage <active|baking|deprecated|ready_for_cleanup> [--final-value true|false] [--plan @file|"text"] [--review-interval <days>] [--max-window <days>]');
222
244
  process.exit(1);
223
245
  }
224
246
  const stage = parseLifecycleStage(argv);
225
247
  const rawFinalValue = getArgValue(argv, "--final-value");
226
248
  const clearFinalValue = hasFlag(argv, "--clear-final-value");
249
+ const gateDriven = stage === "active" || stage === "baking";
227
250
  if (rawFinalValue !== void 0 && clearFinalValue) {
228
251
  console.error("Error: use either --final-value or --clear-final-value, not both.");
229
252
  process.exit(1);
230
253
  }
231
254
  let finalValue = void 0;
232
- if (stage === "active") {
255
+ if (gateDriven) {
233
256
  if (rawFinalValue !== void 0) {
234
- console.error("Error: active stage does not accept --final-value.");
257
+ console.error(`Error: ${stage} stage does not accept --final-value.`);
235
258
  process.exit(1);
236
259
  }
237
260
  finalValue = void 0;
@@ -250,20 +273,74 @@ async function handleLifecycle(argv, apiUrl, token) {
250
273
  }
251
274
  finalValue = rawFinalValue === "true";
252
275
  }
276
+ let monitoringPlan;
277
+ let reviewIntervalDays;
278
+ let maxWindowDays;
279
+ if (stage === "baking") {
280
+ const rawPlan = getArgValue(argv, "--plan");
281
+ if (rawPlan !== void 0) monitoringPlan = readContent(rawPlan);
282
+ const rawInterval = getArgValue(argv, "--review-interval");
283
+ if (rawInterval !== void 0) {
284
+ reviewIntervalDays = Number.parseInt(rawInterval, 10);
285
+ if (!Number.isInteger(reviewIntervalDays) || reviewIntervalDays <= 0) {
286
+ console.error("Error: --review-interval must be a positive integer (days).");
287
+ process.exit(1);
288
+ }
289
+ }
290
+ const rawWindow = getArgValue(argv, "--max-window");
291
+ if (rawWindow !== void 0) {
292
+ maxWindowDays = Number.parseInt(rawWindow, 10);
293
+ if (!Number.isInteger(maxWindowDays) || maxWindowDays <= 0) {
294
+ console.error("Error: --max-window must be a positive integer (days).");
295
+ process.exit(1);
296
+ }
297
+ }
298
+ }
253
299
  const result = await apiRequest(
254
300
  apiUrl,
255
301
  token,
256
302
  "POST",
257
303
  `/superadmin/feature-flags/${encodeURIComponent(name)}/lifecycle`,
258
- { stage, finalValue }
304
+ { stage, finalValue, monitoringPlan, reviewIntervalDays, maxWindowDays }
259
305
  );
260
306
  if (!result.ok || !result.flag) {
261
307
  console.error(`Error: ${result.error ?? "Failed to update lifecycle"}`);
262
308
  process.exit(1);
263
309
  }
310
+ if (result.flag.lifecycleStage === "baking") {
311
+ const { ageDays } = bakeStatus(result.flag);
312
+ console.log(
313
+ `Put ${name} in the oven: stage=baking, baked=${ageDays}d, review every ${result.flag.bakeReviewIntervalDays ?? DEFAULT_REVIEW_INTERVAL_DAYS}d, burns after ${result.flag.bakeMaxWindowDays ?? DEFAULT_MAX_WINDOW_DAYS}d.`
314
+ );
315
+ return;
316
+ }
264
317
  const final = result.flag.lifecycleStage === "active" ? "(none)" : result.flag.finalValue === true ? "true" : "false";
265
318
  console.log(`Updated lifecycle for ${name}: stage=${toLifecycleLabel(result.flag.lifecycleStage)}, final=${final}`);
266
319
  }
320
+ async function handleOven(argv, apiUrl, token) {
321
+ const jsonOutput = hasFlag(argv, "--json");
322
+ const flags = await fetchList(apiUrl, token, "/superadmin/feature-flags/oven", "flags");
323
+ if (jsonOutput) {
324
+ console.log(JSON.stringify(flags, null, 2));
325
+ return;
326
+ }
327
+ if (flags.length === 0) {
328
+ console.log("The oven is empty \u2014 no flags are baking.");
329
+ return;
330
+ }
331
+ console.log(`In the oven (${flags.length}):`);
332
+ for (const flag of flags) {
333
+ const burn = flag.burning ? " \u{1F525}BURNING" : "";
334
+ const product = flag.productCardId ? ` product=${flag.productTitle ?? flag.productCardId}` : "";
335
+ console.log(
336
+ ` ${flag.name} baked=${flag.bakeAgeDays}d (review ${flag.bakeReviewIntervalDays}d / burns ${flag.bakeMaxWindowDays}d)${burn}${product}`
337
+ );
338
+ if (flag.bakeMonitoringPlan) {
339
+ const firstLine = flag.bakeMonitoringPlan.split("\n")[0]?.slice(0, 100) ?? "";
340
+ console.log(` plan: ${firstLine}`);
341
+ }
342
+ }
343
+ }
267
344
  function printFeatureFlagHelp() {
268
345
  console.log(
269
346
  [
@@ -280,11 +357,14 @@ function printFeatureFlagHelp() {
280
357
  " Disable a flag for an org or user (kept as 'was enabled' history)",
281
358
  " lifecycle <name> --stage <stage> [--final-value true|false]",
282
359
  " Mark lifecycle + final value",
360
+ " --stage baking --plan @file [--review-interval <days>] [--max-window <days>]",
361
+ " Put a flag in the oven (requires a linked product card)",
283
362
  " product <name> (--product <productCardId> | --clear)",
284
363
  " Link/unlink a flag to a product board item",
285
364
  " products [--search <text>] List product board items (find product card ids)",
365
+ " oven [--json] List flags currently baking (age + burning state)",
286
366
  "",
287
- "Stages: active, deprecated, ready_for_cleanup",
367
+ "Stages: active, baking, deprecated, ready_for_cleanup",
288
368
  "",
289
369
  "Options:",
290
370
  " --org <orgId> Target organization",
@@ -294,6 +374,9 @@ function printFeatureFlagHelp() {
294
374
  " --search <text> Filter product cards by title (products sub-command only)",
295
375
  " --final-value <true|false> Final value for deprecated/ready_for_cleanup",
296
376
  " --clear-final-value Clear final value (only valid with --stage active)",
377
+ ' --plan @file|"text" Monitoring/telemetry plan (required to enter baking)',
378
+ " --review-interval <days> Days between oven-check reviews (baking; default 7)",
379
+ " --max-window <days> Days before a baking flag 'burns' (default 30)",
297
380
  " --env <env> Target environment (prod, dev, local)",
298
381
  " --json Output as JSON (list only)",
299
382
  " --api-url <url> API URL override (takes precedence over --env)",
@@ -333,6 +416,9 @@ async function runFeatureFlag(argv) {
333
416
  case "products":
334
417
  await handleProducts(rest, apiUrl, token);
335
418
  break;
419
+ case "oven":
420
+ await handleOven(rest, apiUrl, token);
421
+ break;
336
422
  default:
337
423
  console.error(`Unknown sub-command: ${subCommand}`);
338
424
  printFeatureFlagHelp();
@@ -342,4 +428,4 @@ async function runFeatureFlag(argv) {
342
428
  export {
343
429
  runFeatureFlag
344
430
  };
345
- //# sourceMappingURL=feature-flag-XG26RURR.js.map
431
+ //# sourceMappingURL=feature-flag-K5REGGDY.js.map