diff --git a/.brv/.gitignore b/.brv/.gitignore index 0c92c0c0..c823242d 100644 --- a/.brv/.gitignore +++ b/.brv/.gitignore @@ -21,18 +21,6 @@ _index.md # END opencode-byterover - - - - - - - - - - - - # Review backups # Generated files diff --git a/.brv/context-tree/architecture/remote_control/remote-control-boundaries-are-enforced-by-server-owned-state-and-sanitized-input.md b/.brv/context-tree/architecture/remote_control/remote-control-boundaries-are-enforced-by-server-owned-state-and-sanitized-input.md new file mode 100644 index 00000000..6685e878 --- /dev/null +++ b/.brv/context-tree/architecture/remote_control/remote-control-boundaries-are-enforced-by-server-owned-state-and-sanitized-input.md @@ -0,0 +1,23 @@ +--- +confidence: 0.9 +sources: [facts/_index.md, facts/_index.md, project/_index.md] +synthesized_at: '2026-05-26T19:23:43.123Z' +type: synthesis +title: Remote control boundaries are enforced by server-owned state and sanitized inputs +summary: Both facts and project docs frame remote control as a boundary where local-only fields are stripped and server-owned secrets stay protected. +tags: [remote-control, security, sanitization, completion, server-owned] +related: [] +keywords: [boundary, sanitization, server-owned, redaction, routing, local-only, remote, auth] +createdAt: '2026-05-26T19:23:43.123Z' +updatedAt: '2026-05-26T19:23:43.123Z' +--- + +# Remote control boundaries are enforced by server-owned state and sanitized inputs + +Across facts and project, remote-control behavior is consistently constrained by a trust boundary: local-only add fields are stripped before remote requests, routing uses only server-owned variables, and completion/remote operations must not leak auth diagnostics or other secret state. + +## Evidence + +- **facts**: Remote mutation routing confirmed request sanitization, server boundary checks, response parsing, and error redaction; local-only add fields `global`, `print`, `output`, and `destinationRoot` are stripped before remote requests. +- **facts**: Nested `request.operation` validation is confirmed, and remote routing uses only `CAPLETS_MODE` and `CAPLETS_SERVER_URL`. +- **project**: The completion/remote-control workflow distinguishes backend IDs vs tool names by prefix and degrades safely on failures/timeouts, while local hidden completion routes through `CapletsEngine.completeCliWords`. diff --git a/.brv/context-tree/docs/plans/active_caplets_planning_documents.md b/.brv/context-tree/docs/plans/active_caplets_planning_documents.md index e74fbd54..5ee3f64f 100644 --- a/.brv/context-tree/docs/plans/active_caplets_planning_documents.md +++ b/.brv/context-tree/docs/plans/active_caplets_planning_documents.md @@ -2,7 +2,7 @@ title: Active Caplets Planning Documents summary: Active caplets planning notes covering backend, remote control, CLI, HTTP actions, GraphQL, hot reload, XDG paths, and release-related work. tags: [] -related: [architecture/remote_control/context.md, architecture/auth/context.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/context.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +related: [architecture/remote_control/context.md, architecture/auth/context.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/context.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] keywords: [] createdAt: '2026-05-21T10:20:40.246Z' updatedAt: '2026-05-21T10:21:06.053Z' diff --git a/.brv/context-tree/docs/plans/completion_discovery_refactor_implementation_plan.md b/.brv/context-tree/docs/plans/completion_discovery_refactor_implementation_plan.md index a79b100d..1a952fb3 100644 --- a/.brv/context-tree/docs/plans/completion_discovery_refactor_implementation_plan.md +++ b/.brv/context-tree/docs/plans/completion_discovery_refactor_implementation_plan.md @@ -2,7 +2,7 @@ title: Completion Discovery Refactor Implementation Plan summary: Plan for shared CLI completion metadata, cache-backed discovery, completion config defaults, remote completion routing, and final verification. tags: [] -related: [architecture/remote_control/remote_control_api_shape.md, architecture/remote_control/cli_remote_mode_selection.md, docs/plans/active_caplets_planning_documents.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/context.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +related: [architecture/remote_control/remote_control_api_shape.md, architecture/remote_control/cli_remote_mode_selection.md, docs/plans/active_caplets_planning_documents.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/context.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] keywords: [] createdAt: '2026-05-21T17:14:24.407Z' updatedAt: '2026-05-21T17:14:24.407Z' diff --git a/.brv/context-tree/docs/plans/completion_local_discovery_and_split_targets.md b/.brv/context-tree/docs/plans/completion_local_discovery_and_split_targets.md index eec9a3fe..6fb99d05 100644 --- a/.brv/context-tree/docs/plans/completion_local_discovery_and_split_targets.md +++ b/.brv/context-tree/docs/plans/completion_local_discovery_and_split_targets.md @@ -2,7 +2,7 @@ title: Completion Local Discovery and Split Targets summary: Plan saved for fixing local live discovery of existing caplet.tool completions and adding split targets, with formatting verified. tags: [] -related: [docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/context.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +related: [docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/context.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] keywords: [] createdAt: '2026-05-21T23:07:39.925Z' updatedAt: '2026-05-21T23:07:39.925Z' diff --git a/.brv/context-tree/docs/plans/context.md b/.brv/context-tree/docs/plans/context.md index 928b5ab6..93737c43 100644 --- a/.brv/context-tree/docs/plans/context.md +++ b/.brv/context-tree/docs/plans/context.md @@ -1,5 +1,5 @@ --- -related: [docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +related: [docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] --- # Topic: plans diff --git a/.brv/context-tree/docs/plans/docker_image_publishing_for_release_pipeline.md b/.brv/context-tree/docs/plans/docker_image_publishing_for_release_pipeline.md index 28018358..78359450 100644 --- a/.brv/context-tree/docs/plans/docker_image_publishing_for_release_pipeline.md +++ b/.brv/context-tree/docs/plans/docker_image_publishing_for_release_pipeline.md @@ -2,7 +2,7 @@ title: Docker Image Publishing for Release Pipeline summary: 'Release workflow should publish GHCR Docker images only after Changesets publishes npm packages, with packages: write permission and Docker build/login steps gated on published releases.' tags: [] -related: [architecture/remote_control/release_workflow.md, docs/plans/active_caplets_planning_documents.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/context.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +related: [architecture/remote_control/release_workflow.md, docs/plans/active_caplets_planning_documents.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/context.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] keywords: [] createdAt: '2026-05-21T09:58:44.922Z' updatedAt: '2026-05-21T09:58:44.922Z' diff --git a/.brv/context-tree/docs/plans/lsp_registry_caplet_plan.md b/.brv/context-tree/docs/plans/lsp_registry_caplet_plan.md new file mode 100644 index 00000000..74a9ae87 --- /dev/null +++ b/.brv/context-tree/docs/plans/lsp_registry_caplet_plan.md @@ -0,0 +1,51 @@ +--- +title: LSP Registry Caplet Plan +summary: A plan was created and saved for the LSP registry caplet, with execution options presented for either subagent-driven or inline implementation. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T09:12:01.444Z' +updatedAt: '2026-05-27T09:12:01.444Z' +consolidated_at: '2026-05-27T10:03:41.871Z' +consolidated_from: [{date: '2026-05-27T10:03:41.871Z', path: docs/plans/lsp_registry_caplet_plan.abstract.md, reason: 'These three files describe the same LSP registry caplet planning outcome with near-duplicate content in three formats (full entry, abstract, and overview). They are redundant and should be consolidated into the richest file while preserving the unique phrasing and metadata details from the other two.'}, {date: '2026-05-27T10:03:41.871Z', path: docs/plans/lsp_registry_caplet_plan.overview.md, reason: 'These three files describe the same LSP registry caplet planning outcome with near-duplicate content in three formats (full entry, abstract, and overview). They are redundant and should be consolidated into the richest file while preserving the unique phrasing and metadata details from the other two.'}] +--- +## Reason +Persist the plan completion outcome and user-visible decision point from the conversation + +## Raw Concept +**Task:** +Record the completion of the LSP registry caplet planning step + +**Changes:** +- Created an implementation plan +- Saved the plan to the plans directory +- Presented two execution approaches + +**Files:** +- docs/plans/2026-05-26-lsp-registry-caplet.md + +**Flow:** +plan creation -> plan saved -> execution options presented + +**Timestamp:** 2026-05-27T09:11:49.118Z + +## Narrative +### Structure +This captures the outcome of a planning interaction for the LSP registry caplet. + +### Highlights +The plan was completed and saved, then the user was offered a choice between subagent-driven execution and inline execution. + +## Facts +- **plan_creation**: An implementation plan was created using the writing-plans skill. [project] +- **plan_file**: The plan was saved to docs/plans/2026-05-26-lsp-registry-caplet.md. [project] +- **execution_options**: Two execution options were presented: subagent-driven or inline execution. [project] + +## Overview +This document records the outcome of a planning step for the LSP registry caplet. +The plan was created using the writing-plans skill and saved to the project plans directory. +A user-visible decision point was presented after planning: choose between subagent-driven execution or inline execution. +The stated flow is: plan creation → plan saved → execution options presented. +The plan file is identified as docs/plans/2026-05-26-lsp-registry-caplet.md. +The document emphasizes persistence of the plan completion outcome and the interaction narrative, rather than implementation details. +Notable entities/patterns: "LSP registry caplet," "subagent-driven" vs "inline" execution, and the structured metadata fields for reason, raw concept, narrative, and facts. \ No newline at end of file diff --git a/.brv/context-tree/docs/plans/pr_71_completion_fix_outcome.md b/.brv/context-tree/docs/plans/pr_71_completion_fix_outcome.md index 857d5777..56ff32ef 100644 --- a/.brv/context-tree/docs/plans/pr_71_completion_fix_outcome.md +++ b/.brv/context-tree/docs/plans/pr_71_completion_fix_outcome.md @@ -2,7 +2,7 @@ title: PR 71 Completion Fix Outcome summary: Completion-related PR review fixes were implemented and verified with focused tests and pnpm verify, with no unresolved outside-diff review threads found. tags: [] -related: [docs/plans/context.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +related: [docs/plans/context.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] keywords: [] createdAt: '2026-05-22T10:56:26.474Z' updatedAt: '2026-05-22T10:56:26.474Z' diff --git a/.brv/context-tree/docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md b/.brv/context-tree/docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md new file mode 100644 index 00000000..87d2af47 --- /dev/null +++ b/.brv/context-tree/docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md @@ -0,0 +1,23 @@ +--- +confidence: 0.94 +sources: [docs/_index.md, facts/_index.md, project/_index.md] +synthesized_at: '2026-05-26T19:23:43.121Z' +type: synthesis +title: Release and completion work is governed by verification, not optimistic success signals +summary: Planning and outcomes both emphasize gating behavior on explicit verification rather than workflow success alone. +tags: [release, completion, verification, fallback, automation] +related: [docs/plans/context.md, docs/plans/active_caplets_planning_documents.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md] +keywords: [gated, publish, fallback, auth, discovery, candidate, workflow, verification] +createdAt: '2026-05-26T19:23:43.121Z' +updatedAt: '2026-05-26T19:23:43.121Z' +--- + +# Release and completion work is governed by verification, not optimistic success signals + +Across docs and facts/project, the repository repeatedly treats completion and release behavior as verification-gated: completion falls back to safe candidates when discovery/auth is blocked, and release publishing waits for a verified publish state rather than assuming workflow success means it is safe to publish. + +## Evidence + +- **docs**: The release pipeline publishes GHCR Docker images only after Changesets publishes npm packages, and Docker publication is gated on verified publish state rather than workflow success alone. +- **facts**: Completion must not trigger interactive auth; if discovery is blocked, return stale cached results first, otherwise use static/config fallback only, and completion output remains candidate-only. +- **project**: The completion contract says failures and timeouts must degrade to safe fallbacks, and hidden `__complete` uses `CapletsEngine.completeCliWords`. diff --git a/.brv/context-tree/docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md b/.brv/context-tree/docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md index 3a42b8af..16756ea8 100644 --- a/.brv/context-tree/docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md +++ b/.brv/context-tree/docs/plans/release-automation-is-gated-by-verified-publish-state-not-just-workflow-success.md @@ -6,7 +6,7 @@ type: synthesis title: Release automation is gated by verified publish state, not just workflow success summary: The release pipeline only publishes Docker images after Changesets confirms a real npm publish, with validation checkpoints documented alongside it. tags: [release, docker, changesets, verification] -related: [docs/plans/context.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md] +related: [docs/plans/context.md, docs/plans/completion_local_discovery_and_split_targets.md, docs/plans/completion_discovery_refactor_implementation_plan.md, docs/plans/active_caplets_planning_documents.md, docs/plans/docker_image_publishing_for_release_pipeline.md, docs/plans/pr_71_completion_fix_outcome.md, docs/plans/release-and-completion-work-is-governed-by-verification-not-optimistic-success-s.md] keywords: [publish, changesets, ghcr, docker, gating, workflow, validation, release] createdAt: '2026-05-21T23:23:26.220Z' updatedAt: '2026-05-21T23:23:26.220Z' diff --git a/.brv/context-tree/facts/conventions/context.md b/.brv/context-tree/facts/conventions/context.md index 56acf145..faeeff06 100644 --- a/.brv/context-tree/facts/conventions/context.md +++ b/.brv/context-tree/facts/conventions/context.md @@ -1,3 +1,6 @@ +--- +related: [facts/project/context.md] +--- # Topic: conventions ## Overview diff --git a/.brv/context-tree/facts/conventions/rlm_curation_run_requirements.md b/.brv/context-tree/facts/conventions/rlm_curation_run_requirements.md deleted file mode 100644 index ee3b937c..00000000 --- a/.brv/context-tree/facts/conventions/rlm_curation_run_requirements.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -consolidated_at: '2026-05-25T11:38:36.992Z' ---- -Document the RLM curation runtime rules as a chronological policy: earlier sessions established precomputed recon, single-pass handling for compact contexts, no raw-context printing, bare taskId usage for mapExtract, the 300000 ms outer code_exec timeout when mapExtract is present, and verification via result.applied[].filePath. Later sessions reiterated the same guidance and added stronger canonical wording around UPSERT preference, result.summary.failed checks, and use of tools.curation.groupBySubject() and tools.curation.dedup() to organize extracted facts. The current canonical rule is that small, pre-reconciled contexts should proceed directly in single-pass mode; chunked extraction is only for larger contexts. \ No newline at end of file diff --git a/.brv/context-tree/facts/conventions/task_3_spec_review_fix.md b/.brv/context-tree/facts/conventions/task_3_spec_review_fix.md index 621c3765..e2a01d48 100644 --- a/.brv/context-tree/facts/conventions/task_3_spec_review_fix.md +++ b/.brv/context-tree/facts/conventions/task_3_spec_review_fix.md @@ -2,7 +2,7 @@ title: Task 3 Spec Review Fix summary: 'Task 3 fix: IPv6 loopback serve URLs now bind with ::1, CLI help text updated, focused tests passed, commit cdde479' tags: [] -related: [facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md] +related: [facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/remote_control_review_outcome.md] keywords: [] createdAt: '2026-05-20T12:56:28.017Z' updatedAt: '2026-05-20T12:56:28.017Z' diff --git a/.brv/context-tree/facts/conventions/task_5_regression_test_update.md b/.brv/context-tree/facts/conventions/task_5_regression_test_update.md index 712e82e5..bf22cd05 100644 --- a/.brv/context-tree/facts/conventions/task_5_regression_test_update.md +++ b/.brv/context-tree/facts/conventions/task_5_regression_test_update.md @@ -2,7 +2,7 @@ title: Task 5 Regression Test Update summary: Added regression tests for remote add rejecting server-owned fields; tests passed and commit 089542d was created with a note about unrelated worktree changes. tags: [] -related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md] +related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/remote_control_review_outcome.md] keywords: [] createdAt: '2026-05-20T13:52:39.382Z' updatedAt: '2026-05-20T13:52:39.382Z' diff --git a/.brv/context-tree/facts/conventions/task_6_review_outcome.md b/.brv/context-tree/facts/conventions/task_6_review_outcome.md index 774f499e..906b65c6 100644 --- a/.brv/context-tree/facts/conventions/task_6_review_outcome.md +++ b/.brv/context-tree/facts/conventions/task_6_review_outcome.md @@ -2,7 +2,7 @@ title: Task 6 Review Outcome summary: Task 6 review approved; nested engine request envelope validation is correct, old CAPLETS_REMOTE_* docs belong to Task 10, and source/test verification passed. tags: [] -related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md] +related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/remote_control_review_outcome.md] keywords: [] createdAt: '2026-05-20T14:17:40.238Z' updatedAt: '2026-05-20T14:17:40.238Z' diff --git a/.brv/context-tree/facts/conventions/task_7_remote_mutation_routing_review.md b/.brv/context-tree/facts/conventions/task_7_remote_mutation_routing_review.md index a780133b..f7953ee2 100644 --- a/.brv/context-tree/facts/conventions/task_7_remote_mutation_routing_review.md +++ b/.brv/context-tree/facts/conventions/task_7_remote_mutation_routing_review.md @@ -2,7 +2,7 @@ title: Task 7 Remote Mutation Routing Review summary: Task 7 remote mutation routing review was approved; remote add/init/install flows, server-side boundary validation, response parsing, and redaction were verified, with tests and typecheck passing. tags: [] -related: [architecture/remote_control/context.md, architecture/remote_control/remote_control_api_shape.md, facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_9_remote_config_test_fix.md] +related: [architecture/remote_control/context.md, architecture/remote_control/remote_control_api_shape.md, facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/remote_control_review_outcome.md] keywords: [] createdAt: '2026-05-20T14:35:11.652Z' updatedAt: '2026-05-20T14:35:11.652Z' diff --git a/.brv/context-tree/facts/conventions/task_7_review_outcome.md b/.brv/context-tree/facts/conventions/task_7_review_outcome.md index b36b99d4..b3b7807e 100644 --- a/.brv/context-tree/facts/conventions/task_7_review_outcome.md +++ b/.brv/context-tree/facts/conventions/task_7_review_outcome.md @@ -2,7 +2,7 @@ title: Task 7 Review Outcome summary: Task 7 review approved after verifying remote add payload sanitization and add-subcommand coverage; tests passed tags: [] -related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md] +related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/remote_control_review_outcome.md] keywords: [] createdAt: '2026-05-20T14:30:35.963Z' updatedAt: '2026-05-20T14:30:35.963Z' diff --git a/.brv/context-tree/facts/conventions/task_9_remote_config_test_fix.md b/.brv/context-tree/facts/conventions/task_9_remote_config_test_fix.md index a27ddac4..1581882b 100644 --- a/.brv/context-tree/facts/conventions/task_9_remote_config_test_fix.md +++ b/.brv/context-tree/facts/conventions/task_9_remote_config_test_fix.md @@ -2,7 +2,7 @@ title: Task 9 Remote Config Test Fix summary: Task 9 fix updated the in-process remote control app test to snapshot local.configPath before runCli and assert it remains unchanged; focused tests passed and commit c9f08ac was created. tags: [] -related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md] +related: [facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/project/remote_control_review_outcome.md] keywords: [] createdAt: '2026-05-20T15:14:33.118Z' updatedAt: '2026-05-20T15:14:33.118Z' diff --git a/.brv/context-tree/facts/project/autocommit_hooks_for_memory_files.md b/.brv/context-tree/facts/project/autocommit_hooks_for_memory_files.md index 34da1c4b..f4c6037d 100644 --- a/.brv/context-tree/facts/project/autocommit_hooks_for_memory_files.md +++ b/.brv/context-tree/facts/project/autocommit_hooks_for_memory_files.md @@ -2,7 +2,7 @@ title: Autocommit Hooks for Memory Files summary: User requested hooks that autocommit memory files to make them less of a nuisance. tags: [] -related: [] +related: [facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md, facts/project/curation_context_facts.md, facts/project/curation_input_notes.md] keywords: [] createdAt: '2026-05-21T11:39:40.128Z' updatedAt: '2026-05-21T11:39:40.128Z' diff --git a/.brv/context-tree/facts/project/branch_handling_without_worktree.md b/.brv/context-tree/facts/project/branch_handling_without_worktree.md new file mode 100644 index 00000000..d8c9996e --- /dev/null +++ b/.brv/context-tree/facts/project/branch_handling_without_worktree.md @@ -0,0 +1,37 @@ +--- +title: Branch Handling Without Worktree +summary: The user switched branches and wants subsequent work to proceed without using a worktree. +tags: [] +related: [] +keywords: [] +createdAt: '2026-05-27T09:46:08.810Z' +updatedAt: '2026-05-27T09:46:08.810Z' +--- +## Reason +Capture the user instruction about operating on the switched branch directly + +## Raw Concept +**Task:** +Record the branch state and execution preference for future operations + +**Changes:** +- Switched branch +- Continue without a worktree + +**Flow:** +branch switched -> continue operations directly on the branch + +**Timestamp:** 2026-05-27T09:45:53.888Z + +**Author:** user + +## Narrative +### Structure +A short operational instruction that affects how future work should be performed in the repository. + +### Highlights +Indicates the active branch has changed and work should proceed without worktree isolation. + +## Facts +- **branch_state**: The user switched the branch [project] +- **worktree_usage**: Proceed without a worktree [project] diff --git a/.brv/context-tree/facts/project/context.md b/.brv/context-tree/facts/project/context.md index b91b05a4..d12c855b 100644 --- a/.brv/context-tree/facts/project/context.md +++ b/.brv/context-tree/facts/project/context.md @@ -1,3 +1,6 @@ +--- +related: [facts/conventions/context.md, facts/project/curation_runtime_conventions.md] +--- # Topic: project ## Overview diff --git a/.brv/context-tree/facts/project/curate_rlm_workflow_context.md b/.brv/context-tree/facts/project/curate_rlm_workflow_context.md deleted file mode 100644 index 7206c2e2..00000000 --- a/.brv/context-tree/facts/project/curate_rlm_workflow_context.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Curate RLM workflow context -summary: 'RLM curation run requirements: use recon results, prefer single-pass for small contexts, preserve facts, verify applied file paths, and report final status from curate results.' -tags: [] -related: [] -keywords: [] -createdAt: '2026-05-25T11:56:56.637Z' -updatedAt: '2026-05-25T11:56:56.637Z' ---- -## Reason -Capture durable curation workflow requirements and execution order from the provided RLM context. - -## Raw Concept -**Task:** -Document the required RLM curation workflow for this run. - -**Changes:** -- Use precomputed recon output only -- Proceed directly to extraction or single-pass curation -- Verify applied file paths from curate results -- Report final status with summary and verification - -**Flow:** -precomputed recon -> extract or single-pass curate -> verify applied file paths -> report status - -**Timestamp:** 2026-05-25T11:56:48.655Z - -**Author:** ByteRover context engineer - -## Narrative -### Structure -This context captures run-specific RLM instructions, including the required execution order, timeout rule for mapExtract, and verification constraints. - -### Dependencies -Depends on precomputed recon metadata and history variables supplied for the current task. - -### Highlights -Suggested mode is single-pass with one chunk. The run must avoid rereading raw context and must verify output via curate application metadata. - -## Facts -- **curation_mode**: The current curation run uses RLM approach with precomputed recon and single-pass mode. [convention] -- **recon_usage**: For single-pass contexts, do not call tools.curation.recon again. [convention] -- **mapextract_timeout**: When mapExtract is used in code_exec, the timeout must be set to 300000 on the tool call itself. [convention] -- **verification_method**: Verification for curation should use result.applied[].filePath and not readFile. [convention] -- **task_id_variable**: The task id for this run is provided as a bare variable named __taskId_c163554f_d585_4615_9584_4e2b6c8d2fec. [other] diff --git a/.brv/context-tree/facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md b/.brv/context-tree/facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md index 0c9ac120..e2da0f74 100644 --- a/.brv/context-tree/facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md +++ b/.brv/context-tree/facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md @@ -6,7 +6,7 @@ type: synthesis title: Curation itself is treated as durable project infrastructure summary: The knowledge base records curation rules and project facts as first-class runtime knowledge, not chat-only notes. tags: [curation, runtime, knowledge-base, conventions] -related: [facts/project/curation_context_facts.md, facts/project/curation_input_notes.md] +related: [facts/project/curation_context_facts.md, facts/project/curation_input_notes.md, facts/project/autocommit_hooks_for_memory_files.md] keywords: [upsert, durable, facts, narrative, verification, knowledge, curation, policy] createdAt: '2026-05-21T23:23:26.222Z' updatedAt: '2026-05-21T23:23:26.222Z' diff --git a/.brv/context-tree/facts/project/curation_context_facts.md b/.brv/context-tree/facts/project/curation_context_facts.md index 0131c07b..8f837503 100644 --- a/.brv/context-tree/facts/project/curation_context_facts.md +++ b/.brv/context-tree/facts/project/curation_context_facts.md @@ -2,7 +2,7 @@ title: Curation Context Facts summary: Project facts and runtime conventions extracted from the curation context, including task metadata and processing guidance. tags: [] -related: [facts/project/curation_input_notes.md, facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md] +related: [facts/project/curation_input_notes.md, facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md, facts/project/autocommit_hooks_for_memory_files.md] keywords: [] createdAt: '2026-05-20T19:28:15.751Z' updatedAt: '2026-05-20T19:28:15.751Z' diff --git a/.brv/context-tree/facts/project/curation_input_notes.md b/.brv/context-tree/facts/project/curation_input_notes.md index b2f9e4d0..e50d06c8 100644 --- a/.brv/context-tree/facts/project/curation_input_notes.md +++ b/.brv/context-tree/facts/project/curation_input_notes.md @@ -2,7 +2,7 @@ title: Curation Input Notes summary: Captured the provided curation input as durable project knowledge. tags: [] -related: [facts/project/curation_context_facts.md, facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md] +related: [facts/project/curation_context_facts.md, facts/project/curation-itself-is-treated-as-durable-project-infrastructure.md, facts/project/autocommit_hooks_for_memory_files.md] keywords: [] createdAt: '2026-05-20T17:11:58.075Z' updatedAt: '2026-05-20T17:11:58.075Z' diff --git a/.brv/context-tree/facts/project/curation_runtime_conventions.md b/.brv/context-tree/facts/project/curation_runtime_conventions.md index 0bdce5b8..c1b8ea14 100644 --- a/.brv/context-tree/facts/project/curation_runtime_conventions.md +++ b/.brv/context-tree/facts/project/curation_runtime_conventions.md @@ -1,7 +1,7 @@ --- -consolidated_at: '2026-05-25T11:38:36.975Z' -consolidated_from: [{date: '2026-05-25T11:38:36.975Z', path: facts/conventions/rlm_curation_run_requirements.md, reason: 'These files all document the same RLM curation runtime policy: precomputed recon, single-pass handling for small contexts, no raw-context printing, mapExtract timeout/taskId rules, UPSERT workflow, and verification via result.applied[].filePath. They are substantially overlapping and should be consolidated into one canonical requirements/conventions note.'}, {date: '2026-05-25T11:38:36.975Z', path: facts/conventions/rlm_curation_run_conventions.md, reason: 'These files all document the same RLM curation runtime policy: precomputed recon, single-pass handling for small contexts, no raw-context printing, mapExtract timeout/taskId rules, UPSERT workflow, and verification via result.applied[].filePath. They are substantially overlapping and should be consolidated into one canonical requirements/conventions note.'}, {date: '2026-05-25T11:38:36.975Z', path: facts/conventions/rlm_curation_single_pass_mode.md, reason: 'These files all document the same RLM curation runtime policy: precomputed recon, single-pass handling for small contexts, no raw-context printing, mapExtract timeout/taskId rules, UPSERT workflow, and verification via result.applied[].filePath. They are substantially overlapping and should be consolidated into one canonical requirements/conventions note.'}, {date: '2026-05-25T11:38:36.975Z', path: facts/conventions/rlm_single_pass_curation_run_requirements.md, reason: 'These files all document the same RLM curation runtime policy: precomputed recon, single-pass handling for small contexts, no raw-context printing, mapExtract timeout/taskId rules, UPSERT workflow, and verification via result.applied[].filePath. They are substantially overlapping and should be consolidated into one canonical requirements/conventions note.'}, {date: '2026-05-25T11:38:36.975Z', path: facts/project/rlm_curation_run_constraints.md, reason: 'These files all document the same RLM curation runtime policy: precomputed recon, single-pass handling for small contexts, no raw-context printing, mapExtract timeout/taskId rules, UPSERT workflow, and verification via result.applied[].filePath. They are substantially overlapping and should be consolidated into one canonical requirements/conventions note.'}] -related: [facts/project/console_logging_policy.md] +consolidated_at: '2026-05-27T10:03:18.780Z' +consolidated_from: [{date: '2026-05-27T10:03:18.780Z', path: facts/curation_runtime_conventions/rlm_curation_workflow.md, reason: 'These files describe the same canonical RLM curation workflow with overlapping instructions on precomputed recon, single-pass handling, chunked mapExtract fallback, bare taskId usage, timeout 300000, no raw-context printing, verification via applied file paths, and UPSERT preference. The full note and the existing project convention file are redundant representations of one workflow policy, so they should be consolidated into the richer canonical convention note.'}, {date: '2026-05-27T10:03:18.780Z', path: facts/project/curate_rlm_workflow_context.md, reason: 'These files describe the same canonical RLM curation workflow with overlapping instructions on precomputed recon, single-pass handling, chunked mapExtract fallback, bare taskId usage, timeout 300000, no raw-context printing, verification via applied file paths, and UPSERT preference. The full note and the existing project convention file are redundant representations of one workflow policy, so they should be consolidated into the richer canonical convention note.'}] +related: [facts/project/context.md] --- # Title: Curation Runtime Conventions @@ -39,3 +39,13 @@ This guidance has appeared in multiple curation sessions over time; the canonica - Precomputed recon is the source of truth for mode selection. - Verification should rely on curated result output, not rereading files. - Session variables may include context, history, metadata, and task ID names that should be used directly. + +## Additions to Preserve from Overlapping Files +- Earlier sessions recorded the exact required workflow as: recon -> mapExtract -> dedup/group -> curate -> verify applied file paths. +- Verification must rely on result.applied[].filePath and not on readFile. +- Any code_exec call containing mapExtract must set timeout to 300000 at the outer code_exec level. +- mapExtract taskId must be passed as a bare variable. +- do not print raw context; do not call recon again when precomputed recon is already available. +- use tools.curation.groupBySubject() and tools.curation.dedup() to organize extractions. +- Later guidance reinforced canonical wording around UPSERT preference and checking result.summary.failed. +- For small pre-reconciled contexts, proceed directly in single-pass mode; chunked extraction is for larger contexts. diff --git a/.brv/context-tree/facts/project/greptile_review_comments.md b/.brv/context-tree/facts/project/greptile_review_comments.md index 10678093..d4c48e72 100644 --- a/.brv/context-tree/facts/project/greptile_review_comments.md +++ b/.brv/context-tree/facts/project/greptile_review_comments.md @@ -2,7 +2,7 @@ title: Greptile Review Comments summary: Two remaining Greptile review comments were noted, along with passing PR checks. tags: [] -related: [facts/project/pr_65_fixes_and_verification.md, facts/project/pr_71_completion_fix_outcome.md, facts/project/remote_control_review_outcome.md] +related: [facts/project/pr_65_fixes_and_verification.md, facts/project/pr_71_completion_fix_outcome.md, facts/project/remote_control_review_outcome.md, facts/project/task_6_spec_review_after_envelope_fix.md] keywords: [] createdAt: '2026-05-20T19:26:36.972Z' updatedAt: '2026-05-20T19:26:36.972Z' diff --git a/.brv/context-tree/facts/project/pr_65_fixes_and_verification.md b/.brv/context-tree/facts/project/pr_65_fixes_and_verification.md index 87f5e6b9..9315cb0e 100644 --- a/.brv/context-tree/facts/project/pr_65_fixes_and_verification.md +++ b/.brv/context-tree/facts/project/pr_65_fixes_and_verification.md @@ -2,7 +2,7 @@ title: PR 65 Fixes and Verification summary: 'PR #65 fix for Pi legacy remote settings and auth-flow object isolation, with verification passing locally and on push hook' tags: [] -related: [facts/project/pr_71_completion_fix_outcome.md, facts/project/remote_control_review_outcome.md, facts/project/greptile_review_comments.md] +related: [facts/project/pr_71_completion_fix_outcome.md, facts/project/remote_control_review_outcome.md, facts/project/greptile_review_comments.md, facts/project/task_6_spec_review_after_envelope_fix.md] keywords: [] createdAt: '2026-05-20T19:06:59.769Z' updatedAt: '2026-05-20T19:06:59.769Z' diff --git a/.brv/context-tree/facts/project/pr_71_completion_fix_outcome.md b/.brv/context-tree/facts/project/pr_71_completion_fix_outcome.md index c86f2d85..72c1a95e 100644 --- a/.brv/context-tree/facts/project/pr_71_completion_fix_outcome.md +++ b/.brv/context-tree/facts/project/pr_71_completion_fix_outcome.md @@ -1,7 +1,7 @@ --- consolidated_at: '2026-05-21T23:23:02.290Z' consolidated_from: [{date: '2026-05-21T23:23:02.290Z', path: facts/project/pr_71_completion_commands_sync.md, reason: 'These two PR #71 outcome files describe the same completion-related fix and verification cycle, with one focusing on command parity/stderr suppression and the other on the PowerShell sentinel/endpoint normalization issue. They are complementary parts of the same PR outcome and should be merged into a single consolidated PR #71 completion fixes note.'}] -related: [facts/project/pr_65_fixes_and_verification.md, facts/project/remote_control_review_outcome.md, facts/project/greptile_review_comments.md] +related: [facts/project/pr_65_fixes_and_verification.md, facts/project/remote_control_review_outcome.md, facts/project/greptile_review_comments.md, facts/project/task_6_spec_review_after_envelope_fix.md] --- # Title: PR 71 Completion Fix Outcome diff --git a/.brv/context-tree/facts/project/remote_control_review_outcome.md b/.brv/context-tree/facts/project/remote_control_review_outcome.md index c09c2307..18341343 100644 --- a/.brv/context-tree/facts/project/remote_control_review_outcome.md +++ b/.brv/context-tree/facts/project/remote_control_review_outcome.md @@ -2,7 +2,7 @@ title: Remote Control Review Outcome summary: 'Approved remote control review: server-side redaction fixed, regression tests added, CLI pending auth wording accepted, with residual spec mismatch noted.' tags: [] -related: [facts/project/pr_65_fixes_and_verification.md, facts/project/pr_71_completion_fix_outcome.md, facts/project/greptile_review_comments.md] +related: [facts/project/pr_65_fixes_and_verification.md, facts/project/pr_71_completion_fix_outcome.md, facts/project/greptile_review_comments.md, facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/task_6_spec_review_after_envelope_fix.md] keywords: [] createdAt: '2026-05-20T15:41:00.585Z' updatedAt: '2026-05-20T15:41:00.585Z' diff --git a/.brv/context-tree/facts/project/task_6_spec_review_after_envelope_fix.md b/.brv/context-tree/facts/project/task_6_spec_review_after_envelope_fix.md index bec95dc0..1687439a 100644 --- a/.brv/context-tree/facts/project/task_6_spec_review_after_envelope_fix.md +++ b/.brv/context-tree/facts/project/task_6_spec_review_after_envelope_fix.md @@ -2,7 +2,7 @@ title: Task 6 Spec Review After Envelope Fix summary: 'Task 6 review approved: CLI and dispatch align on { caplet, request }, config path handling remains local-only, and tests cover remote control behavior.' tags: [] -related: [architecture/remote_control/remote_control_api_shape.md, architecture/remote_control/task_1_spec_compliance_review.md, architecture/remote_control/cli_remote_mode_selection.md, facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md] +related: [architecture/remote_control/remote_control_api_shape.md, architecture/remote_control/task_1_spec_compliance_review.md, architecture/remote_control/cli_remote_mode_selection.md, facts/conventions/task_3_spec_review_fix.md, facts/conventions/task_5_regression_test_update.md, facts/conventions/task_6_review_outcome.md, facts/conventions/task_7_review_outcome.md, facts/conventions/task_7_remote_mutation_routing_review.md, facts/conventions/task_9_remote_config_test_fix.md, facts/project/remote_control_review_outcome.md, facts/project/pr_65_fixes_and_verification.md, facts/project/greptile_review_comments.md, facts/project/pr_71_completion_fix_outcome.md] keywords: [] createdAt: '2026-05-20T14:11:18.102Z' updatedAt: '2026-05-20T14:11:18.102Z' diff --git a/.brv/context-tree/project/rlm_curation_workflow/context.md b/.brv/context-tree/project/rlm_curation_workflow/context.md deleted file mode 100644 index d8a60b69..00000000 --- a/.brv/context-tree/project/rlm_curation_workflow/context.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -related: [project/pr_78_review_outcome/pr_78_review_outcome.md] ---- -# Topic: rlm_curation_workflow - -## Overview -Covers the curation workflow for this session and the completion behavior contract for caplets commands. - -## Key Concepts -- single-pass -- completion contract -- call-tool -- get-tool -- get-prompt -- safe fallback behavior diff --git a/.brv/context-tree/project/rlm_curation_workflow/curation-workflow-is-treated-as-durable-project-infrastructure.md b/.brv/context-tree/project/rlm_curation_workflow/curation-workflow-is-treated-as-durable-project-infrastructure.md new file mode 100644 index 00000000..f2fbe043 --- /dev/null +++ b/.brv/context-tree/project/rlm_curation_workflow/curation-workflow-is-treated-as-durable-project-infrastructure.md @@ -0,0 +1,22 @@ +--- +confidence: 0.98 +sources: [facts/_index.md, project/_index.md] +synthesized_at: '2026-05-26T19:23:43.119Z' +type: synthesis +title: Curation workflow is treated as durable project infrastructure +summary: The same recon-first, verify-by-file-path curation process is codified as both a facts policy and a project workflow. +tags: [curation, workflow, verification, facts, project] +related: [] +keywords: [recon, upsert, mapextract, dedup, verify, filePath, failed, context] +createdAt: '2026-05-26T19:23:43.119Z' +updatedAt: '2026-05-26T19:23:43.119Z' +--- + +# Curation workflow is treated as durable project infrastructure + +Across facts and project, curation is not chat-only: it is a durable workflow with recon-first analysis, single-pass vs. chunked extraction, dedup/grouping, UPSERT-first updates, and verification via `result.applied[].filePath` plus `result.summary.failed === 0`. + +## Evidence + +- **facts**: Runtime curation guardrails require single-pass mode for compact contexts, chunked `mapExtract` only for larger contexts, no raw context printing, bare `taskId`, outer `code_exec` timeout 300000 ms, UPSERT preference, and verification through `result.applied[].filePath` and `result.summary.failed`. +- **project**: The curation workflow is described as recon-first, then single-pass or chunked extraction, then dedup/groupBySubject, with verification using `result.applied[].filePath` and no rereading files just to confirm. diff --git a/.brv/context-tree/project/rlm_curation_workflow/rlm_curation_workflow.md b/.brv/context-tree/project/rlm_curation_workflow/rlm_curation_workflow.md index 5154a32c..945069c1 100644 --- a/.brv/context-tree/project/rlm_curation_workflow/rlm_curation_workflow.md +++ b/.brv/context-tree/project/rlm_curation_workflow/rlm_curation_workflow.md @@ -1,66 +1,5 @@ --- -consolidated_at: '2026-05-25T11:38:47.792Z' -consolidated_from: [{date: '2026-05-25T11:38:47.792Z', path: project/rlm_curation_workflow/current_branch_completion_restore.md, reason: 'These two files substantially overlap on the RLM curation workflow and completion behavior guidance. The latter is the richer and more complete source, while the branch restore note includes implementation-specific completion details and verification outcomes that fit naturally into the workflow topic; combining them will reduce duplication and keep one canonical workflow record.'}] -related: [project/pr_78_review_outcome/pr_78_review_outcome.md] +consolidated_at: '2026-05-27T10:03:24.714Z' +consolidated_from: [{date: '2026-05-27T10:03:24.714Z', path: project/rlm_curation_workflow/context.md, reason: 'These files are all the same topic with heavy overlap: the short context.md is a subset, and the abstract/overview duplicate the same recon-first single-pass/chunked workflow plus verification rules. The richest file is the markdown topic file, and it already contains the most complete structured content, so the related files should be consolidated into it to avoid redundant parallel representations.'}, {date: '2026-05-27T10:03:24.714Z', path: project/rlm_curation_workflow/rlm_curation_workflow.abstract.md, reason: 'These files are all the same topic with heavy overlap: the short context.md is a subset, and the abstract/overview duplicate the same recon-first single-pass/chunked workflow plus verification rules. The richest file is the markdown topic file, and it already contains the most complete structured content, so the related files should be consolidated into it to avoid redundant parallel representations.'}, {date: '2026-05-27T10:03:24.714Z', path: project/rlm_curation_workflow/rlm_curation_workflow.overview.md, reason: 'These files are all the same topic with heavy overlap: the short context.md is a subset, and the abstract/overview duplicate the same recon-first single-pass/chunked workflow plus verification rules. The richest file is the markdown topic file, and it already contains the most complete structured content, so the related files should be consolidated into it to avoid redundant parallel representations.'}] --- -# Title: RLM Curation Workflow - -## Overview -Covers the curation workflow for this session, the completion behavior contract for caplets commands, and the branch-local restoration of split-target CLI completion support. - -## Key Concepts -- single-pass -- chunked extraction -- recon-first analysis -- completion contract -- call-tool -- get-tool -- get-prompt -- safe fallback behavior -- split target support -- dotted target compatibility -- regression tests -- verification via applied file paths - -## Workflow / Rules -- Use precomputed recon output to select single-pass mode. -- Proceed directly to extraction when single-pass is suggested. -- Use mapExtract only for chunked extraction when needed. -- Pass taskId as a bare variable, not a string. -- Any code_exec call containing mapExtract MUST use timeout: 300000 on the code_exec tool call itself. -- Verify curation via result.applied[].filePath; do not reread files for verification. -- Do not print raw context. -- Completion behavior for call-tool, get-tool, and get-prompt must distinguish backend IDs from tool names based on prefix. -- Failures and timeouts must degrade to safe fallbacks without surfacing errors. -- Local hidden __complete now uses CapletsEngine.completeCliWords. - -## Highlights -- For small contexts, single-pass curation is the preferred path after recon. -- For larger contexts, chunked extraction should be followed by dedup and groupBySubject before curation. -- Split targets for get-tool, call-tool, and get-prompt were restored while preserving dotted completion compatibility. -- Regression tests were added for split tool calls, split prompt calls, split/dotted completion, and local OpenAPI completion discovery. -- Verification passed with focused tests, formatting, lint, and full pnpm verify. - -## Facts -- **curation_mode**: Single-pass mode should be used when recon suggests single-pass. [convention] -- **mapextract_taskid**: When using mapExtract in curation, the taskId must be passed as a bare variable. [convention] -- **mapextract_timeout**: Any code_exec call containing mapExtract must use timeout: 300000 on the code_exec tool call itself. [convention] -- **verification_method**: Verification should use result.applied[].filePath and should not call readFile for verification. [convention] -- **branch_location**: The work was implemented in the current branch at /home/ianpascoe/code/caplets instead of the previous worktree. [project] -- **completion_implementation**: Local hidden __complete now uses CapletsEngine.completeCliWords. [project] -- **split_target_support**: get-tool, call-tool, and get-prompt accept split targets. [project] -- **dotted_target_support**: Existing dotted targets remain supported. [project] -- **completion_suggestions**: Completion suggests split-form backend IDs and unqualified tool/prompt names while preserving dotted completion. [project] -- **regression_tests**: Regression tests were added for split tool calls, split prompt calls, split/dotted completion, and local OpenAPI completion discovery. [project] -- **documentation_updates**: README, completion spec, and .changeset/local-completion-split-tools.md were updated. [project] -- **focused_test_result**: pnpm --filter @caplets/core test -- test/cli-completion.test.ts test/cli.test.ts passed with 456 tests. [project] -- **format_check**: pnpm format:check passed. [project] -- **lint_check**: pnpm lint passed. [project] -- **verify_result**: pnpm verify passed fully with 39 test files and 536 tests. [project] -- **dirty_worktree_note**: Only pre-existing unrelated .brv remained dirty alongside the implementation files. [project] - -## Cross-References -- project/rlm_curation_workflow/context.md -- facts/conventions/task_7_remote_mutation_routing_review.md -- facts/project/rlm_curation_workflow.md -- project/rlm_curation_workflow/current_branch_completion_restore.md \ No newline at end of file +Preserve the full content of project/rlm_curation_workflow/rlm_curation_workflow.md as the base. Add the unique details from project/rlm_curation_workflow/context.md (short topic overview and key concepts), project/rlm_curation_workflow/rlm_curation_workflow.abstract.md (one-sentence synthesis of recon choosing single-pass vs chunked extraction and verification via applied file paths), and project/rlm_curation_workflow/rlm_curation_workflow.overview.md (expanded bullets covering: recon-first flow; precomputed recon output; mapExtract/dedup/groupBySubject/recordProgress/tools.curate helpers; exact verification convention using result.applied[].filePath and result.summary.failed; no raw-context printing; .brv/ local memory-state note; taskId bare-variable rule; outer code_exec timeout 300000 when mapExtract is used; safe-fallback completion behavior; and the branch-local caplet completion details including split target support for get-tool/call-tool/get-prompt, dotted target compatibility, regression test coverage, and CapletsEngine.completeCliWords). Keep all unique facts, rules, highlights, and cross-references verbatim where possible, deduplicating repeated content. \ No newline at end of file diff --git a/.brv/context-tree/project/verification-first-workflows-are-the-project-s-shared-safety-model.md b/.brv/context-tree/project/verification-first-workflows-are-the-project-s-shared-safety-model.md new file mode 100644 index 00000000..9cbbbd44 --- /dev/null +++ b/.brv/context-tree/project/verification-first-workflows-are-the-project-s-shared-safety-model.md @@ -0,0 +1,23 @@ +--- +confidence: 0.98 +sources: [docs/_index.md, facts/_index.md, project/_index.md] +synthesized_at: '2026-05-27T10:03:46.002Z' +type: synthesis +title: Verification-first workflows are the project’s shared safety model +summary: Across planning, curation, and release, changes are only treated as complete after explicit verification, not workflow success alone. +tags: [verification, workflow, release, curation] +related: [] +keywords: [verification, tests, pnpm verify, publish-state, applied-file-paths, curation, completion, release-gating] +createdAt: '2026-05-27T10:03:46.002Z' +updatedAt: '2026-05-27T10:03:46.002Z' +--- + +# Verification-first workflows are the project’s shared safety model + +The same verification-first pattern appears in docs, facts, and project: planning docs emphasize explicit checks before completion, the curation workflow requires `result.summary.failed === 0` and applied file-path verification, and release automation waits for verified publish state rather than just successful workflow runs. + +## Evidence + +- **docs**: Planning and release docs repeatedly frame work as verification-first: completion fixes are validated with focused tests and `pnpm verify`, and release publishing is gated by verified upstream publish state rather than workflow success alone. +- **facts**: The curation/runtime conventions require recon-first analysis, then curate, then verify through `result.applied[].filePath` and `result.summary.failed === 0`, and related review notes preserve explicit test/commit evidence. +- **project**: The RLM curation workflow summary says verification should use `result.summary.failed === 0` and `result.applied[].filePath`, not rereading files, and the PR 78 review outcome preserved a clean verification state. diff --git a/.changeset/gentle-peaches-make.md b/.changeset/gentle-peaches-make.md new file mode 100644 index 00000000..d13ff91d --- /dev/null +++ b/.changeset/gentle-peaches-make.md @@ -0,0 +1,8 @@ +--- +"@caplets/opencode": patch +"@caplets/core": patch +"caplets": patch +"@caplets/pi": patch +--- + +Update dependencies diff --git a/.changeset/lsp-registry-caplet.md b/.changeset/lsp-registry-caplet.md new file mode 100644 index 00000000..d028474c --- /dev/null +++ b/.changeset/lsp-registry-caplet.md @@ -0,0 +1,5 @@ +--- +"caplets": patch +--- + +Add a polished LSP registry Caplet backed by `language-server-mcp` and include it in the coding-agent toolkit examples. diff --git a/README.md b/README.md index aee68121..454dbe2a 100644 --- a/README.md +++ b/README.md @@ -570,8 +570,8 @@ This repository includes polished working examples under [`caplets/`](caplets/): - `deepwiki`: Repository-focused documentation and architecture context through DeepWiki MCP. - `sourcegraph`: Cross-repository code search and navigation through Sourcegraph MCP. - `playwright`: Headless browser automation for frontend inspection and testing through Playwright MCP. +- `lsp`: Language Server Protocol-backed code intelligence through `language-server-mcp`. - `coding-agent-toolkit`: A CapletSet that bundles high-value coding-agent examples; source children are symlinks to canonical top-level examples and installed copies are materialized as self-contained files/directories. -- `github-cli`: Pre-existing secondary read-oriented GitHub workflows through the `gh` CLI; prefer the canonical `github` MCP example for the polished GitHub integration. GraphQL is intentionally skipped in this showcase batch so the examples can focus on HTTP, OpenAPI, MCP, CLI, and CapletSet coverage without duplicating GitHub or GitLab surfaces. diff --git a/caplets/ast-grep/CAPLET.md b/caplets/ast-grep/CAPLET.md index ae1c704b..3b5ff0f6 100644 --- a/caplets/ast-grep/CAPLET.md +++ b/caplets/ast-grep/CAPLET.md @@ -1,601 +1,21 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json -name: ast-grep CLI -description: Search, scan, test, rewrite, and scaffold ast-grep rules through curated CLI tools. +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +name: ast-grep +description: Search, scan, test, rewrite, and scaffold ast-grep rules through curated MCP tools. tags: - - cli + - mcp - code - search -cliTools: - timeoutMs: 120000 - maxOutputBytes: 1000000 - actions: - version: - description: Print the installed ast-grep version. - command: ast-grep - args: - - --version - annotations: - readOnlyHint: true - run_pattern_text: - description: Search one path with one ast-grep pattern and return text output. - command: ast-grep - args: - - run - - --pattern - - $input.pattern - - --lang - - $input.lang - - --color - - never - - --heading - - never - - $input.path - inputSchema: - type: object - properties: - pattern: - type: string - lang: - type: string - path: - type: string - required: - - pattern - - lang - - path - annotations: - readOnlyHint: true - run_pattern_json: - description: Search one path with one ast-grep pattern and return compact JSON output. - command: ast-grep - args: - - run - - --pattern - - $input.pattern - - --lang - - $input.lang - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - pattern: - type: string - lang: - type: string - path: - type: string - required: - - pattern - - lang - - path - output: - type: json - annotations: - readOnlyHint: true - run_pattern_debug_query: - description: Print the parsed tree-sitter query AST for a pattern and language. - command: ast-grep - args: - - run - - --pattern - - $input.pattern - - --lang - - $input.lang - - --debug-query - - ast - - --color - - never - - $input.path - inputSchema: - type: object - properties: - pattern: - type: string - lang: - type: string - path: - type: string - required: - - pattern - - lang - - path - annotations: - readOnlyHint: true - run_pattern_with_context: - description: Search one path with one pattern and include context lines around each match. - command: ast-grep - args: - - run - - --pattern - - $input.pattern - - --lang - - $input.lang - - --context - - $input.context - - --color - - never - - $input.path - inputSchema: - type: object - properties: - pattern: - type: string - lang: - type: string - context: - type: integer - path: - type: string - required: - - pattern - - lang - - context - - path - annotations: - readOnlyHint: true - run_pattern_with_globs_json: - description: Search one path with one pattern and one include or exclude glob, returning compact JSON output. - command: ast-grep - args: - - run - - --pattern - - $input.pattern - - --lang - - $input.lang - - --globs - - $input.globs - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - pattern: - type: string - lang: - type: string - globs: - type: string - path: - type: string - required: - - pattern - - lang - - globs - - path - output: - type: json - annotations: - readOnlyHint: true - run_rewrite_apply_all: - description: Apply one ast-grep rewrite to all matches without confirmation. - command: ast-grep - args: - - run - - --pattern - - $input.pattern - - --rewrite - - $input.rewrite - - --lang - - $input.lang - - --update-all - - $input.path - inputSchema: - type: object - properties: - pattern: - type: string - rewrite: - type: string - lang: - type: string - path: - type: string - required: - - pattern - - rewrite - - lang - - path - annotations: - destructiveHint: true - scan_project: - description: Scan the current ast-grep project configuration and return text diagnostics. - command: ast-grep - args: - - scan - - --color - - never - - $input.path - inputSchema: - type: object - properties: - path: - type: string - required: - - path - annotations: - readOnlyHint: true - scan_project_json: - description: Scan with the project configuration and return compact JSON output. - command: ast-grep - args: - - scan - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - path: - type: string - required: - - path - output: - type: json - annotations: - readOnlyHint: true - scan_project_sarif: - description: Scan with the project configuration and output SARIF diagnostics. - command: ast-grep - args: - - scan - - --format - - sarif - - --color - - never - - $input.path - inputSchema: - type: object - properties: - path: - type: string - required: - - path - output: - type: json - annotations: - readOnlyHint: true - scan_project_github: - description: Scan with the project configuration and output GitHub annotation format. - command: ast-grep - args: - - scan - - --format - - github - - --color - - never - - $input.path - inputSchema: - type: object - properties: - path: - type: string - required: - - path - annotations: - readOnlyHint: true - openWorldHint: true - scan_with_config_json: - description: Scan one path with an explicit sgconfig.yml path and return compact JSON output. - command: ast-grep - args: - - scan - - --config - - $input.config - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - config: - type: string - path: - type: string - required: - - config - - path - output: - type: json - annotations: - readOnlyHint: true - scan_rule_json: - description: Scan one path with one rule file and return compact JSON output. - command: ast-grep - args: - - scan - - --rule - - $input.rule - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - rule: - type: string - path: - type: string - required: - - rule - - path - output: - type: json - annotations: - readOnlyHint: true - scan_inline_rules_json: - description: Scan one path with inline rule YAML text and return compact JSON output. - command: ast-grep - args: - - scan - - --inline-rules - - $input.rules - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - rules: - type: string - path: - type: string - required: - - rules - - path - output: - type: json - annotations: - readOnlyHint: true - scan_filter_json: - description: Scan one path with project rules whose IDs match a regex and return compact JSON output. - command: ast-grep - args: - - scan - - --filter - - $input.filter - - --json=compact - - --color - - never - - $input.path - inputSchema: - type: object - properties: - filter: - type: string - path: - type: string - required: - - filter - - path - output: - type: json - annotations: - readOnlyHint: true - scan_inspect_summary: - description: Scan one path and print ast-grep discovery summary inspection output on stderr. - command: ast-grep - args: - - scan - - --inspect - - summary - - --color - - never - - $input.path - inputSchema: - type: object - properties: - path: - type: string - required: - - path - annotations: - readOnlyHint: true - scan_rewrite_apply_all: - description: Apply all configured ast-grep rewrites without confirmation. - command: ast-grep - args: - - scan - - --update-all - - $input.path - inputSchema: - type: object - properties: - path: - type: string - required: - - path - annotations: - destructiveHint: true - test_rules: - description: Run ast-grep rule tests with the default project configuration. - command: ast-grep - args: - - test - - --color - - never - annotations: - readOnlyHint: true - test_rules_with_config: - description: Run ast-grep rule tests with an explicit project configuration. - command: ast-grep - args: - - test - - --config - - $input.config - - --color - - never - inputSchema: - type: object - properties: - config: - type: string - required: - - config - annotations: - readOnlyHint: true - test_rules_filter: - description: Run ast-grep rule tests filtered by a glob pattern. - command: ast-grep - args: - - test - - --filter - - $input.filter - - --color - - never - inputSchema: - type: object - properties: - filter: - type: string - required: - - filter - annotations: - readOnlyHint: true - test_rules_skip_snapshots: - description: Check ast-grep test code validity without checking snapshot output. - command: ast-grep - args: - - test - - --skip-snapshot-tests - - --color - - never - annotations: - readOnlyHint: true - test_rules_update_snapshots: - description: Update all changed ast-grep test snapshots. - command: ast-grep - args: - - test - - --update-all - - --color - - never - annotations: - destructiveHint: true - new_project_yes: - description: Scaffold a new ast-grep project with default answers. - command: ast-grep - cwd: $input.cwd - args: - - new - - project - - --yes - inputSchema: - type: object - properties: - cwd: - type: string - required: - - cwd - annotations: - destructiveHint: true - new_rule_yes: - description: Scaffold a new ast-grep rule with default answers. - command: ast-grep - cwd: $input.cwd - args: - - new - - rule - - $input.name - - --lang - - $input.lang - - --yes - inputSchema: - type: object - properties: - name: - type: string - lang: - type: string - cwd: - type: string - required: - - name - - lang - - cwd - annotations: - destructiveHint: true - new_test_yes: - description: Scaffold a new ast-grep rule test with default answers. - command: ast-grep - cwd: $input.cwd - args: - - new - - test - - $input.name - - --lang - - $input.lang - - --yes - inputSchema: - type: object - properties: - name: - type: string - lang: - type: string - cwd: - type: string - required: - - name - - lang - - cwd - annotations: - destructiveHint: true - new_util_yes: - description: Scaffold a new ast-grep utility rule with default answers. - command: ast-grep - cwd: $input.cwd - args: - - new - - util - - $input.name - - --lang - - $input.lang - - --yes - inputSchema: - type: object - properties: - name: - type: string - lang: - type: string - cwd: - type: string - required: - - name - - lang - - cwd - annotations: - destructiveHint: true +mcpServer: + command: npx + args: [-y, ast-grep-mcp] --- -# ast-grep CLI +# ast-grep MCP Use this Caplet to expose ast-grep's structural search, scan, rule testing, rewrite, and scaffold workflows without giving an agent unrestricted shell access. -The manifest uses the full `ast-grep` executable instead of `sg` because `sg` can collide with the Linux `setgroups` command. Install ast-grep separately with npm, Cargo, Homebrew, or another supported package manager before using these tools. - -## Coverage - -- `run_*` actions cover one-off structural search, JSON output, query debugging, context output, glob-filtered search, and apply-all rewrites. -- `scan_*` actions cover project scans, explicit config scans, single-rule scans, inline-rule scans, filter scans, SARIF/GitHub output, discovery inspection, and apply-all rewrites. -- `test_*` actions cover rule tests, config-specific tests, filtered tests, snapshot-skipping tests, and snapshot updates. -- `new_*` actions scaffold projects, rules, tests, and utility rules with `--yes` defaults. - -Path-oriented actions intentionally accept one `path` argument per call because the CLI backend interpolates primitive arguments, not path arrays. - -The `ast-grep lsp` server is intentionally not exposed. The LSP command is a long-running server process, while the Caplets CLI backend is designed for bounded request/response tool calls. - -Interactive ast-grep workflows are not exposed for the same reason; use non-interactive apply-all rewrite and snapshot-update actions when file changes are intended. +The manifest uses the full `ast-grep-mcp` MCP server. ## Safety diff --git a/caplets/coding-agent-toolkit/CAPLET.md b/caplets/coding-agent-toolkit/CAPLET.md index 73ca89e6..2550a5ca 100644 --- a/caplets/coding-agent-toolkit/CAPLET.md +++ b/caplets/coding-agent-toolkit/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: Coding Agent Toolkit description: self-contained nested toolkit of high-value Caplets for coding agents. tags: diff --git a/caplets/coding-agent-toolkit/caplets/context7 b/caplets/coding-agent-toolkit/caplets/context7 new file mode 120000 index 00000000..8aad1473 --- /dev/null +++ b/caplets/coding-agent-toolkit/caplets/context7 @@ -0,0 +1 @@ +../../context7 \ No newline at end of file diff --git a/caplets/coding-agent-toolkit/caplets/lsp b/caplets/coding-agent-toolkit/caplets/lsp new file mode 120000 index 00000000..2717ba2b --- /dev/null +++ b/caplets/coding-agent-toolkit/caplets/lsp @@ -0,0 +1 @@ +../../lsp \ No newline at end of file diff --git a/caplets/context7.md b/caplets/context7/CAPLET.md similarity index 89% rename from caplets/context7.md rename to caplets/context7/CAPLET.md index b3930868..6668d042 100644 --- a/caplets/context7.md +++ b/caplets/context7/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: Context7 Documentation description: Fetch current library and framework documentation through Context7 before using version-sensitive APIs. tags: diff --git a/caplets/deepwiki/CAPLET.md b/caplets/deepwiki/CAPLET.md index 15ea5f76..83f3ce58 100644 --- a/caplets/deepwiki/CAPLET.md +++ b/caplets/deepwiki/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: DeepWiki description: Query repository-focused documentation and codebase explanations through DeepWiki's MCP service. tags: diff --git a/caplets/github-cli/CAPLET.md b/caplets/github-cli/CAPLET.md deleted file mode 100644 index d789f26e..00000000 --- a/caplets/github-cli/CAPLET.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json -name: GitHub CLI -description: Inspect GitHub pull requests and issues through curated gh CLI commands. -tags: - - cli - - github - - code -cliTools: - actions: - gh_pr_status: - description: Show pull request status for the current branch as JSON. - command: gh - args: - - pr - - status - - --json - - currentBranch - output: - type: json - annotations: - readOnlyHint: true - openWorldHint: true - gh_issue_list: - description: List open GitHub issues as JSON. - command: gh - args: - - issue - - list - - --json - - number,title,state,url - output: - type: json - annotations: - readOnlyHint: true - openWorldHint: true ---- - -# GitHub CLI - -Use this Caplet to expose read-oriented GitHub workflows through `gh` without giving the agent an unrestricted shell. diff --git a/caplets/github/CAPLET.md b/caplets/github/CAPLET.md index 594e34b4..6cf8a0c5 100644 --- a/caplets/github/CAPLET.md +++ b/caplets/github/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: GitHub description: Inspect and manage GitHub repositories, issues, pull requests, branches, commits, and code review workflows. tags: diff --git a/caplets/linear/CAPLET.md b/caplets/linear/CAPLET.md index df5046ab..b0ab2151 100644 --- a/caplets/linear/CAPLET.md +++ b/caplets/linear/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: Linear description: Plan and track product work in Linear by reading teams, projects, cycles, issues, comments, and workflow state. tags: diff --git a/caplets/lsp/CAPLET.md b/caplets/lsp/CAPLET.md new file mode 100644 index 00000000..270eb0df --- /dev/null +++ b/caplets/lsp/CAPLET.md @@ -0,0 +1,109 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +name: LSP +description: Language Server Protocol tools for project-aware code intelligence through language-server-mcp. +tags: + - mcp + - code + - lsp + - language-server + - diagnostics +mcpServer: + command: npx + args: [-y, language-server-mcp] +--- + +# LSP + +Use this Caplet to expose Language Server Protocol capabilities through `language-server-mcp` without handing every language-server operation to an agent up front. + +The server runs over stdio, starts local language servers lazily, and gives agents project-aware code intelligence for repositories that have LSP configuration or supported built-in language servers. + +## Good Fits + +- Inspect hover/type information before editing unfamiliar code. +- Jump to definitions, declarations, implementations, and type definitions. +- Find references and document/workspace symbols during refactors. +- Read diagnostics from configured language servers before proposing fixes. +- Request formatting, code actions, rename edits, and workspace edits. +- Cross-check code review or planning assumptions with language-server-backed facts. + +## Setup + +Create a project-level `.lsp-mcp.jsonc` when the defaults are not enough: + +```jsonc +{ + "lsp": { + "servers": { + "typescript": { + "registry": "typescript", + }, + }, + }, +} +``` + +For file-targeted tools, pass absolute or workspace-relative paths that resolve inside the workspace. A typical request includes `workspaceRoot`, `filePath`, `line`, and `character`: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts", + "line": 3, + "character": 12 +} +``` + +`serverId` is optional for file-targeted tools. When omitted, `language-server-mcp` runs against configured or built-in servers whose language IDs or file extensions match the file. Add `"serverId": "typescript"` to force a specific server. + +Built-in registry IDs include common servers such as `typescript`, `deno`, `eslint`, `json`, `pyright`, `gopls`, `rust`, `svelte`, `vue`, `yaml-ls`, `bash`, `clangd`, `lua-ls`, and `terraform`. Mason and nvim-lspconfig aliases such as `ts_ls`, `denols`, `yamlls`, `bashls`, `rust_analyzer`, and compatibility aliases such as `python`, `go`, and `yaml` are also accepted by the downstream server. + +## Safety + +`language-server-mcp` defaults to conservative behavior for file modification and process execution: + +- Edit-producing tools return edits by default and do not write files unless `apply: true` is passed. +- `apply: true` requires `serverId` when more than one matching LSP server would produce edits. +- Applied edits are restricted to the workspace root unless the downstream server is configured with `security.allowExternalFiles: true`. +- `workspace/executeCommand` is enabled by default, but can be disabled globally or restricted with per-server command allowlists. +- LSP servers start lazily on first use and stop after an idle timeout by default. +- Managed downloads are available only for supported built-ins and can be disabled with `downloads.enabled: false`. + +## Examples + +Ask for hover information at a symbol: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts", + "line": 10, + "character": 18, + "serverId": "typescript" +} +``` + +Read diagnostics for a source file: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts" +} +``` + +Request code actions without applying edits immediately: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts", + "range": { + "start": { "line": 12, "character": 0 }, + "end": { "line": 12, "character": 24 } + }, + "apply": false, + "serverId": "typescript" +} +``` diff --git a/caplets/npm/CAPLET.md b/caplets/npm/CAPLET.md index 6e0875c0..e3411ba1 100644 --- a/caplets/npm/CAPLET.md +++ b/caplets/npm/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: npm Registry description: Query package metadata, versions, dist-tags, and search results from the public npm registry. tags: diff --git a/caplets/osv/CAPLET.md b/caplets/osv/CAPLET.md index 7859ccec..19fb17d2 100644 --- a/caplets/osv/CAPLET.md +++ b/caplets/osv/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: OSV Vulnerabilities description: Query OSV.dev vulnerability data through explicit HTTP actions. tags: diff --git a/caplets/playwright/CAPLET.md b/caplets/playwright/CAPLET.md index 7ed6355f..058838e9 100644 --- a/caplets/playwright/CAPLET.md +++ b/caplets/playwright/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: Playwright description: Drive a browser through Playwright MCP for frontend testing, inspection, and automation workflows. tags: diff --git a/caplets/pypi/CAPLET.md b/caplets/pypi/CAPLET.md index e103d361..54810522 100644 --- a/caplets/pypi/CAPLET.md +++ b/caplets/pypi/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: PyPI description: Query Python package metadata, releases, files, vulnerabilities, and Simple API project details from PyPI. tags: diff --git a/caplets/repo-cli/CAPLET.md b/caplets/repo-cli/CAPLET.md index af0869ea..e7fd2c84 100644 --- a/caplets/repo-cli/CAPLET.md +++ b/caplets/repo-cli/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: Repository CLI description: Inspect and run common local repository workflows through curated CLI tools. tags: diff --git a/caplets/sourcegraph/CAPLET.md b/caplets/sourcegraph/CAPLET.md index 34fd7582..65276ff2 100644 --- a/caplets/sourcegraph/CAPLET.md +++ b/caplets/sourcegraph/CAPLET.md @@ -1,5 +1,5 @@ --- -$schema: https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json name: Sourcegraph description: Search and inspect code across Sourcegraph using its MCP endpoint for repository-aware coding workflows. tags: diff --git a/docs/plans/2026-05-26-lsp-registry-caplet.md b/docs/plans/2026-05-26-lsp-registry-caplet.md new file mode 100644 index 00000000..5f4879fc --- /dev/null +++ b/docs/plans/2026-05-26-lsp-registry-caplet.md @@ -0,0 +1,370 @@ +# LSP Registry Caplet Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Make `caplets/lsp` a polished registry Caplet backed by `language-server-mcp`, included in examples, toolkit, tests, and release notes. + +**Architecture:** Keep `lsp` as a directory-style MCP Caplet that launches `npx -y language-server-mcp`. Add documentation in the Caplet card and README, include it in the `coding-agent-toolkit` via source symlink, and extend repository example config tests to validate it loads without live MCP startup. + +**Tech Stack:** Markdown Caplet frontmatter, Caplets repository example loader, Vitest, pnpm, Changesets. + +--- + +## File Structure + +- Modify `caplets/lsp/CAPLET.md`: polished manifest description/tags and complete usage/safety/examples body. +- Create symlink `caplets/coding-agent-toolkit/caplets/lsp -> ../../lsp`: toolkit child pointing to the canonical top-level LSP Caplet. +- Modify `README.md`: add `lsp` to the polished examples list. +- Modify `packages/core/test/config.test.ts`: add `config.mcpServers.lsp` assertion in the existing showcase Caplets test. +- Create `.changeset/lsp-registry-caplet.md`: patch changeset for the user-facing `caplets` package examples/toolkit update. + +--- + +### Task 1: Add failing config coverage for the LSP Caplet + +**Files:** + +- Modify: `packages/core/test/config.test.ts` +- Test: `packages/core/test/config.test.ts` + +- [ ] **Step 1: Write the failing test assertion** + +In `packages/core/test/config.test.ts`, find the existing assertion block: + +```ts + expect(config.mcpServers.playwright).toMatchObject({ + server: "playwright", + name: "Playwright", + command: "npx", + args: ["-y", "@playwright/mcp@0.0.75", "--headless"], + }); + expect(config.capletSets["coding-agent-toolkit"]).toMatchObject({ +``` + +Replace it with: + +```ts + expect(config.mcpServers.playwright).toMatchObject({ + server: "playwright", + name: "Playwright", + command: "npx", + args: ["-y", "@playwright/mcp@0.0.75", "--headless"], + }); + expect(config.mcpServers.lsp).toMatchObject({ + server: "lsp", + name: "LSP", + command: "npx", + args: ["-y", "language-server-mcp"], + }); + expect(config.capletSets["coding-agent-toolkit"]).toMatchObject({ +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: + +```sh +pnpm --filter @caplets/core test -- test/config.test.ts +``` + +Expected: FAIL because the current `caplets/lsp/CAPLET.md` manifest name is `lsp`, so `name: "LSP"` does not match yet. + +- [ ] **Step 3: Commit failing test** + +```sh +git add packages/core/test/config.test.ts +git commit -m "test: cover lsp registry caplet loading" +``` + +--- + +### Task 2: Polish the LSP Caplet card + +**Files:** + +- Modify: `caplets/lsp/CAPLET.md` +- Test: `packages/core/test/config.test.ts` + +- [ ] **Step 1: Replace the Caplet card** + +Replace the entire contents of `caplets/lsp/CAPLET.md` with: + +````markdown +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/spiritledsoftware/caplets/main/schemas/caplet.schema.json +name: LSP +description: Language Server Protocol tools for project-aware code intelligence through language-server-mcp. +tags: + - mcp + - code + - lsp + - language-server + - diagnostics +mcpServer: + command: npx + args: [-y, language-server-mcp] +--- + +# LSP + +Use this Caplet to expose Language Server Protocol capabilities through `language-server-mcp` without handing every language-server operation to an agent up front. + +The server runs over stdio, starts local language servers lazily, and gives agents project-aware code intelligence for repositories that have LSP configuration or supported built-in language servers. + +## Good Fits + +- Inspect hover/type information before editing unfamiliar code. +- Jump to definitions, declarations, implementations, and type definitions. +- Find references and document/workspace symbols during refactors. +- Read diagnostics from configured language servers before proposing fixes. +- Request formatting, code actions, rename edits, and workspace edits. +- Cross-check code review or planning assumptions with language-server-backed facts. + +## Setup + +Create a project-level `.lsp-mcp.jsonc` when the defaults are not enough: + +```jsonc +{ + "lsp": { + "servers": { + "typescript": { + "registry": "typescript", + }, + }, + }, +} +``` +```` + +For file-targeted tools, pass absolute or workspace-relative paths that resolve inside the workspace. A typical request includes `workspaceRoot`, `filePath`, `line`, and `character`: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts", + "line": 3, + "character": 12 +} +``` + +`serverId` is optional for file-targeted tools. When omitted, `language-server-mcp` runs against configured or built-in servers whose language IDs or file extensions match the file. Add `"serverId": "typescript"` to force a specific server. + +Built-in registry IDs include common servers such as `typescript`, `deno`, `eslint`, `json`, `pyright`, `gopls`, `rust`, `svelte`, `vue`, `yaml-ls`, `bash`, `clangd`, `lua-ls`, and `terraform`. Mason and nvim-lspconfig aliases such as `ts_ls`, `denols`, `yamlls`, `bashls`, `rust_analyzer`, and compatibility aliases such as `python`, `go`, and `yaml` are also accepted by the downstream server. + +## Safety + +`language-server-mcp` defaults to conservative behavior for file modification and process execution: + +- Edit-producing tools return edits by default and do not write files unless `apply: true` is passed. +- `apply: true` requires `serverId` when more than one matching LSP server would produce edits. +- Applied edits are restricted to the workspace root unless the downstream server is configured with `security.allowExternalFiles: true`. +- `workspace/executeCommand` is enabled by default, but can be disabled globally or restricted with per-server command allowlists. +- LSP servers start lazily on first use and stop after an idle timeout by default. +- Managed downloads are available only for supported built-ins and can be disabled with `downloads.enabled: false`. + +## Examples + +Ask for hover information at a symbol: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts", + "line": 10, + "character": 18, + "serverId": "typescript" +} +``` + +Read diagnostics for a source file: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts" +} +``` + +Request code actions without applying edits immediately: + +```json +{ + "workspaceRoot": "/absolute/path/to/project", + "filePath": "/absolute/path/to/project/src/index.ts", + "range": { + "start": { "line": 12, "character": 0 }, + "end": { "line": 12, "character": 24 } + }, + "apply": false, + "serverId": "typescript" +} +``` + +```` + +- [ ] **Step 2: Run test to verify it passes** + +Run: + +```sh +pnpm --filter @caplets/core test -- test/config.test.ts +```` + +Expected: PASS. The new manifest name is `LSP`, and the backend command remains `npx -y language-server-mcp`. + +- [ ] **Step 3: Commit Caplet card** + +```sh +git add caplets/lsp/CAPLET.md +git commit -m "docs: polish lsp registry caplet" +``` + +--- + +### Task 3: Add LSP to the coding-agent toolkit + +**Files:** + +- Create symlink: `caplets/coding-agent-toolkit/caplets/lsp -> ../../lsp` +- Test: `packages/core/test/cli.test.ts` +- Test: `packages/core/test/config.test.ts` + +- [ ] **Step 1: Create the source-tree symlink** + +Run: + +```sh +ln -s ../../lsp caplets/coding-agent-toolkit/caplets/lsp +``` + +Verify: + +```sh +readlink caplets/coding-agent-toolkit/caplets/lsp +``` + +Expected output: + +```text +../../lsp +``` + +- [ ] **Step 2: Run toolkit-related tests** + +Run: + +```sh +pnpm --filter @caplets/core test -- test/config.test.ts test/cli.test.ts +``` + +Expected: PASS. Existing CapletSet loading and symlink materialization tests continue to pass with the additional child symlink. + +- [ ] **Step 3: Commit toolkit inclusion** + +```sh +git add caplets/coding-agent-toolkit/caplets/lsp +git commit -m "docs: add lsp to coding agent toolkit" +``` + +--- + +### Task 4: Document LSP in repository examples + +**Files:** + +- Modify: `README.md` + +- [ ] **Step 1: Add README example bullet** + +In `README.md`, find: + +```markdown +- `sourcegraph`: Cross-repository code search and navigation through Sourcegraph MCP. +- `playwright`: Headless browser automation for frontend inspection and testing through Playwright MCP. +- `coding-agent-toolkit`: A CapletSet that bundles high-value coding-agent examples; source children are symlinks to canonical top-level examples and installed copies are materialized as self-contained files/directories. +``` + +Replace it with: + +```markdown +- `sourcegraph`: Cross-repository code search and navigation through Sourcegraph MCP. +- `playwright`: Headless browser automation for frontend inspection and testing through Playwright MCP. +- `lsp`: Language Server Protocol-backed code intelligence through `language-server-mcp`. +- `coding-agent-toolkit`: A CapletSet that bundles high-value coding-agent examples; source children are symlinks to canonical top-level examples and installed copies are materialized as self-contained files/directories. +``` + +- [ ] **Step 2: Run docs formatting check** + +Run: + +```sh +pnpm format:check +``` + +Expected: PASS. + +- [ ] **Step 3: Commit README update** + +```sh +git add README.md +git commit -m "docs: list lsp registry example" +``` + +--- + +### Task 5: Add changeset and final verification + +**Files:** + +- Create: `.changeset/lsp-registry-caplet.md` +- Test: repository checks + +- [ ] **Step 1: Create changeset** + +Create `.changeset/lsp-registry-caplet.md` with: + +```markdown +--- +"caplets": patch +--- + +Add a polished LSP registry Caplet backed by `language-server-mcp` and include it in the coding-agent toolkit examples. +``` + +- [ ] **Step 2: Run focused checks** + +Run: + +```sh +pnpm --filter @caplets/core test -- test/config.test.ts test/cli.test.ts +pnpm format:check +pnpm lint +``` + +Expected: all commands PASS. + +- [ ] **Step 3: Run full verification** + +Run: + +```sh +pnpm verify +``` + +Expected: PASS for formatting, lint, typecheck, schema check, tests, benchmark check, and build. + +- [ ] **Step 4: Commit changeset** + +```sh +git add .changeset/lsp-registry-caplet.md +git commit -m "chore: add lsp registry caplet changeset" +``` + +--- + +## Self-Review Notes + +- Spec coverage: the plan expands `caplets/lsp/CAPLET.md`, keeps `npx -y language-server-mcp`, adds setup/safety/examples, updates README, adds toolkit symlink, extends config tests, and creates a changeset. +- Placeholder scan: no placeholder tasks remain; each step includes exact file paths, commands, and expected outcomes. +- Type/signature consistency: expected `config.mcpServers.lsp` fields match the planned frontmatter: `server: "lsp"`, `name: "LSP"`, `command: "npx"`, and `args: ["-y", "language-server-mcp"]`. diff --git a/docs/specs/2026-05-26-lsp-registry-caplet-design.md b/docs/specs/2026-05-26-lsp-registry-caplet-design.md new file mode 100644 index 00000000..7b8b4ea1 --- /dev/null +++ b/docs/specs/2026-05-26-lsp-registry-caplet-design.md @@ -0,0 +1,101 @@ +# LSP Registry Caplet Design + +## Goal + +Make `caplets/lsp` a polished, first-class registry example that wraps `language-server-mcp` through Caplets' MCP backend and is discoverable in the repository examples, tests, and coding-agent toolkit. + +## Context + +The repository already has `caplets/lsp/CAPLET.md` with a valid minimal MCP manifest: + +```yaml +name: lsp +description: Language Server Protocol +tags: + - mcp + - code + - lsp +mcpServer: + command: npx + args: [-y, language-server-mcp] +``` + +The published `language-server-mcp` package exposes LSP capabilities over stdio, starts local language servers lazily, and supports tools such as hover, definitions, references, diagnostics, symbols, formatting, code actions, and workspace edits. + +## Scope + +In scope: + +- Expand `caplets/lsp/CAPLET.md` from a stub into a polished Caplet card. +- Keep the backend as `npx -y language-server-mcp`. +- Improve the manifest description and tags for search and discovery. +- Add usage guidance for project configuration, server selection, file-targeted inputs, and safety defaults. +- Add `lsp` to the README example list. +- Add `lsp` to the `coding-agent-toolkit` CapletSet via a symlink to the canonical top-level example. +- Extend repository example tests so `lsp` is loaded and validated with the other showcase Caplets. +- Add a changeset for the user-facing registry/example update. + +Out of scope: + +- Creating a new `@caplets/lsp` package in the monorepo. +- Implementing new LSP functionality inside Caplets core. +- Replacing `language-server-mcp` or forking its tool surface. +- Adding project-specific `.lsp-mcp.jsonc` files to this repository. + +## Architecture + +`caplets/lsp` remains a directory-style Markdown Caplet with a single MCP backend. Caplets launches `language-server-mcp` over stdio with `npx`, then exposes it through the same progressive MCP operations as other MCP-backed Caplets: `check_backend`, `list_tools`, `search_tools`, `get_tool`, `call_tool`, resources, prompts, templates, and completion when supported by the downstream server. + +The `coding-agent-toolkit` entry should include `lsp` as a source-tree symlink under `caplets/coding-agent-toolkit/caplets/lsp`. Existing install behavior materializes symlinked child Caplets as self-contained files/directories, so installed toolkit copies should not depend on the source repository symlink layout. + +## Caplet content design + +The `CAPLET.md` body should include these sections: + +1. **Overview** — explain that the Caplet gives agents project-aware language intelligence through LSP without exposing every LSP tool directly up front. +2. **Good Fits** — hover/type info, go-to definition/declaration/implementation, references, diagnostics, symbols, formatting, code actions, rename/workspace edits, and language-server-backed code review/planning. +3. **Setup** — describe `.lsp-mcp.jsonc`, built-in registry IDs and aliases, optional `serverId`, `workspaceRoot`, `filePath`, `line`, and `character` inputs. +4. **Safety** — document edit-producing tools returning edits by default, explicit `apply: true`, workspace-root restrictions, multi-server `serverId` requirements for applied edits, `workspace/executeCommand` controls, lazy startup, idle shutdown, and managed download controls. +5. **Examples** — include concise JSON examples for hover and diagnostics/code actions that show the expected path-based inputs without hardcoding this repository's absolute paths. + +## README design + +Add `lsp` to the polished working examples list near the other code-focused MCP examples. The entry should make clear that it wraps `language-server-mcp` for LSP-backed code intelligence. + +## Test design + +Extend the existing showcase Caplets test in `packages/core/test/config.test.ts` so it asserts `config.mcpServers.lsp` loads with: + +- `server: "lsp"` +- `name: "LSP"` or another intentionally chosen display name from the manifest +- `command: "npx"` +- `args: ["-y", "language-server-mcp"]` + +The existing `validateCapletFile` and reference-file tests should continue to validate the expanded Caplet automatically. No network or live LSP server startup should be required for this test; it should only validate config loading from repository Caplet files. + +## Release notes + +Add a changeset for `caplets` because this changes the user-facing registry examples and the installable toolkit contents. The changeset should describe the new polished LSP example and toolkit inclusion. + +## Risks and mitigations + +- **Risk: users expect a package named `@caplets/lsp`.** Mitigation: documentation should describe this as a registry Caplet wrapping `language-server-mcp`, not as a monorepo package. +- **Risk: live LSP behavior depends on project configuration and installed language servers.** Mitigation: setup docs should point users to `.lsp-mcp.jsonc`, built-ins, aliases, and managed-download controls. +- **Risk: edit-producing tools can modify files.** Mitigation: safety docs must clearly state default return-edits behavior and the explicit requirements for applying edits. +- **Risk: toolkit symlink breaks installation.** Mitigation: rely on existing symlink materialization behavior and keep the symlink inside the `caplets/coding-agent-toolkit/caplets` tree. + +## Verification + +Run focused checks after implementation: + +```sh +pnpm --filter @caplets/core test -- test/config.test.ts +pnpm format:check +pnpm lint +``` + +Run the full repository gate if focused checks pass: + +```sh +pnpm verify +``` diff --git a/package.json b/package.json index 3cedfd1b..ef7c9747 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,10 @@ "devDependencies": { "@changesets/cli": "^2.31.0", "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260523.1", + "@typescript/native-preview": "7.0.0-dev.20260526.1", "husky": "^9.1.7", - "oxfmt": "^0.51.0", - "oxlint": "^1.66.0", + "oxfmt": "^0.52.0", + "oxlint": "^1.67.0", "rolldown": "^1.0.2", "tsx": "^4.22.3", "turbo": "^2.9.14", diff --git a/packages/benchmarks/package.json b/packages/benchmarks/package.json index d119c3b8..1094962f 100644 --- a/packages/benchmarks/package.json +++ b/packages/benchmarks/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260523.1", + "@typescript/native-preview": "7.0.0-dev.20260526.1", "caplets": "workspace:*", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/packages/cli/package.json b/packages/cli/package.json index 88f09b09..9841dd7c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -46,7 +46,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260523.1", + "@typescript/native-preview": "7.0.0-dev.20260526.1", "rolldown": "^1.0.2", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/packages/core/package.json b/packages/core/package.json index c6c0152e..2f41f301 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -54,11 +54,11 @@ "dependencies": { "@apidevtools/swagger-parser": "^12.1.0", "@hono/mcp": "^0.3.0", - "@hono/node-server": "^2.0.3", + "@hono/node-server": "^2.0.4", "@modelcontextprotocol/sdk": "^1.29.0", "commander": "^14.0.3", "graphql": "^16.14.0", - "hono": "^4.12.22", + "hono": "^4.12.23", "vfile": "^6.0.3", "vfile-matter": "^5.0.1", "yaml": "^2.9.0", @@ -66,7 +66,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260523.1", + "@typescript/native-preview": "7.0.0-dev.20260526.1", "rolldown": "^1.0.2", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/packages/core/test/config.test.ts b/packages/core/test/config.test.ts index 264c1381..dc56c836 100644 --- a/packages/core/test/config.test.ts +++ b/packages/core/test/config.test.ts @@ -712,36 +712,11 @@ describe("config", () => { url: "https://mcp.linear.app/mcp", auth: { type: "oauth2" }, }); - expect(config.cliTools["ast-grep"]).toMatchObject({ + expect(config.mcpServers["ast-grep"]).toMatchObject({ server: "ast-grep", - name: "ast-grep CLI", - actions: { - run_pattern_json: { - command: "ast-grep", - args: [ - "run", - "--pattern", - "$input.pattern", - "--lang", - "$input.lang", - "--json=compact", - "--color", - "never", - "$input.path", - ], - output: { type: "json" }, - annotations: { readOnlyHint: true }, - }, - run_rewrite_apply_all: { - command: "ast-grep", - annotations: { destructiveHint: true }, - }, - new_rule_yes: { - command: "ast-grep", - cwd: expect.stringMatching(/caplets[/\\]ast-grep[/\\]\$input\.cwd$/), - annotations: { destructiveHint: true }, - }, - }, + name: "ast-grep", + command: "npx", + args: ["-y", "ast-grep-mcp"], }); expect(config.httpApis.osv).toMatchObject({ server: "osv", @@ -798,6 +773,12 @@ describe("config", () => { command: "npx", args: ["-y", "@playwright/mcp@0.0.75", "--headless"], }); + expect(config.mcpServers.lsp).toMatchObject({ + server: "lsp", + name: "LSP", + command: "npx", + args: ["-y", "language-server-mcp"], + }); expect(config.capletSets["coding-agent-toolkit"]).toMatchObject({ server: "coding-agent-toolkit", name: "Coding Agent Toolkit", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index ba8f7deb..0f20ffd5 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -38,7 +38,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260523.1", + "@typescript/native-preview": "7.0.0-dev.20260527.1", "rolldown": "^1.0.2", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/packages/pi/package.json b/packages/pi/package.json index 24105f2a..20605c56 100644 --- a/packages/pi/package.json +++ b/packages/pi/package.json @@ -38,7 +38,7 @@ }, "devDependencies": { "@types/node": "^25.9.1", - "@typescript/native-preview": "7.0.0-dev.20260523.1", + "@typescript/native-preview": "7.0.0-dev.20260527.1", "rolldown": "^1.0.2", "typescript": "^6.0.3", "vitest": "^4.1.7" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89dd4b80..ceeaeed8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -214,17 +214,17 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260523.1 - version: 7.0.0-dev.20260523.1 + specifier: 7.0.0-dev.20260526.1 + version: 7.0.0-dev.20260526.1 husky: specifier: ^9.1.7 version: 9.1.7 oxfmt: - specifier: ^0.51.0 - version: 0.51.0 + specifier: ^0.52.0 + version: 0.52.0 oxlint: - specifier: ^1.66.0 - version: 1.66.0 + specifier: ^1.67.0 + version: 1.67.0 rolldown: specifier: ^1.0.2 version: 1.0.2 @@ -239,7 +239,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) packages/benchmarks: dependencies: @@ -254,8 +254,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260523.1 - version: 7.0.0-dev.20260523.1 + specifier: 7.0.0-dev.20260526.1 + version: 7.0.0-dev.20260526.1 caplets: specifier: workspace:* version: link:../cli @@ -264,7 +264,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) packages/cli: dependencies: @@ -279,8 +279,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260523.1 - version: 7.0.0-dev.20260523.1 + specifier: 7.0.0-dev.20260526.1 + version: 7.0.0-dev.20260526.1 rolldown: specifier: ^1.0.2 version: 1.0.2 @@ -289,7 +289,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) packages/core: dependencies: @@ -298,10 +298,10 @@ importers: version: 12.1.0(openapi-types@12.1.3) '@hono/mcp': specifier: ^0.3.0 - version: 0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.22))(hono@4.12.22)(zod@4.4.3) + version: 0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.23))(hono@4.12.23)(zod@4.4.3) '@hono/node-server': - specifier: ^2.0.3 - version: 2.0.3(hono@4.12.22) + specifier: ^2.0.4 + version: 2.0.4(hono@4.12.23) '@modelcontextprotocol/sdk': specifier: ^1.29.0 version: 1.29.0(zod@4.4.3) @@ -312,8 +312,8 @@ importers: specifier: ^16.14.0 version: 16.14.0 hono: - specifier: ^4.12.22 - version: 4.12.22 + specifier: ^4.12.23 + version: 4.12.23 vfile: specifier: ^6.0.3 version: 6.0.3 @@ -331,8 +331,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260523.1 - version: 7.0.0-dev.20260523.1 + specifier: 7.0.0-dev.20260526.1 + version: 7.0.0-dev.20260526.1 rolldown: specifier: ^1.0.2 version: 1.0.2 @@ -341,7 +341,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) packages/opencode: dependencies: @@ -356,8 +356,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260523.1 - version: 7.0.0-dev.20260523.1 + specifier: 7.0.0-dev.20260527.1 + version: 7.0.0-dev.20260527.1 rolldown: specifier: ^1.0.2 version: 1.0.2 @@ -366,7 +366,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) packages/pi: dependencies: @@ -384,8 +384,8 @@ importers: specifier: ^25.9.1 version: 25.9.1 '@typescript/native-preview': - specifier: 7.0.0-dev.20260523.1 - version: 7.0.0-dev.20260523.1 + specifier: 7.0.0-dev.20260527.1 + version: 7.0.0-dev.20260527.1 rolldown: specifier: ^1.0.2 version: 1.0.2 @@ -394,7 +394,7 @@ importers: version: 6.0.3 vitest: specifier: ^4.1.7 - version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + version: 4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) packages: @@ -576,6 +576,10 @@ packages: resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} + engines: {node: '>=6.9.0'} + '@borewit/text-codec@0.2.2': resolution: {integrity: sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==} @@ -840,8 +844,8 @@ packages: peerDependencies: hono: ^4 - '@hono/node-server@2.0.3': - resolution: {integrity: sha512-a0jV+/HRe3G5zjFID3zObAQFdkl6zpxTuqktdDDXS3MJKcrZIkB8OkLpNBlY/WXFqv2HF4a0takPej+aNFczWA==} + '@hono/node-server@2.0.4': + resolution: {integrity: sha512-Ut3y0dMMPWy6bZ2kVfx25EOVbZlm15dhF4mOsezMlhpNHy+4MkU1qN9Y6lnruYi4wPmFzimGX2X7LF/FwHli4A==} engines: {node: '>=20'} peerDependencies: hono: ^4 @@ -1019,246 +1023,246 @@ packages: '@oxc-project/types@0.132.0': resolution: {integrity: sha512-FESMOxil5Se014ui/Eq8fT5uHJo6nIRwH0PfJrZJXs6Gek3ZVFOrpUv3YIZT20m+extU98Hg1Ym72U58rlsxUQ==} - '@oxfmt/binding-android-arm-eabi@0.51.0': - resolution: {integrity: sha512-Ni0sCqg5CIHaLIYFGj+ncbcumylvNC6FE4rfD0KfdmnWHbPJ+zev0qZCXKxy2hFVa0fYRK0yPzf5nzPbkZou7g==} + '@oxfmt/binding-android-arm-eabi@0.52.0': + resolution: {integrity: sha512-17EMSJnQ9g+upVHrAUYDMfH5lvRKQ9Nvg8WtEoH72oDr1VpWz+7/o3tD97U1EToen2YAQ/68JmtDYkQUi20dfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.51.0': - resolution: {integrity: sha512-eu5lAZjuo0KAkp+M24EhDqfOwA8owQ8d7wyBlOUUGRbDLHpU3IRlDHp8Dif+YqGlxs6jra7yS6WQu/NkPhAxeg==} + '@oxfmt/binding-android-arm64@0.52.0': + resolution: {integrity: sha512-A2G1IdwGEW2lLJkIxcvuirRH1CzSl/e0NX11zTlW1gvxJThfwbI/BEoaKrTNpm7M2FchvIf6guvIQU7d5iz+OQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.51.0': - resolution: {integrity: sha512-6LsUNIdURhhcIfIn8+xsOb61mSTa9msAHTeSGx9Jf4rsP/gN8PGCF+SKWPAQZbND2w/WBkqQ6303jqEEIXzMdQ==} + '@oxfmt/binding-darwin-arm64@0.52.0': + resolution: {integrity: sha512-f9+bLvOYxy7NttCLFTvQ7afmqDOWY4wIP9xdvfj5trQ1qj6f2UFAGwZESlfsMjvJNTyRpXfIlOanCI9FOvoeQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.51.0': - resolution: {integrity: sha512-9aUMGmVxdHjYMsEAW1tNRoieTJXlVNDFkRvIR1J7LttJXWjVYCu2ekclLij2KJtxBxSQOYSHd12ME/adVGVbZg==} + '@oxfmt/binding-darwin-x64@0.52.0': + resolution: {integrity: sha512-YSTB9sJ5nnQd/Q0ddHkgof0ZCHPAnWZT1IW2SJ8omz7CP7KluJhO1fNHrpqdxCtpztJwSs4hY1uAee35wKxxaw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.51.0': - resolution: {integrity: sha512-mkY1nhZTqYb+NHaAWxOCKISN6FwdrwMNsu17vTUA3wzUV2VJ+Paq15ZokRcsMU/2PUdHO73prxyeJpjXQ3MPpQ==} + '@oxfmt/binding-freebsd-x64@0.52.0': + resolution: {integrity: sha512-NIrRNTTPCs4UbmVs0bxLSCDlLCtIRMJIXklNKaXa5Oj2/K1UIMBvgE8+uPVo01Io3N9HF0+GAX+aAHjUgZS7vA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.51.0': - resolution: {integrity: sha512-wtFwNwE4+YCNuPaWoGDZeGsKvD6D1YSUNBJNn/rJBh7CrDBThFE+TBI5kY7vRW9rIOQRsbW2IpyyL3Du4Zqwiw==} + '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': + resolution: {integrity: sha512-JXUCde8mn3GpgQouz2PXUokgy/uT1QrRJBL2s983VWcSQp62wTFYiNXgTKdeo1Jgbr0IgUnKKvzIk/YBlj/nVQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.51.0': - resolution: {integrity: sha512-rnOaNx86G7iRKM6lsCIQMux0SMGNC/TEbFR+r7lpruJ12bnrIWgxd5w1PLqOvgR9r8ZJbpK/zfRKctJnh8/Jfg==} + '@oxfmt/binding-linux-arm-musleabihf@0.52.0': + resolution: {integrity: sha512-psbUXaRZ+V8DaXz10Qf7LSHtdtdKAmC8fxXgeU608jjzrmWK4quamZMOpl6sf+dikoFHA85uE93Q0BqxrCdQrQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.51.0': - resolution: {integrity: sha512-jOgDzSqWcICGRjsp4mc08FxKMN8vzP2Kgs4E0d2HUP99F+nJDQKklRV4Zuj+0gcBgjrzx2CbpqaIdUVPepCojA==} + '@oxfmt/binding-linux-arm64-gnu@0.52.0': + resolution: {integrity: sha512-Jw7MgWUU9lcLCcy82updISP3EthTlfvAwR6gWNxPzqly7+fLvOi2gHQE9xXQjpqaVLm/8P+gOzlv9ODuoVlaaw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.51.0': - resolution: {integrity: sha512-KBUCdrH5bwVrAvI9gU/1S55oH6fzXjr++J/oVocdu7bYTks1l7DNNT+rLd/1TDdAEjObGwmfWamn7LC1m8A0DQ==} + '@oxfmt/binding-linux-arm64-musl@0.52.0': + resolution: {integrity: sha512-wZg6bLjDvh2KibyI3QFUYo8GTXneIFsd0JvehtvJiUmQ8WRPERgxd/VM4ctWb86U5FT1FkqgS8/wZKVB+AZScg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.51.0': - resolution: {integrity: sha512-NapfjYsABFqTJ1Dn9Efq6sN5esaHconVKwVLbDGNQLrwpOx/g17mkwErHzU72PutL67nf3wNAkbq122H+zLxag==} + '@oxfmt/binding-linux-ppc64-gnu@0.52.0': + resolution: {integrity: sha512-IngE8uxhNvxcMrLjZNDo9xNLY7rEK33AKnaMd2B46he1e/mz2CfcW6If/U1wUjdRZddm1QzQaciqZkuMkdh1FA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.51.0': - resolution: {integrity: sha512-5dlDt1dUZCVi6elIhiK1PWg9wpTzTcIuj0IZnSurvIoMrhOWqqTcc1dSTxcSkNaBZhfsNqRZdINI1zAgbKkJNQ==} + '@oxfmt/binding-linux-riscv64-gnu@0.52.0': + resolution: {integrity: sha512-H3+DdFMv/efN3Efmhsv18jDrpiWWqKG7wsfAlQBqAt6z/E2Bx+TwEj2Nowe51CPOWB8/mFBC2dAMSgVFLvvowA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.51.0': - resolution: {integrity: sha512-pgdWUJn0S5nulyiVdlFV8DzCUnGXkU99W5PSkkmbaZW+LrZBPxpezun4G0DDHbQaVYuJeCuKsXsGKGo77CkUTQ==} + '@oxfmt/binding-linux-riscv64-musl@0.52.0': + resolution: {integrity: sha512-zji+1kb7lJKohSDjzC1IsS+K/cKRs1hdVf0ZH0VbdbiakmtLvN9twBoXo/k8VdjFax7kfo+DyPxS7vv52br1aw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.51.0': - resolution: {integrity: sha512-2XTFUe97CbDGAI8vjwDfZ1HdakO0XIADyJ24idEg64SC4/K4in/OisXVnrW4NMK7I6TgC7EqRhC0Ln/nKhAemA==} + '@oxfmt/binding-linux-s390x-gnu@0.52.0': + resolution: {integrity: sha512-hcLBYedpCy7ToUvvBidWk7+11Yhg1oAZ4+6hKPic/mQI6NaqXJSXMps5nFlwUuX2ewhtLZZDPg63TI042qGKBg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.51.0': - resolution: {integrity: sha512-kQ1OuCqqt/yyf0ZN9VFxW1/JnlgJgii3Dr7pWf9vNBvrX1hv6g39/+mc5oGRHRGJFZtl3zsGDWR9c5N2B/gwBw==} + '@oxfmt/binding-linux-x64-gnu@0.52.0': + resolution: {integrity: sha512-IDO2loXK2OtTOhSPchU9MW25mWL2QCDGdJbjN8MXKZVS80qXe5gMTwQWu/gMJ3juoBHbkuUZNB2N1LHzNT7DoA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.51.0': - resolution: {integrity: sha512-ARTYqxHF475o96Gbn41hvSWSSRygPlRDXZZgZ9I2scU1y0qiWpCQyZCoefaQa0mwv+wwtZ+luS4YOzsRzM/izg==} + '@oxfmt/binding-linux-x64-musl@0.52.0': + resolution: {integrity: sha512-mAV2Hjn0SatJ+KoAzKUC3eJhdJ8wv+3m1KyuS0dTsbF0c5weq+QrCt/DRZZM+uj/XiKzCDEUKYsBF30e2qkcyw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.51.0': - resolution: {integrity: sha512-QiC1XrCl6a6BmqMzduO8hdIRMf1m44hCkt2Q68KWkTvUB/E7fd2iomyNh6KnnRca5w6eBrRAAtLFqTh+xjsjJA==} + '@oxfmt/binding-openharmony-arm64@0.52.0': + resolution: {integrity: sha512-vd4npaUIwChxp7XzkqmepBWTT9YMcSe/NBApVGPC30/lLyOVaV3dvma1SKo03t8O73BPRAG7EyJzGlN5cJM5hQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.51.0': - resolution: {integrity: sha512-NC/hJb9dtU23Zf8L7IVK95xnFjiQ7AfcLO2l5pb69TDEr958qxrtnB2CveeeNSCBFNIkgaTCfd/vHNSoG78l9g==} + '@oxfmt/binding-win32-arm64-msvc@0.52.0': + resolution: {integrity: sha512-k2sz6gWQdMfh5HPpIS+Bw/0UEV/kaK2xuqJRrWL233sEHx9WLlsmvlPFM4HUNThkYbSN0U0vPW7LVKZWDS8hPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.51.0': - resolution: {integrity: sha512-2C45za4Rj36n8YIbhRL1PQbxmXJYf81WEcAgvj5I4ptRROG+A+81hREEN5bmCHADE1UfYaN312U6tkILoZZy6w==} + '@oxfmt/binding-win32-ia32-msvc@0.52.0': + resolution: {integrity: sha512-rhke69GTcArodLHpjMTfNnvjTEBryDeZcUCKK/VjXDMtfTULl6QRh0ymX5/hbCUv2WjYm9h/QbW++q2vE15gWQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.51.0': - resolution: {integrity: sha512-73RqdAuVKQTkjZIDw08JaDHUM4lav5Qu+CaPwg4QbbA7k8o7LEW0p3UsfZ/F8dsO/pwVYh3RzFcanwLRTTahbQ==} + '@oxfmt/binding-win32-x64-msvc@0.52.0': + resolution: {integrity: sha512-q5xL7oeXkZdEtNZWBdvehJcmt+GRu9l2bK40yJs1jJXlqq+r0Hygb1rTjq+FM2o/2xyt4cufH6KRplHp3Jjsvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@oxlint/binding-android-arm-eabi@1.66.0': - resolution: {integrity: sha512-f7kq8N51T4phpzqfBpA2qaVTI/KrkCmNwaj3t/97I/WLTDI+UhlP5GL9eER+zVxBhtlx5rKXWByJU1/zDAvyaw==} + '@oxlint/binding-android-arm-eabi@1.67.0': + resolution: {integrity: sha512-VrSi571rDv1N8HaEDM+DEX8nmT0y9jJo8tzzW13vsOWTx59xQczCIJx68n2zWOXRT5YKZsOZXp4qkHN/10x4mw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxlint/binding-android-arm64@1.66.0': - resolution: {integrity: sha512-xu6QO71tdDS9mjmLZ3AqhtaVHBvdmsOKkYnReNNDgh+XiwnsipeQOIxbiYOOO0iAXycJ+GK0wdMSZP/2j/AmSg==} + '@oxlint/binding-android-arm64@1.67.0': + resolution: {integrity: sha512-l6+NdYxMoRohix5r5bbigW16LPicceCwGcQ6LKKuE1kUdjgFfQolJjrJsQYPFetIs78Gxj/G/f5TEGoTCwj9nQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxlint/binding-darwin-arm64@1.66.0': - resolution: {integrity: sha512-HZ24VimSOC7mxuEA99e0H2FS0C1yO3+iW13jPRAk+e2njsUs3QeAXsafCDyaIrV/MirdOVez+etQNQsJE43zNQ==} + '@oxlint/binding-darwin-arm64@1.67.0': + resolution: {integrity: sha512-jOzXxS1AxFxhImLIRbtGIMrEwaXcgMw3gR57WB1cRk8ai+vpr6726kxXqVvlNsrXtJ/FrmOm8RxlC0m8SW24Qg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxlint/binding-darwin-x64@1.66.0': - resolution: {integrity: sha512-awhj8ZvJrrRSnXj7V++rpZvTmnl99L6mi0B7gg7Cp7BN6cKpzuI481bHNLvXGA9GB1/oEgA3ponuyoAc6Md12A==} + '@oxlint/binding-darwin-x64@1.67.0': + resolution: {integrity: sha512-3DFAVY94OqjIZHXIPz37yGRSWwOFTAqChQ64/M69GYLawzP0KiwdhDNfqdKKYT0bTR/DNxmMnQsj3ns+8+X/Lg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxlint/binding-freebsd-x64@1.66.0': - resolution: {integrity: sha512-KQF0oVV21/FjIqkRuL8Q1vh8ECsE5+ocdH5tcqTQ4ZnYuDVoYibQUNfqBjQaUsP6UIIda5Y75Wpm5p4RgQWiWw==} + '@oxlint/binding-freebsd-x64@1.67.0': + resolution: {integrity: sha512-e4dDKZuLu8TR9DEBssWSDahlPgZBwojTTHZUvnjBRJfJJbpxYCjfjKfi0Z1+CSLMiJBwI2yCDtRM1XJQaARjmg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxlint/binding-linux-arm-gnueabihf@1.66.0': - resolution: {integrity: sha512-9u1rgwZSEXWb30vbFZzQ78HVXBo0WCKNwJ3a2InRUTNMRng+PUDIoSFmA+m4HdUfBaIqftShq8J8qHc+eE/Vig==} + '@oxlint/binding-linux-arm-gnueabihf@1.67.0': + resolution: {integrity: sha512-BKytFdcQzbITV3xlnzDUDTEDtbUMCCiC4EaNTDZ4FyT8gdNvBC4gfiLucXp/sQl0XU3p7syTlorUWVVVBZab2g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm-musleabihf@1.66.0': - resolution: {integrity: sha512-Ynot2HR1bHxUaNWoC280MVTDfZuaWuP3XfSMRDhyuZrVjhzoaBCVFlw8h8qeZjWKVUBhPWFIxB7AQTlK8Z2WWg==} + '@oxlint/binding-linux-arm-musleabihf@1.67.0': + resolution: {integrity: sha512-XYAv0esBDX7BpTzRDjVX2Vdj+zndd8ll2dFQiaeQ6zTZr7A8GRDTN7fH3FP3jU+O0vCDx85oH/EtG7BzPgAXuw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxlint/binding-linux-arm64-gnu@1.66.0': - resolution: {integrity: sha512-xCbgzciGgo+A4aQZEknsNrNiIwY7sU5SfRuMmRjPIvZAgdF34cIHiKvwOsS5XRLjlTVSFwitmq6YclTtHTfU+g==} + '@oxlint/binding-linux-arm64-gnu@1.67.0': + resolution: {integrity: sha512-zizRMjA0i6u/2B0evgda04iycu+MoNuf1pBy6Eh+1CjC5wMEG7qN5zdDKTCvFc0KSYSDM9QTG3gjZHirgtQuKg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-arm64-musl@1.66.0': - resolution: {integrity: sha512-hmo+ZB/lHkR1HdDmnziNpzSLmulnUSu10VEqX2Yex7OwvoBAbjJQLvy4gIBRV3AAwWnCvAxKp5Nv1GE6LU1QMg==} + '@oxlint/binding-linux-arm64-musl@1.67.0': + resolution: {integrity: sha512-zB/Tf6sUjmmvvbva9Gj3JTJ8rJ9t4I8/U0o6vSRtd0DRIsIuyegBwJAzhSUFQHdMijIRJkW0exs/yBhpw2S20w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxlint/binding-linux-ppc64-gnu@1.66.0': - resolution: {integrity: sha512-2Invd4Uyy81mVooQC5FBtfxSNrvcX1OxbMlVQ6M2erRrNI2awFYF26YNW2yFxdVFZ4ffNOWKghtMjhnUPsXsVA==} + '@oxlint/binding-linux-ppc64-gnu@1.67.0': + resolution: {integrity: sha512-kgU40Gt74CK0TCsF51KZymkIwN9U0BajKsMijB52zPqOeZU9NAHkA/NSQkZDHEaCakx42DxhXkODiAqf2b4Gug==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-gnu@1.66.0': - resolution: {integrity: sha512-s0iXPDQVdgayE3RGa/N2DZF7tjgg0TwEtD1sGoDxqPDGrIXgo45H0yHknT0f9A0yteASsweYZtDyTuVlM4aSag==} + '@oxlint/binding-linux-riscv64-gnu@1.67.0': + resolution: {integrity: sha512-tOYhkk/iaG9aD3FvGpBFd1Lrw0x0RaVoJBxjUkfNzS50rC5NS5BteNCwgr8A2zCdADrIIoze6D7u6U5Ic++/iQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-riscv64-musl@1.66.0': - resolution: {integrity: sha512-OekL4XFiu7RPK0JIZi8VeHgtIXPREf42t8Cy/rKEsC+P3gcqDgNAAGiyuUOpdbG4wwbfue1q4CHcCO7spSve6w==} + '@oxlint/binding-linux-riscv64-musl@1.67.0': + resolution: {integrity: sha512-sEtywrPb+0b+tHYl1SDCrw903fiC4eyKoNqzP3v+f2JT3Xcv4NEYG+P8rj+eEnX7IWhqV/xj8/JmcmVj21CXaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxlint/binding-linux-s390x-gnu@1.66.0': - resolution: {integrity: sha512-Ga1D0kj1SFslm34ThA/BdkUlyAYEnTsXyRC4pF0C5agZSwtGdHYWMTQWemUfBGp4RCG4QWXgdO+HmmmKqOtlBg==} + '@oxlint/binding-linux-s390x-gnu@1.67.0': + resolution: {integrity: sha512-BvR8Moa0zCLxroOx4vZaZN9nUfwAUpSTwjZdxZyKy4bv3PrzrXrxKR/ZQ0L9wNSvlPhnMJeZfa3q5w6ZCTuN6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-gnu@1.66.0': - resolution: {integrity: sha512-p5jfP1wUZe/IC3qpQO84n9DRnf9g3lKRtLBlQq23ykyrDglHcVx7sWmVTlPuU6SBw8mNnPzyOn022G3XZHnlww==} + '@oxlint/binding-linux-x64-gnu@1.67.0': + resolution: {integrity: sha512-mm2cxM6fksOpq6l0uFws8BUGKAR4dNa/cZCn37Npq7PFbhD5HDJqWfnoIvTaeRKMy5XdS2tO0MA0qbHDrnXAAA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxlint/binding-linux-x64-musl@1.66.0': - resolution: {integrity: sha512-vUB/sYlYZorDL1ZD+o9mRv7zbsykrrFRtmgS6R8musZqLtrPRQn1gc1eGpuX+sfdccz42STl/AqldY6XRb2upQ==} + '@oxlint/binding-linux-x64-musl@1.67.0': + resolution: {integrity: sha512-WmbMuLapKyDlobMkXAaAL0Y+Uczh4LETfIfQsUpbId4Ip8Ai82/jqeYTOoUCkuuhBFapgqP253+d83tLKOksJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxlint/binding-openharmony-arm64@1.66.0': - resolution: {integrity: sha512-yde+6p/F59xRkGR9H1HfngWRif1QRJjynZK349l+UI0H6w9hL3G8/AVaTHFyTtLVQ56qtNbX2/5Dc77n1ovnOg==} + '@oxlint/binding-openharmony-arm64@1.67.0': + resolution: {integrity: sha512-9g/PqxYJelzzTAOR5Y+RiRqdeydhEuXv2KxNeFcAKQ7UsvnWSY1OP4MsuPMbTO2Pf70tz7mFhl1j13H3fyh+8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxlint/binding-win32-arm64-msvc@1.66.0': - resolution: {integrity: sha512-O9GLucgoTdmOrbBX+EjzNe7o/Ze5TFOvXcib6bzUOtBOmj6cV+zw18NgB+cGKAkDw1Pdqs8vGkfHbbsLuDtXWg==} + '@oxlint/binding-win32-arm64-msvc@1.67.0': + resolution: {integrity: sha512-2VhwE6Gatb0vJGnN0TBuQMbKCOiZlSQ/zJvVWYLK4a9d4iDiJOen/yVQkGpmsJ90MuH66fzi0kEKI0jRQMDxGA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxlint/binding-win32-ia32-msvc@1.66.0': - resolution: {integrity: sha512-m3Pjwc2MfTcom4E4gOv7DyuGyt7OfGNCbmqDHd+N7EzXmP+ppHuudm2NjcA3AjV5TSeGxaguVF4SbTKHe1USYA==} + '@oxlint/binding-win32-ia32-msvc@1.67.0': + resolution: {integrity: sha512-EQ3VExXfeM1InbE5+JjufhZZTWy+kHUwgt3yZR7gQ47Je/mE0WspQPan0OJznh493L5anM210YNJtH1PXjTSFg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxlint/binding-win32-x64-msvc@1.66.0': - resolution: {integrity: sha512-/DbBvw8UFBhja6PqudUjV4UtfsJr0Oa7jUjWVKB0g86lj/VwnPrkngn0sFql3c9RDA0O16dh7ozsXb6GjNAzBQ==} + '@oxlint/binding-win32-x64-msvc@1.67.0': + resolution: {integrity: sha512-bw24y+/1MHS4QDkons3YyHkPT9uCMoLHHgQhb+mb8NOjTYwub1CZ+K9Ngr8aO5DMrDrkqHwTzlTwFP2vS8Y/ZQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -1732,50 +1736,97 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-4WHj9v41per176h00j3moITcHpR+8SNoAFdbDuJwUDCJiQkbrCjwulK8UwALxLPEGqyBdNARWcM6GXVTexBg1w==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-7kxHwV+zjANOeDn236ob/2nZy72slfid0ukGd0ApVRmDfG3iob4YEO8TuDet1RxNClis+k9l6zaPBJkujczzkA==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [darwin] - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-WeVqasFLVwbnwmjLhBTwfNminhaTfCo+ptOW2JT+IgY2WYBGIKXQmhaPPU5bdsHCur7O2RmY5tUAmvqv7V+kog==} + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-bDi6FJ644n3uKdp/ZI7j50ChVyGOsrJrkwihQb6x3yByFQkTINLu3e6ZkY+HveQ2Zw2vy9SGN8E7b3A5iSOO0A==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-V2RY5nKkNyBQMK39lCdG//VvCVwKhibQBhuelIm8TR4P2EduhJHB42ftr6lEVgZjW03qlrAEE/FWwTV6Wku2vA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-r6GXrTdalXZu1/b5goMpAe+efZvOfwdE45gl8Tti3fckP9icK3xdiN+VnNi0RL2/c2L86RyN8nGxihaCHGCKbw==} engines: {node: '>=16.20.0'} cpu: [x64] os: [darwin] - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-2Jd0iJOd77LLwsEDFc9O5nfPxvs75d1FafG7BhGGlfD8RtxL4+BzAy8KYI0++TTmHL6aL7+VIr3+TQ58S68Sfw==} + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-IVDSXjEyKgfa1SvwWux77cdb6W4ReycvLM9hYiJv42vzDJRt3g+H4LmaI6Ng+0Lq5syylzpVhJe4nh3logUsag==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-QJAFyPJgJqJVLbVPHl5xL7FCn3HNPLdpEm8l7KBgiYpltLhU1p/LJ3iN0XpFRAhq9ojWbZebo8t/h8MX35QjTQ==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [linux] - '@typescript/native-preview-linux-arm@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-C+fOL4DO/JTLkKT22Bw34FGiUpS4scqC+5AaaCVBCiHWXn1NknSrbvcMWEmg8HzCWPmiUwSQUryNZIFDqi8tUw==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-gEctrS100iZEwZgrJYuVN4pPW922CcozDneNwJkQld3zmFfSeGRLzj9oXCzP1JbMLq2np+DYrIkJ5ErPF1mwlA==} engines: {node: '>=16.20.0'} cpu: [arm] os: [linux] - '@typescript/native-preview-linux-x64@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-DiJLdnzh/TolhvDuGxqD1sxlQNnCFLsLLnGPVN6i+/DUPC/cWy0c+5RHruow9lQbtPkZ3aapztkYP2wEP1Ll6Q==} + '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-BlfQBatMkZHi3o+atxoUW0czGJNjo9cpO1BoQeB3gxZ7D/cDZHYHmKFSSRx8UxMktwP5k5lPxi0wgA3Ic2mQyQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-3t4r52PTZgRh+dO0me8o4GCPj3PEixtIEC1vqmQxR/JjDunLn4YOFwfDLyNWEflOxauPRKV5pWkSpd6HiBsZfw==} engines: {node: '>=16.20.0'} cpu: [x64] os: [linux] - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-axyNrdvX4D6T5ZuZHhufFbPRiKzJyqxusLl5nI3wJqmGN3G5JYCJY9k39LjRYI6oB3ingyKng+3QJ2q7b3IHQA==} + '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-UFB7ZdK2/vIIi62nfn3JhyGV7qR/qXjKPQaPVXwzCvaPieTZcsNsALjKU0W5WHThyi+5p3U7O3dGE7n6P4q4Yw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-0uR0M92lNwpgOyGBk+eZAAFuCsa3lc2l3IkvGWMo3fkD+eIBb8NwaqIhKpQ9VGvr6xfjJ3uf210j0Vxhl4HcLQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-rp/q9+9H77JQvepC/UpDP8CdeTGSGyhp9BVbmFwqUV2NhMHPldfys3ihY7OQdoVBgWIKQyxEHB+FTr8Z7kre1Q==} engines: {node: '>=16.20.0'} cpu: [arm64] os: [win32] - '@typescript/native-preview-win32-x64@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-NRBlDy12DLqCC7smCWlEgsiwCxUUl0TAVLUikm+c+WvFhnsY909jk1X8FNUHhNZmR3APHS57AMOq2rreQwHdiQ==} + '@typescript/native-preview-win32-x64@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-UvwEPV9tDgV8GAWkp5Kmq2LRKUlhwtrl0PUpMDOKInaXAndMtUCOQ+aFqd015jPmfNPKs84BRQoQYXyeaHVJDw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-864Pq4qoDcacUJhs2/kQplyfwNO0APUmx1k8qUaJt2P9ZGF0Pu++afJi7OagImHMiEQcmigjmZPuOodOk5YmqQ==} engines: {node: '>=16.20.0'} cpu: [x64] os: [win32] - '@typescript/native-preview@7.0.0-dev.20260523.1': - resolution: {integrity: sha512-+pkICUeoIbnecsvkEQFmkBC7qQqR5ltQQl+bXuGpKBOURVu2/zDA4i09Ef4KWWD6Kmx7i/EMO2fMZ3IsZEdzPw==} + '@typescript/native-preview@7.0.0-dev.20260526.1': + resolution: {integrity: sha512-ys/rYFNEVb4LZ7zUFxWZ6iv5gnIW29WRv3L9+hJKfAF3d/ekI76B4Ej4dU7odNCFiX85sCotljzq8N0QyruuoA==} + engines: {node: '>=16.20.0'} + hasBin: true + + '@typescript/native-preview@7.0.0-dev.20260527.1': + resolution: {integrity: sha512-j81qKiwCPgMEjtk8uDLP+TDW60l6mugoJ7SNzfHWv1PJ6bUjIAHuag4P1jSLm1IpKuMuB3TTi4f61n7TJi8Jog==} engines: {node: '>=16.20.0'} hasBin: true @@ -2318,8 +2369,8 @@ packages: unstorage: optional: true - hono@4.12.22: - resolution: {integrity: sha512-7fvVPbB92zNRsQke+uiRGwtTuef0tB2Dg4hWxYfFNvkQhIltWoyi0ONReM5LWA+jJWS3nfT5lTq+qbsIpX0IQw==} + hono@4.12.23: + resolution: {integrity: sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.3: @@ -2668,25 +2719,31 @@ packages: outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - oxfmt@0.51.0: - resolution: {integrity: sha512-l/AoAnaEOV7Q5/Z9kHOMDehVJnCgYN7wRoooWCTUMBMi16BJhLZqd9cmCnwcVFfVlzkt53zK2KLPFNp8vSsoDg==} + oxfmt@0.52.0: + resolution: {integrity: sha512-nJlYM35F64zTDMecCNhoHNkf+D/eHv7xcjj9XDSj+bFAVtN93m7v8DQMdHd6nDG6Akf/kEYYHmDUBs2Dz27Sug==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: svelte: ^5.0.0 + vite-plus: '*' peerDependenciesMeta: svelte: optional: true + vite-plus: + optional: true - oxlint@1.66.0: - resolution: {integrity: sha512-N4LLxYLd94KEBqXDMDM5f+2PUpItTjDLreXe2Gn5KhjhCK4Qp2YUXaBi8Yu325ryOgKwt22m45fpD7nPOn69Yw==} + oxlint@1.67.0: + resolution: {integrity: sha512-blwwaHPdoH8piQ5/z0KHeoHFR7FZgl12WluKJfu4qFLPkZl6mK04PkLE45Fw1NxfBRSlh40Gu7MkxHUw++ociQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' peerDependenciesMeta: oxlint-tsgolint: optional: true + vite-plus: + optional: true p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} @@ -3020,8 +3077,8 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.1.2: - resolution: {integrity: sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==} + tinyexec@1.2.2: + resolution: {integrity: sha512-M/Q0B2cp4K7kynaT/vnED1j8TlLY+Pp7C6Wl2bl/7u/F0mUVwdyOpwomQb8JpYLitHUssAJRmLZdMCGsrx7i+g==} engines: {node: '>=18'} tinyglobby@0.2.16: @@ -3724,6 +3781,8 @@ snapshots: '@babel/runtime@7.29.2': {} + '@babel/runtime@7.29.7': {} + '@borewit/text-codec@0.2.2': {} '@changesets/apply-release-plan@7.1.1': @@ -4055,21 +4114,21 @@ snapshots: - supports-color - utf-8-validate - '@hono/mcp@0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.22))(hono@4.12.22)(zod@4.4.3)': + '@hono/mcp@0.3.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(hono-rate-limiter@0.5.3(hono@4.12.23))(hono@4.12.23)(zod@4.4.3)': dependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) - hono: 4.12.22 - hono-rate-limiter: 0.5.3(hono@4.12.22) + hono: 4.12.23 + hono-rate-limiter: 0.5.3(hono@4.12.23) pkce-challenge: 5.0.1 zod: 4.4.3 - '@hono/node-server@1.19.14(hono@4.12.22)': + '@hono/node-server@1.19.14(hono@4.12.23)': dependencies: - hono: 4.12.22 + hono: 4.12.23 - '@hono/node-server@2.0.3(hono@4.12.22)': + '@hono/node-server@2.0.4(hono@4.12.23)': dependencies: - hono: 4.12.22 + hono: 4.12.23 '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': dependencies: @@ -4082,14 +4141,14 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.29.7 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -4151,7 +4210,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.22) + '@hono/node-server': 1.19.14(hono@4.12.23) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -4161,7 +4220,7 @@ snapshots: eventsource-parser: 3.0.8 express: 5.2.1 express-rate-limit: 8.5.2(express@5.2.1) - hono: 4.12.22 + hono: 4.12.23 jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -4224,118 +4283,118 @@ snapshots: '@oxc-project/types@0.132.0': {} - '@oxfmt/binding-android-arm-eabi@0.51.0': + '@oxfmt/binding-android-arm-eabi@0.52.0': optional: true - '@oxfmt/binding-android-arm64@0.51.0': + '@oxfmt/binding-android-arm64@0.52.0': optional: true - '@oxfmt/binding-darwin-arm64@0.51.0': + '@oxfmt/binding-darwin-arm64@0.52.0': optional: true - '@oxfmt/binding-darwin-x64@0.51.0': + '@oxfmt/binding-darwin-x64@0.52.0': optional: true - '@oxfmt/binding-freebsd-x64@0.51.0': + '@oxfmt/binding-freebsd-x64@0.52.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.51.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.51.0': + '@oxfmt/binding-linux-arm-musleabihf@0.52.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.51.0': + '@oxfmt/binding-linux-arm64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.51.0': + '@oxfmt/binding-linux-arm64-musl@0.52.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.51.0': + '@oxfmt/binding-linux-ppc64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.51.0': + '@oxfmt/binding-linux-riscv64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.51.0': + '@oxfmt/binding-linux-riscv64-musl@0.52.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.51.0': + '@oxfmt/binding-linux-s390x-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.51.0': + '@oxfmt/binding-linux-x64-gnu@0.52.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.51.0': + '@oxfmt/binding-linux-x64-musl@0.52.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.51.0': + '@oxfmt/binding-openharmony-arm64@0.52.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.51.0': + '@oxfmt/binding-win32-arm64-msvc@0.52.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.51.0': + '@oxfmt/binding-win32-ia32-msvc@0.52.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.51.0': + '@oxfmt/binding-win32-x64-msvc@0.52.0': optional: true - '@oxlint/binding-android-arm-eabi@1.66.0': + '@oxlint/binding-android-arm-eabi@1.67.0': optional: true - '@oxlint/binding-android-arm64@1.66.0': + '@oxlint/binding-android-arm64@1.67.0': optional: true - '@oxlint/binding-darwin-arm64@1.66.0': + '@oxlint/binding-darwin-arm64@1.67.0': optional: true - '@oxlint/binding-darwin-x64@1.66.0': + '@oxlint/binding-darwin-x64@1.67.0': optional: true - '@oxlint/binding-freebsd-x64@1.66.0': + '@oxlint/binding-freebsd-x64@1.67.0': optional: true - '@oxlint/binding-linux-arm-gnueabihf@1.66.0': + '@oxlint/binding-linux-arm-gnueabihf@1.67.0': optional: true - '@oxlint/binding-linux-arm-musleabihf@1.66.0': + '@oxlint/binding-linux-arm-musleabihf@1.67.0': optional: true - '@oxlint/binding-linux-arm64-gnu@1.66.0': + '@oxlint/binding-linux-arm64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-arm64-musl@1.66.0': + '@oxlint/binding-linux-arm64-musl@1.67.0': optional: true - '@oxlint/binding-linux-ppc64-gnu@1.66.0': + '@oxlint/binding-linux-ppc64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-riscv64-gnu@1.66.0': + '@oxlint/binding-linux-riscv64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-riscv64-musl@1.66.0': + '@oxlint/binding-linux-riscv64-musl@1.67.0': optional: true - '@oxlint/binding-linux-s390x-gnu@1.66.0': + '@oxlint/binding-linux-s390x-gnu@1.67.0': optional: true - '@oxlint/binding-linux-x64-gnu@1.66.0': + '@oxlint/binding-linux-x64-gnu@1.67.0': optional: true - '@oxlint/binding-linux-x64-musl@1.66.0': + '@oxlint/binding-linux-x64-musl@1.67.0': optional: true - '@oxlint/binding-openharmony-arm64@1.66.0': + '@oxlint/binding-openharmony-arm64@1.67.0': optional: true - '@oxlint/binding-win32-arm64-msvc@1.66.0': + '@oxlint/binding-win32-arm64-msvc@1.67.0': optional: true - '@oxlint/binding-win32-ia32-msvc@1.66.0': + '@oxlint/binding-win32-ia32-msvc@1.67.0': optional: true - '@oxlint/binding-win32-x64-msvc@1.66.0': + '@oxlint/binding-win32-x64-msvc@1.67.0': optional: true '@protobufjs/aspromise@1.1.2': {} @@ -4737,36 +4796,67 @@ snapshots: '@types/node': 25.9.0 optional: true - '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260523.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260526.1': optional: true - '@typescript/native-preview-darwin-x64@7.0.0-dev.20260523.1': + '@typescript/native-preview-darwin-arm64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-linux-arm64@7.0.0-dev.20260523.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260526.1': optional: true - '@typescript/native-preview-linux-arm@7.0.0-dev.20260523.1': + '@typescript/native-preview-darwin-x64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-linux-x64@7.0.0-dev.20260523.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260526.1': optional: true - '@typescript/native-preview-win32-arm64@7.0.0-dev.20260523.1': + '@typescript/native-preview-linux-arm64@7.0.0-dev.20260527.1': optional: true - '@typescript/native-preview-win32-x64@7.0.0-dev.20260523.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260526.1': optional: true - '@typescript/native-preview@7.0.0-dev.20260523.1': + '@typescript/native-preview-linux-arm@7.0.0-dev.20260527.1': + optional: true + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260526.1': + optional: true + + '@typescript/native-preview-linux-x64@7.0.0-dev.20260527.1': + optional: true + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260526.1': + optional: true + + '@typescript/native-preview-win32-arm64@7.0.0-dev.20260527.1': + optional: true + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260526.1': + optional: true + + '@typescript/native-preview-win32-x64@7.0.0-dev.20260527.1': + optional: true + + '@typescript/native-preview@7.0.0-dev.20260526.1': + optionalDependencies: + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260526.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260526.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260526.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260526.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260526.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260526.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260526.1 + + '@typescript/native-preview@7.0.0-dev.20260527.1': optionalDependencies: - '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260523.1 - '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260523.1 - '@typescript/native-preview-linux-arm': 7.0.0-dev.20260523.1 - '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260523.1 - '@typescript/native-preview-linux-x64': 7.0.0-dev.20260523.1 - '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260523.1 - '@typescript/native-preview-win32-x64': 7.0.0-dev.20260523.1 + '@typescript/native-preview-darwin-arm64': 7.0.0-dev.20260527.1 + '@typescript/native-preview-darwin-x64': 7.0.0-dev.20260527.1 + '@typescript/native-preview-linux-arm': 7.0.0-dev.20260527.1 + '@typescript/native-preview-linux-arm64': 7.0.0-dev.20260527.1 + '@typescript/native-preview-linux-x64': 7.0.0-dev.20260527.1 + '@typescript/native-preview-win32-arm64': 7.0.0-dev.20260527.1 + '@typescript/native-preview-win32-x64': 7.0.0-dev.20260527.1 '@vitest/expect@4.1.7': dependencies: @@ -4777,13 +4867,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.7(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0))': + '@vitest/mocker@4.1.7(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.7 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0) '@vitest/pretty-format@4.1.7': dependencies: @@ -5354,11 +5444,11 @@ snapshots: highlight.js@10.7.3: {} - hono-rate-limiter@0.5.3(hono@4.12.22): + hono-rate-limiter@0.5.3(hono@4.12.23): dependencies: - hono: 4.12.22 + hono: 4.12.23 - hono@4.12.22: {} + hono@4.12.23: {} hosted-git-info@9.0.3: dependencies: @@ -5636,51 +5726,51 @@ snapshots: outdent@0.5.0: {} - oxfmt@0.51.0: + oxfmt@0.52.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.51.0 - '@oxfmt/binding-android-arm64': 0.51.0 - '@oxfmt/binding-darwin-arm64': 0.51.0 - '@oxfmt/binding-darwin-x64': 0.51.0 - '@oxfmt/binding-freebsd-x64': 0.51.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.51.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.51.0 - '@oxfmt/binding-linux-arm64-gnu': 0.51.0 - '@oxfmt/binding-linux-arm64-musl': 0.51.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.51.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.51.0 - '@oxfmt/binding-linux-riscv64-musl': 0.51.0 - '@oxfmt/binding-linux-s390x-gnu': 0.51.0 - '@oxfmt/binding-linux-x64-gnu': 0.51.0 - '@oxfmt/binding-linux-x64-musl': 0.51.0 - '@oxfmt/binding-openharmony-arm64': 0.51.0 - '@oxfmt/binding-win32-arm64-msvc': 0.51.0 - '@oxfmt/binding-win32-ia32-msvc': 0.51.0 - '@oxfmt/binding-win32-x64-msvc': 0.51.0 - - oxlint@1.66.0: + '@oxfmt/binding-android-arm-eabi': 0.52.0 + '@oxfmt/binding-android-arm64': 0.52.0 + '@oxfmt/binding-darwin-arm64': 0.52.0 + '@oxfmt/binding-darwin-x64': 0.52.0 + '@oxfmt/binding-freebsd-x64': 0.52.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 + '@oxfmt/binding-linux-arm64-gnu': 0.52.0 + '@oxfmt/binding-linux-arm64-musl': 0.52.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 + '@oxfmt/binding-linux-riscv64-musl': 0.52.0 + '@oxfmt/binding-linux-s390x-gnu': 0.52.0 + '@oxfmt/binding-linux-x64-gnu': 0.52.0 + '@oxfmt/binding-linux-x64-musl': 0.52.0 + '@oxfmt/binding-openharmony-arm64': 0.52.0 + '@oxfmt/binding-win32-arm64-msvc': 0.52.0 + '@oxfmt/binding-win32-ia32-msvc': 0.52.0 + '@oxfmt/binding-win32-x64-msvc': 0.52.0 + + oxlint@1.67.0: optionalDependencies: - '@oxlint/binding-android-arm-eabi': 1.66.0 - '@oxlint/binding-android-arm64': 1.66.0 - '@oxlint/binding-darwin-arm64': 1.66.0 - '@oxlint/binding-darwin-x64': 1.66.0 - '@oxlint/binding-freebsd-x64': 1.66.0 - '@oxlint/binding-linux-arm-gnueabihf': 1.66.0 - '@oxlint/binding-linux-arm-musleabihf': 1.66.0 - '@oxlint/binding-linux-arm64-gnu': 1.66.0 - '@oxlint/binding-linux-arm64-musl': 1.66.0 - '@oxlint/binding-linux-ppc64-gnu': 1.66.0 - '@oxlint/binding-linux-riscv64-gnu': 1.66.0 - '@oxlint/binding-linux-riscv64-musl': 1.66.0 - '@oxlint/binding-linux-s390x-gnu': 1.66.0 - '@oxlint/binding-linux-x64-gnu': 1.66.0 - '@oxlint/binding-linux-x64-musl': 1.66.0 - '@oxlint/binding-openharmony-arm64': 1.66.0 - '@oxlint/binding-win32-arm64-msvc': 1.66.0 - '@oxlint/binding-win32-ia32-msvc': 1.66.0 - '@oxlint/binding-win32-x64-msvc': 1.66.0 + '@oxlint/binding-android-arm-eabi': 1.67.0 + '@oxlint/binding-android-arm64': 1.67.0 + '@oxlint/binding-darwin-arm64': 1.67.0 + '@oxlint/binding-darwin-x64': 1.67.0 + '@oxlint/binding-freebsd-x64': 1.67.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.67.0 + '@oxlint/binding-linux-arm-musleabihf': 1.67.0 + '@oxlint/binding-linux-arm64-gnu': 1.67.0 + '@oxlint/binding-linux-arm64-musl': 1.67.0 + '@oxlint/binding-linux-ppc64-gnu': 1.67.0 + '@oxlint/binding-linux-riscv64-gnu': 1.67.0 + '@oxlint/binding-linux-riscv64-musl': 1.67.0 + '@oxlint/binding-linux-s390x-gnu': 1.67.0 + '@oxlint/binding-linux-x64-gnu': 1.67.0 + '@oxlint/binding-linux-x64-musl': 1.67.0 + '@oxlint/binding-openharmony-arm64': 1.67.0 + '@oxlint/binding-win32-arm64-msvc': 1.67.0 + '@oxlint/binding-win32-ia32-msvc': 1.67.0 + '@oxlint/binding-win32-x64-msvc': 1.67.0 p-filter@2.1.0: dependencies: @@ -6060,7 +6150,7 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.1.2: {} + tinyexec@1.2.2: {} tinyglobby@0.2.16: dependencies: @@ -6149,7 +6239,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0): + vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -6160,14 +6250,13 @@ snapshots: '@types/node': 25.9.1 esbuild: 0.28.0 fsevents: 2.3.3 - jiti: 2.7.0 tsx: 4.22.3 yaml: 2.9.0 - vitest@4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)): + vitest@4.1.7(@types/node@25.9.1)(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.7 - '@vitest/mocker': 4.1.7(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0)) + '@vitest/mocker': 4.1.7(vite@8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.7 '@vitest/runner': 4.1.7 '@vitest/snapshot': 4.1.7 @@ -6181,10 +6270,10 @@ snapshots: picomatch: 4.0.4 std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.1.2 + tinyexec: 1.2.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(jiti@2.7.0)(tsx@4.22.3)(yaml@2.9.0) + vite: 8.0.11(@types/node@25.9.1)(esbuild@0.28.0)(tsx@4.22.3)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.9.1