pi-ui-extend 0.1.9 → 0.1.13

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 (121) hide show
  1. package/README.md +23 -2
  2. package/dist/app/app.d.ts +4 -0
  3. package/dist/app/app.js +76 -7
  4. package/dist/app/cli/install.d.ts +16 -0
  5. package/dist/app/cli/install.js +34 -7
  6. package/dist/app/cli/startup-info.js +5 -2
  7. package/dist/app/cli/update.d.ts +7 -0
  8. package/dist/app/cli/update.js +11 -3
  9. package/dist/app/commands/command-controller.js +4 -0
  10. package/dist/app/commands/command-host.d.ts +4 -0
  11. package/dist/app/commands/command-model-actions.d.ts +5 -0
  12. package/dist/app/commands/command-model-actions.js +104 -0
  13. package/dist/app/commands/command-navigation-actions.d.ts +6 -1
  14. package/dist/app/commands/command-navigation-actions.js +37 -14
  15. package/dist/app/commands/command-registry.d.ts +4 -0
  16. package/dist/app/commands/command-registry.js +32 -0
  17. package/dist/app/commands/command-session-actions.d.ts +1 -0
  18. package/dist/app/commands/command-session-actions.js +15 -5
  19. package/dist/app/commands/shell-command.d.ts +7 -0
  20. package/dist/app/commands/shell-command.js +12 -4
  21. package/dist/app/commands/shell-controller.d.ts +1 -0
  22. package/dist/app/commands/shell-controller.js +1 -1
  23. package/dist/app/constants.d.ts +1 -1
  24. package/dist/app/constants.js +1 -1
  25. package/dist/app/icons.d.ts +1 -0
  26. package/dist/app/icons.js +3 -1
  27. package/dist/app/input/autocomplete-controller.d.ts +52 -0
  28. package/dist/app/input/autocomplete-controller.js +352 -0
  29. package/dist/app/input/input-action-controller.d.ts +1 -0
  30. package/dist/app/input/input-action-controller.js +21 -0
  31. package/dist/app/input/input-controller.d.ts +1 -0
  32. package/dist/app/input/input-controller.js +2 -0
  33. package/dist/app/input/input-paste-handler.d.ts +1 -0
  34. package/dist/app/input/input-paste-handler.js +22 -18
  35. package/dist/app/input/prompt-enhancer-controller.d.ts +7 -1
  36. package/dist/app/input/prompt-enhancer-controller.js +12 -3
  37. package/dist/app/input/voice-controller.d.ts +51 -1
  38. package/dist/app/input/voice-controller.js +42 -19
  39. package/dist/app/model/model-usage-status.d.ts +9 -0
  40. package/dist/app/model/model-usage-status.js +124 -34
  41. package/dist/app/popup/popup-action-controller.js +1 -1
  42. package/dist/app/process.d.ts +17 -0
  43. package/dist/app/process.js +68 -0
  44. package/dist/app/rendering/conversation-entry-renderer.js +8 -6
  45. package/dist/app/rendering/conversation-tool-renderer.js +3 -2
  46. package/dist/app/rendering/editor-layout-renderer.d.ts +1 -0
  47. package/dist/app/rendering/editor-layout-renderer.js +11 -1
  48. package/dist/app/rendering/message-content.js +65 -7
  49. package/dist/app/rendering/render-controller.js +6 -1
  50. package/dist/app/rendering/render-text.d.ts +3 -0
  51. package/dist/app/rendering/render-text.js +51 -3
  52. package/dist/app/rendering/status-line-renderer.d.ts +5 -1
  53. package/dist/app/rendering/status-line-renderer.js +61 -25
  54. package/dist/app/rendering/toast-renderer.js +10 -13
  55. package/dist/app/rendering/tool-block-renderer.d.ts +1 -0
  56. package/dist/app/rendering/tool-block-renderer.js +16 -33
  57. package/dist/app/runtime.d.ts +6 -1
  58. package/dist/app/runtime.js +35 -2
  59. package/dist/app/screen/clipboard.d.ts +11 -2
  60. package/dist/app/screen/clipboard.js +29 -21
  61. package/dist/app/screen/file-link-opener.d.ts +8 -0
  62. package/dist/app/screen/file-link-opener.js +11 -3
  63. package/dist/app/screen/file-links.js +3 -3
  64. package/dist/app/screen/image-opener.d.ts +12 -0
  65. package/dist/app/screen/image-opener.js +13 -5
  66. package/dist/app/screen/mouse-controller.d.ts +5 -2
  67. package/dist/app/screen/mouse-controller.js +16 -1
  68. package/dist/app/screen/screen-styler.d.ts +4 -1
  69. package/dist/app/screen/screen-styler.js +3 -2
  70. package/dist/app/screen/status-controller.d.ts +3 -0
  71. package/dist/app/screen/status-controller.js +23 -8
  72. package/dist/app/session/queued-message-controller.d.ts +7 -1
  73. package/dist/app/session/queued-message-controller.js +36 -21
  74. package/dist/app/session/resume-session-loader.d.ts +15 -0
  75. package/dist/app/session/resume-session-loader.js +204 -0
  76. package/dist/app/session/session-event-controller.d.ts +5 -1
  77. package/dist/app/session/session-event-controller.js +72 -5
  78. package/dist/app/session/session-history.js +4 -3
  79. package/dist/app/session/session-lifecycle-controller.d.ts +5 -0
  80. package/dist/app/session/session-lifecycle-controller.js +9 -1
  81. package/dist/app/session/tabs-controller.d.ts +10 -1
  82. package/dist/app/session/tabs-controller.js +101 -5
  83. package/dist/app/terminal/nerd-font-controller.d.ts +16 -0
  84. package/dist/app/terminal/nerd-font-controller.js +30 -23
  85. package/dist/app/terminal/terminal-controller.d.ts +1 -0
  86. package/dist/app/terminal/terminal-controller.js +1 -0
  87. package/dist/app/types.d.ts +14 -0
  88. package/dist/app/workspace/workspace-actions-controller.d.ts +1 -1
  89. package/dist/app/workspace/workspace-actions-controller.js +3 -3
  90. package/dist/app/workspace/workspace-undo.d.ts +1 -1
  91. package/dist/app/workspace/workspace-undo.js +22 -20
  92. package/dist/config.d.ts +27 -0
  93. package/dist/config.js +174 -1
  94. package/dist/default-pix-config.js +39 -353
  95. package/dist/input-editor.d.ts +7 -1
  96. package/dist/input-editor.js +47 -6
  97. package/dist/markdown-format.d.ts +1 -0
  98. package/dist/markdown-format.js +26 -1
  99. package/dist/schemas/index.d.ts +5 -0
  100. package/dist/schemas/index.js +5 -0
  101. package/dist/schemas/pi-tools-suite-schema.d.ts +177 -0
  102. package/dist/schemas/pi-tools-suite-schema.js +218 -0
  103. package/dist/schemas/pix-schema.d.ts +65 -0
  104. package/dist/schemas/pix-schema.js +91 -0
  105. package/dist/terminal-width.js +73 -56
  106. package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +3 -0
  107. package/external/pi-tools-suite/src/dcp/compression-blocks.ts +1 -0
  108. package/external/pi-tools-suite/src/dcp/prompts.ts +1 -0
  109. package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +46 -195
  110. package/external/pi-tools-suite/src/lib/lsp.ts +2 -1
  111. package/external/pi-tools-suite/src/lsp/_shared/output.ts +8 -7
  112. package/external/pi-tools-suite/src/lsp/manager.ts +4 -4
  113. package/external/pi-tools-suite/src/repo-discovery/index.ts +49 -2
  114. package/external/pi-tools-suite/src/todo/index.ts +4 -2
  115. package/external/pi-tools-suite/src/todo/state/selectors.ts +4 -0
  116. package/external/pi-tools-suite/src/todo/todo.ts +2 -6
  117. package/external/pi-tools-suite/src/todo/tool/response-envelope.ts +9 -1
  118. package/external/pi-tools-suite/src/tool-descriptions.ts +1 -1
  119. package/package.json +12 -3
  120. package/schemas/pi-tools-suite.json +881 -0
  121. package/schemas/pix.json +298 -0
