@onlooker-community/ecosystem 0.31.0 → 0.31.2

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 (67) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.release-please-manifest.json +17 -17
  3. package/CHANGELOG.md +14 -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 +14 -0
  43. package/plugins/historian/scripts/hooks/historian-prompt-submit.sh +12 -1
  44. package/plugins/historian/scripts/hooks/historian-session-end.sh +12 -1
  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 +80 -6
  52. package/plugins/librarian/scripts/hooks/librarian-session-start.sh +10 -0
  53. package/plugins/librarian/scripts/lib/librarian-conflict-detector.sh +215 -0
  54. package/plugins/librarian/scripts/lib/librarian-emit.sh +10 -0
  55. package/plugins/lineage/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lineage/CHANGELOG.md +7 -0
  57. package/plugins/lineage/scripts/lib/lineage-events.sh +6 -0
  58. package/plugins/scribe/.claude-plugin/plugin.json +1 -1
  59. package/plugins/scribe/CHANGELOG.md +7 -0
  60. package/plugins/scribe/scripts/lib/scribe-events.sh +6 -0
  61. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  62. package/plugins/tribunal/CHANGELOG.md +7 -0
  63. package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +10 -0
  64. package/plugins/tribunal/scripts/lib/tribunal-events.sh +6 -0
  65. package/plugins/warden/.claude-plugin/plugin.json +1 -1
  66. package/plugins/warden/CHANGELOG.md +7 -0
  67. 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.2",
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.2",
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.2",
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,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.31.2](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.31.1...ecosystem-v0.31.2) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **historian:** export CLAUDE_PLUGIN_ROOT so config loads correctly :bug: ([#112](https://github.com/onlooker-community/ecosystem/issues/112)) ([f24b0b4](https://github.com/onlooker-community/ecosystem/commit/f24b0b4375c64385fefd329cd07d8874785002e9))
9
+
10
+ ## [0.31.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.31.0...ecosystem-v0.31.1) (2026-08-01)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **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))
16
+
3
17
  ## [0.31.0](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.30.1...ecosystem-v0.31.0) (2026-07-03)
4
18
 
5
19
 
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.2",
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.2",
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,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.2](https://github.com/onlooker-community/ecosystem/compare/historian-v0.3.1...historian-v0.3.2) (2026-08-01)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **historian:** export CLAUDE_PLUGIN_ROOT so config loads correctly :bug: ([#112](https://github.com/onlooker-community/ecosystem/issues/112)) ([f24b0b4](https://github.com/onlooker-community/ecosystem/commit/f24b0b4375c64385fefd329cd07d8874785002e9))
9
+
10
+ ## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/historian-v0.3.0...historian-v0.3.1) (2026-08-01)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **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))
16
+
3
17
  ## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/historian-v0.2.1...historian-v0.3.0) (2026-07-03)
4
18
 
5
19
 
@@ -38,9 +38,20 @@ 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
- CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
53
+ export CLAUDE_PLUGIN_ROOT="$PLUGIN_ROOT"
54
+ source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
44
55
  fi
45
56
 
46
57
  # shellcheck source=../lib/historian-config.sh