@nuvin/session 0.4.0-rc.10 → 0.4.0-rc.11

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 (37) hide show
  1. package/dist/chunk-4AOFJGGN.js +141 -0
  2. package/dist/{chunk-U6V6IQJR.js → chunk-4FXP5TSI.js} +68 -4
  3. package/dist/{chunk-Y7JPSYTH.js → chunk-O3YF6Q77.js} +43 -1
  4. package/dist/client/control-center-socket.d.ts +14 -0
  5. package/dist/client/control-center-socket.d.ts.map +1 -0
  6. package/dist/client/daemon-client.d.ts.map +1 -1
  7. package/dist/client/data-client.d.ts +2 -1
  8. package/dist/client/data-client.d.ts.map +1 -1
  9. package/dist/client/http-data-client.d.ts.map +1 -1
  10. package/dist/client/index.js +209 -5
  11. package/dist/client/session-client.d.ts +4 -2
  12. package/dist/client/session-client.d.ts.map +1 -1
  13. package/dist/controller/agent-channel.d.ts +7 -2
  14. package/dist/controller/agent-channel.d.ts.map +1 -1
  15. package/dist/controller/index.js +394 -65
  16. package/dist/controller/session-controller.d.ts +25 -5
  17. package/dist/controller/session-controller.d.ts.map +1 -1
  18. package/dist/protocol/control-center.d.ts +141 -0
  19. package/dist/protocol/control-center.d.ts.map +1 -0
  20. package/dist/protocol/data-rpc.d.ts +5 -0
  21. package/dist/protocol/data-rpc.d.ts.map +1 -1
  22. package/dist/protocol/index.d.ts +2 -0
  23. package/dist/protocol/index.d.ts.map +1 -1
  24. package/dist/protocol/index.js +12 -2
  25. package/dist/protocol/submission-recovery.d.ts +6 -0
  26. package/dist/protocol/submission-recovery.d.ts.map +1 -0
  27. package/dist/protocol/types.d.ts +71 -6
  28. package/dist/protocol/types.d.ts.map +1 -1
  29. package/dist/protocol/version.d.ts +1 -1
  30. package/dist/state/index.js +5 -1
  31. package/dist/state/messages.d.ts +2 -1
  32. package/dist/state/messages.d.ts.map +1 -1
  33. package/dist/state/session.d.ts +4 -1
  34. package/dist/state/session.d.ts.map +1 -1
  35. package/dist/test-utils/index.js +2 -2
  36. package/package.json +2 -2
  37. package/dist/chunk-5PHEC5GZ.js +0 -85
