@khorsheed/dsh-client-message-tools 0.3.3 → 0.3.4

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.
@@ -1,18 +1,20 @@
1
1
  /* Generated by @deepseek-ai/dsh-typert-generator from FaceModel — do not edit. */
2
2
  import { z } from 'zod'
3
3
 
4
+ import { createTypertRemoteInfo } from '@deepseek-ai/dsh-typert-protocol/remote-info'
5
+
4
6
  let _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema$value
5
7
  const _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema$value ??= z.object({
6
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
7
- 'targetSeq': z.number().readonly(),
8
- 'text': z.string().readonly(),
8
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
9
+ 'targetSeq': z.number().readonly().describe('Seq of the editable user message (an original or a previous edit\'s replacement).'),
10
+ 'text': z.string().readonly().describe('The edited text (non-blank).'),
9
11
  }))
10
12
  let _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema$value
11
13
  const _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_edit_result$schema$value ??= z.union([z.object({
12
14
  'ok': z.literal(true).readonly(),
13
15
  'value': z.object({
14
- 'replacementSeq': z.number().readonly(),
15
- 'triggered': z.boolean().readonly(),
16
+ 'replacementSeq': z.number().readonly().describe('Seq of the replacement event carrying the edited text.'),
17
+ 'triggered': z.boolean().readonly().describe('Whether the regeneration turn was triggered (false when no live agent).'),
16
18
  }).readonly(),
17
19
  }), z.object({
18
20
  'ok': z.literal(false).readonly(),
@@ -30,14 +32,14 @@ const _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema = () =
30
32
  })]))
31
33
  let _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema$value
32
34
  const _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema$value ??= z.object({
33
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
34
- 'targetSeq': z.number().readonly(),
35
+ 'sessionId': z.string().readonly().describe('Session that owns the withdrawn message.'),
36
+ 'targetSeq': z.number().readonly().describe('Seq of the withdrawn append-surface `user/message` event to restore.'),
35
37
  }))
36
38
  let _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema$value
37
39
  const _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_restore_result$schema$value ??= z.union([z.object({
38
40
  'ok': z.literal(true).readonly(),
39
41
  'value': z.object({
40
- 'restoredSeq': z.number().readonly(),
42
+ 'restoredSeq': z.number().readonly().describe('Seq of the appended replay event.'),
41
43
  }).readonly(),
42
44
  }), z.object({
43
45
  'ok': z.literal(false).readonly(),
@@ -53,15 +55,15 @@ const _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema = (
53
55
  })]))
54
56
  let _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema$value
55
57
  const _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema$value ??= z.object({
56
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
57
- 'targetSeq': z.number().readonly(),
58
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
59
+ 'targetSeq': z.number().readonly().describe('Seq of the append-surface `user/message` event to withdraw.'),
58
60
  }))
59
61
  let _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema$value
60
62
  const _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema$value ??= z.union([z.object({
61
63
  'ok': z.literal(true).readonly(),
62
64
  'value': z.object({
63
- 'replacementSeq': z.number().readonly(),
64
- 'shadowedCount': z.number().readonly(),
65
+ 'replacementSeq': z.number().readonly().describe('Seq of the replacement event now standing in for the withdrawn span.'),
66
+ 'shadowedCount': z.number().readonly().describe('Count of surface nodes the replacement shadows.'),
65
67
  }).readonly(),
66
68
  }), z.object({
67
69
  'ok': z.literal(false).readonly(),
@@ -75,29 +77,48 @@ const _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema =
75
77
  'code': z.literal("already-withdrawn").readonly(),
76
78
  })]).readonly(),
77
79
  })]))
80
+ let _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema$value
81
+ const _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema$value ??= z.strictObject({
82
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
83
+ 'targetSeq': z.number().readonly().describe('Seq of the editable user message (an original or a previous edit\'s replacement).'),
84
+ 'text': z.string().readonly().describe('The edited text (non-blank).'),
85
+ }))
86
+ let _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema$value
87
+ const _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema$value ??= z.strictObject({
88
+ 'sessionId': z.string().readonly().describe('Session that owns the withdrawn message.'),
89
+ 'targetSeq': z.number().readonly().describe('Seq of the withdrawn append-surface `user/message` event to restore.'),
90
+ }))
91
+ let _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema$value
92
+ const _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema$value ??= z.strictObject({
93
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
94
+ 'targetSeq': z.number().readonly().describe('Seq of the append-surface `user/message` event to withdraw.'),
95
+ }))
78
96
 
