relic-mcp 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.
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "relic",
12
12
  "description": "Publish a file from your machine as an encrypted, shareable link. The agent encrypts locally, uploads only ciphertext, and hands back a URL whose fragment holds the key, so the service stores something it cannot read.",
13
- "version": "0.3.2",
13
+ "version": "0.3.3",
14
14
  "source": "./",
15
15
  "author": {
16
16
  "name": "The Bushido Collective",
@@ -21,6 +21,6 @@
21
21
  }
22
22
  ],
23
23
  "metadata": {
24
- "version": "0.3.2"
24
+ "version": "0.3.3"
25
25
  }
26
26
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "relic",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Publish a file from your machine as an encrypted, shareable link. The agent encrypts locally, uploads only ciphertext, and hands back a URL whose fragment holds the key, so the service stores something it cannot read.",
5
5
  "mcpServers": "./mcp-servers.json",
6
6
  "author": {
package/dist/relic-mcp.js CHANGED
@@ -1163,10 +1163,11 @@ var DESCRIBE_TOOL_NAME = "relic_describe_client";
1163
1163
  var REPUBLISH_TOOL_NAME = "relic_republish";
1164
1164
  var LOOKUP_TOOL_NAME = "relic_lookup_source";
1165
1165
  var MAX_TTL_DAYS = 3650;
1166
+ var VERSION_HISTORY_DISCLOSURE = "Anyone holding a relic's link can fetch every version it has ever held, " + "so republishing does not withdraw earlier content.";
1166
1167
  var TOOL_DEFINITION = {
1167
1168
  name: TOOL_NAME,
1168
1169
  title: "Publish a relic",
1169
- description: "Encrypt a file on this machine and publish it as a new relic, returning " + "a shareable URL. Publishing an update this way costs a second URL that " + "nobody holding the first one will ever see; use relic_republish instead " + "so the existing URL keeps working. The encryption key is generated " + "locally and never sent to the service. Takes a filesystem path, never " + "inline content.",
1170
+ description: "Encrypt a file on this machine and publish it as a new relic, returning " + "a shareable URL. Publishing an update this way costs a second URL that " + "nobody holding the first one will ever see; use relic_republish instead " + "so the existing URL keeps working. " + VERSION_HISTORY_DISCLOSURE + " The encryption key is generated locally and never sent to the service. " + "Takes a filesystem path, never " + "inline content.",
1170
1171
  inputSchema: {
1171
1172
  type: "object",
1172
1173
  properties: {
@@ -1227,7 +1228,7 @@ var TOOL_DEFINITION = {
1227
1228
  var REPUBLISH_TOOL_DEFINITION = {
1228
1229
  name: REPUBLISH_TOOL_NAME,
1229
1230
  title: "Republish a relic",
1230
- description: "Publish a new version of a relic this machine originally published, " + "encrypting under the same key so the existing share URL keeps working. " + "Only possible from the machine that holds the relic's key and publish " + "token; a relic that was taken down can never be revived.",
1231
+ description: "Publish a new version of a relic this machine originally published, " + "encrypting under the same key so the existing share URL keeps working. " + VERSION_HISTORY_DISCLOSURE + " Only possible from the machine that holds the relic's key and publish " + "token; a relic that was taken down can never be revived.",
1231
1232
  inputSchema: {
1232
1233
  type: "object",
1233
1234
  properties: {
@@ -1346,7 +1347,7 @@ var DESCRIBE_TOOL_DEFINITION = {
1346
1347
  additionalProperties: false
1347
1348
  }
1348
1349
  };
1349
- var SERVER_VERSION = "0.3.2";
1350
+ var SERVER_VERSION = "0.3.3";
1350
1351
  var SERVER_INFO = {
1351
1352
  name: "relic",
1352
1353
  title: "Relic",
@@ -1359,7 +1360,7 @@ Five things that change how you should act:
1359
1360
 
1360
1361
  1. The link is the credential. Anyone holding it, fragment included, can read the file. Do not paste it into a tracker, a log, or a public channel.
1361
1362
  2. Publishing puts the key in this transcript. That is structural rather than a defect, and worth saying plainly when you hand the link over.
1362
- 3. If a source was published before, use relic_republish so its URL keeps working. Publishing it as new costs a second URL that nobody holding the first one will ever see. relic_publish refuses by default, relic_lookup_source recovers the id, and force_new is only for a deliberate second link.
1363
+ 3. Check existing sources with relic_lookup_source. Use relic_republish when found; relic_publish otherwise costs a second URL. ${VERSION_HISTORY_DISCLOSURE}
1363
1364
  4. A relic can be republished only from the machine that published it, which is where its key and publish token are stored. Anywhere else it refuses, and no retry changes that.
1364
1365
  5. Rendered HTML and JSX run in an isolated frame with no network access. Inline the styles, scripts, fonts, and images a page needs, because a CDN reference renders as nothing. Decide that before you write the file.`;
1365
1366
  async function handleMessage(message, deps) {
@@ -1486,7 +1487,8 @@ async function callTool(id2, params, deps) {
1486
1487
 
1487
1488
  ` + (result.relic_expires_at === null ? "It does not expire; it is kept until it is deleted. " : `Expires ${result.relic_expires_at}. `) + "Anyone with this link, " + "including its fragment, can read the file. The key is in the " + "fragment and it is now in this transcript. This machine can " + `republish it later; the link will not change.
1488
1489
  ` + isolationNote(result.renderer_class) + `What Relic knows: ${result.disclosure_url}`
1489
- }
1490
+ },
1491
+ { type: "text", text: VERSION_HISTORY_DISCLOSURE }
1490
1492
  ],
1491
1493
  structuredContent: result,
1492
1494
  isError: false
@@ -1564,7 +1566,8 @@ async function callRepublish(id2, params, deps) {
1564
1566
 
1565
1567
  ` + (result.relic_expires_at === null ? "The relic does not expire; it is kept until it is deleted." : `Expires ${result.relic_expires_at}.`) + `
1566
1568
  ` + `What Relic knows: ${result.disclosure_url}`
1567
- }
1569
+ },
1570
+ { type: "text", text: VERSION_HISTORY_DISCLOSURE }
1568
1571
  ],
1569
1572
  structuredContent: result,
1570
1573
  isError: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "relic-mcp",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Publish a file as an encrypted relic. The key is generated on your machine and never sent to the service.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -39,6 +39,11 @@ Do not publish an update as a new relic. That costs a second URL that nobody
39
39
  holding the first one will ever see. `relic_publish` enforces this: when local
40
40
  state matches the source, it refuses and points to `relic_republish`.
41
41
 
42
+ Anyone holding a relic's link can fetch every version it has ever held, so
43
+ republishing does not withdraw earlier content. Republishing moves the artifact
44
+ forward without retracting what came before. Deleting the relic still removes
45
+ every version.
46
+
42
47
  Optional arguments worth knowing:
43
48
 
44
49
  - `filename` overrides the display name shown to the recipient.
package/src/server.ts CHANGED
@@ -105,6 +105,10 @@ export const LOOKUP_TOOL_NAME = 'relic_lookup_source';
105
105
  */
106
106
  const MAX_TTL_DAYS = 3650;
107
107
 
108
+ const VERSION_HISTORY_DISCLOSURE =
109
+ "Anyone holding a relic's link can fetch every version it has ever held, " +
110
+ 'so republishing does not withdraw earlier content.';
111
+
108
112
  export const TOOL_DEFINITION = {
109
113
  name: TOOL_NAME,
110
114
  title: 'Publish a relic',
@@ -112,8 +116,10 @@ export const TOOL_DEFINITION = {
112
116
  'Encrypt a file on this machine and publish it as a new relic, returning ' +
113
117
  'a shareable URL. Publishing an update this way costs a second URL that ' +
114
118
  'nobody holding the first one will ever see; use relic_republish instead ' +
115
- 'so the existing URL keeps working. The encryption key is generated ' +
116
- 'locally and never sent to the service. Takes a filesystem path, never ' +
119
+ 'so the existing URL keeps working. ' +
120
+ VERSION_HISTORY_DISCLOSURE +
121
+ ' The encryption key is generated locally and never sent to the service. ' +
122
+ 'Takes a filesystem path, never ' +
117
123
  'inline content.',
118
124
  inputSchema: {
119
125
  type: 'object',
@@ -187,7 +193,8 @@ export const REPUBLISH_TOOL_DEFINITION = {
187
193
  description:
188
194
  'Publish a new version of a relic this machine originally published, ' +
189
195
  'encrypting under the same key so the existing share URL keeps working. ' +
190
- "Only possible from the machine that holds the relic's key and publish " +
196
+ VERSION_HISTORY_DISCLOSURE +
197
+ " Only possible from the machine that holds the relic's key and publish " +
191
198
  'token; a relic that was taken down can never be revived.',
192
199
  inputSchema: {
193
200
  type: 'object',
@@ -369,10 +376,9 @@ Five things that change how you should act:
369
376
  the file. Do not paste it into a tracker, a log, or a public channel.
370
377
  2. Publishing puts the key in this transcript. That is structural rather than \
371
378
  a defect, and worth saying plainly when you hand the link over.
372
- 3. If a source was published before, use relic_republish so its URL keeps \
373
- working. Publishing it as new costs a second URL that nobody holding the first \
374
- one will ever see. relic_publish refuses by default, relic_lookup_source \
375
- recovers the id, and force_new is only for a deliberate second link.
379
+ 3. Check existing sources with relic_lookup_source. Use relic_republish when \
380
+ found; relic_publish otherwise costs a second URL. \
381
+ ${VERSION_HISTORY_DISCLOSURE}
376
382
  4. A relic can be republished only from the machine that published it, which \
377
383
  is where its key and publish token are stored. Anywhere else it refuses, and \
378
384
  no retry changes that.
@@ -601,6 +607,7 @@ async function callTool(
601
607
  isolationNote(result.renderer_class) +
602
608
  `What Relic knows: ${result.disclosure_url}`,
603
609
  },
610
+ { type: 'text', text: VERSION_HISTORY_DISCLOSURE },
604
611
  ],
605
612
  structuredContent: result,
606
613
  isError: false,
@@ -732,6 +739,7 @@ async function callRepublish(
732
739
  '\n' +
733
740
  `What Relic knows: ${result.disclosure_url}`,
734
741
  },
742
+ { type: 'text', text: VERSION_HISTORY_DISCLOSURE },
735
743
  ],
736
744
  structuredContent: result,
737
745
  isError: false,