memstack-skill-loader 3.5.3__tar.gz → 4.0.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 (32) hide show
  1. {memstack_skill_loader-3.5.3/src/memstack_skill_loader.egg-info → memstack_skill_loader-4.0.0}/PKG-INFO +1 -1
  2. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/README.md +15 -2
  3. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/pyproject.toml +1 -1
  4. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/__init__.py +2 -0
  5. memstack_skill_loader-4.0.0/src/memstack_skill_loader/__main__.py +90 -0
  6. memstack_skill_loader-4.0.0/src/memstack_skill_loader/agent_runner.py +808 -0
  7. memstack_skill_loader-4.0.0/src/memstack_skill_loader/categories.py +67 -0
  8. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/compression.py +1 -0
  9. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/config.py +4 -1
  10. memstack_skill_loader-4.0.0/src/memstack_skill_loader/dashboard.html +3752 -0
  11. memstack_skill_loader-4.0.0/src/memstack_skill_loader/dashboard.py +1194 -0
  12. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/license.py +2 -1
  13. memstack_skill_loader-4.0.0/src/memstack_skill_loader/memory_db.py +536 -0
  14. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/search.py +1 -0
  15. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/server.py +501 -173
  16. memstack_skill_loader-4.0.0/src/memstack_skill_loader/skill_config.py +186 -0
  17. memstack_skill_loader-4.0.0/src/memstack_skill_loader/stats.py +925 -0
  18. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/tfidf_search.py +1 -0
  19. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/version_check.py +1 -0
  20. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0/src/memstack_skill_loader.egg-info}/PKG-INFO +1 -1
  21. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader.egg-info/SOURCES.txt +4 -0
  22. memstack_skill_loader-3.5.3/src/memstack_skill_loader/__main__.py +0 -18
  23. memstack_skill_loader-3.5.3/src/memstack_skill_loader/dashboard.html +0 -829
  24. memstack_skill_loader-3.5.3/src/memstack_skill_loader/dashboard.py +0 -360
  25. memstack_skill_loader-3.5.3/src/memstack_skill_loader/stats.py +0 -428
  26. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/MANIFEST.in +0 -0
  27. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/setup.cfg +0 -0
  28. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader/indexer.py +0 -0
  29. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader.egg-info/dependency_links.txt +0 -0
  30. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader.egg-info/entry_points.txt +0 -0
  31. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader.egg-info/requires.txt +0 -0
  32. {memstack_skill_loader-3.5.3 → memstack_skill_loader-4.0.0}/src/memstack_skill_loader.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: memstack-skill-loader
3
- Version: 3.5.3
3
+ Version: 4.0.0
4
4
  Summary: MCP server that vector-indexes MemStack Pro skills for on-demand loading
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: mcp>=1.0.0
@@ -1,6 +1,6 @@
1
1
  # MemStack™ Skill Loader
2
2
 
3
- **114 skills for Claude Code** — 85 free + 29 Pro exclusive. Vector-indexed so CC loads only the skill it needs, saving your context window.
3
+ **127 skills for Claude Code** — 85 free + 42 Pro exclusive. Vector-indexed so CC loads only the skill it needs, saving your context window.
4
4
 
5
5
  ## Quick Start (5 minutes)
6
6
 
@@ -27,7 +27,7 @@
27
27
 
28
28
  ## How It Works
29
29
 
30
- MCP server that vector-indexes all 114 MemStack™ skills so Claude Code can call `find_skill("deploy to Railway")` and load **only** the relevant skill on demand — instead of all skills consuming context window.
30
+ MCP server that vector-indexes all 127 MemStack™ skills so Claude Code can call `find_skill("deploy to Railway")` and load **only** the relevant skill on demand — instead of all skills consuming context window.
31
31
 
32
32
  - **No API keys required** — everything runs locally
33
33
  - **Pro skills auto-detected** — set your license key and they appear automatically
@@ -128,6 +128,19 @@ The `pattern` field controls how skills are discovered:
128
128
 
129
129
  ## Release Notes
130
130
 
