@dsh-cc/tui 0.5.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 +201 -0
- package/README.md +144 -0
- package/lib/bash-history.d.ts +31 -0
- package/lib/bash-history.d.ts.map +1 -0
- package/lib/bash-history.js +94 -0
- package/lib/bash-history.js.map +1 -0
- package/lib/compact-fold.d.ts +35 -0
- package/lib/compact-fold.d.ts.map +1 -0
- package/lib/compact-fold.js +60 -0
- package/lib/compact-fold.js.map +1 -0
- package/lib/components/arg-completers.d.ts +22 -0
- package/lib/components/arg-completers.d.ts.map +1 -0
- package/lib/components/arg-completers.js +75 -0
- package/lib/components/arg-completers.js.map +1 -0
- package/lib/components/code-theme.d.ts +25 -0
- package/lib/components/code-theme.d.ts.map +1 -0
- package/lib/components/code-theme.js +137 -0
- package/lib/components/code-theme.js.map +1 -0
- package/lib/components/completion.d.ts +50 -0
- package/lib/components/completion.d.ts.map +1 -0
- package/lib/components/completion.js +279 -0
- package/lib/components/completion.js.map +1 -0
- package/lib/components/diff-card.d.ts +29 -0
- package/lib/components/diff-card.d.ts.map +1 -0
- package/lib/components/diff-card.js +175 -0
- package/lib/components/diff-card.js.map +1 -0
- package/lib/components/diff-hunks.d.ts +44 -0
- package/lib/components/diff-hunks.d.ts.map +1 -0
- package/lib/components/diff-hunks.js +188 -0
- package/lib/components/diff-hunks.js.map +1 -0
- package/lib/components/editor-history.d.ts +23 -0
- package/lib/components/editor-history.d.ts.map +1 -0
- package/lib/components/editor-history.js +29 -0
- package/lib/components/editor-history.js.map +1 -0
- package/lib/components/markdown-theme.d.ts +11 -0
- package/lib/components/markdown-theme.d.ts.map +1 -0
- package/lib/components/markdown-theme.js +29 -0
- package/lib/components/markdown-theme.js.map +1 -0
- package/lib/components/masked-input.d.ts +24 -0
- package/lib/components/masked-input.d.ts.map +1 -0
- package/lib/components/masked-input.js +168 -0
- package/lib/components/masked-input.js.map +1 -0
- package/lib/components/overlay-host.d.ts +31 -0
- package/lib/components/overlay-host.d.ts.map +1 -0
- package/lib/components/overlay-host.js +128 -0
- package/lib/components/overlay-host.js.map +1 -0
- package/lib/components/overlays.d.ts +94 -0
- package/lib/components/overlays.d.ts.map +1 -0
- package/lib/components/overlays.js +450 -0
- package/lib/components/overlays.js.map +1 -0
- package/lib/components/provider-box.d.ts +23 -0
- package/lib/components/provider-box.d.ts.map +1 -0
- package/lib/components/provider-box.js +164 -0
- package/lib/components/provider-box.js.map +1 -0
- package/lib/components/read-group.d.ts +51 -0
- package/lib/components/read-group.d.ts.map +1 -0
- package/lib/components/read-group.js +105 -0
- package/lib/components/read-group.js.map +1 -0
- package/lib/components/root-bash.d.ts +36 -0
- package/lib/components/root-bash.d.ts.map +1 -0
- package/lib/components/root-bash.js +112 -0
- package/lib/components/root-bash.js.map +1 -0
- package/lib/components/root-types.d.ts +42 -0
- package/lib/components/root-types.d.ts.map +1 -0
- package/lib/components/root-types.js +8 -0
- package/lib/components/root-types.js.map +1 -0
- package/lib/components/root-utils.d.ts +22 -0
- package/lib/components/root-utils.d.ts.map +1 -0
- package/lib/components/root-utils.js +45 -0
- package/lib/components/root-utils.js.map +1 -0
- package/lib/components/root.d.ts +25 -0
- package/lib/components/root.d.ts.map +1 -0
- package/lib/components/root.js +357 -0
- package/lib/components/root.js.map +1 -0
- package/lib/components/theme.d.ts +61 -0
- package/lib/components/theme.d.ts.map +1 -0
- package/lib/components/theme.js +99 -0
- package/lib/components/theme.js.map +1 -0
- package/lib/components/transcript.d.ts +43 -0
- package/lib/components/transcript.d.ts.map +1 -0
- package/lib/components/transcript.js +203 -0
- package/lib/components/transcript.js.map +1 -0
- package/lib/components/working-line.d.ts +35 -0
- package/lib/components/working-line.d.ts.map +1 -0
- package/lib/components/working-line.js +66 -0
- package/lib/components/working-line.js.map +1 -0
- package/lib/effort-catalog.d.ts +27 -0
- package/lib/effort-catalog.d.ts.map +1 -0
- package/lib/effort-catalog.js +36 -0
- package/lib/effort-catalog.js.map +1 -0
- package/lib/export-markdown.d.ts +18 -0
- package/lib/export-markdown.d.ts.map +1 -0
- package/lib/export-markdown.js +124 -0
- package/lib/export-markdown.js.map +1 -0
- package/lib/harness/approval-preview.d.ts +33 -0
- package/lib/harness/approval-preview.d.ts.map +1 -0
- package/lib/harness/approval-preview.js +179 -0
- package/lib/harness/approval-preview.js.map +1 -0
- package/lib/harness/boot-banner.d.ts +14 -0
- package/lib/harness/boot-banner.d.ts.map +1 -0
- package/lib/harness/boot-banner.js +89 -0
- package/lib/harness/boot-banner.js.map +1 -0
- package/lib/harness/driver-agent.d.ts +78 -0
- package/lib/harness/driver-agent.d.ts.map +1 -0
- package/lib/harness/driver-agent.js +314 -0
- package/lib/harness/driver-agent.js.map +1 -0
- package/lib/harness/driver-agents.d.ts +20 -0
- package/lib/harness/driver-agents.d.ts.map +1 -0
- package/lib/harness/driver-agents.js +123 -0
- package/lib/harness/driver-agents.js.map +1 -0
- package/lib/harness/driver-approvals.d.ts +38 -0
- package/lib/harness/driver-approvals.d.ts.map +1 -0
- package/lib/harness/driver-approvals.js +277 -0
- package/lib/harness/driver-approvals.js.map +1 -0
- package/lib/harness/driver-bash.d.ts +15 -0
- package/lib/harness/driver-bash.d.ts.map +1 -0
- package/lib/harness/driver-bash.js +73 -0
- package/lib/harness/driver-bash.js.map +1 -0
- package/lib/harness/driver-catalog.d.ts +84 -0
- package/lib/harness/driver-catalog.d.ts.map +1 -0
- package/lib/harness/driver-catalog.js +256 -0
- package/lib/harness/driver-catalog.js.map +1 -0
- package/lib/harness/driver-ctx.d.ts +462 -0
- package/lib/harness/driver-ctx.d.ts.map +1 -0
- package/lib/harness/driver-ctx.js +11 -0
- package/lib/harness/driver-ctx.js.map +1 -0
- package/lib/harness/driver-hud.d.ts +31 -0
- package/lib/harness/driver-hud.d.ts.map +1 -0
- package/lib/harness/driver-hud.js +204 -0
- package/lib/harness/driver-hud.js.map +1 -0
- package/lib/harness/driver-live.d.ts +36 -0
- package/lib/harness/driver-live.d.ts.map +1 -0
- package/lib/harness/driver-live.js +44 -0
- package/lib/harness/driver-live.js.map +1 -0
- package/lib/harness/driver-modal.d.ts +52 -0
- package/lib/harness/driver-modal.d.ts.map +1 -0
- package/lib/harness/driver-modal.js +78 -0
- package/lib/harness/driver-modal.js.map +1 -0
- package/lib/harness/driver-mode.d.ts +35 -0
- package/lib/harness/driver-mode.d.ts.map +1 -0
- package/lib/harness/driver-mode.js +84 -0
- package/lib/harness/driver-mode.js.map +1 -0
- package/lib/harness/driver-pickers.d.ts +48 -0
- package/lib/harness/driver-pickers.d.ts.map +1 -0
- package/lib/harness/driver-pickers.js +249 -0
- package/lib/harness/driver-pickers.js.map +1 -0
- package/lib/harness/driver-promote.d.ts +29 -0
- package/lib/harness/driver-promote.d.ts.map +1 -0
- package/lib/harness/driver-promote.js +36 -0
- package/lib/harness/driver-promote.js.map +1 -0
- package/lib/harness/driver-queue.d.ts +19 -0
- package/lib/harness/driver-queue.d.ts.map +1 -0
- package/lib/harness/driver-queue.js +281 -0
- package/lib/harness/driver-queue.js.map +1 -0
- package/lib/harness/driver-run-local.d.ts +32 -0
- package/lib/harness/driver-run-local.d.ts.map +1 -0
- package/lib/harness/driver-run-local.js +366 -0
- package/lib/harness/driver-run-local.js.map +1 -0
- package/lib/harness/driver-sessions.d.ts +28 -0
- package/lib/harness/driver-sessions.d.ts.map +1 -0
- package/lib/harness/driver-sessions.js +386 -0
- package/lib/harness/driver-sessions.js.map +1 -0
- package/lib/harness/driver.d.ts +22 -0
- package/lib/harness/driver.d.ts.map +1 -0
- package/lib/harness/driver.js +459 -0
- package/lib/harness/driver.js.map +1 -0
- package/lib/harness/preset.d.ts +32 -0
- package/lib/harness/preset.d.ts.map +1 -0
- package/lib/harness/preset.js +34 -0
- package/lib/harness/preset.js.map +1 -0
- package/lib/harness/session-list.d.ts +65 -0
- package/lib/harness/session-list.d.ts.map +1 -0
- package/lib/harness/session-list.js +91 -0
- package/lib/harness/session-list.js.map +1 -0
- package/lib/harness/shell-output.d.ts +44 -0
- package/lib/harness/shell-output.d.ts.map +1 -0
- package/lib/harness/shell-output.js +90 -0
- package/lib/harness/shell-output.js.map +1 -0
- package/lib/harness/statusline-cc-transcript.d.ts +51 -0
- package/lib/harness/statusline-cc-transcript.d.ts.map +1 -0
- package/lib/harness/statusline-cc-transcript.js +191 -0
- package/lib/harness/statusline-cc-transcript.js.map +1 -0
- package/lib/harness/statusline-command.d.ts +54 -0
- package/lib/harness/statusline-command.d.ts.map +1 -0
- package/lib/harness/statusline-command.js +161 -0
- package/lib/harness/statusline-command.js.map +1 -0
- package/lib/harness/statusline-payload.d.ts +79 -0
- package/lib/harness/statusline-payload.d.ts.map +1 -0
- package/lib/harness/statusline-payload.js +93 -0
- package/lib/harness/statusline-payload.js.map +1 -0
- package/lib/harness/statusline-settings.d.ts +47 -0
- package/lib/harness/statusline-settings.d.ts.map +1 -0
- package/lib/harness/statusline-settings.js +57 -0
- package/lib/harness/statusline-settings.js.map +1 -0
- package/lib/harness/statusline-wiring.d.ts +45 -0
- package/lib/harness/statusline-wiring.d.ts.map +1 -0
- package/lib/harness/statusline-wiring.js +247 -0
- package/lib/harness/statusline-wiring.js.map +1 -0
- package/lib/harness/usage-view.d.ts +84 -0
- package/lib/harness/usage-view.d.ts.map +1 -0
- package/lib/harness/usage-view.js +199 -0
- package/lib/harness/usage-view.js.map +1 -0
- package/lib/harness/worktree-exit.d.ts +105 -0
- package/lib/harness/worktree-exit.d.ts.map +1 -0
- package/lib/harness/worktree-exit.js +168 -0
- package/lib/harness/worktree-exit.js.map +1 -0
- package/lib/history.d.ts +50 -0
- package/lib/history.d.ts.map +1 -0
- package/lib/history.js +139 -0
- package/lib/history.js.map +1 -0
- package/lib/index.d.ts +63 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +54 -0
- package/lib/index.js.map +1 -0
- package/lib/input.d.ts +158 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +400 -0
- package/lib/input.js.map +1 -0
- package/lib/invariant.d.ts +14 -0
- package/lib/invariant.d.ts.map +1 -0
- package/lib/invariant.js +20 -0
- package/lib/invariant.js.map +1 -0
- package/lib/mode-cycle.d.ts +22 -0
- package/lib/mode-cycle.d.ts.map +1 -0
- package/lib/mode-cycle.js +32 -0
- package/lib/mode-cycle.js.map +1 -0
- package/lib/model-catalog.d.ts +22 -0
- package/lib/model-catalog.d.ts.map +1 -0
- package/lib/model-catalog.js +45 -0
- package/lib/model-catalog.js.map +1 -0
- package/lib/packaged-preset.d.ts +32 -0
- package/lib/packaged-preset.d.ts.map +1 -0
- package/lib/packaged-preset.js +94 -0
- package/lib/packaged-preset.js.map +1 -0
- package/lib/plugin.d.ts +11 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +88 -0
- package/lib/plugin.js.map +1 -0
- package/lib/profile.d.ts +4 -0
- package/lib/profile.d.ts.map +1 -0
- package/lib/profile.js +7 -0
- package/lib/profile.js.map +1 -0
- package/lib/project-sessions.d.ts +29 -0
- package/lib/project-sessions.d.ts.map +1 -0
- package/lib/project-sessions.js +60 -0
- package/lib/project-sessions.js.map +1 -0
- package/lib/project.d.ts +75 -0
- package/lib/project.d.ts.map +1 -0
- package/lib/project.js +196 -0
- package/lib/project.js.map +1 -0
- package/lib/provider-actions.d.ts +37 -0
- package/lib/provider-actions.d.ts.map +1 -0
- package/lib/provider-actions.js +417 -0
- package/lib/provider-actions.js.map +1 -0
- package/lib/provider-command.d.ts +109 -0
- package/lib/provider-command.d.ts.map +1 -0
- package/lib/provider-command.js +220 -0
- package/lib/provider-command.js.map +1 -0
- package/lib/provider-detail.d.ts +15 -0
- package/lib/provider-detail.d.ts.map +1 -0
- package/lib/provider-detail.js +201 -0
- package/lib/provider-detail.js.map +1 -0
- package/lib/provider-flow.d.ts +191 -0
- package/lib/provider-flow.d.ts.map +1 -0
- package/lib/provider-flow.js +192 -0
- package/lib/provider-flow.js.map +1 -0
- package/lib/provider-presets.d.ts +32 -0
- package/lib/provider-presets.d.ts.map +1 -0
- package/lib/provider-presets.js +105 -0
- package/lib/provider-presets.js.map +1 -0
- package/lib/provider-read.d.ts +63 -0
- package/lib/provider-read.d.ts.map +1 -0
- package/lib/provider-read.js +115 -0
- package/lib/provider-read.js.map +1 -0
- package/lib/provider-settings.d.ts +30 -0
- package/lib/provider-settings.d.ts.map +1 -0
- package/lib/provider-settings.js +65 -0
- package/lib/provider-settings.js.map +1 -0
- package/lib/resume-target.d.ts +59 -0
- package/lib/resume-target.d.ts.map +1 -0
- package/lib/resume-target.js +143 -0
- package/lib/resume-target.js.map +1 -0
- package/lib/slash.d.ts +44 -0
- package/lib/slash.d.ts.map +1 -0
- package/lib/slash.js +81 -0
- package/lib/slash.js.map +1 -0
- package/lib/state/driver-types.d.ts +505 -0
- package/lib/state/driver-types.d.ts.map +1 -0
- package/lib/state/driver-types.js +8 -0
- package/lib/state/driver-types.js.map +1 -0
- package/lib/state/driver-usage-types.d.ts +59 -0
- package/lib/state/driver-usage-types.d.ts.map +1 -0
- package/lib/state/driver-usage-types.js +8 -0
- package/lib/state/driver-usage-types.js.map +1 -0
- package/lib/statusline.d.ts +63 -0
- package/lib/statusline.d.ts.map +1 -0
- package/lib/statusline.js +97 -0
- package/lib/statusline.js.map +1 -0
- package/lib/store/pickers.d.ts +34 -0
- package/lib/store/pickers.d.ts.map +1 -0
- package/lib/store/pickers.js +111 -0
- package/lib/store/pickers.js.map +1 -0
- package/lib/store/provider-panel.d.ts +107 -0
- package/lib/store/provider-panel.d.ts.map +1 -0
- package/lib/store/provider-panel.js +151 -0
- package/lib/store/provider-panel.js.map +1 -0
- package/lib/store/question.d.ts +21 -0
- package/lib/store/question.d.ts.map +1 -0
- package/lib/store/question.js +59 -0
- package/lib/store/question.js.map +1 -0
- package/lib/store/queue.d.ts +27 -0
- package/lib/store/queue.d.ts.map +1 -0
- package/lib/store/queue.js +34 -0
- package/lib/store/queue.js.map +1 -0
- package/lib/store/session.d.ts +73 -0
- package/lib/store/session.d.ts.map +1 -0
- package/lib/store/session.js +172 -0
- package/lib/store/session.js.map +1 -0
- package/lib/store/subagents.d.ts +16 -0
- package/lib/store/subagents.d.ts.map +1 -0
- package/lib/store/subagents.js +44 -0
- package/lib/store/subagents.js.map +1 -0
- package/lib/store/todos.d.ts +35 -0
- package/lib/store/todos.d.ts.map +1 -0
- package/lib/store/todos.js +68 -0
- package/lib/store/todos.js.map +1 -0
- package/lib/store/usage.d.ts +15 -0
- package/lib/store/usage.d.ts.map +1 -0
- package/lib/store/usage.js +27 -0
- package/lib/store/usage.js.map +1 -0
- package/lib/store/views.d.ts +419 -0
- package/lib/store/views.d.ts.map +1 -0
- package/lib/store/views.js +3 -0
- package/lib/store/views.js.map +1 -0
- package/lib/store.d.ts +19 -0
- package/lib/store.d.ts.map +1 -0
- package/lib/store.js +10 -0
- package/lib/store.js.map +1 -0
- package/lib/terminal/lease.d.ts +33 -0
- package/lib/terminal/lease.d.ts.map +1 -0
- package/lib/terminal/lease.js +99 -0
- package/lib/terminal/lease.js.map +1 -0
- package/lib/tool-card.d.ts +75 -0
- package/lib/tool-card.d.ts.map +1 -0
- package/lib/tool-card.js +109 -0
- package/lib/tool-card.js.map +1 -0
- package/lib/tool-verbs.d.ts +12 -0
- package/lib/tool-verbs.d.ts.map +1 -0
- package/lib/tool-verbs.js +29 -0
- package/lib/tool-verbs.js.map +1 -0
- package/lib/transcript.d.ts +40 -0
- package/lib/transcript.d.ts.map +1 -0
- package/lib/transcript.js +413 -0
- package/lib/transcript.js.map +1 -0
- package/lib/working-line.d.ts +44 -0
- package/lib/working-line.d.ts.map +1 -0
- package/lib/working-line.js +56 -0
- package/lib/working-line.js.map +1 -0
- package/package.json +72 -0
- package/presets/cc/.dsh-cc-managed.json +5 -0
- package/presets/cc/agent.cordis.yml +524 -0
- package/presets/cc/preset.yml +3 -0
- package/scripts/stage-preset.mjs +26 -0
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Driver cluster context: structural interface(s) that free-function
|
|
3
|
+
* collaborators (harness/driver-*.ts) use instead of importing the createDriver
|
|
4
|
+
* factory (which would be a cycle). This file is a type-only leaf — every new
|
|
5
|
+
* cluster that migrates out of driver.ts grows a `*.Ctx` here.
|
|
6
|
+
*
|
|
7
|
+
* All TS-only; erased at runtime.
|
|
8
|
+
* @module @dsh-cc/tui/harness/driver-ctx
|
|
9
|
+
*/
|
|
10
|
+
import type { TuiState, UsageView } from '../store.ts';
|
|
11
|
+
import type { DriverConfig, SessionProjectionsLike, ShellExecutorLike } from '../state/driver-types.ts';
|
|
12
|
+
import type { Agent, AgentHandle, AgentSetup, ModelSelectionRef } from '@deepseek-ai/dsh-agent';
|
|
13
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
14
|
+
import type { SessionId } from '@deepseek-ai/dsh-session';
|
|
15
|
+
import type { CatalogEntry } from '../model-catalog.ts';
|
|
16
|
+
import type { ModalEntry } from './driver-modal.ts';
|
|
17
|
+
import type { StatusLineSectionHandle } from './statusline-wiring.ts';
|
|
18
|
+
import type { SessionEventLike, ToolPresenters } from '../transcript.ts';
|
|
19
|
+
/**
|
|
20
|
+
* The slice of createDriver's closed-over state that `!` shell-command
|
|
21
|
+
* execution needs. `state()` returns the CURRENT view-model value — createDriver
|
|
22
|
+
* rebinds `state` on every emit, so collaborators must read it through a getter
|
|
23
|
+
* rather than capturing a stale snapshot.
|
|
24
|
+
*/
|
|
25
|
+
export interface DriverBashCtx {
|
|
26
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
27
|
+
emit(next: TuiState): void;
|
|
28
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
29
|
+
state(): TuiState;
|
|
30
|
+
/** Working directory for fallback `/bin/sh -c` runs. */
|
|
31
|
+
cwd: string;
|
|
32
|
+
/** Shell executor when mounted; undefined degrades to a direct child run. */
|
|
33
|
+
shell: ShellExecutorLike | undefined;
|
|
34
|
+
/** Record a command in bash-mode history (dedup + cap + persist). */
|
|
35
|
+
appendBashHistory(command: string): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Structural face of the permission-rules service the mode section reads:
|
|
39
|
+
* the merged rule set (for rule preview/derivation) and the durable mode
|
|
40
|
+
* write. Mirrors the service's public surface without importing its package.
|
|
41
|
+
*/
|
|
42
|
+
export type PermissionRulesLike = {
|
|
43
|
+
readonly ruleSet: {
|
|
44
|
+
readonly allow: readonly unknown[];
|
|
45
|
+
readonly deny: readonly unknown[];
|
|
46
|
+
readonly ask: readonly unknown[];
|
|
47
|
+
readonly bypassImmune: readonly unknown[];
|
|
48
|
+
};
|
|
49
|
+
setMode(agent: Agent, mode: string): void;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* The slice of createDriver's closed-over state that the modal pipeline
|
|
53
|
+
* (approvals + questions sharing one FIFO) needs. `state()` returns the CURRENT
|
|
54
|
+
* view-model value — createDriver rebinds `state` on every emit, so the modal
|
|
55
|
+
* collaborator must read it through a getter rather than a stale snapshot.
|
|
56
|
+
*/
|
|
57
|
+
export interface DriverModalCtx {
|
|
58
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
59
|
+
emit(next: TuiState): void;
|
|
60
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
61
|
+
state(): TuiState;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* The slice of createDriver's closed-over state that the plan/mode writepath
|
|
65
|
+
* needs (driver-mode.ts). `state()` returns the CURRENT view-model value —
|
|
66
|
+
* createDriver rebinds `state` on every emit, so the collaborator must read it
|
|
67
|
+
* through a getter rather than a stale snapshot.
|
|
68
|
+
*/
|
|
69
|
+
export interface DriverModeCtx {
|
|
70
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
71
|
+
emit(next: TuiState): void;
|
|
72
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
73
|
+
state(): TuiState;
|
|
74
|
+
/** The rebindable agent holder (switchSession replaces it in place). */
|
|
75
|
+
current: {
|
|
76
|
+
agent: Agent;
|
|
77
|
+
};
|
|
78
|
+
/** Plan-unit projector, when mounted. */
|
|
79
|
+
projections: {
|
|
80
|
+
stateOf(session: unknown, unit: string): unknown;
|
|
81
|
+
} | undefined;
|
|
82
|
+
/** Surface a transient notice line. */
|
|
83
|
+
showNotice(text: string): void;
|
|
84
|
+
/** Run a bare /plan channel command. Late-bound (defined after this ctx). */
|
|
85
|
+
runHarness(line: string): Promise<{
|
|
86
|
+
kind: string;
|
|
87
|
+
text?: string;
|
|
88
|
+
} | undefined | null>;
|
|
89
|
+
/** Returns the mounted permission-rules engine's setMode seam, if any. */
|
|
90
|
+
getRules(): PermissionRulesSeam | undefined;
|
|
91
|
+
/** Fold the current plan/permission mode (live, not a snapshot). */
|
|
92
|
+
liveMode(agent: Agent, fallback?: string): string;
|
|
93
|
+
}
|
|
94
|
+
/** Duck-typed surface for the permission-rules engine's mode writepath. */
|
|
95
|
+
export interface PermissionRulesSeam {
|
|
96
|
+
setMode(agent: Agent, mode: string): void;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The slice of createDriver's closed-over state that the statusline HUD /
|
|
100
|
+
* sessionProjections feed needs (driver-hud.ts). `state()` returns the CURRENT
|
|
101
|
+
* view-model value — createDriver rebinds `state` on every emit, so the
|
|
102
|
+
* collaborator must read it through a getter rather than a stale snapshot.
|
|
103
|
+
* `current` and `selection` are passed by reference (createDriver rebinds them
|
|
104
|
+
* in place across switchSession), so the section always reads the live values.
|
|
105
|
+
*/
|
|
106
|
+
export interface DriverHudCtx {
|
|
107
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
108
|
+
emit(next: TuiState): void;
|
|
109
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
110
|
+
state(): TuiState;
|
|
111
|
+
/** Host context for the sessionProjections service lookup. */
|
|
112
|
+
ctx: Context;
|
|
113
|
+
/** Working directory (process cwd, fallback for the branch probe). */
|
|
114
|
+
cwd: string;
|
|
115
|
+
/** The rebindable agent holder (switchSession replaces it in place). */
|
|
116
|
+
current: {
|
|
117
|
+
agent: Agent;
|
|
118
|
+
};
|
|
119
|
+
/** Model selection ref; statusline reads reasoningEffort/model from it. */
|
|
120
|
+
selection: ModelSelectionRef;
|
|
121
|
+
/** Best-effort git-branch probe for the statusline footer. */
|
|
122
|
+
branchProbe: (dir: string) => Promise<string | undefined>;
|
|
123
|
+
/**
|
|
124
|
+
* Custom statusLine wiring (statusline-wiring.ts), when created by the
|
|
125
|
+
* driver. `override()` returns the configured command's line while active,
|
|
126
|
+
* or undefined so the built-in HUD stays in charge.
|
|
127
|
+
*/
|
|
128
|
+
statusline?: StatusLineSectionHandle;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The slice of createDriver's closed-over state that the slash-command
|
|
132
|
+
* catalog + subagent lifecycle section needs (driver-catalog.ts). `state()`
|
|
133
|
+
* returns the CURRENT view-model value — createDriver rebinds `state` on every
|
|
134
|
+
* emit, so the collaborator must read it through a getter rather than a stale
|
|
135
|
+
* snapshot. `current` is the rebindable agent holder (list() reads the live
|
|
136
|
+
* agent).
|
|
137
|
+
*/
|
|
138
|
+
export interface DriverCatalogCtx {
|
|
139
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
140
|
+
emit(next: TuiState): void;
|
|
141
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
142
|
+
state(): TuiState;
|
|
143
|
+
/** The rebindable agent holder (switchSession replaces it in place). */
|
|
144
|
+
current: {
|
|
145
|
+
agent: Agent;
|
|
146
|
+
};
|
|
147
|
+
/** Host context for the commands/skills service lookups + event subscriptions. */
|
|
148
|
+
ctx: Context;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* The slice of createDriver's closed-over state that the approval + user
|
|
152
|
+
* question pipeline needs (driver-approvals.ts). The section owns the modal
|
|
153
|
+
* FIFO (via createModalQueue) so approvals and questions share one queue.
|
|
154
|
+
* `state()` returns the CURRENT view-model value — createDriver rebinds
|
|
155
|
+
* `state` on every emit, so the collaborator must read it through a getter
|
|
156
|
+
* rather than a stale snapshot.
|
|
157
|
+
*/
|
|
158
|
+
export interface DriverApprovalsCtx {
|
|
159
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
160
|
+
emit(next: TuiState): void;
|
|
161
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
162
|
+
state(): TuiState;
|
|
163
|
+
/** Host context: settings/userQuestions lookup + approval/request hook. */
|
|
164
|
+
ctx: Context;
|
|
165
|
+
/** The rebindable agent holder (approval listener reads the live id). */
|
|
166
|
+
current: {
|
|
167
|
+
agent: Agent;
|
|
168
|
+
};
|
|
169
|
+
/** Surface a transient notice line (rule-persist outcomes and failures). */
|
|
170
|
+
showNotice(text: string): void;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* The slice of createDriver's closed-over state that the model/effort/
|
|
174
|
+
* permission pickers need (driver-pickers.ts). `state()` returns the CURRENT
|
|
175
|
+
* view-model value — createDriver rebinds `state` on every emit, so the
|
|
176
|
+
* section must read it through a getter rather than a stale snapshot.
|
|
177
|
+
* `selection` is passed by reference so writes land on createDriver's live
|
|
178
|
+
* ref across switchSession. resolveEfforts / stalePair / loadCatalog stay in
|
|
179
|
+
* createDriver and arrive on the ctx (they read `llm` off the host ctx).
|
|
180
|
+
*/
|
|
181
|
+
export interface DriverPickersCtx {
|
|
182
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
183
|
+
emit(next: TuiState): void;
|
|
184
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
185
|
+
state(): TuiState;
|
|
186
|
+
/** Model selection ref; the section reads current and rewrites it in place. */
|
|
187
|
+
selection: ModelSelectionRef;
|
|
188
|
+
/** The rebindable agent holder (openPermissionPicker reads the live agent). */
|
|
189
|
+
current: {
|
|
190
|
+
agent: Agent;
|
|
191
|
+
};
|
|
192
|
+
/** Fold the live plan/permission mode for the picker's focus row. */
|
|
193
|
+
liveMode(agent: Agent, fallback?: string): string;
|
|
194
|
+
/** Resolve a model's advertisement list (never a fabricated list). */
|
|
195
|
+
resolveEfforts(provider: string, model: string): Promise<readonly {
|
|
196
|
+
id: string;
|
|
197
|
+
name: string;
|
|
198
|
+
}[] | undefined>;
|
|
199
|
+
/** Stale-pair guard: refuse a detached write when the selection moved. */
|
|
200
|
+
stalePair(captured: {
|
|
201
|
+
provider: string;
|
|
202
|
+
model: string;
|
|
203
|
+
}): boolean;
|
|
204
|
+
/** Build the full model catalog for the `/model` picker. */
|
|
205
|
+
loadCatalog(): Promise<CatalogEntry[]>;
|
|
206
|
+
/** Run a bare /plan-/permissions channel command. Late-bound (after ini). */
|
|
207
|
+
runHarness(line: string): Promise<{
|
|
208
|
+
kind: string;
|
|
209
|
+
text?: string;
|
|
210
|
+
} | undefined | null>;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* The slice of createDriver's closed-over state that the session switcher /
|
|
214
|
+
* /resume section needs (driver-sessions.ts). `state()` returns the CURRENT
|
|
215
|
+
* view-model value — createDriver rebinds `state` on every emit, so the
|
|
216
|
+
* collaborator must read it through a getter rather than a stale snapshot.
|
|
217
|
+
* `current` and `selection` are passed by reference (createDriver rebinds them
|
|
218
|
+
* in place across switchSession), and the section writes both in place.
|
|
219
|
+
*/
|
|
220
|
+
export interface DriverSessionsCtx {
|
|
221
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
222
|
+
emit(next: TuiState): void;
|
|
223
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
224
|
+
state(): TuiState;
|
|
225
|
+
/** Host context for sessionPersistence/sessionQuery service lookup + agents.resume. */
|
|
226
|
+
ctx: Context;
|
|
227
|
+
/** Create a brand-new agent handle for a minted session id (local /clear). */
|
|
228
|
+
createHandle(id: SessionId, extras: {
|
|
229
|
+
cwd: string;
|
|
230
|
+
agentOptions?: {
|
|
231
|
+
provider: string;
|
|
232
|
+
model: string;
|
|
233
|
+
};
|
|
234
|
+
}): Promise<AgentHandle>;
|
|
235
|
+
/** Re-apply a captured permission mode on the NEW agent after bind. */
|
|
236
|
+
reapplyMode(mode: string): Promise<void>;
|
|
237
|
+
/** Working directory (fallback when the live header cwd is absent). */
|
|
238
|
+
cwd: string;
|
|
239
|
+
/** The rebindable agent holder (switchSession disposes old, binds new). */
|
|
240
|
+
current: {
|
|
241
|
+
handle: AgentHandle;
|
|
242
|
+
agent: Agent;
|
|
243
|
+
};
|
|
244
|
+
/** Model selection ref; switchSession reseeds it after the rebind. */
|
|
245
|
+
selection: ModelSelectionRef;
|
|
246
|
+
/** Fold the live plan/permission mode for the new session. */
|
|
247
|
+
liveMode(agent: Agent, fallback?: string): string;
|
|
248
|
+
/** Reset-and-reseed the model selection from the new agent's options. */
|
|
249
|
+
seedDefaultModel(reset?: boolean): Promise<void>;
|
|
250
|
+
/** Fold the new session's history into a fresh TuiState. */
|
|
251
|
+
foldHistory(): TuiState;
|
|
252
|
+
/** Re-seed the statusline HUD / todos / branch for the new session. */
|
|
253
|
+
seedHud(): void;
|
|
254
|
+
seedTodos(): void;
|
|
255
|
+
refreshBranch(): void;
|
|
256
|
+
/** Persist the resume marker for a session id (idempotent). */
|
|
257
|
+
writeResumeTarget(id: string): void;
|
|
258
|
+
/** Set the `markedContent` flag (createDriver owns the binding). */
|
|
259
|
+
setMarkedContent(value: boolean): void;
|
|
260
|
+
/**
|
|
261
|
+
* Rebind prompt/bash history onto the project of the switched session's
|
|
262
|
+
* cwd (reloads both from disk). No-op for same-project switches and when
|
|
263
|
+
* an explicit historyDir pins the bucket.
|
|
264
|
+
*/
|
|
265
|
+
rebindHistory(sessionCwd: string | undefined): void;
|
|
266
|
+
/**
|
|
267
|
+
* Pin a session id in the sidecar index of the project that owns
|
|
268
|
+
* `sessionCwd` (falling back to the process cwd), so the /resume picker's
|
|
269
|
+
* project scope has an exact membership record. Best-effort.
|
|
270
|
+
*/
|
|
271
|
+
recordProjectSession(sessionId: string, sessionCwd: string | undefined): void;
|
|
272
|
+
/** Drain the shared approval/question FIFO (returns parked entries). */
|
|
273
|
+
spliceAll(): ModalEntry[];
|
|
274
|
+
/**
|
|
275
|
+
* Rebuild the slash-command catalog for the (new) live agent: commands
|
|
276
|
+
* synchronously, skills via a fresh snapshot. Called after a successful
|
|
277
|
+
* session switch — `list()`/`snapshot()` are agent- and cwd-scoped and no
|
|
278
|
+
* change event fires on a switch.
|
|
279
|
+
*/
|
|
280
|
+
refreshCatalog(): void;
|
|
281
|
+
/** The agent setup closure (wraps presetSetup + installModelSelection). */
|
|
282
|
+
withSelection: AgentSetup;
|
|
283
|
+
/** Explicit provider/model override, or undefined when unset. */
|
|
284
|
+
agentOptions: {
|
|
285
|
+
provider: string;
|
|
286
|
+
model: string;
|
|
287
|
+
} | undefined;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* The slice of createDriver's closed-over state that the `/export-md`, `/copy`,
|
|
291
|
+
* runLocal (local slash-command) and runHarness (host command) pipeline needs
|
|
292
|
+
* (driver-run-local.ts). `state()` returns the CURRENT view-model value —
|
|
293
|
+
* createDriver rebinds `state` on every emit, so the collaborator must read it
|
|
294
|
+
* through a getter rather than a stale snapshot. `current`, `selection`, and
|
|
295
|
+
* `config` are passed by reference; `markedContent` is read through a getter
|
|
296
|
+
* because createDriver owns the live `let` binding.
|
|
297
|
+
*/
|
|
298
|
+
export interface DriverRunLocalCtx {
|
|
299
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
300
|
+
emit(next: TuiState): void;
|
|
301
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
302
|
+
state(): TuiState;
|
|
303
|
+
/** Host context for the commands service lookup. */
|
|
304
|
+
ctx: Context;
|
|
305
|
+
/** Working directory (resolution base for export paths). */
|
|
306
|
+
cwd: string;
|
|
307
|
+
/** Driver configuration (exportDir, copyWrite, cwd, ...). */
|
|
308
|
+
config: DriverConfig;
|
|
309
|
+
/** The rebindable agent holder (exports/cost/usage read the live agent). */
|
|
310
|
+
current: {
|
|
311
|
+
handle: AgentHandle;
|
|
312
|
+
agent: Agent;
|
|
313
|
+
};
|
|
314
|
+
/** Model selection ref; /effort and /model read and rewrite it in place. */
|
|
315
|
+
selection: ModelSelectionRef;
|
|
316
|
+
/** Session projections feed for /cost and /usage (may be unmounted). */
|
|
317
|
+
projections: SessionProjectionsLike | undefined;
|
|
318
|
+
/** Apply a usage-panel patch (HUD section's live-projections update fn). */
|
|
319
|
+
applyUsage(patch: UsageView | undefined): void;
|
|
320
|
+
/** Surface a transient notice line. */
|
|
321
|
+
showNotice(text: string): void;
|
|
322
|
+
/** /resume with an explicit id; the switch engine lives in driver-sessions. */
|
|
323
|
+
switchSession(id: string): Promise<void>;
|
|
324
|
+
/** Bind a freshly created empty session (local /clear, /new, /reset). */
|
|
325
|
+
startFreshSession(): Promise<void>;
|
|
326
|
+
/** Open the /resume overlay (session switcher picker). */
|
|
327
|
+
openSessionSwitcher(): Promise<void>;
|
|
328
|
+
/** Open the model picker. */
|
|
329
|
+
openModelPicker(): Promise<void>;
|
|
330
|
+
/** Validate + apply a provider/model switch (never blocks on the switch). */
|
|
331
|
+
applyModelSwitch(provider: string, model: string): Promise<void>;
|
|
332
|
+
/** Open the effort picker. */
|
|
333
|
+
openEffortPicker(): Promise<void>;
|
|
334
|
+
/** Build the full model catalog for the /model path. */
|
|
335
|
+
loadCatalog(): Promise<CatalogEntry[]>;
|
|
336
|
+
/** Resolve a model's advertised reasoning-effort levels (or undefined). */
|
|
337
|
+
resolveEfforts(provider: string, model: string): Promise<readonly {
|
|
338
|
+
id: string;
|
|
339
|
+
name: string;
|
|
340
|
+
}[] | undefined>;
|
|
341
|
+
/** Persist the resume marker (idempotent) — after first real content. */
|
|
342
|
+
persistResumeTarget(): void;
|
|
343
|
+
/** Whether real content has been produced this boot (drives /quit resume). */
|
|
344
|
+
getMarkedContent(): boolean;
|
|
345
|
+
/**
|
|
346
|
+
* Set the `markedContent` flag (createDriver owns the binding). The
|
|
347
|
+
* worktree remove path sets it `false` so dispose() does not re-persist a
|
|
348
|
+
* resume marker pointing into the just-deleted worktree.
|
|
349
|
+
*/
|
|
350
|
+
setMarkedContent(marked: boolean): void;
|
|
351
|
+
/** Await the boot default-model seed before /effort reads the selection. */
|
|
352
|
+
waitForModel(): Promise<void>;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* The slice of createDriver's closed-over state that the queue/outbox +
|
|
356
|
+
* submit/interrupt pipeline needs (driver-queue.ts). `state()` returns the
|
|
357
|
+
* CURRENT view-model value — createDriver rebinds `state` on every emit, so the
|
|
358
|
+
* queue collaborator must read it through a getter rather than a stale snapshot.
|
|
359
|
+
*/
|
|
360
|
+
export interface DriverQueueCtx {
|
|
361
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
362
|
+
emit(next: TuiState): void;
|
|
363
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
364
|
+
state(): TuiState;
|
|
365
|
+
/** The rebindable agent holder (switchSession replaces it in place). */
|
|
366
|
+
current: {
|
|
367
|
+
agent: Agent;
|
|
368
|
+
};
|
|
369
|
+
/** Host context for the optional ccPlugins service lookup. */
|
|
370
|
+
ctx: Context;
|
|
371
|
+
/** Dispatch a local slash command (run-local section). */
|
|
372
|
+
runLocal(name: string, rawInput: string): Promise<void>;
|
|
373
|
+
/** Dispatch a harness slash command (run-local section, late-bound). */
|
|
374
|
+
runHarness(line: string): Promise<{
|
|
375
|
+
kind: string;
|
|
376
|
+
text?: string;
|
|
377
|
+
} | undefined | null>;
|
|
378
|
+
/** Open the /permissions overlay picker (pickers section). */
|
|
379
|
+
openPermissionPicker(): void;
|
|
380
|
+
/** Surface a transient notice line (e.g. an empty slash command). */
|
|
381
|
+
showNotice(text: string): void;
|
|
382
|
+
/** Run a `!` bash-mode line (driver-bash section). */
|
|
383
|
+
runShellCommand(raw: string): Promise<void>;
|
|
384
|
+
/** Read the current composer prompt history (oldest→newest). */
|
|
385
|
+
getHistory(): string[];
|
|
386
|
+
/** Replace the composer prompt history after a submit persist. */
|
|
387
|
+
setHistory(next: string[]): void;
|
|
388
|
+
/** Directory backing prompt-history persistence (for saveHistory). */
|
|
389
|
+
historyDir: string | undefined;
|
|
390
|
+
/** Persist the resume marker (idempotent) — after first real content. */
|
|
391
|
+
persistResumeTarget(): void;
|
|
392
|
+
/** Mark/clear the session as having real content (drives /quit resume). */
|
|
393
|
+
setMarkedContent(value: boolean): void;
|
|
394
|
+
/**
|
|
395
|
+
* Await the boot default-model seed before dispatch/enqueue (W4): a turn
|
|
396
|
+
* must never run with an unresolved selection. Resolves even on seed
|
|
397
|
+
* failure (warned, never deadlocks submit).
|
|
398
|
+
*/
|
|
399
|
+
waitForModel(): Promise<void>;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* The slice of createDriver's closed-over state that the agent-model/history
|
|
403
|
+
* cluster needs: resolveEfforts, seedDefaultModel, persistResumeTarget, the
|
|
404
|
+
* prompt/bash histories, tool presenters, foldHistory, and loadCatalog all
|
|
405
|
+
* read `ctx`/`current`/`selection` off `rt` instead of createDriver's locals.
|
|
406
|
+
* The section returns handles createDriver threads into the other sections.
|
|
407
|
+
*/
|
|
408
|
+
export interface DriverAgentCtx {
|
|
409
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
410
|
+
emit(next: TuiState): void;
|
|
411
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
412
|
+
state(): TuiState;
|
|
413
|
+
/** Host context for llm/shell/tools service lookup. */
|
|
414
|
+
ctx: Context;
|
|
415
|
+
/** The rebindable agent holder (re-read live at fire time). */
|
|
416
|
+
current: {
|
|
417
|
+
handle: AgentHandle;
|
|
418
|
+
agent: Agent;
|
|
419
|
+
};
|
|
420
|
+
/** Model selection ref; seeded by agent options / deployment default. */
|
|
421
|
+
selection: ModelSelectionRef;
|
|
422
|
+
/** Explicit provider/model override, or undefined when unset. */
|
|
423
|
+
agentOptions: {
|
|
424
|
+
provider: string;
|
|
425
|
+
model: string;
|
|
426
|
+
} | undefined;
|
|
427
|
+
/** Fold the live plan/permission mode for the agent. */
|
|
428
|
+
liveMode(agent: Agent, fallback?: string): string;
|
|
429
|
+
/** Directory backing prompt/bash-history persistence. */
|
|
430
|
+
historyDir: string | undefined;
|
|
431
|
+
/** Working directory the resume marker is keyed by. */
|
|
432
|
+
cwd: string;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* The slice of createDriver's closed-over state the `session/event` listener
|
|
436
|
+
* needs. It only reads the live view-model and current agent; the queue flush
|
|
437
|
+
* is late-bound through a holder so the listener can be attached before the
|
|
438
|
+
* queue section is constructed.
|
|
439
|
+
*/
|
|
440
|
+
export interface DriverSessionEventsCtx {
|
|
441
|
+
/** Publish the next view-model value (rebinds createDriver's `state`). */
|
|
442
|
+
emit(next: TuiState): void;
|
|
443
|
+
/** Read the current view-model value (fresh, not a snapshot). */
|
|
444
|
+
state(): TuiState;
|
|
445
|
+
/** Host context the `session/event` listener subscribes through. */
|
|
446
|
+
ctx: Context;
|
|
447
|
+
/** The rebindable agent holder (re-read live at fire time). */
|
|
448
|
+
current: {
|
|
449
|
+
handle: AgentHandle;
|
|
450
|
+
agent: Agent;
|
|
451
|
+
};
|
|
452
|
+
/** Fold the live plan/permission mode. */
|
|
453
|
+
liveMode(agent: Agent, fallback?: string): string;
|
|
454
|
+
/** Tool presenters for folding replayed session events. */
|
|
455
|
+
presenters: ToolPresenters | undefined;
|
|
456
|
+
/** Late-bound queue flush (wired after createQueueSection). */
|
|
457
|
+
flushQueue(): void;
|
|
458
|
+
/** Transient user-visible notice (the classifier-breaker fallback hint). */
|
|
459
|
+
showNotice(text: string): void;
|
|
460
|
+
}
|
|
461
|
+
export type { SessionEventLike, ToolPresenters };
|
|
462
|
+
//# sourceMappingURL=driver-ctx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-ctx.d.ts","sourceRoot":"","sources":["../../src/harness/driver-ctx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Driver cluster context: structural interface(s) that free-function
|
|
3
|
+
* collaborators (harness/driver-*.ts) use instead of importing the createDriver
|
|
4
|
+
* factory (which would be a cycle). This file is a type-only leaf — every new
|
|
5
|
+
* cluster that migrates out of driver.ts grows a `*.Ctx` here.
|
|
6
|
+
*
|
|
7
|
+
* All TS-only; erased at runtime.
|
|
8
|
+
* @module @dsh-cc/tui/harness/driver-ctx
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=driver-ctx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-ctx.js","sourceRoot":"","sources":["../../src/harness/driver-ctx.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statusline HUD + sessionProjections feed for the TUI driver.
|
|
3
|
+
*
|
|
4
|
+
* Migrated out of createDriver (harness/driver.ts) as a free-function
|
|
5
|
+
* collaborator so the factory stays under the line budget. Receives a
|
|
6
|
+
* structural {@link DriverHudCtx} instead of importing the factory (no cycle).
|
|
7
|
+
*
|
|
8
|
+
* Owned state: the git-branch probe result, the sessionProjections handle, and
|
|
9
|
+
* the derived HUD patch path. Exposes back to createDriver the pieces the
|
|
10
|
+
* factory (runLocal usage panel) and switchSession still need: applyUsage,
|
|
11
|
+
* projections, statusLineOf, seedHud, seedTodos, refreshBranch.
|
|
12
|
+
* @module @dsh-cc/tui/harness/driver-hud
|
|
13
|
+
*/
|
|
14
|
+
import { type UsageView } from '../store.ts';
|
|
15
|
+
import { type SessionProjectionsLike } from '../state/driver-types.ts';
|
|
16
|
+
import type { DriverHudCtx } from './driver-ctx.ts';
|
|
17
|
+
/**
|
|
18
|
+
* Build the statusline HUD section. Runs the boot sequence on construction —
|
|
19
|
+
* in original order: branch probe, seed HUD/todos from live projections, anchor
|
|
20
|
+
* the working line if busy, then subscribe to the change feed — so createDriver
|
|
21
|
+
* needs no extra call.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createHudSection(rt: DriverHudCtx): {
|
|
24
|
+
refreshBranch: () => void;
|
|
25
|
+
seedHud: () => void;
|
|
26
|
+
seedTodos: () => void;
|
|
27
|
+
applyUsage: (patch: UsageView | undefined) => void;
|
|
28
|
+
projections: SessionProjectionsLike | undefined;
|
|
29
|
+
statusLineOf: (width?: number) => string;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=driver-hud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver-hud.d.ts","sourceRoot":"","sources":["../../src/harness/driver-hud.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,aAAa,CAAA;AAYpB,OAAO,EAEL,KAAK,sBAAsB,EAE5B,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,YAAY;yBAUrB,IAAI;mBAyCV,IAAI;qBAwBF,IAAI;wBA/BC,SAAS,GAAG,SAAS,KAAG,IAAI;;2BA0FzB,MAAM,KAAG,MAAM;EAgC9C"}
|