@runcofactor/cli 0.15.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 (127) hide show
  1. package/dist/{account-22LMP5PX.js → account-62I7FG5G.js} +5 -5
  2. package/dist/{api-catalog-WTFQNLK6.js → api-catalog-CAJUASVC.js} +5 -5
  3. package/dist/{attachment-U3NKVPEY.js → attachment-RL4AZUJE.js} +5 -5
  4. package/dist/{augmentor-5GMNAX4M.js → augmentor-GAF3MFY6.js} +5 -5
  5. package/dist/{auth-VQG2CDUD.js → auth-DURHUZDW.js} +3 -3
  6. package/dist/{chunk-7VMO2WOZ.js → chunk-26U3DGUM.js} +2 -2
  7. package/dist/{chunk-JMJVGMXI.js → chunk-32P26BZT.js} +2 -2
  8. package/dist/chunk-32P26BZT.js.map +1 -0
  9. package/dist/{chunk-VGYN2KU2.js → chunk-5R4HMSNX.js} +69 -9
  10. package/dist/chunk-5R4HMSNX.js.map +1 -0
  11. package/dist/{chunk-46IUJXSD.js → chunk-AQPJQ5AE.js} +2 -2
  12. package/dist/{chunk-PRBRSIZP.js → chunk-CFJXYPTF.js} +3 -3
  13. package/dist/{chunk-UETBLPKM.js → chunk-CJEKEW7R.js} +3 -3
  14. package/dist/{chunk-CMGI7UZD.js → chunk-G5SXUXSU.js} +3 -3
  15. package/dist/{chunk-XJ5YYYGC.js → chunk-HKQ5XQAQ.js} +4 -4
  16. package/dist/{chunk-3X3NW7QA.js → chunk-IGHDIWZU.js} +2 -2
  17. package/dist/{chunk-JYGNMKZ5.js → chunk-IWKJQZJQ.js} +115 -92
  18. package/dist/chunk-IWKJQZJQ.js.map +1 -0
  19. package/dist/{chunk-KCHKFYVX.js → chunk-PXFDH6YL.js} +34 -1
  20. package/dist/{chunk-KCHKFYVX.js.map → chunk-PXFDH6YL.js.map} +1 -1
  21. package/dist/{chunk-HDFYUFBI.js → chunk-UZ2ZA5A6.js} +2 -2
  22. package/dist/{chunk-FNPMWDUQ.js → chunk-VKBTI5EF.js} +3 -3
  23. package/dist/{chunk-NHTEKEYE.js → chunk-ZXRVFFCY.js} +3 -3
  24. package/dist/{credential-E6KUHRGU.js → credential-JGVSEGVH.js} +5 -5
  25. package/dist/{credential-template-4GPOPBGD.js → credential-template-CWWMOKB2.js} +5 -5
  26. package/dist/{debug-workflow-XCLCY6S7.js → debug-workflow-BXRU72YZ.js} +5 -5
  27. package/dist/{docs-COCZYMW6.js → docs-PVBXPTGR.js} +5 -5
  28. package/dist/{doctor-ERIVTCQS.js → doctor-RHMKD4W5.js} +3 -3
  29. package/dist/{environment-7Y4BV6XY.js → environment-WZKIO3R3.js} +5 -5
  30. package/dist/{feature-flag-MHONEX6T.js → feature-flag-K5REGGDY.js} +5 -5
  31. package/dist/index.js +45 -45
  32. package/dist/{init-OROOM4HF.js → init-FFUZO5D7.js} +5 -5
  33. package/dist/{install-OJFXHY6U.js → install-XRKEQAFZ.js} +5 -5
  34. package/dist/{issues-32GONR6C.js → issues-I3V6GEXU.js} +5 -5
  35. package/dist/{knobs-UQGGY3CP.js → knobs-6WLJMB44.js} +5 -5
  36. package/dist/{list-ZMIKEC5P.js → list-PHC7VYNS.js} +5 -5
  37. package/dist/{local-PUD24GGQ.js → local-VGYRSW22.js} +7 -7
  38. package/dist/{login-BSO7YX2D.js → login-QPU2BKG2.js} +5 -5
  39. package/dist/{mcp-4LS7OJUT.js → mcp-LA452TOA.js} +8 -8
  40. package/dist/{product-3JKSJCBC.js → product-RSZV5HMB.js} +5 -5
  41. package/dist/{property-K5DBL4UE.js → property-YP4GHQAR.js} +5 -5
  42. package/dist/{psql-PQFUFTSE.js → psql-XGLBI6T7.js} +3 -3
  43. package/dist/{record-EIIYLFJ4.js → record-KWKHP2ZY.js} +6 -6
  44. package/dist/{redis-BU36EZZI.js → redis-VJGCUJPV.js} +3 -3
  45. package/dist/{release-LYC2P7DZ.js → release-NDRHPW6V.js} +5 -5
  46. package/dist/{sandbox-CKHXXZHU.js → sandbox-OOCANWOG.js} +5 -5
  47. package/dist/{scenarios-2XJ2G3KR.js → scenarios-2HRLCGFY.js} +5 -5
  48. package/dist/{session-UTOD5ZYH.js → session-M4ULYDYP.js} +7 -7
  49. package/dist/{skill-GMAERMQL.js → skill-4DGPRDUC.js} +2 -2
  50. package/dist/skills/optimize-cache/SKILL.md +17 -7
  51. package/dist/{spec-2NP36U3Y.js → spec-XZ2TKUFZ.js} +5 -5
  52. package/dist/{src-UEOOC425.js → src-2FK3JHGW.js} +24 -6
  53. package/dist/{src-UEOOC425.js.map → src-2FK3JHGW.js.map} +1 -1
  54. package/dist/{src-CG52HEE7.js → src-CV57ZD6I.js} +3 -3
  55. package/dist/{src-4T6GHXVO.js → src-HL7HEJIW.js} +2 -2
  56. package/dist/{src-PK5OZXCM.js → src-OU7544PM.js} +6 -4
  57. package/dist/{start-3C7EEFW2.js → start-IYKF3C3X.js} +5 -5
  58. package/dist/{tag-JSHOMLBR.js → tag-T45MMSCH.js} +6 -6
  59. package/dist/{task-YGWVYTBJ.js → task-MCUHAVTD.js} +5 -5
  60. package/dist/{test-suite-LI7ZH367.js → test-suite-BICBRSBP.js} +7 -7
  61. package/dist/{trace-UMLOSIIR.js → trace-2BAPMYAS.js} +6 -6
  62. package/dist/{triage-ZWJG4NBJ.js → triage-M3RZ2ASB.js} +6 -6
  63. package/dist/{upgrade-S7CGEK6H.js → upgrade-4QCRAUHP.js} +3 -3
  64. package/dist/{workflow-T4HSAOGW.js → workflow-4J23FV7K.js} +11 -11
  65. package/dist/{workflow-cache-XVEZ36KF.js → workflow-cache-XPSK6KC7.js} +26 -13
  66. package/dist/workflow-cache-XPSK6KC7.js.map +1 -0
  67. package/dist/{workflow-debug-T2BULXZ7.js → workflow-debug-W4USZH35.js} +8 -8
  68. package/dist/{workflow-proposals-XXEZICN2.js → workflow-proposals-5E3DTYZB.js} +5 -5
  69. package/package.json +5 -1
  70. package/dist/chunk-JMJVGMXI.js.map +0 -1
  71. package/dist/chunk-JYGNMKZ5.js.map +0 -1
  72. package/dist/chunk-VGYN2KU2.js.map +0 -1
  73. package/dist/workflow-cache-XVEZ36KF.js.map +0 -1
  74. /package/dist/{account-22LMP5PX.js.map → account-62I7FG5G.js.map} +0 -0
  75. /package/dist/{api-catalog-WTFQNLK6.js.map → api-catalog-CAJUASVC.js.map} +0 -0
  76. /package/dist/{attachment-U3NKVPEY.js.map → attachment-RL4AZUJE.js.map} +0 -0
  77. /package/dist/{augmentor-5GMNAX4M.js.map → augmentor-GAF3MFY6.js.map} +0 -0
  78. /package/dist/{auth-VQG2CDUD.js.map → auth-DURHUZDW.js.map} +0 -0
  79. /package/dist/{chunk-7VMO2WOZ.js.map → chunk-26U3DGUM.js.map} +0 -0
  80. /package/dist/{chunk-46IUJXSD.js.map → chunk-AQPJQ5AE.js.map} +0 -0
  81. /package/dist/{chunk-PRBRSIZP.js.map → chunk-CFJXYPTF.js.map} +0 -0
  82. /package/dist/{chunk-UETBLPKM.js.map → chunk-CJEKEW7R.js.map} +0 -0
  83. /package/dist/{chunk-CMGI7UZD.js.map → chunk-G5SXUXSU.js.map} +0 -0
  84. /package/dist/{chunk-XJ5YYYGC.js.map → chunk-HKQ5XQAQ.js.map} +0 -0
  85. /package/dist/{chunk-3X3NW7QA.js.map → chunk-IGHDIWZU.js.map} +0 -0
  86. /package/dist/{chunk-HDFYUFBI.js.map → chunk-UZ2ZA5A6.js.map} +0 -0
  87. /package/dist/{chunk-FNPMWDUQ.js.map → chunk-VKBTI5EF.js.map} +0 -0
  88. /package/dist/{chunk-NHTEKEYE.js.map → chunk-ZXRVFFCY.js.map} +0 -0
  89. /package/dist/{credential-E6KUHRGU.js.map → credential-JGVSEGVH.js.map} +0 -0
  90. /package/dist/{credential-template-4GPOPBGD.js.map → credential-template-CWWMOKB2.js.map} +0 -0
  91. /package/dist/{debug-workflow-XCLCY6S7.js.map → debug-workflow-BXRU72YZ.js.map} +0 -0
  92. /package/dist/{docs-COCZYMW6.js.map → docs-PVBXPTGR.js.map} +0 -0
  93. /package/dist/{doctor-ERIVTCQS.js.map → doctor-RHMKD4W5.js.map} +0 -0
  94. /package/dist/{environment-7Y4BV6XY.js.map → environment-WZKIO3R3.js.map} +0 -0
  95. /package/dist/{feature-flag-MHONEX6T.js.map → feature-flag-K5REGGDY.js.map} +0 -0
  96. /package/dist/{init-OROOM4HF.js.map → init-FFUZO5D7.js.map} +0 -0
  97. /package/dist/{install-OJFXHY6U.js.map → install-XRKEQAFZ.js.map} +0 -0
  98. /package/dist/{issues-32GONR6C.js.map → issues-I3V6GEXU.js.map} +0 -0
  99. /package/dist/{knobs-UQGGY3CP.js.map → knobs-6WLJMB44.js.map} +0 -0
  100. /package/dist/{list-ZMIKEC5P.js.map → list-PHC7VYNS.js.map} +0 -0
  101. /package/dist/{local-PUD24GGQ.js.map → local-VGYRSW22.js.map} +0 -0
  102. /package/dist/{login-BSO7YX2D.js.map → login-QPU2BKG2.js.map} +0 -0
  103. /package/dist/{mcp-4LS7OJUT.js.map → mcp-LA452TOA.js.map} +0 -0
  104. /package/dist/{product-3JKSJCBC.js.map → product-RSZV5HMB.js.map} +0 -0
  105. /package/dist/{property-K5DBL4UE.js.map → property-YP4GHQAR.js.map} +0 -0
  106. /package/dist/{psql-PQFUFTSE.js.map → psql-XGLBI6T7.js.map} +0 -0
  107. /package/dist/{record-EIIYLFJ4.js.map → record-KWKHP2ZY.js.map} +0 -0
  108. /package/dist/{redis-BU36EZZI.js.map → redis-VJGCUJPV.js.map} +0 -0
  109. /package/dist/{release-LYC2P7DZ.js.map → release-NDRHPW6V.js.map} +0 -0
  110. /package/dist/{sandbox-CKHXXZHU.js.map → sandbox-OOCANWOG.js.map} +0 -0
  111. /package/dist/{scenarios-2XJ2G3KR.js.map → scenarios-2HRLCGFY.js.map} +0 -0
  112. /package/dist/{session-UTOD5ZYH.js.map → session-M4ULYDYP.js.map} +0 -0
  113. /package/dist/{skill-GMAERMQL.js.map → skill-4DGPRDUC.js.map} +0 -0
  114. /package/dist/{spec-2NP36U3Y.js.map → spec-XZ2TKUFZ.js.map} +0 -0
  115. /package/dist/{src-CG52HEE7.js.map → src-CV57ZD6I.js.map} +0 -0
  116. /package/dist/{src-4T6GHXVO.js.map → src-HL7HEJIW.js.map} +0 -0
  117. /package/dist/{src-PK5OZXCM.js.map → src-OU7544PM.js.map} +0 -0
  118. /package/dist/{start-3C7EEFW2.js.map → start-IYKF3C3X.js.map} +0 -0
  119. /package/dist/{tag-JSHOMLBR.js.map → tag-T45MMSCH.js.map} +0 -0
  120. /package/dist/{task-YGWVYTBJ.js.map → task-MCUHAVTD.js.map} +0 -0
  121. /package/dist/{test-suite-LI7ZH367.js.map → test-suite-BICBRSBP.js.map} +0 -0
  122. /package/dist/{trace-UMLOSIIR.js.map → trace-2BAPMYAS.js.map} +0 -0
  123. /package/dist/{triage-ZWJG4NBJ.js.map → triage-M3RZ2ASB.js.map} +0 -0
  124. /package/dist/{upgrade-S7CGEK6H.js.map → upgrade-4QCRAUHP.js.map} +0 -0
  125. /package/dist/{workflow-T4HSAOGW.js.map → workflow-4J23FV7K.js.map} +0 -0
  126. /package/dist/{workflow-debug-T2BULXZ7.js.map → workflow-debug-W4USZH35.js.map} +0 -0
  127. /package/dist/{workflow-proposals-XXEZICN2.js.map → workflow-proposals-5E3DTYZB.js.map} +0 -0
