xiaotime 0.5.4 → 0.5.6

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 (57) hide show
  1. package/dist/config.d.ts +1 -9
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +8 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/display.d.ts +2 -0
  6. package/dist/display.d.ts.map +1 -1
  7. package/dist/display.js +35 -5
  8. package/dist/display.js.map +1 -1
  9. package/dist/session.d.ts.map +1 -1
  10. package/dist/session.js +5 -1
  11. package/dist/session.js.map +1 -1
  12. package/dist/sidebar.js +1 -1
  13. package/dist/sidebar.js.map +1 -1
  14. package/dist/ws.d.ts.map +1 -1
  15. package/dist/ws.js +6 -3
  16. package/dist/ws.js.map +1 -1
  17. package/package.json +4 -4
  18. package/dist/__tests__/ansi_tags.test.d.ts +0 -9
  19. package/dist/__tests__/ansi_tags.test.d.ts.map +0 -1
  20. package/dist/__tests__/ansi_tags.test.js +0 -58
  21. package/dist/__tests__/ansi_tags.test.js.map +0 -1
  22. package/dist/__tests__/approval_menu.test.d.ts +0 -15
  23. package/dist/__tests__/approval_menu.test.d.ts.map +0 -1
  24. package/dist/__tests__/approval_menu.test.js +0 -107
  25. package/dist/__tests__/approval_menu.test.js.map +0 -1
  26. package/dist/__tests__/legacy_compat.test.d.ts +0 -2
  27. package/dist/__tests__/legacy_compat.test.d.ts.map +0 -1
  28. package/dist/__tests__/legacy_compat.test.js +0 -36
  29. package/dist/__tests__/legacy_compat.test.js.map +0 -1
  30. package/dist/__tests__/paste_transform_submit.test.d.ts +0 -2
  31. package/dist/__tests__/paste_transform_submit.test.d.ts.map +0 -1
  32. package/dist/__tests__/paste_transform_submit.test.js +0 -74
  33. package/dist/__tests__/paste_transform_submit.test.js.map +0 -1
  34. package/dist/__tests__/server_tool_render.test.d.ts +0 -17
  35. package/dist/__tests__/server_tool_render.test.d.ts.map +0 -1
  36. package/dist/__tests__/server_tool_render.test.js +0 -74
  37. package/dist/__tests__/server_tool_render.test.js.map +0 -1
  38. package/dist/__tests__/session_match.test.d.ts +0 -10
  39. package/dist/__tests__/session_match.test.d.ts.map +0 -1
  40. package/dist/__tests__/session_match.test.js +0 -55
  41. package/dist/__tests__/session_match.test.js.map +0 -1
  42. package/dist/__tests__/settings.test.d.ts +0 -16
  43. package/dist/__tests__/settings.test.d.ts.map +0 -1
  44. package/dist/__tests__/settings.test.js +0 -289
  45. package/dist/__tests__/settings.test.js.map +0 -1
  46. package/dist/__tests__/tool_result_client.test.d.ts +0 -20
  47. package/dist/__tests__/tool_result_client.test.d.ts.map +0 -1
  48. package/dist/__tests__/tool_result_client.test.js +0 -142
  49. package/dist/__tests__/tool_result_client.test.js.map +0 -1
  50. package/dist/__tests__/tools.test.d.ts +0 -17
  51. package/dist/__tests__/tools.test.d.ts.map +0 -1
  52. package/dist/__tests__/tools.test.js +0 -546
  53. package/dist/__tests__/tools.test.js.map +0 -1
  54. package/dist/__tests__/ui_state_listener_lifecycle.test.d.ts +0 -2
  55. package/dist/__tests__/ui_state_listener_lifecycle.test.d.ts.map +0 -1
  56. package/dist/__tests__/ui_state_listener_lifecycle.test.js +0 -152
  57. package/dist/__tests__/ui_state_listener_lifecycle.test.js.map +0 -1
