@ontologic/pillowfort-agent 1.1.2 → 1.1.4
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/docs/agents/index.md +7 -7
- package/docs/agents/security.md +18 -0
- package/docs/agents/workflows.md +1 -1
- package/package.json +3 -2
- package/scripts/agent-mcp.mjs +16 -13
- package/scripts/agent-runtime.mjs +14 -0
- package/scripts/agent-sdk.mjs +2 -0
- package/scripts/agent.mjs +2 -13
package/docs/agents/index.md
CHANGED
|
@@ -128,13 +128,13 @@ Anonymous requests to `/mcp` return 401 with OAuth discovery; this is not a manu
|
|
|
128
128
|
|
|
129
129
|
## Local MCP: keep the runtime under your control
|
|
130
130
|
|
|
131
|
-
The local package is `@ontologic/pillowfort-agent` version `1.1.
|
|
131
|
+
The local package is `@ontologic/pillowfort-agent` version `1.1.4`; source and MCP Registry ownership remain under GitHub `slee1996`. It connects directly to production without building or hosting the app. Use patched supported Node. [Release identity](https://about.pillowfort.xyz/agents/release.json) records the source tag and catalog digest; the deployed app exposes the same identity at `/agents-release.json`.
|
|
132
132
|
|
|
133
133
|
```sh
|
|
134
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
135
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
136
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
137
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
134
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent install-browser
|
|
135
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent doctor --url https://pillowfort.xyz
|
|
136
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent discover --url https://pillowfort.xyz
|
|
137
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent mcp --url https://pillowfort.xyz
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
Review downloaded code before running it. Browser installation is explicit; `doctor` creates no rooms. Keep the MCP process running while sessions are in use. Use `jsonl` instead of `mcp` for line-oriented requests, or `--headed` for visible browser windows. The local CLI's `--url` selects the app origin, not the hosted MCP URL. If your npm configuration redirects the `@ontologic` scope elsewhere, explicitly select npmjs.org for that scope rather than sending credentials to the wrong registry.
|
|
@@ -150,7 +150,7 @@ Local Codex configuration:
|
|
|
150
150
|
```toml
|
|
151
151
|
[mcp_servers.pillowfort]
|
|
152
152
|
command = "npm"
|
|
153
|
-
args = ["exec", "--yes", "--package=@ontologic/pillowfort-agent@1.1.
|
|
153
|
+
args = ["exec", "--yes", "--package=@ontologic/pillowfort-agent@1.1.4", "--", "pillowfort-agent", "mcp", "--url", "https://pillowfort.xyz"]
|
|
154
154
|
startup_timeout_sec = 120
|
|
155
155
|
tool_timeout_sec = 60
|
|
156
156
|
```
|
|
@@ -160,7 +160,7 @@ Local VS Code uses `type: "stdio"`, `command: "npm"`, and the same argument arra
|
|
|
160
160
|
A bounded, real two-agent demonstration is available:
|
|
161
161
|
|
|
162
162
|
```sh
|
|
163
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
163
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent autonomous --url https://pillowfort.xyz
|
|
164
164
|
```
|
|
165
165
|
|
|
166
166
|
Running it authorizes one room, a private invitation between its isolated host/guest, exact fingerprint approval, two encrypted messages, and room teardown. It prints safe step outcomes, not invitations or transcripts. It does not send invitations to external recipients.
|
package/docs/agents/security.md
CHANGED
|
@@ -58,6 +58,24 @@ These versions reject the compromised October 2026 eMudhra/emSign TLS chains,
|
|
|
58
58
|
including cross-signed chains. Update the runtime binaries as well as OS/browser
|
|
59
59
|
trust stores; never disable certificate verification to work around a failure.
|
|
60
60
|
|
|
61
|
+
Release 1.1.4 pins Playwright 1.65.0 with Chromium 158.0.8127.18. Upgrade the
|
|
62
|
+
package and explicitly rerun `install-browser`; an older cached browser is not
|
|
63
|
+
patched by updating npm metadata alone. This replaces the browser affected by
|
|
64
|
+
the known-exploited V8 CVEs CVE-2026-11645, CVE-2026-85046, and CVE-2026-87491.
|
|
65
|
+
The Node/Bun minimums above also include the Brotli fix for CVE-2026-111497.
|
|
66
|
+
The CLI and direct SDK constructor enforce the same Node release policy before
|
|
67
|
+
browser startup or an app connection. Runtime package managers and unrelated
|
|
68
|
+
scripts are outside that guard: upgrade the actual Node and Bun executables.
|
|
69
|
+
|
|
70
|
+
The MLS adapter supports only ciphersuite 1
|
|
71
|
+
(X25519/AES-128-GCM/SHA-256/Ed25519). Its pinned providers exclude unused
|
|
72
|
+
Weierstrass-curve backends and their affected `crypto-bigint` dependency
|
|
73
|
+
([RUSTSEC-2026-0387](https://rustsec.org/advisories/RUSTSEC-2026-0387.html)).
|
|
74
|
+
Other ciphersuites, signature schemes, and HPKE configurations fail closed;
|
|
75
|
+
there is no fallback to a different algorithm. The rebuilt WASM retains the
|
|
76
|
+
existing room wire and snapshot formats. Maintained timer dependencies replace
|
|
77
|
+
`instant` and `pin-utils`; neither maintenance notice was a confirmed exploit.
|
|
78
|
+
|
|
61
79
|
Each room session is an isolated ephemeral browser context with its own device identity and MLS state. Session storage is not a durable account. `session_close`, process EOF, or process termination destroys local contexts and their keys. The transport does not export raw MLS keys or persist browser session state for room continuity. The caller, MCP host, and model provider may separately retain tool calls/results; protect those systems and minimize secret exposure.
|
|
62
80
|
|
|
63
81
|
The optional CMS context is separate and uses normal authenticated permissions. Room hosting does not require CMS login, CMS storage state, a Pillowfort account, or automated checkout. Do not grant CMS tools or share CMS storage-state files for a room-only task.
|
package/docs/agents/workflows.md
CHANGED
|
@@ -9,7 +9,7 @@ An agent may host its own room and invite people or other agents under the calle
|
|
|
9
9
|
Use local or hosted MCP tools with the same session/input envelope. Authenticate the hosted endpoint as described in the [setup guide](https://about.pillowfort.xyz/agents/index.md). For the local JSON-lines interface, keep this process running:
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
12
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent jsonl --url https://pillowfort.xyz
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
The examples below are JSON-lines requests. In MCP, invoke the value of `tool` with the object in `arguments`; omit the JSON-lines envelope and `id`. Replace capitalized placeholders with values obtained at the stated step. They are not real room IDs or credentials. **Do not pipe all examples blindly:** creation, membership, and delivery are asynchronous, and later steps require fresh observations.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ontologic/pillowfort-agent",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Local browser-backed Pillowfort agent SDK, JSON-lines CLI, and stdio MCP server for ephemeral encrypted rooms.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"files": [
|
|
31
31
|
"scripts/agent.mjs",
|
|
32
32
|
"scripts/agent-sdk.mjs",
|
|
33
|
+
"scripts/agent-runtime.mjs",
|
|
33
34
|
"scripts/agent-browser.mjs",
|
|
34
35
|
"scripts/agent-common.mjs",
|
|
35
36
|
"scripts/agent-tools.mjs",
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
],
|
|
44
45
|
"dependencies": {
|
|
45
46
|
"@modelcontextprotocol/sdk": "1.32.2",
|
|
46
|
-
"playwright": "1.
|
|
47
|
+
"playwright": "1.65.0"
|
|
47
48
|
},
|
|
48
49
|
"publishConfig": {
|
|
49
50
|
"access": "public",
|
package/scripts/agent-mcp.mjs
CHANGED
|
@@ -9,9 +9,9 @@ import { AGENT_INSTRUCTIONS, AGENT_RESOURCES, listAgentPrompts, readAgentResourc
|
|
|
9
9
|
/** Dynamic JSON Schema catalogs require the SDK's lower-level Server API. */
|
|
10
10
|
export function createAgentMcpServer({
|
|
11
11
|
agent, tools = [], instructions = AGENT_INSTRUCTIONS, resources = AGENT_RESOURCES,
|
|
12
|
-
resourceLoader = readAgentResource, roomTools, includeCMS = true, maxActiveCalls = 64, jsonSchemaValidator, onToolError,
|
|
12
|
+
resourceLoader = readAgentResource, roomTools, includeCMS = true, maxActiveCalls = 64, jsonSchemaValidator, onToolError, observeToolCall,
|
|
13
13
|
}) {
|
|
14
|
-
const server = new Server({ name: 'pillowfort', version: '1.1.
|
|
14
|
+
const server = new Server({ name: 'pillowfort', version: '1.1.4' }, {
|
|
15
15
|
capabilities: { tools: {}, resources: {}, prompts: {} },
|
|
16
16
|
instructions,
|
|
17
17
|
jsonSchemaValidator,
|
|
@@ -35,17 +35,20 @@ export function createAgentMcpServer({
|
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
37
|
server.setRequestHandler(CallToolRequestSchema, async request => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
const invoke = async () => {
|
|
39
|
+
if (activeCalls >= maxActiveCalls) return errorResult(new AgentError('BUSY', 'Too many pending tool calls. Wait for existing calls to finish.', true));
|
|
40
|
+
activeCalls++;
|
|
41
|
+
try {
|
|
42
|
+
let tool;
|
|
43
|
+
try { tool = (await registry()).get(request.params.name); }
|
|
44
|
+
catch (error) { return errorResult(error); }
|
|
45
|
+
if (!tool) throw new McpError(ErrorCode.InvalidParams, 'Unknown tool. Call tools/list to discover available tools.');
|
|
46
|
+
const result = await tool.invoke(request.params.arguments ?? {});
|
|
47
|
+
if (result.ok === false) onToolError?.(result.error);
|
|
48
|
+
return result;
|
|
49
|
+
} finally { activeCalls--; }
|
|
50
|
+
};
|
|
51
|
+
return toolResult(await (observeToolCall ? observeToolCall(request.params.name, invoke) : invoke()));
|
|
49
52
|
});
|
|
50
53
|
return server;
|
|
51
54
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AgentError } from './agent-common.mjs';
|
|
2
|
+
|
|
3
|
+
/** Enforce the patched Node release policy before local browser use. */
|
|
4
|
+
export function checkRuntime() {
|
|
5
|
+
const [major, minor, patch] = process.versions.node.split('.').map(Number);
|
|
6
|
+
const supported = (major === 22 && (minor > 23 || (minor === 23 && patch >= 4)))
|
|
7
|
+
|| (major === 24 && (minor > 22 || (minor === 22 && patch >= 1)))
|
|
8
|
+
|| (major === 26 && (minor > 12 || (minor === 12 && patch >= 1)))
|
|
9
|
+
|| major > 26;
|
|
10
|
+
if (!supported) {
|
|
11
|
+
throw new AgentError('UNSUPPORTED_RUNTIME', 'Pillowfort agent requires patched Node 22.23.4+, 24.22.1+, or 26.12.1+ on a supported release line. Upgrade Node before installing Chromium or connecting to an app.');
|
|
12
|
+
}
|
|
13
|
+
return { node: process.version, minimum: '^22.23.4 || ^24.22.1 || >=26.12.1', platform: process.platform, arch: process.arch };
|
|
14
|
+
}
|
package/scripts/agent-sdk.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { chromium } from 'playwright';
|
|
2
2
|
import { PillowfortBrowserAgent } from './agent-browser.mjs';
|
|
3
3
|
import { AgentError } from './agent-common.mjs';
|
|
4
|
+
import { checkRuntime } from './agent-runtime.mjs';
|
|
4
5
|
|
|
5
6
|
export { AgentError, errorResult, boundedJSON, validateBaseURL, MAX_INPUT_BYTES, MAX_OUTPUT_BYTES, MAX_WAIT_MS } from './agent-common.mjs';
|
|
6
7
|
|
|
@@ -8,6 +9,7 @@ export { AgentError, errorResult, boundedJSON, validateBaseURL, MAX_INPUT_BYTES,
|
|
|
8
9
|
export class PillowfortAgent extends PillowfortBrowserAgent {
|
|
9
10
|
/** @param {Omit<import('./agent-browser.mjs').BrowserAgentOptions, 'launchBrowser'> & {headed?: boolean}} options */
|
|
10
11
|
constructor({ headed = false, ...options } = {}) {
|
|
12
|
+
checkRuntime();
|
|
11
13
|
super({
|
|
12
14
|
...options,
|
|
13
15
|
launchBrowser: async ({ timeout }) => {
|
package/scripts/agent.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import { realpathSync } from 'node:fs';
|
|
|
5
5
|
import { createRequire } from 'node:module';
|
|
6
6
|
import path from 'node:path';
|
|
7
7
|
import { PillowfortAgent, AgentError, errorResult, boundedJSON, MAX_INPUT_BYTES, MAX_OUTPUT_BYTES } from './agent-sdk.mjs';
|
|
8
|
+
import { checkRuntime } from './agent-runtime.mjs';
|
|
8
9
|
import { createAgentToolRegistry } from './agent-tools.mjs';
|
|
9
10
|
import { runAgentMcp } from './agent-mcp.mjs';
|
|
10
11
|
|
|
@@ -12,7 +13,7 @@ const HELP = `Pillowfort agent CLI — real ephemeral encrypted browser sessions
|
|
|
12
13
|
|
|
13
14
|
This local CLI requires Node 22.23.4+, 24.22.1+, or 26.12.1+ on a supported release line, and Chromium. Hosted MCP and native WebMCP are separate connection choices: https://about.pillowfort.xyz/agents
|
|
14
15
|
Version-pinned npm package:
|
|
15
|
-
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.
|
|
16
|
+
npm exec --yes --package=@ontologic/pillowfort-agent@1.1.4 -- pillowfort-agent --help
|
|
16
17
|
|
|
17
18
|
Commands with the installed executable:
|
|
18
19
|
pillowfort-agent install-browser
|
|
@@ -166,18 +167,6 @@ function diagnostic(error) {
|
|
|
166
167
|
process.stderr.write(`${failure.code}: ${failure.message}\n`);
|
|
167
168
|
}
|
|
168
169
|
|
|
169
|
-
function checkRuntime() {
|
|
170
|
-
const [major, minor, patch] = process.versions.node.split('.').map(Number);
|
|
171
|
-
const supported = (major === 22 && (minor > 23 || (minor === 23 && patch >= 4)))
|
|
172
|
-
|| (major === 24 && (minor > 22 || (minor === 22 && patch >= 1)))
|
|
173
|
-
|| (major === 26 && (minor > 12 || (minor === 12 && patch >= 1)))
|
|
174
|
-
|| major > 26;
|
|
175
|
-
if (!supported) {
|
|
176
|
-
throw new AgentError('UNSUPPORTED_RUNTIME', 'Pillowfort agent requires patched Node 22.23.4+, 24.22.1+, or 26.12.1+ on a supported release line. Upgrade Node before installing Chromium or connecting to an app.');
|
|
177
|
-
}
|
|
178
|
-
return { node: process.version, minimum: '^22.23.4 || ^24.22.1 || >=26.12.1', platform: process.platform, arch: process.arch };
|
|
179
|
-
}
|
|
180
|
-
|
|
181
170
|
function playwrightInstallation() {
|
|
182
171
|
const require = createRequire(import.meta.url);
|
|
183
172
|
return {
|