79
- export const TYPERT = {
97
+ const $remote = createTypertRemoteInfo({
80
98
  package: '@khorsheed/dsh-client-message-tools',
81
- face: 'host',
82
- schemas: [
83
- ],
84
- invocations: [
85
- {
86
- id: '@khorsheed/dsh-client-message-tools#messageTools/edit',
99
+ methods: {
100
+ 'messageTools/edit': {
87
101
  service: 'messageTools',
88
- namespace: 'messageTools',
89
- method: 'edit',
102
+ description: 'Edit a user message in place: replace it and every surface node after it with the edited text itself (no placeholder, no tail duplicate — the edited text appears exactly once, in the replacement event), then start a regeneration turn. The harness has no wake-without-append path, so the turn is started by `agent.followup` carrying a minimal producer-sourced trigger message (the ankh-guard/schedule pattern); the trigger is not the edited text and lands once, as itself.',
90
103
  invocation: { kind: 'direct' },
91
104
  parameters: [
92
105
  {
93
106
  name: 'request',
94
- wire: 'request',
107
+ description: 'session identity, target seq, edited text.',
95
108
  source: 'json',
96
109
  codec: {
97
110
  mode: 'strict',
98
111
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsEditRequest',
99
112
  create: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema,
100
113
  schema: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema(),
114
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the editable user message (an original or a previous edit's replacement)."},"text":{"type":"string","description":"The edited text (non-blank)."}},"required":["sessionId","targetSeq","text"],"additionalProperties":true},
115
+ },
116
+ strictCodec: {
117
+ mode: 'strict',
118
+ typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsEditRequest',
119
+ create: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema,
120
+ schema: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema(),
121
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the editable user message (an original or a previous edit's replacement)."},"text":{"type":"string","description":"The edited text (non-blank)."}},"required":["sessionId","targetSeq","text"],"additionalProperties":false},
101
122
  },
102
123
  },
103
124
  ],
@@ -106,25 +127,33 @@ export const TYPERT = {
106
127
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsEditResult',
107
128
  create: _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema,
108
129
  schema: _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema(),
130
+ description: 'the replacement receipt and whether the turn was triggered, or a rejection.',
131
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"value":{"type":"object","properties":{"replacementSeq":{"type":"number","description":"Seq of the replacement event carrying the edited text."},"triggered":{"type":"boolean","description":"Whether the regeneration turn was triggered (false when no live agent)."}},"required":["replacementSeq","triggered"],"additionalProperties":true}},"required":["ok","value"],"additionalProperties":true},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","const":"session-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"target-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-a-user-message"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"already-withdrawn"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"empty-text"}},"required":["code"],"additionalProperties":true}]}},"required":["ok","error"],"additionalProperties":true}]},
109
132
  },
110
133
  sourceLocation: {"file":"packages/message-tools/src/index.ts","line":140,"column":9},
111
134
  },
112
- {
113
- id: '@khorsheed/dsh-client-message-tools#messageTools/restore',
135
+ 'messageTools/restore': {
114
136
  service: 'messageTools',
115
- namespace: 'messageTools',
116
- method: 'restore',
137
+ description: 'Restore a withdrawn span: replay every replayable entry of it (user messages verbatim — including the last edit\'s new text — and framed assistant text; tool calls/results never replay) as fresh producer-sourced `user/message` appends at the conversation tail, in original order, each citing its original event in `sourceEventSeqs`. The surface replace model is positional — a replaced span folds into one node — so the span cannot be restored in place; the replayed entries are simply the newest messages the model sees. Assistant text replays as framed user-role messages: `assistant/message` requires the model source and the turn/step trace forbids assistant appends outside a step.',
117
138
  invocation: { kind: 'direct' },
118
139
  parameters: [
119
140
  {
120
141
  name: 'request',
121
- wire: 'request',
142
+ description: 'session identity and withdrawn message seq.',
122
143
  source: 'json',
123
144
  codec: {
124
145
  mode: 'strict',
125
146
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsRestoreRequest',
126
147
  create: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema,
127
148
  schema: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema(),
149
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the withdrawn message."},"targetSeq":{"type":"number","description":"Seq of the withdrawn append-surface `user/message` event to restore."}},"required":["sessionId","targetSeq"],"additionalProperties":true},
150
+ },
151
+ strictCodec: {
152
+ mode: 'strict',
153
+ typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsRestoreRequest',
154
+ create: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema,
155
+ schema: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema(),
156
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the withdrawn message."},"targetSeq":{"type":"number","description":"Seq of the withdrawn append-surface `user/message` event to restore."}},"required":["sessionId","targetSeq"],"additionalProperties":false},
128
157
  },
129
158
  },
130
159
  ],
@@ -133,25 +162,33 @@ export const TYPERT = {
133
162
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsRestoreResult',
134
163
  create: _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema,
135
164
  schema: _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema(),
165
+ description: 'the restore receipt, or a rejection from the closed failure union.',
166
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"value":{"type":"object","properties":{"restoredSeq":{"type":"number","description":"Seq of the appended replay event."}},"required":["restoredSeq"],"additionalProperties":true}},"required":["ok","value"],"additionalProperties":true},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","const":"session-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"target-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-a-user-message"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-withdrawn"}},"required":["code"],"additionalProperties":true}]}},"required":["ok","error"],"additionalProperties":true}]},
136
167
  },