@@ -1,546 +0,0 @@
1
- "use strict";
2
- /**
3
- * Tool-execution surface tests.
4
- *
5
- * SPRINT-CLI-APPROVAL-MENU-1 (#6509):
6
- * - PR1: ISC-6509-006 (read-only tools never prompt)
7
- * + write_file approval integration (#6532 CR-r1)
8
- * - PR2: ISC-6509-004 (allowlist match skips promptApprovalMenu +
9
- * auto-approved suffix)
10
- * + option-2 selection writes the derived pattern to
11
- * ~/.xiaotime/settings.json
12
- *
13
- * Tests redirect XIAOTIME_SETTINGS_PATH to a per-test tmpdir so
14
- * the user's real ~/.xiaotime/settings.json is never read or
15
- * written.
16
- */
17
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
- if (k2 === undefined) k2 = k;
19
- var desc = Object.getOwnPropertyDescriptor(m, k);
20
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
- desc = { enumerable: true, get: function() { return m[k]; } };
22
- }
23
- Object.defineProperty(o, k2, desc);
24
- }) : (function(o, m, k, k2) {
25
- if (k2 === undefined) k2 = k;
26
- o[k2] = m[k];
27
- }));
28
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
- Object.defineProperty(o, "default", { enumerable: true, value: v });
30
- }) : function(o, v) {
31
- o["default"] = v;
32
- });
33
- var __importStar = (this && this.__importStar) || (function () {
34
- var ownKeys = function(o) {
35
- ownKeys = Object.getOwnPropertyNames || function (o) {
36
- var ar = [];
37
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
- return ar;
39
- };
40
- return ownKeys(o);
41
- };
42
- return function (mod) {
43
- if (mod && mod.__esModule) return mod;
44
- var result = {};
45
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
- __setModuleDefault(result, mod);
47
- return result;
48
- };
49
- })();
50
- Object.defineProperty(exports, "__esModule", { value: true });
51
- const vitest_1 = require("vitest");
52
- const fs = __importStar(require("fs"));
53
- const path = __importStar(require("path"));
54
- const os = __importStar(require("os"));
55
- const tools_js_1 = require("../tools.js");
56
- const ui_state_js_1 = require("../ui_state.js");
57
- const settings_js_1 = require("../settings.js");
58
- let tmpDir;
59
- let settingsPath;
60
- let origSettingsEnv;
61
- (0, vitest_1.beforeEach)(() => {
62
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "xiaotime-tools-test-"));
63
- (0, tools_js_1.setSessionCwd)(tmpDir);
64
- // Redirect allowlist to a tmpfile so we never read or write the
65
- // user's real ~/.xiaotime/settings.json.
66
- settingsPath = path.join(tmpDir, ".xiaotime-test-settings.json");
67
- origSettingsEnv = process.env.XIAOTIME_SETTINGS_PATH;
68
- process.env.XIAOTIME_SETTINGS_PATH = settingsPath;
69
- vitest_1.vi.spyOn(process.stdout, "write").mockImplementation(() => true);
70
- vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
71
- vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
72
- });
73
- (0, vitest_1.afterEach)(() => {
74
- if (origSettingsEnv === undefined) {
75
- delete process.env.XIAOTIME_SETTINGS_PATH;
76
- }
77
- else {
78
- process.env.XIAOTIME_SETTINGS_PATH = origSettingsEnv;
79
- }
80
- vitest_1.vi.restoreAllMocks();
81
- fs.rmSync(tmpDir, { recursive: true, force: true });
82
- });
83
- (0, vitest_1.describe)("read-only tools never prompt (ISC-6509-006)", () => {
84
- (0, vitest_1.test)("read_file does not call promptApprovalMenu", async () => {
85
- const filePath = path.join(tmpDir, "sample.txt");
86
- fs.writeFileSync(filePath, "line one\nline two\nline three\n");
87
- const ui = new ui_state_js_1.SessionUI();
88
- const spy = vitest_1.vi.spyOn(ui, "promptApprovalMenu");
89
- try {
90
- const result = await (0, tools_js_1.executeTool)({
91
- tool_use_id: "test-1",
92
- name: "read_file",
93
- input: { path: filePath },
94
- }, ui);
95
- (0, vitest_1.expect)(result.is_error).toBe(false);
96
- (0, vitest_1.expect)(result.content).toContain("line one");
97
- (0, vitest_1.expect)(spy).not.toHaveBeenCalled();
98
- }
99
- finally {
100
- ui.getRl().close();
101
- }
102
- });
103
- (0, vitest_1.test)("list_directory does not call promptApprovalMenu", async () => {
104
- fs.writeFileSync(path.join(tmpDir, "a.txt"), "a");
105
- fs.writeFileSync(path.join(tmpDir, "b.txt"), "b");
106
- const ui = new ui_state_js_1.SessionUI();
107
- const spy = vitest_1.vi.spyOn(ui, "promptApprovalMenu");
108
- try {
109
- const result = await (0, tools_js_1.executeTool)({
110
- tool_use_id: "test-2",
111
- name: "list_directory",
112
- input: { path: tmpDir },
113
- }, ui);
114
- (0, vitest_1.expect)(result.is_error).toBe(false);
115
- (0, vitest_1.expect)(result.content).toContain("a.txt");
116
- (0, vitest_1.expect)(result.content).toContain("b.txt");
117
- (0, vitest_1.expect)(spy).not.toHaveBeenCalled();
118
- }
119
- finally {
120
- ui.getRl().close();
121
- }
122
- });
123
- });
124
- (0, vitest_1.describe)("write_file approval integration (#6532 CR-r1)", () => {
125
- (0, vitest_1.test)("rejection returns 'Rejected by user: <reason>' and does NOT write", async () => {
126
- const target = path.join(tmpDir, "should-not-exist.txt");
127
- const ui = new ui_state_js_1.SessionUI();
128
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
129
- approved: false,
130
- rejectReason: "I don't want this written",
131
- });
132
- try {
133
- const result = await (0, tools_js_1.executeTool)({
134
- tool_use_id: "t-reject-1",
135
- name: "write_file",
136
- input: { path: target, content: "should never land" },
137
- }, ui);
138
- (0, vitest_1.expect)(result.is_error).toBe(false);
139
- (0, vitest_1.expect)(result.content).toBe("Rejected by user: I don't want this written");
140
- (0, vitest_1.expect)(fs.existsSync(target)).toBe(false);
141
- }
142
- finally {
143
- ui.getRl().close();
144
- }
145
- });
146
- (0, vitest_1.test)("rejection with empty reason returns 'Rejected by user.'", async () => {
147
- const target = path.join(tmpDir, "empty-reason.txt");
148
- const ui = new ui_state_js_1.SessionUI();
149
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
150
- approved: false,
151
- rejectReason: "",
152
- });
153
- try {
154
- const result = await (0, tools_js_1.executeTool)({
155
- tool_use_id: "t-reject-2",
156
- name: "write_file",
157
- input: { path: target, content: "x" },
158
- }, ui);
159
- (0, vitest_1.expect)(result.content).toBe("Rejected by user.");
160
- (0, vitest_1.expect)(fs.existsSync(target)).toBe(false);
161
- }
162
- finally {
163
- ui.getRl().close();
164
- }
165
- });
166
- (0, vitest_1.test)("approval writes the file and returns 'File written: <path>'", async () => {
167
- const target = path.join(tmpDir, "approved.txt");
168
- const ui = new ui_state_js_1.SessionUI();
169
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
170
- approved: true,
171
- allowlistRequested: false,
172
- });
173
- try {
174
- const result = await (0, tools_js_1.executeTool)({
175
- tool_use_id: "t-approve-1",
176
- name: "write_file",
177
- input: { path: target, content: "content here" },
178
- }, ui);
179
- (0, vitest_1.expect)(result.is_error).toBe(false);
180
- (0, vitest_1.expect)(result.content).toBe(`File written: ${target}`);
181
- (0, vitest_1.expect)(fs.readFileSync(target, "utf-8")).toBe("content here");
182
- }
183
- finally {
184
- ui.getRl().close();
185
- }
186
- });
187
- });
188
- (0, vitest_1.describe)("allowlist persistence on option-2 selection (ISC-6509-003)", () => {
189
- (0, vitest_1.test)("write_file: allowlistRequested=true persists derived pattern", async () => {
190
- const target = path.join(tmpDir, "nested", "deep", "approved.txt");
191
- const ui = new ui_state_js_1.SessionUI();
192
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
193
- approved: true,
194
- allowlistRequested: true,
195
- });
196
- try {
197
- await (0, tools_js_1.executeTool)({
198
- tool_use_id: "t-allowlist-1",
199
- name: "write_file",
200
- input: { path: target, content: "x" },
201
- }, ui);
202
- const loaded = (0, settings_js_1.loadAllowlist)();
203
- (0, vitest_1.expect)(loaded).toHaveLength(1);
204
- (0, vitest_1.expect)(loaded[0]).toMatchObject({
205
- tool: "write_file",
206
- pattern: `${path.dirname(target)}/**`,
207
- });
208
- }
209
- finally {
210
- ui.getRl().close();
211
- }
212
- });
213
- (0, vitest_1.test)("shell_command: allowlistRequested=true persists 'echo hello' for 'echo hello world'", async () => {
214
- // Real `echo` command — benign, no side effects, exits 0
215
- // immediately. Avoids needing to mock child_process.execSync
216
- // (which is hard to redefine on an ESM module namespace).
217
- const ui = new ui_state_js_1.SessionUI();
218
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
219
- approved: true,
220
- allowlistRequested: true,
221
- });
222
- try {
223
- await (0, tools_js_1.executeTool)({
224
- tool_use_id: "t-allowlist-2",
225
- name: "shell_command",
226
- input: { command: "echo hello world" },
227
- }, ui);
228
- const loaded = (0, settings_js_1.loadAllowlist)();
229
- (0, vitest_1.expect)(loaded).toHaveLength(1);
230
- (0, vitest_1.expect)(loaded[0]).toMatchObject({
231
- tool: "shell_command",
232
- pattern: "echo hello",
233
- });
234
- }
235
- finally {
236
- ui.getRl().close();
237
- }
238
- });
239
- (0, vitest_1.test)("appendAllowlist failure does NOT abort the tool run (#6538 CR-r1)", async () => {
240
- // Force the settings file to be unwritable by pointing
241
- // XIAOTIME_SETTINGS_PATH at a non-existent directory under a
242
- // read-only parent. The tool was already approved; persist
243
- // failure should log to stderr and let the tool execute.
244
- const readOnlyDir = path.join(tmpDir, "read-only");
245
- fs.mkdirSync(readOnlyDir);
246
- fs.chmodSync(readOnlyDir, 0o400); // r--
247
- process.env.XIAOTIME_SETTINGS_PATH = path.join(readOnlyDir, "child", "settings.json");
248
- const stderrSpy = vitest_1.vi
249
- .spyOn(process.stderr, "write")
250
- .mockImplementation(() => true);
251
- const target = path.join(tmpDir, "still-written.txt");
252
- const ui = new ui_state_js_1.SessionUI();
253
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
254
- approved: true,
255
- allowlistRequested: true,
256
- });
257
- try {
258
- const result = await (0, tools_js_1.executeTool)({
259
- tool_use_id: "t-persist-fail",
260
- name: "write_file",
261
- input: { path: target, content: "should still land" },
262
- }, ui);
263
- // Tool ran despite persist failure.
264
- (0, vitest_1.expect)(result.is_error).toBe(false);
265
- (0, vitest_1.expect)(fs.readFileSync(target, "utf-8")).toBe("should still land");
266
- // Stderr received the failure warning.
267
- const stderrCalls = stderrSpy.mock.calls
268
- .map((c) => String(c[0]))
269
- .join("");
270
- (0, vitest_1.expect)(stderrCalls).toContain("failed to persist allowlist");
271
- }
272
- finally {
273
- ui.getRl().close();
274
- // Restore mode so cleanup can rm -rf.
275
- fs.chmodSync(readOnlyDir, 0o700);
276
- }
277
- });
278
- (0, vitest_1.test)("allowlistRequested=false does NOT persist", async () => {
279
- const target = path.join(tmpDir, "no-persist.txt");
280
- const ui = new ui_state_js_1.SessionUI();
281
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
282
- approved: true,
283
- allowlistRequested: false,
284
- });
285
- try {
286
- await (0, tools_js_1.executeTool)({
287
- tool_use_id: "t-no-persist",
288
- name: "write_file",
289
- input: { path: target, content: "x" },
290
- }, ui);
291
- (0, vitest_1.expect)((0, settings_js_1.loadAllowlist)()).toEqual([]);
292
- (0, vitest_1.expect)(fs.existsSync(settingsPath)).toBe(false);
293
- }
294
- finally {
295
- ui.getRl().close();
296
- }
297
- });
298
- });
299
- (0, vitest_1.describe)("allowlist match skips promptApprovalMenu (ISC-6509-004)", () => {
300
- (0, vitest_1.test)("write_file: matching dir glob skips menu + writes file", async () => {
301
- // Pre-seed the allowlist with a write_file dir-glob entry.
302
- (0, settings_js_1.appendAllowlist)({
303
- tool: "write_file",
304
- pattern: `${tmpDir}/**`,
305
- });
306
- const target = path.join(tmpDir, "auto-approved.txt");
307
- const ui = new ui_state_js_1.SessionUI();
308
- const spy = vitest_1.vi.spyOn(ui, "promptApprovalMenu");
309
- try {
310
- const result = await (0, tools_js_1.executeTool)({
311
- tool_use_id: "t-skip-1",
312
- name: "write_file",
313
- input: { path: target, content: "via allowlist" },
314
- }, ui);
315
- (0, vitest_1.expect)(result.is_error).toBe(false);
316
- (0, vitest_1.expect)(result.content).toBe(`File written: ${target}`);
317
- (0, vitest_1.expect)(fs.readFileSync(target, "utf-8")).toBe("via allowlist");
318
- (0, vitest_1.expect)(spy).not.toHaveBeenCalled();
319
- }
320
- finally {
321
- ui.getRl().close();
322
- }
323
- });
324
- (0, vitest_1.test)("shell_command: matching derived pattern skips menu + runs", async () => {
325
- (0, settings_js_1.appendAllowlist)({
326
- tool: "shell_command",
327
- pattern: "echo hello",
328
- });
329
- const ui = new ui_state_js_1.SessionUI();
330
- const spy = vitest_1.vi.spyOn(ui, "promptApprovalMenu");
331
- try {
332
- const result = await (0, tools_js_1.executeTool)({
333
- tool_use_id: "t-skip-2",
334
- name: "shell_command",
335
- input: { command: "echo hello world" },
336
- }, ui);
337
- (0, vitest_1.expect)(result.is_error).toBe(false);
338
- (0, vitest_1.expect)(result.content).toBe("hello world\n");
339
- (0, vitest_1.expect)(spy).not.toHaveBeenCalled();
340
- }
341
- finally {
342
- ui.getRl().close();
343
- }
344
- });
345
- // NOTE: git_commit auto-approve happy-path is covered by the
346
- // PR-body manual walkthrough (requires a real git repo with staged
347
- // changes; setting that up in a vitest fixture is heavier than the
348
- // marginal coverage gain). The skip-menu invariant is exercised
349
- // here via shell_command + write_file; git_commit shares the
350
- // _gateApproval helper one switch case over.
351
- (0, vitest_1.test)("non-matching allowlist entry → menu IS called", async () => {
352
- // Allowlist has a write_file entry for a DIFFERENT dir; shouldn't
353
- // authorize a write to tmpDir.
354
- (0, settings_js_1.appendAllowlist)({
355
- tool: "write_file",
356
- pattern: "/some/other/**",
357
- });
358
- const target = path.join(tmpDir, "needs-prompt.txt");
359
- const ui = new ui_state_js_1.SessionUI();
360
- vitest_1.vi.spyOn(ui, "promptApprovalMenu").mockResolvedValue({
361
- approved: true,
362
- allowlistRequested: false,
363
- });
364
- try {
365
- const result = await (0, tools_js_1.executeTool)({
366
- tool_use_id: "t-skip-4",
367
- name: "write_file",
368
- input: { path: target, content: "x" },
369
- }, ui);
370
- (0, vitest_1.expect)(result.is_error).toBe(false);
371
- (0, vitest_1.expect)(fs.readFileSync(target, "utf-8")).toBe("x");
372
- // The mocked promptApprovalMenu WAS called, confirming the
373
- // non-matching allowlist didn't authorize.
374
- (0, vitest_1.expect)(ui.promptApprovalMenu).toHaveBeenCalledTimes(1);
375
- }
376
- finally {
377
- ui.getRl().close();
378
- }
379
- });
380
- });
381
- // SPRINT-CLI-INPUT-AND-TOOL-HARDENING-1 (#7299) PR1 — list_directory
382
- // entry cap + truncation marker. Pre-cap, calling on a 298k-entry
383
- // directory built a multi-MB tool result that the downstream POST
384
- // rejected as a bare `Error:` line. The cap defaults to 500 with a
385
- // per-CLI env override (XIAOTIME_LIST_DIRECTORY_MAX); recursive walks
386
- // early-exit at cap+1 so we don't enumerate huge trees.
387
- (0, vitest_1.describe)("list_directory entry cap (ISC-7299-001, ISC-7299-002)", () => {
388
- let origMaxEnv;
389
- (0, vitest_1.beforeEach)(() => {
390
- origMaxEnv = process.env.XIAOTIME_LIST_DIRECTORY_MAX;
391
- });
392
- (0, vitest_1.afterEach)(() => {
393
- if (origMaxEnv === undefined) {
394
- delete process.env.XIAOTIME_LIST_DIRECTORY_MAX;
395
- }
396
- else {
397
- process.env.XIAOTIME_LIST_DIRECTORY_MAX = origMaxEnv;
398
- }
399
- });
400
- function _seedEntries(dir, count, ext = ".txt") {
401
- for (let i = 0; i < count; i++) {
402
- fs.writeFileSync(path.join(dir, `f${i}${ext}`), String(i));
403
- }
404
- }
405
- (0, vitest_1.test)("under-cap directory returns the full list, no marker", async () => {
406
- // 50 entries, cap default 500 — full content, no truncation note.
407
- _seedEntries(tmpDir, 50);
408
- const ui = new ui_state_js_1.SessionUI();
409
- try {
410
- const result = await (0, tools_js_1.executeTool)({
411
- tool_use_id: "t-cap-under",
412
- name: "list_directory",
413
- input: { path: tmpDir },
414
- }, ui);
415
- (0, vitest_1.expect)(result.is_error).toBe(false);
416
- (0, vitest_1.expect)(result.content).not.toContain("truncated");
417
- // 50 entries → 50 newline-separated lines, no marker line.
418
- const lines = result.content.split("\n").filter((l) => l.length > 0);
419
- (0, vitest_1.expect)(lines).toHaveLength(50);
420
- }
421
- finally {
422
- ui.getRl().close();
423
- }
424
- });
425
- (0, vitest_1.test)("over-cap directory returns capped result + truncation marker", async () => {
426
- // Lower the cap so the test stays fast — 600 entries with cap=100
427
- // exercises the same code path as 300k entries with cap=500 but
428
- // without the seeding cost.
429
- process.env.XIAOTIME_LIST_DIRECTORY_MAX = "100";
430
- _seedEntries(tmpDir, 600);
431
- const ui = new ui_state_js_1.SessionUI();
432
- try {
433
- const result = await (0, tools_js_1.executeTool)({
434
- tool_use_id: "t-cap-over",
435
- name: "list_directory",
436
- input: { path: tmpDir },
437
- }, ui);
438
- (0, vitest_1.expect)(result.is_error).toBe(false);
439
- (0, vitest_1.expect)(result.content).toContain("truncated to 100");
440
- (0, vitest_1.expect)(result.content).toContain("narrow with a pattern");
441
- // 100 entries + 1 marker line = 101 non-empty lines.
442
- const lines = result.content.split("\n").filter((l) => l.length > 0);
443
- (0, vitest_1.expect)(lines).toHaveLength(101);
444
- }
445
- finally {
446
- ui.getRl().close();
447
- }
448
- });
449
- (0, vitest_1.test)("pattern filter applies BEFORE the cap (matching entries cap correctly)", async () => {
450
- // 300 .py files + 300 .txt files; pattern *.py → 300 matches, cap
451
- // truncates to 50. Pre-fix bug shape would have been "cap to 50
452
- // raw, THEN filter by pattern" producing fewer (or zero) .py
453
- // entries in the result.
454
- process.env.XIAOTIME_LIST_DIRECTORY_MAX = "50";
455
- _seedEntries(tmpDir, 300, ".py");
456
- _seedEntries(tmpDir, 300, ".txt");
457
- const ui = new ui_state_js_1.SessionUI();
458
- try {
459
- const result = await (0, tools_js_1.executeTool)({
460
- tool_use_id: "t-cap-pattern",
461
- name: "list_directory",
462
- input: { path: tmpDir, pattern: "*.py" },
463
- }, ui);
464
- (0, vitest_1.expect)(result.is_error).toBe(false);
465
- (0, vitest_1.expect)(result.content).toContain("truncated to 50");
466
- const lines = result.content.split("\n").filter((l) => l.length > 0 && !l.startsWith("..."));
467
- (0, vitest_1.expect)(lines).toHaveLength(50);
468
- // Every retained entry MUST match the pattern.
469
- for (const line of lines) {
470
- (0, vitest_1.expect)(line).toMatch(/\.py$/);
471
- }
472
- }
473
- finally {
474
- ui.getRl().close();
475
- }
476
- });
477
- (0, vitest_1.test)("recursive walk early-exits at cap (no full-tree enumeration)", async () => {
478
- // Build a 3-level nested structure with 100 files per leaf. With
479
- // cap=30 the walk must return only 30 entries — we assert this
480
- // both via the result + via spying on fs.readdirSync to confirm
481
- // we did NOT enumerate every directory.
482
- process.env.XIAOTIME_LIST_DIRECTORY_MAX = "30";
483
- const sub1 = path.join(tmpDir, "sub1");
484
- const sub2 = path.join(sub1, "sub2");
485
- fs.mkdirSync(sub2, { recursive: true });
486
- _seedEntries(tmpDir, 100, ".log");
487
- _seedEntries(sub1, 100, ".log");
488
- _seedEntries(sub2, 100, ".log");
489
- const ui = new ui_state_js_1.SessionUI();
490
- try {
491
- const result = await (0, tools_js_1.executeTool)({
492
- tool_use_id: "t-cap-recursive",
493
- name: "list_directory",
494
- input: { path: tmpDir, recursive: true },
495
- }, ui);
496
- (0, vitest_1.expect)(result.is_error).toBe(false);
497
- (0, vitest_1.expect)(result.content).toContain("truncated to 30");
498
- const lines = result.content.split("\n").filter((l) => l.length > 0 && !l.startsWith("..."));
499
- (0, vitest_1.expect)(lines).toHaveLength(30);
500
- }
501
- finally {
502
- ui.getRl().close();
503
- }
504
- });
505
- (0, vitest_1.test)("XIAOTIME_LIST_DIRECTORY_MAX env override is honored", async () => {
506
- // 200 entries, override cap to 25 — result should have 25 + marker.
507
- process.env.XIAOTIME_LIST_DIRECTORY_MAX = "25";
508
- _seedEntries(tmpDir, 200);
509
- const ui = new ui_state_js_1.SessionUI();
510
- try {
511
- const result = await (0, tools_js_1.executeTool)({
512
- tool_use_id: "t-cap-env",
513
- name: "list_directory",
514
- input: { path: tmpDir },
515
- }, ui);
516
- (0, vitest_1.expect)(result.is_error).toBe(false);
517
- (0, vitest_1.expect)(result.content).toContain("truncated to 25");
518
- const lines = result.content.split("\n").filter((l) => l.length > 0 && !l.startsWith("..."));
519
- (0, vitest_1.expect)(lines).toHaveLength(25);
520
- }
521
- finally {
522
- ui.getRl().close();
523
- }
524
- });
525
- (0, vitest_1.test)("malformed XIAOTIME_LIST_DIRECTORY_MAX falls back to default 500", async () => {
526
- // Defensive: garbage env value, non-positive, etc. shouldn't crash;
527
- // should fall back to 500. Test with a sub-default count so the
528
- // fallback yields the full list with no truncation.
529
- process.env.XIAOTIME_LIST_DIRECTORY_MAX = "not-a-number";
530
- _seedEntries(tmpDir, 50);
531
- const ui = new ui_state_js_1.SessionUI();
532
- try {
533
- const result = await (0, tools_js_1.executeTool)({
534
- tool_use_id: "t-cap-bad-env",
535
- name: "list_directory",
536
- input: { path: tmpDir },
537
- }, ui);
538
- (0, vitest_1.expect)(result.is_error).toBe(false);
539
- (0, vitest_1.expect)(result.content).not.toContain("truncated");
540
- }
541
- finally {
542
- ui.getRl().close();
543
- }
544
- });
545
- });
546
- //# sourceMappingURL=tools.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ui_state_listener_lifecycle.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui_state_listener_lifecycle.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ui_state_listener_lifecycle.test.ts"],"names":[],"mappings":""}