@sagmans/dsh-tui 0.1.2 → 0.3.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 (158) hide show
  1. package/README.md +196 -17
  2. package/cordis.patch.yml +4 -2
  3. package/lib/agent/host.d.ts +14 -0
  4. package/lib/agent/host.d.ts.map +1 -1
  5. package/lib/agent/host.js +20 -4
  6. package/lib/agent/host.js.map +1 -1
  7. package/lib/agent/model.d.ts +50 -0
  8. package/lib/agent/model.d.ts.map +1 -1
  9. package/lib/agent/model.js +87 -1
  10. package/lib/agent/model.js.map +1 -1
  11. package/lib/agent/present.d.ts +7 -1
  12. package/lib/agent/present.d.ts.map +1 -1
  13. package/lib/agent/present.js +33 -4
  14. package/lib/agent/present.js.map +1 -1
  15. package/lib/agent/presets.d.ts +7 -1
  16. package/lib/agent/presets.d.ts.map +1 -1
  17. package/lib/agent/presets.js +7 -3
  18. package/lib/agent/presets.js.map +1 -1
  19. package/lib/agent/status.d.ts +10 -0
  20. package/lib/agent/status.d.ts.map +1 -1
  21. package/lib/agent/status.js +2 -0
  22. package/lib/agent/status.js.map +1 -1
  23. package/lib/cards.d.ts +127 -7
  24. package/lib/cards.d.ts.map +1 -1
  25. package/lib/cards.js +381 -52
  26. package/lib/cards.js.map +1 -1
  27. package/lib/export.d.ts +5 -4
  28. package/lib/export.d.ts.map +1 -1
  29. package/lib/export.js +62 -13
  30. package/lib/export.js.map +1 -1
  31. package/lib/fold-cursor.d.ts +23 -0
  32. package/lib/fold-cursor.d.ts.map +1 -0
  33. package/lib/fold-cursor.js +31 -0
  34. package/lib/fold-cursor.js.map +1 -0
  35. package/lib/gates.d.ts +145 -2
  36. package/lib/gates.d.ts.map +1 -1
  37. package/lib/gates.js +335 -40
  38. package/lib/gates.js.map +1 -1
  39. package/lib/index.d.ts +7 -1
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +651 -92
  42. package/lib/index.js.map +1 -1
  43. package/lib/input/actions.d.ts +136 -0
  44. package/lib/input/actions.d.ts.map +1 -0
  45. package/lib/input/actions.js +740 -0
  46. package/lib/input/actions.js.map +1 -0
  47. package/lib/input/keymap-settings.d.ts +21 -0
  48. package/lib/input/keymap-settings.d.ts.map +1 -0
  49. package/lib/input/keymap-settings.js +28 -0
  50. package/lib/input/keymap-settings.js.map +1 -0
  51. package/lib/input/keymap.d.ts +91 -0
  52. package/lib/input/keymap.d.ts.map +1 -0
  53. package/lib/input/keymap.js +170 -0
  54. package/lib/input/keymap.js.map +1 -0
  55. package/lib/input/match.d.ts +10 -0
  56. package/lib/input/match.d.ts.map +1 -0
  57. package/lib/input/match.js +83 -0
  58. package/lib/input/match.js.map +1 -0
  59. package/lib/input/submission.d.ts +8 -1
  60. package/lib/input/submission.d.ts.map +1 -1
  61. package/lib/input/submission.js +9 -2
  62. package/lib/input/submission.js.map +1 -1
  63. package/lib/input.d.ts +17 -0
  64. package/lib/input.d.ts.map +1 -0
  65. package/lib/input.js +27 -0
  66. package/lib/input.js.map +1 -0
  67. package/lib/keys-command.d.ts +16 -0
  68. package/lib/keys-command.d.ts.map +1 -0
  69. package/lib/keys-command.js +60 -0
  70. package/lib/keys-command.js.map +1 -0
  71. package/lib/queue.d.ts +6 -0
  72. package/lib/queue.d.ts.map +1 -0
  73. package/lib/queue.js +68 -0
  74. package/lib/queue.js.map +1 -0
  75. package/lib/settings-notice.d.ts +19 -0
  76. package/lib/settings-notice.d.ts.map +1 -0
  77. package/lib/settings-notice.js +30 -0
  78. package/lib/settings-notice.js.map +1 -0
  79. package/lib/terminal/warning-screen.d.ts +8 -0
  80. package/lib/terminal/warning-screen.d.ts.map +1 -0
  81. package/lib/terminal/warning-screen.js +66 -0
  82. package/lib/terminal/warning-screen.js.map +1 -0
  83. package/lib/theme-capability.d.ts +36 -0
  84. package/lib/theme-capability.d.ts.map +1 -0
  85. package/lib/theme-capability.js +190 -0
  86. package/lib/theme-capability.js.map +1 -0
  87. package/lib/theme-command.d.ts +10 -0
  88. package/lib/theme-command.d.ts.map +1 -0
  89. package/lib/theme-command.js +61 -0
  90. package/lib/theme-command.js.map +1 -0
  91. package/lib/theme-settings.d.ts +196 -0
  92. package/lib/theme-settings.d.ts.map +1 -0
  93. package/lib/theme-settings.js +229 -0
  94. package/lib/theme-settings.js.map +1 -0
  95. package/lib/theme-tokens.d.ts +110 -0
  96. package/lib/theme-tokens.d.ts.map +1 -0
  97. package/lib/theme-tokens.js +427 -0
  98. package/lib/theme-tokens.js.map +1 -0
  99. package/lib/theme.d.ts +32 -35
  100. package/lib/theme.d.ts.map +1 -1
  101. package/lib/theme.js +112 -63
  102. package/lib/theme.js.map +1 -1
  103. package/lib/tokens.d.ts +15 -0
  104. package/lib/tokens.d.ts.map +1 -0
  105. package/lib/tokens.js +29 -0
  106. package/lib/tokens.js.map +1 -0
  107. package/lib/transcript.d.ts +26 -1
  108. package/lib/transcript.d.ts.map +1 -1
  109. package/lib/transcript.js +153 -25
  110. package/lib/transcript.js.map +1 -1
  111. package/lib/ui/dock.d.ts.map +1 -1
  112. package/lib/ui/dock.js +67 -28
  113. package/lib/ui/dock.js.map +1 -1
  114. package/lib/ui/editor.d.ts +51 -0
  115. package/lib/ui/editor.d.ts.map +1 -0
  116. package/lib/ui/editor.js +159 -0
  117. package/lib/ui/editor.js.map +1 -0
  118. package/lib/ui/frame.d.ts +54 -0
  119. package/lib/ui/frame.d.ts.map +1 -0
  120. package/lib/ui/frame.js +79 -0
  121. package/lib/ui/frame.js.map +1 -0
  122. package/lib/ui/gate-input.d.ts +20 -0
  123. package/lib/ui/gate-input.d.ts.map +1 -0
  124. package/lib/ui/gate-input.js +96 -0
  125. package/lib/ui/gate-input.js.map +1 -0
  126. package/lib/ui/markdown.d.ts +19 -2
  127. package/lib/ui/markdown.d.ts.map +1 -1
  128. package/lib/ui/markdown.js +37 -6
  129. package/lib/ui/markdown.js.map +1 -1
  130. package/lib/ui/mermaid.d.ts +44 -0
  131. package/lib/ui/mermaid.d.ts.map +1 -0
  132. package/lib/ui/mermaid.js +178 -0
  133. package/lib/ui/mermaid.js.map +1 -0
  134. package/lib/ui/picker.d.ts +66 -7
  135. package/lib/ui/picker.d.ts.map +1 -1
  136. package/lib/ui/picker.js +112 -19
  137. package/lib/ui/picker.js.map +1 -1
  138. package/lib/ui/prompt.d.ts +30 -0
  139. package/lib/ui/prompt.d.ts.map +1 -0
  140. package/lib/ui/prompt.js +45 -0
  141. package/lib/ui/prompt.js.map +1 -0
  142. package/lib/ui/queue.d.ts +24 -0
  143. package/lib/ui/queue.d.ts.map +1 -0
  144. package/lib/ui/queue.js +57 -0
  145. package/lib/ui/queue.js.map +1 -0
  146. package/lib/ui/status.d.ts +7 -1
  147. package/lib/ui/status.d.ts.map +1 -1
  148. package/lib/ui/status.js +84 -24
  149. package/lib/ui/status.js.map +1 -1
  150. package/lib/ui/view.d.ts +65 -2
  151. package/lib/ui/view.d.ts.map +1 -1
  152. package/lib/ui/view.js +319 -59
  153. package/lib/ui/view.js.map +1 -1
  154. package/lib/work.d.ts +48 -0
  155. package/lib/work.d.ts.map +1 -1
  156. package/lib/work.js +44 -0
  157. package/lib/work.js.map +1 -1
  158. package/package.json +5 -2
