@agents-ensemble/core 0.12.0 → 0.14.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 (181) hide show
  1. package/dist/acp/testing/fake-acp-server.d.ts +2 -0
  2. package/dist/acp/testing/fake-acp-server.d.ts.map +1 -1
  3. package/dist/acp/testing/fake-acp-server.js +3 -0
  4. package/dist/acp/testing/fake-acp-server.js.map +1 -1
  5. package/dist/conductor/conductor-agent-factory.d.ts +5 -0
  6. package/dist/conductor/conductor-agent-factory.d.ts.map +1 -0
  7. package/dist/conductor/conductor-agent-factory.js +10 -0
  8. package/dist/conductor/conductor-agent-factory.js.map +1 -0
  9. package/dist/conductor/conductor-agent.d.ts +7 -0
  10. package/dist/conductor/conductor-agent.d.ts.map +1 -1
  11. package/dist/conductor/conductor-send-reconnect.d.ts +3 -0
  12. package/dist/conductor/conductor-send-reconnect.d.ts.map +1 -1
  13. package/dist/conductor/conductor-send-reconnect.js +7 -1
  14. package/dist/conductor/conductor-send-reconnect.js.map +1 -1
  15. package/dist/conductor/conductor-session-driver.d.ts +6 -0
  16. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  17. package/dist/conductor/conductor-session-driver.js +19 -2
  18. package/dist/conductor/conductor-session-driver.js.map +1 -1
  19. package/dist/conductor/conductor-session.d.ts +5 -2
  20. package/dist/conductor/conductor-session.d.ts.map +1 -1
  21. package/dist/conductor/conductor-session.js +539 -74
  22. package/dist/conductor/conductor-session.js.map +1 -1
  23. package/dist/conductor/index.d.ts +3 -2
  24. package/dist/conductor/index.d.ts.map +1 -1
  25. package/dist/conductor/index.js +2 -1
  26. package/dist/conductor/index.js.map +1 -1
  27. package/dist/conductor/operator-command.d.ts +5 -0
  28. package/dist/conductor/operator-command.d.ts.map +1 -1
  29. package/dist/conductor/operator-command.js +6 -0
  30. package/dist/conductor/operator-command.js.map +1 -1
  31. package/dist/conductor/pi-conductor-agent.d.ts +2 -5
  32. package/dist/conductor/pi-conductor-agent.d.ts.map +1 -1
  33. package/dist/conductor/pi-conductor-agent.js +16 -19
  34. package/dist/conductor/pi-conductor-agent.js.map +1 -1
  35. package/dist/conductor/pi-resource-loader.d.ts +2 -0
  36. package/dist/conductor/pi-resource-loader.d.ts.map +1 -1
  37. package/dist/conductor/pi-resource-loader.js +16 -8
  38. package/dist/conductor/pi-resource-loader.js.map +1 -1
  39. package/dist/conductor/session/dispatch-hold.d.ts +1 -1
  40. package/dist/conductor/session/dispatch-hold.d.ts.map +1 -1
  41. package/dist/conductor/session/dispatch-hold.js +4 -3
  42. package/dist/conductor/session/dispatch-hold.js.map +1 -1
  43. package/dist/conductor/session/dispatch-mode.d.ts +1 -1
  44. package/dist/conductor/session/events/index.d.ts +2 -1
  45. package/dist/conductor/session/events/index.d.ts.map +1 -1
  46. package/dist/conductor/session/events/index.js.map +1 -1
  47. package/dist/conductor/session/events/session-event.d.ts +7 -1
  48. package/dist/conductor/session/events/session-event.d.ts.map +1 -1
  49. package/dist/conductor/session/events/session-log-event-groups.d.ts +1 -1
  50. package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
  51. package/dist/conductor/session/events/session-log-event-groups.js +1 -0
  52. package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
  53. package/dist/conductor/session/events/shared/permission-pending.d.ts +5 -0
  54. package/dist/conductor/session/events/shared/permission-pending.d.ts.map +1 -1
  55. package/dist/conductor/session/format-session-event.d.ts.map +1 -1
  56. package/dist/conductor/session/format-session-event.js +32 -2
  57. package/dist/conductor/session/format-session-event.js.map +1 -1
  58. package/dist/conductor/session/select-dispatch-batch.d.ts.map +1 -1
  59. package/dist/conductor/session/select-dispatch-batch.js +21 -4
  60. package/dist/conductor/session/select-dispatch-batch.js.map +1 -1
  61. package/dist/conductor/session/session-event.d.ts +1 -1
  62. package/dist/conductor/session/session-event.d.ts.map +1 -1
  63. package/dist/conductor/session/session-logger.d.ts +1 -0
  64. package/dist/conductor/session/session-logger.d.ts.map +1 -1
  65. package/dist/conductor/session/session-logger.js +4 -0
  66. package/dist/conductor/session/session-logger.js.map +1 -1
  67. package/dist/conductor/submit-operator-input.d.ts +4 -1
  68. package/dist/conductor/submit-operator-input.d.ts.map +1 -1
  69. package/dist/conductor/submit-operator-input.js +4 -1
  70. package/dist/conductor/submit-operator-input.js.map +1 -1
  71. package/dist/dispatch/get-tool-call-tool.d.ts +8 -0
  72. package/dist/dispatch/get-tool-call-tool.d.ts.map +1 -0
  73. package/dist/dispatch/get-tool-call-tool.js +46 -0
  74. package/dist/dispatch/get-tool-call-tool.js.map +1 -0
  75. package/dist/dispatch/index.d.ts +3 -0
  76. package/dist/dispatch/index.d.ts.map +1 -1
  77. package/dist/dispatch/index.js +2 -0
  78. package/dist/dispatch/index.js.map +1 -1
  79. package/dist/dispatch/report-session-state-tool.d.ts +6 -0
  80. package/dist/dispatch/report-session-state-tool.d.ts.map +1 -0
  81. package/dist/dispatch/report-session-state-tool.js +39 -0
  82. package/dist/dispatch/report-session-state-tool.js.map +1 -0
  83. package/dist/dispatch/session-usage-tool.js +1 -1
  84. package/dist/dispatch/session-usage-tool.js.map +1 -1
  85. package/dist/escalation/apply-operator-message.d.ts +2 -0
  86. package/dist/escalation/apply-operator-message.d.ts.map +1 -1
  87. package/dist/escalation/apply-operator-message.js +2 -0
  88. package/dist/escalation/apply-operator-message.js.map +1 -1
  89. package/dist/escalation/ask-human-tool.d.ts +0 -2
  90. package/dist/escalation/ask-human-tool.d.ts.map +1 -1
  91. package/dist/escalation/ask-human-tool.js +1 -7
  92. package/dist/escalation/ask-human-tool.js.map +1 -1
  93. package/dist/escalation/open-question.d.ts +1 -0
  94. package/dist/escalation/open-question.d.ts.map +1 -1
  95. package/dist/escalation/open-question.js +1 -1
  96. package/dist/escalation/open-question.js.map +1 -1
  97. package/dist/escalation/record-open-question-answer.d.ts +1 -0
  98. package/dist/escalation/record-open-question-answer.d.ts.map +1 -1
  99. package/dist/escalation/record-open-question-answer.js +1 -0
  100. package/dist/escalation/record-open-question-answer.js.map +1 -1
  101. package/dist/github/github-monitor.d.ts +1 -1
  102. package/dist/github/github-monitor.d.ts.map +1 -1
  103. package/dist/github/github-monitor.js +1 -1
  104. package/dist/github/github-monitor.js.map +1 -1
  105. package/dist/github/register-github-watch-tool.d.ts +4 -1
  106. package/dist/github/register-github-watch-tool.d.ts.map +1 -1
  107. package/dist/github/register-github-watch-tool.js +17 -1
  108. package/dist/github/register-github-watch-tool.js.map +1 -1
  109. package/dist/github/unregister-github-watch-tool.d.ts +4 -1
  110. package/dist/github/unregister-github-watch-tool.d.ts.map +1 -1
  111. package/dist/github/unregister-github-watch-tool.js +14 -3
  112. package/dist/github/unregister-github-watch-tool.js.map +1 -1
  113. package/dist/operator-runtime.d.ts +24 -0
  114. package/dist/operator-runtime.d.ts.map +1 -0
  115. package/dist/operator-runtime.js +17 -0
  116. package/dist/operator-runtime.js.map +1 -0
  117. package/dist/permission/index.d.ts +2 -0
  118. package/dist/permission/index.d.ts.map +1 -1
  119. package/dist/permission/index.js +1 -0
  120. package/dist/permission/index.js.map +1 -1
  121. package/dist/permission/permission-brief.d.ts +22 -0
  122. package/dist/permission/permission-brief.d.ts.map +1 -0
  123. package/dist/permission/permission-brief.js +245 -0
  124. package/dist/permission/permission-brief.js.map +1 -0
  125. package/dist/prompt/index.d.ts +1 -0
  126. package/dist/prompt/index.d.ts.map +1 -1
  127. package/dist/prompt/index.js +1 -0
  128. package/dist/prompt/index.js.map +1 -1
  129. package/dist/prompt/modules/ensemble/conductor-base-module.d.ts.map +1 -1
  130. package/dist/prompt/modules/ensemble/conductor-base-module.js +11 -1
  131. package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
  132. package/dist/runtime/index.d.ts +3 -0
  133. package/dist/runtime/index.d.ts.map +1 -1
  134. package/dist/runtime/index.js +2 -0
  135. package/dist/runtime/index.js.map +1 -1
  136. package/dist/runtime/tool-call-snapshot-registry.d.ts +69 -0
  137. package/dist/runtime/tool-call-snapshot-registry.d.ts.map +1 -0
  138. package/dist/runtime/tool-call-snapshot-registry.js +275 -0
  139. package/dist/runtime/tool-call-snapshot-registry.js.map +1 -0
  140. package/dist/runtime/types.d.ts +2 -0
  141. package/dist/runtime/types.d.ts.map +1 -1
  142. package/dist/runtime/worker-runtime.d.ts.map +1 -1
  143. package/dist/runtime/worker-runtime.js +6 -2
  144. package/dist/runtime/worker-runtime.js.map +1 -1
  145. package/dist/session/index.d.ts +7 -1
  146. package/dist/session/index.d.ts.map +1 -1
  147. package/dist/session/index.js +3 -0
  148. package/dist/session/index.js.map +1 -1
  149. package/dist/session/open-question-control.d.ts +53 -0
  150. package/dist/session/open-question-control.d.ts.map +1 -0
  151. package/dist/session/open-question-control.js +410 -0
  152. package/dist/session/open-question-control.js.map +1 -0
  153. package/dist/session/open-questions-store.d.ts +12 -0
  154. package/dist/session/open-questions-store.d.ts.map +1 -0
  155. package/dist/session/open-questions-store.js +164 -0
  156. package/dist/session/open-questions-store.js.map +1 -0
  157. package/dist/session/session-sidecar.d.ts +5 -0
  158. package/dist/session/session-sidecar.d.ts.map +1 -1
  159. package/dist/session/session-sidecar.js +24 -3
  160. package/dist/session/session-sidecar.js.map +1 -1
  161. package/dist/session/session-state-store.d.ts +21 -0
  162. package/dist/session/session-state-store.d.ts.map +1 -0
  163. package/dist/session/session-state-store.js +131 -0
  164. package/dist/session/session-state-store.js.map +1 -0
  165. package/dist/session/tool-call-snapshot-history.d.ts +32 -0
  166. package/dist/session/tool-call-snapshot-history.d.ts.map +1 -0
  167. package/dist/session/tool-call-snapshot-history.js +203 -0
  168. package/dist/session/tool-call-snapshot-history.js.map +1 -0
  169. package/dist/usage/enrich-session-usage-cost.d.ts +4 -1
  170. package/dist/usage/enrich-session-usage-cost.d.ts.map +1 -1
  171. package/dist/usage/enrich-session-usage-cost.js +8 -2
  172. package/dist/usage/enrich-session-usage-cost.js.map +1 -1
  173. package/dist/usage/index.d.ts +1 -1
  174. package/dist/usage/index.d.ts.map +1 -1
  175. package/dist/usage/session-usage-tracker.d.ts +7 -1
  176. package/dist/usage/session-usage-tracker.d.ts.map +1 -1
  177. package/dist/usage/session-usage-tracker.js +51 -0
  178. package/dist/usage/session-usage-tracker.js.map +1 -1
  179. package/dist/usage/types.d.ts +30 -2
  180. package/dist/usage/types.d.ts.map +1 -1
  181. package/package.json +5 -1
