166 Commits

Author SHA1 Message Date
lvdeqing 651441cb52 chore: merge latest develop into Trae hook integration 2026-09-18 14:47:34 +08:00
Matt Van Horn 4e53f760fe fix: scope suppress_hook_warning to missing hooks and parse the env override
Parse RTK_SUPPRESS_HOOK_WARNING as a truthy/falsy override that falls
back to config when unset or unrecognised, keep the HookStatus::Ok fast
path free of config loading, and suppress only the missing-hook warning
so the outdated-hook upgrade prompt stays visible.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CNmJZVV9u6pBhcwVhwkPp6
2026-09-16 07:46:02 -07:00
Matt Van Horn 0e7a41eb52 feat(config): add suppress_hook_warning option
Add hooks.suppress_hook_warning config option and RTK_SUPPRESS_HOOK_WARNING
env var to disable "No hook installed" and "Hook outdated" warnings.

Users running rtk via CLAUDE.md instructions instead of hooks, or with
tools like OpenCode, get these warnings on every command. The warnings
waste tokens and confuse AI agents since rtk is working correctly.

RTK_SUPPRESS_HOOK_WARNING=1 suppresses; any other value forces the warning
on; unset falls back to the config file. Both default to false so existing
behavior is unchanged. The env parse follows the repo's
as_deref() == Ok("1") convention.

The suppression check runs before status() so the suppressed path does not
pay for the hook probe.

Documented in configuration.md (the hooks block and the env var table) and
README.md.

Fixes #682

Signed-off-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
2026-09-16 07:27:24 -07:00
lvdeqing ca24862484 chore: merge latest develop into Trae hook integration 2026-09-15 20:24:01 +08:00
Nicolas Le Cam 8b4c445815 Merge branch 'develop' into feat/ast-grep-support 2026-09-13 12:11:52 +02:00
Yijie Xu 7f2788a1b4 feat(hooks): add direct Codex command rewrite 2026-09-13 16:50:19 +08:00
Nicolas Le Cam 22d49e327f Merge pull request #1318 from kerta1n/feat/winget-automation
feat(ci): add winget manifest automation
2026-09-11 12:37:41 +02:00
Adrien Eppling 7c10f7791c fix(benchmark): ignore the recall hints when counting find entries
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNqtCagEUryc1fgw62APkm
2026-09-08 16:53:02 +02:00
Adrien Eppling a53373191d feat(recall): content-addressed recall store with selectable [retriever] mode
sqlite (default) queried by 'rtk recall'; tee (legacy files) and disabled modes retained.
2026-09-08 14:12:15 +02:00
Nicolas Le Cam c81c09775d docs: move the prompt-caching answer into the published guide
The section landed in docs/TROUBLESHOOTING.md, a flat file removed in
a94e9493 when the docs were consolidated. Content there does not reach
the published guide, and the copy reintroduced install guidance that
develop had already pinned to --branch master.

Move the answer into docs/guide/resources/troubleshooting.md and drop the
duplicated Type Kit collision section, which that guide already covers.

The cache write/read breakdown is reported by `rtk cc-economics`, not by
`rtk gain`, so point readers at the command that actually shows it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 01:54:14 +02:00
Nicolas Le Cam faaa446b9f Merge upstream/develop into docs/prompt-caching-faq 2026-09-08 01:54:00 +02:00
Nicolas Le Cam a2d9f01577 Merge pull request #253 from TheGlitching/feat/sqlfluff-lint
feat: add rtk sqlfluff lint with JSON filter (~75% token reduction)
2026-09-08 01:21:20 +02:00
kerta1n 2f905f7b62 docs: complete winget coverage, normalise install headings
- README_pt.md: add the winget section (only translation missing it)
- docs/guide/getting-started/installation.md: add winget install and
  uninstall entries
- README_{es,fr,ja,ko,zh}.md: drop the superlative from the winget
  heading so all seven READMEs read "winget (Windows)", matching the
  existing "Homebrew (recommended)" convention
- README.md: shorten the Native Windows heading to "(manual install)",
  move the winget pointer into prose

