@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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecosystem",
3
- "version": "0.30.0",
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.0",
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.0",
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": "@onlooker-community/ecosystem",
3
- "version": "0.30.0",
3
+ "version": "0.30.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": "historian",
3
- "version": "0.2.0",
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
- for ((i = 0; i < KEPT_COUNT; i++)); do
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 and the
47
- # backend is something other than "none". A side-effect-free probe.
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
- # HEAD `/api/tags` is the cheapest way to confirm the daemon
61
- # is up without rendering a payload.
62
- curl -fsS --max-time "$timeout" -o /dev/null "${host}/api/tags" 2>/dev/null
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
@@ -65,6 +65,7 @@ if [[ "${HISTORIAN_STUB_OLLAMA_AVAILABLE:-1}" == "0" ]]; then
65
65
  fi
66
66
 
67
67
  if [[ "$url" == */api/tags ]]; then
68
+ printf '{"models":[{"name":"nomic-embed-text"}]}'
68
69
  exit 0
69
70
  fi
70
71