eling 0.2.0__tar.gz → 0.2.2__tar.gz

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 (57) hide show
  1. {eling-0.2.0/src/eling.egg-info → eling-0.2.2}/PKG-INFO +50 -3
  2. {eling-0.2.0 → eling-0.2.2}/README.md +48 -1
  3. {eling-0.2.0 → eling-0.2.2}/pyproject.toml +2 -2
  4. {eling-0.2.0 → eling-0.2.2}/src/eling/__init__.py +9 -4
  5. eling-0.2.2/src/eling/brain.py +813 -0
  6. {eling-0.2.0 → eling-0.2.2}/src/eling/config.py +8 -0
  7. {eling-0.2.0 → eling-0.2.2}/src/eling/hooks.py +55 -8
  8. {eling-0.2.0 → eling-0.2.2}/src/eling/mcp_server.py +37 -0
  9. eling-0.2.2/src/eling/verify_on_stop.py +307 -0
  10. {eling-0.2.0 → eling-0.2.2/src/eling.egg-info}/PKG-INFO +50 -3
  11. {eling-0.2.0 → eling-0.2.2}/src/eling.egg-info/SOURCES.txt +3 -1
  12. {eling-0.2.0 → eling-0.2.2}/tests/test_export.py +1 -1
  13. {eling-0.2.0 → eling-0.2.2}/tests/test_hooks.py +8 -7
  14. {eling-0.2.0 → eling-0.2.2}/tests/test_think.py +1 -1
  15. eling-0.2.2/tests/test_verify_on_stop.py +171 -0
  16. eling-0.2.0/src/eling/brain.py +0 -567
  17. {eling-0.2.0 → eling-0.2.2}/LICENSE +0 -0
  18. {eling-0.2.0 → eling-0.2.2}/setup.cfg +0 -0
  19. {eling-0.2.0 → eling-0.2.2}/src/eling/adapters/__init__.py +0 -0
  20. {eling-0.2.0 → eling-0.2.2}/src/eling/cli.py +0 -0
  21. {eling-0.2.0 → eling-0.2.2}/src/eling/compress.py +0 -0
  22. {eling-0.2.0 → eling-0.2.2}/src/eling/decay.py +0 -0
  23. {eling-0.2.0 → eling-0.2.2}/src/eling/export.py +0 -0
  24. {eling-0.2.0 → eling-0.2.2}/src/eling/hermes_plugin.py +0 -0
  25. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/__init__.py +0 -0
  26. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/builtin.py +0 -0
  27. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/code.py +0 -0
  28. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/code_index.py +0 -0
  29. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/facts.py +0 -0
  30. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/hrr.py +0 -0
  31. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/kb.py +0 -0
  32. {eling-0.2.0 → eling-0.2.2}/src/eling/layers/notion.py +0 -0
  33. {eling-0.2.0 → eling-0.2.2}/src/eling/permissions.py +0 -0
  34. {eling-0.2.0 → eling-0.2.2}/src/eling/privacy.py +0 -0
  35. {eling-0.2.0 → eling-0.2.2}/src/eling/scripts/benchmark.py +0 -0
  36. {eling-0.2.0 → eling-0.2.2}/src/eling/snapshot.py +0 -0
  37. {eling-0.2.0 → eling-0.2.2}/src/eling/utils/__init__.py +0 -0
  38. {eling-0.2.0 → eling-0.2.2}/src/eling.egg-info/dependency_links.txt +0 -0
  39. {eling-0.2.0 → eling-0.2.2}/src/eling.egg-info/requires.txt +0 -0
  40. {eling-0.2.0 → eling-0.2.2}/src/eling.egg-info/top_level.txt +0 -0
  41. {eling-0.2.0 → eling-0.2.2}/tests/test_adapters.py +0 -0
  42. {eling-0.2.0 → eling-0.2.2}/tests/test_brain.py +0 -0
  43. {eling-0.2.0 → eling-0.2.2}/tests/test_builtin.py +0 -0
  44. {eling-0.2.0 → eling-0.2.2}/tests/test_cli.py +0 -0
  45. {eling-0.2.0 → eling-0.2.2}/tests/test_compress.py +0 -0
  46. {eling-0.2.0 → eling-0.2.2}/tests/test_config.py +0 -0
  47. {eling-0.2.0 → eling-0.2.2}/tests/test_contradiction.py +0 -0
  48. {eling-0.2.0 → eling-0.2.2}/tests/test_decay.py +0 -0
  49. {eling-0.2.0 → eling-0.2.2}/tests/test_facts.py +0 -0
  50. {eling-0.2.0 → eling-0.2.2}/tests/test_graph.py +0 -0
  51. {eling-0.2.0 → eling-0.2.2}/tests/test_hrr.py +0 -0
  52. {eling-0.2.0 → eling-0.2.2}/tests/test_kb.py +0 -0
  53. {eling-0.2.0 → eling-0.2.2}/tests/test_permissions.py +0 -0
  54. {eling-0.2.0 → eling-0.2.2}/tests/test_privacy.py +0 -0
  55. {eling-0.2.0 → eling-0.2.2}/tests/test_schema_packs.py +0 -0
  56. {eling-0.2.0 → eling-0.2.2}/tests/test_snapshot.py +0 -0
  57. {eling-0.2.0 → eling-0.2.2}/tests/test_sync.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eling