@@ -7,6 +7,10 @@ import { ReasoningEffortId } from '@deepseek-ai/dsh-llm';
7
7
  * lists that provider's models, `provider/model` switches, and anything else is
8
8
  * taken as a model id inside the route already in use, because a reader
9
9
  * switching between two models of one provider should not have to repeat it.
10
+ * A complete route may carry one more segment, the reasoning effort, so
11
+ * `provider/model/effort` selects both at once: the last segment is the effort
12
+ * and the model is everything between it and the provider, which reads a model
13
+ * id containing a slash as an effort the adapters in use do not mint.
10
14
  */
11
15
  export function parseModelArgument(argument, providers, current) {
12
16
  const trimmed = argument.trim();
@@ -14,7 +18,16 @@ export function parseModelArgument(argument, providers, current) {
14
18
  return { kind: 'current' };
15
19
  const slash = trimmed.indexOf('/');
16
20
  if (slash > 0 && slash < trimmed.length - 1) {
17
- return { kind: 'switch', choice: { provider: trimmed.slice(0, slash), model: trimmed.slice(slash + 1) } };
21
+ const provider = trimmed.slice(0, slash);
22
+ const rest = trimmed.slice(slash + 1);
23
+ const effortSlash = rest.lastIndexOf('/');
24
+ if (effortSlash > 0 && effortSlash < rest.length - 1) {
25
+ return {
26
+ kind: 'switch',
27
+ choice: { provider, model: rest.slice(0, effortSlash), reasoningEffort: rest.slice(effortSlash + 1) },
28
+ };
29
+ }
30
+ return { kind: 'switch', choice: { provider, model: rest } };
18
31
  }
19
32
  if (providers.some(provider => provider.id === trimmed))
20
33
  return { kind: 'list-models', provider: trimmed };
@@ -27,6 +40,47 @@ export function parseModelArgument(argument, providers, current) {
27
40
  }
28
41
  return { kind: 'switch', choice: { provider: current.provider, model: trimmed } };
29
42
  }
43
+ /**
44
+ * The separator inside a picker's route key.
45
+ *
46
+ * A picker settles on a string, so the pair has to survive one round trip
47
+ * without a reading that guesses which half is which: a model id may contain
48
+ * the slash a `provider/model` reading would split on, and no route id can
49
+ * contain this character.
50
+ */
51
+ const ROUTE_KEY_SEPARATOR = '\u0000';
52
+ /** The picker's stable id for one route. */
53
+ export function modelRouteKey(route) {
54
+ return route.provider + ROUTE_KEY_SEPARATOR + route.model;
55
+ }
56
+ /** Read a route key back; undefined for a string this surface never minted. */
57
+ export function readModelRouteKey(key) {
58
+ const at = key.indexOf(ROUTE_KEY_SEPARATOR);
59
+ if (at <= 0 || at === key.length - 1)
60
+ return undefined;
61
+ return { provider: key.slice(0, at), model: key.slice(at + 1) };
62
+ }
63
+ /**
64
+ * How one advertised route appears in the picker.
65
+ *
66
+ * The name leads because it is what a reader recognizes, and the id follows
67
+ * only when it says something the name does not; the route in force carries
68
+ * its effort, since that is the other half of the choice on screen.
69
+ */
70
+ export function describeModelRoute(route, current) {
71
+ const chosen = current !== undefined && current.provider === route.provider && current.model === route.model;
72
+ const description = [
73
+ route.provider,
74
+ route.model === route.name ? undefined : route.model,
75
+ chosen ? 'current' : undefined,
76
+ chosen && current.reasoningEffort !== undefined ? `effort ${current.reasoningEffort}` : undefined,
77
+ ].filter(part => part !== undefined && part !== '').join(' · ');
78
+ return {
79
+ label: route.name,
80
+ description: description === '' ? undefined : description,
81
+ current: chosen,
82
+ };
83
+ }
30
84
  /**
31
85
  * Own the reader's model choice for one session.
32
86
  *
@@ -61,6 +115,20 @@ export class ModelSwitch {
61
115
  ...current.reasoningEffort === undefined ? {} : { reasoningEffort: String(current.reasoningEffort) },
62
116
  };
63
117
  }
118
+ /**
119
+ * Take the deployment default as this session's route, unless the reader
120
+ * already named one.
121
+ *
122
+ * The default is settings-backed and only trustworthy once it is read, which
123
+ * is after the agent was created; adopting it here is what makes the effort
124
+ * the status line shows reach the request, and a reader's own `/model` or
125
+ * picker choice must never be overwritten by it.
126
+ */
127
+ adopt(choice) {
128
+ if (this.selection.current !== undefined)
129
+ return;
130
+ this.choose(choice);
131
+ }
64
132
  /** Forget the choice, so the session returns to the composition default. */
65
133
  reset() {
66
134
  this.selection.current = undefined;
@@ -87,6 +155,24 @@ export function createModelCatalog(ctx) {
87
155
  ? [{ id: entry.id, name: typeof entry.name === 'string' ? entry.name : entry.id }]
88
156
  : []);
89
157
  },
158
+ efforts: async (provider, model) => {
159
+ if (typeof llm.resolveModelInfo !== 'function')
160
+ return undefined;
161
+ const reasoning = (await llm.resolveModelInfo(provider, model)).reasoning;
162
+ if (reasoning === undefined)
163
+ return undefined;
164
+ const efforts = (reasoning.efforts ?? []).flatMap(entry => typeof entry.id === 'string'
165
+ ? [{
166
+ id: entry.id,
167
+ name: typeof entry.name === 'string' ? entry.name : entry.id,
168
+ ...(typeof entry.description === 'string' ? { description: entry.description } : {}),
169
+ }]
170
+ : []);
171
+ return {
172
+ efforts,
173
+ ...(typeof reasoning.defaultEffort === 'string' ? { defaultEffort: reasoning.defaultEffort } : {}),
174
+ };
175
+ },
90
176
  };
