itermbot 1.0.2 → 1.0.4

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 (128) hide show
  1. package/.github/workflows/ci.yml +15 -20
  2. package/.github/workflows/release.yml +32 -20
  3. package/README.md +11 -20
  4. package/cleanup-unused.patch +108 -0
  5. package/config/app.yaml +32 -13
  6. package/config/memory.yaml +38 -31
  7. package/config/model.yaml +33 -0
  8. package/config/skill.yaml +8 -0
  9. package/config/tool.yaml +50 -17
  10. package/config/tsconfig.json +4 -1
  11. package/dist/chat/builtin-commands.d.ts +8 -0
  12. package/dist/chat/builtin-commands.d.ts.map +1 -0
  13. package/dist/chat/builtin-commands.js +53 -0
  14. package/dist/chat/builtin-commands.js.map +1 -0
  15. package/dist/chat/progress.d.ts +3 -0
  16. package/dist/chat/progress.d.ts.map +1 -0
  17. package/dist/chat/progress.js +23 -0
  18. package/dist/chat/progress.js.map +1 -0
  19. package/dist/chat/response-safety.d.ts +8 -0
  20. package/dist/chat/response-safety.d.ts.map +1 -0
  21. package/dist/chat/response-safety.js +126 -0
  22. package/dist/chat/response-safety.js.map +1 -0
  23. package/dist/chat/step-display.d.ts +2 -0
  24. package/dist/chat/step-display.d.ts.map +1 -0
  25. package/dist/chat/step-display.js +50 -0
  26. package/dist/chat/step-display.js.map +1 -0
  27. package/dist/chat/tool-result.d.ts +4 -0
  28. package/dist/chat/tool-result.d.ts.map +1 -0
  29. package/dist/chat/tool-result.js +24 -0
  30. package/dist/chat/tool-result.js.map +1 -0
  31. package/dist/config.d.ts +11 -6
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/config.js +26 -12
  34. package/dist/config.js.map +1 -1
  35. package/dist/index.js +308 -151
  36. package/dist/index.js.map +1 -1
  37. package/dist/iterm/direct-command-router.d.ts +24 -0
  38. package/dist/iterm/direct-command-router.d.ts.map +1 -0
  39. package/dist/iterm/direct-command-router.js +213 -0
  40. package/dist/iterm/direct-command-router.js.map +1 -0
  41. package/dist/iterm/session-hint.d.ts +10 -0
  42. package/dist/iterm/session-hint.d.ts.map +1 -0
  43. package/dist/iterm/session-hint.js +43 -0
  44. package/dist/iterm/session-hint.js.map +1 -0
  45. package/dist/iterm/target-panel-policy.d.ts +12 -0
  46. package/dist/iterm/target-panel-policy.d.ts.map +1 -0
  47. package/dist/iterm/target-panel-policy.js +287 -0
  48. package/dist/iterm/target-panel-policy.js.map +1 -0
  49. package/dist/runtime/text-tool-call-recovery.d.ts +23 -0
  50. package/dist/runtime/text-tool-call-recovery.d.ts.map +1 -0
  51. package/dist/runtime/text-tool-call-recovery.js +211 -0
  52. package/dist/runtime/text-tool-call-recovery.js.map +1 -0
  53. package/dist/startup/colors.d.ts +37 -0
  54. package/dist/startup/colors.d.ts.map +1 -0
  55. package/dist/{startup-colors.js → startup/colors.js} +30 -15
  56. package/dist/startup/colors.js.map +1 -0
  57. package/dist/startup/diagnostics.d.ts +8 -0
  58. package/dist/startup/diagnostics.d.ts.map +1 -0
  59. package/dist/startup/diagnostics.js +18 -0
  60. package/dist/startup/diagnostics.js.map +1 -0
  61. package/dist/startup/os.d.ts +10 -0
  62. package/dist/startup/os.d.ts.map +1 -0
  63. package/dist/startup/os.js +67 -0
  64. package/dist/startup/os.js.map +1 -0
  65. package/dist/startup/ui.d.ts +11 -0
  66. package/dist/startup/ui.d.ts.map +1 -0
  67. package/dist/startup/ui.js +49 -0
  68. package/dist/startup/ui.js.map +1 -0
  69. package/package.json +23 -13
  70. package/scripts/internal-package-refs.mjs +158 -0
  71. package/scripts/patch-buildin-cache.sh +1 -4
  72. package/scripts/resolve-deps.js +5 -0
  73. package/scripts/test-llm.mjs +11 -5
  74. package/skills/gpu-ssh-monitor/SKILL.md +22 -3
  75. package/src/chat/builtin-commands.ts +70 -0
  76. package/src/chat/progress.ts +26 -0
  77. package/src/chat/response-safety.ts +134 -0
  78. package/src/chat/step-display.ts +54 -0
  79. package/src/chat/tool-result.ts +22 -0
  80. package/src/config.ts +48 -21
  81. package/src/index.ts +377 -167
  82. package/src/iterm/direct-command-router.ts +274 -0
  83. package/src/iterm/session-hint.ts +49 -0
  84. package/src/iterm/target-panel-policy.ts +341 -0
  85. package/src/runtime/text-tool-call-recovery.ts +257 -0
  86. package/src/{startup-colors.ts → startup/colors.ts} +42 -27
  87. package/src/startup/diagnostics.ts +25 -0
  88. package/src/startup/os.ts +63 -0
  89. package/src/startup/ui.ts +56 -0
  90. package/src/types/marked-terminal.d.ts +3 -0
  91. package/test/builtin-commands.test.mjs +50 -0
  92. package/test/chat-flow.integration.test.mjs +235 -0
  93. package/test/chat-progress.test.mjs +83 -0
  94. package/test/config.test.mjs +22 -0
  95. package/test/diagnostics.test.mjs +45 -0
  96. package/test/direct-command-router.test.mjs +149 -0
  97. package/test/live-iterm-llm.integration.test.mjs +153 -0
  98. package/test/response-safety.test.mjs +44 -0
  99. package/test/session-hint.test.mjs +78 -0
  100. package/test/startup-colors.test.mjs +145 -0
  101. package/test/target-panel-policy.test.mjs +180 -0
  102. package/test/tool-call-recovery.test.mjs +199 -0
  103. package/config/agent.yaml +0 -121
  104. package/config/models.yaml +0 -36
  105. package/config/skills.yaml +0 -4
  106. package/dist/agent.d.ts +0 -14
  107. package/dist/agent.d.ts.map +0 -1
  108. package/dist/agent.js +0 -16
  109. package/dist/agent.js.map +0 -1
  110. package/dist/context.d.ts +0 -12
  111. package/dist/context.d.ts.map +0 -1
  112. package/dist/context.js +0 -20
  113. package/dist/context.js.map +0 -1
  114. package/dist/session-hint.d.ts +0 -4
  115. package/dist/session-hint.d.ts.map +0 -1
  116. package/dist/session-hint.js +0 -25
  117. package/dist/session-hint.js.map +0 -1
  118. package/dist/startup-colors.d.ts +0 -26
  119. package/dist/startup-colors.d.ts.map +0 -1
  120. package/dist/startup-colors.js.map +0 -1
  121. package/dist/target-routing.d.ts +0 -15
  122. package/dist/target-routing.d.ts.map +0 -1
  123. package/dist/target-routing.js +0 -355
  124. package/dist/target-routing.js.map +0 -1
  125. package/src/agent.ts +0 -35
  126. package/src/context.ts +0 -35
  127. package/src/session-hint.ts +0 -28
  128. package/src/target-routing.ts +0 -419
