mcpField
P
pmll-memory-mcp

pmll-memory-mcp

本地服务
github.com/drQedwards记忆与知识153 周前更新

关于 pmll-memory-mcp

pmll-memory-mcp 为编码 Agent 提供持久化上下文记忆,结合会话隔离的短期 KV 缓存与可选的长期图存储,并以 Q-promise 去重。

主要功能

  1. 01会话隔离的 KV 记忆
  2. 02基于 Q-promise 的去重
  3. 03SQLite 属性图存储
  4. 04语义搜索与时间衰减
  5. 05统一上下文解析与自动提升

适用场景

  1. 01任务开始时初始化记忆
  2. 02调用昂贵工具前查询缓存
  3. 03跨会话检索常用信息

MCP 相关

这是一个 MCP 服务,向 MCP 客户端提供短期记忆、长期图记忆及统一上下文解析工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"drqedwards-pmll-memory": {
"command": "npx",
"args": [
"-y",
"pmll-memory-mcp"
]
}
}
}
启动命令npx -y pmll-memory-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmpmll-memory-mcp0.1.1

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
silo_sizeinteger否KV 槽位的最大数量(与 memory_silo_t.size 一致)。
session_idstring是此 Agent 任务的唯一标识符(例如 UUID)。

详细介绍

PPM — Python Package Manager

pypm 打包命令行工具,配备共享的 PMLL 记忆和 Q-promise。同系列项目:drQedwards/pmll。

CI License Version npm Sponsor

Stellar pmll-anchor 实时 ID:docs/STELLAR.md · 技能:SKILL.md · 承诺:Q_promise_lib/README.md。

简而言之:PPM 用于打包 Python(C CLI)。共享的 PMLL 负责记忆/状态(memory_silo_t、精确 peek 和语义 peek_semantic、 SAT 桥接、init_pml)。Q-promise 负责时序/控制流(qpromise_*、libqpromise.so) ——它不会取代 silo。可选的 Stellar 承诺通过 pmll-anchor 将链下 CodeworkPayload 哈希为 32 字节摘要(ABI:init/store/get/bump)。 配套的打包命令行工具和 MCP 记忆服务位于仓库内。

PMLL 为 Agent 工作流提供持久化结构化记忆,同时还提供 PPM 打包命令行工具 (隔离构建包、插件、签名)和 PMLL Memory MCP 服务。 长期图工具改编自 Context+。


目录

  1. 分层(合并后)
  2. 功能
  3. 从源代码构建
  4. CLI 命令
  5. GPU 和安全功能
  6. 插件系统
  7. 配置
  8. PMLL Memory MCP 服务
  9. Stellar 承诺
  10. 架构
  11. 发行说明
  12. 路线图
  13. 贡献与赞助


分层(合并后)

两个互补层,不可相互替代:

层负责内容主要接口
PMLL持久化记忆/状态memory_silo_t、peek / peek_semantic、silo_set、SAT 桥接、init_pml
Q-promise时序/控制流qpromise_* API、libqpromise.so、延迟执行的 qpromise_drain()

Q-promise 不会取代 silo。Promise 可以引用一个记忆键(以及可选的 SAT 状态 ID);结果会通过 silo_set / qpromise_resolve_commit 写回。

预期循环
retrieve (peek / peek_semantic)
  → compute / request work
  → promise PENDING
  → resolve / reject (optionally resolve_commit → silo)
  → continuation (then / catch / finally via qpromise_drain)
  → memory update
  → retrieve again

线程安全:C Q-promise drain 为单线程。Continuation 仅在调用线程上执行 qpromise_drain() 时运行;调用方必须在外部串行化访问。详情:Q_promise_lib/README.md。

C 核心(PMLL)

头文件:PMLL.h · 实现:PMLL.c

符号作用
memory_silo_t关联/语义 silo:tree、slots[]、embed_dim(PMLL_EMBED_DIM=32)、slot_count
silo_slot_tkey、content、embedding、resolved
init_silo / free_silo / silo_set分配、释放、写入键/内容及嵌入
peek精确键查找,否则按索引查找
peek_semantic在嵌入上按余弦相似度 ≥ min_sim 查找(silo_embed_text、silo_cosine_similarity)
init_pml将每个 assignment[i] 设为 -1(未决)
check_conflict将 -1 视为未决(而非因零填充而固定为 false)
sat_bridge_*将 3SAT token 映射为 silo 中的关联字符串字面量
Q-promise 库

