@agi-fans/dsh-tui 0.21.0 → 0.23.0
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/LICENSE +26 -0
- package/lib/CHANGELOG.md +356 -1
- package/lib/chrome/box.d.ts +32 -18
- package/lib/chrome/box.js +131 -132
- package/lib/chrome/box.js.map +1 -1
- package/lib/chrome/code-highlight.d.ts +15 -0
- package/lib/chrome/code-highlight.js +61 -5
- package/lib/chrome/code-highlight.js.map +1 -1
- package/lib/chrome/command-output.d.ts +28 -2
- package/lib/chrome/command-output.js +106 -4
- package/lib/chrome/command-output.js.map +1 -1
- package/lib/chrome/goal-bar.js +1 -1
- package/lib/chrome/goal-bar.js.map +1 -1
- package/lib/chrome/main-screen-renderer.d.ts +16 -0
- package/lib/chrome/main-screen-renderer.js +57 -8
- package/lib/chrome/main-screen-renderer.js.map +1 -1
- package/lib/chrome/markdown.d.ts +3 -3
- package/lib/chrome/markdown.js +101 -32
- package/lib/chrome/markdown.js.map +1 -1
- package/lib/chrome/md-style.d.ts +5 -2
- package/lib/chrome/md-style.js +13 -4
- package/lib/chrome/md-style.js.map +1 -1
- package/lib/chrome/relative-time.d.ts +17 -0
- package/lib/chrome/relative-time.js +36 -0
- package/lib/chrome/relative-time.js.map +1 -1
- package/lib/chrome/renderer.d.ts +37 -1
- package/lib/chrome/renderer.js.map +1 -1
- package/lib/chrome/secret-mask.d.ts +35 -0
- package/lib/chrome/secret-mask.js +180 -0
- package/lib/chrome/secret-mask.js.map +1 -0
- package/lib/chrome/status-config.d.ts +161 -51
- package/lib/chrome/status-config.js +237 -126
- package/lib/chrome/status-config.js.map +1 -1
- package/lib/chrome/status-line.d.ts +6 -5
- package/lib/chrome/status-line.js +110 -68
- package/lib/chrome/status-line.js.map +1 -1
- package/lib/chrome/terminal-colors.d.ts +85 -0
- package/lib/chrome/terminal-colors.js +230 -0
- package/lib/chrome/terminal-colors.js.map +1 -0
- package/lib/chrome/terminal-images.d.ts +9 -1
- package/lib/chrome/terminal-images.js +27 -4
- package/lib/chrome/terminal-images.js.map +1 -1
- package/lib/chrome/theme.d.ts +38 -10
- package/lib/chrome/theme.js +537 -542
- package/lib/chrome/theme.js.map +1 -1
- package/lib/chrome/tool-renderers.js +69 -13
- package/lib/chrome/tool-renderers.js.map +1 -1
- package/lib/chrome/tools-list.d.ts +1 -4
- package/lib/chrome/tools-list.js +1 -41
- package/lib/chrome/tools-list.js.map +1 -1
- package/lib/commands/auth-account.d.ts +9 -0
- package/lib/commands/auth-account.js +202 -0
- package/lib/commands/auth-account.js.map +1 -0
- package/lib/commands/auth-ids.d.ts +25 -0
- package/lib/commands/auth-ids.js +27 -0
- package/lib/commands/auth-ids.js.map +1 -0
- package/lib/commands/auth-input.d.ts +34 -0
- package/lib/commands/auth-input.js +96 -0
- package/lib/commands/auth-input.js.map +1 -0
- package/lib/commands/auth-providers.d.ts +39 -0
- package/lib/commands/auth-providers.js +125 -0
- package/lib/commands/auth-providers.js.map +1 -0
- package/lib/commands/auth.d.ts +12 -20
- package/lib/commands/auth.js +264 -627
- package/lib/commands/auth.js.map +1 -1
- package/lib/commands/btw.d.ts +13 -1
- package/lib/commands/btw.js +37 -104
- package/lib/commands/btw.js.map +1 -1
- package/lib/commands/diff.js +23 -112
- package/lib/commands/diff.js.map +1 -1
- package/lib/commands/export.d.ts +0 -1
- package/lib/commands/export.js +98 -57
- package/lib/commands/export.js.map +1 -1
- package/lib/commands/files.d.ts +17 -1
- package/lib/commands/files.js +68 -114
- package/lib/commands/files.js.map +1 -1
- package/lib/commands/integrations.d.ts +12 -1
- package/lib/commands/integrations.js +120 -23
- package/lib/commands/integrations.js.map +1 -1
- package/lib/commands/jobs-browser.d.ts +3 -0
- package/lib/commands/jobs-browser.js +152 -0
- package/lib/commands/jobs-browser.js.map +1 -0
- package/lib/commands/jobs.d.ts +12 -8
- package/lib/commands/jobs.js +65 -14
- package/lib/commands/jobs.js.map +1 -1
- package/lib/commands/model.d.ts +3 -0
- package/lib/commands/model.js +223 -114
- package/lib/commands/model.js.map +1 -1
- package/lib/commands/open-external.d.ts +2 -0
- package/lib/commands/open-external.js +19 -0
- package/lib/commands/open-external.js.map +1 -0
- package/lib/commands/permission.js +70 -60
- package/lib/commands/permission.js.map +1 -1
- package/lib/commands/plugins.js +427 -68
- package/lib/commands/plugins.js.map +1 -1
- package/lib/commands/schedule-catalog.d.ts +12 -0
- package/lib/commands/schedule-catalog.js +41 -0
- package/lib/commands/schedule-catalog.js.map +1 -0
- package/lib/commands/schedule-history.d.ts +4 -0
- package/lib/commands/schedule-history.js +62 -0
- package/lib/commands/schedule-history.js.map +1 -0
- package/lib/commands/schedule.d.ts +16 -9
- package/lib/commands/schedule.js +226 -162
- package/lib/commands/schedule.js.map +1 -1
- package/lib/commands/session-configuration.d.ts +3 -0
- package/lib/commands/session-configuration.js +58 -32
- package/lib/commands/session-configuration.js.map +1 -1
- package/lib/commands/session.js +118 -97
- package/lib/commands/session.js.map +1 -1
- package/lib/commands/terminal.d.ts +14 -8
- package/lib/commands/terminal.js +32 -185
- package/lib/commands/terminal.js.map +1 -1
- package/lib/commands/trajectory.js +4 -1
- package/lib/commands/trajectory.js.map +1 -1
- package/lib/definition.d.ts +226 -29
- package/lib/definition.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/input/actions.d.ts +51 -0
- package/lib/input/actions.js +123 -0
- package/lib/input/actions.js.map +1 -0
- package/lib/input/composer-files.d.ts +2 -0
- package/lib/input/composer-files.js +13 -3
- package/lib/input/composer-files.js.map +1 -1
- package/lib/input/editor.d.ts +0 -10
- package/lib/input/editor.js +11 -9
- package/lib/input/editor.js.map +1 -1
- package/lib/input/image-paste.d.ts +12 -1
- package/lib/input/image-paste.js +86 -1
- package/lib/input/image-paste.js.map +1 -1
- package/lib/input/key-test.d.ts +5 -0
- package/lib/input/key-test.js +19 -0
- package/lib/input/key-test.js.map +1 -0
- package/lib/input/keybindings-config.d.ts +12 -5
- package/lib/input/keybindings-config.js +30 -57
- package/lib/input/keybindings-config.js.map +1 -1
- package/lib/input/keys.d.ts +18 -0
- package/lib/input/keys.js +42 -4
- package/lib/input/keys.js.map +1 -1
- package/lib/input/wheel-scroll.d.ts +46 -0
- package/lib/input/wheel-scroll.js +69 -0
- package/lib/input/wheel-scroll.js.map +1 -0
- package/lib/locale/index.d.ts +6 -0
- package/lib/locale/index.js +32 -0
- package/lib/locale/index.js.map +1 -0
- package/lib/locale/prompt.d.ts +4 -0
- package/lib/locale/prompt.js +24 -0
- package/lib/locale/prompt.js.map +1 -0
- package/lib/locale/zh.d.ts +1114 -0
- package/lib/locale/zh.js +1115 -0
- package/lib/locale/zh.js.map +1 -0
- package/lib/prompt-intents.d.ts +186 -0
- package/lib/prompt-intents.js +131 -0
- package/lib/prompt-intents.js.map +1 -0
- package/lib/runtime/account-settings.d.ts +18 -0
- package/lib/runtime/account-settings.js +241 -0
- package/lib/runtime/account-settings.js.map +1 -0
- package/lib/runtime/agent-profile.d.ts +3 -3
- package/lib/runtime/agent-profile.js +4 -4
- package/lib/runtime/agent-profile.js.map +1 -1
- package/lib/runtime/btw-policy.js +2 -1
- package/lib/runtime/btw-policy.js.map +1 -1
- package/lib/runtime/btw.js +1 -2
- package/lib/runtime/btw.js.map +1 -1
- package/lib/runtime/cancellable.d.ts +75 -0
- package/lib/runtime/cancellable.js +76 -0
- package/lib/runtime/cancellable.js.map +1 -0
- package/lib/runtime/composer-images.d.ts +2 -2
- package/lib/runtime/composer-images.js +7 -6
- package/lib/runtime/composer-images.js.map +1 -1
- package/lib/runtime/composer-shell.d.ts +17 -2
- package/lib/runtime/composer-shell.js +133 -41
- package/lib/runtime/composer-shell.js.map +1 -1
- package/lib/runtime/file-browser.d.ts +19 -0
- package/lib/runtime/file-browser.js +291 -0
- package/lib/runtime/file-browser.js.map +1 -0
- package/lib/runtime/file-recovery-review.d.ts +0 -1
- package/lib/runtime/file-recovery-review.js +29 -30
- package/lib/runtime/file-recovery-review.js.map +1 -1
- package/lib/runtime/file-recovery-store.js +5 -1
- package/lib/runtime/file-recovery-store.js.map +1 -1
- package/lib/runtime/file-review.d.ts +6 -9
- package/lib/runtime/file-review.js +92 -8
- package/lib/runtime/file-review.js.map +1 -1
- package/lib/runtime/help-reader.d.ts +12 -0
- package/lib/runtime/help-reader.js +50 -0
- package/lib/runtime/help-reader.js.map +1 -0
- package/lib/runtime/hook-settings.d.ts +2 -2
- package/lib/runtime/human-interaction.js +1 -1
- package/lib/runtime/human-interaction.js.map +1 -1
- package/lib/runtime/model-catalog-editor.d.ts +12 -0
- package/lib/runtime/model-catalog-editor.js +215 -0
- package/lib/runtime/model-catalog-editor.js.map +1 -0
- package/lib/runtime/model-settings.d.ts +11 -0
- package/lib/runtime/model-settings.js +404 -0
- package/lib/runtime/model-settings.js.map +1 -0
- package/lib/runtime/plain-tui.d.ts +2 -0
- package/lib/runtime/plain-tui.js +7 -1
- package/lib/runtime/plain-tui.js.map +1 -1
- package/lib/runtime/plugin-settings.d.ts +4 -1
- package/lib/runtime/plugin-settings.js +170 -92
- package/lib/runtime/plugin-settings.js.map +1 -1
- package/lib/runtime/prompt-browser.d.ts +9 -0
- package/lib/runtime/prompt-browser.js +19 -0
- package/lib/runtime/prompt-browser.js.map +1 -0
- package/lib/runtime/provider-local.d.ts +80 -38
- package/lib/runtime/provider-local.js +2280 -683
- package/lib/runtime/provider-local.js.map +1 -1
- package/lib/runtime/reference-reader.d.ts +15 -0
- package/lib/runtime/reference-reader.js +78 -0
- package/lib/runtime/reference-reader.js.map +1 -0
- package/lib/runtime/runner.js +42 -39
- package/lib/runtime/runner.js.map +1 -1
- package/lib/runtime/session-runtime.js +1 -1
- package/lib/runtime/session-runtime.js.map +1 -1
- package/lib/runtime/settings-draft.d.ts +21 -0
- package/lib/runtime/settings-draft.js +166 -0
- package/lib/runtime/settings-draft.js.map +1 -0
- package/lib/runtime/settings-preferences.js +1 -1
- package/lib/runtime/settings-preferences.js.map +1 -1
- package/lib/runtime/startup-notices.d.ts +0 -1
- package/lib/runtime/startup-notices.js +35 -4
- package/lib/runtime/startup-notices.js.map +1 -1
- package/lib/runtime/subagent-model-selection.js +2 -1
- package/lib/runtime/subagent-model-selection.js.map +1 -1
- package/lib/runtime/subagent-settings.d.ts +14 -0
- package/lib/runtime/subagent-settings.js +288 -0
- package/lib/runtime/subagent-settings.js.map +1 -0
- package/lib/runtime/terminal-modes.d.ts +47 -0
- package/lib/runtime/terminal-modes.js +86 -0
- package/lib/runtime/terminal-modes.js.map +1 -0
- package/lib/runtime/terminal-notifications.d.ts +6 -5
- package/lib/runtime/terminal-notifications.js +17 -16
- package/lib/runtime/terminal-notifications.js.map +1 -1
- package/lib/runtime/terminal-probe.d.ts +38 -0
- package/lib/runtime/terminal-probe.js +46 -0
- package/lib/runtime/terminal-probe.js.map +1 -0
- package/lib/runtime/terminal-session.d.ts +57 -0
- package/lib/runtime/terminal-session.js +164 -0
- package/lib/runtime/terminal-session.js.map +1 -0
- package/lib/runtime/tool-presentation.js.map +1 -1
- package/lib/runtime/tool-reader.d.ts +5 -0
- package/lib/runtime/tool-reader.js +27 -0
- package/lib/runtime/tool-reader.js.map +1 -0
- package/lib/runtime/web-settings.d.ts +14 -0
- package/lib/runtime/web-settings.js +339 -0
- package/lib/runtime/web-settings.js.map +1 -0
- package/lib/session/command-attachments.d.ts +17 -0
- package/lib/session/command-attachments.js +50 -0
- package/lib/session/command-attachments.js.map +1 -0
- package/lib/session/context-diagnostics.d.ts +16 -0
- package/lib/session/context-diagnostics.js +15 -0
- package/lib/session/context-diagnostics.js.map +1 -1
- package/lib/session/external-agents.d.ts +3 -1
- package/lib/session/external-agents.js +35 -10
- package/lib/session/external-agents.js.map +1 -1
- package/lib/session/generation-continuation.d.ts +11 -0
- package/lib/session/generation-continuation.js +34 -0
- package/lib/session/generation-continuation.js.map +1 -0
- package/lib/session/goal-controls.d.ts +5 -0
- package/lib/session/goal-controls.js +81 -0
- package/lib/session/goal-controls.js.map +1 -0
- package/lib/session/interaction-adapter.d.ts +7 -3
- package/lib/session/interaction-adapter.js +125 -54
- package/lib/session/interaction-adapter.js.map +1 -1
- package/lib/session/message-queue.d.ts +2 -0
- package/lib/session/message-queue.js +102 -17
- package/lib/session/message-queue.js.map +1 -1
- package/lib/session/package-metadata.d.ts +8 -0
- package/lib/session/package-metadata.js +8 -0
- package/lib/session/package-metadata.js.map +1 -1
- package/lib/session/pending-inputs.d.ts +30 -0
- package/lib/session/pending-inputs.js +183 -0
- package/lib/session/pending-inputs.js.map +1 -0
- package/lib/session/session-configuration.js +1 -1
- package/lib/session/session-configuration.js.map +1 -1
- package/lib/session/session-controller.d.ts +42 -24
- package/lib/session/session-controller.js +534 -106
- package/lib/session/session-controller.js.map +1 -1
- package/lib/session/session-tree.d.ts +2 -0
- package/lib/session/session-tree.js +2 -0
- package/lib/session/session-tree.js.map +1 -1
- package/lib/session/subagent-roster.d.ts +1 -0
- package/lib/session/subagent-roster.js +16 -5
- package/lib/session/subagent-roster.js.map +1 -1
- package/lib/session/subagent-tracker.d.ts +2 -0
- package/lib/session/subagent-tracker.js +18 -0
- package/lib/session/subagent-tracker.js.map +1 -1
- package/lib/session/tui-settings.d.ts +48 -15
- package/lib/session/tui-settings.js +75 -34
- package/lib/session/tui-settings.js.map +1 -1
- package/lib/session/workflow-projection.d.ts +2 -1
- package/lib/session/workflow-projection.js +34 -4
- package/lib/session/workflow-projection.js.map +1 -1
- package/lib/views/autocomplete.d.ts +28 -9
- package/lib/views/autocomplete.js +90 -70
- package/lib/views/autocomplete.js.map +1 -1
- package/lib/views/context-overview.d.ts +4 -0
- package/lib/views/context-overview.js +43 -0
- package/lib/views/context-overview.js.map +1 -0
- package/lib/views/copy-targets.d.ts +18 -15
- package/lib/views/copy-targets.js +35 -60
- package/lib/views/copy-targets.js.map +1 -1
- package/lib/views/document-reader.d.ts +10 -1
- package/lib/views/document-reader.js +76 -9
- package/lib/views/document-reader.js.map +1 -1
- package/lib/views/event-views.js +71 -17
- package/lib/views/event-views.js.map +1 -1
- package/lib/views/file-actions.js +21 -0
- package/lib/views/file-actions.js.map +1 -1
- package/lib/views/file-browser.d.ts +98 -0
- package/lib/views/file-browser.js +120 -0
- package/lib/views/file-browser.js.map +1 -0
- package/lib/views/history-search.js +19 -25
- package/lib/views/history-search.js.map +1 -1
- package/lib/views/hotkey-format.d.ts +3 -2
- package/lib/views/hotkey-format.js +4 -3
- package/lib/views/hotkey-format.js.map +1 -1
- package/lib/views/hotkeys.d.ts +7 -1
- package/lib/views/hotkeys.js +59 -37
- package/lib/views/hotkeys.js.map +1 -1
- package/lib/views/list-navigation.d.ts +62 -0
- package/lib/views/list-navigation.js +73 -0
- package/lib/views/list-navigation.js.map +1 -0
- package/lib/views/list-view.d.ts +99 -0
- package/lib/views/list-view.js +170 -0
- package/lib/views/list-view.js.map +1 -0
- package/lib/views/prompt-selector.d.ts +54 -4
- package/lib/views/prompt-selector.js +349 -162
- package/lib/views/prompt-selector.js.map +1 -1
- package/lib/views/session-files.d.ts +1 -2
- package/lib/views/session-files.js +1 -11
- package/lib/views/session-files.js.map +1 -1
- package/lib/views/settings-list.d.ts +16 -9
- package/lib/views/settings-list.js +171 -315
- package/lib/views/settings-list.js.map +1 -1
- package/lib/views/tool-actions.d.ts +16 -0
- package/lib/views/tool-actions.js +29 -0
- package/lib/views/tool-actions.js.map +1 -0
- package/lib/views/trajectory-timeline.d.ts +71 -0
- package/lib/views/trajectory-timeline.js +143 -0
- package/lib/views/trajectory-timeline.js.map +1 -0
- package/lib/views/trajectory.d.ts +36 -4
- package/lib/views/trajectory.js +842 -190
- package/lib/views/trajectory.js.map +1 -1
- package/lib/views/transcript-render.d.ts +132 -38
- package/lib/views/transcript-render.js +792 -260
- package/lib/views/transcript-render.js.map +1 -1
- package/lib/views/transcript-search.d.ts +39 -6
- package/lib/views/transcript-search.js +46 -11
- package/lib/views/transcript-search.js.map +1 -1
- package/lib/views/transcript-types.d.ts +64 -5
- package/lib/views/transcript-types.js +23 -11
- package/lib/views/transcript-types.js.map +1 -1
- package/lib/views/workflow.d.ts +16 -0
- package/lib/views/workflow.js +42 -0
- package/lib/views/workflow.js.map +1 -0
- package/package.json +74 -90
- package/lib/chrome/welcome-tips.d.ts +0 -11
- package/lib/chrome/welcome-tips.js +0 -44
- package/lib/chrome/welcome-tips.js.map +0 -1
- package/lib/commands/advisor.d.ts +0 -15
- package/lib/commands/advisor.js +0 -200
- package/lib/commands/advisor.js.map +0 -1
- package/lib/commands/loop.d.ts +0 -52
- package/lib/commands/loop.js +0 -307
- package/lib/commands/loop.js.map +0 -1
- package/lib/commands/rate.d.ts +0 -33
- package/lib/commands/rate.js +0 -212
- package/lib/commands/rate.js.map +0 -1
- package/lib/commands/steer.d.ts +0 -5
- package/lib/commands/steer.js +0 -24
- package/lib/commands/steer.js.map +0 -1
- package/lib/commands/worktree.d.ts +0 -5
- package/lib/commands/worktree.js +0 -103
- package/lib/commands/worktree.js.map +0 -1
- package/lib/runtime/terminal-reader.d.ts +0 -11
- package/lib/runtime/terminal-reader.js +0 -87
- package/lib/runtime/terminal-reader.js.map +0 -1
- package/lib/session/steering.d.ts +0 -3
- package/lib/session/steering.js +0 -9
- package/lib/session/steering.js.map +0 -1
- package/lib/views/agent-hub.d.ts +0 -32
- package/lib/views/agent-hub.js +0 -209
- package/lib/views/agent-hub.js.map +0 -1
- package/lib/views/copy-selector.d.ts +0 -54
- package/lib/views/copy-selector.js +0 -170
- package/lib/views/copy-selector.js.map +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { choosePrompt } from "../prompt-intents.js";
|
|
2
|
+
import { readReference } from "./reference-reader.js";
|
|
1
3
|
/** Startup release notes and update-notification Cordis plugin. */
|
|
2
4
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
5
|
import { homedir } from 'node:os';
|
|
4
6
|
import { join } from 'node:path';
|
|
5
7
|
import { fileURLToPath } from 'node:url';
|
|
6
8
|
import { registerCommands } from "../commands/registration.js";
|
|
7
|
-
import { changelogText, resolveStartupChangelog } from "../session/release-notes.js";
|
|
9
|
+
import { changelogText, parseChangelog, resolveStartupChangelog } from "../session/release-notes.js";
|
|
8
10
|
import { APP_VERSION, PACKAGE_NAME } from "../session/package-metadata.js";
|
|
9
11
|
import { checkForUpdate } from "../session/update-check.js";
|
|
10
12
|
export const name = 'omdsh-startup-notices';
|
|
@@ -109,13 +111,42 @@ class StartupNotices {
|
|
|
109
111
|
}
|
|
110
112
|
}
|
|
111
113
|
}
|
|
112
|
-
async function showChangelog(config, invocation) {
|
|
114
|
+
async function showChangelog(tui, config, invocation) {
|
|
113
115
|
const input = invocation.rawInput.trim().toLowerCase();
|
|
114
116
|
if (input !== '' && input !== 'full')
|
|
115
117
|
return { kind: 'error', text: 'Usage: /changelog [full]' };
|
|
116
118
|
try {
|
|
117
119
|
const changelog = await readFile(config.changelogPath, 'utf8');
|
|
118
|
-
|
|
120
|
+
if (tui.interactive !== true)
|
|
121
|
+
return { kind: 'success', text: changelogText(changelog, input === 'full') };
|
|
122
|
+
const abort = new AbortController();
|
|
123
|
+
const signal = AbortSignal.any([invocation.signal, abort.signal]);
|
|
124
|
+
const surface = {
|
|
125
|
+
prompt: (request) => tui.prompt({ ...request, signal, onSuperseded: () => { abort.abort(); } }),
|
|
126
|
+
...(tui.copyText === undefined ? {} : { copyText: (text, label) => tui.copyText(text, label) }),
|
|
127
|
+
};
|
|
128
|
+
const entries = parseChangelog(changelog);
|
|
129
|
+
if (input === 'full' || entries.length === 0) {
|
|
130
|
+
await readReference(surface, 'Changelog', changelogText(changelog, true), signal);
|
|
131
|
+
return { kind: 'success' };
|
|
132
|
+
}
|
|
133
|
+
let selected = entries[0].version;
|
|
134
|
+
while (!signal.aborted) {
|
|
135
|
+
const answer = await surface.prompt(choosePrompt({ localize: ['title', 'question'], title: 'Changelog', question: 'Choose a release', filterable: true, initialValue: selected,
|
|
136
|
+
options: entries.map(entry => ({ label: `v${entry.version}`, value: entry.version,
|
|
137
|
+
description: [entry.markdown.split('\n')[0]?.match(/\d{4}-\d{2}-\d{2}/u)?.[0],
|
|
138
|
+
...Object.entries(entry.categoryCounts).map(([category, count]) => `${count} ${category.toLowerCase()}`)].filter(Boolean).join(' · '),
|
|
139
|
+
})),
|
|
140
|
+
}));
|
|
141
|
+
if (answer === null || signal.aborted)
|
|
142
|
+
break;
|
|
143
|
+
const entry = entries.find(item => item.version === answer);
|
|
144
|
+
if (entry === undefined)
|
|
145
|
+
break;
|
|
146
|
+
selected = entry.version;
|
|
147
|
+
await readReference(surface, `Changelog · v${entry.version}`, entry.markdown, signal);
|
|
148
|
+
}
|
|
149
|
+
return { kind: 'success' };
|
|
119
150
|
}
|
|
120
151
|
catch (error) {
|
|
121
152
|
return { kind: 'error', text: 'Changelog unavailable: ' + (error instanceof Error ? error.message : String(error)) };
|
|
@@ -135,7 +166,7 @@ export function apply(ctx, config = {}) {
|
|
|
135
166
|
name: 'changelog',
|
|
136
167
|
description: 'Show recent release notes',
|
|
137
168
|
input: { hint: '[full]' },
|
|
138
|
-
handler: invocation => showChangelog(resolved, invocation),
|
|
169
|
+
handler: invocation => showChangelog(tui, resolved, invocation),
|
|
139
170
|
}], 'omdsh changelog command');
|
|
140
171
|
ctx.provide('omdshStartup', new StartupNotices(tui, resolved));
|
|
141
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup-notices.js","sourceRoot":"","sources":["../../src/runtime/startup-notices.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAE9D,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"startup-notices.js","sourceRoot":"","sources":["../../src/runtime/startup-notices.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@ export function apply(ctx) {
|
|
|
9
9
|
throw new Error('Subagent model selection requires the product tool-subagent entry.');
|
|
10
10
|
// The global tool stays available for deployment restrictions. The Harness
|
|
11
11
|
// installs the sampled variant in each Agent's scope and owns its teardown.
|
|
12
|
+
// Discovery is its own opt-in since 0.2.2 and does not follow model selection.
|
|
12
13
|
const inherited = Config(interpolate(ctx, entry.options.config));
|
|
13
|
-
applyDelegation(ctx, { ...inherited,
|
|
14
|
+
applyDelegation(ctx, { ...inherited, modelSelection: true, modelDiscovery: true });
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=subagent-model-selection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-model-selection.js","sourceRoot":"","sources":["../../src/runtime/subagent-model-selection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAG7G,MAAM,CAAC,MAAM,IAAI,GAAG,gCAAgC,CAAA;AACpD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAgB,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAA;AAE/E,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,eAAe;WACjF,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,gCAAgC,CAAC,CAAA;IAC3D,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;IAC9G,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,eAAe,CAAC,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"subagent-model-selection.js","sourceRoot":"","sources":["../../src/runtime/subagent-model-selection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,EAAE,KAAK,IAAI,eAAe,EAAE,MAAM,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAG7G,MAAM,CAAC,MAAM,IAAI,GAAG,gCAAgC,CAAA;AACpD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAG,gBAAgB,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAA;AAE/E,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,eAAe;WACjF,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,gCAAgC,CAAC,CAAA;IAC3D,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;IAC9G,2EAA2E;IAC3E,4EAA4E;IAC5E,+EAA+E;IAC/E,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,eAAe,CAAC,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;AACpF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Delegation preferences remain Harness-owned; this editor only stages their fields. */
|
|
2
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
+
export declare const SUBAGENT_SETTINGS_FIELDS: Record<string, readonly string[]>;
|
|
4
|
+
export declare function subagentSettingsEntry(ctx: Context): {
|
|
5
|
+
id: string;
|
|
6
|
+
label: string;
|
|
7
|
+
section: "agent";
|
|
8
|
+
fields: never[];
|
|
9
|
+
summary: string;
|
|
10
|
+
behavior: string;
|
|
11
|
+
keywords: string[];
|
|
12
|
+
description: string;
|
|
13
|
+
}[];
|
|
14
|
+
export declare function openSubagentSettings(ctx: Context, signal: AbortSignal, resetOnly?: boolean): Promise<void>;
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { settingsDraftSummary } from "./settings-draft.js";
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
import { askPrompt } from "../prompt-intents.js";
|
|
4
|
+
import { resolveUiLanguage, uiText } from "../locale/index.js";
|
|
5
|
+
const LIMITS = 'subagent', MODELS = 'subagent-model-selection-settings';
|
|
6
|
+
export const SUBAGENT_SETTINGS_FIELDS = {
|
|
7
|
+
[LIMITS]: ['maxDepth', 'maxActiveSubagents'], [MODELS]: ['enabled', 'allowedModels'],
|
|
8
|
+
};
|
|
9
|
+
const labels = { maxDepth: 'Delegation depth', maxActiveSubagents: 'Concurrent subagents', enabled: 'Model selection', allowedModels: 'Allowed models' };
|
|
10
|
+
const help = {
|
|
11
|
+
maxDepth: 'Main agent: depth 0; its children: depth 1; their children: depth 2. A tool’s own depth limit takes precedence. Applies to future delegations.',
|
|
12
|
+
maxActiveSubagents: 'Counts live subagents at every depth under one main agent, excluding the main agent. Lowering this limit does not stop existing children.',
|
|
13
|
+
enabled: 'Applies to new sessions only. Existing sessions keep their model policy; forked children inherit the parent route. Disabling keeps the model list.',
|
|
14
|
+
allowedModels: 'Choose exact provider and model routes for new sessions. Enabling model selection requires at least one route.',
|
|
15
|
+
};
|
|
16
|
+
const list = { allowCustom: false, notify: false, localize: ['title', 'question', 'actions'] };
|
|
17
|
+
const object = (value) => typeof value === 'object' && value !== null && !Array.isArray(value) ? value : {};
|
|
18
|
+
const text = (ctx, source) => uiText(resolveUiLanguage(ctx.tui.prefs().uiLanguage), source);
|
|
19
|
+
const describe = (ctx, ns) => ctx.settings.describe({ redactSecrets: true }).find(section => section.ns === ns);
|
|
20
|
+
const routes = (value) => Array.isArray(value) ? value.filter((row) => typeof row?.provider === 'string' && typeof row?.model === 'string') : [];
|
|
21
|
+
const routeKey = (route) => encodeURIComponent(JSON.stringify([route.provider, route.model]));
|
|
22
|
+
export function subagentSettingsEntry(ctx) {
|
|
23
|
+
if (![LIMITS, MODELS].some(ns => describe(ctx, ns) !== undefined))
|
|
24
|
+
return [];
|
|
25
|
+
return [{ id: 'subagents:settings', label: 'Subagents', section: 'agent', fields: [], summary: 'Configure', behavior: ctx.settings.writable ? 'Profile · Apply to save' : 'Profile · Read only',
|
|
26
|
+
keywords: ['Subagent models', ...Object.values(labels)], description: 'Edit delegation limits and model choices together, then Apply to save.' }];
|
|
27
|
+
}
|
|
28
|
+
export async function openSubagentSettings(ctx, signal, resetOnly = false) {
|
|
29
|
+
const drafts = new Map();
|
|
30
|
+
const sync = () => {
|
|
31
|
+
for (const ns of [LIMITS, MODELS]) {
|
|
32
|
+
const section = describe(ctx, ns), draft = drafts.get(ns);
|
|
33
|
+
if (draft?.changes.size)
|
|
34
|
+
continue;
|
|
35
|
+
if (section === undefined)
|
|
36
|
+
drafts.delete(ns);
|
|
37
|
+
else
|
|
38
|
+
drafts.set(ns, { section, changes: new Map(), error: '' });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
sync();
|
|
42
|
+
if (!drafts.size || signal.aborted)
|
|
43
|
+
return;
|
|
44
|
+
const schema = (draft, field) => new z(draft.section.schema).dict?.[field];
|
|
45
|
+
const fields = () => [...drafts].flatMap(([ns, draft]) => (SUBAGENT_SETTINGS_FIELDS[ns] ?? [])
|
|
46
|
+
.filter(field => { const item = schema(draft, field); return item !== undefined && !item.meta.hidden && !item.meta.disabled; })
|
|
47
|
+
.map(field => ({ ns, field, draft })));
|
|
48
|
+
const inherited = (draft, field) => object(draft.section.base)[field] ?? schema(draft, field)?.meta.default;
|
|
49
|
+
const value = (ns, field) => {
|
|
50
|
+
const draft = drafts.get(ns);
|
|
51
|
+
if (draft === undefined)
|
|
52
|
+
return undefined;
|
|
53
|
+
return draft.changes.has(field) ? draft.changes.get(field) ?? inherited(draft, field) : object(draft.section.value)[field] ?? schema(draft, field)?.meta.default;
|
|
54
|
+
};
|
|
55
|
+
const summary = (ns, field, draft) => {
|
|
56
|
+
const current = value(ns, field);
|
|
57
|
+
const shown = field === 'enabled' ? text(ctx, current ? 'Enabled' : 'Disabled') : field === 'allowedModels' ? String(routes(current).length) : String(current ?? '');
|
|
58
|
+
return shown + ' · ' + text(ctx, draft.changes.has(field) ? 'Draft' : Object.hasOwn(object(draft.section.user), field) ? 'Profile override' : 'Inherited');
|
|
59
|
+
};
|
|
60
|
+
// Generation fences prevent late catalog responses from replacing a newer refresh
|
|
61
|
+
// or retaining this editor after dismissal. Providers settle independently.
|
|
62
|
+
let active = true, generation = 0, catalogRevision = 0, loaded = false, pending = 0;
|
|
63
|
+
let catalogError = '';
|
|
64
|
+
const catalogs = new Map(), failures = new Set();
|
|
65
|
+
const reload = () => {
|
|
66
|
+
const epoch = ++generation;
|
|
67
|
+
if (!active || signal.aborted)
|
|
68
|
+
return;
|
|
69
|
+
loaded = true;
|
|
70
|
+
pending = 0;
|
|
71
|
+
catalogError = '';
|
|
72
|
+
failures.clear();
|
|
73
|
+
catalogRevision++;
|
|
74
|
+
try {
|
|
75
|
+
const llm = ctx.get('llm');
|
|
76
|
+
if (llm === undefined)
|
|
77
|
+
throw new Error('Model catalog unavailable');
|
|
78
|
+
const providers = llm.listProviders();
|
|
79
|
+
for (const id of catalogs.keys())
|
|
80
|
+
if (!providers.some(provider => provider.id === id))
|
|
81
|
+
catalogs.delete(id);
|
|
82
|
+
pending = providers.length;
|
|
83
|
+
for (const provider of providers) {
|
|
84
|
+
void Promise.resolve().then(() => llm.listModels(provider.id)).then(models => {
|
|
85
|
+
if (!active || signal.aborted || epoch !== generation)
|
|
86
|
+
return;
|
|
87
|
+
catalogs.set(provider.id, models.map(model => ({ route: { provider: provider.id, model: model.id }, label: `${model.name ?? model.id} · ${provider.id}` })));
|
|
88
|
+
}, () => {
|
|
89
|
+
if (active && !signal.aborted && epoch === generation)
|
|
90
|
+
failures.add(provider.id);
|
|
91
|
+
}).finally(() => {
|
|
92
|
+
if (active && !signal.aborted && epoch === generation) {
|
|
93
|
+
pending--;
|
|
94
|
+
catalogRevision++;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
catalogError = 'Model catalog could not be loaded. Use Refresh models to retry.';
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const catalogChanged = () => { if (loaded)
|
|
104
|
+
reload(); };
|
|
105
|
+
const off = [ctx.on('llm/adapters-updated', catalogChanged), ctx.on('settings/document-updated', catalogChanged)];
|
|
106
|
+
const catalogStatus = () => [
|
|
107
|
+
...(pending ? [text(ctx, 'Loading models…')] : []), ...(catalogError ? [text(ctx, catalogError)] : []),
|
|
108
|
+
...(failures.size ? [text(ctx, 'Some model providers could not be loaded. Use Refresh models to retry.') + ' ' + [...failures].join(', ')] : []),
|
|
109
|
+
].join('\n');
|
|
110
|
+
const pickModels = async () => {
|
|
111
|
+
if (!loaded)
|
|
112
|
+
reload();
|
|
113
|
+
const seen = new Map();
|
|
114
|
+
const current = routes(value(MODELS, 'allowedModels'));
|
|
115
|
+
for (const route of current)
|
|
116
|
+
seen.set(routeKey(route), { route, label: `${route.model} · ${route.provider}` });
|
|
117
|
+
let revision = -1, rows = [];
|
|
118
|
+
const options = () => {
|
|
119
|
+
if (revision === catalogRevision)
|
|
120
|
+
return rows;
|
|
121
|
+
revision = catalogRevision;
|
|
122
|
+
const available = new Set();
|
|
123
|
+
for (const [provider, entries] of catalogs)
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
const key = routeKey(entry.route);
|
|
126
|
+
seen.set(key, entry);
|
|
127
|
+
if (!catalogError && !failures.has(provider))
|
|
128
|
+
available.add(key);
|
|
129
|
+
}
|
|
130
|
+
// Keep every displayed route until this picker closes, so a refresh cannot
|
|
131
|
+
// silently drop a checkbox that the user has already toggled.
|
|
132
|
+
rows = [...seen].map(([key, entry]) => ({ label: entry.label, value: key, description: entry.route.model,
|
|
133
|
+
...(!available.has(key) ? { badge: { label: text(ctx, 'Currently unavailable'), tone: 'muted' } } : {}) }));
|
|
134
|
+
const status = catalogStatus();
|
|
135
|
+
if (status)
|
|
136
|
+
rows = [...rows, { label: status, value: '@catalog-status', disabled: true }];
|
|
137
|
+
return rows;
|
|
138
|
+
};
|
|
139
|
+
const answer = await ctx.tui.prompt({ ...list, title: 'Allowed subagent models', question: 'Choose models for the draft',
|
|
140
|
+
detail: text(ctx, 'Space toggles a model; Enter keeps the selection in the draft. Return to Subagents and use Refresh models to retry a failed catalog.'),
|
|
141
|
+
filterable: true, multiSelect: true, allowEmptySelection: true, initialValues: current.map(routeKey),
|
|
142
|
+
emptyText: text(ctx, 'No models are available. Configure a provider or use Refresh models.'), options: options(), refreshOptions: options, signal });
|
|
143
|
+
if (answer === null || signal.aborted)
|
|
144
|
+
return;
|
|
145
|
+
const selected = answer === '' ? [] : answer.split(', ').map(key => {
|
|
146
|
+
const entry = seen.get(key);
|
|
147
|
+
if (entry === undefined)
|
|
148
|
+
throw new Error('Model selection changed. Refresh and retry.');
|
|
149
|
+
return { ...entry.route };
|
|
150
|
+
});
|
|
151
|
+
drafts.get(MODELS).changes.set('allowedModels', selected);
|
|
152
|
+
};
|
|
153
|
+
const editNumber = async (ns, field) => {
|
|
154
|
+
const draft = drafts.get(ns);
|
|
155
|
+
let input = String(value(ns, field) ?? ''), error = '';
|
|
156
|
+
while (!signal.aborted) {
|
|
157
|
+
const raw = await ctx.tui.prompt(askPrompt({ ...list, title: 'Subagents', question: labels[field],
|
|
158
|
+
detail: [text(ctx, help[field]), text(ctx, error || 'Leave empty to restore inheritance.')].join('\n'), initialInput: input, signal }));
|
|
159
|
+
if (raw === null)
|
|
160
|
+
return;
|
|
161
|
+
input = raw;
|
|
162
|
+
try {
|
|
163
|
+
let parsed;
|
|
164
|
+
if (raw.trim()) {
|
|
165
|
+
parsed = Number(raw.trim());
|
|
166
|
+
if (!/^\d+$/u.test(raw.trim()) || !Number.isSafeInteger(parsed) || parsed < (field === 'maxDepth' ? 0 : 1))
|
|
167
|
+
throw new Error(field === 'maxDepth' ? 'Enter a non-negative whole number.' : 'Enter a positive whole number.');
|
|
168
|
+
schema(draft, field)?.(parsed);
|
|
169
|
+
}
|
|
170
|
+
draft.changes.set(field, parsed);
|
|
171
|
+
draft.error = '';
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
catch (cause) {
|
|
175
|
+
error = cause instanceof Error ? cause.message : String(cause);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const restore = async () => {
|
|
180
|
+
const entries = fields();
|
|
181
|
+
const selected = await ctx.tui.prompt({ ...list, title: 'Subagents', question: 'Choose a setting to restore',
|
|
182
|
+
detail: text(ctx, 'Restoring inheritance changes the draft. Apply saves it.'),
|
|
183
|
+
options: entries.map(({ ns, field, draft }) => ({ label: text(ctx, labels[field]), value: field, description: summary(ns, field, draft) })), signal });
|
|
184
|
+
const entry = entries.find(entry => entry.field === selected);
|
|
185
|
+
if (entry !== undefined && !signal.aborted) {
|
|
186
|
+
entry.draft.changes.set(entry.field, undefined);
|
|
187
|
+
entry.draft.error = '';
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const save = async () => {
|
|
191
|
+
// Validate the combined model policy before writing either section.
|
|
192
|
+
const modelDraft = drafts.get(MODELS);
|
|
193
|
+
if (modelDraft?.changes.size && value(MODELS, 'enabled') === true && !routes(value(MODELS, 'allowedModels')).length) {
|
|
194
|
+
modelDraft.error = 'Choose at least one allowed model before enabling subagent model selection.';
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
let ok = true;
|
|
198
|
+
for (const [ns, draft] of drafts) {
|
|
199
|
+
if (!draft.changes.size)
|
|
200
|
+
continue;
|
|
201
|
+
try {
|
|
202
|
+
signal.throwIfAborted();
|
|
203
|
+
if (!ctx.settings.writable)
|
|
204
|
+
throw new Error('This profile is read-only.');
|
|
205
|
+
if (describe(ctx, ns)?.revision !== draft.section.revision)
|
|
206
|
+
throw new Error('Configuration changed. Your draft is kept. Cancel and reopen to load the latest settings.');
|
|
207
|
+
for (const field of draft.changes.keys())
|
|
208
|
+
schema(draft, field)?.(value(ns, field));
|
|
209
|
+
const ops = [...draft.changes].map(([field, next]) => next === undefined ? { op: 'unset', path: [field] } : { op: 'set', path: [field], value: next });
|
|
210
|
+
await ctx.settings.mutate(ns, ops, draft.section.revision);
|
|
211
|
+
draft.changes.clear();
|
|
212
|
+
draft.error = '';
|
|
213
|
+
const next = describe(ctx, ns);
|
|
214
|
+
if (next === undefined)
|
|
215
|
+
drafts.delete(ns);
|
|
216
|
+
else
|
|
217
|
+
draft.section = next;
|
|
218
|
+
}
|
|
219
|
+
catch (cause) {
|
|
220
|
+
if (signal.aborted)
|
|
221
|
+
return false;
|
|
222
|
+
ok = false;
|
|
223
|
+
draft.error = cause instanceof Error ? cause.message : String(cause);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return ok;
|
|
227
|
+
};
|
|
228
|
+
const detail = () => [settingsDraftSummary(ctx, [...drafts.values()].reduce((count, draft) => count + draft.changes.size, 0)), ...[...drafts.values()].filter(draft => draft.error)
|
|
229
|
+
.map(draft => text(ctx, draft.section.ns === LIMITS ? 'Delegation limits' : 'Subagent models') + ': ' + text(ctx, draft.error))
|
|
230
|
+
.concat(catalogStatus())].filter(Boolean).join('\n');
|
|
231
|
+
try {
|
|
232
|
+
if (resetOnly && ctx.settings.writable)
|
|
233
|
+
await restore();
|
|
234
|
+
while (!signal.aborted) {
|
|
235
|
+
sync();
|
|
236
|
+
const writable = ctx.settings.writable;
|
|
237
|
+
const answer = await ctx.tui.prompt({ ...list, title: 'Subagents', question: 'Edit the draft, then Apply to save',
|
|
238
|
+
detail: detail(), refreshDocument: detail,
|
|
239
|
+
options: [...fields().map(({ ns, field, draft }) => ({ label: text(ctx, labels[field]), value: field, description: summary(ns, field, draft), preview: text(ctx, help[field]), disabled: !writable })),
|
|
240
|
+
{ label: text(ctx, 'Restore inherited setting…'), value: 'restore', disabled: !writable },
|
|
241
|
+
...(drafts.has(MODELS) ? [{ label: text(ctx, 'Refresh models'), value: 'refresh' }] : []),
|
|
242
|
+
{ label: text(ctx, 'Apply'), value: 'apply', disabled: !writable || !drafts.size }, { label: text(ctx, 'Cancel'), value: 'cancel' }], signal });
|
|
243
|
+
if (answer === null || answer === 'cancel' || signal.aborted)
|
|
244
|
+
return;
|
|
245
|
+
if (answer === 'refresh') {
|
|
246
|
+
reload();
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
if (!ctx.settings.writable)
|
|
250
|
+
continue;
|
|
251
|
+
try {
|
|
252
|
+
const entry = fields().find(entry => entry.field === answer);
|
|
253
|
+
if (answer === 'restore')
|
|
254
|
+
await restore();
|
|
255
|
+
else if (answer === 'apply') {
|
|
256
|
+
if (await save()) {
|
|
257
|
+
ctx.tui.notice('Subagent settings saved.');
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
else if (entry !== undefined) {
|
|
262
|
+
if (answer === 'allowedModels')
|
|
263
|
+
await pickModels();
|
|
264
|
+
else if (answer === 'enabled') {
|
|
265
|
+
const choice = await ctx.tui.prompt({ ...list, title: 'Subagents', question: 'Model selection', detail: text(ctx, help.enabled),
|
|
266
|
+
initialValue: value(MODELS, 'enabled') ? 'on' : 'off', options: [{ label: text(ctx, 'Enabled'), value: 'on' }, { label: text(ctx, 'Disabled'), value: 'off' }], signal });
|
|
267
|
+
if (choice !== null && !signal.aborted)
|
|
268
|
+
entry.draft.changes.set('enabled', choice === 'on');
|
|
269
|
+
}
|
|
270
|
+
else
|
|
271
|
+
await editNumber(entry.ns, answer);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch (cause) {
|
|
275
|
+
if (signal.aborted)
|
|
276
|
+
return;
|
|
277
|
+
ctx.tui.notice(cause instanceof Error ? text(ctx, cause.message) : String(cause), { level: 'error' });
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
finally {
|
|
282
|
+
active = false;
|
|
283
|
+
generation++;
|
|
284
|
+
for (const dispose of off)
|
|
285
|
+
dispose();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=subagent-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-settings.js","sourceRoot":"","sources":["../../src/runtime/subagent-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal modes the TUI turns on, owned in one place so they are always
|
|
3
|
+
* given back.
|
|
4
|
+
*
|
|
5
|
+
* Every mode is a pair of sequences. The controller remembers which modes are
|
|
6
|
+
* on, in the order they were turned on, and gives them all back — in reverse —
|
|
7
|
+
* when the terminal is handed to someone else (`Ctrl+Z`, an external editor),
|
|
8
|
+
* when the session ends, or when the process exits without disposing. Taking
|
|
9
|
+
* the terminal back re-enables the same set. A mode added or removed while the
|
|
10
|
+
* terminal is handed off is recorded and applied on the way back, so no caller
|
|
11
|
+
* has to know whether the terminal is currently ours.
|
|
12
|
+
* @module @agi-fans/dsh-tui/terminal-modes
|
|
13
|
+
*/
|
|
14
|
+
/** One reversible terminal mode. */
|
|
15
|
+
export interface TerminalMode {
|
|
16
|
+
readonly enable: string;
|
|
17
|
+
readonly disable: string;
|
|
18
|
+
}
|
|
19
|
+
/** Bracketed paste (DEC 2004). */
|
|
20
|
+
export declare const BRACKETED_PASTE: TerminalMode;
|
|
21
|
+
/** Focus in/out reports (DEC 1004). */
|
|
22
|
+
export declare const FOCUS_REPORTING: TerminalMode;
|
|
23
|
+
/** Button, drag and wheel reports in SGR encoding (DEC 1000, 1002, 1006). */
|
|
24
|
+
export declare const MOUSE_TRACKING: TerminalMode;
|
|
25
|
+
/** One entry on the Kitty keyboard stack with the disambiguate flag. */
|
|
26
|
+
export declare const KITTY_KEYBOARD: TerminalMode;
|
|
27
|
+
/** Named modes, applied in insertion order and given back in reverse. */
|
|
28
|
+
export declare class TerminalModes {
|
|
29
|
+
#private;
|
|
30
|
+
constructor(write: (bytes: string) => void);
|
|
31
|
+
/** Whether the terminal is currently handed to another program. */
|
|
32
|
+
get handedOff(): boolean;
|
|
33
|
+
/** Whether `name` is on (or will be on once the terminal is taken back). */
|
|
34
|
+
has(name: string): boolean;
|
|
35
|
+
/** Turn one mode on; a mode that is already on is left alone. */
|
|
36
|
+
enable(name: string, mode: TerminalMode): void;
|
|
37
|
+
/** Record a mode as on without writing, for a push deferred to another screen. */
|
|
38
|
+
adopt(name: string, mode: TerminalMode): void;
|
|
39
|
+
/** Turn one mode off; a mode that is not on is left alone. */
|
|
40
|
+
disable(name: string): void;
|
|
41
|
+
/** Give every mode back, keeping the set, before another program owns the terminal. */
|
|
42
|
+
handOff(): void;
|
|
43
|
+
/** Re-enable the recorded set once the terminal is ours again. */
|
|
44
|
+
takeBack(): void;
|
|
45
|
+
/** Give every mode back for good. Safe to call more than once. */
|
|
46
|
+
release(): void;
|
|
47
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal modes the TUI turns on, owned in one place so they are always
|
|
3
|
+
* given back.
|
|
4
|
+
*
|
|
5
|
+
* Every mode is a pair of sequences. The controller remembers which modes are
|
|
6
|
+
* on, in the order they were turned on, and gives them all back — in reverse —
|
|
7
|
+
* when the terminal is handed to someone else (`Ctrl+Z`, an external editor),
|
|
8
|
+
* when the session ends, or when the process exits without disposing. Taking
|
|
9
|
+
* the terminal back re-enables the same set. A mode added or removed while the
|
|
10
|
+
* terminal is handed off is recorded and applied on the way back, so no caller
|
|
11
|
+
* has to know whether the terminal is currently ours.
|
|
12
|
+
* @module @agi-fans/dsh-tui/terminal-modes
|
|
13
|
+
*/
|
|
14
|
+
import { KITTY_PROTOCOL_OFF, KITTY_PROTOCOL_ON } from "./terminal-probe.js";
|
|
15
|
+
/** Bracketed paste (DEC 2004). */
|
|
16
|
+
export const BRACKETED_PASTE = { enable: '\x1b[?2004h', disable: '\x1b[?2004l' };
|
|
17
|
+
/** Focus in/out reports (DEC 1004). */
|
|
18
|
+
export const FOCUS_REPORTING = { enable: '\x1b[?1004h', disable: '\x1b[?1004l' };
|
|
19
|
+
/** Button, drag and wheel reports in SGR encoding (DEC 1000, 1002, 1006). */
|
|
20
|
+
export const MOUSE_TRACKING = {
|
|
21
|
+
enable: '\x1b[?1000h\x1b[?1002h\x1b[?1006h',
|
|
22
|
+
disable: '\x1b[?1006l\x1b[?1002l\x1b[?1000l',
|
|
23
|
+
};
|
|
24
|
+
/** One entry on the Kitty keyboard stack with the disambiguate flag. */
|
|
25
|
+
export const KITTY_KEYBOARD = { enable: KITTY_PROTOCOL_ON, disable: KITTY_PROTOCOL_OFF };
|
|
26
|
+
/** Named modes, applied in insertion order and given back in reverse. */
|
|
27
|
+
export class TerminalModes {
|
|
28
|
+
#write;
|
|
29
|
+
#active = new Map();
|
|
30
|
+
#handedOff = false;
|
|
31
|
+
constructor(write) {
|
|
32
|
+
this.#write = write;
|
|
33
|
+
}
|
|
34
|
+
/** Whether the terminal is currently handed to another program. */
|
|
35
|
+
get handedOff() { return this.#handedOff; }
|
|
36
|
+
/** Whether `name` is on (or will be on once the terminal is taken back). */
|
|
37
|
+
has(name) { return this.#active.has(name); }
|
|
38
|
+
/** Turn one mode on; a mode that is already on is left alone. */
|
|
39
|
+
enable(name, mode) {
|
|
40
|
+
if (this.#active.has(name))
|
|
41
|
+
return;
|
|
42
|
+
this.#active.set(name, mode);
|
|
43
|
+
if (!this.#handedOff)
|
|
44
|
+
this.#write(mode.enable);
|
|
45
|
+
}
|
|
46
|
+
/** Record a mode as on without writing, for a push deferred to another screen. */
|
|
47
|
+
adopt(name, mode) {
|
|
48
|
+
if (!this.#active.has(name))
|
|
49
|
+
this.#active.set(name, mode);
|
|
50
|
+
}
|
|
51
|
+
/** Turn one mode off; a mode that is not on is left alone. */
|
|
52
|
+
disable(name) {
|
|
53
|
+
const mode = this.#active.get(name);
|
|
54
|
+
if (mode === undefined)
|
|
55
|
+
return;
|
|
56
|
+
this.#active.delete(name);
|
|
57
|
+
if (!this.#handedOff)
|
|
58
|
+
this.#write(mode.disable);
|
|
59
|
+
}
|
|
60
|
+
/** Give every mode back, keeping the set, before another program owns the terminal. */
|
|
61
|
+
handOff() {
|
|
62
|
+
if (this.#handedOff)
|
|
63
|
+
return;
|
|
64
|
+
this.#handedOff = true;
|
|
65
|
+
this.#write(this.#disableAll());
|
|
66
|
+
}
|
|
67
|
+
/** Re-enable the recorded set once the terminal is ours again. */
|
|
68
|
+
takeBack() {
|
|
69
|
+
if (!this.#handedOff)
|
|
70
|
+
return;
|
|
71
|
+
this.#handedOff = false;
|
|
72
|
+
this.#write([...this.#active.values()].map(mode => mode.enable).join(''));
|
|
73
|
+
}
|
|
74
|
+
/** Give every mode back for good. Safe to call more than once. */
|
|
75
|
+
release() {
|
|
76
|
+
const bytes = this.#handedOff ? '' : this.#disableAll();
|
|
77
|
+
this.#active.clear();
|
|
78
|
+
this.#handedOff = false;
|
|
79
|
+
if (bytes !== '')
|
|
80
|
+
this.#write(bytes);
|
|
81
|
+
}
|
|
82
|
+
#disableAll() {
|
|
83
|
+
return [...this.#active.values()].reverse().map(mode => mode.disable).join('');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=terminal-modes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-modes.js","sourceRoot":"","sources":["../../src/runtime/terminal-modes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { type UiLanguage } from '../locale/index.ts';
|
|
1
2
|
/** Opt-in terminal notifications kept outside the transcript renderer. */
|
|
2
|
-
export type TerminalNotificationPolicy = 'off' | '
|
|
3
|
+
export type TerminalNotificationPolicy = 'off' | 'unfocused' | 'always';
|
|
3
4
|
export interface TerminalNotificationOptions {
|
|
5
|
+
readonly language?: UiLanguage;
|
|
4
6
|
readonly policy: TerminalNotificationPolicy;
|
|
5
7
|
readonly thresholdMs: number;
|
|
6
8
|
}
|
|
7
9
|
export interface TerminalNotification {
|
|
10
|
+
readonly attention?: boolean;
|
|
8
11
|
readonly title: string;
|
|
9
12
|
readonly body: string;
|
|
10
13
|
}
|
|
@@ -20,15 +23,13 @@ export declare class TerminalNotificationController {
|
|
|
20
23
|
event(event: NotificationEvent, now?: number): TerminalNotification | undefined;
|
|
21
24
|
humanPrompt(label?: string): TerminalNotification | undefined;
|
|
22
25
|
}
|
|
23
|
-
export type NotificationFocus = 'always' | 'unfocused';
|
|
24
26
|
/** Keep one notification per event burst, with input requests and failures first. */
|
|
25
27
|
export declare class TerminalNotificationQueue {
|
|
26
28
|
#private;
|
|
27
29
|
offer(notification: TerminalNotification): void;
|
|
28
30
|
clear(): void;
|
|
29
|
-
|
|
31
|
+
/** Drain the coalesced event. Whether it should be delivered is the caller's policy. */
|
|
32
|
+
take(): TerminalNotification | undefined;
|
|
30
33
|
}
|
|
31
34
|
/** OSC 9 is supported by common terminal emulators and never enters screen text. */
|
|
32
35
|
export declare function terminalNotificationSequence(notification: TerminalNotification): string;
|
|
33
|
-
/** Windows Terminal-compatible native taskbar/tab progress sequences. */
|
|
34
|
-
export declare function terminalProgressSequence(active: boolean): string;
|