mnemospark 1.2.1 → 1.3.0

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "mnemospark",
3
3
  "name": "mnemospark",
4
- "version": "1.2.1",
4
+ "version": "1.3.0",
5
5
  "description": "mnemospark is an OpenClaw plugin that gives agentic systems instant, secure access to cloud storage, compute, and proprietary datasets paid via x402 with USDC on Base. Wallet and go.",
6
6
  "configSchema": {
7
7
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mnemospark",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "description": "mnemospark is an OpenClaw plugin that gives agentic systems instant, secure access to cloud storage, compute, and proprietary datasets paid via x402 with USDC on Base. Wallet and go.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -85,7 +85,7 @@
85
85
  "eslint": "^9.39.2",
86
86
  "husky": "^9.1.7",
87
87
  "lint-staged": "^16.2.7",
88
- "openclaw": "latest",
88
+ "openclaw": "^2026.4.1",
89
89
  "prettier": "^3.8.1",
90
90
  "tsup": "^8.0.0",
91
91
  "typescript": "^5.7.0",
@@ -18,7 +18,9 @@ Use this skill for mnemospark cloud backup/storage workflows, async operation tr
18
18
 
19
19
  3. **Flag style:** Use **`--key value`** for all arguments (and bare flags like `--async`, `--latest`, `--renewal`, `--cancel` where applicable). Do **not** build shell commands with slash prefixes (`/mnemospark …`) or `name:value` forms—those are for **in-chat** slash UX. The chat handler accepts multiple spellings; **shell automation must use `--key value`**.
20
20
 
21
- 4. **Discovery:** `node <ABSOLUTE_PATH_TO_EXTENSION>/dist/cli.js cloud help` shows the same help as `/mnemospark cloud help`.
21
+ 4. **SQLite:** Do **not** use the host `sqlite3` binary to read `~/.openclaw/mnemospark/state.db`. mnemospark uses Node’s built-in SQLite (`node:sqlite`). For **`price-storage`** after a local **backup**, you may **omit `--object-id-hash`**; the CLI reads sha256 from local state. Otherwise pass `--object-id-hash` from backup output.
22
+
23
+ 5. **Discovery:** `node <ABSOLUTE_PATH_TO_EXTENSION>/dist/cli.js cloud help` shows the same help as `/mnemospark cloud help`.
22
24
 
23
25
  ## Inputs expected
24
26
 
@@ -50,7 +52,7 @@ Let `CLI` = `node <ABSOLUTE_PATH_TO_EXTENSION>/dist/cli.js cloud`. Replace `<ABS
50
52
  **Primary subcommands**
51
53
 
52
54
  - `CLI backup <file|directory> --name <friendly-name> [--async] [--orchestrator <inline|subagent>] [--timeout-seconds <n>]` — **`--name` is required.**
53
- - `CLI price-storage --wallet-address <addr> --object-id <id> --object-id-hash <hash> --gb <gb> --provider <provider> --region <region>` — **`--provider` and `--region` are required** (defaults often `aws` / `us-east-1`; override as needed).
55
+ - `CLI price-storage --wallet-address <addr> --object-id <id> [--object-id-hash <hash>] --gb <gb> --provider <provider> --region <region>` — **`--provider` and `--region` are required** (defaults often `aws` / `us-east-1`; override as needed). Omit **`--object-id-hash`** when the object row exists in local SQLite after **backup**; pass it when quoting without a prior local backup row.
54
56
  - `CLI upload --quote-id <quote-id> --wallet-address <addr> --object-id <id> --object-id-hash <hash> [--name <friendly-name>] [--async] [--orchestrator <inline|subagent>] [--timeout-seconds <n>]`
55
57
  - `CLI ls --wallet-address <addr> [--object-key <object-key> | --name <friendly-name>] [--latest|--at <timestamp>]`
56
58
  - `CLI download --wallet-address <addr> [--object-key <object-key> | --name <friendly-name>] [--latest|--at <timestamp>] [--async] [--orchestrator <inline|subagent>] [--timeout-seconds <n>]`
@@ -15,7 +15,7 @@ Slash usage: `/mnemospark cloud <subcommand> …`. CLI/agent: `node dist/cli.js
15
15
 
16
16
  ### Price storage quote
17
17
 
18
- `price-storage --wallet-address <addr> --object-id <id> --object-id-hash <hash> --gb <gb> --provider aws --region us-east-1` (defaults; override `--provider` / `--region` for other regions)
18
+ `price-storage --wallet-address <addr> --object-id <id> [--object-id-hash <hash>] --gb <gb> --provider aws --region us-east-1` (defaults; override `--provider` / `--region` for other regions). Omit `--object-id-hash` when the object already exists in local SQLite after **backup** (mnemospark resolves sha256 via `node:sqlite`; do not shell out to the `sqlite3` binary).
19
19
 
20
20
  ### Upload
21
21
 
@@ -25,6 +25,7 @@ Slash usage: `/mnemospark cloud <subcommand> …`. CLI/agent: `node dist/cli.js
25
25
  - Local archive path: prefers `backup/<sanitized-friendly-name>` from SQLite (see `backup` + `friendly_names`); falls back to legacy `backup/<object-id>` if that file exists.
26
26
  - Optional `--name` must exactly match the friendly name in SQLite for that `object_id` (validation only; not sent to the backend).
27
27
  - `--timeout-seconds <n>` only applies when `--async --orchestrator subagent`.
28
+ - **OpenClaw 2026.4.x:** On the first successful upload, mnemospark applies the **Renewal Agent Runbook** automatically (dedicated agent `mnemospark-renewal`, `exec-approvals.json` entry for `/usr/bin/node`, `openclaw config validate`, best-effort gateway restart), then registers the monthly isolated cron with `--no-deliver` and a `Command: /usr/bin/node … dist/cli.js cloud payment-settle --renewal …` payload. See the main README for `MNEMOSPARK_CRON_*` overrides.
28
29
 
29
30
  ### Payment settle (scheduled / manual)
30
31
 
package/scripts/README.md DELETED
@@ -1,55 +0,0 @@
1
- # Scripts
2
-
3
- Development and install scripts for mnemospark.
4
-
5
- ## Install scripts (run once per machine)
6
-
7
- **Prerequisites:** Node.js v20+ is required for pnpm. AWS credentials and GitHub auth are configured separately (IAM role, `aws configure`, `gh auth login`).
8
-
9
- | Script | Purpose |
10
- | ------------------------------ | ------------------------------------------------ |
11
- | `./scripts/install-pnpm.sh` | Enable pnpm via Node corepack. Idempotent. |
12
- | `./scripts/install-aws-cli.sh` | Install AWS CLI v2 on Ubuntu x86_64. Idempotent. |
13
- | `./scripts/install-jq.sh` | Optional: install jq via apt. Idempotent. |
14
-
15
- Run from repo root, e.g.:
16
-
17
- ```bash
18
- ./scripts/install-pnpm.sh
19
- ./scripts/install-aws-cli.sh
20
- ```
21
-
22
- AWS CLI credentials are not installed by the script; use IAM role or `aws configure` per environment.
23
-
24
- ## Verification
25
-
26
- ```bash
27
- ./scripts/verify-dev-tools.sh
28
- ```
29
-
30
- Checks: `aws --version`, `aws sts get-caller-identity`, `node -v`, `pnpm -v`, `git --version`, `gh auth status`. Optionally runs `pnpm install`, `pnpm build`, `pnpm test` unless `SKIP_PNPM_BUILD=1`.
31
-
32
- Full pass requires AWS credentials and `gh auth login` to be configured.
33
-
34
- ## Optional: jq
35
-
36
- jq is optional (per development_tools_requirements_doc). To install on Ubuntu:
37
-
38
- ```bash
39
- sudo apt install -y jq
40
- ```
41
-
42
- Or run `./scripts/install-jq.sh` if present.
43
-
44
- ## Documentation
45
-
46
- Documentation lives in the separate **mnemospark-docs** repository. Clone or open that repo directly when editing product and API docs:
47
-
48
- - Repo: `git@github.com:pawlsclick/mnemospark-docs.git`
49
-
50
- Do not expect a `.company` subdirectory in this repo; that Git submodule has been removed in favor of working directly in `mnemospark-docs`.
51
-
52
- ## Other scripts
53
-
54
- - `reinstall.sh` — Reinstall mnemospark OpenClaw plugin.
55
- - `uninstall.sh` — Uninstall mnemospark plugin and clean config.
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Install AWS CLI v2 on Ubuntu (x86_64). Idempotent: if aws --version already shows v2.x, exit 0.
3
- # Credentials are out of scope (IAM role or aws configure per environment).
4
- set -e
5
-
6
- AWS_URL="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
7
- TMP_DIR="${TMPDIR:-/tmp}/awscliv2-$$"
8
-
9
- if command -v aws >/dev/null 2>&1; then
10
- ver=$(aws --version 2>&1 || true)
11
- if [[ "$ver" =~ aws-cli/2\. ]]; then
12
- echo "AWS CLI v2 already installed: $ver"
13
- exit 0
14
- fi
15
- fi
16
-
17
- cleanup() { rm -rf "$TMP_DIR"; }
18
- trap cleanup EXIT
19
- mkdir -p "$TMP_DIR"
20
- cd "$TMP_DIR"
21
-
22
- echo "Downloading AWS CLI v2..."
23
- curl -sSfL "$AWS_URL" -o awscliv2.zip
24
- unzip -q awscliv2.zip
25
- sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin
26
-
27
- echo "AWS CLI v2 installed: $(aws --version)"
28
- exit 0
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Optional: install jq on Ubuntu. Idempotent: if jq already works, exit 0.
3
- # See development_tools_requirements_doc.md §2.7 — jq is optional.
4
- set -e
5
-
6
- if command -v jq >/dev/null 2>&1; then
7
- jq --version >/dev/null 2>&1 && { echo "jq already installed: $(jq --version)"; exit 0; }
8
- fi
9
-
10
- sudo apt-get update -qq
11
- sudo apt-get install -y jq
12
- echo "jq installed: $(jq --version)"
13
- exit 0
@@ -1,20 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Install and enable pnpm on Ubuntu dev instance via Node corepack.
3
- # Idempotent: if pnpm already works, exit 0.
4
- # Prerequisite: Node.js v20+ (engines in package.json).
5
- set -e
6
-
7
- if command -v pnpm >/dev/null 2>&1; then
8
- pnpm -v >/dev/null 2>&1 && { echo "pnpm already installed: $(pnpm -v)"; exit 0; }
9
- fi
10
-
11
- if ! command -v node >/dev/null 2>&1; then
12
- echo "Error: Node.js is required. Install Node.js v20+ first." >&2
13
- exit 1
14
- fi
15
-
16
- corepack enable
17
- corepack prepare pnpm@latest --activate
18
-
19
- echo "pnpm installed: $(pnpm -v)"
20
- exit 0
@@ -1,102 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
-
6
- echo "mnemospark reinstall"
7
- echo ""
8
-
9
- # 1. Remove mnemospark plugin files only
10
- echo "→ Removing plugin files..."
11
- rm -rf ~/.openclaw/extensions/mnemospark
12
-
13
- # 2. Clean only mnemospark config entries (do not touch blockrun/openclaw)
14
- echo "→ Cleaning config entries (mnemospark only)..."
15
- node -e "
16
- const f = require('os').homedir() + '/.openclaw/openclaw.json';
17
- const fs = require('fs');
18
- if (!fs.existsSync(f)) {
19
- console.log(' No openclaw.json found, skipping');
20
- process.exit(0);
21
- }
22
-
23
- let c;
24
- try {
25
- c = JSON.parse(fs.readFileSync(f, 'utf8'));
26
- } catch (err) {
27
- const backupPath = f + '.corrupt.' + Date.now();
28
- console.error(' ERROR: Invalid JSON in openclaw.json');
29
- console.error(' ' + err.message);
30
- try {
31
- fs.copyFileSync(f, backupPath);
32
- console.log(' Backed up to: ' + backupPath);
33
- } catch {}
34
- console.log(' Skipping config cleanup...');
35
- process.exit(0);
36
- }
37
-
38
- if (c.plugins?.entries?.mnemospark) delete c.plugins.entries.mnemospark;
39
- if (c.plugins?.installs?.mnemospark) delete c.plugins.installs.mnemospark;
40
- if (Array.isArray(c.plugins?.allow)) {
41
- c.plugins.allow = c.plugins.allow.filter(p => p !== 'mnemospark');
42
- }
43
- fs.writeFileSync(f, JSON.stringify(c, null, 2));
44
- console.log(' Config cleaned');
45
- "
46
-
47
- # 3. Kill mnemospark proxy (port 7120)
48
- echo "→ Stopping old proxy..."
49
- lsof -ti :7120 | xargs kill -9 2>/dev/null || true
50
-
51
- # 4. Remove stale models cache so it gets regenerated
52
- echo "→ Cleaning models cache..."
53
- rm -f ~/.openclaw/agents/main/agent/models.json 2>/dev/null || true
54
-
55
- # 5. Install mnemospark plugin
56
- echo "→ Installing mnemospark..."
57
- openclaw plugins install mnemospark
58
-
59
- # 6. Verify installation
60
- echo "→ Verifying installation..."
61
- DIST_PATH="$HOME/.openclaw/extensions/mnemospark/dist/index.js"
62
- if [ ! -f "$DIST_PATH" ]; then
63
- echo " ⚠️ dist/ files missing, clearing npm cache and retrying..."
64
- npm cache clean --force 2>/dev/null || true
65
- rm -rf ~/.openclaw/extensions/mnemospark
66
- openclaw plugins install mnemospark
67
-
68
- if [ ! -f "$DIST_PATH" ]; then
69
- echo " ❌ Installation failed - dist/index.js still missing"
70
- exit 1
71
- fi
72
- fi
73
- echo " ✓ dist/index.js verified"
74
-
75
- # 7. Ensure mnemospark is in plugins.allow
76
- echo "→ Adding to plugins allow list..."
77
- node -e "
78
- const os = require('os');
79
- const fs = require('fs');
80
- const path = require('path');
81
- const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json');
82
-
83
- if (fs.existsSync(configPath)) {
84
- try {
85
- const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
86
- if (!config.plugins) config.plugins = {};
87
- if (!Array.isArray(config.plugins.allow)) config.plugins.allow = [];
88
- if (!config.plugins.allow.includes('mnemospark')) {
89
- config.plugins.allow.push('mnemospark');
90
- console.log(' Added mnemospark to plugins.allow');
91
- }
92
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
93
- } catch (e) {
94
- console.log(' Could not update config:', e.message);
95
- }
96
- }
97
- "
98
-
99
- echo ""
100
- echo "✓ Done. Run: openclaw gateway restart"
101
- echo ""
102
- echo "To uninstall: bash ~/.openclaw/extensions/mnemospark/scripts/uninstall.sh"
@@ -1,67 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- echo "mnemospark uninstall"
5
- echo ""
6
-
7
- # 1. Stop mnemospark proxy (port 7120)
8
- echo "→ Stopping proxy..."
9
- lsof -ti :7120 | xargs kill -9 2>/dev/null || true
10
-
11
- # 2. Remove mnemospark plugin files only
12
- echo "→ Removing plugin files..."
13
- rm -rf ~/.openclaw/extensions/mnemospark
14
-
15
- # 3. Clean only mnemospark entries from openclaw.json (do not touch blockrun/openclaw)
16
- echo "→ Cleaning openclaw.json (mnemospark only)..."
17
- node -e "
18
- const os = require('os');
19
- const fs = require('fs');
20
- const path = require('path');
21
- const configPath = path.join(os.homedir(), '.openclaw', 'openclaw.json');
22
-
23
- if (!fs.existsSync(configPath)) {
24
- console.log(' No openclaw.json found, skipping');
25
- process.exit(0);
26
- }
27
-
28
- try {
29
- const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
30
- let changed = false;
31
-
32
- // Remove only mnemospark plugin entries
33
- if (config.plugins?.entries?.mnemospark) {
34
- delete config.plugins.entries.mnemospark;
35
- changed = true;
36
- }
37
- if (config.plugins?.installs?.mnemospark) {
38
- delete config.plugins.installs.mnemospark;
39
- changed = true;
40
- }
41
-
42
- // Remove only mnemospark from plugins.allow
43
- if (Array.isArray(config.plugins?.allow)) {
44
- const before = config.plugins.allow.length;
45
- config.plugins.allow = config.plugins.allow.filter(p => p !== 'mnemospark');
46
- if (config.plugins.allow.length !== before) {
47
- console.log(' Removed mnemospark from plugins.allow');
48
- changed = true;
49
- }
50
- }
51
-
52
- if (changed) {
53
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
54
- console.log(' Config cleaned');
55
- } else {
56
- console.log(' No mnemospark entries found');
57
- }
58
- } catch (err) {
59
- console.error(' Error:', err.message);
60
- }
61
- "
62
-
63
- echo ""
64
- echo "✓ mnemospark uninstalled"
65
- echo ""
66
- echo "Restart OpenClaw to apply changes:"
67
- echo " openclaw gateway restart"
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Verify required development tools for mnemospark. Exit 0 only if all checks pass.
3
- # Run from repo root. AWS credentials and gh auth must be configured for full pass.
4
- # Optional: set SKIP_PNPM_BUILD=1 to skip pnpm install/build/test (e.g. when no AWS creds).
5
- set -e
6
-
7
- REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
8
- cd "$REPO_ROOT"
9
-
10
- fail() { echo " FAIL: $1" >&2; exit 1; }
11
-
12
- echo "Checking aws..."
13
- command -v aws >/dev/null 2>&1 || fail "aws not found. Run scripts/install-aws-cli.sh"
14
- aws --version >/dev/null 2>&1 || fail "aws --version failed"
15
- echo " ok"
16
-
17
- echo "Checking aws sts get-caller-identity..."
18
- aws sts get-caller-identity >/dev/null 2>&1 || fail "AWS credentials not configured (aws sts get-caller-identity failed). Use IAM role or aws configure."
19
- echo " ok"
20
-
21
- echo "Checking node..."
22
- command -v node >/dev/null 2>&1 || fail "node not found. Install Node.js v20+."
23
- node -v >/dev/null 2>&1 || fail "node -v failed"
24
- echo " ok"
25
-
26
- echo "Checking pnpm..."
27
- command -v pnpm >/dev/null 2>&1 || fail "pnpm not found. Run scripts/install-pnpm.sh"
28
- pnpm -v >/dev/null 2>&1 || fail "pnpm -v failed"
29
- echo " ok"
30
-
31
- echo "Checking git..."
32
- command -v git >/dev/null 2>&1 || fail "git not found"
33
- git --version >/dev/null 2>&1 || fail "git --version failed"
34
- echo " ok"
35
-
36
- echo "Checking gh auth status..."
37
- command -v gh >/dev/null 2>&1 || fail "gh (GitHub CLI) not found"
38
- # Use --json so exit code is 0 when logged in (avoids exit 1 from "plain text" warning)
39
- gh auth status --json hosts >/dev/null 2>&1 || fail "gh auth status failed. Run gh auth login."
40
- echo " ok"
41
-
42
- if [[ "${SKIP_PNPM_BUILD}" == "1" ]]; then
43
- echo "Skipping pnpm install/build/test (SKIP_PNPM_BUILD=1)"
44
- else
45
- echo "Running pnpm install..."
46
- pnpm install || fail "pnpm install failed"
47
- echo " ok"
48
- echo "Running pnpm build..."
49
- pnpm build || fail "pnpm build failed"
50
- echo " ok"
51
- echo "Running pnpm test..."
52
- pnpm test || fail "pnpm test failed"
53
- echo " ok"
54
- fi
55
-
56
- echo "All required dev tools verified."