@@ -2,16 +2,16 @@ import { createRequire as __cr } from "module"; const require = __cr(import.meta
2
2
  import {
3
3
  apiRequest,
4
4
  fetchList
5
- } from "./chunk-PRBRSIZP.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-3X3NW7QA.js";
12
- import "./chunk-JMJVGMXI.js";
11
+ } from "./chunk-IGHDIWZU.js";
12
+ import "./chunk-32P26BZT.js";
13
13
  import "./chunk-JWHYXEA2.js";
14
- import "./chunk-JYGNMKZ5.js";
14
+ import "./chunk-IWKJQZJQ.js";
15
15
  import "./chunk-VKVL7WBN.js";
16
16
 
17
17
  // src/account.ts
@@ -252,4 +252,4 @@ async function runAccount(argv) {
252
252
  export {
253
253
  runAccount
254
254
  };
255
- //# sourceMappingURL=account-22LMP5PX.js.map
255
+ //# sourceMappingURL=account-62I7FG5G.js.map
@@ -1,15 +1,15 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  apiRequest
4
- } from "./chunk-PRBRSIZP.js";
4
+ } from "./chunk-CFJXYPTF.js";
5
5
  import "./chunk-3CZU7XCS.js";
6
6
  import {
7
7
  getArgValue,
8
8
  hasFlag
9
- } from "./chunk-3X3NW7QA.js";
10
- import "./chunk-JMJVGMXI.js";
9
+ } from "./chunk-IGHDIWZU.js";
10
+ import "./chunk-32P26BZT.js";
11
11
  import "./chunk-JWHYXEA2.js";