131
+ ### v4.0.0 (May 2026)
132
+
133
+ - Dashboard: 6-page localhost dashboard (Overview, Skills Manager, Burn Report, Memory Browser, Agent Monitor, Settings)
134
+ - Agent Runner: 3-agent orchestration (Manager/Builder/Reviewer) with per-agent model selection
135
+ - 17 MCP tools
136
+ - 127 skills (85 free + 42 Pro)
137
+ - Real-time context window monitoring per agent
138
+ - Session diary with AI-authored markdown narratives
139
+ - Safe git staging (prevents accidental commits of secrets/runtime data)
140
+ - Task completion notifications (browser, tab flash, audio)
141
+ - Token usage tracking with estimated costs
142
+ - Headroom proxy integration (~35-40% token savings)
143
+
131
144
  **[v3.4.0](https://github.com/cwinvestments/memstack-skill-loader/releases/tag/v3.4.0)** — 100 Skills Milestone (18 new Pro skills, auto-detection, display name fixes)
132
145
 
133
146
  ## License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "memstack-skill-loader"
7
- version = "3.5.3"
7
+ version = "4.0.0"
8
8
  description = "MCP server that vector-indexes MemStack Pro skills for on-demand loading"
9
9
  requires-python = ">=3.10"
10
10
  dependencies = [
@@ -1 +1,3 @@
1
1
  """MemStack Skill Loader — MCP server for semantic skill search."""
2
+
3
+ __version__ = "4.0.0"
@@ -0,0 +1,90 @@
1
+ """Entry point for python -m memstack_skill_loader."""
2
+
3
+ import asyncio
4
+ import sys
5
+ import time
6
+
7
+ from .server import run
8
+
9
+
10
+ def _run_agents(task: str) -> None:
11
+ """Start agent runner and print live message log until done."""
12
+ from . import agent_runner
13
+
14
+ print(f"\033[1;36m{'='*60}\033[0m")
15
+ print(f"\033[1;36m Agent Runner — Task Orchestration\033[0m")
16
+ print(f"\033[1;36m{'='*60}\033[0m")
17
+ print(f"\n Task: {task}")
18
+ print(f" Working dir: {sys.argv[3] if len(sys.argv) > 3 else '.'}")
19
+ print(f"\n Press Ctrl+C to stop all agents.\n")
20
+
21
+ working_dir = sys.argv[3] if len(sys.argv) > 3 else None
22
+ result = agent_runner.start_run(task=task, working_dir=working_dir)
23
+
24
+ if "error" in result:
25
+ print(f"\033[31mError: {result['error']}\033[0m", file=sys.stderr)
26
+ sys.exit(1)
27
+
28
+ print(f" Session: {result['session_id']}\n")
29
+ print(f"\033[90m{'─'*60}\033[0m")
30
+
31
+ seen_messages = 0
32
+ try:
33
+ while True:
34
+ time.sleep(2)
35
+ status = agent_runner.get_status()
36
+
37
+ # Print new messages
38
+ messages = status.get("messages", [])
39
+ for msg in messages[seen_messages:]:
40
+ from_name = msg.get("from", "?")
41
+ to_name = msg.get("to", "?")
42
+ content = msg.get("content", "")[:200]
43
+ ts = msg.get("timestamp", "")
44
+
45
+ color = "\033[35m" if from_name == "manager" else \
46
+ "\033[36m" if from_name == "builder" else \
47
+ "\033[32m" if from_name == "reviewer" else "\033[90m"
48
+
49
+ print(f" {color}{from_name}\033[0m → \033[37m{to_name}\033[0m")
50
+ for line in content.split("\n")[:5]:
51
+ print(f" {line}")
52
+ print()
53
+
54
+ seen_messages = len(messages)
55
+
56
+ # Check if done
57
+ session_status = status.get("status", "")
58
+ if session_status in ("completed", "error", "stopped"):
59
+ print(f"\033[90m{'─'*60}\033[0m")
60
+ color = "\033[32m" if session_status == "completed" else "\033[31m"
61
+ print(f"\n {color}Status: {session_status}\033[0m")
62
+ result_text = status.get("result", "")
63
+ if result_text:
64
+ print(f" {result_text[:300]}")
65
+ print()
66
+ break
67
+
68
+ except KeyboardInterrupt:
69
+ print("\n\n Stopping agents...")
70
+ agent_runner.stop_all()
71
+ print(" All agents stopped.")
72
+
73
+
74
+ def main():
75
+ if len(sys.argv) > 1 and sys.argv[1] == "dashboard":
76
+ from .dashboard import start_dashboard
77
+ start_dashboard()
78
+ elif len(sys.argv) > 2 and sys.argv[1] == "run":
79
+ task = " ".join(sys.argv[2:])
80
+ _run_agents(task)
81
+ elif len(sys.argv) > 1 and sys.argv[1] == "run":
82
+ print("Usage: python -m memstack_skill_loader run \"Your task description\"",
83
+ file=sys.stderr)
84
+ sys.exit(1)
85
+ else:
86
+ asyncio.run(run())
87
+
88
+
89
+ if __name__ == "__main__":
90
+ main()