thinking-phrases 1.0.1 → 2.0.0

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 (41) hide show
  1. package/README.md +230 -142
  2. package/configs/hn-top.config.json +60 -27
  3. package/launchd/rss-update.error.log +3 -27
  4. package/launchd/rss-update.log +308 -0
  5. package/launchd/task-health.json +54 -0
  6. package/out/dwyl-quotes.json +1621 -0
  7. package/out/javascript-tips.json +107 -0
  8. package/out/league-loading-screen-tips.json +107 -0
  9. package/out/ruby-tips.json +115 -0
  10. package/out/settings-linux.json +87 -0
  11. package/out/settings-mac.json +87 -0
  12. package/out/settings-windows.json +87 -0
  13. package/out/typescript-tips.json +131 -0
  14. package/out/vscode-tips.json +87 -0
  15. package/out/wow-loading-screen-tips.json +116 -0
  16. package/package.json +19 -12
  17. package/scripts/build.ts +3 -3
  18. package/scripts/debug-hn-hydration.ts +33 -0
  19. package/scripts/run-rss-update.zsh +25 -3
  20. package/scripts/show-thinking-phrases-health.ts +74 -0
  21. package/scripts/trigger-thinking-phrases-scheduler.zsh +50 -0
  22. package/src/core/config.ts +65 -3
  23. package/src/core/githubModels.ts +200 -112
  24. package/src/core/interactive.ts +49 -67
  25. package/src/core/phraseCache.ts +242 -0
  26. package/src/core/phraseFormats.ts +243 -0
  27. package/src/core/presets.ts +1 -1
  28. package/src/core/runner.ts +246 -113
  29. package/src/core/scheduler.ts +1 -1
  30. package/src/core/taskHealth.ts +213 -0
  31. package/src/core/types.ts +32 -8
  32. package/src/core/utils.ts +27 -2
  33. package/src/sources/customJson.ts +28 -18
  34. package/src/sources/earthquakes.ts +4 -4
  35. package/src/sources/githubActivity.ts +120 -48
  36. package/src/sources/hackerNews.ts +19 -7
  37. package/src/sources/rss.ts +25 -11
  38. package/src/sources/stocks.ts +31 -10
  39. package/src/sources/weatherAlerts.ts +173 -7
  40. package/tsconfig.json +1 -1
  41. package/scripts/update-rss-settings.ts +0 -7