构建/测试/API:Q_promise_lib/README.md(权威文档)。公共符号为 qpromise_*;共享对象为 libqpromise.so。旧原型(QMemNode / q_mem_* / memory-chain walker)已移除;Q_promises.h 是兼容性头文件,会重定向到 qpromise.h。

✨ 功能

命令功能说明
pypm doctor检查 Python 头文件、C 编译器、OpenSSL、WASI 工具链、GPU,等等
pypm sandbox [-d DIR]进入临时目录(或自定义 DIR),并获得完整的 shell 环境
pypm plugin add NAME SRC将 .so 插件(从 URL 或路径)下载到 ~/.pypm/plugins/
pypm plugin run NAME …在指定插件中执行 pypm_plugin_main()
pypm pypylock [-o FILE]将所有 wheel + 解释器打包到 dist/venv.tar.gz(或 FILE)
pypm version打印当前 CLI 版本
ppm import PKG导入并缓存软件包,并使用 GPU 加速哈希校验
ppm add PKG --lock添加软件包并更新锁文件
ppm plan / ppm apply规划依赖项变更,然后应用变更并保留审计记录
ppm snapshot / ppm rollback创建环境快照;回滚到任意先前状态
ppm sign / ppm verify对制品进行签名(Ed25519)并验证加密收据
ppm sbom生成软件物料清单(SBOM)

已列入路线图: SAT 依赖求解器(独立的 SAT.c CDCL 求解器已存在,但尚未用于解析)、并行 wheel 缓存、使用单个锁文件的工作区、 WASM wheel 解析、Conda 和 Poetry 导入插件。


🔧 从源代码构建

系统依赖项
  • C11 编译器(gcc、clang 或 MSVC)
  • libcurl(用于下载插件)
  • libdl(用于动态加载,在 Linux / macOS 上为标准库)
  • tar / libarchive(可选,用于 pypylock 打包)
构建并首次运行
git clone https://github.com/drQedwards/PPM.git
cd PPM
cc -Wall -Wextra -ldl -lcurl -o pypm Ppm.c
./pypm doctor        # Diagnose your dev box
./pypm sandbox       # Spin up a throw-away REPL playground
Q-promise 共享库
cd Q_promise_lib
make clean && make test
make shared   # → libqpromise.so
cd ..
可选:CUDA 加速构建
nvcc -O3 CLI/CLI.cu -lcuda -o ppm-gpu
./ppm-gpu import transformers torch --verbose

🖥 CLI 命令

导入软件包
# Import a single package
ppm import transformers

# Import with a specific version
ppm import transformers==4.43.3

# Import multiple packages
ppm import transformers torch numpy

# Scan a Python file for imports and install them
ppm import --from-file my_script.py

# Verbose — watch what's happening
ppm import transformers --verbose
# 🔍 Resolving transformers...
# ⬇️  Downloading transformers-4.43.3-py3-none-any.whl
# 🔐 GPU integrity check: PASSED
# ✅ transformers==4.43.3 imported successfully
项目初始化
ppm init
# Creates:
# .ppm/
# ├── ledger.jsonl      ← append-only operation log
# ├── state.json        ← current state
# ├── lock.json         ← dependency lockfile
# └── snapshots/        ← rollback points
依赖解析与锁定
ppm add transformers torch==2.4.0 --lock

ppm plan
# { "plan": "install", "packages": { "transformers": "4.43.3", ... } }

ppm apply --note "Added ML stack"
快照与回滚
ppm snapshot --name "before-upgrade"
ppm snapshots
ppm rollback before-upgrade
环境诊断
ppm doctor
# ✅ Python dev headers found
# ✅ C compiler available
# ✅ CUDA toolkit available
# 🏁 Diagnostics complete (0 issues found)
沙盒
ppm sandbox                 # ephemeral temp directory
ppm sandbox -d /tmp/mydir   # custom directory
密封打包
ppm pypylock -o production-env.tar.gz

🔐 GPU 与安全功能

