@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.
Files changed (71) hide show
  1. package/README.md +269 -1311
  2. package/dist/abilities/AbilityLoader.d.ts +26 -0
  3. package/dist/abilities/AbilityLoader.d.ts.map +1 -1
  4. package/dist/abilities/AbilityLoader.js +141 -18
  5. package/dist/abilities/AbilityLoader.js.map +1 -1
  6. package/dist/abilities/AbilityProxy.d.ts +33 -0
  7. package/dist/abilities/AbilityProxy.d.ts.map +1 -1
  8. package/dist/abilities/AbilityProxy.js +40 -0
  9. package/dist/abilities/AbilityProxy.js.map +1 -1
  10. package/dist/abilities/index.d.ts +1 -1
  11. package/dist/abilities/index.d.ts.map +1 -1
  12. package/dist/abilities/types.d.ts +67 -0
  13. package/dist/abilities/types.d.ts.map +1 -1
  14. package/dist/broker/BrokerProtocol.js +11 -11
  15. package/dist/broker/BrokerProtocol.js.map +1 -1
  16. package/dist/client/KadiClient.d.ts +191 -2
  17. package/dist/client/KadiClient.d.ts.map +1 -1
  18. package/dist/client/KadiClient.js +412 -2
  19. package/dist/client/KadiClient.js.map +1 -1
  20. package/dist/index.d.ts +3 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +5 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/messages/index.d.ts +1 -1
  25. package/dist/messages/index.js +1 -1
  26. package/dist/messages/index.js.map +1 -1
  27. package/dist/schemas/index.d.ts +3 -0
  28. package/dist/schemas/index.d.ts.map +1 -1
  29. package/dist/schemas/index.js +2 -0
  30. package/dist/schemas/index.js.map +1 -1
  31. package/dist/schemas/zod-helpers.d.ts +129 -0
  32. package/dist/schemas/zod-helpers.d.ts.map +1 -0
  33. package/dist/schemas/zod-helpers.js +225 -0
  34. package/dist/schemas/zod-helpers.js.map +1 -0
  35. package/dist/schemas/zod-to-json-schema.d.ts +159 -0
  36. package/dist/schemas/zod-to-json-schema.d.ts.map +1 -0
  37. package/dist/schemas/zod-to-json-schema.js +154 -0
  38. package/dist/schemas/zod-to-json-schema.js.map +1 -0
  39. package/dist/transports/NativeTransport.d.ts +29 -0
  40. package/dist/transports/NativeTransport.d.ts.map +1 -1
  41. package/dist/transports/NativeTransport.js +98 -3
  42. package/dist/transports/NativeTransport.js.map +1 -1
  43. package/dist/transports/StdioTransport.d.ts +141 -63
  44. package/dist/transports/StdioTransport.d.ts.map +1 -1
  45. package/dist/transports/StdioTransport.js +309 -232
  46. package/dist/transports/StdioTransport.js.map +1 -1
  47. package/dist/types/broker.d.ts +0 -22
  48. package/dist/types/broker.d.ts.map +1 -1
  49. package/dist/types/broker.js +0 -27
  50. package/dist/types/broker.js.map +1 -1
  51. package/dist/types/index.d.ts +3 -1
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/dist/types/index.js +1 -1
  54. package/dist/types/index.js.map +1 -1
  55. package/dist/types/zod-tools.d.ts +198 -0
  56. package/dist/types/zod-tools.d.ts.map +1 -0
  57. package/dist/types/zod-tools.js +14 -0
  58. package/dist/types/zod-tools.js.map +1 -0
  59. package/dist/utils/LockfileResolver.d.ts +108 -0
  60. package/dist/utils/LockfileResolver.d.ts.map +1 -0
  61. package/dist/utils/LockfileResolver.js +230 -0
  62. package/dist/utils/LockfileResolver.js.map +1 -0
  63. package/dist/utils/StdioMessageReader.d.ts +122 -0
  64. package/dist/utils/StdioMessageReader.d.ts.map +1 -0
  65. package/dist/utils/StdioMessageReader.js +209 -0
  66. package/dist/utils/StdioMessageReader.js.map +1 -0
  67. package/dist/utils/StdioMessageWriter.d.ts +104 -0
  68. package/dist/utils/StdioMessageWriter.d.ts.map +1 -0
  69. package/dist/utils/StdioMessageWriter.js +162 -0
  70. package/dist/utils/StdioMessageWriter.js.map +1 -0
  71. 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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kadi.build/core",
3
- "version": "0.0.1-alpha.10",
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
  }