@@ -0,0 +1,107 @@
1
+ {
2
+ "chat.agent.thinking.phrases": {
3
+ "mode": "append",
4
+ "phrases": [
5
+ "Prefer `const` by default; reach for `let` only when reassignment is the point.",
6
+ "If you need `var` in 2026, you probably need an apology too.",
7
+ "Destructure function params when callers pass option bags, not five positional mysteries.",
8
+ "Use default parameters instead of `x = x || fallback` when `0` and `\"\"` are valid values.",
9
+ "Optional chaining keeps nullable paths readable: `user?.profile?.avatarUrl`.",
10
+ "Use `??` for defaults when `false`, `0`, or `\"\"` should survive.",
11
+ "Don’t mix `??` with `||` or `&&` without parentheses unless you enjoy syntax errors.",
12
+ "Template literals beat string concatenation once variables or line breaks show up.",
13
+ "Tagged templates are niche, but fantastic for escaping, i18n, and DSLs.",
14
+ "Spread copies arrays and objects shallowly, not magically.",
15
+ "`structuredClone()` is the modern answer when you need a deep copy of cloneable data.",
16
+ "Rest parameters beat `arguments` for real arrays and honest function signatures.",
17
+ "Array destructuring makes swaps trivial: `[a, b] = [b, a]`.",
18
+ "Object destructuring plus renaming is great when API payloads have cursed field names.",
19
+ "Destructuring defaults are cleaner than defensive `|| {}` soup.",
20
+ "Use concise object properties when the variable name already says enough.",
21
+ "Arrow functions inherit `this`; that’s a feature until you actually needed dynamic `this`.",
22
+ "If an object method needs its own `this`, use method syntax or a regular function.",
23
+ "`map` transforms, `filter` removes, `reduce` accumulates. Don’t make `reduce` do all three out of ego.",
24
+ "`flatMap` is perfect when each input becomes zero, one, or many outputs.",
25
+ "Prefer `some` and `every` when you want booleans, not a dramatic `filter(...).length`.",
26
+ "`find` returns the first match; `filter` returns every match. Pick the bill you intend to pay.",
27
+ "`findLast` and `findLastIndex` save you from reversing arrays just to search from the end.",
28
+ "`.at(-1)` is cleaner than `arr[arr.length - 1]`.",
29
+ "`toSorted()` sorts without mutating the original array.",
30
+ "`toReversed()` is the polite version of `reverse()`.",
31
+ "`toSpliced()` lets you edit array copies without mutation side effects.",
32
+ "`with()` updates one array element immutably without hand-rolling slice gymnastics.",
33
+ "`Object.hasOwn(obj, key)` beats reaching through `hasOwnProperty`.",
34
+ "`Object.entries()` pairs beautifully with destructuring in loops.",
35
+ "`Object.fromEntries()` turns key-value transforms back into objects cleanly.",
36
+ "`Object.groupBy()` is great for bucketing data when your runtime supports it.",
37
+ "Use `Map` when keys aren’t just strings or when insertion order matters.",
38
+ "Use `Set` when uniqueness is the job, not when you secretly wanted an array.",
39
+ "Modern `Set` methods like `union`, `intersection`, and `difference` are finally catching up to what we all wrote by hand.",
40
+ "`WeakMap` and `WeakSet` are for object lifetimes, not random ‘maybe this is faster’ experiments.",
41
+ "`for...of` iterates values; `for...in` iterates keys. Confusing them is a rite of passage, not a best practice.",
42
+ "Async iteration with `for await...of` is great for streams and paginated data.",
43
+ "Don’t use `forEach` with `await`; it won’t wait, and it won’t apologize.",
44
+ "Use `Promise.all` when tasks can fail together and should run in parallel.",
45
+ "Use `Promise.allSettled` when partial success is still useful.",
46
+ "`Promise.any` gives you the first success, which is perfect for fallback mirrors.",
47
+ "`Promise.race` resolves first, whether that result is good news or chaos.",
48
+ "`async` functions always return promises, even when the return looks suspiciously normal.",
49
+ "`await` is for promises, not for making synchronous code feel important.",
50
+ "Wrap `await` calls in `try/catch` when failure is expected and recoverable.",
51
+ "Batch independent awaits with `Promise.all` instead of serializing them out of habit.",
52
+ "Top-level `await` works in modules, which is powerful and easy to overuse.",
53
+ "Dynamic `import()` is perfect for lazy-loading heavy code paths.",
54
+ "ESM is the present; know the difference between named and default exports before your imports become interpretive dance.",
55
+ "Prefer named exports for shared utilities; refactors stay saner.",
56
+ "Default exports are fine for one main thing per file, but consistency matters more than ideology.",
57
+ "Re-export from barrel files carefully; convenience can hide circular dependencies.",
58
+ "Private class fields with `#name` are real privacy, not just vibes.",
59
+ "`static` fields and methods belong on the class itself, not each instance.",
60
+ "Classes are syntax over prototypes, not a separate religion.",
61
+ "If a factory function is clearer than a class, use the factory.",
62
+ "`Error` now accepts a `cause`; keep the original failure when wrapping errors.",
63
+ "Throw `Error` objects, not raw strings. Future-you debugs stack traces, not vibes.",
64
+ "`RegExp.escape()` is the right answer when user input becomes part of a regex.",
65
+ "`replaceAll()` is cleaner than `split/join` when you actually mean ‘replace all’.",
66
+ "Use `URL` and `URLSearchParams` instead of manual query-string surgery.",
67
+ "`AbortController` should be in your toolkit for fetches, timeouts, and cancellation.",
68
+ "Always check `response.ok` before assuming `fetch` was a success story.",
69
+ "`fetch` only rejects on network failure, not on every 404-shaped disappointment.",
70
+ "`FormData` is easier than hand-building multipart requests.",
71
+ "`Intl.DateTimeFormat` beats custom date formatting spaghetti.",
72
+ "`Intl.NumberFormat` is the fastest way to stop embarrassing yourself with currency.",
73
+ "`Intl.RelativeTimeFormat` makes ‘3 days ago’ a one-liner instead of a utility file.",
74
+ "`BigInt` exists for integers larger than `Number.MAX_SAFE_INTEGER`, not for every counter in your app.",
75
+ "Don’t mix `BigInt` and `Number` without converting intentionally.",
76
+ "`Number.isNaN()` is safer than the global `isNaN()`.",
77
+ "`Array.isArray()` is still the only respectable way to ask if something is an array.",
78
+ "Truthy and falsy rules are useful, but explicit comparisons age better in business logic.",
79
+ "Use `===` unless you have a very specific reason not to.",
80
+ "Optional chaining is great for optional data, terrible for hiding programming mistakes everywhere.",
81
+ "Nullish coalescing is for missing values; `||` is for truthiness. They are not the same sport.",
82
+ "Use early returns to flatten branching before your function becomes a staircase to nowhere.",
83
+ "Small pure functions are easier to test than giant stateful blob-creatures.",
84
+ "`Array.prototype.sort()` is lexicographic by default; pass a comparator for numbers or enjoy cursed output.",
85
+ "`localeCompare` is usually the right comparator for user-facing strings.",
86
+ "Destructure only what you need; extracting 12 fields for style points is not a flex.",
87
+ "Use shallow copies before mutating shared data in React-ish state flows.",
88
+ "`?.()` is perfect when callbacks are optional and guard clauses feel noisy.",
89
+ "Use `finally` for cleanup that should happen whether async work wins or explodes.",
90
+ "`console.table()` is underrated when debugging arrays of objects.",
91
+ "`console.time()` and `console.timeEnd()` beat guessing where code is slow.",
92
+ "`queueMicrotask()` is handy when you need post-sync, pre-render scheduling without a full timer.",
93
+ "`setTimeout(fn, 0)` is a macrotask, not a teleport spell.",
94
+ "The event loop explains half of ‘JavaScript is weird’ and most of ‘my state updated later.’",
95
+ "Generators are niche until they suddenly make lazy iteration elegant.",
96
+ "Iterator helpers are bringing `map`, `filter`, and friends to iterators without forcing arrays first.",
97
+ "`Symbol` keys are useful for collisions and protocols, not for making code mysterious on purpose.",
98
+ "`Object.freeze()` is shallow, just like its commitment issues.",
99
+ "Use `?.[]` when property names are dynamic and the object may not exist.",
100
+ "Logical assignment operators like `??=`, `||=`, and `&&=` are handy, but only when their short-circuit behavior is exactly what you mean.",
101
+ "Parse JSON once, validate it, and stop pretending remote data shares your optimism.",
102
+ "New syntax is great, but boring readable code still wins code review.",
103
+ "Modern JavaScript rewards immutability and clarity more than clever mutation stunts.",
104
+ "The best JS trick is still this: write the obvious code first, then get fancy only if the profiler sends a written request."
105
+ ]
106
+ }
107
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "chat.agent.thinking.phrases": {
3
+ "mode": "append",
4
+ "phrases": [
5
+ "Last-hit minions if you want reliable income.",
6
+ "Minion waves are gold walking at you; don't miss free farm for coin-flip fights.",
7
+ "Brush hides you from enemies without vision.",
8
+ "Wards win games other people swear were lost in champ select.",
9
+ "If you can't see the jungler, respect the possibility they can see you.",
10
+ "Crashing a big wave can buy you time to recall, roam, or set vision.",
11
+ "Freezing near your tower makes ganks easier and farming safer.",
12
+ "Slow pushes turn into siege engines if you protect them.",
13
+ "Objectives are easier when lanes are pushed first.",
14
+ "Towers matter, but minion waves usually decide when you can actually hit them.",
15
+ "Recalling on a bad timer is how leads quietly disappear.",
16
+ "Ping intent early; mind reading is still not in the client.",
17
+ "Baron starts are stronger when enemy vision is weaker.",
18
+ "Dragon fights usually start before dragon spawns.",
19
+ "Herald pressure is best when plates or tempo still matter.",
20
+ "Side-lane pressure forces answers; unanswered side lanes become problems.",
21
+ "Don't chase into fog unless you're fine becoming content.",
22
+ "Sometimes the correct engage is just walking away with the objective.",
23
+ "Flash is strongest when it changes certainty, not when it looks cool.",
24
+ "Track ultimates, summoners, and teleports; fights are math wearing particle effects.",
25
+ "Your champion is strongest when your cooldowns and wave state agree.",
26
+ "If your lane is doomed, go neutral: farm safely, thin the wave, stop donating.",
27
+ "Roams are better when you shove first and leave the enemy a bill to pay.",
28
+ "Mid priority turns river fights from coin flips into appointments.",
29
+ "Support roams hit harder when your ADC can safely collect the wave.",
30
+ "Jungle camps respawn; your mental should too.",
31
+ "Reset before objectives so your inventory doesn't grief your mechanics.",
32
+ "Buy control wards. Future you loves free information.",
33
+ "Sweeping where your team can't contest is just expensive cardio.",
34
+ "Defending vision is often more important than placing new vision.",
35
+ "If the enemy disappears after pushing wave, assume the worst and ping it.",
36
+ "Greed after a won fight is how highlights become throws.",
37
+ "A shutdown isn't side income; it's something to protect.",
38
+ "Peel wins more fights than ego engages.",
39
+ "Front-to-back is boring right up until it wins.",
40
+ "If you miss skillshots, aim where panic goes, not where people stand.",
41
+ "Patience turns missed engage windows into perfect ones.",
42
+ "Fight on your cooldown spikes, not theirs.",
43
+ "If your comp scales, surviving is progress.",
44
+ "If your comp snowballs, hesitation is anti-synergy.",
45
+ "Ping missing once and danger twice; your team is busy farming and lying to themselves.",
46
+ "Tilt turns close games into tutorials on self-sabotage.",
47
+ "Muting bad comms is macro.",
48
+ "Honor the teammate who stayed sane; that's rare loot.",
49
+ "Some games are carried by mechanics. More are carried by not inting.",
50
+ "League changes constantly; reread tooltips before trusting old muscle memory.",
51
+ "If you're unsure what killed you, death recap exists for a reason.",
52
+ "Attack move helps when fights get crowded and your cursor gets honest.",
53
+ "Kiting is just rhythm plus fear management.",
54
+ "If you can hit tower for free, stop auditioning for montage clips.",
55
+ "Objective bounties tempt comebacks; don't hand them over for free.",
56
+ "When everyone disappears, they're either on Baron or about to convince you they were.",
57
+ "Minimap checks should happen so often they feel subconscious.",
58
+ "If your lane opponent recalls and you don't punish the wave, you paid for their shopping trip.",
59
+ "Good backs feel boring. That's how you know they were good.",
60
+ "Jinx names her weapons Fishbones, Pow-Pow, and Zapper.",
61
+ "Nunu's best friend is Willump, not the scoreboard.",
62
+ "Darius and Draven are brothers, which honestly explains plenty.",
63
+ "Jax famously loves eggs. The man has priorities.",
64
+ "Dr. Mundo is not a doctor; he is a confidence build.",
65
+ "Kled's job title is longer than some patch notes.",
66
+ "True Ice doesn't melt. Freljord physics are built different.",
67
+ "Before the Ruination, the Shadow Isles were the Blessed Isles. Rough rebrand.",
68
+ "Pantheon shares a body with the warrior Atreus.",
69
+ "Taric is the Aspect called the Protector.",
70
+ "Aurelion Sol got his name from the Targonians.",
71
+ "Jhin is a stage name. Mystery branding, very premium.",
72
+ "Mordekaiser's mace is called Nightfall.",
73
+ "Trundle's club is named Boneshiver.",
74
+ "Caitlyn's rifle was a gift from her parents.",
75
+ "Vi used chem-powered gauntlets before she wore the badge.",
76
+ "Jayce's hammer runs on a Brackern crystal shard.",
77
+ "Blitzcrank was built by Viktor to help Zaun.",
78
+ "Ekko ran with the Lost Children of Zaun.",
79
+ "Rengar is Kiilash, one of Runeterra's vastayan tribes.",
80
+ "Nami is Marai, from the seas west of Mount Targon.",
81
+ "Xayah and Rakan are Lhotlan vastaya.",
82
+ "Wukong once answered to Kong before earning his honorific.",
83
+ "Poppy carries Orlon's hammer in his memory.",
84
+ "The God-Willow fell to Ivern long before he became the Green Father.",
85
+ "Bilgewater naming its currency after sea monsters feels on brand.",
86
+ "Demacia builds with petricite because anti-magic architecture is a lifestyle.",
87
+ "Zaun's Gray is a reminder to appreciate breathable air.",
88
+ "The Black Mist visiting your coastline is never good news.",
89
+ "Rammus having a festival in Nashramae feels correct somehow.",
90
+ "Sometimes the best League tip is closing chat and opening map awareness.",
91
+ "Missing cannon minions builds character. Unfortunately.",
92
+ "Your 0/3 power spike is not guaranteed by Riot support.",
93
+ "If you say 'we scale,' make sure someone on your team actually does.",
94
+ "Chasing Singed is still a self-selected debuff.",
95
+ "Five strangers moving to one ping feels like witnessing a miracle.",
96
+ "The enemy jungler is always nearby right until you ward. Then they're top.",
97
+ "One clean reset saves more games than one greedy plate.",
98
+ "If the support disappears mid, assume hospitality is over.",
99
+ "Nothing in League is more dangerous than a quiet river and missing mid.",
100
+ "Baron calls reveal leadership, confidence, and sometimes felony-level overcommitment.",
101
+ "If you ace them, spend gold before spending emotes.",
102
+ "Vision denial turns brave enemies into cautious pathers.",
103
+ "Runeterra lore is weird in the best way: crystal scorpions, immortal bastions, and demon catfish.",
104
+ "Every champion is balanced until it's your lane opponent."
105
+ ]
106
+ }
107
+ }
@@ -0,0 +1,115 @@
1
+ {
2
+ "chat.agent.thinking.phrases": {
3
+ "mode": "append",
4
+ "phrases": [
5
+ "In Ruby, almost everything is an object — numbers, strings, classes, and even methods feel method-y.",
6
+ "`nil` and `false` are falsey. Everything else is truthy, including `0` and empty strings.",
7
+ "Prefer string interpolation like `\"Hello #{name}\"` over manual concatenation.",
8
+ "Single quotes are great until you need interpolation or escape sequences.",
9
+ "Ruby method calls usually read better than nested punctuation soup. Lean into that.",
10
+ "`puts` adds a newline. `print` does not. Tiny difference, frequent annoyance.",
11
+ "Ruby likes `snake_case` for methods, variables, symbols, files, and directories.",
12
+ "Classes and modules use `CapitalCase`, because Ruby contains multitudes and naming rules.",
13
+ "Constants use `SCREAMING_SNAKE_CASE` when they aren’t class or module names.",
14
+ "Symbols like `:pending` are lightweight identifiers, not just strings wearing different clothes.",
15
+ "Prefer symbol hash keys like `{ status: :pending }` over string keys when appropriate.",
16
+ "Modern Ruby hash syntax is `{ name: 'Austen' }`, not `{ :name => 'Austen' }` unless keys aren’t symbols.",
17
+ "Use `%w[red blue green]` for simple arrays of words.",
18
+ "Use `%i[open closed archived]` for simple arrays of symbols.",
19
+ "Arrays support negative indexes, so `arr[-1]` gets the last element.",
20
+ "`first` and `last` often read better than `[0]` and `[-1]`.",
21
+ "Ranges are a Ruby superpower: `1..5` includes 5, `1...5` does not.",
22
+ "Use `include?`, `any?`, `none?`, and `one?` when querying collections instead of weird count gymnastics.",
23
+ "Prefer `map`, `find`, `select`, and `reduce` over their older aliases like `collect`, `detect`, `find_all`, and `inject`.",
24
+ "`flat_map` beats `map + flatten` when you only need one level of flattening.",
25
+ "Don’t modify a collection while iterating over it unless chaos is the feature.",
26
+ "`each` is Ruby’s default looping muscle memory; `for` exists, but Rubyists mostly side-eye it.",
27
+ "`for` doesn’t create a new scope. `each` does. This matters the second it bites you.",
28
+ "Use `{ ... }` for single-line blocks and `do ... end` for multi-line blocks.",
29
+ "Blocks are one of Ruby’s best ideas. Learn them early and everything gets nicer.",
30
+ "A block parameter list like `|item, index|` is just Ruby being generous.",
31
+ "Use `each_with_index` when you need both values and indexes.",
32
+ "Use `next` in loops to skip early instead of nesting extra conditionals.",
33
+ "Ruby conditionals return values, so `result = if condition ... end` is completely normal.",
34
+ "Postfix conditionals like `save! if valid?` are peak Ruby when the body is short.",
35
+ "Use `unless` for simple negative conditions, but don’t get cute with `unless ... else`.",
36
+ "Prefer `case` when one value is being compared against multiple possibilities.",
37
+ "Ruby’s spaceship operator `<=>` returns `-1`, `0`, or `1` for comparisons.",
38
+ "Methods return the value of their last expression unless you explicitly `return`.",
39
+ "Avoid `return` unless it helps control flow. Ruby already knows how endings work.",
40
+ "Parentheses are optional for many calls, but optional does not always mean clearer.",
41
+ "Use method definition parentheses when parameters exist: `def greet(name)` is clearer than vibes-based parsing.",
42
+ "Omit parentheses on calls with no arguments: `user.empty?` feels more Ruby than `user.empty?()`.",
43
+ "Predicate methods end in `?`, like `empty?`, `nil?`, `even?`, and `valid?`.",
44
+ "Bang methods end in `!` when they’re the dangerous or mutating sibling of a safer method.",
45
+ "If there is no non-bang version, slapping `!` on the name is usually not the move.",
46
+ "Use `<<` when efficiently building strings; `+` creates more intermediate garbage.",
47
+ "Use `join(', ')` instead of the cryptic array `* ', '` trick.",
48
+ "Prefer `sub` over `gsub` when you only need to replace one occurrence.",
49
+ "Use `chars` instead of `split('')` when you want string characters.",
50
+ "Ruby interpolation already calls `to_s`, so `\"#{value.to_s}\"` is redundant.",
51
+ "Use `format` or `sprintf` when named formatting improves readability.",
52
+ "Heredocs are Ruby’s nice answer for multiline strings; squiggly heredocs `<<~` keep indentation sane.",
53
+ "Ruby can destructure arrays during assignment: `first, second = pair`.",
54
+ "The splat operator `*` is for collecting or expanding lists of arguments.",
55
+ "`first, *rest = items` is both practical and a little satisfying.",
56
+ "Use parallel assignment for swaps like `a, b = b, a`, not for showing off unnecessarily.",
57
+ "Keyword arguments make Ruby APIs much easier to read than giant positional parameter lists.",
58
+ "Prefer keyword args over option hashes for new APIs when the call site should explain itself.",
59
+ "Boolean parameters read better as keyword args: `save(validate: false)` beats `save(false)` every time.",
60
+ "Put required keyword arguments before optional ones so the signature doesn’t hide the important bits.",
61
+ "Optional arguments belong at the end of a parameter list unless you enjoy surprise parsing behavior.",
62
+ "Ruby 2.7+ argument forwarding with `...` is perfect for wrapper methods.",
63
+ "Ruby 3.1 block forwarding with `&` is tiny, weird-looking, and extremely handy.",
64
+ "Use `proc` over `Proc.new` unless you miss typing extra characters.",
65
+ "Use `->(x) { x * 2 }` for short lambdas. It’s the stabby one. You’ll get used to it.",
66
+ "Prefer `proc.call(arg)` over `proc[arg]` when you want newcomer-friendly code.",
67
+ "Use `map(&:downcase)` when the block only calls one method on each item.",
68
+ "Don’t overuse `&:` shorthand when the block logic stops being obvious.",
69
+ "`self` is usually unnecessary unless you’re calling a writer method or avoiding ambiguity.",
70
+ "Use `def self.call` for class methods; repeating the class name ages badly in refactors.",
71
+ "`new(...).call` is a very Ruby service-object pattern. You will see it everywhere once you notice it.",
72
+ "Use `attr_reader`, `attr_writer`, and `attr_accessor` for trivial accessors instead of boilerplate getters and setters.",
73
+ "Avoid `get_name` and `set_name`; Ruby wants `name` and `name=`.",
74
+ "Classes should usually have one clear responsibility, even in Ruby where metaprogramming keeps tempting people.",
75
+ "Prefer modules over classes when you only need namespaced module-level behavior.",
76
+ "`module_function` is often cleaner than `extend self` for utility modules.",
77
+ "Avoid class variables `@@var`; class instance variables are usually less cursed.",
78
+ "Instance variables start with `@`; class variables with `@@`; globals with `$`; only one of these is lovable.",
79
+ "Prefer module or class state over global variables unless you’re writing tiny scripts.",
80
+ "Define a good `to_s` for domain objects so logs stop looking like object graveyards.",
81
+ "Use `private` and `protected` deliberately. Ruby defaults everything public because it trusts you too much.",
82
+ "Duck typing is the Ruby way: care more about what an object can do than what class it claims to be.",
83
+ "Prefer `is_a?` over `kind_of?` because it’s the more common spelling in the wild.",
84
+ "Prefer `is_a?` over `instance_of?` unless you truly care about the exact class and not subclasses.",
85
+ "Avoid explicit `===` outside `case`; it reads like you’re trying to win a code golf argument.",
86
+ "Ruby’s `and` and `or` have very low precedence. Great for flow control, dangerous for boolean logic.",
87
+ "Use `&&` and `||` in boolean expressions. Use `and`/`or` only when you intentionally want flow-control precedence.",
88
+ "`foo = true and false` sets `foo` to `true`. Ruby is not trolling you; precedence is.",
89
+ "Prefer `!` over `not` unless you enjoy operator precedence trivia.",
90
+ "Avoid `!!value` unless you truly need a strict boolean result.",
91
+ "Use guard clauses like `return unless user` to flatten nested conditionals fast.",
92
+ "Ruby makes nested conditionals easy to write and painful to read. Bail out early.",
93
+ "Use `raise` over `fail` unless you’re deep in a very specific style preference trench.",
94
+ "Rescue specific exceptions, not `Exception`, unless you want to catch things you really shouldn’t.",
95
+ "Don’t use exceptions for normal control flow. That’s expensive drama.",
96
+ "Avoid modifier rescue like `do_work rescue nil`; it hides too much and teaches too little.",
97
+ "`ensure` always runs, which makes it great for cleanup and terrible for sneaky returns.",
98
+ "Never `return` from `ensure` unless your goal is to swallow exceptions and summon regret.",
99
+ "Prefer implicit `begin` inside methods when rescuing; Ruby already wraps method bodies for you.",
100
+ "Use `File.read` and `File.write` when you just need the full file contents in one shot.",
101
+ "When opening files with a block, Ruby closes them for you. Manual cleanup becomes optional instead of urgent.",
102
+ "Use `File::NULL` instead of hardcoding `/dev/null` if you want your code to travel well.",
103
+ "Use `require_relative` for internal files and `require` for external dependencies.",
104
+ "Leave off the `.rb` in `require_relative '../lib/tool'` — Ruby knows the deal.",
105
+ "Use `warn` instead of `$stderr.puts` for warnings.",
106
+ "Prefer `Time.now` over `Time.new` when you want the current time.",
107
+ "Use `Date` or `Time` for modern dates; `DateTime` is usually not what you want.",
108
+ "Add underscores to large numbers: `1_000_000` reads way better than counting zeroes like a caveman.",
109
+ "Use `rand(1..6)` instead of `rand(6) + 1` when a range says what you mean.",
110
+ "Float equality is sketchy everywhere, Ruby included. Compare with tolerance when precision matters.",
111
+ "Ruby favors readable code over ceremonial code, but readable still means disciplined — not just shorter.",
112
+ "The best Ruby tip is this: write code that sounds like plain English, then stop right before it becomes poetry."
113
+ ]
114
+ }
115
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "chat.agent.thinking.phrases": {
3
+ "mode": "append",
4
+ "phrases": [
5
+ "Ctrl+I starts inline chat — ask Copilot to edit code right where your cursor is.",
6
+ "Ctrl+Alt+I opens the Copilot chat panel. Your AI pair programmer awaits.",
7
+ "Tab accepts a Copilot suggestion. Alt+] and Alt+[ cycle through alternatives.",
8
+ "Use #file in chat to reference a specific file as context for your question.",
9
+ "Use #selection in chat to include your currently selected code as context.",
10
+ "Agent mode can run terminal commands and edit multiple files autonomously.",
11
+ "Type /compact in chat to summarize the conversation and free up context space.",
12
+ "Type /fork in chat to branch your conversation and explore a new direction.",
13
+ "Create .github/copilot-instructions.md to give Copilot project-specific guidance.",
14
+ "Create .prompt.md files to build reusable prompts you can invoke from chat.",
15
+ "Next Edit Suggestions (NES) predicts your next edit. Look for ghost text, then Tab.",
16
+ "Send a steering message while the agent works to redirect it mid-task.",
17
+ "Ctrl+Enter in chat submits with codebase context. Better answers for workspace questions.",
18
+ "Create custom agents with .agent.md files to define specialized AI personas.",
19
+ "Queue messages with Alt+Enter while the agent is working. It handles them in order.",
20
+ "F5 starts debugging. Shift+F5 stops it. Ctrl+Shift+F5 restarts. The holy trinity.",
21
+ "F9 toggles a breakpoint on the current line. You can also click the gutter.",
22
+ "F10 steps over. F11 steps into. Shift+F11 steps out. Master the debug dance.",
23
+ "Logpoints log to the console without pausing execution. Right-click the gutter to add one.",
24
+ "Conditional breakpoints only pause when an expression is true. Right-click a breakpoint to set one.",
25
+ "Hover over any variable while debugging to inspect its value inline.",
26
+ "Ctrl+Shift+D opens Run and Debug. Set up launch.json for custom debug configurations.",
27
+ "Ctrl+K Z enters Zen mode — full screen, no distractions. Press Escape twice to exit.",
28
+ "Sticky Scroll pins the current scope at the top of the editor. Toggle it in the View menu.",
29
+ "Ctrl+Shift+; focuses the breadcrumbs bar. Navigate your file structure without the mouse.",
30
+ "Emmet works out of the box. Type div.container>ul>li*3 and press Tab.",
31
+ "Ctrl+, opens Settings. There are thousands to customize — use search to find them.",
32
+ "Ctrl+K Ctrl+T opens the theme picker. Try a new color theme in seconds.",
33
+ "Settings Sync keeps your config consistent across machines. Enable it from the accounts menu.",
34
+ "Ctrl+K V opens a side-by-side Markdown preview. Edit and preview at the same time.",
35
+ "Drag an editor tab out of the window to open it in a separate floating window.",
36
+ "Ctrl+K Ctrl+S opens the Keyboard Shortcuts editor. Remap anything to your liking.",
37
+ "Remember to take all things in moderation — including VS Code extensions.",
38
+ "An unused keyboard shortcut is a wasted keyboard shortcut.",
39
+ "There is no cow level, but there is Zen mode.",
40
+ "A well-placed breakpoint is worth a thousand console.logs.",
41
+ "The Command Palette has over 1000 commands. You've probably used about 12.",
42
+ "Don't forget to drink water. Your code can wait. Probably.",
43
+ "50% of coding used to be Googling. The other 50% is now asking Copilot.",
44
+ "Your extensions are loading. Have you considered which ones you actually use?",
45
+ "Ctrl+Shift+G opens Source Control. See all your changes at a glance.",
46
+ "Git blame shows inline who last changed each line. Hover for the full commit.",
47
+ "You can stage just part of a file. Select lines and use 'Stage Selected Ranges'.",
48
+ "Gutter indicators show added, changed, and deleted lines right in the editor margin.",
49
+ "Alt+F3 jumps to the next inline change. Shift+Alt+F3 jumps to the previous one.",
50
+ "The Timeline view (bottom of Explorer) shows local file history and git commits.",
51
+ "Ctrl+Enter in the Source Control input box commits your staged changes.",
52
+ "Copilot can generate commit messages. Look for the sparkle ✨ icon in Source Control.",
53
+ "Ctrl+D selects the next occurrence of a word. Keep pressing for more!",
54
+ "Ctrl+Shift+L selects ALL occurrences of the current selection at once.",
55
+ "Alt+↑/↓ moves the current line up or down. No cut-paste needed.",
56
+ "Shift+Alt+↑/↓ duplicates the current line up or down.",
57
+ "Ctrl+Shift+K deletes the entire current line. No need to select it first.",
58
+ "Ctrl+P opens Quick Open. Start typing a filename to jump to it instantly.",
59
+ "Ctrl+Shift+P opens the Command Palette — your gateway to every VS Code command.",
60
+ "Ctrl+/ toggles line comments on the current line or selection.",
61
+ "Ctrl+B toggles the sidebar. More screen real estate, instantly.",
62
+ "Ctrl+\\ splits the editor side by side. Compare files like a pro.",
63
+ "Ctrl+Shift+O goes to any symbol in the current file. Add : to group by kind.",
64
+ "Ctrl+G jumps to a specific line number. Fast and precise.",
65
+ "Ctrl+Shift+\\ jumps to the matching bracket. Never get lost in nested code.",
66
+ "F2 renames a symbol across all files. Way smarter than find-and-replace.",
67
+ "Ctrl+. shows Quick Fixes and refactorings for the code under your cursor.",
68
+ "Shift+Alt+F formats the entire document. Clean code in one keystroke.",
69
+ "Alt+Z toggles word wrap. See long lines without horizontal scrolling.",
70
+ "Ctrl+J toggles the bottom panel — terminal, problems, output, all of it.",
71
+ "Hold Alt and click to place cursors anywhere. Multi-cursor editing is a superpower.",
72
+ "Ctrl+L selects the entire current line. Press again to grab the next line too.",
73
+ "Ctrl+K Ctrl+0 folds all code. Ctrl+K Ctrl+J unfolds everything.",
74
+ "Alt+← navigates back to your previous location. Like browser back, but for code.",
75
+ "Shift+Alt+I adds a cursor at the end of every selected line. Bulk editing made easy.",
76
+ "Ctrl+U undoes the last cursor operation. Went too far with Ctrl+D? Step back.",
77
+ "Ctrl+K Ctrl+X trims trailing whitespace from the file. Keep your diffs clean.",
78
+ "Ctrl+` toggles the integrated terminal. Your shell is always one keystroke away.",
79
+ "Ctrl+Shift+5 splits the terminal into side-by-side panes when it's focused.",
80
+ "Ctrl+Shift+` creates a new terminal instance. Run multiple shells in parallel.",
81
+ "Ctrl+K clears the terminal when focused. A fresh start for your shell.",
82
+ "The terminal has built-in autocomplete. Press Ctrl+Space to trigger suggestions.",
83
+ "Ctrl+Shift+C opens an external terminal at your workspace root.",
84
+ "Type 'code .' in any terminal to open that folder in VS Code."
85
+ ]
86
+ }
87
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "chat.agent.thinking.phrases": {
3
+ "mode": "append",
4
+ "phrases": [
5
+ "⌘+I starts inline chat — ask Copilot to edit code right where your cursor is.",
6
+ "⌃+⌘+I opens the Copilot chat panel. Your AI pair programmer awaits.",
7
+ "Tab accepts a Copilot suggestion. ⌥+] and ⌥+[ cycle through alternatives.",
8
+ "Use #file in chat to reference a specific file as context for your question.",
9
+ "Use #selection in chat to include your currently selected code as context.",
10
+ "Agent mode can run terminal commands and edit multiple files autonomously.",
11
+ "Type /compact in chat to summarize the conversation and free up context space.",
12
+ "Type /fork in chat to branch your conversation and explore a new direction.",
13
+ "Create .github/copilot-instructions.md to give Copilot project-specific guidance.",
14
+ "Create .prompt.md files to build reusable prompts you can invoke from chat.",
15
+ "Next Edit Suggestions (NES) predicts your next edit. Look for ghost text, then Tab.",
16
+ "Send a steering message while the agent works to redirect it mid-task.",
17
+ "⌘+Enter in chat submits with codebase context. Better answers for workspace questions.",
18
+ "Create custom agents with .agent.md files to define specialized AI personas.",
19
+ "Queue messages with ⌥+Enter while the agent is working. It handles them in order.",
20
+ "F5 starts debugging. ⇧+F5 stops it. ⇧+⌘+F5 restarts. The holy trinity.",
21
+ "F9 toggles a breakpoint on the current line. You can also click the gutter.",
22
+ "F10 steps over. F11 steps into. ⇧+F11 steps out. Master the debug dance.",
23
+ "Logpoints log to the console without pausing execution. Right-click the gutter to add one.",
24
+ "Conditional breakpoints only pause when an expression is true. Right-click a breakpoint to set one.",
25
+ "Hover over any variable while debugging to inspect its value inline.",
26
+ "⇧+⌘+D opens Run and Debug. Set up launch.json for custom debug configurations.",
27
+ "⌘+K Z enters Zen mode — full screen, no distractions. Press Escape twice to exit.",
28
+ "Sticky Scroll pins the current scope at the top of the editor. Toggle it in the View menu.",
29
+ "⇧+⌘+; focuses the breadcrumbs bar. Navigate your file structure without the mouse.",
30
+ "Emmet works out of the box. Type div.container>ul>li*3 and press Tab.",
31
+ "⌘+, opens Settings. There are thousands to customize — use search to find them.",
32
+ "⌘+K ⌘+T opens the theme picker. Try a new color theme in seconds.",
33
+ "Settings Sync keeps your config consistent across machines. Enable it from the accounts menu.",
34
+ "⌘+K V opens a side-by-side Markdown preview. Edit and preview at the same time.",
35
+ "Drag an editor tab out of the window to open it in a separate floating window.",
36
+ "⌘+K ⌘+S opens the Keyboard Shortcuts editor. Remap anything to your liking.",
37
+ "Remember to take all things in moderation — including VS Code extensions.",
38
+ "An unused keyboard shortcut is a wasted keyboard shortcut.",
39
+ "There is no cow level, but there is Zen mode.",
40
+ "A well-placed breakpoint is worth a thousand console.logs.",
41
+ "The Command Palette has over 1000 commands. You've probably used about 12.",
42
+ "Don't forget to drink water. Your code can wait. Probably.",
43
+ "50% of coding used to be Googling. The other 50% is now asking Copilot.",
44
+ "Your extensions are loading. Have you considered which ones you actually use?",
45
+ "⌃+⇧+G opens Source Control. See all your changes at a glance.",
46
+ "Git blame shows inline who last changed each line. Hover for the full commit.",
47
+ "You can stage just part of a file. Select lines and use 'Stage Selected Ranges'.",
48
+ "Gutter indicators show added, changed, and deleted lines right in the editor margin.",
49
+ "⌥+F3 jumps to the next inline change. ⇧+⌥+F3 jumps to the previous one.",
50
+ "The Timeline view (bottom of Explorer) shows local file history and git commits.",
51
+ "⌘+Enter in the Source Control input box commits your staged changes.",
52
+ "Copilot can generate commit messages. Look for the sparkle ✨ icon in Source Control.",
53
+ "⌘+D selects the next occurrence of a word. Keep pressing for more!",
54
+ "⇧+⌘+L selects ALL occurrences of the current selection at once.",
55
+ "⌥+↑/↓ moves the current line up or down. No cut-paste needed.",
56
+ "⇧+⌥+↑/↓ duplicates the current line up or down.",
57
+ "⇧+⌘+K deletes the entire current line. No need to select it first.",
58
+ "⌘+P opens Quick Open. Start typing a filename to jump to it instantly.",
59
+ "⇧+⌘+P opens the Command Palette — your gateway to every VS Code command.",
60
+ "⌘+/ toggles line comments on the current line or selection.",
61
+ "⌘+B toggles the sidebar. More screen real estate, instantly.",
62
+ "⌘+\\ splits the editor side by side. Compare files like a pro.",
63
+ "⇧+⌘+O goes to any symbol in the current file. Add : to group by kind.",
64
+ "⌃+G jumps to a specific line number. Fast and precise.",
65
+ "⇧+⌘+\\ jumps to the matching bracket. Never get lost in nested code.",
66
+ "F2 renames a symbol across all files. Way smarter than find-and-replace.",
67
+ "⌘+. shows Quick Fixes and refactorings for the code under your cursor.",
68
+ "⇧+⌥+F formats the entire document. Clean code in one keystroke.",
69
+ "⌥+Z toggles word wrap. See long lines without horizontal scrolling.",
70
+ "⌘+J toggles the bottom panel — terminal, problems, output, all of it.",
71
+ "Hold ⌥ and click to place cursors anywhere. Multi-cursor editing is a superpower.",
72
+ "⌘+L selects the entire current line. Press again to grab the next line too.",
73
+ "⌘+K ⌘+0 folds all code. ⌘+K ⌘+J unfolds everything. Manage code visibility fast.",
74
+ "⌃+- navigates back to your previous location. Like browser back, but for code.",
75
+ "⇧+⌥+I adds a cursor at the end of every selected line. Bulk editing made easy.",
76
+ "⌘+U undoes the last cursor operation. Went too far with ⌘+D? Step back.",
77
+ "⌘+K ⌘+X trims trailing whitespace from the file. Keep your diffs clean.",
78
+ "⌃+` toggles the integrated terminal. Your shell is always one keystroke away.",
79
+ "⌘+\\ splits the terminal into side-by-side panes when it's focused.",
80
+ "⌃+⇧+` creates a new terminal instance. Run multiple shells in parallel.",
81
+ "⌘+K clears the terminal when focused. A fresh start for your shell.",
82
+ "The terminal has built-in autocomplete. Press ⌃+Space to trigger suggestions.",
83
+ "⇧+⌘+C opens an external terminal at your workspace root.",
84
+ "Type 'code .' in any terminal to open that folder in VS Code."
85
+ ]
86
+ }
87
+ }
@@ -0,0 +1,87 @@
1
+ {
2
+ "chat.agent.thinking.phrases": {
3
+ "mode": "append",
4
+ "phrases": [
5
+ "Ctrl+I starts inline chat — ask Copilot to edit code right where your cursor is.",
6
+ "Ctrl+Alt+I opens the Copilot chat panel. Your AI pair programmer awaits.",
7
+ "Tab accepts a Copilot suggestion. Alt+] and Alt+[ cycle through alternatives.",
8
+ "Use #file in chat to reference a specific file as context for your question.",
9
+ "Use #selection in chat to include your currently selected code as context.",
10
+ "Agent mode can run terminal commands and edit multiple files autonomously.",
11
+ "Type /compact in chat to summarize the conversation and free up context space.",
12
+ "Type /fork in chat to branch your conversation and explore a new direction.",
13
+ "Create .github/copilot-instructions.md to give Copilot project-specific guidance.",
14
+ "Create .prompt.md files to build reusable prompts you can invoke from chat.",
15
+ "Next Edit Suggestions (NES) predicts your next edit. Look for ghost text, then Tab.",
16
+ "Send a steering message while the agent works to redirect it mid-task.",
17
+ "Ctrl+Enter in chat submits with codebase context. Better answers for workspace questions.",
18
+ "Create custom agents with .agent.md files to define specialized AI personas.",
19
+ "Queue messages with Alt+Enter while the agent is working. It handles them in order.",
20
+ "F5 starts debugging. Shift+F5 stops it. Ctrl+Shift+F5 restarts. The holy trinity.",
21
+ "F9 toggles a breakpoint on the current line. You can also click the gutter.",
22
+ "F10 steps over. F11 steps into. Shift+F11 steps out. Master the debug dance.",
23
+ "Logpoints log to the console without pausing execution. Right-click the gutter to add one.",
24
+ "Conditional breakpoints only pause when an expression is true. Right-click a breakpoint to set one.",
25
+ "Hover over any variable while debugging to inspect its value inline.",
26
+ "Ctrl+Shift+D opens Run and Debug. Set up launch.json for custom debug configurations.",
27
+ "Ctrl+K Z enters Zen mode — full screen, no distractions. Press Escape twice to exit.",
28
+ "Sticky Scroll pins the current scope at the top of the editor. Toggle it in the View menu.",
29
+ "Ctrl+Shift+; focuses the breadcrumbs bar. Navigate your file structure without the mouse.",
30
+ "Emmet works out of the box. Type div.container>ul>li*3 and press Tab.",
31
+ "Ctrl+, opens Settings. There are thousands to customize — use search to find them.",
32
+ "Ctrl+K Ctrl+T opens the theme picker. Try a new color theme in seconds.",
33
+ "Settings Sync keeps your config consistent across machines. Enable it from the accounts menu.",
34
+ "Ctrl+K V opens a side-by-side Markdown preview. Edit and preview at the same time.",
35
+ "Drag an editor tab out of the window to open it in a separate floating window.",
36
+ "Ctrl+K Ctrl+S opens the Keyboard Shortcuts editor. Remap anything to your liking.",
37
+ "Remember to take all things in moderation — including VS Code extensions.",
38
+ "An unused keyboard shortcut is a wasted keyboard shortcut.",
39
+ "There is no cow level, but there is Zen mode.",
40
+ "A well-placed breakpoint is worth a thousand console.logs.",
41
+ "The Command Palette has over 1000 commands. You've probably used about 12.",
42
+ "Don't forget to drink water. Your code can wait. Probably.",
43
+ "50% of coding used to be Googling. The other 50% is now asking Copilot.",
44
+ "Your extensions are loading. Have you considered which ones you actually use?",
45
+ "Ctrl+Shift+G opens Source Control. See all your changes at a glance.",
46
+ "Git blame shows inline who last changed each line. Hover for the full commit.",
47
+ "You can stage just part of a file. Select lines and use 'Stage Selected Ranges'.",
48
+ "Gutter indicators show added, changed, and deleted lines right in the editor margin.",
49
+ "Alt+F3 jumps to the next inline change. Shift+Alt+F3 jumps to the previous one.",
50
+ "The Timeline view (bottom of Explorer) shows local file history and git commits.",
51
+ "Ctrl+Enter in the Source Control input box commits your staged changes.",
52
+ "Copilot can generate commit messages. Look for the sparkle ✨ icon in Source Control.",
53
+ "Ctrl+D selects the next occurrence of a word. Keep pressing for more!",
54
+ "Ctrl+Shift+L selects ALL occurrences of the current selection at once.",
55
+ "Alt+↑/↓ moves the current line up or down. No cut-paste needed.",
56
+ "Shift+Alt+↑/↓ duplicates the current line up or down.",
57
+ "Ctrl+Shift+K deletes the entire current line. No need to select it first.",
58
+ "Ctrl+P opens Quick Open. Start typing a filename to jump to it instantly.",
59
+ "Ctrl+Shift+P opens the Command Palette — your gateway to every VS Code command.",
60
+ "Ctrl+/ toggles line comments on the current line or selection.",
61
+ "Ctrl+B toggles the sidebar. More screen real estate, instantly.",
62
+ "Ctrl+\\ splits the editor side by side. Compare files like a pro.",
63
+ "Ctrl+Shift+O goes to any symbol in the current file. Add : to group by kind.",
64
+ "Ctrl+G jumps to a specific line number. Fast and precise.",
65
+ "Ctrl+Shift+\\ jumps to the matching bracket. Never get lost in nested code.",
66
+ "F2 renames a symbol across all files. Way smarter than find-and-replace.",
67
+ "Ctrl+. shows Quick Fixes and refactorings for the code under your cursor.",
68
+ "Shift+Alt+F formats the entire document. Clean code in one keystroke.",
69
+ "Alt+Z toggles word wrap. See long lines without horizontal scrolling.",
70
+ "Ctrl+J toggles the bottom panel — terminal, problems, output, all of it.",
71
+ "Hold Alt and click to place cursors anywhere. Multi-cursor editing is a superpower.",
72
+ "Ctrl+L selects the entire current line. Press again to grab the next line too.",
73
+ "Ctrl+K Ctrl+0 folds all code. Ctrl+K Ctrl+J unfolds everything.",
74
+ "Alt+← navigates back to your previous location. Like browser back, but for code.",
75
+ "Shift+Alt+I adds a cursor at the end of every selected line. Bulk editing made easy.",
76
+ "Ctrl+U undoes the last cursor operation. Went too far with Ctrl+D? Step back.",
77
+ "Ctrl+K Ctrl+X trims trailing whitespace from the file. Keep your diffs clean.",
78
+ "Ctrl+` toggles the integrated terminal. Your shell is always one keystroke away.",
79
+ "Ctrl+Shift+5 splits the terminal into side-by-side panes when it's focused.",
80
+ "Ctrl+Shift+` creates a new terminal instance. Run multiple shells in parallel.",
81
+ "Ctrl+K clears the terminal when focused. A fresh start for your shell.",
82
+ "The terminal has built-in autocomplete. Press Ctrl+Space to trigger suggestions.",
83
+ "Ctrl+Shift+C opens an external terminal at your workspace root.",
84
+ "Type 'code .' in any terminal to open that folder in VS Code."
85
+ ]
86
+ }
87
+ }