hipcortex 3.11.0__tar.gz → 3.13.0__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. {hipcortex-3.11.0 → hipcortex-3.13.0}/PKG-INFO +5 -5
  2. {hipcortex-3.11.0 → hipcortex-3.13.0}/README.md +3 -3
  3. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/__init__.py +1 -1
  4. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/cli.py +30 -1
  5. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/client.py +1 -1
  6. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/mcp_server.py +34 -3
  7. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install_hosts.py +12 -0
  8. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex.egg-info/PKG-INFO +5 -5
  9. {hipcortex-3.11.0 → hipcortex-3.13.0}/pyproject.toml +2 -2
  10. {hipcortex-3.11.0 → hipcortex-3.13.0}/setup.py +2 -2
  11. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/adapters/__init__.py +0 -0
  12. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/adapters/autogen.py +0 -0
  13. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/adapters/common.py +0 -0
  14. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/adapters/crewai.py +0 -0
  15. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/async_client.py +0 -0
  16. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/config.py +0 -0
  17. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/daemon.py +0 -0
  18. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/doctor.py +0 -0
  19. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/framework_scaffold.py +0 -0
  20. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/indexer.py +0 -0
  21. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/RUNNER_SKILL.md +0 -0
  22. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/SKILL.md +0 -0
  23. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/__init__.py +0 -0
  24. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/autogen.py.tmpl +0 -0
  25. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/crewai.py.tmpl +0 -0
  26. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/dspy.py.tmpl +0 -0
  27. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/langchain.py.tmpl +0 -0
  28. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/llamaindex.py.tmpl +0 -0
  29. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/n8n_curl.sh.tmpl +0 -0
  30. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/install/templates/pydantic_ai.py.tmpl +0 -0
  31. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/langchain_memory.py +0 -0
  32. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/llamaindex_storage.py +0 -0
  33. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/runner.py +0 -0
  34. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex/substrate.py +0 -0
  35. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex.egg-info/SOURCES.txt +0 -0
  36. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex.egg-info/dependency_links.txt +0 -0
  37. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex.egg-info/entry_points.txt +0 -0
  38. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex.egg-info/requires.txt +0 -0
  39. {hipcortex-3.11.0 → hipcortex-3.13.0}/hipcortex.egg-info/top_level.txt +0 -0
  40. {hipcortex-3.11.0 → hipcortex-3.13.0}/setup.cfg +0 -0
  41. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_adapters_common.py +0 -0
  42. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_async_client.py +0 -0
  43. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_async_langchain.py +0 -0
  44. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_can_execute.py +0 -0
  45. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_cli_install.py +0 -0
  46. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_client_config.py +0 -0
  47. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_client_v070.py +0 -0
  48. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_config.py +0 -0
  49. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_daemon.py +0 -0
  50. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_doctor.py +0 -0
  51. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_harness_with_loop.py +0 -0
  52. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_host_install_e2e.py +0 -0
  53. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_mcp_server_req.py +0 -0
  54. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_mcp_tool_surface.py +0 -0
  55. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_probe_honesty_runtime.py +0 -0
  56. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_reflect_predict.py +0 -0
  57. {hipcortex-3.11.0 → hipcortex-3.13.0}/tests/test_substrate.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hipcortex
3
- Version: 3.11.0
4
- Summary: Cognitive state substrate for AI agents — Python SDK + CLI. Universal server-side passive capture (any channel, zero client changes); ships the 61-tool / 7-resource MCP server; hard single-role runner, observation-content predicate scorer, GoalRevision→ClarifyEngine, 24h field log, WAL-persistent. LangChain, AutoGen, CrewAI, MCP
3
+ Version: 3.13.0
4
+ Summary: Cognitive state substrate for AI agents — Python SDK + CLI. Graceful shutdown + auto-backup (POST /v1/backup tars 4 data files); actor merge (merge_actor MCP tool); snapshot CLI; VSIX dedup guard; schema-compat proven; universal passive capture; 62-tool / 7-resource MCP server; WAL-persistent. LangChain, AutoGen, CrewAI, MCP
5
5
  Author: HipCortex Contributors
6
6
  License: Apache-2.0
7
7
  Project-URL: Homepage, https://github.com/farmountain/HipCortex
@@ -42,7 +42,7 @@ Requires-Dist: mem0ai>=0.1; extra == "all"
42
42
  Requires-Dist: tabulate>=0.9; extra == "all"
