xtrm-tools 0.7.16 → 0.7.18

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 (264) hide show
  1. package/.xtrm/config/hooks.json +2 -0
  2. package/.xtrm/config/instructions/agents-top.md +2 -1
  3. package/.xtrm/registry.json +432 -707
  4. package/.xtrm/skills/default/creating-service-skills/scripts/bootstrap.py +82 -156
  5. package/.xtrm/skills/default/creating-service-skills/scripts/scaffolder.py +73 -121
  6. package/.xtrm/skills/default/hook-development/references/patterns.md +1 -1
  7. package/.xtrm/skills/default/last30days/scripts/test-v1-vs-v2.sh +2 -2
  8. package/.xtrm/skills/default/planning/SKILL.md +75 -29
  9. package/.xtrm/skills/default/releasing/SKILL.md +163 -57
  10. package/.xtrm/skills/default/security-pipeline/SKILL.md +192 -0
  11. package/.xtrm/skills/default/security-pipeline/scripts/security-bootstrap.sh +294 -0
  12. package/.xtrm/skills/default/security-pipeline/templates/.githooks/pre-push.template +39 -0
  13. package/.xtrm/skills/default/security-pipeline/templates/.github/workflows/gitleaks.yml +33 -0
  14. package/.xtrm/skills/default/security-pipeline/templates/.github/workflows/osv-scanner.yml +33 -0
  15. package/.xtrm/skills/default/security-pipeline/templates/.github/workflows/semgrep.yml +41 -0
  16. package/.xtrm/skills/default/security-pipeline/templates/.gitleaks.toml +44 -0
  17. package/.xtrm/skills/default/security-pipeline/templates/.pre-commit-config.yaml +67 -0
  18. package/.xtrm/skills/default/security-pipeline/templates/.semgrepignore +46 -0
  19. package/.xtrm/skills/default/security-pipeline/templates/scripts/security-scan.sh +57 -0
  20. package/.xtrm/skills/default/security-pipeline/templates/scripts/semgrep-diff.sh +68 -0
  21. package/.xtrm/skills/default/session-close-report/SKILL.md +167 -6
  22. package/.xtrm/skills/default/sync-docs/SKILL.md +1 -1
  23. package/.xtrm/skills/default/update-specialists/SKILL.md +204 -77
  24. package/.xtrm/skills/default/update-xt/SKILL.md +270 -4
  25. package/.xtrm/skills/default/updating-service-skills/scripts/drift_detector.py +22 -0
  26. package/.xtrm/skills/default/using-kpi/SKILL.md +47 -5
  27. package/.xtrm/skills/default/using-script-specialists/SKILL.md +7 -5
  28. package/.xtrm/skills/default/using-specialists/SKILL.md +13 -12
  29. package/.xtrm/skills/default/using-specialists-auto/SKILL.md +137 -0
  30. package/.xtrm/skills/default/using-specialists-v2/SKILL.md +15 -22
  31. package/.xtrm/skills/default/using-specialists-v3/SKILL.md +1074 -0
  32. package/.xtrm/skills/default/vaultctl/SKILL.md +2 -2
  33. package/CHANGELOG.md +91 -3
  34. package/cli/dist/index.cjs +12425 -3770
  35. package/cli/dist/index.cjs.map +1 -1
  36. package/cli/package.json +9 -3
  37. package/package.json +27 -7
  38. package/packages/pi-extensions/extensions/xtrm-ui/index.ts +76 -1
  39. package/packages/pi-extensions/package.json +1 -1
  40. package/.xtrm/config/pi/extensions/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.combined.log +0 -7
  41. package/.xtrm/config/pi/extensions/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.stderr.log +0 -0
  42. package/.xtrm/config/pi/extensions/custom-footer/.pi/structured-returns/83051fe4-97da-4e2c-bdaa-343b32f4e714.stdout.log +0 -7
  43. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/LICENSE +0 -22
  44. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/README.md +0 -29
  45. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.d.ts +0 -3
  46. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.d.ts.map +0 -1
  47. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.js +0 -2
  48. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/index.js.map +0 -1
  49. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.d.ts +0 -8
  50. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.d.ts.map +0 -1
  51. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.js +0 -27
  52. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chrome.js.map +0 -1
  53. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.d.ts +0 -11
  54. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.d.ts.map +0 -1
  55. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.js +0 -100
  56. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/crypto.js.map +0 -1
  57. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.d.ts +0 -25
  58. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.d.ts.map +0 -1
  59. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.js +0 -104
  60. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/linuxKeyring.js.map +0 -1
  61. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.d.ts +0 -10
  62. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.d.ts.map +0 -1
  63. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.js +0 -293
  64. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/shared.js.map +0 -1
  65. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.d.ts +0 -10
  66. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.d.ts.map +0 -1
  67. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.js +0 -26
  68. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqlite/windowsDpapi.js.map +0 -1
  69. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.d.ts +0 -7
  70. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.d.ts.map +0 -1
  71. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.js +0 -51
  72. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteLinux.js.map +0 -1
  73. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.d.ts +0 -7
  74. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.d.ts.map +0 -1
  75. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.js +0 -60
  76. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteMac.js.map +0 -1
  77. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.d.ts +0 -7
  78. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.d.ts.map +0 -1
  79. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.js +0 -38
  80. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromeSqliteWindows.js.map +0 -1
  81. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.d.ts +0 -5
  82. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.d.ts.map +0 -1
  83. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.js +0 -33
  84. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/linuxPaths.js.map +0 -1
  85. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.d.ts +0 -24
  86. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.d.ts.map +0 -1
  87. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.js +0 -30
  88. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/macosKeychain.js.map +0 -1
  89. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.d.ts +0 -11
  90. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.d.ts.map +0 -1
  91. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.js +0 -43
  92. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/paths.js.map +0 -1
  93. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.d.ts +0 -8
  94. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.d.ts.map +0 -1
  95. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.js +0 -41
  96. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsMasterKey.js.map +0 -1
  97. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.d.ts +0 -8
  98. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.d.ts.map +0 -1
  99. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.js +0 -53
  100. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/chromium/windowsPaths.js.map +0 -1
  101. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.d.ts +0 -8
  102. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.d.ts.map +0 -1
  103. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.js +0 -27
  104. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edge.js.map +0 -1
  105. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.d.ts +0 -7
  106. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.d.ts.map +0 -1
  107. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.js +0 -53
  108. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteLinux.js.map +0 -1
  109. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.d.ts +0 -8
  110. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.d.ts.map +0 -1
  111. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.js +0 -60
  112. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteMac.js.map +0 -1
  113. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.d.ts +0 -7
  114. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.d.ts.map +0 -1
  115. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.js +0 -38
  116. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/edgeSqliteWindows.js.map +0 -1
  117. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.d.ts +0 -6
  118. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.d.ts.map +0 -1
  119. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.js +0 -257
  120. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/firefoxSqlite.js.map +0 -1
  121. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.d.ts +0 -8
  122. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.d.ts.map +0 -1
  123. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.js +0 -71
  124. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/inline.js.map +0 -1
  125. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.d.ts +0 -6
  126. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.d.ts.map +0 -1
  127. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.js +0 -173
  128. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/providers/safariBinaryCookies.js.map +0 -1
  129. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.d.ts +0 -26
  130. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.d.ts.map +0 -1
  131. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.js +0 -195
  132. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/public.js.map +0 -1
  133. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.d.ts +0 -121
  134. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.d.ts.map +0 -1
  135. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.js +0 -2
  136. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/types.js.map +0 -1
  137. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.d.ts +0 -2
  138. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.d.ts.map +0 -1
  139. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.js +0 -18
  140. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/base64.js.map +0 -1
  141. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.d.ts +0 -8
  142. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.d.ts.map +0 -1
  143. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.js +0 -110
  144. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/exec.js.map +0 -1
  145. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.d.ts +0 -2
  146. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.d.ts.map +0 -1
  147. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.js +0 -32
  148. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/expire.js.map +0 -1
  149. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.d.ts +0 -2
  150. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.d.ts.map +0 -1
  151. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.js +0 -13
  152. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/fs.js.map +0 -1
  153. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.d.ts +0 -2
  154. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.d.ts.map +0 -1
  155. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.js +0 -7
  156. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/hostMatch.js.map +0 -1
  157. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.d.ts +0 -5
  158. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.d.ts.map +0 -1
  159. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.js +0 -58
  160. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/nodeSqlite.js.map +0 -1
  161. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.d.ts +0 -2
  162. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.d.ts.map +0 -1
  163. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.js +0 -27
  164. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/origins.js.map +0 -1
  165. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.d.ts +0 -2
  166. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.d.ts.map +0 -1
  167. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.js +0 -8
  168. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/dist/util/runtime.js.map +0 -1
  169. package/.xtrm/skills/default/last30days/scripts/lib/vendor/bird-search/node_modules/@steipete/sweet-cookie/package.json +0 -40
  170. package/.xtrm/skills/default/planning/evals/evals.json +0 -19
  171. package/.xtrm/skills/default/quality-gates/evals/evals.json +0 -181
  172. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/FINAL-EVAL-SUMMARY.md +0 -75
  173. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/edge-case-auto-fix-verification/with_skill/outputs/response.md +0 -59
  174. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/edge-case-mixed-language-project/with_skill/outputs/response.md +0 -60
  175. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/eval-summary.md +0 -105
  176. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/partial-install-python-only/with_skill/outputs/response.md +0 -93
  177. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/python-refactor-request/with_skill/outputs/response.md +0 -104
  178. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/quality-gate-error-fix/with_skill/outputs/response.md +0 -74
  179. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-general-chat/with_skill/outputs/response.md +0 -18
  180. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-math-question/with_skill/outputs/response.md +0 -18
  181. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/should-not-trigger-unrelated-coding/with_skill/outputs/response.md +0 -56
  182. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/tdd-guard-blocking-confusion/with_skill/outputs/response.md +0 -67
  183. package/.xtrm/skills/default/quality-gates/workspace/iteration-1/typescript-feature-with-tests/with_skill/outputs/response.md +0 -97
  184. package/.xtrm/skills/default/sync-docs/evals/evals.json +0 -89
  185. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/benchmark.json +0 -293
  186. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/benchmark.md +0 -13
  187. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/eval_metadata.json +0 -27
  188. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/outputs/result.md +0 -210
  189. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/grading.json +0 -28
  190. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/timing.json +0 -1
  191. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/outputs/result.md +0 -101
  192. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/grading.json +0 -28
  193. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/timing.json +0 -5
  194. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/timing.json +0 -5
  195. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/eval_metadata.json +0 -27
  196. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/outputs/result.md +0 -198
  197. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/grading.json +0 -28
  198. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/timing.json +0 -1
  199. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/outputs/result.md +0 -94
  200. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/grading.json +0 -28
  201. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/timing.json +0 -1
  202. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/eval_metadata.json +0 -27
  203. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/outputs/result.md +0 -237
  204. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/grading.json +0 -28
  205. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/timing.json +0 -1
  206. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/outputs/result.md +0 -134
  207. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/grading.json +0 -28
  208. package/.xtrm/skills/default/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/timing.json +0 -1
  209. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/benchmark.json +0 -297
  210. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/benchmark.md +0 -13
  211. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/eval_metadata.json +0 -27
  212. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/outputs/result.md +0 -137
  213. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/grading.json +0 -92
  214. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/timing.json +0 -1
  215. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/outputs/result.md +0 -134
  216. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/grading.json +0 -86
  217. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/timing.json +0 -1
  218. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/eval_metadata.json +0 -27
  219. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/outputs/result.md +0 -193
  220. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/grading.json +0 -72
  221. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/timing.json +0 -1
  222. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/outputs/result.md +0 -211
  223. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/grading.json +0 -91
  224. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/timing.json +0 -5
  225. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/eval_metadata.json +0 -27
  226. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/outputs/result.md +0 -182
  227. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/grading.json +0 -95
  228. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/timing.json +0 -1
  229. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/outputs/result.md +0 -222
  230. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/grading.json +0 -88
  231. package/.xtrm/skills/default/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/timing.json +0 -5
  232. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/benchmark.json +0 -298
  233. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/benchmark.md +0 -13
  234. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/eval_metadata.json +0 -27
  235. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/outputs/result.md +0 -125
  236. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/grading.json +0 -97
  237. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/timing.json +0 -5
  238. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/outputs/result.md +0 -144
  239. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/grading.json +0 -78
  240. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/timing.json +0 -5
  241. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/eval_metadata.json +0 -27
  242. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/outputs/result.md +0 -104
  243. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/grading.json +0 -91
  244. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/timing.json +0 -5
  245. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/outputs/result.md +0 -79
  246. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/grading.json +0 -82
  247. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/timing.json +0 -5
  248. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/eval_metadata.json +0 -27
  249. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase1_context.json +0 -302
  250. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase2_drift.txt +0 -33
  251. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase3_analysis.json +0 -114
  252. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase4_fix.txt +0 -118
  253. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase5_validate.txt +0 -38
  254. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/result.md +0 -158
  255. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/grading.json +0 -95
  256. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/timing.json +0 -5
  257. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/outputs/result.md +0 -71
  258. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/grading.json +0 -90
  259. package/.xtrm/skills/default/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/timing.json +0 -5
  260. package/.xtrm/skills/default/test-planning/evals/evals.json +0 -23
  261. package/.xtrm/skills/default/using-specialists/SKILL.safe.md +0 -1082
  262. package/.xtrm/skills/default/using-specialists/SKILL.ultra.md +0 -1082
  263. package/.xtrm/skills/default/using-specialists/evals/evals.json +0 -68
  264. package/packages/pi-extensions/.serena/project.yml +0 -130
