@onlooker-community/ecosystem 0.31.0 → 0.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.release-please-manifest.json +17 -17
  3. package/CHANGELOG.md +7 -0
  4. package/package.json +1 -1
  5. package/plugins/archivist/.claude-plugin/plugin.json +1 -1
  6. package/plugins/archivist/CHANGELOG.md +7 -0
  7. package/plugins/archivist/scripts/hooks/archivist-extract.sh +10 -0
  8. package/plugins/archivist/scripts/hooks/archivist-inject.sh +10 -0
  9. package/plugins/archivist/scripts/lib/archivist-events.sh +6 -0
  10. package/plugins/assayer/.claude-plugin/plugin.json +1 -1
  11. package/plugins/assayer/CHANGELOG.md +7 -0
  12. package/plugins/assayer/scripts/hooks/assayer-stop.sh +10 -0
  13. package/plugins/assayer/scripts/lib/assayer-events.sh +6 -0
  14. package/plugins/bursar/.claude-plugin/plugin.json +1 -1
  15. package/plugins/bursar/CHANGELOG.md +7 -0
  16. package/plugins/bursar/scripts/lib/bursar-events.sh +6 -0
  17. package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
  18. package/plugins/cartographer/CHANGELOG.md +7 -0
  19. package/plugins/cartographer/scripts/lib/cartographer-events.sh +6 -0
  20. package/plugins/compass/.claude-plugin/plugin.json +1 -1
  21. package/plugins/compass/CHANGELOG.md +7 -0
  22. package/plugins/compass/scripts/lib/compass-events.sh +6 -0
  23. package/plugins/counsel/.claude-plugin/plugin.json +1 -1
  24. package/plugins/counsel/CHANGELOG.md +7 -0
  25. package/plugins/counsel/scripts/lib/counsel-events.sh +6 -0
  26. package/plugins/curator/.claude-plugin/plugin.json +1 -1
  27. package/plugins/curator/CHANGELOG.md +7 -0
  28. package/plugins/curator/scripts/hooks/curator-session-start.sh +10 -0
  29. package/plugins/curator/scripts/lib/curator-emit.sh +10 -0
  30. package/plugins/echo/.claude-plugin/plugin.json +1 -1
  31. package/plugins/echo/CHANGELOG.md +7 -0
  32. package/plugins/echo/scripts/hooks/echo-stop-gate.sh +10 -0
  33. package/plugins/echo/scripts/lib/echo-events.sh +6 -0
  34. package/plugins/governor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/governor/CHANGELOG.md +7 -0
  36. package/plugins/governor/scripts/hooks/governor-post-tool-use.sh +10 -0
  37. package/plugins/governor/scripts/hooks/governor-pre-tool-use.sh +10 -0
  38. package/plugins/governor/scripts/hooks/governor-session-start.sh +10 -0
  39. package/plugins/governor/scripts/hooks/governor-stop.sh +10 -0
  40. package/plugins/governor/scripts/lib/governor-events.sh +6 -0
  41. package/plugins/historian/.claude-plugin/plugin.json +1 -1
  42. package/plugins/historian/CHANGELOG.md +7 -0
  43. package/plugins/historian/scripts/hooks/historian-prompt-submit.sh +10 -0
  44. package/plugins/historian/scripts/hooks/historian-session-end.sh +10 -0
  45. package/plugins/historian/scripts/lib/historian-emit.sh +10 -0
  46. package/plugins/inspector/.claude-plugin/plugin.json +1 -1
  47. package/plugins/inspector/CHANGELOG.md +7 -0
  48. package/plugins/inspector/scripts/lib/inspector-events.sh +6 -0
  49. package/plugins/librarian/.claude-plugin/plugin.json +1 -1
  50. package/plugins/librarian/CHANGELOG.md +7 -0
  51. package/plugins/librarian/scripts/hooks/librarian-session-end.sh +10 -0
  52. package/plugins/librarian/scripts/hooks/librarian-session-start.sh +10 -0
  53. package/plugins/librarian/scripts/lib/librarian-emit.sh +10 -0
  54. package/plugins/lineage/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lineage/CHANGELOG.md +7 -0
  56. package/plugins/lineage/scripts/lib/lineage-events.sh +6 -0
  57. package/plugins/scribe/.claude-plugin/plugin.json +1 -1
  58. package/plugins/scribe/CHANGELOG.md +7 -0
  59. package/plugins/scribe/scripts/lib/scribe-events.sh +6 -0
  60. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  61. package/plugins/tribunal/CHANGELOG.md +7 -0
  62. package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +10 -0
  63. package/plugins/tribunal/scripts/lib/tribunal-events.sh +6 -0
  64. package/plugins/warden/.claude-plugin/plugin.json +1 -1
  65. package/plugins/warden/CHANGELOG.md +7 -0
  66. package/plugins/warden/scripts/lib/warden-events.sh +6 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecosystem",
