@agi-fans/dsh-tui 0.3.0 → 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.
Files changed (238) hide show
  1. package/README.md +43 -7
  2. package/lib/CHANGELOG.md +145 -0
  3. package/lib/{box.d.ts → chrome/box.d.ts} +7 -0
  4. package/lib/{box.js → chrome/box.js} +49 -31
  5. package/lib/chrome/box.js.map +1 -0
  6. package/lib/chrome/command-output.js.map +1 -0
  7. package/lib/chrome/diff-render.d.ts +39 -0
  8. package/lib/chrome/diff-render.js +274 -0
  9. package/lib/chrome/diff-render.js.map +1 -0
  10. package/lib/chrome/markdown.d.ts +17 -0
  11. package/lib/chrome/markdown.js +537 -0
  12. package/lib/chrome/markdown.js.map +1 -0
  13. package/lib/chrome/path-mentions.js.map +1 -0
  14. package/lib/chrome/relative-time.js.map +1 -0
  15. package/lib/chrome/renderer.js.map +1 -0
  16. package/lib/chrome/status-config.d.ts +70 -0
  17. package/lib/chrome/status-config.js +147 -0
  18. package/lib/chrome/status-config.js.map +1 -0
  19. package/lib/{status-line.d.ts → chrome/status-line.d.ts} +23 -2
  20. package/lib/chrome/status-line.js +436 -0
  21. package/lib/chrome/status-line.js.map +1 -0
  22. package/lib/chrome/style.js.map +1 -0
  23. package/lib/{theme.d.ts → chrome/theme.d.ts} +5 -3
  24. package/lib/chrome/theme.js +708 -0
  25. package/lib/chrome/theme.js.map +1 -0
  26. package/lib/{tool-renderers.d.ts → chrome/tool-renderers.d.ts} +6 -1
  27. package/lib/{tool-renderers.js → chrome/tool-renderers.js} +69 -36
  28. package/lib/chrome/tool-renderers.js.map +1 -0
  29. package/lib/chrome/tools-list.js.map +1 -0
  30. package/lib/{welcome-tips.js → chrome/welcome-tips.js} +6 -2
  31. package/lib/chrome/welcome-tips.js.map +1 -0
  32. package/lib/chrome/width.js.map +1 -0
  33. package/lib/{command-auth.js → commands/auth.js} +2 -2
  34. package/lib/commands/auth.js.map +1 -0
  35. package/lib/{command-export.js → commands/export.js} +3 -3
  36. package/lib/commands/export.js.map +1 -0
  37. package/lib/{command-integrations.js → commands/integrations.js} +2 -2
  38. package/lib/commands/integrations.js.map +1 -0
  39. package/lib/commands/loop.d.ts +52 -0
  40. package/lib/commands/loop.js +307 -0
  41. package/lib/commands/loop.js.map +1 -0
  42. package/lib/{command-model.js → commands/model.js} +15 -11
  43. package/lib/commands/model.js.map +1 -0
  44. package/lib/{command-permission.js → commands/permission.js} +13 -8
  45. package/lib/commands/permission.js.map +1 -0
  46. package/lib/{command-registration.js → commands/registration.js} +1 -1
  47. package/lib/commands/registration.js.map +1 -0
  48. package/lib/commands/session-configuration.d.ts +5 -0
  49. package/lib/commands/session-configuration.js +108 -0
  50. package/lib/commands/session-configuration.js.map +1 -0
  51. package/lib/{command-session.js → commands/session.js} +11 -7
  52. package/lib/commands/session.js.map +1 -0
  53. package/lib/{command-steer.js → commands/steer.js} +10 -4
  54. package/lib/commands/steer.js.map +1 -0
  55. package/lib/definition.d.ts +20 -1
  56. package/lib/definition.js.map +1 -1
  57. package/lib/index.d.ts +1 -1
  58. package/lib/index.js +1 -1
  59. package/lib/index.js.map +1 -1
  60. package/lib/input/clipboard.js.map +1 -0
  61. package/lib/input/editor.js.map +1 -0
  62. package/lib/input/external-editor.js.map +1 -0
  63. package/lib/{image-paste.d.ts → input/image-paste.d.ts} +1 -1
  64. package/lib/input/image-paste.js.map +1 -0
  65. package/lib/input/keybindings-config.js.map +1 -0
  66. package/lib/input/keys.js.map +1 -0
  67. package/lib/runtime/agent-profile.d.ts +10 -0
  68. package/lib/runtime/agent-profile.js +9 -0
  69. package/lib/runtime/agent-profile.js.map +1 -0
  70. package/lib/{human-interaction.js → runtime/human-interaction.js} +1 -1
  71. package/lib/runtime/human-interaction.js.map +1 -0
  72. package/lib/{provider-local.d.ts → runtime/provider-local.d.ts} +10 -9
  73. package/lib/{provider-local.js → runtime/provider-local.js} +77 -29
  74. package/lib/runtime/provider-local.js.map +1 -0
  75. package/lib/{runner.js → runtime/runner.js} +11 -2
  76. package/lib/runtime/runner.js.map +1 -0
  77. package/lib/{session-runtime.d.ts → runtime/session-runtime.d.ts} +2 -2
  78. package/lib/{session-runtime.js → runtime/session-runtime.js} +3 -3
  79. package/lib/runtime/session-runtime.js.map +1 -0
  80. package/lib/runtime/startup-notices.d.ts +20 -0
  81. package/lib/runtime/startup-notices.js +146 -0
  82. package/lib/runtime/startup-notices.js.map +1 -0
  83. package/lib/{tool-presentation.d.ts → runtime/tool-presentation.d.ts} +1 -1
  84. package/lib/runtime/tool-presentation.js.map +1 -0
  85. package/lib/{interaction-adapter.d.ts → session/interaction-adapter.d.ts} +1 -1
  86. package/lib/session/interaction-adapter.js.map +1 -0
  87. package/lib/session/package-metadata.d.ts +4 -0
  88. package/lib/session/package-metadata.js +11 -0
  89. package/lib/session/package-metadata.js.map +1 -0
  90. package/lib/session/project-context.js.map +1 -0
  91. package/lib/session/project-file-search.js.map +1 -0
  92. package/lib/session/release-notes.d.ts +31 -0
  93. package/lib/session/release-notes.js +120 -0
  94. package/lib/session/release-notes.js.map +1 -0
  95. package/lib/session/session-configuration.d.ts +25 -0
  96. package/lib/session/session-configuration.js +46 -0
  97. package/lib/session/session-configuration.js.map +1 -0
  98. package/lib/{session-controller.d.ts → session/session-controller.d.ts} +13 -2
  99. package/lib/{session-controller.js → session/session-controller.js} +181 -11
  100. package/lib/session/session-controller.js.map +1 -0
  101. package/lib/{tui-settings.d.ts → session/tui-settings.d.ts} +5 -2
  102. package/lib/session/tui-settings.js +42 -0
  103. package/lib/session/tui-settings.js.map +1 -0
  104. package/lib/session/update-check.d.ts +16 -0
  105. package/lib/session/update-check.js +33 -0
  106. package/lib/session/update-check.js.map +1 -0
  107. package/lib/{autocomplete.d.ts → views/autocomplete.d.ts} +1 -1
  108. package/lib/{autocomplete.js → views/autocomplete.js} +17 -18
  109. package/lib/views/autocomplete.js.map +1 -0
  110. package/lib/{copy-selector.d.ts → views/copy-selector.d.ts} +2 -2
  111. package/lib/{copy-selector.js → views/copy-selector.js} +2 -2
  112. package/lib/views/copy-selector.js.map +1 -0
  113. package/lib/views/copy-targets.js.map +1 -0
  114. package/lib/{event-views.d.ts → views/event-views.d.ts} +11 -8
  115. package/lib/{event-views.js → views/event-views.js} +92 -23
  116. package/lib/views/event-views.js.map +1 -0
  117. package/lib/{history-search.d.ts → views/history-search.d.ts} +2 -2
  118. package/lib/{history-search.js → views/history-search.js} +3 -3
  119. package/lib/views/history-search.js.map +1 -0
  120. package/lib/views/history-store.js.map +1 -0
  121. package/lib/{hotkeys.d.ts → views/hotkeys.d.ts} +3 -1
  122. package/lib/{hotkeys.js → views/hotkeys.js} +15 -1
  123. package/lib/views/hotkeys.js.map +1 -0
  124. package/lib/{path-complete.d.ts → views/path-complete.d.ts} +2 -2
  125. package/lib/{path-complete.js → views/path-complete.js} +1 -1
  126. package/lib/views/path-complete.js.map +1 -0
  127. package/lib/{prompt-selector.d.ts → views/prompt-selector.d.ts} +2 -2
  128. package/lib/{prompt-selector.js → views/prompt-selector.js} +4 -4
  129. package/lib/views/prompt-selector.js.map +1 -0
  130. package/lib/{settings-list.d.ts → views/settings-list.d.ts} +13 -5
  131. package/lib/{settings-list.js → views/settings-list.js} +238 -85
  132. package/lib/views/settings-list.js.map +1 -0
  133. package/lib/views/transcript-export.js.map +1 -0
  134. package/package.json +69 -51
  135. package/lib/autocomplete.js.map +0 -1
  136. package/lib/box.js.map +0 -1
  137. package/lib/clipboard.js.map +0 -1
  138. package/lib/command-auth.js.map +0 -1
  139. package/lib/command-export.js.map +0 -1
  140. package/lib/command-integrations.js.map +0 -1
  141. package/lib/command-model.js.map +0 -1
  142. package/lib/command-output.js.map +0 -1
  143. package/lib/command-permission.js.map +0 -1
  144. package/lib/command-registration.js.map +0 -1
  145. package/lib/command-session.js.map +0 -1
  146. package/lib/command-steer.js.map +0 -1
  147. package/lib/copy-selector.js.map +0 -1
  148. package/lib/copy-targets.js.map +0 -1
  149. package/lib/editor.js.map +0 -1
  150. package/lib/event-views.js.map +0 -1
  151. package/lib/external-editor.js.map +0 -1
  152. package/lib/history-search.js.map +0 -1
  153. package/lib/history-store.js.map +0 -1
  154. package/lib/hotkeys.js.map +0 -1
  155. package/lib/human-interaction.js.map +0 -1
  156. package/lib/image-paste.js.map +0 -1
  157. package/lib/interaction-adapter.js.map +0 -1
  158. package/lib/keybindings-config.js.map +0 -1
  159. package/lib/keys.js.map +0 -1
  160. package/lib/markdown.d.ts +0 -13
  161. package/lib/markdown.js +0 -453
  162. package/lib/markdown.js.map +0 -1
  163. package/lib/path-complete.js.map +0 -1
  164. package/lib/path-mentions.js.map +0 -1
  165. package/lib/project-context.js.map +0 -1
  166. package/lib/project-file-search.js.map +0 -1
  167. package/lib/prompt-selector.js.map +0 -1
  168. package/lib/provider-local.js.map +0 -1
  169. package/lib/relative-time.js.map +0 -1
  170. package/lib/renderer.js.map +0 -1
  171. package/lib/runner.js.map +0 -1
  172. package/lib/session-controller.js.map +0 -1
  173. package/lib/session-runtime.js.map +0 -1
  174. package/lib/settings-list.js.map +0 -1
  175. package/lib/status-config.d.ts +0 -32
  176. package/lib/status-config.js +0 -52
  177. package/lib/status-config.js.map +0 -1
  178. package/lib/status-line.js +0 -351
  179. package/lib/status-line.js.map +0 -1
  180. package/lib/style.js.map +0 -1
  181. package/lib/theme.js +0 -317
  182. package/lib/theme.js.map +0 -1
  183. package/lib/tool-presentation.js.map +0 -1
  184. package/lib/tool-renderers.js.map +0 -1
  185. package/lib/tools-list.js.map +0 -1
  186. package/lib/transcript-export.js.map +0 -1
  187. package/lib/tui-settings.js +0 -23
  188. package/lib/tui-settings.js.map +0 -1
  189. package/lib/welcome-tips.js.map +0 -1
  190. package/lib/width.js.map +0 -1
  191. /package/lib/{command-output.d.ts → chrome/command-output.d.ts} +0 -0
  192. /package/lib/{command-output.js → chrome/command-output.js} +0 -0
  193. /package/lib/{path-mentions.d.ts → chrome/path-mentions.d.ts} +0 -0
  194. /package/lib/{path-mentions.js → chrome/path-mentions.js} +0 -0
  195. /package/lib/{relative-time.d.ts → chrome/relative-time.d.ts} +0 -0
  196. /package/lib/{relative-time.js → chrome/relative-time.js} +0 -0
  197. /package/lib/{renderer.d.ts → chrome/renderer.d.ts} +0 -0
  198. /package/lib/{renderer.js → chrome/renderer.js} +0 -0
  199. /package/lib/{style.d.ts → chrome/style.d.ts} +0 -0
  200. /package/lib/{style.js → chrome/style.js} +0 -0
  201. /package/lib/{tools-list.d.ts → chrome/tools-list.d.ts} +0 -0
  202. /package/lib/{tools-list.js → chrome/tools-list.js} +0 -0
  203. /package/lib/{welcome-tips.d.ts → chrome/welcome-tips.d.ts} +0 -0
  204. /package/lib/{width.d.ts → chrome/width.d.ts} +0 -0
  205. /package/lib/{width.js → chrome/width.js} +0 -0
  206. /package/lib/{command-auth.d.ts → commands/auth.d.ts} +0 -0
  207. /package/lib/{command-export.d.ts → commands/export.d.ts} +0 -0
  208. /package/lib/{command-integrations.d.ts → commands/integrations.d.ts} +0 -0
  209. /package/lib/{command-model.d.ts → commands/model.d.ts} +0 -0
  210. /package/lib/{command-permission.d.ts → commands/permission.d.ts} +0 -0
  211. /package/lib/{command-registration.d.ts → commands/registration.d.ts} +0 -0
  212. /package/lib/{command-session.d.ts → commands/session.d.ts} +0 -0
  213. /package/lib/{command-steer.d.ts → commands/steer.d.ts} +0 -0
  214. /package/lib/{clipboard.d.ts → input/clipboard.d.ts} +0 -0
  215. /package/lib/{clipboard.js → input/clipboard.js} +0 -0
  216. /package/lib/{editor.d.ts → input/editor.d.ts} +0 -0
  217. /package/lib/{editor.js → input/editor.js} +0 -0
  218. /package/lib/{external-editor.d.ts → input/external-editor.d.ts} +0 -0
  219. /package/lib/{external-editor.js → input/external-editor.js} +0 -0
  220. /package/lib/{image-paste.js → input/image-paste.js} +0 -0
  221. /package/lib/{keybindings-config.d.ts → input/keybindings-config.d.ts} +0 -0
  222. /package/lib/{keybindings-config.js → input/keybindings-config.js} +0 -0
  223. /package/lib/{keys.d.ts → input/keys.d.ts} +0 -0
  224. /package/lib/{keys.js → input/keys.js} +0 -0
  225. /package/lib/{human-interaction.d.ts → runtime/human-interaction.d.ts} +0 -0
  226. /package/lib/{runner.d.ts → runtime/runner.d.ts} +0 -0
  227. /package/lib/{tool-presentation.js → runtime/tool-presentation.js} +0 -0
  228. /package/lib/{interaction-adapter.js → session/interaction-adapter.js} +0 -0
  229. /package/lib/{project-context.d.ts → session/project-context.d.ts} +0 -0
  230. /package/lib/{project-context.js → session/project-context.js} +0 -0
  231. /package/lib/{project-file-search.d.ts → session/project-file-search.d.ts} +0 -0
  232. /package/lib/{project-file-search.js → session/project-file-search.js} +0 -0
  233. /package/lib/{copy-targets.d.ts → views/copy-targets.d.ts} +0 -0
  234. /package/lib/{copy-targets.js → views/copy-targets.js} +0 -0
  235. /package/lib/{history-store.d.ts → views/history-store.d.ts} +0 -0
  236. /package/lib/{history-store.js → views/history-store.js} +0 -0
  237. /package/lib/{transcript-export.d.ts → views/transcript-export.d.ts} +0 -0
  238. /package/lib/{transcript-export.js → views/transcript-export.js} +0 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Status-line customization shared by settings, persistence, and rendering.
