lsd-pi 1.1.10 → 1.2.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 (545) hide show
  1. package/dist/onboarding.js +3 -3
  2. package/dist/resources/agents/scout.md +6 -0
  3. package/dist/resources/extensions/slash-commands/index.js +2 -0
  4. package/dist/resources/extensions/slash-commands/init.js +47 -0
  5. package/dist/resources/extensions/slash-commands/plan.js +238 -51
  6. package/dist/resources/extensions/slash-commands/tools.js +14 -27
  7. package/dist/resources/extensions/subagent/index.js +14 -11
  8. package/dist/resources/extensions/usage/index.js +87 -36
  9. package/package.json +1 -1
  10. package/packages/pi-ai/dist/models.generated.d.ts +222 -1
  11. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  12. package/packages/pi-ai/dist/models.generated.js +227 -6
  13. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  14. package/packages/pi-ai/dist/models.test.js +28 -0
  15. package/packages/pi-ai/dist/models.test.js.map +1 -1
  16. package/packages/pi-ai/scripts/generate-models.ts +10 -100
  17. package/packages/pi-ai/src/models.generated.ts +227 -6
  18. package/packages/pi-ai/src/models.test.ts +30 -0
  19. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  20. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  21. package/packages/pi-coding-agent/dist/core/agent-session.js +39 -5
  22. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  23. package/packages/pi-coding-agent/dist/core/resource-loader-lsd-md.test.js +59 -7
  24. package/packages/pi-coding-agent/dist/core/resource-loader-lsd-md.test.js.map +1 -1
  25. package/packages/pi-coding-agent/dist/core/resource-loader.js +4 -4
  26. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  27. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -1
  28. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  29. package/packages/pi-coding-agent/dist/core/sdk.js +18 -7
  30. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  31. package/packages/pi-coding-agent/dist/core/sdk.test.js +80 -0
  32. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  33. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +12 -5
  34. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  35. package/packages/pi-coding-agent/dist/core/settings-manager.js +23 -9
  36. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  37. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  38. package/packages/pi-coding-agent/dist/core/system-prompt.js +10 -0
  39. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  40. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +8 -4
  41. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  42. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +32 -5
  43. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  44. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  45. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +8 -0
  46. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  47. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  48. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +34 -25
  49. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  50. package/packages/pi-coding-agent/dist/tests/path-display.test.js +13 -0
  51. package/packages/pi-coding-agent/dist/tests/path-display.test.js.map +1 -1
  52. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts +2 -0
  53. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.d.ts.map +1 -0
  54. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js +15 -0
  55. package/packages/pi-coding-agent/dist/tests/settings-manager-scout-policy.test.js.map +1 -0
  56. package/packages/pi-coding-agent/package.json +1 -1
  57. package/packages/pi-coding-agent/src/core/agent-session.ts +48 -5
  58. package/packages/pi-coding-agent/src/core/resource-loader-lsd-md.test.ts +67 -7
  59. package/packages/pi-coding-agent/src/core/resource-loader.ts +4 -4
  60. package/packages/pi-coding-agent/src/core/sdk.test.ts +100 -0
  61. package/packages/pi-coding-agent/src/core/sdk.ts +23 -8
  62. package/packages/pi-coding-agent/src/core/settings-manager.ts +36 -15
  63. package/packages/pi-coding-agent/src/core/system-prompt.ts +26 -0
  64. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +41 -10
  65. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +11 -0
  66. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +43 -27
  67. package/packages/pi-coding-agent/src/tests/path-display.test.ts +14 -0
  68. package/pkg/package.json +1 -1
  69. package/src/resources/agents/scout.md +6 -0
  70. package/src/resources/extensions/slash-commands/index.ts +2 -0
  71. package/src/resources/extensions/slash-commands/init.ts +55 -0
  72. package/src/resources/extensions/slash-commands/plan.ts +279 -53
  73. package/src/resources/extensions/slash-commands/tools.ts +15 -29
  74. package/src/resources/extensions/subagent/index.ts +14 -11
  75. package/src/resources/extensions/usage/index.ts +92 -38
  76. package/dist/resources/agents/javascript-pro.md +0 -280
  77. package/dist/resources/agents/researcher.md +0 -29
  78. package/dist/resources/agents/teams-builder.md +0 -74
  79. package/dist/resources/agents/teams-reviewer.md +0 -113
  80. package/dist/resources/agents/typescript-pro.md +0 -255
  81. package/dist/resources/skills/accessibility/SKILL.md +0 -522
  82. package/dist/resources/skills/accessibility/references/WCAG.md +0 -162
  83. package/dist/resources/skills/core-web-vitals/SKILL.md +0 -441
  84. package/dist/resources/skills/core-web-vitals/references/LCP.md +0 -208
  85. package/dist/resources/skills/frontend-design/SKILL.md +0 -45
  86. package/dist/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
  87. package/dist/resources/skills/make-interfaces-feel-better/animations.md +0 -379
  88. package/dist/resources/skills/make-interfaces-feel-better/performance.md +0 -88
  89. package/dist/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
  90. package/dist/resources/skills/make-interfaces-feel-better/typography.md +0 -123
  91. package/dist/resources/skills/react-best-practices/README.md +0 -123
  92. package/dist/resources/skills/react-best-practices/SKILL.md +0 -136
  93. package/dist/resources/skills/react-best-practices/metadata.json +0 -15
  94. package/dist/resources/skills/react-best-practices/rules/_sections.md +0 -46
  95. package/dist/resources/skills/react-best-practices/rules/_template.md +0 -28
  96. package/dist/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  97. package/dist/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
  98. package/dist/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
  99. package/dist/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
  100. package/dist/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
  101. package/dist/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
  102. package/dist/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
  103. package/dist/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  104. package/dist/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  105. package/dist/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  106. package/dist/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  107. package/dist/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  108. package/dist/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
  109. package/dist/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  110. package/dist/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
  111. package/dist/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  112. package/dist/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  113. package/dist/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
  114. package/dist/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  115. package/dist/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  116. package/dist/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  117. package/dist/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  118. package/dist/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
  119. package/dist/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  120. package/dist/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
  121. package/dist/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  122. package/dist/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  123. package/dist/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  124. package/dist/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  125. package/dist/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
  126. package/dist/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  127. package/dist/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  128. package/dist/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  129. package/dist/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  130. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  131. package/dist/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  132. package/dist/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  133. package/dist/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  134. package/dist/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  135. package/dist/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  136. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  137. package/dist/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  138. package/dist/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  139. package/dist/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  140. package/dist/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  141. package/dist/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
  142. package/dist/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  143. package/dist/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  144. package/dist/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  145. package/dist/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  146. package/dist/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  147. package/dist/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
  148. package/dist/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  149. package/dist/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
  150. package/dist/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
  151. package/dist/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
  152. package/dist/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
  153. package/dist/resources/skills/userinterface-wiki/SKILL.md +0 -253
  154. package/dist/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
  155. package/dist/resources/skills/userinterface-wiki/rules/_template.md +0 -24
  156. package/dist/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
  157. package/dist/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
  158. package/dist/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
  159. package/dist/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
  160. package/dist/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
  161. package/dist/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
  162. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
  163. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
  164. package/dist/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
  165. package/dist/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
  166. package/dist/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
  167. package/dist/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
  168. package/dist/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
  169. package/dist/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
  170. package/dist/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
  171. package/dist/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
  172. package/dist/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
  173. package/dist/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
  174. package/dist/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
  175. package/dist/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
  176. package/dist/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
  177. package/dist/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
  178. package/dist/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
  179. package/dist/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
  180. package/dist/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
  181. package/dist/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
  182. package/dist/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
  183. package/dist/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
  184. package/dist/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
  185. package/dist/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
  186. package/dist/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
  187. package/dist/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
  188. package/dist/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
  189. package/dist/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
  190. package/dist/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
  191. package/dist/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
  192. package/dist/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
  193. package/dist/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
  194. package/dist/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
  195. package/dist/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
  196. package/dist/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
  197. package/dist/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
  198. package/dist/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
  199. package/dist/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
  200. package/dist/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
  201. package/dist/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
  202. package/dist/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
  203. package/dist/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
  204. package/dist/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
  205. package/dist/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
  206. package/dist/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
  207. package/dist/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
  208. package/dist/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
  209. package/dist/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
  210. package/dist/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
  211. package/dist/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
  212. package/dist/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
  213. package/dist/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
  214. package/dist/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
  215. package/dist/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
  216. package/dist/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
  217. package/dist/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
  218. package/dist/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
  219. package/dist/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
  220. package/dist/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
  221. package/dist/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
  222. package/dist/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
  223. package/dist/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
  224. package/dist/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
  225. package/dist/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
  226. package/dist/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
  227. package/dist/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
  228. package/dist/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
  229. package/dist/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
  230. package/dist/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
  231. package/dist/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
  232. package/dist/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
  233. package/dist/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
  234. package/dist/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
  235. package/dist/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
  236. package/dist/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
  237. package/dist/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
  238. package/dist/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
  239. package/dist/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
  240. package/dist/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
  241. package/dist/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
  242. package/dist/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
  243. package/dist/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
  244. package/dist/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
  245. package/dist/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
  246. package/dist/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
  247. package/dist/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
  248. package/dist/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
  249. package/dist/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
  250. package/dist/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
  251. package/dist/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
  252. package/dist/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
  253. package/dist/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
  254. package/dist/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
  255. package/dist/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
  256. package/dist/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
  257. package/dist/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
  258. package/dist/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
  259. package/dist/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
  260. package/dist/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
  261. package/dist/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
  262. package/dist/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
  263. package/dist/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
  264. package/dist/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
  265. package/dist/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
  266. package/dist/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
  267. package/dist/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
  268. package/dist/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
  269. package/dist/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
  270. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
  271. package/dist/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
  272. package/dist/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
  273. package/dist/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
  274. package/dist/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
  275. package/dist/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
  276. package/dist/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
  277. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
  278. package/dist/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
  279. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
  280. package/dist/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
  281. package/dist/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
  282. package/dist/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
  283. package/dist/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
  284. package/dist/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
  285. package/dist/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
  286. package/dist/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
  287. package/dist/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
  288. package/dist/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
  289. package/dist/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
  290. package/dist/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
  291. package/dist/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
  292. package/dist/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
  293. package/dist/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
  294. package/dist/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
  295. package/dist/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
  296. package/dist/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
  297. package/dist/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
  298. package/dist/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
  299. package/dist/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
  300. package/dist/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
  301. package/dist/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
  302. package/dist/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
  303. package/dist/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
  304. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
  305. package/dist/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
  306. package/dist/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
  307. package/dist/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
  308. package/dist/resources/skills/web-design-guidelines/SKILL.md +0 -39
  309. package/dist/resources/skills/web-quality-audit/SKILL.md +0 -168
  310. package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
  311. package/src/resources/agents/javascript-pro.md +0 -280
  312. package/src/resources/agents/researcher.md +0 -29
  313. package/src/resources/agents/teams-builder.md +0 -74
  314. package/src/resources/agents/teams-reviewer.md +0 -113
  315. package/src/resources/agents/typescript-pro.md +0 -255
  316. package/src/resources/skills/accessibility/SKILL.md +0 -522
  317. package/src/resources/skills/accessibility/references/WCAG.md +0 -162
  318. package/src/resources/skills/core-web-vitals/SKILL.md +0 -441
  319. package/src/resources/skills/core-web-vitals/references/LCP.md +0 -208
  320. package/src/resources/skills/frontend-design/SKILL.md +0 -45
  321. package/src/resources/skills/make-interfaces-feel-better/SKILL.md +0 -122
  322. package/src/resources/skills/make-interfaces-feel-better/animations.md +0 -379
  323. package/src/resources/skills/make-interfaces-feel-better/performance.md +0 -88
  324. package/src/resources/skills/make-interfaces-feel-better/surfaces.md +0 -247
  325. package/src/resources/skills/make-interfaces-feel-better/typography.md +0 -123
  326. package/src/resources/skills/react-best-practices/README.md +0 -123
  327. package/src/resources/skills/react-best-practices/SKILL.md +0 -136
  328. package/src/resources/skills/react-best-practices/metadata.json +0 -15
  329. package/src/resources/skills/react-best-practices/rules/_sections.md +0 -46
  330. package/src/resources/skills/react-best-practices/rules/_template.md +0 -28
  331. package/src/resources/skills/react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  332. package/src/resources/skills/react-best-practices/rules/advanced-init-once.md +0 -42
  333. package/src/resources/skills/react-best-practices/rules/advanced-use-latest.md +0 -39
  334. package/src/resources/skills/react-best-practices/rules/async-api-routes.md +0 -38
  335. package/src/resources/skills/react-best-practices/rules/async-defer-await.md +0 -80
  336. package/src/resources/skills/react-best-practices/rules/async-dependencies.md +0 -51
  337. package/src/resources/skills/react-best-practices/rules/async-parallel.md +0 -28
  338. package/src/resources/skills/react-best-practices/rules/async-suspense-boundaries.md +0 -99
  339. package/src/resources/skills/react-best-practices/rules/bundle-barrel-imports.md +0 -59
  340. package/src/resources/skills/react-best-practices/rules/bundle-conditional.md +0 -31
  341. package/src/resources/skills/react-best-practices/rules/bundle-defer-third-party.md +0 -49
  342. package/src/resources/skills/react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  343. package/src/resources/skills/react-best-practices/rules/bundle-preload.md +0 -50
  344. package/src/resources/skills/react-best-practices/rules/client-event-listeners.md +0 -74
  345. package/src/resources/skills/react-best-practices/rules/client-localstorage-schema.md +0 -71
  346. package/src/resources/skills/react-best-practices/rules/client-passive-event-listeners.md +0 -48
  347. package/src/resources/skills/react-best-practices/rules/client-swr-dedup.md +0 -56
  348. package/src/resources/skills/react-best-practices/rules/js-batch-dom-css.md +0 -107
  349. package/src/resources/skills/react-best-practices/rules/js-cache-function-results.md +0 -80
  350. package/src/resources/skills/react-best-practices/rules/js-cache-property-access.md +0 -28
  351. package/src/resources/skills/react-best-practices/rules/js-cache-storage.md +0 -70
  352. package/src/resources/skills/react-best-practices/rules/js-combine-iterations.md +0 -32
  353. package/src/resources/skills/react-best-practices/rules/js-early-exit.md +0 -50
  354. package/src/resources/skills/react-best-practices/rules/js-hoist-regexp.md +0 -45
  355. package/src/resources/skills/react-best-practices/rules/js-index-maps.md +0 -37
  356. package/src/resources/skills/react-best-practices/rules/js-length-check-first.md +0 -49
  357. package/src/resources/skills/react-best-practices/rules/js-min-max-loop.md +0 -82
  358. package/src/resources/skills/react-best-practices/rules/js-set-map-lookups.md +0 -24
  359. package/src/resources/skills/react-best-practices/rules/js-tosorted-immutable.md +0 -57
  360. package/src/resources/skills/react-best-practices/rules/rendering-activity.md +0 -26
  361. package/src/resources/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  362. package/src/resources/skills/react-best-practices/rules/rendering-conditional-render.md +0 -40
  363. package/src/resources/skills/react-best-practices/rules/rendering-content-visibility.md +0 -38
  364. package/src/resources/skills/react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  365. package/src/resources/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  366. package/src/resources/skills/react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  367. package/src/resources/skills/react-best-practices/rules/rendering-svg-precision.md +0 -28
  368. package/src/resources/skills/react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  369. package/src/resources/skills/react-best-practices/rules/rerender-defer-reads.md +0 -39
  370. package/src/resources/skills/react-best-practices/rules/rerender-dependencies.md +0 -45
  371. package/src/resources/skills/react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  372. package/src/resources/skills/react-best-practices/rules/rerender-derived-state.md +0 -29
  373. package/src/resources/skills/react-best-practices/rules/rerender-functional-setstate.md +0 -74
  374. package/src/resources/skills/react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  375. package/src/resources/skills/react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  376. package/src/resources/skills/react-best-practices/rules/rerender-memo.md +0 -44
  377. package/src/resources/skills/react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  378. package/src/resources/skills/react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  379. package/src/resources/skills/react-best-practices/rules/rerender-transitions.md +0 -40
  380. package/src/resources/skills/react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  381. package/src/resources/skills/react-best-practices/rules/server-after-nonblocking.md +0 -73
  382. package/src/resources/skills/react-best-practices/rules/server-auth-actions.md +0 -96
  383. package/src/resources/skills/react-best-practices/rules/server-cache-lru.md +0 -41
  384. package/src/resources/skills/react-best-practices/rules/server-cache-react.md +0 -76
  385. package/src/resources/skills/react-best-practices/rules/server-dedup-props.md +0 -65
  386. package/src/resources/skills/react-best-practices/rules/server-parallel-fetching.md +0 -83
  387. package/src/resources/skills/react-best-practices/rules/server-serialization.md +0 -38
  388. package/src/resources/skills/userinterface-wiki/SKILL.md +0 -253
  389. package/src/resources/skills/userinterface-wiki/rules/_sections.md +0 -66
  390. package/src/resources/skills/userinterface-wiki/rules/_template.md +0 -24
  391. package/src/resources/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +0 -30
  392. package/src/resources/skills/userinterface-wiki/rules/a11y-toggle-setting.md +0 -30
  393. package/src/resources/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +0 -36
  394. package/src/resources/skills/userinterface-wiki/rules/a11y-volume-control.md +0 -28
  395. package/src/resources/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +0 -19
  396. package/src/resources/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +0 -18
  397. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-decorative.md +0 -21
  398. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +0 -28
  399. package/src/resources/skills/userinterface-wiki/rules/appropriate-no-punishing.md +0 -27
  400. package/src/resources/skills/userinterface-wiki/rules/container-callback-ref.md +0 -31
  401. package/src/resources/skills/userinterface-wiki/rules/container-guard-initial-zero.md +0 -25
  402. package/src/resources/skills/userinterface-wiki/rules/container-no-excessive-use.md +0 -13
  403. package/src/resources/skills/userinterface-wiki/rules/container-overflow-hidden.md +0 -25
  404. package/src/resources/skills/userinterface-wiki/rules/container-transition-delay.md +0 -21
  405. package/src/resources/skills/userinterface-wiki/rules/container-two-div-pattern.md +0 -35
  406. package/src/resources/skills/userinterface-wiki/rules/container-use-resize-observer.md +0 -48
  407. package/src/resources/skills/userinterface-wiki/rules/context-cleanup-nodes.md +0 -25
  408. package/src/resources/skills/userinterface-wiki/rules/context-resume-suspended.md +0 -28
  409. package/src/resources/skills/userinterface-wiki/rules/context-reuse-single.md +0 -30
  410. package/src/resources/skills/userinterface-wiki/rules/design-filter-for-character.md +0 -25
  411. package/src/resources/skills/userinterface-wiki/rules/design-noise-for-percussion.md +0 -26
  412. package/src/resources/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +0 -22
  413. package/src/resources/skills/userinterface-wiki/rules/duration-max-300ms.md +0 -21
  414. package/src/resources/skills/userinterface-wiki/rules/duration-press-hover.md +0 -21
  415. package/src/resources/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +0 -21
  416. package/src/resources/skills/userinterface-wiki/rules/duration-small-state.md +0 -15
  417. package/src/resources/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +0 -21
  418. package/src/resources/skills/userinterface-wiki/rules/easing-exit-ease-in.md +0 -21
  419. package/src/resources/skills/userinterface-wiki/rules/easing-for-state-change.md +0 -27
  420. package/src/resources/skills/userinterface-wiki/rules/easing-linear-only-progress.md +0 -21
  421. package/src/resources/skills/userinterface-wiki/rules/easing-natural-decay.md +0 -22
  422. package/src/resources/skills/userinterface-wiki/rules/easing-no-linear-motion.md +0 -22
  423. package/src/resources/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +0 -15
  424. package/src/resources/skills/userinterface-wiki/rules/envelope-exponential-decay.md +0 -21
  425. package/src/resources/skills/userinterface-wiki/rules/envelope-no-zero-target.md +0 -21
  426. package/src/resources/skills/userinterface-wiki/rules/envelope-set-initial-value.md +0 -22
  427. package/src/resources/skills/userinterface-wiki/rules/exit-key-required.md +0 -29
  428. package/src/resources/skills/userinterface-wiki/rules/exit-matches-initial.md +0 -29
  429. package/src/resources/skills/userinterface-wiki/rules/exit-prop-required.md +0 -33
  430. package/src/resources/skills/userinterface-wiki/rules/exit-requires-wrapper.md +0 -27
  431. package/src/resources/skills/userinterface-wiki/rules/impl-default-subtle.md +0 -21
  432. package/src/resources/skills/userinterface-wiki/rules/impl-preload-audio.md +0 -34
  433. package/src/resources/skills/userinterface-wiki/rules/impl-reset-current-time.md +0 -26
  434. package/src/resources/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +0 -25
  435. package/src/resources/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +0 -29
  436. package/src/resources/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +0 -25
  437. package/src/resources/skills/userinterface-wiki/rules/morphing-aria-hidden.md +0 -21
  438. package/src/resources/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +0 -23
  439. package/src/resources/skills/userinterface-wiki/rules/morphing-group-variants.md +0 -33
  440. package/src/resources/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +0 -29
  441. package/src/resources/skills/userinterface-wiki/rules/morphing-reduced-motion.md +0 -28
  442. package/src/resources/skills/userinterface-wiki/rules/morphing-spring-rotation.md +0 -23
  443. package/src/resources/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +0 -21
  444. package/src/resources/skills/userinterface-wiki/rules/morphing-three-lines.md +0 -32
  445. package/src/resources/skills/userinterface-wiki/rules/morphing-use-collapsed.md +0 -33
  446. package/src/resources/skills/userinterface-wiki/rules/native-backdrop-styling.md +0 -27
  447. package/src/resources/skills/userinterface-wiki/rules/native-placeholder-styling.md +0 -27
  448. package/src/resources/skills/userinterface-wiki/rules/native-selection-styling.md +0 -18
  449. package/src/resources/skills/userinterface-wiki/rules/nested-consistent-timing.md +0 -25
  450. package/src/resources/skills/userinterface-wiki/rules/nested-propagate-required.md +0 -41
  451. package/src/resources/skills/userinterface-wiki/rules/none-context-menu-entrance.md +0 -25
  452. package/src/resources/skills/userinterface-wiki/rules/none-high-frequency.md +0 -29
  453. package/src/resources/skills/userinterface-wiki/rules/none-keyboard-navigation.md +0 -32
  454. package/src/resources/skills/userinterface-wiki/rules/param-click-duration.md +0 -21
  455. package/src/resources/skills/userinterface-wiki/rules/param-filter-frequency-range.md +0 -21
  456. package/src/resources/skills/userinterface-wiki/rules/param-q-value-range.md +0 -21
  457. package/src/resources/skills/userinterface-wiki/rules/param-reasonable-gain.md +0 -21
  458. package/src/resources/skills/userinterface-wiki/rules/physics-active-state.md +0 -23
  459. package/src/resources/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +0 -22
  460. package/src/resources/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +0 -23
  461. package/src/resources/skills/userinterface-wiki/rules/physics-subtle-deformation.md +0 -22
  462. package/src/resources/skills/userinterface-wiki/rules/prefetch-hit-slop.md +0 -27
  463. package/src/resources/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +0 -19
  464. package/src/resources/skills/userinterface-wiki/rules/prefetch-not-everything.md +0 -22
  465. package/src/resources/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +0 -34
  466. package/src/resources/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +0 -32
  467. package/src/resources/skills/userinterface-wiki/rules/prefetch-use-selectively.md +0 -13
  468. package/src/resources/skills/userinterface-wiki/rules/presence-disable-interactions.md +0 -31
  469. package/src/resources/skills/userinterface-wiki/rules/presence-hook-in-child.md +0 -31
  470. package/src/resources/skills/userinterface-wiki/rules/presence-safe-to-remove.md +0 -37
  471. package/src/resources/skills/userinterface-wiki/rules/pseudo-content-required.md +0 -28
  472. package/src/resources/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +0 -27
  473. package/src/resources/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +0 -31
  474. package/src/resources/skills/userinterface-wiki/rules/pseudo-marker-styling.md +0 -28
  475. package/src/resources/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +0 -32
  476. package/src/resources/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +0 -33
  477. package/src/resources/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +0 -37
  478. package/src/resources/skills/userinterface-wiki/rules/spring-for-gestures.md +0 -27
  479. package/src/resources/skills/userinterface-wiki/rules/spring-for-interruptible.md +0 -27
  480. package/src/resources/skills/userinterface-wiki/rules/spring-params-balanced.md +0 -29
  481. package/src/resources/skills/userinterface-wiki/rules/spring-preserves-velocity.md +0 -28
  482. package/src/resources/skills/userinterface-wiki/rules/staging-dim-background.md +0 -22
  483. package/src/resources/skills/userinterface-wiki/rules/staging-one-focal-point.md +0 -24
  484. package/src/resources/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +0 -22
  485. package/src/resources/skills/userinterface-wiki/rules/timing-consistent.md +0 -24
  486. package/src/resources/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +0 -22
  487. package/src/resources/skills/userinterface-wiki/rules/timing-under-300ms.md +0 -22
  488. package/src/resources/skills/userinterface-wiki/rules/transition-name-cleanup.md +0 -28
  489. package/src/resources/skills/userinterface-wiki/rules/transition-name-required.md +0 -27
  490. package/src/resources/skills/userinterface-wiki/rules/transition-name-unique.md +0 -24
  491. package/src/resources/skills/userinterface-wiki/rules/transition-over-js-library.md +0 -32
  492. package/src/resources/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +0 -24
  493. package/src/resources/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +0 -18
  494. package/src/resources/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +0 -15
  495. package/src/resources/skills/userinterface-wiki/rules/type-font-display-swap.md +0 -28
  496. package/src/resources/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +0 -24
  497. package/src/resources/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +0 -28
  498. package/src/resources/skills/userinterface-wiki/rules/type-no-font-synthesis.md +0 -18
  499. package/src/resources/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +0 -21
  500. package/src/resources/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +0 -15
  501. package/src/resources/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +0 -25
  502. package/src/resources/skills/userinterface-wiki/rules/type-proper-fractions.md +0 -15
  503. package/src/resources/skills/userinterface-wiki/rules/type-slashed-zero.md +0 -17
  504. package/src/resources/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +0 -21
  505. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +0 -21
  506. package/src/resources/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +0 -16
  507. package/src/resources/skills/userinterface-wiki/rules/type-underline-offset.md +0 -25
  508. package/src/resources/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +0 -23
  509. package/src/resources/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +0 -32
  510. package/src/resources/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +0 -49
  511. package/src/resources/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +0 -50
  512. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +0 -29
  513. package/src/resources/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +0 -30
  514. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +0 -32
  515. package/src/resources/skills/userinterface-wiki/rules/ux-fitts-target-size.md +0 -31
  516. package/src/resources/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +0 -33
  517. package/src/resources/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +0 -45
  518. package/src/resources/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +0 -37
  519. package/src/resources/skills/userinterface-wiki/rules/ux-millers-chunking.md +0 -23
  520. package/src/resources/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +0 -36
  521. package/src/resources/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +0 -35
  522. package/src/resources/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +0 -45
  523. package/src/resources/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +0 -33
  524. package/src/resources/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +0 -41
  525. package/src/resources/skills/userinterface-wiki/rules/ux-proximity-grouping.md +0 -38
  526. package/src/resources/skills/userinterface-wiki/rules/ux-serial-position.md +0 -31
  527. package/src/resources/skills/userinterface-wiki/rules/ux-similarity-consistency.md +0 -35
  528. package/src/resources/skills/userinterface-wiki/rules/ux-teslers-complexity.md +0 -28
  529. package/src/resources/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +0 -43
  530. package/src/resources/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +0 -29
  531. package/src/resources/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +0 -36
  532. package/src/resources/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +0 -49
  533. package/src/resources/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +0 -25
  534. package/src/resources/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +0 -49
  535. package/src/resources/skills/userinterface-wiki/rules/visual-concentric-radius.md +0 -40
  536. package/src/resources/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +0 -35
  537. package/src/resources/skills/userinterface-wiki/rules/visual-layered-shadows.md +0 -30
  538. package/src/resources/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +0 -25
  539. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-direction.md +0 -25
  540. package/src/resources/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +0 -23
  541. package/src/resources/skills/userinterface-wiki/rules/weight-duration-matches-action.md +0 -29
  542. package/src/resources/skills/userinterface-wiki/rules/weight-match-action.md +0 -32
  543. package/src/resources/skills/web-design-guidelines/SKILL.md +0 -39
  544. package/src/resources/skills/web-quality-audit/SKILL.md +0 -168
  545. package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -91
