@adecore/agents-react 0.24.1 → 0.25.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 (113) hide show
  1. package/dist/chat/index.d.ts +4 -7
  2. package/dist/chat/index.js +4 -7
  3. package/dist/chat/logic/continue-after-stop.d.ts +3 -0
  4. package/dist/chat/logic/continue-after-stop.js +28 -0
  5. package/dist/chat/logic/thread-cards.d.ts +0 -1
  6. package/dist/chat/logic/thread-cards.js +0 -4
  7. package/dist/chat/preferences.d.ts +0 -1
  8. package/dist/chat/preferences.js +0 -3
  9. package/dist/chat/stash.d.ts +6 -0
  10. package/dist/chat/stash.js +13 -0
  11. package/dist/chat/ui/Composer.js +26 -5
  12. package/dist/chat/ui/EditDiff.js +4 -3
  13. package/dist/chat/ui/Pickers.js +1 -1
  14. package/dist/chat/ui/UnifiedDiff.js +4 -3
  15. package/dist/chat/ui/composer/ComposerControls.d.ts +1 -0
  16. package/dist/chat/ui/composer/ComposerControls.js +3 -3
  17. package/dist/chat/ui/composer/use-composer-submit.d.ts +3 -1
  18. package/dist/chat/ui/composer/use-composer-submit.js +22 -4
  19. package/dist/chat/ui/composer/use-continuable-turn.d.ts +2 -0
  20. package/dist/chat/ui/composer/use-continuable-turn.js +12 -0
  21. package/dist/chat/ui/composer/use-notice.d.ts +3 -1
  22. package/dist/chat/ui/composer/use-notice.js +8 -6
  23. package/dist/chat/ui/diff/ReviewDiff.js +2 -2
  24. package/dist/chat/ui/index.d.ts +9 -28
  25. package/dist/chat/ui/index.js +8 -27
  26. package/dist/chat/ui/intelligent-ui/UiReply.js +20 -2
  27. package/dist/chat/ui/intelligent-ui/node-text.d.ts +3 -1
  28. package/dist/chat/ui/intelligent-ui/node-text.js +32 -0
  29. package/dist/chat/ui/intelligent-ui/registry.js +15 -5
  30. package/dist/chat/ui/intelligent-ui/render-context.d.ts +6 -0
  31. package/dist/chat/ui/intelligent-ui/renderers/base-land.d.ts +1 -0
  32. package/dist/chat/ui/intelligent-ui/renderers/base-land.js +6 -0
  33. package/dist/chat/ui/intelligent-ui/renderers/binding.d.ts +6 -0
  34. package/dist/chat/ui/intelligent-ui/renderers/binding.js +10 -0
  35. package/dist/chat/ui/intelligent-ui/renderers/content.d.ts +2 -0
  36. package/dist/chat/ui/intelligent-ui/renderers/content.js +68 -6
  37. package/dist/chat/ui/intelligent-ui/renderers/inputs.d.ts +2 -0
  38. package/dist/chat/ui/intelligent-ui/renderers/inputs.js +40 -13
  39. package/dist/chat/ui/intelligent-ui/renderers/map-slots.d.ts +20 -0
  40. package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +87 -0
  41. package/dist/chat/ui/intelligent-ui/renderers/map-style.d.ts +18 -0
  42. package/dist/chat/ui/intelligent-ui/renderers/map-style.js +72 -0
  43. package/dist/chat/ui/intelligent-ui/renderers/map-view.d.ts +15 -0
  44. package/dist/chat/ui/intelligent-ui/renderers/map-view.js +213 -0
  45. package/dist/chat/ui/intelligent-ui/renderers/map.d.ts +3 -0
  46. package/dist/chat/ui/intelligent-ui/renderers/map.js +113 -0
  47. package/dist/chat/ui/intelligent-ui/renderers/place-point.d.ts +3 -0
  48. package/dist/chat/ui/intelligent-ui/renderers/place-point.js +13 -0
  49. package/dist/chat/ui/intelligent-ui/renderers/text.d.ts +2 -0
  50. package/dist/chat/ui/intelligent-ui/renderers/text.js +14 -1
  51. package/dist/chat/ui/intelligent-ui/use-in-view.d.ts +1 -0
  52. package/dist/chat/ui/intelligent-ui/use-in-view.js +17 -0
  53. package/dist/chat/ui/rows/WorkRows.js +3 -3
  54. package/dist/host.d.ts +16 -0
  55. package/dist/index.d.ts +2 -2
  56. package/dist/index.js +1 -1
  57. package/dist/lazy.js +5 -7
  58. package/dist/locales/en/agent-chat.d.ts +47 -0
  59. package/dist/locales/en/agent-chat.js +48 -1
  60. package/dist/locales/nl/agent-chat.d.ts +47 -0
  61. package/dist/locales/nl/agent-chat.js +48 -1
  62. package/dist/prompts/index.d.ts +3 -5
  63. package/dist/prompts/index.js +3 -5
  64. package/dist/providers/index.d.ts +3 -9
  65. package/dist/providers/index.js +3 -9
  66. package/dist/state/index.d.ts +2 -2
  67. package/dist/state/index.js +2 -2
  68. package/dist/state/usage.d.ts +0 -1
  69. package/dist/state/usage.js +0 -3
  70. package/dist/theme.css +10 -0
  71. package/package.json +9 -8
  72. package/src/chat/index.ts +2 -23
  73. package/src/chat/logic/continue-after-stop.ts +32 -0
  74. package/src/chat/logic/thread-cards.ts +0 -5
  75. package/src/chat/preferences.ts +0 -4
  76. package/src/chat/stash.ts +17 -0
  77. package/src/chat/ui/Composer.tsx +33 -5
  78. package/src/chat/ui/EditDiff.tsx +6 -5
  79. package/src/chat/ui/Pickers.tsx +1 -0
  80. package/src/chat/ui/UnifiedDiff.tsx +6 -5
  81. package/src/chat/ui/composer/ComposerControls.tsx +13 -3
  82. package/src/chat/ui/composer/use-composer-submit.ts +25 -5
  83. package/src/chat/ui/composer/use-continuable-turn.ts +14 -0
  84. package/src/chat/ui/composer/use-notice.ts +14 -7
  85. package/src/chat/ui/diff/ReviewDiff.tsx +3 -3
  86. package/src/chat/ui/index.ts +9 -49
  87. package/src/chat/ui/intelligent-ui/UiReply.tsx +24 -1
  88. package/src/chat/ui/intelligent-ui/node-text.ts +34 -1
  89. package/src/chat/ui/intelligent-ui/registry.ts +33 -5
  90. package/src/chat/ui/intelligent-ui/render-context.ts +14 -0
  91. package/src/chat/ui/intelligent-ui/renderers/base-land.ts +7 -0
  92. package/src/chat/ui/intelligent-ui/renderers/binding.ts +14 -0
  93. package/src/chat/ui/intelligent-ui/renderers/content.tsx +144 -9
  94. package/src/chat/ui/intelligent-ui/renderers/inputs.tsx +79 -17
  95. package/src/chat/ui/intelligent-ui/renderers/map-slots.ts +105 -0
  96. package/src/chat/ui/intelligent-ui/renderers/map-style.ts +96 -0
  97. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +251 -0
  98. package/src/chat/ui/intelligent-ui/renderers/map.tsx +226 -0
  99. package/src/chat/ui/intelligent-ui/renderers/place-point.ts +16 -0
  100. package/src/chat/ui/intelligent-ui/renderers/text.tsx +28 -1
  101. package/src/chat/ui/intelligent-ui/use-in-view.ts +18 -0
  102. package/src/chat/ui/rows/WorkRows.tsx +3 -3
  103. package/src/host.ts +28 -0
  104. package/src/index.ts +2 -12
  105. package/src/lazy.tsx +5 -7
  106. package/src/locales/en/agent-chat.ts +48 -1
  107. package/src/locales/nl/agent-chat.ts +48 -1
  108. package/src/prompts/index.ts +3 -18
  109. package/src/providers/index.ts +3 -9
  110. package/src/state/index.ts +1 -16
  111. package/src/state/usage.ts +0 -4
  112. package/src/stylesheets.d.ts +2 -0
  113. package/src/theme.css +10 -0