3
- "version": "0.31.0",
3
+ "version": "0.31.1",
4
4
  "description": "Observability substrate for Claude Code. Provides the shared $ONLOOKER_DIR storage root (default $HOME/.onlooker), canonical schema-validated event emission, session and tool tracking hooks, and prompt rules. Required by all other Onlooker plugins.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,19 +1,19 @@
1
1
  {
2
- ".": "0.31.0",
3
- "plugins/archivist": "0.3.0",
4
- "plugins/tribunal": "1.1.0",
5
- "plugins/echo": "0.3.0",
6
- "plugins/cartographer": "0.3.0",
7
- "plugins/governor": "0.3.0",
8
- "plugins/compass": "0.4.0",
9
- "plugins/scribe": "0.4.0",
10
- "plugins/counsel": "0.5.0",
11
- "plugins/warden": "0.3.0",
12
- "plugins/librarian": "0.4.0",
13
- "plugins/curator": "0.2.0",
14
- "plugins/historian": "0.3.0",
15
- "plugins/assayer": "1.1.0",
16
- "plugins/bursar": "0.2.0",
17
- "plugins/lineage": "0.2.0",
18
- "plugins/inspector": "0.3.0"
2
+ ".": "0.31.1",
3
+ "plugins/archivist": "0.3.1",
4
+ "plugins/tribunal": "1.1.1",
5
+ "plugins/echo": "0.3.1",
6
+ "plugins/cartographer": "0.3.1",
7
+ "plugins/governor": "0.3.1",
8
+ "plugins/compass": "0.4.1",
9
+ "plugins/scribe": "0.4.1",
10
+ "plugins/counsel": "0.5.1",
11
+ "plugins/warden": "0.3.1",
12
+ "plugins/librarian": "0.4.1",
13
+ "plugins/curator": "0.2.1",
14
+ "plugins/historian": "0.3.1",
15
+ "plugins/assayer": "1.1.1",
16
+ "plugins/bursar": "0.2.1",
17
+ "plugins/lineage": "0.2.1",
18
+ "plugins/inspector": "0.3.1"
19
19
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.31.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.31.0...ecosystem-v0.31.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.31.0](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.30.1...ecosystem-v0.31.0) (2026-07-03)
4
11
 
5
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onlooker-community/ecosystem",
3
- "version": "0.31.0",
3
+ "version": "0.31.1",
4
4
  "description": "Agents, skills, hooks, commands, rules, and MCP configurations that power [Onlooker](https://onlooker.dev)",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archivist",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Structured session memory across context truncation: extracts decisions, dead ends, and open questions on PreCompact and reinjects the most important items at SessionStart. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/archivist-v0.3.0...archivist-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/archivist-v0.2.0...archivist-v0.3.0) (2026-07-03)
4
11
 
5
12
 
@@ -29,6 +29,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
29
29
  _ECOSYSTEM_ROOT="$_candidate"
30
30
  fi
31
31
  fi
32
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
33
+ # works regardless of which ecosystem version is installed.
34
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
35
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
36
+ if [[ -f "$_candidate" ]]; then
37
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
38
+ break
39
+ fi
40
+ done
41
+ fi
32
42
 
33
43
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
34
44
  # shellcheck disable=SC1091
@@ -26,6 +26,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
26
26
  _ECOSYSTEM_ROOT="$_candidate"
27
27
  fi
28
28
  fi
29
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
30
+ # works regardless of which ecosystem version is installed.
31
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
32
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
33
+ if [[ -f "$_candidate" ]]; then
34
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
35
+ break
36
+ fi
37
+ done
38
+ fi
29
39
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
30
40
  # shellcheck disable=SC1091
31
41
  CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
@@ -25,6 +25,12 @@ _archivist_event_js_path() {
25
25
  for c in "${candidates[@]}"; do
26
26
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
27
27
  done
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ local mjs
31
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
32
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
33
+ done
28
34
  return 1
29
35
  }
