@kynetic-ai/spec 0.1.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 (278) hide show
  1. package/README.md +263 -0
  2. package/dist/acp/client.d.ts +159 -0
  3. package/dist/acp/client.d.ts.map +1 -0
  4. package/dist/acp/client.js +255 -0
  5. package/dist/acp/client.js.map +1 -0
  6. package/dist/acp/framing.d.ts +119 -0
  7. package/dist/acp/framing.d.ts.map +1 -0
  8. package/dist/acp/framing.js +302 -0
  9. package/dist/acp/framing.js.map +1 -0
  10. package/dist/acp/index.d.ts +14 -0
  11. package/dist/acp/index.d.ts.map +1 -0
  12. package/dist/acp/index.js +13 -0
  13. package/dist/acp/index.js.map +1 -0
  14. package/dist/acp/types.d.ts +89 -0
  15. package/dist/acp/types.d.ts.map +1 -0
  16. package/dist/acp/types.js +99 -0
  17. package/dist/acp/types.js.map +1 -0
  18. package/dist/agents/adapters.d.ts +55 -0
  19. package/dist/agents/adapters.d.ts.map +1 -0
  20. package/dist/agents/adapters.js +84 -0
  21. package/dist/agents/adapters.js.map +1 -0
  22. package/dist/agents/index.d.ts +8 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +10 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/spawner.d.ts +53 -0
  27. package/dist/agents/spawner.d.ts.map +1 -0
  28. package/dist/agents/spawner.js +83 -0
  29. package/dist/agents/spawner.js.map +1 -0
  30. package/dist/cli/batch.d.ts +82 -0
  31. package/dist/cli/batch.d.ts.map +1 -0
  32. package/dist/cli/batch.js +162 -0
  33. package/dist/cli/batch.js.map +1 -0
  34. package/dist/cli/commands/clone-for-testing.d.ts +6 -0
  35. package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
  36. package/dist/cli/commands/clone-for-testing.js +176 -0
  37. package/dist/cli/commands/clone-for-testing.js.map +1 -0
  38. package/dist/cli/commands/derive.d.ts +6 -0
  39. package/dist/cli/commands/derive.d.ts.map +1 -0
  40. package/dist/cli/commands/derive.js +450 -0
  41. package/dist/cli/commands/derive.js.map +1 -0
  42. package/dist/cli/commands/help.d.ts +6 -0
  43. package/dist/cli/commands/help.d.ts.map +1 -0
  44. package/dist/cli/commands/help.js +196 -0
  45. package/dist/cli/commands/help.js.map +1 -0
  46. package/dist/cli/commands/inbox.d.ts +6 -0
  47. package/dist/cli/commands/inbox.d.ts.map +1 -0
  48. package/dist/cli/commands/inbox.js +235 -0
  49. package/dist/cli/commands/inbox.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +20 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +21 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +245 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/item.d.ts +6 -0
  59. package/dist/cli/commands/item.d.ts.map +1 -0
  60. package/dist/cli/commands/item.js +1311 -0
  61. package/dist/cli/commands/item.js.map +1 -0
  62. package/dist/cli/commands/link.d.ts +6 -0
  63. package/dist/cli/commands/link.d.ts.map +1 -0
  64. package/dist/cli/commands/link.js +288 -0
  65. package/dist/cli/commands/link.js.map +1 -0
  66. package/dist/cli/commands/log.d.ts +16 -0
  67. package/dist/cli/commands/log.d.ts.map +1 -0
  68. package/dist/cli/commands/log.js +291 -0
  69. package/dist/cli/commands/log.js.map +1 -0
  70. package/dist/cli/commands/meta.d.ts +15 -0
  71. package/dist/cli/commands/meta.d.ts.map +1 -0
  72. package/dist/cli/commands/meta.js +1378 -0
  73. package/dist/cli/commands/meta.js.map +1 -0
  74. package/dist/cli/commands/module.d.ts +6 -0
  75. package/dist/cli/commands/module.d.ts.map +1 -0
  76. package/dist/cli/commands/module.js +102 -0
  77. package/dist/cli/commands/module.js.map +1 -0
  78. package/dist/cli/commands/ralph.d.ts +9 -0
  79. package/dist/cli/commands/ralph.d.ts.map +1 -0
  80. package/dist/cli/commands/ralph.js +465 -0
  81. package/dist/cli/commands/ralph.js.map +1 -0
  82. package/dist/cli/commands/search.d.ts +6 -0
  83. package/dist/cli/commands/search.d.ts.map +1 -0
  84. package/dist/cli/commands/search.js +134 -0
  85. package/dist/cli/commands/search.js.map +1 -0
  86. package/dist/cli/commands/session.d.ts +164 -0
  87. package/dist/cli/commands/session.d.ts.map +1 -0
  88. package/dist/cli/commands/session.js +745 -0
  89. package/dist/cli/commands/session.js.map +1 -0
  90. package/dist/cli/commands/setup.d.ts +26 -0
  91. package/dist/cli/commands/setup.d.ts.map +1 -0
  92. package/dist/cli/commands/setup.js +586 -0
  93. package/dist/cli/commands/setup.js.map +1 -0
  94. package/dist/cli/commands/shadow.d.ts +6 -0
  95. package/dist/cli/commands/shadow.d.ts.map +1 -0
  96. package/dist/cli/commands/shadow.js +299 -0
  97. package/dist/cli/commands/shadow.js.map +1 -0
  98. package/dist/cli/commands/task.d.ts +6 -0
  99. package/dist/cli/commands/task.d.ts.map +1 -0
  100. package/dist/cli/commands/task.js +1514 -0
  101. package/dist/cli/commands/task.js.map +1 -0
  102. package/dist/cli/commands/tasks.d.ts +6 -0
  103. package/dist/cli/commands/tasks.d.ts.map +1 -0
  104. package/dist/cli/commands/tasks.js +347 -0
  105. package/dist/cli/commands/tasks.js.map +1 -0
  106. package/dist/cli/commands/trait.d.ts +10 -0
  107. package/dist/cli/commands/trait.d.ts.map +1 -0
  108. package/dist/cli/commands/trait.js +295 -0
  109. package/dist/cli/commands/trait.js.map +1 -0
  110. package/dist/cli/commands/validate.d.ts +6 -0
  111. package/dist/cli/commands/validate.d.ts.map +1 -0
  112. package/dist/cli/commands/validate.js +626 -0
  113. package/dist/cli/commands/validate.js.map +1 -0
  114. package/dist/cli/exit-codes.d.ts +62 -0
  115. package/dist/cli/exit-codes.d.ts.map +1 -0
  116. package/dist/cli/exit-codes.js +65 -0
  117. package/dist/cli/exit-codes.js.map +1 -0
  118. package/dist/cli/help/content.d.ts +35 -0
  119. package/dist/cli/help/content.d.ts.map +1 -0
  120. package/dist/cli/help/content.js +312 -0
  121. package/dist/cli/help/content.js.map +1 -0
  122. package/dist/cli/index.d.ts +5 -0
  123. package/dist/cli/index.d.ts.map +1 -0
  124. package/dist/cli/index.js +85 -0
  125. package/dist/cli/index.js.map +1 -0
  126. package/dist/cli/introspection.d.ts +87 -0
  127. package/dist/cli/introspection.d.ts.map +1 -0
  128. package/dist/cli/introspection.js +127 -0
  129. package/dist/cli/introspection.js.map +1 -0
  130. package/dist/cli/output.d.ts +56 -0
  131. package/dist/cli/output.d.ts.map +1 -0
  132. package/dist/cli/output.js +467 -0
  133. package/dist/cli/output.js.map +1 -0
  134. package/dist/cli/suggest.d.ts +16 -0
  135. package/dist/cli/suggest.d.ts.map +1 -0
  136. package/dist/cli/suggest.js +72 -0
  137. package/dist/cli/suggest.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +5 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/parser/alignment.d.ts +113 -0
  143. package/dist/parser/alignment.d.ts.map +1 -0
  144. package/dist/parser/alignment.js +261 -0
  145. package/dist/parser/alignment.js.map +1 -0
  146. package/dist/parser/assess.d.ts +81 -0
  147. package/dist/parser/assess.d.ts.map +1 -0
  148. package/dist/parser/assess.js +197 -0
  149. package/dist/parser/assess.js.map +1 -0
  150. package/dist/parser/convention-validation.d.ts +48 -0
  151. package/dist/parser/convention-validation.d.ts.map +1 -0
  152. package/dist/parser/convention-validation.js +167 -0
  153. package/dist/parser/convention-validation.js.map +1 -0
  154. package/dist/parser/fix.d.ts +38 -0
  155. package/dist/parser/fix.d.ts.map +1 -0
  156. package/dist/parser/fix.js +185 -0
  157. package/dist/parser/fix.js.map +1 -0
  158. package/dist/parser/index.d.ts +12 -0
  159. package/dist/parser/index.d.ts.map +1 -0
  160. package/dist/parser/index.js +13 -0
  161. package/dist/parser/index.js.map +1 -0
  162. package/dist/parser/items.d.ts +138 -0
  163. package/dist/parser/items.d.ts.map +1 -0
  164. package/dist/parser/items.js +321 -0
  165. package/dist/parser/items.js.map +1 -0
  166. package/dist/parser/meta.d.ts +120 -0
  167. package/dist/parser/meta.d.ts.map +1 -0
  168. package/dist/parser/meta.js +441 -0
  169. package/dist/parser/meta.js.map +1 -0
  170. package/dist/parser/refs.d.ts +185 -0
  171. package/dist/parser/refs.d.ts.map +1 -0
  172. package/dist/parser/refs.js +404 -0
  173. package/dist/parser/refs.js.map +1 -0
  174. package/dist/parser/shadow.d.ts +253 -0
  175. package/dist/parser/shadow.d.ts.map +1 -0
  176. package/dist/parser/shadow.js +1053 -0
  177. package/dist/parser/shadow.js.map +1 -0
  178. package/dist/parser/traits.d.ts +72 -0
  179. package/dist/parser/traits.d.ts.map +1 -0
  180. package/dist/parser/traits.js +120 -0
  181. package/dist/parser/traits.js.map +1 -0
  182. package/dist/parser/validate.d.ts +89 -0
  183. package/dist/parser/validate.d.ts.map +1 -0
  184. package/dist/parser/validate.js +817 -0
  185. package/dist/parser/validate.js.map +1 -0
  186. package/dist/parser/yaml.d.ts +326 -0
  187. package/dist/parser/yaml.d.ts.map +1 -0
  188. package/dist/parser/yaml.js +1383 -0
  189. package/dist/parser/yaml.js.map +1 -0
  190. package/dist/ralph/cli-renderer.d.ts +20 -0
  191. package/dist/ralph/cli-renderer.d.ts.map +1 -0
  192. package/dist/ralph/cli-renderer.js +179 -0
  193. package/dist/ralph/cli-renderer.js.map +1 -0
  194. package/dist/ralph/events.d.ts +65 -0
  195. package/dist/ralph/events.d.ts.map +1 -0
  196. package/dist/ralph/events.js +397 -0
  197. package/dist/ralph/events.js.map +1 -0
  198. package/dist/ralph/index.d.ts +8 -0
  199. package/dist/ralph/index.d.ts.map +1 -0
  200. package/dist/ralph/index.js +10 -0
  201. package/dist/ralph/index.js.map +1 -0
  202. package/dist/schema/common.d.ts +46 -0
  203. package/dist/schema/common.d.ts.map +1 -0
  204. package/dist/schema/common.js +71 -0
  205. package/dist/schema/common.js.map +1 -0
  206. package/dist/schema/inbox.d.ts +90 -0
  207. package/dist/schema/inbox.d.ts.map +1 -0
  208. package/dist/schema/inbox.js +30 -0
  209. package/dist/schema/inbox.js.map +1 -0
  210. package/dist/schema/index.d.ts +6 -0
  211. package/dist/schema/index.d.ts.map +1 -0
  212. package/dist/schema/index.js +7 -0
  213. package/dist/schema/index.js.map +1 -0
  214. package/dist/schema/meta.d.ts +762 -0
  215. package/dist/schema/meta.d.ts.map +1 -0
  216. package/dist/schema/meta.js +144 -0
  217. package/dist/schema/meta.js.map +1 -0
  218. package/dist/schema/spec.d.ts +912 -0
  219. package/dist/schema/spec.d.ts.map +1 -0
  220. package/dist/schema/spec.js +104 -0
  221. package/dist/schema/spec.js.map +1 -0
  222. package/dist/schema/task.d.ts +664 -0
  223. package/dist/schema/task.d.ts.map +1 -0
  224. package/dist/schema/task.js +130 -0
  225. package/dist/schema/task.js.map +1 -0
  226. package/dist/sessions/index.d.ts +11 -0
  227. package/dist/sessions/index.d.ts.map +1 -0
  228. package/dist/sessions/index.js +13 -0
  229. package/dist/sessions/index.js.map +1 -0
  230. package/dist/sessions/store.d.ts +144 -0
  231. package/dist/sessions/store.d.ts.map +1 -0
  232. package/dist/sessions/store.js +325 -0
  233. package/dist/sessions/store.js.map +1 -0
  234. package/dist/sessions/types.d.ts +157 -0
  235. package/dist/sessions/types.d.ts.map +1 -0
  236. package/dist/sessions/types.js +90 -0
  237. package/dist/sessions/types.js.map +1 -0
  238. package/dist/strings/errors.d.ts +420 -0
  239. package/dist/strings/errors.d.ts.map +1 -0
  240. package/dist/strings/errors.js +282 -0
  241. package/dist/strings/errors.js.map +1 -0
  242. package/dist/strings/guidance.d.ts +65 -0
  243. package/dist/strings/guidance.d.ts.map +1 -0
  244. package/dist/strings/guidance.js +66 -0
  245. package/dist/strings/guidance.js.map +1 -0
  246. package/dist/strings/index.d.ts +12 -0
  247. package/dist/strings/index.d.ts.map +1 -0
  248. package/dist/strings/index.js +12 -0
  249. package/dist/strings/index.js.map +1 -0
  250. package/dist/strings/labels.d.ts +74 -0
  251. package/dist/strings/labels.d.ts.map +1 -0
  252. package/dist/strings/labels.js +75 -0
  253. package/dist/strings/labels.js.map +1 -0
  254. package/dist/strings/validation.d.ts +126 -0
  255. package/dist/strings/validation.d.ts.map +1 -0
  256. package/dist/strings/validation.js +135 -0
  257. package/dist/strings/validation.js.map +1 -0
  258. package/dist/utils/commit.d.ts +23 -0
  259. package/dist/utils/commit.d.ts.map +1 -0
  260. package/dist/utils/commit.js +67 -0
  261. package/dist/utils/commit.js.map +1 -0
  262. package/dist/utils/git.d.ts +57 -0
  263. package/dist/utils/git.d.ts.map +1 -0
  264. package/dist/utils/git.js +192 -0
  265. package/dist/utils/git.js.map +1 -0
  266. package/dist/utils/grep.d.ts +28 -0
  267. package/dist/utils/grep.d.ts.map +1 -0
  268. package/dist/utils/grep.js +86 -0
  269. package/dist/utils/grep.js.map +1 -0
  270. package/dist/utils/index.d.ts +8 -0
  271. package/dist/utils/index.d.ts.map +1 -0
  272. package/dist/utils/index.js +6 -0
  273. package/dist/utils/index.js.map +1 -0
  274. package/dist/utils/time.d.ts +18 -0
  275. package/dist/utils/time.d.ts.map +1 -0
  276. package/dist/utils/time.js +61 -0
  277. package/dist/utils/time.js.map +1 -0
  278. package/package.json +62 -0