91
177
  }
92
178
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/agent/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/agent/model.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
+ import type { Agent } from '@deepseek-ai/dsh-agent';
2
3
  import { type ToolPresenter } from '../cards.ts';
3
4
  /**
4
5
  * Present tool calls and results through each tool's own render intent.
@@ -7,6 +8,11 @@ import { type ToolPresenter } from '../cards.ts';
7
8
  * and result read. An unknown tool, a missing presenter, or a throwing one
8
9
  * degrades to the generic card instead of breaking the transcript, because a
9
10
  * broken card is recoverable and a broken transcript is not.
11
+ *
12
+ * The scope is the agent whose session is on screen, not the plugin's own
13
+ * composition. An agent preset registers its tools in the agent's scoped world,
14
+ * so a scope-less lookup sees none of them and every card degrades to a bare
15
+ * generic row — which is how a bash card lost its command.
10
16
  */
11
- export declare function createToolPresenter(ctx: Context): ToolPresenter;
17
+ export declare function createToolPresenter(ctx: Context, scope?: () => Agent | undefined): ToolPresenter;
12
18
  //# sourceMappingURL=present.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"present.d.ts","sourceRoot":"","sources":["../../src/agent/present.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AAUpB;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAiC/D"}
1
+ {"version":3,"file":"present.d.ts","sourceRoot":"","sources":["../../src/agent/present.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AA4BpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,GAAG,SAAS,GAAG,aAAa,CAqChG"}
@@ -7,6 +7,26 @@ function parseArguments(argumentsJson) {
7
7
  return undefined;
8
8
  }
9
9
  }