12
- import "./chunk-JYGNMKZ5.js";
12
+ import "./chunk-IWKJQZJQ.js";
13
13
  import "./chunk-VKVL7WBN.js";
14
14
 
15
15
  // src/api-catalog.ts
@@ -399,4 +399,4 @@ function exitErr(msg) {
399
399
  export {
400
400
  runApiCatalog
401
401
  };
402
- //# sourceMappingURL=api-catalog-WTFQNLK6.js.map
402
+ //# sourceMappingURL=api-catalog-CAJUASVC.js.map
@@ -1,16 +1,16 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  apiRequest
4
- } from "./chunk-PRBRSIZP.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-3X3NW7QA.js";
11
- import "./chunk-JMJVGMXI.js";
10
+ } from "./chunk-IGHDIWZU.js";
11
+ import "./chunk-32P26BZT.js";
12
12
  import "./chunk-JWHYXEA2.js";
13
- import "./chunk-JYGNMKZ5.js";
13
+ import "./chunk-IWKJQZJQ.js";
14
14
  import "./chunk-VKVL7WBN.js";
15
15
 
16
16
  // src/attachment.ts
@@ -274,4 +274,4 @@ async function runAttachment(argv) {
274
274
  export {
275
275
  runAttachment
276
276
  };
277
- //# sourceMappingURL=attachment-U3NKVPEY.js.map
277
+ //# sourceMappingURL=attachment-RL4AZUJE.js.map
@@ -2,14 +2,14 @@ import { createRequire as __cr } from "module"; const require = __cr(import.meta
2
2
  import {
3
3
  apiRequest,
4
4
  getApplicationArg
5
- } from "./chunk-PRBRSIZP.js";
5
+ } from "./chunk-CFJXYPTF.js";
6
6
  import "./chunk-3CZU7XCS.js";
7
7
  import {
8
8
  getArgValue
9
- } from "./chunk-3X3NW7QA.js";
10
- import "./chunk-JMJVGMXI.js";
9
+ } from "./chunk-IGHDIWZU.js";
10
+ import "./chunk-32P26BZT.js";
11
11
  import "./chunk-JWHYXEA2.js";
