@kadi.build/core 0.0.1-alpha.10 → 0.0.1-alpha.12
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 +269 -1311
- package/dist/abilities/AbilityLoader.d.ts +26 -0
- package/dist/abilities/AbilityLoader.d.ts.map +1 -1
- package/dist/abilities/AbilityLoader.js +141 -18
- package/dist/abilities/AbilityLoader.js.map +1 -1
- package/dist/abilities/AbilityProxy.d.ts +33 -0
- package/dist/abilities/AbilityProxy.d.ts.map +1 -1
- package/dist/abilities/AbilityProxy.js +40 -0
- package/dist/abilities/AbilityProxy.js.map +1 -1
- package/dist/abilities/index.d.ts +1 -1
- package/dist/abilities/index.d.ts.map +1 -1
- package/dist/abilities/types.d.ts +67 -0
- package/dist/abilities/types.d.ts.map +1 -1
- package/dist/broker/BrokerProtocol.js +11 -11
- package/dist/broker/BrokerProtocol.js.map +1 -1
- package/dist/client/KadiClient.d.ts +191 -2
- package/dist/client/KadiClient.d.ts.map +1 -1
- package/dist/client/KadiClient.js +412 -2
- package/dist/client/KadiClient.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/messages/index.d.ts +1 -1
- package/dist/messages/index.js +1 -1
- package/dist/messages/index.js.map +1 -1
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/zod-helpers.d.ts +129 -0
- package/dist/schemas/zod-helpers.d.ts.map +1 -0
- package/dist/schemas/zod-helpers.js +225 -0
- package/dist/schemas/zod-helpers.js.map +1 -0
- package/dist/schemas/zod-to-json-schema.d.ts +159 -0
- package/dist/schemas/zod-to-json-schema.d.ts.map +1 -0
- package/dist/schemas/zod-to-json-schema.js +154 -0
- package/dist/schemas/zod-to-json-schema.js.map +1 -0
- package/dist/transports/NativeTransport.d.ts +29 -0
- package/dist/transports/NativeTransport.d.ts.map +1 -1
- package/dist/transports/NativeTransport.js +98 -3
- package/dist/transports/NativeTransport.js.map +1 -1
- package/dist/transports/StdioTransport.d.ts +141 -63
- package/dist/transports/StdioTransport.d.ts.map +1 -1
- package/dist/transports/StdioTransport.js +309 -232
- package/dist/transports/StdioTransport.js.map +1 -1
- package/dist/types/broker.d.ts +0 -22
- package/dist/types/broker.d.ts.map +1 -1
- package/dist/types/broker.js +0 -27
- package/dist/types/broker.js.map +1 -1
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/zod-tools.d.ts +198 -0
- package/dist/types/zod-tools.d.ts.map +1 -0
- package/dist/types/zod-tools.js +14 -0
- package/dist/types/zod-tools.js.map +1 -0
- package/dist/utils/LockfileResolver.d.ts +108 -0
- package/dist/utils/LockfileResolver.d.ts.map +1 -0
- package/dist/utils/LockfileResolver.js +230 -0
- package/dist/utils/LockfileResolver.js.map +1 -0
- package/dist/utils/StdioMessageReader.d.ts +122 -0
- package/dist/utils/StdioMessageReader.d.ts.map +1 -0
- package/dist/utils/StdioMessageReader.js +209 -0
- package/dist/utils/StdioMessageReader.js.map +1 -0
- package/dist/utils/StdioMessageWriter.d.ts +104 -0
- package/dist/utils/StdioMessageWriter.d.ts.map +1 -0
- package/dist/utils/StdioMessageWriter.js +162 -0
- package/dist/utils/StdioMessageWriter.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stdio Message Writer
|
|
3
|
+
*
|
|
4
|
+
* Writes Content-Length framed messages to a stream (LSP-style).
|
|
5
|
+
* Ensures reliable message delivery even when other output is written to the stream.
|
|
6
|
+
*
|
|
7
|
+
* Message format:
|
|
8
|
+
* ```
|
|
9
|
+
* Content-Length: 67\r\n
|
|
10
|
+
* \r\n
|
|
11
|
+
* {"jsonrpc":"2.0","id":1,"result":{"value":42}}
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @module utils/StdioMessageWriter
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Message writer for Content-Length framed messages
|
|
18
|
+
*
|
|
19
|
+
* Implements the LSP (Language Server Protocol) message framing format.
|
|
20
|
+
* Automatically calculates content length and formats headers.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const writer = new StdioMessageWriter(process.stdout);
|
|
25
|
+
*
|
|
26
|
+
* // Write a JSON-RPC message
|
|
27
|
+
* await writer.write({
|
|
28
|
+
* jsonrpc: '2.0',
|
|
29
|
+
* id: 1,
|
|
30
|
+
* result: { value: 42 }
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class StdioMessageWriter {
|
|
35
|
+
/**
|
|
36
|
+
* Output stream
|
|
37
|
+
*/
|
|
38
|
+
stream;
|
|
39
|
+
/**
|
|
40
|
+
* Whether the writer has been destroyed
|
|
41
|
+
*/
|
|
42
|
+
destroyed = false;
|
|
43
|
+
/**
|
|
44
|
+
* Header separator
|
|
45
|
+
*/
|
|
46
|
+
static HEADER_SEPARATOR = '\r\n';
|
|
47
|
+
/**
|
|
48
|
+
* Create a new message writer
|
|
49
|
+
*
|
|
50
|
+
* @param stream - Output stream (typically stdout)
|
|
51
|
+
*/
|
|
52
|
+
constructor(stream) {
|
|
53
|
+
this.stream = stream;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Write a framed message to the stream
|
|
57
|
+
*
|
|
58
|
+
* Serializes the message to JSON, calculates byte length, formats
|
|
59
|
+
* Content-Length header, and writes everything to the stream.
|
|
60
|
+
*
|
|
61
|
+
* @param message - Message object to write (will be JSON-stringified)
|
|
62
|
+
* @returns Promise that resolves when message is fully written
|
|
63
|
+
*
|
|
64
|
+
* @throws {Error} If writer is destroyed or write fails
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* await writer.write({
|
|
69
|
+
* jsonrpc: '2.0',
|
|
70
|
+
* id: 1,
|
|
71
|
+
* method: 'invoke',
|
|
72
|
+
* params: { toolName: 'add', toolInput: { a: 5, b: 3 } }
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
async write(message) {
|
|
77
|
+
if (this.destroyed) {
|
|
78
|
+
throw new Error('Cannot write: StdioMessageWriter has been destroyed');
|
|
79
|
+
}
|
|
80
|
+
// Serialize message to JSON
|
|
81
|
+
const messageJson = JSON.stringify(message);
|
|
82
|
+
// Calculate UTF-8 byte length (not character length!)
|
|
83
|
+
const messageBytes = Buffer.from(messageJson, 'utf8');
|
|
84
|
+
const contentLength = messageBytes.length;
|
|
85
|
+
// Format header
|
|
86
|
+
const header = `Content-Length: ${contentLength}${StdioMessageWriter.HEADER_SEPARATOR}${StdioMessageWriter.HEADER_SEPARATOR}`;
|
|
87
|
+
// Write header + message
|
|
88
|
+
const fullMessage = header + messageJson;
|
|
89
|
+
// Write to stream and handle backpressure
|
|
90
|
+
return new Promise((resolve, reject) => {
|
|
91
|
+
const writeSucceeded = this.stream.write(fullMessage, 'utf8', (error) => {
|
|
92
|
+
if (error) {
|
|
93
|
+
reject(new Error(`Failed to write message: ${error.message}`));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
resolve();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
// If write returned false, wait for drain event
|
|
100
|
+
if (!writeSucceeded) {
|
|
101
|
+
this.stream.once('drain', () => {
|
|
102
|
+
resolve();
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Flush the stream
|
|
109
|
+
*
|
|
110
|
+
* Ensures all buffered data is written to the underlying stream.
|
|
111
|
+
*
|
|
112
|
+
* @returns Promise that resolves when flush is complete
|
|
113
|
+
*/
|
|
114
|
+
async flush() {
|
|
115
|
+
if (this.destroyed) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
return new Promise((resolve) => {
|
|
119
|
+
// Check if stream has end() method (for proper cleanup)
|
|
120
|
+
if (typeof this.stream.end === 'function') {
|
|
121
|
+
// Don't actually end the stream, just make sure it's flushed
|
|
122
|
+
// We'll use cork/uncork if available
|
|
123
|
+
if (typeof this.stream.uncork === 'function') {
|
|
124
|
+
this.stream.uncork();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Wait for drain if needed
|
|
128
|
+
if (this.stream.writableNeedDrain) {
|
|
129
|
+
this.stream.once('drain', () => resolve());
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
resolve();
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Destroy the writer
|
|
138
|
+
*
|
|
139
|
+
* Cleans up resources. After calling destroy(), the writer cannot be used.
|
|
140
|
+
* Note: This does NOT close the underlying stream.
|
|
141
|
+
*/
|
|
142
|
+
destroy() {
|
|
143
|
+
this.destroyed = true;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Check if writer is destroyed
|
|
147
|
+
*
|
|
148
|
+
* @returns true if destroyed
|
|
149
|
+
*/
|
|
150
|
+
isDestroyed() {
|
|
151
|
+
return this.destroyed;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get the underlying stream
|
|
155
|
+
*
|
|
156
|
+
* @returns The writable stream
|
|
157
|
+
*/
|
|
158
|
+
getStream() {
|
|
159
|
+
return this.stream;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=StdioMessageWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdioMessageWriter.js","sourceRoot":"","sources":["../../src/utils/StdioMessageWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACc,MAAM,CAAW;IAElC;;OAEG;IACK,SAAS,GAAG,KAAK,CAAC;IAE1B;;OAEG;IACK,MAAM,CAAU,gBAAgB,GAAG,MAAM,CAAC;IAElD;;;;OAIG;IACH,YAAY,MAAgB;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,KAAK,CAAC,OAAgC;QAC1C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,4BAA4B;QAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAE5C,sDAAsD;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC;QAE1C,gBAAgB;QAChB,MAAM,MAAM,GAAG,mBAAmB,aAAa,GAAG,kBAAkB,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,gBAAgB,EAAE,CAAC;QAE9H,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;QAEzC,0CAA0C;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtE,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,gDAAgD;YAChD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC7B,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,wDAAwD;YACxD,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC1C,6DAA6D;gBAC7D,qCAAqC;gBACrC,IAAI,OAAQ,IAAI,CAAC,MAAc,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBACrD,IAAI,CAAC,MAAc,CAAC,MAAM,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kadi.build/core",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.12",
|
|
4
4
|
"description": "A module that is a comprehensive toolkit for developers integrating with the KADI infrastructure.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"eslint-config-prettier": "^9.1.2",
|
|
85
85
|
"eslint-plugin-prettier": "^5.5.4",
|
|
86
86
|
"prettier": "^3.6.2",
|
|
87
|
+
"tsx": "^4.20.6",
|
|
87
88
|
"typescript": "^5.9.2",
|
|
88
89
|
"vitest": "^3.2.4"
|
|
89
90
|
}
|