claude-nb 0.4.0 → 0.5.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.
Files changed (49) hide show
  1. package/Makefile +8 -2
  2. package/README.md +40 -56
  3. package/VERSION +1 -1
  4. package/bin/board +102 -34
  5. package/bin/cnb +59 -33
  6. package/bin/dispatcher +25 -11
  7. package/bin/doctor +3 -5
  8. package/bin/init +8 -8
  9. package/bin/notify +224 -0
  10. package/bin/registry +8 -23
  11. package/bin/sync-version +131 -0
  12. package/lib/board_admin.py +19 -9
  13. package/lib/board_bbs.py +23 -8
  14. package/lib/board_bug.py +2 -1
  15. package/lib/board_db.py +18 -6
  16. package/lib/board_lock.py +5 -0
  17. package/lib/board_mailbox.py +6 -4
  18. package/lib/board_msg.py +112 -24
  19. package/lib/board_pending.py +233 -0
  20. package/lib/board_pulse.py +14 -0
  21. package/lib/board_task.py +22 -10
  22. package/lib/board_tui.py +28 -20
  23. package/lib/board_view.py +60 -28
  24. package/lib/board_vote.py +9 -3
  25. package/lib/build_lock.py +7 -7
  26. package/lib/common.py +45 -3
  27. package/lib/concerns/__init__.py +4 -1
  28. package/lib/concerns/coral.py +1 -1
  29. package/lib/concerns/digest_scheduler.py +109 -0
  30. package/lib/concerns/file_watcher.py +73 -68
  31. package/lib/concerns/health.py +1 -1
  32. package/lib/concerns/notification_push.py +171 -0
  33. package/lib/concerns/notifications.py +58 -3
  34. package/lib/concerns/nudge_coordinator.py +148 -0
  35. package/lib/digest.py +62 -0
  36. package/lib/health.py +2 -2
  37. package/lib/inject.py +2 -2
  38. package/lib/monitor.py +8 -4
  39. package/lib/notification_config.py +101 -0
  40. package/lib/swarm.py +43 -35
  41. package/lib/swarm_backend.py +63 -29
  42. package/lib/theme_profiles.py +89 -0
  43. package/migrations/004_heartbeat.sql +1 -0
  44. package/migrations/005_notification_log.sql +12 -0
  45. package/migrations/006_pending_actions.sql +15 -0
  46. package/package.json +4 -3
  47. package/pyproject.toml +3 -2
  48. package/registry/README.md +9 -0
  49. package/schema.sql +29 -1
@@ -0,0 +1,15 @@
1
+ -- Pending actions queue: batch user-required operations.
2
+ CREATE TABLE IF NOT EXISTS pending_actions(
3
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
4
+ type TEXT NOT NULL,
5
+ command TEXT NOT NULL,
6
+ reason TEXT NOT NULL,
7
+ verify_command TEXT,
8
+ retry_command TEXT,
9
+ status TEXT DEFAULT 'pending',
10
+ created_by TEXT NOT NULL,
11
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S','now','localtime')),
12
+ resolved_at TEXT
13
+ );
14
+ CREATE INDEX IF NOT EXISTS idx_pending_status ON pending_actions(status);
15
+ CREATE INDEX IF NOT EXISTS idx_pending_creator ON pending_actions(created_by);
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "claude-nb",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "description": "Multi-agent coordination framework for Claude Code sessions",
5
5
  "bin": {
6
6
  "cnb": "./bin/cnb.js"
7
7
  },
8
8
  "files": [
9
9
  "bin/",
10
+ "!bin/__pycache__/",
10
11
  "lib/",
11
12
  "!lib/**/__pycache__/",
12
- "!lib/**/*.pyc",
13
+ "!**/*.pyc",
13
14
  "migrations/",
14
15
  "registry/",
15
16
  "schema.sql",
@@ -24,5 +25,5 @@
24
25
  "ai",
25
26
  "coding-agent"
26
27
  ],
27
- "license": "MIT"
28
+ "license": "LicenseRef-OpenAll-1.0"
28
29
  }
package/pyproject.toml CHANGED
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "claude-nb"
7
- version = "0.4.0"
7
+ version = "0.5.2.dev0"
8
8
  description = "Multi-agent coordination framework for Claude Code sessions"
9
9
  requires-python = ">=3.11"
10
- license = "OpenAll-1.0"
10
+ license = "LicenseRef-OpenAll-1.0"
11
11
  dependencies = [
12
12
  "cryptography>=41.0",
13
13
  ]
@@ -28,6 +28,7 @@ addopts = "-v --tb=short"
28
28
  markers = [
29
29
  "slow: marks tests as slow (deselect with '-m \"not slow\"')",
30
30
  "integration: marks integration tests that may need external services",
31
+ "security: marks security/isolation vulnerability tests (Issue #31)",
31
32
  ]
32
33
 
33
34
  # ---------- ruff ----------
@@ -0,0 +1,9 @@
1
+ # Registry Chain
2
+
3
+ | Block | Name | Role | Hash |
4
+ |-------|------|------|------|
5
+ | #0 | claudes-code | project | — |
6
+ | #1 | Claude Meridian | lead | `82a167d` |
7
+ | #2 | Claude Forge | active-dev | `4a3c92e` |
8
+ | #3 | Claude Lead | active-dev | `e665a7e` |
9
+ | #4 | encrypted-mailbox-live | project | — |
package/schema.sql CHANGED
@@ -4,7 +4,8 @@ CREATE TABLE IF NOT EXISTS sessions(
4
4
  name TEXT PRIMARY KEY,
5
5
  status TEXT DEFAULT '',
6
6
  persona TEXT DEFAULT '',
7
- updated_at TEXT DEFAULT (strftime('%Y-%m-%d %H:%M','now','localtime'))
7
+ updated_at TEXT DEFAULT (strftime('%Y-%m-%d %H:%M','now','localtime')),
8
+ last_heartbeat TEXT DEFAULT NULL
8
9
  );
9
10
 
10
11
  CREATE TABLE IF NOT EXISTS messages(
@@ -136,3 +137,30 @@ CREATE TABLE IF NOT EXISTS git_locks(
136
137
  acquired_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S','now','localtime')),
137
138
  expires_at INTEGER NOT NULL
138
139
  );
140
+
141
+ CREATE TABLE IF NOT EXISTS notification_log(
142
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
143
+ notif_type TEXT NOT NULL,
144
+ recipient TEXT NOT NULL,
145
+ ref_type TEXT NOT NULL,
146
+ ref_id TEXT NOT NULL,
147
+ channel TEXT NOT NULL,
148
+ sent_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S','now','localtime'))
149
+ );
150
+ CREATE INDEX IF NOT EXISTS idx_notif_dedup ON notification_log(notif_type, recipient, ref_id);
151
+ CREATE INDEX IF NOT EXISTS idx_notif_ts ON notification_log(sent_at);
152
+
153
+ CREATE TABLE IF NOT EXISTS pending_actions(
154
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
155
+ type TEXT NOT NULL,
156
+ command TEXT NOT NULL,
157
+ reason TEXT NOT NULL,
158
+ verify_command TEXT,
159
+ retry_command TEXT,
160
+ status TEXT DEFAULT 'pending',
161
+ created_by TEXT NOT NULL,
162
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S','now','localtime')),
163
+ resolved_at TEXT
164
+ );
165
+ CREATE INDEX IF NOT EXISTS idx_pending_status ON pending_actions(status);
166
+ CREATE INDEX IF NOT EXISTS idx_pending_creator ON pending_actions(created_by);