@rsrsai/magpie 0.3.2 → 0.3.3
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/README.md +9 -9
- package/docs/FEATURES.md +1 -1
- package/docs/REVIEW-RESPONSE-0.3.1.md +9 -3
- package/lock.mjs +19 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
0.3.0 每轮自动存检默认开启,使用前必须配置生成模型。没有模型、主动关闭归档或处于只读模式时,插件会说明未满足完整读存流程;不会把待处理当作已存。原始对话采集仍默认关闭。网关不会取得或复用客户端私有登录凭据,也不会注册或执行客户端工具。
|
|
18
18
|
|
|
19
|
-
[GitHub Releases](https://github.com/risense-ai/respire-magpie/releases)
|
|
19
|
+
[npm](https://www.npmjs.com/package/@rsrsai/magpie) 已提供公开包,首次发布版本为 0.3.2。[GitHub Releases](https://github.com/risense-ai/respire-magpie/releases) 同时提供分发包与 SHA256SUMS。
|
|
20
20
|
|
|
21
21
|
## 让 AI 安装
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
复制给本地助手:
|
|
24
24
|
|
|
25
25
|
```text
|
|
26
|
-
|
|
26
|
+
请从 npm 安装 @rsrsai/magpie 作为 Respire Magpie 插件。
|
|
27
27
|
先读 README.md,检查 Magpie、Bun 和 rsrs --client-only status --json。
|
|
28
28
|
复用现有 Respire 账号、模型和 Runtime;不自行安装、启动或升级 Runtime,不索取凭据。
|
|
29
|
-
检查 magpie plugin list --json,避免重复;尚未安装时执行 magpie plugin add
|
|
30
|
-
|
|
29
|
+
检查 magpie plugin list --json,避免重复;尚未安装时执行 magpie plugin add @rsrsai/magpie。
|
|
30
|
+
安装完整包,不只安装 respire.hooks.mjs。保留无关插件和配置,不自行升级 Magpie。
|
|
31
31
|
在插件页面配置实际 Runtime、项目和独立生成模型。archive 默认开启,每轮需保存过程日记;capture 原始采集保持关闭。未授权后台处理时先设 readOnly 并说明完整读存尚未启用。
|
|
32
32
|
如启用 archive,说明发送的消息、工具结果和相关记忆、额外模型用量及本地状态存储。
|
|
33
33
|
在我自己的终端环境配置密钥;页面仅填写环境变量名称,不接收密钥。
|
|
@@ -41,10 +41,10 @@
|
|
|
41
41
|
|
|
42
42
|
```powershell
|
|
43
43
|
rsrs --client-only status --json
|
|
44
|
-
magpie plugin add
|
|
44
|
+
magpie plugin add @rsrsai/magpie
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
需要本地安装时,可在完整插件目录执行 `magpie plugin add .`,或执行 `magpie plugin add <插件完整目录>`。本地安装引用此目录,不要移动或删除它。可检出仓库,也可解压 Release tgz 后安装其中的 package 目录。目录必须包含 package.json 和全部运行模块。
|
|
48
48
|
|
|
49
49
|
在 respire-memory 插件页面配置 Runtime、项目和开关。页面只保存配置,不检测连接或模型。原生 `magpie plugin options <标识>` 也可修改;本地安装的实际标识请先通过插件列表确认。
|
|
50
50
|
|
|
@@ -152,8 +152,8 @@ setup 检查默认 Runtime、模式及状态目录,不发模型请求或安装
|
|
|
152
152
|
|
|
153
153
|
- main 与 PR 运行 Windows、Linux、macOS 检查,覆盖四协议、HTTP 模拟服务、独立 worker、受限工具、加密状态、只读、未知写入及分段来源。
|
|
154
154
|
- 推送 v<package.version> 标签触发三系统验证,通过后自动上传 tgz 与 SHA256SUMS 到 GitHub Release;预发布标签标为 prerelease。
|
|
155
|
-
- npm job
|
|
156
|
-
-
|
|
155
|
+
- npm 首发 0.3.2 通过用户 Chrome 的双重验证完成;后续 npm job 使用 OIDC 和 provenance,不上传长效 token。
|
|
156
|
+
- 可信发布绑定 risense-ai/respire-magpie 的 release.yml,允许直接 publish;仓库变量 NPM_PUBLISH_ENABLED=true 控制 npm job。稳定版使用 latest,含连字符版本使用 next。只有同版本三系统验证与 GitHub Release 成功后才运行 npm 发布。
|
|
157
157
|
- npm run check 做检查;npm run release:package 打包和生成校验,发布环境还校验标签与版本一致。
|
|
158
158
|
|
|
159
159
|
## 排查与验收状态
|
package/docs/FEATURES.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# respire-memory capabilities and boundaries
|
|
2
2
|
|
|
3
|
-
Applies to **v0.3.2**. See the [review repair report](REVIEW-RESPONSE-0.3.1.md), [policy-correction report](TEST-REPORT-0.3.0.md) and [historical v0.2.1 acceptance report](TEST-REPORT.md). A working memory round trip is not proof of full engine-policy compliance.
|
|
3
|
+
Applies to **v0.3.2–v0.3.3**. v0.3.3 handles observed Windows/macOS Bun errors during concurrent lock acquisition within the existing deadline, and updates npm distribution documentation. See the [review repair report](REVIEW-RESPONSE-0.3.1.md), [policy-correction report](TEST-REPORT-0.3.0.md) and [historical v0.2.1 acceptance report](TEST-REPORT.md). A working memory round trip is not proof of full engine-policy compliance.
|
|
4
4
|
|
|
5
5
|
## Agent self-evolution through experience
|
|
6
6
|
|
|
@@ -23,8 +23,6 @@ The first v0.3.2 main-branch CI run passed macOS/Linux but exposed a separate fi
|
|
|
23
23
|
| 11: community README / upstream reports | Community README is rewritten around its actual package, CI entry, monorepo dist/provenance and limitations. Personal paths and upstream release-workflow instructions are removed. Upstream reports are linked and explicitly labeled, not packaged as community CI evidence |
|
|
24
24
|
| 12: placement / name | Entry/README row moved after the existing memory-hook entries. The requested product/display name respire-memory is retained rather than renamed to Respire |
|
|
25
25
|
|
|
26
|
-
## Local verification
|
|
27
|
-
|
|
28
26
|
## Final automated verification
|
|
29
27
|
|
|
30
28
|
- [Three-OS upstream CI at 1a080fb](https://github.com/risense-ai/respire-magpie/actions/runs/41192351640): Windows, Linux and macOS passed with Node 24 and Bun 1.3.6, including the discovered adapter and package dry-run.
|
|
@@ -45,6 +43,14 @@ A native local gateway request using the existing real model returned the requir
|
|
|
45
43
|
|
|
46
44
|
Temporary enabling applies to the entire local gateway. Another live session also passed through it during the probe. The original disabled state/options were restored, the private test control lease was revoked, and the unrelated raw copy in this project's verification state was removed. That session's engine memories were not modified. No unrelated session content or IDs are published in this report.
|
|
47
45
|
|
|
48
|
-
##
|
|
46
|
+
## Follow-up found during npm publication
|
|
47
|
+
|
|
48
|
+
The v0.3.3 preflight at 4fc5411 exposed another Windows acquisition race: an owner-file open returned EPERM when empty-directory recovery removed the just-created directory before ownership was published. An earlier main-branch run at 96fd8da also failed at that path, although its separate release verification passed. The passing v0.3.2 runs above therefore did not establish absence of this intermittent failure.
|
|
49
|
+
|
|
50
|
+
The stronger check also exposed Windows scandir EPERM during a recovery probe while a competing release removed the directory. v0.3.3 retries those acquisition-only open/probe failures within the existing deadline; it never enters a critical section without verifying sole ownership. The existing eight-writer check now runs eight batches and verifies all 64 increments. Permanent failures still terminate; unknown/live owners and uncertain writes are not deleted or replayed. npm distribution first published v0.3.2 using Chrome-confirmed authentication; the next patch is used to validate the browser-configured OIDC connection.
|
|
51
|
+
|
|
52
|
+
At 7f170e2, Windows passed, while macOS Bun 1.3.6 reported EINVAL on owner-file open in the four-process contention probe. The same bounded owner-publication retry now includes that observed macOS Bun error. No failed check was skipped or replaced by a same-code rerun.
|
|
53
|
+
|
|
54
|
+
### Remaining host limits
|
|
49
55
|
|
|
50
56
|
The engine's strict before-send persistence requirement still needs an appropriate host callback or a client-owned loop: the current notification is after reply completion. Native desktop rendering, live all-protocol sessions, exhaustive crash/power-loss/account-switch recovery, npm first publication and marketplace approval remain outside the proven result. See the [feature matrix](FEATURES.md) and [0.3.0 correction report](TEST-REPORT-0.3.0.md).
|
package/lock.mjs
CHANGED
|
@@ -41,7 +41,16 @@ export async function acquireLock(path, { waitMs = 5000 } = {}) {
|
|
|
41
41
|
await unlink(join(path, owner)); await removeEmpty(path);
|
|
42
42
|
};
|
|
43
43
|
await unlink(join(path, owner));
|
|
44
|
-
} catch (error) {
|
|
44
|
+
} catch (error) {
|
|
45
|
+
// Concurrent parent removal reports EPERM on Windows and EINVAL on macOS Bun.
|
|
46
|
+
const racedOpen = (process.platform === 'win32' && error.code === 'EPERM')
|
|
47
|
+
|| (process.platform === 'darwin' && process.versions.bun && error.code === 'EINVAL');
|
|
48
|
+
if (racedOpen && error.syscall === 'open' && error.path === join(path, owner)) {
|
|
49
|
+
if (Date.now() >= deadline) throw error;
|
|
50
|
+
await delay(25); continue;
|
|
51
|
+
}
|
|
52
|
+
if (error.code !== 'ENOENT') throw error;
|
|
53
|
+
}
|
|
45
54
|
} catch (error) {
|
|
46
55
|
if (error.code !== 'EEXIST') throw error;
|
|
47
56
|
try {
|
|
@@ -61,7 +70,15 @@ export async function acquireLock(path, { waitMs = 5000 } = {}) {
|
|
|
61
70
|
continue;
|
|
62
71
|
}
|
|
63
72
|
}
|
|
64
|
-
} catch (e) {
|
|
73
|
+
} catch (e) {
|
|
74
|
+
if (['ENOENT', 'EISDIR', 'ENOTDIR'].includes(e.code)) continue;
|
|
75
|
+
// A competing release can leave the lock directory delete-pending during a probe.
|
|
76
|
+
if (process.platform === 'win32' && e.code === 'EPERM' && e.syscall === 'scandir' && e.path === path) {
|
|
77
|
+
if (Date.now() >= deadline) throw e;
|
|
78
|
+
await delay(25); continue;
|
|
79
|
+
}
|
|
80
|
+
throw e;
|
|
81
|
+
}
|
|
65
82
|
}
|
|
66
83
|
if (waitMs === 0 || Date.now() >= deadline) throw new Error('lock-busy');
|
|
67
84
|
await delay(25);
|