@@ -1,13 +1,166 @@
1
1
  import {
2
2
  createSessionViewState,
3
3
  reduceSessionEvent
4
- } from "../chunk-U6V6IQJR.js";
4
+ } from "../chunk-4FXP5TSI.js";
5
5
  import {
6
6
  PROTOCOL_VERSION,
7
+ parseAbortRecoveryRequest,
8
+ parseAbortRecoveryResult,
7
9
  parseBackgroundWorkCancellation,
8
10
  parseBackgroundWorkInspection,
9
11
  parseBackgroundWorkPage
10
- } from "../chunk-Y7JPSYTH.js";
12
+ } from "../chunk-O3YF6Q77.js";
13
+
14
+ // src/client/control-center-socket.ts
15
+ var CONTROL_CENTER_UNSUPPORTED = "Control Center is unavailable on this daemon. Update or restart the daemon and try again.";
16
+ function createControlCenterSocketClient(options) {
17
+ const timeoutMs = options.timeoutMs ?? 6e4;
18
+ let closed = false;
19
+ let sequence = 0;
20
+ let socket;
21
+ let connecting;
22
+ let rejectConnection;
23
+ let handshakeTimer;
24
+ const pending = /* @__PURE__ */ new Map();
25
+ const disconnect = (error) => {
26
+ clearTimeout(handshakeTimer);
27
+ rejectConnection?.(error);
28
+ rejectConnection = void 0;
29
+ connecting = void 0;
30
+ const current = socket;
31
+ socket = void 0;
32
+ for (const entry of pending.values()) {
33
+ clearTimeout(entry.timer);
34
+ entry.reject(error);
35
+ }
36
+ pending.clear();
37
+ current?.close();
38
+ };
39
+ const connect = () => {
40
+ if (closed) return Promise.reject(new Error("Control Center connection is closed."));
41
+ if (connecting) return connecting;
42
+ connecting = new Promise((resolve, reject) => {
43
+ rejectConnection = reject;
44
+ handshakeTimer = setTimeout(
45
+ () => disconnect(
46
+ new Error(
47
+ "Control Center connection timed out. Check the daemon connection and try again."
48
+ )
49
+ ),
50
+ options.timeoutMs ?? 15e3
51
+ );
52
+ void options.getEndpoint().then((endpoint) => {
53
+ if (closed || rejectConnection !== reject) return;
54
+ const current = options.socketFactory(endpoint.url);
55
+ socket = current;
56
+ current.on("open", () => {
57
+ if (socket !== current) return;
58
+ try {
59
+ current.send(
60
+ JSON.stringify({
61
+ type: "hello",
62
+ protocolVersion: PROTOCOL_VERSION,
63
+ ...endpoint.credential
64
+ })
65
+ );
66
+ } catch {
67
+ disconnect(new Error("Control Center connection closed during authentication."));
68
+ }
69
+ });
70
+ current.on("message", (data) => {
71
+ if (socket !== current) return;
72
+ let frame;
73
+ try {
74
+ const value = JSON.parse(
75
+ data instanceof ArrayBuffer ? new TextDecoder().decode(data) : String(data)
76
+ );
77
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return;
78
+ frame = value;
79
+ } catch {
80
+ return;
81
+ }
82
+ if (frame.type === "rejected") {
83
+ disconnect(
84
+ new Error(
85
+ frame.reason === "auth" ? "Control Center authentication failed. Reconnect to the daemon." : "Control Center requires matching client and daemon versions. Update or restart the daemon."
86
+ )
87
+ );
88
+ } else if (frame.type === "welcome") {
89
+ if (frame.protocolVersion !== PROTOCOL_VERSION) {
90
+ disconnect(
91
+ new Error(
92
+ "Control Center requires matching client and daemon versions. Update or restart the daemon."
93
+ )
94
+ );
95
+ return;
96
+ }
97
+ clearTimeout(handshakeTimer);
98
+ rejectConnection = void 0;
99
+ resolve(current);
100
+ } else if (frame.type === "ack" && typeof frame.id === "string") {
101
+ const entry = pending.get(frame.id);
102
+ if (!entry) return;
103
+ pending.delete(frame.id);
104
+ clearTimeout(entry.timer);
105
+ if (frame.ok === true && Object.hasOwn(frame, "result")) {
106
+ entry.resolve(frame.result);
107
+ } else {
108
+ const error = frame.error;
109
+ const unsupported = ["unknown-command", "not-attached"].includes(error?.code ?? "") || error?.code === "unsupported" && error.message === "Control Center is unavailable. Update or restart the daemon.";
110
+ entry.reject(
111
+ new Error(
112
+ unsupported ? CONTROL_CENTER_UNSUPPORTED : error?.message ?? "Control Center request failed."
113
+ )
114
+ );
115
+ }
116
+ }
117
+ });
118
+ current.on("close", () => {
119
+ if (socket === current) disconnect(new Error("Control Center connection closed."));
120
+ });
121
+ current.on("error", () => {
122
+ if (socket === current)
123
+ disconnect(new Error("Control Center connection closed after a network error."));
124
+ });
125
+ }).catch((error) => {
126
+ if (rejectConnection === reject)
127
+ disconnect(error instanceof Error ? error : new Error(String(error)));
128
+ });
129
+ });
130
+ return connecting;
131
+ };
132
+ return {
133
+ async request(input) {
134
+ const current = await connect();
135
+ if (closed || socket !== current) throw new Error("Control Center connection is closed.");
136
+ return new Promise((resolve, reject) => {
137
+ const id = `control-center-${++sequence}`;
138
+ const timer = setTimeout(
139
+ () => {
140
+ pending.delete(id);
141
+ reject(
142
+ new Error(
143
+ "Control Center request timed out. Check the daemon connection before trying again."
144
+ )
145
+ );
146
+ },
147
+ input.operation === "runConsolidate" ? Math.max(timeoutMs, 6e4) : timeoutMs
148
+ );
149
+ pending.set(id, { resolve, reject, timer });
150
+ try {
151
+ current.send(JSON.stringify({ id, type: "control-center", input }));
152
+ } catch {
153
+ disconnect(new Error("Control Center connection closed while sending a request."));
154
+ }
155
+ });
156
+ },
157
+ close() {
158
+ if (closed) return;
159
+ closed = true;
160
+ disconnect(new Error("Control Center connection is closed."));
161
+ }
162
+ };
163
+ }
11
164
 