Deliberately out of scope: docs/guide/getting-started/installation.md
still tells Windows users to use WSL "for full hook support". README.md
contradicts this - native Windows hooks have worked since v0.37.2.
Correcting it means rewriting text this PR does not otherwise touch, so
it is left for a separate change.
2026-09-07 17:26:55 -04:00
kerta1n ece41fdcbe Merge branch 'develop' into feat/winget-automation 2026-09-07 17:26:50 -04:00
Adrien Eppling 9bc4323916 Merge origin/develop into clean/awareness-file
Resolved: awareness constants vs Pi/OMP rework, InitContext destructures,
bun/deno CLI additions, write_if_changed split.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DVD4ZD5wiSjSsNpKCK6h7q
2026-09-07 11:06:29 +02:00
Christian Marbach ba802ac82d docs(ast-grep): document rtk ast-grep in README and usage guides
Adds the ast-grep row/section to README.md, what-rtk-covers.md, and
FEATURES.md, matching how rtk grep/rg are documented there.
2026-09-07 10:34:00 +02:00
TheGlitching 0db62bd5cd fix(sqlfluff): address round-3 review (violations section, early-exit, field aliases, README)
- F1: gate 'No issues found' on success; surface stderr on failure (lint_cmd)
- F2: early_exit_on_failure() so non-zero exit surfaces stderr (sqlfluff_cmd)
- F3: add description field + per-violation section (50-line cap, ruff-style)
- F4: '+N more rules' overflow after top-rules list
- F5: '+N more rules' overflow in per-file breakdown
- F6: dual-field line/col deserialization (start_line_no/line_no aliases)
- F7: README example with bare-path usage
- F8: pointer-only (lockstep comment already in lint_cmd)

Test fixture updated to include realistic sqlfluff fields (end_line_no,
end_line_pos, fixable) that real output always emits.
2026-09-06 21:38:00 +02:00
TheGlitching b605716a9b feat: add rtk sqlfluff lint command with JSON filter (~75% token reduction)
Adds `rtk sqlfluff lint` for SQL linting workflows, particularly dbt
projects. Discovered as a savings opportunity via `rtk discover`.

- Injects `--format json` automatically; passes through if user sets it
- Groups violations by rule (top N) and by file with per-file breakdown
- Surfaces first violation location per rule and line numbers per file
- Shows fixable count and suggests `sqlfluff fix` when relevant
- Passes fix/format/version/parse subcommands through unchanged (capped)
- Registers hook rule in `discover/rules.rs` to auto-rewrite `sqlfluff lint`
- Preserves exit codes for CI/CD compatibility
- dbt-aware path compaction: keeps models/, macros/, seeds/ prefixes

Real-world tested on a production dbt project. Tolerates both v3+
`start_line_no` and legacy `line_no` schemas.

17 tests: happy path, edge cases, JSON parse fallback, real schema
regression, hook classification/rewrite, and token savings assertion (≥60% verified).
2026-09-06 21:02:17 +02:00
Nicolas Le Cam e53ec1cf18 Merge pull request #3707 from alvins82/omp-shared
feat(omp)!: add Oh My Pi (OMP) support
2026-09-05 01:54:17 +02:00
Nicolas Le Cam 1173de0686 fix(js): correct bun and deno runtime behavior
Failure detection, so a green run is never reported red:

- a failure marker vouches for the block it closes, so a frameless failure
  such as a timeout keeps the line that says why it failed
- bun's marker and run footer are matched with the duration and test count
  they carry, since a test is free to log a line that starts the same way
- deno's FAILURES entries are matched by shape, because a bare " => " also
  occurs in arrow functions and assertion messages
- deno fences output it did not write, and names the fence for when it was
  printed, so the rule is matched by shape and gates both the failures list
  and the block engine

Diagnostics that were reaching nobody:

- deno's type-check errors are kept with the frame under them: they open no
  block and carry no section, so a type error left the caller with a bare
  "Type checking failed."
- bun's frames are kept, since two failing tests that share a name, and a
  module error that has no marker at all, cannot otherwise be located

Runs whose output rtk must not touch:

- watch mode on every filtered entry point goes through unfiltered, since the
  runners buffer the whole stream until a child that never exits
- a deno reporter the user named is left alone, because --reporter=junit and
  --junit-path write the report to stdout
- bun build and deno compile run unfiltered: without an output flag the bundle
  is stdout, with one the emitted-file summary is the point of the run, and on
  failure the diagnostics are, none of which an errors-only filter keeps

Tool resolution:

- a package runner the user named wins over lockfile detection, and over a
  tool that merely happens to be on PATH
- lockfile detection never resolves through bunx, which always fetches a
  missing tool and cannot be told not to
- a tool rtk may fetch resolves through npx, the only runner that can

Input and output:

- bunx forwards the caller's stdin when it is a pipe, since the filtered path
  buffers output and an inherited terminal would let a prompt wait invisibly
- strip the resolution lines bun actually prints when piped, count the tree
  levels drawn with a leading pipe, and stop injecting --json into a command
  the user typed
- the lint label records the arguments once, and the shell runners' placeholder
  tool name stays out of their verbose line

Fixtures are real bun 1.2.20 and deno 2.9.6 captures for each case.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 02:16:01 +02:00
Geoff Little 9bee7a0d8f fix(js): correct bun and deno filtering, routing, and accounting
- bun_cmd.rs: bun build passes through unless an output flag sends the bundle
  to disk, and bunx uses the light npm filter instead of errors-only
- core/runner.rs: the err and test runners record the tool that actually ran,
  with a per-tool tee slug
- utils.rs, tsc_cmd.rs, main.rs: resolve tools via the project package manager,
  and keep the tool name when routing eslint
- tracking.rs, README.md: categorize bun and deno as js, and describe what the
  deno check and bun build filters really do
2026-09-02 23:54:02 +02:00
Geoff Little 319cfd540d docs: add CHANGELOG and README entries for bun/deno support 2026-09-02 23:53:21 +02:00
aesoft e533c40901 Merge pull request #3749 from KuSh/fix/exclude-commands-wrapper-forms
fix(hooks): match exclude_commands against the peeled command form
2026-09-01 10:04:32 +02:00
Nicolas Le Cam e8541d1e11 Merge pull request #1503 from iliaal/phpt-support
feat(phpt): add PHP .phpt filter for php-src run-tests.php (-99%)
2026-08-31 21:04:29 +02:00
Nicolas Le Cam 9ba523960b fix(hooks): match exclude_commands against the peeled command form
`exclude_commands` entries name a tool, but a command can spell that tool with a
wrapper (`npx playwright test`), an interpreter (`python3 -m pytest tests/`) or a
path (`vendor/bin/phpunit tests/`). Those spellings are absorbed by each rule's own
pattern rather than stripped beforehand, so the anchored `^playwright($|\s)` never
matched and the exclusion silently did nothing — the README shipped
`exclude_commands = ["curl", "playwright"]` as the example, and `playwright` is a
tool almost nobody invokes bare.

Peel the wrapper off the command and match what remains, alongside the existing
check on the typed command. The peeled form keeps the arguments, so an anchored
entry still narrows the way it was written: `"^ls$"` excludes a bare `ls` without
swallowing `ls -la`.

Peeling uses the rule's own `rewrite_prefixes`, taking the shortest token-suffix of
the matched prefix that is itself a prefix of that rule. That drops `npx` and
`python3 -m` while keeping a subcommand the rule treats as part of the tool, so
`golangci-lint run` does not collapse to `run`.

Peeling reuses the PHP normalization the rewrite path already applies (`php`
wrapper and ini flags, leading `./`, vendor/composer bin dir), extracted into
`php_tool_form` and shared by both, so `php vendor/bin/phpunit tests/` is excluded
by `["phpunit"]` the same way `vendor/bin/phpunit tests/` is.

The peeled check is gated on a non-empty `exclude_commands`, keeping the default
config off the `RULES` scan on the hook rewrite path.