@@ -41,6 +41,19 @@ test("buildSystemPrompt: Unix paths pass through unchanged", () => {
41
41
  });
42
42
  assert.ok(prompt.includes("/home/user/project"));
43
43
  });
44
+ test("buildSystemPrompt: encourages scout-first reconnaissance when subagent is available", () => {
45
+ const prompt = buildSystemPrompt({
46
+ cwd: "/home/user/project",
47
+ selectedTools: ["read", "lsp", "subagent", "edit", "write"],
48
+ });
49
+ assert.match(prompt, /delegate reconnaissance to the scout subagent/i);
50
+ assert.match(prompt, /0 scouts for narrow known-file work, 1 scout for one broad unfamiliar subsystem/i);
51
+ assert.match(prompt, /For one scout use \{ agent, task \}/i);
52
+ assert.match(prompt, /Scout is for mapping and reconnaissance only/i);
53
+ assert.match(prompt, /multiple scout subagents in parallel/i);
54
+ assert.match(prompt, /broad review or audit requests, use scout only as a prep step/i);
55
+ assert.match(prompt, /Skip scout only when the task is clearly narrow/i);
56
+ });
44
57
  // ─── Regression: no backslash paths in LLM-visible text ────────────────────
45
58
  /**
46
59
  * Pattern that matches Windows-style absolute paths with backslashes.
@@ -1 +1 @@
1
- {"version":3,"file":"path-display.test.js","sourceRoot":"","sources":["../../src/tests/path-display.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,+EAA+E;AAE/E,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC7E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAChF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IAClD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,CAAC,EAAE,2BAA2B,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC9C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC9C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACnD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,KAAK,CACX,WAAW,CAAC,iDAAiD,CAAC,EAC9D,2CAA2C,CAC3C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAChF,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,wCAAwC;KAC7C,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CACR,MAAM,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EACrD,iDAAiD,CACjD,CAAC;IACF,MAAM,CAAC,EAAE,CACR,CAAC,MAAM,CAAC,QAAQ,CAAC,wCAAwC,CAAC,EAC1D,+CAA+C,CAC/C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,oBAAoB;KACzB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAE/C,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACpF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,6CAA6C;KAClD,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,CACX,UAAU,CAAC,MAAM,EAAE,CAAC,EACpB,oDAAoD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3E,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Cross-platform path display tests.\n *\n * Verifies that toPosixPath correctly normalizes Windows paths and that\n * the system prompt builder produces forward-slash paths for LLM consumption.\n */\n\nimport test from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport { toPosixPath } from \"../utils/path-display.js\";\nimport { buildSystemPrompt } from \"../core/system-prompt.js\";\n\n// ─── toPosixPath ────────────────────────────────────────────────────────────\n\ntest(\"toPosixPath: converts Windows backslash paths to forward slashes\", () => {\n\tassert.equal(toPosixPath(\"C:\\\\Users\\\\name\\\\project\"), \"C:/Users/name/project\");\n});\n\ntest(\"toPosixPath: handles mixed separators\", () => {\n\tassert.equal(toPosixPath(\"C:\\\\Users/name\\\\project/src\"), \"C:/Users/name/project/src\");\n});\n\ntest(\"toPosixPath: no-op for Unix paths\", () => {\n\tassert.equal(toPosixPath(\"/home/user/project\"), \"/home/user/project\");\n});\n\ntest(\"toPosixPath: handles empty string\", () => {\n\tassert.equal(toPosixPath(\"\"), \"\");\n});\n\ntest(\"toPosixPath: handles Windows UNC paths\", () => {\n\tassert.equal(toPosixPath(\"\\\\\\\\server\\\\share\\\\dir\"), \"//server/share/dir\");\n});\n\ntest(\"toPosixPath: handles .gsd/worktrees path on Windows\", () => {\n\tassert.equal(\n\t\ttoPosixPath(\"C:\\\\Users\\\\name\\\\project\\\\.gsd\\\\worktrees\\\\M001\"),\n\t\t\"C:/Users/name/project/.gsd/worktrees/M001\",\n\t);\n});\n\n// ─── System prompt path normalization ───────────────────────────────────────\n\ntest(\"buildSystemPrompt: cwd uses forward slashes even with Windows input\", () => {\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"C:\\\\Users\\\\name\\\\development\\\\app-name\",\n\t});\n\tassert.ok(\n\t\tprompt.includes(\"C:/Users/name/development/app-name\"),\n\t\t\"System prompt should contain forward-slash path\",\n\t);\n\tassert.ok(\n\t\t!prompt.includes(\"C:\\\\Users\\\\name\\\\development\\\\app-name\"),\n\t\t\"System prompt must NOT contain backslash path\",\n\t);\n});\n\ntest(\"buildSystemPrompt: Unix paths pass through unchanged\", () => {\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"/home/user/project\",\n\t});\n\tassert.ok(prompt.includes(\"/home/user/project\"));\n});\n\n// ─── Regression: no backslash paths in LLM-visible text ────────────────────\n\n/**\n * Pattern that matches Windows-style absolute paths with backslashes.\n * Catches: C:\\Users\\..., D:\\Projects\\..., \\\\server\\share\\...\n * Does not match: escaped chars in regex, JSON strings, etc.\n */\nconst WINDOWS_ABS_PATH_RE = /[A-Z]:\\\\[A-Za-z]/;\n\ntest(\"buildSystemPrompt: no Windows absolute paths with backslashes in output\", () => {\n\t// Simulate a Windows-like cwd\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"D:\\\\Projects\\\\my-app\\\\.gsd\\\\worktrees\\\\M002\",\n\t});\n\tconst lines = prompt.split(\"\\n\");\n\tconst violations = lines.filter(line => WINDOWS_ABS_PATH_RE.test(line));\n\tassert.equal(\n\t\tviolations.length, 0,\n\t\t`System prompt contains Windows backslash paths:\\n${violations.join(\"\\n\")}`,\n\t);\n});\n"]}
1
+ {"version":3,"file":"path-display.test.js","sourceRoot":"","sources":["../../src/tests/path-display.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,+EAA+E;AAE/E,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC7E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAChF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IAClD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,CAAC,EAAE,2BAA2B,CAAC,CAAC;AACvF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC9C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAC9C,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACnD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,KAAK,CACX,WAAW,CAAC,iDAAiD,CAAC,EAC9D,2CAA2C,CAC3C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAE/E,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAChF,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,wCAAwC;KAC7C,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CACR,MAAM,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EACrD,iDAAiD,CACjD,CAAC;IACF,MAAM,CAAC,EAAE,CACR,CAAC,MAAM,CAAC,QAAQ,CAAC,wCAAwC,CAAC,EAC1D,+CAA+C,CAC/C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,oBAAoB;KACzB,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qFAAqF,EAAE,GAAG,EAAE;IAChG,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,oBAAoB;QACzB,aAAa,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;KAC3D,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gDAAgD,CAAC,CAAC;IACvE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kFAAkF,CAAC,CAAC;IACzG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,sCAAsC,CAAC,CAAC;IAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,+CAA+C,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,uCAAuC,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gEAAgE,CAAC,CAAC;IACvF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAE/C,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;IACpF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,iBAAiB,CAAC;QAChC,GAAG,EAAE,6CAA6C;KAClD,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,CACX,UAAU,CAAC,MAAM,EAAE,CAAC,EACpB,oDAAoD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3E,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Cross-platform path display tests.\n *\n * Verifies that toPosixPath correctly normalizes Windows paths and that\n * the system prompt builder produces forward-slash paths for LLM consumption.\n */\n\nimport test from \"node:test\";\nimport assert from \"node:assert/strict\";\nimport { toPosixPath } from \"../utils/path-display.js\";\nimport { buildSystemPrompt } from \"../core/system-prompt.js\";\n\n// ─── toPosixPath ────────────────────────────────────────────────────────────\n\ntest(\"toPosixPath: converts Windows backslash paths to forward slashes\", () => {\n\tassert.equal(toPosixPath(\"C:\\\\Users\\\\name\\\\project\"), \"C:/Users/name/project\");\n});\n\ntest(\"toPosixPath: handles mixed separators\", () => {\n\tassert.equal(toPosixPath(\"C:\\\\Users/name\\\\project/src\"), \"C:/Users/name/project/src\");\n});\n\ntest(\"toPosixPath: no-op for Unix paths\", () => {\n\tassert.equal(toPosixPath(\"/home/user/project\"), \"/home/user/project\");\n});\n\ntest(\"toPosixPath: handles empty string\", () => {\n\tassert.equal(toPosixPath(\"\"), \"\");\n});\n\ntest(\"toPosixPath: handles Windows UNC paths\", () => {\n\tassert.equal(toPosixPath(\"\\\\\\\\server\\\\share\\\\dir\"), \"//server/share/dir\");\n});\n\ntest(\"toPosixPath: handles .gsd/worktrees path on Windows\", () => {\n\tassert.equal(\n\t\ttoPosixPath(\"C:\\\\Users\\\\name\\\\project\\\\.gsd\\\\worktrees\\\\M001\"),\n\t\t\"C:/Users/name/project/.gsd/worktrees/M001\",\n\t);\n});\n\n// ─── System prompt path normalization ───────────────────────────────────────\n\ntest(\"buildSystemPrompt: cwd uses forward slashes even with Windows input\", () => {\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"C:\\\\Users\\\\name\\\\development\\\\app-name\",\n\t});\n\tassert.ok(\n\t\tprompt.includes(\"C:/Users/name/development/app-name\"),\n\t\t\"System prompt should contain forward-slash path\",\n\t);\n\tassert.ok(\n\t\t!prompt.includes(\"C:\\\\Users\\\\name\\\\development\\\\app-name\"),\n\t\t\"System prompt must NOT contain backslash path\",\n\t);\n});\n\ntest(\"buildSystemPrompt: Unix paths pass through unchanged\", () => {\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"/home/user/project\",\n\t});\n\tassert.ok(prompt.includes(\"/home/user/project\"));\n});\n\ntest(\"buildSystemPrompt: encourages scout-first reconnaissance when subagent is available\", () => {\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"/home/user/project\",\n\t\tselectedTools: [\"read\", \"lsp\", \"subagent\", \"edit\", \"write\"],\n\t});\n\tassert.match(prompt, /delegate reconnaissance to the scout subagent/i);\n\tassert.match(prompt, /0 scouts for narrow known-file work, 1 scout for one broad unfamiliar subsystem/i);\n\tassert.match(prompt, /For one scout use \\{ agent, task \\}/i);\n\tassert.match(prompt, /Scout is for mapping and reconnaissance only/i);\n\tassert.match(prompt, /multiple scout subagents in parallel/i);\n\tassert.match(prompt, /broad review or audit requests, use scout only as a prep step/i);\n\tassert.match(prompt, /Skip scout only when the task is clearly narrow/i);\n});\n\n// ─── Regression: no backslash paths in LLM-visible text ────────────────────\n\n/**\n * Pattern that matches Windows-style absolute paths with backslashes.\n * Catches: C:\\Users\\..., D:\\Projects\\..., \\\\server\\share\\...\n * Does not match: escaped chars in regex, JSON strings, etc.\n */\nconst WINDOWS_ABS_PATH_RE = /[A-Z]:\\\\[A-Za-z]/;\n\ntest(\"buildSystemPrompt: no Windows absolute paths with backslashes in output\", () => {\n\t// Simulate a Windows-like cwd\n\tconst prompt = buildSystemPrompt({\n\t\tcwd: \"D:\\\\Projects\\\\my-app\\\\.gsd\\\\worktrees\\\\M002\",\n\t});\n\tconst lines = prompt.split(\"\\n\");\n\tconst violations = lines.filter(line => WINDOWS_ABS_PATH_RE.test(line));\n\tassert.equal(\n\t\tviolations.length, 0,\n\t\t`System prompt contains Windows backslash paths:\\n${violations.join(\"\\n\")}`,\n\t);\n});\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=settings-manager-scout-policy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-manager-scout-policy.test.d.ts","sourceRoot":"","sources":["../../src/tests/settings-manager-scout-policy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { SettingsManager } from "../core/settings-manager.js";
4
+ test("SettingsManager defaults scoutUsagePolicy to recommend", () => {
5
+ const settings = SettingsManager.inMemory();
6
+ assert.equal(settings.getScoutUsagePolicy(), "recommend");
7
+ });
8
+ test("SettingsManager persists scoutUsagePolicy values", () => {
9
+ const settings = SettingsManager.inMemory();
10
+ settings.setScoutUsagePolicy("aggressive");
11
+ assert.equal(settings.getScoutUsagePolicy(), "aggressive");
12
+ settings.setScoutUsagePolicy("off");
13
+ assert.equal(settings.getScoutUsagePolicy(), "off");
14
+ });
15
+ //# sourceMappingURL=settings-manager-scout-policy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-manager-scout-policy.test.js","sourceRoot":"","sources":["../../src/tests/settings-manager-scout-policy.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACnE,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC7D,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;IAE5C,QAAQ,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,YAAY,CAAC,CAAC;IAE3D,QAAQ,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC","sourcesContent":["import test from \"node:test\";\nimport assert from \"node:assert/strict\";\n\nimport { SettingsManager } from \"../core/settings-manager.js\";\n\ntest(\"SettingsManager defaults scoutUsagePolicy to recommend\", () => {\n\tconst settings = SettingsManager.inMemory();\n\tassert.equal(settings.getScoutUsagePolicy(), \"recommend\");\n});\n\ntest(\"SettingsManager persists scoutUsagePolicy values\", () => {\n\tconst settings = SettingsManager.inMemory();\n\n\tsettings.setScoutUsagePolicy(\"aggressive\");\n\tassert.equal(settings.getScoutUsagePolicy(), \"aggressive\");\n\n\tsettings.setScoutUsagePolicy(\"off\");\n\tassert.equal(settings.getScoutUsagePolicy(), \"off\");\n});\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd/pi-coding-agent",
3
- "version": "1.1.8",
3
+ "version": "1.2.0",
4
4
  "description": "Coding agent CLI (vendored from pi-mono)",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -1039,10 +1039,45 @@ export class AgentSession {
1039
1039
  return this._expandSkillByName(skillName, args);
1040
1040
  }
1041
1041
 
1042
+ private _isPremiumReconModel(): boolean {
1043
+ const model = this.model;
1044
+ if (!model) return false;
1045
+ const provider = model.provider.toLowerCase();
1046
+ const id = model.id.toLowerCase();
1047
+ return (
1048
+ (provider === "anthropic" && (id.includes("opus") || id.includes("sonnet"))) ||
1049
+ (provider === "openai" && /^gpt-5(\.|-|$)/.test(id)) ||
1050
+ (provider === "google" && id.includes("gemini-2.5-pro"))
1051
+ );
1052
+ }
1053
+
1054
+ private _buildScoutPolicyGuidelines(toolNames: string[]): string[] {
1055
+ if (!toolNames.includes("subagent")) return [];
1056
+
1057
+ const guidelines = [
1058
+ "Recon planning policy: use 0 scouts for narrow known-file work, 1 scout for one broad unfamiliar subsystem, and 2-4 parallel scouts only when the work spans multiple loosely-coupled subsystems.",
1059
+ "Scout-first reconnaissance policy: when you need architecture context across multiple files or folders, do not map the subsystem by reading file-after-file yourself. Launch the scout subagent first, then continue with lsp and targeted reads.",
1060
+ "If your next step would be broad exploration rather than a targeted lookup, prefer scout before doing more read/find/grep sweeps yourself.",
1061
+ "When you choose scout, call subagent directly with valid parameters: { agent, task } for one scout, or { tasks: [{ agent, task }, ...] } for parallel scouts.",
1062
+ "Scout is reconnaissance-only. Do not use it as the reviewer, auditor, or final issue-ranker; use it to map files, ownership, and likely hotspots for later evaluation.",
1063
+ "If the work spans multiple loosely-coupled subsystems, prefer parallel scout subagents so each scout maps one area and the parent model reads the summaries instead of the raw files.",
1064
+ "For broad review or audit requests, use scout only as a prep step to map architecture and hotspots; the parent model or a reviewer should make the final judgments.",
1065
+ ];
1066
+
1067
+ if (this._isPremiumReconModel()) {
1068
+ guidelines.push(
1069
+ "You are on a premium model. Spend tokens on synthesis, planning, and edits — not broad reconnaissance. Delegate exploratory reading to scout whenever the scope is not already narrow.",
1070
+ );
1071
+ }
1072
+
1073
+ return guidelines;
1074
+ }
1075
+
1042
1076
  private _rebuildSystemPrompt(toolNames: string[]): string {
1043
1077
  const validToolNames = toolNames.filter((name) => this._toolRegistry.has(name));
1044
1078
  const toolSnippets: Record<string, string> = {};
1045
1079
  const promptGuidelines: string[] = [];
1080
+ promptGuidelines.push(...this._buildScoutPolicyGuidelines(validToolNames));
1046
1081
  for (const name of validToolNames) {
1047
1082
  const snippet = this._toolPromptSnippets.get(name);
1048
1083
  if (snippet) {
@@ -1804,7 +1839,7 @@ export class AgentSession {
1804
1839
  throw new Error(`No API key for ${model.provider}/${model.id}`);
1805
1840
  }
1806
1841
 
1807
- const thinkingLevel = this._getThinkingLevelForModelSwitch();
1842
+ const thinkingLevel = this._getThinkingLevelForModelSwitch(model);
1808
1843
  await this._applyModelChange(model, thinkingLevel, "set", options);
1809
1844
  }
1810
1845
 
@@ -1841,7 +1876,7 @@ export class AgentSession {
1841
1876
 
1842
1877
  // Explicit scoped model thinking level overrides current session level;
1843
1878
  // undefined scoped model thinking level inherits the current session preference.
1844
- const thinkingLevel = this._getThinkingLevelForModelSwitch(next.thinkingLevel);
1879
+ const thinkingLevel = this._getThinkingLevelForModelSwitch(next.model, next.thinkingLevel);
1845
1880
  await this._applyModelChange(next.model, thinkingLevel, "cycle", options);
1846
1881
 
1847
1882
  return { model: next.model, thinkingLevel: this.thinkingLevel, isScoped: true };
@@ -1859,7 +1894,7 @@ export class AgentSession {
1859
1894
  const nextIndex = direction === "forward" ? (currentIndex + 1) % len : (currentIndex - 1 + len) % len;
1860
1895
  const nextModel = availableModels[nextIndex];
1861
1896
 
1862
- const thinkingLevel = this._getThinkingLevelForModelSwitch();
1897
+ const thinkingLevel = this._getThinkingLevelForModelSwitch(nextModel);
1863
1898
  await this._applyModelChange(nextModel, thinkingLevel, "cycle", options);
1864
1899
 
1865
1900
  return { model: nextModel, thinkingLevel: this.thinkingLevel, isScoped: false };
@@ -1942,11 +1977,19 @@ export class AgentSession {
1942
1977
  return !!this.model?.reasoning;
1943
1978
  }
1944
1979
 
1945
- private _getThinkingLevelForModelSwitch(explicitLevel?: ThinkingLevel): ThinkingLevel {
1980
+ private _getThinkingLevelForModelSwitch(targetModel: Model<any>, explicitLevel?: ThinkingLevel): ThinkingLevel {
1946
1981
  if (explicitLevel !== undefined) {
1947
1982
  return explicitLevel;
1948
1983
  }
1949
- if (!this.supportsThinking()) {
1984
+ if (
1985
+ targetModel.provider === "anthropic" &&
1986
+ targetModel.reasoning === true &&
1987
+ this.settingsManager.getAnthropicAdaptiveByDefault() &&
1988
+ supportsAdaptiveThinking(targetModel.id)
1989
+ ) {
1990
+ return "adaptive";
1991
+ }
1992
+ if (!targetModel.reasoning) {
1950
1993
  return this.settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
1951
1994
  }
1952
1995
  return this.thinkingLevel;
@@ -7,7 +7,7 @@ import test from "node:test";
7
7
  import { DefaultResourceLoader } from "./resource-loader.js";
8
8
  import { SettingsManager } from "./settings-manager.js";
9
9
 
10
- test("resource loader reads global lsd.md from the app root", async (t) => {
10
+ test("resource loader reads global LSD.md from the app root", async (t) => {
11
11
  const tmp = mkdtempSync(join(tmpdir(), "resource-loader-lsd-md-"));
12
12
  t.after(() => rmSync(tmp, { recursive: true, force: true }));
13
13
 
@@ -16,7 +16,7 @@ test("resource loader reads global lsd.md from the app root", async (t) => {
16
16
  const cwd = join(tmp, "project");
17
17
  mkdirSync(agentDir, { recursive: true });
18
18
  mkdirSync(cwd, { recursive: true });
19
- writeFileSync(join(appRoot, "lsd.md"), "# global lsd\n", "utf-8");
19
+ writeFileSync(join(appRoot, "LSD.md"), "# global lsd\n", "utf-8");
20
20
 
21
21
  const loader = new DefaultResourceLoader({
22
22
  cwd,
@@ -31,11 +31,11 @@ test("resource loader reads global lsd.md from the app root", async (t) => {
31
31
 
32
32
  const contextFiles = loader.getAgentsFiles().agentsFiles;
33
33
  assert.equal(contextFiles.length, 1);
34
- assert.equal(contextFiles[0]?.path, join(appRoot, "lsd.md"));
34
+ assert.equal(contextFiles[0]?.path, join(appRoot, "LSD.md"));
35
35
  assert.equal(contextFiles[0]?.content, "# global lsd\n");
36
36
  });
37
37
 
38
- test("resource loader reads ancestor .lsd/lsd.md before AGENTS.md in the same directory", async (t) => {
38
+ test("resource loader uses project LSD.md before CLAUDE.md or AGENTS.md in the same directory", async (t) => {
39
39
  const tmp = mkdtempSync(join(tmpdir(), "resource-loader-lsd-md-"));
40
40
  t.after(() => rmSync(tmp, { recursive: true, force: true }));
41
41
 
@@ -44,9 +44,9 @@ test("resource loader reads ancestor .lsd/lsd.md before AGENTS.md in the same di
44
44
  const projectRoot = join(tmp, "project");
45
45
  const cwd = join(projectRoot, "src", "feature");
46
46
  mkdirSync(agentDir, { recursive: true });
47
- mkdirSync(join(projectRoot, ".lsd"), { recursive: true });
48
47
  mkdirSync(cwd, { recursive: true });
49
- writeFileSync(join(projectRoot, ".lsd", "lsd.md"), "# project lsd\n", "utf-8");
48
+ writeFileSync(join(projectRoot, "LSD.md"), "# project lsd\n", "utf-8");
49
+ writeFileSync(join(projectRoot, "CLAUDE.md"), "# claude fallback\n", "utf-8");
50
50
  writeFileSync(join(projectRoot, "AGENTS.md"), "# agents fallback\n", "utf-8");
51
51
 
52
52
  const loader = new DefaultResourceLoader({
@@ -62,6 +62,66 @@ test("resource loader reads ancestor .lsd/lsd.md before AGENTS.md in the same di
62
62
 
63
63
  const contextFiles = loader.getAgentsFiles().agentsFiles;
64
64
  assert.equal(contextFiles.length, 1);
65
- assert.equal(contextFiles[0]?.path, join(projectRoot, ".lsd", "lsd.md"));
65
+ assert.equal(contextFiles[0]?.path, join(projectRoot, "LSD.md"));
66
66
  assert.equal(contextFiles[0]?.content, "# project lsd\n");
67
67
  });
68
+
69
+ test("resource loader loads both global and project LSD.md files", async (t) => {
70
+ const tmp = mkdtempSync(join(tmpdir(), "resource-loader-lsd-md-"));
71
+ t.after(() => rmSync(tmp, { recursive: true, force: true }));
72
+
73
+ const appRoot = join(tmp, ".lsd");
74
+ const agentDir = join(appRoot, "agent");
75
+ const projectRoot = join(tmp, "project");
76
+ const cwd = join(projectRoot, "src", "feature");
77
+ mkdirSync(agentDir, { recursive: true });
78
+ mkdirSync(cwd, { recursive: true });
79
+ writeFileSync(join(appRoot, "LSD.md"), "# global lsd\n", "utf-8");
80
+ writeFileSync(join(projectRoot, "LSD.md"), "# project lsd\n", "utf-8");
81
+
82
+ const loader = new DefaultResourceLoader({
83
+ cwd,
84
+ agentDir,
85
+ settingsManager: SettingsManager.inMemory(),
86
+ noExtensions: true,
87
+ noSkills: true,
88
+ noPromptTemplates: true,
89
+ noThemes: true,
90
+ });
91
+ await loader.reload();
92
+
93
+ const contextFiles = loader.getAgentsFiles().agentsFiles;
94
+ assert.equal(contextFiles.length, 2);
95
+ assert.equal(contextFiles[0]?.path, join(appRoot, "LSD.md"));
96
+ assert.equal(contextFiles[1]?.path, join(projectRoot, "LSD.md"));
97
+ });
98
+
99
+ test("resource loader falls back to CLAUDE.md when no LSD.md exists", async (t) => {
100
+ const tmp = mkdtempSync(join(tmpdir(), "resource-loader-lsd-md-"));
101
+ t.after(() => rmSync(tmp, { recursive: true, force: true }));
102
+
103
+ const appRoot = join(tmp, ".lsd");
104
+ const agentDir = join(appRoot, "agent");
105
+ const projectRoot = join(tmp, "project");
106
+ const cwd = join(projectRoot, "src", "feature");
107
+ mkdirSync(agentDir, { recursive: true });
108
+ mkdirSync(cwd, { recursive: true });
109
+ writeFileSync(join(projectRoot, "CLAUDE.md"), "# claude fallback\n", "utf-8");
110
+ writeFileSync(join(projectRoot, "AGENTS.md"), "# agents fallback\n", "utf-8");
111
+
112
+ const loader = new DefaultResourceLoader({
113
+ cwd,
114
+ agentDir,
115
+ settingsManager: SettingsManager.inMemory(),
116
+ noExtensions: true,
117
+ noSkills: true,
118
+ noPromptTemplates: true,
119
+ noThemes: true,
120
+ });
121
+ await loader.reload();
122
+
123
+ const contextFiles = loader.getAgentsFiles().agentsFiles;
124
+ assert.equal(contextFiles.length, 1);
125
+ assert.equal(contextFiles[0]?.path, join(projectRoot, "CLAUDE.md"));
126
+ assert.equal(contextFiles[0]?.content, "# claude fallback\n");
127
+ });
@@ -71,14 +71,14 @@ function tryReadContextFile(filePath: string): { path: string; content: string }
71
71
 
72
72
  function loadContextFileFromDir(dir: string): { path: string; content: string } | null {
73
73
  const candidates = [
74
- join(dir, "lsd.md"),
75
- join(dir, ".lsd", "lsd.md"),
76
- join(dir, CONFIG_DIR_NAME, "lsd.md"),
77
74
  join(dir, "LSD.md"),
78
75
  join(dir, ".lsd", "LSD.md"),
79
76
  join(dir, CONFIG_DIR_NAME, "LSD.md"),
80
- join(dir, "AGENTS.md"),
77
+ join(dir, "lsd.md"),
78
+ join(dir, ".lsd", "lsd.md"),
79
+ join(dir, CONFIG_DIR_NAME, "lsd.md"),
81
80
  join(dir, "CLAUDE.md"),
81
+ join(dir, "AGENTS.md"),
82
82
  ];
83
83
  for (const filePath of new Set(candidates)) {
84
84
  const loaded = tryReadContextFile(filePath);
@@ -80,3 +80,103 @@ test("createAgentSession restores last session model even when API key cannot be
80
80
  }
81
81
  }
82
82
  });
83
+
84
+ test("createAgentSession defaults to adaptive for supported Anthropic models when enabled", async () => {
85
+ const tempDir = join(
86
+ process.cwd(),
87
+ ".tmp-tests",
88
+ `sdk-anthropic-adaptive-${Date.now()}-${Math.random().toString(36).slice(2)}`,
89
+ );
90
+ mkdirSync(tempDir, { recursive: true });
91
+ tempDirs.push(tempDir);
92
+
93
+ const authStorage = AuthStorage.inMemory({
94
+ anthropic: { type: "api_key", key: "test-anthropic-key" },
95
+ });
96
+ const modelRegistry = new ModelRegistry(authStorage, join(tempDir, "models.json"));
97
+ const settingsManager = SettingsManager.inMemory();
98
+ settingsManager.setDefaultModelAndProvider("anthropic", "claude-sonnet-4-6");
99
+ settingsManager.setDefaultThinkingLevel("high");
100
+ settingsManager.setAnthropicAdaptiveByDefault(true);
101
+ const sessionManager = SessionManager.inMemory(tempDir);
102
+ const resourceLoader = new DefaultResourceLoader({
103
+ cwd: tempDir,
104
+ agentDir: tempDir,
105
+ settingsManager,
106
+ noExtensions: true,
107
+ noSkills: true,
108
+ noPromptTemplates: true,
109
+ noThemes: true,
110
+ });
111
+
112
+ const { session } = await createAgentSession({
113
+ cwd: tempDir,
114
+ agentDir: tempDir,
115
+ authStorage,
116
+ modelRegistry,
117
+ settingsManager,
118
+ sessionManager,
119
+ resourceLoader,
120
+ });
121
+
122
+ assert.equal(session.model?.provider, "anthropic");
123
+ assert.equal(session.model?.id, "claude-sonnet-4-6");
124
+ assert.equal(session.thinkingLevel, "adaptive");
125
+ assert.equal(settingsManager.getDefaultThinkingLevel(), "high");
126
+ session.dispose();
127
+ });
128
+
129
+ test("AgentSession switches supported Anthropic models to adaptive when the setting is enabled", async () => {
130
+ const tempDir = join(
131
+ process.cwd(),
132
+ ".tmp-tests",
133
+ `sdk-anthropic-switch-${Date.now()}-${Math.random().toString(36).slice(2)}`,
134
+ );
135
+ mkdirSync(tempDir, { recursive: true });
136
+ tempDirs.push(tempDir);
137
+
138
+ const authStorage = AuthStorage.inMemory({
139
+ anthropic: { type: "api_key", key: "test-anthropic-key" },
140
+ openai: { type: "api_key", key: "test-openai-key" },
141
+ });
142
+ const modelRegistry = new ModelRegistry(authStorage, join(tempDir, "models.json"));
143
+ const settingsManager = SettingsManager.inMemory();
144
+ settingsManager.setDefaultModelAndProvider("openai", "gpt-5.4");
145
+ settingsManager.setDefaultThinkingLevel("high");
146
+ settingsManager.setAnthropicAdaptiveByDefault(true);
147
+ const sessionManager = SessionManager.inMemory(tempDir);
148
+ const resourceLoader = new DefaultResourceLoader({
149
+ cwd: tempDir,
150
+ agentDir: tempDir,
151
+ settingsManager,
152
+ noExtensions: true,
153
+ noSkills: true,
154
+ noPromptTemplates: true,
155
+ noThemes: true,
156
+ });
157
+
158
+ const { session } = await createAgentSession({
159
+ cwd: tempDir,
160
+ agentDir: tempDir,
161
+ authStorage,
162
+ modelRegistry,
163
+ settingsManager,
164
+ sessionManager,
165
+ resourceLoader,
166
+ });
167
+
168
+ assert.equal(session.model?.provider, "openai");
169
+ assert.equal(session.thinkingLevel, "high");
170
+
171
+ const anthropicModel = modelRegistry.getAvailable().find((model) =>
172
+ model.provider === "anthropic" && model.id === "claude-sonnet-4-6"
173
+ );
174
+ if (!anthropicModel) throw new Error("expected claude-sonnet-4-6 to be available");
175
+
176
+ await session.setModel(anthropicModel);
177
+
178
+ assert.equal(session.model?.provider, "anthropic");
179
+ assert.equal(session.model?.id, "claude-sonnet-4-6");
180
+ assert.equal(session.thinkingLevel, "adaptive");
181
+ session.dispose();
182
+ });
@@ -1,6 +1,6 @@
1
1
  import { join } from "node:path";
2
2
  import { Agent, type AgentMessage, type ThinkingLevel } from "@gsd/pi-agent-core";
3
- import type { Message, Model } from "@gsd/pi-ai";
3
+ import { supportsAdaptiveThinking, type Message, type Model } from "@gsd/pi-ai";
4
4
  import { getAgentDir, getDocsPath } from "../config.js";
5
5
  import { AgentSession } from "./agent-session.js";
6
6
  import { AuthStorage } from "./auth-storage.js";
@@ -140,6 +140,17 @@ function getDefaultAgentDir(): string {
140
140
  return getAgentDir();
141
141
  }
142
142
 
143
+ function shouldPreferAdaptiveThinkingByDefault(
144
+ model: Model<any> | undefined,
145
+ settingsManager: SettingsManager,
146
+ ): boolean {
147
+ return !!model &&
148
+ model.provider === "anthropic" &&
149
+ model.reasoning === true &&
150
+ settingsManager.getAnthropicAdaptiveByDefault() &&
151
+ supportsAdaptiveThinking(model.id);
152
+ }
153
+
143
154
  /**
144
155
  * Create an AgentSession with the specified options.
145
156
  *
@@ -252,6 +263,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
252
263
  thinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;
253
264
  }
254
265
 
266
+ const preferAdaptiveByDefault = shouldPreferAdaptiveThinkingByDefault(model, settingsManager);
267
+ if (preferAdaptiveByDefault) {
268
+ thinkingLevel = "adaptive";
269
+ }
270
+
255
271
  // Clamp to model capabilities
256
272
  if (!model || !model.reasoning) {
257
273
  thinkingLevel = "off";
@@ -259,13 +275,12 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
259
275
 
260
276
  const editMode = settingsManager.getEditMode();
261
277
  const toolProfile = settingsManager.getToolProfile();
262
- const defaultActiveToolNames: string[] = toolProfile === "minimal"
263
- ? (editMode === "hashline"
264
- ? ["hashline_read", "bash", "lsp", "tool_search", "tool_enable"]
265
- : ["read", "bash", "lsp", "tool_search", "tool_enable"])
266
- : editMode === "hashline"
267
- ? ["hashline_read", "bash", "hashline_edit", "write", "lsp", "bg_shell", "tool_search", "tool_enable", "Skill", "subagent", "await_subagent"]
268
- : ["read", "bash", "edit", "write", "lsp", "bg_shell", "tool_search", "tool_enable", "Skill", "subagent", "await_subagent"];
278
+ const balancedToolNames = editMode === "hashline"
279
+ ? ["hashline_read", "bash", "hashline_edit", "write", "lsp", "bg_shell", "tool_search", "tool_enable", "Skill", "subagent", "await_subagent", "ask_user_questions"]
280
+ : ["read", "bash", "edit", "write", "lsp", "bg_shell", "tool_search", "tool_enable", "Skill", "subagent", "await_subagent", "ask_user_questions"];
281
+ const defaultActiveToolNames: string[] = toolProfile === "full"
282
+ ? Object.keys(allTools)
283
+ : balancedToolNames;
269
284
  const initialActiveToolNames: string[] = options.tools
270
285
  ? options.tools.map((t) => t.name).filter((n): n is string => typeof n === "string" && n in allTools)
271
286
  : defaultActiveToolNames;
@@ -127,9 +127,12 @@ export interface Settings {
127
127
  planModeReasoningModel?: string;
128
128
  planModeReviewModel?: string;
129
129
  planModeCodingModel?: string;
130
+ autoSuggestPlanMode?: boolean; // default: false — append a system-prompt instruction so the LLM proposes plan mode for large tasks
131
+ autoSwitchPlanModel?: boolean; // default: false — enable opusplan-style model switching (auto-switch to reasoning model on entry, new-session option on approval)
130
132
  permissionMode?: "danger-full-access" | "accept-on-edit" | "auto" | "plan";
131
133
  classifierModel?: string;
132
134
  defaultThinkingLevel?: "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive";
135
+ anthropicAdaptiveByDefault?: boolean; // default: false — prefer adaptive thinking when using supported Anthropic models
133
136
  transport?: TransportSetting; // default: "sse"
134
137
  steeringMode?: "all" | "one-at-a-time";
135
138
  followUpMode?: "all" | "one-at-a-time";
@@ -149,8 +152,8 @@ export interface Settings {
149
152
  prompts?: string[]; // Array of local prompt template paths or directories
150
153
  themes?: string[]; // Array of local theme file paths or directories
151
154
  enableSkillCommands?: boolean; // default: true - register skills as /skill:name commands
152
- toolSearch?: boolean; // legacy boolean toggle for lazy tool-search mode; superseded by toolProfile
153
- toolProfile?: "minimal" | "balanced"; // default: "balanced"
155
+ toolSearch?: boolean; // legacy boolean toggle from deprecated minimal profile; retained for migration only
156
+ toolProfile?: "balanced" | "full"; // default: "balanced"
154
157
  terminal?: TerminalSettings;
155
158
  images?: ImageSettings;
156
159
  enabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)
@@ -806,6 +809,22 @@ export class SettingsManager {
806
809
  this.setGlobalSetting("planModeCodingModel", modelRef.trim());
807
810
  }
808
811
 
812
+ getAutoSuggestPlanMode(): boolean {
813
+ return this.settings.autoSuggestPlanMode ?? false;
814
+ }
815
+
816
+ setAutoSuggestPlanMode(enabled: boolean): void {
817
+ this.setGlobalSetting("autoSuggestPlanMode", enabled);
818
+ }
819
+
820
+ getAutoSwitchPlanModel(): boolean {
821
+ return this.settings.autoSwitchPlanModel ?? false;
822
+ }
823
+
824
+ setAutoSwitchPlanModel(enabled: boolean): void {
825
+ this.setGlobalSetting("autoSwitchPlanModel", enabled);
826
+ }
827
+
809
828
  setPermissionMode(mode: "danger-full-access" | "accept-on-edit" | "auto" | "plan"): void {
810
829
  this.setGlobalSetting("permissionMode", mode);
811
830
  }
@@ -882,6 +901,14 @@ export class SettingsManager {
882
901
  this.setGlobalSetting("defaultThinkingLevel", level);
883
902
  }
884
903
 
904
+ getAnthropicAdaptiveByDefault(): boolean {
905
+ return this.settings.anthropicAdaptiveByDefault ?? false;
906
+ }
907
+
908
+ setAnthropicAdaptiveByDefault(enabled: boolean): void {
909
+ this.setGlobalSetting("anthropicAdaptiveByDefault", enabled);
910
+ }
911
+
885
912
  getTransport(): TransportSetting {
886
913
  return this.settings.transport ?? "sse";
887
914
  }
@@ -1067,24 +1094,18 @@ export class SettingsManager {
1067
1094
  this.setGlobalSetting("enableSkillCommands", enabled);
1068
1095
  }
1069
1096
 
1070
- getToolProfile(): "minimal" | "balanced" {
1097
+ getToolProfile(): "balanced" | "full" {
1071
1098
  const profile = this.settings.toolProfile;
1072
- if (profile === "minimal" || profile === "balanced") return profile;
1073
- if (this.settings.toolSearch !== undefined) return this.settings.toolSearch ? "minimal" : "balanced";
1099
+ if (profile === "balanced" || profile === "full") return profile;
1100
+ // Migrate legacy minimal/toolSearch settings to balanced.
1101
+ if (this.settings.toolSearch !== undefined) return "balanced";
1074
1102
  return "balanced";
1075
1103
  }
1076
1104
 
1077
- setToolProfile(profile: "minimal" | "balanced"): void {
1105
+ setToolProfile(profile: "balanced" | "full"): void {
1078
1106
  this.setGlobalSetting("toolProfile", profile);
1079
- this.setGlobalSetting("toolSearch", profile === "minimal");
1080
- }
1081
-
1082
- getToolSearch(): boolean {
1083
- return this.getToolProfile() === "minimal";
1084
- }
1085
-
1086
- setToolSearch(enabled: boolean): void {
1087
- this.setToolProfile(enabled ? "minimal" : "balanced");
1107
+ // Keep legacy field in sync with deprecated minimal mode removal.
1108
+ this.setGlobalSetting("toolSearch", false);
1088
1109
  }
1089
1110
 
1090
1111
  getThinkingBudgets(): ThinkingBudgetsSettings | undefined {
@@ -152,6 +152,8 @@ export function buildSystemPrompt(options: BuildSystemPromptOptions = {}): strin
152
152
  addGuideline("Be concise. Prefer short, direct answers over preamble.");
153
153
  addGuideline("For conceptual, product, or UX questions, answer first; inspect code only if implementation detail is needed.");
154
154
 
155
+ const hasSubagent = tools.includes("subagent");
156
+
155
157
  if (hasLsp) {
156
158
  addGuideline(
157
159
  "Code navigation in typed codebases: use lsp for symbols (definition, references, implementation, hover, diagnostics, rename, format). Use grep/find/ls for text patterns, filenames, and non-code files.",
@@ -160,6 +162,30 @@ export function buildSystemPrompt(options: BuildSystemPromptOptions = {}): strin
160
162
  addGuideline("Use grep/find/ls for code search and file exploration (faster than bash, respects .gitignore)");
161
163
  }
162
164
 
165
+ if (hasSubagent) {
166
+ addGuideline(
167
+ "Recon planning policy: use 0 scouts for narrow known-file work, 1 scout for one broad unfamiliar subsystem, and 2-4 parallel scouts only when the work spans multiple loosely-coupled subsystems.",
168
+ );
169
+ addGuideline(
170
+ "For broad or unfamiliar codebase exploration, delegate reconnaissance to the scout subagent before reading many files yourself. After scout returns, use lsp and targeted reads for the narrowed file set.",
171
+ );
172
+ addGuideline(
173
+ "Call the subagent tool directly. For one scout use { agent, task }. For several scouts use parallel mode with { tasks: [{ agent, task }, ...] }.",
174
+ );
175
+ addGuideline(
176
+ "Scout is for mapping and reconnaissance only — not for final review, audit, or ranked issue lists. Use it to identify relevant files, subsystems, and likely hotspots for later evaluation.",
177
+ );
178
+ addGuideline(
179
+ "If reconnaissance spans multiple loosely-coupled areas, prefer multiple scout subagents in parallel, each covering one subsystem, instead of one model exploring everything itself.",
180
+ );
181
+ addGuideline(
182
+ "For broad review or audit requests, use scout only as a prep step to map architecture and hotspots; the parent model or a reviewer should make the final judgments.",
183
+ );
184
+ addGuideline(
185
+ "Skip scout only when the task is clearly narrow, the relevant file is already known, or the user explicitly asked for direct inspection of a specific file.",
186
+ );
187
+ }
188
+
163
189
  if (hasRead && hasEdit) {
164
190
  addGuideline("Read files before editing them. Never use cat or sed to inspect or modify files.");
165
191
  }