12
165
  // src/client/endpoint.ts
13
166
  var TerminalEndpointError = class extends Error {
@@ -304,6 +457,22 @@ function createHttpDataClient(options = {}) {
304
457
  }
305
458
  if (!response.ok) await throwFromResponse(response, "Failed to delete the session");
306
459
  },
460
+ async controlCenter(daemonId, input) {
461
+ const response = await daemonFetch(daemonId, "/control-center", {
462
+ method: "POST",
463
+ headers: { "Content-Type": "application/json" },
464
+ body: JSON.stringify(input)
465
+ });
466
+ if (response.status === 404) {
467
+ const body = await response.json().catch(() => null);
468
+ if (body?.code === "not-found" && typeof body.message === "string" && body.message !== "Not found.") {
469
+ throw new Error(body.message);
470
+ }
471
+ throw new Error(CONTROL_CENTER_UNSUPPORTED);
472
+ }
473
+ if (!response.ok) await throwFromResponse(response, "Failed to update Control Center");
474
+ return await response.json();
475
+ },
307
476
  async listProfiles(daemonId) {
308
477
  const response = await daemonFetch(daemonId, "/profiles");
309
478
  if (!response.ok) {
@@ -698,6 +867,14 @@ function createSessionClient(transport) {
698
867
  }
699
868
  return;
700
869
  }
870
+ if (frame.type === "submission-retracted") {
871
+ try {
872
+ if (parseAbortRecoveryResult(frame.result).status !== "retracted" || !Array.isArray(frame.removedMessageIds) || !frame.removedMessageIds.every((id) => typeof id === "string"))
873
+ return;
874
+ } catch {
875
+ return;
876
+ }
877
+ }
701
878
  state = reduceSessionEvent(state, frame);
702
879
  seq = frame.seq;
703
880
  for (const listener of eventListeners) {
@@ -747,6 +924,7 @@ function createSessionClient(transport) {
747
924
  type: "submit",
748
925
  input,
749
926
  displayText: opts.displayText,
927
+ ...opts.human === void 0 ? {} : { human: structuredClone(opts.human) },
750
928
  ...opts.attachmentLabels?.length ? { attachmentLabels: opts.attachmentLabels } : {},
751
929
  ...opts.turnId !== void 0 ? { turnId: opts.turnId } : {}
752
930
  })).then(() => {
@@ -786,6 +964,19 @@ function createSessionClient(transport) {
786
964
  })).then(() => {
787
965
  });
788
966
  },
