@onlooker-community/ecosystem 0.43.4 → 0.43.6
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.
- package/.claude-plugin/plugin.json +1 -1
- package/.release-please-manifest.json +17 -17
- package/AGENTS.md +5 -0
- package/CHANGELOG.md +16 -0
- package/CLAUDE.md +5 -0
- package/docs/architecture.md +2 -2
- package/docs/lesson-promotion-pipeline.md +9 -1
- package/package.json +1 -1
- package/plugins/archivist/.claude-plugin/plugin.json +1 -1
- package/plugins/archivist/CHANGELOG.md +7 -0
- package/plugins/archivist/scripts/lib/archivist-config.sh +6 -2
- package/plugins/assayer/.claude-plugin/plugin.json +1 -1
- package/plugins/assayer/CHANGELOG.md +7 -0
- package/plugins/assayer/scripts/lib/assayer-config.sh +6 -2
- package/plugins/bursar/.claude-plugin/plugin.json +1 -1
- package/plugins/bursar/CHANGELOG.md +7 -0
- package/plugins/bursar/scripts/lib/bursar-config.sh +6 -2
- package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
- package/plugins/cartographer/CHANGELOG.md +7 -0
- package/plugins/cartographer/scripts/lib/cartographer-config.sh +6 -2
- package/plugins/compass/.claude-plugin/plugin.json +1 -1
- package/plugins/compass/CHANGELOG.md +7 -0
- package/plugins/compass/scripts/lib/compass-config.sh +6 -2
- package/plugins/counsel/.claude-plugin/plugin.json +1 -1
- package/plugins/counsel/CHANGELOG.md +7 -0
- package/plugins/counsel/scripts/lib/counsel-config.sh +6 -2
- package/plugins/curator/.claude-plugin/plugin.json +1 -1
- package/plugins/curator/CHANGELOG.md +7 -0
- package/plugins/curator/scripts/lib/curator-config.sh +6 -2
- package/plugins/echo/.claude-plugin/plugin.json +1 -1
- package/plugins/echo/CHANGELOG.md +7 -0
- package/plugins/echo/scripts/lib/echo-config.sh +6 -2
- package/plugins/governor/.claude-plugin/plugin.json +1 -1
- package/plugins/governor/CHANGELOG.md +7 -0
- package/plugins/governor/scripts/lib/governor-config.sh +6 -2
- package/plugins/historian/.claude-plugin/plugin.json +1 -1
- package/plugins/historian/CHANGELOG.md +7 -0
- package/plugins/historian/scripts/lib/historian-config.sh +6 -2
- package/plugins/inspector/.claude-plugin/plugin.json +1 -1
- package/plugins/inspector/CHANGELOG.md +14 -0
- package/plugins/inspector/scripts/hooks/inspector-post-write.sh +4 -8
- package/plugins/inspector/scripts/lib/inspector-config.sh +6 -2
- package/plugins/inspector/scripts/lib/inspector-project-key.sh +59 -2
- package/plugins/librarian/.claude-plugin/plugin.json +1 -1
- package/plugins/librarian/CHANGELOG.md +8 -0
- package/plugins/librarian/scripts/lib/librarian-config.sh +6 -2
- package/plugins/librarian/scripts/lib/librarian-lesson-promote.sh +22 -2
- package/plugins/librarian/scripts/lib/librarian-lesson-storage.sh +19 -1
- package/plugins/lineage/.claude-plugin/plugin.json +1 -1
- package/plugins/lineage/CHANGELOG.md +7 -0
- package/plugins/lineage/scripts/lib/lineage-config.sh +6 -2
- package/plugins/scribe/.claude-plugin/plugin.json +1 -1
- package/plugins/scribe/CHANGELOG.md +7 -0
- package/plugins/scribe/scripts/lib/scribe-config.sh +6 -2
- package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
- package/plugins/tribunal/CHANGELOG.md +7 -0
- package/plugins/tribunal/scripts/lib/tribunal-config.sh +6 -2
- package/plugins/warden/.claude-plugin/plugin.json +1 -1
- package/plugins/warden/CHANGELOG.md +7 -0
- package/plugins/warden/scripts/lib/warden-config.sh +6 -2
- package/scripts/lib/config-loader.sh +15 -2
- package/scripts/lib/validate-path.sh +29 -38
- package/test/bats/config-lib-self-locating.bats +124 -0
- package/test/bats/inspector-post-write-hook.bats +92 -0
- package/test/bats/librarian-lesson-promote.bats +89 -3
- package/test/bats/validate-path.bats +46 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ecosystem",
|
|
3
|
-
"version": "0.43.
|
|
3
|
+
"version": "0.43.6",
|
|
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.43.
|
|
3
|
-
"plugins/archivist": "0.3.
|
|
4
|
-
"plugins/tribunal": "1.2.
|
|
5
|
-
"plugins/echo": "0.3.
|
|
6
|
-
"plugins/cartographer": "0.6.
|
|
7
|
-
"plugins/governor": "0.3.
|
|
8
|
-
"plugins/compass": "0.4.
|
|
9
|
-
"plugins/scribe": "0.4.
|
|
10
|
-
"plugins/counsel": "0.5.
|
|
11
|
-
"plugins/warden": "0.3.
|
|
12
|
-
"plugins/librarian": "0.13.
|
|
13
|
-
"plugins/curator": "0.2.
|
|
14
|
-
"plugins/historian": "0.3.
|
|
15
|
-
"plugins/assayer": "1.1.
|
|
16
|
-
"plugins/bursar": "0.3.
|
|
17
|
-
"plugins/lineage": "0.2.
|
|
18
|
-
"plugins/inspector": "0.3.
|
|
2
|
+
".": "0.43.6",
|
|
3
|
+
"plugins/archivist": "0.3.2",
|
|
4
|
+
"plugins/tribunal": "1.2.8",
|
|
5
|
+
"plugins/echo": "0.3.2",
|
|
6
|
+
"plugins/cartographer": "0.6.1",
|
|
7
|
+
"plugins/governor": "0.3.3",
|
|
8
|
+
"plugins/compass": "0.4.2",
|
|
9
|
+
"plugins/scribe": "0.4.3",
|
|
10
|
+
"plugins/counsel": "0.5.2",
|
|
11
|
+
"plugins/warden": "0.3.2",
|
|
12
|
+
"plugins/librarian": "0.13.3",
|
|
13
|
+
"plugins/curator": "0.2.4",
|
|
14
|
+
"plugins/historian": "0.3.4",
|
|
15
|
+
"plugins/assayer": "1.1.4",
|
|
16
|
+
"plugins/bursar": "0.3.1",
|
|
17
|
+
"plugins/lineage": "0.2.3",
|
|
18
|
+
"plugins/inspector": "0.3.4"
|
|
19
19
|
}
|
package/AGENTS.md
CHANGED
|
@@ -136,6 +136,11 @@ See `plugins/compass/docs/adr/001-evaluate-prompts-in-context.md` for the full d
|
|
|
136
136
|
a test drives the branch that emits it, `excluded` with a reason when not.
|
|
137
137
|
`npm run test:bus` fails on any registered type that appears in neither list.
|
|
138
138
|
7. Fail-soft when `~/.onlooker/` is absent — plugins must not block a session they were not invited to.
|
|
139
|
+
8. In `plugins/<name>/scripts/lib/<name>-config.sh`, locate `config-loader.sh` from the file's own
|
|
140
|
+
`${BASH_SOURCE[0]}`, never from a caller-supplied `$PLUGIN_ROOT`. That variable is read at source
|
|
141
|
+
time from whatever scope did the sourcing, so a sub-shell that inherits `CLAUDE_PLUGIN_ROOT` but not
|
|
142
|
+
`PLUGIN_ROOT` loses every accessor while still exiting 0 — config silently falls back to defaults.
|
|
143
|
+
`test/bats/config-lib-self-locating.bats` enforces this across every plugin.
|
|
139
144
|
|
|
140
145
|
## Development
|
|
141
146
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.43.6](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.43.5...ecosystem-v0.43.6) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **events:** drop safe_emit's hand-built envelope fallback :broom: ([#202](https://github.com/onlooker-community/ecosystem/issues/202)) ([bad684a](https://github.com/onlooker-community/ecosystem/commit/bad684a4f7c535d72f91ed2b1d4928a4dd9a10e8))
|
|
9
|
+
* **inspector:** canonicalize the file and repo root the same way :mag: ([0f850e9](https://github.com/onlooker-community/ecosystem/commit/0f850e92d7e620e4d7e06f512ef81efe4255f316))
|
|
10
|
+
|
|
11
|
+
## [0.43.5](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.43.4...ecosystem-v0.43.5) (2026-08-22)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
17
|
+
* **librarian:** key the declined-ledger guard on the proposal, not the artifact :bug: ([#199](https://github.com/onlooker-community/ecosystem/issues/199)) ([47a195d](https://github.com/onlooker-community/ecosystem/commit/47a195da98a3a565018c35e9e5c6dde2405520de))
|
|
18
|
+
|
|
3
19
|
## [0.43.4](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.43.3...ecosystem-v0.43.4) (2026-08-22)
|
|
4
20
|
|
|
5
21
|
|
package/CLAUDE.md
CHANGED
|
@@ -83,6 +83,11 @@ See `plugins/compass/docs/adr/001-evaluate-prompts-in-context.md` for the full d
|
|
|
83
83
|
a test drives the branch that emits it, `excluded` with a reason when not.
|
|
84
84
|
`npm run test:bus` fails on any registered type that appears in neither list.
|
|
85
85
|
7. Fail-soft when `~/.onlooker/` is absent — plugins must not block a session they were not invited to.
|
|
86
|
+
8. In `plugins/<name>/scripts/lib/<name>-config.sh`, locate `config-loader.sh` from the file's own
|
|
87
|
+
`${BASH_SOURCE[0]}`, never from a caller-supplied `$PLUGIN_ROOT`. That variable is read at source
|
|
88
|
+
time from whatever scope did the sourcing, so a sub-shell that inherits `CLAUDE_PLUGIN_ROOT` but not
|
|
89
|
+
`PLUGIN_ROOT` loses every accessor while still exiting 0 — config silently falls back to defaults.
|
|
90
|
+
`test/bats/config-lib-self-locating.bats` enforces this across every plugin.
|
|
86
91
|
|
|
87
92
|
## Development
|
|
88
93
|
|
package/docs/architecture.md
CHANGED
|
@@ -93,9 +93,9 @@ Every observable event flows through `onlooker-event.mjs` before being written t
|
|
|
93
93
|
|
|
94
94
|
The schema is versioned independently and published to npm. Plugin shell scripts invoke `onlooker-event.mjs` at runtime so schema validation always reflects the installed version.
|
|
95
95
|
|
|
96
|
-
> **Note:** Every emission path
|
|
96
|
+
> **Note:** Every emission path in this repo routes through `onlooker-event.mjs`. Nothing hand-builds an envelope and appends it to the log. Two paths used to: `prompt_rules_emit` (ecosystem-aaz) and the `safe_emit` fallback in `scripts/lib/validate-path.sh` (ecosystem-0tm). Both wrote lines missing all five required `id`/`schema_version`/`runtime`/`machine_id`/`sequence` fields, plus fields the envelope forbids — `event.v1.json` is `additionalProperties: false`.
|
|
97
97
|
>
|
|
98
|
-
>
|
|
98
|
+
> Route a new event type the same way rather than writing to the log directly. The shape to copy is a `{plugin, session_id, event_type, payload}` params object piped to `onlooker-event.mjs emit`, whose output you append; the emitter owns envelope assembly so there is exactly one place for it to drift. When the emitter is unavailable, emit nothing and return non-zero — an unparseable line on the bus is worse than a missing one.
|
|
99
99
|
|
|
100
100
|
### Emission gates
|
|
101
101
|
|
|
@@ -153,7 +153,7 @@ a floor a strong weighted mean cannot average away.
|
|
|
153
153
|
```
|
|
154
154
|
~/.onlooker/librarian/<project-key>/
|
|
155
155
|
lessons/approved/<ulid>.json jury passed; awaiting sync
|
|
156
|
-
lessons/declined.jsonl artifact_id + verdict + reason
|
|
156
|
+
lessons/declined.jsonl artifact_id + lesson_id + verdict + reason
|
|
157
157
|
```
|
|
158
158
|
|
|
159
159
|
The declined ledger matters more than it looks. The watermark advances past a
|
|
@@ -161,6 +161,14 @@ rejected artifact, so without a record a drop is either silently permanent or
|
|
|
161
161
|
on a rescan — re-pays Opus tokens to re-judge the same failures every session.
|
|
162
162
|
Append-only, never re-judged automatically.
|
|
163
163
|
|
|
164
|
+
`lesson_id` names the proposal a verdict came from, and is null when there is
|
|
165
|
+
none — the transform declines an artifact before any proposal exists. Promote's
|
|
166
|
+
double-write guard keys on it so two distinct proposals that share an
|
|
167
|
+
artifact_id each get their own row; keyed on artifact_id it dropped the second
|
|
168
|
+
verdict silently. `librarian_lesson_seen` deliberately stays keyed on
|
|
169
|
+
artifact_id, because it asks a different question: was this *artifact* already
|
|
170
|
+
handled?
|
|
171
|
+
|
|
164
172
|
**"Judged and failed" is not "could not judge."** Only real verdicts go in
|
|
165
173
|
`declined.jsonl`. A tribunal API error, or a jury below quorum, leaves the
|
|
166
174
|
candidate in proposals untouched. Conflating them lets one transient outage
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archivist",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
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.2](https://github.com/onlooker-community/ecosystem/compare/archivist-v0.3.1...archivist-v0.3.2) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/archivist-v0.3.0...archivist-v0.3.1) (2026-08-01)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -15,8 +15,12 @@
|
|
|
15
15
|
# Settings overlay only touches the `archivist.*` subtree of settings.json so it
|
|
16
16
|
# coexists with other plugins' configuration.
|
|
17
17
|
|
|
18
|
-
#
|
|
19
|
-
|
|
18
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
19
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
20
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
21
|
+
_ARCHIVIST_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
22
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
23
|
+
source "${_ARCHIVIST_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
20
24
|
|
|
21
25
|
_ARCHIVIST_CONFIG="{}"
|
|
22
26
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assayer",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
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.4](https://github.com/onlooker-community/ecosystem/compare/assayer-v1.1.3...assayer-v1.1.4) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [1.1.3](https://github.com/onlooker-community/ecosystem/compare/assayer-v1.1.2...assayer-v1.1.3) (2026-08-10)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
# assayer_config_get <jq-path> # echoes string value (empty if unset)
|
|
14
14
|
# assayer_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
|
|
16
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
17
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
18
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
19
|
+
_ASSAYER_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
21
|
+
source "${_ASSAYER_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
18
22
|
|
|
19
23
|
_assayer_CONFIG="{}"
|
|
20
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bursar",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.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.3.1](https://github.com/onlooker-community/ecosystem/compare/bursar-v0.3.0...bursar-v0.3.1) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/bursar-v0.2.2...bursar-v0.3.0) (2026-08-02)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -16,8 +16,12 @@
|
|
|
16
16
|
# bursar_config_surface_enabled # 0 if bursar.surface_at_session_start is true
|
|
17
17
|
# bursar_config_week_start # echoes "monday" or "sunday"
|
|
18
18
|
|
|
19
|
-
#
|
|
20
|
-
|
|
19
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
20
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
21
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
22
|
+
_BURSAR_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
23
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
24
|
+
source "${_BURSAR_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
21
25
|
|
|
22
26
|
_BURSAR_CONFIG="{}"
|
|
23
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cartographer",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.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.6.1](https://github.com/onlooker-community/ecosystem/compare/cartographer-v0.6.0...cartographer-v0.6.1) (2026-08-22)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
11
|
+
|
|
5
12
|
## [0.6.0](https://github.com/onlooker-community/ecosystem/compare/cartographer-v0.5.1...cartographer-v0.6.0) (2026-08-19)
|
|
6
13
|
|
|
7
14
|
|
|
@@ -12,8 +12,12 @@
|
|
|
12
12
|
# cartographer_config_load <repo_root>
|
|
13
13
|
# cartographer_config_get_json ".cartographer.exclude_paths"
|
|
14
14
|
|
|
15
|
-
#
|
|
16
|
-
|
|
15
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
16
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
17
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
18
|
+
_CARTOGRAPHER_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
19
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
20
|
+
source "${_CARTOGRAPHER_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
17
21
|
|
|
18
22
|
_CARTOGRAPHER_CONFIG=""
|
|
19
23
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "compass",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
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.2](https://github.com/onlooker-community/ecosystem/compare/compass-v0.4.1...compass-v0.4.2) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.4.1](https://github.com/onlooker-community/ecosystem/compare/compass-v0.4.0...compass-v0.4.1) (2026-08-01)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
# compass_config_get <jq-path> # echoes string value (empty if unset)
|
|
14
14
|
# compass_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
|
|
16
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
17
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
18
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
19
|
+
_COMPASS_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
21
|
+
source "${_COMPASS_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
18
22
|
|
|
19
23
|
_compass_CONFIG="{}"
|
|
20
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "counsel",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
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.2](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.5.1...counsel-v0.5.2) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.5.1](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.5.0...counsel-v0.5.1) (2026-08-01)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
# counsel_config_get <jq-path> # echoes string value (empty if unset)
|
|
14
14
|
# counsel_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
|
|
16
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
17
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
18
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
19
|
+
_COUNSEL_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
21
|
+
source "${_COUNSEL_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
18
22
|
|
|
19
23
|
_counsel_CONFIG="{}"
|
|
20
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "curator",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
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.4](https://github.com/onlooker-community/ecosystem/compare/curator-v0.2.3...curator-v0.2.4) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.2.3](https://github.com/onlooker-community/ecosystem/compare/curator-v0.2.2...curator-v0.2.3) (2026-08-10)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
# curator_config_get <jq-path> # echoes string value (empty if unset)
|
|
14
14
|
# curator_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
|
|
16
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
17
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
18
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
19
|
+
_CURATOR_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
21
|
+
source "${_CURATOR_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
18
22
|
|
|
19
23
|
_curator_CONFIG="{}"
|
|
20
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "echo",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
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.2](https://github.com/onlooker-community/ecosystem/compare/echo-v0.3.1...echo-v0.3.2) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/echo-v0.3.0...echo-v0.3.1) (2026-08-01)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
# echo_config_get <jq-path> # echoes string value (empty if unset)
|
|
14
14
|
# echo_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
|
|
16
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
17
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
18
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
19
|
+
_ECHO_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
21
|
+
source "${_ECHO_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
18
22
|
|
|
19
23
|
_echo_CONFIG="{}"
|
|
20
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "governor",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
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.3](https://github.com/onlooker-community/ecosystem/compare/governor-v0.3.2...governor-v0.3.3) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.3.2](https://github.com/onlooker-community/ecosystem/compare/governor-v0.3.1...governor-v0.3.2) (2026-08-02)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
# governor_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
# governor_config_enforcement # echoes "soft" or "hard"
|
|
16
16
|
|
|
17
|
-
#
|
|
18
|
-
|
|
17
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
18
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
19
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
20
|
+
_GOVERNOR_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
21
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
22
|
+
source "${_GOVERNOR_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
19
23
|
|
|
20
24
|
_GOVERNOR_CONFIG="{}"
|
|
21
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "historian",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
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.4](https://github.com/onlooker-community/ecosystem/compare/historian-v0.3.3...historian-v0.3.4) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
9
|
+
|
|
3
10
|
## [0.3.3](https://github.com/onlooker-community/ecosystem/compare/historian-v0.3.2...historian-v0.3.3) (2026-08-10)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -14,8 +14,12 @@
|
|
|
14
14
|
#
|
|
15
15
|
# Settings overlay only touches the `historian.*` subtree of settings.json.
|
|
16
16
|
|
|
17
|
-
#
|
|
18
|
-
|
|
17
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
18
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
19
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
20
|
+
_HISTORIAN_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
21
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
22
|
+
source "${_HISTORIAN_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
19
23
|
|
|
20
24
|
_HISTORIAN_CONFIG="{}"
|
|
21
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "inspector",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
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,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.4](https://github.com/onlooker-community/ecosystem/compare/inspector-v0.3.3...inspector-v0.3.4) (2026-08-22)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **inspector:** canonicalize the file and repo root the same way :mag: ([0f850e9](https://github.com/onlooker-community/ecosystem/commit/0f850e92d7e620e4d7e06f512ef81efe4255f316))
|
|
9
|
+
|
|
10
|
+
## [0.3.3](https://github.com/onlooker-community/ecosystem/compare/inspector-v0.3.2...inspector-v0.3.3) (2026-08-22)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **config:** let every config lib find the loader from its own path :broom: ([#198](https://github.com/onlooker-community/ecosystem/issues/198)) ([249fe41](https://github.com/onlooker-community/ecosystem/commit/249fe41bf191db48239c2028ba77a10b3dcb03af))
|
|
16
|
+
|
|
3
17
|
## [0.3.2](https://github.com/onlooker-community/ecosystem/compare/inspector-v0.3.1...inspector-v0.3.2) (2026-08-02)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -40,14 +40,10 @@ TOOL_TARGET=$(printf '%s' "$HOOK_INPUT" \
|
|
|
40
40
|
| jq -r '.tool_input.file_path // .tool_input.path // empty' 2>/dev/null)
|
|
41
41
|
[[ -z "$TOOL_TARGET" ]] && exit 0
|
|
42
42
|
|
|
43
|
-
# Canonicalize.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
CANONICAL=$(readlink -f "$TOOL_TARGET" 2>/dev/null) || CANONICAL="$TOOL_TARGET"
|
|
48
|
-
else
|
|
49
|
-
CANONICAL="$TOOL_TARGET"
|
|
50
|
-
fi
|
|
43
|
+
# Canonicalize through the same helper the repo root uses. The containment
|
|
44
|
+
# check below is a prefix match, so both sides have to be resolved the same
|
|
45
|
+
# way — see inspector_canonical_path and ecosystem-foi.
|
|
46
|
+
CANONICAL=$(inspector_canonical_path "$TOOL_TARGET")
|
|
51
47
|
export INSPECTOR_FILE="$CANONICAL"
|
|
52
48
|
|
|
53
49
|
REPO_ROOT=$(inspector_project_repo_root "$CWD")
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
# inspector_config_get <jq-path> # echoes string value (empty if unset)
|
|
14
14
|
# inspector_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
15
15
|
|
|
16
|
-
#
|
|
17
|
-
|
|
16
|
+
# Resolve the shared loader from this file's own location. $PLUGIN_ROOT is
|
|
17
|
+
# whatever the sourcing scope happened to set, so a sub-shell that inherits
|
|
18
|
+
# CLAUDE_PLUGIN_ROOT but not PLUGIN_ROOT would lose every accessor silently.
|
|
19
|
+
_INSPECTOR_CONFIG_LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
20
|
+
# shellcheck source=scripts/lib/config-loader.sh
|
|
21
|
+
source "${_INSPECTOR_CONFIG_LIB_DIR}/../../../../scripts/lib/config-loader.sh"
|
|
18
22
|
|
|
19
23
|
_inspector_CONFIG="{}"
|
|
20
24
|
|