@inetafrica/open-claudia 3.0.19 → 3.0.20
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/CHANGELOG.md +6 -0
- package/channels/spaces/adapter.js +8 -2
- package/core/identity.js +4 -0
- package/package.json +1 -1
- package/test-provider-language.js +8 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v3.0.20 — Spaces answers tags, and knows the owner
|
|
4
|
+
|
|
5
|
+
- **A tag now actually gets a reply.** The Spaces server labels notifications with **plural** categories (`mentions`, `comments`, `reactions`, `task_updated`), but the conversational plane's engage set only matched the singular `mention` — so every real `@`-tag was silently downgraded to awareness-only and the bot never spoke. `ENGAGE_TYPES` now matches the plural forms (`mentions`/`replies`, singular aliases kept for safety). Plain comments, reactions and task updates stay awareness-only, so the "untagged comments hit the radar without auto-answering" rule is unchanged. Confirmed live: a real `mentions` notification was arriving and being dropped.
|
|
6
|
+
- **The owner is recognised on Spaces.** Spaces principals are central/Kazee user ids, but `isConfiguredOwnerChannel` had no `spaces` branch, so the owner's own comments resolved to a fresh `spaces:<id>` canonical instead of their owner identity — classing the owner as **external** (default-deny) on every Spaces task. Added a `spaces` branch mapping to `KAZEE_OWNER_USER_ID` (the same id Spaces/Kazee/central share), so the owner is recognised, their Spaces turns unify into their one canonical brain, and the relationship guardrail no longer misfires on them.
|
|
7
|
+
- **Agent-space / OpenClaw:** no new deps, no new env, no schema change; Docker image builds identically (FROM the pre-baked `:base`). Existing pods pick this up on their next approved upgrade.
|
|
8
|
+
|
|
3
9
|
## v3.0.19 — flattened to the top level (the folder-project model is gone)
|
|
4
10
|
|
|
5
11
|
- **The bot always runs at the top-level workspace now — no more "Pick a project first."** The per-folder session model (pick a subfolder of `WORKSPACE`, scope the conversation to it) has been removed. `currentSession` defaults to the workspace root (`{ name: "Workspace", dir: WORKSPACE }`) at state creation and on every migration/load, so it is never null. This directly fixes Spaces (and any non-Telegram channel that never picked a folder) replying with a dead "Pick a project first:" project-picker instead of engaging — the picker gate was the only thing blocking it.
|
|
@@ -21,8 +21,14 @@ const { SpacesClient, contentText } = require("./client");
|
|
|
21
21
|
const { createSpacesSocket } = require("./socket");
|
|
22
22
|
const spacesState = require("./state");
|
|
23
23
|
|
|
24
|
-
// Notification `type`/`category` values that warrant a full agent turn.
|
|
25
|
-
|
|
24
|
+
// Notification `type`/`category` values that warrant a full agent turn. The
|
|
25
|
+
// Spaces server emits PLURAL categories (mentions, comments, reactions,
|
|
26
|
+
// task_updated), so the engage set must match the plural forms — matching only
|
|
27
|
+
// the singular "mention" silently dropped every real tag. Singular aliases are
|
|
28
|
+
// kept in case a socket payload ever uses them. Awareness-only types (comments,
|
|
29
|
+
// reactions, task_updated) are deliberately absent: they update the cursor but
|
|
30
|
+
// never auto-reply.
|
|
31
|
+
const ENGAGE_TYPES = new Set(["mention", "mentions", "reply", "replies", "task_assigned"]);
|
|
26
32
|
|
|
27
33
|
class SpacesAdapter {
|
|
28
34
|
constructor({ id = "spaces", url = "https://api.spaces.kazee.africa", token, ownerUserId = "", taskLoopMode = "advisory", pollMs }) {
|
package/core/identity.js
CHANGED
|
@@ -46,6 +46,10 @@ function isConfiguredOwnerChannel(transport, channelId) {
|
|
|
46
46
|
try { cfg = require("./config"); } catch (e) { return false; }
|
|
47
47
|
if (t === "telegram") return (cfg.CHAT_IDS || []).map(String).includes(c);
|
|
48
48
|
if (t === "kazee") return !!cfg.config.KAZEE_OWNER_USER_ID && c === String(cfg.config.KAZEE_OWNER_USER_ID);
|
|
49
|
+
// Spaces principals are central/Kazee user ids, so the owner's Spaces actor id
|
|
50
|
+
// is the same configured Kazee owner id — recognise them on Spaces too, else
|
|
51
|
+
// the owner's own comments are classed external (default-deny).
|
|
52
|
+
if (t === "spaces") return !!cfg.config.KAZEE_OWNER_USER_ID && c === String(cfg.config.KAZEE_OWNER_USER_ID);
|
|
49
53
|
if (t === "voice") return c === String(cfg.config.VOICE_OWNER_USER_ID || "voice-owner");
|
|
50
54
|
// Web dashboard chat: fixed single-owner channel gated by the dashboard
|
|
51
55
|
// session, so its identity is operator-implied rather than env-declared.
|
package/package.json
CHANGED
|
@@ -32,15 +32,14 @@ assert.doesNotMatch(setup, /Your Claude Code bot is connected|Description=Claude
|
|
|
32
32
|
|
|
33
33
|
const pkg = JSON.parse(read("package.json"));
|
|
34
34
|
assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
|
|
35
|
-
// 3.0.
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
// /
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
assert.strictEqual(pkg.version, "3.0.19", "release version must remain unchanged without explicit approval");
|
|
35
|
+
// 3.0.20 approved by Sumeet 2026-07-14 ("Yeh push it"): two Spaces fixes. (1)
|
|
36
|
+
// The Spaces server emits PLURAL notification categories (mentions/comments/
|
|
37
|
+
// reactions), so ENGAGE_TYPES now matches "mentions"/"replies" — matching only
|
|
38
|
+
// singular "mention" silently dropped every real tag. (2) isConfiguredOwnerChannel
|
|
39
|
+
// gained a "spaces" branch mapping to KAZEE_OWNER_USER_ID (Spaces principals are
|
|
40
|
+
// central/Kazee ids), so the owner is no longer classed external (default-deny)
|
|
41
|
+
// on their own Spaces comments. 3.0.19 flattened the folder-project model.
|
|
42
|
+
assert.strictEqual(pkg.version, "3.0.20", "release version must remain unchanged without explicit approval");
|
|
44
43
|
for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
|
|
45
44
|
assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
|
|
46
45
|
}
|