30
36
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "assayer",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Claim verification. At session end, parses the agent's final message for testable claims (\"I ran the tests, they pass\", \"the build is green\") and checks each against the actual command results in the session transcript, classifying it corroborated, contradicted, or unverifiable. Catches lying-without-malice. Advisory by default. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.1](https://github.com/onlooker-community/ecosystem/compare/assayer-v1.1.0...assayer-v1.1.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [1.1.0](https://github.com/onlooker-community/ecosystem/compare/assayer-v1.0.0...assayer-v1.1.0) (2026-07-03)
4
11
 
5
12
 
@@ -30,6 +30,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
30
30
  _ECOSYSTEM_ROOT="$_candidate"
31
31
  fi
32
32
  fi
33
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
34
+ # works regardless of which ecosystem version is installed.
35
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
36
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
37
+ if [[ -f "$_candidate" ]]; then
38
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
39
+ break
40
+ fi
41
+ done
42
+ fi
33
43
 
34
44
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
35
45
  # shellcheck disable=SC1091
@@ -26,6 +26,12 @@ _assayer_event_js_path() {
26
26
  return 0
27
27
  }
28
28
  done
29
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
30
+ # works regardless of which ecosystem version is installed.
31
+ local mjs
32
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
33
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
34
+ done
29
35
  return 1
30
36
  }
31
37
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bursar",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Multi-session, per-project budget accounting for the Onlooker ecosystem. Rolls each session's spend into a per-project ledger on SessionEnd and surfaces \"this project burned $X this week\" at SessionStart. Where governor regulates a single session, bursar is the cross-session rollup: it reads governor.session.complete off the shared event bus and emits bursar.* events for audit. Named for the officer who keeps the accounts. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/bursar-v0.2.0...bursar-v0.2.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/bursar-v0.1.1...bursar-v0.2.0) (2026-07-03)
4
11
 
5
12
 
@@ -25,6 +25,12 @@ _bursar_event_js_path() {
25
25
  for c in "${candidates[@]}"; do
26
26
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
27
27
  done
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ local mjs
31
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
32
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
33
+ done
28
34
  return 1
29
35
  }
30
36
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cartographer",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Proactive periodic auditor of the persistent instruction layer (CLAUDE.md, AGENTS.md, .claude/rules/). Discovers all instruction files in the repo, extracts semantic maps, and surfaces contradictions, shadowing, gaps, and drift before they cause expensive agent misbehavior. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to the Cartographer plugin are documented here.
4
4
 
5
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/cartographer-v0.3.0...cartographer-v0.3.1) (2026-08-01)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
11
+
5
12
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/cartographer-v0.2.1...cartographer-v0.3.0) (2026-07-03)
6
13
 
7
14
 
@@ -23,6 +23,12 @@ _cartographer_event_js_path() {
23
23
  for c in "${candidates[@]}"; do
24
24
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
25
25
  done
26
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
27
+ # works regardless of which ecosystem version is installed.
28
+ local mjs
29
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
30
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
31
+ done
26
32
  return 1
27
33
  }
28
34
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "compass",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Pre-write intent clarity gate. Intercepts write-class tool calls and requires a confidence threshold before allowing them to proceed. Evaluates the pending write against the prior assistant turn as context to avoid false positives on question-answer turns. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1](https://github.com/onlooker-community/ecosystem/compare/compass-v0.4.0...compass-v0.4.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.3.0...compass-v0.4.0) (2026-07-03)
4
11
 
5
12
 
@@ -24,6 +24,12 @@ _compass_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "counsel",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Weekly synthesis and recommendations from the full observability stack. Reads all plugin event logs, produces a structured improvement brief, and injects it at session start when the last brief is stale.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.5.1](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.5.0...counsel-v0.5.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.5.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.4.0...counsel-v0.5.0) (2026-07-03)
4
11
 
5
12
 
@@ -24,6 +24,12 @@ _counsel_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "curator",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Maintenance layer for the user's typed auto-memory store. At every SessionStart, runs four cheap heuristic checks (date_decayed, path_broken, broken_index, orphaned_memory) against the memories at ~/.claude/projects/<encoded>/memory/ inside a wall-clock budget. Surfaces findings as a one-line pointer to /curator review; never edits the memory store directly. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/curator-v0.2.0...curator-v0.2.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.1.0...curator-v0.2.0) (2026-07-03)
4
11
 
