prism-mcp-server 20.17.0 → 20.17.1
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 +11 -3
- package/dist/cli.js +9 -7
- package/dist/sync/handoffSync.js +2 -2
- package/dist/tools/sessionMemoryDefinitions.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -138,21 +138,29 @@ or by re-enabling after each run.
|
|
|
138
138
|
<details>
|
|
139
139
|
<summary>Release history (optional)</summary>
|
|
140
140
|
|
|
141
|
+
## What's New in v20.17.1
|
|
142
|
+
|
|
143
|
+
- **Fixes a broken CLI in 20.17.0** — a command-name collision made every
|
|
144
|
+
`prism` CLI invocation exit with a commander error at startup (the MCP
|
|
145
|
+
server was unaffected). The handoff-sync command is `prism handoff …`;
|
|
146
|
+
`prism sync` remains cross-backend data synchronization. If you installed
|
|
147
|
+
20.17.0, update.
|
|
148
|
+
|
|
141
149
|
## What's New in v20.17.0
|
|
142
150
|
|
|
143
151
|
### Cross-Machine Session Handoff — End-to-End Encrypted
|
|
144
152
|
|
|
145
|
-
- **Resume a session on any of your machines.** With `prism
|
|
153
|
+
- **Resume a session on any of your machines.** With `prism handoff enable` (paid,
|
|
146
154
|
off by default), each `session_save_handoff` seals the handoff to all your
|
|
147
155
|
account's device keys and relays the CIPHERTEXT; another machine pulls with
|
|
148
|
-
`sync_pull_handoff` (or `prism
|
|
156
|
+
`sync_pull_handoff` (or `prism handoff pull <project>`) and opens it locally.
|
|
149
157
|
- **The relay stores ciphertext only** — X25519 + AES-256-GCM sealed
|
|
150
158
|
envelopes. No key that opens a handoff ever exists server-side. The channel
|
|
151
159
|
is deliberately separate from savings sync, which carries counters only.
|
|
152
160
|
- **TOFU device pinning** surfaces a compromised relay: sealing to a key this
|
|
153
161
|
machine has never seen warns loudly, keyed on the client-derived recipient
|
|
154
162
|
id so a swapped key can't hide behind a familiar device name.
|
|
155
|
-
- `prism
|
|
163
|
+
- `prism handoff status|devices` to inspect; revoke a lost machine from the portal.
|
|
156
164
|
|
|
157
165
|
## What's New in v20.16.0
|
|
158
166
|
|
package/dist/cli.js
CHANGED
|
@@ -1134,12 +1134,14 @@ program
|
|
|
1134
1134
|
process.exit(1);
|
|
1135
1135
|
}
|
|
1136
1136
|
});
|
|
1137
|
-
// ─── prism
|
|
1138
|
-
// Cross-machine handoff sync controls
|
|
1139
|
-
//
|
|
1137
|
+
// ─── prism handoff ────────────────────────────────────────────
|
|
1138
|
+
// Cross-machine handoff sync controls ('sync' was taken by cross-backend
|
|
1139
|
+
// data synchronization above — a collision the stale local dist hid until
|
|
1140
|
+
// CI built fresh). Push happens automatically on session_save_handoff once
|
|
1141
|
+
// enabled; everything E2E lives in src/crypto/.
|
|
1140
1142
|
program
|
|
1141
|
-
.command('
|
|
1142
|
-
.description('Cross-machine handoff sync: enable | disable | status | pull <project> | devices')
|
|
1143
|
+
.command('handoff <action> [project]')
|
|
1144
|
+
.description('Cross-machine handoff sync (E2E): enable | disable | status | pull <project> | devices')
|
|
1143
1145
|
.action(async (action, project) => {
|
|
1144
1146
|
try {
|
|
1145
1147
|
switch (action) {
|
|
@@ -1150,7 +1152,7 @@ program
|
|
|
1150
1152
|
console.log(action === 'enable'
|
|
1151
1153
|
? 'Handoff sync enabled. On each session_save_handoff, the handoff is sealed to your '
|
|
1152
1154
|
+ 'account devices (end-to-end encrypted — the relay stores ciphertext only) and uploaded. '
|
|
1153
|
-
+ 'Paid plans; disable anytime with: prism
|
|
1155
|
+
+ 'Paid plans; disable anytime with: prism handoff disable'
|
|
1154
1156
|
: 'Handoff sync disabled. Nothing further leaves this machine on this channel.');
|
|
1155
1157
|
return;
|
|
1156
1158
|
}
|
|
@@ -1166,7 +1168,7 @@ program
|
|
|
1166
1168
|
}
|
|
1167
1169
|
case 'pull': {
|
|
1168
1170
|
if (!project) {
|
|
1169
|
-
console.error('Usage: prism
|
|
1171
|
+
console.error('Usage: prism handoff pull <project>');
|
|
1170
1172
|
process.exit(1);
|
|
1171
1173
|
}
|
|
1172
1174
|
const { pullHandoff, renderPulledHandoff } = await import('./sync/handoffSync.js');
|
package/dist/sync/handoffSync.js
CHANGED
|
@@ -232,7 +232,7 @@ export async function pushHandoffFromArgs(args) {
|
|
|
232
232
|
const result = await pushHandoff(project, o);
|
|
233
233
|
if (result.pushed && result.new_devices?.length) {
|
|
234
234
|
console.error(`[handoff-sync] ⚠ NEW sync device(s) on your account: ${result.new_devices.join(", ")}. ` +
|
|
235
|
-
`If you did not add a machine, revoke it: prism
|
|
235
|
+
`If you did not add a machine, revoke it: prism handoff devices`);
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
238
|
export async function pullHandoff(project, fetchImpl = fetch) {
|
|
@@ -289,7 +289,7 @@ export async function pullHandoff(project, fetchImpl = fetch) {
|
|
|
289
289
|
export function renderPulledHandoff(r) {
|
|
290
290
|
if (!r.ok || !r.payload) {
|
|
291
291
|
const why = {
|
|
292
|
-
disabled: "Handoff sync is off on this machine. Enable: prism
|
|
292
|
+
disabled: "Handoff sync is off on this machine. Enable: prism handoff enable",
|
|
293
293
|
no_blob: "No synced handoff exists for this project yet.",
|
|
294
294
|
not_recipient: "A handoff exists but was sealed before this device joined — it will include this machine after the next save elsewhere.",
|
|
295
295
|
not_entitled: "Cross-machine sync needs a paid plan and a signed-in account.",
|
|
@@ -1958,7 +1958,7 @@ export const SYNC_PULL_HANDOFF_TOOL = {
|
|
|
1958
1958
|
description: "Pulls this account's synced handoff for a project from the E2E relay and " +
|
|
1959
1959
|
"opens it with THIS machine's device key. The relay stores ciphertext only; " +
|
|
1960
1960
|
"a handoff is readable here only if it was sealed to this device. Requires " +
|
|
1961
|
-
"handoff sync enabled (prism
|
|
1961
|
+
"handoff sync enabled (prism handoff enable), a paid plan, and a signed-in " +
|
|
1962
1962
|
"account. Push happens automatically on session_save_handoff.",
|
|
1963
1963
|
inputSchema: {
|
|
1964
1964
|
type: "object",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prism-mcp-server",
|
|
3
|
-
"version": "20.17.
|
|
3
|
+
"version": "20.17.1",
|
|
4
4
|
"mcpName": "io.github.dcostenco/prism-coder",
|
|
5
5
|
"description": "Persistent session memory for AI coding agents that never leaves your machine — including the on-device model that reasons over it. Restores your prior decisions, open TODOs, and changed files across sessions; adds associative recall of related past work, semantic drift detection, and local inference. Local-first by default. Works with Claude Code, Cursor, and Codex.",
|
|
6
6
|
"module": "index.ts",
|