package/cli/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "xtrm-cli",
3
- "version": "0.7.16",
3
+ "private": true,
4
+ "version": "0.7.18",
4
5
  "description": "Claude Code tools installer (skills, hooks, MCP servers)",
5
6
  "main": "./dist/index.js",
6
7
  "type": "module",
@@ -36,14 +37,14 @@
36
37
  "ora": "^9.3.0",
37
38
  "project": "^0.1.6",
38
39
  "prompts": "^2.4.2",
39
- "tdd-guard": "^1.1.0",
40
+ "yaml": "^2.4.2",
40
41
  "zod": "^4.3.6"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@types/fs-extra": "^11.0.4",
44
45
  "@types/node": "^25.3.0",
46
+ "@types/prompts": "^2.4.9",
45
47
  "fast-check": "^4.6.0",
46
- "tdd-guard-vitest": "^0.1.6",
47
48
  "tsup": "^8.5.1",
48
49
  "tsx": "^4.21.0",
49
50
  "typescript": "^5.9.3",
@@ -51,5 +52,10 @@
51
52
  },
52
53
  "engines": {
53
54
  "node": ">=20.0.0"
55
+ },
56
+ "pnpm": {
57
+ "overrides": {
58
+ "vite": "8.0.12"
59
+ }
54
60
  }