@@ -0,0 +1,410 @@
1
+ import { chmod, mkdtemp, rm } from 'node:fs/promises';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import net from 'node:net';
5
+ export const OPEN_QUESTION_CONTROL_METHODS = {
6
+ list: 'open_questions.list',
7
+ answer: 'open_questions.answer',
8
+ };
9
+ const JSON_RPC_VERSION = '2.0';
10
+ const MAX_MESSAGE_BYTES = 1_048_576;
11
+ const SOCKET_TIMEOUT_MS = 30_000;
12
+ export class OpenQuestionControlTransportError extends Error {
13
+ outcome;
14
+ constructor(message, outcome) {
15
+ super(message);
16
+ this.outcome = outcome;
17
+ this.name = 'OpenQuestionControlTransportError';
18
+ }
19
+ }
20
+ export class OpenQuestionControlOperationError extends Error {
21
+ rpcCode;
22
+ data;
23
+ constructor(rpcCode, message, data) {
24
+ super(message);
25
+ this.rpcCode = rpcCode;
26
+ this.data = data;
27
+ this.name = 'OpenQuestionControlOperationError';
28
+ }
29
+ }
30
+ export class OpenQuestionControlRemoteError extends Error {
31
+ rpcCode;
32
+ data;
33
+ constructor(rpcCode, message, data) {
34
+ super(message);
35
+ this.rpcCode = rpcCode;
36
+ this.data = data;
37
+ this.name = 'OpenQuestionControlRemoteError';
38
+ }
39
+ }
40
+ /**
41
+ * Start a one-request-per-connection JSON-RPC server on a private Unix socket.
42
+ * Request and response payloads are deliberately not logged.
43
+ */
44
+ export async function startOpenQuestionControlServer(options) {
45
+ const runtimeDirectory = await mkdtemp(join(tmpdir(), 'ens-oq-'));
46
+ const socketPath = join(runtimeDirectory, 's.sock');
47
+ const sockets = new Set();
48
+ const processingSockets = new Set();
49
+ const activeRequests = new Set();
50
+ let closing = false;
51
+ let quiescePromise;
52
+ let closePromise;
53
+ let server;
54
+ try {
55
+ await chmod(runtimeDirectory, 0o700);
56
+ server = net.createServer((socket) => {
57
+ if (closing) {
58
+ socket.destroy();
59
+ return;
60
+ }
61
+ sockets.add(socket);
62
+ socket.setTimeout(SOCKET_TIMEOUT_MS, () => socket.destroy());
63
+ socket.on('close', () => sockets.delete(socket));
64
+ // A client may close its write side after sending a request while it
65
+ // continues to wait for the response.
66
+ socket.on('error', () => { });
67
+ let buffer = Buffer.alloc(0);
68
+ let handled = false;
69
+ socket.on('data', (chunk) => {
70
+ if (handled)
71
+ return;
72
+ buffer = Buffer.concat([buffer, chunk]);
73
+ if (buffer.byteLength > MAX_MESSAGE_BYTES) {
74
+ handled = true;
75
+ writeResponse(socket, errorResponse(null, -32600, 'Request is too large.'));
76
+ return;
77
+ }
78
+ const newlineIndex = buffer.indexOf(0x0a);
79
+ if (newlineIndex < 0)
80
+ return;
81
+ handled = true;
82
+ socket.setTimeout(0);
83
+ const line = buffer.subarray(0, newlineIndex).toString('utf8');
84
+ const trailing = buffer.subarray(newlineIndex + 1);
85
+ if (trailing.some((byte) => !isJsonWhitespace(byte))) {
86
+ writeResponse(socket, errorResponse(null, -32600, 'Expected one request per connection.'));
87
+ return;
88
+ }
89
+ processingSockets.add(socket);
90
+ const activeRequest = handleRequest(line, options)
91
+ .catch(() => errorResponse(null, -32603, 'Open Question operation failed.'))
92
+ .then((response) => writeResponse(socket, response))
93
+ .finally(() => {
94
+ processingSockets.delete(socket);
95
+ activeRequests.delete(activeRequest);
96
+ });
97
+ activeRequests.add(activeRequest);
98
+ });
99
+ });
100
+ await listen(server, socketPath);
101
+ await chmod(socketPath, 0o600);
102
+ }
103
+ catch (error) {
104
+ if (server?.listening) {
105
+ await closeServer(server, sockets, processingSockets, activeRequests).catch(() => { });
106
+ }
107
+ await rm(runtimeDirectory, { recursive: true, force: true }).catch(() => { });
108
+ throw error;
109
+ }
110
+ const activeServer = server;
111
+ return {
112
+ socketPath,
113
+ hasInFlightRequests: () => activeRequests.size > 0,
114
+ quiesce: () => {
115
+ if (quiescePromise)
116
+ return quiescePromise;
117
+ closing = true;
118
+ quiescePromise = closeServer(activeServer, sockets, processingSockets, activeRequests);
119
+ return quiescePromise;
120
+ },
121
+ close: () => {
122
+ if (closePromise)
123
+ return closePromise;
124
+ closePromise = (async () => {
125
+ try {
126
+ await (quiescePromise ??
127
+ (quiescePromise = closeServer(activeServer, sockets, processingSockets, activeRequests)));
128
+ }
129
+ finally {
130
+ await rm(runtimeDirectory, { recursive: true, force: true });
131
+ }
132
+ })();
133
+ return closePromise;
134
+ },
135
+ };
136
+ }
137
+ export async function sendOpenQuestionControlRequest(socketPath, input) {
138
+ const requestId = 1;
139
+ const request = JSON.stringify({
140
+ jsonrpc: JSON_RPC_VERSION,
141
+ id: requestId,
142
+ method: input.method,
143
+ ...(input.params ? { params: input.params } : {}),
144
+ });
145
+ if (Buffer.byteLength(request) > MAX_MESSAGE_BYTES) {
146
+ throw new Error('Open Question control request is too large.');
147
+ }
148
+ return new Promise((resolve, reject) => {
149
+ const socket = net.createConnection(socketPath);
150
+ let settled = false;
151
+ let requestSent = false;
152
+ socket.setTimeout(SOCKET_TIMEOUT_MS, () => {
153
+ finishWithTransportError('Open Question control request timed out.');
154
+ });
155
+ let buffer = Buffer.alloc(0);
156
+ const cleanup = () => {
157
+ socket.setTimeout(0);
158
+ socket.off('connect', onConnect);
159
+ socket.off('data', onData);
160
+ socket.off('end', onEnd);
161
+ socket.off('close', onClose);
162
+ socket.off('error', onError);
163
+ };
164
+ const settle = (callback) => {
165
+ if (settled)
166
+ return;
167
+ settled = true;
168
+ cleanup();
169
+ callback();
170
+ socket.destroy();
171
+ };
172
+ const finishWithTransportError = (message) => {
173
+ settle(() => {
174
+ reject(new OpenQuestionControlTransportError(requestSent
175
+ ? `${message} The request outcome is unknown. If this was an answer, inspect the live session before taking further action.`
176
+ : message, requestSent ? 'unknown' : 'not_sent'));
177
+ });
178
+ };
179
+ const onConnect = () => {
180
+ requestSent = true;
181
+ socket.write(`${request}\n`, (error) => {
182
+ if (error) {
183
+ finishWithTransportError(`Open Question control request could not be sent: ${error.message}`);
184
+ }
185
+ });
186
+ };
187
+ const onEnd = () => {
188
+ finishWithTransportError('Open Question control connection ended before a complete response.');
189
+ };
190
+ const onClose = () => {
191
+ finishWithTransportError('Open Question control connection closed before a complete response.');
192
+ };
193
+ const onError = (error) => {
194
+ finishWithTransportError(`Open Question control connection failed: ${error.message}`);
195
+ };
196
+ const onData = (chunk) => {
197
+ buffer = Buffer.concat([buffer, chunk]);
198
+ if (buffer.byteLength > MAX_MESSAGE_BYTES) {
199
+ settle(() => {
200
+ reject(new Error('Open Question control response is too large.'));
201
+ socket.destroy();
202
+ });
203
+ return;
204
+ }
205
+ const newlineIndex = buffer.indexOf(0x0a);
206
+ if (newlineIndex < 0)
207
+ return;
208
+ const line = buffer.subarray(0, newlineIndex).toString('utf8');
209
+ try {
210
+ const response = JSON.parse(line);
211
+ if (response.jsonrpc !== JSON_RPC_VERSION ||
212
+ response.id !== requestId) {
213
+ settle(() => reject(new Error('Invalid Open Question control response.')));
214
+ return;
215
+ }
216
+ if (response.error && typeof response.error === 'object') {
217
+ const error = response.error;
218
+ settle(() => reject(new OpenQuestionControlRemoteError(typeof error.code === 'number' ? error.code : -32603, typeof error.message === 'string'
219
+ ? error.message
220
+ : 'Open Question control request failed.', parseOpenQuestionControlErrorData(error.data))));
221
+ return;
222
+ }
223
+ if (!Object.hasOwn(response, 'result')) {
224
+ settle(() => reject(new Error('Invalid Open Question control response.')));
225
+ return;
226
+ }
227
+ settle(() => resolve(response.result));
228
+ }
229
+ catch (error) {
230
+ settle(() => reject(error instanceof Error
231
+ ? error
232
+ : new Error('Invalid Open Question control response.')));
233
+ }
234
+ };
235
+ socket.on('connect', onConnect);
236
+ socket.on('data', onData);
237
+ socket.on('end', onEnd);
238
+ socket.on('close', onClose);
239
+ socket.on('error', onError);
240
+ });
241
+ }
242
+ async function handleRequest(line, options) {
243
+ let value;
244
+ try {
245
+ value = JSON.parse(line);
246
+ }
247
+ catch {
248
+ return errorResponse(null, -32700, 'Parse error.');
249
+ }
250
+ if (!isRecord(value)) {
251
+ return errorResponse(null, -32600, 'Invalid request.');
252
+ }
253
+ const requestId = value.id;
254
+ if (value.jsonrpc !== JSON_RPC_VERSION ||
255
+ !isRequestId(requestId) ||
256
+ typeof value.method !== 'string' ||
257
+ value.method.length === 0 ||
258
+ (value.params !== undefined && !isRecord(value.params))) {
259
+ return errorResponse(isRequestId(requestId) ? requestId : null, -32600, 'Invalid request.');
260
+ }
261
+ const params = (value.params ?? {});
262
+ try {
263
+ switch (value.method) {
264
+ case OPEN_QUESTION_CONTROL_METHODS.list:
265
+ return successResponse(requestId, {
266
+ questions: options.listOpenQuestions().map(toListItem),
267
+ });
268
+ case OPEN_QUESTION_CONTROL_METHODS.answer: {
269
+ const questionId = typeof params.questionId === 'string' ? params.questionId.trim() : '';
270
+ const answer = typeof params.answer === 'string' ? params.answer.trim() : '';
271
+ if (!questionId || !answer) {
272
+ return errorResponse(requestId, -32602, 'questionId and a non-empty answer are required.');
273
+ }
274
+ const question = await options.answerOpenQuestion({
275
+ questionId,
276
+ answer,
277
+ });
278
+ return successResponse(requestId, toAnswerResult(question));
279
+ }
280
+ default:
281
+ return errorResponse(requestId, -32601, 'Method not found.');
282
+ }
283
+ }
284
+ catch (error) {
285
+ if (error instanceof OpenQuestionControlOperationError) {
286
+ return errorResponse(requestId, error.rpcCode, error.message, error.data);
287
+ }
288
+ return errorResponse(requestId, -32603, 'Open Question operation failed.');
289
+ }
290
+ }
291
+ function toListItem(question) {
292
+ return {
293
+ id: question.id,
294
+ question: question.question,
295
+ responseType: question.responseType,
296
+ ...(question.choices
297
+ ? { choices: question.choices.map((choice) => ({ ...choice })) }
298
+ : {}),
299
+ ...(question.context === undefined ? {} : { context: question.context }),
300
+ askedAt: question.askedAt,
301
+ source: question.source,
302
+ ...(question.relatedPermissionId === undefined
303
+ ? {}
304
+ : { relatedPermissionId: question.relatedPermissionId }),
305
+ };
306
+ }
307
+ function toAnswerResult(question) {
308
+ return {
309
+ question: {
310
+ id: question.id,
311
+ status: question.status,
312
+ ...(question.answeredBy === undefined
313
+ ? {}
314
+ : { answeredBy: question.answeredBy }),
315
+ ...(question.approved === undefined
316
+ ? {}
317
+ : { approved: question.approved }),
318
+ },
319
+ };
320
+ }
321
+ function successResponse(id, result) {
322
+ return { jsonrpc: JSON_RPC_VERSION, id, result };
323
+ }
324
+ function errorResponse(id, code, message, data) {
325
+ return {
326
+ jsonrpc: JSON_RPC_VERSION,
327
+ id,
328
+ error: { code, message, ...(data ? { data } : {}) },
329
+ };
330
+ }
331
+ function parseOpenQuestionControlErrorData(value) {
332
+ if (!isRecord(value) ||
333
+ value.outcome !== 'unknown' ||
334
+ value.answerStatus !== 'recorded' ||
335
+ value.dispatchStatus !== 'unknown') {
336
+ return undefined;
337
+ }
338
+ return {
339
+ outcome: 'unknown',
340
+ answerStatus: 'recorded',
341
+ dispatchStatus: 'unknown',
342
+ };
343
+ }
344
+ function writeResponse(socket, response) {
345
+ if (socket.destroyed)
346
+ return Promise.resolve();
347
+ const serialized = JSON.stringify(response) ?? '';
348
+ if (Buffer.byteLength(serialized) > MAX_MESSAGE_BYTES) {
349
+ return endSocket(socket, `${JSON.stringify(errorResponse(response.id, -32603, 'Response is too large.'))}\n`);
350
+ }
351
+ return endSocket(socket, `${serialized}\n`);
352
+ }
353
+ function listen(server, socketPath) {
354
+ return new Promise((resolve, reject) => {
355
+ const onError = (error) => {
356
+ server.off('listening', onListening);
357
+ reject(error);
358
+ };
359
+ const onListening = () => {
360
+ server.off('error', onError);
361
+ resolve();
362
+ };
363
+ server.once('error', onError);
364
+ server.once('listening', onListening);
365
+ server.listen(socketPath);
366
+ });
367
+ }
368
+ function closeServer(server, sockets, processingSockets, activeRequests) {
369
+ const closed = new Promise((resolve, reject) => {
370
+ server.close((error) => (error ? reject(error) : resolve()));
371
+ });
372
+ for (const socket of sockets) {
373
+ if (!processingSockets.has(socket))
374
+ socket.destroy();
375
+ }
376
+ return Promise.all([closed, ...activeRequests]).then(() => { });
377
+ }
378
+ function endSocket(socket, data) {
379
+ return new Promise((resolve) => {
380
+ if (socket.destroyed) {
381
+ resolve();
382
+ return;
383
+ }
384
+ let settled = false;
385
+ const finish = () => {
386
+ if (settled)
387
+ return;
388
+ settled = true;
389
+ socket.off('finish', finish);
390
+ socket.off('close', finish);
391
+ socket.off('error', finish);
392
+ resolve();
393
+ };
394
+ socket.once('finish', finish);
395
+ socket.once('close', finish);
396
+ socket.once('error', finish);
397
+ socket.end(data, finish);
398
+ });
399
+ }
400
+ function isRecord(value) {
401
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
402
+ }
403
+ function isRequestId(value) {
404
+ return (typeof value === 'string' ||
405
+ (typeof value === 'number' && Number.isFinite(value)));
406
+ }
407
+ function isJsonWhitespace(byte) {
408
+ return byte === 0x20 || byte === 0x09 || byte === 0x0d || byte === 0x0a;
409
+ }
410
+ //# sourceMappingURL=open-question-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-question-control.js","sourceRoot":"","sources":["../../src/session/open-question-control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,GAAG,MAAM,UAAU,CAAC;AAI3B,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,IAAI,EAAE,qBAAqB;IAC3B,MAAM,EAAE,uBAAuB;CACvB,CAAC;AAEX,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,iBAAiB,GAAG,SAAS,CAAC;AACpC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAyCjC,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IAGxC;IAFlB,YACE,OAAe,EACC,OAA+B;QAE/C,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,YAAO,GAAP,OAAO,CAAwB;QAG/C,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IAExC;IAEA;IAHlB,YACkB,OAAe,EAC/B,OAAe,EACC,IAAmC;QAEnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,YAAO,GAAP,OAAO,CAAQ;QAEf,SAAI,GAAJ,IAAI,CAA+B;QAGnD,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAErC;IAEA;IAHlB,YACkB,OAAe,EAC/B,OAAe,EACC,IAAmC;QAEnD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,YAAO,GAAP,OAAO,CAAQ;QAEf,SAAI,GAAJ,IAAI,CAA+B;QAGnD,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAC;IAC/C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAyC;IAEzC,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,cAAyC,CAAC;IAC9C,IAAI,YAAuC,CAAC;IAC5C,IAAI,MAA0B,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAE;YACnC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACjD,qEAAqE;YACrE,sCAAsC;YACtC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAE7B,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAClC,IAAI,OAAO;oBAAE,OAAO;gBACpB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBACxC,IAAI,MAAM,CAAC,UAAU,GAAG,iBAAiB,EAAE,CAAC;oBAC1C,OAAO,GAAG,IAAI,CAAC;oBACf,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;oBAC5E,OAAO;gBACT,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,YAAY,GAAG,CAAC;oBAAE,OAAO;gBAE7B,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACrB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBACnD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACrD,aAAa,CACX,MAAM,EACN,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,sCAAsC,CAAC,CACpE,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC/C,KAAK,CAAC,GAAG,EAAE,CACV,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAC/D;qBACA,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;qBACnD,OAAO,CAAC,GAAG,EAAE;oBACZ,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjC,cAAc,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;gBACL,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjC,MAAM,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;YACtB,MAAM,WAAW,CACf,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,cAAc,CACf,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC7E,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAG,MAAO,CAAC;IAC7B,OAAO;QACL,UAAU;QACV,mBAAmB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC;QAClD,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,cAAc;gBAAE,OAAO,cAAc,CAAC;YAC1C,OAAO,GAAG,IAAI,CAAC;YACf,cAAc,GAAG,WAAW,CAC1B,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,cAAc,CACf,CAAC;YACF,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,YAAY;gBAAE,OAAO,YAAY,CAAC;YACtC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC;oBACH,MAAM,CAAC,cAAc;wBACnB,CAAC,cAAc,GAAG,WAAW,CAC3B,YAAY,EACZ,OAAO,EACP,iBAAiB,EACjB,cAAc,CACf,CAAC,CAAC,CAAC;gBACR,CAAC;wBAAS,CAAC;oBACT,MAAM,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,YAAY,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,UAAkB,EAClB,KAGC;IAED,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,OAAO,EAAE,gBAAgB;QACzB,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,iBAAiB,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,CAAC,UAAU,CAAC,iBAAiB,EAAE,GAAG,EAAE;YACxC,wBAAwB,CAAC,0CAA0C,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,QAAoB,EAAE,EAAE;YACtC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAE,EAAE;YACnD,MAAM,CAAC,GAAG,EAAE;gBACV,MAAM,CACJ,IAAI,iCAAiC,CACnC,WAAW;oBACT,CAAC,CAAC,GAAG,OAAO,gHAAgH;oBAC5H,CAAC,CAAC,OAAO,EACX,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CACrC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,WAAW,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrC,IAAI,KAAK,EAAE,CAAC;oBACV,wBAAwB,CACtB,oDAAoD,KAAK,CAAC,OAAO,EAAE,CACpE,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,wBAAwB,CACtB,oEAAoE,CACrE,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,wBAAwB,CACtB,qEAAqE,CACtE,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,wBAAwB,CACtB,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAC5D,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YACxC,IAAI,MAAM,CAAC,UAAU,GAAG,iBAAiB,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,EAAE;oBACV,MAAM,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;oBAClE,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,YAAY,GAAG,CAAC;gBAAE,OAAO;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/D,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;gBAC7D,IACE,QAAQ,CAAC,OAAO,KAAK,gBAAgB;oBACrC,QAAQ,CAAC,EAAE,KAAK,SAAS,EACzB,CAAC;oBACD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;oBAC3E,OAAO;gBACT,CAAC;gBACD,IAAI,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgC,CAAC;oBACxD,MAAM,CAAC,GAAG,EAAE,CACV,MAAM,CAAC,IAAI,8BAA8B,CACvC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EACpD,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;wBAC/B,CAAC,CAAC,KAAK,CAAC,OAAO;wBACf,CAAC,CAAC,uCAAuC,EAC3C,iCAAiC,CAAC,KAAK,CAAC,IAAI,CAAC,CAC9C,CAAC,CACH,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAC;oBAC3E,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAW,CAAC,CAAC,CAAC;YAC9C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,EAAE,CACV,MAAM,CACJ,KAAK,YAAY,KAAK;oBACpB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CACzD,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,OAAyC;IAEzC,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,aAAa,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC;IAC3B,IACE,KAAK,CAAC,OAAO,KAAK,gBAAgB;QAClC,CAAC,WAAW,CAAC,SAAS,CAAC;QACvB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QACzB,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EACvD,CAAC;QACD,OAAO,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;IAE/D,IAAI,CAAC;QACH,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,6BAA6B,CAAC,IAAI;gBACrC,OAAO,eAAe,CAAC,SAAS,EAAE;oBAChC,SAAS,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;iBACvD,CAAC,CAAC;YACL,KAAK,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC1C,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,MAAM,MAAM,GACV,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC3B,OAAO,aAAa,CAClB,SAAS,EACT,CAAC,KAAK,EACN,iDAAiD,CAClD,CAAC;gBACJ,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC;oBAChD,UAAU;oBACV,MAAM;iBACP,CAAC,CAAC;gBACH,OAAO,eAAe,CAAC,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD;gBACE,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iCAAiC,EAAE,CAAC;YACvD,OAAO,aAAa,CAClB,SAAS,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,CACX,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAAsB;IACxC,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,GAAG,CAAC,QAAQ,CAAC,OAAO;YAClB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxE,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,CAAC,mBAAmB,KAAK,SAAS;YAC5C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,QAAsB;IAEtB,OAAO;QACL,QAAQ,EAAE;YACR,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxC,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACrC;KACF,CAAC;AACJ,CAAC;AAaD,SAAS,eAAe,CAAC,EAAmB,EAAE,MAAe;IAC3D,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CACpB,EAA0B,EAC1B,IAAY,EACZ,OAAe,EACf,IAAmC;IAEnC,OAAO;QACL,OAAO,EAAE,gBAAgB;QACzB,EAAE;QACF,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CACxC,KAAc;IAEd,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,KAAK,CAAC,OAAO,KAAK,SAAS;QAC3B,KAAK,CAAC,YAAY,KAAK,UAAU;QACjC,KAAK,CAAC,cAAc,KAAK,SAAS,EAClC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,YAAY,EAAE,UAAU;QACxB,cAAc,EAAE,SAAS;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,MAAc,EACd,QAAyB;IAEzB,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClD,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,iBAAiB,EAAE,CAAC;QACtD,OAAO,SAAS,CACd,MAAM,EACN,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,IAAI,CACpF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,UAAkB;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAG,EAAE;YACvB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,MAAc,EACd,OAAoB,EACpB,iBAA8B,EAC9B,cAAkC;IAElC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,IAAY;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { OpenQuestionRegistrySnapshot } from '../escalation/open-question.js';
2
+ export declare const OPEN_QUESTIONS_STORE_VERSION = 1;
3
+ export interface OpenQuestionsStoreDocument extends OpenQuestionRegistrySnapshot {
4
+ version: typeof OPEN_QUESTIONS_STORE_VERSION;
5
+ }
6
+ export declare function openQuestionsStorePath(input: {
7
+ repoRoot: string;
8
+ conductorAgentId: string;
9
+ }): string;
10
+ export declare function loadOpenQuestionsStore(path: string): Promise<OpenQuestionRegistrySnapshot | undefined>;
11
+ export declare function saveOpenQuestionsStore(path: string, snapshot: OpenQuestionRegistrySnapshot): Promise<void>;
12
+ //# sourceMappingURL=open-questions-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-questions-store.d.ts","sourceRoot":"","sources":["../../src/session/open-questions-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,MAAM,WAAW,0BACf,SAAQ,4BAA4B;IACpC,OAAO,EAAE,OAAO,4BAA4B,CAAC;CAC9C;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CAQT;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,4BAA4B,GAAG,SAAS,CAAC,CAUnD;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,4BAA4B,GACrC,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,164 @@
1
+ import { chmod, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import yaml from 'js-yaml';
4
+ export const OPEN_QUESTIONS_STORE_VERSION = 1;
5
+ export function openQuestionsStorePath(input) {
6
+ return join(input.repoRoot, '.ensemble', 'sessions', input.conductorAgentId, 'open-questions.yaml');
7
+ }
8
+ export async function loadOpenQuestionsStore(path) {
9
+ let raw;
10
+ try {
11
+ raw = await readFile(path, 'utf8');
12
+ }
13
+ catch (error) {
14
+ if (isEnoent(error))
15
+ return undefined;
16
+ throw error;
17
+ }
18
+ return parseOpenQuestionsStore(yaml.load(raw));
19
+ }
20
+ export async function saveOpenQuestionsStore(path, snapshot) {
21
+ const document = parseOpenQuestionsStore({
22
+ version: OPEN_QUESTIONS_STORE_VERSION,
23
+ ...snapshot,
24
+ });
25
+ const directory = dirname(path);
26
+ await mkdir(directory, { recursive: true, mode: 0o700 });
27
+ await chmod(directory, 0o700);
28
+ const tempPath = `${path}.tmp`;
29
+ await writeFile(tempPath, `${yaml.dump({
30
+ version: OPEN_QUESTIONS_STORE_VERSION,
31
+ ...document,
32
+ }, { lineWidth: 120 })}\n`, { encoding: 'utf8', mode: 0o600 });
33
+ await chmod(tempPath, 0o600);
34
+ await rename(tempPath, path);
35
+ }
36
+ function parseOpenQuestionsStore(value) {
37
+ const record = asRecord(value, 'document');
38
+ if (record.version !== OPEN_QUESTIONS_STORE_VERSION) {
39
+ throw new Error(`Unsupported open questions YAML version: ${String(record.version)}`);
40
+ }
41
+ if (!Number.isSafeInteger(record.sequence) ||
42
+ record.sequence < 0) {
43
+ throw new Error('Invalid open questions YAML: sequence');
44
+ }
45
+ if (!Array.isArray(record.openQuestions)) {
46
+ throw new Error('Invalid open questions YAML: openQuestions');
47
+ }
48
+ const questionIds = new Set();
49
+ let highestQuestionSequence = 0;
50
+ for (const [index, question] of record.openQuestions.entries()) {
51
+ const { id, sequence: idSequence } = validateOpenQuestion(question, index);
52
+ if (questionIds.has(id)) {
53
+ throw new Error(`Invalid open questions YAML: duplicate id ${id}`);
54
+ }
55
+ questionIds.add(id);
56
+ if (idSequence !== undefined &&
57
+ idSequence > highestQuestionSequence) {
58
+ highestQuestionSequence = idSequence;
59
+ }
60
+ }
61
+ if (highestQuestionSequence > record.sequence) {
62
+ throw new Error(`Invalid open questions YAML: sequence is behind question id inq-${highestQuestionSequence}`);
63
+ }
64
+ return {
65
+ sequence: record.sequence,
66
+ openQuestions: record.openQuestions,
67
+ };
68
+ }
69
+ function validateOpenQuestion(value, index) {
70
+ const field = `openQuestions[${index}]`;
71
+ const question = asRecord(value, field);
72
+ requireString(question.id, `${field}.id`);
73
+ const id = question.id;
74
+ const idMatch = /^inq-([1-9]\d*)$/.exec(id);
75
+ const idSequence = idMatch ? Number(idMatch[1]) : undefined;
76
+ if (idSequence !== undefined && !Number.isSafeInteger(idSequence)) {
77
+ throw new Error(`Invalid open questions YAML: ${field}.id`);
78
+ }
79
+ requireString(question.question, `${field}.question`);
80
+ requireString(question.responseType, `${field}.responseType`);
81
+ if (question.responseType !== 'yes_no' &&
82
+ question.responseType !== 'text' &&
83
+ question.responseType !== 'choice') {
84
+ throw new Error(`Invalid open questions YAML: ${field}.responseType`);
85
+ }
86
+ if (question.status !== 'open' && question.status !== 'answered') {
87
+ throw new Error(`Invalid open questions YAML: ${field}.status`);
88
+ }
89
+ if (question.source !== 'conductor' &&
90
+ question.source !== 'max_turns') {
91
+ throw new Error(`Invalid open questions YAML: ${field}.source`);
92
+ }
93
+ if (typeof question.askedAt !== 'number' ||
94
+ !Number.isFinite(question.askedAt)) {
95
+ throw new Error(`Invalid open questions YAML: ${field}.askedAt`);
96
+ }
97
+ for (const key of [
98
+ 'context',
99
+ 'answer',
100
+ 'selectedChoice',
101
+ 'sourceMessage',
102
+ 'rationale',
103
+ 'relatedPermissionId',
104
+ ]) {
105
+ requireOptionalString(question[key], `${field}.${key}`);
106
+ }
107
+ if (question.assent !== undefined &&
108
+ question.assent !== 'yes' &&
109
+ question.assent !== 'no' &&
110
+ question.assent !== 'unclear') {
111
+ throw new Error(`Invalid open questions YAML: ${field}.assent`);
112
+ }
113
+ if (question.approved !== undefined &&
114
+ typeof question.approved !== 'boolean') {
115
+ throw new Error(`Invalid open questions YAML: ${field}.approved`);
116
+ }
117
+ if (question.answeredAt !== undefined &&
118
+ (typeof question.answeredAt !== 'number' ||
119
+ !Number.isFinite(question.answeredAt))) {
120
+ throw new Error(`Invalid open questions YAML: ${field}.answeredAt`);
121
+ }
122
+ if (question.answeredBy !== undefined &&
123
+ question.answeredBy !== 'operator' &&
124
+ question.answeredBy !== 'conductor') {
125
+ throw new Error(`Invalid open questions YAML: ${field}.answeredBy`);
126
+ }
127
+ if (question.choices !== undefined) {
128
+ if (!Array.isArray(question.choices)) {
129
+ throw new Error(`Invalid open questions YAML: ${field}.choices`);
130
+ }
131
+ for (const [choiceIndex, choice] of question.choices.entries()) {
132
+ const choiceRecord = asRecord(choice, `${field}.choices[${choiceIndex}]`);
133
+ requireString(choiceRecord.id, `${field}.choices[${choiceIndex}].id`);
134
+ requireString(choiceRecord.label, `${field}.choices[${choiceIndex}].label`);
135
+ }
136
+ }
137
+ return {
138
+ id,
139
+ ...(idSequence !== undefined ? { sequence: idSequence } : {}),
140
+ };
141
+ }
142
+ function asRecord(value, field) {
143
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
144
+ throw new Error(`Invalid open questions YAML: ${field}`);
145
+ }
146
+ return value;
147
+ }
148
+ function requireString(value, field) {
149
+ if (typeof value !== 'string') {
150
+ throw new Error(`Invalid open questions YAML: ${field}`);
151
+ }
152
+ }
153
+ function requireOptionalString(value, field) {
154
+ if (value !== undefined && typeof value !== 'string') {
155
+ throw new Error(`Invalid open questions YAML: ${field}`);
156
+ }
157
+ }
158
+ function isEnoent(error) {
159
+ return (typeof error === 'object' &&
160
+ error !== null &&
161
+ 'code' in error &&
162
+ error.code === 'ENOENT');
163
+ }
164
+ //# sourceMappingURL=open-questions-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-questions-store.js","sourceRoot":"","sources":["../../src/session/open-questions-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAM3B,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAO9C,MAAM,UAAU,sBAAsB,CAAC,KAGtC;IACC,OAAO,IAAI,CACT,KAAK,CAAC,QAAQ,EACd,WAAW,EACX,UAAU,EACV,KAAK,CAAC,gBAAgB,EACtB,qBAAqB,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY;IAEZ,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY,EACZ,QAAsC;IAEtC,MAAM,QAAQ,GAAG,uBAAuB,CAAC;QACvC,OAAO,EAAE,4BAA4B;QACrC,GAAG,QAAQ;KACZ,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC;IAC/B,MAAM,SAAS,CACb,QAAQ,EACR,GAAG,IAAI,CAAC,IAAI,CACV;QACE,OAAO,EAAE,4BAA4B;QACrC,GAAG,QAAQ;KACZ,EACD,EAAE,SAAS,EAAE,GAAG,EAAE,CACnB,IAAI,EACL,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAClC,CAAC;IACF,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAc;IAEd,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,OAAO,KAAK,4BAA4B,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,4CAA4C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CACrE,CAAC;IACJ,CAAC;IACD,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrC,MAAM,CAAC,QAAmB,GAAG,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAChC,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/D,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,IACE,UAAU,KAAK,SAAS;YACxB,UAAU,GAAG,uBAAuB,EACpC,CAAC;YACD,uBAAuB,GAAG,UAAU,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,uBAAuB,GAAI,MAAM,CAAC,QAAmB,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,mEAAmE,uBAAuB,EAAE,CAC7F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAkB;QACnC,aAAa,EAAE,MAAM,CAAC,aAA+B;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAc,EACd,KAAa;IAEb,MAAM,KAAK,GAAG,iBAAiB,KAAK,GAAG,CAAC;IACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,EAAY,CAAC;IACjC,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5D,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,KAAK,CAAC,CAAC;IAC9D,CAAC;IACD,aAAa,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;IACtD,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,KAAK,eAAe,CAAC,CAAC;IAC9D,IACE,QAAQ,CAAC,YAAY,KAAK,QAAQ;QAClC,QAAQ,CAAC,YAAY,KAAK,MAAM;QAChC,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAClC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,eAAe,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,SAAS,CAAC,CAAC;IAClE,CAAC;IACD,IACE,QAAQ,CAAC,MAAM,KAAK,WAAW;QAC/B,QAAQ,CAAC,MAAM,KAAK,WAAW,EAC/B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,SAAS,CAAC,CAAC;IAClE,CAAC;IACD,IACE,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;QACpC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAClC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QAChB,SAAS;QACT,QAAQ;QACR,gBAAgB;QAChB,eAAe;QACf,WAAW;QACX,qBAAqB;KACtB,EAAE,CAAC;QACF,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IACE,QAAQ,CAAC,MAAM,KAAK,SAAS;QAC7B,QAAQ,CAAC,MAAM,KAAK,KAAK;QACzB,QAAQ,CAAC,MAAM,KAAK,IAAI;QACxB,QAAQ,CAAC,MAAM,KAAK,SAAS,EAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,SAAS,CAAC,CAAC;IAClE,CAAC;IACD,IACE,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAC/B,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,EACtC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,WAAW,CAAC,CAAC;IACpE,CAAC;IACD,IACE,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,CAAC,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;YACtC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EACxC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,aAAa,CAAC,CAAC;IACtE,CAAC;IACD,IACE,QAAQ,CAAC,UAAU,KAAK,SAAS;QACjC,QAAQ,CAAC,UAAU,KAAK,UAAU;QAClC,QAAQ,CAAC,UAAU,KAAK,WAAW,EACnC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,aAAa,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,UAAU,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,KAAK,YAAY,WAAW,GAAG,CAAC,CAAC;YAC1E,aAAa,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,KAAK,YAAY,WAAW,MAAM,CAAC,CAAC;YACtE,aAAa,CACX,YAAY,CAAC,KAAK,EAClB,GAAG,KAAK,YAAY,WAAW,SAAS,CACzC,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO;QACL,EAAE;QACF,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,KAAa;IAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA+B,CAAC,IAAI,KAAK,QAAQ,CACnD,CAAC;AACJ,CAAC"}
@@ -4,6 +4,7 @@ import type { AcpSpawnFingerprint } from '../acp/resolve-acp-spawn.js';
4
4
  import type { ConductorBackend } from '../config/types.js';