5
12
 
@@ -25,6 +25,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
25
25
  _ECOSYSTEM_ROOT="$_candidate"
26
26
  fi
27
27
  fi
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
31
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
32
+ if [[ -f "$_candidate" ]]; then
33
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
34
+ break
35
+ fi
36
+ done
37
+ fi
28
38
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
29
39
  # shellcheck disable=SC1091
30
40
  CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
@@ -16,6 +16,16 @@ _curator_resolve_event_js() {
16
16
  ecosystem_root="$candidate"
17
17
  fi
18
18
  fi
19
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
20
+ # works regardless of which ecosystem version is installed.
21
+ if [[ -z "$ecosystem_root" ]]; then
22
+ for candidate in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
23
+ if [[ -f "$candidate" ]]; then
24
+ ecosystem_root="$(cd "$(dirname "$(dirname "$candidate")")" && pwd)"
25
+ break
26
+ fi
27
+ done
28
+ fi
19
29
 
20
30
  if [[ -n "$ecosystem_root" ]]; then
21
31
  printf '%s/scripts/lib/onlooker-event.mjs' "$ecosystem_root"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "echo",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Prompt-change regression detection. When a watched agent file is modified, Echo runs a single-judge quality pass via claude -p and compares the score against a stored baseline to report improved, degraded, or neutral. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/echo-v0.3.0...echo-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.2.0...echo-v0.3.0) (2026-07-03)
4
11
 
5
12
 
@@ -29,6 +29,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
29
29
  _ECOSYSTEM_ROOT="$_candidate"
30
30
  fi
31
31
  fi
32
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
33
+ # works regardless of which ecosystem version is installed.
34
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
35
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
36
+ if [[ -f "$_candidate" ]]; then
37
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
38
+ break
39
+ fi
40
+ done
41
+ fi
32
42
 
33
43
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
34
44
  # shellcheck disable=SC1091
@@ -18,6 +18,12 @@ _echo_event_js_path() {
18
18
  for c in "${candidates[@]}"; do
19
19
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
20
20
  done
21
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
22
+ # works regardless of which ecosystem version is installed.
23
+ local mjs
24
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
25
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
26
+ done
21
27
  return 1
22
28
  }
23
29
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "governor",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Resource governance and budget enforcement for the Onlooker ecosystem. Tracks per-session token and cost spend, gates Task spawns before they exceed a configurable budget ceiling, and emits governor.* events for audit. Named for the steam-engine governor — a device that regulates output. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/governor-v0.3.0...governor-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/governor-v0.2.1...governor-v0.3.0) (2026-07-03)
4
11
 
5
12
 
@@ -19,6 +19,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
19
19
  _ECOSYSTEM_ROOT="$_candidate"
20
20
  fi
21
21
  fi
22
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
23
+ # works regardless of which ecosystem version is installed.
24
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
25
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
26
+ if [[ -f "$_candidate" ]]; then
27
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
28
+ break
29
+ fi
30
+ done
31
+ fi
22
32
 
23
33
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
24
34
  # shellcheck disable=SC1091
@@ -31,6 +31,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
31
31
  _ECOSYSTEM_ROOT="$_candidate"
32
32
  fi
33
33
  fi
34
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
35
+ # works regardless of which ecosystem version is installed.
36
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
37
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
38
+ if [[ -f "$_candidate" ]]; then
39
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
40
+ break
41
+ fi
42
+ done
43
+ fi
34
44
 
35
45
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
36
46
  # shellcheck disable=SC1091
@@ -23,6 +23,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
23
23
  _ECOSYSTEM_ROOT="$_candidate"
24
24
  fi
25
25
  fi
26
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
27
+ # works regardless of which ecosystem version is installed.
28
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
29
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
30
+ if [[ -f "$_candidate" ]]; then
31
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
32
+ break
33
+ fi
34
+ done
35
+ fi
26
36
 
27
37
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
28
38
  # shellcheck disable=SC1091
@@ -20,6 +20,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
20
20
  _ECOSYSTEM_ROOT="$_candidate"
21
21
  fi
22
22
  fi
23
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
24
+ # works regardless of which ecosystem version is installed.
25
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
26
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
27
+ if [[ -f "$_candidate" ]]; then
28
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
29
+ break
30
+ fi
31
+ done
32
+ fi
23
33
 
