@easynet/agent-tool-buildin 0.0.42 → 0.0.43

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 (54) hide show
  1. package/dist/core-tools-manifest.json +1754 -1355
  2. package/dist/src/iterm/common.d.ts +43 -0
  3. package/dist/src/iterm/common.d.ts.map +1 -0
  4. package/dist/src/iterm/common.js +164 -0
  5. package/dist/src/iterm/common.js.map +1 -0
  6. package/dist/src/iterm/itermCreateTab.d.ts +30 -0
  7. package/dist/src/iterm/itermCreateTab.d.ts.map +1 -0
  8. package/dist/src/iterm/itermCreateTab.js +59 -0
  9. package/dist/src/iterm/itermCreateTab.js.map +1 -0
  10. package/dist/src/iterm/itermCreateWindow.d.ts +30 -0
  11. package/dist/src/iterm/itermCreateWindow.d.ts.map +1 -0
  12. package/dist/src/iterm/itermCreateWindow.js +62 -0
  13. package/dist/src/iterm/itermCreateWindow.js.map +1 -0
  14. package/dist/src/iterm/itermGetSessionInfo.d.ts +30 -0
  15. package/dist/src/iterm/itermGetSessionInfo.d.ts.map +1 -0
  16. package/dist/src/iterm/itermGetSessionInfo.js +41 -0
  17. package/dist/src/iterm/itermGetSessionInfo.js.map +1 -0
  18. package/dist/src/iterm/itermListCurrentWindowSessions.d.ts +31 -0
  19. package/dist/src/iterm/itermListCurrentWindowSessions.d.ts.map +1 -0
  20. package/dist/src/iterm/itermListCurrentWindowSessions.js +34 -0
  21. package/dist/src/iterm/itermListCurrentWindowSessions.js.map +1 -0
  22. package/dist/src/iterm/itermListWindows.d.ts +31 -0
  23. package/dist/src/iterm/itermListWindows.d.ts.map +1 -0
  24. package/dist/src/iterm/itermListWindows.js +73 -0
  25. package/dist/src/iterm/itermListWindows.js.map +1 -0
  26. package/dist/src/iterm/itermRename.d.ts +30 -0
  27. package/dist/src/iterm/itermRename.d.ts.map +1 -0
  28. package/dist/src/iterm/itermRename.js +49 -0
  29. package/dist/src/iterm/itermRename.js.map +1 -0
  30. package/dist/src/iterm/itermResizeWindow.d.ts +29 -0
  31. package/dist/src/iterm/itermResizeWindow.d.ts.map +1 -0
  32. package/dist/src/iterm/itermResizeWindow.js +53 -0
  33. package/dist/src/iterm/itermResizeWindow.js.map +1 -0
  34. package/dist/src/iterm/itermRunCommandInSession.d.ts +29 -0
  35. package/dist/src/iterm/itermRunCommandInSession.d.ts.map +1 -0
  36. package/dist/src/iterm/itermRunCommandInSession.js +37 -0
  37. package/dist/src/iterm/itermRunCommandInSession.js.map +1 -0
  38. package/dist/src/iterm/itermSendText.d.ts +28 -0
  39. package/dist/src/iterm/itermSendText.d.ts.map +1 -0
  40. package/dist/src/iterm/itermSendText.js +47 -0
  41. package/dist/src/iterm/itermSendText.js.map +1 -0
  42. package/dist/src/iterm/itermSetBackgroundColor.d.ts +35 -0
  43. package/dist/src/iterm/itermSetBackgroundColor.d.ts.map +1 -0
  44. package/dist/src/iterm/itermSetBackgroundColor.js +41 -0
  45. package/dist/src/iterm/itermSetBackgroundColor.js.map +1 -0
  46. package/dist/src/iterm/itermSplitPane.d.ts +32 -0
  47. package/dist/src/iterm/itermSplitPane.d.ts.map +1 -0
  48. package/dist/src/iterm/itermSplitPane.js +57 -0
  49. package/dist/src/iterm/itermSplitPane.js.map +1 -0
  50. package/dist/src/iterm/itermTools.d.ts +11 -209
  51. package/dist/src/iterm/itermTools.d.ts.map +1 -1
  52. package/dist/src/iterm/itermTools.js +11 -533
  53. package/dist/src/iterm/itermTools.js.map +1 -1
  54. package/package.json +3 -1
@@ -2,36 +2,34 @@
2
2
  "kind": "core",