137
168
  sourceLocation: {"file":"packages/message-tools/src/index.ts","line":102,"column":9},
138
169
  },
139
- {
140
- id: '@khorsheed/dsh-client-message-tools#messageTools/withdraw',
170
+ 'messageTools/withdraw': {
141
171
  service: 'messageTools',
142
- namespace: 'messageTools',
143
- method: 'withdraw',
172
+ description: 'Withdraw a user message: replace it and every surface node after it with a minimal producer-sourced placeholder, hiding the span from the model.',
144
173
  invocation: { kind: 'direct' },
145
174
  parameters: [
146
175
  {
147
176
  name: 'request',
148
- wire: 'request',
177
+ description: 'session identity and target message seq.',
149
178
  source: 'json',
150
179
  codec: {
151
180
  mode: 'strict',
152
181
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsWithdrawRequest',
153
182
  create: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema,
154
183
  schema: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema(),
184
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the append-surface `user/message` event to withdraw."}},"required":["sessionId","targetSeq"],"additionalProperties":true},
185
+ },
186
+ strictCodec: {
187
+ mode: 'strict',
188
+ typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsWithdrawRequest',
189
+ create: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema,
190
+ schema: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema(),
191
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the append-surface `user/message` event to withdraw."}},"required":["sessionId","targetSeq"],"additionalProperties":false},
155
192
  },
156
193
  },
157
194
  ],
@@ -160,10 +197,20 @@ export const TYPERT = {
160
197
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsWithdrawResult',
161
198
  create: _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema,
162
199
  schema: _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema(),
200
+ description: 'the replacement receipt, or a rejection from the closed failure union.',
201
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"value":{"type":"object","properties":{"replacementSeq":{"type":"number","description":"Seq of the replacement event now standing in for the withdrawn span."},"shadowedCount":{"type":"number","description":"Count of surface nodes the replacement shadows."}},"required":["replacementSeq","shadowedCount"],"additionalProperties":true}},"required":["ok","value"],"additionalProperties":true},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","const":"session-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"target-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-a-user-message"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"already-withdrawn"}},"required":["code"],"additionalProperties":true}]}},"required":["ok","error"],"additionalProperties":true}]},
163
202
  },
164
203
  sourceLocation: {"file":"packages/message-tools/src/index.ts","line":68,"column":9},
165
204
  },