GPU 加速哈希校验
ppm import torch --verbose
# 🚀 GPU hash verification: SHA-256 computed on device
# ✅ Integrity verified: e3b0c44298fc1c149afbf4c8996fb924...
GPU 后端选择
ppm ensure transformers --gpu auto    # auto-detect CUDA
ppm ensure transformers --gpu cu121  # force CUDA 12.1
ppm ensure transformers --gpu cpu    # CPU-only
Ed25519 加密签名
ppm keygen --out-priv ed25519.priv --out-pub ed25519.pub
ppm sign   --sk ed25519.priv --file torch-2.4.0-*.whl --gpu ./libbreath_gpu.so
ppm verify --receipt torch-2.4.0-*.whl.receipt.json   --file torch-2.4.0-*.whl
来源信息与 SBOM
ppm sbom        --out project-sbom.json
ppm provenance  --out provenance.json
ppm graph --dot | dot -Tpng -o deps.png

🔌 插件系统

# Install a plugin
ppm plugin add auditwheel https://cdn.example.com/auditwheel.so

# Run it
ppm plugin run auditwheel repair --wheel torch-2.4.0-cp310-linux_x86_64.whl
编写插件(C)
// hello.c
#include <stdio.h>
int pypm_plugin_main(int argc, char **argv) {
    puts("Hello from a plugin 👋");
    return 0;
}
cc -shared -fPIC -o hello.so hello.c
mv hello.so ~/.pypm/plugins/
pypm plugin run hello

⚙️ 配置

pypm.toml
[tool.ppm]
python = "^3.10"
default_gpu = "auto"

[tool.ppm.backends]
cpu.index   = "https://download.pytorch.org/whl/cpu"
cu121.index = "https://download.pytorch.org/whl/cu121"
cu122.index = "https://download.pytorch.org/whl/cu122"

torch_prefer        = "2.4.*"
transformers_prefer = "4.43.*"
环境变量
export PYP_WORKSPACE_ROOT=/path/to/project   # override workspace detection
export PYP_DEBUG=1                           # enable debug output
export CUDA_VISIBLE_DEVICES=0               # control GPU usage

🧠 PMLL Memory MCP 服务

持久化记忆逻辑循环,结合短期 KV 上下文记忆、Q-promise 去重,以及 Context+ 长期 记忆图,旨在提升编码 Agent 的上下文保留与检索能力。

npm PyPI MCP Registry

pmll-memory-mcp 是一个 Model Context Protocol(MCP)服务,包含互补的短期 KV 层和可选的长期图层。构建服务时优先使用 MCPServer(mcp 2.x),并在不可用时回退到 FastMCP(mcp 1.x)——参见 mcp/pmll_memory_mcp/server.py。

以代码中的工具名称为准:TypeScript(mcp/src/index.ts)有 15 个工具,包括 graphql 和 create_relation 等名称;Python(mcp/pmll_memory_mcp/server.py) 有 14 个工具(没有 graphql),其中一些名称较长,例如 create_memory_relation。 Ppm-lib/pmll_mcp/ 中的 ctypes 示例通过 qpromise_* 加载 libqpromise.so。

记忆层:

  • 短期 KV 缓存(5 个工具)——按会话隔离的键值记忆,带有 Q-promise 去重功能,并与 PMLL.c::memory_silo_t 相对应。
  • 长期记忆图(6 个工具)——改编自 @ForLoopCodes 的 Context+,提供由 SQLite 支持的属性图,其中包含类型化节点、加权边、时间衰减评分(e^(-λt)),以及通过稳定哈希嵌入实现的语义搜索。
  • 解决方案引擎(3 个工具)——连接这两层,提供统一的上下文解析(短期 → 长期 → 未命中)、自动将频繁访问的条目提升至长期记忆,以及统一的记忆状态视图。

该服务旨在作为与 Playwright 和其他 MCP 工具并列的第 3 个初始化器——在每个 Agent 任务开始时加载一次。Agent 在任务开始时调用一次 init,然后在调用任何耗时较长的 MCP 工具前使用 peek,以避免重复调用。频繁访问的条目会被提升至长期记忆图,以便跨会话进行语义检索(由 SQLite 支持的图)。

不同实现的工具数量有所不同(TS 为 15 个,含 graphql;Python 为 14 个——见上文说明)。下方历史文档列出的是 TypeScript 工具接口。

为什么它是出色的第 3 个初始化器