12
- import "./chunk-JYGNMKZ5.js";
12
+ import "./chunk-IWKJQZJQ.js";
13
13
  import "./chunk-VKVL7WBN.js";
14
14
 
15
15
  // src/augmentor.ts
@@ -195,4 +195,4 @@ async function runAugmentor(argv, apiUrl, token) {
195
195
  export {
196
196
  runAugmentor
197
197
  };
198
- //# sourceMappingURL=augmentor-5GMNAX4M.js.map
198
+ //# sourceMappingURL=augmentor-GAF3MFY6.js.map
@@ -12,8 +12,8 @@ import {
12
12
  resolveConfig,
13
13
  resolveOptionalConfig,
14
14
  saveAuth
15
- } from "./chunk-3X3NW7QA.js";
16
- import "./chunk-JMJVGMXI.js";
15
+ } from "./chunk-IGHDIWZU.js";
16
+ import "./chunk-32P26BZT.js";
17
17
  import "./chunk-VKVL7WBN.js";
18
18
  export {
19
19
  ENV_URLS,
@@ -29,4 +29,4 @@ export {
29
29
  resolveOptionalConfig,
30
30
  saveAuth
31
31
  };
32
- //# sourceMappingURL=auth-VQG2CDUD.js.map
32
+ //# sourceMappingURL=auth-DURHUZDW.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
2
2
  import {
3
3
  InlineAssertionSchema
4
- } from "./chunk-JYGNMKZ5.js";
4
+ } from "./chunk-IWKJQZJQ.js";
5
5
 
6
6
  // ../canary-spec/src/parse.ts
7
7
  import yaml from "yaml";