3
3
  "tools": [
4
4
  {
5
- "name": "analyzeLog",
6
- "description": "Analyze log text via OpenAI-compatible LLM, identifying errors, root causes, and suggestions.",
5
+ "name": "itermCreateWindow",
6
+ "description": "Create a new iTerm2 window, optionally with profile/command and initial names.",
7
7
  "inputSchema": {
8
8
  "type": "object",
9
9
  "properties": {
10
- "logText": {
10
+ "profile": {
11
11
  "type": "string"
12
12
  },
13
- "log": {
13
+ "command": {
14
14
  "type": "string"
15
15
  },
16
- "text": {
16
+ "cmd": {
17
17
  "type": "string"
18
18
  },
19
- "chunkSize": {
20
- "type": "number"
19
+ "activate": {
20
+ "type": "object",
21
+ "properties": {}
21
22
  },
22
- "chunkOverlap": {
23
- "type": "number"
23
+ "windowName": {
24
+ "type": "string"
24
25
  },
25
- "model": {
26
+ "tabName": {
26
27
  "type": "string"
27
28
  },
28
- "timeoutMs": {
29
- "type": "number"
29
+ "sessionName": {
30
+ "type": "string"
30
31
  }
31
- },
32
- "required": [
33
- "logText"
34
- ]
32
+ }
35
33
  },
36
34
  "outputSchema": {
37
35
  "type": "object",
@@ -39,16 +37,32 @@
39
37
  "result": {
40
38
  "type": "object",
41
39
  "properties": {
42
- "analysis": {
40
+ "profile": {
43
41
  "type": "string"
44
42
  },
45
- "chunksProcessed": {
43
+ "commandText": {
44
+ "type": "string"
45
+ },
46
+ "windowId": {
47
+ "type": "number"
48
+ },
49
+ "tabIndex": {
46
50
  "type": "number"
51
+ },
52
+ "sessionId": {
53
+ "type": "string"
54
+ },
55
+ "sessionUniqueId": {
56
+ "type": "string"
47
57
  }
48
58
  },
49
59
  "required": [
50
- "analysis",
51
- "chunksProcessed"
60
+ "profile",
61
+ "commandText",
62
+ "windowId",
63
+ "tabIndex",
64
+ "sessionId",
65
+ "sessionUniqueId"
52
66
  ]
53
67
  },
54
68
  "evidence": {
@@ -59,6 +73,9 @@
59
73
  "type": {
60
74
  "type": "string"
61
75
  },
76
+ "ref": {
77
+ "type": "string"
78
+ },
62
79
  "summary": {
63
80
  "type": "string"
64
81
  },
@@ -68,6 +85,7 @@
68
85
  },
69
86
  "required": [
70
87
  "type",
88
+ "ref",
71
89
  "summary",
72
90
  "createdAt"
73
91
  ]
@@ -79,60 +97,39 @@
79
97
  "evidence"
80
98
  ]
81
99
  },
82
- "sourcePath": "src/analyze/analyzeLog",
83
- "exportName": "analyzeLog",
84
- "sideEffect": "none"
100
+ "sourcePath": "src/iterm/itermCreateWindow",
101
+ "exportName": "itermCreateWindow",
102
+ "sideEffect": "local_write"
85
103
  },
86
104
  {
87
- "name": "analyzeProjectRepo",
88
- "description": "Build an index for a source-code repository and generate a whole-project understanding summary.",
105
+ "name": "itermCreateTab",
106
+ "description": "Create a new tab in an iTerm2 window.",
89
107
  "inputSchema": {
90
108
  "type": "object",
91
109
  "properties": {
92
- "path": {
93
- "type": "string"
110
+ "windowId": {
111
+ "type": "number"
94
112
  },
95
- "repoPath": {
113
+ "profile": {
96
114
  "type": "string"
97
115
  },
98
- "projectPath": {
116
+ "command": {
99
117
  "type": "string"
100
118
  },
101
- "outputIndexPath": {
119
+ "cmd": {
102
120
  "type": "string"
103
121
  },
104
- "includeHidden": {
105
- "type": "object",
106
- "properties": {}
107
- },
108
- "maxFiles": {
109
- "type": "number"
110
- },
111
- "maxFileBytes": {
112
- "type": "number"
113
- },
114
- "includeExtensions": {
115
- "type": "array",
116
- "items": {
117
- "type": "string"
118
- }
119
- },
120
- "excludeDirs": {
121
- "type": "array",
122
- "items": {
123
- "type": "string"
124
- }
122
+ "tabName": {
123
+ "type": "string"
125
124
  },
126
- "model": {
125
+ "sessionName": {
127
126
  "type": "string"
128
127
  },
129
- "timeoutMs": {
130
- "type": "number"
128
+ "activate": {
129
+ "type": "object",
130
+ "properties": {}
131
131
  }
132
- },
133
- "required": [
134
- "path"
135
- ]
132
+ }
136
133
  },
137
134
  "outputSchema": {
138
135
  "type": "object",
@@ -140,55 +137,32 @@
140
137
  "result": {
141
138
  "type": "object",
142
139
  "properties": {
143
- "repoRoot": {
144
- "type": "string"
145
- },
146
- "indexPath": {
147
- "type": "string"
148
- },
149
- "totalIndexedFiles": {
150
- "type": "number"
151
- },
152
- "truncated": {
153
- "type": "boolean"
154
- },
155
- "skippedBinary": {
140
+ "windowId": {
156
141
  "type": "number"
157
142
  },
158
- "indexSplit": {
159
- "type": "boolean"
160
- },
161
- "indexPartPaths": {
162
- "type": "array",
163
- "items": {
164
- "type": "string"
165
- }
143
+ "profile": {
144
+ "type": "string"
166
145
  },
167
- "llmUsed": {
168
- "type": "boolean"
146
+ "commandText": {
147
+ "type": "string"
169
148
  },
170
- "partialCount": {
149
+ "tabIndex": {
171
150
  "type": "number"
172
151
  },
173
- "model": {
152
+ "sessionId": {
174
153
  "type": "string"
175
154
  },
176
- "understanding": {
155
+ "sessionUniqueId": {
177
156
  "type": "string"
178
157
  }
179
158
  },
180
159
  "required": [
181
- "repoRoot",
182
- "indexPath",
183
- "totalIndexedFiles",
184
- "truncated",
185
- "skippedBinary",
186
- "indexSplit",
187
- "indexPartPaths",
188
- "llmUsed",
189
- "partialCount",
190
- "model",
191
- "understanding"
160
+ "windowId",
161
+ "profile",
162
+ "commandText",
163
+ "tabIndex",
164
+ "sessionId",
165
+ "sessionUniqueId"
192
166
  ]
193
167
  },
194
168
  "evidence": {
@@ -199,6 +173,9 @@
199
173
  "type": {
200
174
  "type": "string"
201
175
  },
176
+ "ref": {
177
+ "type": "string"
178
+ },
202
179
  "summary": {
203
180
  "type": "string"
204
181
  },
@@ -208,6 +185,7 @@
208
185
  },
209
186
  "required": [
210
187
  "type",
188
+ "ref",
211
189
  "summary",
212
190
  "createdAt"
213
191
  ]
@@ -219,54 +197,46 @@
219
197
  "evidence"
220
198
  ]
221
199
  },
222
- "sourcePath": "src/analyze/analyzeProjectRepo",
223
- "exportName": "analyzeProjectRepo",
200
+ "sourcePath": "src/iterm/itermCreateTab",
201
+ "exportName": "itermCreateTab",
224
202
  "sideEffect": "local_write"
225
203
  },
226
204
  {
227
- "name": "askProjectRepo",
228
- "description": "Ask a concrete question about a repository based on .project-index.json (or split parts).",
205
+ "name": "itermSplitPane",
206
+ "description": "Split an iTerm2 session into a new pane.",
229
207
  "inputSchema": {
230
208
  "type": "object",
231
209
  "properties": {
232
- "path": {
233
- "type": "string"
234
- },
235
- "repoPath": {
236
- "type": "string"
210
+ "windowId": {
211
+ "type": "number"
237
212
  },
238
- "projectPath": {
239
- "type": "string"
213
+ "tabIndex": {
214
+ "type": "number"
240
215
  },
241
- "question": {
216
+ "sessionId": {
242
217
  "type": "string"
243
218
  },
244
- "query": {
245
- "type": "string"
219
+ "direction": {
220
+ "type": "string",
221
+ "enum": [
222
+ "horizontal",
223
+ "vertical"
224
+ ]
246
225
  },
247
- "q": {
226
+ "profile": {
248
227
  "type": "string"
249
228
  },
250
- "indexPath": {
229
+ "command": {
251
230
  "type": "string"
252
231
  },
253
- "topK": {
254
- "type": "number"
255
- },
256
- "maxSnippetChars": {
257
- "type": "number"
258
- },
259
- "model": {
232
+ "cmd": {
260
233
  "type": "string"
261
234
  },
262
- "timeoutMs": {
263
- "type": "number"
235
+ "activate": {
236
+ "type": "object",
237
+ "properties": {}
264
238
  }
265
- },
266
- "required": [
267
- "path",
268
- "question"
269
- ]
239
+ }
270
240
  },
271
241
  "outputSchema": {
272
242
  "type": "object",
@@ -274,70 +244,36 @@
274
244
  "result": {
275
245
  "type": "object",
276
246
  "properties": {
277
- "repoRoot": {
247
+ "direction": {
278
248
  "type": "string"
279
249
  },
280
- "indexPath": {
250
+ "profile": {
281
251
  "type": "string"
282
252
  },
283
- "question": {
253
+ "commandText": {
284
254
  "type": "string"
285
255
  },
286
- "model": {
287
- "type": "string"
256
+ "windowId": {
257
+ "type": "number"
288
258
  },
289
- "answer": {
259
+ "tabIndex": {
260
+ "type": "number"
261
+ },
262
+ "sessionId": {
290
263
  "type": "string"
291
264
  },
292
- "matchedFiles": {
293
- "type": "array",
294
- "items": {
295
- "type": "object",
296
- "properties": {
297
- "path": {
298
- "type": "string"
299
- },
300
- "score": {
301
- "type": "number"
302
- },
303
- "source": {
304
- "type": "string",
305
- "enum": [
306
- "index",
307
- "live_scan"
308
- ]
309
- }
310
- },
311
- "required": [
312
- "path",
313
- "score",
314
- "source"
315
- ]
316
- }
317
- },
318
- "retrievalMode": {
265
+ "sessionUniqueId": {
319
266
  "type": "string"
320
- },
321
- "deepReadUsed": {
322
- "type": "boolean"
323
- },
324
- "deepReadPaths": {
325
- "type": "array",
326
- "items": {
327
- "type": "string"
328
- }
329
267
  }
330
268
  },
331
269
  "required": [
332
- "repoRoot",
333
- "indexPath",
334
- "question",
335
- "model",
336
- "answer",
337
- "matchedFiles",
338
- "retrievalMode",
339
- "deepReadUsed",
340
- "deepReadPaths"
270
+ "direction",
271
+ "profile",
272
+ "commandText",
273
+ "windowId",
274
+ "tabIndex",
275
+ "sessionId",
276
+ "sessionUniqueId"
341
277
  ]
342
278
  },
343
279
  "evidence": {
@@ -348,6 +284,9 @@
348
284
  "type": {
349
285
  "type": "string"
350
286
  },
287
+ "ref": {
288
+ "type": "string"
289
+ },
351
290
  "summary": {
352
291
  "type": "string"
353
292
  },
@@ -357,6 +296,7 @@
357
296
  },
358
297
  "required": [
359
298
  "type",
299
+ "ref",
360
300
  "summary",
361
301
  "createdAt"
362
302
  ]
@@ -368,29 +308,23 @@
368
308
  "evidence"
369
309
  ]
370
310
  },
371
- "sourcePath": "src/analyze/askProjectRepo",
372
- "exportName": "askProjectRepo",
373
- "sideEffect": "none"
311
+ "sourcePath": "src/iterm/itermSplitPane",
312
+ "exportName": "itermSplitPane",
313
+ "sideEffect": "local_write"
374
314
  },
375
315
  {
376
- "name": "embedText",
377
- "description": "Convert text into embedding vectors via OpenAI-compatible API.",
316
+ "name": "itermResizeWindow",
317
+ "description": "Resize the current iTerm2 window to a percentage of the main screen,",
378
318
  "inputSchema": {
379
319
  "type": "object",
380
320
  "properties": {
381
- "text": {
382
- "type": "string"
383
- },
384
- "texts": {
385
- "type": "array",
386
- "items": {
387
- "type": "string"
388
- }
321
+ "windowId": {
322
+ "type": "number"
389
323
  },
390
- "model": {
391
- "type": "string"
324
+ "widthPercent": {
325
+ "type": "number"
392
326
  },
393
- "timeoutMs": {
327
+ "heightPercent": {
394
328
  "type": "number"
395
329
  }
396
330
  }
@@ -401,30 +335,32 @@
401
335
  "result": {
402
336
  "type": "object",
403
337
  "properties": {
404
- "embeddings": {
405
- "type": "array",
406
- "items": {
407
- "type": "array",
408
- "items": {
409
- "type": "number"
410
- }
411
- }
338
+ "widthPercent": {
339
+ "type": "number"
412
340
  },
413
- "model": {
414
- "type": "string"
341
+ "heightPercent": {
342
+ "type": "number"
415
343
  },
416
- "dimensions": {
344
+ "windowId": {
417
345
  "type": "number"
418
346
  },
419
- "count": {
347
+ "tabIndex": {
420
348
  "type": "number"
349
+ },
350
+ "sessionId": {
351
+ "type": "string"
352
+ },
353
+ "sessionUniqueId": {
354
+ "type": "string"
421
355
  }
422
356
  },
423
357
  "required": [
424
- "embeddings",
425
- "model",
426
- "dimensions",
427
- "count"
358
+ "widthPercent",
359
+ "heightPercent",
360
+ "windowId",
361
+ "tabIndex",
362
+ "sessionId",
363
+ "sessionUniqueId"
428
364
  ]
429
365
  },
430
366
  "evidence": {
@@ -435,6 +371,9 @@
435
371
  "type": {
436
372
  "type": "string"
437
373
  },
374
+ "ref": {
375
+ "type": "string"
376
+ },
438
377
  "summary": {
439
378
  "type": "string"
440
379
  },
@@ -444,6 +383,7 @@
444
383
  },
445
384
  "required": [
446
385
  "type",
386
+ "ref",
447
387
  "summary",
448
388
  "createdAt"
449
389
  ]
@@ -455,84 +395,35 @@
455
395
  "evidence"
456
396
  ]
457
397
  },
458
- "sourcePath": "src/analyze/embedText",
459
- "exportName": "embedText",
460
- "sideEffect": "none"
398
+ "sourcePath": "src/iterm/itermResizeWindow",
399
+ "exportName": "itermResizeWindow",
400
+ "sideEffect": "local_write"
461
401
  },
462
402
  {
463
- "name": "runCommand",
464
- "description": "Run an allowlisted command in the sandbox via spawn (no shell), with timeout and output limits.",
403
+ "name": "itermRename",
404
+ "description": "Rename iTerm2 window/tab/session targets.",
465
405
  "inputSchema": {
466
406
  "type": "object",
467
407
  "properties": {
468
- "command": {
469
- "type": "string"
470
- },
471
- "cmd": {
472
- "type": "string"
473
- },
474
- "args": {
475
- "type": "array",
476
- "items": {
477
- "type": "string"
478
- }
408
+ "windowId": {
409
+ "type": "number"
479
410
  },
480
- "arguments": {
481
- "type": "array",
482
- "items": {
483
- "type": "string"
484
- }
411
+ "tabIndex": {
412
+ "type": "number"
485
413
  },
486
- "cwd": {
414
+ "sessionId": {
487
415
  "type": "string"
488
416
  },
489
- "timeoutMs": {
490
- "type": "number"
491
- }
492
- },
493
- "required": [
494
- "command"
495
- ]
496
- },
497
- "outputSchema": {
498
- "type": "object",
499
- "properties": {
500
- "result": {},
501
- "evidence": {
502
- "type": "array",
503
- "items": {}
504
- }
505
- },
506
- "required": [
507
- "result",
508
- "evidence"
509
- ]
510
- },
511
- "sourcePath": "src/exec/runCommand",
512
- "exportName": "runCommand",
513
- "sideEffect": "local_write"
514
- },
515
- {
516
- "name": "deletePath",
517
- "description": "Delete a file or directory in the sandbox. Requires confirm=true to proceed.",
518
- "inputSchema": {
519
- "type": "object",
520
- "properties": {
521
- "path": {
417
+ "windowName": {
522
418
  "type": "string"
523
419
  },
524
- "recursive": {
525
- "type": "object",
526
- "properties": {}
420
+ "tabName": {
421
+ "type": "string"
527
422
  },
528
- "confirm": {
529
- "type": "boolean"
423
+ "sessionName": {
424
+ "type": "string"
530
425
  }
531
- },
532
- "required": [
533
- "path",
534
- "confirm"
535
- ]
426
+ }
536
427
  },
537
428
  "outputSchema": {
538
429
  "type": "object",
@@ -540,20 +431,39 @@
540
431
  "result": {
541
432
  "type": "object",
542
433
  "properties": {
543
- "path": {
544
- "type": "string"
434
+ "windowName": {
435
+ "type": "object",
436
+ "properties": {}
545
437
  },
546
- "deleted": {
547
- "type": "boolean"
438
+ "tabName": {
439
+ "type": "object",
440
+ "properties": {}
548
441
  },
549
- "type": {
442
+ "sessionName": {
443
+ "type": "object",
444
+ "properties": {}
445
+ },
446
+ "windowId": {
447
+ "type": "number"
448
+ },
449
+ "tabIndex": {
450
+ "type": "number"
451
+ },
452
+ "sessionId": {
453
+ "type": "string"
454
+ },
455
+ "sessionUniqueId": {
550
456
  "type": "string"
551
457
  }
552
458
  },
553
459
  "required": [
554
- "path",
555
- "deleted",
556
- "type"
460
+ "windowName",
461
+ "tabName",
462
+ "sessionName",
463
+ "windowId",
464
+ "tabIndex",
465
+ "sessionId",
466
+ "sessionUniqueId"
557
467
  ]
558
468
  },
559
469
  "evidence": {
@@ -588,37 +498,41 @@
588
498
  "evidence"
589
499
  ]
590
500
  },
591
- "sourcePath": "src/fs/deletePath",
592
- "exportName": "deletePath",
593
- "sideEffect": "destructive"
501
+ "sourcePath": "src/iterm/itermRename",
502
+ "exportName": "itermRename",
503
+ "sideEffect": "local_write"
594
504
  },
595
505
  {
596
- "name": "listDir",
597
- "description": "List files and subdirectories in a sandbox directory, optionally recursive with depth limit.",
506
+ "name": "itermSetBackgroundColor",
507
+ "description": "Set iTerm2 session background color.",
598
508
  "inputSchema": {
599
509
  "type": "object",
600
510
  "properties": {
601
- "path": {
511
+ "windowId": {
512
+ "type": "number"
513
+ },
514
+ "tabIndex": {
515
+ "type": "number"
516
+ },
517
+ "sessionId": {
602
518
  "type": "string"
603
519
  },
604
- "maxEntries": {
520
+ "hex": {
521
+ "type": "string"
522
+ },
523
+ "red": {
605
524
  "type": "number"
606
525
  },
607
- "includeHidden": {
608
- "type": "object",
609
- "properties": {}
526
+ "green": {
527
+ "type": "number"
610
528
  },
611
- "recursive": {
612
- "type": "object",
613
- "properties": {}
529
+ "blue": {
530
+ "type": "number"
614
531
  },
615
- "maxDepth": {
532
+ "alpha": {
616
533
  "type": "number"
617
534
  }
618
- },
619
- "required": [
620
- "path"
621
- ]
535
+ }
622
536
  },
623
537
  "outputSchema": {
624
538
  "type": "object",
@@ -626,53 +540,48 @@
626
540
  "result": {
627
541
  "type": "object",
628
542
  "properties": {
629
- "path": {
630
- "type": "string"
631
- },
632
- "entries": {
633
- "type": "array",
634
- "items": {
635
- "type": "object",
636
- "properties": {
637
- "name": {
638
- "type": "string"
639
- },
640
- "kind": {
641
- "type": "string",
642
- "enum": [
643
- "directory",
644
- "file",
645
- "symlink",
646
- "other"
647
- ]
648
- },
649
- "size": {
650
- "type": "number"
651
- },
652
- "mtime": {
653
- "type": "string"
654
- }
543
+ "color": {
544
+ "type": "object",
545
+ "properties": {
546
+ "red": {
547
+ "type": "number"
655
548
  },
656
- "required": [
657
- "name",
658
- "kind",
659
- "size",
660
- "mtime"
661
- ]
662
- }
549
+ "green": {
550
+ "type": "number"
551
+ },
552
+ "blue": {
553
+ "type": "number"
554
+ },
555
+ "alpha": {
556
+ "type": "number"
557
+ }
558
+ },
559
+ "required": [
560
+ "red",
561
+ "green",
562
+ "blue",
563
+ "alpha"
564
+ ]
663
565
  },
664
- "totalEntries": {
566
+ "windowId": {
665
567
  "type": "number"
666
568
  },
667
- "truncated": {
668
- "type": "boolean"
569
+ "tabIndex": {
570
+ "type": "number"
571
+ },
572
+ "sessionId": {
573
+ "type": "string"
574
+ },
575
+ "sessionUniqueId": {
576
+ "type": "string"
669
577
  }
670
578
  },
671
579
  "required": [
672
- "path",
673
- "entries",
674
- "totalEntries",
675
- "truncated"
580
+ "color",
581
+ "windowId",
582
+ "tabIndex",
583
+ "sessionId",
584
+ "sessionUniqueId"
676
585
  ]
677
586
  },
678
587
  "evidence": {
@@ -707,25 +616,35 @@
707
616
  "evidence"
708
617
  ]
709
618
  },
710
- "sourcePath": "src/fs/listDir",
711
- "exportName": "listDir",
712
- "sideEffect": "none"
619
+ "sourcePath": "src/iterm/itermSetBackgroundColor",
620
+ "exportName": "itermSetBackgroundColor",
621
+ "sideEffect": "local_write"
713
622
  },
714
623
  {
715
- "name": "readText",
716
- "description": "Read a UTF-8 text file from the sandbox.",
624
+ "name": "itermSendText",
625
+ "description": "Send text to an iTerm2 session as if typed.",
717
626
  "inputSchema": {
718
627
  "type": "object",
719
628
  "properties": {
720
- "path": {
629
+ "text": {
721
630
  "type": "string"
722
631
  },
723
- "maxBytes": {
632
+ "windowId": {
633
+ "type": "number"
634
+ },
635
+ "tabIndex": {
724
636
  "type": "number"
637
+ },
638
+ "sessionId": {
639
+ "type": "string"
640
+ },
641
+ "newline": {
642
+ "type": "object",
643
+ "properties": {}
725
644
  }
726
645
  },
727
646
  "required": [
728
- "path"
647
+ "text"
729
648
  ]
730
649
  },
731
650
  "outputSchema": {
@@ -734,20 +653,32 @@
734
653
  "result": {
735
654
  "type": "object",
736
655
  "properties": {
737
- "path": {
738
- "type": "string"
739
- },
740
656
  "text": {
741
657
  "type": "string"
742
658
  },
743
- "bytes": {
659
+ "newline": {
660
+ "type": "boolean"
661
+ },
662
+ "windowId": {
663
+ "type": "number"
664
+ },
665
+ "tabIndex": {
744
666
  "type": "number"
667
+ },
668
+ "sessionId": {
669
+ "type": "string"
670
+ },
671
+ "sessionUniqueId": {
672
+ "type": "string"
745
673
  }
746
674
  },
747
675
  "required": [
748
- "path",
749
676
  "text",
750
- "bytes"
677
+ "newline",
678
+ "windowId",
679
+ "tabIndex",
680
+ "sessionId",
681
+ "sessionUniqueId"
751
682
  ]
752
683
  },
753
684
  "evidence": {
@@ -782,47 +713,31 @@
782
713
  "evidence"
783
714
  ]
784
715
  },
785
- "sourcePath": "src/fs/readText",
786
- "exportName": "readText",
787
- "sideEffect": "none"
716
+ "sourcePath": "src/iterm/itermSendText",
717
+ "exportName": "itermSendText",
718
+ "sideEffect": "local_write"
788
719
  },
789
720
  {
790
- "name": "searchText",
791
- "description": "Search files in the sandbox by regex pattern, with glob filtering and match limits.",
721
+ "name": "itermRunCommandInSession",
722
+ "description": "Run a shell command in an iTerm2 session (panel).",
792
723
  "inputSchema": {
793
724
  "type": "object",
794
725
  "properties": {
795
- "root": {
796
- "type": "string"
797
- },
798
- "path": {
799
- "type": "string"
800
- },
801
- "dir": {
802
- "type": "string"
803
- },
804
- "directory": {
805
- "type": "string"
806
- },
807
- "query": {
808
- "type": "string"
809
- },
810
- "q": {
811
- "type": "string"
812
- },
813
- "glob": {
726
+ "command": {
814
727
  "type": "string"
815
728
  },
816
- "maxMatches": {
729
+ "windowId": {
817
730
  "type": "number"
818
731
  },
819
- "maxFiles": {
732
+ "tabIndex": {
820
733
  "type": "number"
734
+ },
735
+ "sessionId": {
736
+ "type": "string"
821
737
  }
822
738
  },
823
739
  "required": [
824
- "root",
825
- "query"
740
+ "command"
826
741
  ]
827
742
  },
828
743
  "outputSchema": {
@@ -831,51 +746,36 @@
831
746
  "result": {
832
747
  "type": "object",
833
748
  "properties": {
834
- "root": {
749
+ "command": {
835
750
  "type": "string"
836
751
  },
837
- "query": {
752
+ "text": {
838
753
  "type": "string"
839
754
  },
840
- "matches": {
841
- "type": "array",
842
- "items": {
843
- "type": "object",
844
- "properties": {
845
- "file": {
846
- "type": "string"
847
- },
848
- "lineNo": {
849
- "type": "number"
850
- },
851
- "excerpt": {
852
- "type": "string"
853
- }
854
- },
855
- "required": [
856
- "file",
857
- "lineNo",
858
- "excerpt"
859
- ]
860
- }
755
+ "newline": {
756
+ "type": "boolean"
861
757
  },
862
- "totalMatches": {
758
+ "windowId": {
863
759
  "type": "number"
864
760
  },
865
- "filesScanned": {
761
+ "tabIndex": {
866
762
  "type": "number"
867
763
  },
868
- "truncated": {
869
- "type": "boolean"
764
+ "sessionId": {
765
+ "type": "string"
766
+ },
767
+ "sessionUniqueId": {
768
+ "type": "string"
870
769
  }
871
770
  },
872
771
  "required": [
873
- "root",
874
- "query",
875
- "matches",
876
- "totalMatches",
877
- "filesScanned",
878
- "truncated"
772
+ "command",
773
+ "text",
774
+ "newline",
775
+ "windowId",
776
+ "tabIndex",
777
+ "sessionId",
778
+ "sessionUniqueId"
879
779
  ]
880
780
  },
881
781
  "evidence": {
@@ -910,23 +810,16 @@
910
810
  "evidence"
911
811
  ]
912
812
  },
913
- "sourcePath": "src/fs/searchText",
914
- "exportName": "searchText",
915
- "sideEffect": "none"
813
+ "sourcePath": "src/iterm/itermRunCommandInSession",
814
+ "exportName": "itermRunCommandInSession",
815
+ "sideEffect": "local_write"
916
816
  },
917
817
  {
918
- "name": "sha256",
919
- "description": "Compute SHA-256 hash of a file in the sandbox.",
818
+ "name": "itermListWindows",
819
+ "description": "List iTerm2 windows, tabs, and sessions.",
920
820
  "inputSchema": {
921
821
  "type": "object",
922
- "properties": {
923
- "path": {
924
- "type": "string"
925
- }
926
- },
927
- "required": [
928
- "path"
929
- ]
822
+ "properties": {}
930
823
  },
931
824
  "outputSchema": {
932
825
  "type": "object",
@@ -934,47 +827,90 @@
934
827
  "result": {
935
828
  "type": "object",
936
829
  "properties": {
937
- "sha256": {
938
- "type": "string"
939
- },
940
- "path": {
941
- "type": "string"
942
- },
943
- "bytes": {
944
- "type": "number"
945
- }
946
- },
947
- "required": [
948
- "sha256",
949
- "path",
950
- "bytes"
951
- ]
952
- },
953
- "evidence": {
954
- "type": "array",
955
- "items": {
956
- "type": "object",
957
- "properties": {
958
- "type": {
959
- "type": "string"
960
- },
961
- "ref": {
962
- "type": "string"
963
- },
964
- "summary": {
965
- "type": "string"
966
- },
967
- "createdAt": {
968
- "type": "string"
969
- }
970
- },
971
- "required": [
972
- "type",
973
- "ref",
974
- "summary",
975
- "createdAt"
976
- ]
977
- }
830
+ "sessions": {
831
+ "type": "array",
832
+ "items": {
833
+ "type": "object",
834
+ "properties": {
835
+ "windowId": {
836
+ "type": "number"
837
+ },
838
+ "windowName": {
839
+ "type": "string"
840
+ },
841
+ "tabIndex": {
842
+ "type": "number"
843
+ },
844
+ "tabIndexZeroBased": {
845
+ "type": "number"
846
+ },
847
+ "isCurrentTab": {
848
+ "type": "boolean"
849
+ },
850
+ "sessionId": {
851
+ "type": "string"
852
+ },
853
+ "sessionUniqueId": {
854
+ "type": "string"
855
+ },
856
+ "sessionName": {
857
+ "type": "string"
858
+ },
859
+ "tty": {
860
+ "type": "string"
861
+ },
862
+ "isCurrentSession": {
863
+ "type": "boolean"
864
+ }
865
+ },
866
+ "required": [
867
+ "windowId",
868
+ "windowName",
869
+ "tabIndex",
870
+ "tabIndexZeroBased",
871
+ "isCurrentTab",
872
+ "sessionId",
873
+ "sessionUniqueId",
874
+ "sessionName",
875
+ "tty",
876
+ "isCurrentSession"
877
+ ]
878
+ }
879
+ },
880
+ "count": {
881
+ "type": "number"
882
+ }
883
+ },
884
+ "required": [
885
+ "sessions",
886
+ "count"
887
+ ]
888
+ },
889
+ "evidence": {
890
+ "type": "array",
891
+ "items": {
892
+ "type": "object",
893
+ "properties": {
894
+ "type": {
895
+ "type": "string"
896
+ },
897
+ "ref": {
898
+ "type": "string"
899
+ },
900
+ "summary": {
901
+ "type": "string"
902
+ },
903
+ "createdAt": {
904
+ "type": "string"
905
+ }
906
+ },
907
+ "required": [
908
+ "type",
909
+ "ref",
910
+ "summary",
911
+ "createdAt"
912
+ ]
913
+ }
978
914
  }
979
915
  },
980
916
  "required": [
@@ -982,31 +918,491 @@
982
918
  "evidence"
983
919
  ]
984
920
  },
985
- "sourcePath": "src/fs/sha256",
986
- "exportName": "sha256",
921
+ "sourcePath": "src/iterm/itermListWindows",
922
+ "exportName": "itermListWindows",
923
+ "sideEffect": "none"
924
+ },
925
+ {
926
+ "name": "itermListCurrentWindowSessions",
927
+ "description": "List all sessions (panels) in the current iTerm2 window only.",
928
+ "inputSchema": {
929
+ "type": "object",
930
+ "properties": {}
931
+ },
932
+ "outputSchema": {
933
+ "type": "object",
934
+ "properties": {
935
+ "result": {
936
+ "type": "object",
937
+ "properties": {
938
+ "windowId": {
939
+ "type": "number"
940
+ },
941
+ "sessions": {
942
+ "type": "array",
943
+ "items": {
944
+ "type": "object",
945
+ "properties": {
946
+ "windowId": {
947
+ "type": "number"
948
+ },
949
+ "windowName": {
950
+ "type": "string"
951
+ },
952
+ "tabIndex": {
953
+ "type": "number"
954
+ },
955
+ "tabIndexZeroBased": {
956
+ "type": "number"
957
+ },
958
+ "isCurrentTab": {
959
+ "type": "boolean"
960
+ },
961
+ "sessionId": {
962
+ "type": "string"
963
+ },
964
+ "sessionUniqueId": {
965
+ "type": "string"
966
+ },
967
+ "sessionName": {
968
+ "type": "string"
969
+ },
970
+ "tty": {
971
+ "type": "string"
972
+ },
973
+ "isCurrentSession": {
974
+ "type": "boolean"
975
+ }
976
+ },
977
+ "required": [
978
+ "windowId",
979
+ "windowName",
980
+ "tabIndex",
981
+ "tabIndexZeroBased",
982
+ "isCurrentTab",
983
+ "sessionId",
984
+ "sessionUniqueId",
985
+ "sessionName",
986
+ "tty",
987
+ "isCurrentSession"
988
+ ]
989
+ }
990
+ },
991
+ "count": {
992
+ "type": "number"
993
+ }
994
+ },
995
+ "required": [
996
+ "windowId",
997
+ "sessions",
998
+ "count"
999
+ ]
1000
+ },
1001
+ "evidence": {
1002
+ "type": "array",
1003
+ "items": {
1004
+ "type": "object",
1005
+ "properties": {
1006
+ "type": {
1007
+ "type": "string"
1008
+ },
1009
+ "ref": {
1010
+ "type": "string"
1011
+ },
1012
+ "summary": {
1013
+ "type": "string"
1014
+ },
1015
+ "createdAt": {
1016
+ "type": "string"
1017
+ }
1018
+ },
1019
+ "required": [
1020
+ "type",
1021
+ "ref",
1022
+ "summary",
1023
+ "createdAt"
1024
+ ]
1025
+ }
1026
+ }
1027
+ },
1028
+ "required": [
1029
+ "result",
1030
+ "evidence"
1031
+ ]
1032
+ },
1033
+ "sourcePath": "src/iterm/itermListCurrentWindowSessions",
1034
+ "exportName": "itermListCurrentWindowSessions",
1035
+ "sideEffect": "none"
1036
+ },
1037
+ {
1038
+ "name": "itermGetSessionInfo",
1039
+ "description": "Get detailed info for a specific iTerm2 session (panel) by id / uniqueId / tty.",
1040
+ "inputSchema": {
1041
+ "type": "object",
1042
+ "properties": {
1043
+ "sessionId": {
1044
+ "type": "string"
1045
+ },
1046
+ "sessionUniqueId": {
1047
+ "type": "string"
1048
+ },
1049
+ "tty": {
1050
+ "type": "string"
1051
+ }
1052
+ }
1053
+ },
1054
+ "outputSchema": {
1055
+ "type": "object",
1056
+ "properties": {
1057
+ "result": {
1058
+ "type": "object",
1059
+ "properties": {
1060
+ "windowId": {
1061
+ "type": "number"
1062
+ },
1063
+ "windowName": {
1064
+ "type": "string"
1065
+ },
1066
+ "tabIndex": {
1067
+ "type": "number"
1068
+ },
1069
+ "tabIndexZeroBased": {
1070
+ "type": "number"
1071
+ },
1072
+ "isCurrentTab": {
1073
+ "type": "boolean"
1074
+ },
1075
+ "sessionId": {
1076
+ "type": "string"
1077
+ },
1078
+ "sessionUniqueId": {
1079
+ "type": "string"
1080
+ },
1081
+ "sessionName": {
1082
+ "type": "string"
1083
+ },
1084
+ "tty": {
1085
+ "type": "string"
1086
+ },
1087
+ "isCurrentSession": {
1088
+ "type": "boolean"
1089
+ }
1090
+ },
1091
+ "required": [
1092
+ "windowId",
1093
+ "windowName",
1094
+ "tabIndex",
1095
+ "tabIndexZeroBased",
1096
+ "isCurrentTab",
1097
+ "sessionId",
1098
+ "sessionUniqueId",
1099
+ "sessionName",
1100
+ "tty",
1101
+ "isCurrentSession"
1102
+ ]
1103
+ },
1104
+ "evidence": {
1105
+ "type": "array",
1106
+ "items": {
1107
+ "type": "object",
1108
+ "properties": {
1109
+ "type": {
1110
+ "type": "string"
1111
+ },
1112
+ "ref": {
1113
+ "type": "string"
1114
+ },
1115
+ "summary": {
1116
+ "type": "string"
1117
+ },
1118
+ "createdAt": {
1119
+ "type": "string"
1120
+ }
1121
+ },
1122
+ "required": [
1123
+ "type",
1124
+ "ref",
1125
+ "summary",
1126
+ "createdAt"
1127
+ ]
1128
+ }
1129
+ }
1130
+ },
1131
+ "required": [
1132
+ "result",
1133
+ "evidence"
1134
+ ]
1135
+ },
1136
+ "sourcePath": "src/iterm/itermGetSessionInfo",
1137
+ "exportName": "itermGetSessionInfo",
1138
+ "sideEffect": "none"
1139
+ },
1140
+ {
1141
+ "name": "analyzeLog",
1142
+ "description": "Analyze log text via OpenAI-compatible LLM, identifying errors, root causes, and suggestions.",
1143
+ "inputSchema": {
1144
+ "type": "object",
1145
+ "properties": {
1146
+ "logText": {
1147
+ "type": "string"
1148
+ },
1149
+ "log": {
1150
+ "type": "string"
1151
+ },
1152
+ "text": {
1153
+ "type": "string"
1154
+ },
1155
+ "chunkSize": {
1156
+ "type": "number"
1157
+ },
1158
+ "chunkOverlap": {
1159
+ "type": "number"
1160
+ },
1161
+ "model": {
1162
+ "type": "string"
1163
+ },
1164
+ "timeoutMs": {
1165
+ "type": "number"
1166
+ }
1167
+ },
1168
+ "required": [
1169
+ "logText"
1170
+ ]
1171
+ },
1172
+ "outputSchema": {
1173
+ "type": "object",
1174
+ "properties": {
1175
+ "result": {
1176
+ "type": "object",
1177
+ "properties": {
1178
+ "analysis": {
1179
+ "type": "string"
1180
+ },
1181
+ "chunksProcessed": {
1182
+ "type": "number"
1183
+ }
1184
+ },
1185
+ "required": [
1186
+ "analysis",
1187
+ "chunksProcessed"
1188
+ ]
1189
+ },
1190
+ "evidence": {
1191
+ "type": "array",
1192
+ "items": {
1193
+ "type": "object",
1194
+ "properties": {
1195
+ "type": {
1196
+ "type": "string"
1197
+ },
1198
+ "summary": {
1199
+ "type": "string"
1200
+ },
1201
+ "createdAt": {
1202
+ "type": "string"
1203
+ }
1204
+ },
1205
+ "required": [
1206
+ "type",
1207
+ "summary",
1208
+ "createdAt"
1209
+ ]
1210
+ }
1211
+ }
1212
+ },
1213
+ "required": [
1214
+ "result",
1215
+ "evidence"
1216
+ ]
1217
+ },
1218
+ "sourcePath": "src/analyze/analyzeLog",
1219
+ "exportName": "analyzeLog",
987
1220
  "sideEffect": "none"
988
1221
  },
989
1222
  {
990
- "name": "writeText",
991
- "description": "Create or overwrite a UTF-8 text file in the sandbox, with auto mkdir and overwrite protection.",
1223
+ "name": "analyzeProjectRepo",
1224
+ "description": "Build an index for a source-code repository and generate a whole-project understanding summary.",
1225
+ "inputSchema": {
1226
+ "type": "object",
1227
+ "properties": {
1228
+ "path": {
1229
+ "type": "string"
1230
+ },
1231
+ "repoPath": {
1232
+ "type": "string"
1233
+ },
1234
+ "projectPath": {
1235
+ "type": "string"
1236
+ },
1237
+ "outputIndexPath": {
1238
+ "type": "string"
1239
+ },
1240
+ "includeHidden": {
1241
+ "type": "object",
1242
+ "properties": {}
1243
+ },
1244
+ "maxFiles": {
1245
+ "type": "number"
1246
+ },
1247
+ "maxFileBytes": {
1248
+ "type": "number"
1249
+ },
1250
+ "includeExtensions": {
1251
+ "type": "array",
1252
+ "items": {
1253
+ "type": "string"
1254
+ }
1255
+ },
1256
+ "excludeDirs": {
1257
+ "type": "array",
1258
+ "items": {
1259
+ "type": "string"
1260
+ }
1261
+ },
1262
+ "model": {
1263
+ "type": "string"
1264
+ },
1265
+ "timeoutMs": {
1266
+ "type": "number"
1267
+ }
1268
+ },
1269
+ "required": [
1270
+ "path"
1271
+ ]
1272
+ },
1273
+ "outputSchema": {
1274
+ "type": "object",
1275
+ "properties": {
1276
+ "result": {
1277
+ "type": "object",
1278
+ "properties": {
1279
+ "repoRoot": {
1280
+ "type": "string"
1281
+ },
1282
+ "indexPath": {
1283
+ "type": "string"
1284
+ },
1285
+ "totalIndexedFiles": {
1286
+ "type": "number"
1287
+ },
1288
+ "truncated": {
1289
+ "type": "boolean"
1290
+ },
1291
+ "skippedBinary": {
1292
+ "type": "number"
1293
+ },
1294
+ "indexSplit": {
1295
+ "type": "boolean"
1296
+ },
1297
+ "indexPartPaths": {
1298
+ "type": "array",
1299
+ "items": {
1300
+ "type": "string"
1301
+ }
1302
+ },
1303
+ "llmUsed": {
1304
+ "type": "boolean"
1305
+ },
1306
+ "partialCount": {
1307
+ "type": "number"
1308
+ },
1309
+ "model": {
1310
+ "type": "string"
1311
+ },
1312
+ "understanding": {
1313
+ "type": "string"
1314
+ }
1315
+ },
1316
+ "required": [
1317
+ "repoRoot",
1318
+ "indexPath",
1319
+ "totalIndexedFiles",
1320
+ "truncated",
1321
+ "skippedBinary",
1322
+ "indexSplit",
1323
+ "indexPartPaths",
1324
+ "llmUsed",
1325
+ "partialCount",
1326
+ "model",
1327
+ "understanding"
1328
+ ]
1329
+ },
1330
+ "evidence": {
1331
+ "type": "array",
1332
+ "items": {
1333
+ "type": "object",
1334
+ "properties": {
1335
+ "type": {
1336
+ "type": "string"
1337
+ },
1338
+ "summary": {
1339
+ "type": "string"
1340
+ },
1341
+ "createdAt": {
1342
+ "type": "string"
1343
+ }
1344
+ },
1345
+ "required": [
1346
+ "type",
1347
+ "summary",
1348
+ "createdAt"
1349
+ ]
1350
+ }
1351
+ }
1352
+ },
1353
+ "required": [
1354
+ "result",
1355
+ "evidence"
1356
+ ]
1357
+ },
1358
+ "sourcePath": "src/analyze/analyzeProjectRepo",
1359
+ "exportName": "analyzeProjectRepo",
1360
+ "sideEffect": "local_write"
1361
+ },
1362
+ {
1363
+ "name": "askProjectRepo",
1364
+ "description": "Ask a concrete question about a repository based on .project-index.json (or split parts).",
992
1365
  "inputSchema": {
993
1366
  "type": "object",
994
1367
  "properties": {
995
1368
  "path": {
996
1369
  "type": "string"
997
1370
  },
998
- "content": {
1371
+ "repoPath": {
999
1372
  "type": "string"
1000
1373
  },
1001
- "overwrite": {
1002
- "type": "object",
1003
- "properties": {}
1374
+ "projectPath": {
1375
+ "type": "string"
1004
1376
  },
1005
- "mkdirp": {
1006
- "type": "object",
1007
- "properties": {}
1377
+ "question": {
1378
+ "type": "string"
1379
+ },
1380
+ "query": {
1381
+ "type": "string"
1382
+ },
1383
+ "q": {
1384
+ "type": "string"
1385
+ },
1386
+ "indexPath": {
1387
+ "type": "string"
1388
+ },
1389
+ "topK": {
1390
+ "type": "number"
1391
+ },
1392
+ "maxSnippetChars": {
1393
+ "type": "number"
1394
+ },
1395
+ "model": {
1396
+ "type": "string"
1397
+ },
1398
+ "timeoutMs": {
1399
+ "type": "number"
1008
1400
  }
1009
- }
1401
+ },
1402
+ "required": [
1403
+ "path",
1404
+ "question"
1405
+ ]
1010
1406
  },
1011
1407
  "outputSchema": {
1012
1408
  "type": "object",
@@ -1014,20 +1410,70 @@
1014
1410
  "result": {
1015
1411
  "type": "object",
1016
1412
  "properties": {
1017
- "path": {
1413
+ "repoRoot": {
1018
1414
  "type": "string"
1019
1415
  },
1020
- "bytes": {
1021
- "type": "number"
1416
+ "indexPath": {
1417
+ "type": "string"
1022
1418
  },
1023
- "sha256": {
1419
+ "question": {
1420
+ "type": "string"
1421
+ },
1422
+ "model": {
1423
+ "type": "string"
1424
+ },
1425
+ "answer": {
1426
+ "type": "string"
1427
+ },
1428
+ "matchedFiles": {
1429
+ "type": "array",
1430
+ "items": {
1431
+ "type": "object",
1432
+ "properties": {
1433
+ "path": {
1434
+ "type": "string"
1435
+ },
1436
+ "score": {
1437
+ "type": "number"
1438
+ },
1439
+ "source": {
1440
+ "type": "string",
1441
+ "enum": [
1442
+ "index",
1443
+ "live_scan"
1444
+ ]
1445
+ }
1446
+ },
1447
+ "required": [
1448
+ "path",
1449
+ "score",
1450
+ "source"
1451
+ ]
1452
+ }
1453
+ },
1454
+ "retrievalMode": {
1024
1455
  "type": "string"
1456
+ },
1457
+ "deepReadUsed": {
1458
+ "type": "boolean"
1459
+ },
1460
+ "deepReadPaths": {
1461
+ "type": "array",
1462
+ "items": {
1463
+ "type": "string"
1464
+ }
1025
1465
  }
1026
1466
  },
1027
1467
  "required": [
1028
- "path",
1029
- "bytes",
1030
- "sha256"
1468
+ "repoRoot",
1469
+ "indexPath",
1470
+ "question",
1471
+ "model",
1472
+ "answer",
1473
+ "matchedFiles",
1474
+ "retrievalMode",
1475
+ "deepReadUsed",
1476
+ "deepReadPaths"
1031
1477
  ]
1032
1478
  },
1033
1479
  "evidence": {
@@ -1038,9 +1484,6 @@
1038
1484
  "type": {
1039
1485
  "type": "string"
1040
1486
  },
1041
- "ref": {
1042
- "type": "string"
1043
- },
1044
1487
  "summary": {
1045
1488
  "type": "string"
1046
1489
  },
@@ -1050,7 +1493,6 @@
1050
1493
  },
1051
1494
  "required": [
1052
1495
  "type",
1053
- "ref",
1054
1496
  "summary",
1055
1497
  "createdAt"
1056
1498
  ]
@@ -1062,48 +1504,32 @@
1062
1504
  "evidence"
1063
1505
  ]
1064
1506
  },
1065
- "sourcePath": "src/fs/writeText",
1066
- "exportName": "writeText",
1067
- "sideEffect": "local_write"
1507
+ "sourcePath": "src/analyze/askProjectRepo",
1508
+ "exportName": "askProjectRepo",
1509
+ "sideEffect": "none"
1068
1510
  },
1069
1511
  {
1070
- "name": "gitRead",
1071
- "description": "Read repository information via allowlisted git read-only subcommands.",
1512
+ "name": "embedText",
1513
+ "description": "Convert text into embedding vectors via OpenAI-compatible API.",
1072
1514
  "inputSchema": {
1073
1515
  "type": "object",
1074
1516
  "properties": {
1075
- "path": {
1076
- "type": "string"
1077
- },
1078
- "repoPath": {
1079
- "type": "string"
1080
- },
1081
- "command": {
1082
- "type": "string"
1083
- },
1084
- "subcommand": {
1517
+ "text": {
1085
1518
  "type": "string"
1086
1519
  },
1087
- "args": {
1520
+ "texts": {
1088
1521
  "type": "array",
1089
1522
  "items": {
1090
1523
  "type": "string"
1091
1524
  }
1092
1525
  },
1093
- "arguments": {
1094
- "type": "array",
1095
- "items": {
1096
- "type": "string"
1097
- }
1526
+ "model": {
1527
+ "type": "string"
1098
1528
  },
1099
1529
  "timeoutMs": {
1100
1530
  "type": "number"
1101
1531
  }
1102
- },
1103
- "required": [
1104
- "path",
1105
- "command"
1106
- ]
1532
+ }
1107
1533
  },
1108
1534
  "outputSchema": {
1109
1535
  "type": "object",
@@ -1111,28 +1537,30 @@
1111
1537
  "result": {
1112
1538
  "type": "object",
1113
1539
  "properties": {
1114
- "path": {
1115
- "type": "string"
1116
- },
1117
- "command": {
1118
- "type": "string"
1540
+ "embeddings": {
1541
+ "type": "array",
1542
+ "items": {
1543
+ "type": "array",
1544
+ "items": {
1545
+ "type": "number"
1546
+ }
1547
+ }
1119
1548
  },
1120
- "stdout": {
1549
+ "model": {
1121
1550
  "type": "string"
1122
1551
  },
1123
- "stderr": {
1124
- "type": "string"
1552
+ "dimensions": {
1553
+ "type": "number"
1125
1554
  },
1126
- "exitCode": {
1555
+ "count": {
1127
1556
  "type": "number"
1128
1557
  }
1129
1558
  },
1130
1559
  "required": [
1131
- "path",
1132
- "command",
1133
- "stdout",
1134
- "stderr",
1135
- "exitCode"
1560
+ "embeddings",
1561
+ "model",
1562
+ "dimensions",
1563
+ "count"
1136
1564
  ]
1137
1565
  },
1138
1566
  "evidence": {
@@ -1163,60 +1591,83 @@
1163
1591
  "evidence"
1164
1592
  ]
1165
1593
  },
1166
- "sourcePath": "src/git/gitTools",
1167
- "exportName": "gitRead",
1594
+ "sourcePath": "src/analyze/embedText",
1595
+ "exportName": "embedText",
1168
1596
  "sideEffect": "none"
1169
1597
  },
1170
1598
  {
1171
- "name": "gitLogHistory",
1172
- "description": "Track detailed git commit history, optionally scoped to a file and including patches.",
1599
+ "name": "runCommand",
1600
+ "description": "Run an allowlisted command in the sandbox via spawn (no shell), with timeout and output limits.",
1173
1601
  "inputSchema": {
1174
1602
  "type": "object",
1175
1603
  "properties": {
1176
- "path": {
1177
- "type": "string"
1178
- },
1179
- "repoPath": {
1180
- "type": "string"
1181
- },
1182
- "filePath": {
1604
+ "command": {
1183
1605
  "type": "string"
1184
1606
  },
1185
- "maxCount": {
1186
- "type": "number"
1187
- },
1188
- "since": {
1607
+ "cmd": {
1189
1608
  "type": "string"
1190
1609
  },
1191
- "until": {
1192
- "type": "string"
1610
+ "args": {
1611
+ "type": "array",
1612
+ "items": {
1613
+ "type": "string"
1614
+ }
1193
1615
  },
1194
- "author": {
1195
- "type": "string"
1616
+ "arguments": {
1617
+ "type": "array",
1618
+ "items": {
1619
+ "type": "string"
1620
+ }
1196
1621
  },
1197
- "grep": {
1622
+ "cwd": {
1198
1623
  "type": "string"
1199
1624
  },
1200
- "revisionRange": {
1625
+ "timeoutMs": {
1626
+ "type": "number"
1627
+ }
1628
+ },
1629
+ "required": [
1630
+ "command"
1631
+ ]
1632
+ },
1633
+ "outputSchema": {
1634
+ "type": "object",
1635
+ "properties": {
1636
+ "result": {},
1637
+ "evidence": {
1638
+ "type": "array",
1639
+ "items": {}
1640
+ }
1641
+ },
1642
+ "required": [
1643
+ "result",
1644
+ "evidence"
1645
+ ]
1646
+ },
1647
+ "sourcePath": "src/exec/runCommand",
1648
+ "exportName": "runCommand",
1649
+ "sideEffect": "local_write"
1650
+ },
1651
+ {
1652
+ "name": "deletePath",
1653
+ "description": "Delete a file or directory in the sandbox. Requires confirm=true to proceed.",
1654
+ "inputSchema": {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "path": {
1201
1658
  "type": "string"
1202
1659
  },
1203
- "follow": {
1204
- "type": "object",
1205
- "properties": {}
1206
- },
1207
- "includePatch": {
1660
+ "recursive": {
1208
1661
  "type": "object",
1209
1662
  "properties": {}
1210
1663
  },
1211
- "patchMaxCommits": {
1212
- "type": "number"
1213
- },
1214
- "timeoutMs": {
1215
- "type": "number"
1664
+ "confirm": {
1665
+ "type": "boolean"
1216
1666
  }
1217
1667
  },
1218
1668
  "required": [
1219
- "path"
1669
+ "path",
1670
+ "confirm"
1220
1671
  ]
1221
1672
  },
1222
1673
  "outputSchema": {
@@ -1228,71 +1679,17 @@
1228
1679
  "path": {
1229
1680
  "type": "string"
1230
1681
  },
1231
- "filePath": {
1232
- "type": "string"
1233
- },
1234
- "total": {
1235
- "type": "number"
1236
- },
1237
- "commits": {
1238
- "type": "array",
1239
- "items": {
1240
- "type": "object",
1241
- "properties": {
1242
- "hash": {
1243
- "type": "string"
1244
- },
1245
- "authorName": {
1246
- "type": "string"
1247
- },
1248
- "authorEmail": {
1249
- "type": "string"
1250
- },
1251
- "date": {
1252
- "type": "string"
1253
- },
1254
- "subject": {
1255
- "type": "string"
1256
- },
1257
- "body": {
1258
- "type": "string"
1259
- }
1260
- },
1261
- "required": [
1262
- "hash",
1263
- "authorName",
1264
- "authorEmail",
1265
- "date",
1266
- "subject",
1267
- "body"
1268
- ]
1269
- }
1682
+ "deleted": {
1683
+ "type": "boolean"
1270
1684
  },
1271
- "patches": {
1272
- "type": "array",
1273
- "items": {
1274
- "type": "object",
1275
- "properties": {
1276
- "hash": {
1277
- "type": "string"
1278
- },
1279
- "patch": {
1280
- "type": "string"
1281
- }
1282
- },
1283
- "required": [
1284
- "hash",
1285
- "patch"
1286
- ]
1287
- }
1685
+ "type": {
1686
+ "type": "string"
1288
1687
  }
1289
1688
  },
1290
1689
  "required": [
1291
1690
  "path",
1292
- "filePath",
1293
- "total",
1294
- "commits",
1295
- "patches"
1691
+ "deleted",
1692
+ "type"
1296
1693
  ]
1297
1694
  },
1298
1695
  "evidence": {
@@ -1303,6 +1700,9 @@
1303
1700
  "type": {
1304
1701
  "type": "string"
1305
1702
  },
1703
+ "ref": {
1704
+ "type": "string"
1705
+ },
1306
1706
  "summary": {
1307
1707
  "type": "string"
1308
1708
  },
@@ -1312,6 +1712,7 @@
1312
1712
  },
1313
1713
  "required": [
1314
1714
  "type",
1715
+ "ref",
1315
1716
  "summary",
1316
1717
  "createdAt"
1317
1718
  ]
@@ -1323,40 +1724,36 @@
1323
1724
  "evidence"
1324
1725
  ]
1325
1726
  },
1326
- "sourcePath": "src/git/gitTools",
1327
- "exportName": "gitLogHistory",
1328
- "sideEffect": "none"
1727
+ "sourcePath": "src/fs/deletePath",
1728
+ "exportName": "deletePath",
1729
+ "sideEffect": "destructive"
1329
1730
  },
1330
1731
  {
1331
- "name": "gitSwitchBranch",
1332
- "description": "Switch git branch in a repository.",
1732
+ "name": "listDir",
1733
+ "description": "List files and subdirectories in a sandbox directory, optionally recursive with depth limit.",
1333
1734
  "inputSchema": {
1334
1735
  "type": "object",
1335
1736
  "properties": {
1336
1737
  "path": {
1337
1738
  "type": "string"
1338
1739
  },
1339
- "repoPath": {
1340
- "type": "string"
1341
- },
1342
- "branch": {
1343
- "type": "string"
1740
+ "maxEntries": {
1741
+ "type": "number"
1344
1742
  },
1345
- "create": {
1743
+ "includeHidden": {
1346
1744
  "type": "object",
1347
1745
  "properties": {}
1348
1746
  },
1349
- "trackRemote": {
1747
+ "recursive": {
1350
1748
  "type": "object",
1351
1749
  "properties": {}
1352
1750
  },
1353
- "timeoutMs": {
1751
+ "maxDepth": {
1354
1752
  "type": "number"
1355
1753
  }
1356
1754
  },
1357
1755
  "required": [
1358
- "path",
1359
- "branch"
1756
+ "path"
1360
1757
  ]
1361
1758
  },
1362
1759
  "outputSchema": {
@@ -1368,33 +1765,50 @@
1368
1765
  "path": {
1369
1766
  "type": "string"
1370
1767
  },
1371
- "branch": {
1372
- "type": "string"
1768
+ "entries": {
1769
+ "type": "array",
1770
+ "items": {
1771
+ "type": "object",
1772
+ "properties": {
1773
+ "name": {
1774
+ "type": "string"
1775
+ },
1776
+ "kind": {
1777
+ "type": "string",
1778
+ "enum": [
1779
+ "directory",
1780
+ "file",
1781
+ "symlink",
1782
+ "other"
1783
+ ]
1784
+ },
1785
+ "size": {
1786
+ "type": "number"
1787
+ },
1788
+ "mtime": {
1789
+ "type": "string"
1790
+ }
1791
+ },
1792
+ "required": [
1793
+ "name",
1794
+ "kind",
1795
+ "size",
1796
+ "mtime"
1797
+ ]
1798
+ }
1373
1799
  },
1374
- "created": {
1375
- "type": "boolean"
1800
+ "totalEntries": {
1801
+ "type": "number"
1376
1802
  },
1377
- "trackedRemote": {
1803
+ "truncated": {
1378
1804
  "type": "boolean"
1379
- },
1380
- "stdout": {
1381
- "type": "string"
1382
- },
1383
- "stderr": {
1384
- "type": "string"
1385
- },
1386
- "exitCode": {
1387
- "type": "number"
1388
1805
  }
1389
1806
  },
1390
1807
  "required": [
1391
1808
  "path",
1392
- "branch",
1393
- "created",
1394
- "trackedRemote",
1395
- "stdout",
1396
- "stderr",
1397
- "exitCode"
1809
+ "entries",
1810
+ "totalEntries",
1811
+ "truncated"
1398
1812
  ]
1399
1813
  },
1400
1814
  "evidence": {
@@ -1405,6 +1819,9 @@
1405
1819
  "type": {
1406
1820
  "type": "string"
1407
1821
  },
1822
+ "ref": {
1823
+ "type": "string"
1824
+ },
1408
1825
  "summary": {
1409
1826
  "type": "string"
1410
1827
  },
@@ -1414,6 +1831,7 @@
1414
1831
  },
1415
1832
  "required": [
1416
1833
  "type",
1834
+ "ref",
1417
1835
  "summary",
1418
1836
  "createdAt"
1419
1837
  ]
@@ -1425,37 +1843,20 @@
1425
1843
  "evidence"
1426
1844
  ]
1427
1845
  },
1428
- "sourcePath": "src/git/gitTools",
1429
- "exportName": "gitSwitchBranch",
1430
- "sideEffect": "local_write"
1846
+ "sourcePath": "src/fs/listDir",
1847
+ "exportName": "listDir",
1848
+ "sideEffect": "none"
1431
1849
  },
1432
1850
  {
1433
- "name": "gitPull",
1434
- "description": "Pull updates from remote in a repository.",
1851
+ "name": "readText",
1852
+ "description": "Read a UTF-8 text file from the sandbox.",
1435
1853
  "inputSchema": {
1436
1854
  "type": "object",
1437
1855
  "properties": {
1438
1856
  "path": {
1439
1857
  "type": "string"
1440
1858
  },
1441
- "repoPath": {
1442
- "type": "string"
1443
- },
1444
- "remote": {
1445
- "type": "string"
1446
- },
1447
- "branch": {
1448
- "type": "string"
1449
- },
1450
- "rebase": {
1451
- "type": "object",
1452
- "properties": {}
1453
- },
1454
- "ffOnly": {
1455
- "type": "object",
1456
- "properties": {}
1457
- },
1458
- "timeoutMs": {
1859
+ "maxBytes": {
1459
1860
  "type": "number"
1460
1861
  }
1461
1862
  },
@@ -1472,37 +1873,17 @@
1472
1873
  "path": {
1473
1874
  "type": "string"
1474
1875
  },
1475
- "remote": {
1476
- "type": "string"
1477
- },
1478
- "branch": {
1479
- "type": "string"
1480
- },
1481
- "ffOnly": {
1482
- "type": "boolean"
1483
- },
1484
- "rebase": {
1485
- "type": "boolean"
1486
- },
1487
- "stdout": {
1488
- "type": "string"
1489
- },
1490
- "stderr": {
1876
+ "text": {
1491
1877
  "type": "string"
1492
1878
  },
1493
- "exitCode": {
1879
+ "bytes": {
1494
1880
  "type": "number"
1495
1881
  }
1496
1882
  },
1497
1883
  "required": [
1498
1884
  "path",
1499
- "remote",
1500
- "branch",
1501
- "ffOnly",
1502
- "rebase",
1503
- "stdout",
1504
- "stderr",
1505
- "exitCode"
1885
+ "text",
1886
+ "bytes"
1506
1887
  ]
1507
1888
  },
1508
1889
  "evidence": {
@@ -1513,6 +1894,9 @@
1513
1894
  "type": {
1514
1895
  "type": "string"
1515
1896
  },
1897
+ "ref": {
1898
+ "type": "string"
1899
+ },
1516
1900
  "summary": {
1517
1901
  "type": "string"
1518
1902
  },
@@ -1522,6 +1906,7 @@
1522
1906
  },
1523
1907
  "required": [
1524
1908
  "type",
1909
+ "ref",
1525
1910
  "summary",
1526
1911
  "createdAt"
1527
1912
  ]
@@ -1533,42 +1918,47 @@
1533
1918
  "evidence"
1534
1919
  ]
1535
1920
  },
1536
- "sourcePath": "src/git/gitTools",
1537
- "exportName": "gitPull",
1538
- "sideEffect": "local_write"
1921
+ "sourcePath": "src/fs/readText",
1922
+ "exportName": "readText",
1923
+ "sideEffect": "none"
1539
1924
  },
1540
1925
  {
1541
- "name": "gitPrView",
1542
- "description": "View a GitHub pull request using GitHub CLI (gh pr view).",
1926
+ "name": "searchText",
1927
+ "description": "Search files in the sandbox by regex pattern, with glob filtering and match limits.",
1543
1928
  "inputSchema": {
1544
1929
  "type": "object",
1545
1930
  "properties": {
1931
+ "root": {
1932
+ "type": "string"
1933
+ },
1546
1934
  "path": {
1547
1935
  "type": "string"
1548
1936
  },
1549
- "repoPath": {
1937
+ "dir": {
1938
+ "type": "string"
1939
+ },
1940
+ "directory": {
1941
+ "type": "string"
1942
+ },
1943
+ "query": {
1944
+ "type": "string"
1945
+ },
1946
+ "q": {
1947
+ "type": "string"
1948
+ },
1949
+ "glob": {
1550
1950
  "type": "string"
1551
1951
  },
1552
- "prNumber": {
1952
+ "maxMatches": {
1553
1953
  "type": "number"
1554
1954
  },
1555
- "comments": {
1556
- "type": "object",
1557
- "properties": {}
1558
- },
1559
- "jsonFields": {
1560
- "type": "array",
1561
- "items": {
1562
- "type": "string"
1563
- }
1564
- },
1565
- "timeoutMs": {
1955
+ "maxFiles": {
1566
1956
  "type": "number"
1567
1957
  }
1568
1958
  },
1569
1959
  "required": [
1570
- "path",
1571
- "prNumber"
1960
+ "root",
1961
+ "query"
1572
1962
  ]
1573
1963
  },
1574
1964
  "outputSchema": {
@@ -1577,25 +1967,51 @@
1577
1967
  "result": {
1578
1968
  "type": "object",
1579
1969
  "properties": {
1580
- "path": {
1970
+ "root": {
1581
1971
  "type": "string"
1582
1972
  },
1583
- "prNumber": {
1584
- "type": "number"
1973
+ "query": {
1974
+ "type": "string"
1585
1975
  },
1586
- "fields": {
1976
+ "matches": {
1587
1977
  "type": "array",
1588
1978
  "items": {
1589
- "type": "string"
1979
+ "type": "object",
1980
+ "properties": {
1981
+ "file": {
1982
+ "type": "string"
1983
+ },
1984
+ "lineNo": {
1985
+ "type": "number"
1986
+ },
1987
+ "excerpt": {
1988
+ "type": "string"
1989
+ }
1990
+ },
1991
+ "required": [
1992
+ "file",
1993
+ "lineNo",
1994
+ "excerpt"
1995
+ ]
1590
1996
  }
1591
1997
  },
1592
- "pr": {}
1998
+ "totalMatches": {
1999
+ "type": "number"
2000
+ },
2001
+ "filesScanned": {
2002
+ "type": "number"
2003
+ },
2004
+ "truncated": {
2005
+ "type": "boolean"
2006
+ }
1593
2007
  },
1594
2008
  "required": [
1595
- "path",
1596
- "prNumber",
1597
- "fields",
1598
- "pr"
2009
+ "root",
2010
+ "query",
2011
+ "matches",
2012
+ "totalMatches",
2013
+ "filesScanned",
2014
+ "truncated"
1599
2015
  ]
1600
2016
  },
1601
2017
  "evidence": {
@@ -1606,6 +2022,9 @@
1606
2022
  "type": {
1607
2023
  "type": "string"
1608
2024
  },
2025
+ "ref": {
2026
+ "type": "string"
2027
+ },
1609
2028
  "summary": {
1610
2029
  "type": "string"
1611
2030
  },
@@ -1615,6 +2034,7 @@
1615
2034
  },
1616
2035
  "required": [
1617
2036
  "type",
2037
+ "ref",
1618
2038
  "summary",
1619
2039
  "createdAt"
1620
2040
  ]
@@ -1626,49 +2046,22 @@
1626
2046
  "evidence"
1627
2047
  ]
1628
2048
  },
1629
- "sourcePath": "src/git/gitTools",
1630
- "exportName": "gitPrView",
2049
+ "sourcePath": "src/fs/searchText",
2050
+ "exportName": "searchText",
1631
2051
  "sideEffect": "none"
1632
2052
  },
1633
2053
  {
1634
- "name": "downloadFile",
1635
- "description": "Download a file from a URL and save to the sandbox with size limit and SHA-256 integrity hash.",
2054
+ "name": "sha256",
2055
+ "description": "Compute SHA-256 hash of a file in the sandbox.",
1636
2056
  "inputSchema": {
1637
2057
  "type": "object",
1638
2058
  "properties": {
1639
- "url": {
1640
- "type": "string"
1641
- },
1642
- "uri": {
1643
- "type": "string"
1644
- },
1645
- "destPath": {
1646
- "type": "string"
1647
- },
1648
- "destination": {
1649
- "type": "string"
1650
- },
1651
- "filePath": {
2059
+ "path": {
1652
2060
  "type": "string"
1653
- },
1654
- "headers": {
1655
- "type": "object",
1656
- "properties": {}
1657
- },
1658
- "timeoutMs": {
1659
- "type": "number"
1660
- },
1661
- "maxBytes": {
1662
- "type": "number"
1663
- },
1664
- "overwrite": {
1665
- "type": "object",
1666
- "properties": {}
1667
2061
  }
1668
2062
  },
1669
2063
  "required": [
1670
- "url",
1671
- "destPath"
2064
+ "path"
1672
2065
  ]
1673
2066
  },
1674
2067
  "outputSchema": {
@@ -1677,28 +2070,20 @@
1677
2070
  "result": {
1678
2071
  "type": "object",
1679
2072
  "properties": {
1680
- "destPath": {
2073
+ "sha256": {
1681
2074
  "type": "string"
1682
2075
  },
1683
- "bytes": {
1684
- "type": "number"
1685
- },
1686
- "sha256": {
2076
+ "path": {
1687
2077
  "type": "string"
1688
2078
  },
1689
- "status": {
2079
+ "bytes": {
1690
2080
  "type": "number"
1691
- },
1692
- "url": {
1693
- "type": "string"
1694
2081
  }
1695
2082
  },
1696
2083
  "required": [
1697
- "destPath",
1698
- "bytes",
1699
2084
  "sha256",
1700
- "status",
1701
- "url"
2085
+ "path",
2086
+ "bytes"
1702
2087
  ]
1703
2088
  },
1704
2089
  "evidence": {
@@ -1733,35 +2118,31 @@
1733
2118
  "evidence"
1734
2119
  ]
1735
2120
  },
1736
- "sourcePath": "src/http/downloadFile",
1737
- "exportName": "downloadFile",
1738
- "sideEffect": "local_write"
2121
+ "sourcePath": "src/fs/sha256",
2122
+ "exportName": "sha256",
2123
+ "sideEffect": "none"
1739
2124
  },
1740
2125
  {
1741
- "name": "duckduckgoSearch",
1742
- "description": "Search the web via DuckDuckGo (no API key required), with HTML fallback when no instant answers.",
2126
+ "name": "writeText",
2127
+ "description": "Create or overwrite a UTF-8 text file in the sandbox, with auto mkdir and overwrite protection.",
1743
2128
  "inputSchema": {
1744
2129
  "type": "object",
1745
2130
  "properties": {
1746
- "query": {
2131
+ "path": {
1747
2132
  "type": "string"
1748
2133
  },
1749
- "q": {
2134
+ "content": {
1750
2135
  "type": "string"
1751
2136
  },
1752
- "maxResults": {
1753
- "type": "number"
1754
- },
1755
- "timeoutMs": {
1756
- "type": "number"
2137
+ "overwrite": {
2138
+ "type": "object",
2139
+ "properties": {}
1757
2140
  },
1758
- "maxBytes": {
1759
- "type": "number"
2141
+ "mkdirp": {
2142
+ "type": "object",
2143
+ "properties": {}
1760
2144
  }
1761
- },
1762
- "required": [
1763
- "query"
1764
- ]
2145
+ }
1765
2146
  },
1766
2147
  "outputSchema": {
1767
2148
  "type": "object",
@@ -1769,68 +2150,20 @@
1769
2150
  "result": {
1770
2151
  "type": "object",
1771
2152
  "properties": {
1772
- "query": {
1773
- "type": "string"
1774
- },
1775
- "abstract": {
1776
- "type": "string"
1777
- },
1778
- "abstractUrl": {
2153
+ "path": {
1779
2154
  "type": "string"
1780
2155
  },
1781
- "abstractSource": {
1782
- "type": "string"
2156
+ "bytes": {
2157
+ "type": "number"
1783
2158
  },
1784
- "heading": {
2159
+ "sha256": {
1785
2160
  "type": "string"
1786
- },
1787
- "results": {
1788
- "type": "array",
1789
- "items": {
1790
- "type": "object",
1791
- "properties": {
1792
- "url": {
1793
- "type": "string"
1794
- },
1795
- "title": {
1796
- "type": "string"
1797
- },
1798
- "snippet": {
1799
- "type": "string"
1800
- }
1801
- },
1802
- "required": [
1803
- "url",
1804
- "title"
1805
- ]
1806
- }
1807
- },
1808
- "relatedTopics": {
1809
- "type": "array",
1810
- "items": {
1811
- "type": "object",
1812
- "properties": {
1813
- "text": {
1814
- "type": "string"
1815
- },
1816
- "url": {
1817
- "type": "string"
1818
- }
1819
- },
1820
- "required": [
1821
- "text"
1822
- ]
1823
- }
1824
2161
  }
1825
2162
  },
1826
2163
  "required": [
1827
- "query",
1828
- "abstract",
1829
- "abstractUrl",
1830
- "abstractSource",
1831
- "heading",
1832
- "results",
1833
- "relatedTopics"
2164
+ "path",
2165
+ "bytes",
2166
+ "sha256"
1834
2167
  ]
1835
2168
  },
1836
2169
  "evidence": {
@@ -1865,46 +2198,47 @@
1865
2198
  "evidence"
1866
2199
  ]
1867
2200
  },
1868
- "sourcePath": "src/http/duckduckgoSearch",
1869
- "exportName": "duckduckgoSearch",
1870
- "sideEffect": "none"
2201
+ "sourcePath": "src/fs/writeText",
2202
+ "exportName": "writeText",
2203
+ "sideEffect": "local_write"
1871
2204
  },
1872
2205
  {
1873
- "name": "fetchJson",
1874
- "description": "Fetch a URL and return the response as parsed JSON.",
2206
+ "name": "gitRead",
2207
+ "description": "Read repository information via allowlisted git read-only subcommands.",
1875
2208
  "inputSchema": {
1876
2209
  "type": "object",
1877
2210
  "properties": {
1878
- "url": {
2211
+ "path": {
1879
2212
  "type": "string"
1880
2213
  },
1881
- "uri": {
2214
+ "repoPath": {
1882
2215
  "type": "string"
1883
2216
  },
1884
- "method": {
1885
- "type": "string",
1886
- "enum": [
1887
- "GET",
1888
- "POST"
1889
- ]
2217
+ "command": {
2218
+ "type": "string"
1890
2219
  },
1891
- "headers": {
1892
- "type": "object",
1893
- "properties": {}
2220
+ "subcommand": {
2221
+ "type": "string"
1894
2222
  },
1895
- "body": {
1896
- "type": "object",
1897
- "properties": {}
2223
+ "args": {
2224
+ "type": "array",
2225
+ "items": {
2226
+ "type": "string"
2227
+ }
2228
+ },
2229
+ "arguments": {
2230
+ "type": "array",
2231
+ "items": {
2232
+ "type": "string"
2233
+ }
1898
2234
  },
1899
2235
  "timeoutMs": {
1900
2236
  "type": "number"
1901
- },
1902
- "maxBytes": {
1903
- "type": "number"
1904
2237
  }
1905
2238
  },
1906
2239
  "required": [
1907
- "url"
2240
+ "path",
2241
+ "command"
1908
2242
  ]
1909
2243
  },
1910
2244
  "outputSchema": {
@@ -1913,22 +2247,28 @@
1913
2247
  "result": {
1914
2248
  "type": "object",
1915
2249
  "properties": {
1916
- "url": {
2250
+ "path": {
1917
2251
  "type": "string"
1918
2252
  },
1919
- "status": {
1920
- "type": "number"
2253
+ "command": {
2254
+ "type": "string"
1921
2255
  },
1922
- "json": {},
1923
- "bytes": {
2256
+ "stdout": {
2257
+ "type": "string"
2258
+ },
2259
+ "stderr": {
2260
+ "type": "string"
2261
+ },
2262
+ "exitCode": {
1924
2263
  "type": "number"
1925
2264
  }
1926
2265
  },
1927
2266
  "required": [
1928
- "url",
1929
- "status",
1930
- "json",
1931
- "bytes"
2267
+ "path",
2268
+ "command",
2269
+ "stdout",
2270
+ "stderr",
2271
+ "exitCode"
1932
2272
  ]
1933
2273
  },
1934
2274
  "evidence": {
@@ -1939,9 +2279,6 @@
1939
2279
  "type": {
1940
2280
  "type": "string"
1941
2281
  },
1942
- "ref": {
1943
- "type": "string"
1944
- },
1945
2282
  "summary": {
1946
2283
  "type": "string"
1947
2284
  },
@@ -1951,7 +2288,6 @@
1951
2288
  },
1952
2289
  "required": [
1953
2290
  "type",
1954
- "ref",
1955
2291
  "summary",
1956
2292
  "createdAt"
1957
2293
  ]
@@ -1963,31 +2299,60 @@
1963
2299
  "evidence"
1964
2300
  ]
1965
2301
  },
1966
- "sourcePath": "src/http/fetchJson",
1967
- "exportName": "fetchJson",
2302
+ "sourcePath": "src/git/gitTools",
2303
+ "exportName": "gitRead",
1968
2304
  "sideEffect": "none"
1969
2305
  },
1970
2306
  {
1971
- "name": "fetchPageMainContent",
1972
- "description": "Fetch a web page and extract its main readable content, stripping navigation, headers, and boilerplate.",
2307
+ "name": "gitLogHistory",
2308
+ "description": "Track detailed git commit history, optionally scoped to a file and including patches.",
1973
2309
  "inputSchema": {
1974
2310
  "type": "object",
1975
2311
  "properties": {
1976
- "url": {
2312
+ "path": {
1977
2313
  "type": "string"
1978
2314
  },
1979
- "uri": {
2315
+ "repoPath": {
1980
2316
  "type": "string"
1981
2317
  },
1982
- "timeoutMs": {
2318
+ "filePath": {
2319
+ "type": "string"
2320
+ },
2321
+ "maxCount": {
1983
2322
  "type": "number"
1984
2323
  },
1985
- "maxBytes": {
2324
+ "since": {
2325
+ "type": "string"
2326
+ },
2327
+ "until": {
2328
+ "type": "string"
2329
+ },
2330
+ "author": {
2331
+ "type": "string"
2332
+ },
2333
+ "grep": {
2334
+ "type": "string"
2335
+ },
2336
+ "revisionRange": {
2337
+ "type": "string"
2338
+ },
2339
+ "follow": {
2340
+ "type": "object",
2341
+ "properties": {}
2342
+ },
2343
+ "includePatch": {
2344
+ "type": "object",
2345
+ "properties": {}
2346
+ },
2347
+ "patchMaxCommits": {
2348
+ "type": "number"
2349
+ },
2350
+ "timeoutMs": {
1986
2351
  "type": "number"
1987
2352
  }
1988
2353
  },
1989
2354
  "required": [
1990
- "url"
2355
+ "path"
1991
2356
  ]
1992
2357
  },
1993
2358
  "outputSchema": {
@@ -1996,32 +2361,74 @@
1996
2361
  "result": {
1997
2362
  "type": "object",
1998
2363
  "properties": {
1999
- "url": {
2000
- "type": "string"
2001
- },
2002
- "status": {
2003
- "type": "number"
2004
- },
2005
- "title": {
2364
+ "path": {
2006
2365
  "type": "string"
2007
2366
  },
2008
- "mainContent": {
2367
+ "filePath": {
2009
2368
  "type": "string"
2010
2369
  },
2011
- "bytes": {
2370
+ "total": {
2012
2371
  "type": "number"
2013
2372
  },
2014
- "isHtml": {
2015
- "type": "boolean"
2373
+ "commits": {
2374
+ "type": "array",
2375
+ "items": {
2376
+ "type": "object",
2377
+ "properties": {
2378
+ "hash": {
2379
+ "type": "string"
2380
+ },
2381
+ "authorName": {
2382
+ "type": "string"
2383
+ },
2384
+ "authorEmail": {
2385
+ "type": "string"
2386
+ },
2387
+ "date": {
2388
+ "type": "string"
2389
+ },
2390
+ "subject": {
2391
+ "type": "string"
2392
+ },
2393
+ "body": {
2394
+ "type": "string"
2395
+ }
2396
+ },
2397
+ "required": [
2398
+ "hash",
2399
+ "authorName",
2400
+ "authorEmail",
2401
+ "date",
2402
+ "subject",
2403
+ "body"
2404
+ ]
2405
+ }
2406
+ },
2407
+ "patches": {
2408
+ "type": "array",
2409
+ "items": {
2410
+ "type": "object",
2411
+ "properties": {
2412
+ "hash": {
2413
+ "type": "string"
2414
+ },
2415
+ "patch": {
2416
+ "type": "string"
2417
+ }
2418
+ },
2419
+ "required": [
2420
+ "hash",
2421
+ "patch"
2422
+ ]
2423
+ }
2016
2424
  }
2017
2425
  },
2018
2426
  "required": [
2019
- "url",
2020
- "status",
2021
- "title",
2022
- "mainContent",
2023
- "bytes",
2024
- "isHtml"
2427
+ "path",
2428
+ "filePath",
2429
+ "total",
2430
+ "commits",
2431
+ "patches"
2025
2432
  ]
2026
2433
  },
2027
2434
  "evidence": {
@@ -2032,9 +2439,6 @@
2032
2439
  "type": {
2033
2440
  "type": "string"
2034
2441
  },
2035
- "ref": {
2036
- "type": "string"
2037
- },
2038
2442
  "summary": {
2039
2443
  "type": "string"
2040
2444
  },
@@ -2044,7 +2448,6 @@
2044
2448
  },
2045
2449
  "required": [
2046
2450
  "type",
2047
- "ref",
2048
2451
  "summary",
2049
2452
  "createdAt"
2050
2453
  ]
@@ -2056,46 +2459,40 @@
2056
2459
  "evidence"
2057
2460
  ]
2058
2461
  },
2059
- "sourcePath": "src/http/fetchPageMainContent",
2060
- "exportName": "fetchPageMainContent",
2462
+ "sourcePath": "src/git/gitTools",
2463
+ "exportName": "gitLogHistory",
2061
2464
  "sideEffect": "none"
2062
2465
  },
2063
2466
  {
2064
- "name": "fetchText",
2065
- "description": "Fetch a URL and return the response body as text. Supports GET and POST.",
2467
+ "name": "gitSwitchBranch",
2468
+ "description": "Switch git branch in a repository.",
2066
2469
  "inputSchema": {
2067
2470
  "type": "object",
2068
2471
  "properties": {
2069
- "url": {
2472
+ "path": {
2070
2473
  "type": "string"
2071
2474
  },
2072
- "uri": {
2475
+ "repoPath": {
2073
2476
  "type": "string"
2074
2477
  },
2075
- "method": {
2076
- "type": "string",
2077
- "enum": [
2078
- "GET",
2079
- "POST"
2080
- ]
2478
+ "branch": {
2479
+ "type": "string"
2081
2480
  },
2082
- "headers": {
2481
+ "create": {
2083
2482
  "type": "object",
2084
2483
  "properties": {}
2085
2484
  },
2086
- "body": {
2485
+ "trackRemote": {
2087
2486
  "type": "object",
2088
2487
  "properties": {}
2089
2488
  },
2090
2489
  "timeoutMs": {
2091
2490
  "type": "number"
2092
- },
2093
- "maxBytes": {
2094
- "type": "number"
2095
2491
  }
2096
2492
  },
2097
2493
  "required": [
2098
- "url"
2494
+ "path",
2495
+ "branch"
2099
2496
  ]
2100
2497
  },
2101
2498
  "outputSchema": {
@@ -2104,29 +2501,36 @@
2104
2501
  "result": {
2105
2502
  "type": "object",
2106
2503
  "properties": {
2107
- "url": {
2504
+ "path": {
2108
2505
  "type": "string"
2109
2506
  },
2110
- "status": {
2111
- "type": "number"
2507
+ "branch": {
2508
+ "type": "string"
2112
2509
  },
2113
- "headers": {
2114
- "type": "object",
2115
- "properties": {}
2510
+ "created": {
2511
+ "type": "boolean"
2116
2512
  },
2117
- "text": {
2513
+ "trackedRemote": {
2514
+ "type": "boolean"
2515
+ },
2516
+ "stdout": {
2118
2517
  "type": "string"
2119
2518
  },
2120
- "bytes": {
2519
+ "stderr": {
2520
+ "type": "string"
2521
+ },
2522
+ "exitCode": {
2121
2523
  "type": "number"
2122
2524
  }
2123
2525
  },
2124
2526
  "required": [
2125
- "url",
2126
- "status",
2127
- "headers",
2128
- "text",
2129
- "bytes"
2527
+ "path",
2528
+ "branch",
2529
+ "created",
2530
+ "trackedRemote",
2531
+ "stdout",
2532
+ "stderr",
2533
+ "exitCode"
2130
2534
  ]
2131
2535
  },
2132
2536
  "evidence": {
@@ -2137,9 +2541,6 @@
2137
2541
  "type": {
2138
2542
  "type": "string"
2139
2543
  },
2140
- "ref": {
2141
- "type": "string"
2142
- },
2143
2544
  "summary": {
2144
2545
  "type": "string"
2145
2546
  },
@@ -2149,7 +2550,6 @@
2149
2550
  },
2150
2551
  "required": [
2151
2552
  "type",
2152
- "ref",
2153
2553
  "summary",
2154
2554
  "createdAt"
2155
2555
  ]
@@ -2161,23 +2561,33 @@
2161
2561
  "evidence"
2162
2562
  ]
2163
2563
  },
2164
- "sourcePath": "src/http/fetchText",
2165
- "exportName": "fetchText",
2166
- "sideEffect": "none"
2564
+ "sourcePath": "src/git/gitTools",
2565
+ "exportName": "gitSwitchBranch",
2566
+ "sideEffect": "local_write"
2167
2567
  },
2168
2568
  {
2169
- "name": "head",
2170
- "description": "Send an HTTP HEAD request to check URL status and headers without downloading the body.",
2569
+ "name": "gitPull",
2570
+ "description": "Pull updates from remote in a repository.",
2171
2571
  "inputSchema": {
2172
2572
  "type": "object",
2173
2573
  "properties": {
2174
- "url": {
2574
+ "path": {
2175
2575
  "type": "string"
2176
2576
  },
2177
- "uri": {
2577
+ "repoPath": {
2578
+ "type": "string"
2579
+ },
2580
+ "remote": {
2581
+ "type": "string"
2582
+ },
2583
+ "branch": {
2178
2584
  "type": "string"
2179
2585
  },
2180
- "headers": {
2586
+ "rebase": {
2587
+ "type": "object",
2588
+ "properties": {}
2589
+ },
2590
+ "ffOnly": {
2181
2591
  "type": "object",
2182
2592
  "properties": {}
2183
2593
  },
@@ -2186,7 +2596,7 @@
2186
2596
  }
2187
2597
  },
2188
2598
  "required": [
2189
- "url"
2599
+ "path"
2190
2600
  ]
2191
2601
  },
2192
2602
  "outputSchema": {
@@ -2195,21 +2605,40 @@
2195
2605
  "result": {
2196
2606
  "type": "object",
2197
2607
  "properties": {
2198
- "url": {
2608
+ "path": {
2199
2609
  "type": "string"
2200
2610
  },
2201
- "status": {
2202
- "type": "number"
2611
+ "remote": {
2612
+ "type": "string"
2203
2613
  },
2204
- "headers": {
2205
- "type": "object",
2206
- "properties": {}
2614
+ "branch": {
2615
+ "type": "string"
2616
+ },
2617
+ "ffOnly": {
2618
+ "type": "boolean"
2619
+ },
2620
+ "rebase": {
2621
+ "type": "boolean"
2622
+ },
2623
+ "stdout": {
2624
+ "type": "string"
2625
+ },
2626
+ "stderr": {
2627
+ "type": "string"
2628
+ },
2629
+ "exitCode": {
2630
+ "type": "number"
2207
2631
  }
2208
2632
  },
2209
2633
  "required": [
2210
- "url",
2211
- "status",
2212
- "headers"
2634
+ "path",
2635
+ "remote",
2636
+ "branch",
2637
+ "ffOnly",
2638
+ "rebase",
2639
+ "stdout",
2640
+ "stderr",
2641
+ "exitCode"
2213
2642
  ]
2214
2643
  },
2215
2644
  "evidence": {
@@ -2220,9 +2649,6 @@
2220
2649
  "type": {
2221
2650
  "type": "string"
2222
2651
  },
2223
- "ref": {
2224
- "type": "string"
2225
- },
2226
2652
  "summary": {
2227
2653
  "type": "string"
2228
2654
  },
@@ -2232,7 +2658,6 @@
2232
2658
  },
2233
2659
  "required": [
2234
2660
  "type",
2235
- "ref",
2236
2661
  "summary",
2237
2662
  "createdAt"
2238
2663
  ]
@@ -2244,51 +2669,42 @@
2244
2669
  "evidence"
2245
2670
  ]
2246
2671
  },
2247
- "sourcePath": "src/http/head",
2248
- "exportName": "head",
2249
- "sideEffect": "none"
2672
+ "sourcePath": "src/git/gitTools",
2673
+ "exportName": "gitPull",
2674
+ "sideEffect": "local_write"
2250
2675
  },
2251
2676
  {
2252
- "name": "yahooFinanceQuote",
2253
- "description": "Fetch real-time stock quotes (price, change, volume) from Yahoo Finance (no API key required).",
2677
+ "name": "gitPrView",
2678
+ "description": "View a GitHub pull request using GitHub CLI (gh pr view).",
2254
2679
  "inputSchema": {
2255
2680
  "type": "object",
2256
2681
  "properties": {
2257
- "symbols": {
2258
- "type": "array",
2259
- "items": {}
2682
+ "path": {
2683
+ "type": "string"
2260
2684
  },
2261
- "symbol": {
2262
- "type": "object",
2263
- "properties": {}
2685
+ "repoPath": {
2686
+ "type": "string"
2264
2687
  },
2265
- "tickers": {
2688
+ "prNumber": {
2689
+ "type": "number"
2690
+ },
2691
+ "comments": {
2266
2692
  "type": "object",
2267
2693
  "properties": {}
2268
2694
  },
2269
- "range": {
2270
- "type": "string",
2271
- "enum": [
2272
- "1d",
2273
- "5d",
2274
- "1mo",
2275
- "3mo",
2276
- "6mo",
2277
- "1y",
2278
- "2y",
2279
- "5y",
2280
- "max"
2281
- ]
2695
+ "jsonFields": {
2696
+ "type": "array",
2697
+ "items": {
2698
+ "type": "string"
2699
+ }
2282
2700
  },
2283
2701
  "timeoutMs": {
2284
2702
  "type": "number"
2285
- },
2286
- "maxBytes": {
2287
- "type": "number"
2288
2703
  }
2289
2704
  },
2290
2705
  "required": [
2291
- "symbols"
2706
+ "path",
2707
+ "prNumber"
2292
2708
  ]
2293
2709
  },
2294
2710
  "outputSchema": {
@@ -2297,75 +2713,25 @@
2297
2713
  "result": {
2298
2714
  "type": "object",
2299
2715
  "properties": {
2300
- "symbols": {
2301
- "type": "array",
2302
- "items": {
2303
- "type": "string"
2304
- }
2716
+ "path": {
2717
+ "type": "string"
2305
2718
  },
2306
- "quotes": {
2719
+ "prNumber": {
2720
+ "type": "number"
2721
+ },
2722
+ "fields": {
2307
2723
  "type": "array",
2308
2724
  "items": {
2309
- "type": "object",
2310
- "properties": {
2311
- "symbol": {
2312
- "type": "string"
2313
- },
2314
- "currency": {
2315
- "type": "string"
2316
- },
2317
- "price": {
2318
- "type": "number"
2319
- },
2320
- "previousClose": {
2321
- "type": "number"
2322
- },
2323
- "change": {
2324
- "type": "number"
2325
- },
2326
- "changePercent": {
2327
- "type": "number"
2328
- },
2329
- "open": {
2330
- "type": "number"
2331
- },
2332
- "high": {
2333
- "type": "number"
2334
- },
2335
- "low": {
2336
- "type": "number"
2337
- },
2338
- "volume": {
2339
- "type": "number"
2340
- },
2341
- "timestamp": {
2342
- "type": "number"
2343
- }
2344
- },
2345
- "required": [
2346
- "symbol"
2347
- ]
2725
+ "type": "string"
2348
2726
  }
2349
2727
  },
2350
- "range": {
2351
- "type": "string",
2352
- "enum": [
2353
- "1d",
2354
- "5d",
2355
- "1mo",
2356
- "3mo",
2357
- "6mo",
2358
- "1y",
2359
- "2y",
2360
- "5y",
2361
- "max"
2362
- ]
2363
- }
2728
+ "pr": {}
2364
2729
  },
2365
2730
  "required": [
2366
- "symbols",
2367
- "quotes",
2368
- "range"
2731
+ "path",
2732
+ "prNumber",
2733
+ "fields",
2734
+ "pr"
2369
2735
  ]
2370
2736
  },
2371
2737
  "evidence": {
@@ -2376,9 +2742,6 @@
2376
2742
  "type": {
2377
2743
  "type": "string"
2378
2744
  },
2379
- "ref": {
2380
- "type": "string"
2381
- },
2382
2745
  "summary": {
2383
2746
  "type": "string"
2384
2747
  },
@@ -2388,7 +2751,6 @@
2388
2751
  },
2389
2752
  "required": [
2390
2753
  "type",
2391
- "ref",
2392
2754
  "summary",
2393
2755
  "createdAt"
2394
2756
  ]
@@ -2400,39 +2762,50 @@
2400
2762
  "evidence"
2401
2763
  ]
2402
2764
  },
2403
- "sourcePath": "src/http/yahooFinance",
2404
- "exportName": "yahooFinanceQuote",
2765
+ "sourcePath": "src/git/gitTools",
2766
+ "exportName": "gitPrView",
2405
2767
  "sideEffect": "none"
2406
2768
  },
2407
2769
  {
2408
- "name": "itermCreateWindow",
2409
- "description": "Create a new iTerm2 window, optionally with profile/command and initial names.",
2770
+ "name": "downloadFile",
2771
+ "description": "Download a file from a URL and save to the sandbox with size limit and SHA-256 integrity hash.",
2410
2772
  "inputSchema": {
2411
2773
  "type": "object",
2412
2774
  "properties": {
2413
- "profile": {
2775
+ "url": {
2414
2776
  "type": "string"
2415
2777
  },
2416
- "command": {
2778
+ "uri": {
2417
2779
  "type": "string"
2418
2780
  },
2419
- "cmd": {
2781
+ "destPath": {
2420
2782
  "type": "string"
2421
2783
  },
2422
- "activate": {
2784
+ "destination": {
2785
+ "type": "string"
2786
+ },
2787
+ "filePath": {
2788
+ "type": "string"
2789
+ },
2790
+ "headers": {
2423
2791
  "type": "object",
2424
2792
  "properties": {}
2425
2793
  },
2426
- "windowName": {
2427
- "type": "string"
2794
+ "timeoutMs": {
2795
+ "type": "number"
2428
2796
  },
2429
- "tabName": {
2430
- "type": "string"
2797
+ "maxBytes": {
2798
+ "type": "number"
2431
2799
  },
2432
- "sessionName": {
2433
- "type": "string"
2800
+ "overwrite": {
2801
+ "type": "object",
2802
+ "properties": {}
2434
2803
  }
2435
- }
2804
+ },
2805
+ "required": [
2806
+ "url",
2807
+ "destPath"
2808
+ ]
2436
2809
  },
2437
2810
  "outputSchema": {
2438
2811
  "type": "object",
@@ -2440,32 +2813,28 @@
2440
2813
  "result": {
2441
2814
  "type": "object",
2442
2815
  "properties": {
2443
- "profile": {
2444
- "type": "string"
2445
- },
2446
- "commandText": {
2816
+ "destPath": {
2447
2817
  "type": "string"
2448
2818
  },
2449
- "windowId": {
2450
- "type": "number"
2451
- },
2452
- "tabIndex": {
2819
+ "bytes": {
2453
2820
  "type": "number"
2454
2821
  },
2455
- "sessionId": {
2822
+ "sha256": {
2456
2823
  "type": "string"
2457
2824
  },
2458
- "sessionUniqueId": {
2825
+ "status": {
2826
+ "type": "number"
2827
+ },
2828
+ "url": {
2459
2829
  "type": "string"
2460
2830
  }
2461
2831
  },
2462
2832
  "required": [
2463
- "profile",
2464
- "commandText",
2465
- "windowId",
2466
- "tabIndex",
2467
- "sessionId",
2468
- "sessionUniqueId"
2833
+ "destPath",
2834
+ "bytes",
2835
+ "sha256",
2836
+ "status",
2837
+ "url"
2469
2838
  ]
2470
2839
  },
2471
2840
  "evidence": {
@@ -2500,39 +2869,35 @@
2500
2869
  "evidence"
2501
2870
  ]
2502
2871
  },
2503
- "sourcePath": "src/iterm/itermTools",
2504
- "exportName": "itermCreateWindow",
2872
+ "sourcePath": "src/http/downloadFile",
2873
+ "exportName": "downloadFile",
2505
2874
  "sideEffect": "local_write"
2506
2875
  },
2507
2876
  {
2508
- "name": "itermCreateTab",
2509
- "description": "Create a new tab in an iTerm2 window.",
2877
+ "name": "duckduckgoSearch",
2878
+ "description": "Search the web via DuckDuckGo (no API key required), with HTML fallback when no instant answers.",
2510
2879
  "inputSchema": {
2511
2880
  "type": "object",
2512
- "properties": {
2513
- "windowId": {
2514
- "type": "number"
2515
- },
2516
- "profile": {
2517
- "type": "string"
2518
- },
2519
- "command": {
2881
+ "properties": {
2882
+ "query": {
2520
2883
  "type": "string"
2521
2884
  },
2522
- "cmd": {
2885
+ "q": {
2523
2886
  "type": "string"
2524
2887
  },
2525
- "tabName": {
2526
- "type": "string"
2888
+ "maxResults": {
2889
+ "type": "number"
2527
2890
  },
2528
- "sessionName": {
2529
- "type": "string"
2891
+ "timeoutMs": {
2892
+ "type": "number"
2530
2893
  },
2531
- "activate": {
2532
- "type": "object",
2533
- "properties": {}
2894
+ "maxBytes": {
2895
+ "type": "number"
2534
2896
  }
2535
- }
2897
+ },
2898
+ "required": [
2899
+ "query"
2900
+ ]
2536
2901
  },
2537
2902
  "outputSchema": {
2538
2903
  "type": "object",
@@ -2540,32 +2905,68 @@
2540
2905
  "result": {
2541
2906
  "type": "object",
2542
2907
  "properties": {
2543
- "windowId": {
2544
- "type": "number"
2545
- },
2546
- "profile": {
2908
+ "query": {
2547
2909
  "type": "string"
2548
2910
  },
2549
- "commandText": {
2911
+ "abstract": {
2550
2912
  "type": "string"
2551
2913
  },
2552
- "tabIndex": {
2553
- "type": "number"
2914
+ "abstractUrl": {
2915
+ "type": "string"
2554
2916
  },
2555
- "sessionId": {
2917
+ "abstractSource": {
2556
2918
  "type": "string"
2557
2919
  },
2558
- "sessionUniqueId": {
2920
+ "heading": {
2559
2921
  "type": "string"
2922
+ },
2923
+ "results": {
2924
+ "type": "array",
2925
+ "items": {
2926
+ "type": "object",
2927
+ "properties": {
2928
+ "url": {
2929
+ "type": "string"
2930
+ },
2931
+ "title": {
2932
+ "type": "string"
2933
+ },
2934
+ "snippet": {
2935
+ "type": "string"
2936
+ }
2937
+ },
2938
+ "required": [
2939
+ "url",
2940
+ "title"
2941
+ ]
2942
+ }
2943
+ },
2944
+ "relatedTopics": {
2945
+ "type": "array",
2946
+ "items": {
2947
+ "type": "object",
2948
+ "properties": {
2949
+ "text": {
2950
+ "type": "string"
2951
+ },
2952
+ "url": {
2953
+ "type": "string"
2954
+ }
2955
+ },
2956
+ "required": [
2957
+ "text"
2958
+ ]
2959
+ }
2560
2960
  }
2561
2961
  },
2562
2962
  "required": [
2563
- "windowId",
2564
- "profile",
2565
- "commandText",
2566
- "tabIndex",
2567
- "sessionId",
2568
- "sessionUniqueId"
2963
+ "query",
2964
+ "abstract",
2965
+ "abstractUrl",
2966
+ "abstractSource",
2967
+ "heading",
2968
+ "results",
2969
+ "relatedTopics"
2569
2970
  ]
2570
2971
  },
2571
2972
  "evidence": {
@@ -2600,46 +3001,47 @@
2600
3001
  "evidence"
2601
3002
  ]
2602
3003
  },
2603
- "sourcePath": "src/iterm/itermTools",
2604
- "exportName": "itermCreateTab",
2605
- "sideEffect": "local_write"
3004
+ "sourcePath": "src/http/duckduckgoSearch",
3005
+ "exportName": "duckduckgoSearch",
3006
+ "sideEffect": "none"
2606
3007
  },
2607
3008
  {
2608
- "name": "itermSplitPane",
2609
- "description": "Split an iTerm2 session into a new pane.",
3009
+ "name": "fetchJson",
3010
+ "description": "Fetch a URL and return the response as parsed JSON.",
2610
3011
  "inputSchema": {
2611
3012
  "type": "object",
2612
3013
  "properties": {
2613
- "windowId": {
2614
- "type": "number"
2615
- },
2616
- "tabIndex": {
2617
- "type": "number"
3014
+ "url": {
3015
+ "type": "string"
2618
3016
  },
2619
- "sessionId": {
3017
+ "uri": {
2620
3018
  "type": "string"
2621
3019
  },
2622
- "direction": {
3020
+ "method": {
2623
3021
  "type": "string",
2624
3022
  "enum": [
2625
- "horizontal",
2626
- "vertical"
3023
+ "GET",
3024
+ "POST"
2627
3025
  ]
2628
3026
  },
2629
- "profile": {
2630
- "type": "string"
2631
- },
2632
- "command": {
2633
- "type": "string"
2634
- },
2635
- "cmd": {
2636
- "type": "string"
3027
+ "headers": {
3028
+ "type": "object",
3029
+ "properties": {}
2637
3030
  },
2638
- "activate": {
3031
+ "body": {
2639
3032
  "type": "object",
2640
3033
  "properties": {}
3034
+ },
3035
+ "timeoutMs": {
3036
+ "type": "number"
3037
+ },
3038
+ "maxBytes": {
3039
+ "type": "number"
2641
3040
  }
2642
- }
3041
+ },
3042
+ "required": [
3043
+ "url"
3044
+ ]
2643
3045
  },
2644
3046
  "outputSchema": {
2645
3047
  "type": "object",
@@ -2647,36 +3049,22 @@
2647
3049
  "result": {
2648
3050
  "type": "object",
2649
3051
  "properties": {
2650
- "direction": {
2651
- "type": "string"
2652
- },
2653
- "profile": {
2654
- "type": "string"
2655
- },
2656
- "commandText": {
3052
+ "url": {
2657
3053
  "type": "string"
2658
3054
  },
2659
- "windowId": {
3055
+ "status": {
2660
3056
  "type": "number"
2661
3057
  },
2662
- "tabIndex": {
3058
+ "json": {},
3059
+ "bytes": {
2663
3060
  "type": "number"
2664
- },
2665
- "sessionId": {
2666
- "type": "string"
2667
- },
2668
- "sessionUniqueId": {
2669
- "type": "string"
2670
3061
  }
2671
3062
  },
2672
3063
  "required": [
2673
- "direction",
2674
- "profile",
2675
- "commandText",
2676
- "windowId",
2677
- "tabIndex",
2678
- "sessionId",
2679
- "sessionUniqueId"
3064
+ "url",
3065
+ "status",
3066
+ "json",
3067
+ "bytes"
2680
3068
  ]
2681
3069
  },
2682
3070
  "evidence": {
@@ -2711,35 +3099,32 @@
2711
3099
  "evidence"
2712
3100
  ]
2713
3101
  },
2714
- "sourcePath": "src/iterm/itermTools",
2715
- "exportName": "itermSplitPane",
2716
- "sideEffect": "local_write"
3102
+ "sourcePath": "src/http/fetchJson",
3103
+ "exportName": "fetchJson",
3104
+ "sideEffect": "none"
2717
3105
  },
2718
3106
  {
2719
- "name": "itermRename",
2720
- "description": "Rename iTerm2 window/tab/session targets.",
3107
+ "name": "fetchPageMainContent",
3108
+ "description": "Fetch a web page and extract its main readable content, stripping navigation, headers, and boilerplate.",
2721
3109
  "inputSchema": {
2722
3110
  "type": "object",
2723
3111
  "properties": {
2724
- "windowId": {
2725
- "type": "number"
2726
- },
2727
- "tabIndex": {
2728
- "type": "number"
2729
- },
2730
- "sessionId": {
3112
+ "url": {
2731
3113
  "type": "string"
2732
3114
  },
2733
- "windowName": {
3115
+ "uri": {
2734
3116
  "type": "string"
2735
3117
  },
2736
- "tabName": {
2737
- "type": "string"
3118
+ "timeoutMs": {
3119
+ "type": "number"
2738
3120
  },
2739
- "sessionName": {
2740
- "type": "string"
3121
+ "maxBytes": {
3122
+ "type": "number"
2741
3123
  }
2742
- }
3124
+ },
3125
+ "required": [
3126
+ "url"
3127
+ ]
2743
3128
  },
2744
3129
  "outputSchema": {
2745
3130
  "type": "object",
@@ -2747,39 +3132,32 @@
2747
3132
  "result": {
2748
3133
  "type": "object",
2749
3134
  "properties": {
2750
- "windowName": {
2751
- "type": "object",
2752
- "properties": {}
2753
- },
2754
- "tabName": {
2755
- "type": "object",
2756
- "properties": {}
2757
- },
2758
- "sessionName": {
2759
- "type": "object",
2760
- "properties": {}
2761
- },
2762
- "windowId": {
2763
- "type": "number"
3135
+ "url": {
3136
+ "type": "string"
2764
3137
  },
2765
- "tabIndex": {
3138
+ "status": {
2766
3139
  "type": "number"
2767
3140
  },
2768
- "sessionId": {
3141
+ "title": {
2769
3142
  "type": "string"
2770
3143
  },
2771
- "sessionUniqueId": {
3144
+ "mainContent": {
2772
3145
  "type": "string"
3146
+ },
3147
+ "bytes": {
3148
+ "type": "number"
3149
+ },
3150
+ "isHtml": {
3151
+ "type": "boolean"
2773
3152
  }
2774
3153
  },
2775
3154
  "required": [
2776
- "windowName",
2777
- "tabName",
2778
- "sessionName",
2779
- "windowId",
2780
- "tabIndex",
2781
- "sessionId",
2782
- "sessionUniqueId"
3155
+ "url",
3156
+ "status",
3157
+ "title",
3158
+ "mainContent",
3159
+ "bytes",
3160
+ "isHtml"
2783
3161
  ]
2784
3162
  },
2785
3163
  "evidence": {
@@ -2814,41 +3192,47 @@
2814
3192
  "evidence"
2815
3193
  ]
2816
3194
  },
2817
- "sourcePath": "src/iterm/itermTools",
2818
- "exportName": "itermRename",
2819
- "sideEffect": "local_write"
3195
+ "sourcePath": "src/http/fetchPageMainContent",
3196
+ "exportName": "fetchPageMainContent",
3197
+ "sideEffect": "none"
2820
3198
  },
2821
3199
  {
2822
- "name": "itermSetBackgroundColor",
2823
- "description": "Set iTerm2 session background color.",
3200
+ "name": "fetchText",
3201
+ "description": "Fetch a URL and return the response body as text. Supports GET and POST.",
2824
3202
  "inputSchema": {
2825
3203
  "type": "object",
2826
- "properties": {
2827
- "windowId": {
2828
- "type": "number"
2829
- },
2830
- "tabIndex": {
2831
- "type": "number"
2832
- },
2833
- "sessionId": {
3204
+ "properties": {
3205
+ "url": {
2834
3206
  "type": "string"
2835
3207
  },
2836
- "hex": {
3208
+ "uri": {
2837
3209
  "type": "string"
2838
3210
  },
2839
- "red": {
2840
- "type": "number"
3211
+ "method": {
3212
+ "type": "string",
3213
+ "enum": [
3214
+ "GET",
3215
+ "POST"
3216
+ ]
2841
3217
  },
2842
- "green": {
2843
- "type": "number"
3218
+ "headers": {
3219
+ "type": "object",
3220
+ "properties": {}
2844
3221
  },
2845
- "blue": {
3222
+ "body": {
3223
+ "type": "object",
3224
+ "properties": {}
3225
+ },
3226
+ "timeoutMs": {
2846
3227
  "type": "number"
2847
3228
  },
2848
- "alpha": {
3229
+ "maxBytes": {
2849
3230
  "type": "number"
2850
3231
  }
2851
- }
3232
+ },
3233
+ "required": [
3234
+ "url"
3235
+ ]
2852
3236
  },
2853
3237
  "outputSchema": {
2854
3238
  "type": "object",
@@ -2856,48 +3240,29 @@
2856
3240
  "result": {
2857
3241
  "type": "object",
2858
3242
  "properties": {
2859
- "color": {
2860
- "type": "object",
2861
- "properties": {
2862
- "red": {
2863
- "type": "number"
2864
- },
2865
- "green": {
2866
- "type": "number"
2867
- },
2868
- "blue": {
2869
- "type": "number"
2870
- },
2871
- "alpha": {
2872
- "type": "number"
2873
- }
2874
- },
2875
- "required": [
2876
- "red",
2877
- "green",
2878
- "blue",
2879
- "alpha"
2880
- ]
3243
+ "url": {
3244
+ "type": "string"
2881
3245
  },
2882
- "windowId": {
3246
+ "status": {
2883
3247
  "type": "number"
2884
3248
  },
2885
- "tabIndex": {
2886
- "type": "number"
3249
+ "headers": {
3250
+ "type": "object",
3251
+ "properties": {}
2887
3252
  },
2888
- "sessionId": {
3253
+ "text": {
2889
3254
  "type": "string"
2890
3255
  },
2891
- "sessionUniqueId": {
2892
- "type": "string"
3256
+ "bytes": {
3257
+ "type": "number"
2893
3258
  }
2894
3259
  },
2895
3260
  "required": [
2896
- "color",
2897
- "windowId",
2898
- "tabIndex",
2899
- "sessionId",
2900
- "sessionUniqueId"
3261
+ "url",
3262
+ "status",
3263
+ "headers",
3264
+ "text",
3265
+ "bytes"
2901
3266
  ]
2902
3267
  },
2903
3268
  "evidence": {
@@ -2932,35 +3297,32 @@
2932
3297
  "evidence"
2933
3298
  ]
2934
3299
  },
2935
- "sourcePath": "src/iterm/itermTools",
2936
- "exportName": "itermSetBackgroundColor",
2937
- "sideEffect": "local_write"
3300
+ "sourcePath": "src/http/fetchText",
3301
+ "exportName": "fetchText",
3302
+ "sideEffect": "none"
2938
3303
  },
2939
3304
  {
2940
- "name": "itermSendText",
2941
- "description": "Send text to an iTerm2 session as if typed.",
3305
+ "name": "head",
3306
+ "description": "Send an HTTP HEAD request to check URL status and headers without downloading the body.",
2942
3307
  "inputSchema": {
2943
3308
  "type": "object",
2944
3309
  "properties": {
2945
- "text": {
3310
+ "url": {
2946
3311
  "type": "string"
2947
3312
  },
2948
- "windowId": {
2949
- "type": "number"
2950
- },
2951
- "tabIndex": {
2952
- "type": "number"
2953
- },
2954
- "sessionId": {
3313
+ "uri": {
2955
3314
  "type": "string"
2956
3315
  },
2957
- "newline": {
3316
+ "headers": {
2958
3317
  "type": "object",
2959
3318
  "properties": {}
3319
+ },
3320
+ "timeoutMs": {
3321
+ "type": "number"
2960
3322
  }
2961
3323
  },
2962
3324
  "required": [
2963
- "text"
3325
+ "url"
2964
3326
  ]
2965
3327
  },
2966
3328
  "outputSchema": {
@@ -2969,32 +3331,21 @@
2969
3331
  "result": {
2970
3332
  "type": "object",
2971
3333
  "properties": {
2972
- "text": {
3334
+ "url": {
2973
3335
  "type": "string"
2974
3336
  },
2975
- "newline": {
2976
- "type": "boolean"
2977
- },
2978
- "windowId": {
2979
- "type": "number"
2980
- },
2981
- "tabIndex": {
3337
+ "status": {
2982
3338
  "type": "number"
2983
3339
  },
2984
- "sessionId": {
2985
- "type": "string"
2986
- },
2987
- "sessionUniqueId": {
2988
- "type": "string"
3340
+ "headers": {
3341
+ "type": "object",
3342
+ "properties": {}
2989
3343
  }
2990
3344
  },
2991
3345
  "required": [
2992
- "text",
2993
- "newline",
2994
- "windowId",
2995
- "tabIndex",
2996
- "sessionId",
2997
- "sessionUniqueId"
3346
+ "url",
3347
+ "status",
3348
+ "headers"
2998
3349
  ]
2999
3350
  },
3000
3351
  "evidence": {
@@ -3029,16 +3380,52 @@
3029
3380
  "evidence"
3030
3381
  ]
3031
3382
  },
3032
- "sourcePath": "src/iterm/itermTools",
3033
- "exportName": "itermSendText",
3034
- "sideEffect": "local_write"
3383
+ "sourcePath": "src/http/head",
3384
+ "exportName": "head",
3385
+ "sideEffect": "none"
3035
3386
  },
3036
3387
  {
3037
- "name": "itermListWindows",
3038
- "description": "List iTerm2 windows, tabs, and sessions.",
3388
+ "name": "yahooFinanceQuote",
3389
+ "description": "Fetch real-time stock quotes (price, change, volume) from Yahoo Finance (no API key required).",
3039
3390
  "inputSchema": {
3040
3391
  "type": "object",
3041
- "properties": {}
3392
+ "properties": {
3393
+ "symbols": {
3394
+ "type": "array",
3395
+ "items": {}
3396
+ },
3397
+ "symbol": {
3398
+ "type": "object",
3399
+ "properties": {}
3400
+ },
3401
+ "tickers": {
3402
+ "type": "object",
3403
+ "properties": {}
3404
+ },
3405
+ "range": {
3406
+ "type": "string",
3407
+ "enum": [
3408
+ "1d",
3409
+ "5d",
3410
+ "1mo",
3411
+ "3mo",
3412
+ "6mo",
3413
+ "1y",
3414
+ "2y",
3415
+ "5y",
3416
+ "max"
3417
+ ]
3418
+ },
3419
+ "timeoutMs": {
3420
+ "type": "number"
3421
+ },
3422
+ "maxBytes": {
3423
+ "type": "number"
3424
+ }
3425
+ },
3426
+ "required": [
3427
+ "symbols"
3428
+ ]
3042
3429
  },
3043
3430
  "outputSchema": {
3044
3431
  "type": "object",
@@ -3046,63 +3433,75 @@
3046
3433
  "result": {
3047
3434
  "type": "object",
3048
3435
  "properties": {
3049
- "sessions": {
3436
+ "symbols": {
3437
+ "type": "array",
3438
+ "items": {
3439
+ "type": "string"
3440
+ }
3441
+ },
3442
+ "quotes": {
3050
3443
  "type": "array",
3051
3444
  "items": {
3052
3445
  "type": "object",
3053
3446
  "properties": {
3054
- "windowId": {
3055
- "type": "number"
3447
+ "symbol": {
3448
+ "type": "string"
3056
3449
  },
3057
- "windowName": {
3450
+ "currency": {
3058
3451
  "type": "string"
3059
3452
  },
3060
- "tabIndex": {
3453
+ "price": {
3061
3454
  "type": "number"
3062
3455
  },
3063
- "tabIndexZeroBased": {
3456
+ "previousClose": {
3064
3457
  "type": "number"
3065
3458
  },
3066
- "isCurrentTab": {
3067
- "type": "boolean"
3459
+ "change": {
3460
+ "type": "number"
3068
3461
  },
3069
- "sessionId": {
3070
- "type": "string"
3462
+ "changePercent": {
3463
+ "type": "number"
3071
3464
  },
3072
- "sessionUniqueId": {
3073
- "type": "string"
3465
+ "open": {
3466
+ "type": "number"
3074
3467
  },
3075
- "sessionName": {
3076
- "type": "string"
3468
+ "high": {
3469
+ "type": "number"
3077
3470
  },
3078
- "tty": {
3079
- "type": "string"
3471
+ "low": {
3472
+ "type": "number"
3080
3473
  },
3081
- "isCurrentSession": {
3082
- "type": "boolean"
3474
+ "volume": {
3475
+ "type": "number"
3476
+ },
3477
+ "timestamp": {
3478
+ "type": "number"
3083
3479
  }
3084
3480
  },
3085
3481
  "required": [
3086
- "windowId",
3087
- "windowName",
3088
- "tabIndex",
3089
- "tabIndexZeroBased",
3090
- "isCurrentTab",
3091
- "sessionId",
3092
- "sessionUniqueId",
3093
- "sessionName",
3094
- "tty",
3095
- "isCurrentSession"
3482
+ "symbol"
3096
3483
  ]
3097
3484
  }
3098
3485
  },
3099
- "count": {
3100
- "type": "number"
3486
+ "range": {
3487
+ "type": "string",
3488
+ "enum": [
3489
+ "1d",
3490
+ "5d",
3491
+ "1mo",
3492
+ "3mo",
3493
+ "6mo",
3494
+ "1y",
3495
+ "2y",
3496
+ "5y",
3497
+ "max"
3498
+ ]
3101
3499
  }
3102
3500
  },
3103
3501
  "required": [
3104
- "sessions",
3105
- "count"
3502
+ "symbols",
3503
+ "quotes",
3504
+ "range"
3106
3505
  ]
3107
3506
  },
3108
3507
  "evidence": {
@@ -3137,8 +3536,8 @@
3137
3536
  "evidence"
3138
3537
  ]
3139
3538
  },
3140
- "sourcePath": "src/iterm/itermTools",
3141
- "exportName": "itermListWindows",
3539
+ "sourcePath": "src/http/yahooFinance",
3540
+ "exportName": "yahooFinanceQuote",
3142
3541
  "sideEffect": "none"
3143
3542
  },
3144
3543
  {