@theway-ai/sdk 0.1.9

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 (60) hide show
  1. package/README.md +108 -0
  2. package/dist/client.d.ts +180 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +531 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/generated/commands.d.ts +195 -0
  7. package/dist/generated/commands.d.ts.map +1 -0
  8. package/dist/generated/commands.js +633 -0
  9. package/dist/generated/commands.js.map +1 -0
  10. package/dist/generated/events.d.ts +158 -0
  11. package/dist/generated/events.d.ts.map +1 -0
  12. package/dist/generated/events.js +1122 -0
  13. package/dist/generated/events.js.map +1 -0
  14. package/dist/generated/extensions.d.ts +184 -0
  15. package/dist/generated/extensions.d.ts.map +1 -0
  16. package/dist/generated/extensions.js +1309 -0
  17. package/dist/generated/extensions.js.map +1 -0
  18. package/dist/generated/graph_engine.d.ts +422 -0
  19. package/dist/generated/graph_engine.d.ts.map +1 -0
  20. package/dist/generated/graph_engine.js +3048 -0
  21. package/dist/generated/graph_engine.js.map +1 -0
  22. package/dist/generated/health.d.ts +83 -0
  23. package/dist/generated/health.d.ts.map +1 -0
  24. package/dist/generated/health.js +179 -0
  25. package/dist/generated/health.js.map +1 -0
  26. package/dist/generated/session.d.ts +854 -0
  27. package/dist/generated/session.d.ts.map +1 -0
  28. package/dist/generated/session.js +6790 -0
  29. package/dist/generated/session.js.map +1 -0
  30. package/dist/generated/settings.d.ts +182 -0
  31. package/dist/generated/settings.d.ts.map +1 -0
  32. package/dist/generated/settings.js +324 -0
  33. package/dist/generated/settings.js.map +1 -0
  34. package/dist/generated/state.d.ts +304 -0
  35. package/dist/generated/state.d.ts.map +1 -0
  36. package/dist/generated/state.js +1391 -0
  37. package/dist/generated/state.js.map +1 -0
  38. package/dist/generated/tools.d.ts +413 -0
  39. package/dist/generated/tools.d.ts.map +1 -0
  40. package/dist/generated/tools.js +2487 -0
  41. package/dist/generated/tools.js.map +1 -0
  42. package/dist/health.d.ts +20 -0
  43. package/dist/health.d.ts.map +1 -0
  44. package/dist/health.js +62 -0
  45. package/dist/health.js.map +1 -0
  46. package/dist/index.d.ts +15 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +21 -0
  49. package/dist/index.js.map +1 -0
  50. package/docs/PROTOCOL.md +129 -0
  51. package/package.json +47 -0
  52. package/proto/commands.proto +70 -0
  53. package/proto/events.proto +87 -0
  54. package/proto/extensions.proto +99 -0
  55. package/proto/graph_engine.proto +236 -0
  56. package/proto/health.proto +26 -0
  57. package/proto/session.proto +498 -0
  58. package/proto/settings.proto +79 -0
  59. package/proto/state.proto +130 -0
  60. package/proto/tools.proto +238 -0