@@ -0,0 +1,881 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "$schema": {
5
+ "type": "string",
6
+ "description": "JSON Schema URL used by editors for validation and autocomplete."
7
+ },
8
+ "enabled": {
9
+ "type": "boolean",
10
+ "description": "Enable or disable the entire pi-tools-suite extension."
11
+ },
12
+ "disabledModules": {
13
+ "type": "array",
14
+ "items": {
15
+ "type": "string"
16
+ },
17
+ "description": "List of disabled module names (e.g. ['lsp', 'prompt-commands'])."
18
+ },
19
+ "terminalBell": {
20
+ "type": "object",
21
+ "properties": {
22
+ "sound": {
23
+ "type": "boolean",
24
+ "description": "Play terminal bell sound on completion/error."
25
+ }
26
+ },
27
+ "description": "Terminal bell configuration."
28
+ },
29
+ "dcp": {
30
+ "type": "object",
31
+ "properties": {
32
+ "enabled": {
33
+ "type": "boolean",
34
+ "description": "Enable DCP (Dynamic Context Pruning)."
35
+ },
36
+ "debug": {
37
+ "type": "boolean",
38
+ "description": "Enable DCP debug logging."
39
+ },
40
+ "manualMode": {
41
+ "type": "object",
42
+ "properties": {
43
+ "enabled": {
44
+ "type": "boolean",
45
+ "description": "Enable manual DCP mode."
46
+ },
47
+ "automaticStrategies": {
48
+ "type": "boolean",
49
+ "description": "Run dedup/purge even in manual mode."
50
+ }
51
+ },
52
+ "description": "Manual mode configuration."
53
+ },
54
+ "compress": {
55
+ "type": "object",
56
+ "properties": {
57
+ "maxContextPercent": {
58
+ "anyOf": [
59
+ {
60
+ "type": "number"
61
+ },
62
+ {
63
+ "type": "string"
64
+ }
65
+ ],
66
+ "description": "Maximum context percent (0–1 or '80%') before compression triggers."
67
+ },
68
+ "minContextPercent": {
69
+ "anyOf": [
70
+ {
71
+ "type": "number"
72
+ },
73
+ {
74
+ "type": "string"
75
+ }
76
+ ],
77
+ "description": "Target context percent after compression."
78
+ },
79
+ "modelMaxContextPercent": {
80
+ "type": "object",
81
+ "patternProperties": {
82
+ "^.*$": {
83
+ "type": "number"
84
+ }
85
+ },
86
+ "description": "Per-model max context percent overrides."
87
+ },
88
+ "modelMinContextPercent": {
89
+ "type": "object",
90
+ "patternProperties": {
91
+ "^.*$": {
92
+ "type": "number"
93
+ }
94
+ },
95
+ "description": "Per-model min context percent overrides."
96
+ },
97
+ "maxContextLimit": {
98
+ "anyOf": [
99
+ {
100
+ "type": "number"
101
+ },
102
+ {
103
+ "type": "string"
104
+ }
105
+ ],
106
+ "description": "Absolute max context tokens or '200k'."
107
+ },
108
+ "minContextLimit": {
109
+ "anyOf": [
110
+ {
111
+ "type": "number"
112
+ },
113
+ {
114
+ "type": "string"
115
+ }
116
+ ],
117
+ "description": "Absolute min context tokens."
118
+ },
119
+ "modelMaxContextLimits": {
120
+ "type": "object",
121
+ "patternProperties": {
122
+ "^.*$": {
123
+ "anyOf": [
124
+ {
125
+ "type": "number"
126
+ },
127
+ {
128
+ "type": "string"
129
+ }
130
+ ]
131
+ }
132
+ },
133
+ "description": "Per-model max context limit overrides."
134
+ },
135
+ "modelMinContextLimits": {
136
+ "type": "object",
137
+ "patternProperties": {
138
+ "^.*$": {
139
+ "anyOf": [
140
+ {
141
+ "type": "number"
142
+ },
143
+ {
144
+ "type": "string"
145
+ }
146
+ ]
147
+ }
148
+ },
149
+ "description": "Per-model min context limit overrides."
150
+ },
151
+ "summaryBuffer": {
152
+ "type": "boolean",
153
+ "description": "Buffer summary output."
154
+ },
155
+ "nudgeFrequency": {
156
+ "type": "number",
157
+ "description": "Inject nudge every N context events.",
158
+ "minimum": 1
159
+ },
160
+ "iterationNudgeThreshold": {
161
+ "type": "number",
162
+ "description": "Nudge after N tool calls since last user message.",
163
+ "minimum": 1
164
+ },
165
+ "nudgeForce": {
166
+ "anyOf": [
167
+ {
168
+ "type": "string",
169
+ "const": "strong"
170
+ },
171
+ {
172
+ "type": "string",
173
+ "const": "soft"
174
+ }
175
+ ],
176
+ "description": "Nudge intensity."
177
+ },
178
+ "protectedTools": {
179
+ "type": "array",
180
+ "items": {
181
+ "type": "string"
182
+ },
183
+ "description": "Tool outputs protected from pruning."
184
+ },
185
+ "protectTags": {
186
+ "type": "boolean",
187
+ "description": "Protect XML-like tags from pruning."
188
+ },
189
+ "protectUserMessages": {
190
+ "type": "boolean",
191
+ "description": "Protect user messages from pruning."
192
+ },
193
+ "autoCandidates": {
194
+ "type": "object",
195
+ "properties": {
196
+ "enabled": {
197
+ "type": "boolean",
198
+ "description": "Enable auto candidate selection for compression."
199
+ },
200
+ "minContextPercent": {
201
+ "type": "number",
202
+ "description": "Minimum context usage to trigger auto-candidates.",
203
+ "minimum": 0,
204
+ "maximum": 1
205
+ },
206
+ "keepRecentTurns": {
207
+ "type": "number",
208
+ "description": "Number of recent turns to keep.",
209
+ "minimum": 0
210
+ },
211
+ "minMessages": {
212
+ "type": "number",
213
+ "description": "Minimum messages before auto-candidate selection.",
214
+ "minimum": 0
215
+ },
216
+ "minTokens": {
217
+ "type": "number",
218
+ "description": "Minimum tokens for auto-candidate selection.",
219
+ "minimum": 0
220
+ }
221
+ },
222
+ "description": "Auto-candidate selection for compression."
223
+ },
224
+ "messageMode": {
225
+ "type": "object",
226
+ "properties": {
227
+ "enabled": {
228
+ "type": "boolean",
229
+ "description": "Enable message-mode compression suggestions."
230
+ },
231
+ "minContextPercent": {
232
+ "type": "number",
233
+ "description": "Minimum context usage to trigger message mode.",
234
+ "minimum": 0,
235
+ "maximum": 1
236
+ },
237
+ "keepRecentTurns": {
238
+ "type": "number",
239
+ "description": "Recent turns to keep.",
240
+ "minimum": 0
241
+ },
242
+ "mediumTokens": {
243
+ "type": "number",
244
+ "description": "Token threshold for medium-quality summary.",
245
+ "minimum": 0
246
+ },
247
+ "highTokens": {
248
+ "type": "number",
249
+ "description": "Token threshold for high-quality summary.",
250
+ "minimum": 0
251
+ },
252
+ "maxSuggestions": {
253
+ "type": "number",
254
+ "description": "Maximum compression suggestions.",
255
+ "minimum": 0
256
+ }
257
+ },
258
+ "description": "Message-mode compression configuration."
259
+ }
260
+ },
261
+ "description": "Compression trigger and behavior configuration."
262
+ },
263
+ "strategies": {
264
+ "type": "object",
265
+ "properties": {
266
+ "deduplication": {
267
+ "type": "object",
268
+ "properties": {
269
+ "enabled": {
270
+ "type": "boolean",
271
+ "description": "Enable duplicate content deduplication."
272
+ },
273
+ "protectedTools": {
274
+ "type": "array",
275
+ "items": {
276
+ "type": "string"
277
+ },
278
+ "description": "Tool outputs protected from dedup."
279
+ }
280
+ },
281
+ "description": "Deduplication strategy configuration."
282
+ },
283
+ "purgeErrors": {
284
+ "type": "object",
285
+ "properties": {
286
+ "enabled": {
287
+ "type": "boolean",
288
+ "description": "Enable error input purging."
289
+ },
290
+ "turns": {
291
+ "type": "number",
292
+ "description": "Prune error inputs after N user turns.",
293
+ "minimum": 1
294
+ },
295
+ "protectedTools": {
296
+ "type": "array",
297
+ "items": {
298
+ "type": "string"
299
+ },
300
+ "description": "Tool outputs protected from error purge."
301
+ }
302
+ },
303
+ "description": "Error purging strategy configuration."
304
+ },
305
+ "autoToolPruning": {
306
+ "type": "object",
307
+ "properties": {
308
+ "enabled": {
309
+ "type": "boolean",
310
+ "description": "Enable automatic tool output pruning."
311
+ },
312
+ "maxOutputTokens": {
313
+ "type": "number",
314
+ "description": "Maximum output tokens before truncation.",
315
+ "minimum": 0
316
+ },
317
+ "keepRecentTurns": {
318
+ "type": "number",
319
+ "description": "Recent turns to keep.",
320
+ "minimum": 0
321
+ },
322
+ "readLikeTools": {
323
+ "type": "array",
324
+ "items": {
325
+ "type": "string"
326
+ },
327
+ "description": "Tools treated as read-like (aggressively pruned)."
328
+ },
329
+ "readLikeTurns": {
330
+ "type": "number",
331
+ "description": "Turns threshold for read-like tool pruning.",
332
+ "minimum": 0
333
+ },
334
+ "protectedTools": {
335
+ "type": "array",
336
+ "items": {
337
+ "type": "string"
338
+ },
339
+ "description": "Tool outputs protected from auto-pruning."
340
+ }
341
+ },
342
+ "description": "Auto tool pruning strategy configuration."
343
+ }
344
+ },
345
+ "description": "DCP pruning strategies."
346
+ },
347
+ "protectedFilePatterns": {
348
+ "type": "array",
349
+ "items": {
350
+ "type": "string"
351
+ },
352
+ "description": "File path glob patterns whose content is protected from pruning."
353
+ },
354
+ "pruneNotification": {
355
+ "anyOf": [
356
+ {
357
+ "type": "string",
358
+ "const": "off"
359
+ },
360
+ {
361
+ "type": "string",
362
+ "const": "minimal"
363
+ },
364
+ {
365
+ "type": "string",
366
+ "const": "detailed"
367
+ }
368
+ ],
369
+ "description": "Notification level when pruning occurs."
370
+ }
371
+ },
372
+ "description": "DCP (Dynamic Context Pruning) configuration."
373
+ },
374
+ "asyncSubagents": {
375
+ "type": "object",
376
+ "properties": {
377
+ "defaultType": {
378
+ "type": "string",
379
+ "description": "Default sub-agent type when not specified."
380
+ },
381
+ "routing": {
382
+ "type": "object",
383
+ "properties": {
384
+ "enabled": {
385
+ "type": "boolean",
386
+ "description": "Enable LLM-based automatic role routing."
387
+ },
388
+ "model": {
389
+ "type": "string",
390
+ "description": "Router model in provider/model form."
391
+ },
392
+ "maxTaskChars": {
393
+ "type": "number",
394
+ "description": "Max task/scope characters sent to router.",
395
+ "minimum": 100
396
+ },
397
+ "maxTokens": {
398
+ "type": "number",
399
+ "description": "Max router response tokens.",
400
+ "minimum": 8
401
+ },
402
+ "maxRetries": {
403
+ "type": "number",
404
+ "description": "Router request retries.",
405
+ "minimum": 0
406
+ },
407
+ "temperature": {
408
+ "type": "number",
409
+ "description": "Router sampling temperature.",
410
+ "minimum": 0,
411
+ "maximum": 2
412
+ },
413
+ "timeoutMs": {
414
+ "type": "number",
415
+ "description": "Router request timeout in ms.",
416
+ "minimum": 1000
417
+ },
418
+ "debug": {
419
+ "type": "boolean",
420
+ "description": "Show routing debug warnings."
421
+ }
422
+ },
423
+ "description": "LLM-based role routing configuration."
424
+ },
425
+ "vision": {
426
+ "type": "object",
427
+ "properties": {
428
+ "blindModelPatterns": {
429
+ "type": "array",
430
+ "items": {
431
+ "type": "string"
432
+ },
433
+ "description": "Glob-like model refs treated as unable to inspect images."
434
+ }
435
+ },
436
+ "description": "Vision capability overrides."
437
+ },
438
+ "presets": {
439
+ "type": "object",
440
+ "patternProperties": {
441
+ "^.*$": {
442
+ "type": "object",
443
+ "properties": {
444
+ "description": {
445
+ "type": "string",
446
+ "description": "Preset description."
447
+ },
448
+ "model": {
449
+ "type": "string",
450
+ "description": "Default model for this preset."
451
+ },
452
+ "fallbackModels": {
453
+ "type": "array",
454
+ "items": {
455
+ "type": "string"
456
+ },
457
+ "description": "Global fallback models for this preset."
458
+ },
459
+ "thinking": {
460
+ "type": "string",
461
+ "description": "Default thinking level."
462
+ },
463
+ "extraArgs": {
464
+ "type": "array",
465
+ "items": {
466
+ "type": "string"
467
+ },
468
+ "description": "Extra CLI arguments."
469
+ },
470
+ "timeoutMs": {
471
+ "type": "number",
472
+ "description": "Per-agent wall-clock timeout in ms.",
473
+ "minimum": 1
474
+ },
475
+ "types": {
476
+ "type": "object",
477
+ "patternProperties": {
478
+ "^.*$": {
479
+ "type": "object",
480
+ "properties": {
481
+ "model": {
482
+ "type": "string",
483
+ "description": "Model override for this type within the preset."
484
+ },
485
+ "fallbackModels": {
486
+ "type": "array",
487
+ "items": {
488
+ "type": "string"
489
+ },
490
+ "description": "Per-role fallback models."
491
+ },
492
+ "thinking": {
493
+ "type": "string",
494
+ "description": "Thinking level override."
495
+ },
496
+ "extraArgs": {
497
+ "type": "array",
498
+ "items": {
499
+ "type": "string"
500
+ },
501
+ "description": "Extra CLI arguments."
502
+ },
503
+ "timeoutMs": {
504
+ "type": "number",
505
+ "description": "Per-agent wall-clock timeout in ms.",
506
+ "minimum": 1
507
+ }
508
+ },
509
+ "description": "Per-type override within a preset."
510
+ }
511
+ },
512
+ "description": "Per-type overrides."
513
+ }
514
+ },
515
+ "description": "Named spawn preset."
516
+ }
517
+ },
518
+ "description": "Named spawn presets."
519
+ },
520
+ "types": {
521
+ "type": "object",
522
+ "patternProperties": {
523
+ "^.*$": {
524
+ "type": "object",
525
+ "properties": {
526
+ "description": {
527
+ "type": "string",
528
+ "description": "Role description for routing."
529
+ },
530
+ "model": {
531
+ "type": "string",
532
+ "description": "Model for this sub-agent type."
533
+ },
534
+ "fallbackModels": {
535
+ "type": "array",
536
+ "items": {
537
+ "type": "string"
538
+ },
539
+ "description": "Ordered model fallbacks."
540
+ },
541
+ "thinking": {
542
+ "type": "string",
543
+ "description": "Thinking level."
544
+ },
545
+ "tools": {
546
+ "type": "array",
547
+ "items": {
548
+ "type": "string"
549
+ },
550
+ "description": "Enabled tools for this type."
551
+ },
552
+ "extraArgs": {
553
+ "type": "array",
554
+ "items": {
555
+ "type": "string"
556
+ },
557
+ "description": "Extra CLI arguments."
558
+ },
559
+ "promptAppend": {
560
+ "type": "string",
561
+ "description": "Extra prompt text appended after generated prompt."
562
+ },
563
+ "promptOverride": {
564
+ "type": "string",
565
+ "description": "Full prompt replacement."
566
+ },
567
+ "retry": {
568
+ "type": "object",
569
+ "properties": {
570
+ "maxRetries": {
571
+ "type": "number",
572
+ "description": "Maximum retry attempts.",
573
+ "minimum": 0
574
+ },
575
+ "backoffMs": {
576
+ "type": "number",
577
+ "description": "Base delay in ms before first retry.",
578
+ "minimum": 0
579
+ },
580
+ "retryableExitCodes": {
581
+ "type": "array",
582
+ "items": {
583
+ "type": "number"
584
+ },
585
+ "description": "Exit codes eligible for retry. Empty array disables retry."
586
+ }
587
+ },
588
+ "description": "Retry configuration for sub-agents."
589
+ },
590
+ "maxResultBytes": {
591
+ "type": "number",
592
+ "description": "Max bytes in result summary.",
593
+ "minimum": 0
594
+ },
595
+ "timeoutMs": {
596
+ "type": "number",
597
+ "description": "Per-agent wall-clock timeout in ms.",
598
+ "minimum": 1
599
+ }
600
+ },
601
+ "description": "Configuration for a sub-agent type/role."
602
+ }
603
+ },
604
+ "description": "Sub-agent type definitions."
605
+ },
606
+ "maxConcurrent": {
607
+ "type": "number",
608
+ "description": "Max concurrent agents per spawn batch (0 = unlimited).",
609
+ "minimum": 0
610
+ },
611
+ "retry": {
612
+ "type": "object",
613
+ "properties": {
614
+ "maxRetries": {
615
+ "type": "number",
616
+ "description": "Maximum retry attempts.",
617
+ "minimum": 0
618
+ },
619
+ "backoffMs": {
620
+ "type": "number",
621
+ "description": "Base delay in ms before first retry.",
622
+ "minimum": 0
623
+ },
624
+ "retryableExitCodes": {
625
+ "type": "array",
626
+ "items": {
627
+ "type": "number"
628
+ },
629
+ "description": "Exit codes eligible for retry. Empty array disables retry."
630
+ }
631
+ },
632
+ "description": "Retry configuration for sub-agents."
633
+ },
634
+ "maxResultBytes": {
635
+ "type": "number",
636
+ "description": "Global max bytes in result summary.",
637
+ "minimum": 0
638
+ },
639
+ "timeoutMs": {
640
+ "type": "number",
641
+ "description": "Global per-agent wall-clock timeout in ms.",
642
+ "minimum": 1
643
+ }
644
+ },
645
+ "description": "Async sub-agent configuration."
646
+ },
647
+ "toolRenderer": {
648
+ "type": "object",
649
+ "properties": {
650
+ "default": {
651
+ "type": "object",
652
+ "properties": {
653
+ "previewLines": {
654
+ "type": "number",
655
+ "minimum": 0,
656
+ "description": "Lines to show in the tool preview."
657
+ },
658
+ "direction": {
659
+ "anyOf": [
660
+ {
661
+ "type": "string",
662
+ "const": "head"
663
+ },
664
+ {
665
+ "type": "string",
666
+ "const": "tail"
667
+ }
668
+ ],
669
+ "description": "Preview direction."
670
+ },
671
+ "color": {
672
+ "type": "string",
673
+ "description": "Theme color name or hex color."
674
+ },
675
+ "defaultExpanded": {
676
+ "type": "boolean",
677
+ "description": "Expand tool output by default."
678
+ },
679
+ "compactHidden": {
680
+ "type": "boolean",
681
+ "description": "Compact hidden placeholder."
682
+ },
683
+ "hidden": {
684
+ "type": "boolean",
685
+ "description": "Hide tool output completely."
686
+ }
687
+ },
688
+ "description": "Per-tool rendering rule."
689
+ },
690
+ "tools": {
691
+ "type": "object",
692
+ "patternProperties": {
693
+ "^.*$": {
694
+ "type": "object",
695
+ "properties": {
696
+ "previewLines": {
697
+ "type": "number",
698
+ "minimum": 0,
699
+ "description": "Lines to show in the tool preview."
700
+ },
701
+ "direction": {
702
+ "anyOf": [
703
+ {
704
+ "type": "string",
705
+ "const": "head"
706
+ },
707
+ {
708
+ "type": "string",
709
+ "const": "tail"
710
+ }
711
+ ],
712
+ "description": "Preview direction."
713
+ },
714
+ "color": {
715
+ "type": "string",
716
+ "description": "Theme color name or hex color."
717
+ },
718
+ "defaultExpanded": {
719
+ "type": "boolean",
720
+ "description": "Expand tool output by default."
721
+ },
722
+ "compactHidden": {
723
+ "type": "boolean",
724
+ "description": "Compact hidden placeholder."
725
+ },
726
+ "hidden": {
727
+ "type": "boolean",
728
+ "description": "Hide tool output completely."
729
+ }
730
+ },
731
+ "description": "Per-tool rendering rule."
732
+ }
733
+ },
734
+ "description": "Tool-specific rendering rules keyed by tool name or glob pattern, e.g. 'bash' or 'repo_*'."
735
+ }
736
+ },
737
+ "description": "Per-tool rendering configuration."
738
+ },
739
+ "promptCommands": {
740
+ "type": "object",
741
+ "properties": {
742
+ "commands": {
743
+ "type": "object",
744
+ "patternProperties": {
745
+ "^.*$": {
746
+ "type": "object",
747
+ "required": [
748
+ "prompt"
749
+ ],
750
+ "properties": {
751
+ "description": {
752
+ "type": "string",
753
+ "description": "Short description shown in command menu."
754
+ },
755
+ "prompt": {
756
+ "type": "string",
757
+ "description": "The prompt text to send. Supports {cwd} template variable."
758
+ }
759
+ },
760
+ "description": "A saved slash command."
761
+ }
762
+ },
763
+ "description": "Command definitions keyed by slash command name."
764
+ }
765
+ },
766
+ "description": "User-defined slash commands."
767
+ },
768
+ "lsp": {
769
+ "type": "object",
770
+ "properties": {
771
+ "servers": {
772
+ "type": "array",
773
+ "items": {
774
+ "type": "object",
775
+ "required": [
776
+ "id",
777
+ "bin"
778
+ ],
779
+ "properties": {
780
+ "id": {
781
+ "type": "string",
782
+ "description": "Unique server identifier."
783
+ },
784
+ "enabled": {
785
+ "type": "boolean",
786
+ "description": "Enable/disable this server."
787
+ },
788
+ "include": {
789
+ "type": "array",
790
+ "items": {
791
+ "type": "string"
792
+ },
793
+ "description": "File glob patterns to include."
794
+ },
795
+ "exclude": {
796
+ "type": "array",
797
+ "items": {
798
+ "type": "string"
799
+ },
800
+ "description": "File glob patterns to exclude."
801
+ },
802
+ "rootMarkers": {
803
+ "type": "array",
804
+ "items": {
805
+ "type": "string"
806
+ },
807
+ "description": "Files that indicate a project root (e.g. ['package.json', '.git'])."
808
+ },
809
+ "maxFileSizeBytes": {
810
+ "type": "number",
811
+ "description": "Max file size to send to the server.",
812
+ "minimum": 0
813
+ },
814
+ "bin": {
815
+ "type": "string",
816
+ "description": "Path to the language server binary."
817
+ },
818
+ "args": {
819
+ "type": "array",
820
+ "items": {
821
+ "type": "string"
822
+ },
823
+ "description": "Command-line arguments."
824
+ },
825
+ "cwd": {
826
+ "type": "string",
827
+ "description": "Working directory for the server process."
828
+ },
829
+ "env": {
830
+ "type": "object",
831
+ "patternProperties": {
832
+ "^.*$": {
833
+ "type": "string"
834
+ }
835
+ },
836
+ "description": "Environment variables."
837
+ },
838
+ "config": {
839
+ "type": "string",
840
+ "description": "Path to server configuration file."
841
+ },
842
+ "languageIdByExtension": {
843
+ "type": "object",
844
+ "patternProperties": {
845
+ "^.*$": {
846
+ "type": "string"
847
+ }
848
+ },
849
+ "description": "File extension → language ID mapping, e.g. {'.ts': 'typescript'}."
850
+ },
851
+ "startupTimeoutMs": {
852
+ "type": "number",
853
+ "description": "Server startup timeout in ms.",
854
+ "minimum": 1000
855
+ },
856
+ "diagnosticsWaitMs": {
857
+ "type": "number",
858
+ "description": "Wait time for diagnostics after file change.",
859
+ "minimum": 0
860
+ },
861
+ "initializationOptions": {
862
+ "description": "LSP initialization options passed to the server."
863
+ },
864
+ "settings": {
865
+ "description": "LSP workspace/settings passed to the server."
866
+ }
867
+ },
868
+ "description": "LSP server configuration."
869
+ },
870
+ "description": "LSP server definitions."
871
+ }
872
+ },
873
+ "description": "Language Server Protocol configuration."
874
+ }
875
+ },
876
+ "$id": "https://unpkg.com/pi-ui-extend/schemas/pi-tools-suite.json",
877
+ "$schema": "https://json-schema.org/draft-07/schema#",
878
+ "title": "Pi Tools Suite Configuration",
879
+ "description": "Configuration for the pi-tools-suite extension (~/.config/pi/pi-tools-suite.jsonc).",
880
+ "additionalProperties": true
881
+ }