205
+ },
206
+ }, z)
207
+
208
+ export const TYPERT = {
209
+ package: '@khorsheed/dsh-client-message-tools',
210
+ face: 'host',
211
+ schemas: [
166
212
  ],
213
+ get invocations() { return $remote.descriptors },
167
214
  model: {
168
215
  "services": [
169
216
  {
@@ -1,7 +1,8 @@
1
1
  /* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
2
2
  import type {
3
3
  RemoteResult,
4
- TypertRemoteContribution,
4
+ TypertRemoteInfo,
5
+ TypertRemoteMethod,
5
6
  } from '@deepseek-ai/dsh-typert-protocol'
6
7
  import type { MessageToolsEditRequest, MessageToolsEditResult, MessageToolsRestoreRequest, MessageToolsRestoreResult, MessageToolsWithdrawRequest, MessageToolsWithdrawResult } from '@khorsheed/dsh-client-message-tools/types'
7
8
 
@@ -21,6 +22,10 @@ declare module '@deepseek-ai/dsh-typert-protocol' {
21
22
  }
22
23
  }
23
24
 
24
- export declare const TYPERT_REMOTE: TypertRemoteContribution
25
+ export declare const TYPERT_REMOTE: TypertRemoteInfo<{
26
+ readonly 'messageTools/edit': TypertRemoteMethod<{ readonly 'request': MessageToolsEditRequest }, MessageToolsEditResult>
27
+ readonly 'messageTools/restore': TypertRemoteMethod<{ readonly 'request': MessageToolsRestoreRequest }, MessageToolsRestoreResult>
28
+ readonly 'messageTools/withdraw': TypertRemoteMethod<{ readonly 'request': MessageToolsWithdrawRequest }, MessageToolsWithdrawResult>
29
+ }>
25
30
  export default TYPERT_REMOTE
26
31
  //# sourceMappingURL=typert.remote-client.d.ts.map
@@ -1,18 +1,20 @@
1
1
  /* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */
2
2
  import { z } from 'zod'
3
3
 
4
+ import { createTypertRemoteInfo } from '@deepseek-ai/dsh-typert-protocol/remote-info'
5
+
4
6
  let _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema$value
5
7
  const _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema$value ??= z.object({
6
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
7
- 'targetSeq': z.number().readonly(),
8
- 'text': z.string().readonly(),
8
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
9
+ 'targetSeq': z.number().readonly().describe('Seq of the editable user message (an original or a previous edit\'s replacement).'),
10
+ 'text': z.string().readonly().describe('The edited text (non-blank).'),
9
11
  }))
10
12
  let _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema$value
11
13
  const _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_edit_result$schema$value ??= z.union([z.object({
12
14
  'ok': z.literal(true).readonly(),
13
15
  'value': z.object({
14
- 'replacementSeq': z.number().readonly(),
15
- 'triggered': z.boolean().readonly(),
16
+ 'replacementSeq': z.number().readonly().describe('Seq of the replacement event carrying the edited text.'),
17
+ 'triggered': z.boolean().readonly().describe('Whether the regeneration turn was triggered (false when no live agent).'),
16
18
  }).readonly(),
17
19
  }), z.object({
18
20
  'ok': z.literal(false).readonly(),
@@ -30,14 +32,14 @@ const _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema = () =
30
32
  })]))
31
33
  let _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema$value
32
34
  const _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema$value ??= z.object({
33
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
34
- 'targetSeq': z.number().readonly(),
35
+ 'sessionId': z.string().readonly().describe('Session that owns the withdrawn message.'),
36
+ 'targetSeq': z.number().readonly().describe('Seq of the withdrawn append-surface `user/message` event to restore.'),
35
37
  }))
36
38
  let _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema$value
37
39
  const _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_restore_result$schema$value ??= z.union([z.object({
38
40
  'ok': z.literal(true).readonly(),
39
41
  'value': z.object({
40
- 'restoredSeq': z.number().readonly(),
42
+ 'restoredSeq': z.number().readonly().describe('Seq of the appended replay event.'),
41
43
  }).readonly(),
42
44
  }), z.object({
43
45
  'ok': z.literal(false).readonly(),
@@ -53,15 +55,15 @@ const _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema = (
53
55
  })]))
54
56
  let _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema$value
55
57
  const _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema$value ??= z.object({
56
- 'sessionId': z.intersection(z.string(), z.unknown()).readonly(),
57
- 'targetSeq': z.number().readonly(),
58
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
59
+ 'targetSeq': z.number().readonly().describe('Seq of the append-surface `user/message` event to withdraw.'),
58
60
  }))
59
61
  let _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema$value
60
62
  const _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema$value ??= z.union([z.object({
61
63
  'ok': z.literal(true).readonly(),
62
64
  'value': z.object({
63
- 'replacementSeq': z.number().readonly(),
64
- 'shadowedCount': z.number().readonly(),
65
+ 'replacementSeq': z.number().readonly().describe('Seq of the replacement event now standing in for the withdrawn span.'),
66
+ 'shadowedCount': z.number().readonly().describe('Count of surface nodes the replacement shadows.'),
65
67
  }).readonly(),
66
68
  }), z.object({
67
69
  'ok': z.literal(false).readonly(),
@@ -75,26 +77,48 @@ const _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema =
75
77
  'code': z.literal("already-withdrawn").readonly(),
76
78
  })]).readonly(),
77
79
  })]))
80
+ let _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema$value
81
+ const _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema$value ??= z.strictObject({
82
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
83
+ 'targetSeq': z.number().readonly().describe('Seq of the editable user message (an original or a previous edit\'s replacement).'),
84
+ 'text': z.string().readonly().describe('The edited text (non-blank).'),
85
+ }))
86
+ let _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema$value
87
+ const _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema$value ??= z.strictObject({
88
+ 'sessionId': z.string().readonly().describe('Session that owns the withdrawn message.'),
89
+ 'targetSeq': z.number().readonly().describe('Seq of the withdrawn append-surface `user/message` event to restore.'),
90
+ }))
91
+ let _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema$value
92
+ const _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema = () => (_khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema$value ??= z.strictObject({
93
+ 'sessionId': z.string().readonly().describe('Session that owns the target message.'),
94
+ 'targetSeq': z.number().readonly().describe('Seq of the append-surface `user/message` event to withdraw.'),
95
+ }))
78
96
 