24
34
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
25
35
  # shellcheck disable=SC1091
@@ -24,6 +24,12 @@ _governor_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "historian",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Episodic memory layer. At SessionEnd, chunks and sanitizes the session transcript and stores chunks under $ONLOOKER_DIR/historian/<project-key>/sessions/ (default $HOME/.onlooker). On UserPromptSubmit, embeds the prompt and performs similarity retrieval over stored chunks to surface relevant past context. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/historian-v0.3.0...historian-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/historian-v0.2.1...historian-v0.3.0) (2026-07-03)
4
11
 
5
12
 
@@ -38,6 +38,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
38
38
  _ECOSYSTEM_ROOT="$_candidate"
39
39
  fi
40
40
  fi
41
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
42
+ # works regardless of which ecosystem version is installed.
43
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
44
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
45
+ if [[ -f "$_candidate" ]]; then
46
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
47
+ break
48
+ fi
49
+ done
50
+ fi
41
51
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
42
52
  # shellcheck disable=SC1091
43
53
  CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
@@ -25,6 +25,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
25
25
  _ECOSYSTEM_ROOT="$_candidate"
26
26
  fi
27
27
  fi
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
31
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
32
+ if [[ -f "$_candidate" ]]; then
33
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
34
+ break
35
+ fi
36
+ done
37
+ fi
28
38
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
29
39
  # shellcheck disable=SC1091
30
40
  CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