现代 Claude Agent 任务通常会调用 Playwright、文件系统工具和其他 MCP 服务。如果没有共享记忆层,每个子任务都会从头重新初始化相同的上下文。pmll-memory-mcp 通过两个互补的记忆层消除了这项开销:

Agent task start
  ├── 1st init: Playwright MCP
  ├── 2nd init: Unstoppable Domains MCP  (see unstoppable-domains/)
  └── 3rd init: pmll-memory-mcp   ← this server
        ├── Short-term: all tool calls go through peek() first
        └── Long-term: frequently accessed entries auto-promote to graph
peek() 模式

在调用每一个耗时较长的 MCP 工具前,Agent 都会调用 peek 检查缓存:

// Pseudocode — what the agent does automatically via MCP tool calls

// 1. Check cache before navigating
const result = mcp.call("pmll-memory-mcp", "peek", { session_id: sid, key: "https://example.com" });
if (result.hit) {
    const pageContent = result.value;          // ← served from PMLL silo, no browser needed
} else {
    // 2. Cache miss — do the real work
    const pageContent = mcp.call("playwright", "navigate", { url: "https://example.com" });
    // 3. Populate the cache for future agents / subtasks
    mcp.call("pmll-memory-mcp", "set", {
        session_id: sid,
        key: "https://example.com",
        value: pageContent,
    });
}
工具参考(15 个工具)
短期 KV 内存(5 个工具)
工具输入输出描述
initsession_id: str,silo_size: int = 256{status, session_id, silo_size, cleared}设置或重置会话 silo 和 Q-promise 状态(cleared 始终为 true)
peeksession_id: str,key: str{hit, value?, index?} 或 {hit, status, promise_id}非破坏性地检查缓存和 promise
setsession_id: str,key: str,value: str{status: "stored", index}在 silo 中存储 KV 键值对
resolvesession_id: str,promise_id: str{status: "resolved"|"pending", payload?}检查/解析 Q-promise 延续
flushsession_id: str{status: "flushed", cleared_count}任务完成时清除所有 silo 槽位
GraphQL(1 个工具)
工具输入输出描述
graphqlquery: str,variables?: object,operationName?: str{data} 或 {errors}对内存存储执行 GraphQL 查询/变更
长期记忆图(6 个工具 — 改编自 Context+)

这些工具改编自 @ForLoopCodes 的 Context+,提供由 SQLite 支持的语义记忆,具备图遍历、衰减评分和余弦相似度搜索功能。

