@aparte/core 0.10.0 → 0.11.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 (82) hide show
  1. package/dist/client/aparte-client.d.ts +54 -33
  2. package/dist/client/aparte-client.d.ts.map +1 -1
  3. package/dist/client/stream-adapter.d.ts +6 -1
  4. package/dist/client/stream-adapter.d.ts.map +1 -1
  5. package/dist/components/bubble/aparte-chat-bubble.d.ts +25 -4
  6. package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
  7. package/dist/components/chat/aparte-chat.d.ts +8 -4
  8. package/dist/components/chat/aparte-chat.d.ts.map +1 -1
  9. package/dist/components/composer/aparte-composer-action.d.ts +5 -5
  10. package/dist/components/composer/aparte-composer-add-attachment.d.ts +5 -4
  11. package/dist/components/composer/aparte-composer-add-attachment.d.ts.map +1 -1
  12. package/dist/components/composer/aparte-composer-attachments.d.ts +5 -3
  13. package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -1
  14. package/dist/components/composer/aparte-composer-cancel.d.ts +2 -2
  15. package/dist/components/composer/aparte-composer-input.d.ts +8 -5
  16. package/dist/components/composer/aparte-composer-input.d.ts.map +1 -1
  17. package/dist/components/composer/aparte-composer-send.d.ts +2 -2
  18. package/dist/components/composer/aparte-composer-toolbar.d.ts +3 -3
  19. package/dist/components/composer/aparte-composer.d.ts +54 -10
  20. package/dist/components/composer/aparte-composer.d.ts.map +1 -1
  21. package/dist/components/conversation-list/aparte-conversation-list.d.ts +19 -12
  22. package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -1
  23. package/dist/components/elicitation/aparte-elicitation.d.ts +12 -0
  24. package/dist/components/elicitation/aparte-elicitation.d.ts.map +1 -1
  25. package/dist/components/status/aparte-chat-status.d.ts +9 -0
  26. package/dist/components/status/aparte-chat-status.d.ts.map +1 -1
  27. package/dist/components/viewport/aparte-chat-viewport.d.ts +15 -4
  28. package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
  29. package/dist/config/aparte-config.d.ts +20 -1
  30. package/dist/config/aparte-config.d.ts.map +1 -1
  31. package/dist/config/locale.d.ts +43 -0
  32. package/dist/config/locale.d.ts.map +1 -1
  33. package/dist/custom-elements.json +8517 -7601
  34. package/dist/elicitation/approval-panel.d.ts +42 -0
  35. package/dist/elicitation/approval-panel.d.ts.map +1 -0
  36. package/dist/elicitation/index.d.ts +4 -1
  37. package/dist/elicitation/index.d.ts.map +1 -1
  38. package/dist/elicitation/panel.d.ts +1 -1
  39. package/dist/elicitation/panel.d.ts.map +1 -1
  40. package/dist/elicitation/types.d.ts +116 -9
  41. package/dist/elicitation/types.d.ts.map +1 -1
  42. package/dist/generated/element-attributes.d.ts +173 -0
  43. package/dist/generated/element-attributes.d.ts.map +1 -0
  44. package/dist/index.css +615 -92
  45. package/dist/index.d.ts +3 -3
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +341 -254
  48. package/dist/index.js.map +1 -1
  49. package/dist/index.node.d.ts +3 -3
  50. package/dist/index.node.d.ts.map +1 -1
  51. package/dist/index.node.js +46 -44
  52. package/dist/index.node.js.map +1 -1
  53. package/dist/interop/element-props.d.ts +26 -1
  54. package/dist/interop/element-props.d.ts.map +1 -1
  55. package/dist/{index-BnKBciDG.js → is-awaiting-reply-Cb7H3YfN.js} +1448 -1544
  56. package/dist/is-awaiting-reply-Cb7H3YfN.js.map +1 -0
  57. package/dist/primitives/select/aparte-optgroup.d.ts +3 -0
  58. package/dist/primitives/select/aparte-optgroup.d.ts.map +1 -1
  59. package/dist/primitives/select/aparte-option.d.ts +1 -0
  60. package/dist/primitives/select/aparte-option.d.ts.map +1 -1
  61. package/dist/primitives/select/aparte-select.d.ts +22 -18
  62. package/dist/primitives/select/aparte-select.d.ts.map +1 -1
  63. package/dist/renderers/segment-renderers.d.ts.map +1 -1
  64. package/dist/renderers/segments/artifact/card.d.ts.map +1 -1
  65. package/dist/renderers/segments/pipeline-waiting.d.ts.map +1 -1
  66. package/dist/renderers/segments/tool-call.d.ts.map +1 -1
  67. package/dist/types/element-attributes.d.ts +42 -0
  68. package/dist/types/element-attributes.d.ts.map +1 -0
  69. package/dist/types/event-map.d.ts +1 -2
  70. package/dist/types/event-map.d.ts.map +1 -1
  71. package/dist/types/index.d.ts +3 -2
  72. package/dist/types/index.d.ts.map +1 -1
  73. package/dist/types/segments.d.ts +1 -8
  74. package/dist/types/segments.d.ts.map +1 -1
  75. package/dist/types/tools.d.ts +15 -21
  76. package/dist/types/tools.d.ts.map +1 -1
  77. package/dist/utils/segments.d.ts +8 -0
  78. package/dist/utils/segments.d.ts.map +1 -1
  79. package/package.json +3 -2
  80. package/dist/index-BnKBciDG.js.map +0 -1
  81. package/dist/renderers/segments/progress.d.ts +0 -3
  82. package/dist/renderers/segments/progress.d.ts.map +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * buildApprovalPanel — the panel for a decision, as opposed to a value.