@@ -0,0 +1,119 @@
1
+ /**
2
+ * JSON-RPC 2.0 Framing Layer
3
+ *
4
+ * Handles bidirectional stdio communication with auto-incrementing IDs,
5
+ * request/response correlation, and timeout handling.
6
+ */
7
+ import { EventEmitter } from 'node:events';
8
+ import type { JsonRpcErrorObject } from './types.js';
9
+ /**
10
+ * Options for JsonRpcFraming
11
+ */
12
+ export interface JsonRpcFramingOptions {
13
+ /** Default timeout for pending requests in milliseconds (default: 30000) */
14
+ timeout?: number;
15
+ /** Per-method timeout overrides in milliseconds */
16
+ methodTimeouts?: Record<string, number>;
17
+ /** Input stream (default: process.stdin) */
18
+ stdin?: NodeJS.ReadableStream;
19
+ /** Output stream (default: process.stdout) */
20
+ stdout?: NodeJS.WritableStream;
21
+ }
22
+ /**
23
+ * Options for sendRequest
24
+ */
25
+ export interface SendRequestOptions {
26
+ /**
27
+ * If true, don't log "Method not found" errors.
28
+ * Use for optional methods that may not be supported by all agents.
29
+ */
30
+ silentMethodNotFound?: boolean;
31
+ }
32
+ /**
33
+ * JSON-RPC 2.0 Framing Layer
34
+ *
35
+ * Provides bidirectional JSON-RPC 2.0 communication over stdio with:
36
+ * - Auto-incrementing request IDs
37
+ * - Request/response correlation
38
+ * - Configurable timeout for pending requests (default 30s)
39
+ * - Per-method timeout overrides for long-running operations
40
+ * - Activity-based timeout reset (keepalive on incoming messages)
41
+ * - Event-based message handling
42
+ */
43
+ export declare class JsonRpcFraming extends EventEmitter {
44
+ private nextId;
45
+ private pending;
46
+ private timeout;
47
+ private methodTimeouts;
48
+ private stdin;
49
+ private stdout;
50
+ private buffer;
51
+ private closed;
52
+ constructor(options?: JsonRpcFramingOptions);
53
+ /**
54
+ * Send a JSON-RPC request and wait for response
55
+ */
56
+ sendRequest(method: string, params?: unknown, options?: SendRequestOptions): Promise<unknown>;
57
+ /**
58
+ * Send a JSON-RPC notification (no response expected)
59
+ */
60
+ sendNotification(method: string, params?: unknown): void;
61
+ /**
62
+ * Send a JSON-RPC response (in response to a request)
63
+ */
64
+ sendResponse(id: string | number, result: unknown): void;
65
+ /**
66
+ * Send a JSON-RPC error response
67
+ */
68
+ sendError(id: string | number | null, error: JsonRpcErrorObject): void;
69
+ /**
70
+ * Close the framing layer
71
+ */
72
+ close(): void;
73
+ /**
74
+ * Check if the framing layer is closed
75
+ */
76
+ isClosed(): boolean;
77
+ /**
78
+ * Reset timeout timers for all pending requests
79
+ *
80
+ * Called when activity is detected from the agent (incoming requests/responses),
81
+ * indicating the agent is still alive and working. This implements a keepalive
82
+ * mechanism that prevents timeout during long-running operations where the agent
83
+ * is actively making tool calls.
84
+ */
85
+ private resetPendingTimers;
86
+ /**
87
+ * Send a JSON-RPC message
88
+ */
89
+ private send;
90
+ /**
91
+ * Handle incoming data from stdin
92
+ */
93
+ private handleData;
94
+ /**
95
+ * Process a complete line of input
96
+ */
97
+ private processLine;
98
+ /**
99
+ * Handle a parsed JSON-RPC message
100
+ */
101
+ private handleMessage;
102
+ /**
103
+ * Handle a JSON-RPC response
104
+ */
105
+ private handleResponse;
106
+ /**
107
+ * Handle a JSON-RPC error response
108
+ */
109
+ private handleErrorResponse;
110
+ /**
111
+ * Handle stdin end
112
+ */
113
+ private handleEnd;
114
+ /**
115
+ * Handle stdin error
116
+ */
117
+ private handleError;
118
+ }
119
+ //# sourceMappingURL=framing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framing.d.ts","sourceRoot":"","sources":["../../src/acp/framing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAEV,kBAAkB,EAKnB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AA2BD;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,qBAA0B;IAsB/C;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,OAAO,CAAC;IAmCnB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAcxD;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAcxD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,kBAAkB,GAAG,IAAI;IActE;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,IAAI;IASZ;;OAEG;IACH,OAAO,CAAC,UAAU;IAgBlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * JSON-RPC 2.0 Framing Layer
3
+ *
4
+ * Handles bidirectional stdio communication with auto-incrementing IDs,
5
+ * request/response correlation, and timeout handling.
6
+ */
7
+ import { EventEmitter } from 'node:events';
8
+ import { isError, isNotification, isRequest, isResponse } from './types.js';
9
+ /**
10
+ * Default timeouts for long-running methods (in milliseconds)
11
+ * These methods can legitimately take minutes, so they need longer timeouts.
12
+ */
13
+ const DEFAULT_METHOD_TIMEOUTS = {
14
+ 'session/prompt': 5 * 60 * 1000, // 5 minutes
15
+ 'session/resume': 5 * 60 * 1000, // 5 minutes
16
+ };
17
+ /**
18
+ * JSON-RPC 2.0 Framing Layer
19
+ *
20
+ * Provides bidirectional JSON-RPC 2.0 communication over stdio with:
21
+ * - Auto-incrementing request IDs
22
+ * - Request/response correlation
23
+ * - Configurable timeout for pending requests (default 30s)
24
+ * - Per-method timeout overrides for long-running operations
25
+ * - Activity-based timeout reset (keepalive on incoming messages)
26
+ * - Event-based message handling
27
+ */
28
+ export class JsonRpcFraming extends EventEmitter {
29
+ nextId = 1;
30
+ pending = new Map();
31
+ timeout;
32
+ methodTimeouts;
33
+ stdin;
34
+ stdout;
35
+ buffer = '';
36
+ closed = false;
37
+ constructor(options = {}) {
38
+ super();
39
+ this.timeout = options.timeout ?? 30000;
40
+ // Merge default method timeouts with user-provided overrides
41
+ this.methodTimeouts = {
42
+ ...DEFAULT_METHOD_TIMEOUTS,
43
+ ...options.methodTimeouts,
44
+ };
45
+ this.stdin = options.stdin ?? process.stdin;
46
+ this.stdout = options.stdout ?? process.stdout;
47
+ // Set up stdin to receive data
48
+ if ('setEncoding' in this.stdin) {
49
+ this.stdin.setEncoding('utf8');
50
+ }
51
+ this.stdin.on('data', (chunk) => this.handleData(chunk.toString()));
52
+ this.stdin.on('end', () => this.handleEnd());
53
+ this.stdin.on('error', (err) => this.handleError(err));
54
+ }
55
+ /**
56
+ * Send a JSON-RPC request and wait for response
57
+ */
58
+ async sendRequest(method, params, options) {
59
+ if (this.closed) {
60
+ throw new Error('JsonRpcFraming is closed');
61
+ }
62
+ const id = this.nextId++;
63
+ const request = {
64
+ jsonrpc: '2.0',
65
+ id,
66
+ method,
67
+ ...(params !== undefined && { params }),
68
+ };
69
+ // Get timeout for this method (use per-method override if available)
70
+ const timeoutMs = this.methodTimeouts[method] ?? this.timeout;
71
+ return new Promise((resolve, reject) => {
72
+ // Set up timeout
73
+ const timer = setTimeout(() => {
74
+ this.pending.delete(id);
75
+ reject(new Error(`Request ${id} timed out after ${timeoutMs}ms (method: ${method})`));
76
+ }, timeoutMs);
77
+ // Store pending request with timeout info for potential resets
78
+ this.pending.set(id, { resolve, reject, timer, method, timeoutMs, id, options });
79
+ // Send the request
80
+ this.send(request);
81
+ });
82
+ }
83
+ /**
84
+ * Send a JSON-RPC notification (no response expected)
85
+ */
86
+ sendNotification(method, params) {
87
+ if (this.closed) {
88
+ throw new Error('JsonRpcFraming is closed');
89
+ }
90
+ const notification = {
91
+ jsonrpc: '2.0',
92
+ method,
93
+ ...(params !== undefined && { params }),
94
+ };
95
+ this.send(notification);
96
+ }
97
+ /**
98
+ * Send a JSON-RPC response (in response to a request)
99
+ */
100
+ sendResponse(id, result) {
101
+ if (this.closed) {
102
+ throw new Error('JsonRpcFraming is closed');
103
+ }
104
+ const response = {
105
+ jsonrpc: '2.0',
106
+ id,
107
+ result,
108
+ };
109
+ this.send(response);
110
+ }
111
+ /**
112
+ * Send a JSON-RPC error response
113
+ */
114
+ sendError(id, error) {
115
+ if (this.closed) {
116
+ throw new Error('JsonRpcFraming is closed');
117
+ }
118
+ const errorResponse = {
119
+ jsonrpc: '2.0',
120
+ id,
121
+ error,
122
+ };
123
+ this.send(errorResponse);
124
+ }
125
+ /**
126
+ * Close the framing layer
127
+ */
128
+ close() {
129
+ if (this.closed)
130
+ return;
131
+ this.closed = true;
132
+ // Reject all pending requests
133
+ for (const [id, pending] of this.pending.entries()) {
134
+ clearTimeout(pending.timer);
135
+ pending.reject(new Error('JsonRpcFraming closed'));
136
+ this.pending.delete(id);
137
+ }
138
+ this.emit('close');
139
+ }
140
+ /**
141
+ * Check if the framing layer is closed
142
+ */
143
+ isClosed() {
144
+ return this.closed;
145
+ }
146
+ /**
147
+ * Reset timeout timers for all pending requests
148
+ *
149
+ * Called when activity is detected from the agent (incoming requests/responses),
150
+ * indicating the agent is still alive and working. This implements a keepalive
151
+ * mechanism that prevents timeout during long-running operations where the agent
152
+ * is actively making tool calls.
153
+ */
154
+ resetPendingTimers() {
155
+ for (const pending of this.pending.values()) {
156
+ // Clear the old timer
157
+ clearTimeout(pending.timer);
158
+ // Create a new timer with the same timeout duration
159
+ pending.timer = setTimeout(() => {
160
+ this.pending.delete(pending.id);
161
+ pending.reject(new Error(`Request ${pending.id} timed out after ${pending.timeoutMs}ms (method: ${pending.method})`));
162
+ }, pending.timeoutMs);
163
+ }
164
+ }
165
+ /**
166
+ * Send a JSON-RPC message
167
+ */
168
+ send(message) {
169
+ try {
170
+ const json = JSON.stringify(message);
171
+ this.stdout.write(`${json}\n`);
172
+ }
173
+ catch (err) {
174
+ console.error(`Error sending message: ${err}`);
175
+ }
176
+ }
177
+ /**
178
+ * Handle incoming data from stdin
179
+ */
180
+ handleData(chunk) {
181
+ this.buffer += chunk;
182
+ // Process complete lines
183
+ let newlineIndex = this.buffer.indexOf('\n');
184
+ while (newlineIndex !== -1) {
185
+ const line = this.buffer.slice(0, newlineIndex);
186
+ this.buffer = this.buffer.slice(newlineIndex + 1);
187
+ if (line.trim()) {
188
+ this.processLine(line);
189
+ }
190
+ newlineIndex = this.buffer.indexOf('\n');
191
+ }
192
+ }
193
+ /**
194
+ * Process a complete line of input
195
+ */
196
+ processLine(line) {
197
+ try {
198
+ const message = JSON.parse(line);
199
+ this.handleMessage(message);
200
+ }
201
+ catch {
202
+ // Malformed JSON - send parse error response
203
+ this.sendError(null, {
204
+ code: -32700,
205
+ message: 'Parse error',
206
+ data: { line },
207
+ });
208
+ }
209
+ }
210
+ /**
211
+ * Handle a parsed JSON-RPC message
212
+ */
213
+ handleMessage(message) {
214
+ if (isResponse(message)) {
215
+ this.handleResponse(message);
216
+ }
217
+ else if (isError(message)) {
218
+ this.handleErrorResponse(message);
219
+ }
220
+ else if (isRequest(message)) {
221
+ // Agent is sending us a request (e.g., tool call) - this proves it's alive
222
+ // Reset timeout timers for any pending requests
223
+ this.resetPendingTimers();
224
+ this.emit('request', message);
225
+ }
226
+ else if (isNotification(message)) {
227
+ // Agent is sending us a notification - also proves it's alive
228
+ this.resetPendingTimers();
229
+ this.emit('notification', message);
230
+ }
231
+ else {
232
+ // Invalid message
233
+ this.sendError(null, {
234
+ code: -32600,
235
+ message: 'Invalid Request',
236
+ data: message,
237
+ });
238
+ }
239
+ }
240
+ /**
241
+ * Handle a JSON-RPC response
242
+ */
243
+ handleResponse(response) {
244
+ const pending = this.pending.get(response.id);
245
+ if (pending) {
246
+ clearTimeout(pending.timer);
247
+ this.pending.delete(response.id);
248
+ pending.resolve(response.result);
249
+ }
250
+ else {
251
+ // Unexpected response
252
+ console.error(`Warning: Received response for unknown request ID: ${response.id}`);
253
+ }
254
+ }
255
+ /**
256
+ * Handle a JSON-RPC error response
257
+ */
258
+ handleErrorResponse(error) {
259
+ // JSON-RPC error code for "Method not found"
260
+ const METHOD_NOT_FOUND = -32601;
261
+ if (error.id === null) {
262
+ // Error without request ID - emit as event
263
+ this.emit('error', error.error);
264
+ return;
265
+ }
266
+ const pending = this.pending.get(error.id);
267
+ if (pending) {
268
+ clearTimeout(pending.timer);
269
+ this.pending.delete(error.id);
270
+ // Skip logging for expected "Method not found" errors on optional methods
271
+ const isSilentMethodNotFound = pending.options?.silentMethodNotFound &&
272
+ error.error.code === METHOD_NOT_FOUND;
273
+ if (!isSilentMethodNotFound) {
274
+ console.error(`JSON-RPC error: ${error.error.message} (code: ${error.error.code}, method: ${pending.method})`);
275
+ }
276
+ const err = Object.assign(new Error(error.error.message), {
277
+ code: error.error.code,
278
+ data: error.error.data,
279
+ });
280
+ pending.reject(err);
281
+ }
282
+ else {
283
+ // Unexpected error response
284
+ console.error(`Warning: Received error for unknown request ID: ${error.id}`);
285
+ }
286
+ }
287
+ /**
288
+ * Handle stdin end
289
+ */
290
+ handleEnd() {
291
+ this.close();
292
+ }
293
+ /**
294
+ * Handle stdin error
295
+ */
296
+ handleError(err) {
297
+ console.error(`Stdin error: ${err.message}`);
298
+ this.emit('error', err);
299
+ this.close();
300
+ }
301
+ }
302
+ //# sourceMappingURL=framing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framing.js","sourceRoot":"","sources":["../../src/acp/framing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ACP (Agent Communication Protocol) Module
3
+ *
4
+ * Provides a JSON-RPC 2.0 based client for Agent Client Protocol communication.
5
+ * Handles bidirectional stdio communication with ACP-compliant agents.
6
+ */
7
+ export { ACPClient } from './client.js';
8
+ export type { ACPClientEvents, ACPClientOptions, SessionState } from './client.js';
9
+ export { JsonRpcFraming } from './framing.js';
10
+ export type { JsonRpcFramingOptions, SendRequestOptions, } from './framing.js';
11
+ export type { JsonRpcError, JsonRpcErrorObject, JsonRpcMessage, JsonRpcNotification, JsonRpcRequest, JsonRpcResponse, } from './types.js';
12
+ export { isError, isNotification, isRequest, isResponse, } from './types.js';
13
+ export type { AgentCapabilities, ClientCapabilities, ContentBlock, InitializeRequest, InitializeResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, RequestPermissionRequest, RequestPermissionResponse, SessionNotification, SessionUpdate, StopReason, TextContent, } from './types.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/acp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGnF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EACV,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,OAAO,EACP,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * ACP (Agent Communication Protocol) Module
3
+ *
4
+ * Provides a JSON-RPC 2.0 based client for Agent Client Protocol communication.
5
+ * Handles bidirectional stdio communication with ACP-compliant agents.
6
+ */
7
+ // Client
8
+ export { ACPClient } from './client.js';
9
+ // Framing layer
10
+ export { JsonRpcFraming } from './framing.js';
11
+ // Types - Type guards
12
+ export { isError, isNotification, isRequest, isResponse, } from './types.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/acp/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgB9C,sBAAsB;AACtB,OAAO,EACL,OAAO,EACP,cAAc,EACd,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * ACP (Agent Communication Protocol) Type Definitions
3
+ *
4
+ * This module re-exports types from the official @agentclientprotocol/sdk
5
+ * to ensure spec compliance. Types are imported at compile-time only
6
+ * (zero runtime cost since TypeScript types are erased).
7
+ *
8
+ * We keep JSON-RPC 2.0 base types and type guards local since the SDK
9
+ * doesn't export them in the same way we use them.
10
+ */
11
+ export type { AgentCapabilities, ClientCapabilities, ContentBlock, InitializeRequest, InitializeResponse, NewSessionRequest, NewSessionResponse, PromptRequest, PromptResponse, RequestPermissionRequest, RequestPermissionResponse, SessionNotification, SessionUpdate, StopReason, TextContent, } from '@agentclientprotocol/sdk';
12
+ /**
13
+ * JSON-RPC 2.0 Request
14
+ */
15
+ export interface JsonRpcRequest {
16
+ jsonrpc: '2.0';
17
+ id: string | number;
18
+ method: string;
19
+ params?: unknown;
20
+ }
21
+ /**
22
+ * JSON-RPC 2.0 Response (success)
23
+ */
24
+ export interface JsonRpcResponse {
25
+ jsonrpc: '2.0';
26
+ id: string | number;
27
+ result: unknown;
28
+ }
29
+ /**
30
+ * JSON-RPC 2.0 Error object
31
+ */
32
+ export interface JsonRpcErrorObject {
33
+ code: number;
34
+ message: string;
35
+ data?: unknown;
36
+ }
37
+ /**
38
+ * JSON-RPC 2.0 Error response
39
+ */
40
+ export interface JsonRpcError {
41
+ jsonrpc: '2.0';
42
+ id: string | number | null;
43
+ error: JsonRpcErrorObject;
44
+ }
45
+ /**
46
+ * JSON-RPC 2.0 Notification (no response expected)
47
+ */
48
+ export interface JsonRpcNotification {
49
+ jsonrpc: '2.0';
50
+ method: string;
51
+ params?: unknown;
52
+ }
53
+ /**
54
+ * Any JSON-RPC message type
55
+ */
56
+ export type JsonRpcMessage = JsonRpcRequest | JsonRpcResponse | JsonRpcError | JsonRpcNotification;
57
+ /**
58
+ * Check if a value is a non-null object
59
+ */
60
+ export declare function isObject(value: unknown): value is Record<string, unknown>;
61
+ /**
62
+ * Check if a value is a string
63
+ */
64
+ export declare function isString(value: unknown): value is string;
65
+ /**
66
+ * Check if a value is a number
67
+ */
68
+ export declare function isNumber(value: unknown): value is number;
69
+ /**
70
+ * Check if an object has a specific property with an optional specific value
71
+ */
72
+ export declare function hasProperty<T extends string>(obj: unknown, key: T, value?: unknown): obj is Record<T, unknown>;
73
+ /**
74
+ * Type guard for JSON-RPC Request
75
+ */
76
+ export declare function isRequest(msg: unknown): msg is JsonRpcRequest;
77
+ /**
78
+ * Type guard for JSON-RPC Response
79
+ */
80
+ export declare function isResponse(msg: unknown): msg is JsonRpcResponse;
81
+ /**
82
+ * Type guard for JSON-RPC Error
83
+ */
84
+ export declare function isError(msg: unknown): msg is JsonRpcError;
85
+ /**
86
+ * Type guard for JSON-RPC Notification
87
+ */
88
+ export declare function isNotification(msg: unknown): msg is JsonRpcNotification;
89
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/acp/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAWlC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,eAAe,GACf,YAAY,GACZ,mBAAmB,CAAC;AAQxB;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,CAAC,EACN,KAAK,CAAC,EAAE,OAAO,GACd,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,CAK3B;AASD;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,cAAc,CAS7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,eAAe,CAS/D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,YAAY,CAazD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,mBAAmB,CAQvE"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * ACP (Agent Communication Protocol) Type Definitions
3
+ *
4
+ * This module re-exports types from the official @agentclientprotocol/sdk
5
+ * to ensure spec compliance. Types are imported at compile-time only
6
+ * (zero runtime cost since TypeScript types are erased).
7
+ *
8
+ * We keep JSON-RPC 2.0 base types and type guards local since the SDK
9
+ * doesn't export them in the same way we use them.
10
+ */
11
+ // ============================================================================
12
+ // Validation Helpers
13
+ //
14
+ // Simple runtime type checks used by the JSON-RPC type guards.
15
+ // ============================================================================
16
+ /**
17
+ * Check if a value is a non-null object
18
+ */
19
+ export function isObject(value) {
20
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
21
+ }
22
+ /**
23
+ * Check if a value is a string
24
+ */
25
+ export function isString(value) {
26
+ return typeof value === 'string';
27
+ }
28
+ /**
29
+ * Check if a value is a number
30
+ */
31
+ export function isNumber(value) {
32
+ return typeof value === 'number' && !Number.isNaN(value);
33
+ }
34
+ /**
35
+ * Check if an object has a specific property with an optional specific value
36
+ */
37
+ export function hasProperty(obj, key, value) {
38
+ if (!isObject(obj))
39
+ return false;
40
+ if (!(key in obj))
41
+ return false;
42
+ if (value !== undefined && obj[key] !== value)
43
+ return false;
44
+ return true;
45
+ }
46
+ // ============================================================================
47
+ // JSON-RPC Type Guards
48
+ //
49
+ // Runtime type guards for validating incoming messages.
50
+ // These work with unknown data and narrow to specific types.
51
+ // ============================================================================
52
+ /**
53
+ * Type guard for JSON-RPC Request
54
+ */
55
+ export function isRequest(msg) {
56
+ return (isObject(msg) &&
57
+ hasProperty(msg, 'jsonrpc', '2.0') &&
58
+ 'id' in msg &&
59
+ (isString(msg.id) || isNumber(msg.id)) &&
60
+ hasProperty(msg, 'method') &&
61
+ isString(msg.method));
62
+ }
63
+ /**
64
+ * Type guard for JSON-RPC Response
65
+ */
66
+ export function isResponse(msg) {
67
+ return (isObject(msg) &&
68
+ hasProperty(msg, 'jsonrpc', '2.0') &&
69
+ 'id' in msg &&
70
+ (isString(msg.id) || isNumber(msg.id)) &&
71
+ 'result' in msg &&
72
+ !('error' in msg));
73
+ }
74
+ /**
75
+ * Type guard for JSON-RPC Error
76
+ */
77
+ export function isError(msg) {
78
+ return (isObject(msg) &&
79
+ hasProperty(msg, 'jsonrpc', '2.0') &&
80
+ 'id' in msg &&
81
+ (msg.id === null || isString(msg.id) || isNumber(msg.id)) &&
82
+ hasProperty(msg, 'error') &&
83
+ isObject(msg.error) &&
84
+ hasProperty(msg.error, 'code') &&
85
+ isNumber(msg.error.code) &&
86
+ hasProperty(msg.error, 'message') &&
87
+ isString(msg.error.message));
88
+ }
89
+ /**
90
+ * Type guard for JSON-RPC Notification
91
+ */
92
+ export function isNotification(msg) {
93
+ return (isObject(msg) &&
94
+ hasProperty(msg, 'jsonrpc', '2.0') &&
95
+ !('id' in msg) &&
96
+ hasProperty(msg, 'method') &&
97
+ isString(msg.method));
98
+ }
99
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/acp/types.ts"],"names":[],"mappings":"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"}