@onlooker-community/ecosystem 0.30.0 → 0.30.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.
- package/.claude-plugin/plugin.json +1 -1
- package/.release-please-manifest.json +2 -2
- package/CHANGELOG.md +12 -0
- package/CLAUDE.md +10 -0
- package/package.json +1 -1
- package/plugins/historian/.claude-plugin/plugin.json +1 -1
- package/plugins/historian/CHANGELOG.md +7 -0
- package/plugins/historian/scripts/hooks/historian-session-end.sh +2 -4
- package/plugins/historian/scripts/lib/historian-embedder.sh +10 -6
- package/test/bats/historian-prompt-submit.bats +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ecosystem",
|
|
3
|
-
"version": "0.30.
|
|
3
|
+
"version": "0.30.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,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
".": "0.30.
|
|
2
|
+
".": "0.30.1",
|
|
3
3
|
"plugins/archivist": "0.2.0",
|
|
4
4
|
"plugins/tribunal": "1.0.1",
|
|
5
5
|
"plugins/echo": "0.2.0",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"plugins/warden": "0.2.0",
|
|
12
12
|
"plugins/librarian": "0.3.0",
|
|
13
13
|
"plugins/curator": "0.1.0",
|
|
14
|
-
"plugins/historian": "0.2.
|
|
14
|
+
"plugins/historian": "0.2.1",
|
|
15
15
|
"plugins/assayer": "1.0.0",
|
|
16
16
|
"plugins/bursar": "0.1.1",
|
|
17
17
|
"plugins/lineage": "0.1.0",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.30.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.30.0...ecosystem-v0.30.1) (2026-06-28)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **historian:** repair CI broken by embedder check + document PR workflow :nail_care: ([#106](https://github.com/onlooker-community/ecosystem/issues/106)) ([02062a2](https://github.com/onlooker-community/ecosystem/commit/02062a21163e084705dae9cf421719b6e5a7b306))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Performance Improvements
|
|
12
|
+
|
|
13
|
+
* **historian:** fix O(n²) chunk loop and embedder false-positive :relieved: ([4ef130a](https://github.com/onlooker-community/ecosystem/commit/4ef130a4c01ec378da5b4d8baeeb7b4fb6059272))
|
|
14
|
+
|
|
3
15
|
## [0.30.0](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.29.3...ecosystem-v0.30.0) (2026-06-24)
|
|
4
16
|
|
|
5
17
|
|
package/CLAUDE.md
CHANGED
|
@@ -87,6 +87,16 @@ npm run test:ci # shellcheck + bats + schema + lint
|
|
|
87
87
|
|
|
88
88
|
Tests use an isolated temp home; nothing writes to your real `~/.onlooker/`.
|
|
89
89
|
|
|
90
|
+
## Git workflow
|
|
91
|
+
|
|
92
|
+
**Always open a PR — never push directly to `main`.** Even though bypass rights allow direct pushes, this repo uses release-please for automated changelogs and versioning, so every change must travel through a PR to be picked up correctly. CI also runs on PRs before merge, catching failures before they land.
|
|
93
|
+
|
|
94
|
+
Workflow:
|
|
95
|
+
1. Create a feature branch: `git switch -c <type>/<short-description>`
|
|
96
|
+
2. Commit using `/commit`
|
|
97
|
+
3. Push the branch and open a PR using `/git:gh-pr-create`
|
|
98
|
+
4. Wait for CI to pass before merging
|
|
99
|
+
|
|
90
100
|
## Conventions
|
|
91
101
|
|
|
92
102
|
- All hooks are bash scripts. No Python, no Node entry points in hook scripts (they may shell out to `node` for event emission or heavy lifting).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "historian",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.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.2.1](https://github.com/onlooker-community/ecosystem/compare/historian-v0.2.0...historian-v0.2.1) (2026-06-28)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Performance Improvements
|
|
7
|
+
|
|
8
|
+
* **historian:** fix O(n²) chunk loop and embedder false-positive :relieved: ([4ef130a](https://github.com/onlooker-community/ecosystem/commit/4ef130a4c01ec378da5b4d8baeeb7b4fb6059272))
|
|
9
|
+
|
|
3
10
|
## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/historian-v0.1.0...historian-v0.2.0) (2026-06-04)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -162,10 +162,8 @@ historian_storage_reset_session "$PROJECT_KEY" "$SESSION_ID"
|
|
|
162
162
|
|
|
163
163
|
NOW_TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
164
164
|
CHUNKS_INDEXED=0
|
|
165
|
-
KEPT_COUNT=$(printf '%s' "$KEPT" | jq 'length' 2>/dev/null) || KEPT_COUNT=0
|
|
166
165
|
|
|
167
|
-
|
|
168
|
-
CHUNK=$(printf '%s' "$KEPT" | jq -c ".[$i]")
|
|
166
|
+
while IFS= read -r CHUNK; do
|
|
169
167
|
[[ -z "$CHUNK" || "$CHUNK" == "null" ]] && continue
|
|
170
168
|
|
|
171
169
|
CHUNK_ID=$(historian_ulid)
|
|
@@ -203,7 +201,7 @@ for ((i = 0; i < KEPT_COUNT; i++)); do
|
|
|
203
201
|
'{ chunk_id: $chunk_id, redaction_count: $redaction_count }')"
|
|
204
202
|
fi
|
|
205
203
|
fi
|
|
206
|
-
done
|
|
204
|
+
done < <(printf '%s' "$KEPT" | jq -c '.[]' 2>/dev/null)
|
|
207
205
|
|
|
208
206
|
# Emit one chunk.dropped event per skip reason summary (caps at the
|
|
209
207
|
# number of unique reasons; per-chunk emission would spam the log).
|
|
@@ -43,8 +43,8 @@ _historian_embedder_ollama_timeout() {
|
|
|
43
43
|
printf '%s' "$v"
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
# Returns 0 if the currently-configured embedder is reachable
|
|
47
|
-
#
|
|
46
|
+
# Returns 0 if the currently-configured embedder is reachable AND the
|
|
47
|
+
# target model is installed. A side-effect-free probe.
|
|
48
48
|
historian_embedder_available() {
|
|
49
49
|
local backend
|
|
50
50
|
backend=$(_historian_embedder_backend)
|
|
@@ -54,12 +54,16 @@ historian_embedder_available() {
|
|
|
54
54
|
;;
|
|
55
55
|
ollama)
|
|
56
56
|
command -v curl >/dev/null 2>&1 || return 1
|
|
57
|
-
local host timeout
|
|
57
|
+
local host model timeout tags
|
|
58
58
|
host=$(_historian_embedder_ollama_host)
|
|
59
|
+
model=$(_historian_embedder_ollama_model)
|
|
59
60
|
timeout=$(_historian_embedder_ollama_timeout)
|
|
60
|
-
#
|
|
61
|
-
#
|
|
62
|
-
curl -fsS --max-time "$timeout"
|
|
61
|
+
# Fetch the model list and verify the configured model is present.
|
|
62
|
+
# An empty models list (ollama running but no models pulled) returns 1.
|
|
63
|
+
tags=$(curl -fsS --max-time "$timeout" "${host}/api/tags" 2>/dev/null) || return 1
|
|
64
|
+
printf '%s' "$tags" | jq -e --arg m "$model" \
|
|
65
|
+
'.models[]? | select(.name == $m or (.name | startswith($m + ":")))' \
|
|
66
|
+
>/dev/null 2>&1
|
|
63
67
|
;;
|
|
64
68
|
*)
|
|
65
69
|
# fastembed / remote backends not implemented yet — treat as
|