工具输入输出描述
upsert_memory_nodesession_id、type、label、content、metadata?{node}创建或更新记忆节点,并自动生成稳定哈希嵌入
create_relationsession_id、source_id、target_id、relation、weight?、metadata?{edge}创建类型化边(relates_to、depends_on、implements、references、similar_to、contains)
search_memory_graphsession_id、query、max_depth?、top_k?、edge_filter?{direct, neighbors, totalNodes, totalEdges}通过图遍历进行语义搜索 — 直接匹配项加邻居遍历
prune_stale_linkssession_id、threshold?{removed, remaining}移除已衰减的边(e^(-λt) 低于阈值)以及访问次数较少的孤立节点
add_interlinked_contextsession_id、items[]、auto_link?{nodes, edges}批量添加节点并自动建立相似度链接(余弦相似度 ≥ 0.72 时创建边)
retrieve_with_traversalsession_id、start_node_id、max_depth?、edge_filter?[{node, depth, pathRelations, relevanceScore}]从节点向外遍历 — 返回可达邻居,并按衰减和深度评分
解决方案引擎(3 个工具)
工具输入输出描述
resolve_contextsession_id、key{source, value, score}统一上下文查找:短期 KV → 长期记忆图 → 未命中
promote_to_long_termsession_id、key、value、node_type?、metadata?{promoted, nodeId}将短期 KV 条目提升到长期记忆图
memory_statussession_id{shortTerm, longTerm, promotionThreshold}统一查看短期 KV 和长期记忆图的状态
安装
通过 npx(推荐 — 无需安装)
npx pmll-memory-mcp
通过 npm
npm install -g pmll-memory-mcp
pmll-memory-mcp          # starts the stdio MCP server
通过 pip(Python)
pip install pmll-memory-mcp
pmll-memory-mcp          # starts the stdio MCP server
Claude Desktop / MCP 配置(claude_desktop_config.json)
NPX
{
  "tools": [
    {
      "name": "init",
      "description": "Set up PMLL silo and Q-promise state for a session. Call once at task start.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "silo_size": { "type": "integer", "default": 256 }
        },
        "required": ["session_id"]
      }
    },
    {
      "name": "peek",
      "description": "Non-destructive cache lookup + Q-promise check. Call before every expensive MCP tool invocation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "key": { "type": "string" }
        },
        "required": ["session_id", "key"]
      }
    },
    {
      "name": "set",
      "description": "Store a key-value pair in the session silo. Call after a cache miss.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "key": { "type": "string" },
          "value": { "type": "string" }
        },
        "required": ["session_id", "key", "value"]
      }
    },
    {
      "name": "resolve",
      "description": "Check or resolve a Q-promise continuation by promise ID.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "promise_id": { "type": "string" }
        },
        "required": ["session_id", "promise_id"]
      }
    },
    {
      "name": "flush",
      "description": "Clear all silo slots for a session. Call at task completion.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" }
        },
        "required": ["session_id"]
      }
    },
    {
      "name": "graphql",
      "description": "Execute GraphQL queries or mutations against the memory store.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": { "type": "string" },
          "variables": { "type": "object" },
          "operationName": { "type": "string" }
        },
        "required": ["query"]
      }
    },
    {
      "name": "upsert_memory_node",
      "description": "Create or update a memory node with auto-generated stable hashing embeddings.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "type": { "type": "string" },
          "label": { "type": "string" },
          "content": { "type": "string" },
          "metadata": { "type": "object" }
        },
        "required": ["session_id", "type", "label", "content"]
      }
    },
    {
      "name": "create_relation",
      "description": "Create a typed, weighted edge between two memory nodes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "source_id": { "type": "string" },
          "target_id": { "type": "string" },
          "relation": {
            "type": "string",
            "enum": ["relates_to", "depends_on", "implements", "references", "similar_to", "contains"]
          },
          "weight": { "type": "number" },
          "metadata": { "type": "object" }
        },
        "required": ["session_id", "source_id", "target_id", "relation"]
      }
    },
    {
      "name": "search_memory_graph",
      "description": "Semantic search with graph traversal — returns direct matches and neighbor walk.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "query": { "type": "string" },
          "max_depth": { "type": "integer" },
          "top_k": { "type": "integer" },
          "edge_filter": { "type": "string" }
        },
        "required": ["session_id", "query"]
      }
    },
    {
      "name": "prune_stale_links",
      "description": "Remove decayed edges (e^(-λt) below threshold) and orphan nodes with low access count.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "threshold": { "type": "number" }
        },
        "required": ["session_id"]
      }
    },
    {
      "name": "add_interlinked_context",
      "description": "Bulk-add nodes with auto-similarity linking (cosine >= 0.72 creates edges).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": { "type": "string" },
                "label": { "type": "string" },
                "content": { "type": "string" },
                "metadata": { "type": "object" }
              },
              "required": ["type", "label", "content"]
            }
          },
          "auto_link": { "type": "boolean" }
        },
        "required": ["session_id", "items"]
      }
    },
    {
      "name": "retrieve_with_traversal",
      "description": "Walk outward from a node, returning reachable neighbors scored by temporal decay and depth.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "start_node_id": { "type": "string" },
          "max_depth": { "type": "integer" },
          "edge_filter": { "type": "string" }
        },
        "required": ["session_id", "start_node_id"]
      }
    },
    {
      "name": "resolve_context",
      "description": "Unified context lookup: short-term KV -> long-term graph -> miss. Returns source and score.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "key": { "type": "string" }
        },
        "required": ["session_id", "key"]
      }
    },
    {
      "name": "promote_to_long_term",
      "description": "Promote a short-term KV entry to the long-term memory graph.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" },
          "key": { "type": "string" },
          "value": { "type": "string" },
          "node_type": { "type": "string" },
          "metadata": { "type": "object" }
        },
        "required": ["session_id", "key", "value"]
      }
    },
    {
      "name": "memory_status",
      "description": "Unified view of short-term KV and long-term graph memory status for a session.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "session_id": { "type": "string" }
        },
        "required": ["session_id"]
      }
    }
  ]
}