10
+ /**
11
+ * The content a tool returned, unwrapped from the durable result envelope.
12
+ *
13
+ * A `presentResult` is handed the tool's own {@link ContentBlock}s. The durable
14
+ * `tool/result` wraps them one level deeper, inside a `tool-result` block, so
15
+ * passing the envelope through makes every presenter that inspects its content
16
+ * decline — which is how a terminal result silently became a generic card.
17
+ */
18
+ function toolResultContent(content) {
19
+ if (!Array.isArray(content))
20
+ return content;
21
+ for (const block of content) {
22
+ if (typeof block !== 'object' || block === null)
23
+ continue;
24
+ const record = block;
25
+ if (record.type === 'tool-result' && Array.isArray(record.content))
26
+ return record.content;
27
+ }
28
+ return content;
29
+ }
10
30
  /**
11
31
  * Present tool calls and results through each tool's own render intent.
12
32
  *
@@ -14,11 +34,16 @@ function parseArguments(argumentsJson) {
14
34
  * and result read. An unknown tool, a missing presenter, or a throwing one
15
35
  * degrades to the generic card instead of breaking the transcript, because a
16
36
  * broken card is recoverable and a broken transcript is not.
37
+ *
38
+ * The scope is the agent whose session is on screen, not the plugin's own
39
+ * composition. An agent preset registers its tools in the agent's scoped world,
40
+ * so a scope-less lookup sees none of them and every card degrades to a bare
41
+ * generic row — which is how a bash card lost its command.
17
42
  */