3
- Version: 0.2.0
4
- Summary: Unified second brain for AI agents — 5-tier memory, HRR reasoning, 9 MCP tools
3
+ Version: 0.2.2
4
+ Summary: Unified second brain for AI agents — 5-tier memory, HRR reasoning, 10 MCP tools, conditional verify-on-stop
5
5
  Author: PatrickNoFilter
6
6
  License: MIT
7
7
  Keywords: memory,mcp,ai-agent,second-brain,hrr
@@ -28,7 +28,7 @@ Dynamic: license-file
28
28
 
29
29
  # 🧠 Eling
30
30
 
31
- **Unified second brain for AI agents — 5-tier memory, HRR reasoning, 9 MCP tools**
31
+ **Unified second brain for AI agents — 5-tier memory, HRR reasoning, 10 MCP tools, conditional verify-on-stop**
32
32
 
33
33
  *"Eling" (Javanese): to remember, to be conscious, to be aware*
34
34
 
@@ -66,6 +66,7 @@ All accessible via **9 MCP tools** from a single stdio server:
66
66
  | `eling_stats` | Show per-layer statistics |
67
67
  | `eling_think` | Synthesis + gap analysis across layers |
68
68
  | `eling_export` | Full brain export as JSON or Markdown |
69
+ | `eling_verify` | Query/record verification status (conditional) |
69
70
 
70
71
  ## 🚀 Quick Start
71
72
 
@@ -200,6 +201,52 @@ print(result) # {"layer": "notion", "page_id": "...", ...}
200
201
 
201
202
  > **Note**: `eling_reflect` and `remember(layer="notion")` check availability at call time and return a clear error if any config is missing — no silent failures.
202
203
 
204
+ ## 🛡️ Verify-on-Stop (Conditional)
205
+
206
+ Eling provides **verify-on-stop** nudges for AI agents that lack built-in
207
+ verification (e.g., OpenCode, OpenClaw, Cursor, Windsurf). When running under
208
+ Hermes, this feature automatically **skips** — because Hermes already has its
209
+ own `agent/verification_stop.py`.
210
+
211
+ ### How it works
212
+
213
+ 1. **Auto-detection** — Eling detects the host agent from environment variables
214
+ (`HERMES_SESSION_SOURCE` → Hermes, `OPENCODE_HOME` → OpenCode, etc.)
215
+ 2. **File edit tracking** — When code files are edited via hooks or MCP tools,
216
+ eling records them in a verification ledger
217
+ 3. **Verification nudge** — If code was edited but no passing tests/verification
218
+ was recorded, eling produces a `[System: ...]` nudge message
219
+ 4. **Recording** — Agents can call `eling_verify` MCP tool to record verification
220
+ results (`passed`, `failed`, `skipped`)
221
+
222
+ ### Usage via MCP
223
+
224
+ ```json
225
+ // Query current status
226
+ { "method": "tools/call", "params": { "name": "eling_verify", "arguments": {} } }
227
+
228
+ // Record a passing verification
229
+ { "method": "tools/call", "params": {
230
+ "name": "eling_verify",
231
+ "arguments": { "status": "passed", "command": "pytest", "output": "364 passed" }
232
+ } }
233
+ ```
234
+
235
+ ### Config
236
+
237
+ | Key | Default | Env | Description |
238
+ |-----|---------|-----|-------------|
239
+ | `verify_on_stop` | `true` | `ELING_VERIFY_ON_STOP` | Enable nudges for non-Hermes agents |
240
+ | `verify_on_stop_max_attempts` | `2` | `ELING_VERIFY_MAX_ATTEMPTS` | Max nudges per session |
241
+ | `adapter` | `hermes` | `ELING_ADAPTER` | Force adapter type |
242
+
243
+ ```yaml
244
+ plugins:
245
+ eling:
246
+ adapter: auto # auto-detect from env
247
+ verify_on_stop: true
248
+ ```
249
+
203
250
  ## 🏗️ Architecture
204
251
 