package/dist/client.js ADDED
@@ -0,0 +1,531 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import { CommandServiceClient as CommandServiceClientCtor, MessageMode, } from './generated/commands.js';
3
+ import { EventServiceClient as EventServiceClientCtor, } from './generated/events.js';
4
+ import { ExtensionServiceClient as ExtensionServiceClientCtor, } from './generated/extensions.js';
5
+ import { GraphEngineServiceClient as GraphEngineServiceClientCtor, } from './generated/graph_engine.js';
6
+ import { SessionServiceClient as SessionServiceClientCtor, } from './generated/session.js';
7
+ import { SettingsServiceClient as SettingsServiceClientCtor, } from './generated/settings.js';
8
+ import { ToolServiceClient as ToolServiceClientCtor, } from './generated/tools.js';
9
+ import { StorageServiceClient as StorageServiceClientCtor, } from './generated/state.js';
10
+ // ── authority cleaning ──
11
+ const SCHEME_PREFIX = /^https?:\/\//;
12
+ const TRAILING_SLASHES = /\/+$/;
13
+ const THINKING_LEVELS = new Set([
14
+ 'off',
15
+ 'minimal',
16
+ 'low',
17
+ 'medium',
18
+ 'high',
19
+ 'xhigh',
20
+ ]);
21
+ /**
22
+ * Typed gRPC client for the `theway --grpc` loopback server
23
+ * (theway.grpc.v1.CommandService / SessionService / SettingsService /
24
+ * ExtensionService / ToolService / StorageService / GraphEngineService /
25
+ * EventService).
26
+ * Generated from the domain proto files
27
+ * and health.proto (ts-proto + @grpc/grpc-js) — no runtime proto loading.
28
+ *
29
+ * Command RPCs (SendMessage / SetModel / …) resolve the raw CommandResult;
30
+ * the convenience wrappers (`prompt`, `setModelSpec`, `abort`, …) throw when
31
+ * the server replies `accepted: false`, mirroring the caller-side contract of
32
+ * the JSON channels.
33
+ */
34
+ export class ThewayGrpcClient {
35
+ #session;
36
+ #command;
37
+ #extensions;
38
+ #graph;
39
+ #events;
40
+ #settings;
41
+ #tools;
42
+ #storage;
43
+ constructor(baseUrl, credentials = grpc.credentials.createInsecure()) {
44
+ const authority = baseUrl.replace(SCHEME_PREFIX, '').replace(TRAILING_SLASHES, '');
45
+ this.#session = new SessionServiceClientCtor(authority, credentials);
46
+ this.#command = new CommandServiceClientCtor(authority, credentials);
47
+ this.#extensions = new ExtensionServiceClientCtor(authority, credentials);
48
+ this.#graph = new GraphEngineServiceClientCtor(authority, credentials);
49
+ this.#events = new EventServiceClientCtor(authority, credentials);
50
+ this.#settings = new SettingsServiceClientCtor(authority, credentials);
51
+ this.#tools = new ToolServiceClientCtor(authority, credentials);
52
+ this.#storage = new StorageServiceClientCtor(authority, credentials);
53
+ }
54
+ // ── session state ──
55
+ /** `GetSnapshot` — the full nested session snapshot. Pass a session id or omit for the daemon's current session. */
56
+ getSnapshot(sessionId = '') {
57
+ const request = { sessionId };
58
+ return this.#call(this.#session.getSnapshot.bind(this.#session), 'GetSnapshot', request);
59
+ }
60
+ /** `ListSessionMessages` — cursor-paginated full message history. */
61
+ listSessionMessages(sessionId, limit = 50, beforeEntryId) {
62
+ const request = {
63
+ sessionId,
64
+ limit,
65
+ beforeEntryId,
66
+ };
67
+ return this.#call(this.#session.listSessionMessages.bind(this.#session), 'ListSessionMessages', request);
68
+ }
69
+ /** `CollapseSession` — collapse a session into a session graph node. */
70
+ collapseSession(request) {
71
+ return this.#call(this.#session.collapseSession.bind(this.#session), 'CollapseSession', request);
72
+ }
73
+ // ── session graph nodes ──
74
+ /** `GetSessionGraphNode` — fetch one session graph node. */
75
+ async getSessionGraphNode(sessionId, nodeId) {
76
+ const request = { sessionId, nodeId };
77
+ const response = await this.#call(this.#session.getSessionGraphNode.bind(this.#session), 'GetSessionGraphNode', request);
78
+ if (!response.node) {
79
+ throw new Error('theway grpc: GetSessionGraphNode returned no node');
80
+ }
81
+ return response.node;
82
+ }
83
+ /** `ListSessionGraphNodeMessages` — list messages attached to a session graph node. */
84
+ listSessionGraphNodeMessages(sessionId, nodeId, offset = 0, limit = 0) {
85
+ const request = { sessionId, nodeId, offset, limit };
86
+ return this.#call(this.#session.listSessionGraphNodeMessages.bind(this.#session), 'ListSessionGraphNodeMessages', request);
87
+ }
88
+ /** `StreamSessionGraphNode` — open a streaming session graph node frame stream. */
89
+ streamSessionGraphNode(sessionId, nodeId) {
90
+ const request = { sessionId, nodeId };
91
+ return this.#session.streamSessionGraphNode(request);
92
+ }
93
+ /** `GetNodeOutput` — a DAG node's output fragment from an offset. */
94
+ getNodeOutput(request) {
95
+ return this.#call(this.#graph.getNodeOutput.bind(this.#graph), 'GetNodeOutput', request);
96
+ }
97
+ async prompt(textOrSessionId, imagesOrText = [], sessionIdOrImages) {
98
+ let text;
99
+ let images = [];
100
+ let sessionId;
101
+ if (typeof imagesOrText === 'string') {
102
+ sessionId = textOrSessionId;
103
+ text = imagesOrText;
104
+ if (sessionIdOrImages !== undefined) {
105
+ images = sessionIdOrImages;
106
+ }
107
+ }
108
+ else {
109
+ text = textOrSessionId;
110
+ images = imagesOrText ?? [];
111
+ if (sessionIdOrImages !== undefined) {
112
+ sessionId = sessionIdOrImages;
113
+ }
114
+ }
115
+ const request = { text, images, mode: MessageMode.QUEUE, sessionId };
116
+ const result = await this.sendMessage(request);
117
+ if (!result.accepted) {
118
+ throw new Error('theway grpc: SendMessage was not accepted by the server');
119
+ }
120
+ }
121
+ /** `SendMessage` — raw request (mode=INTERRUPT supported). */
122
+ sendMessage(request) {
123
+ return this.#call(this.#command.sendMessage.bind(this.#command), 'SendMessage', request);
124
+ }
125
+ /** `SetModel` — switch model with a composed `provider:model` spec. */
126
+ async setModelSpec(spec, sessionId = '') {
127
+ const request = { sessionId, spec };
128
+ const result = await this.#call(this.#command.setModel.bind(this.#command), 'SetModel', request);
129
+ if (!result.accepted) {
130
+ throw new Error('theway grpc: SetModel was not accepted by the server');
131
+ }
132
+ }
133
+ setModel(providerOrSessionId, modelOrSpec, sessionId = '') {
134
+ if (modelOrSpec.includes(':')) {
135
+ return this.setModelSpec(modelOrSpec, providerOrSessionId);
136
+ }
137
+ return this.setModelSpec(`${providerOrSessionId}:${modelOrSpec}`, sessionId);
138
+ }
139
+ async setThinking(levelOrSessionId, sessionIdOrLevel = '') {
140
+ let level;
141
+ let sessionId;
142
+ if (THINKING_LEVELS.has(levelOrSessionId)) {
143
+ level = levelOrSessionId;
144
+ sessionId = sessionIdOrLevel;
145
+ }
146
+ else if (THINKING_LEVELS.has(sessionIdOrLevel)) {
147
+ sessionId = levelOrSessionId;
148
+ level = sessionIdOrLevel;
149
+ }
150
+ else {
151
+ level = levelOrSessionId;
152
+ sessionId = sessionIdOrLevel;
153
+ }
154
+ const request = { sessionId, level };
155
+ const result = await this.#call(this.#command.setThinking.bind(this.#command), 'SetThinking', request);
156
+ if (!result.accepted) {
157
+ throw new Error('theway grpc: SetThinking was not accepted by the server');
158
+ }
159
+ }
160
+ /** `Cancel` — stop the in-flight turn (same as local Ctrl-C). */
161
+ async abort(sessionId = '') {
162
+ const request = { sessionId };
163
+ const result = await this.#call(this.#command.cancel.bind(this.#command), 'Cancel', request);
164
+ if (!result.accepted) {
165
+ throw new Error('theway grpc: Cancel was not accepted by the server');
166
+ }
167
+ }
168
+ async resolveControlPlane(approveOrSessionId, sessionIdOrApprove = '') {
169
+ let approve;
170
+ let sessionId;
171
+ if (typeof approveOrSessionId === 'boolean') {
172
+ approve = approveOrSessionId;
173
+ sessionId = sessionIdOrApprove;
174
+ }
175
+ else {
176
+ sessionId = approveOrSessionId;
177
+ approve = sessionIdOrApprove;
178
+ }
179
+ const request = { sessionId, approve };
180
+ const result = await this.#call(this.#command.approve.bind(this.#command), 'Approve', request);
181
+ if (!result.accepted) {
182
+ throw new Error('theway grpc: Approve was not accepted by the server');
183
+ }
184
+ }
185
+ // ── runtime extensions ──
186
+ /** Structured extension catalog, redacted diagnostics and contributions. */
187
+ getExtensions() {
188
+ return this.#call(this.#extensions.getExtensions.bind(this.#extensions), 'GetExtensions', {});
189
+ }
190
+ /** Invoke a registered extension command in either interactive or headless mode. */
191
+ invokeExtensionCommand(request) {
192
+ return this.#call(this.#extensions.invokeCommand.bind(this.#extensions), 'InvokeExtensionCommand', request);
193
+ }
194
+ /** Re-discover extensions; active work may return `status=pending`. */
195
+ reloadExtensions(request = { cancelActive: false }) {
196
+ return this.#call(this.#extensions.reload.bind(this.#extensions), 'ReloadExtensions', request);
197
+ }
198
+ /** Persist a project or exact-package trust decision and request reload. */
199
+ decideExtensionTrust(request) {
200
+ return this.#call(this.#extensions.decideTrust.bind(this.#extensions), 'DecideExtensionTrust', request);
201
+ }
202
+ // ── graph control (DAG + goal runs) ──
203
+ /** `GraphCancel` — cancel a run. */
204
+ async graphCancel(sessionId, runId) {
205
+ const request = { sessionId, runId };
206
+ const result = await this.#call(this.#graph.graphCancel.bind(this.#graph), 'GraphCancel', request);
207
+ if (!result.accepted) {
208
+ throw new Error('theway grpc: GraphCancel was not accepted by the server');
209
+ }
210
+ }
211
+ /** `GraphRetry` — re-run failed/cancelled nodes (omitted nodeId = all). */
212
+ graphRetry(sessionId, runId, nodeId) {
213
+ const request = { sessionId, runId, nodeId };
214
+ return this.#call(this.#graph.graphRetry.bind(this.#graph), 'GraphRetry', request);
215
+ }
216
+ /** `GraphSkip` — skip a node (counts as success for downstream). */
217
+ graphSkip(sessionId, runId, nodeId) {
218
+ const request = { sessionId, runId, nodeId };
219
+ return this.#call(this.#graph.graphSkip.bind(this.#graph), 'GraphSkip', request);
220
+ }
221
+ /** `GraphNodeInterrupt` — stop the node's in-flight turn. */
222
+ async graphNodeInterrupt(sessionId, runId, nodeId) {
223
+ const request = { sessionId, runId, nodeId };
224
+ const result = await this.#call(this.#graph.graphNodeInterrupt.bind(this.#graph), 'GraphNodeInterrupt', request);
225
+ if (!result.accepted) {
226
+ throw new Error('theway grpc: GraphNodeInterrupt was not accepted by the server');
227
+ }
228
+ }
229
+ /** `GraphNodeSteer` — queue a steering message at the node's next turn boundary. */
230
+ async graphNodeSteer(sessionId, runId, nodeId, text) {
231
+ const request = { sessionId, runId, nodeId, text };
232
+ const result = await this.#call(this.#graph.graphNodeSteer.bind(this.#graph), 'GraphNodeSteer', request);
233
+ if (!result.accepted) {
234
+ throw new Error('theway grpc: GraphNodeSteer was not accepted by the server');
235
+ }
236
+ }
237
+ /** `GraphCheckpoint` — export run snapshots as portable JSON. */
238
+ graphCheckpoint(request = {}) {
239
+ return this.#call(this.#graph.graphCheckpoint.bind(this.#graph), 'GraphCheckpoint', request);
240
+ }
241
+ /** `GraphRestore` — revive a run from a GraphCheckpoint snapshot. */
242
+ graphRestore(sessionId, snapshot) {
243
+ const request = { sessionId, snapshot };
244
+ return this.#call(this.#graph.graphRestore.bind(this.#graph), 'GraphRestore', request);
245
+ }
246
+ /** `GraphList` — enumerate one session's graph runs. */
247
+ graphList(sessionId) {
248
+ const request = { sessionId };
249
+ return this.#call(this.#graph.graphList.bind(this.#graph), 'GraphList', request);
250
+ }
251
+ // ── session resources ──
252
+ /** `ListSessions` — all sessions (live + archived) with the current one marked. */
253
+ listSessions() {
254
+ return this.#call(this.#session.listSessions.bind(this.#session), 'ListSessions', {});
255
+ }
256
+ createSession(nameOrSessionId, sessionIdOrMetadata, metadata = {}) {
257
+ let name;
258
+ let sessionId;
259
+ if (typeof sessionIdOrMetadata === 'object' && sessionIdOrMetadata !== null) {
260
+ sessionId = nameOrSessionId;
261
+ metadata = sessionIdOrMetadata;
262
+ }
263
+ else {
264
+ name = nameOrSessionId;
265
+ sessionId = sessionIdOrMetadata;
266
+ }
267
+ const request = { name, sessionId, metadata };
268
+ return this.#call(this.#session.createSession.bind(this.#session), 'CreateSession', request);
269
+ }
270
+ /** `UpdateSessionMetadata` — update opaque session metadata KV. */
271
+ async updateSessionMetadata(sessionId, metadata) {
272
+ const request = { sessionId, metadata };
273
+ const result = await this.#call(this.#session.updateSessionMetadata.bind(this.#session), 'UpdateSessionMetadata', request);
274
+ if (!result.accepted) {
275
+ throw new Error('theway grpc: UpdateSessionMetadata was not accepted by the server');
276
+ }
277
+ }
278
+ /** `RenameSession` — rename a session. */
279
+ async renameSession(sessionId, name) {
280
+ const request = { sessionId, name };
281
+ const result = await this.#call(this.#session.renameSession.bind(this.#session), 'RenameSession', request);
282
+ if (!result.accepted) {
283
+ throw new Error('theway grpc: RenameSession was not accepted by the server');
284
+ }
285
+ }
286
+ /** `DeleteSession` — delete a session (refused while graphs are running). */
287
+ deleteSession(sessionId) {
288
+ const request = { sessionId };
289
+ return this.#call(this.#session.deleteSession.bind(this.#session), 'DeleteSession', request);
290
+ }
291
+ // ── session activation and credentials (issue #26) ──
292
+ /**
293
+ * `ActivateSession` — atomically create or resume a client-bound session.
294
+ * The server applies the runtime before replying, so a successful response
295
+ * means the daemon is ready to operate in `runtime.workDir`.
296
+ */
297
+ activateSession(request) {
298
+ return this.#call(this.#session.activateSession.bind(this.#session), 'ActivateSession', request);
299
+ }
300
+ /**
301
+ * `SetCredential` — install a memory-only provider secret for a session.
302
+ * Secrets are never persisted and never appear in responses or events.
303
+ */
304
+ async setCredential(sessionId, provider, secret) {
305
+ const request = {
306
+ sessionId,
307
+ provider,
308
+ secret: typeof secret === 'string' ? new TextEncoder().encode(secret) : secret,
309
+ };
310
+ const result = await this.#call(this.#session.setCredential.bind(this.#session), 'SetCredential', request);
311
+ if (!result.accepted) {
312
+ throw new Error('theway grpc: SetCredential was not accepted by the server');
313
+ }
314
+ }
315
+ /**
316
+ * `ClearCredential` — remove a session credential. With no provider, clears
317
+ * every provider secret held for the session.
318
+ */
319
+ async clearCredential(sessionId, provider) {
320
+ const request = { sessionId, provider };
321
+ const result = await this.#call(this.#session.clearCredential.bind(this.#session), 'ClearCredential', request);
322
+ if (!result.accepted) {
323
+ throw new Error('theway grpc: ClearCredential was not accepted by the server');
324
+ }
325
+ }
326
+ // ── settings / config ──
327
+ /** `GetConfig` — the daemon's current configuration view. */
328
+ getConfig() {
329
+ return this.#call(this.#settings.getConfig.bind(this.#settings), 'GetConfig', {});
330
+ }
331
+ /**
332
+ * `SetConfig` — push a partial configuration update. Absent fields keep
333
+ * the daemon's current value (repeated fields default to empty = no-op).
334
+ */
335
+ async setConfig(config) {
336
+ const result = await this.#call(this.#settings.setConfig.bind(this.#settings), 'SetConfig', fillDaemonConfig(config));
337
+ if (!result.accepted) {
338
+ throw new Error('theway grpc: SetConfig was not accepted by the server');
339
+ }
340
+ }
341
+ /** `Configure` — alias of `setConfig` (JSON-RPC / WS / MCP verb alignment). */
342
+ async configure(config) {
343
+ const result = await this.#call(this.#settings.configure.bind(this.#settings), 'Configure', fillDaemonConfig(config));
344
+ if (!result.accepted) {
345
+ throw new Error('theway grpc: Configure was not accepted by the server');
346
+ }
347
+ }
348
+ // ── tool operations ──
349
+ /** `ReadFile` — read a file with line pagination. */
350
+ toolRead(request) {
351
+ return this.#call(this.#tools.readFile.bind(this.#tools), 'ReadFile', request);
352
+ }
353
+ /** `WriteFile` — write a file. */
354
+ toolWrite(request) {
355
+ return this.#call(this.#tools.writeFile.bind(this.#tools), 'WriteFile', request);
356
+ }
357
+ /** `EditFile` — search-and-replace edit. */
358
+ toolEdit(request) {
359
+ return this.#call(this.#tools.editFile.bind(this.#tools), 'EditFile', request);
360
+ }
361
+ /** `ExecCommand` — streaming shell execution. */
362
+ toolExec(request) {
363
+ return this.#tools.execCommand(request);
364
+ }
365
+ /** `ListDir` — list one directory level. */
366
+ toolListDir(request) {
367
+ return this.#call(this.#tools.listDir.bind(this.#tools), 'ListDir', request);
368
+ }
369
+ /** `Grep` — regex content search. */
370
+ toolGrep(request) {
371
+ return this.#call(this.#tools.grep.bind(this.#tools), 'Grep', request);
372
+ }
373
+ /** `Find` — filename-glob search. */
374
+ toolFind(request) {
375
+ return this.#call(this.#tools.find.bind(this.#tools), 'Find', request);
376
+ }
377
+ /** `MemorySave` — save a memory entry. */
378
+ toolMemorySave(request) {
379
+ return this.#call(this.#tools.memorySave.bind(this.#tools), 'MemorySave', request);
380
+ }
381
+ /** `MemoryList` — list memory entries. */
382
+ toolMemoryList(request) {
383
+ return this.#call(this.#tools.memoryList.bind(this.#tools), 'MemoryList', request);
384
+ }
385
+ /** `MemoryRead` — read one memory entry. */
386
+ toolMemoryRead(request) {
387
+ return this.#call(this.#tools.memoryRead.bind(this.#tools), 'MemoryRead', request);
388
+ }
389
+ /** `MemoryForget` — forget a memory entry. */
390
+ toolMemoryForget(request) {
391
+ return this.#call(this.#tools.memoryForget.bind(this.#tools), 'MemoryForget', request);
392
+ }
393
+ /** `SkillInstall` — two-phase skill install. */
394
+ toolSkillInstall(request) {
395
+ return this.#call(this.#tools.skillInstall.bind(this.#tools), 'SkillInstall', request);
396
+ }
397
+ // ── runtime state storage ──
398
+ /** `StorageService.ListSessions` — session list from external storage. */
399
+ stateListSessions(request) {
400
+ return this.#call(this.#storage.listSessions.bind(this.#storage), 'ListSessions', request);
401
+ }
402
+ /** `StorageService.CreateSession` — create a session in external storage. */
403
+ stateCreateSession(request) {
404
+ return this.#call(this.#storage.createSession.bind(this.#storage), 'CreateSession', request);
405
+ }
406
+ /** `StorageService.RenameSession` — rename a session in external storage. */
407
+ stateRenameSession(request) {
408
+ return this.#call(this.#storage.renameSession.bind(this.#storage), 'RenameSession', request);
409
+ }
410
+ /** `StorageService.DeleteSession` — delete a session in external storage. */
411
+ stateDeleteSession(request) {
412
+ return this.#call(this.#storage.deleteSession.bind(this.#storage), 'DeleteSession', request);
413
+ }
414
+ /** `StorageService.SaveDagRun` — persist a DAG run. */
415
+ stateSaveDagRun(request) {
416
+ return this.#call(this.#storage.saveDagRun.bind(this.#storage), 'SaveDagRun', request);
417
+ }
418
+ /** `StorageService.LoadDagRuns` — load persisted DAG runs. */
419
+ stateLoadDagRuns(request) {
420
+ return this.#call(this.#storage.loadDagRuns.bind(this.#storage), 'LoadDagRuns', request);
421
+ }
422
+ /** `StorageService.SaveTriggerRules` — persist trigger rules. */
423
+ stateSaveTriggerRules(request) {
424
+ return this.#call(this.#storage.saveTriggerRules.bind(this.#storage), 'SaveTriggerRules', request);
425
+ }
426
+ /** `StorageService.LoadTriggerRules` — load persisted trigger rules. */
427
+ stateLoadTriggerRules(request) {
428
+ return this.#call(this.#storage.loadTriggerRules.bind(this.#storage), 'LoadTriggerRules', request);
429
+ }
430
+ /** `StorageService.SaveCronJobs` — persist cron jobs. */
431
+ stateSaveCronJobs(request) {
432
+ return this.#call(this.#storage.saveCronJobs.bind(this.#storage), 'SaveCronJobs', request);
433
+ }
434
+ /** `StorageService.LoadCronJobs` — load persisted cron jobs. */
435
+ stateLoadCronJobs(request) {
436
+ return this.#call(this.#storage.loadCronJobs.bind(this.#storage), 'LoadCronJobs', request);
437
+ }
438
+ // ── event stream ──
439
+ /**
440
+ * `StreamEvents` — convenience alias with the session id first.
441
+ */
442
+ openEventStream(sessionId, onFrame, signal) {
443
+ return this.streamEvents(onFrame, signal, sessionId);
444
+ }
445
+ /**
446
+ * `StreamEvents` — server-streaming snapshot/event frames. Every frame
447
+ * (snapshot and event) is delivered to `onFrame`. Resolves when the stream
448
+ * ends normally; rejects on transport errors or when the client is closed.
449
+ */
450
+ streamEvents(onFrame, signal, sessionId) {
451
+ return new Promise((resolve, reject) => {
452
+ const forwardAbort = () => {
453
+ this.#closed = true;
454
+ // Cancel the stream by ending the call
455
+ };
456
+ signal?.addEventListener('abort', forwardAbort, { once: true });
457
+ const request = { sessionId };
458
+ const stream = this.#events.streamEvents.bind(this.#events)(request);
459
+ stream.on('data', (frame) => {
460
+ try {
461
+ onFrame(frame);
462
+ }
463
+ catch (err) {
464
+ signal?.removeEventListener('abort', forwardAbort);
465
+ stream.destroy();
466
+ reject(new Error(`theway grpc: StreamEvents handler threw: ${extractErrorMessage(err)}`, { cause: err }));
467
+ }
468
+ });
469
+ stream.on('end', () => {
470
+ signal?.removeEventListener('abort', forwardAbort);
471
+ resolve();
472
+ });
473
+ stream.on('error', (err) => {
474
+ signal?.removeEventListener('abort', forwardAbort);
475
+ if (this.#closed || signal?.aborted) {
476
+ reject(new Error('theway grpc: StreamEvents aborted by close()'));
477
+ }
478
+ else {
479
+ reject(this.#mapError('StreamEvents', err));
480
+ }
481
+ });
482
+ });
483
+ }
484
+ /** Close the underlying channel; in-flight streams fail fast. */
485
+ close() {
486
+ this.#closed = true;
487
+ this.#session.close();
488
+ this.#command.close();
489
+ this.#extensions.close();
490
+ this.#graph.close();
491
+ this.#events.close();
492
+ this.#settings.close();
493
+ this.#tools.close();
494
+ this.#storage.close();
495
+ }
496
+ // ── private helpers ──
497
+ #closed = false;
498
+ #call(invoke, method, request) {
499
+ return new Promise((resolve, reject) => {
500
+ invoke(request, (err, response) => {
501
+ if (err) {
502
+ reject(this.#mapError(method, err));
503
+ return;
504
+ }
505
+ resolve(response);
506
+ });
507
+ });
508
+ }
509
+ #mapError(method, err) {
510
+ return new Error(`theway grpc: ${method} failed: ${err.message}`, { cause: err });
511
+ }
512
+ }
513
+ function extractErrorMessage(err) {
514
+ if (err instanceof Error)
515
+ return err.message;
516
+ return String(err);
517
+ }
518
+ /**
519
+ * Complete a partial `DaemonConfig` for the wire: ts-proto models proto3
520
+ * repeated fields as required arrays. Empty value arrays mean "keep" while
521
+ * `clearFields` carries explicit clear intent.
522
+ */
523
+ function fillDaemonConfig(config) {
524
+ return {
525
+ ...config,
526
+ builtinSkills: config.builtinSkills ?? [],
527
+ skillsDirs: config.skillsDirs ?? [],
528
+ clearFields: config.clearFields ?? [],
529
+ };
530
+ }
531
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}