woods 2.0.0.beta2 → 2.0.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +262 -1
- data/CONTRIBUTING.md +173 -9
- data/README.md +7 -3
- data/SECURITY.md +9 -6
- data/docs/AGENT_GUIDE.md +83 -4
- data/docs/AGENT_SETUP.md +82 -1
- data/docs/BACKEND_MATRIX.md +20 -0
- data/docs/CLIENT_HOOKS.md +111 -0
- data/docs/CONFIGURATION_REFERENCE.md +199 -14
- data/docs/CONSOLE_MCP_SETUP.md +35 -5
- data/docs/DOCKER_SETUP.md +21 -2
- data/docs/EVALUATION.md +464 -1
- data/docs/EXTRACTOR_REFERENCE.md +36 -5
- data/docs/FAQ.md +11 -12
- data/docs/GETTING_STARTED.md +17 -5
- data/docs/INCREMENTAL_EXTRACTION.md +117 -1
- data/docs/INDEX_LAYOUT.md +382 -0
- data/docs/INTERNALS.md +7 -2
- data/docs/MCP_SERVERS.md +221 -5
- data/docs/MCP_TOOL_COOKBOOK.md +33 -18
- data/docs/NOTION_INTEGRATION.md +13 -0
- data/docs/OBSIDIAN_INTEGRATION.md +57 -9
- data/docs/PUBLISHED_INDEX.md +55 -0
- data/docs/README.md +7 -0
- data/docs/RETRIEVAL_GUIDE.md +253 -11
- data/docs/RUNTIME_TRACING.md +71 -0
- data/docs/SOURCE_FRESHNESS.md +143 -0
- data/docs/TROUBLESHOOTING.md +117 -5
- data/docs/UNBLOCKED_INTEGRATION.md +25 -0
- data/docs/UPGRADING_TO_2.md +44 -22
- data/docs/WATCH_DAEMON.md +259 -59
- data/exe/woods-agent-config +6 -0
- data/exe/woods-extract +5 -0
- data/exe/woods-hook-context +6 -0
- data/lib/generators/woods/templates/woods.rb.tt +1 -3
- data/lib/tasks/woods.rake +47 -397
- data/lib/woods/agent_configuration/applier.rb +133 -0
- data/lib/woods/agent_configuration/cli.rb +101 -0
- data/lib/woods/agent_configuration/cli_options.rb +29 -0
- data/lib/woods/agent_configuration/document.rb +105 -0
- data/lib/woods/agent_configuration/error.rb +7 -0
- data/lib/woods/agent_configuration/launcher.rb +75 -0
- data/lib/woods/agent_configuration/layout.rb +59 -0
- data/lib/woods/agent_configuration/managed_section.rb +62 -0
- data/lib/woods/agent_configuration/plan.rb +98 -0
- data/lib/woods/agent_configuration/plan_diff.rb +38 -0
- data/lib/woods/agent_configuration/planned_files.rb +61 -0
- data/lib/woods/agent_configuration/planner.rb +63 -0
- data/lib/woods/agent_configuration/planner_validation.rb +77 -0
- data/lib/woods/agent_configuration/preflight.rb +100 -0
- data/lib/woods/agent_configuration/recovery.rb +49 -0
- data/lib/woods/ast/node.rb +2 -0
- data/lib/woods/ast/parser.rb +38 -5
- data/lib/woods/builder.rb +21 -5
- data/lib/woods/cache/cache_middleware.rb +28 -7
- data/lib/woods/cache/cache_store.rb +4 -5
- data/lib/woods/change_set.rb +5 -4
- data/lib/woods/console/credential_index.rb +20 -2
- data/lib/woods/console/credential_scanner.rb +14 -14
- data/lib/woods/console/credential_scanner_registry.rb +36 -0
- data/lib/woods/console/embedded_executor.rb +1 -1
- data/lib/woods/console/encrypted_credential_snapshot.rb +16 -0
- data/lib/woods/console/rack_middleware.rb +22 -13
- data/lib/woods/console/server.rb +18 -16
- data/lib/woods/dependency_graph.rb +65 -13
- data/lib/woods/embedding/corpus.rb +94 -0
- data/lib/woods/embedding/indexer.rb +90 -46
- data/lib/woods/embedding/openai.rb +17 -6
- data/lib/woods/evaluation/ablation_executor.rb +6 -1
- data/lib/woods/evaluation/ablation_timed_executor.rb +22 -4
- data/lib/woods/export/typed_reader.rb +56 -0
- data/lib/woods/extractor.rb +232 -137
- data/lib/woods/extractors/action_cable_extractor.rb +3 -1
- data/lib/woods/extractors/behavioral_profile.rb +9 -7
- data/lib/woods/extractors/caching_extractor.rb +3 -1
- data/lib/woods/extractors/concern_extractor.rb +64 -6
- data/lib/woods/extractors/configuration_extractor.rb +7 -3
- data/lib/woods/extractors/controller_extractor.rb +13 -4
- data/lib/woods/extractors/database_view_extractor.rb +3 -1
- data/lib/woods/extractors/decorator_extractor.rb +3 -1
- data/lib/woods/extractors/engine_extractor.rb +3 -1
- data/lib/woods/extractors/event_extractor.rb +4 -2
- data/lib/woods/extractors/factory_extractor.rb +3 -1
- data/lib/woods/extractors/graphql_extractor.rb +8 -2
- data/lib/woods/extractors/i18n_extractor.rb +3 -1
- data/lib/woods/extractors/job_extractor.rb +6 -19
- data/lib/woods/extractors/lib_extractor.rb +3 -1
- data/lib/woods/extractors/mailer_extractor.rb +20 -5
- data/lib/woods/extractors/manager_extractor.rb +3 -1
- data/lib/woods/extractors/method_parameters.rb +53 -0
- data/lib/woods/extractors/middleware_argument.rb +65 -0
- data/lib/woods/extractors/middleware_extractor.rb +9 -3
- data/lib/woods/extractors/migration_extractor.rb +3 -1
- data/lib/woods/extractors/model_extractor.rb +39 -33
- data/lib/woods/extractors/package_extractor.rb +24 -4
- data/lib/woods/extractors/phlex_extractor.rb +3 -1
- data/lib/woods/extractors/policy_extractor.rb +3 -1
- data/lib/woods/extractors/poro_extractor.rb +3 -1
- data/lib/woods/extractors/pundit_extractor.rb +3 -1
- data/lib/woods/extractors/rails_source_extractor.rb +4 -2
- data/lib/woods/extractors/rake_task_extractor.rb +4 -2
- data/lib/woods/extractors/route_extractor.rb +3 -1
- data/lib/woods/extractors/route_helper_resolver.rb +10 -33
- data/lib/woods/extractors/scheduled_job_extractor.rb +41 -15
- data/lib/woods/extractors/serializer_extractor.rb +4 -2
- data/lib/woods/extractors/service_extractor.rb +3 -1
- data/lib/woods/extractors/shared_dependency_scanner.rb +2 -2
- data/lib/woods/extractors/shared_utility_methods.rb +27 -15
- data/lib/woods/extractors/source_nesting.rb +1 -1
- data/lib/woods/extractors/state_machine_extractor.rb +3 -1
- data/lib/woods/extractors/test_mapping_extractor.rb +3 -1
- data/lib/woods/extractors/validator_extractor.rb +3 -1
- data/lib/woods/extractors/view_component_extractor.rb +3 -1
- data/lib/woods/extractors/view_template_extractor.rb +3 -1
- data/lib/woods/gem_mapper.rb +2 -0
- data/lib/woods/git_history.rb +116 -0
- data/lib/woods/graph_analyzer.rb +35 -6
- data/lib/woods/hooks/context_cli.rb +54 -0
- data/lib/woods/hooks/context_event.rb +88 -0
- data/lib/woods/hooks/context_hint.rb +73 -0
- data/lib/woods/hooks/context_impact.rb +77 -0
- data/lib/woods/hooks/context_output.rb +47 -0
- data/lib/woods/hooks/context_state.rb +102 -0
- data/lib/woods/hooks/refresh.rb +79 -0
- data/lib/woods/hooks/rule_projection.rb +78 -0
- data/lib/woods/input_rules.rb +19 -0
- data/lib/woods/mcp/bearer_auth.rb +20 -12
- data/lib/woods/mcp/bootstrapper.rb +62 -0
- data/lib/woods/mcp/index_reader.rb +323 -160
- data/lib/woods/mcp/initialization_guidance.rb +27 -0
- data/lib/woods/mcp/origin_guard.rb +17 -9
- data/lib/woods/mcp/published_lexical_retriever.rb +115 -0
- data/lib/woods/mcp/renderers/markdown_renderer.rb +8 -1
- data/lib/woods/mcp/renderers/plain_renderer.rb +7 -1
- data/lib/woods/mcp/search_results.rb +74 -0
- data/lib/woods/mcp/server.rb +158 -37
- data/lib/woods/mcp/tool_contract.rb +2 -0
- data/lib/woods/mcp/tool_response_renderer.rb +25 -0
- data/lib/woods/mcp/traversal_evidence.rb +113 -0
- data/lib/woods/mcp/traversal_evidence_index.rb +100 -0
- data/lib/woods/mcp/traversal_evidence_page.rb +41 -0
- data/lib/woods/mcp/traversal_evidence_text.rb +52 -0
- data/lib/woods/notion/exporter.rb +56 -17
- data/lib/woods/obsidian/destination_plan.rb +98 -0
- data/lib/woods/obsidian/name_mapper.rb +19 -3
- data/lib/woods/obsidian/note_builder.rb +19 -10
- data/lib/woods/obsidian/vault_exporter.rb +88 -32
- data/lib/woods/operator/pipeline_guard.rb +18 -13
- data/lib/woods/path_dispatcher.rb +7 -1
- data/lib/woods/payload_store.rb +27 -26
- data/lib/woods/railtie.rb +3 -3
- data/lib/woods/railtie_support.rb +12 -12
- data/lib/woods/rake_helpers.rb +392 -0
- data/lib/woods/resilience/graph_invariant_validator/membership_checks.rb +71 -0
- data/lib/woods/resilience/graph_invariant_validator/node_checks.rb +61 -0
- data/lib/woods/resilience/graph_invariant_validator/reverse_relationship_checks.rb +46 -0
- data/lib/woods/resilience/graph_invariant_validator.rb +119 -0
- data/lib/woods/resilience/index_validator/graph_checks.rb +80 -0
- data/lib/woods/resilience/index_validator.rb +112 -23
- data/lib/woods/retrieval/context_assembler.rb +50 -15
- data/lib/woods/retrieval/lexical_assembler.rb +73 -0
- data/lib/woods/retrieval/lexical_index.rb +119 -0
- data/lib/woods/retrieval/ranker.rb +4 -2
- data/lib/woods/retrieval/scope.rb +108 -0
- data/lib/woods/retrieval/scoped_graph_store.rb +32 -0
- data/lib/woods/retrieval/scoped_vector_store.rb +55 -0
- data/lib/woods/retrieval/search_executor.rb +86 -27
- data/lib/woods/retrieval/source_evidence.rb +200 -0
- data/lib/woods/retriever.rb +98 -22
- data/lib/woods/ruby_analyzer/trace_enricher.rb +77 -38
- data/lib/woods/session_tracer/middleware.rb +10 -12
- data/lib/woods/session_tracer/redis_store.rb +22 -6
- data/lib/woods/session_tracer/session_flow_assembler.rb +23 -17
- data/lib/woods/session_tracer/solid_cache_coordination.rb +6 -4
- data/lib/woods/session_tracer/unit_resolver.rb +63 -0
- data/lib/woods/source_inputs/consumer_errors.rb +27 -0
- data/lib/woods/source_inputs/handoff.rb +102 -0
- data/lib/woods/source_inputs/launcher.rb +157 -0
- data/lib/woods/source_inputs/manifest.rb +124 -0
- data/lib/woods/source_inputs/private_key.rb +55 -0
- data/lib/woods/source_inputs/scanner.rb +171 -0
- data/lib/woods/source_inputs/scopes.rb +71 -0
- data/lib/woods/source_inputs/session.rb +214 -0
- data/lib/woods/source_inputs/status.rb +84 -0
- data/lib/woods/source_inputs/verifier.rb +107 -0
- data/lib/woods/storage/metadata_store.rb +25 -25
- data/lib/woods/storage/pgvector.rb +29 -8
- data/lib/woods/storage/qdrant.rb +17 -7
- data/lib/woods/storage/vector_store.rb +18 -6
- data/lib/woods/tasks.rb +3 -2
- data/lib/woods/temporal/json_snapshot_store.rb +29 -8
- data/lib/woods/unblocked/exporter.rb +59 -70
- data/lib/woods/version.rb +1 -1
- data/lib/woods/watch/boot_snapshot.rb +52 -0
- data/lib/woods/watch/daemon.rb +136 -28
- data/lib/woods/watch/listen_watcher.rb +4 -0
- data/lib/woods/watch/polling_watcher.rb +5 -1
- data/lib/woods/watch/status.rb +20 -15
- data/lib/woods/watch/tree_scan.rb +21 -13
- data/lib/woods/watch/watcher.rb +4 -1
- data/lib/woods.rb +50 -11
- data/plugin/.claude-plugin/plugin.json +1 -1
- data/plugin/hooks/adapters/normalize.jq +15 -0
- data/plugin/hooks/adapters/normalize.rb +63 -0
- data/plugin/hooks/hooks.json +20 -0
- data/plugin/hooks/woods-context.sh +50 -0
- data/plugin/hooks/woods-input-rules.sh +159 -0
- data/plugin/hooks/woods-opencode.mjs +65 -0
- data/plugin/hooks/woods-post-edit.sh +2 -225
- data/plugin/hooks/woods-refresh.sh +260 -0
- data/plugin/hooks/woods-session-start.sh +47 -55
- data/plugin/skills/woods-agent-enable/SKILL.md +13 -0
- data/plugin/skills/woods-diagnose/SKILL.md +288 -1
- data/plugin/skills/woods-investigate/SKILL.md +106 -0
- data/plugin/skills/woods-mcp-config/SKILL.md +89 -1
- data/plugin/skills/woods-setup/SKILL.md +107 -6
- metadata +84 -5
|
@@ -7,6 +7,19 @@ description: Install, upgrade, and first-run-configure the Woods Rails code-inte
|
|
|
7
7
|
|
|
8
8
|
Install a structural Index Server first. Embeddings and Console MCP are separate opt-ins.
|
|
9
9
|
|
|
10
|
+
## Managed configuration availability
|
|
11
|
+
|
|
12
|
+
`woods-agent-config` (#407) is unreleased after `2.0.0.beta2`. First record the
|
|
13
|
+
installed version and test `bundle exec woods-agent-config --help` in the
|
|
14
|
+
selected application bundle. When supported, use its saved setup/update/remove
|
|
15
|
+
plan and explicit client/scope/root selection; apply the reviewed plan within
|
|
16
|
+
the user's existing authorization. Do not infer ownership from a server name
|
|
17
|
+
or repair edited managed sections by overwriting them. Plans and recovery
|
|
18
|
+
journals contain private configuration bytes. See the canonical
|
|
19
|
+
[managed configuration runbook](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_SETUP.md#managed-claude-code-configuration)
|
|
20
|
+
for host/Compose preflight, actual Claude file locations, conflict recovery,
|
|
21
|
+
and removal. Preserve manual setup for older installed versions.
|
|
22
|
+
|
|
10
23
|
## Preflight
|
|
11
24
|
|
|
12
25
|
Read repository instructions and preserve unrelated changes. Record:
|
|
@@ -23,7 +36,14 @@ This skill describes the Woods 2.x line; the authoritative minimum version lives
|
|
|
23
36
|
|
|
24
37
|
## Install and inspect
|
|
25
38
|
|
|
26
|
-
|
|
39
|
+
Choose the published version using the canonical
|
|
40
|
+
[installation guide](https://github.com/lost-in-the/woods/blob/main/docs/GETTING_STARTED.md#1-install-the-gem)
|
|
41
|
+
and its linked README release table. When only prereleases are published for
|
|
42
|
+
2.x, add the exact published beta/RC constraint shown there to the development
|
|
43
|
+
group; `~> 2.0` does not select prereleases. Use `gem "woods", "~> 2.0"` only after
|
|
44
|
+
a stable 2.x release is published. Follow the selected version's tag docs and
|
|
45
|
+
verify installed capabilities; installing this plugin does not install `main`
|
|
46
|
+
features. Then run:
|
|
27
47
|
|
|
28
48
|
```bash
|
|
29
49
|
bundle install
|
|
@@ -54,6 +74,12 @@ bin/rails woods:stats
|
|
|
54
74
|
|
|
55
75
|
If extraction fails, reproduce Rails boot and eager loading first. Do not inspect internal payload files when Woods tasks provide the check.
|
|
56
76
|
|
|
77
|
+
Writer-version provenance (#323) is unreleased; check the installed gem version's
|
|
78
|
+
release notes before expecting `woods_status.index.woods_version`. When present,
|
|
79
|
+
it names the last manifest publisher; `server.version` names the MCP reader.
|
|
80
|
+
Missing/null means unknown. A matching version after an incremental run never
|
|
81
|
+
replaces a required full upgrade extraction. See [writer provenance](https://github.com/lost-in-the/woods/blob/main/docs/PUBLISHED_INDEX.md#manifest-writer-provenance).
|
|
82
|
+
|
|
57
83
|
Configure the Index Server with the application bundle, absolute app `cwd`, and an index path visible to that process. For a host-installed bundle:
|
|
58
84
|
|
|
59
85
|
```json
|
|
@@ -82,11 +108,49 @@ When Woods is installed only in Docker, launch it through the application servic
|
|
|
82
108
|
}
|
|
83
109
|
```
|
|
84
110
|
|
|
85
|
-
Reconnect and call `woods_status`, then `search`, `lookup`, and `dependents` for a known class. The normal Index Server has 14 tools. `codebase_retrieve` requires configured embeddings.
|
|
86
|
-
|
|
87
|
-
Offer to add `bundle exec rake woods:watch` to the existing development process manager. When authorized, it catches up missed changes and automatically maintains the structural index; the Index Server refreshes on its next call, so ordinary edits need no manual extraction or MCP restart. State that boot-captured changes require supervisor restart, Docker may need `WOODS_WATCH_POLL=1`, and semantic vectors still need `woods:embed_incremental`.
|
|
88
|
-
|
|
89
|
-
|
|
111
|
+
Reconnect and call `woods_status`, then `search`, `lookup`, and `dependents` for a known class. The normal Index Server has 14 tools. `codebase_retrieve` requires configured embeddings in semantic mode; see the lexical capability check below for the opt-in provider-free mode.
|
|
112
|
+
|
|
113
|
+
Offer to add `bundle exec rake woods:watch` to the existing development process manager. When authorized, it catches up missed changes and automatically maintains the structural index; the Index Server refreshes on its next call, so ordinary edits need no manual extraction or MCP restart. Use the standalone watch command; do not prepend the `environment` task. Check the installed version's watch guide before relying on automatic startup reconciliation. State that live boot-captured changes require supervisor restart, Docker may need `WOODS_WATCH_POLL=1`, and semantic vectors still need `woods:embed_incremental`.
|
|
114
|
+
|
|
115
|
+
Foreign-host heartbeat trust (`WOODS_WATCH_TRUST_FOREIGN_HOST=1`, #321) is unreleased.
|
|
116
|
+
Check the installed gem version against its release notes before offering it;
|
|
117
|
+
do not assume installing this plugin upgrades the gem. For a supporting version,
|
|
118
|
+
follow [cross-host liveness](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#cross-host-liveness)
|
|
119
|
+
and set the opt-in in each task/MCP reader of a shared container index. Explain
|
|
120
|
+
the 15-minute crash-detection delay and preserve one supervisor per daemon.
|
|
121
|
+
|
|
122
|
+
For slow bind mounts, check whether the installed version documents
|
|
123
|
+
`WOODS_WATCH_POLL_INTERVAL` before suggesting it; this setting is unreleased
|
|
124
|
+
in Woods 2.0.0.beta2. Where supported, a positive value such as `2.5` reduces
|
|
125
|
+
polling frequency at the cost of detection latency. Use the installed preflight version to select tagged documentation; the
|
|
126
|
+
[canonical watch guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md)
|
|
127
|
+
tracks current source and may describe unreleased behavior.
|
|
128
|
+
|
|
129
|
+
The plugin ships opt-in refresh and session-start hooks. The expanded refresh
|
|
130
|
+
contract (#408) is unreleased after Woods 2.0.0.beta2: first verify the installed
|
|
131
|
+
gem exposes `woods:hook_refresh` through the actual application command. Do not
|
|
132
|
+
infer support from the plugin version. With support, edits to standard services,
|
|
133
|
+
controllers, jobs, views, concerns, locales, supported tests/lib files, routes,
|
|
134
|
+
and packages queue incremental work; boot/config/schema edits request a fresh
|
|
135
|
+
full extraction. A live daemon defers without acknowledging the queue. Failed or
|
|
136
|
+
deferred events remain under `<output>/hook-pending/` and retry on the next
|
|
137
|
+
relevant edit. Inspect `hook.log` before retrying; never delete pending events to
|
|
138
|
+
hide a failure. Prefer `woods:watch` for sustained edits because hook coverage
|
|
139
|
+
increases Rails boot frequency.
|
|
140
|
+
|
|
141
|
+
Both hooks require an existing index and `WOODS_HOOKS_ENABLED=1`; disable with
|
|
142
|
+
`WOODS_HOOKS_DISABLED=1`. Use `WOODS_HOOK_RAKE="docker compose exec -T app bundle
|
|
143
|
+
exec rake"` for a container-only bundle and `WOODS_OUTPUT` for a non-default
|
|
144
|
+
index. The host needs Bash and either jq or Ruby, not the application bundle.
|
|
145
|
+
The refresh worker's deadline starts after the complete event input has been
|
|
146
|
+
collected, validated, and queued; it does not bound input collection. It includes
|
|
147
|
+
subsequent batches, but cancelling Docker exec does not prove its container
|
|
148
|
+
process stopped. See the [hook deadline and retry contract](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#hooks-for-agent-sessions).
|
|
149
|
+
Source freshness (#405) is unreleased after beta2: verify the installed command
|
|
150
|
+
exposes `woods:source_status` and `woods-extract` before using it. Supporting
|
|
151
|
+
SessionStart hooks check source content and report missing/failed evidence as
|
|
152
|
+
unknown; silence does not acknowledge queued refresh work. Follow the [hook guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#hooks-for-agent-sessions)
|
|
153
|
+
for transport, retry and custom-root limits.
|
|
90
154
|
|
|
91
155
|
## Ask before expanding scope
|
|
92
156
|
|
|
@@ -97,3 +161,40 @@ Require explicit approval before adding Ollama/OpenAI, pgvector/Qdrant, secrets,
|
|
|
97
161
|
Report the Woods version, branch, files changed, commands/results, index path, MCP calls verified, semantic retrieval status, Console status, and unresolved risks. Never infer availability from source schemas alone.
|
|
98
162
|
|
|
99
163
|
Canonical runbook: [AGENT_SETUP.md](https://github.com/lost-in-the/woods/blob/main/docs/AGENT_SETUP.md).
|
|
164
|
+
|
|
165
|
+
## Lexical retrieval capability check
|
|
166
|
+
|
|
167
|
+
This is a development capability. Before proposing it, verify the installed gem
|
|
168
|
+
exposes `Woods::Configuration#retrieval_mode` and its matching guide documents
|
|
169
|
+
`WOODS_RETRIEVAL_MODE`. Keep the installed-version preflight; do not infer support
|
|
170
|
+
from the plugin version or an unreleased checkout.
|
|
171
|
+
|
|
172
|
+
When supported and authorized, offer explicit lexical mode for ranked discovery
|
|
173
|
+
over extraction output without provider credentials or vectors. Semantic mode
|
|
174
|
+
remains the default; setting up embeddings is a separate choice.
|
|
175
|
+
See the [retrieval guide](https://github.com/lost-in-the/woods/blob/main/docs/RETRIEVAL_GUIDE.md#embedding-free-lexical-retrieval)
|
|
176
|
+
for the supported contract, checked against the installed gem version.
|
|
177
|
+
|
|
178
|
+
## Explicit edit adapters (unreleased #409)
|
|
179
|
+
|
|
180
|
+
Check the installed gem exposes `woods:hook_refresh` before enabling hooks.
|
|
181
|
+
Claude's registered wrapper covers one documented edit path; OpenCode 1.18.27
|
|
182
|
+
has a separate native `.js` registration wrapper importing Woods' shipped
|
|
183
|
+
adapter. Its verified patch metadata carries all added/updated/deleted/moved
|
|
184
|
+
paths. Keep the complete plugin directory available, preserve opt-in/disable
|
|
185
|
+
settings and pending events, and inspect the generation and hook log before
|
|
186
|
+
claiming refresh. Unsupported tool shapes and symlink paths need watch or an
|
|
187
|
+
explicit extraction. Do not install native client registration without the
|
|
188
|
+
user's setup request. Follow [client hooks](https://github.com/lost-in-the/woods/blob/main/docs/CLIENT_HOOKS.md).
|
|
189
|
+
|
|
190
|
+
## Optional context hints
|
|
191
|
+
|
|
192
|
+
Check installed `bundle exec woods-hook-context --help` before enabling
|
|
193
|
+
`WOODS_HOOK_CONTEXT_ENABLED=1`; this capability is unreleased after beta2 and the
|
|
194
|
+
plugin does not upgrade the gem. Context and refresh opt-ins are independent;
|
|
195
|
+
`WOODS_HOOKS_DISABLED=1` disables both. Native Claude context is synchronous and
|
|
196
|
+
bounded, with served-generation and pre-refresh/unknown labels. Verify candidate
|
|
197
|
+
dependents and suggested tests manually; silence is not no impact. Do not clear
|
|
198
|
+
refresh queues when optional hints time out. See the canonical
|
|
199
|
+
[context guide](https://github.com/lost-in-the/woods/blob/main/docs/WATCH_DAEMON.md#optional-bounded-context-hints)
|
|
200
|
+
for output/time limits, container root mapping and emitted-hint suppression.
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: woods
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.0.
|
|
4
|
+
version: 2.0.0.beta3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Leah Armstrong
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-09-
|
|
11
|
+
date: 2026-09-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mcp
|
|
@@ -118,6 +118,9 @@ executables:
|
|
|
118
118
|
- woods-console-mcp
|
|
119
119
|
- woods-console
|
|
120
120
|
- woods-mcp-http
|
|
121
|
+
- woods-agent-config
|
|
122
|
+
- woods-extract
|
|
123
|
+
- woods-hook-context
|
|
121
124
|
extensions: []
|
|
122
125
|
extra_rdoc_files: []
|
|
123
126
|
files:
|
|
@@ -131,6 +134,7 @@ files:
|
|
|
131
134
|
- docs/AGENT_GUIDE.md
|
|
132
135
|
- docs/AGENT_SETUP.md
|
|
133
136
|
- docs/BACKEND_MATRIX.md
|
|
137
|
+
- docs/CLIENT_HOOKS.md
|
|
134
138
|
- docs/CONFIGURATION_REFERENCE.md
|
|
135
139
|
- docs/CONSOLE_MCP_SETUP.md
|
|
136
140
|
- docs/DOCKER_SETUP.md
|
|
@@ -140,6 +144,7 @@ files:
|
|
|
140
144
|
- docs/FAQ.md
|
|
141
145
|
- docs/GETTING_STARTED.md
|
|
142
146
|
- docs/INCREMENTAL_EXTRACTION.md
|
|
147
|
+
- docs/INDEX_LAYOUT.md
|
|
143
148
|
- docs/INTERNALS.md
|
|
144
149
|
- docs/MCP_HTTP_TRANSPORT.md
|
|
145
150
|
- docs/MCP_SERVERS.md
|
|
@@ -150,14 +155,19 @@ files:
|
|
|
150
155
|
- docs/PUBLISHED_INDEX.md
|
|
151
156
|
- docs/README.md
|
|
152
157
|
- docs/RETRIEVAL_GUIDE.md
|
|
158
|
+
- docs/RUNTIME_TRACING.md
|
|
159
|
+
- docs/SOURCE_FRESHNESS.md
|
|
153
160
|
- docs/TOKEN_BENCHMARK.md
|
|
154
161
|
- docs/TROUBLESHOOTING.md
|
|
155
162
|
- docs/UNBLOCKED_INTEGRATION.md
|
|
156
163
|
- docs/UPGRADING_TO_2.md
|
|
157
164
|
- docs/WATCH_DAEMON.md
|
|
158
165
|
- docs/WHY_WOODS.md
|
|
166
|
+
- exe/woods-agent-config
|
|
159
167
|
- exe/woods-console
|
|
160
168
|
- exe/woods-console-mcp
|
|
169
|
+
- exe/woods-extract
|
|
170
|
+
- exe/woods-hook-context
|
|
161
171
|
- exe/woods-mcp
|
|
162
172
|
- exe/woods-mcp-http
|
|
163
173
|
- exe/woods-mcp-start
|
|
@@ -170,6 +180,21 @@ files:
|
|
|
170
180
|
- lib/tasks/woods_checks.rake
|
|
171
181
|
- lib/tasks/woods_evaluation.rake
|
|
172
182
|
- lib/woods.rb
|
|
183
|
+
- lib/woods/agent_configuration/applier.rb
|
|
184
|
+
- lib/woods/agent_configuration/cli.rb
|
|
185
|
+
- lib/woods/agent_configuration/cli_options.rb
|
|
186
|
+
- lib/woods/agent_configuration/document.rb
|
|
187
|
+
- lib/woods/agent_configuration/error.rb
|
|
188
|
+
- lib/woods/agent_configuration/launcher.rb
|
|
189
|
+
- lib/woods/agent_configuration/layout.rb
|
|
190
|
+
- lib/woods/agent_configuration/managed_section.rb
|
|
191
|
+
- lib/woods/agent_configuration/plan.rb
|
|
192
|
+
- lib/woods/agent_configuration/plan_diff.rb
|
|
193
|
+
- lib/woods/agent_configuration/planned_files.rb
|
|
194
|
+
- lib/woods/agent_configuration/planner.rb
|
|
195
|
+
- lib/woods/agent_configuration/planner_validation.rb
|
|
196
|
+
- lib/woods/agent_configuration/preflight.rb
|
|
197
|
+
- lib/woods/agent_configuration/recovery.rb
|
|
173
198
|
- lib/woods/ast.rb
|
|
174
199
|
- lib/woods/ast/call_site_extractor.rb
|
|
175
200
|
- lib/woods/ast/method_extractor.rb
|
|
@@ -193,8 +218,10 @@ files:
|
|
|
193
218
|
- lib/woods/console/console_response_renderer.rb
|
|
194
219
|
- lib/woods/console/credential_index.rb
|
|
195
220
|
- lib/woods/console/credential_scanner.rb
|
|
221
|
+
- lib/woods/console/credential_scanner_registry.rb
|
|
196
222
|
- lib/woods/console/dispatch_pipeline.rb
|
|
197
223
|
- lib/woods/console/embedded_executor.rb
|
|
224
|
+
- lib/woods/console/encrypted_credential_snapshot.rb
|
|
198
225
|
- lib/woods/console/eval_guard.rb
|
|
199
226
|
- lib/woods/console/input_contract.rb
|
|
200
227
|
- lib/woods/console/model_validator.rb
|
|
@@ -230,6 +257,7 @@ files:
|
|
|
230
257
|
- lib/woods/db/migrator.rb
|
|
231
258
|
- lib/woods/db/schema_version.rb
|
|
232
259
|
- lib/woods/dependency_graph.rb
|
|
260
|
+
- lib/woods/embedding/corpus.rb
|
|
233
261
|
- lib/woods/embedding/fake.rb
|
|
234
262
|
- lib/woods/embedding/indexer.rb
|
|
235
263
|
- lib/woods/embedding/openai.rb
|
|
@@ -252,6 +280,7 @@ files:
|
|
|
252
280
|
- lib/woods/evaluation/metrics.rb
|
|
253
281
|
- lib/woods/evaluation/query_set.rb
|
|
254
282
|
- lib/woods/evaluation/report_generator.rb
|
|
283
|
+
- lib/woods/export/typed_reader.rb
|
|
255
284
|
- lib/woods/export/unit_facts.rb
|
|
256
285
|
- lib/woods/extracted_unit.rb
|
|
257
286
|
- lib/woods/extractor.rb
|
|
@@ -276,6 +305,8 @@ files:
|
|
|
276
305
|
- lib/woods/extractors/line_neutralizer.rb
|
|
277
306
|
- lib/woods/extractors/mailer_extractor.rb
|
|
278
307
|
- lib/woods/extractors/manager_extractor.rb
|
|
308
|
+
- lib/woods/extractors/method_parameters.rb
|
|
309
|
+
- lib/woods/extractors/middleware_argument.rb
|
|
279
310
|
- lib/woods/extractors/middleware_extractor.rb
|
|
280
311
|
- lib/woods/extractors/migration_extractor.rb
|
|
281
312
|
- lib/woods/extractors/model_extractor.rb
|
|
@@ -315,9 +346,19 @@ files:
|
|
|
315
346
|
- lib/woods/gem_mapper.rb
|
|
316
347
|
- lib/woods/generation.rb
|
|
317
348
|
- lib/woods/git_command.rb
|
|
349
|
+
- lib/woods/git_history.rb
|
|
318
350
|
- lib/woods/git_provenance.rb
|
|
319
351
|
- lib/woods/graph_analyzer.rb
|
|
352
|
+
- lib/woods/hooks/context_cli.rb
|
|
353
|
+
- lib/woods/hooks/context_event.rb
|
|
354
|
+
- lib/woods/hooks/context_hint.rb
|
|
355
|
+
- lib/woods/hooks/context_impact.rb
|
|
356
|
+
- lib/woods/hooks/context_output.rb
|
|
357
|
+
- lib/woods/hooks/context_state.rb
|
|
358
|
+
- lib/woods/hooks/refresh.rb
|
|
359
|
+
- lib/woods/hooks/rule_projection.rb
|
|
320
360
|
- lib/woods/index_artifact.rb
|
|
361
|
+
- lib/woods/input_rules.rb
|
|
321
362
|
- lib/woods/mcp/bearer_auth.rb
|
|
322
363
|
- lib/woods/mcp/bootstrap_state.rb
|
|
323
364
|
- lib/woods/mcp/bootstrapper.rb
|
|
@@ -325,19 +366,26 @@ files:
|
|
|
325
366
|
- lib/woods/mcp/errors.rb
|
|
326
367
|
- lib/woods/mcp/index_reader.rb
|
|
327
368
|
- lib/woods/mcp/index_reader_pinning.rb
|
|
369
|
+
- lib/woods/mcp/initialization_guidance.rb
|
|
328
370
|
- lib/woods/mcp/origin_guard.rb
|
|
329
371
|
- lib/woods/mcp/protocol_policy.rb
|
|
330
372
|
- lib/woods/mcp/provider_probe.rb
|
|
373
|
+
- lib/woods/mcp/published_lexical_retriever.rb
|
|
331
374
|
- lib/woods/mcp/renderers/claude_renderer.rb
|
|
332
375
|
- lib/woods/mcp/renderers/json_renderer.rb
|
|
333
376
|
- lib/woods/mcp/renderers/markdown_renderer.rb
|
|
334
377
|
- lib/woods/mcp/renderers/plain_renderer.rb
|
|
378
|
+
- lib/woods/mcp/search_results.rb
|
|
335
379
|
- lib/woods/mcp/server.rb
|
|
336
380
|
- lib/woods/mcp/tasks/extension.rb
|
|
337
381
|
- lib/woods/mcp/tasks/request_capture.rb
|
|
338
382
|
- lib/woods/mcp/tasks/store.rb
|
|
339
383
|
- lib/woods/mcp/tool_contract.rb
|
|
340
384
|
- lib/woods/mcp/tool_response_renderer.rb
|
|
385
|
+
- lib/woods/mcp/traversal_evidence.rb
|
|
386
|
+
- lib/woods/mcp/traversal_evidence_index.rb
|
|
387
|
+
- lib/woods/mcp/traversal_evidence_page.rb
|
|
388
|
+
- lib/woods/mcp/traversal_evidence_text.rb
|
|
341
389
|
- lib/woods/mcp/version_aware_tool_dispatch.rb
|
|
342
390
|
- lib/woods/model_name_cache.rb
|
|
343
391
|
- lib/woods/notion/client.rb
|
|
@@ -349,6 +397,7 @@ files:
|
|
|
349
397
|
- lib/woods/notion/rate_limiter.rb
|
|
350
398
|
- lib/woods/notion/sync_manifest.rb
|
|
351
399
|
- lib/woods/observability/structured_logger.rb
|
|
400
|
+
- lib/woods/obsidian/destination_plan.rb
|
|
352
401
|
- lib/woods/obsidian/errors.rb
|
|
353
402
|
- lib/woods/obsidian/name_mapper.rb
|
|
354
403
|
- lib/woods/obsidian/note_builder.rb
|
|
@@ -365,16 +414,28 @@ files:
|
|
|
365
414
|
- lib/woods/published_index/typed_unit_reader.rb
|
|
366
415
|
- lib/woods/railtie.rb
|
|
367
416
|
- lib/woods/railtie_support.rb
|
|
417
|
+
- lib/woods/rake_helpers.rb
|
|
368
418
|
- lib/woods/release.rb
|
|
369
419
|
- lib/woods/reload_policy.rb
|
|
370
420
|
- lib/woods/resilience/circuit_breaker.rb
|
|
421
|
+
- lib/woods/resilience/graph_invariant_validator.rb
|
|
422
|
+
- lib/woods/resilience/graph_invariant_validator/membership_checks.rb
|
|
423
|
+
- lib/woods/resilience/graph_invariant_validator/node_checks.rb
|
|
424
|
+
- lib/woods/resilience/graph_invariant_validator/reverse_relationship_checks.rb
|
|
371
425
|
- lib/woods/resilience/index_validator.rb
|
|
426
|
+
- lib/woods/resilience/index_validator/graph_checks.rb
|
|
372
427
|
- lib/woods/resilience/retryable_provider.rb
|
|
373
428
|
- lib/woods/resolved_config.rb
|
|
374
429
|
- lib/woods/retrieval/context_assembler.rb
|
|
430
|
+
- lib/woods/retrieval/lexical_assembler.rb
|
|
431
|
+
- lib/woods/retrieval/lexical_index.rb
|
|
375
432
|
- lib/woods/retrieval/query_classifier.rb
|
|
376
433
|
- lib/woods/retrieval/ranker.rb
|
|
434
|
+
- lib/woods/retrieval/scope.rb
|
|
435
|
+
- lib/woods/retrieval/scoped_graph_store.rb
|
|
436
|
+
- lib/woods/retrieval/scoped_vector_store.rb
|
|
377
437
|
- lib/woods/retrieval/search_executor.rb
|
|
438
|
+
- lib/woods/retrieval/source_evidence.rb
|
|
378
439
|
- lib/woods/retriever.rb
|
|
379
440
|
- lib/woods/retry_after.rb
|
|
380
441
|
- lib/woods/ruby_analyzer.rb
|
|
@@ -392,6 +453,17 @@ files:
|
|
|
392
453
|
- lib/woods/session_tracer/solid_cache_coordination.rb
|
|
393
454
|
- lib/woods/session_tracer/solid_cache_store.rb
|
|
394
455
|
- lib/woods/session_tracer/store.rb
|
|
456
|
+
- lib/woods/session_tracer/unit_resolver.rb
|
|
457
|
+
- lib/woods/source_inputs/consumer_errors.rb
|
|
458
|
+
- lib/woods/source_inputs/handoff.rb
|
|
459
|
+
- lib/woods/source_inputs/launcher.rb
|
|
460
|
+
- lib/woods/source_inputs/manifest.rb
|
|
461
|
+
- lib/woods/source_inputs/private_key.rb
|
|
462
|
+
- lib/woods/source_inputs/scanner.rb
|
|
463
|
+
- lib/woods/source_inputs/scopes.rb
|
|
464
|
+
- lib/woods/source_inputs/session.rb
|
|
465
|
+
- lib/woods/source_inputs/status.rb
|
|
466
|
+
- lib/woods/source_inputs/verifier.rb
|
|
395
467
|
- lib/woods/storage/graph_store.rb
|
|
396
468
|
- lib/woods/storage/inapplicable_backend.rb
|
|
397
469
|
- lib/woods/storage/metadata_store.rb
|
|
@@ -415,6 +487,7 @@ files:
|
|
|
415
487
|
- lib/woods/util/host_guard.rb
|
|
416
488
|
- lib/woods/util/uuid5.rb
|
|
417
489
|
- lib/woods/version.rb
|
|
490
|
+
- lib/woods/watch/boot_snapshot.rb
|
|
418
491
|
- lib/woods/watch/daemon.rb
|
|
419
492
|
- lib/woods/watch/listen_watcher.rb
|
|
420
493
|
- lib/woods/watch/polling_watcher.rb
|
|
@@ -422,8 +495,14 @@ files:
|
|
|
422
495
|
- lib/woods/watch/tree_scan.rb
|
|
423
496
|
- lib/woods/watch/watcher.rb
|
|
424
497
|
- plugin/.claude-plugin/plugin.json
|
|
498
|
+
- plugin/hooks/adapters/normalize.jq
|
|
499
|
+
- plugin/hooks/adapters/normalize.rb
|
|
425
500
|
- plugin/hooks/hooks.json
|
|
501
|
+
- plugin/hooks/woods-context.sh
|
|
502
|
+
- plugin/hooks/woods-input-rules.sh
|
|
503
|
+
- plugin/hooks/woods-opencode.mjs
|
|
426
504
|
- plugin/hooks/woods-post-edit.sh
|
|
505
|
+
- plugin/hooks/woods-refresh.sh
|
|
427
506
|
- plugin/hooks/woods-session-start.sh
|
|
428
507
|
- plugin/skills/woods-agent-enable/SKILL.md
|
|
429
508
|
- plugin/skills/woods-diagnose/SKILL.md
|
|
@@ -435,10 +514,10 @@ licenses:
|
|
|
435
514
|
- MIT
|
|
436
515
|
metadata:
|
|
437
516
|
homepage_uri: https://github.com/lost-in-the/woods
|
|
438
|
-
source_code_uri: https://github.com/lost-in-the/woods/tree/v2.0.0.
|
|
439
|
-
changelog_uri: https://github.com/lost-in-the/woods/blob/v2.0.0.
|
|
517
|
+
source_code_uri: https://github.com/lost-in-the/woods/tree/v2.0.0.beta3
|
|
518
|
+
changelog_uri: https://github.com/lost-in-the/woods/blob/v2.0.0.beta3/CHANGELOG.md
|
|
440
519
|
bug_tracker_uri: https://github.com/lost-in-the/woods/issues
|
|
441
|
-
documentation_uri: https://github.com/lost-in-the/woods/tree/v2.0.0.
|
|
520
|
+
documentation_uri: https://github.com/lost-in-the/woods/tree/v2.0.0.beta3/docs
|
|
442
521
|
rubygems_mfa_required: 'true'
|
|
443
522
|
post_install_message:
|
|
444
523
|
rdoc_options: []
|