3
+ * @module @agi-fans/dsh-tui/status-config
4
+ */
5
+ /** Stable telemetry groups users can show, hide, and reorder. */
6
+ export declare const STATUS_GROUP_IDS: readonly ["context", "cache", "tokens", "speed", "durations", "counts"];
7
+ export type StatusGroupId = (typeof STATUS_GROUP_IDS)[number];
8
+ /** First-line pieces: model, reasoning effort, workspace path, and Git branch. */
9
+ export declare const STATUS_META_IDS: readonly ["model", "effort", "path", "git"];
10
+ export type StatusMetaId = (typeof STATUS_META_IDS)[number];
11
+ /** Every independently placed footer item. */
12
+ export declare const STATUS_ITEM_IDS: readonly ["model", "effort", "path", "git", "context", "cache", "tokens", "speed", "durations", "counts"];
13
+ export type StatusItemId = (typeof STATUS_ITEM_IDS)[number];
14
+ export declare const STATUS_LABEL_STYLES: readonly ["compact", "full"];
15
+ export type StatusLabelStyle = (typeof STATUS_LABEL_STYLES)[number];
16
+ /**
17
+ * Color slots: one per preview item, plus legacy `metrics` as a fallback for
18
+ * telemetry groups that do not have their own color yet.
19
+ */
20
+ export declare const STATUS_COLOR_SLOTS: readonly ["model", "effort", "path", "git", "context", "cache", "tokens", "speed", "durations", "counts", "metrics"];
21
+ export type StatusColorSlot = (typeof STATUS_COLOR_SLOTS)[number];
22
+ /** Theme tokens offered for a status item. `default` keeps the built-in hierarchy. */
23
+ export declare const STATUS_COLOR_TOKENS: readonly ["default", "text", "muted", "accent", "success", "warning", "border", "label"];
24
+ export type StatusColorToken = (typeof STATUS_COLOR_TOKENS)[number];
25
+ /** Footer column an item can occupy. */
26
+ export declare const STATUS_SIDES: readonly ["left", "right"];
27
+ export type StatusSide = (typeof STATUS_SIDES)[number];
28
+ export declare const DEFAULT_STATUS_SIDES: Record<StatusItemId, StatusSide>;
29
+ /** Per-item color choices. Omitted items keep their built-in tone. */
30
+ export type StatusBarColors = Partial<Record<StatusColorSlot, StatusColorToken>>;
31
+ /** User-owned status-line layout. Missing `groups`/`meta` are hidden; `order` retains their slots. */
32
+ export interface StatusBarConfig {
33
+ enabled: boolean;
34
+ labels: StatusLabelStyle;
35
+ groups: StatusGroupId[];
36
+ /** Complete visual order, including hidden groups. Absent in legacy settings. */
37
+ order?: StatusGroupId[];
38
+ /** Visible first-line items. Absent means every meta item is shown. */
39
+ meta?: StatusMetaId[];
40
+ /** Complete first-line order, including hidden meta items. */
41
+ metaOrder?: StatusMetaId[];
42
+ /** Optional per-item colors for the two-line footer. */
43
+ colors?: StatusBarColors;
44
+ /** Optional left/right column for each item. */
45
+ sides?: Partial<Record<StatusItemId, StatusSide>>;
46
+ }
47
+ /** Normalized layout always carries complete orders, colors, and columns. */
48
+ export interface ResolvedStatusBarConfig extends StatusBarConfig {
49
+ order: StatusGroupId[];
50
+ meta: StatusMetaId[];
51
+ metaOrder: StatusMetaId[];
52
+ colors: Required<StatusBarColors>;
53
+ sides: Record<StatusItemId, StatusSide>;
54
+ }
55
+ /** Legacy value accepted while existing settings documents migrate. */
56
+ export declare const STATUS_PRESETS: readonly ["minimal", "compact", "full"];
57
+ export type StatusPreset = (typeof STATUS_PRESETS)[number];
58
+ export declare const DEFAULT_STATUS_GROUPS: readonly StatusGroupId[];
59
+ export declare const DEFAULT_STATUS_META: readonly StatusMetaId[];
60
+ export declare const DEFAULT_STATUS_COLORS: Required<StatusBarColors>;
61
+ /** Return a fresh default so callers can safely replace its group list. */
62
+ export declare function defaultStatusBarConfig(): ResolvedStatusBarConfig;
63
+ export declare function isStatusMetaId(value: unknown): value is StatusMetaId;
64
+ export declare function isStatusItemId(value: unknown): value is StatusItemId;
65
+ export declare function itemSide(config: StatusBarConfig, id: StatusItemId): StatusSide;
66
+ /**
67
+ * Normalize persisted input at the single configuration seam. Invalid and
68
+ * duplicate groups disappear; legacy presets retain their previous meaning.
69
+ */
70
+ export declare function resolveStatusBarConfig(config?: Partial<StatusBarConfig>, legacyPreset?: StatusPreset): ResolvedStatusBarConfig;
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Status-line customization shared by settings, persistence, and rendering.
3
+ * @module @agi-fans/dsh-tui/status-config
4
+ */
5
+ /** Stable telemetry groups users can show, hide, and reorder. */
6
+ export const STATUS_GROUP_IDS = ['context', 'cache', 'tokens', 'speed', 'durations', 'counts'];
7
+ /** First-line pieces: model, reasoning effort, workspace path, and Git branch. */
8
+ export const STATUS_META_IDS = ['model', 'effort', 'path', 'git'];
9
+ /** Every independently placed footer item. */
10
+ export const STATUS_ITEM_IDS = [...STATUS_META_IDS, ...STATUS_GROUP_IDS];
11
+ export const STATUS_LABEL_STYLES = ['compact', 'full'];
12
+ /**
13
+ * Color slots: one per preview item, plus legacy `metrics` as a fallback for
14
+ * telemetry groups that do not have their own color yet.
15
+ */
16
+ export const STATUS_COLOR_SLOTS = [...STATUS_ITEM_IDS, 'metrics'];
17
+ /** Theme tokens offered for a status item. `default` keeps the built-in hierarchy. */
18
+ export const STATUS_COLOR_TOKENS = ['default', 'text', 'muted', 'accent', 'success', 'warning', 'border', 'label'];
19
+ /** Footer column an item can occupy. */
20
+ export const STATUS_SIDES = ['left', 'right'];
21
+ export const DEFAULT_STATUS_SIDES = {
22
+ model: 'left',
23
+ effort: 'left',
24
+ path: 'right',
25
+ git: 'right',
26
+ context: 'left',
27
+ cache: 'left',
28
+ tokens: 'left',
29
+ speed: 'left',
30
+ durations: 'right',
31
+ counts: 'right',
32
+ };
33
+ /** Legacy value accepted while existing settings documents migrate. */
34
+ export const STATUS_PRESETS = ['minimal', 'compact', 'full'];
35
+ export const DEFAULT_STATUS_GROUPS = STATUS_GROUP_IDS;
36
+ export const DEFAULT_STATUS_META = STATUS_META_IDS;
37
+ export const DEFAULT_STATUS_COLORS = {
38
+ model: 'default',
39
+ effort: 'default',
40
+ path: 'default',
41
+ git: 'default',
42
+ metrics: 'default',
43
+ context: 'default',
44
+ cache: 'default',
45
+ tokens: 'default',
46
+ speed: 'default',
47
+ durations: 'default',
48
+ counts: 'default',
49
+ };
50
+ /** Return a fresh default so callers can safely replace its group list. */
51
+ export function defaultStatusBarConfig() {
52
+ return {
53
+ enabled: true,
54
+ labels: 'compact',
55
+ groups: [...DEFAULT_STATUS_GROUPS],
56
+ order: [...DEFAULT_STATUS_GROUPS],
57
+ meta: [...DEFAULT_STATUS_META],
58
+ metaOrder: [...DEFAULT_STATUS_META],
59
+ colors: { ...DEFAULT_STATUS_COLORS },
60
+ sides: { ...DEFAULT_STATUS_SIDES },
61
+ };
62
+ }
63
+ function isStatusGroupId(value) {
64
+ return typeof value === 'string' && STATUS_GROUP_IDS.includes(value);
65
+ }
66
+ export function isStatusMetaId(value) {
67
+ return typeof value === 'string' && STATUS_META_IDS.includes(value);
68
+ }
69
+ export function isStatusItemId(value) {
70
+ return typeof value === 'string' && STATUS_ITEM_IDS.includes(value);
71
+ }
72
+ function isStatusLabelStyle(value) {
73
+ return typeof value === 'string' && STATUS_LABEL_STYLES.includes(value);
74
+ }
75
+ function isStatusColorToken(value) {
76
+ return typeof value === 'string' && STATUS_COLOR_TOKENS.includes(value);
77
+ }
78
+ function isStatusSide(value) {
79
+ return value === 'left' || value === 'right';
80
+ }
81
+ export function itemSide(config, id) {
82
+ return config.sides?.[id] ?? DEFAULT_STATUS_SIDES[id];
83
+ }
84
+ function resolveStatusSides(sides) {
85
+ const resolved = { ...DEFAULT_STATUS_SIDES };
86
+ if (sides === undefined)
87
+ return resolved;
88
+ for (const id of STATUS_ITEM_IDS) {
89
+ const side = sides[id];
90
+ if (isStatusSide(side))
91
+ resolved[id] = side;
92
+ }
93
+ return resolved;
94
+ }
95
+ function completeOrder(ids, preferred) {
96
+ const ordered = [...new Set(preferred.filter((id) => ids.includes(id)))];
97
+ return [...ordered, ...ids.filter(id => !ordered.includes(id))];
98
+ }
99
+ function resolveStatusColors(colors) {
100
+ const resolved = { ...DEFAULT_STATUS_COLORS };
101
+ if (colors === undefined)
102
+ return resolved;
103
+ for (const slot of STATUS_COLOR_SLOTS) {
104
+ const token = colors[slot];
105
+ if (isStatusColorToken(token))
106
+ resolved[slot] = token;
107
+ }
108
+ const legacyMetrics = resolved.metrics;
109
+ if (legacyMetrics !== 'default') {
110
+ for (const group of STATUS_GROUP_IDS) {
111
+ if (colors[group] === undefined)
112
+ resolved[group] = legacyMetrics;
113
+ }
114
+ }
115
+ return resolved;
116
+ }
117
+ /**
118
+ * Normalize persisted input at the single configuration seam. Invalid and
119
+ * duplicate groups disappear; legacy presets retain their previous meaning.
120
+ */
121
+ export function resolveStatusBarConfig(config, legacyPreset) {
122
+ if (config === undefined) {
123
+ const fallback = defaultStatusBarConfig();
124
+ if (legacyPreset === 'minimal')
125
+ fallback.enabled = false;
126
+ if (legacyPreset === 'full')
127
+ fallback.labels = 'full';
128
+ return fallback;
129
+ }
130
+ const groups = config.groups === undefined
131
+ ? [...DEFAULT_STATUS_GROUPS]
132
+ : [...new Set(config.groups.filter(isStatusGroupId))];
133
+ const meta = config.meta === undefined
134
+ ? [...DEFAULT_STATUS_META]
135
+ : [...new Set(config.meta.filter(isStatusMetaId))];
136
+ return {
137
+ enabled: config.enabled ?? true,
138
+ labels: isStatusLabelStyle(config.labels) ? config.labels : 'compact',
139
+ groups,
140
+ order: completeOrder(STATUS_GROUP_IDS, config.order === undefined ? groups : config.order),
141
+ meta,
142
+ metaOrder: completeOrder(STATUS_META_IDS, config.metaOrder === undefined ? meta : config.metaOrder),
143
+ colors: resolveStatusColors(config.colors),
144
+ sides: resolveStatusSides(config.sides),
145
+ };
146
+ }
147
+ //# sourceMappingURL=status-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-config.js","sourceRoot":"","sources":["../../src/chrome/status-config.ts"],"names":[],"mappings":"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"}
@@ -7,19 +7,22 @@
7
7
  * second locale — then this is the single seam where a dictionary is chosen.