@@ -16,6 +16,16 @@ _historian_resolve_event_js() {
16
16
  ecosystem_root="$candidate"
17
17
  fi
18
18
  fi
19
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
20
+ # works regardless of which ecosystem version is installed.
21
+ if [[ -z "$ecosystem_root" ]]; then
22
+ for candidate in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
23
+ if [[ -f "$candidate" ]]; then
24
+ ecosystem_root="$(cd "$(dirname "$(dirname "$candidate")")" && pwd)"
25
+ break
26
+ fi
27
+ done
28
+ fi
19
29
 
20
30
  if [[ -n "$ecosystem_root" ]]; then
21
31
  printf '%s/scripts/lib/onlooker-event.mjs' "$ecosystem_root"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inspector",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Per-edit lint and typecheck gate. Runs the project's configured checks on just the touched file after every Write / Edit / MultiEdit, so the agent sees its own type errors before claiming success. Cheaper than proctor (which runs project-wide verification at Stop); complements assayer (which catches the agent lying about claims). Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/inspector-v0.3.0...inspector-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/inspector-v0.2.0...inspector-v0.3.0) (2026-07-03)
4
11
 
5
12
 
@@ -23,6 +23,12 @@ _inspector_event_js_path() {
23
23
  for c in "${candidates[@]}"; do
24
24
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
25
25
  done
26
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
27
+ # works regardless of which ecosystem version is installed.
28
+ local mjs
29
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
30
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
31
+ done
26
32
  return 1
27
33
  }
28
34
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "librarian",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Consolidation layer between archivist's per-session artifacts and the user's durable typed memory store. Detects which session decisions, dead-ends, and open questions deserve to live across sessions, classifies them into the user/feedback/project/reference types, and queues them as proposals for explicit confirmation. Auto-promotion is opt-in. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1](https://github.com/onlooker-community/ecosystem/compare/librarian-v0.4.0...librarian-v0.4.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/librarian-v0.3.0...librarian-v0.4.0) (2026-07-03)
4
11
 
5
12
 
@@ -25,6 +25,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
25
25
  _ECOSYSTEM_ROOT="$_candidate"
26
26
  fi
27
27
  fi
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
31
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
32
+ if [[ -f "$_candidate" ]]; then
33
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
34
+ break
35
+ fi
36
+ done
37
+ fi
28
38
 
29
39
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
30
40
  # shellcheck disable=SC1091
@@ -25,6 +25,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
25
25
  _ECOSYSTEM_ROOT="$_candidate"
26
26
  fi
27
27
  fi
28
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
29
+ # works regardless of which ecosystem version is installed.
30
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
31
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
32
+ if [[ -f "$_candidate" ]]; then
33
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
34
+ break
35
+ fi
36
+ done
37
+ fi
28
38
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
29
39
  # shellcheck disable=SC1091
30
40
  CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
@@ -21,6 +21,16 @@ _librarian_resolve_event_js() {
21
21
  ecosystem_root="$candidate"
22
22
  fi
23
23
  fi
24
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
25
+ # works regardless of which ecosystem version is installed.
26
+ if [[ -z "$ecosystem_root" ]]; then
27
+ for candidate in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
28
+ if [[ -f "$candidate" ]]; then
29
+ ecosystem_root="$(cd "$(dirname "$(dirname "$candidate")")" && pwd)"
30
+ break
31
+ fi
32
+ done
33
+ fi
24
34
 
25
35
  if [[ -n "$ecosystem_root" ]]; then
26
36
  printf '%s/scripts/lib/onlooker-event.mjs' "$ecosystem_root"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lineage",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Per-change provenance for the Onlooker ecosystem. Records session/turn metadata plus a secret-redacted, size-capped snippet for every Edit/Write/MultiEdit at PostToolUse, then answers \"why does this line exist?\" via /lineage by joining change records to historian-preserved transcripts. Emits lineage.* events for audit. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/lineage-v0.2.0...lineage-v0.2.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/lineage-v0.1.0...lineage-v0.2.0) (2026-07-03)
4
11
 
5
12
 
@@ -24,6 +24,12 @@ _lineage_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scribe",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "Intent documentation from agent activity. Captures why changes were made — problem context, decisions, tradeoffs — and distills them into readable artifacts at session end.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.1](https://github.com/onlooker-community/ecosystem/compare/scribe-v0.4.0...scribe-v0.4.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/scribe-v0.3.0...scribe-v0.4.0) (2026-07-03)
4
11
 
5
12
 
@@ -24,6 +24,12 @@ _scribe_event_js_path() {
24
24
  for c in "${candidates[@]}"; do
25
25
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
26
26
  done
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ local mjs
30
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
31
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
32
+ done
27
33
  return 1
28
34
  }
29
35
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tribunal",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Multi-agent execution with LLM-as-a-Judge quality gates. An Actor performs work; a jury of typed Judges scores it against a project-overridable rubric; a Meta-Judge reviews the jury for bias; the gate decides accept, retry, or exhaust. Grounded in LLM-as-a-Judge (Zheng et al. 2023) and LLM-as-a-Meta-Judge (Wu et al. 2024). Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.1.1](https://github.com/onlooker-community/ecosystem/compare/tribunal-v1.1.0...tribunal-v1.1.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [1.1.0](https://github.com/onlooker-community/ecosystem/compare/tribunal-v1.0.1...tribunal-v1.1.0) (2026-07-03)
4
11
 
5
12
 
@@ -24,6 +24,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
24
24
  _ECOSYSTEM_ROOT="$_candidate"
25
25
  fi
26
26
  fi
27
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
28
+ # works regardless of which ecosystem version is installed.
29
+ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
30
+ for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
31
+ if [[ -f "$_candidate" ]]; then
32
+ _ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
33
+ break
34
+ fi
35
+ done
36
+ fi
27
37
 
28
38
  if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
29
39
  # shellcheck disable=SC1091
@@ -37,6 +37,12 @@ _tribunal_event_js_path() {
37
37
  for c in "${candidates[@]}"; do
38
38
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
39
39
  done
40
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
41
+ # works regardless of which ecosystem version is installed.
42
+ local mjs
43
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
44
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
45
+ done
40
46
  return 1
41
47
  }
42
48
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "warden",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Untrusted-content gate. Scans content flowing in through WebFetch and Read for prompt-injection patterns, and when a threat is detected closes a session-scoped gate that blocks Write, Edit, and Bash until the user explicitly clears it. Grounded in Meta's Agents Rule of Two: an agent should hold no more than two of {private data, external actions, untrusted content} at once — warden removes the external-actions property while untrusted content is in play. Builds on the Onlooker ecosystem plugin.",
5
5
  "author": {
6
6
  "name": "Onlooker Community",
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/warden-v0.3.0...warden-v0.3.1) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
9
+
3
10
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/warden-v0.2.0...warden-v0.3.0) (2026-07-03)
4
11
 
5
12
 
@@ -28,6 +28,12 @@ _warden_event_js_path() {
28
28
  for c in "${candidates[@]}"; do
29
29
  [[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
30
30
  done
31
+ # Glob-discover the ecosystem plugin under the shared plugin cache parent;
32
+ # works regardless of which ecosystem version is installed.
33
+ local mjs
34
+ for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
35
+ [[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
36
+ done
31
37
  return 1
32
38
  }
33
39