79
- export const TYPERT_REMOTE = {
97
+ export const TYPERT_REMOTE = createTypertRemoteInfo({
80
98
  package: '@khorsheed/dsh-client-message-tools',
81
- descriptors: [
82
- {
83
- id: '@khorsheed/dsh-client-message-tools#messageTools/edit',
99
+ methods: {
100
+ 'messageTools/edit': {
84
101
  service: 'messageTools',
85
- namespace: 'messageTools',
86
- method: 'edit',
102
+ description: 'Edit a user message in place: replace it and every surface node after it with the edited text itself (no placeholder, no tail duplicate — the edited text appears exactly once, in the replacement event), then start a regeneration turn. The harness has no wake-without-append path, so the turn is started by `agent.followup` carrying a minimal producer-sourced trigger message (the ankh-guard/schedule pattern); the trigger is not the edited text and lands once, as itself.',
87
103
  invocation: { kind: 'direct' },
88
104
  parameters: [
89
105
  {
90
106
  name: 'request',
91
- wire: 'request',
107
+ description: 'session identity, target seq, edited text.',
92
108
  source: 'json',
93
109
  codec: {
94
110
  mode: 'strict',
95
111
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsEditRequest',
96
112
  create: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema,
97
113
  schema: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0$schema(),
114
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the editable user message (an original or a previous edit's replacement)."},"text":{"type":"string","description":"The edited text (non-blank)."}},"required":["sessionId","targetSeq","text"],"additionalProperties":true},
115
+ },
116
+ strictCodec: {
117
+ mode: 'strict',
118
+ typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsEditRequest',
119
+ create: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema,
120
+ schema: _khorsheed_dsh_client_message_tools_messageTools_edit_parameter_0_strict$schema(),
121
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the editable user message (an original or a previous edit's replacement)."},"text":{"type":"string","description":"The edited text (non-blank)."}},"required":["sessionId","targetSeq","text"],"additionalProperties":false},
98
122
  },
99
123
  },
100
124
  ],
@@ -103,25 +127,33 @@ export const TYPERT_REMOTE = {
103
127
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsEditResult',
104
128
  create: _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema,
105
129
  schema: _khorsheed_dsh_client_message_tools_messageTools_edit_result$schema(),
130
+ description: 'the replacement receipt and whether the turn was triggered, or a rejection.',
131
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"value":{"type":"object","properties":{"replacementSeq":{"type":"number","description":"Seq of the replacement event carrying the edited text."},"triggered":{"type":"boolean","description":"Whether the regeneration turn was triggered (false when no live agent)."}},"required":["replacementSeq","triggered"],"additionalProperties":true}},"required":["ok","value"],"additionalProperties":true},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","const":"session-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"target-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-a-user-message"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"already-withdrawn"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"empty-text"}},"required":["code"],"additionalProperties":true}]}},"required":["ok","error"],"additionalProperties":true}]},
106
132
  },
107
133
  sourceLocation: {"file":"packages/message-tools/src/index.ts","line":140,"column":9},
108
134
  },
109
- {
110
- id: '@khorsheed/dsh-client-message-tools#messageTools/restore',
135
+ 'messageTools/restore': {
111
136
  service: 'messageTools',
112
- namespace: 'messageTools',
113
- method: 'restore',
137
+ description: 'Restore a withdrawn span: replay every replayable entry of it (user messages verbatim — including the last edit\'s new text — and framed assistant text; tool calls/results never replay) as fresh producer-sourced `user/message` appends at the conversation tail, in original order, each citing its original event in `sourceEventSeqs`. The surface replace model is positional — a replaced span folds into one node — so the span cannot be restored in place; the replayed entries are simply the newest messages the model sees. Assistant text replays as framed user-role messages: `assistant/message` requires the model source and the turn/step trace forbids assistant appends outside a step.',
114
138
  invocation: { kind: 'direct' },
115
139
  parameters: [
116
140
  {
117
141
  name: 'request',
118
- wire: 'request',
142
+ description: 'session identity and withdrawn message seq.',
119
143
  source: 'json',
120
144
  codec: {
121
145
  mode: 'strict',
122
146
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsRestoreRequest',
123
147
  create: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema,
124
148
  schema: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0$schema(),
149
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the withdrawn message."},"targetSeq":{"type":"number","description":"Seq of the withdrawn append-surface `user/message` event to restore."}},"required":["sessionId","targetSeq"],"additionalProperties":true},
150
+ },
151
+ strictCodec: {
152
+ mode: 'strict',
153
+ typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsRestoreRequest',
154
+ create: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema,
155
+ schema: _khorsheed_dsh_client_message_tools_messageTools_restore_parameter_0_strict$schema(),
156
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the withdrawn message."},"targetSeq":{"type":"number","description":"Seq of the withdrawn append-surface `user/message` event to restore."}},"required":["sessionId","targetSeq"],"additionalProperties":false},
125
157
  },
126
158
  },
127
159
  ],
@@ -130,25 +162,33 @@ export const TYPERT_REMOTE = {
130
162
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsRestoreResult',
131
163
  create: _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema,
132
164
  schema: _khorsheed_dsh_client_message_tools_messageTools_restore_result$schema(),
165
+ description: 'the restore receipt, or a rejection from the closed failure union.',
166
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"value":{"type":"object","properties":{"restoredSeq":{"type":"number","description":"Seq of the appended replay event."}},"required":["restoredSeq"],"additionalProperties":true}},"required":["ok","value"],"additionalProperties":true},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","const":"session-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"target-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-a-user-message"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-withdrawn"}},"required":["code"],"additionalProperties":true}]}},"required":["ok","error"],"additionalProperties":true}]},
133
167
  },