Docker
{
  "mcpServers": {
    "pmll-memory-mcp": {
      "command": "docker",
      "args": [
        "run", "-i",
        "-v", "pmll_data:/app/data",
        "-e", "MEMORY_FILE_PATH=/app/data/memory.jsonl",
        "--rm", "pmll-memory-mcp"
      ]
    }
  }
}
VS Code MCP 配置

添加到 .vscode/mcp.json(或从命令面板打开 MCP: 打开用户配置):

NPX
{
  "servers": {
    "pmll-memory-mcp": {
      "command": "npx",
      "args": ["-y", "pmll-memory-mcp"]
    }
  }
}
Docker
{
  "servers": {
    "pmll-memory-mcp": {
      "command": "docker",
      "args": [
        "run", "-i",
        "-v", "pmll_data:/app/data",
        "-e", "MEMORY_FILE_PATH=/app/data/memory.jsonl",
        "--rm", "pmll-memory-mcp"
      ]
    }
  }
}
Docker
# Build from the repository root
docker build -f mcp/Dockerfile -t pmll-memory-mcp .

# Run
docker run --rm -i pmll-memory-mcp:latest

# Run with persistent KV memory via volume
docker run --rm -i \
  -v pmll_data:/app/data \
  -e MEMORY_FILE_PATH=/app/data/memory.jsonl \
  pmll-memory-mcp:latest
配套服务与集成
服务 / 集成目录 / 来源传输方式描述
Unstoppable Domainsunstoppable-domains/HTTP(远程)通过自然对话搜索、购买和管理 Web3 域名。
Context+github.com/ForLoopCodes/contextplus集成长期语义记忆图,已改编到 memory-graph.ts 和 solution-engine.ts。作者: @ForLoopCodes。

完整 MCP 服务文档:mcp/README.md


⚓ Stellar 承诺(pmll-anchor)

记忆 / 代码工作负载保留在链下。可选的 32 字节 SHA-256 承诺通过 Soroban pmll-anchor 部署在 Stellar 主网上(与 drQedwards/pmll 共用)。 ABI 保持不变:仅有 init / store / get / bump——请勿虚构字段或合约 ID。 此 PPM 树可能不包含完整的 pmll-anchor/ 合约源代码;类型化负载仍镜像为 skill.ts。 调用文档 / 合约源代码:pmll/SKILL.md。本地摘要:SKILL.md。

网络合约 ID浏览器
主网CCF3B64AXLS4OLY5RN4H4K2CFZAYNZCJQY5MKCKCVAKMZNH7G7F7XUUFstellar.expert
测试网CDLQR24LLFWXTNGGJVJCRXAF3ZRDWFZRUFTDZ5SJOT2J33CS7DDYP7IUstellar.expert

管理员:GBFOFCD3XDANQWSGMHKJJ2V3YXS2QQD7RNC4LMDBVNBTUJOQZ3RLSB3E · wasm 哈希 1b6ad9c574e0f5c9e39968f836a410c03adcf057afa93a63d2710bd30fdd53ba

技能摘要:SKILL.md · 完整调用文档:pmll/SKILL.md


🏛 架构

┌───────────────┐
│ pypm (CLI)    │  ← C-based command parser
└───────┬───────┘
        │
        ▼
┌───────────────┐     ┌─────────────┐     ┌──────────────┐
│ Workspace     │◀───▶│ Resolver    │◀───▶│ Wheel Cache  │
│ (TOML / YAML) │     │ (SAT + PEP) │     │ (~/.cache)   │
└───────────────┘     └─────┬───────┘     └─────┬────────┘
                            │                   │
                            ▼                   ▼
                       ┌──────────┐       ┌────────────┐
                       │ Env Mgr  │       │ Plugin Host│
                       │ (.venv)  │       │ (dlopen)   │
                       └──────────┘       └────────────┘