8
8
  * @module @agi-fans/dsh-tui/status-line
9
9
  */
10
- import type { TuiSessionControls, TuiSessionStats } from './definition.ts';
11
- import { type StatusBarConfig } from './status-config.ts';
10
+ import type { TuiLoopStatus, TuiSessionControls, TuiSessionStats } from '../definition.ts';
11
+ import { type StatusBarConfig, type StatusItemId } from './status-config.ts';
12
12
  import type { Theme } from './theme.ts';
13
13
  /** Context needed to render the fixed session footer. */
14
14
  export interface StatusFooterOptions {
15
15
  model: string;
16
16
  reasoningEffort?: string;
17
17
  controls?: TuiSessionControls;
18
+ loop?: TuiLoopStatus;
18
19
  pwd?: string;
19
20
  branch?: string;
20
21
  stats?: TuiSessionStats;
21
22
  config: StatusBarConfig;
22
23
  width: number;
24
+ /** Settings preview: underline the focused item. */
25
+ focus?: StatusItemId;
23
26
  }
24
27
  /** Compact token count: 517 / 12.2K / 517K / 1.2M. */
25
28
  export declare function formatTokens(value: number): string;
@@ -29,11 +32,29 @@ export declare function formatDuration(ms: number): string;
29
32
  export declare function formatTokensPerSecond(value: number): string;