134
168
  sourceLocation: {"file":"packages/message-tools/src/index.ts","line":102,"column":9},
135
169
  },
136
- {
137
- id: '@khorsheed/dsh-client-message-tools#messageTools/withdraw',
170
+ 'messageTools/withdraw': {
138
171
  service: 'messageTools',
139
- namespace: 'messageTools',
140
- method: 'withdraw',
172
+ description: 'Withdraw a user message: replace it and every surface node after it with a minimal producer-sourced placeholder, hiding the span from the model.',
141
173
  invocation: { kind: 'direct' },
142
174
  parameters: [
143
175
  {
144
176
  name: 'request',
145
- wire: 'request',
177
+ description: 'session identity and target message seq.',
146
178
  source: 'json',
147
179
  codec: {
148
180
  mode: 'strict',
149
181
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsWithdrawRequest',
150
182
  create: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema,
151
183
  schema: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0$schema(),
184
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the append-surface `user/message` event to withdraw."}},"required":["sessionId","targetSeq"],"additionalProperties":true},
185
+ },
186
+ strictCodec: {
187
+ mode: 'strict',
188
+ typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsWithdrawRequest',
189
+ create: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema,
190
+ schema: _khorsheed_dsh_client_message_tools_messageTools_withdraw_parameter_0_strict$schema(),
191
+ jsonSchema: {"type":"object","properties":{"sessionId":{"type":"string","description":"Session that owns the target message."},"targetSeq":{"type":"number","description":"Seq of the append-surface `user/message` event to withdraw."}},"required":["sessionId","targetSeq"],"additionalProperties":false},
152
192
  },
153
193
  },
154
194
  ],
@@ -157,10 +197,12 @@ export const TYPERT_REMOTE = {
157
197
  typeSymbol: '@khorsheed/dsh-client-message-tools/types#MessageToolsWithdrawResult',
158
198
  create: _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema,
159
199
  schema: _khorsheed_dsh_client_message_tools_messageTools_withdraw_result$schema(),
200
+ description: 'the replacement receipt, or a rejection from the closed failure union.',
201
+ jsonSchema: {"oneOf":[{"type":"object","properties":{"ok":{"type":"boolean","const":true},"value":{"type":"object","properties":{"replacementSeq":{"type":"number","description":"Seq of the replacement event now standing in for the withdrawn span."},"shadowedCount":{"type":"number","description":"Count of surface nodes the replacement shadows."}},"required":["replacementSeq","shadowedCount"],"additionalProperties":true}},"required":["ok","value"],"additionalProperties":true},{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"oneOf":[{"type":"object","properties":{"code":{"type":"string","const":"session-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"target-not-found"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"not-a-user-message"}},"required":["code"],"additionalProperties":true},{"type":"object","properties":{"code":{"type":"string","const":"already-withdrawn"}},"required":["code"],"additionalProperties":true}]}},"required":["ok","error"],"additionalProperties":true}]},
160
202
  },
161
203
  sourceLocation: {"file":"packages/message-tools/src/index.ts","line":68,"column":9},
162
204
  },
163
- ],
164
- }
205
+ },
206
+ }, z)
165
207
 
166
208
  export default TYPERT_REMOTE
@@ -3,14 +3,15 @@
3
3
  * the plugin's own 'message-tools-edited' and 'message-tools-restored' rows):
4
4
  * a visual clone of the official bubble chrome — ui-conversation ships no
5
5
  * public components, so the structure is replicated against ui-primitives
6
- * platform modules, with historical images rendered through the owner-prop
7
- * `renderMessageImages` attachment slot (rc8 contract) — plus the
8
- * copy/edit/withdraw action row and the「已编辑」/「已恢复」labels. User
9
- * messages inside a withdrawn span render nothing; the withdrawal divider
10
- * marks the spot.
6
+ * platform modules — plus the copy/edit/withdraw action row and the
7
+ * 「已编辑」/「已恢复」labels. Attached images render through the host's
8
+ * gallery surface (see message-images.ts): the pre-0.2.1 `renderMessageImages`
9
+ * owner prop when the host still passes it, otherwise the root-scoped
10
+ * `conversation.images.content` factory. User messages inside a withdrawn
11
+ * span render nothing; the withdrawal divider marks the spot.
11
12
  */
12
13
  import { type ReactNode } from 'react';
13
14
  import type { UserMessageViewProps } from './slots.ts';
14
15
  /** The shadowed user-message view: bubble plus copy/edit/withdraw actions. */
15
- export declare const UserMessageView: import("react").MemoExoticComponent<({ node, renderMessageImages, t, editMessage, withdrawMessage, backfillDraft, useModelDirectory, modelsAvailable, loadModels, selectModel, ...standard }: UserMessageViewProps) => ReactNode>;
16
+ export declare const UserMessageView: import("react").MemoExoticComponent<({ node, renderMessageImages, loadImage, renderFactorySlot, t, editMessage, withdrawMessage, backfillDraft, useModelDirectory, modelsAvailable, loadModels, selectModel, ...standard }: UserMessageViewProps) => ReactNode>;
16
17
  //# sourceMappingURL=UserMessageView.d.ts.map
@@ -4,11 +4,12 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
4
4
  * the plugin's own 'message-tools-edited' and 'message-tools-restored' rows):
5
5
  * a visual clone of the official bubble chrome — ui-conversation ships no
6
6
  * public components, so the structure is replicated against ui-primitives
7
- * platform modules, with historical images rendered through the owner-prop
8
- * `renderMessageImages` attachment slot (rc8 contract) — plus the
9
- * copy/edit/withdraw action row and the「已编辑」/「已恢复」labels. User
10
- * messages inside a withdrawn span render nothing; the withdrawal divider
11
- * marks the spot.
7
+ * platform modules — plus the copy/edit/withdraw action row and the
8
+ * 「已编辑」/「已恢复」labels. Attached images render through the host's
9
+ * gallery surface (see message-images.ts): the pre-0.2.1 `renderMessageImages`
10
+ * owner prop when the host still passes it, otherwise the root-scoped
11
+ * `conversation.images.content` factory. User messages inside a withdrawn
12
+ * span render nothing; the withdrawal divider marks the spot.
12
13
  */
13
14
  import { memo, useEffect, useRef, useState } from 'react';
14
15
  import { shallowEqual } from '@deepseek-ai/dsh-client-store';
@@ -17,6 +18,7 @@ import { IconCheckOutlineMedium, IconCopyOutlineMedium, IconEditOutlineMedium }
17
18
  import { IconUndoOutlineMedium } from './icons-local.js';
18
19
  import { foldHiddenRanges, isSeqHidden } from './withdrawn-node.js';
19
20
  import { chatHookOf } from './chat-hook.js';
21
+ import { renderImageGallery } from './message-images.js';
20
22
  import { withdrawAndBackfill } from './withdraw-backfill.js';
21
23
  import { ModelChip } from './ModelChip.js';
22
24
  import css from './UserMessageView.module.css';
@@ -134,7 +136,7 @@ function InlineEditor({ initial, busy, t, onSave, onCancel, models }) {
134
136
  } }), _jsxs("div", { className: css.editorActions, children: [_jsx("div", { className: css.editorTrailing, children: models !== undefined && _jsx(ModelChip, { ...models }) }), _jsx(Button, { variant: "outline", disabled: busy, onClick: onCancel, children: t('cancel') }), _jsx(Button, { variant: "primary", disabled: busy || draft.trim() === '', onClick: save, children: t('editor.save') })] })] }));
