@contextvm/sdk 0.9.1 → 0.11.0

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.
Files changed (88) hide show
  1. package/dist/esm/core/constants.d.ts +8 -0
  2. package/dist/esm/core/constants.d.ts.map +1 -1
  3. package/dist/esm/core/constants.js +8 -0
  4. package/dist/esm/core/constants.js.map +1 -1
  5. package/dist/esm/core/index.d.ts +1 -0
  6. package/dist/esm/core/index.d.ts.map +1 -1
  7. package/dist/esm/core/index.js +1 -0
  8. package/dist/esm/core/index.js.map +1 -1
  9. package/dist/esm/core/utils/common-schema.d.ts +25 -0
  10. package/dist/esm/core/utils/common-schema.d.ts.map +1 -0
  11. package/dist/esm/core/utils/common-schema.js +66 -0
  12. package/dist/esm/core/utils/common-schema.js.map +1 -0
  13. package/dist/esm/relay/applesauce-relay-pool.d.ts.map +1 -1
  14. package/dist/esm/relay/applesauce-relay-pool.js +14 -14
  15. package/dist/esm/relay/applesauce-relay-pool.js.map +1 -1
  16. package/dist/esm/transport/call-tool-stream.d.ts +22 -0
  17. package/dist/esm/transport/call-tool-stream.d.ts.map +1 -0
  18. package/dist/esm/transport/call-tool-stream.js +26 -0
  19. package/dist/esm/transport/call-tool-stream.js.map +1 -0
  20. package/dist/esm/transport/discovery-tags.d.ts +2 -0
  21. package/dist/esm/transport/discovery-tags.d.ts.map +1 -1
  22. package/dist/esm/transport/discovery-tags.js +1 -0
  23. package/dist/esm/transport/discovery-tags.js.map +1 -1
  24. package/dist/esm/transport/index.d.ts +4 -0
  25. package/dist/esm/transport/index.d.ts.map +1 -1
  26. package/dist/esm/transport/index.js +4 -0
  27. package/dist/esm/transport/index.js.map +1 -1
  28. package/dist/esm/transport/nostr-client-transport.d.ts +31 -1
  29. package/dist/esm/transport/nostr-client-transport.d.ts.map +1 -1
  30. package/dist/esm/transport/nostr-client-transport.js +168 -1
  31. package/dist/esm/transport/nostr-client-transport.js.map +1 -1
  32. package/dist/esm/transport/nostr-server/announcement-manager.d.ts +7 -1
  33. package/dist/esm/transport/nostr-server/announcement-manager.d.ts.map +1 -1
  34. package/dist/esm/transport/nostr-server/announcement-manager.js +18 -3
  35. package/dist/esm/transport/nostr-server/announcement-manager.js.map +1 -1
  36. package/dist/esm/transport/nostr-server/session-store.d.ts +2 -0
  37. package/dist/esm/transport/nostr-server/session-store.d.ts.map +1 -1
  38. package/dist/esm/transport/nostr-server/session-store.js +1 -0
  39. package/dist/esm/transport/nostr-server/session-store.js.map +1 -1
  40. package/dist/esm/transport/nostr-server-transport.d.ts +37 -2
  41. package/dist/esm/transport/nostr-server-transport.d.ts.map +1 -1
  42. package/dist/esm/transport/nostr-server-transport.js +254 -24
  43. package/dist/esm/transport/nostr-server-transport.js.map +1 -1
  44. package/dist/esm/transport/open-stream/constants.d.ts +8 -0
  45. package/dist/esm/transport/open-stream/constants.d.ts.map +1 -0
  46. package/dist/esm/transport/open-stream/constants.js +8 -0
  47. package/dist/esm/transport/open-stream/constants.js.map +1 -0
  48. package/dist/esm/transport/open-stream/errors.d.ts +19 -0
  49. package/dist/esm/transport/open-stream/errors.d.ts.map +1 -0
  50. package/dist/esm/transport/open-stream/errors.js +31 -0
  51. package/dist/esm/transport/open-stream/errors.js.map +1 -0
  52. package/dist/esm/transport/open-stream/frames.d.ts +37 -0
  53. package/dist/esm/transport/open-stream/frames.d.ts.map +1 -0
  54. package/dist/esm/transport/open-stream/frames.js +91 -0
  55. package/dist/esm/transport/open-stream/frames.js.map +1 -0
  56. package/dist/esm/transport/open-stream/index.d.ts +9 -0
  57. package/dist/esm/transport/open-stream/index.d.ts.map +1 -0
  58. package/dist/esm/transport/open-stream/index.js +9 -0
  59. package/dist/esm/transport/open-stream/index.js.map +1 -0
  60. package/dist/esm/transport/open-stream/receiver.d.ts +18 -0
  61. package/dist/esm/transport/open-stream/receiver.d.ts.map +1 -0
  62. package/dist/esm/transport/open-stream/receiver.js +31 -0
  63. package/dist/esm/transport/open-stream/receiver.js.map +1 -0
  64. package/dist/esm/transport/open-stream/registry.d.ts +37 -0
  65. package/dist/esm/transport/open-stream/registry.d.ts.map +1 -0
  66. package/dist/esm/transport/open-stream/registry.js +115 -0
  67. package/dist/esm/transport/open-stream/registry.js.map +1 -0
  68. package/dist/esm/transport/open-stream/session.d.ts +80 -0
  69. package/dist/esm/transport/open-stream/session.d.ts.map +1 -0
  70. package/dist/esm/transport/open-stream/session.js +343 -0
  71. package/dist/esm/transport/open-stream/session.js.map +1 -0
  72. package/dist/esm/transport/open-stream/types.d.ts +52 -0
  73. package/dist/esm/transport/open-stream/types.d.ts.map +1 -0
  74. package/dist/esm/transport/open-stream/types.js +2 -0
  75. package/dist/esm/transport/open-stream/types.js.map +1 -0
  76. package/dist/esm/transport/open-stream/writer.d.ts +38 -0
  77. package/dist/esm/transport/open-stream/writer.d.ts.map +1 -0
  78. package/dist/esm/transport/open-stream/writer.js +123 -0
  79. package/dist/esm/transport/open-stream/writer.js.map +1 -0
  80. package/dist/esm/transport/open-stream-policy.d.ts +12 -0
  81. package/dist/esm/transport/open-stream-policy.d.ts.map +1 -0
  82. package/dist/esm/transport/open-stream-policy.js +2 -0
  83. package/dist/esm/transport/open-stream-policy.js.map +1 -0
  84. package/dist/esm/transport/server-transport-common-schemas.d.ts +23 -0
  85. package/dist/esm/transport/server-transport-common-schemas.d.ts.map +1 -0
  86. package/dist/esm/transport/server-transport-common-schemas.js +119 -0
  87. package/dist/esm/transport/server-transport-common-schemas.js.map +1 -0
  88. package/package.json +2 -1