┌─────────────────────────────────────────────────────┐
│                  pmll-memory-mcp v1.0.1              │
│                                                     │
│  ┌──────────── Short-term (5 tools) ──────────┐    │
│  │ index.ts → peekContext() → kv-store.ts      │    │
│  │                  │                          │    │
│  │                  └──────► q-promise-bridge   │    │
│  └─────────────────────────────────────────────┘    │
│                                                     │
│  ┌──────── Long-term — Context+ (6 tools) ────┐    │
│  │ memory-graph.ts → embeddings.ts             │    │
│  │ (nodes, edges, decay, cosine similarity)    │    │
│  └─────────────────────────────────────────────┘    │
│                                                     │
│  ┌──────── Solution Engine (3 tools) ─────────┐    │
│  │ solution-engine.ts                          │    │
│  │ (resolve_context, promote, memory_status)   │    │
│  └─────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────┘
        │                    │
        ▼                    ▼
  PMLL.c / PMLL.h      Q_promise_lib/
  (memory_silo_t)       (qpromise_* / libqpromise.so)
关键组件
文件 / 目录用途
Ppm.cC 核心命令行工具 v0.0.3-dev — 集成式单文件构建(约 500 行代码)
Pypm.cPyPM 0.3.x 前端分发器;将任务委托给模块源文件
PMLL.c / PMLL.h关联式 / 语义隔离区、peek/peek_semantic、SAT 桥接、init_pml=-1
SAT.c / SAT.h独立布尔 SAT 求解器(采用 first-UIP 学习的 CDCL,可选 DRUP 证明;由 tests/test_sat_c.py 测试)。尚未接入依赖解析(已列入路线图)。SAT.py / SAT.pyx:用 Python 和 Cython 实现的同一算法;参见 docs/SAT_SOLVERS.md
Q_promise_lib/Promise/continuation 库(qpromise_*、libqpromise.so;单线程清空队列)
skill.ts / SKILL.md链下 CodeworkPayload + Stellar 技能入口
pmll-anchor/Soroban 承诺合约(pmll 源码中包含;此处可能不存在)
lattice/仅在 pmll 中 — 可玩的 Stellar 技能图 / ARC-AGI-3 游玩测试
mcp/TypeScript PMLL Memory MCP 服务(15 个工具)
mcp/src/memory-graph.ts改编自 Context+ 的长期记忆图
mcp/src/solution-engine.ts连接短期 KV 与长期图的解决方案引擎
mcp/src/embeddings.ts用于语义搜索的稳定哈希嵌入和余弦相似度(TF-IDF 类保留为旧版)
CLI/扩展命令行界面
Panda-lib/ Torch-lib/ Numpy-lib/库集成适配层
scripts/构建辅助工具和自动化脚本

📝 发布说明

合并后(2026-08)— 语义隔离区 + Q-promise
  • PMLL C 核心:关联式 / 语义隔离区(slots + 嵌入)、peek + peek_semantic、SAT 桥接、init_pml 赋值从 -1(未定)开始。
  • Q-promise 演进为 qpromise_* + libqpromise.so;原型 QMemNode / q_mem_* API 已移除。
  • Stellar 技能 / skill.ts 已对齐,支持将链下 CodeworkPayload 哈希写入现有 pmll-anchor(ABI 未变)。
  • MCP 服务优先使用 MCPServer,并在不可用时回退到 FastMCP;Q-promise MCP 演示会加载 libqpromise.so。
pypm 0.0.3-dev(2025 年 6 月 25 日)

新增与改进

区域更新内容
统一源文件将 v0.0.1 + v0.0.2 合并到单个 pypm.c 文件中,简化构建流程。
版本升级CLI 现在报告 0.0.3-dev。
工作区覆盖遵循 PYP_WORKSPACE_ROOT,并仍会向上查找 pypm-workspace.toml。
Doctor v2.1统计问题数量并以该数量作为退出码;通过 here-doc 执行内联 Python 探测。
Sandbox v2.1新增 -d <DIR> 标志;默认值仍为 mkdtemp。
插件获取器加固安全创建 ~/.pypm/plugins;HTTP 4xx/5xx 错误使用 CURLOPT_FAILONERROR;保留插件退出码。
Hermetic bundle 标志无论标志顺序如何,pypylock -o <file> 都能正常工作;默认值为 dist/venv.tar.gz。
错误呈现fatal() 现在通过 perror 显示 errno;dlopen/curl 错误会向上传递。

修复

  • 子命令后的 CLI 标志有时会被 getopt 跳过 → 解析前设置 optind = 2。
  • 插件加载器在 dlsym 失败时仍返回成功 → 现在会返回非零值并关闭句柄。
  • 工作区扫描不再覆盖后续 getcwd() 调用所用的 cwd。