135
137
  }
136
138
  /** The shadowed user-message view: bubble plus copy/edit/withdraw actions. */
137
- export const UserMessageView = memo(function UserMessageView({ node, renderMessageImages, t, editMessage, withdrawMessage, backfillDraft, useModelDirectory, modelsAvailable, loadModels, selectModel, ...standard }) {
139
+ export const UserMessageView = memo(function UserMessageView({ node, renderMessageImages, loadImage, renderFactorySlot, t, editMessage, withdrawMessage, backfillDraft, useModelDirectory, modelsAvailable, loadModels, selectModel, ...standard }) {
138
140
  // Chat data lives in the `useChat` session standard prop on host 0.1.2
139
141
  // (the helper degrades to the frozen empty snapshot without it).
140
142
  const ranges = chatHookOf(standard)(selectHiddenRanges, shallowEqual);
@@ -175,5 +177,5 @@ export const UserMessageView = memo(function UserMessageView({ node, renderMessa
175
177
  ? { useModelDirectory, loadModels, selectModel, t }
176
178
  : undefined }), failed === 'edit' && _jsx("div", { className: css.actionError, role: "status", children: t('error.edit') })] }) }));
177
179
  }
178
- return (_jsxs("div", { className: css.userRow, "data-time-hover-root": true, children: [_jsxs("div", { className: css.userStack, children: [node.kind === 'message-tools-edited' && (_jsx("div", { className: css.editedLabel, children: t('edited.badge') })), node.kind === 'message-tools-restored' && (_jsx("div", { className: css.editedLabel, children: t('withdrawn.restored') })), images.length > 0 ? renderMessageImages({ images, align: 'end' }) : null, showBubble && (_jsxs("div", { className: css.bubble, children: [projectUserText(text), rest.map((block, index) => (_jsx(JsonBlock, { label: t('message.extraBlock'), payload: block, truncatedLabel: truncated }, index)))] }))] }), _jsxs("div", { className: css.actions, children: [_jsx(CopyButton, { text: text, t: t }), _jsx(Tooltip, { label: t('edit'), side: "bottom", children: _jsx("button", { type: "button", className: css.action, "aria-label": t('edit'), onClick: () => { setFailed(null); setEditing(true); }, children: _jsx(IconEditOutlineMedium, {}) }) }), _jsx(Tooltip, { label: t('action.withdraw'), side: "bottom", children: _jsx("button", { type: "button", className: css.action, "aria-label": t('action.withdraw'), onClick: () => { setFailed(null); setAcknowledged(false); setConfirming(true); }, children: _jsx(IconUndoOutlineMedium, {}) }) })] }), failed === 'withdraw' && _jsx("div", { className: css.actionError, role: "status", children: t('error.withdraw') }), confirming && (_jsx(RiskConfirmation, { open: true, title: t('withdraw.title'), description: t('withdraw.description'), acknowledgeLabel: t('withdraw.acknowledge'), cancelLabel: t('cancel'), closeLabel: t('close'), confirmLabel: t('withdraw.confirm'), acknowledged: acknowledged, disabled: busy, onAcknowledgedChange: setAcknowledged, onCancel: () => { setConfirming(false); setAcknowledged(false); }, onConfirm: confirmWithdraw }))] }));
180
+ return (_jsxs("div", { className: css.userRow, "data-time-hover-root": true, children: [_jsxs("div", { className: css.userStack, children: [node.kind === 'message-tools-edited' && (_jsx("div", { className: css.editedLabel, children: t('edited.badge') })), node.kind === 'message-tools-restored' && (_jsx("div", { className: css.editedLabel, children: t('withdrawn.restored') })), images.length > 0 ? renderImageGallery(renderMessageImages, renderFactorySlot, loadImage, { images, align: 'end' }) : null, showBubble && (_jsxs("div", { className: css.bubble, children: [projectUserText(text), rest.map((block, index) => (_jsx(JsonBlock, { label: t('message.extraBlock'), payload: block, truncatedLabel: truncated }, index)))] }))] }), _jsxs("div", { className: css.actions, children: [_jsx(CopyButton, { text: text, t: t }), _jsx(Tooltip, { label: t('edit'), side: "bottom", children: _jsx("button", { type: "button", className: css.action, "aria-label": t('edit'), onClick: () => { setFailed(null); setEditing(true); }, children: _jsx(IconEditOutlineMedium, {}) }) }), _jsx(Tooltip, { label: t('action.withdraw'), side: "bottom", children: _jsx("button", { type: "button", className: css.action, "aria-label": t('action.withdraw'), onClick: () => { setFailed(null); setAcknowledged(false); setConfirming(true); }, children: _jsx(IconUndoOutlineMedium, {}) }) })] }), failed === 'withdraw' && _jsx("div", { className: css.actionError, role: "status", children: t('error.withdraw') }), confirming && (_jsx(RiskConfirmation, { open: true, title: t('withdraw.title'), description: t('withdraw.description'), acknowledgeLabel: t('withdraw.acknowledge'), cancelLabel: t('cancel'), closeLabel: t('close'), confirmLabel: t('withdraw.confirm'), acknowledged: acknowledged, disabled: busy, onAcknowledgedChange: setAcknowledged, onCancel: () => { setConfirming(false); setAcknowledged(false); }, onConfirm: confirmWithdraw }))] }));
179
181
  });