18
- export function createToolPresenter(ctx) {
43
+ export function createToolPresenter(ctx, scope) {
19
44
  const definition = (name) => {
20
45
  try {
21
- return ctx.tools.get(name);
46
+ return ctx.tools.get(name, scope?.());
22
47
  }
23
48
  catch {
24
49
  return undefined;
@@ -28,7 +53,11 @@ export function createToolPresenter(ctx) {
28
53
  call(name, argumentsJson) {
29
54
  try {
30
55
  const view = definition(name)?.presentCall?.(parseArguments(argumentsJson));
31
- return cardOfCall(view, name);
56
+ // No definition, or a tool that declares no call view: leave the row to
57
+ // the transcript's own fallback, which at least shows the raw arguments
58
+ // the call was made with. `cardOfCall(undefined, ...)` would return a
59
+ // generic card that silently drops them.
60
+ return view === undefined ? undefined : cardOfCall(view, name);
32
61
  }
33
62
  catch {
34
63
  return undefined;
@@ -36,7 +65,7 @@ export function createToolPresenter(ctx) {
36
65
  },
37
66
  result(name, input) {
38
67
  try {
39
- const view = definition(name)?.presentResult?.(parseArguments(input.argumentsJson), { content: input.content, isError: input.isError, meta: input.meta });
68
+ const view = definition(name)?.presentResult?.(parseArguments(input.argumentsJson), { content: toolResultContent(input.content), isError: input.isError, meta: input.meta });
40
69
  return cardOfResult(view, {
41
70
  fallbackTitle: name,
42
71
  failed: input.isError,
@@ -1 +1 @@
1
- {"version":3,"file":"present.js","sourceRoot":"","sources":["../../src/agent/present.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,GAGb,MAAM,aAAa,CAAA;AAEpB,SAAS,cAAc,CAAC,aAAqB;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAY,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IACD,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,aAAa;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAU,CAAC,CAAA;gBACpF,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,KAAsB;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAC5C,cAAc,CAAC,KAAK,CAAC,aAAa,CAAU,EAC5C,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAW,CAC9E,CAAA;gBACD,OAAO,YAAY,CAAC,IAAI,EAAE;oBACxB,aAAa,EAAE,IAAI;oBACnB,MAAM,EAAE,KAAK,CAAC,OAAO;oBACrB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;iBAC1C,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"present.js","sourceRoot":"","sources":["../../src/agent/present.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,GAGb,MAAM,aAAa,CAAA;AAEpB,SAAS,cAAc,CAAC,aAAqB;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAY,CAAA;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,OAAgB;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAA;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,SAAQ;QACzD,MAAM,MAAM,GAAG,KAAgC,CAAA;QAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAC,OAAO,CAAA;IAC3F,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAY,EAAE,KAA+B;IAC/E,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IACD,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,aAAa;YACtB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAU,CAAC,CAAA;gBACpF,wEAAwE;gBACxE,wEAAwE;gBACxE,sEAAsE;gBACtE,yCAAyC;gBACzC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,EAAE,KAAsB;YACjC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAC5C,cAAc,CAAC,KAAK,CAAC,aAAa,CAAU,EAC5C,EAAE,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAW,CACjG,CAAA;gBACD,OAAO,YAAY,CAAC,IAAI,EAAE;oBACxB,aAAa,EAAE,IAAI;oBACnB,MAAM,EAAE,KAAK,CAAC,OAAO;oBACrB,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC;iBAC1C,CAAC,CAAA;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -37,7 +37,13 @@ export declare function parsePresetArgument(argument: string): PresetCommand;
37
37
  export declare function describePreset(preset: PresetSummary, currentId: string | undefined): PickerRow;
38
38
  /** The roster this surface reads, described structurally. */
39
39
  export interface PresetRoster {
40
- /** The preset a session starts on when nobody names one. */
40
+ /**
41
+ * The preset a session starts on when nobody names one.
42
+ *
43
+ * Read per call rather than captured: the harness resolves it through the
44
+ * hot-reloaded settings document, so a default chosen while this surface is
45
+ * already running still reaches the next session it opens.
46
+ */
41
47
  readonly defaultId: string;
42
48
  list(): Promise<readonly PresetSummary[]>;
43
49
  resolve(id: string | undefined): Promise<PresetSummary>;
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/agent/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD;;;;;;;;GAQG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAA;IACjC,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAED,wDAAwD;AACxD,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAGnE;AAgBD,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAa9F;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,IAAI,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACvD;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,yEAAyE;IACzE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,iEAAiE;IACjE,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7C;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAA;CACnC;AAED,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,gBAAgB,CAAA;AAwC7C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAoCzE"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/agent/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD;;;;;;;;GAQG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAA;IACjC,uEAAuE;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC;AAED,wDAAwD;AACxD,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAGnE;AAgBD,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAa9F;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,IAAI,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACvD;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,yEAAyE;IACzE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnD,iEAAiE;IACjE,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7C;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAA;CACnC;AAED,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,gBAAgB,CAAA;AAwC7C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAwCzE"}
@@ -76,11 +76,15 @@ export function createPresetRoster(ctx) {
76
76
  const service = ctx.get('agentPresets');
77
77
  if (typeof service?.list !== 'function' || typeof service.mount !== 'function')
78
78
  return undefined;
79
- const defaultId = textOr(service.defaultId);
80
- if (defaultId === undefined)
79
+ const fallbackId = textOr(service.defaultId);
80
+ if (fallbackId === undefined)
81
81
  return undefined;
82
82
  return {
83
- defaultId,
83
+ // The harness answers a configured id on every read; the captured one is
84
+ // only there for a service that momentarily answers nothing.
85
+ get defaultId() {
86
+ return textOr(service.defaultId) ?? fallbackId;
87
+ },
84
88
  list: async () => {
85
89
  const rows = await service.list?.() ?? [];
86
90
  return rows.flatMap(row => toSummary(row) ?? []);
@@ -1 +1 @@
1
- {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/agent/presets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/agent/presets.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,16 @@ export interface StatusSources {
41
41
  readonly reasoningEffort?: string;
42
42
  } | undefined) | undefined;
43
43
  readonly home?: string | undefined;
44
+ /**
45
+ * The chord waiting for its next key, read per paint so its window lapses on
46
+ * screen rather than only in the reader's head.
47
+ */
48
+ readonly chord?: (() => string | undefined) | undefined;
49
+ /**
50
+ * The way back to the driven session, read per paint: the reader may remap it
51
+ * or open another session while the row is already on screen.
52
+ */
53
+ readonly back?: (() => string | undefined) | undefined;
44
54
  }
45
55
  export declare function createStatusFacts(ctx: Context, sources: StatusSources): () => StatusFacts;
46
56
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/agent/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CACvC;AAiBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMxF;AAUD;;;;;;GAMG;AACH,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,SAAS,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAA;IACtC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,WAAW,CAiCzF"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/agent/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAIlD,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CACvC;AAiBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMxF;AAUD;;;;;;GAMG;AACH,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,SAAS,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAA;IACtC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM;QACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAClC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;IACvD;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;CACvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,WAAW,CAmCzF"}
@@ -61,6 +61,8 @@ export function createStatusFacts(ctx, sources) {
61
61
  outputTokens: numberOr(totals?.outputTokens),
62
62
  cwd: process.cwd(),
63
63
  home: sources.home,
64
+ chord: sources.chord?.(),
65
+ back: sources.back?.(),
64
66
  };
65
67
  };
66
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/agent/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/agent/status.ts"],"names":[],"mappings":"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"}
package/lib/cards.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { FileDiff, ToolCallView, ToolResultView } from '@deepseek-ai/dsh-tools';
2
+ import type { CardRowClass } from './theme-tokens.ts';
2
3
  /** What a tool's result presenter receives, plus the call arguments it was asked with. */
3
4
  export interface ToolResultInput {
4
5
  readonly argumentsJson: string;
@@ -18,18 +19,86 @@ export interface ToolPresenter {
18
19
  }
19
20
  /** Which treatment a card gets; mirrors the tool's declared render intent. */
20
21
  export type ToolCardKind = 'generic' | 'terminal' | 'diff' | 'search' | 'read' | 'web';
22
+ /**
23
+ * One styled fragment of a detail row.
24
+ *
25
+ * A row such as `12: text` is two things to a reader — a line number and the
26
+ * line — so a row carries fragments rather than one string. Anything else
27
+ * would make the line-number styles into settings that never apply.
28
+ */
29
+ export interface CardPart {
30
+ readonly class: CardRowClass;
31
+ readonly text: string;
32
+ }
33
+ /** One detail row, as the fragments a renderer draws in order. */
34
+ export interface CardRow {
35
+ readonly parts: readonly CardPart[];
36
+ }
37
+ /** A row drawn in a single style. */
38
+ export declare function cardRow(cls: CardRowClass, text: string): CardRow;
39
+ /** The words of a row with no styling, for callers that only need the text. */
40
+ export declare function rowText(row: CardRow): string;
41
+ /** What a measured fact on a card is, which decides its colour and symbol. */
42
+ export type CardStatKind = 'added' | 'changed' | 'removed' | 'size';
43
+ /** One measured fact a card reports beside its header, e.g. a change or size count. */
44
+ export interface CardStat {
45
+ readonly kind: CardStatKind;
46
+ /** The number or phrase; the renderer supplies the symbol and the styling. */
47
+ readonly text: string;
48
+ }
49
+ /**
50
+ * One nested call a PTC program dispatched, as the single row it draws.
51
+ *
52
+ * The row is the tool's own call header — the title and the salient argument
53
+ * its presenter declared — so the surface still learns no tool name.
54
+ */
55
+ export interface ToolSubCall {
56
+ readonly title: string;
57
+ readonly argument?: string;
58
+ readonly failed: boolean;
59
+ }
21
60
  /** One renderable tool row: a header plus the detail rows kept for rendering. */
22
61
  export interface ToolCard {
23
62
  readonly kind: ToolCardKind;
63
+ /**
64
+ * The card's label: the tool's own name when it has an argument, else the
65
+ * title its presenter declared.
66
+ */
24
67
  readonly title: string;
68
+ /**
69
+ * The salient argument the call was made with — a path or a command.
70
+ *
71
+ * The surface cannot know which argument matters, so the presenter names it
72
+ * through its locations or its terminal title. It is a field rather than part
73
+ * of the title so it can carry its own colour, and it is drawn outside the
74
+ * fold because what ran is never a detail.
75
+ */
76
+ readonly argument?: string;
77
+ /** Measured facts to report beside the header, e.g. changed or read lines. */
78
+ readonly stats?: readonly CardStat[];
79
+ /**
80
+ * The exit pill of a terminal card, drawn outside the fold with its output.
81
+ *
82
+ * The pill is not output, so it must not consume a slot of the folded preview
83
+ * window nor be the first row a bounded tail drops.
84
+ */
85
+ readonly status?: string;
25
86
  /** Rows retained for rendering, already capped at CARD_DETAIL_MAX. */
26
- readonly detail: readonly string[];
87
+ readonly detail: readonly CardRow[];
27
88
  readonly failed: boolean;
28
89
  /** Rows the tool actually presented, which retention may have cut short. */
29
90
  readonly totalLines: number;
91
+ /**
92
+ * The calls a PTC program dispatched through this card, in dispatch order.
93
+ *
94
+ * A program reaches every tool through one card, so those calls are the
95
+ * card's own children rather than rows of their own, capped the way detail
96
+ * rows are.
97
+ */
98
+ readonly subCalls?: readonly ToolSubCall[];
99
+ /** Calls the program dispatched at all, which retention may have cut short. */
100
+ readonly subCallsTotal?: number;
30
101
  }
31
- /** Detail rows a settled card shows before it is summarized. */
32
- export declare const CARD_DETAIL_LIMIT = 10;
33
102
  /**
34
103
  * Detail rows retained on a card at all.
35
104
  *
@@ -38,20 +107,62 @@ export declare const CARD_DETAIL_LIMIT = 10;
38
107
  * memory for a reader who will never scroll that far.
39
108
  */
40
109
  export declare const CARD_DETAIL_MAX = 200;
110
+ /**
111
+ * Output rows a folded shell card keeps on screen, counted from the end.
112
+ *
113
+ * A shell command is the one card whose output is the result the reader asked
114
+ * for, so folding it to its header would hide the answer. The tail is the part
115
+ * that carries the outcome of a long run, and the retention cap still bounds
116
+ * what ctrl+o can reveal.
117
+ */
118
+ export declare const CARD_SHELL_PREVIEW = 20;
119
+ /**
120
+ * Nested calls retained on one PTC card.
121
+ *
122
+ * A program can dispatch in a loop, and one line each is small but not free;
123
+ * the cap keeps a card bounded while {@link ToolCard.subCallsTotal} still
124
+ * reports everything the program ran.
125
+ */
126
+ export declare const SUBCALL_MAX = 100;
41
127
  /** Character budget for one detail row, so a minified file cannot flood the viewport. */
42
128
  export declare const CARD_LINE_LIMIT = 200;
129
+ /**
130
+ * The one-line row for one nested call.
131
+ *
132
+ * A tool that declares a call view is drawn exactly as its own header would be;
133
+ * only a tool with no view at all falls back to its registry name and raw call,
134
+ * because the surface cannot name a salient argument for a schema it never saw.
135
+ */
136
+ export declare function subCallOf(name: string, argumentsJson: string, view: ToolCard | undefined): ToolSubCall;
137
+ /**
138
+ * How much of a card the reader has asked for.
139
+ *
140
+ * The folded state names its own treatment because the two kinds of card are
141
+ * not equally readable folded: a shell card's output is the answer, while every
142
+ * other card's rows restate what its title already says.
143
+ */
144
+ export type CardPreview = {
145
+ readonly expanded: true;
146
+ } | {
147
+ readonly expanded: false;
148
+ readonly preview: 'title' | 'shellTail';
149
+ };
43
150
  /**
44
151
  * The rows a card shows right now, and how many the reader is not seeing.
45
152
  *
46
153
  * Expansion is a view decision rather than a card field so one key press can
47
154
  * change every card at once without rebuilding the transcript.
48
155
  */
49
- export declare function cardDetailRows(card: ToolCard, expanded: boolean): {
50
- lines: readonly string[];
156
+ export declare function cardDetailRows(card: ToolCard, preview: CardPreview): {
157
+ lines: readonly CardRow[];
51
158
  hidden: number;
52
159
  };
160
+ /** The hint row for a folded shell card, or undefined when its preview dropped nothing. */
161
+ export declare function shellFoldHint(hidden: number, showMoreKey: string): string | undefined;
162
+ /** The hint row for an opened shell card whose retention dropped the run's earlier rows. */
163
+ export declare function shellRetentionHint(hidden: number): string | undefined;
53
164
  /**
54
- * Build a card from raw lines.
165
+ * Build a card from raw text lines.
55
166
  *
56
167
  * Every path that turns text into a card goes through here, so a tool with no
57
168
  * presenter — or a result whose presenter declined — cannot keep a hundred
@@ -60,6 +171,15 @@ export declare function cardDetailRows(card: ToolCard, expanded: boolean): {
60
171
  export declare function cardFromLines(kind: ToolCardKind, title: string, lines: readonly string[], failed: boolean): ToolCard;
61
172
  /** Text lines carried by model-facing content blocks. */
62
173
  export declare function contentLines(content: unknown): string[];
174
+ /**
175
+ * The header fields a rebuilt card must keep.
176
+ *
177
+ * Replacing a card's rows says nothing about what the call was made with, what
178
+ * it measured, how it ended, or which calls it dispatched, so those fields
179
+ * travel with the rebuild: dropping the argument is how a shell card loses its
180
+ * command the moment a presenter declines the result.
181
+ */
182
+ export declare function carriedFields(card: ToolCard): Pick<ToolCard, 'argument' | 'stats' | 'status' | 'subCalls' | 'subCallsTotal'>;
63
183
  /**
64
184
  * Collapse one call and its result into the single row the reader sees.
65
185
  *
@@ -76,7 +196,7 @@ export declare function mergeCards(call: ToolCard | undefined, result: ToolCard
76
196
  * a full diff would highlight without paying for a line-diff computation on
77
197
  * every frame.
78
198
  */
79
- export declare function renderFileDiff(diff: FileDiff): string[];
199
+ export declare function renderFileDiff(diff: FileDiff): CardRow[];
80
200
  /** Map a tool's pending-call intent to a card, falling back to the raw call name. */
81
201
  export declare function cardOfCall(view: ToolCallView | undefined, fallbackName: string): ToolCard;
82
202
  /** Map a tool's result intent to a card, falling back to the model-facing text. */
@@ -1 +1 @@
1
- {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../src/cards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,QAAQ,EAOR,YAAY,EACZ,cAAc,EAEf,MAAM,wBAAwB,CAAA;AAE/B,0FAA0F;AAC1F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IAC/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAA;CACnE;AAED,8EAA8E;AAC9E,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAA;AAEtF,iFAAiF;AACjF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,KAAK,CAAA;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,yFAAyF;AACzF,eAAO,MAAM,eAAe,MAAM,CAAA;AAUlC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAG9G;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,OAAO,GACd,QAAQ,CAGV;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAYvD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAW7F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAsBvD;AAOD,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,CA2BzF;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,KAAK,EAAE;IAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC5G,QAAQ,CA6DV"}
1
+ {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../src/cards.ts"],"names":[],"mappings":"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"}