43
43
  Dynamic: requires-python
44
44
 
45
- # HipCortex Python SDK (`v3.11.0`)
45
+ # HipCortex Python SDK (`v3.12.0`)
46
46
 
47
47
  **Persistent causal topological memory, recursive Bayesian world-model prediction (`/worldmodel/rollout`), and automatic FSM skill compilation for autonomous AI agents.**
48
48
 
@@ -55,11 +55,11 @@ Runs against the standalone local Rust binary (`http://127.0.0.1:3030`) with `0.
55
55
  ```bash
56
56
  pip install hipcortex
57
57
  hipcortex doctor # verify server health + version after install
58
- hipcortex install # wizard: MCP hosts + copies ~/.hipcortex-mcp/server.py (61 tools)
58
+ hipcortex install # wizard: MCP hosts + copies ~/.hipcortex-mcp/server.py (62 tools)
59
59
  hipcortex channels # honesty matrix (native / mcp / framework / guide)
60
60
  ```
61
61
 
62
- **Version matrix:** product pip/Cargo/MCP `serverInfo` = **3.11.0**; VS Code VSIX = **3.11.0**. See [docs/channels.md](../../docs/channels.md).
62
+ **Version matrix:** product pip/Cargo/MCP `serverInfo` = **3.12.0**; VS Code VSIX = **3.12.0**. See [docs/channels.md](../../docs/channels.md).
63
63
 
64
64
  ---
65
65
 
@@ -1,4 +1,4 @@
1
- # HipCortex Python SDK (`v3.11.0`)
1
+ # HipCortex Python SDK (`v3.12.0`)
2
2
 
3
3
  **Persistent causal topological memory, recursive Bayesian world-model prediction (`/worldmodel/rollout`), and automatic FSM skill compilation for autonomous AI agents.**
4
4
 
@@ -11,11 +11,11 @@ Runs against the standalone local Rust binary (`http://127.0.0.1:3030`) with `0.
11
11
  ```bash
12
12
  pip install hipcortex
13
13
  hipcortex doctor # verify server health + version after install
14
- hipcortex install # wizard: MCP hosts + copies ~/.hipcortex-mcp/server.py (61 tools)
14
+ hipcortex install # wizard: MCP hosts + copies ~/.hipcortex-mcp/server.py (62 tools)
15
15
  hipcortex channels # honesty matrix (native / mcp / framework / guide)
16
16
  ```
17
17
 
18
- **Version matrix:** product pip/Cargo/MCP `serverInfo` = **3.11.0**; VS Code VSIX = **3.11.0**. See [docs/channels.md](../../docs/channels.md).
18
+ **Version matrix:** product pip/Cargo/MCP `serverInfo` = **3.12.0**; VS Code VSIX = **3.12.0**. See [docs/channels.md](../../docs/channels.md).
19
19
 
20
20
  ---
21
21
 
@@ -6,7 +6,7 @@ from .langchain_memory import HipCortexMemory, AsyncHipCortexMemory
6
6
  from .llamaindex_storage import HipCortexStorageContext
7
7
  from .substrate import HipCortexSubstrate
8
8
 