55
61
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xtrm-tools",
3
- "version": "0.7.16",
3
+ "version": "0.7.18",
4
4
  "description": "Claude Code tools installer (skills, hooks, MCP servers)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -32,7 +32,10 @@
32
32
  "!packages/pi-extensions/extensions/**/.pi/**",
33
33
  "!.xtrm/extensions/**/.pi/**",
34
34
  "!.xtrm/**/test_*.py",
35
- "!.xtrm/**/tests/**"
35
+ "!.xtrm/**/tests/**",
36
+ "!.xtrm/skills/default/**/evals/**",
37
+ "!.xtrm/skills/default/**/workspace/iteration-*/**",
38
+ "!packages/*/.serena/**"
36
39
  ],
37
40
  "publishConfig": {
38
41
  "access": "public"
@@ -56,25 +59,37 @@
56
59
  "start": "node cli/dist/index.cjs",
57
60
  "lint": "echo 'No linting configured'",
58
61
  "test": "npm test --workspace cli",
62
+ "check:package": "node scripts/assert-no-self-dependency.mjs",
59
63
  "version": "npm run sync:cli-version && git add cli/package.json packages/pi-extensions/package.json",
60
- "prepublishOnly": "npm run sync:cli-version && node scripts/vendor-specialists-skills.mjs && npm run gen-registry && npm run build",
64
+ "check:skills-ownership": "node scripts/check-skills-ownership.mjs",
65
+ "check:specialists-vendor": "node scripts/verify-specialists-vendor.mjs",
66
+ "check:asset-contract": "node scripts/verify-asset-contract.mjs",
67
+ "check:layout-guards": "node scripts/check-layout-guards.mjs",
68
+ "check:gitnexus-no-counter": "node scripts/check-gitnexus-no-counter.mjs",
69
+ "check:skills-symlinks": "node scripts/check-skills-symlinks.mjs",
70
+ "prepublishOnly": "npm run sync:cli-version && npm run check:package && npm run check:skills-ownership && node scripts/vendor-specialists-skills.mjs --specialists-package specialists --specialists-ref master && npm run gen-registry && npm run check:registry-pack-parity && npm run check:payload-hygiene && npm run check:specialists-vendor && npm run check:layout-guards && npm run check:gitnexus-no-counter && npm run check:skills-symlinks && npm run build",
61
71
  "release": "npm publish --tag latest",
62
72
  "release:pi-extensions": "npm publish --workspace @jaggerxtrm/pi-extensions --tag latest --access public",
63
73
  "release:all": "npm run release && npm run release:pi-extensions",
64
- "gen-registry": "node scripts/gen-registry.mjs"
74
+ "gen-registry": "node scripts/gen-registry.mjs",
75
+ "check:registry-pack-parity": "node scripts/check-registry-pack-parity.mjs",
76
+ "check:payload-hygiene": "node scripts/check-payload-hygiene.mjs"
65
77
  },