Matching the resolved `rtk` target instead would have been shorter but wrong in
both directions: it misses tools whose target differs from the binary (`["eslint"]`
would still rewrite `npx eslint .`, since the target is `lint`), and it leaks
across tools sharing a target (`["read"]` would exclude `cat`, `["git"]` would
exclude `yadm`). Peeling has neither failure.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-30 15:28:30 +02:00
lvdeqing 436f2d5bb3 Merge upstream/develop into feat/trae-hook-integration 2026-08-26 15:11:34 +08:00
alvins82 1664772215 feat(omp): add Oh My Pi (OMP) support
Add `--agent omp` to `rtk init` (with `-g`, `--uninstall`, `--show`)
for the Oh My Pi coding agent (https://github.com/can1357/oh-my-pi).

OMP loads the same `hooks/pi/rtk.ts` extension via its built-in
legacy-pi-compat layer, which remaps the Pi package imports to OMP's
bundled equivalent — so no separate OMP implementation is needed and
the rewrite behavior stays byte-identical (mutualization).

- Local scope: <project>/.omp/extensions/rtk.ts
- Global scope: ~/.omp/agent/extensions/rtk.ts
- `--uninstall` is three-way safe: missing → no-op, stock content →
  removed, modified RTK content → bail with manual-removal guidance
- `--show` reports both scopes (installed / stock / modified / absent)

Co-authored-by: makoMakoGo <makoMakoGo@users.noreply.github.com>
2026-08-25 19:04:07 +12:00
Adrien Eppling 3e5eaace86 docs(readme): mention full awareness for agents without hook support 2026-08-20 10:15:19 +02:00
Adrien Eppling cddcecd76d docs(awareness): shorten awareness level section 2026-08-20 10:14:35 +02:00
Adrien Eppling bc751926cc docs(awareness): explain levels, upgrade path, and hookless agents 2026-08-20 10:12:03 +02:00
kylehgc af3f604f27 Merge remote-tracking branch 'upstream/develop' into feat/mvnd-support-3184-upstream
# Conflicts:
#	Cargo.lock
2026-08-17 10:05:28 -04:00
kylehgc b7bb5bc23a fix(mvn): terminate Surefire failure trail on mvnd's [INFO]-prefixed blanks
Review follow-up for #3199: real captured mvnd 1.0.6 fixtures plus
regression tests, as requested.

The fixtures surfaced a daemon-specific bug: mvnd routes all output
through the daemon logger, which prefixes even blank lines with
`[INFO] `. The Surefire failure-trail terminator keyed on a truly
empty line, so under mvnd the trail never closed and everything after
the last failing class passed through verbatim, help boilerplate
included (35% savings instead of the >=60% floor). is_blank_separator
now treats `[INFO]`-only lines as blank in the trail and re-arm states.

- mvnd_reactor_pass_raw.txt: warmed `mvnd clean install` on the
  multi-module skeleton — SmartBuilder parallel reactor with
  `[module] [INFO]` prefixes and daemon chatter
- mvnd_test_fail_raw.txt: warmed failing `mvnd test` (exit 1) on the
  multifail skeleton
- mvnd_compile_error_raw.txt: `mvnd compile` syntax error
- multifail-skeleton: six passing test classes so the failing-run
  capture is representative of real projects (an all-failures run is
  all signal and makes any savings floor meaningless)
- six regression tests: reactor summary survives, failure names,
  messages and user stack frames survive, compile diagnostics survive,
  daemon chatter and module-prefixed noise dropped, >=60% token savings
  asserted on the success and failure runs
- README: `rtk mvnd` added to the root command list

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 12:17:51 -04:00
Xavier Pestel 1847b07f7a fix(vibe): address PR review — exit code contract, tests, telemetry, docs
Addresses @aeppling's review on #3391:

Blocking fixes:
- run_vibe now returns Ok(()) on malformed JSON (matches run_droid /
  run_copilot / run_cursor pattern). Prior code violated the exit-code
  contract documented at src/hooks/README.md:100 — a bad payload exited
  non-zero and blocked the agent's command. Fixed via a match on
  serde_json::from_str with a stderr warning fallback.
- Extract run_vibe_inner(input: &str) -> Option<String> from run_vibe so
  the hook contract is unit-testable (mirrors run_droid_inner). Public
  run_vibe becomes a thin stdin/stdout wrapper.
- Add 6 runtime tests exercising the hook contract: bash rewrite happy
  path, non-bash tool passthrough, empty command passthrough, malformed
  JSON returns None, unknown binary passthrough, substitution defers.

Should-fix:
- Telemetry agent detection: add ~/.vibe/hooks.toml to detect_hook_type()
  checks in src/core/telemetry.rs, plus the two test enum arrays so Vibe
  sessions no longer report as 'unknown' in rtk gain history.
- Dead deny arm: add a comment on Host::Vibe in permissions.rs
  documenting that the empty-rules branch is defensive scaffolding for
  when Vibe ships native denylist/allowlist config we can honor.
- Broken link: patch_vibe_hooks_toml skip-message now points at
  https://www.rtk-ai.app/guide/getting-started/supported-agents#mistral-vibe
  instead of a fragment that doesn't resolve.

Nits addressed:
- Install summary no longer prints 'hook installed' when the user chose
  PatchMode::Skip or declined the interactive prompt. patch_vibe_hooks_toml
  now returns a VibeHookPatchOutcome enum (Installed / AlreadyPresent /
  Skipped) and the caller gates the summary on it.
- Document the string-spacing tradeoff on vibe_hooks_toml_has_rtk: a
  reformatted 'name="rtk-rewrite"' would defeat idempotency, acceptable
  because we control the writer and toml_edit round-trip would clobber
  user comments.
- Fix stale line in src/hooks/README.md 'Adding New Functionality':
  hook_check.rs::maybe_warn() only checks the Claude Code hook now,
  not every agent.

Documentation:
- docs/guide/getting-started/supported-agents.md: frontmatter now lists
  Mistral Vibe, drop 'planned' from the intro, tier table row flipped
  from 'Planned (#800)' to 'Rust binary (pre_tool) / Yes', replace the
  ### Mistral Vibe (planned) placeholder with a full user-facing section
  modeled on Factory Droid (install/uninstall commands, hook mechanism,
  permission semantics, idempotency contract).
- hooks/README.md: agent count 9 -> 10, add Vibe entry to Directory
  Structure list, add Vibe row to Supported Agents table, add
  '### Mistral Vibe (Rust Binary)' entry to the JSON Formats section
  showing the pre_tool input shape and rewrite response shape.
- src/hooks/README.md: agent count 5 -> 6, add Vibe row to per-host
  ask-support table.
- README.md: '15 AI coding tools' -> '16'.

No behavior change for existing agents.
2026-08-05 13:55:09 +02:00
Xavier Pestel d480f1ec48 feat(hooks): add transparent hook support for Mistral Vibe CLI
Add `rtk init -g --agent vibe` and `rtk hook vibe` to route bash tool
calls through the RTK proxy via Vibe's newly-shipped pre_tool hook.

Implementation follows the Gemini / Droid pattern:
- Native binary hook (`rtk hook vibe`), no shell script dependency.
- Global-only install (`~/.vibe/hooks.toml`); user-scope only.
- Idempotent install: detects existing `name = "rtk-rewrite"` entry.
- Uninstall is surgical: strips only the RTK `[[hooks]]` block and the
  `~/.vibe/prompts/rtk.md` prompt file, preserving any other user hooks
  byte-for-byte. Removes hooks.toml only when it becomes empty.
- Hook response uses Vibe's documented `hook_specific_output.tool_input`
  rewrite contract with a `system_message` for UI visibility.

Vibe hook API reference:
https://docs.mistral.ai/vibe/code/cli/hooks

Closes #800.
2026-08-04 16:51:24 +02:00
吕德庆 9ab28eda37 Merge branch 'develop' into feat/trae-hook-integration 2026-07-28 16:48:02 +08:00
Adrien Eppling 20ad62b41e fix conflict 2026-07-23 17:34:48 +02:00
Adrien Eppling f02f5b1f82 docs: keep the cost breakdown diagram in one place
The tree was copied into 11 files, so every future correction to it meant
11 edits in 7 languages. It now lives only in savings-explained.md, which
each of those pages already links to.

The surrounding prose stays: it carries the dilution point in the reader's
own language, which is the part that matters at a glance. Three pages
introduced the diagram with a trailing colon, reflowed into the following
paragraph. TRACKING.md gained the link it was missing.
2026-07-22 19:23:58 +02:00
Adrien Eppling c1f6ede36e docs: show the cost breakdown as containment, not a transformation chain
The arrow diagram read as a pipeline where bash output becomes input tokens
which become cost. The real relationship is containment: bash output is
part of input tokens, and input tokens are part of cost alongside output
tokens.

Replace the arrow chain with a tree in all 12 places it appeared, including
the six translated READMEs:

  Cost
  ├─ Input tokens
  │  ├─ Bash output           <- the only part RTK filters
  │  ├─ Your prompt
  │  ├─ System prompt
  │  └─ Conversation history
  └─ Output tokens            <- what the model writes

This also makes the dilution self-evident: RTK shrinks one leaf, so the
effect on the root is bounded by that leaf's share.
2026-07-22 18:52:34 +02:00
Adrien Eppling a1673f7428 docs: scope savings claims to bash output and document the estimator
RTK was documented as delivering "60-90% token savings", which reads as a
cost reduction. What RTK actually reduces is bash output bytes. Those are
one contributor to input tokens, which are themselves only part of a bill
that also counts output tokens, so the reduction dilutes at every step.

- add docs/guide/resources/savings-explained.md as the canonical explainer:
  the savings chain, both estimators, and what RTK does not reduce
- rescope the headline claim across README (7 languages), the guide, hook
  rules, agent definitions and module READMEs
- relabel per-command tables as bash output reduction, keeping every figure
- document that reported tokens are estimates: rtk gain uses bytes/4
  (src/core/tracking.rs), filter tests use split_whitespace().count().
  Neither is a real tokenizer, so ratios hold but absolute counts do not

Remove figures that had no source: the $3/Mtok constant and its $36
example, the +/-10% tokenization accuracy claim, the 99.5% hook-install
figure, the invented session tables in README and INSTALL, and the 30-50%
parser range.

CHANGELOG is untouched. Shipped release notes stay as a historical record.
2026-07-22 18:33:54 +02:00
Adrien Eppling a75bf0ec55 docs(uv): describe uv run passthrough accurately
Both READMEs claimed uv's own noise is filtered out. Nothing strips it: on a
cold run the raw output and rtk's output carry the same Resolved/Installed
lines. The module header already documented this correctly, so the user-facing
docs contradicted both the code and the header.
2026-07-22 17:22:56 +02:00
aesoft 4f865233db Merge pull request #752 from randomBrainstormer/feat/sbt/add-sbt-scala-build-tool-support
feat(sbt): add SBT (Scala Build Tool) support
2026-07-21 20:50:02 +02:00
aesoft d92996efde Merge pull request #3015 from rtk-ai/docs/add-tako8ki-core-contributor
docs: add Takayuki Maeda as core contributor
2026-07-20 18:25:48 +02:00
Adrien Eppling dfd1810dc9 fix(uv): preserve program output and restore inner-command filtering 2026-07-20 17:02:05 +02:00
Ilia Alshanetsky 220190584a feat(phpt): add PHP .phpt filter for php-src run-tests.php
Wraps `php run-tests.php` and collapses its per-test PASS chatter into
one summary line plus a bounded list of failure diffs. On php-src's
5322-test suite with 467 failures, output drops from 1.3 MB to 6 KB
(99.5% reduction). An all-pass run collapses to two lines.

Handles PASS/FAIL/SKIP/BORK/WARN/LEAK/XFAIL/XLEAK, ANSI color codes, the
========DIFF======== / ========DONE======== blocks, and the trailing
FAILED TEST SUMMARY block (which must not be re-counted). XFAIL and
XLEAK are expected results (reported under "Expected fail"/"Expected
leak" by run-tests.php) and do not count as failures.

The hook rewrite maps `php run-tests.php …` to `rtk phpt …` via a rule
in discover/rules.rs, with `phpt` added to the passthrough classifier.
Diff buffering is capped at the display limit while a separate counter
keeps the "+N more diff lines" note accurate. When the summary block
reports failures but per-test lines were truncated out of the capture,
the FAILURES header is still emitted with a note rather than dropped.

Tests: inline units plus an insta snapshot and a count_tokens-based
token-savings assertion (>=60%), per .claude/rules/cli-testing.md.
2026-07-20 08:49:56 -04:00
lvdeqing 22f3fe8267 docs(readme): update supported tools count 2026-07-20 16:19:20 +08:00
lvdeqing b6f3cc7c83 docs(readme): append Trae to supported tools 2026-07-20 16:18:32 +08:00
lvdeqing f5fc42264c feat: add Trae hook integration 2026-07-20 16:18:32 +08:00
Takayuki Maeda 224bde3482 docs: add Takayuki Maeda as core contributor 2026-07-16 19:39:49 +09:00
Ivan Severino a521234604 Merge remote-tracking branch 'origin/develop' into feat/sbt/add-sbt-scala-build-tool-support
# Conflicts:
#	src/main.rs
2026-07-15 20:46:04 +02:00
kerta1n 5886d6f852 Merge branch 'develop' into feat/winget-automation 2026-07-10 20:39:52 -04:00