9
- __version__ = "3.11.0"
9
+ __version__ = "3.13.0"
10
10
  __all__ = [
11
11
  "HipCortexClient",
12
12
  "AsyncHipCortexClient",
@@ -1335,6 +1335,29 @@ def cmd_restore(args: argparse.Namespace) -> None:
1335
1335
  __import__('sys').exit(1)
1336
1336
 
1337
1337
 
1338
+ def cmd_snapshot(args: argparse.Namespace) -> None:
1339
+ """Trigger server-side full data-directory backup (tar.gz)."""
1340
+ import json, urllib.request, urllib.error
1341
+ url = (getattr(args, "url", None) or os.environ.get("HIPCORTEX_URL", DEFAULT_URL)).rstrip("/")
1342
+ req = urllib.request.Request(
1343
+ f"{url}/v1/backup",
1344
+ data=b"{}",
1345
+ headers={"Content-Type": "application/json"},
1346
+ method="POST",
1347
+ )
1348
+ try:
1349
+ with urllib.request.urlopen(req, timeout=30) as r:
1350
+ result = json.loads(r.read().decode("utf-8"))
1351
+ if result.get("ok"):
1352
+ print(f"✓ Snapshot created: {result.get('path', '(server did not return path)')}")
1353
+ else:
1354
+ print(f"✗ Snapshot failed: {result.get('error', 'unknown')}", file=__import__('sys').stderr)
1355
+ __import__('sys').exit(1)
1356
+ except Exception as e:
1357
+ print(f"✗ Snapshot failed: {e}", file=__import__('sys').stderr)
1358
+ __import__('sys').exit(1)
1359
+
1360
+
1338
1361
  def _channels_yaml_candidates() -> list[Path]:
1339
1362
  """Resolve docs/channels.yaml from repo checkout or CWD."""
1340
1363
  here = Path(__file__).resolve()
@@ -1380,7 +1403,7 @@ def _fallback_channels() -> list[dict]:
1380
1403
  {"id": "claude-code", "name": "Claude Code", "status": "native", "install": "hipcortex install"},
1381
1404
  {"id": "cursor", "name": "Cursor", "status": "mcp", "install": "hipcortex install"},
1382
1405
  {"id": "windsurf", "name": "Windsurf", "status": "mcp", "install": "hipcortex install"},
1383
- {"id": "vscode-extension", "name": "VS Code VSIX", "status": "native", "install": "hipcortex-memory-3.11.0.vsix"},
1406
+ {"id": "vscode-extension", "name": "VS Code VSIX", "status": "native", "install": "hipcortex-memory-3.12.0.vsix"},
1384
1407
  {"id": "vscode-mcp", "name": "VS Code MCP", "status": "mcp", "install": "hipcortex install"},
1385
1408
  {"id": "cline", "name": "Cline", "status": "mcp", "install": "hipcortex install"},
1386
1409
  {"id": "roocode", "name": "RooCode", "status": "mcp", "install": "hipcortex install"},
@@ -1597,6 +1620,10 @@ def build_parser() -> argparse.ArgumentParser:
1597
1620
  p_restore.add_argument("file", help="Backup file path (.json)")
1598
1621
  p_restore.add_argument("--url", help="Server URL")
1599
1622
 
1623
+ # snapshot
1624
+ p_snapshot = sub.add_parser("snapshot", help="Trigger server-side data directory backup (tar.gz)")
1625
+ p_snapshot.add_argument("--url", help="Server URL")
1626
+
1600
1627
  # index
1601
1628
  p_index = sub.add_parser("index", help="Index a codebase into the HipCortex knowledge graph")
1602
1629
  p_index.add_argument("path", nargs="?", default=".", help="Directory or file to index (default: current dir)")
@@ -1666,6 +1693,8 @@ def main() -> None:
1666
1693
  cmd_backup(args)
1667
1694
  elif args.command == "restore":
1668
1695
  cmd_restore(args)
1696
+ elif args.command == "snapshot":
1697
+ cmd_snapshot(args)
1669
1698
  elif args.command == "index":
1670
1699
  cmd_index(args)
1671
1700
  elif args.command == "channels":
@@ -10,7 +10,7 @@ import requests
10
10
 
11
11
 
12
12
  class HipCortexClient:
13
- VERSION = "3.11.0"
13
+ VERSION = "3.12.0"
14
14
 
15
15
  """Synchronous HTTP client for the HipCortex memory server.
16
16
 
@@ -33,7 +33,7 @@ import requests
33
33
 
34
34
  HIPCORTEX_URL = os.getenv("HIPCORTEX_URL", "http://localhost:3030").rstrip("/")
35
35
  API_KEY = os.getenv("HIPCORTEX_API_KEY", "")
36
- TIMEOUT = int(os.getenv("HIPCORTEX_TIMEOUT", "10"))
36
+ TIMEOUT = int(os.getenv("HIPCORTEX_TIMEOUT", "30"))
37
37
 
38
38
  # Session harness state (one MCP process lifetime). Soft substrate-first nudge:
39
39
  # prefer get_live_beliefs / reflect before search_memory. Never hard-blocks.
@@ -233,6 +233,22 @@ TOOLS = [
233
233
  },
234
234
  },
235
235
  },
236
+ {
237
+ "name": "merge_actor",
238
+ "description": (
239
+ "Move all memory records from one actor to another (MOVE semantics: "
240
+ "source actor records are deleted after being re-assigned to target). "
241
+ "Use to consolidate two agent identities or rename an actor."
242
+ ),
243
+ "inputSchema": {
244
+ "type": "object",
245
+ "required": ["source", "target"],
246
+ "properties": {
247
+ "source": {"type": "string", "description": "Actor whose records to move away from"},
248
+ "target": {"type": "string", "description": "Actor to receive the moved records"},
249
+ },
250
+ },
251
+ },
236
252
  {
237
253
  "name": "get_stats",
238
254
  "description": "Get memory store statistics: total records, types, unique actors.",
@@ -1043,7 +1059,14 @@ def handle_add_memory(args: dict) -> str:
1043
1059
  body["record_type"] = args["record_type"]
1044
1060
  if "ttl_seconds" in args:
1045
1061
  body["ttl_seconds"] = args["ttl_seconds"]
1046
- result = _post("/memory/add", body)
1062
+ result = _req("POST", "/memory/add", body)
1063
+ if "error" in result:
1064
+ detail_str = result.get("detail", "")
1065
+ try:
1066
+ reason = json.loads(detail_str).get("error") or detail_str
1067
+ except Exception:
1068
+ reason = detail_str or result["error"]
1069
+ return f"✗ Memory refused (HTTP {result.get('status', '?')}): {reason}"
1047
1070
  return f"✓ Memory stored (id: {result.get('record_id', 'unknown')})\n [{args['action']}] {args['target']}"
1048
1071
 
1049
1072
 
@@ -1428,6 +1451,13 @@ def handle_forget_actor(args: dict) -> str:
1428
1451
  delta = {"type": "ForgetActor", "actor": actor}
1429
1452
  return json.dumps(_post("/v1/cognitive/transact", {"delta": delta, "actor": "mcp"}))
1430
1453
 
1454
+ def handle_merge_actor(args: dict) -> str:
1455
+ source = args.get("source", "").strip()
1456
+ target = args.get("target", "").strip()
1457
+ if not source or not target:
1458
+ raise ValueError("merge_actor requires 'source' and 'target'")
1459
+ return json.dumps(_post("/v1/actor/merge", {"source": source, "target": target}))
1460
+
1431
1461
  def handle_archive_record(args: dict) -> str:
1432
1462
  delta = {"type": "ArchiveRecord", "id": args["id"]}
1433
1463
  return json.dumps(_post("/v1/cognitive/transact", {"delta": delta, "actor": "mcp"}))
@@ -1777,6 +1807,7 @@ def dispatch_tool(name: str, args: dict) -> str:
1777
1807
  "add_memory": handle_add_memory,
1778
1808
  "search_memory": handle_search_memory,
1779
1809
  "forget_actor": handle_forget_actor,
1810
+ "merge_actor": handle_merge_actor,
1780
1811
  "get_stats": handle_get_stats,
1781
1812
  "search_code": handle_search_code,
1782
1813
  "link_memories": handle_link_memories,
@@ -1960,7 +1991,7 @@ def main() -> None:
1960
1991
  respond(id_, {
1961
1992
  "protocolVersion": "2024-11-05",
1962
1993
  "capabilities": {"tools": {}, "resources": {}},
1963
- "serverInfo": {"name": "hipcortex", "version": "3.11.0"},
1994
+ "serverInfo": {"name": "hipcortex", "version": "3.13.0"},
1964
1995
  })
1965
1996
  elif method == "initialized":
1966
1997
  pass # notification — no response
@@ -77,6 +77,16 @@ def _desired_mcp_entry(server_url: str) -> dict:
77
77
  }
78
78
 
79
79
 
80
+ def _is_vsix_managed_entry(entry: object) -> bool:
81
+ """True if entry was written by the VS Code extension (args[0] ends in launcher.py)."""
82
+ if not isinstance(entry, dict):
83
+ return False
84
+ args = entry.get("args")
85
+ if not isinstance(args, list) or not args:
86
+ return False
87
+ return str(args[0]).endswith("launcher.py")
88
+
89
+
80
90
  def _atomic_write_text(path: Path, content: str) -> None:
81
91
  """Write text via temp file + os.replace (same-dir atomic swap)."""
82
92
  path.parent.mkdir(parents=True, exist_ok=True)
@@ -134,6 +144,8 @@ def _write_mcp_servers(mcp_path: Path, server_url: str) -> str:
134
144
  prev = mcp_servers.get("hipcortex")
135
145
  if prev == entry:
136
146
  return INSTALL_UNCHANGED
147
+ if _is_vsix_managed_entry(prev):
148
+ return INSTALL_UNCHANGED
137
149
 
138
150
  had_entry = prev is not None
139
151
  mcp_servers["hipcortex"] = entry
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hipcortex
3
- Version: 3.11.0
4
- Summary: Cognitive state substrate for AI agents — Python SDK + CLI. Universal server-side passive capture (any channel, zero client changes); ships the 61-tool / 7-resource MCP server; hard single-role runner, observation-content predicate scorer, GoalRevision→ClarifyEngine, 24h field log, WAL-persistent. LangChain, AutoGen, CrewAI, MCP
3
+ Version: 3.13.0
4
+ Summary: Cognitive state substrate for AI agents — Python SDK + CLI. Graceful shutdown + auto-backup (POST /v1/backup tars 4 data files); actor merge (merge_actor MCP tool); snapshot CLI; VSIX dedup guard; schema-compat proven; universal passive capture; 62-tool / 7-resource MCP server; WAL-persistent. LangChain, AutoGen, CrewAI, MCP
5
5
  Author: HipCortex Contributors
6
6
  License: Apache-2.0
7
7
  Project-URL: Homepage, https://github.com/farmountain/HipCortex
@@ -42,7 +42,7 @@ Requires-Dist: mem0ai>=0.1; extra == "all"
42
42
  Requires-Dist: tabulate>=0.9; extra == "all"
43
43
  Dynamic: requires-python
44
44
 
45
- # HipCortex Python SDK (`v3.11.0`)
45
+ # HipCortex Python SDK (`v3.12.0`)
46
46
 
47
47
  **Persistent causal topological memory, recursive Bayesian world-model prediction (`/worldmodel/rollout`), and automatic FSM skill compilation for autonomous AI agents.**
48
48
 
@@ -55,11 +55,11 @@ Runs against the standalone local Rust binary (`http://127.0.0.1:3030`) with `0.
55
55
  ```bash
56
56
  pip install hipcortex
57
57
  hipcortex doctor # verify server health + version after install
58
- hipcortex install # wizard: MCP hosts + copies ~/.hipcortex-mcp/server.py (61 tools)
58
+ hipcortex install # wizard: MCP hosts + copies ~/.hipcortex-mcp/server.py (62 tools)
59
59
  hipcortex channels # honesty matrix (native / mcp / framework / guide)
60
60
  ```
61
61
 
62
- **Version matrix:** product pip/Cargo/MCP `serverInfo` = **3.11.0**; VS Code VSIX = **3.11.0**. See [docs/channels.md](../../docs/channels.md).
62
+ **Version matrix:** product pip/Cargo/MCP `serverInfo` = **3.12.0**; VS Code VSIX = **3.12.0**. See [docs/channels.md](../../docs/channels.md).
63
63
 
64
64
  ---
65
65
 
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hipcortex"
7
- version = "3.11.0"
8
- description = "Cognitive state substrate for AI agents — Python SDK + CLI. Universal server-side passive capture (any channel, zero client changes); ships the 61-tool / 7-resource MCP server; hard single-role runner, observation-content predicate scorer, GoalRevision→ClarifyEngine, 24h field log, WAL-persistent. LangChain, AutoGen, CrewAI, MCP"
7
+ version = "3.13.0"
8
+ description = "Cognitive state substrate for AI agents — Python SDK + CLI. Graceful shutdown + auto-backup (POST /v1/backup tars 4 data files); actor merge (merge_actor MCP tool); snapshot CLI; VSIX dedup guard; schema-compat proven; universal passive capture; 62-tool / 7-resource MCP server; WAL-persistent. LangChain, AutoGen, CrewAI, MCP"
9
9
  readme = "README.md"
10
10
  license = {text = "Apache-2.0"}
11
11
  requires-python = ">=3.9"
@@ -2,8 +2,8 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="hipcortex",
5
- version="3.11.0",
6
- description="Cognitive state substrate for AI agents — Python SDK + CLI (universal server-side passive capture, 61-tool / 7-resource MCP server, WAL-persistent, MCP + REST)",
5
+ version="3.12.0",
6
+ description="Cognitive state substrate for AI agents — Python SDK + CLI (universal server-side passive capture, 62-tool / 7-resource MCP server, WAL-persistent, MCP + REST)",
7
7
  # No long_description here: PEP 621 metadata in pyproject.toml supplies readme = "README.md",
8
8
  # and declaring it in both places is a duplicate-metadata error. This used to be a dead
9
9
  # expression (open(...).read() if False else "") that read as if it did something.
File without changes