@@ -1,4 +1,4 @@
1
- import { Fragment, Suspense, useEffect, useState, type Dispatch, type ReactNode, type SetStateAction } from 'react';
1
+ import { Fragment, useEffect, useState, type Dispatch, type ReactNode, type SetStateAction } from 'react';
2
2
  import clsx from 'clsx';
3
3
  import i18next from 'i18next';
4
4
  import { useTranslation } from 'react-i18next';
@@ -28,7 +28,7 @@ import { useChatScope } from '../../../scope';
28
28
  import { useCurrentItem } from '../../../state/chats';
29
29
  import { useTimelineFlash } from '../../timeline-flash';
30
30
  import { formatClockDuration, formatElapsedShort } from '@adecore/ui/format';
31
- import { Icon, MiddleTruncate, Spinner, useTickingText } from '@adecore/ui';
31
+ import { Icon, LazyBoundary, MiddleTruncate, Spinner, useTickingText } from '@adecore/ui';
32
32
  import { ROW_GUTTER, toolIcon } from '../icons';
33
33
  import { AnsiOutput } from '../AnsiOutput';
34
34
  import { RowTime } from '../RowTime';
@@ -122,7 +122,7 @@ export function ToggleLine({
122
122
  /* The diff renderers load lazily, so a diff waits on them under a line that says so. */
123
123
  function DiffSuspense({ children }: { children: ReactNode }) {
124
124
  const { t } = useTranslation('agent-chat');
125
- return <Suspense fallback={<div className="px-3 py-2 text-xs text-text-faint">{t('work.loadingDiff')}</div>}>{children}</Suspense>;
125
+ return <LazyBoundary fallback={<div className="px-3 py-2 text-xs text-text-faint">{t('work.loadingDiff')}</div>}>{children}</LazyBoundary>;
126
126
  }
127
127
 
128
128
  /* A file in a changed files card, which opens its diff under it. */
package/src/host.ts CHANGED
@@ -195,6 +195,30 @@ export interface ReplyAuthor {
195
195
  mark?: ReactNode;
196
196
  }
197
197
 
198
+ /*
199
+ * Where the tiles of a Map come from. The host owns the service and whatever admits a request to it, so
200
+ * a chat never knows an address, a key or a vendor: it asks for the style of the theme and lets the host
201
+ * rewrite every address the map requests. `off` says why there are no tiles, and the map then draws its
202
+ * built-in outline beside the list of places.
203
+ */
204
+ export type UiMapSource =
205
+ | {
206
+ state: 'tiles';
207
+ /* The style document of one theme. */
208
+ styleUrl(theme: 'light' | 'dark'): string;
209
+ /*
210
+ * Called for every address the map requests, such as to add a ticket or a header to those of the host's
211
+ * service. Rewrite only the addresses of your own origin and hand every other back as it came: the style
212
+ * and the tiles name other hosts too, and a ticket must not travel to them.
213
+ */
214
+ transformRequest?(url: string): { url: string; headers?: Record<string, string> };
215
+ /* The feature property that holds a label in `language` (such as `nl`); without it a label stays as the style writes it. */
216
+ labelField?(language: string): string;
217
+ /* The credit the tiles ask for, drawn under the map. */
218
+ attribution?: string;
219
+ }
220
+ | { state: 'off'; reason: 'disabled' | 'signed-out' | 'unavailable' };
221
+
198
222
  /*
199
223
  * What the app around the chat decides and the chat cannot, handed to the views by a `ChatHostProvider`.
200
224
  * Whatever an app leaves out keeps the default here, which is the chat without that part. One host may
@@ -209,6 +233,10 @@ export interface ChatHost {
209
233
  query?(scopeId: string, payload: ChatUiQueryPayload): Promise<ChatUiQueryReading>;
210
234
  sendChoice(scopeId: string, payload: ChatUiChoicePayload): Promise<'sent' | 'queued'>;
211
235
  };
236
+ /* The map tiles of a Map block; left out, a map draws its outline and its list of places only. */
237
+ maps?: {
238
+ useSource(scopeId: string): UiMapSource;
239
+ };
212
240
  /* The colors an account may wear in the order a picker offers them, the few it shows first, and their names. */
213
241
  accents: {
214
242
  all: readonly AccentChoice[];
package/src/index.ts CHANGED
@@ -14,6 +14,7 @@ export {
14
14
  type VisualHost,
15
15
  type ReplyAuthor,
16
16
  type ChatHost,
17
+ type UiMapSource,
17
18
  ChatHostProvider,
18
19
  useChatHost,
19
20
  type AccentChoice,
@@ -32,18 +33,7 @@ export {
32
33
  isConnectionError
33
34
  } from './transport';
34
35
  export { portTransport, type PortTransport } from './port-transport';
35
- export {
36
- onChatStorageConfiguration,
37
- configureChatStorage,
38
- chatStorageKey,
39
- chatStorageLegacyKeys,
40
- chatStorageAdapter,
41
- hydrateChatStorage,
42
- createChatStore,
43
- type ChatStorageRecord,
44
- type ChatStorageAdapter,
45
- type ChatStorageOptions
46
- } from './storage';
36
+ export { configureChatStorage, type ChatStorageRecord, type ChatStorageAdapter, type ChatStorageOptions } from './storage';
47
37
  export { setLazyPrefetch, onLazyOpenError } from './lazy';
48
38
  export { type MountedEntry, MountedRegistry } from './mounted-registry';
49
39
  export { type AgentsSettingsSection, PROVIDERS_SECTION, USAGE_SECTION, settingsSection } from './settings/sections';
package/src/lazy.tsx CHANGED
@@ -1,4 +1,5 @@
1
1
  import { lazy, type ComponentProps, type ComponentType } from 'react';
2
+ import { LoadedComponent } from '@adecore/ui';
2
3
 
3
4
  type Loader = () => Promise<unknown>;
4
5
 
@@ -38,12 +39,9 @@ export function lazyNamed<Module extends Record<Name, ComponentType<any>>, Name
38
39
  name: Name,
39
40
  options?: { readonly prefetch?: boolean }
40
41
  ): ComponentType<ComponentProps<Module[Name]>> {
41
- let loaded: ComponentType<any> | null = null;
42
- const open = async (): Promise<ComponentType<any>> => {
43
- const component = (await load())[name];
44
- loaded ??= component;
45
- return component;
46
- };
42
+ // Through `LoadedComponent`, so a `LazyBoundary` around it draws the moment the module lands.
43
+ const loaded = new LoadedComponent<ComponentType<any>>(async () => (await load())[name]);
44
+ const open = (): Promise<ComponentType<any>> => loaded.load();
47
45
  if (options?.prefetch !== false) {
48
46
  loaders.push(open);
49
47
  register?.(open);
@@ -60,7 +58,7 @@ export function lazyNamed<Module extends Record<Name, ComponentType<any>>, Name
60
58
  }
61
59
  });
62
60
  const LazyNamed = (props: ComponentProps<Module[Name]>) => {
63
- const Component: ComponentType<any> = loaded ?? Lazy;
61
+ const Component: ComponentType<any> = loaded.current ?? Lazy;
64
62
  return <Component {...props} />;
65
63
  };
66
64
  return LazyNamed;
@@ -301,6 +301,8 @@ export default {
301
301
  },
302
302
  notice: {
303
303
  clearFailed: 'The thread could not be cleared',
304
+ stashChatsDropped_one: '1 attached chat is not in this project and was left out',
305
+ stashChatsDropped_other: '{{count}} attached chats are not in this project and were left out',
304
306
  compactFailed: 'The context could not be compacted',
305
307
  noAttachments: '{{agent}} takes no attachments',
306
308
  thisAgent: 'This agent',
@@ -344,6 +346,8 @@ export default {
344
346
  tooLong: 'characters, too long to send',
345
347
  stop: 'Stop, Shift-click to also stop its sub-agents',
346
348
  queueButton: 'Queue',
349
+ continue: 'Continue',
350
+ continueHint: 'Continue where the stopped turn left off',
347
351
  send: 'Send',
348
352
  clear: {
349
353
  title: 'Clear the thread?',
@@ -437,7 +441,9 @@ export default {
437
441
  title: 'Stashed prompts',
438
442
  noText: 'No text',
439
443
  files_one: '{{count}} file, not kept',
440
- files_other: '{{count}} files, not kept'
444
+ files_other: '{{count}} files, not kept',
445
+ chats_one: '{{count}} chat attached',
446
+ chats_other: '{{count}} chats attached'
441
447
  },
442
448
  mode: {
443
449
  label: 'Permissions',
@@ -549,6 +555,15 @@ export default {
549
555
  failed: 'Failed',
550
556
  skipped: 'Skipped'
551
557
  },
558
+ event: {
559
+ tone: {
560
+ neutral: 'Neutral',
561
+ info: 'Info',
562
+ success: 'Success',
563
+ warning: 'Warning',
564
+ danger: 'Danger'
565
+ }
566
+ },
552
567
  stat: {
553
568
  change: '{{change}} from {{previous}}',
554
569
  from: 'from {{previous}}'
@@ -568,6 +583,35 @@ export default {
568
583
  showValues: 'Show all values',
569
584
  hideValues: 'Hide values'
570
585
  },
586
+ gallery: {
587
+ label_one: '{{count}} image',
588
+ label_other: '{{count}} images'
589
+ },
590
+ map: {
591
+ label_one: 'Map of {{count}} place',
592
+ label_other: 'Map of {{count}} places',
593
+ omitted_one: '{{count}} more place is not shown',
594
+ omitted_other: '{{count}} more places are not shown',
595
+ show: 'Show map',
596
+ waiting: 'The map waits for a free spot: only a few maps are drawn at once.',
597
+ contextLost: 'The map lost its graphics. The places stay listed.',
598
+ lookingUp: 'Looking up',
599
+ notFound: 'Not on the map',
600
+ zoomIn: 'Zoom in',
601
+ zoomOut: 'Zoom out',
602
+ scrollHint: 'Hold ⌘ or Ctrl and scroll to zoom',
603
+ touchHint: 'Use two fingers to move the map',
604
+ offline: 'Map tiles are not available offline. The places stay listed.',
605
+ disabled: 'Map tiles are off.',
606
+ signedOut: 'Sign in to show map tiles.',
607
+ unavailable: 'Map tiles are not available right now.'
608
+ },
609
+ compare: {
610
+ label: 'Compare {{before}} and {{after}}',
611
+ before: 'Before',
612
+ after: 'After',
613
+ missing: 'One image is not available'
614
+ },
571
615
  image: {
572
616
  label: 'Image',
573
617
  unavailable: 'The image is not available'
@@ -575,6 +619,9 @@ export default {
575
619
  sources: 'Sources',
576
620
  citation: 'Source {{number}}: {{title}}',
577
621
  outsideProject: 'Outside the project, shown as text',
622
+ textField: {
623
+ count: '{{used}} of {{max}} characters'
624
+ },
578
625
  options: 'Options',
579
626
  choices: 'Choices',
580
627
  checklist: 'Checklist',
@@ -301,6 +301,8 @@ export default {
301
301
  },
302
302
  notice: {
303
303
  clearFailed: 'De thread kon niet worden gewist',
304
+ stashChatsDropped_one: '1 bijgevoegde chat hoort niet bij dit project en is weggelaten',
305
+ stashChatsDropped_other: '{{count}} bijgevoegde chats horen niet bij dit project en zijn weggelaten',
304
306
  compactFailed: 'De context kon niet worden gecomprimeerd',
305
307
  noAttachments: '{{agent}} neemt geen bijlagen aan',
306
308
  thisAgent: 'Deze agent',
@@ -344,6 +346,8 @@ export default {
344
346
  tooLong: 'tekens, te lang om te versturen',
345
347
  stop: 'Stoppen, Shift-klik stopt ook de sub-agents',
346
348
  queueButton: 'In de wachtrij zetten',
349
+ continue: 'Doorgaan',
350
+ continueHint: 'Ga verder waar de gestopte beurt ophield',
347
351
  send: 'Versturen',
348
352
  clear: {
349
353
  title: 'Thread wissen?',
@@ -437,7 +441,9 @@ export default {
437
441
  title: 'Stashed prompts',
438
442
  noText: 'Geen tekst',
439
443
  files_one: '{{count}} bestand, niet bewaard',
440
- files_other: '{{count}} bestanden, niet bewaard'
444
+ files_other: '{{count}} bestanden, niet bewaard',
445
+ chats_one: '{{count}} chat bijgevoegd',
446
+ chats_other: '{{count}} chats bijgevoegd'
441
447
  },
442
448
  mode: {
443
449
  label: 'Rechten',
@@ -549,6 +555,15 @@ export default {
549
555
  failed: 'Mislukt',
550
556
  skipped: 'Overgeslagen'
551
557
  },
558
+ event: {
559
+ tone: {
560
+ neutral: 'Neutraal',
561
+ info: 'Info',
562
+ success: 'Gelukt',
563
+ warning: 'Waarschuwing',
564
+ danger: 'Gevaar'
565
+ }
566
+ },
552
567
  stat: {
553
568
  change: '{{change}} vanaf {{previous}}',
554
569
  from: 'vanaf {{previous}}'
@@ -568,6 +583,35 @@ export default {
568
583
  showValues: 'Alle waarden tonen',
569
584
  hideValues: 'Waarden verbergen'
570
585
  },
586
+ gallery: {
587
+ label_one: '{{count}} afbeelding',
588
+ label_other: '{{count}} afbeeldingen'
589
+ },
590
+ map: {
591
+ label_one: 'Kaart met {{count}} plek',
592
+ label_other: 'Kaart met {{count}} plekken',
593
+ omitted_one: '{{count}} plek meer wordt niet getoond',
594
+ omitted_other: '{{count}} plekken meer worden niet getoond',
595
+ show: 'Kaart tonen',
596
+ waiting: 'De kaart wacht op een vrije plek: er worden maar een paar kaarten tegelijk getekend.',
597
+ contextLost: 'De kaart is zijn beeldgeheugen kwijt. De plekken blijven in de lijst.',
598
+ lookingUp: 'Wordt opgezocht',
599
+ notFound: 'Niet op de kaart',
600
+ zoomIn: 'Inzoomen',
601
+ zoomOut: 'Uitzoomen',
602
+ scrollHint: 'Houd ⌘ of Ctrl ingedrukt en scrol om te zoomen',
603
+ touchHint: 'Gebruik twee vingers om de kaart te bewegen',
604
+ offline: 'Kaarttegels zijn offline niet beschikbaar. De plekken blijven in de lijst.',
605
+ disabled: 'Kaarttegels staan uit.',
606
+ signedOut: 'Log in om kaarttegels te tonen.',
607
+ unavailable: 'Kaarttegels zijn nu niet beschikbaar.'
608
+ },
609
+ compare: {
610
+ label: 'Vergelijk {{before}} en {{after}}',
611
+ before: 'Voor',
612
+ after: 'Na',
613
+ missing: 'Eén afbeelding is niet beschikbaar'
614
+ },
571
615
  image: {
572
616
  label: 'Afbeelding',
573
617
  unavailable: 'De afbeelding is niet beschikbaar'
@@ -575,6 +619,9 @@ export default {
575
619
  sources: 'Bronnen',
576
620
  citation: 'Bron {{number}}: {{title}}',
577
621
  outsideProject: 'Buiten het project, als tekst getoond',
622
+ textField: {
623
+ count: '{{used}} van {{max}} tekens'
624
+ },
578
625
  options: 'Opties',
579
626
  choices: 'Keuzes',
580
627
  checklist: 'Checklijst',
@@ -1,20 +1,7 @@
1
1
  // Public API: exports.test.ts snapshots this list, so a name added or dropped here is an API change.
2
- export { focusPromptStart, focusPromptHeading } from './logic/focus';
2
+ export { focusPromptStart } from './logic/focus';
3
3
  export { PROMPT_SHORTCUTS, pageKey, type PromptKeyEvent } from './logic/keys';
4
- export {
5
- type PendingPrompt,
6
- type PromptAction,
7
- emptyPromptDraft,
8
- answerValue,
9
- questionAnswer,
10
- pickPromptChoice,
11
- isBlockingPrompt,
12
- orderPrompts,
13
- nextPrompt,
14
- promptAnswers,
15
- type PromptAnswer,
16
- type PromptDraft
17
- } from './logic/prompts';
4
+ export { type PendingPrompt, type PromptAction, emptyPromptDraft, orderPrompts, type PromptAnswer, type PromptDraft } from './logic/prompts';
18
5
  export {
19
6
  type HostPrompt,
20
7
  type PromptSubject,
@@ -28,8 +15,6 @@ export {
28
15
  } from './logic/subjects';
29
16
  export { useFocusAfterAnswer, type FocusAfterAnswer } from './logic/useFocusAfterAnswer';
30
17
  export { usePromptSession, type PromptSession } from './logic/usePromptSession';
31
- export { CommandBox, ApprovalBody } from './ui/ApprovalBody';
32
- export { PromptPrimary, ApprovalActions, QuestionActions, type ApprovalButton } from './ui/PromptActions';
18
+ export { PromptPrimary, ApprovalActions, type ApprovalButton } from './ui/PromptActions';
33
19
  export { PROMPT_SURFACE, PromptCard, type PromptCardKind } from './ui/PromptCard';
34
20
  export { PromptView } from './ui/PromptView';
35
- export { QuestionBody } from './ui/QuestionBody';
@@ -3,15 +3,9 @@ export { AccountDot } from '../agents/AccountDot';
3
3
  export { AgentIcon } from '../agents/AgentIcon';
4
4
  export { ModelOptionControl } from '../agents/ModelOptionControl';
5
5
  export { ProviderLogo } from '../agents/ProviderLogo';
6
- export { type AccountEntry, accountsOfKind, accountName, ACCOUNT_TONE_CLASSES, accountStatusLine, canContinueOn, type AccountTone } from '../agents/accounts';
6
+ export { type AccountEntry, accountsOfKind, ACCOUNT_TONE_CLASSES, accountStatusLine, canContinueOn, type AccountTone } from '../agents/accounts';
7
7
  export { modelName, useModelName, shortModelName } from '../agents/model-name';
8
- export { optionValue, carryOptions } from '../agents/model-options';
9
- export { modelRequirementOf, type ModelRequirement } from '../agents/model-requirement';
10
- export { AccountColors } from './AccountColors';
11
- export { AccountDetail } from './AccountDetail';
12
- export { AccountVariables } from './AccountVariables';
13
- export { AddAccountForm } from './AddAccountForm';
14
- export { CliDetail } from './CliDetail';
8
+ export { carryOptions } from '../agents/model-options';
9
+ export { type ModelRequirement } from '../agents/model-requirement';
15
10
  export { ProvidersPane } from './ProvidersPane';
16
- export { saveAccounts, saveAccount, removeAccount, createAccount, linkAccount } from './account-actions';
17
11
  export { CliMark, CliTile } from './parts';
@@ -4,14 +4,11 @@ export {
4
4
  type ChatsById,
5
5
  type ChatStatuses,
6
6
  type ChatSink,
7
- prependPage,
8
7
  waitingRequestsOf,
9
8
  applyEvent,
10
9
  useChats,
11
10
  chatSink,
12
11
  useChatRow,
13
- useReportedModels,
14
- useCurrentItem,
15
12
  type ChatHistoryPage,
16
13
  type ChatPage
17
14
  } from './chats';
@@ -24,16 +21,4 @@ export {
24
21
  type ProviderAccountsRow
25
22
  } from './provider-accounts';
26
23
  export { useProvidersStore, useProviders, providersOf, providerSinkFor, type ProvidersRow } from './providers';
27
- export {
28
- type UsageMetric,
29
- USAGE_PREFERENCES_KEY,
30
- usagePreferencesKey,
31
- dayOf,
32
- windowFor,
33
- summaryPayload,
34
- reloadUsagePreferences,
35
- useUsageStore,
36
- useUsage,
37
- type UsagePeriod,
38
- type UsageView
39
- } from './usage';
24
+ export { type UsageMetric, USAGE_PREFERENCES_KEY, dayOf, windowFor, reloadUsagePreferences, useUsageStore, type UsagePeriod, type UsageView } from './usage';
@@ -23,10 +23,6 @@ onChatStorageConfiguration(() => {
23
23
  USAGE_PREFERENCES_KEY = storageKey();
24
24
  });
25
25
 
26
- export function usagePreferencesKey(): string {
27
- return storageKey();
28
- }
29
-
30
26
  interface Preferences {
31
27
  period: UsagePeriod;
32
28
  metric: UsageMetric;
@@ -0,0 +1,2 @@
1
+ // The stylesheet of the map package is imported for its effect only.
2
+ declare module 'maplibre-gl/dist/maplibre-gl.css';
package/src/theme.css CHANGED
@@ -27,6 +27,9 @@
27
27
  --chart-4: #eda100;
28
28
  --chart-5: #e87ba4;
29
29
  --chart-6: #008300;
30
+ /* The two grounds of the map a page draws without tiles. */
31
+ --map-land: #f2f1ed;
32
+ --map-water: #d3dde5;
30
33
  }
31
34
 
32
35
  [data-theme="dark"] {
@@ -46,6 +49,8 @@
46
49
  --chart-4: #c98500;
47
50
  --chart-5: #d55181;
48
51
  --chart-6: #008300;
52
+ --map-land: #2c3135;
53
+ --map-water: #1a2026;
49
54
  }
50
55
 
51
56
  /* Output and diffs take the terminal's colors when the app loads `@adecore/terminal/terminal.css`,
@@ -56,6 +61,9 @@
56
61
  --chat-added: var(--term-ansi-green, var(--positive));
57
62
  --chat-removed: var(--term-ansi-red, var(--status-error));
58
63
  --chart-1: var(--accent);
64
+ /* The number of a place on a map and in its list: the ink on the ground, so it reads on either. */
65
+ --map-marker: var(--text);
66
+ --map-marker-text: var(--surface);
59
67
  }
60
68
 
61
69
  @theme inline {
@@ -73,6 +81,8 @@
73
81
  --color-chat-output: var(--chat-output);
74
82
  --color-chat-added: var(--chat-added);
75
83
  --color-chat-removed: var(--chat-removed);
84
+ --color-map-marker: var(--map-marker);
85
+ --color-map-marker-text: var(--map-marker-text);
76
86
  }
77
87
 
78
88
  @layer components {