66
78
  "engines": {
67
79
  "node": ">=20.0.0"
68
80
  },
69
81
  "dependencies": {
70
- "@artale/pi-procs": "^1.1.0",
71
82
  "comment-json": "^4.2.3",
72
83
  "conf": "^15.1.0",
73
84
  "dotenv": "^17.3.1",
74
85
  "fs-extra": "^11.2.0",
75
86
  "kleur": "^4.1.5",
76
- "prompts": "^2.4.2",
77
- "xtrm-tools": "^2.0.2"
87
+ "prompts": "^2.4.2"
88
+ },
89
+ "overrides": {
90
+ "fast-uri": "3.1.2",
91
+ "@aws-sdk/xml-builder": "3.972.22",
92
+ "vite": "8.0.12"
78
93
  },
79
94
  "pi": {
80
95
  "extensions": [
@@ -88,5 +103,10 @@
88
103
  "npm:@aliou/pi-guardrails",
89
104
  "npm:@aliou/pi-processes"
90
105
  ]
106
+ },
107
+ "pnpm": {
108
+ "overrides": {
109
+ "vite": "8.0.12"
110
+ }
91
111
  }
92
112
  }
@@ -33,7 +33,8 @@ import {
33
33
  } from "@mariozechner/pi-coding-agent";
34
34
  import { Box, Text, truncateToWidth, visibleWidth } from "@mariozechner/pi-tui";
35
35
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
36
- import { basename, join } from "node:path";
36
+ import { basename, dirname, join } from "node:path";
37
+ import { fileURLToPath, pathToFileURL } from "node:url";
37
38
  import {
38
39
  cleanOutputLines,
39
40
  countPrefixedItems,
@@ -66,6 +67,7 @@ export interface XtrmUiPrefs {
66
67
  forceTheme: boolean; // When false, skip setTheme (allow external theme override)
67
68
  toolRowBg: boolean; // Subtle background behind tool text rows (no padding)
68
69
  compactExternalToolResults: boolean; // Compact extension tool results (disables full expand output)
70
+ hideThinkingPlaceholder: boolean; // When false, hidden thinking blocks render no placeholder text
69
71
  }
70
72
 
71
73
  // ============================================================================
@@ -83,6 +85,7 @@ export const DEFAULT_PREFS: XtrmUiPrefs = {
83
85
  forceTheme: true,
84
86
  toolRowBg: false,
85
87
  compactExternalToolResults: true,
88
+ hideThinkingPlaceholder: false,
86
89
  };
87
90
 
88
91
  // ============================================================================
@@ -108,6 +111,7 @@ function normalizePrefs(input: unknown): XtrmUiPrefs {
108
111
  toolRowBg: source.toolRowBg ?? DEFAULT_PREFS.toolRowBg,
109
112
  compactExternalToolResults:
110
113
  source.compactExternalToolResults ?? DEFAULT_PREFS.compactExternalToolResults,
114
+ hideThinkingPlaceholder: source.hideThinkingPlaceholder ?? DEFAULT_PREFS.hideThinkingPlaceholder,
111
115
  };
112
116
  }
113
117
 
@@ -125,6 +129,74 @@ function persistPrefs(pi: ExtensionAPI, prefs: XtrmUiPrefs): void {
125
129
  pi.appendEntry(XTRM_UI_PREFS_ENTRY, prefs);
126
130
  }
127
131
 