@@ -0,0 +1,211 @@
1
+ import { asRecord, normalizeToolList, shortToolName, } from "@easynet/agent-common/utils";
2
+ import { AgentContextTokens } from "@easynet/agent-common/context";
3
+ function normalizeToolInvokeResult(raw) {
4
+ return raw;
5
+ }
6
+ function stringifyToolResult(value) {
7
+ if (typeof value === "string")
8
+ return value;
9
+ try {
10
+ return JSON.stringify(value, null, 2);
11
+ }
12
+ catch {
13
+ return String(value);
14
+ }
15
+ }
16
+ function collectToolObservationText(messages) {
17
+ if (!Array.isArray(messages))
18
+ return "";
19
+ const chunks = [];
20
+ for (const message of messages) {
21
+ const rec = asRecord(message);
22
+ if (!rec)
23
+ continue;
24
+ const type = typeof rec.type === "string" ? rec.type.toLowerCase() : "";
25
+ const role = typeof rec.role === "string" ? rec.role.toLowerCase() : "";
26
+ const isToolMessage = type.includes("tool") || role.includes("tool") || typeof rec.tool_call_id === "string";
27
+ if (!isToolMessage)
28
+ continue;
29
+ const content = rec.content;
30
+ if (typeof content === "string" && content.trim().length > 0) {
31
+ chunks.push(content.trim());
32
+ continue;
33
+ }
34
+ if (Array.isArray(content)) {
35
+ const joined = content
36
+ .map((part) => {
37
+ if (typeof part === "string")
38
+ return part;
39
+ const obj = asRecord(part);
40
+ return typeof obj?.text === "string" ? obj.text : "";
41
+ })
42
+ .join(" ")
43
+ .trim();
44
+ if (joined)
45
+ chunks.push(joined);
46
+ }
47
+ }
48
+ return chunks.join("\n");
49
+ }
50
+ function isToolLike(tool) {
51
+ return Boolean(tool
52
+ && typeof tool === "object"
53
+ && typeof tool.name === "string"
54
+ && typeof tool.invoke === "function");
55
+ }
56
+ function extractToolCallPayload(text) {
57
+ const match = text.match(/<tool-call>\s*([\s\S]*?)\s*<\/tool-call>/i);
58
+ if (match?.[1]) {
59
+ try {
60
+ const parsed = JSON.parse(match[1]);
61
+ const name = typeof parsed.name === "string" ? parsed.name.trim() : "";
62
+ const args = asRecord(parsed.arguments) ?? {};
63
+ if (!name)
64
+ return null;
65
+ return { name, arguments: args };
66
+ }
67
+ catch {
68
+ return null;
69
+ }
70
+ }
71
+ const fnMatch = text.match(/<function=([^\s>]+)>([\s\S]*)/i);
72
+ if (!fnMatch?.[1])
73
+ return null;
74
+ const name = fnMatch[1].trim();
75
+ if (!name)
76
+ return null;
77
+ const tail = fnMatch[2] ?? "";
78
+ const args = {};
79
+ const paramRe = /<parameter=([^>]+)>\s*([\s\S]*?)(?=<parameter=[^>]+>|$)/gi;
80
+ for (const m of tail.matchAll(paramRe)) {
81
+ const key = (m[1] ?? "").trim();
82
+ const raw = (m[2] ?? "").trim();
83
+ if (!key || !raw)
84
+ continue;
85
+ if (/^-?\d+$/.test(raw)) {
86
+ args[key] = Number(raw);
87
+ continue;
88
+ }
89
+ args[key] = raw;
90
+ }
91
+ return { name, arguments: args };
92
+ }
93
+ function findToolByName(runtime, requestedName) {
94
+ const rawTools = runtime.context.get(AgentContextTokens.Tools);
95
+ const tools = normalizeToolList(rawTools, isToolLike);
96
+ if (tools.length === 0)
97
+ return null;
98
+ const exact = tools.find((tool) => shortToolName(tool.name) === requestedName);
99
+ if (exact)
100
+ return exact;
101
+ const contains = tools.find((tool) => tool.name.includes(requestedName));
102
+ return contains ?? null;
103
+ }
104
+ function buildRecoveredEvidence(raw) {
105
+ const root = asRecord(raw);
106
+ const result = asRecord(root?.result);
107
+ if (!result)
108
+ return "";
109
+ const blockedToolRaw = typeof result.blockedTool === "string" ? result.blockedTool : "";
110
+ const blockedTool = blockedToolRaw.split(".").pop() ?? blockedToolRaw;
111
+ const requestedPath = typeof result.requestedPath === "string" ? result.requestedPath : "";
112
+ const resolvedPath = typeof result.resolvedPath === "string" ? result.resolvedPath : "";
113
+ const pathFallbackUsed = typeof result.pathFallbackUsed === "boolean" ? result.pathFallbackUsed : false;
114
+ const outputRoot = asRecord(result.output);
115
+ const outputResult = asRecord(outputRoot?.result);
116
+ const outputText = typeof outputResult?.output === "string" ? outputResult.output : "";
117
+ if (blockedTool !== "listDir")
118
+ return "";
119
+ const listingLines = outputText
120
+ .split("\n")
121
+ .map((line) => line.trim())
122
+ .filter((line) => line.length > 0 && (line.startsWith("./") || line.startsWith("../") || line.startsWith("/")))
123
+ .slice(0, 120);
124
+ const parts = [
125
+ "Structured execution facts:",
126
+ `- blockedTool: ${blockedTool}`,
127
+ `- requestedPath: ${requestedPath || "(unknown)"}`,
128
+ `- resolvedPath: ${resolvedPath || requestedPath || "(unknown)"}`,
129
+ `- pathFallbackUsed: ${String(pathFallbackUsed)}`,
130
+ ];
131
+ if (listingLines.length > 0) {
132
+ parts.push("- extractedListing:");
133
+ parts.push(listingLines.join("\n"));
134
+ }
135
+ return parts.join("\n");
136
+ }
137
+ function formatStepNumber(stepNumber) {
138
+ return String(Math.max(0, stepNumber)).padStart(2, "0");
139
+ }
140
+ function writeStepRunStart(writer, label) {
141
+ writer("");
142
+ writer(`=== Steps: ${label} ===`);
143
+ return Date.now();
144
+ }
145
+ function writeStepStart(writer, stepNumber, action) {
146
+ writer(`[${formatStepNumber(stepNumber)}] ▶ ${action}`);
147
+ }
148
+ function writeStepDone(writer, stepNumber, action) {
149
+ writer(`[${formatStepNumber(stepNumber)}] ✓ ${action}`);
150
+ }
151
+ function writeStepProgress(writer, completed, total) {
152
+ writer(` progress ${completed}/${total}`);
153
+ }
154
+ function writeStepRunDone(writer, startedAtMs, steps) {
155
+ const elapsed = Math.max(0, Math.round(Date.now() - startedAtMs));
156
+ writer(`=== Steps complete: ${steps} step(s), ${elapsed}ms ===`);
157
+ writer("");
158
+ }
159
+ function formatRecoveredToolResult(payloadName, raw) {
160
+ const recoveredEvidence = buildRecoveredEvidence(raw);
161
+ if (recoveredEvidence) {
162
+ return [
163
+ "### Recovered Tool Result",
164
+ `- Tool: \`${payloadName}\``,
165
+ "",
166
+ recoveredEvidence,
167
+ ].join("\n");
168
+ }
169
+ return stringifyToolResult(raw);
170
+ }
171
+ function mergeTargetHintForItermTool(toolName, args, hint) {
172
+ if (!toolName.includes("itermRunCommandInSession"))
173
+ return args;
174
+ return {
175
+ ...args,
176
+ ...(args.windowId == null && hint?.windowId != null ? { windowId: hint.windowId } : {}),
177
+ ...(args.tabIndex == null && hint?.tabIndex != null ? { tabIndex: hint.tabIndex } : {}),
178
+ ...(args.sessionId == null && hint?.sessionId ? { sessionId: hint.sessionId } : {}),
179
+ };
180
+ }
181
+ export async function runWithTextToolCallRecovery(runtime, userInput, writer = console.log, targetHint) {
182
+ const first = await runtime.run(userInput);
183
+ const firstText = (first.text ?? "").trim();
184
+ const payload = extractToolCallPayload(firstText);
185
+ if (!payload) {
186
+ return { text: firstText, recovered: false, evidenceText: collectToolObservationText(first.messages) };
187
+ }
188
+ const tool = findToolByName(runtime, payload.name);
189
+ if (!tool)
190
+ return { text: firstText, recovered: false, evidenceText: collectToolObservationText(first.messages) };
191
+ const recoveryStartedAtMs = writeStepRunStart(writer, "recover text tool-call");
192
+ writeStepStart(writer, 1, `execute recovered tool call: ${payload.name}`);
193
+ const mergedArgs = mergeTargetHintForItermTool(tool.name, payload.arguments, targetHint);
194
+ if (tool.name.includes("itermRunCommandInSession")) {
195
+ const cmd = typeof mergedArgs.command === "string" ? mergedArgs.command.trim() : "";
196
+ if (cmd)
197
+ writer(" reason: Because the previous step produced a literal tool-call, execute it first to recover deterministic evidence.");
198
+ }
199
+ const raw = normalizeToolInvokeResult(await tool.invoke(mergedArgs));
200
+ writeStepDone(writer, 1, `execute recovered tool call: ${payload.name}`);
201
+ writeStepProgress(writer, 1, 2);
202
+ writeStepStart(writer, 2, "finalize response from recovered tool result");
203
+ const toolResult = stringifyToolResult(raw);
204
+ const secondText = formatRecoveredToolResult(payload.name, raw);
205
+ writeStepDone(writer, 2, "finalize response from recovered tool result");
206
+ writeStepProgress(writer, 2, 2);
207
+ writeStepRunDone(writer, recoveryStartedAtMs, 2);
208
+ return { text: secondText || toolResult, recovered: true, evidenceText: toolResult };
209
+ }
210
+ export const runWithToolCallRecovery = runWithTextToolCallRecovery;
211
+ //# sourceMappingURL=text-tool-call-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-tool-call-recovery.js","sourceRoot":"","sources":["../../src/runtime/text-tool-call-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { itermListCurrentWindowSessions, itermSplitPane, itermSetSessionColors } from "@easynet/agent-tool-buildin/iterm";
2
+ export declare const CHAT_BG = "#1E2D3D";
3
+ export declare const CHAT_FG = "#D4D7DC";
4
+ export declare const TARGET_BG = "#2A2A2A";
5
+ export declare const TARGET_FG = "#E8E0D4";
6
+ export interface SessionColorSnapshot {
7
+ windowId: number;
8
+ tabIndex: number;
9
+ sessionId: string;
10
+ background: [number, number, number];
11
+ foreground: [number, number, number];
12
+ }
13
+ export declare function restoreSessionColorsSync(snapshots: SessionColorSnapshot[]): void;
14
+ export interface StartupResult {
15
+ chatSessionId: string | null;
16
+ targetSessionId: string | null;
17
+ windowId: number | null;
18
+ tabIndex: number | null;
19
+ colorSnapshots: SessionColorSnapshot[];
20
+ }
21
+ type ListSessionsResult = Awaited<ReturnType<typeof itermListCurrentWindowSessions>>;
22
+ export interface StartupPanelColorDeps {
23
+ getProcessTty: () => string | null;
24
+ listCurrentWindowSessions: () => Promise<ListSessionsResult>;
25
+ splitPane: typeof itermSplitPane;
26
+ setSessionColors: typeof itermSetSessionColors;
27
+ captureSessionColors: (args: {
28
+ windowId: number;
29
+ tabIndex: number;
30
+ sessionId: string;
31
+ }) => SessionColorSnapshot | null;
32
+ onError: (message: string, error?: unknown) => void;
33
+ }
34
+ export declare function applyStartupPanelColorsWithDeps(deps: StartupPanelColorDeps): Promise<StartupResult>;
35
+ export declare function applyStartupPanelColors(): Promise<StartupResult>;
36
+ export {};
37
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/startup/colors.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,8BAA8B,EAC9B,cAAc,EACd,qBAAqB,EACtB,MAAM,mCAAmC,CAAC;AAO3C,eAAO,MAAM,OAAO,YAAY,CAAC;AACjC,eAAO,MAAM,OAAO,YAAY,CAAC;AAGjC,eAAO,MAAM,SAAS,YAAY,CAAC;AACnC,eAAO,MAAM,SAAS,YAAY,CAAC;AAanC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAkED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAyBhF;AA4BD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,oBAAoB,EAAE,CAAC;CACxC;AAED,KAAK,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC;AAErF,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACnC,yBAAyB,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC7D,SAAS,EAAE,OAAO,cAAc,CAAC;IACjC,gBAAgB,EAAE,OAAO,qBAAqB,CAAC;IAC/C,oBAAoB,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,oBAAoB,GAAG,IAAI,CAAC;IACvH,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAgBD,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,aAAa,CAAC,CA8HxB;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,aAAa,CAAC,CAEtE"}
@@ -79,9 +79,6 @@ function captureSessionColorsSync(args) {
79
79
  return null;
80
80
  }