5
5
  import type { ResolvedProfile } from '../profile/types.js';
6
6
  export declare const SESSION_SIDECAR_VERSION = 1;
7
+ export type SessionLifecycle = 'closed' | 'exited' | 'interrupted' | 'unknown';
7
8
  export declare class SessionSidecarNotFoundError extends Error {
8
9
  readonly conductorAgentId: string;
9
10
  readonly path: string;
@@ -24,6 +25,8 @@ export interface SessionSidecar {
24
25
  conductorBackend?: ConductorBackend;
25
26
  /** 初回 `prompt_worker` まで ACP attach を遅延する。旧 sidecar は eager。 */
26
27
  lazyWorkers?: boolean;
28
+ /** 稼働中 session の local control socket。teardown 時に除去する。 */
29
+ harnessSocketPath?: string;
27
30
  issueUrl: string;
28
31
  repoRoot: string;
29
32
  profile: ResolvedProfile;
@@ -35,6 +38,8 @@ export interface SessionSidecar {
35
38
  githubMonitor?: GitHubMonitorCursor;
36
39
  /** Harness-resolved MCP map digest used to reject unsafe resume. */
37
40
  mcpConfigDigest?: string;
41
+ /** Last completed process lifecycle; absent legacy values are unknown. */
42
+ lifecycle?: SessionLifecycle;
38
43
  /** flush 時刻(Unix ms)。`--continue` で最新セッションを選ぶために使う。 */
39
44
  updatedAt: number;
40
45
  }