132
+
133
+ // ============================================================================
134
+ // Thinking Chrome
135
+ // ============================================================================
136
+
137
+ type AssistantMessageComponentCtor = {
138
+ prototype: {
139
+ updateContent?: (message: AssistantMessageLike) => void;
140
+ setExpanded?: (expanded: boolean) => void;
141
+ };
142
+ };
143
+
144
+ type AssistantContentBlock = { type?: string; thinking?: string };
145
+ type AssistantMessageLike = { content?: AssistantContentBlock[] };
146
+ type PatchableAssistantMessage = {
147
+ hideThinkingBlock?: boolean;
148
+ hiddenThinkingLabel?: string;
149
+ lastMessage?: AssistantMessageLike;
150
+ __xtrmThinkingExpanded?: boolean;
151
+ updateContent?: (message: AssistantMessageLike) => void;
152
+ };
153
+
154
+ const PATCHED_ASSISTANT_MESSAGE = "__xtrmUiSilentHiddenThinking";
155
+
156
+ async function installSilentHiddenThinkingPatch(): Promise<void> {
157
+ const entryPath = fileURLToPath(import.meta.resolve("@mariozechner/pi-coding-agent"));
158
+ const componentPath = join(dirname(entryPath), "modes", "interactive", "components", "assistant-message.js");
159
+ const mod = await import(pathToFileURL(componentPath).href) as {
160
+ AssistantMessageComponent?: AssistantMessageComponentCtor;
161
+ };
162
+ const proto = mod.AssistantMessageComponent?.prototype as
163
+ | (AssistantMessageComponentCtor["prototype"] & { [PATCHED_ASSISTANT_MESSAGE]?: boolean })
164
+ | undefined;
165
+ if (!proto?.updateContent || proto[PATCHED_ASSISTANT_MESSAGE]) return;
166
+
167
+ const updateContent = proto.updateContent;
168
+ proto.updateContent = function patchedUpdateContent(this: PatchableAssistantMessage, message: AssistantMessageLike) {
169
+ if (this.hiddenThinkingLabel === "" && Array.isArray(message.content)) {
170
+ if (!this.__xtrmThinkingExpanded) {
171
+ updateContent.call(this, {
172
+ ...message,
173
+ content: message.content.filter((block) => block.type !== "thinking" || !block.thinking?.trim()),
174
+ });
175
+ return;
176
+ }
177
+
178
+ const previousHideThinking = this.hideThinkingBlock;
179
+ this.hideThinkingBlock = false;
180
+ updateContent.call(this, message);
181
+ this.hideThinkingBlock = previousHideThinking;
182
+ return;
183
+ }
184
+ updateContent.call(this, message);
185
+ };
186
+
187
+ proto.setExpanded = function setExpanded(this: PatchableAssistantMessage, expanded: boolean) {
188
+ this.__xtrmThinkingExpanded = expanded;
189
+ if (this.lastMessage) this.updateContent?.(this.lastMessage);
190
+ };
191
+ proto[PATCHED_ASSISTANT_MESSAGE] = true;
192
+ }
193
+
194
+ function applyThinkingChrome(ctx: ExtensionContext, prefs: XtrmUiPrefs): void {
195
+ (ctx.ui as { setHiddenThinkingLabel?: (label?: string) => void }).setHiddenThinkingLabel?.(
196
+ prefs.hideThinkingPlaceholder ? undefined : "",
197
+ );
198
+ }
199
+
128
200
  // ============================================================================
129
201
  // Chrome Application
130
202
  // ============================================================================
@@ -1190,6 +1262,8 @@ function isXtrmTheme(name: string | undefined): boolean {
1190
1262
  }
1191
1263
 
