pi-ui-extend 1.0.41 → 1.0.45
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.
- package/README.md +50 -13
- package/dist/app/app.d.ts +13 -0
- package/dist/app/app.js +158 -8
- package/dist/app/cli/install.js +2 -2
- package/dist/app/commands/command-controller.d.ts +4 -0
- package/dist/app/commands/command-controller.js +11 -0
- package/dist/app/commands/command-git-actions.d.ts +25 -0
- package/dist/app/commands/command-git-actions.js +381 -0
- package/dist/app/commands/command-host.d.ts +4 -0
- package/dist/app/commands/command-host.js +5 -2
- package/dist/app/commands/command-model-actions.d.ts +1 -0
- package/dist/app/commands/command-model-actions.js +57 -35
- package/dist/app/commands/command-navigation-actions.d.ts +1 -0
- package/dist/app/commands/command-navigation-actions.js +16 -3
- package/dist/app/commands/command-registry.d.ts +2 -0
- package/dist/app/commands/command-registry.js +15 -1
- package/dist/app/commands/command-session-actions.js +9 -3
- package/dist/app/commands/reload-context-inventory.d.ts +11 -0
- package/dist/app/commands/reload-context-inventory.js +70 -0
- package/dist/app/extensions/extension-actions-controller.d.ts +1 -0
- package/dist/app/extensions/extension-actions-controller.js +6 -0
- package/dist/app/extensions/subagent-catalog-state.d.ts +9 -0
- package/dist/app/extensions/subagent-catalog-state.js +23 -0
- package/dist/app/input/autocomplete-controller.js +61 -34
- package/dist/app/input/input-action-controller.d.ts +2 -0
- package/dist/app/input/input-action-controller.js +8 -1
- package/dist/app/input/input-controller.d.ts +2 -1
- package/dist/app/input/input-controller.js +7 -2
- package/dist/app/input/prompt-enhancer-controller.js +53 -35
- package/dist/app/input/voice-controller.d.ts +41 -45
- package/dist/app/input/voice-controller.js +351 -419
- package/dist/app/model/model-usage-controller.js +17 -7
- package/dist/app/model/model-usage-status.d.ts +4 -1
- package/dist/app/model/model-usage-status.js +270 -46
- package/dist/app/popup/menu-items-controller.d.ts +13 -3
- package/dist/app/popup/menu-items-controller.js +37 -21
- package/dist/app/popup/popup-action-controller.d.ts +12 -2
- package/dist/app/popup/popup-action-controller.js +77 -24
- package/dist/app/popup/popup-menu-controller.d.ts +36 -14
- package/dist/app/popup/popup-menu-controller.js +239 -69
- package/dist/app/rendering/dcp-stats.d.ts +9 -4
- package/dist/app/rendering/dcp-stats.js +40 -425
- package/dist/app/rendering/editor-panels.js +10 -4
- package/dist/app/rendering/popup-menu-renderer.d.ts +3 -5
- package/dist/app/rendering/popup-menu-renderer.js +42 -37
- package/dist/app/rendering/render-controller.js +23 -2
- package/dist/app/rendering/status-line-renderer.d.ts +5 -0
- package/dist/app/rendering/status-line-renderer.js +41 -5
- package/dist/app/rendering/tab-line-renderer.js +26 -20
- package/dist/app/runtime.d.ts +12 -1
- package/dist/app/runtime.js +120 -12
- package/dist/app/screen/mouse-controller.d.ts +2 -0
- package/dist/app/screen/mouse-controller.js +17 -7
- package/dist/app/screen/status-controller.d.ts +4 -0
- package/dist/app/screen/status-controller.js +5 -0
- package/dist/app/session/lazy-session-manager.js +34 -0
- package/dist/app/session/session-event-controller.d.ts +1 -0
- package/dist/app/session/session-event-controller.js +10 -1
- package/dist/app/session/session-history.d.ts +1 -0
- package/dist/app/session/session-history.js +12 -1
- package/dist/app/session/session-lifecycle-controller.d.ts +7 -1
- package/dist/app/session/session-lifecycle-controller.js +16 -1
- package/dist/app/session/tabs-controller.d.ts +26 -1
- package/dist/app/session/tabs-controller.js +454 -147
- package/dist/app/subagents/subagents-files.js +60 -1
- package/dist/app/subagents/subagents-model.d.ts +1 -0
- package/dist/app/subagents/subagents-model.js +18 -2
- package/dist/app/subagents/subagents-widget-controller.d.ts +1 -0
- package/dist/app/subagents/subagents-widget-controller.js +6 -0
- package/dist/app/types.d.ts +16 -1
- package/dist/app/workspace/workspace-actions-controller.js +10 -2
- package/dist/app/workspace/workspace-undo.d.ts +1 -0
- package/dist/app/workspace/workspace-undo.js +1 -0
- package/dist/bundled-extensions/question/index.js +9 -1
- package/dist/bundled-extensions/question/remote.d.ts +4 -0
- package/dist/bundled-extensions/question/remote.js +33 -0
- package/dist/bundled-extensions/telegram-connector/bot.d.ts +43 -0
- package/dist/bundled-extensions/telegram-connector/bot.js +166 -0
- package/dist/bundled-extensions/telegram-connector/config.d.ts +8 -0
- package/dist/bundled-extensions/telegram-connector/config.js +87 -0
- package/dist/bundled-extensions/telegram-connector/coordinator.d.ts +66 -0
- package/dist/bundled-extensions/telegram-connector/coordinator.js +413 -0
- package/dist/bundled-extensions/telegram-connector/index.d.ts +3 -0
- package/dist/bundled-extensions/telegram-connector/index.js +195 -0
- package/dist/bundled-extensions/terminal-bell/index.d.ts +0 -8
- package/dist/bundled-extensions/terminal-bell/index.js +0 -76
- package/dist/bundled-extensions/workspace-undo/index.d.ts +26 -0
- package/dist/bundled-extensions/workspace-undo/index.js +191 -0
- package/dist/config.d.ts +21 -2
- package/dist/config.js +159 -32
- package/dist/default-pix-config.js +25 -5
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/pi-tools-suite-schema.d.ts +88 -62
- package/dist/schemas/pi-tools-suite-schema.js +54 -83
- package/dist/schemas/pix-schema.d.ts +19 -2
- package/dist/schemas/pix-schema.js +47 -5
- package/dist/schemas/tasks-schema.d.ts +18 -0
- package/dist/schemas/tasks-schema.js +41 -0
- package/docs/concurrency.md +9 -1
- package/docs/desktop-mvp.md +22 -6
- package/docs/desktop-task-manager.md +148 -84
- package/docs/release.md +30 -6
- package/external/pi-tools-suite/README.md +197 -84
- package/external/pi-tools-suite/docs/evals.md +1 -1
- package/external/pi-tools-suite/docs/session-recovery.md +47 -14
- package/external/pi-tools-suite/docs/subagent-model-pools.md +48 -30
- package/external/pi-tools-suite/docs/ui-qa-subagent.md +440 -0
- package/external/pi-tools-suite/package.json +6 -1
- package/external/pi-tools-suite/src/antigravity-auth/auth-store.ts +2 -1
- package/external/pi-tools-suite/src/antigravity-auth/constants.ts +9 -3
- package/external/pi-tools-suite/src/antigravity-auth/headers.ts +41 -3
- package/external/pi-tools-suite/src/antigravity-auth/models.ts +94 -21
- package/external/pi-tools-suite/src/antigravity-auth/oauth.ts +5 -17
- package/external/pi-tools-suite/src/antigravity-auth/payload.ts +72 -7
- package/external/pi-tools-suite/src/antigravity-auth/stream.ts +13 -1
- package/external/pi-tools-suite/src/async-subagents/agents/frontier-review.md +23 -0
- package/external/pi-tools-suite/src/async-subagents/agents/implement.md +1 -1
- package/external/pi-tools-suite/src/async-subagents/agents/presets.jsonc +16 -0
- package/external/pi-tools-suite/src/async-subagents/agents/research.md +5 -3
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/browser.mjs +346 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/desktop.mjs +1038 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/backends/tui.mjs +759 -0
- package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/scripts/browser-qa-runner.mjs +32 -23
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/chrome-devtools/chrome-devtools-provider.mjs +895 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/linux/linux-atspi.py +494 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/macos/macos-accessibility.swift +1085 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/native-terminal/bridge-client.mjs +50 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/native-terminal/native-terminal-host.mjs +501 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/drivers/windows/windows-uia.ps1 +454 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-auth.md +114 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-chrome-devtools.md +91 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser-playwright.md +145 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/browser.md +82 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-linux.md +26 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-macos.md +29 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop-windows.md +23 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/desktop.md +54 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui-native-terminal.md +59 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui-pty.md +37 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/guides/tui.md +60 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa/scripts/ui-qa-runner.mjs +535 -0
- package/external/pi-tools-suite/src/async-subagents/agents/ui-qa.md +75 -0
- package/external/pi-tools-suite/src/async-subagents/commands.ts +15 -71
- package/external/pi-tools-suite/src/async-subagents/core/activity.ts +33 -0
- package/external/pi-tools-suite/src/async-subagents/core/agent-catalog.ts +5 -4
- package/external/pi-tools-suite/src/async-subagents/core/agent-strategy.ts +1 -1
- package/external/pi-tools-suite/src/async-subagents/core/agents-dir.ts +8 -5
- package/external/pi-tools-suite/src/async-subagents/core/browser-qa.ts +16 -2
- package/external/pi-tools-suite/src/async-subagents/core/config.ts +160 -327
- package/external/pi-tools-suite/src/async-subagents/core/model-selection.ts +2 -1
- package/external/pi-tools-suite/src/async-subagents/core/registry.ts +158 -33
- package/external/pi-tools-suite/src/async-subagents/core/routing.ts +21 -5
- package/external/pi-tools-suite/src/async-subagents/core/spawn.ts +40 -26
- package/external/pi-tools-suite/src/async-subagents/core/state.ts +40 -0
- package/external/pi-tools-suite/src/async-subagents/core/types.ts +7 -0
- package/external/pi-tools-suite/src/async-subagents/core/ultrawork-auto.ts +51 -45
- package/external/pi-tools-suite/src/async-subagents/index.ts +69 -5
- package/external/pi-tools-suite/src/async-subagents/lib.ts +16 -9
- package/external/pi-tools-suite/src/async-subagents/tools/spawn.ts +8 -5
- package/external/pi-tools-suite/src/async-subagents/tools/subagents.ts +5 -4
- package/external/pi-tools-suite/src/async-subagents/types.ts +1 -0
- package/external/pi-tools-suite/src/coding-discipline/index.ts +90 -59
- package/external/pi-tools-suite/src/config.ts +55 -1
- package/external/pi-tools-suite/src/context-gateway/accounting-log.ts +282 -0
- package/external/pi-tools-suite/src/context-gateway/config.ts +77 -3
- package/external/pi-tools-suite/src/context-gateway/efficiency.ts +414 -0
- package/external/pi-tools-suite/src/context-gateway/enforcement.ts +222 -0
- package/external/pi-tools-suite/src/context-gateway/index.ts +206 -19
- package/external/pi-tools-suite/src/context-gateway/storeless-capabilities.ts +7 -7
- package/external/pi-tools-suite/src/context-gateway/telemetry.ts +101 -28
- package/external/pi-tools-suite/src/context-gateway/types.ts +16 -3
- package/external/pi-tools-suite/src/context-inventory.ts +99 -0
- package/external/pi-tools-suite/src/dcp/auto-compress-budget.ts +39 -4
- package/external/pi-tools-suite/src/dcp/auto-compress.ts +128 -49
- package/external/pi-tools-suite/src/dcp/commands.ts +32 -156
- package/external/pi-tools-suite/src/dcp/compress-tool.ts +177 -46
- package/external/pi-tools-suite/src/dcp/compression-blocks.ts +6 -58
- package/external/pi-tools-suite/src/dcp/compression-preview.ts +9 -0
- package/external/pi-tools-suite/src/dcp/compression-progress.ts +22 -0
- package/external/pi-tools-suite/src/dcp/config.ts +114 -17
- package/external/pi-tools-suite/src/dcp/conversation-index.ts +36 -9
- package/external/pi-tools-suite/src/dcp/diagnostics.ts +41 -0
- package/external/pi-tools-suite/src/dcp/fresh-tool-results.ts +38 -0
- package/external/pi-tools-suite/src/dcp/index.ts +338 -66
- package/external/pi-tools-suite/src/dcp/journal.ts +126 -4
- package/external/pi-tools-suite/src/dcp/progress-controller.ts +2 -1
- package/external/pi-tools-suite/src/dcp/prompts.ts +83 -192
- package/external/pi-tools-suite/src/dcp/protected-continuity.ts +175 -0
- package/external/pi-tools-suite/src/dcp/pruner-candidates.ts +93 -3
- package/external/pi-tools-suite/src/dcp/pruner-message-ids.ts +6 -10
- package/external/pi-tools-suite/src/dcp/pruner-nudge.ts +36 -33
- package/external/pi-tools-suite/src/dcp/pruner-tools.ts +6 -3
- package/external/pi-tools-suite/src/dcp/pruner.ts +1 -0
- package/external/pi-tools-suite/src/dcp/routine-pressure.ts +86 -0
- package/external/pi-tools-suite/src/dcp/state.ts +9 -0
- package/external/pi-tools-suite/src/dcp/statistics.d.ts +8 -0
- package/external/pi-tools-suite/src/dcp/statistics.js +156 -0
- package/external/pi-tools-suite/src/default-pi-tools-suite-config.ts +78 -22
- package/external/pi-tools-suite/src/index.ts +7 -1
- package/external/pi-tools-suite/src/lib/project.ts +36 -1
- package/external/pi-tools-suite/src/model-tools/index.ts +10 -7
- package/external/pi-tools-suite/src/repo-discovery/index.ts +304 -4
- package/external/pi-tools-suite/src/resource-registry/index.ts +2551 -0
- package/external/pi-tools-suite/src/session-recovery/index.ts +17 -0
- package/external/pi-tools-suite/src/shell-command-policy.ts +219 -0
- package/external/pi-tools-suite/src/todo/index.ts +21 -0
- package/external/pi-tools-suite/src/todo/todo.ts +19 -1
- package/external/pi-tools-suite/src/tool-descriptions.ts +47 -19
- package/package.json +10 -9
- package/schemas/pi-tools-suite.json +466 -287
- package/schemas/pix.json +129 -11
- package/schemas/tasks.json +131 -0
- package/skills/simplify/SKILL.md +33 -5
- package/docs/desktop-markdown-media.md +0 -77
- package/external/pi-tools-suite/docs/browser-qa-subagent.md +0 -177
- package/external/pi-tools-suite/docs/dcp-emergency-current-turn.md +0 -102
- package/external/pi-tools-suite/src/async-subagents/agents/browser-qa.md +0 -598
- package/external/pi-tools-suite/src/async-subagents/async-subagents.sample.jsonc +0 -54
- package/external/pi-tools-suite/src/skill-installer/index.ts +0 -333
- package/skills/playwright-cli/SKILL.md +0 -420
- package/skills/playwright-cli/references/element-attributes.md +0 -23
- package/skills/playwright-cli/references/playwright-tests.md +0 -50
- package/skills/playwright-cli/references/request-mocking.md +0 -87
- package/skills/playwright-cli/references/running-code.md +0 -241
- package/skills/playwright-cli/references/session-management.md +0 -273
- package/skills/playwright-cli/references/spec-driven-testing.md +0 -311
- package/skills/playwright-cli/references/storage-state.md +0 -290
- package/skills/playwright-cli/references/test-generation.md +0 -142
- package/skills/playwright-cli/references/tracing.md +0 -154
- package/skills/playwright-cli/references/video-recording.md +0 -147
- package/skills/spec-lite/SKILL.md +0 -140
- /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/examples/qa-auth.example.jsonc +0 -0
- /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/examples/qa-flow.example.jsonc +0 -0
- /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/vendor/fflate.LICENSE +0 -0
- /package/external/pi-tools-suite/src/async-subagents/agents/{browser-qa → ui-qa/browser}/vendor/fflate.mjs +0 -0
package/dist/config.js
CHANGED
|
@@ -56,9 +56,11 @@ const DEFAULT_OUTPUT_FILTERS = {
|
|
|
56
56
|
const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
|
|
57
57
|
const DEFAULT_PROMPT_ENHANCER = {
|
|
58
58
|
modelRef: "openai-codex/gpt-5.6-luna",
|
|
59
|
+
fallbackModels: [],
|
|
59
60
|
};
|
|
60
61
|
const DEFAULT_AUTOCOMPLETE = {
|
|
61
62
|
modelRef: "zai/glm-5-turbo",
|
|
63
|
+
fallbackModels: [],
|
|
62
64
|
debounceMs: 350,
|
|
63
65
|
timeoutMs: 3000,
|
|
64
66
|
maxTokens: 48,
|
|
@@ -75,16 +77,15 @@ const DEFAULT_MODEL_COLORS = {
|
|
|
75
77
|
};
|
|
76
78
|
const DEFAULT_DICTATION = {
|
|
77
79
|
language: "en",
|
|
80
|
+
model: "nova-3",
|
|
78
81
|
languages: {
|
|
79
82
|
en: {
|
|
80
|
-
dirName: "vosk-model-small-en-us-0.15",
|
|
81
|
-
url: "https://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip",
|
|
82
83
|
label: "English",
|
|
84
|
+
deepgramLanguage: "en",
|
|
83
85
|
},
|
|
84
86
|
ru: {
|
|
85
|
-
dirName: "vosk-model-small-ru-0.22",
|
|
86
|
-
url: "https://alphacephei.com/vosk/models/vosk-model-small-ru-0.22.zip",
|
|
87
87
|
label: "Russian",
|
|
88
|
+
deepgramLanguage: "ru",
|
|
88
89
|
},
|
|
89
90
|
},
|
|
90
91
|
};
|
|
@@ -133,20 +134,21 @@ function extractPromptEnhancerConfig(raw) {
|
|
|
133
134
|
if (!isPlainObject(enhancer))
|
|
134
135
|
return undefined;
|
|
135
136
|
const modelRef = nonEmptyString(enhancer.modelRef) ?? nonEmptyString(enhancer.model);
|
|
136
|
-
return modelRef ? { modelRef } : undefined;
|
|
137
|
+
return modelRef ? { modelRef, fallbackModels: modelFallbackList(enhancer.fallbackModels) } : undefined;
|
|
137
138
|
}
|
|
138
139
|
function extractAutocompleteConfig(raw) {
|
|
139
140
|
if (!isPlainObject(raw))
|
|
140
141
|
return undefined;
|
|
141
142
|
const autocomplete = raw.autocomplete ?? raw.autoComplete;
|
|
142
143
|
if (typeof autocomplete === "string")
|
|
143
|
-
return { ...DEFAULT_AUTOCOMPLETE, modelRef: autocomplete.trim() };
|
|
144
|
+
return { ...DEFAULT_AUTOCOMPLETE, fallbackModels: [], modelRef: autocomplete.trim() };
|
|
144
145
|
if (!isPlainObject(autocomplete))
|
|
145
146
|
return undefined;
|
|
146
147
|
const modelRef = autocompleteModelRef(autocomplete);
|
|
147
148
|
return {
|
|
148
149
|
...DEFAULT_AUTOCOMPLETE,
|
|
149
150
|
...(modelRef === undefined ? {} : { modelRef }),
|
|
151
|
+
fallbackModels: modelFallbackList(autocomplete.fallbackModels),
|
|
150
152
|
debounceMs: numberInRange(autocomplete.debounceMs, DEFAULT_AUTOCOMPLETE.debounceMs, 100, 2_000),
|
|
151
153
|
timeoutMs: numberInRange(autocomplete.timeoutMs, DEFAULT_AUTOCOMPLETE.timeoutMs, 250, 10_000),
|
|
152
154
|
maxTokens: numberInRange(autocomplete.maxTokens, DEFAULT_AUTOCOMPLETE.maxTokens, 8, 256),
|
|
@@ -181,9 +183,30 @@ function extractDefaultModelConfig(raw) {
|
|
|
181
183
|
?? normalizedModel.thinking;
|
|
182
184
|
return {
|
|
183
185
|
modelRef: normalizedModel.modelRef,
|
|
186
|
+
fallbackModels: modelFallbackList(configured.fallbackModels),
|
|
184
187
|
...(thinking === undefined ? {} : { thinking }),
|
|
185
188
|
};
|
|
186
189
|
}
|
|
190
|
+
function extractVisibleModelsConfig(raw) {
|
|
191
|
+
if (!isPlainObject(raw) || !Array.isArray(raw.visibleModels))
|
|
192
|
+
return undefined;
|
|
193
|
+
return [...new Set(raw.visibleModels
|
|
194
|
+
.filter((entry) => typeof entry === "string")
|
|
195
|
+
.map((entry) => entry.trim())
|
|
196
|
+
.filter(Boolean))];
|
|
197
|
+
}
|
|
198
|
+
function extractThinkingByModelConfig(raw) {
|
|
199
|
+
if (!isPlainObject(raw) || !isPlainObject(raw.thinkingByModel))
|
|
200
|
+
return undefined;
|
|
201
|
+
const preferences = {};
|
|
202
|
+
for (const [modelRef, value] of Object.entries(raw.thinkingByModel)) {
|
|
203
|
+
const normalizedRef = normalizeModelPreferenceRef(modelRef);
|
|
204
|
+
const thinking = normalizeThinkingLevel(value);
|
|
205
|
+
if (normalizedRef && thinking)
|
|
206
|
+
preferences[normalizedRef] = thinking;
|
|
207
|
+
}
|
|
208
|
+
return preferences;
|
|
209
|
+
}
|
|
187
210
|
function extractModelColorsConfig(raw) {
|
|
188
211
|
if (!isPlainObject(raw))
|
|
189
212
|
return undefined;
|
|
@@ -217,33 +240,54 @@ function extractIconThemeConfig(raw) {
|
|
|
217
240
|
?? appIconThemeFromFallbackFlag(iconTheme.fallback);
|
|
218
241
|
return configuredTheme ? { name: configuredTheme } : undefined;
|
|
219
242
|
}
|
|
220
|
-
function extractDictationConfig(raw) {
|
|
243
|
+
function extractDictationConfig(raw, fallback, options = {}) {
|
|
221
244
|
if (!isPlainObject(raw))
|
|
222
245
|
return undefined;
|
|
223
246
|
const dictation = raw.dictation ?? raw.voiceInput ?? raw.voice;
|
|
224
247
|
if (!isPlainObject(dictation))
|
|
225
248
|
return undefined;
|
|
226
249
|
const configuredLanguages = dictation.languages ?? dictation.models;
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
250
|
+
const replacesLanguages = isPlainObject(configuredLanguages);
|
|
251
|
+
let languages = fallback.languages;
|
|
252
|
+
if (replacesLanguages) {
|
|
253
|
+
const parsedLanguages = {};
|
|
254
|
+
for (const [rawKey, value] of Object.entries(configuredLanguages)) {
|
|
255
|
+
const key = rawKey.trim().toLowerCase();
|
|
256
|
+
if (!key || !isPlainObject(value))
|
|
257
|
+
continue;
|
|
258
|
+
const label = nonEmptyString(value.label) ?? key.toUpperCase();
|
|
259
|
+
const deepgramLanguage = nonEmptyString(value.deepgramLanguage)
|
|
260
|
+
?? nonEmptyString(value.language)
|
|
261
|
+
?? key;
|
|
262
|
+
const dirName = nonEmptyString(value.dirName) ?? nonEmptyString(value.model) ?? nonEmptyString(value.modelDir);
|
|
263
|
+
const url = nonEmptyString(value.url);
|
|
264
|
+
parsedLanguages[key] = {
|
|
265
|
+
label,
|
|
266
|
+
deepgramLanguage,
|
|
267
|
+
...(dirName ? { dirName } : {}),
|
|
268
|
+
...(url ? { url } : {}),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
if (Object.keys(parsedLanguages).length > 0)
|
|
272
|
+
languages = parsedLanguages;
|
|
240
273
|
}
|
|
241
|
-
const
|
|
274
|
+
const configuredLanguage = normalizeDictationLanguage(dictation.language)
|
|
242
275
|
?? normalizeDictationLanguage(dictation.selectedLanguage)
|
|
243
276
|
?? normalizeDictationLanguage(dictation.currentLanguage);
|
|
244
|
-
const selectedLanguage =
|
|
277
|
+
const selectedLanguage = configuredLanguage && languages[configuredLanguage]
|
|
278
|
+
? configuredLanguage
|
|
279
|
+
: !replacesLanguages && fallback.language && languages[fallback.language]
|
|
280
|
+
? fallback.language
|
|
281
|
+
: undefined;
|
|
282
|
+
const configuredModel = nonEmptyString(dictation.model) ?? nonEmptyString(dictation.deepgramModel);
|
|
283
|
+
const model = configuredModel ?? (replacesLanguages ? undefined : fallback.model);
|
|
284
|
+
const apiKey = options.allowApiKey === false
|
|
285
|
+
? fallback.apiKey
|
|
286
|
+
: nonEmptyString(dictation.apiKey) ?? nonEmptyString(dictation.deepgramApiKey) ?? fallback.apiKey;
|
|
245
287
|
return Object.keys(languages).length > 0 ? {
|
|
246
|
-
...(selectedLanguage ? { language: selectedLanguage }
|
|
288
|
+
...(selectedLanguage === undefined ? {} : { language: selectedLanguage }),
|
|
289
|
+
...(model === undefined ? {} : { model }),
|
|
290
|
+
...(apiKey === undefined ? {} : { apiKey }),
|
|
247
291
|
languages,
|
|
248
292
|
} : undefined;
|
|
249
293
|
}
|
|
@@ -280,6 +324,14 @@ function nonEmptyString(value) {
|
|
|
280
324
|
const trimmed = value.trim();
|
|
281
325
|
return trimmed.length > 0 ? trimmed : undefined;
|
|
282
326
|
}
|
|
327
|
+
function modelFallbackList(value) {
|
|
328
|
+
if (!Array.isArray(value))
|
|
329
|
+
return [];
|
|
330
|
+
return [...new Set(value
|
|
331
|
+
.filter((entry) => typeof entry === "string")
|
|
332
|
+
.map((entry) => entry.trim())
|
|
333
|
+
.filter(Boolean))];
|
|
334
|
+
}
|
|
283
335
|
function numberInRange(value, fallback, min, max) {
|
|
284
336
|
if (typeof value !== "number" || !Number.isFinite(value))
|
|
285
337
|
return fallback;
|
|
@@ -290,8 +342,8 @@ export function defaultPixConfig() {
|
|
|
290
342
|
return {
|
|
291
343
|
toolRenderer: cloneToolRendererConfig(DEFAULT_TOOL_RENDERER),
|
|
292
344
|
outputFilters: { patterns: [...DEFAULT_OUTPUT_FILTERS.patterns] },
|
|
293
|
-
promptEnhancer: { ...DEFAULT_PROMPT_ENHANCER },
|
|
294
|
-
autocomplete: { ...DEFAULT_AUTOCOMPLETE },
|
|
345
|
+
promptEnhancer: { ...DEFAULT_PROMPT_ENHANCER, fallbackModels: [...DEFAULT_PROMPT_ENHANCER.fallbackModels] },
|
|
346
|
+
autocomplete: { ...DEFAULT_AUTOCOMPLETE, fallbackModels: [...DEFAULT_AUTOCOMPLETE.fallbackModels] },
|
|
295
347
|
modelColors: { rules: { ...DEFAULT_MODEL_COLORS.rules } },
|
|
296
348
|
iconTheme: { name: resolveAppIconThemeNameFromEnv() },
|
|
297
349
|
dictation: cloneDictationConfig(DEFAULT_DICTATION),
|
|
@@ -309,21 +361,44 @@ function cloneDictationConfig(config) {
|
|
|
309
361
|
return {
|
|
310
362
|
languages: Object.fromEntries(Object.entries(config.languages).map(([language, model]) => [language, { ...model }])),
|
|
311
363
|
...(config.language === undefined ? {} : { language: config.language }),
|
|
364
|
+
...(config.model === undefined ? {} : { model: config.model }),
|
|
365
|
+
...(config.apiKey === undefined ? {} : { apiKey: config.apiKey }),
|
|
312
366
|
};
|
|
313
367
|
}
|
|
314
|
-
function pixConfigFromParsed(parsed, fallback = defaultPixConfig()) {
|
|
368
|
+
function pixConfigFromParsed(parsed, fallback = defaultPixConfig(), options = {}) {
|
|
315
369
|
const toolRenderer = extractToolRendererConfig(parsed) ?? fallback.toolRenderer;
|
|
316
370
|
const outputFilters = extractOutputFiltersConfig(parsed) ?? fallback.outputFilters;
|
|
317
371
|
const defaultModel = extractDefaultModelConfig(parsed) ?? fallback.defaultModel;
|
|
372
|
+
const visibleModels = options.allowVisibleModels === false
|
|
373
|
+
? fallback.visibleModels
|
|
374
|
+
: extractVisibleModelsConfig(parsed) ?? fallback.visibleModels;
|
|
375
|
+
const thinkingByModel = options.allowThinkingByModel === false
|
|
376
|
+
? fallback.thinkingByModel
|
|
377
|
+
: extractThinkingByModelConfig(parsed) ?? fallback.thinkingByModel;
|
|
318
378
|
const promptEnhancer = extractPromptEnhancerConfig(parsed) ?? fallback.promptEnhancer;
|
|
319
379
|
const autocomplete = extractAutocompleteConfig(parsed) ?? fallback.autocomplete;
|
|
320
380
|
const modelColors = extractModelColorsConfig(parsed) ?? fallback.modelColors;
|
|
321
381
|
const configuredIconTheme = extractIconThemeConfig(parsed) ?? fallback.iconTheme;
|
|
322
382
|
const iconTheme = { name: appIconThemeOverrideFromEnv() ?? configuredIconTheme.name };
|
|
323
|
-
const dictation = extractDictationConfig(parsed
|
|
383
|
+
const dictation = extractDictationConfig(parsed, fallback.dictation, {
|
|
384
|
+
allowApiKey: options.allowDictationApiKey ?? true,
|
|
385
|
+
}) ?? fallback.dictation;
|
|
324
386
|
const ignoreContextFiles = extractIgnoreContextFiles(parsed) ?? fallback.ignoreContextFiles;
|
|
325
387
|
const maxProjectSessions = extractMaxProjectSessions(parsed) ?? fallback.maxProjectSessions;
|
|
326
|
-
return {
|
|
388
|
+
return {
|
|
389
|
+
toolRenderer,
|
|
390
|
+
outputFilters,
|
|
391
|
+
...(defaultModel === undefined ? {} : { defaultModel }),
|
|
392
|
+
...(visibleModels === undefined ? {} : { visibleModels: [...visibleModels] }),
|
|
393
|
+
...(thinkingByModel === undefined ? {} : { thinkingByModel: { ...thinkingByModel } }),
|
|
394
|
+
promptEnhancer,
|
|
395
|
+
autocomplete,
|
|
396
|
+
modelColors,
|
|
397
|
+
iconTheme,
|
|
398
|
+
dictation,
|
|
399
|
+
ignoreContextFiles,
|
|
400
|
+
maxProjectSessions,
|
|
401
|
+
};
|
|
327
402
|
}
|
|
328
403
|
export function resolveDefaultModelRef(config) {
|
|
329
404
|
const modelRef = config.defaultModel?.modelRef.trim();
|
|
@@ -367,6 +442,23 @@ export function savePixAutocompleteModel(modelRef) {
|
|
|
367
442
|
writeFileSync(configPath, updated);
|
|
368
443
|
return extractAutocompleteConfig(parseJsonc(updated)) ?? { ...DEFAULT_AUTOCOMPLETE, modelRef: modelRef.trim() };
|
|
369
444
|
}
|
|
445
|
+
export function savePixVisibleModels(modelRefs) {
|
|
446
|
+
const configPath = PIX_CONFIG_PATH;
|
|
447
|
+
const source = existsSync(configPath) ? readFileSync(configPath, "utf8") : "{\n}\n";
|
|
448
|
+
const normalized = normalizeVisibleModelRefs(modelRefs);
|
|
449
|
+
const updated = upsertPixVisibleModelsInJsonc(source, normalized);
|
|
450
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
451
|
+
writeFileSync(configPath, updated);
|
|
452
|
+
return extractVisibleModelsConfig(parseJsonc(updated)) ?? normalized;
|
|
453
|
+
}
|
|
454
|
+
export function savePixThinkingLevelForModel(modelRef, thinking) {
|
|
455
|
+
const configPath = PIX_CONFIG_PATH;
|
|
456
|
+
const source = existsSync(configPath) ? readFileSync(configPath, "utf8") : "{\n}\n";
|
|
457
|
+
const updated = upsertPixThinkingLevelForModelInJsonc(source, modelRef, thinking);
|
|
458
|
+
mkdirSync(dirname(configPath), { recursive: true });
|
|
459
|
+
writeFileSync(configPath, updated);
|
|
460
|
+
return extractThinkingByModelConfig(parseJsonc(updated)) ?? {};
|
|
461
|
+
}
|
|
370
462
|
export function saveProjectPixIgnoreContextFiles(cwd, ignoreContextFiles) {
|
|
371
463
|
const configPath = getProjectPixConfigPath(cwd);
|
|
372
464
|
const source = existsSync(configPath) ? readFileSync(configPath, "utf8") : `{
|
|
@@ -382,6 +474,18 @@ export function upsertPixIgnoreContextFilesInJsonc(source, ignoreContextFiles) {
|
|
|
382
474
|
const formattingOptions = { insertSpaces: true, tabSize: 2 };
|
|
383
475
|
return applyEdits(source, modify(source, ["ignoreContextFiles"], ignoreContextFiles, { formattingOptions }));
|
|
384
476
|
}
|
|
477
|
+
export function upsertPixVisibleModelsInJsonc(source, modelRefs) {
|
|
478
|
+
const formattingOptions = { insertSpaces: true, tabSize: 2 };
|
|
479
|
+
return applyEdits(source, modify(source, ["visibleModels"], normalizeVisibleModelRefs(modelRefs), { formattingOptions }));
|
|
480
|
+
}
|
|
481
|
+
export function upsertPixThinkingLevelForModelInJsonc(source, modelRef, thinking) {
|
|
482
|
+
const normalizedRef = normalizeModelPreferenceRef(modelRef);
|
|
483
|
+
const normalizedThinking = normalizeThinkingLevel(thinking);
|
|
484
|
+
if (!normalizedRef || !normalizedThinking)
|
|
485
|
+
return source;
|
|
486
|
+
const formattingOptions = { insertSpaces: true, tabSize: 2 };
|
|
487
|
+
return applyEdits(source, modify(source, ["thinkingByModel", normalizedRef], normalizedThinking, { formattingOptions }));
|
|
488
|
+
}
|
|
385
489
|
export function upsertPixDefaultModelInJsonc(source, modelRef) {
|
|
386
490
|
const normalized = normalizeDefaultModelRef(modelRef);
|
|
387
491
|
if (!normalized)
|
|
@@ -391,6 +495,7 @@ export function upsertPixDefaultModelInJsonc(source, modelRef) {
|
|
|
391
495
|
const thinking = normalized.thinking ?? current?.thinking;
|
|
392
496
|
const next = {
|
|
393
497
|
modelRef: normalized.modelRef,
|
|
498
|
+
fallbackModels: current?.fallbackModels ?? [],
|
|
394
499
|
...(thinking === undefined ? {} : { thinking }),
|
|
395
500
|
};
|
|
396
501
|
return upsertPixDefaultModelObjectInJsonc(source, parsed, next);
|
|
@@ -407,6 +512,7 @@ export function upsertPixDefaultThinkingInJsonc(source, thinking, fallbackModelR
|
|
|
407
512
|
return source;
|
|
408
513
|
const next = {
|
|
409
514
|
modelRef: stripThinkingSuffix(modelRef),
|
|
515
|
+
fallbackModels: current?.fallbackModels ?? fallback?.fallbackModels ?? [],
|
|
410
516
|
thinking: normalizedThinking,
|
|
411
517
|
};
|
|
412
518
|
return upsertPixDefaultModelObjectInJsonc(source, parsed, next);
|
|
@@ -417,6 +523,7 @@ function upsertPixDefaultModelObjectInJsonc(source, parsed, config) {
|
|
|
417
523
|
return applyEdits(source, modify(source, ["defaultModel"], config, { formattingOptions, getInsertionIndex: () => 0 }));
|
|
418
524
|
}
|
|
419
525
|
let updated = applyEdits(source, modify(source, ["defaultModel", "modelRef"], config.modelRef, { formattingOptions }));
|
|
526
|
+
updated = applyEdits(updated, modify(updated, ["defaultModel", "fallbackModels"], config.fallbackModels, { formattingOptions }));
|
|
420
527
|
if (config.thinking !== undefined) {
|
|
421
528
|
updated = applyEdits(updated, modify(updated, ["defaultModel", "thinking"], config.thinking, { formattingOptions }));
|
|
422
529
|
}
|
|
@@ -424,7 +531,11 @@ function upsertPixDefaultModelObjectInJsonc(source, parsed, config) {
|
|
|
424
531
|
}
|
|
425
532
|
export function upsertPixAutocompleteModelInJsonc(source, modelRef) {
|
|
426
533
|
const formattingOptions = { insertSpaces: true, tabSize: 2 };
|
|
427
|
-
|
|
534
|
+
const parsed = parseJsonc(source);
|
|
535
|
+
const current = extractAutocompleteConfig(parsed);
|
|
536
|
+
let updated = applyEdits(source, modify(source, ["autocomplete", "modelRef"], modelRef.trim(), { formattingOptions }));
|
|
537
|
+
updated = applyEdits(updated, modify(updated, ["autocomplete", "fallbackModels"], current?.fallbackModels ?? [], { formattingOptions }));
|
|
538
|
+
return updated;
|
|
428
539
|
}
|
|
429
540
|
function normalizeDefaultModelRef(modelRef) {
|
|
430
541
|
const trimmed = modelRef.trim();
|
|
@@ -432,10 +543,19 @@ function normalizeDefaultModelRef(modelRef) {
|
|
|
432
543
|
return undefined;
|
|
433
544
|
const colonIndex = trimmed.lastIndexOf(":");
|
|
434
545
|
if (colonIndex <= 0)
|
|
435
|
-
return { modelRef: trimmed };
|
|
546
|
+
return { modelRef: trimmed, fallbackModels: [] };
|
|
436
547
|
const suffix = trimmed.slice(colonIndex + 1);
|
|
437
548
|
const thinking = normalizeDefaultThinking(suffix);
|
|
438
|
-
return thinking
|
|
549
|
+
return thinking
|
|
550
|
+
? { modelRef: trimmed.slice(0, colonIndex), fallbackModels: [], thinking }
|
|
551
|
+
: { modelRef: trimmed, fallbackModels: [] };
|
|
552
|
+
}
|
|
553
|
+
function normalizeVisibleModelRefs(modelRefs) {
|
|
554
|
+
return [...new Set(modelRefs.map((entry) => entry.trim()).filter(Boolean))];
|
|
555
|
+
}
|
|
556
|
+
function normalizeModelPreferenceRef(modelRef) {
|
|
557
|
+
const normalized = stripThinkingSuffix(modelRef.trim());
|
|
558
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
439
559
|
}
|
|
440
560
|
function stripThinkingSuffix(modelRef) {
|
|
441
561
|
const colonIndex = modelRef.lastIndexOf(":");
|
|
@@ -506,7 +626,14 @@ function loadProjectPixConfig(cwd, fallback) {
|
|
|
506
626
|
return fallback;
|
|
507
627
|
try {
|
|
508
628
|
const raw = readFileSync(configPath, "utf8");
|
|
509
|
-
return pixConfigFromParsed(parseJsonc(raw), fallback
|
|
629
|
+
return pixConfigFromParsed(parseJsonc(raw), fallback, {
|
|
630
|
+
allowDictationApiKey: false,
|
|
631
|
+
// Model visibility is a user UI preference shared by TUI and Desktop.
|
|
632
|
+
// Project config must not silently fork that picker state.
|
|
633
|
+
allowVisibleModels: false,
|
|
634
|
+
// Remembered thinking is the same cross-UI user preference.
|
|
635
|
+
allowThinkingByModel: false,
|
|
636
|
+
});
|
|
510
637
|
}
|
|
511
638
|
catch (error) {
|
|
512
639
|
process.stderr.write(`[pix] Failed to load ${configPath}: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
export const DEFAULT_PIX_CONFIG_JSONC = String.raw `{
|
|
2
2
|
"$schema": "https://unpkg.com/pi-ui-extend/schemas/pix.json",
|
|
3
3
|
// pix renderer configuration
|
|
4
|
-
"defaultModel": { "modelRef": "openai-codex/gpt-5.6-sol", "thinking": "medium" },
|
|
4
|
+
"defaultModel": { "modelRef": "openai-codex/gpt-5.6-sol", "fallbackModels": [], "thinking": "medium" },
|
|
5
|
+
// Optional model-picker whitelist shared by Pix TUI and Desktop. Omit it to show all available models.
|
|
6
|
+
// "visibleModels": ["openai-codex/gpt-5.6-sol", "zai/glm-5-turbo"],
|
|
7
|
+
// Last applied thinking level per model, shared by Pix TUI and Desktop model pickers.
|
|
8
|
+
// "thinkingByModel": { "openai-codex/gpt-5.6-sol": "high", "zai/glm-5-turbo": "max" },
|
|
5
9
|
// Disable AGENTS.md / CLAUDE.md discovery for this project when set in <cwd>/.pi/pix.jsonc.
|
|
6
10
|
"ignoreContextFiles": false,
|
|
7
11
|
// Maximum pi session JSONL files to retain per project. 0 disables automatic deletion.
|
|
8
12
|
"maxProjectSessions": 0,
|
|
13
|
+
"desktop": {
|
|
14
|
+
// External editor used by Pix Desktop's Project explorer: zed, code/vscode, cursor, subl, idea, webstorm, or an executable path/name.
|
|
15
|
+
"externalEditor": "zed",
|
|
16
|
+
"git": {
|
|
17
|
+
// LLM used for Source Control and /code-review.
|
|
18
|
+
"reviewModelRef": "openai-codex/gpt-5.6-luna:medium",
|
|
19
|
+
"reviewFallbackModels": [],
|
|
20
|
+
// LLM used to generate commit messages in Desktop and /commit-message.
|
|
21
|
+
"commitMessageModelRef": "openai-codex/gpt-5.6-luna:minimal",
|
|
22
|
+
"commitMessageFallbackModels": []
|
|
23
|
+
}
|
|
24
|
+
},
|
|
9
25
|
|
|
10
26
|
"toolRenderer": {
|
|
11
27
|
"default": { "previewLines": 0, "direction": "head", "color": "toolTitle" },
|
|
@@ -52,14 +68,18 @@ export const DEFAULT_PIX_CONFIG_JSONC = String.raw `{
|
|
|
52
68
|
"antigravity/antigravity-claude-*": "error"
|
|
53
69
|
},
|
|
54
70
|
|
|
55
|
-
"promptEnhancer": { "modelRef": "openai-codex/gpt-5.6-luna" },
|
|
56
|
-
"autocomplete": { "modelRef": "zai/glm-5-turbo", "debounceMs": 350, "timeoutMs": 3000, "maxTokens": 48, "maxPromptTokens": 1200, "includeRecentMessages": 0 },
|
|
71
|
+
"promptEnhancer": { "modelRef": "openai-codex/gpt-5.6-luna", "fallbackModels": [] },
|
|
72
|
+
"autocomplete": { "modelRef": "zai/glm-5-turbo", "fallbackModels": [], "debounceMs": 350, "timeoutMs": 3000, "maxTokens": 48, "maxPromptTokens": 1200, "includeRecentMessages": 0 },
|
|
57
73
|
"sessionTitle": { "modelRef": "openai-codex/gpt-5.6-luna", "fallbackModels": ["zai/glm-5-turbo"] },
|
|
58
74
|
"dictation": {
|
|
75
|
+
// Deepgram API key used by both terminal and desktop voice input.
|
|
76
|
+
// Keep secrets in this user config (~/.config/pi/pix.jsonc), not project .pi/pix.jsonc.
|
|
77
|
+
"apiKey": "",
|
|
59
78
|
"language": "en",
|
|
79
|
+
"model": "nova-3",
|
|
60
80
|
"languages": {
|
|
61
|
-
"en": { "
|
|
62
|
-
"ru": { "
|
|
81
|
+
"en": { "deepgramLanguage": "en", "label": "English" },
|
|
82
|
+
"ru": { "deepgramLanguage": "ru", "label": "Russian" }
|
|
63
83
|
}
|
|
64
84
|
}
|
|
65
85
|
}
|
package/dist/schemas/index.d.ts
CHANGED
package/dist/schemas/index.js
CHANGED
|
@@ -14,12 +14,18 @@ export declare const PiToolsSuiteConfigSchema: Type.TObject<{
|
|
|
14
14
|
todoThinking: Type.TOptional<Type.TBoolean>;
|
|
15
15
|
todoThinkingOverrides: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TLiteral<"off">, Type.TLiteral<"minimal">, Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">, Type.TLiteral<"xhigh">, Type.TLiteral<"max">, Type.TNull]>>>;
|
|
16
16
|
lookupModel: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
17
|
+
lookupFallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
17
18
|
terminalBell: Type.TOptional<Type.TObject<{
|
|
18
19
|
sound: Type.TOptional<Type.TBoolean>;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
}>>;
|
|
21
|
+
telegramConnector: Type.TOptional<Type.TObject<{
|
|
22
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
23
|
+
botToken: Type.TOptional<Type.TString>;
|
|
24
|
+
chatId: Type.TOptional<Type.TUnion<[Type.TString, Type.TInteger]>>;
|
|
25
|
+
}>>;
|
|
26
|
+
commentChecker: Type.TOptional<Type.TObject<{
|
|
27
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
28
|
+
strictness: Type.TOptional<Type.TUnion<[Type.TLiteral<"conservative">, Type.TLiteral<"balanced">, Type.TLiteral<"aggressive">]>>;
|
|
23
29
|
}>>;
|
|
24
30
|
dcp: Type.TOptional<Type.TObject<{
|
|
25
31
|
enabled: Type.TOptional<Type.TBoolean>;
|
|
@@ -30,12 +36,13 @@ export declare const PiToolsSuiteConfigSchema: Type.TObject<{
|
|
|
30
36
|
}>>;
|
|
31
37
|
manualMode: Type.TOptional<Type.TObject<{
|
|
32
38
|
enabled: Type.TOptional<Type.TBoolean>;
|
|
39
|
+
automaticStrategies: Type.TOptional<Type.TNever>;
|
|
33
40
|
}>>;
|
|
34
41
|
compress: Type.TOptional<Type.TObject<{
|
|
35
42
|
maxContextPercent: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
36
43
|
minContextPercent: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
37
|
-
modelMaxContextPercent: Type.TOptional<Type.TRecord<"^.*$", Type.TNumber
|
|
38
|
-
modelMinContextPercent: Type.TOptional<Type.TRecord<"^.*$", Type.TNumber
|
|
44
|
+
modelMaxContextPercent: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
45
|
+
modelMinContextPercent: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
39
46
|
maxContextLimit: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
40
47
|
minContextLimit: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
41
48
|
modelMaxContextLimits: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
@@ -66,6 +73,7 @@ export declare const PiToolsSuiteConfigSchema: Type.TObject<{
|
|
|
66
73
|
enabled: Type.TOptional<Type.TBoolean>;
|
|
67
74
|
patience: Type.TOptional<Type.TNumber>;
|
|
68
75
|
summarizerModel: Type.TOptional<Type.TArray<Type.TString>>;
|
|
76
|
+
summarizerFallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
69
77
|
timeoutMs: Type.TOptional<Type.TNumber>;
|
|
70
78
|
}>>;
|
|
71
79
|
}>>;
|
|
@@ -80,68 +88,80 @@ export declare const PiToolsSuiteConfigSchema: Type.TObject<{
|
|
|
80
88
|
maxSuggestions: Type.TOptional<Type.TNumber>;
|
|
81
89
|
protectedTools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
82
90
|
}>>;
|
|
91
|
+
deduplication: Type.TOptional<Type.TNever>;
|
|
92
|
+
purgeErrors: Type.TOptional<Type.TNever>;
|
|
93
|
+
autoToolPruning: Type.TOptional<Type.TNever>;
|
|
83
94
|
}>>;
|
|
84
95
|
protectedFilePatterns: Type.TOptional<Type.TArray<Type.TString>>;
|
|
85
|
-
|
|
86
|
-
asyncSubagents: Type.TOptional<Type.TObject<{
|
|
87
|
-
defaultType: Type.TOptional<Type.TString>;
|
|
88
|
-
routing: Type.TOptional<Type.TObject<{
|
|
96
|
+
modelOverrides: Type.TOptional<Type.TRecord<"^.*$", Type.TObject<{
|
|
89
97
|
enabled: Type.TOptional<Type.TBoolean>;
|
|
90
|
-
model: Type.TOptional<Type.TString>;
|
|
91
|
-
fallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
92
|
-
maxTaskChars: Type.TOptional<Type.TNumber>;
|
|
93
|
-
maxTokens: Type.TOptional<Type.TNumber>;
|
|
94
|
-
maxRetries: Type.TOptional<Type.TNumber>;
|
|
95
|
-
timeoutMs: Type.TOptional<Type.TNumber>;
|
|
96
98
|
debug: Type.TOptional<Type.TBoolean>;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}>>;
|
|
101
|
-
presets: Type.TOptional<Type.TRecord<"^.*$", Type.TObject<{
|
|
102
|
-
description: Type.TOptional<Type.TString>;
|
|
103
|
-
models: Type.TOptional<Type.TArray<Type.TString>>;
|
|
104
|
-
model: Type.TOptional<Type.TString>;
|
|
105
|
-
fallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
106
|
-
thinking: Type.TOptional<Type.TString>;
|
|
107
|
-
extraArgs: Type.TOptional<Type.TArray<Type.TString>>;
|
|
108
|
-
timeoutMs: Type.TOptional<Type.TNumber>;
|
|
109
|
-
types: Type.TOptional<Type.TRecord<"^.*$", Type.TObject<{
|
|
110
|
-
model: Type.TOptional<Type.TString>;
|
|
111
|
-
fallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
112
|
-
thinking: Type.TOptional<Type.TString>;
|
|
113
|
-
extraArgs: Type.TOptional<Type.TArray<Type.TString>>;
|
|
114
|
-
timeoutMs: Type.TOptional<Type.TNumber>;
|
|
115
|
-
}>>>;
|
|
116
|
-
}>>>;
|
|
117
|
-
types: Type.TOptional<Type.TRecord<"^.*$", Type.TObject<{
|
|
118
|
-
description: Type.TOptional<Type.TString>;
|
|
119
|
-
icon: Type.TOptional<Type.TString>;
|
|
120
|
-
models: Type.TOptional<Type.TArray<Type.TString>>;
|
|
121
|
-
model: Type.TOptional<Type.TString>;
|
|
122
|
-
fallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
123
|
-
thinking: Type.TOptional<Type.TString>;
|
|
124
|
-
tools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
125
|
-
isolatedSkills: Type.TOptional<Type.TArray<Type.TString>>;
|
|
126
|
-
extraArgs: Type.TOptional<Type.TArray<Type.TString>>;
|
|
127
|
-
promptAppend: Type.TOptional<Type.TString>;
|
|
128
|
-
promptOverride: Type.TOptional<Type.TString>;
|
|
129
|
-
retry: Type.TOptional<Type.TObject<{
|
|
130
|
-
maxRetries: Type.TOptional<Type.TNumber>;
|
|
131
|
-
backoffMs: Type.TOptional<Type.TNumber>;
|
|
132
|
-
retryableExitCodes: Type.TOptional<Type.TArray<Type.TNumber>>;
|
|
99
|
+
debugLog: Type.TOptional<Type.TObject<{
|
|
100
|
+
maxBytes: Type.TOptional<Type.TNumber>;
|
|
101
|
+
maxBackups: Type.TOptional<Type.TNumber>;
|
|
133
102
|
}>>;
|
|
134
|
-
|
|
135
|
-
|
|
103
|
+
manualMode: Type.TOptional<Type.TObject<{
|
|
104
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
105
|
+
automaticStrategies: Type.TOptional<Type.TNever>;
|
|
106
|
+
}>>;
|
|
107
|
+
compress: Type.TOptional<Type.TObject<{
|
|
108
|
+
maxContextPercent: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
109
|
+
minContextPercent: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
110
|
+
modelMaxContextPercent: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
111
|
+
modelMinContextPercent: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
112
|
+
maxContextLimit: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
113
|
+
minContextLimit: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TString]>>;
|
|
114
|
+
modelMaxContextLimits: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
115
|
+
modelMinContextLimits: Type.TOptional<Type.TRecord<"^.*$", Type.TUnion<[Type.TNumber, Type.TString]>>>;
|
|
116
|
+
summaryBuffer: Type.TOptional<Type.TBoolean>;
|
|
117
|
+
nudgeFrequency: Type.TOptional<Type.TNumber>;
|
|
118
|
+
iterationNudgeThreshold: Type.TOptional<Type.TNumber>;
|
|
119
|
+
nudgeForce: Type.TOptional<Type.TUnion<[Type.TLiteral<"strong">, Type.TLiteral<"soft">]>>;
|
|
120
|
+
protectedTools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
121
|
+
protectTags: Type.TOptional<Type.TBoolean>;
|
|
122
|
+
protectUserMessages: Type.TOptional<Type.TBoolean>;
|
|
123
|
+
autoCandidates: Type.TOptional<Type.TObject<{
|
|
124
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
125
|
+
minContextPercent: Type.TOptional<Type.TNumber>;
|
|
126
|
+
keepRecentTurns: Type.TOptional<Type.TNumber>;
|
|
127
|
+
minMessages: Type.TOptional<Type.TNumber>;
|
|
128
|
+
minTokens: Type.TOptional<Type.TNumber>;
|
|
129
|
+
}>>;
|
|
130
|
+
messageMode: Type.TOptional<Type.TObject<{
|
|
131
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
132
|
+
minContextPercent: Type.TOptional<Type.TNumber>;
|
|
133
|
+
keepRecentTurns: Type.TOptional<Type.TNumber>;
|
|
134
|
+
mediumTokens: Type.TOptional<Type.TNumber>;
|
|
135
|
+
highTokens: Type.TOptional<Type.TNumber>;
|
|
136
|
+
maxSuggestions: Type.TOptional<Type.TNumber>;
|
|
137
|
+
}>>;
|
|
138
|
+
autoCompress: Type.TOptional<Type.TObject<{
|
|
139
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
140
|
+
patience: Type.TOptional<Type.TNumber>;
|
|
141
|
+
summarizerModel: Type.TOptional<Type.TArray<Type.TString>>;
|
|
142
|
+
summarizerFallbackModels: Type.TOptional<Type.TArray<Type.TString>>;
|
|
143
|
+
timeoutMs: Type.TOptional<Type.TNumber>;
|
|
144
|
+
}>>;
|
|
145
|
+
}>>;
|
|
146
|
+
strategies: Type.TOptional<Type.TObject<{
|
|
147
|
+
emergencyCurrentTurnPruning: Type.TOptional<Type.TObject<{
|
|
148
|
+
enabled: Type.TOptional<Type.TBoolean>;
|
|
149
|
+
hardContextPercent: Type.TOptional<Type.TNumber>;
|
|
150
|
+
targetContextPercent: Type.TOptional<Type.TNumber>;
|
|
151
|
+
patience: Type.TOptional<Type.TNumber>;
|
|
152
|
+
keepRecentToolPairs: Type.TOptional<Type.TNumber>;
|
|
153
|
+
minOutputTokens: Type.TOptional<Type.TNumber>;
|
|
154
|
+
maxSuggestions: Type.TOptional<Type.TNumber>;
|
|
155
|
+
protectedTools: Type.TOptional<Type.TArray<Type.TString>>;
|
|
156
|
+
}>>;
|
|
157
|
+
deduplication: Type.TOptional<Type.TNever>;
|
|
158
|
+
purgeErrors: Type.TOptional<Type.TNever>;
|
|
159
|
+
autoToolPruning: Type.TOptional<Type.TNever>;
|
|
160
|
+
}>>;
|
|
161
|
+
protectedFilePatterns: Type.TOptional<Type.TArray<Type.TString>>;
|
|
162
|
+
pruneNotification: Type.TOptional<Type.TNever>;
|
|
136
163
|
}>>>;
|
|
137
|
-
|
|
138
|
-
retry: Type.TOptional<Type.TObject<{
|
|
139
|
-
maxRetries: Type.TOptional<Type.TNumber>;
|
|
140
|
-
backoffMs: Type.TOptional<Type.TNumber>;
|
|
141
|
-
retryableExitCodes: Type.TOptional<Type.TArray<Type.TNumber>>;
|
|
142
|
-
}>>;
|
|
143
|
-
maxResultBytes: Type.TOptional<Type.TNumber>;
|
|
144
|
-
timeoutMs: Type.TOptional<Type.TNumber>;
|
|
164
|
+
pruneNotification: Type.TOptional<Type.TNever>;
|
|
145
165
|
}>>;
|
|
146
166
|
toolRenderer: Type.TOptional<Type.TObject<{
|
|
147
167
|
default: Type.TOptional<Type.TObject<{
|
|
@@ -184,6 +204,11 @@ export declare const PiToolsSuiteConfigSchema: Type.TObject<{
|
|
|
184
204
|
repoDiscovery: Type.TOptional<Type.TObject<{
|
|
185
205
|
profile: Type.TOptional<Type.TUnion<[Type.TLiteral<"baseline">, Type.TLiteral<"native-compact">]>>;
|
|
186
206
|
}>>;
|
|
207
|
+
resourceRegistry: Type.TOptional<Type.TObject<{
|
|
208
|
+
remote: Type.TOptional<Type.TString>;
|
|
209
|
+
branch: Type.TOptional<Type.TString>;
|
|
210
|
+
projectKey: Type.TOptional<Type.TString>;
|
|
211
|
+
}>>;
|
|
187
212
|
lsp: Type.TOptional<Type.TObject<{
|
|
188
213
|
servers: Type.TOptional<Type.TArray<Type.TObject<{
|
|
189
214
|
id: Type.TString;
|
|
@@ -206,5 +231,6 @@ export declare const PiToolsSuiteConfigSchema: Type.TObject<{
|
|
|
206
231
|
settings: Type.TOptional<Type.TUnknown>;
|
|
207
232
|
}>>>;
|
|
208
233
|
}>>;
|
|
234
|
+
asyncSubagents: Type.TOptional<Type.TNever>;
|
|
209
235
|
}>;
|
|
210
236
|
export type PiToolsSuiteConfigSchemaType = Static<typeof PiToolsSuiteConfigSchema>;
|