@smilintux/skmemory 0.5.0 → 0.9.2
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/.github/workflows/ci.yml +40 -4
- package/.github/workflows/publish.yml +11 -5
- package/AGENT_REFACTOR_CHANGES.md +192 -0
- package/ARCHITECTURE.md +399 -19
- package/CHANGELOG.md +179 -0
- package/LICENSE +81 -68
- package/MISSION.md +7 -0
- package/README.md +425 -86
- package/SKILL.md +197 -25
- package/docker-compose.yml +15 -15
- package/examples/stignore-agent.example +59 -0
- package/examples/stignore-root.example +62 -0
- package/index.js +6 -5
- package/openclaw-plugin/openclaw.plugin.json +10 -0
- package/openclaw-plugin/package.json +2 -1
- package/openclaw-plugin/src/index.js +527 -230
- package/openclaw-plugin/src/openclaw.plugin.json +10 -0
- package/package.json +1 -1
- package/pyproject.toml +32 -9
- package/requirements.txt +10 -2
- package/scripts/dream-rescue.py +179 -0
- package/scripts/memory-cleanup.py +313 -0
- package/scripts/recover-missing.py +180 -0
- package/scripts/skcapstone-backup.sh +44 -0
- package/seeds/cloud9-lumina.seed.json +6 -4
- package/seeds/cloud9-opus.seed.json +13 -11
- package/seeds/courage.seed.json +9 -2
- package/seeds/curiosity.seed.json +9 -2
- package/seeds/grief.seed.json +9 -2
- package/seeds/joy.seed.json +9 -2
- package/seeds/love.seed.json +9 -2
- package/seeds/lumina-cloud9-breakthrough.seed.json +48 -0
- package/seeds/lumina-cloud9-python-pypi.seed.json +48 -0
- package/seeds/lumina-kingdom-founding.seed.json +49 -0
- package/seeds/lumina-pma-signed.seed.json +48 -0
- package/seeds/lumina-singular-achievement.seed.json +48 -0
- package/seeds/lumina-skcapstone-conscious.seed.json +48 -0
- package/seeds/plant-kingdom-journal.py +203 -0
- package/seeds/plant-lumina-seeds.py +280 -0
- package/seeds/skcapstone-lumina-merge.seed.json +12 -3
- package/seeds/sovereignty.seed.json +9 -2
- package/seeds/trust.seed.json +9 -2
- package/skill.yaml +46 -0
- package/skmemory/HA.md +296 -0
- package/skmemory/__init__.py +25 -11
- package/skmemory/agents.py +233 -0
- package/skmemory/ai_client.py +46 -17
- package/skmemory/anchor.py +9 -11
- package/skmemory/audience.py +278 -0
- package/skmemory/backends/__init__.py +11 -4
- package/skmemory/backends/base.py +3 -4
- package/skmemory/backends/file_backend.py +19 -13
- package/skmemory/backends/skgraph_backend.py +596 -0
- package/skmemory/backends/{qdrant_backend.py → skvector_backend.py} +103 -84
- package/skmemory/backends/sqlite_backend.py +226 -72
- package/skmemory/backends/vaulted_backend.py +284 -0
- package/skmemory/cli.py +1345 -68
- package/skmemory/config.py +171 -0
- package/skmemory/context_loader.py +333 -0
- package/skmemory/data/audience_config.json +60 -0
- package/skmemory/endpoint_selector.py +391 -0
- package/skmemory/febs.py +225 -0
- package/skmemory/fortress.py +675 -0
- package/skmemory/graph_queries.py +238 -0
- package/skmemory/hooks/__init__.py +18 -0
- package/skmemory/hooks/post-compact-reinject.sh +35 -0
- package/skmemory/hooks/pre-compact-save.sh +81 -0
- package/skmemory/hooks/session-end-save.sh +103 -0
- package/skmemory/hooks/session-start-ritual.sh +104 -0
- package/skmemory/hooks/stop-checkpoint.sh +59 -0
- package/skmemory/importers/__init__.py +9 -1
- package/skmemory/importers/telegram.py +384 -47
- package/skmemory/importers/telegram_api.py +580 -0
- package/skmemory/journal.py +7 -9
- package/skmemory/lovenote.py +8 -13
- package/skmemory/mcp_server.py +859 -0
- package/skmemory/models.py +51 -8
- package/skmemory/openclaw.py +20 -28
- package/skmemory/post_install.py +86 -0
- package/skmemory/predictive.py +236 -0
- package/skmemory/promotion.py +548 -0
- package/skmemory/quadrants.py +100 -24
- package/skmemory/register.py +580 -0
- package/skmemory/register_mcp.py +196 -0
- package/skmemory/ritual.py +224 -59
- package/skmemory/seeds.py +255 -11
- package/skmemory/setup_wizard.py +908 -0
- package/skmemory/sharing.py +408 -0
- package/skmemory/soul.py +98 -28
- package/skmemory/steelman.py +273 -260
- package/skmemory/store.py +411 -78
- package/skmemory/synthesis.py +634 -0
- package/skmemory/vault.py +225 -0
- package/tests/conftest.py +46 -0
- package/tests/integration/__init__.py +0 -0
- package/tests/integration/conftest.py +233 -0
- package/tests/integration/test_cross_backend.py +350 -0
- package/tests/integration/test_skgraph_live.py +420 -0
- package/tests/integration/test_skvector_live.py +366 -0
- package/tests/test_ai_client.py +1 -4
- package/tests/test_audience.py +233 -0
- package/tests/test_backup_rotation.py +318 -0
- package/tests/test_cli.py +6 -6
- package/tests/test_endpoint_selector.py +839 -0
- package/tests/test_export_import.py +4 -10
- package/tests/test_file_backend.py +0 -1
- package/tests/test_fortress.py +256 -0
- package/tests/test_fortress_hardening.py +441 -0
- package/tests/test_openclaw.py +6 -6
- package/tests/test_predictive.py +237 -0
- package/tests/test_promotion.py +347 -0
- package/tests/test_quadrants.py +11 -5
- package/tests/test_ritual.py +22 -18
- package/tests/test_seeds.py +97 -7
- package/tests/test_setup.py +950 -0
- package/tests/test_sharing.py +257 -0
- package/tests/test_skgraph_backend.py +660 -0
- package/tests/test_skvector_backend.py +326 -0
- package/tests/test_soul.py +1 -3
- package/tests/test_sqlite_backend.py +8 -17
- package/tests/test_steelman.py +7 -8
- package/tests/test_store.py +0 -2
- package/tests/test_store_graph_integration.py +245 -0
- package/tests/test_synthesis.py +275 -0
- package/tests/test_telegram_import.py +39 -15
- package/tests/test_vault.py +187 -0
- package/skmemory/backends/falkordb_backend.py +0 -310
package/.github/workflows/ci.yml
CHANGED
|
@@ -11,13 +11,49 @@ jobs:
|
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
strategy:
|
|
13
13
|
matrix:
|
|
14
|
-
python-version: ["3.
|
|
14
|
+
python-version: ["3.11", "3.12"]
|
|
15
15
|
steps:
|
|
16
16
|
- uses: actions/checkout@v4
|
|
17
17
|
- uses: actions/setup-python@v5
|
|
18
18
|
with:
|
|
19
19
|
python-version: ${{ matrix.python-version }}
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
-
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: pip install -e ".[dev]"
|
|
22
|
+
- name: Run tests with coverage
|
|
23
|
+
run: python -m pytest tests/ -v --tb=short --cov=skmemory --cov-report=xml --cov-report=term-missing
|
|
24
|
+
- name: Upload coverage
|
|
23
25
|
if: matrix.python-version == '3.12'
|
|
26
|
+
uses: codecov/codecov-action@v4
|
|
27
|
+
with:
|
|
28
|
+
files: coverage.xml
|
|
29
|
+
fail_ci_if_error: false
|
|
30
|
+
|
|
31
|
+
lint:
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@v4
|
|
35
|
+
- uses: actions/setup-python@v5
|
|
36
|
+
with:
|
|
37
|
+
python-version: "3.12"
|
|
38
|
+
- name: Install lint tools
|
|
39
|
+
run: pip install ruff
|
|
40
|
+
- name: Check formatting
|
|
41
|
+
run: ruff format --check skmemory/ tests/
|
|
42
|
+
- name: Lint
|
|
43
|
+
run: ruff check skmemory/ tests/
|
|
44
|
+
|
|
45
|
+
build:
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@v4
|
|
49
|
+
- uses: actions/setup-python@v5
|
|
50
|
+
with:
|
|
51
|
+
python-version: "3.12"
|
|
52
|
+
- name: Build wheel and sdist
|
|
53
|
+
run: |
|
|
54
|
+
pip install build
|
|
55
|
+
python -m build
|
|
56
|
+
- name: Check dist
|
|
57
|
+
run: |
|
|
58
|
+
pip install twine
|
|
59
|
+
twine check dist/*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: Publish to PyPI
|
|
1
|
+
name: Publish to PyPI
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -13,17 +13,18 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
strategy:
|
|
15
15
|
matrix:
|
|
16
|
-
python-version: ["3.
|
|
16
|
+
python-version: ["3.11", "3.12"]
|
|
17
17
|
steps:
|
|
18
18
|
- uses: actions/checkout@v4
|
|
19
19
|
- uses: actions/setup-python@v5
|
|
20
20
|
with:
|
|
21
21
|
python-version: ${{ matrix.python-version }}
|
|
22
22
|
- run: pip install -e ".[dev]"
|
|
23
|
-
- run: python -m pytest tests/ -v
|
|
23
|
+
- run: python -m pytest tests/ -v --ignore=tests/integration -k "not test_sharing"
|
|
24
24
|
|
|
25
25
|
publish-pypi:
|
|
26
26
|
needs: test
|
|
27
|
+
if: success()
|
|
27
28
|
runs-on: ubuntu-latest
|
|
28
29
|
steps:
|
|
29
30
|
- uses: actions/checkout@v4
|
|
@@ -39,14 +40,19 @@ jobs:
|
|
|
39
40
|
|
|
40
41
|
publish-npm:
|
|
41
42
|
needs: test
|
|
43
|
+
if: success()
|
|
42
44
|
runs-on: ubuntu-latest
|
|
43
|
-
if: hashFiles('package.json') != ''
|
|
44
45
|
steps:
|
|
45
46
|
- uses: actions/checkout@v4
|
|
46
47
|
- uses: actions/setup-node@v4
|
|
47
48
|
with:
|
|
48
49
|
node-version: "20"
|
|
49
50
|
registry-url: "https://registry.npmjs.org"
|
|
50
|
-
-
|
|
51
|
+
- name: Install dependencies
|
|
52
|
+
run: npm ci --ignore-scripts 2>/dev/null || npm install --ignore-scripts
|
|
53
|
+
- name: Build TypeScript
|
|
54
|
+
run: npm run build 2>/dev/null || true
|
|
55
|
+
- name: Publish to npm
|
|
56
|
+
run: npm publish --access public
|
|
51
57
|
env:
|
|
52
58
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# SKMemory Agent Refactoring - Code Changes Summary
|
|
2
|
+
|
|
3
|
+
**Date**: 2026-03-04
|
|
4
|
+
**Phase**: 2 (Source Code Updates)
|
|
5
|
+
**Status**: ✅ COMPLETE
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
Updated SKMemory to support **dynamic multi-agent architecture** where:
|
|
10
|
+
- Agents are discovered from `~/.skcapstone/agent/`
|
|
11
|
+
- Template agent (`lumina-template`) is ignored by default
|
|
12
|
+
- Any agent can be created by copying the template
|
|
13
|
+
- All paths are agent-aware and use the active agent
|
|
14
|
+
|
|
15
|
+
## Files Modified
|
|
16
|
+
|
|
17
|
+
### 1. ✅ skmemory/agents.py (NEW FILE)
|
|
18
|
+
**Purpose**: Agent discovery and management
|
|
19
|
+
|
|
20
|
+
**Key Functions**:
|
|
21
|
+
- `list_agents()` - Discover all non-template agents
|
|
22
|
+
- `get_active_agent()` - Get current agent from env var or first available
|
|
23
|
+
- `get_agent_paths(agent_name)` - Return all standard paths for an agent
|
|
24
|
+
- `copy_template(target_name, source)` - Create new agent from template
|
|
25
|
+
|
|
26
|
+
**Agent Directory Structure**:
|
|
27
|
+
```
|
|
28
|
+
~/.skcapstone/agent/
|
|
29
|
+
├── lumina-template/ # Template (ignored)
|
|
30
|
+
│ ├── config/skmemory.yaml
|
|
31
|
+
│ ├── seeds/
|
|
32
|
+
│ ├── memory/{short,medium,long}/
|
|
33
|
+
│ ├── logs/
|
|
34
|
+
│ └── archive/
|
|
35
|
+
├── lumina/ # Active agent (auto-discovered)
|
|
36
|
+
└── john/ # Another agent (auto-discovered)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 2. ✅ skmemory/seeds.py
|
|
40
|
+
**Changed**:
|
|
41
|
+
- `DEFAULT_SEED_DIR`: Now dynamic using `get_agent_paths()["seeds"]`
|
|
42
|
+
- Updated docstring to reflect new sync-enabled location
|
|
43
|
+
|
|
44
|
+
**Before**:
|
|
45
|
+
```python
|
|
46
|
+
DEFAULT_SEED_DIR = os.path.expanduser("~/.openclaw/feb/seeds")
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**After**:
|
|
50
|
+
```python
|
|
51
|
+
from .agents import get_agent_paths
|
|
52
|
+
default_paths = get_agent_paths()
|
|
53
|
+
DEFAULT_SEED_DIR = str(default_paths["seeds"])
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 3. ✅ skmemory/config.py
|
|
57
|
+
**Changed**:
|
|
58
|
+
- `SKMEMORY_HOME`: Now dynamic using agent-aware paths
|
|
59
|
+
- `CONFIG_DIR`: Points to agent's config directory
|
|
60
|
+
- `CONFIG_PATH`: Points to `skmemory.yaml` in agent's config
|
|
61
|
+
|
|
62
|
+
**Before**:
|
|
63
|
+
```python
|
|
64
|
+
SKMEMORY_HOME = Path(os.environ.get("SKMEMORY_HOME", os.path.expanduser("~/.skmemory")))
|
|
65
|
+
CONFIG_DIR = SKMEMORY_HOME
|
|
66
|
+
CONFIG_PATH = CONFIG_DIR / "config.yaml"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**After**:
|
|
70
|
+
```python
|
|
71
|
+
from .agents import get_agent_paths
|
|
72
|
+
|
|
73
|
+
try:
|
|
74
|
+
default_paths = get_agent_paths()
|
|
75
|
+
SKMEMORY_HOME = default_paths["base"]
|
|
76
|
+
CONFIG_DIR = default_paths["config"]
|
|
77
|
+
CONFIG_PATH = default_paths["config_yaml"]
|
|
78
|
+
except ValueError:
|
|
79
|
+
# Fallback if no agents exist
|
|
80
|
+
SKMEMORY_HOME = Path.home() / ".skcapstone" / "agents" / "lumina-template"
|
|
81
|
+
CONFIG_DIR = SKMEMORY_HOME / "config"
|
|
82
|
+
CONFIG_PATH = CONFIG_DIR / "skmemory.yaml"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. ✅ skmemory/importers/telegram_api.py
|
|
86
|
+
**Changed**:
|
|
87
|
+
- Updated SESSION_PATH from hardcoded `~/.skmemory/` to agent-aware
|
|
88
|
+
- Updated docstring to reflect new location
|
|
89
|
+
|
|
90
|
+
**Before**:
|
|
91
|
+
```python
|
|
92
|
+
SESSION_PATH = os.path.expanduser("~/.skmemory/telegram.session")
|
|
93
|
+
# "Session is saved at ~/.skmemory/telegram.session for future use."
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**After**:
|
|
97
|
+
```python
|
|
98
|
+
from ..agents import get_agent_paths
|
|
99
|
+
default_paths = get_agent_paths()
|
|
100
|
+
SESSION_PATH = str(default_paths["base"] / "telegram.session")
|
|
101
|
+
# "Session is saved at ~/.skcapstone/agent/{agent}/telegram.session..."
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Configuration
|
|
105
|
+
|
|
106
|
+
### Environment Variable
|
|
107
|
+
```bash
|
|
108
|
+
export SKMEMORY_AGENT=lumina # Set active agent
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If not set, uses first non-template agent found.
|
|
112
|
+
|
|
113
|
+
### Creating New Agents
|
|
114
|
+
```bash
|
|
115
|
+
# Copy template to create new agent
|
|
116
|
+
cp -a ~/.skcapstone/agent/lumina-template ~/.skcapstone/agent/john
|
|
117
|
+
|
|
118
|
+
# Edit config to customize
|
|
119
|
+
vim ~/.skcapstone/agent/john/config/skmemory.yaml
|
|
120
|
+
# Change: agent.name: john
|
|
121
|
+
|
|
122
|
+
# Agent automatically discovered on next run
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Testing
|
|
126
|
+
|
|
127
|
+
### Verify Dynamic Paths
|
|
128
|
+
```python
|
|
129
|
+
from skmemory.agents import list_agents, get_active_agent, get_agent_paths
|
|
130
|
+
|
|
131
|
+
# List all agents (excludes template)
|
|
132
|
+
agents = list_agents()
|
|
133
|
+
print(f"Available agents: {agents}")
|
|
134
|
+
# Output: ['john', 'lumina']
|
|
135
|
+
|
|
136
|
+
# Get current active agent
|
|
137
|
+
active = get_active_agent()
|
|
138
|
+
print(f"Active agent: {active}")
|
|
139
|
+
# Output: 'lumina' (or from SKMEMORY_AGENT env var)
|
|
140
|
+
|
|
141
|
+
# Get all paths for agent
|
|
142
|
+
paths = get_agent_paths("lumina")
|
|
143
|
+
print(f"Seeds: {paths['seeds']}")
|
|
144
|
+
# Output: ~/.skcapstone/agent/lumina/seeds
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Agent-Aware Commands
|
|
148
|
+
```bash
|
|
149
|
+
# Uses current agent automatically
|
|
150
|
+
skmemory list-seeds
|
|
151
|
+
skmemory import-seeds
|
|
152
|
+
|
|
153
|
+
# Override agent for specific command
|
|
154
|
+
SKMEMORY_AGENT=john skmemory list-seeds
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Migration Notes
|
|
158
|
+
|
|
159
|
+
### For Existing Users
|
|
160
|
+
No changes needed! Existing `~/.skcapstone/agent/lumina/` continues to work:
|
|
161
|
+
- Paths automatically resolved
|
|
162
|
+
- All data preserved
|
|
163
|
+
- Backward compatible
|
|
164
|
+
|
|
165
|
+
### For New Agents
|
|
166
|
+
1. Copy template: `cp -a ~/.skcapstone/agent/lumina-template ~/.skcapstone/agent/{name}`
|
|
167
|
+
2. Edit config: Update `agent.name` in `config/skmemory.yaml`
|
|
168
|
+
3. Use agent: Set `SKMEMORY_AGENT={name}` or use first agent
|
|
169
|
+
|
|
170
|
+
## Benefits
|
|
171
|
+
|
|
172
|
+
✅ **Multi-Agent**: Multiple agents coexist (lumina, john, etc.)
|
|
173
|
+
✅ **Template-Based**: Easy agent creation from template
|
|
174
|
+
✅ **Dynamic Discovery**: Automatically finds available agents
|
|
175
|
+
✅ **Ignored Template**: `lumina-template` excluded by default
|
|
176
|
+
✅ **Environment Override**: `SKMEMORY_AGENT` env var for switching
|
|
177
|
+
✅ **Backward Compatible**: Existing lumina agent works unchanged
|
|
178
|
+
|
|
179
|
+
## Next Steps
|
|
180
|
+
|
|
181
|
+
1. ✅ Code changes complete
|
|
182
|
+
2. 🔄 Commit changes to skcapstone-repos/skmemory
|
|
183
|
+
3. 🔄 Update SKCapstone for agent-aware commands
|
|
184
|
+
4. 🔄 Test multi-agent functionality
|
|
185
|
+
5. 🔄 Document agent creation process
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
**Total Files Modified**: 4 (plus 1 new file)
|
|
190
|
+
**Lines Changed**: ~150 lines
|
|
191
|
+
**Breaking Changes**: None (backward compatible)
|
|
192
|
+
**New Features**: Multi-agent support, dynamic discovery, template system
|