@@ -0,0 +1,123 @@
1
+ import { buildOpenStreamAbortFrame, buildOpenStreamChunkFrame, buildOpenStreamCloseFrame, buildOpenStreamPingFrame, buildOpenStreamPongFrame, buildOpenStreamStartFrame, } from './frames.js';
2
+ /**
3
+ * Minimal CEP-41 writer/session for server-side production.
4
+ */
5
+ export class OpenStreamWriter {
6
+ constructor(options) {
7
+ this.progress = 0;
8
+ this.chunkIndex = 0;
9
+ this.controlNonce = 0;
10
+ this.started = false;
11
+ this.active = true;
12
+ this.operationQueue = Promise.resolve();
13
+ this.progressToken = options.progressToken;
14
+ this.publishFrame = options.publishFrame;
15
+ this.contentType = options.contentType;
16
+ this.onClose = options.onClose;
17
+ this.onAbort = options.onAbort;
18
+ }
19
+ get isActive() {
20
+ return this.active;
21
+ }
22
+ async start() {
23
+ await this.enqueue(async () => {
24
+ await this.startInternal();
25
+ });
26
+ }
27
+ async write(data) {
28
+ await this.enqueue(async () => {
29
+ await this.startInternal();
30
+ if (!this.active) {
31
+ return;
32
+ }
33
+ await this.publishFrame(buildOpenStreamChunkFrame({
34
+ progressToken: this.progressToken,
35
+ progress: this.nextProgress(),
36
+ chunkIndex: this.chunkIndex,
37
+ data,
38
+ }));
39
+ this.chunkIndex += 1;
40
+ });
41
+ }
42
+ async ping() {
43
+ await this.enqueue(async () => {
44
+ if (!this.active) {
45
+ return;
46
+ }
47
+ const progress = this.nextProgress();
48
+ await this.publishFrame(buildOpenStreamPingFrame({
49
+ progressToken: this.progressToken,
50
+ progress,
51
+ nonce: this.nextControlNonce(),
52
+ }));
53
+ });
54
+ }
55
+ async pong(nonce) {
56
+ await this.enqueue(async () => {
57
+ if (!this.active) {
58
+ return;
59
+ }
60
+ await this.publishFrame(buildOpenStreamPongFrame({
61
+ progressToken: this.progressToken,
62
+ progress: this.nextProgress(),
63
+ nonce,
64
+ }));
65
+ });
66
+ }
67
+ async close() {
68
+ await this.enqueue(async () => {
69
+ var _a;
70
+ await this.startInternal();
71
+ if (!this.active) {
72
+ return;
73
+ }
74
+ this.active = false;
75
+ await this.publishFrame(buildOpenStreamCloseFrame({
76
+ progressToken: this.progressToken,
77
+ progress: this.nextProgress(),
78
+ lastChunkIndex: this.chunkIndex > 0 ? this.chunkIndex - 1 : undefined,
79
+ }));
80
+ await ((_a = this.onClose) === null || _a === void 0 ? void 0 : _a.call(this));
81
+ });
82
+ }
83
+ async abort(reason) {
84
+ await this.enqueue(async () => {
85
+ var _a;
86
+ if (!this.active) {
87
+ return;
88
+ }
89
+ this.active = false;
90
+ await this.publishFrame(buildOpenStreamAbortFrame({
91
+ progressToken: this.progressToken,
92
+ progress: this.nextProgress(),
93
+ reason,
94
+ }));
95
+ await ((_a = this.onAbort) === null || _a === void 0 ? void 0 : _a.call(this, reason));
96
+ });
97
+ }
98
+ async startInternal() {
99
+ if (this.started || !this.active) {
100
+ return;
101
+ }
102
+ this.started = true;
103
+ await this.publishFrame(buildOpenStreamStartFrame({
104
+ progressToken: this.progressToken,
105
+ progress: this.nextProgress(),
106
+ contentType: this.contentType,
107
+ }));
108
+ }
109
+ async enqueue(operation) {
110
+ const pending = this.operationQueue.then(operation);
111
+ this.operationQueue = pending.catch(() => undefined);
112
+ await pending;
113
+ }
114
+ nextProgress() {
115
+ this.progress += 1;
116
+ return this.progress;
117
+ }
118
+ nextControlNonce() {
119
+ this.controlNonce += 1;
120
+ return `${this.progressToken}:${this.controlNonce}`;
121
+ }
122
+ }
123
+ //# sourceMappingURL=writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.js","sourceRoot":"","sources":["../../../../src/transport/open-stream/writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared policy options for CEP-41 open-stream lifecycle and buffering.
3
+ */
4
+ export interface OpenStreamTransportPolicy {
5
+ maxConcurrentStreams?: number;
6
+ maxBufferedChunksPerStream?: number;
7
+ maxBufferedBytesPerStream?: number;
8
+ idleTimeoutMs?: number;
9
+ probeTimeoutMs?: number;
10
+ closeGracePeriodMs?: number;
11
+ }
12
+ //# sourceMappingURL=open-stream-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-stream-policy.d.ts","sourceRoot":"","sources":["../../../src/transport/open-stream-policy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=open-stream-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-stream-policy.js","sourceRoot":"","sources":["../../../src/transport/open-stream-policy.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ import type { NostrServerTransport } from './nostr-server-transport.js';
3
+ export interface CommonSchemaToolConfig {
4
+ name: Tool['name'];
5
+ }
6
+ export interface CommonToolSchemasOptions {
7
+ tools: CommonSchemaToolConfig[];
8
+ }
9
+ /**
10
+ * Creates a pure transformer that enriches opted-in `tools/list` results with CEP-15 schema hashes.
11
+ */
12
+ export declare function createCommonSchemaToolsResultTransformer(options: CommonToolSchemasOptions): (result: ListToolsResult) => ListToolsResult;
13
+ /**
14
+ * Creates NIP-73 `i` / `k` tags for tools/list announcements of opted-in CEP-15 tools.
15
+ */
16
+ export declare function createCommonSchemaAnnouncementTagsProducer(options: CommonToolSchemasOptions): (result: ListToolsResult) => string[][];
17
+ /**
18
+ * Attaches CEP-15 common-schema metadata injection to a NostrServerTransport.
19
+ * Apply this decorator before connecting the transport so direct and announced `tools/list`
20
+ * payloads stay consistent from the first announcement onward.
21
+ */
22
+ export declare function withCommonToolSchemas(transport: NostrServerTransport, options: CommonToolSchemasOptions): NostrServerTransport;
23
+ //# sourceMappingURL=server-transport-common-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-transport-common-schemas.d.ts","sourceRoot":"","sources":["../../../src/transport/server-transport-common-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAEhF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,sBAAsB,EAAE,CAAC;CACjC;AA+DD;;GAEG;AACH,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,wBAAwB,GAChC,CAAC,MAAM,EAAE,eAAe,KAAK,eAAe,CA+C9C;AAED;;GAEG;AACH,wBAAgB,0CAA0C,CACxD,OAAO,EAAE,wBAAwB,GAChC,CAAC,MAAM,EAAE,eAAe,KAAK,MAAM,EAAE,EAAE,CAsBzC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,wBAAwB,GAChC,oBAAoB,CAStB"}
@@ -0,0 +1,119 @@
1
+ import { computeCommonSchemaHash } from '../core/utils/common-schema.js';
2
+ import { COMMON_SCHEMA_META_NAMESPACE } from '../core/constants.js';
3
+ function isPlainObject(value) {
4
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
5
+ }
6
+ function getCurrentSchemaHash(meta) {
7
+ const commonSchemaMeta = meta === null || meta === void 0 ? void 0 : meta[COMMON_SCHEMA_META_NAMESPACE];
8
+ if (!isPlainObject(commonSchemaMeta)) {
9
+ return undefined;
10
+ }
11
+ return typeof commonSchemaMeta.schemaHash === 'string'
12
+ ? commonSchemaMeta.schemaHash
13
+ : undefined;
14
+ }
15
+ function getToolSchemaHash(tool) {
16
+ var _a;
17
+ return ((_a = getCurrentSchemaHash(tool._meta)) !== null && _a !== void 0 ? _a : computeCommonSchemaHash({
18
+ name: tool.name,
19
+ inputSchema: tool.inputSchema,
20
+ outputSchema: tool.outputSchema,
21
+ }));
22
+ }
23
+ function mergeCommonSchemaMeta(meta, schemaHash) {
24
+ if (getCurrentSchemaHash(meta) === schemaHash && meta) {
25
+ return {
26
+ meta,
27
+ didChange: false,
28
+ };
29
+ }
30
+ const existingMeta = meta !== null && meta !== void 0 ? meta : {};
31
+ const existingNamespace = existingMeta[COMMON_SCHEMA_META_NAMESPACE];
32
+ return {
33
+ meta: {
34
+ ...existingMeta,
35
+ [COMMON_SCHEMA_META_NAMESPACE]: {
36
+ ...(isPlainObject(existingNamespace) ? existingNamespace : {}),
37
+ schemaHash,
38
+ },
39
+ },
40
+ didChange: true,
41
+ };
42
+ }
43
+ function getCommonToolNames(options) {
44
+ return new Set(options.tools.map((tool) => tool.name));
45
+ }
46
+ /**
47
+ * Creates a pure transformer that enriches opted-in `tools/list` results with CEP-15 schema hashes.
48
+ */
49
+ export function createCommonSchemaToolsResultTransformer(options) {
50
+ const commonToolNames = getCommonToolNames(options);
51
+ return (result) => {
52
+ if (!commonToolNames.size) {
53
+ return result;
54
+ }
55
+ let nextTools;
56
+ result.tools.forEach((tool, index) => {
57
+ if (!commonToolNames.has(tool.name)) {
58
+ if (nextTools) {
59
+ nextTools.push(tool);
60
+ }
61
+ return;
62
+ }
63
+ const schemaHash = getToolSchemaHash(tool);
64
+ const mergedMeta = mergeCommonSchemaMeta(tool._meta, schemaHash);
65
+ if (!mergedMeta.didChange) {
66
+ if (nextTools) {
67
+ nextTools.push(tool);
68
+ }
69
+ return;
70
+ }
71
+ if (!nextTools) {
72
+ nextTools = result.tools.slice(0, index);
73
+ }
74
+ nextTools.push({
75
+ ...tool,
76
+ _meta: mergedMeta.meta,
77
+ });
78
+ });
79
+ if (!nextTools) {
80
+ return result;
81
+ }
82
+ return {
83
+ ...result,
84
+ tools: nextTools,
85
+ };
86
+ };
87
+ }
88
+ /**
89
+ * Creates NIP-73 `i` / `k` tags for tools/list announcements of opted-in CEP-15 tools.
90
+ */
91
+ export function createCommonSchemaAnnouncementTagsProducer(options) {
92
+ const commonToolNames = getCommonToolNames(options);
93
+ return (result) => {
94
+ if (!commonToolNames.size) {
95
+ return [];
96
+ }
97
+ const iTags = result.tools.flatMap((tool) => {
98
+ if (!commonToolNames.has(tool.name)) {
99
+ return [];
100
+ }
101
+ return [['i', getToolSchemaHash(tool), tool.name]];
102
+ });
103
+ if (!iTags.length) {
104
+ return [];
105
+ }
106
+ return [...iTags, ['k', COMMON_SCHEMA_META_NAMESPACE]];
107
+ };
108
+ }
109
+ /**
110
+ * Attaches CEP-15 common-schema metadata injection to a NostrServerTransport.
111
+ * Apply this decorator before connecting the transport so direct and announced `tools/list`
112
+ * payloads stay consistent from the first announcement onward.
113
+ */
114
+ export function withCommonToolSchemas(transport, options) {
115
+ transport.addListToolsResultTransformer(createCommonSchemaToolsResultTransformer(options));
116
+ transport.addListToolsAnnouncementTagsProducer(createCommonSchemaAnnouncementTagsProducer(options));
117
+ return transport;
118
+ }
119
+ //# sourceMappingURL=server-transport-common-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-transport-common-schemas.js","sourceRoot":"","sources":["../../../src/transport/server-transport-common-schemas.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contextvm/sdk",
3
- "version": "0.9.1",
3
+ "version": "0.11.0",
4
4
  "description": "ContextVM SDK for JavaScript/TypeScript",
5
5
  "license": "LGPL-3.0-1",
6
6
  "author": "ContextVM",
@@ -105,6 +105,7 @@
105
105
  "@modelcontextprotocol/sdk": "^1.29.0",
106
106
  "@noble/hashes": "^2.2.0",
107
107
  "applesauce-relay": "^5.2.0",
108
+ "canonicalize": "^2.1.0",
108
109
  "nostr-tools": "~2.18.2",
109
110
  "pino": "^10.3.1",
110
111
  "rxjs": "^7.8.2",