967
+ async abortWithRecovery(request) {
968
+ const captured = parseAbortRecoveryRequest(request);
969
+ const result = await sendCommand((id) => ({
970
+ id,
971
+ type: "abort-with-recovery",
972
+ request: captured
973
+ }));
974
+ try {
975
+ return parseAbortRecoveryResult(result, captured);
976
+ } catch {
977
+ throw new SessionCommandError("invalid-result", "Invalid abort recovery result.");
978
+ }
979
+ },
789
980
  abort() {
790
981
  return sendCommand((id) => ({ id, type: "abort" })).then(() => {
791
982
  });
@@ -794,8 +985,13 @@ function createSessionClient(transport) {
794
985
  return sendCommand((id) => ({ id, type: "dequeue", queuedId })).then(() => {
795
986
  });
796
987
  },
797
- runSlashCommand(raw) {
798
- return sendCommand((id) => ({ id, type: "slash-command", raw })).then(() => {
988
+ runSlashCommand(raw, human) {
989
+ return sendCommand((id) => ({
990
+ id,
991
+ type: "slash-command",
992
+ raw,
993
+ ...human === void 0 ? {} : { human: structuredClone(human) }
994
+ })).then(() => {
799
995
  });
800
996
  },
801
997
  loadHistory(historyId) {
@@ -1317,6 +1513,7 @@ function throwCollectedErrors(errors, message) {
1317
1513
  }
1318
1514
  function bindDaemonDataClient(client, daemonId) {
1319
1515
  return {
1516
+ controlCenter: (input) => client.controlCenter(daemonId, input),
1320
1517
  fetchTranscript: (identity) => client.fetchTranscript(daemonId, identity),
1321
1518
  fetchHistory: (opts) => client.fetchHistory(daemonId, opts),
1322
1519
  listHistoryWorkspaces: (opts) => client.listHistoryWorkspaces(daemonId, opts),
@@ -1463,9 +1660,11 @@ function createDaemonClient(target, deps = {}) {
1463
1660
  };
1464
1661
  }
1465
1662
  };
1663
+ const management = target.kind === "relay" ? createControlCenterSocketClient({ getEndpoint: acquireEndpoint, socketFactory }) : void 0;
1664
+ const boundData = bindDaemonDataClient(dataClient, target.id);
1466
1665
  return {
1467
1666
  target,
1468
- data: bindDaemonDataClient(dataClient, target.id),
1667
+ data: management ? { ...boundData, controlCenter: (input) => management.request(input) } : boundData,
1469
1668
  directoryEndpoint() {
1470
1669
  requireOpen();
1471
1670
  return { name: target.name, ...endpointConfig(directorySocketFactory) };
@@ -1507,6 +1706,11 @@ function createDaemonClient(target, deps = {}) {
1507
1706
  if (closed) return;
1508
1707
  closed = true;
1509
1708
  const errors = [];
1709
+ try {
1710
+ management?.close();
1711
+ } catch (error) {
1712
+ errors.push(error);
1713
+ }
1510
1714
  for (const connection of [...connections]) {
1511
1715
  try {
1512
1716
  connection.close();
@@ -1,7 +1,8 @@
1
1
  import type { AgentInput, AskUserAnswers } from "@nuvin/agent-core/shared";
2
- import type { AgentCatalogEntry, AgentDetail, AgentEditorData, AgentEditorDefinition, AgentModelSetSelectionResult, AgentMutationResult, BackgroundWorkCancellationResult, BackgroundWorkInspection, BackgroundWorkPage, CommandDetail, ConfigPatch, ConsolidateProposalDetail, ConsolidateProposalSummary, ConsolidateRunOutcome, CustomProviderInput, DeleteAgentResult, GrantCapability, McpAction, McpActionResult, McpServerInfo, MemoryExtractSummary, PersistBashPermissionRequest, PersistBashPermissionResult, ServerEvent, SessionViewState, SetConfigResult, SkillCatalogEntry, SkillDetail, SlashCommandCompletion, SlashCommandDescriptor, WorkspaceMemoryDetail, WorkspaceMemorySummary } from "../protocol/types.ts";
2
+ import type { AbortRecoveryRequest, AbortRecoveryResult, AgentCatalogEntry, AgentDetail, AgentEditorData, AgentEditorDefinition, AgentModelSetSelectionResult, AgentMutationResult, BackgroundWorkCancellationResult, BackgroundWorkInspection, BackgroundWorkPage, CommandDetail, ConfigPatch, ConsolidateProposalDetail, ConsolidateProposalSummary, ConsolidateRunOutcome, CustomProviderInput, DeleteAgentResult, GrantCapability, McpAction, McpActionResult, McpServerInfo, MemoryExtractSummary, PersistBashPermissionRequest, PersistBashPermissionResult, ServerEvent, SessionViewState, SetConfigResult, SkillCatalogEntry, SkillDetail, SlashCommandCompletion, SlashCommandDescriptor, WorkspaceMemoryDetail, WorkspaceMemorySummary } from "../protocol/types.ts";
3
3
  import type { ClientTransport } from "./transport.ts";
4
4
  export type ClientSubmitOptions = {
5
+ human?: import("../protocol/types.ts").HumanSubmissionRequest;
5
6
  displayText: string;
6
7
  attachmentLabels?: string[];
7
8
  turnId?: string;
@@ -22,9 +23,10 @@ export interface SessionClient {
22
23
  persistBashPermission(toolCallId: string, request: PersistBashPermissionRequest, toolCallPath?: readonly string[]): Promise<PersistBashPermissionResult>;
23
24
  answerQuestion(questionId: string, answers: AskUserAnswers, toolCallPath?: readonly string[]): Promise<void>;
24
25
  abort(): Promise<void>;
26
+ abortWithRecovery(request: AbortRecoveryRequest): Promise<AbortRecoveryResult>;
25
27
  /** Cancel a queued (not-yet-running) message by its `turn-status.queued` id. */
26
28
  dequeueMessage(queuedId: string): Promise<void>;
27
- runSlashCommand(raw: string): Promise<void>;
29
+ runSlashCommand(raw: string, human?: import("../protocol/types.ts").HumanSubmissionRequest): Promise<void>;
28
30
  /**
29
31
  * Resume a persisted transcript into this session (spec §4.4 load-history —
30
32
  * the picker's Local resume path). The host loads the transcript and
@@ -1 +1 @@
1
- {"version":3,"file":"session-client.d.ts","sourceRoot":"","sources":["../../src/client/session-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-client.d.ts","sourceRoot":"","sources":["../../src/client/session-client.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import type { AgentEvent, AskUserAnswers, AskUserQuestionRequest, Message, ToolExecutionScope, ToolPermissionClass, ToolRuntimeDispatchDecision, ToolUseBlock } from "@nuvin/agent-core/shared";
2
- import type { BashPolicyApprovalDiagnostics, DirAccessRequest, PersistBashPermissionHandlerResult, PersistBashPermissionRequest, WireAgentEventScope } from "../protocol/types.ts";
2
+ import type { BashPolicyApprovalDiagnostics, DirAccessRequest, PersistBashPermissionHandlerResult, PersistBashPermissionRequest, RecallEntry, RecallState, WireAgentEventScope } from "../protocol/types.ts";
3
3
  import type { TuiMessage } from "../state/messages.ts";
4
4
  /** UI-safe transcript projection of runtime LoadedSession. */
5
5
  export type SessionLoadedPayload = {
6
+ recall: RecallState;
6
7
  agentMessages: Message[];
7
8
  id: string;
8
9
  messages: TuiMessage[];
@@ -14,10 +15,12 @@ export type SessionLoadedPayload = {
14
15
  */
15
16
  export declare function toWireSessionScope(scope: ToolExecutionScope): WireAgentEventScope | undefined;
16
17
  export type AgentEventPayload = {
18
+ executionId?: string;
17
19
  event: AgentEvent;
18
20
  scope?: WireAgentEventScope;
19
21
  };
20
22
  export type ToolCallRequest = {
23
+ executionId?: string;
21
24
  agentId: string;
22
25
  approvalKey?: string;
23
26
  bashPolicy?: BashPolicyApprovalDiagnostics;
@@ -46,7 +49,9 @@ export declare class AgentChannel {
46
49
  private readonly emitter;
47
50
  private decider;
48
51
  private questionHandler;
49
- publishEvent(event: AgentEvent, scope?: ToolExecutionScope): void;
52
+ publishEvent(event: AgentEvent, scope?: ToolExecutionScope, executionId?: string): void;
53
+ publishRecallEntry(entry: RecallEntry): void;
54
+ onRecallEntry(listener: (entry: RecallEntry) => void): () => void;
50
55
  publishSessionLoaded(loaded: SessionLoadedPayload): void;
51
56
  requestToolDecision(request: ToolCallRequest): Promise<ToolRuntimeDispatchDecision> | ToolRuntimeDispatchDecision;
52
57
  requestUserQuestion(request: AskUserQuestionRequest, scope?: ToolExecutionScope): Promise<AskUserAnswers>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-channel.d.ts","sourceRoot":"","sources":["../../src/controller/agent-channel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,OAAO,EACP,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,YAAY,EACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,kCAAkC,EAClC,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,8DAA8D;AAC9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,SAAS,CAI7F;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,6BAA6B,CAAC;IAC3C,gFAAgF;IAChF,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,qBAAqB,CAAC,EAAE,CACtB,OAAO,EAAE,4BAA4B,KAClC,OAAO,CAAC,kCAAkC,CAAC,CAAC;IACjD,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;AACtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAE3E,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,2BAA2B,CAAC,GAAG,2BAA2B,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,CAAC,EAAE,mBAAmB,KACxB,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC;AAO9C;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,eAAe,CAAoC;IAI3D,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAOjE,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI;IAIxD,mBAAmB,CACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,2BAA2B,CAAC,GAAG,2BAA2B;IAerE,mBAAmB,CACjB,OAAO,EAAE,sBAAsB,EAC/B,KAAK,CAAC,EAAE,kBAAkB,GACzB,OAAO,CAAC,cAAc,CAAC;IAW1B,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAOjD,eAAe,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,IAAI;IAO5D,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAIrD,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;CAG9D"}
1
+ {"version":3,"file":"agent-channel.d.ts","sourceRoot":"","sources":["../../src/controller/agent-channel.ts"],"names":[],"mappings":"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"}