3
+ *
4
+ * A sibling of `buildElicitationPanel` rather than three more parameters on it, and
5
+ * the split follows the contracts: that function's is "a schema in, a value out", and
6
+ * an approval has no schema and returns no value. What they share is the composer
7
+ * slot, which is the presenter's business, not the builder's.
8
+ *
9
+ * Two shapes it does NOT reuse, each for a reason:
10
+ *
11
+ * - Not radios plus the composer's send button. A question is one act with one
12
+ * primary button, which is why the elicitation panel has no action row of its own.
13
+ * A decision has two primary actions of OPPOSITE polarity, and one button cannot
14
+ * carry both — so the options are buttons that settle on the first click.
15
+ * Approving is the most frequent interaction in the whole feature; spending two
16
+ * gestures on it to reuse a button would be the tail wagging the dog.
17
+ * - Not a fixed Approve/Reject pair. The options arrive WITH the request, because
18
+ * only the requester can write "and always for git commands" or know that this
19
+ * workspace has somewhere to remember it.
20
+ *
21
+ * The composer's button is not idle: opening the instruction field hands it the
22
+ * `'submit'` mode for that text, through the `setPanelSubmitEnabled` API that already
23
+ * exists for the last question of a form.
24
+ */
25
+ import type { AparteApprovalOption, AparteApprovalAnswer } from './types.js';
26
+ /** What the presenter drives. A superset of the question panel's useful half. */
27
+ export interface BuiltApprovalPanel {
28
+ readonly el: HTMLElement;
29
+ /** The corner escape — see `BuiltElicitationPanel.dismiss` for why a corner. */
30
+ readonly dismiss: HTMLElement;
31
+ /** Settled from inside the panel: an option was clicked. */
32
+ onSettle(cb: (answer: AparteApprovalAnswer) => void): void;
33
+ /** The instruction typed so far, for the composer's submit path. */
34
+ getContent(): AparteApprovalAnswer;
35
+ /** True once there is an instruction worth sending. */
36
+ isComplete(): boolean;
37
+ focus(): void;
38
+ /** Re-apply every string taken from the locale, in place. */
39
+ relabel(): void;
40
+ }
41
+ export declare function buildApprovalPanel(message: string | (() => string), options: readonly AparteApprovalOption[], onChange: () => void): BuiltApprovalPanel;
42
+ //# sourceMappingURL=approval-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-panel.d.ts","sourceRoot":"","sources":["../../src/elicitation/approval-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG7E,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,oEAAoE;IACpE,UAAU,IAAI,oBAAoB,CAAC;IACnC,uDAAuD;IACvD,UAAU,IAAI,OAAO,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,6DAA6D;IAC7D,OAAO,IAAI,IAAI,CAAC;CACnB;AASD,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAChC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,QAAQ,EAAE,MAAM,IAAI,GACrB,kBAAkB,CAqFpB"}
@@ -8,9 +8,12 @@
8
8
  * events, so there is no stringly-typed contract to drift.