@@ -9,10 +9,13 @@
9
9
  * restoration is impossible — and the divider carries a「已恢复」badge while
10
10
  * a live restore row cites the span (withdrawing the restored rows clears
11
11
  * the badge and re-enables the action). The「重新编辑」action was removed
12
- * once withdrawals backfill the draft automatically.
12
+ * once withdrawals backfill the draft automatically. Replayed images render
13
+ * through the host's gallery surface (see message-images.ts): the pre-0.2.1
14
+ * `renderMessageImages` owner prop when the host still passes it, otherwise
15
+ * the root-scoped `conversation.images.content` factory.
13
16
  */
14
17
  import { type ReactNode } from 'react';
15
18
  import type { WithdrawnDividerViewProps } from './slots.ts';
16
19
  /** The withdrawal divider: collapsed marker row plus the expandable replay. */
17
- export declare function WithdrawnDividerView({ node, t, restoreMessage, renderMessageImages, ...standard }: WithdrawnDividerViewProps): ReactNode;
20
+ export declare function WithdrawnDividerView({ node, t, restoreMessage, renderMessageImages, loadImage, renderFactorySlot, ...standard }: WithdrawnDividerViewProps): ReactNode;
18
21
  //# sourceMappingURL=WithdrawnDividerView.d.ts.map