不兼容变更

  1. pypm version 现在是子命令(而非 --version 标志)。
  2. doctor 的退出码现在可以大于 1(表示问题数量)。

迁移(0.0.2 → 0.0.3-dev)

如果你曾……现在请执行
./pypm doctor && echo OK检查 [[ $? -eq 0 ]] 或解析数字计数。
使用 pypm_v002.c / pypm_v001.c改用 pypm.c,并执行 make clean && make。
硬编码 dist/venv.tar.gz 路径使用 -o 标志指定自定义输出路径。

已知问题

  • Windows 构建需要:LoadLibraryW、_mktemp_s、bsdtar.exe 回退方案(#22)。
  • pypylock 依赖 shell tar;计划在 0.0.4 中移植 libarchive。
  • WASI/Rust/OpenSSL 检查目前仅为提示性桩。

pmll-memory-mcp 1.0.1
  • 版本升级 — 从 1.0.0 升级至 1.0.1,以修复 PyPI 发布问题(1.0.0 已存在于 PyPI)。
  • 更新项目描述 — PyPI 和 npm 软件包描述现在加入了“in Claude Sonnet/Opus agent tasks”,以匹配 mcp/README.md 中的标语。
  • 刷新 README — PPM README.md 的 MCP 部分已更新,包含完整的工具参考、带 TypeScript 示例的 peek() 模式、VS Code MCP 配置,以及来自 mcp/README.md 的配套服务表。
pmll-memory-mcp 1.0.0
  • Context+ 集成 — 改造了 6 个长期记忆图工具,源自 Context+,作者为 @ForLoopCodes:upsert_memory_node、 create_relation、search_memory_graph、prune_stale_links、 add_interlinked_context、retrieve_with_traversal。
  • 解决方案引擎 — 新增 2 个工具和 1 个状态工具,用于连接短期 KV 缓存 与长期记忆图:resolve_context、promote_to_long_term、 memory_status。
  • GraphQL 工具 — 提供 graphql 工具,以灵活地访问查询和变更操作。
  • 共 15 个工具(5 个短期 KV + 1 个 GraphQL + 6 个长期记忆图 + 3 个解决方案引擎)。
  • 稳定哈希嵌入(维度固定、不共享词汇表),支持在记忆图中进行余弦相似度搜索。
  • 对图边进行时间衰减评分(e^(-λt)),并自动清理。
  • 批量添加上下文时自动建立相似度链接(余弦相似度 ≥ 0.72)。
  • 统一的上下文解析路径:短期 → 长期 → 未命中。
pmll-memory-mcp 0.2.0
  • 首次提交到 MCP Registry。
  • 提供五个工具:init、peek、set、resolve、flush。
  • 使用 TypeScript KV 存储,镜像 PMLL.c::memory_silo_t。
  • Q-promise 注册表(历史版本);当前 C API 为 qpromise_* / libqpromise.so。
  • 支持持久卷的 Docker 多阶段镜像。
  • 随附的 Unstoppable Domains MCP 服务位于 mcp/unstoppable-domains/。

pypm 0.0.2 (25 Jun 2025)

工作区自动检测、Doctor v2、沙盒升级、添加/运行插件、pypylock -o。 重大变更:移除了 --version 标志;存在问题时,doctor 会以非零状态码退出。

pypm 0.0.1 (23 Jun 2025)

初始概念验证——单文件 CLI,包含 doctor、sandbox、plugin 和 pypylock。


🗺 路线图

版本计划功能
0.0.4Lockfile 解析器 + wheel 复制器,用于创建真正隔离的捆绑包
0.0.5基于 libsolv 的依赖解析器
0.1.0跨平台 shim(Windows / macOS)
0.1.1WASI 工具链检测与 wheel 优先选择
futureSAT 依赖求解器、并行 wheel 缓存、工作区、WASM 解析

🤝 贡献与赞助

欢迎提交拉取请求!请在以下地址提交问题和 PR:
https://github.com/drQedwards/PPM/issues

如果你觉得 PPM 或 pmll-memory-mcp 有用,请考虑支持开发:

GitHub Sponsors Buy Me a Coffee CoinGecko Portfolio


由 Dr. Q Josef Kurk Edwards 构建——借助共享的 PMLL 内存栈,让 Python 打包变得快速、确定且易于改造。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。