9
9
  */
10
10
  import type { AparteElicitationRequest, AparteElicitationResult } from './types.js';
11
- export type { AparteElicitationSchema, AparteElicitationField, AparteElicitationEnumField, AparteElicitationBooleanField, AparteElicitationStringField, AparteElicitationObjectSchema, AparteElicitationRequest, AparteElicitationResult, AparteElicitationPresenter, } from './types.js';
11
+ export type { AparteElicitationSchema, AparteElicitationField, AparteElicitationEnumField, AparteElicitationBooleanField, AparteElicitationStringField, AparteElicitationObjectSchema, AparteElicitationRequest, AparteElicitationResult, AparteElicitationPresenter, AparteApprovalOption, AparteApprovalAnswer, } from './types.js';
12
+ export { AparteElicitationAbortError } from './types.js';
12
13
  export { buildElicitationPanel } from './panel.js';
13
14
  export type { BuiltElicitationPanel } from './panel.js';
15
+ export { buildApprovalPanel } from './approval-panel.js';
16
+ export type { BuiltApprovalPanel } from './approval-panel.js';
14
17
  /**
15
18
  * Ask the user for typed input and await their response, on the config
16
19
  * governing `request.target` (its instance config, or the global default).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elicitation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEpF,YAAY,EACR,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAEpG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elicitation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEpF,YAAY,EACR,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,GACvB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAEpG"}
@@ -59,5 +59,5 @@ export interface BuiltElicitationPanel {
59
59
  */
60
60
  relabel(): void;
61
61
  }
62
- export declare function buildElicitationPanel(message: string, schema: AparteElicitationSchema, onChange: () => void): BuiltElicitationPanel;
62
+ export declare function buildElicitationPanel(message: string | (() => string), schema: AparteElicitationSchema, onChange: () => void): BuiltElicitationPanel;
63
63
  //# sourceMappingURL=panel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/elicitation/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,uBAAuB,EAK1B,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,gEAAgE;IAChE,UAAU,IAAI,OAAO,CAAC;IACtB,yDAAyD;IACzD,UAAU,IAAI,OAAO,CAAC;IACtB,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;;;;;OASG;IACH,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC;IAC7B,8EAA8E;IAC9E,UAAU,IAAI,OAAO,CAAC;IACtB,mFAAmF;IACnF,OAAO,IAAI,IAAI,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,OAAO,IAAI,IAAI,CAAC;CACnB;AAwRD,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,MAAM,IAAI,GACrB,qBAAqB,CAevB"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/elicitation/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,uBAAuB,EAK1B,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,gEAAgE;IAChE,UAAU,IAAI,OAAO,CAAC;IACtB,yDAAyD;IACzD,UAAU,IAAI,OAAO,CAAC;IACtB,kDAAkD;IAClD,KAAK,IAAI,IAAI,CAAC;IACd;;;;;;;;;OASG;IACH,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC;IAC7B,8EAA8E;IAC9E,UAAU,IAAI,OAAO,CAAC;IACtB,mFAAmF;IACnF,OAAO,IAAI,IAAI,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,OAAO,IAAI,IAAI,CAAC;CACnB;AAwRD,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,EAChC,MAAM,EAAE,uBAAuB,EAC/B,QAAQ,EAAE,MAAM,IAAI,GACrB,qBAAqB,CAevB"}
