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,213 @@
1
+ import { normalizeToolList, } from "@easynet/agent-common/utils";
2
+ import { AgentContextTokens } from "@easynet/agent-common/context";
3
+ import { normalizeToolInvokeResult, stringifyToolResult } from "../chat/tool-result.js";
4
+ const runtimeOutputCache = new WeakMap();
5
+ function getCachedRawOutput(runtime) {
6
+ return runtimeOutputCache.get(runtime) ?? "";
7
+ }
8
+ function setCachedRawOutput(runtime, output) {
9
+ runtimeOutputCache.set(runtime, output);
10
+ }
11
+ export function setDirectCommandIntentRules(_rules) { }
12
+ function isToolLike(tool) {
13
+ return Boolean(tool
14
+ && typeof tool === "object"
15
+ && typeof tool.name === "string"
16
+ && typeof tool.invoke === "function");
17
+ }
18
+ function findItermRunCommandTool(runtime) {
19
+ const toolsRaw = runtime.context.get(AgentContextTokens.Tools);
20
+ const tools = normalizeToolList(toolsRaw, isToolLike);
21
+ const found = tools.find((tool) => tool.name.includes("itermRunCommandInSession"));
22
+ return found ?? null;
23
+ }
24
+ function isLikelyShellCommand(input) {
25
+ const trimmed = input.trim();
26
+ if (!trimmed)
27
+ return false;
28
+ if (trimmed.includes("\n"))
29
+ return false;
30
+ if (trimmed.length > 220)
31
+ return false;
32
+ if (/[?.!。,!?]$/.test(trimmed))
33
+ return false;
34
+ if (/[|&;<>$`]/.test(trimmed))
35
+ return true;
36
+ if (/^(\.\/|\/|~\/)/.test(trimmed))
37
+ return true;
38
+ const parts = trimmed.split(/\s+/);
39
+ if (parts.length === 1) {
40
+ const token = parts[0] ?? "";
41
+ if (!/^[A-Za-z0-9_./-]+$/.test(token))
42
+ return false;
43
+ return token.includes("/");
44
+ }
45
+ const hasFlag = parts.some((part) => part.startsWith("-"));
46
+ const hasPathLike = parts.some((part) => /[/.]/.test(part));
47
+ const hasAssign = parts.some((part) => /^[A-Za-z_][A-Za-z0-9_]*=/.test(part));
48
+ const hasQuote = /['"]/.test(trimmed);
49
+ return hasFlag || hasPathLike || hasAssign || hasQuote;
50
+ }
51
+ function hasDefiniteShellSyntax(input) {
52
+ const trimmed = input.trim();
53
+ if (!trimmed)
54
+ return false;
55
+ if (/[|&;<>$`]/.test(trimmed))
56
+ return true;
57
+ if (/^(\.\/|\/|~\/)/.test(trimmed))
58
+ return true;
59
+ const parts = trimmed.split(/\s+/);
60
+ if (parts.length <= 1)
61
+ return false;
62
+ const hasFlag = parts.some((part) => part.startsWith("-"));
63
+ const hasPathLike = parts.some((part) => /[/.]/.test(part));
64
+ const hasAssign = parts.some((part) => /^[A-Za-z_][A-Za-z0-9_]*=/.test(part));
65
+ const hasQuote = /['"]/.test(trimmed);
66
+ return hasFlag || hasPathLike || hasAssign || hasQuote;
67
+ }
68
+ export function detectDirectTargetPanelCommand(input) {
69
+ const trimmed = input.trim();
70
+ if (!trimmed)
71
+ return null;
72
+ if (isLikelyShellCommand(trimmed)) {
73
+ return {
74
+ command: trimmed,
75
+ reason: "raw_shell_command",
76
+ };
77
+ }
78
+ return null;
79
+ }
80
+ function extractToolOutput(output) {
81
+ const stripMarkers = (text) => text
82
+ .split("\n")
83
+ .filter((line) => !/__ITB_(BEGIN|END)_[A-Za-z0-9_]+/.test(line))
84
+ .join("\n")
85
+ .trim();
86
+ const normalized = output;
87
+ const result = normalized && typeof normalized === "object" && "result" in normalized
88
+ ? normalized.result
89
+ : normalized;
90
+ if (result && typeof result === "object") {
91
+ const record = result;
92
+ if (typeof record.output === "string" && record.output.trim()) {
93
+ return { outputText: stripMarkers(record.output), readError: null };
94
+ }
95
+ if (typeof record.readError === "string" && record.readError.trim()) {
96
+ return { outputText: "", readError: record.readError.trim() };
97
+ }
98
+ }
99
+ try {
100
+ return { outputText: stringifyToolResult(result ?? normalized), readError: null };
101
+ }
102
+ catch {
103
+ return { outputText: String(result ?? normalized), readError: null };
104
+ }
105
+ }
106
+ function buildExecutionSummary(command, outputText) {
107
+ const lines = outputText.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
108
+ const totalLines = lines.length;
109
+ const preview = lines.slice(0, 3);
110
+ const singleLineValue = totalLines === 1 ? lines[0] ?? "" : "";
111
+ return [
112
+ "### Command Result",
113
+ `- Command: \`${command}\``,
114
+ `- Captured lines: **${totalLines}**`,
115
+ ...(singleLineValue ? [`- Value: \`${singleLineValue}\``] : []),
116
+ ...(preview.length > 0
117
+ ? [
118
+ "- Preview:",
119
+ ...preview.map((line) => `- \`${line}\``),
120
+ ]
121
+ : []),
122
+ "- Raw output: hidden by default",
123
+ "",
124
+ "_Use `show raw output` if you want the full captured output._",
125
+ ].join("\n");
126
+ }
127
+ function formatDirectCommandResult(args) {
128
+ if (args.readError) {
129
+ return [
130
+ "### Command Error",
131
+ `- Command: \`${args.command}\``,
132
+ `- Error: ${args.readError}`,
133
+ ].join("\n");
134
+ }
135
+ if (!args.outputText.trim()) {
136
+ return [
137
+ "### Command Result",
138
+ `- Command: \`${args.command}\``,
139
+ "- Output: _(empty)_",
140
+ ].join("\n");
141
+ }
142
+ return buildExecutionSummary(args.command, args.outputText);
143
+ }
144
+ async function finalizeDirectCommandResult(args) {
145
+ return formatDirectCommandResult({
146
+ command: args.command,
147
+ outputText: args.outputText,
148
+ readError: args.readError,
149
+ });
150
+ }
151
+ function truncateOutputLines(text, maxLines = 300) {
152
+ const lines = text.split("\n");
153
+ if (lines.length <= maxLines)
154
+ return { text, truncated: false };
155
+ return { text: lines.slice(0, maxLines).join("\n"), truncated: true };
156
+ }
157
+ function formatRawOutputMarkdown(rawText) {
158
+ const clipped = truncateOutputLines(rawText, 300);
159
+ return [
160
+ "### Raw Output",
161
+ "```text",
162
+ clipped.text,
163
+ "```",
164
+ ...(clipped.truncated ? ["", "_Output truncated to 300 lines._"] : []),
165
+ ].join("\n");
166
+ }
167
+ async function runAndFormatDirectCommand(args) {
168
+ const out = normalizeToolInvokeResult(await args.tool.invoke({
169
+ command: args.command,
170
+ maxOutputLines: 300,
171
+ ...(args.targetHint?.windowId != null ? { windowId: args.targetHint.windowId } : {}),
172
+ ...(args.targetHint?.tabIndex != null ? { tabIndex: args.targetHint.tabIndex } : {}),
173
+ ...(args.targetHint?.sessionId ? { sessionId: args.targetHint.sessionId } : {}),
174
+ }));
175
+ const extracted = extractToolOutput(out);
176
+ setCachedRawOutput(args.runtime, extracted.outputText);
177
+ const formatted = await finalizeDirectCommandResult({
178
+ command: args.command,
179
+ outputText: extracted.outputText,
180
+ readError: extracted.readError,
181
+ });
182
+ return formatted;
183
+ }
184
+ function resolveDirectCommand(directIntent) {
185
+ if (directIntent?.command)
186
+ return directIntent.command;
187
+ return "";
188
+ }
189
+ function shouldBypassWithNoCommand(command) {
190
+ return !command.trim();
191
+ }
192
+ export async function tryHandleDirectTargetPanelCommand(input, runtime, targetHint) {
193
+ const trimmed = input.trim();
194
+ if (!trimmed)
195
+ return null;
196
+ const directIntent = detectDirectTargetPanelCommand(trimmed);
197
+ if (!hasDefiniteShellSyntax(trimmed))
198
+ return null;
199
+ const tool = findItermRunCommandTool(runtime);
200
+ if (!tool)
201
+ return null;
202
+ const command = resolveDirectCommand(directIntent);
203
+ if (shouldBypassWithNoCommand(command))
204
+ return null;
205
+ return runAndFormatDirectCommand({
206
+ tool,
207
+ command,
208
+ input: trimmed,
209
+ runtime,
210
+ targetHint,
211
+ });
212
+ }
213
+ //# sourceMappingURL=direct-command-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-command-router.js","sourceRoot":"","sources":["../../src/iterm/direct-command-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { StartupResult } from "../startup/colors.js";
2
+ import type { PromptTemplates } from "../config.js";
3
+ /**
4
+ * Build the full system prompt by prepending iTerm policy and session info
5
+ * to an optional base prompt. Called before createReactAgentRuntime().
6
+ */
7
+ export declare function buildSystemPrompt(templates: PromptTemplates | undefined, startup: StartupResult, basePrompt?: string, options?: {
8
+ targetOs?: string;
9
+ }): string;
10
+ //# sourceMappingURL=session-hint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-hint.d.ts","sourceRoot":"","sources":["../../src/iterm/session-hint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAuBpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,OAAO,EAAE,aAAa,EACtB,UAAU,SAAK,EACf,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,CAeR"}
@@ -0,0 +1,43 @@
1
+ function buildTargetSessionSection(startup) {
2
+ if (!startup.targetSessionId)
3
+ return "";
4
+ return [
5
+ "## Target Panel Session",
6
+ "Routed target panel (may change at runtime):",
7
+ `- sessionId: "${startup.targetSessionId}"`,
8
+ `- windowId: ${String(startup.windowId)}`,
9
+ `- tabIndex: ${String(startup.tabIndex)}`,
10
+ "Never use `windowId: 0` and never guess IDs.",
11
+ ].join("\n");
12
+ }
13
+ function buildTargetOsSection(targetOs) {
14
+ if (!targetOs)
15
+ return "";
16
+ return [
17
+ "## Target System OS",
18
+ `- os: ${targetOs}`,
19
+ "- Commands in plans must be compatible with this OS unless tool evidence suggests otherwise.",
20
+ ].join("\n");
21
+ }
22
+ /**
23
+ * Build the full system prompt by prepending iTerm policy and session info
24
+ * to an optional base prompt. Called before createReactAgentRuntime().
25
+ */
26
+ export function buildSystemPrompt(templates, startup, basePrompt = "", options) {
27
+ const template = templates?.systemPrompt?.trim() ?? "";
28
+ const targetOs = options?.targetOs?.trim() ?? "";
29
+ const rendered = template
30
+ .replaceAll("{{targetSessionSection}}", buildTargetSessionSection(startup))
31
+ .replaceAll("{{targetOsSection}}", buildTargetOsSection(targetOs))
32
+ .trim();
33
+ const parts = [];
34
+ if (rendered)
35
+ parts.push(rendered);
36
+ if (basePrompt.trim())
37
+ parts.push(basePrompt.trim());
38
+ return parts
39
+ .join("\n\n")
40
+ .replace(/\n{3,}/g, "\n\n")
41
+ .trim();
42
+ }
43
+ //# sourceMappingURL=session-hint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-hint.js","sourceRoot":"","sources":["../../src/iterm/session-hint.ts"],"names":[],"mappings":"AAGA,SAAS,yBAAyB,CAAC,OAAsB;IACvD,IAAI,CAAC,OAAO,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IACxC,OAAO;QACL,yBAAyB;QACzB,8CAA8C;QAC9C,iBAAiB,OAAO,CAAC,eAAe,GAAG;QAC3C,eAAe,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACzC,eAAe,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACzC,8CAA8C;KAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO;QACL,qBAAqB;QACrB,SAAS,QAAQ,EAAE;QACnB,8FAA8F;KAC/F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAsC,EACtC,OAAsB,EACtB,UAAU,GAAG,EAAE,EACf,OAA+B;IAE/B,MAAM,QAAQ,GAAG,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,QAAQ;SACtB,UAAU,CAAC,0BAA0B,EAAE,yBAAyB,CAAC,OAAO,CAAC,CAAC;SAC1E,UAAU,CAAC,qBAAqB,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;SACjE,IAAI,EAAE,CAAC;IAEV,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,UAAU,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,KAAK;SACT,IAAI,CAAC,MAAM,CAAC;SACZ,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ type ToolContainer = unknown[] | {
2
+ tools?: unknown[];
3
+ };
4
+ export interface TargetPanelHint {
5
+ windowId?: number;
6
+ tabIndex?: number;
7
+ sessionId?: string;
8
+ }
9
+ export declare function setTargetPanelHint(hint: TargetPanelHint | null): void;
10
+ export declare function enforceTargetPanelExecutionPolicy(tools: ToolContainer): () => void;
11
+ export {};
12
+ //# sourceMappingURL=target-panel-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-panel-policy.d.ts","sourceRoot":"","sources":["../../src/iterm/target-panel-policy.ts"],"names":[],"mappings":"AAoBA,KAAK,aAAa,GAAG,OAAO,EAAE,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAcvD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAErE;AA+QD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,IAAI,CAyBlF"}
@@ -0,0 +1,287 @@
1
+ const BLOCKED_SHORT_NAMES = new Set([
2
+ "listDir",
3
+ "readText",
4
+ "writeText",
5
+ "runCommand",
6
+ "gitRead",
7
+ "gitAdd",
8
+ "gitCommit",
9
+ "gitDiff",
10
+ "gitPull",
11
+ "gitPush",
12
+ "gitSwitchBranch",
13
+ "gitLogHistory",
14
+ ]);
15
+ let targetPanelHint = null;
16
+ export function setTargetPanelHint(hint) {
17
+ targetPanelHint = hint;
18
+ }
19
+ function shortName(name) {
20
+ const parts = name.split(".");
21
+ return parts[parts.length - 1] ?? name;
22
+ }
23
+ function shouldBlockTool(name) {
24
+ if (name.includes("itermRunCommandInSession"))
25
+ return false;
26
+ if (name.includes("iterm"))
27
+ return true;
28
+ return BLOCKED_SHORT_NAMES.has(shortName(name));
29
+ }
30
+ function policyError(toolName) {
31
+ return new Error(`Tool "${toolName}" is blocked in iTermBot policy. `
32
+ + "Use itermRunCommandInSession on target panel, then analyze returned output.");
33
+ }
34
+ function asRecord(input) {
35
+ if (!input || typeof input !== "object" || Array.isArray(input))
36
+ return {};
37
+ return input;
38
+ }
39
+ function quoteForBash(value) {
40
+ return `'${value.replaceAll("'", `'\\''`)}'`;
41
+ }
42
+ function asBoolean(value, fallback) {
43
+ return typeof value === "boolean" ? value : fallback;
44
+ }
45
+ function asBoundedInt(value, fallback, min, max) {
46
+ if (typeof value !== "number" || !Number.isFinite(value))
47
+ return fallback;
48
+ const normalized = Math.floor(value);
49
+ return Math.max(min, Math.min(max, normalized));
50
+ }
51
+ function buildListDirCommand(args) {
52
+ const path = typeof args.path === "string" && args.path.trim() ? args.path.trim() : ".";
53
+ const recursive = asBoolean(args.recursive, false);
54
+ const includeHidden = asBoolean(args.includeHidden, false);
55
+ const maxDepth = asBoundedInt(args.maxDepth, 3, 1, 20);
56
+ const maxEntries = asBoundedInt(args.maxEntries, 200, 1, 2000);
57
+ const quotedPath = quoteForBash(path);
58
+ return {
59
+ command: recursive
60
+ ? `find ${quotedPath} -maxdepth ${maxDepth} -mindepth 1 -print`
61
+ : includeHidden
62
+ ? `ls -1A ${quotedPath}`
63
+ : `ls -1 ${quotedPath}`,
64
+ maxOutputLines: Math.min(maxEntries + 50, 3000),
65
+ meta: { requestedPath: path },
66
+ };
67
+ }
68
+ function buildReadTextCommand(args) {
69
+ const path = typeof args.path === "string" ? args.path.trim() : "";
70
+ if (!path)
71
+ return null;
72
+ const maxBytes = asBoundedInt(args.maxBytes, 24_000, 256, 200_000);
73
+ const maxLines = asBoundedInt(Math.floor(maxBytes / 120), 200, 20, 2000);
74
+ return {
75
+ command: `sed -n '1,${maxLines}p' ${quoteForBash(path)}`,
76
+ maxOutputLines: Math.min(maxLines + 40, 2500),
77
+ };
78
+ }
79
+ function buildRunCommandCommand(args) {
80
+ if (typeof args.command === "string" && args.command.trim())
81
+ return { command: args.command.trim() };
82
+ if (typeof args.cmd === "string" && args.cmd.trim())
83
+ return { command: args.cmd.trim() };
84
+ if (Array.isArray(args.cmdArray) && args.cmdArray.length > 0) {
85
+ const joined = args.cmdArray.map((part) => String(part)).join(" ").trim();
86
+ if (joined)
87
+ return { command: joined };
88
+ }
89
+ return null;
90
+ }
91
+ function toItermCommandArgs(toolName, args) {
92
+ const tool = shortName(toolName);
93
+ const record = asRecord(args);
94
+ if (tool === "listDir")
95
+ return buildListDirCommand(record);
96
+ if (tool === "readText")
97
+ return buildReadTextCommand(record);
98
+ if (tool === "runCommand")
99
+ return buildRunCommandCommand(record);
100
+ if (tool === "itermListWindows")
101
+ return { command: "pwd" };
102
+ if (tool === "itermListCurrentWindowSessions")
103
+ return { command: "pwd" };
104
+ if (tool === "itermGetSessionInfo")
105
+ return { command: "pwd" };
106
+ return null;
107
+ }
108
+ function isRedirectableTool(toolName) {
109
+ return (toolName === "listDir"
110
+ || toolName === "readText"
111
+ || toolName === "runCommand"
112
+ || toolName === "itermListWindows"
113
+ || toolName === "itermListCurrentWindowSessions"
114
+ || toolName === "itermGetSessionInfo");
115
+ }
116
+ function isToolLike(tool) {
117
+ return Boolean(tool
118
+ && typeof tool === "object"
119
+ && typeof tool.name === "string"
120
+ && typeof tool.invoke === "function");
121
+ }
122
+ function findItermCommandTool(tools) {
123
+ const tool = tools.find((item) => isToolLike(item) && item.name.includes("itermRunCommandInSession"));
124
+ return isToolLike(tool) ? tool : null;
125
+ }
126
+ function getOutputText(output) {
127
+ const root = asRecord(output);
128
+ const result = asRecord(root?.result);
129
+ const text = result?.output;
130
+ return typeof text === "string" ? text : "";
131
+ }
132
+ function extractCommandResultMeta(output) {
133
+ const root = asRecord(output);
134
+ const result = asRecord(root?.result);
135
+ return {
136
+ ...(typeof result.output === "string" ? { outputText: result.output } : {}),
137
+ ...(typeof result.commandCompleted === "boolean" ? { commandCompleted: result.commandCompleted } : {}),
138
+ ...(typeof result.exitCode === "number" ? { exitCode: result.exitCode } : {}),
139
+ ...(typeof result.readError === "string" ? { readError: result.readError } : {}),
140
+ ...(typeof result.sessionId === "string" ? { sessionId: result.sessionId } : {}),
141
+ };
142
+ }
143
+ function parseListDirResolutionMeta(rawOutput, requestedPath) {
144
+ return {
145
+ requestedPath,
146
+ resolvedPath: requestedPath,
147
+ pathFallbackUsed: false,
148
+ };
149
+ }
150
+ function normalizeListEntryName(line, resolvedPath) {
151
+ const trimmed = line.trim();
152
+ if (!trimmed)
153
+ return "";
154
+ if (trimmed.startsWith("./"))
155
+ return trimmed.slice(2);
156
+ if (resolvedPath !== "." && trimmed.startsWith(`${resolvedPath}/`)) {
157
+ return trimmed.slice(resolvedPath.length + 1);
158
+ }
159
+ if (trimmed.startsWith("/"))
160
+ return trimmed.split("/").filter(Boolean).slice(-1)[0] ?? trimmed;
161
+ return trimmed;
162
+ }
163
+ function parseListDirEntries(rawOutput, resolvedPath) {
164
+ const output = getOutputText(rawOutput);
165
+ return output
166
+ .split("\n")
167
+ .map((line) => line.trim())
168
+ .filter((line) => line.length > 0)
169
+ .map((line) => normalizeListEntryName(line, resolvedPath))
170
+ .filter(Boolean)
171
+ .map((name) => ({
172
+ name,
173
+ kind: "other",
174
+ size: 0,
175
+ mtime: "",
176
+ }));
177
+ }
178
+ async function invokeRedirect(blockedName, blockedArgs, commandTool) {
179
+ const mapped = toItermCommandArgs(blockedName, blockedArgs);
180
+ if (!mapped || !commandTool || typeof commandTool.invoke !== "function") {
181
+ throw policyError(blockedName);
182
+ }
183
+ const hint = targetPanelHint;
184
+ const invokeArgs = {
185
+ command: mapped.command,
186
+ ...(typeof mapped.maxOutputLines === "number" ? { maxOutputLines: mapped.maxOutputLines } : {}),
187
+ ...(hint?.windowId != null ? { windowId: hint.windowId } : {}),
188
+ ...(hint?.tabIndex != null ? { tabIndex: hint.tabIndex } : {}),
189
+ ...(hint?.sessionId ? { sessionId: hint.sessionId } : {}),
190
+ };
191
+ const output = await commandTool.invoke(invokeArgs);
192
+ const blockedToolShortName = shortName(blockedName);
193
+ const redirectMeta = blockedToolShortName === "listDir"
194
+ ? parseListDirResolutionMeta(output, typeof mapped.meta?.requestedPath === "string" ? mapped.meta.requestedPath : ".")
195
+ : {};
196
+ const commandResultMeta = extractCommandResultMeta(output);
197
+ const resolvedListPath = blockedToolShortName === "listDir" && typeof redirectMeta.resolvedPath === "string"
198
+ ? redirectMeta.resolvedPath
199
+ : ".";
200
+ const listDirEntries = blockedToolShortName === "listDir"
201
+ ? parseListDirEntries(output, resolvedListPath)
202
+ : [];
203
+ return {
204
+ result: {
205
+ blockedTool: blockedName,
206
+ redirectedTool: commandTool.name,
207
+ redirected: true,
208
+ originalArgs: asRecord(blockedArgs),
209
+ mappedCommand: mapped.command,
210
+ ...redirectMeta,
211
+ ...commandResultMeta,
212
+ ...(blockedToolShortName === "listDir"
213
+ ? {
214
+ path: resolvedListPath,
215
+ entries: listDirEntries,
216
+ totalEntries: listDirEntries.length,
217
+ truncated: false,
218
+ }
219
+ : {}),
220
+ targetHint: hint ?? undefined,
221
+ output,
222
+ },
223
+ evidence: [
224
+ {
225
+ type: "policy",
226
+ ref: "target-panel-policy",
227
+ summary: `Redirected ${blockedName} to ${String(commandTool.name)} with target-panel command execution`,
228
+ createdAt: new Date().toISOString(),
229
+ },
230
+ ],
231
+ };
232
+ }
233
+ function blockedResult(toolName) {
234
+ return {
235
+ result: {
236
+ blocked: true,
237
+ blockedTool: toolName,
238
+ requiredTool: "itermRunCommandInSession",
239
+ message: `Tool "${toolName}" is blocked in iTermBot policy. `
240
+ + "Use itermRunCommandInSession on target panel, then analyze returned output.",
241
+ suggestedCommand: "pwd",
242
+ },
243
+ evidence: [
244
+ {
245
+ type: "policy",
246
+ ref: "target-panel-policy",
247
+ summary: `Blocked ${toolName}; returned policy guidance for target-panel command execution`,
248
+ createdAt: new Date().toISOString(),
249
+ },
250
+ ],
251
+ };
252
+ }
253
+ function normalizeTools(input) {
254
+ if (Array.isArray(input))
255
+ return input;
256
+ if (input && typeof input === "object" && Array.isArray(input.tools)) {
257
+ return input.tools;
258
+ }
259
+ return [];
260
+ }
261
+ export function enforceTargetPanelExecutionPolicy(tools) {
262
+ const unpatchFns = [];
263
+ const allTools = normalizeTools(tools);
264
+ const itermCommandTool = findItermCommandTool(allTools);
265
+ for (const tool of allTools) {
266
+ if (!isToolLike(tool))
267
+ continue;
268
+ if (!shouldBlockTool(tool.name))
269
+ continue;
270
+ const originalInvoke = tool.invoke.bind(tool);
271
+ tool.invoke = async (args) => {
272
+ const toolShortName = shortName(tool.name);
273
+ if (isRedirectableTool(toolShortName)) {
274
+ return invokeRedirect(tool.name, args, itermCommandTool);
275
+ }
276
+ return blockedResult(tool.name);
277
+ };
278
+ unpatchFns.push(() => {
279
+ tool.invoke = originalInvoke;
280
+ });
281
+ }
282
+ return () => {
283
+ for (const unpatch of unpatchFns)
284
+ unpatch();
285
+ };
286
+ }
287
+ //# sourceMappingURL=target-panel-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-panel-policy.js","sourceRoot":"","sources":["../../src/iterm/target-panel-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ type RuntimeLike = {
2
+ context: {
3
+ get<T>(token: unknown): T;
4
+ };
5
+ run: (input: string) => Promise<{
6
+ text?: string;
7
+ messages?: unknown;
8
+ }>;
9
+ };
10
+ export interface TextToolCallTargetHint {
11
+ windowId?: number;
12
+ tabIndex?: number;
13
+ sessionId?: string;
14
+ }
15
+ export declare function runWithTextToolCallRecovery(runtime: RuntimeLike, userInput: string, writer?: (line: string) => void, targetHint?: TextToolCallTargetHint): Promise<{
16
+ text: string;
17
+ recovered: boolean;
18
+ evidenceText?: string;
19
+ }>;
20
+ export type RecoveryTargetHint = TextToolCallTargetHint;
21
+ export declare const runWithToolCallRecovery: typeof runWithTextToolCallRecovery;
22
+ export {};
23
+ //# sourceMappingURL=text-tool-call-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-tool-call-recovery.d.ts","sourceRoot":"","sources":["../../src/runtime/text-tool-call-recovery.ts"],"names":[],"mappings":"AAoBA,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE;QACP,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;KAC3B,CAAC;IACF,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxE,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2LD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,EAC5C,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8BtE;AAED,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AACxD,eAAO,MAAM,uBAAuB,oCAA8B,CAAC"}