@@ -2626,4 +2626,4 @@ export {
2626
2626
  writeWorkflowId,
2627
2627
  writeNodeIds
2628
2628
  };
2629
- //# sourceMappingURL=chunk-7VMO2WOZ.js.map
2629
+ //# sourceMappingURL=chunk-26U3DGUM.js.map
@@ -16,7 +16,7 @@ function resolveBrandFromArgv(argv1) {
16
16
  var command = resolveBrandFromArgv(process.argv[1]);
17
17
  var packageName = pkg.name;
18
18
  var version = pkg.version;
19
- var INVOCATION_RE = /(^|[^\w-])canary(?= [a-z])/g;
19
+ var INVOCATION_RE = /(^|[^\w-])canary(?= [a-z<])/g;
20
20
  var PROSE_RE = /\bCanary\b/g;
21
21
  function brandTextFor(text, brand) {
22
22
  if (brand === "canary") return text;
@@ -89,4 +89,4 @@ export {
89
89
  splitSpecExtension,
90
90
  installConsoleBranding
91
91
  };
92
- //# sourceMappingURL=chunk-JMJVGMXI.js.map
92
+ //# sourceMappingURL=chunk-32P26BZT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/brand.ts"],"sourcesContent":["/**\n * Brand resolution for the dual-published CLI.\n *\n * We ship a single build to two npm packages:\n * - `@canaryai/cli` → binary `canary` (legacy brand)\n * - `@runcofactor/cli` → binary `cofactor` (new brand)\n *\n * Both packages contain the identical artifact; they differ only in their\n * `name` and `bin` map (rewritten at publish time — see\n * `.github/workflows/publish-canary-cli.yml`). Everything brand-specific is\n * therefore derived at runtime:\n *\n * - `command` comes from the invoked binary name (`basename(process.argv[1])`),\n * so output reflects how the user called it (`brandText` rewrites legacy\n * `canary` display strings to the active brand).\n * - `packageName` comes from the installed package's own `package.json`, so\n * self-upgrade and the update check target whatever package was installed.\n *\n * The legacy `canary` brand is the default for every non-`cofactor` invocation\n * (`node dist/index.js`, dev scripts, tests), which keeps existing behaviour\n * byte-for-byte unchanged.\n *\n * @module\n */\n\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport process from 'node:process';\n\nconst require = createRequire(import.meta.url);\nconst pkg = require('../package.json') as { name: string; version: string };\n\nexport type Brand = 'canary' | 'cofactor';\n\n/**\n * Resolve the brand from the invoked binary path (`process.argv[1]`). The\n * global-install shim is named `canary` or `cofactor` (npm/bun/pnpm bin link),\n * so the basename is the brand. Everything else (`node dist/index.js`, dev\n * scripts, tests) defaults to the legacy `canary` brand. Pure for testing.\n */\nexport function resolveBrandFromArgv(argv1: string | undefined): Brand {\n if (argv1) {\n const base = path.basename(argv1).replace(/\\.[^./\\\\]+$/, '').toLowerCase();\n if (base.includes('cofactor')) return 'cofactor';\n }\n return 'canary';\n}\n\n/** The invoked command / binary name, e.g. `canary` or `cofactor`. */\nexport const command: Brand = resolveBrandFromArgv(process.argv[1]);\n\n/** npm package name of the installed CLI, read from its own package.json. */\nexport const packageName: string = pkg.name;\n\n/** CLI version, read from package.json. */\nexport const version: string = pkg.version;\n\n/**\n * Rewrite display strings authored against the legacy `canary` brand to the\n * active brand. Identity for the `canary` brand (so legacy output never\n * changes). Two precise, word-anchored rules:\n *\n * 1. The invocation token `canary ` followed by a lowercase letter (i.e. a\n * sub-command or `canary v1.2.3`) or `<` (a usage placeholder like\n * `canary <command> --help`). Anchored on a non-word, non-hyphen\n * boundary so it never touches `trycanary.ai`, `x-canary-request-id`,\n * `canary-cli`, or `CANARY_API_TOKEN`.\n * 2. The prose noun `Canary` (capitalized, standalone word) → display name.\n */\nconst INVOCATION_RE = /(^|[^\\w-])canary(?= [a-z<])/g;\nconst PROSE_RE = /\\bCanary\\b/g;\n\n/** Pure brand rewrite for a given target brand. Identity for `canary`. */\nexport function brandTextFor(text: string, brand: Brand): string {\n if (brand === 'canary') return text;\n const display = brand === 'cofactor' ? 'Cofactor' : 'Canary';\n return text\n .replace(INVOCATION_RE, (_m, prefix: string) => `${prefix}${brand}`)\n .replace(PROSE_RE, display);\n}\n\nfunction brandText(text: string): string {\n return brandTextFor(text, command);\n}\n\n/**\n * Rewrite a bundled skill template's content to the target brand for the\n * `canary skill install` / `canary skill <name>` output. Builds on\n * {@link brandTextFor} (invocation tokens + the prose noun) and additionally\n * maps the brand-specific identifiers that {@link brandTextFor} deliberately\n * leaves intact for console output — but which a distributed skill file must\n * carry per brand:\n *\n * - inline binary: `` `canary` `` → `` `cofactor` `` (a backtick-wrapped bare\n * binary reference, e.g. \"the `canary` CLI\" — `brandTextFor` only rewrites\n * `canary <subcommand>` invocations, not the standalone binary name)\n * - npm package: `@canaryai/cli` → `@runcofactor/cli`\n * - env prefix: `CANARY_*` → `COFACTOR_*`\n * - domains: `*.trycanary.ai` → `*.runcofactor.com`\n *\n * Identity for the `canary` brand, so legacy skill text installs byte-for-byte\n * unchanged. The skill's frontmatter `name:` is never an invocation/prose/token\n * match (it's `canary-basic`, hyphenated), so the install directory key is\n * preserved. Trigger keywords in prose (e.g. \"mentions canary, canary CLI\")\n * intentionally keep the legacy term so the skill still activates for users who\n * say \"canary\". Pure (brand injectable).\n */\nexport function brandSkillContentFor(content: string, brand: Brand): string {\n const base = brandTextFor(content, brand);\n if (brand !== 'cofactor') return base;\n return base\n .replace(/`canary`/g, '`cofactor`')\n .replace(/@canaryai\\/cli/g, '@runcofactor/cli')\n .replace(/\\bCANARY_/g, 'COFACTOR_')\n .replace(/trycanary\\.ai/g, 'runcofactor.com');\n}\n\n/**\n * Read a brand-prefixed environment variable, accepting EITHER brand's prefix.\n *\n * The two published brands historically diverged: the binary only ever read the\n * legacy `CANARY_*` names, but the cofactor docs tell users to set `COFACTOR_*`\n * (e.g. `COFACTOR_API_TOKEN`). This bridges that gap — a value set under either\n * prefix is honoured regardless of which binary (`canary` / `cofactor`) was\n * invoked. When both are set, the active brand's prefix wins.\n *\n * `canaryName` is the legacy `CANARY_`-prefixed name; the `COFACTOR_` variant is\n * derived from it. Empty strings are treated as unset so a blank value can't\n * shadow a real one set under the other prefix. Pure (brand + env injectable).\n */\nexport function readBrandEnvFor(\n canaryName: string,\n brand: Brand,\n env: NodeJS.ProcessEnv = process.env,\n): string | undefined {\n const cofactorName = canaryName.replace(/^CANARY_/, 'COFACTOR_');\n const order = brand === 'cofactor' ? [cofactorName, canaryName] : [canaryName, cofactorName];\n for (const name of order) {\n const value = env[name];\n if (value !== null && value !== undefined && value !== '') return value;\n }\n return undefined;\n}\n\n/** Read a brand-prefixed env var for the active brand. See {@link readBrandEnvFor}. */\nexport function readBrandEnv(\n canaryName: string,\n env: NodeJS.ProcessEnv = process.env,\n): string | undefined {\n return readBrandEnvFor(canaryName, command, env);\n}\n\n/**\n * Workflow spec file convention — brand-aware, backwards compatible.\n *\n * The spec extension and default directory follow the active brand: the\n * `cofactor` binary writes `.cofactor.md` into `cofactor/specs`, the legacy\n * `canary` binary writes `.canary.md` into `canary/specs` (byte-for-byte\n * unchanged). Reading/discovery always accepts BOTH — {@link SPEC_EXTENSIONS}\n * and {@link SPEC_DIRS} list every recognized variant (newest brand first), so\n * an existing `.canary.md` repo keeps working under either binary.\n */\nexport const SPEC_EXTENSIONS = ['.cofactor.md', '.canary.md'] as const;\n\n/**\n * Default spec-directory roots, newest brand first. Each is used as\n * `<root>/specs`. The ordering is a precedence contract: consumers that merge\n * across roots (e.g. `pull --all`) must treat earlier entries as higher\n * priority, so the active/new brand's copy wins over a legacy one.\n */\nexport const SPEC_DIRS = ['cofactor', 'canary'] as const;\n\n/** Spec-file extension to WRITE for a given brand. See {@link SPEC_EXTENSIONS}. */\nexport function specExtensionFor(brand: Brand): string {\n return brand === 'cofactor' ? '.cofactor.md' : '.canary.md';\n}\n\n/** Default spec directory (`<root>/specs`) to WRITE into for a given brand. */\nexport function specDirFor(brand: Brand): string {\n return path.join(brand === 'cofactor' ? 'cofactor' : 'canary', 'specs');\n}\n\n/** Spec-file extension to WRITE for the active brand. See {@link specExtensionFor}. */\nexport const specExtension: string = specExtensionFor(command);\n\n/** Default spec directory to WRITE into for the active brand. See {@link specDirFor}. */\nexport const specDir: string = specDirFor(command);\n\n/**\n * Every spec directory to READ from, highest precedence first — `<root>/specs`\n * for each {@link SPEC_DIRS} root. This is the single source of the spec-dir\n * convention for discovery; consumers merge across these in order (first-seen\n * wins) so the active brand's copy beats a legacy one. Brand-independent: a\n * `cofactor` run still discovers an existing `canary/specs` repo, and vice\n * versa.\n */\nexport function readableSpecDirs(): string[] {\n return SPEC_DIRS.map((root) => path.join(root, 'specs'));\n}\n\n/** True if `name` ends with any recognized spec extension (either brand). */\nexport function isSpecFile(name: string): boolean {\n return SPEC_EXTENSIONS.some((ext) => name.endsWith(ext));\n}\n\n/**\n * Split a recognized spec extension off `name`, returning `{ base, ext }` for\n * the first matching {@link SPEC_EXTENSIONS} entry, or `null` if none match.\n * Lets callers derive sibling names (e.g. `.stamped`) without assuming a brand.\n */\nexport function splitSpecExtension(name: string): { base: string; ext: string } | null {\n for (const ext of SPEC_EXTENSIONS) {\n if (name.endsWith(ext)) return { base: name.slice(0, -ext.length), ext };\n }\n return null;\n}\n\n/**\n * Install brand rewriting over the `console` methods used for human-readable\n * output. No-op for the `canary` brand. Skipped by the caller for machine\n * output (`--json`/`--format`) and the `mcp` JSON-RPC transport, where rewriting\n * could corrupt structured payloads — display branding only.\n */\nexport function installConsoleBranding(): void {\n if (command === 'canary') return;\n const methods = ['log', 'error', 'warn', 'info'] as const;\n for (const method of methods) {\n const original = console[method].bind(console);\n console[method] = (...args: unknown[]) => {\n original(...args.map((arg) => (typeof arg === 'string' ? brandText(arg) : arg)));\n };\n }\n}\n"],"mappings":"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","names":["require"]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-JWHYXEA2.js";
5
5
  import {
6
6
  isVolatileIdentifier
7
- } from "./chunk-JYGNMKZ5.js";
7
+ } from "./chunk-IWKJQZJQ.js";
8
8
  import {
9
9
  require_src
10
10
  } from "./chunk-6LEZCKKV.js";
@@ -25725,6 +25725,18 @@ var TIMEOUTS = {
25725
25725
  // header-less streaming fetch must never block a snapshot indefinitely.
25726
25726
  HTTP_SETTLE_MAX_AGE: 1e4
25727
25727
  };
25728
+ var POINTER_DRAG = {
25729
+ /** Px moved right after mousedown to satisfy distance-activation constraints. */
25730
+ ACTIVATION_NUDGE_PX: 8,
25731
+ /** Pause after the nudge so the library mounts its drag state (ms). */
25732
+ ACTIVATION_HOLD_MS: 80,
25733
+ /** Intermediate pointer positions walked between start and target. */
25734
+ PATH_STEPS: 10,
25735
+ /** Pause between steps so rAF-throttled dragover/collision logic keeps up (ms). */
25736
+ STEP_DELAY_MS: 25,
25737
+ /** Hold over the target before mouseup so the final slot is registered (ms). */
25738
+ DROP_HOLD_MS: 120
25739
+ };
25728
25740
  var LARGE_PAGE_REF_THRESHOLD = 1500;
25729
25741
  var DEFAULTS = {
25730
25742
  MAX_DEPTH: 10,
@@ -53070,6 +53082,29 @@ var errors = playwrightLoader.lazyloadExportOrDie("errors");
53070
53082
 
53071
53083
  // ../browser-core/src/playwright-client.ts
53072
53084
  var import_puppeteer_extra_plugin_stealth = __toESM(require_puppeteer_extra_plugin_stealth(), 1);
53085
+
53086
+ // ../browser-core/src/playwright-client/pointer-drag.ts
53087
+ async function performPointerDrag(page, from, to2, hooks) {
53088
+ await page.mouse.move(from.x, from.y);
53089
+ await page.mouse.down();
53090
+ const angle = Math.atan2(to2.y - from.y, to2.x - from.x);
53091
+ const nudgeX = from.x + Math.cos(angle) * POINTER_DRAG.ACTIVATION_NUDGE_PX;
53092
+ const nudgeY = from.y + Math.sin(angle) * POINTER_DRAG.ACTIVATION_NUDGE_PX;
53093
+ await page.mouse.move(nudgeX, nudgeY, { steps: 2 });
53094
+ await page.waitForTimeout(POINTER_DRAG.ACTIVATION_HOLD_MS);
53095
+ for (let i2 = 1; i2 <= POINTER_DRAG.PATH_STEPS; i2++) {
53096
+ const t2 = i2 / POINTER_DRAG.PATH_STEPS;
53097
+ const x2 = nudgeX + (to2.x - nudgeX) * t2;
53098
+ const y2 = nudgeY + (to2.y - nudgeY) * t2;
53099
+ await hooks?.onStep?.(x2, y2);
53100
+ await page.mouse.move(x2, y2);
53101
+ await page.waitForTimeout(POINTER_DRAG.STEP_DELAY_MS);
53102
+ }
53103
+ await page.waitForTimeout(POINTER_DRAG.DROP_HOLD_MS);
53104
+ await page.mouse.up();
53105
+ }
53106
+
53107
+ // ../browser-core/src/playwright-client.ts
53073
53108
  import * as fs4 from "fs/promises";
53074
53109
  import * as path5 from "path";
53075
53110
 
@@ -56705,6 +56740,10 @@ ${warning}` : ""}`,
56705
56740
  await this.cursorOverlay.moveTo(page, x2, y2);
56706
56741
  await page.mouse.move(x2, y2);
56707
56742
  }
56743
+ /** True when the element (or an ancestor) opts into native HTML5 DnD. */
56744
+ async usesNativeHtml5Drag(locator) {
56745
+ return locator.evaluate((el) => el.closest('[draggable="true"]') !== null).catch(() => false);
56746
+ }
56708
56747
  async dragCoordinates(startX, startY, endX, endY, elementDesc, _opts) {
56709
56748
  const dialogMsg = this.getPendingDialogMessage();
56710
56749
  if (dialogMsg) throw new Error(dialogMsg);
@@ -56712,12 +56751,14 @@ ${warning}` : ""}`,
56712
56751
  this.logger.debug("[DirectPlaywright] Dragging", { startX, startY, endX, endY, elementDesc });
56713
56752
  await this.cursorOverlay.moveTo(page, startX, startY);
56714
56753
  await this.highlightPoint(startX, startY, "click");
56715
- await this.cursorOverlay.moveTo(page, endX, endY);
56716
56754
  await this.highlightPoint(endX, endY, "click");
56717
- await page.mouse.move(startX, startY);
56718
- await page.mouse.down();
56719
- await page.mouse.move(endX, endY);
56720
- await page.mouse.up();
56755
+ await performPointerDrag(
56756
+ page,
56757
+ { x: startX, y: startY },
56758
+ { x: endX, y: endY },
56759
+ { onStep: (x2, y2) => this.cursorOverlay.moveTo(page, x2, y2) }
56760
+ );
56761
+ await this.stabilize("dom-only");
56721
56762
  }
56722
56763
  async hover(ref2, elementDesc = "element", opts) {
56723
56764
  const dialogMsg = this.getPendingDialogMessage();
@@ -56763,9 +56804,28 @@ ${warning}` : ""}`,
56763
56804
  const page = await this.getPage();
56764
56805
  await this.cursorOverlay.moveToElement(page, startLocator);
56765
56806
  await this.highlightInteraction(startLocator, "drag-start");
56766
- await this.cursorOverlay.moveToElement(page, endLocator);
56767
56807
  await this.highlightInteraction(endLocator, "drag-end");
56768
- await startLocator.dragTo(endLocator, { timeout: opts?.timeoutMs ?? TIMEOUTS.CLICK * 2 });
56808
+ if (await this.usesNativeHtml5Drag(startLocator)) {
56809
+ await startLocator.dragTo(endLocator, { timeout: opts?.timeoutMs ?? TIMEOUTS.CLICK * 2 });
56810
+ } else {
56811
+ await startLocator.scrollIntoViewIfNeeded({ timeout: 5e3 }).catch(() => {
56812
+ });
56813
+ await endLocator.scrollIntoViewIfNeeded({ timeout: 5e3 }).catch(() => {
56814
+ });
56815
+ const startBox = await startLocator.boundingBox();
56816
+ const endBox = await endLocator.boundingBox();
56817
+ if (!startBox || !endBox) {
56818
+ throw new Error(
56819
+ `Cannot drag "${startElement}" to "${endElement}": ${!startBox ? "start" : "end"} element has no visible bounding box`
56820
+ );
56821
+ }
56822
+ await performPointerDrag(
56823
+ page,
56824
+ { x: startBox.x + startBox.width / 2, y: startBox.y + startBox.height / 2 },
56825
+ { x: endBox.x + endBox.width / 2, y: endBox.y + endBox.height / 2 },
56826
+ { onStep: (x2, y2) => this.cursorOverlay.moveTo(page, x2, y2) }
56827
+ );
56828
+ }
56769
56829
  await this.stabilize("dom-only");
56770
56830
  }
56771
56831
  async type(ref2, text, elementDesc = "input", submit, opts) {
@@ -59840,4 +59900,4 @@ playwright-extra/dist/index.esm.js:
59840
59900
  * @license MIT
59841
59901
  *)
59842
59902
  */
59843
- //# sourceMappingURL=chunk-VGYN2KU2.js.map
59903
+ //# sourceMappingURL=chunk-5R4HMSNX.js.map