@@ -2,7 +2,7 @@
2
2
  * Elicitation — the generic "pause the run and ask the user for typed input"
3
3
  * primitive. Generalises the bespoke `ask_user` tool: the KIND of question
4
4
  * is carried by a flat schema, not by a dedicated tool. Shape is aligned with
5
- * MCP elicitation (message + requested schema, accept/decline/cancel), but the
5
+ * MCP elicitation (message + requested schema, accept/decline), but the
6
6
  * mechanism is transport-agnostic and framework-agnostic — a typed presenter
7
7
  * registered per config instance, never window events.
8
8
  */
@@ -88,21 +88,102 @@ export interface AparteElicitationObjectSchema {
88
88
  export type AparteElicitationSchema = AparteElicitationField | AparteElicitationObjectSchema;
89
89
  export interface AparteElicitationRequest {
90
90
  /** Human-readable prompt shown above the input(s). */
91
- message: string;
91
+ /**
92
+ * The sentence above everything else. A string, or a function re-read on relabel.
93
+ *
94
+ * Same reason as an option's `label`, and I shipped the two an hour apart because I
95
+ * fixed the choices and left the QUESTION behind — a panel asking "Run delete_file?"
96
+ * over buttons reading "Approuver" and "Rejeter". A resolved string has nothing to
97
+ * re-derive from.
98
+ *
99
+ * A function only makes sense when the text comes from the LOCALE, which is core's
100
+ * own approval question. A tool's question is model-authored: it is a string, and
101
+ * re-reading it would mean nothing.
102
+ */
103
+ message: string | (() => string);
92
104
  /** What to ask for. */
93
- schema: AparteElicitationSchema;
105
+ /**
106
+ * What value to collect. Required on a `'question'`, absent on an `'approval'` —
107
+ * a decision is not a value, and a schema there would be a form with nothing in it.
108
+ */
109
+ schema?: AparteElicitationSchema;
94
110
  /**
95
111
  * An element inside the target chat, used to resolve WHICH instance presents
96
112
  * the request (its config + composer). Omit for the global/default chat.
97
113
  */
98
114
  target?: HTMLElement | null;
99
115
  /**
100
- * Aborts the request the presenter settles `cancel` and closes the panel.
101
- * Pass a tool handler's signal so a client-side timeout or turn abort tears
102
- * the panel down instead of leaving it open.
116
+ * What kind of request this is, which decides what the panel puts on screen.
117
+ *
118
+ * `'question'` (the default) collects a VALUE against `schema`. `'approval'` asks
119
+ * the user to pick one of `options` — a decision, not a value — and its answer is
120
+ * an {@link AparteApprovalAnswer}. One mechanism, two presentations: what a person
121
+ * is being asked for differs, where they answer does not.
122
+ */
123
+ kind?: 'question' | 'approval';
124
+ /**
125
+ * The options offered, on `kind: 'approval'`. Required there, ignored otherwise.
126
+ *
127
+ * Supplied per request, never fixed by core: a gate that has nowhere to remember a
128
+ * grant offers two, one that does offers three. Rendering an option the host cannot
129
+ * honour is the affordance rule read backwards.
130
+ */
131
+ options?: readonly AparteApprovalOption[];
132
+ /**
133
+ * Aborts the request — the panel closes and the promise REJECTS with
134
+ * {@link AparteElicitationAbortError}. Pass a tool handler's signal so a
135
+ * client-side timeout or a stopped turn tears the panel down instead of leaving
136
+ * it open.
103
137
  */
104
138
  signal?: AbortSignal;
105
139
  }
140
+ /**
141
+ * One thing the user can pick on an approval.
142
+ *
143
+ * The requester writes the LABEL, always. Core cannot know that "and always for git
144
+ * commands" is meaningful, or that this workspace has somewhere to remember it — so an
145
+ * option offering a scope exists only because the host built it and can honour it
146
+ * (ratified decision #8). Two options may share a `value` and differ only in scope,
147
+ * which is what "Yes" and "Yes, and always for X" are: the same verdict, a different
148
+ * reach.
149
+ */
150
+ export interface AparteApprovalOption {
151
+ /** What {@link AparteApprovalAnswer.option} reports when this one is chosen. */
152
+ value: string;
153
+ /**
154
+ * What the user reads. A string, or a function re-read on every relabel.
155
+ *
156
+ * The function arm exists because these are the highest-stakes strings in the
157
+ * library and they have to follow a language switch WHILE the request is open — a
158
+ * person deciding whether to let a tool run should not be reading the choice in a
159
+ * language they did not pick. A plain string cannot: the panel receives it already
160
+ * resolved and has nothing to re-derive it from.
161
+ *
162
+ * So core's own two options pass a function that reads the locale, and a host
163
+ * passes whatever it likes: its label is its string, and core has no business
164
+ * translating it.
165
+ */
166
+ label: string | (() => string);
167
+ /**
168
+ * How it is drawn. `'affirm'` and `'deny'` are the two poles a decision has; a
169
+ * third would be a preference, not a meaning, so there is no `'neutral'`.
170
+ */
171
+ tone?: 'affirm' | 'deny';
172
+ }
173
+ /**
174
+ * What an approval resolves with, as `content`.
175
+ *
176
+ * `instruction` is the free-text arm — "no, do this instead" — and it is a separate
177
+ * field rather than a magic `option` value because only the host can name its options,
178
+ * and this text is the user's. It reaches the model as the refusal's reason, which is
179
+ * possible at all only because a refusal now hands the model a turn to read it in.
180
+ */
181
+ export interface AparteApprovalAnswer {
182
+ /** The `value` of the option chosen, or `undefined` when only text was given. */
183
+ option?: string;
184
+ /** What the user typed instead, if they typed anything. */
185
+ instruction?: string;
186
+ }
106
187
  /**
107
188
  * The user's response. `content` matches the schema:
108
189
  * enum→string, enum+multiple→string[], boolean→boolean, string→string,
@@ -113,11 +194,37 @@ export type AparteElicitationResult = {
113
194
  content: unknown;
114
195
  } | {
115
196
  action: 'decline';
116
- } | {
117
- action: 'cancel';
118
197
  };
119
198
  /**
120
- * Presents an elicitation request and resolves with the user's response.
199
+ * The request ended without an answer: the turn was stopped, the signal fired, the
200
+ * question was taken away by another request, or nothing was mounted to ask it.
201
+ *
202
+ * A THROW, and not a third member of {@link AparteElicitationResult}. `cancel` was a
203
+ * VALUE, so it was easy to handle as though it were an answer — and that is exactly
204
+ * what happened: the approval gate treated it as a refusal, stamped the segment
205
+ * `rejected`, and told the model "Tool execution was rejected by the user." The user
206
+ * had pressed Stop. A rejection cannot be mistaken for a decision by a caller that
207
+ * forgot a branch, which is the property `cancel` never had.
208
+ *
209
+ * `name` is `'AbortError'`, so every `err.name === 'AbortError'` check already written
210
+ * treats it correctly — including `askUserHandler`, which used to perform this exact
211
+ * conversion by hand. That hand-conversion existing is the evidence the shape is
212
+ * right, and it is gone.
213
+ */
214
+ export declare class AparteElicitationAbortError extends DOMException {
215
+ /**
216
+ * Which of the two ways it ended.
217
+ *
218
+ * `'no-presenter'` is a developer's setup problem and `'aborted'` is a person
219
+ * stopping something; a host that reports them the same way reports a bug as a
220
+ * user action. The distinction is why this carries a field at all.
221
+ */
222
+ readonly reason: 'aborted' | 'no-presenter';
223
+ constructor(reason?: 'aborted' | 'no-presenter');
224
+ }
225
+ /**
226
+ * Presents an elicitation request and resolves with the user's response, or rejects
227
+ * with {@link AparteElicitationAbortError} when it ends without one.
121
228
  * Registered per config instance via `aparteGlobalConfig.setElicitationPresenter`
122
229
  * (the `<aparte-elicitation>` Web Component is the default presenter).
123
230
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/elicitation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/F,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED,+CAA+C;AAC/C,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,yBAAyB;AACzB,MAAM,WAAW,4BAA4B;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4BAA4B;AAC5B,MAAM,MAAM,sBAAsB,GAC5B,0BAA0B,GAC1B,6BAA6B,GAC7B,4BAA4B,CAAC;AAEnC,2DAA2D;AAC3D,MAAM,WAAW,6BAA6B;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,+EAA+E;AAC/E,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG,6BAA6B,CAAC;AAE7F,MAAM,WAAW,wBAAwB;IACrC,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB;IACvB,MAAM,EAAE,uBAAuB,CAAC;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAC7B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE3B;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/elicitation/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ /** `<aparte-chat>` — AparteChat - The Shell */
2
+ export interface AparteChatAttributes {
3
+ /** Placeholder for the composer input (default composition) */
4
+ placeholder?: string;
5
+ /** Disables the composer */
6
+ disabled?: boolean;
7
+ /** Center the composer as a welcome state until the first message, then slide to the normal layout */
8
+ 'center-empty'?: boolean;
9
+ /** Add the file picker + chips strip to the default composition (opt-in: the host must consume the files — an `AparteClient` does, a hand-rolled loop must read `event.detail.files`) */
10
+ attachments?: boolean;
11
+ /** The wrapper's explicit hands-off signal: set it and this element composes none of its own children, because the framework owns them. All four wrappers set it; it was read by this element and declared by nothing until now. */
12
+ 'framework-managed'?: boolean;
13
+ }
14
+ /** `<aparte-chat-bubble>` — One message: plain content or a list of rich segments, in light DOM. */
15
+ export interface AparteChatBubbleAttributes {
16
+ /** The message role. `data-role` is the styled mirror of it. */
17
+ role?: string;
18
+ /** `user` / `assistant` / `system`; what the CSS keys off. */
19
+ 'data-role'?: string;
20
+ /** Plain text content, for a bubble with no segments. */
21
+ content?: string;
22
+ /** Epoch milliseconds OR a date string: `_updateTimestamp` accepts either and only coerces when the value is numeric. */
23
+ timestamp?: number | string;
24
+ /** How streaming and the action bar address this bubble. */
25
+ 'message-id'?: string;
26
+ /** Hides the action bar and shows the caret while a reply is in flight. */
27
+ streaming?: boolean;
28
+ /** The display name in the header. */
29
+ name?: string;
30
+ }
31
+ /** `<aparte-chat-status>` — A standalone status line — a light-DOM typing indicator the APP owns. Core never turns it on by itself, so it can never compete with the bubble's own waiting state. */
32
+ export interface AparteChatStatusAttributes {
33
+ /** Shows or hides the indicator. */
34
+ visible?: boolean;
35
+ /** The line to show. Defaults to the locale's typing string. */
36
+ text?: string;
37
+ }
38
+ /** `<aparte-chat-viewport>` — The transcript surface: a light-DOM container with sticky scrolling, token streaming and segment-aware rendering. */
39
+ export interface AparteChatViewportAttributes {
40
+ /** How close to the bottom still counts as "at the bottom". */
41
+ 'scroll-threshold'?: number;
42
+ /** Caps how many bubbles stay in the DOM; older ones are released. */
43
+ 'max-rendered-bubbles'?: number;
44
+ /** DEPRECATED. It used to evict messages from the model; it now only caps rendered bubbles, which is what `max-rendered-bubbles` says. For real history retention configure the conversation manager instead. */
45
+ 'max-messages'?: number;
46
+ /** The wrapper's explicit hands-off signal: set it and this element composes none of its own children, because the framework owns them. All four wrappers set it; it was read by this element and declared by nothing until now. */
47
+ 'framework-managed'?: boolean;
48
+ }
49
+ /** `<aparte-composer>` — The root context for every `aparte-composer-*` primitive. It imposes no visual layout — the consumer owns the structure — and holds the shared state the parts read: the value, the streaming flag, pending attachments, the panel slot. */
50
+ export interface AparteComposerAttributes {
51
+ /** Forwarded to `<aparte-composer-input>` through the internal bus. */
52
+ placeholder?: string;
53
+ /** Disables the whole composer, every part included. */
54
+ disabled?: boolean;
55
+ /** The id of the `<aparte-chat>` this composer drives. */
56
+ target?: string;
57
+ }
58
+ /** `<aparte-composer-action>` — Generic action button primitive for <aparte-composer>. */
59
+ export interface AparteComposerActionAttributes {
60
+ /** Icon key for aparteGlobalConfig.getIcon(), or raw SVG/HTML starting with `<` */
61
+ icon?: string;
62
+ /** Accessible label (also used as tooltip) */
63
+ label?: string;
64
+ /** Disables the button */
65
+ disabled?: boolean;
66
+ }
67
+ /** `<aparte-composer-add-attachment>` — File picker button for <aparte-composer>. */
68
+ export interface AparteComposerAddAttachmentAttributes {
69
+ /** MIME types / extensions passed to the file input (e.g. "image/*,.pdf") */
70
+ accept?: string;
71
+ /** Allow multiple file selection (default: true) */
72
+ multiple?: boolean;
73
+ /** Greys out the picker and ignores drops. */
74
+ disabled?: boolean;
75
+ }
76
+ /** `<aparte-composer-input>` — Contenteditable text input primitive. */
77
+ export interface AparteComposerInputAttributes {
78
+ /** Placeholder text (fallback: reads from aparte-composer) */
79
+ placeholder?: string;
80
+ /** Max height in px before scroll (default: 200) */
81
+ 'max-height'?: number;
82
+ /** Min height in px. When omitted, the stylesheet's min-height governs (44px in aparte.css) — so themes can resize the editor in pure CSS without being fought by an inline height. */
83
+ 'min-height'?: number;
84
+ /** Makes the field non-editable; the composer's own `disabled` also reaches it. */
85
+ disabled?: boolean;
86
+ }
87
+ /** `<aparte-composer-toolbar>` — The composer's bottom row — the strip a mode picker, a model selector or a token counter belongs in, rather than a bar of your own floating below the chat. Purely structural: it lays its children out in a row and gets out of the way. */
88
+ export interface AparteComposerToolbarAttributes {
89
+ /** Reflected BY the element while it holds no element child; the stylesheet hides it then. Read-only, do not set it yourself. */
90
+ 'data-empty'?: boolean;
91
+ }
92
+ /** `<aparte-conversation-list>` — Conversation-history sidebar — a framework-agnostic web component. The host sets the `conversations` JS property and the `active-id` attribute; this renders the list and fires the user's intent, never acting on it itself. */
93
+ export interface AparteConversationListAttributes {
94
+ /** The id of the conversation to render as selected. */
95
+ 'active-id'?: string;
96
+ }
97
+ /** `<aparte-optgroup>` — AparteOptgroup */
98
+ export interface AparteOptgroupAttributes {
99
+ /** Group label */
100
+ label?: string;
101
+ /** Allow collapse/expand */
102
+ collapsible?: boolean;
103
+ /** Collapsed state */
104
+ collapsed?: boolean;
105
+ /** Shows a spinner in place of the group's options. */
106
+ loading?: boolean;
107
+ }
108
+ /** `<aparte-option>` — AparteOption */
109
+ export interface AparteOptionAttributes {
110
+ /** Option value */
111
+ value?: string;
112
+ /** Disabled state */
113
+ disabled?: boolean;
114
+ /** Selected state */
115
+ selected?: boolean;
116
+ /** Free-form status the host sets; styled, never read by core. */
117
+ 'data-status'?: string;
118
+ }
119
+ /** `<aparte-progress-spinner>` — AparteProgressSpinner */
120
+ export interface AparteProgressSpinnerAttributes {
121
+ /** Progress percentage 0–100 (omit for indeterminate) */
122
+ value?: number;
123
+ }
124
+ /** `<aparte-select>` — Dropdown select for aparté — a vanilla web component with optional grouping, a search filter and a keyboard-driven listbox. */
125
+ export interface AparteSelectAttributes {
126
+ /** The selected option's value. */
127
+ value?: string;
128
+ /** Shown while nothing is selected. */
129
+ placeholder?: string;
130
+ /** Blocks opening and selection. */
131
+ disabled?: boolean;
132
+ /** Renders `<aparte-optgroup>` children as collapsible groups. */
133
+ grouped?: boolean;
134
+ /** Adds a filter field above the options. */
135
+ searchable?: boolean;
136
+ /** Reflects (and controls) whether the dropdown is open. */
137
+ open?: boolean;
138
+ }
139
+ /**
140
+ * The elements that observe no attribute at all. An empty surface is the honest
141
+ * declaration — it says "checked, there are none", where an absent entry would only
142
+ * say "not looked at": `<aparte-composer-attachments>`, `<aparte-composer-cancel>`, `<aparte-composer-send>`, `<aparte-elicitation>`.
143
+ */
144
+ export type AparteNoAttributes = Record<never, never>;
145
+ /**
146
+ * Tag name to its attribute surface — the registry every wrapper maps over.
147
+ *
148
+ * Total by construction: it is generated from the manifest, so an element cannot be
149
+ * missing from it, which is the property a hand-written list could not have.
150
+ */
151
+ export interface AparteElementAttributes {
152
+ 'aparte-chat': AparteChatAttributes;
153
+ 'aparte-chat-bubble': AparteChatBubbleAttributes;
154
+ 'aparte-chat-status': AparteChatStatusAttributes;
155
+ 'aparte-chat-viewport': AparteChatViewportAttributes;
156
+ 'aparte-composer': AparteComposerAttributes;
157
+ 'aparte-composer-action': AparteComposerActionAttributes;
158
+ 'aparte-composer-add-attachment': AparteComposerAddAttachmentAttributes;
159
+ 'aparte-composer-attachments': AparteNoAttributes;
160
+ 'aparte-composer-cancel': AparteNoAttributes;
161
+ 'aparte-composer-input': AparteComposerInputAttributes;
162
+ 'aparte-composer-send': AparteNoAttributes;
163
+ 'aparte-composer-toolbar': AparteComposerToolbarAttributes;
164
+ 'aparte-conversation-list': AparteConversationListAttributes;
165
+ 'aparte-elicitation': AparteNoAttributes;
166
+ 'aparte-optgroup': AparteOptgroupAttributes;
167
+ 'aparte-option': AparteOptionAttributes;
168
+ 'aparte-progress-spinner': AparteProgressSpinnerAttributes;
169
+ 'aparte-select': AparteSelectAttributes;
170
+ }
171
+ /** Every tag this package defines, derived from the registry so the two cannot diverge. */
172
+ export type AparteElementTagName = keyof AparteElementAttributes;
173
+ //# sourceMappingURL=element-attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-attributes.d.ts","sourceRoot":"","sources":["../../src/generated/element-attributes.ts"],"names":[],"mappings":"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"}