3975 Commits

Author SHA1 Message Date
Kazuki Yamada 416d042d43 Merge pull request #1611 from yamadashy/chore/renovate-ignore-clack-prompts
chore(renovate): Ignore @clack/prompts major update
2026-05-30 14:52:40 +09:00
Kazuki Yamada 5dce33f205 chore(renovate): Ignore @clack/prompts major update
intent(renovate): defer @clack/prompts v1 — the root major deps update (PR #1607) is fully red because v1 changed the text() validate callback arg to `string | undefined`, breaking the tsc build at src/cli/actions/initAction.ts:97 (TS18048); since build runs via the prepare hook, every npm ci fails and all CI jobs cascade-fail
decision(renovate): ignore only @clack/prompts, leaving typescript 6.0 and @secretlint/* 13 in the major group so CI can still evaluate them once clack is out of the batch

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 14:50:35 +09:00
Kazuki Yamada 88aca0172a Merge pull request #1608 from yamadashy/renovate/major-website-major-dependencies
fix(deps): update website major dependencies (major)
2026-05-30 14:34:28 +09:00
Kazuki Yamada 8899366243 Merge pull request #1610 from yamadashy/feat/website-auto-pack-on-url
feat(website): Enable auto-pack when repo URL parameter is present
2026-05-30 14:21:37 +09:00
Kazuki Yamada 759dd312bf feat(website): Enable auto-pack when repo URL parameter is present
intent(website): re-enable auto-pack on `?repo=` URLs now that the Cloudflare bot defense (BFM + invisible Turnstile) reliably blocks crawler-driven mass requests
constraint(auto-pack): keep the `!isBot()` guard as defense-in-depth — auto-execution was originally disabled because crawlers (e.g. Applebot) executing JS on permalink URLs caused mass pack requests

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 14:20:31 +09:00
renovate[bot] 96bc24ea97 fix(deps): update website major dependencies 2026-05-30 05:20:03 +00:00
Kazuki Yamada fb9bc9ee25 Merge pull request #1606 from yamadashy/renovate/website-non-major-dependencies
fix(deps): update website non-major dependencies
2026-05-30 14:18:12 +09:00
Kazuki Yamada c90beaef0e Merge pull request #1605 from yamadashy/renovate/root-non-major-dependencies
fix(deps): update root non-major dependencies
2026-05-30 14:17:52 +09:00
Kazuki Yamada 921dd2393d Merge pull request #1604 from yamadashy/renovate/browser-non-major-dependencies
chore(deps): update browser non-major dependencies
2026-05-30 14:17:31 +09:00
renovate[bot] ac459efd5c chore(deps): update browser non-major dependencies 2026-05-30 05:12:10 +00:00
renovate[bot] a29b596581 fix(deps): update website non-major dependencies 2026-05-30 05:08:31 +00:00
renovate[bot] df7af80952 fix(deps): update root non-major dependencies 2026-05-30 05:08:07 +00:00
Kazuki Yamada d7d124b49a Merge pull request #1609 from yamadashy/renovate/github-actions-non-major-dependencies
chore(deps): update anthropics/claude-code-action action to v1.0.133
2026-05-30 14:07:26 +09:00
renovate[bot] 1612ecc016 chore(deps): update anthropics/claude-code-action action to v1.0.133 2026-05-30 05:06:31 +00:00
Kazuki Yamada 66e8a508a0 Merge pull request #1603 from yamadashy/renovate/github-actions-non-major-dependencies
chore(deps): update github-actions non-major dependencies
2026-05-30 14:05:46 +09:00
github-actions[bot] 68cdaca17c chore(schema): auto generate schema 2026-05-30 00:42:50 +00:00
renovate[bot] 6b3b708874 chore(deps): update github-actions non-major dependencies 2026-05-30 00:42:13 +00:00
Kazuki Yamada 6d7800eada docs(release): Add v1.14.1 release notes
intent(release): document the 1.14.1 security patch (GHSA-9mm9 argument injection, GHSA-hwpp MCP secret-scan bypass) alongside the token-count cache and Dart parsing improvements
decision(release-notes): lead with Security since updating is recommended for all users; omit website/deps/internal PRs per release-note guidelines
decision(nix): list nixpkgs install under Improvements (user-facing) and the dev flake under Development (contributor-facing), without pinning a nixpkgs version since it lags releases

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 00:29:38 +09:00
Kazuki Yamada a7b93adfcd 1.14.1 v1.14.1 2026-05-27 00:45:16 +09:00
Kazuki Yamada e02cb66cd5 Merge commit from fork
fix(mcp): secret-scan attach-sourced outputs before serving them
2026-05-27 00:39:35 +09:00
Kazuki Yamada 4f4300a708 Merge commit from fork
fix(security): prevent argument injection via remote branch ref
2026-05-27 00:38:39 +09:00
Kazuki Yamada e447f7dba6 fix(mcp): secret-scan attach-sourced outputs before serving them
intent(mcp-attach): fix GHSA-hwpp-h97w-2h3j. attach_packed_output registered an arbitrary local file path under an outputId, and read_repomix_output / grep_repomix_output then returned its content without the secret scan that file_system_read_file enforces, letting a caller bypass that boundary to read local .json/.md/.txt/.xml files.
decision(serve-time-scan): run the secret scan when content is served (in read_repomix_output and grep_repomix_output), not only at attach time, so the boundary holds even if the file changes after attach (TOCTOU / symlink swap) and always applies to whatever is actually returned.
decision(registry-flag): tag attach-sourced registry entries with requiresSecretScan so only untrusted attach outputs are scanned on read, leaving the trusted pack_codebase / pack_remote_repository flow (already secret-filtered during packing) unaffected.
rejected(attach-time-validity): rejecting inputs with zero extractable files is unsound. Legitimate outputs can pack zero files (empty repo, everything filtered, output.files=false) and a crafted JSON with a files key passes the check anyway, so it was dropped in favor of the secret-scan boundary that matches file_system_read_file.
test(mcp): cover serve-time scanning in read and grep (blocked when the scan flags content, skipped for non-attach outputs) and that attach marks its outputs for serve-time scanning.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 00:35:13 +09:00
Kazuki Yamada 094a635b03 Merge pull request #1601 from yamadashy/chore/explorer-description
chore(skills): Sharpen repomix-explorer description
2026-05-26 00:30:55 +09:00
Kazuki Yamada 35c2e86d2b chore(skills): Address PR review feedback
improve(skill-description): Scope the known-path and single-symbol "DO NOT trigger" exclusions to the local project, since remote repos require packing before Read/grep can work (gemini-code-assist review on #1601)
2026-05-26 00:26:09 +09:00
Kazuki Yamada 3c84e75cdc chore(skills): Sharpen repomix-explorer description with trigger boundaries
intent(skill-description): Make the explorer skill activate precisely, modeled on GoogleChrome/modern-web-guidance's description style
decision(description-format): Switch to block scalar with categorized "Trigger for" examples plus an explicit "DO NOT trigger for" list
constraint(activation): Exclude single-file edits, known-path greps, and git/test/build ops so the skill stops over-triggering on targeted work
2026-05-26 00:20:05 +09:00
Kazuki Yamada 18b1d61078 Merge pull request #1600 from yamadashy/chore/harden-issue-similar-workflow
chore(ci): harden similar-issues workflow with least-privilege split
2026-05-26 00:00:46 +09:00
Kazuki Yamada 5307a43158 chore(ci): harden similar-issues workflow with least-privilege split
decision(architecture): split into a read-only find job and a separate no-AI comment job, mirroring the triage workflow, so the step that reads issue content holds no write token and no shell access.
decision(find-tools): disable Bash/Edit/Write/MultiEdit/NotebookEdit/WebFetch/WebSearch/Task and return related issue numbers via --json-schema structured output. Pass the untrusted issue title to gh search after "--" so it cannot be parsed as an option.
decision(comment): build the comment from a fixed template, validate the model-chosen numbers against real repository issues, and render only the issue reference (#n) so no attacker-controlled text reaches the posted comment.
2026-05-25 23:50:43 +09:00
Kazuki Yamada 132f1b87d2 Merge pull request #1598 from yamadashy/fix/issue-triage-prompt-injection
chore(ci): harden issue triage workflow with least-privilege split
2026-05-24 22:59:55 +09:00
Kazuki Yamada 8546d3ddac chore(ci): harden issue triage workflow with least-privilege split
decision(architecture): split triage into a read-only classify job and a separate no-AI apply job, so the step that reads issue content holds no write token and no shell access, and the step that writes labels runs fixed code rather than an agent.
decision(classify-tools): disable Bash/Edit/Write/MultiEdit/NotebookEdit/WebFetch/WebSearch/Task and return the chosen labels via --json-schema structured output, keeping the agent to read-only file access.
decision(apply-labels): validate the model-chosen labels against the real repository label list, cap at 5, and apply via the labels REST endpoint instead of an agent-built command.
learned(claude-code-action): passing --json-schema in claude_args exposes the result as steps.<id>.outputs.structured_output, parsed downstream with fromJSON().

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 22:14:47 +09:00
Kazuki Yamada e0924b6430 Merge pull request #1597 from yamadashy/chore/skills-reorganize
chore(skills): Reorganize skill directories
2026-05-24 21:52:22 +09:00
Kazuki Yamada 92bfa3193b fix(security): prevent argument injection via remote branch ref
intent(remote-clone): fix reported RCE advisory (GHSA-9mm9-rqhj-j5mx) — remoteBranch was passed to git fetch/checkout without sanitization, bypassing the dangerousParams control applied only to the URL
decision(ref-validation): reject any ref starting with '-' rather than blocklisting specific params — git refname rules already forbid leading '-', so it is safe and also blocks unknown dangerous options
decision(option-terminator): use '--end-of-options' before the ref in fetch and checkout as defense in depth
rejected(option-terminator): the advisory-recommended '--' delimiter — 'git checkout -- <ref>' treats the argument as a pathspec, not a ref, changing semantics; '--end-of-options' stops option parsing without that side effect
constraint(short-sha-fallback): the short-SHA checkout fallback path must be guarded too, not just the primary fetch
learned(upload-pack): '--upload-pack' only executes locally over local transports (file://, ext::); over https it is ignored and over ssh it runs on the remote host

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 21:21:01 +09:00
Kazuki Yamada 6c6bb0ecd5 chore(skills): Move repomix-explorer to top-level skills/ directory
intent(skills-layout): Separate project-internal skills from harness-specific .claude/skills/
decision(compat): Keep .claude/skills/repomix-explorer as symlink so existing CLI/plugin references still resolve
constraint(hermes-docs): Hermes install URL in README and 15 translated guides points at raw GitHub paths, so the move requires updating every docs locale
2026-05-24 19:31:46 +09:00
Kazuki Yamada a01d8369ed chore(skills): Reorganize skills under .agents and add contextual-commit
decision(skills-layout): Move skills to .agents/skills with .claude/skills symlinks for harness compatibility
decision(agent-carnet): Mark as internal via metadata flag
2026-05-24 19:20:43 +09:00
Kazuki Yamada b2e60fd70b Merge pull request #1596 from yamadashy/docs/privacy-turnstile-disclosure
docs(website): Disclose Cloudflare Turnstile in privacy policy
2026-05-24 17:14:13 +09:00
Kazuki Yamada 2ace2f8fa5 docs(website): Disclose Cloudflare Turnstile in privacy policy
Cloudflare requires sites running Turnstile in Invisible mode to
reference the Turnstile Privacy Policy in their own privacy disclosures.
Add a `Bot Protection` bullet to the Repomix Website section pointing
to Cloudflare's policy and explaining the invisible challenge.

All other locales include this file via `@include`, so the disclosure
propagates to every translation automatically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 17:10:31 +09:00
Kazuki Yamada f458fbd909 Merge pull request #1590 from serhiizghama/fix/turnstile-invalid-size-param
fix(website): remove invalid Turnstile size 'invisible', hide container via CSS
2026-05-24 17:03:53 +09:00
Kazuki Yamada d4c73dc3c8 Merge pull request #1595 from yamadashy/dependabot/npm_and_yarn/npm_and_yarn-9ddfda7c4f
chore(deps): Bump the npm_and_yarn group across 2 directories with 1 update
2026-05-24 16:01:22 +09:00
dependabot[bot] 9912900820 chore(deps): Bump the npm_and_yarn group across 2 directories with 1 update
Bumps the npm_and_yarn group with 1 update in the / directory: [qs](https://github.com/ljharb/qs).
Bumps the npm_and_yarn group with 1 update in the /website/server directory: [qs](https://github.com/ljharb/qs).


Updates `qs` from 6.15.0 to 6.15.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.0...v6.15.2)

Updates `qs` from 6.15.0 to 6.15.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.0...v6.15.2)

Updates `qs` from 6.15.0 to 6.15.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.0...v6.15.2)

Updates `qs` from 6.15.0 to 6.15.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.0...v6.15.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.15.2
  dependency-type: indirect
- dependency-name: qs
  dependency-version: 6.15.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-24 06:58:05 +00:00
Kazuki Yamada 32531c5c89 Merge pull request #1594 from yamadashy/renovate/root-non-major-dependencies
chore(deps): update root non-major dependencies
2026-05-24 15:56:00 +09:00
renovate[bot] f5528ca375 chore(deps): update root non-major dependencies 2026-05-24 06:31:44 +00:00
Kazuki Yamada 997e49040b Merge pull request #1593 from yamadashy/renovate/scripts-non-major-dependencies
chore(deps): update dependency @types/node to ^24.12.4
2026-05-24 15:29:41 +09:00
Kazuki Yamada ef1e7d27a1 Merge pull request #1592 from yamadashy/renovate/browser-non-major-dependencies
chore(deps): update browser non-major dependencies
2026-05-24 15:29:22 +09:00
Kazuki Yamada b13dd00db5 Merge pull request #1591 from yamadashy/renovate/github-actions-non-major-dependencies
chore(deps): update github-actions non-major dependencies
2026-05-24 15:29:02 +09:00
Kazuki Yamada f5773c8871 Merge pull request #1589 from yamadashy/seo/per-page-jsonld-hreflang
feat(website): Emit per-page TechArticle JSON-LD and hreflang alternates
2026-05-24 15:28:33 +09:00
renovate[bot] 768583a447 chore(deps): update browser non-major dependencies 2026-05-24 05:34:28 +00:00
renovate[bot] 3eb4f77bdd chore(deps): update github-actions non-major dependencies 2026-05-23 20:35:11 +00:00
renovate[bot] 403f9b069d chore(deps): update dependency @types/node to ^24.12.4 2026-05-23 06:27:45 +00:00
serhiizghama 9c1d96160f fix(website): hide Turnstile container via CSS instead of size: invisible
Without a size value, Turnstile renders a visible widget inside the container
div. Collapse it with position: absolute; width/height: 0; overflow: hidden;
visibility: hidden so no layout space is consumed and the widget stays inert.
2026-05-22 08:49:31 +07:00
serhiizghama 2ce3472b1d fix(website): remove invalid Turnstile size 'invisible' from render options
Cloudflare Turnstile does not accept 'invisible' as a size value; the valid
options are 'normal', 'compact', and 'flexible'. Passing 'invisible' throws a
TurnstileException in recent Turnstile script versions, breaking the pack form.

The invisible behaviour is already achieved via execution: 'execute', which
defers the challenge until mintToken() is called. The size parameter is only
needed when rendering a visible widget.
2026-05-22 08:49:25 +07:00
Kazuki Yamada b363c23622 fix(website): Address PR review feedback for SEO config
- Consolidate `supportedLocales`, `localeToBcp47`, and `localeToOgLocale`
  into a single `localeConfig` map and export it along with the
  `Locale` type so the locale list lives in one place and can be reused
  by the main VitePress config later.
- Extract the duplicated author block into a shared `siteAuthor`
  constant referenced by both the global SoftwareApplication graph and
  the per-page TechArticle.
- Give the global `WebSite` node a stable `@id` and reference it from
  `TechArticle.isPartOf` so search engines see a single linked entity
  across pages instead of inlined duplicates.
- Emit per-page `og:type` (`article` for docs, `website` for the home
  page) and drop the global `og:type` so the OpenGraph type matches the
  TechArticle schema.
- Add `og:locale:alternate` for every non-current locale alongside the
  existing `hreflang` alternates so social previews can also route to
  the matching localized page.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 00:29:31 +09:00