81
81
  }
82
- export function captureSessionColorsByIdSync(args) {
83
- return captureSessionColorsSync(args);
84
- }
85
82
  export function restoreSessionColorsSync(snapshots) {
86
83
  for (const s of snapshots) {
87
84
  try {
@@ -136,7 +133,22 @@ function findProcessTty() {
136
133
  }
137
134
  return null;
138
135
  }
139
- export async function applyStartupPanelColors() {
136
+ function createDefaultDeps() {
137
+ return {
138
+ getProcessTty: findProcessTty,
139
+ listCurrentWindowSessions: itermListCurrentWindowSessions,
140
+ splitPane: itermSplitPane,
141
+ setSessionColors: itermSetSessionColors,
142
+ captureSessionColors: captureSessionColorsSync,
143
+ onError: (message, error) => {
144
+ if (error === undefined)
145
+ console.error(message);
146
+ else
147
+ console.error(message, error instanceof Error ? error.message : error);
148
+ },
149
+ };
150
+ }
151
+ export async function applyStartupPanelColorsWithDeps(deps) {
140
152
  const empty = {
141
153
  chatSessionId: null,
142
154
  targetSessionId: null,
@@ -144,8 +156,8 @@ export async function applyStartupPanelColors() {
144
156
  tabIndex: null,
145
157
  colorSnapshots: [],
146
158
  };
147
- const myTty = findProcessTty();
148
- const { result } = await itermListCurrentWindowSessions();
159
+ const myTty = deps.getProcessTty();
160
+ const { result } = await deps.listCurrentWindowSessions();
149
161
  if (result.count === 0)
150
162
  return empty;
151
163
  let sessions = result.sessions;
@@ -153,7 +165,7 @@ export async function applyStartupPanelColors() {
153
165
  ? sessions.find((s) => s.tty === myTty)
154
166
  : sessions.find((s) => s.isCurrentSession);
155
167
  if (!chatSession) {
156
- console.error(`startup-colors: could not identify chat session (tty=${myTty}), skipping`);
168
+ deps.onError(`startup-colors: could not identify chat session (tty=${myTty}), skipping`);
157
169
  return empty;
158
170
  }
159
171
  let currentTabIndex = chatSession.tabIndex;
@@ -164,14 +176,14 @@ export async function applyStartupPanelColors() {
164
176
  // If only chat panel exists, split once to create target panel on startup.
165
177
  if (sameTabSessions.length === 1 && chatSessionId) {
166
178
  try {
167
- await itermSplitPane({
179
+ await deps.splitPane({
168
180
  windowId,
169
181
  tabIndex: currentTabIndex,
170
182
  sessionId: chatSessionId,
171
183
  direction: "vertical",
172
184
  activate: false,
173
185
  });
174
- const refreshed = await itermListCurrentWindowSessions();
186
+ const refreshed = await deps.listCurrentWindowSessions();
175
187
  sessions = refreshed.result.sessions;
176
188
  const preservedChat = sessions.find((s) => s.sessionId === chatSessionId);
177
189
  if (preservedChat) {
@@ -183,7 +195,7 @@ export async function applyStartupPanelColors() {
183
195
  targetSessions = sameTabSessions.filter((s) => s.sessionId !== chatSessionId);
184
196
  }
185
197
  catch (err) {
186
- console.error("startup-colors: failed to auto-split single panel:", err instanceof Error ? err.message : err);
198
+ deps.onError("startup-colors: failed to auto-split single panel:", err);
187
199
  }
188
200
  }
189
201
  const selectedTarget = targetSessions[0] ?? null;
@@ -203,7 +215,7 @@ export async function applyStartupPanelColors() {
203
215
  if (!s.sessionId || seen.has(s.sessionId))
204
216
  continue;
205
217
  seen.add(s.sessionId);
206
- const snapshot = captureSessionColorsSync({
218
+ const snapshot = deps.captureSessionColors({
207
219
  windowId,
208
220
  tabIndex: currentTabIndex,
209
221
  sessionId: s.sessionId,
@@ -214,7 +226,7 @@ export async function applyStartupPanelColors() {
214
226
  }
215
227
  const tasks = [];
216
228
  if (chatSession.sessionId) {
217
- tasks.push(itermSetSessionColors({
229
+ tasks.push(deps.setSessionColors({
218
230
  windowId,
219
231
  tabIndex: currentTabIndex,
220
232
  sessionId: chatSession.sessionId,
@@ -223,7 +235,7 @@ export async function applyStartupPanelColors() {
223
235
  }));
224
236
  }
225
237
  if (selectedTarget?.sessionId) {
226
- tasks.push(itermSetSessionColors({
238
+ tasks.push(deps.setSessionColors({
227
239
  windowId,
228
240
  tabIndex: currentTabIndex,
229
241
  sessionId: selectedTarget.sessionId,
@@ -234,9 +246,12 @@ export async function applyStartupPanelColors() {
234
246
  const results = await Promise.allSettled(tasks);
235
247
  for (const r of results) {
236
248
  if (r.status === "rejected") {
237
- console.error("startup-colors: failed to set color on a session:", r.reason?.message ?? r.reason);
249
+ deps.onError("startup-colors: failed to set color on a session:", r.reason);
238
250
  }
239
251
  }
240
252
  return startupResult;
241
253
  }
242
- //# sourceMappingURL=startup-colors.js.map
254
+ export async function applyStartupPanelColors() {
255
+ return applyStartupPanelColorsWithDeps(createDefaultDeps());
256
+ }
257
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/startup/colors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ type AgentRuntimeLike = {
2
+ context: {
3
+ get<T>(token: unknown): T;
4
+ };
5
+ };
6
+ export declare function runLlmHealthCheck(runtime: AgentRuntimeLike): Promise<string>;
7
+ export {};
8
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/startup/diagnostics.ts"],"names":[],"mappings":"AAKA,KAAK,gBAAgB,GAAG;IACtB,OAAO,EAAE;QACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAalF"}
@@ -0,0 +1,18 @@
1
+ import { AgentContextTokens } from "@easynet/agent-common/context";
2
+ import { extractTextFromLlmOutput } from "@easynet/agent-common/utils";
3
+ const LLM_HEALTHCHECK_PROMPT = "Health check: reply with OK only.";
4
+ export async function runLlmHealthCheck(runtime) {
5
+ const llm = runtime.context.get(AgentContextTokens.ChatModel);
6
+ const timeoutMs = Number(process.env.ITERMBOT_LLM_HEALTHCHECK_TIMEOUT_MS ?? "12000");
7
+ const timeout = Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : 12000;
8
+ const invokePromise = llm.invoke(LLM_HEALTHCHECK_PROMPT);
9
+ const timeoutPromise = new Promise((_, reject) => {
10
+ setTimeout(() => reject(new Error(`LLM health check timeout (${timeout}ms)`)), timeout);
11
+ });
12
+ const output = await Promise.race([invokePromise, timeoutPromise]);
13
+ const text = extractTextFromLlmOutput(output);
14
+ if (!text)
15
+ throw new Error("LLM health check returned empty response");
16
+ return text.length > 32 ? `${text.slice(0, 32)}...` : text;
17
+ }
18
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/startup/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE,MAAM,sBAAsB,GAAG,mCAAmC,CAAC;AAQnE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAyB;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAkD,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC/G,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,OAAO,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAEhF,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACzD,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QACtD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,OAAO,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvE,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface StartupOsInfo {
2
+ os: string;
3
+ source: "target-panel" | "local-fallback";
4
+ }
5
+ export declare function detectStartupTargetOs(args: {
6
+ windowId?: number;
7
+ tabIndex?: number;
8
+ sessionId?: string;
9
+ }): Promise<StartupOsInfo>;
10
+ //# sourceMappingURL=os.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os.d.ts","sourceRoot":"","sources":["../../src/startup/os.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC;CAC3C;AAqCD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBzB"}
@@ -0,0 +1,67 @@
1
+ import { itermRunCommandInSession } from "@easynet/agent-tool-buildin/iterm";
2
+ function normalizeOsName(raw) {
3
+ const normalized = raw.trim();
4
+ if (!normalized)
5
+ return "unknown";
6
+ if (/^darwin$/i.test(normalized))
7
+ return "darwin";
8
+ if (/^linux$/i.test(normalized))
9
+ return "linux";
10
+ if (/^(msys|mingw|cygwin|windows_nt)/i.test(normalized))
11
+ return "windows";
12
+ if (/^freebsd$/i.test(normalized))
13
+ return "freebsd";
14
+ if (/^openbsd$/i.test(normalized))
15
+ return "openbsd";
16
+ if (/^netbsd$/i.test(normalized))
17
+ return "netbsd";
18
+ if (/^sunos$/i.test(normalized))
19
+ return "sunos";
20
+ if (/^aix$/i.test(normalized))
21
+ return "aix";
22
+ return normalized.toLowerCase();
23
+ }
24
+ function inferFromLocalProcessPlatform() {
25
+ const p = process.platform;
26
+ if (p === "darwin")
27
+ return "darwin";
28
+ if (p === "linux")
29
+ return "linux";
30
+ if (p === "win32")
31
+ return "windows";
32
+ return p;
33
+ }
34
+ function extractOsFromCommandOutput(output) {
35
+ if (typeof output !== "string" || !output.trim())
36
+ return "unknown";
37
+ const lines = output
38
+ .split("\n")
39
+ .map((line) => line.trim())
40
+ .filter((line) => line.length > 0);
41
+ for (const line of lines) {
42
+ const match = line.match(/\b(Darwin|Linux|FreeBSD|OpenBSD|NetBSD|SunOS|AIX|MSYS|MINGW|CYGWIN|Windows_NT)\b/i);
43
+ if (match?.[1])
44
+ return normalizeOsName(match[1]);
45
+ }
46
+ return "unknown";
47
+ }
48
+ export async function detectStartupTargetOs(args) {
49
+ try {
50
+ const out = await itermRunCommandInSession({
51
+ command: "uname -s",
52
+ waitMs: 400,
53
+ maxOutputLines: 120,
54
+ windowId: args.windowId,
55
+ tabIndex: args.tabIndex,
56
+ sessionId: args.sessionId,
57
+ });
58
+ const detected = extractOsFromCommandOutput(out?.result?.output);
59
+ if (detected !== "unknown")
60
+ return { os: detected, source: "target-panel" };
61
+ }
62
+ catch {
63
+ // fall back to local process platform
64
+ }
65
+ return { os: inferFromLocalProcessPlatform(), source: "local-fallback" };
66
+ }
67
+ //# sourceMappingURL=os.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os.js","sourceRoot":"","sources":["../../src/startup/os.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAO7E,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1E,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAC;IACpD,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,6BAA6B;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACpC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAClC,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAe;IACjD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IACnE,MAAM,KAAK,GAAG,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;QAC9G,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAI3C;IACC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,wBAAwB,CAAC;YACzC,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,GAAG;YACX,cAAc,EAAE,GAAG;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,6BAA6B,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { formatLogPath, runStartupStep, StartupProgressRenderer, toErrorMessage } from "@easynet/agent-common/cli";
2
+ export { formatLogPath, runStartupStep, StartupProgressRenderer, toErrorMessage };
3
+ export declare function clearStartupNoise(): void;
4
+ export declare function printStartupBanner(): void;
5
+ export declare function getAppVersion(): string;
6
+ export declare function printStartupSummary(args: {
7
+ version: string;
8
+ responseSafetyMode?: string;
9
+ targetOs?: string;
10
+ }): void;
11
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/startup/ui.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,cAAc,EACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,uBAAuB,EAAE,cAAc,EAAE,CAAC;AAElF,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAYzC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAStC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAanH"}
@@ -0,0 +1,49 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { formatLogPath, runStartupStep, StartupProgressRenderer, toErrorMessage, } from "@easynet/agent-common/cli";
5
+ export { formatLogPath, runStartupStep, StartupProgressRenderer, toErrorMessage };
6
+ export function clearStartupNoise() {
7
+ if (!process.stdout.isTTY)
8
+ return;
9
+ process.stdout.write("\x1b[2J\x1b[H");
10
+ }
11
+ export function printStartupBanner() {
12
+ const lines = [
13
+ " _ _____ ____ _ ",
14
+ " (_)_ _|__ _ __ _ __ ___ | __ ) ___ | |_ ",
15
+ " | | | |/ _ \\ '__| '_ ` _ \\| _ \\ / _ \\| __|",
16
+ " | | | | __/ | | | | | | | |_) | (_) | |_ ",
17
+ " |_| |_|\\___|_| |_| |_| |_|____/ \\___/ \\__|",
18
+ " iTermBot ",
19
+ ];
20
+ console.log("--------------------------------------------------------------------------------------------------");
21
+ console.log(`\n${lines.join("\n")}`);
22
+ console.log(" Observe the terminal. Act with precision.\n");
23
+ }
24
+ export function getAppVersion() {
25
+ try {
26
+ const currentFile = fileURLToPath(import.meta.url);
27
+ const packageJsonPath = resolve(dirname(currentFile), "../package.json");
28
+ const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8"));
29
+ return typeof parsed.version === "string" ? parsed.version : "unknown";
30
+ }
31
+ catch {
32
+ return "unknown";
33
+ }
34
+ }
35
+ export function printStartupSummary(args) {
36
+ console.log("\n--------------------------------------------------------------------------------------------------");
37
+ console.log(`Version : v${args.version}`);
38
+ console.log(`Workspace : ${process.cwd()}`);
39
+ if (args.targetOs) {
40
+ console.log(`Target OS : ${args.targetOs}`);
41
+ }
42
+ if (args.responseSafetyMode) {
43
+ console.log(`Safety : response mode=${args.responseSafetyMode}`);
44
+ }
45
+ console.log("");
46
+ console.log("Commands : list tools, list skills, exit");
47
+ console.log("--------------------------------------------------------------------------------------------------\n");
48
+ }
49
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/startup/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,aAAa,EACb,cAAc,EACd,uBAAuB,EACvB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,uBAAuB,EAAE,cAAc,EAAE,CAAC;AAElF,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,KAAK,GAAG;QACZ,8CAA8C;QAC9C,8CAA8C;QAC9C,kDAAkD;QAClD,8CAA8C;QAC9C,iDAAiD;QACjD,8CAA8C;KAC/C,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,oGAAoG,CAAC,CAAC;IAClH,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAA0B,CAAC;QAC1F,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAyE;IAC3G,OAAO,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC;IACpH,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC;AACtH,CAAC"}