1192
1264
  export default function xtrmUiExtension(pi: ExtensionAPI): void {
1265
+ void installSilentHiddenThinkingPatch().catch(() => undefined);
1266
+
1193
1267
  let prefs: XtrmUiPrefs = { ...DEFAULT_PREFS };
1194
1268
  let previousThemeName: string | null = null;
1195
1269
  const extensionThemeDir = join(__dirname, "../../themes/xtrm-ui");
@@ -1203,6 +1277,7 @@ export default function xtrmUiExtension(pi: ExtensionAPI): void {
1203
1277
 
1204
1278
  const refresh = (ctx: ExtensionContext) => {
1205
1279
  applyXtrmChrome(ctx, prefs, getThinkingLevel);
1280
+ applyThinkingChrome(ctx, prefs);
1206
1281
  };
1207
1282
 
1208
1283
  pi.on("resources_discover", async () => ({
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaggerxtrm/pi-extensions",
3
- "version": "0.7.16",
3
+ "version": "0.7.18",
4
4
  "description": "Unified Pi extension entrypoint for xtrm-managed extensions",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -1,7 +0,0 @@
1
- ../core/lib.ts(1,15): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './logger.js'?
2
- ../core/lib.ts(2,15): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './runner.js'?
3
- ../core/lib.ts(3,15): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './adapter.js'?
4
- index.ts(13,10): error TS2305: Module '"@xtrm/pi-core"' has no exported member 'SubprocessRunner'.
5
- index.ts(13,28): error TS2305: Module '"@xtrm/pi-core"' has no exported member 'EventAdapter'.
6
- index.ts(359,59): error TS2339: Property 'sessionId' does not exist on type 'ExtensionContext'.
7
- index.ts(359,76): error TS2339: Property 'session_id' does not exist on type 'ExtensionContext'.
@@ -1,7 +0,0 @@
1
- ../core/lib.ts(1,15): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './logger.js'?
2
- ../core/lib.ts(2,15): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './runner.js'?
3
- ../core/lib.ts(3,15): error TS2835: Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean './adapter.js'?
4
- index.ts(13,10): error TS2305: Module '"@xtrm/pi-core"' has no exported member 'SubprocessRunner'.
5
- index.ts(13,28): error TS2305: Module '"@xtrm/pi-core"' has no exported member 'EventAdapter'.
6
- index.ts(359,59): error TS2339: Property 'sessionId' does not exist on type 'ExtensionContext'.
7
- index.ts(359,76): error TS2339: Property 'session_id' does not exist on type 'ExtensionContext'.
@@ -1,22 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 Peter Steinberger
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
22
-
@@ -1,29 +0,0 @@
1
- # @steipete/sweet-cookie
2
-
3
- Inline-first browser cookie extraction for local tooling (no native addons).
4
-
5
- Supports:
6
- - Inline payloads (JSON / base64 / file) — most reliable path.
7
- - Local browser reads (best effort): Chrome, Edge, Firefox, Safari (macOS).
8
-
9
- Install:
10
- ```bash
11
- npm i @steipete/sweet-cookie
12
- ```
13
-
14
- Usage:
15
- ```ts
16
- import { getCookies, toCookieHeader } from '@steipete/sweet-cookie';
17
-
18
- const { cookies, warnings } = await getCookies({
19
- url: 'https://example.com/',
20
- names: ['session', 'csrf'],
21
- browsers: ['chrome', 'edge', 'firefox', 'safari'],
22
- });
23
-
24
- for (const w of warnings) console.warn(w);
25
- const cookieHeader = toCookieHeader(cookies, { dedupeByName: true });
26
- ```
27
-
28
- Docs + extension exporter: see the repo root README.
29
-
@@ -1,3 +0,0 @@
1
- export { getCookies, toCookieHeader } from './public.js';
2
- export type { BrowserName, Cookie, CookieHeaderOptions, CookieMode, CookieSameSite, GetCookiesOptions, GetCookiesResult, } from './types.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EACX,WAAW,EACX,MAAM,EACN,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,YAAY,CAAC"}
@@ -1,2 +0,0 @@
1
- export { getCookies, toCookieHeader } from './public.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { GetCookiesResult } from '../types.js';
2
- export declare function getCookiesFromChrome(options: {
3
- profile?: string;
4
- timeoutMs?: number;
5
- includeExpired?: boolean;
6
- debug?: boolean;
7
- }, origins: string[], allowlistNames: Set<string> | null): Promise<GetCookiesResult>;
8
- //# sourceMappingURL=chrome.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/providers/chrome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK5D,wBAAsB,oBAAoB,CACzC,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5F,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAChC,OAAO,CAAC,gBAAgB,CAAC,CA0B3B"}
@@ -1,27 +0,0 @@
1
- import { getCookiesFromChromeSqliteLinux } from './chromeSqliteLinux.js';
2
- import { getCookiesFromChromeSqliteMac } from './chromeSqliteMac.js';
3
- import { getCookiesFromChromeSqliteWindows } from './chromeSqliteWindows.js';
4
- export async function getCookiesFromChrome(options, origins, allowlistNames) {
5
- const warnings = [];
6
- // Platform dispatch only. All real logic lives in the per-OS providers.
7
- if (process.platform === 'darwin') {
8
- const r = await getCookiesFromChromeSqliteMac(options, origins, allowlistNames);
9
- warnings.push(...r.warnings);
10
- const cookies = r.cookies;
11
- return { cookies, warnings };
12
- }
13
- if (process.platform === 'linux') {
14
- const r = await getCookiesFromChromeSqliteLinux(options, origins, allowlistNames);
15
- warnings.push(...r.warnings);
16
- const cookies = r.cookies;
17
- return { cookies, warnings };
18
- }
19
- if (process.platform === 'win32') {
20
- const r = await getCookiesFromChromeSqliteWindows(options, origins, allowlistNames);
21
- warnings.push(...r.warnings);
22
- const cookies = r.cookies;
23
- return { cookies, warnings };
24
- }
25
- return { cookies: [], warnings };
26
- }
27
- //# sourceMappingURL=chrome.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/providers/chrome.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,OAA4F,EAC5F,OAAiB,EACjB,cAAkC;IAElC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,wEAAwE;IACxE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,MAAM,6BAA6B,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAa,CAAC,CAAC,OAAO,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAClF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAa,CAAC,CAAC,OAAO,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,MAAM,iCAAiC,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACpF,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAa,CAAC,CAAC,OAAO,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC"}
@@ -1,11 +0,0 @@
1
- export declare function deriveAes128CbcKeyFromPassword(password: string, options: {
2
- iterations: number;
3
- }): Buffer;
4
- export declare function decryptChromiumAes128CbcCookieValue(encryptedValue: Uint8Array, keyCandidates: readonly Buffer[], options: {
5
- stripHashPrefix: boolean;
6
- treatUnknownPrefixAsPlaintext?: boolean;
7
- }): string | null;
8
- export declare function decryptChromiumAes256GcmCookieValue(encryptedValue: Uint8Array, key: Buffer, options: {
9
- stripHashPrefix: boolean;
10
- }): string | null;
11
- //# sourceMappingURL=crypto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/providers/chromeSqlite/crypto.ts"],"names":[],"mappings":"AAIA,wBAAgB,8BAA8B,CAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC7B,MAAM,CAIR;AAED,wBAAgB,mCAAmC,CAClD,cAAc,EAAE,UAAU,EAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,6BAA6B,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,MAAM,GAAG,IAAI,CA2Bf;AAED,wBAAgB,mCAAmC,CAClD,cAAc,EAAE,UAAU,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,GACnC,MAAM,GAAG,IAAI,CAyBf"}
@@ -1,100 +0,0 @@
1
- import { createDecipheriv, pbkdf2Sync } from 'node:crypto';
2
- const UTF8_DECODER = new TextDecoder('utf-8', { fatal: true });
3
- export function deriveAes128CbcKeyFromPassword(password, options) {
4
- // Chromium derives the AES-128-CBC key from "Chrome Safe Storage" using PBKDF2.
5
- // The salt/length/digest are fixed by Chromium ("saltysalt", 16 bytes, sha1).
6
- return pbkdf2Sync(password, 'saltysalt', options.iterations, 16, 'sha1');
7
- }
8
- export function decryptChromiumAes128CbcCookieValue(encryptedValue, keyCandidates, options) {
9
- const buf = Buffer.from(encryptedValue);
10
- if (buf.length < 3)
11
- return null;
12
- // Chromium prefixes encrypted cookies with `v10`, `v11`, ... (three bytes).
13
- const prefix = buf.subarray(0, 3).toString('utf8');
14
- const hasVersionPrefix = /^v\d\d$/.test(prefix);
15
- if (!hasVersionPrefix) {
16
- // Some platforms (notably macOS) can store plaintext values in `encrypted_value`.
17
- // Callers decide whether unknown prefixes should be treated as plaintext.
18
- if (options.treatUnknownPrefixAsPlaintext === false)
19
- return null;
20
- return decodeCookieValueBytes(buf, false);
21
- }
22
- const ciphertext = buf.subarray(3);
23
- if (!ciphertext.length)
24
- return '';
25
- for (const key of keyCandidates) {
26
- // Try multiple candidates because Linux may fall back to empty passwords depending on keyring state.
27
- const decrypted = tryDecryptAes128Cbc(ciphertext, key);
28
- if (!decrypted)
29
- continue;
30
- const decoded = decodeCookieValueBytes(decrypted, options.stripHashPrefix);
31
- if (decoded !== null)
32
- return decoded;
33
- }
34
- return null;
35
- }
36
- export function decryptChromiumAes256GcmCookieValue(encryptedValue, key, options) {
37
- const buf = Buffer.from(encryptedValue);
38
- if (buf.length < 3)
39
- return null;
40
- const prefix = buf.subarray(0, 3).toString('utf8');
41
- if (!/^v\d\d$/.test(prefix))
42
- return null;
43
- // AES-256-GCM layout:
44
- // - 12-byte nonce
45
- // - ciphertext
46
- // - 16-byte authentication tag
47
- const payload = buf.subarray(3);
48
- if (payload.length < 12 + 16)
49
- return null;
50
- const nonce = payload.subarray(0, 12);
51
- const authenticationTag = payload.subarray(payload.length - 16);
52
- const ciphertext = payload.subarray(12, payload.length - 16);
53
- try {
54
- const decipher = createDecipheriv('aes-256-gcm', key, nonce);
55
- decipher.setAuthTag(authenticationTag);
56
- const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
57
- return decodeCookieValueBytes(plaintext, options.stripHashPrefix);
58
- }
59
- catch {
60
- return null;
61
- }
62
- }
63
- function tryDecryptAes128Cbc(ciphertext, key) {
64
- try {
65
- // Chromium's legacy AES-128-CBC uses an IV of 16 spaces.
66
- const iv = Buffer.alloc(16, 0x20);
67
- const decipher = createDecipheriv('aes-128-cbc', key, iv);
68
- decipher.setAutoPadding(false);
69
- const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
70
- return removePkcs7Padding(plaintext);
71
- }
72
- catch {
73
- return null;
74
- }
75
- }
76
- function removePkcs7Padding(value) {
77
- if (!value.length)
78
- return value;
79
- const padding = value[value.length - 1];
80
- if (!padding || padding > 16)
81
- return value;
82
- return value.subarray(0, value.length - padding);
83
- }
84
- function decodeCookieValueBytes(value, stripHashPrefix) {
85
- // Chromium >= 24 prepends a 32-byte hash to cookie values.
86
- const bytes = stripHashPrefix && value.length >= 32 ? value.subarray(32) : value;
87
- try {
88
- return stripLeadingControlChars(UTF8_DECODER.decode(bytes));
89
- }
90
- catch {
91
- return null;
92
- }
93
- }
94
- function stripLeadingControlChars(value) {
95
- let i = 0;
96
- while (i < value.length && value.charCodeAt(i) < 0x20)
97
- i += 1;
98
- return value.slice(i);
99
- }
100
- //# sourceMappingURL=crypto.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/providers/chromeSqlite/crypto.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- export type LinuxKeyringBackend = 'gnome' | 'kwallet' | 'basic';
2
- /**
3
- * Read the "Safe Storage" password from a Linux keyring.
4
- *
5
- * Chromium browsers typically store their cookie encryption password under:
6
- * - service: "<Browser> Safe Storage"
7
- * - account: "<Browser>"
8
- *
9
- * We keep this logic in JS (no native deps) and return an empty password on failure
10
- * (Chromium may still have v10 cookies, and callers can use inline/export escape hatches).
11
- */
12
- export declare function getLinuxChromiumSafeStoragePassword(options: {
13
- backend?: LinuxKeyringBackend;
14
- app: 'chrome' | 'edge';
15
- }): Promise<{
16
- password: string;
17
- warnings: string[];
18
- }>;
19
- export declare function getLinuxChromeSafeStoragePassword(options?: {
20
- backend?: LinuxKeyringBackend;
21
- }): Promise<{
22
- password: string;
23
- warnings: string[];
24
- }>;
25
- //# sourceMappingURL=linuxKeyring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"linuxKeyring.d.ts","sourceRoot":"","sources":["../../../src/providers/chromeSqlite/linuxKeyring.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhE;;;;;;;;;GASG;AACH,wBAAsB,mCAAmC,CAAC,OAAO,EAAE;IAClE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,GAAG,EAAE,QAAQ,GAAG,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8DpD;AAED,wBAAsB,iCAAiC,CACtD,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAAO,GAC7C,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAInD"}
@@ -1,104 +0,0 @@
1
- import { execCapture } from '../../util/exec.js';
2
- /**
3
- * Read the "Safe Storage" password from a Linux keyring.
4
- *
5
- * Chromium browsers typically store their cookie encryption password under:
6
- * - service: "<Browser> Safe Storage"
7
- * - account: "<Browser>"
8
- *
9
- * We keep this logic in JS (no native deps) and return an empty password on failure
10
- * (Chromium may still have v10 cookies, and callers can use inline/export escape hatches).
11
- */
12
- export async function getLinuxChromiumSafeStoragePassword(options) {
13
- const warnings = [];
14
- // Escape hatch: if callers already know the password (or want deterministic CI behavior),
15
- // they can bypass keyring probing entirely.
16
- const overrideKey = options.app === 'edge'
17
- ? 'SWEET_COOKIE_EDGE_SAFE_STORAGE_PASSWORD'
18
- : 'SWEET_COOKIE_CHROME_SAFE_STORAGE_PASSWORD';
19
- const override = readEnv(overrideKey);
20
- if (override !== undefined)
21
- return { password: override, warnings };
22
- const backend = options.backend ?? parseLinuxKeyringBackend() ?? chooseLinuxKeyringBackend();
23
- // `basic` means "don't try keyrings" (Chrome will fall back to older/less-secure schemes on some setups).
24
- if (backend === 'basic')
25
- return { password: '', warnings };
26
- const service = options.app === 'edge' ? 'Microsoft Edge Safe Storage' : 'Chrome Safe Storage';
27
- const account = options.app === 'edge' ? 'Microsoft Edge' : 'Chrome';
28
- const folder = `${account} Keys`;
29
- if (backend === 'gnome') {
30
- // GNOME keyring: `secret-tool` is the simplest way to read libsecret entries.
31
- const res = await execCapture('secret-tool', ['lookup', 'service', service, 'account', account], { timeoutMs: 3_000 });
32
- if (res.code === 0)
33
- return { password: res.stdout.trim(), warnings };
34
- warnings.push('Failed to read Linux keyring via secret-tool; v11 cookies may be unavailable.');
35
- return { password: '', warnings };
36
- }
37
- // KDE keyring: query KWallet via `kwallet-query`, but the wallet name differs across KDE versions.
38
- const kdeVersion = (readEnv('KDE_SESSION_VERSION') ?? '').trim();
39
- const serviceName = kdeVersion === '6'
40
- ? 'org.kde.kwalletd6'
41
- : kdeVersion === '5'
42
- ? 'org.kde.kwalletd5'
43
- : 'org.kde.kwalletd';
44
- const walletPath = kdeVersion === '6'
45
- ? '/modules/kwalletd6'
46
- : kdeVersion === '5'
47
- ? '/modules/kwalletd5'
48
- : '/modules/kwalletd';
49
- const wallet = await getKWalletNetworkWallet(serviceName, walletPath);
50
- const passwordRes = await execCapture('kwallet-query', ['--read-password', service, '--folder', folder, wallet], { timeoutMs: 3_000 });
51
- if (passwordRes.code !== 0) {
52
- warnings.push('Failed to read Linux keyring via kwallet-query; v11 cookies may be unavailable.');
53
- return { password: '', warnings };
54
- }
55
- if (passwordRes.stdout.toLowerCase().startsWith('failed to read'))
56
- return { password: '', warnings };
57
- return { password: passwordRes.stdout.trim(), warnings };
58
- }
59
- export async function getLinuxChromeSafeStoragePassword(options = {}) {
60
- const args = { app: 'chrome' };
61
- if (options.backend !== undefined)
62
- args.backend = options.backend;
63
- return await getLinuxChromiumSafeStoragePassword(args);
64
- }
65
- function parseLinuxKeyringBackend() {
66
- const raw = readEnv('SWEET_COOKIE_LINUX_KEYRING');
67
- if (!raw)
68
- return undefined;
69
- const normalized = raw.toLowerCase();
70
- if (normalized === 'gnome')
71
- return 'gnome';
72
- if (normalized === 'kwallet')
73
- return 'kwallet';
74
- if (normalized === 'basic')
75
- return 'basic';
76
- return undefined;
77
- }
78
- function chooseLinuxKeyringBackend() {
79
- const xdg = readEnv('XDG_CURRENT_DESKTOP') ?? '';
80
- const isKde = xdg.split(':').some((p) => p.trim().toLowerCase() === 'kde') || !!readEnv('KDE_FULL_SESSION');
81
- return isKde ? 'kwallet' : 'gnome';
82
- }
83
- async function getKWalletNetworkWallet(serviceName, walletPath) {
84
- const res = await execCapture('dbus-send', [
85
- '--session',
86
- '--print-reply=literal',
87
- `--dest=${serviceName}`,
88
- walletPath,
89
- 'org.kde.KWallet.networkWallet',
90
- ], { timeoutMs: 3_000 });
91
- const fallback = 'kdewallet';
92
- if (res.code !== 0)
93
- return fallback;
94
- const raw = res.stdout.trim();
95
- if (!raw)
96
- return fallback;
97
- return raw.replaceAll('"', '').trim() || fallback;
98
- }
99
- function readEnv(key) {
100
- const value = process.env[key];
101
- const trimmed = typeof value === 'string' ? value.trim() : '';
102
- return trimmed.length ? trimmed : undefined;
103
- }
104
- //# sourceMappingURL=linuxKeyring.js.map