205
252
  ```
@@ -2,7 +2,7 @@
2
2
 
3
3
  # 🧠 Eling
4
4
 
5
- **Unified second brain for AI agents — 5-tier memory, HRR reasoning, 9 MCP tools**
5
+ **Unified second brain for AI agents — 5-tier memory, HRR reasoning, 10 MCP tools, conditional verify-on-stop**
6
6
 
7
7
  *"Eling" (Javanese): to remember, to be conscious, to be aware*
8
8
 
@@ -40,6 +40,7 @@ All accessible via **9 MCP tools** from a single stdio server:
40
40
  | `eling_stats` | Show per-layer statistics |
41
41
  | `eling_think` | Synthesis + gap analysis across layers |
42
42
  | `eling_export` | Full brain export as JSON or Markdown |
43
+ | `eling_verify` | Query/record verification status (conditional) |
43
44
 
44
45
  ## 🚀 Quick Start
45
46
 
@@ -174,6 +175,52 @@ print(result) # {"layer": "notion", "page_id": "...", ...}
174
175
 
175
176
  > **Note**: `eling_reflect` and `remember(layer="notion")` check availability at call time and return a clear error if any config is missing — no silent failures.
176
177
 
178
+ ## 🛡️ Verify-on-Stop (Conditional)
179
+
180
+ Eling provides **verify-on-stop** nudges for AI agents that lack built-in
181
+ verification (e.g., OpenCode, OpenClaw, Cursor, Windsurf). When running under
182
+ Hermes, this feature automatically **skips** — because Hermes already has its
183
+ own `agent/verification_stop.py`.
184
+
185
+ ### How it works
186
+
187
+ 1. **Auto-detection** — Eling detects the host agent from environment variables
188
+ (`HERMES_SESSION_SOURCE` → Hermes, `OPENCODE_HOME` → OpenCode, etc.)
189
+ 2. **File edit tracking** — When code files are edited via hooks or MCP tools,
190
+ eling records them in a verification ledger
191
+ 3. **Verification nudge** — If code was edited but no passing tests/verification
192
+ was recorded, eling produces a `[System: ...]` nudge message
193
+ 4. **Recording** — Agents can call `eling_verify` MCP tool to record verification
194
+ results (`passed`, `failed`, `skipped`)
195
+
196
+ ### Usage via MCP
197
+
198
+ ```json
199
+ // Query current status
200
+ { "method": "tools/call", "params": { "name": "eling_verify", "arguments": {} } }
201
+
202
+ // Record a passing verification
203
+ { "method": "tools/call", "params": {
204
+ "name": "eling_verify",
205
+ "arguments": { "status": "passed", "command": "pytest", "output": "364 passed" }
206
+ } }
207
+ ```
208
+
209
+ ### Config
210
+
211
+ | Key | Default | Env | Description |
212
+ |-----|---------|-----|-------------|
213
+ | `verify_on_stop` | `true` | `ELING_VERIFY_ON_STOP` | Enable nudges for non-Hermes agents |
214
+ | `verify_on_stop_max_attempts` | `2` | `ELING_VERIFY_MAX_ATTEMPTS` | Max nudges per session |
215
+ | `adapter` | `hermes` | `ELING_ADAPTER` | Force adapter type |
216
+
217
+ ```yaml
218
+ plugins:
219
+ eling:
220
+ adapter: auto # auto-detect from env
221
+ verify_on_stop: true
222
+ ```
223
+
177
224
  ## 🏗️ Architecture
178
225
 
179
226
  ```
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "eling"
7
- version = "0.2.0"
8
- description = "Unified second brain for AI agents — 5-tier memory, HRR reasoning, 9 MCP tools"
7
+ version = "0.2.2"
8
+ description = "Unified second brain for AI agents — 5-tier memory, HRR reasoning, 10 MCP tools, conditional verify-on-stop"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
11
11
  requires-python = ">=3.10"
@@ -1,16 +1,21 @@
1
1
  """Eling — unified second brain for AI agents.
2
2
 
3
3
  5-layer architecture: builtin / facts / kb / code / notion
4
+ Features: HRR reasoning, gap analysis, Notion auto-sync, verify-on-stop.
4
5
  """
5
6
 
6
- __version__ = "0.2.0"
7
- __all__ = ["Brain", "HookRegistry", "ALL_HOOKS", "register_default_hooks",
8
- "remember", "recall", "reason", "resolve_config", "set_config_key",
9
- "get_config", "describe_config"]
7
+ __version__ = "0.2.2"
8
+ __all__ = [
9
+ "Brain", "HookRegistry", "ALL_HOOKS", "register_default_hooks",
10
+ "remember", "recall", "reason", "resolve_config", "set_config_key",
11
+ "get_config", "describe_config",
12
+ "verify_on_stop", "detect_host_agent", "host_has_verify_on_stop",
13
+ ]
10
14
 
11
15
  from .brain import Brain
12
16
  from .hooks import HookRegistry, ALL_HOOKS, register_default_hooks
13
17
  from .config import resolve_config, set_config_key, get_config, describe_config
18
+ from . import verify_on_stop
14
19
 
15
20
  _default_brain: Brain | None = None
16
21