30
33
  /** Build the unpainted English groups for diagnostics and tests. */
31
34
  export declare function sessionStatusGroups(stats: TuiSessionStats, config?: StatusBarConfig): string[];
35
+ /** Human-facing permission preset used consistently across terminal surfaces. */
36
+ export declare function formatPermission(permission: string): string;
37
+ /** Painted permission mode for the composer top-right cap. */
38
+ export declare function renderPermissionBadge(permission: string | undefined, theme: Theme): string;
32
39
  /**
33
40
  * Render the fixed footer: model/workspace metadata first, customizable
34
41
  * session telemetry second. Both rows use left/right columns and exact width.
35
42
  */
36
43
  export declare function renderStatusFooter(options: StatusFooterOptions, theme: Theme): string[];
44
+ /**
45
+ * Status sample for `/settings`. Uses the same left/right footer layout as
46
+ * the live two-line status bar.
47
+ */
48
+ export declare function renderStatusPreviewLines(options: {
49
+ model: string;
50
+ reasoningEffort?: string;
51
+ pwd?: string;
52
+ branch?: string;
53
+ stats?: TuiSessionStats;
54
+ config: StatusBarConfig;
55
+ width: number;
56
+ focus?: StatusItemId;
57
+ }, theme: Theme): string[];
37
58
  /**
38
59
  * Render the telemetry row without footer metadata. Used by the settings
39
60
  * preview and retained as a compatibility seam for direct render callers.