@ouraihub/aether-ui 0.0.0-stage → 0.1.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.
- package/LICENSE +789 -0
- package/fixtures/model-classify.json +42 -0
- package/fixtures/pricing-cost.json +56 -0
- package/fixtures/reasoning-infer.json +44 -0
- package/fixtures/sse/anthropic-messages/chinese.sse +24 -0
- package/fixtures/sse/anthropic-messages/multi-tool.sse +33 -0
- package/fixtures/sse/anthropic-messages/single-tool.sse +39 -0
- package/fixtures/sse/anthropic-messages/text.sse +27 -0
- package/fixtures/sse/anthropic-messages/truncated.sse +21 -0
- package/fixtures/sse/anthropic-messages/upstream-error.sse +12 -0
- package/fixtures/sse/expect.json +20 -0
- package/fixtures/sse/openai-chat/chinese.sse +14 -0
- package/fixtures/sse/openai-chat/multi-tool.sse +18 -0
- package/fixtures/sse/openai-chat/single-tool.sse +22 -0
- package/fixtures/sse/openai-chat/text.sse +14 -0
- package/fixtures/sse/openai-chat/truncated.sse +12 -0
- package/fixtures/sse/openai-chat/upstream-error.sse +6 -0
- package/fixtures/sse/openai-responses/chinese.sse +33 -0
- package/fixtures/sse/openai-responses/multi-tool.sse +36 -0
- package/fixtures/sse/openai-responses/single-tool.sse +27 -0
- package/fixtures/sse/openai-responses/text.sse +33 -0
- package/fixtures/sse/openai-responses/truncated.sse +30 -0
- package/fixtures/sse/openai-responses/upstream-error.sse +9 -0
- package/package.json +71 -3
- package/src/CopyInput.svelte +33 -0
- package/src/KitNotifier.svelte +33 -0
- package/src/chat/ApprovalCard.svelte +23 -0
- package/src/chat/ChatPanel.svelte +2097 -0
- package/src/chat/MessageItem.svelte +583 -0
- package/src/chat/SkillPicker.svelte +126 -0
- package/src/chat/ToolCallItem.svelte +23 -0
- package/src/chat/UsageDetails.svelte +138 -0
- package/src/chat/index.ts +2 -0
- package/src/chat/run-session.svelte.ts +556 -0
- package/src/components/ui/alert/alert-action.svelte +20 -0
- package/src/components/ui/alert/alert-description.svelte +23 -0
- package/src/components/ui/alert/alert-title.svelte +23 -0
- package/src/components/ui/alert/alert.svelte +43 -0
- package/src/components/ui/alert/index.ts +17 -0
- package/src/components/ui/alert-dialog/alert-dialog-action.svelte +27 -0
- package/src/components/ui/alert-dialog/alert-dialog-cancel.svelte +27 -0
- package/src/components/ui/alert-dialog/alert-dialog-content.svelte +32 -0
- package/src/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
- package/src/components/ui/alert-dialog/alert-dialog-footer.svelte +23 -0
- package/src/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-media.svelte +20 -0
- package/src/components/ui/alert-dialog/alert-dialog-overlay.svelte +17 -0
- package/src/components/ui/alert-dialog/alert-dialog-portal.svelte +7 -0
- package/src/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
- package/src/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/src/components/ui/alert-dialog/alert-dialog.svelte +7 -0
- package/src/components/ui/alert-dialog/index.ts +40 -0
- package/src/components/ui/button/button.svelte +81 -0
- package/src/components/ui/button/index.ts +17 -0
- package/src/components/ui/dialog/dialog-close.svelte +11 -0
- package/src/components/ui/dialog/dialog-content.svelte +48 -0
- package/src/components/ui/dialog/dialog-description.svelte +17 -0
- package/src/components/ui/dialog/dialog-footer.svelte +32 -0
- package/src/components/ui/dialog/dialog-header.svelte +20 -0
- package/src/components/ui/dialog/dialog-overlay.svelte +17 -0
- package/src/components/ui/dialog/dialog-portal.svelte +7 -0
- package/src/components/ui/dialog/dialog-title.svelte +17 -0
- package/src/components/ui/dialog/dialog-trigger.svelte +11 -0
- package/src/components/ui/dialog/dialog.svelte +7 -0
- package/src/components/ui/dialog/index.ts +34 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-content.svelte +31 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +17 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
- package/src/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/src/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
- package/src/components/ui/dropdown-menu/index.ts +54 -0
- package/src/components/ui/empty/empty-content.svelte +23 -0
- package/src/components/ui/empty/empty-description.svelte +23 -0
- package/src/components/ui/empty/empty-header.svelte +20 -0
- package/src/components/ui/empty/empty-media.svelte +41 -0
- package/src/components/ui/empty/empty-title.svelte +20 -0
- package/src/components/ui/empty/empty.svelte +23 -0
- package/src/components/ui/empty/index.ts +22 -0
- package/src/components/ui/field/field-content.svelte +20 -0
- package/src/components/ui/field/field-description.svelte +25 -0
- package/src/components/ui/field/field-error.svelte +58 -0
- package/src/components/ui/field/field-group.svelte +23 -0
- package/src/components/ui/field/field-label.svelte +25 -0
- package/src/components/ui/field/field-legend.svelte +24 -0
- package/src/components/ui/field/field-separator.svelte +35 -0
- package/src/components/ui/field/field-set.svelte +20 -0
- package/src/components/ui/field/field-title.svelte +20 -0
- package/src/components/ui/field/field.svelte +47 -0
- package/src/components/ui/field/index.ts +33 -0
- package/src/components/ui/input/index.ts +7 -0
- package/src/components/ui/input/input.svelte +48 -0
- package/src/components/ui/label/index.ts +7 -0
- package/src/components/ui/label/label.svelte +20 -0
- package/src/components/ui/select/index.ts +40 -0
- package/src/components/ui/select/select-content.svelte +45 -0
- package/src/components/ui/select/select-group-heading.svelte +21 -0
- package/src/components/ui/select/select-group.svelte +17 -0
- package/src/components/ui/select/select-item.svelte +43 -0
- package/src/components/ui/select/select-label.svelte +20 -0
- package/src/components/ui/select/select-portal.svelte +7 -0
- package/src/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/src/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/src/components/ui/select/select-separator.svelte +18 -0
- package/src/components/ui/select/select-trigger.svelte +29 -0
- package/src/components/ui/select/select-value.svelte +7 -0
- package/src/components/ui/select/select.svelte +11 -0
- package/src/components/ui/separator/index.ts +7 -0
- package/src/components/ui/separator/separator.svelte +21 -0
- package/src/components/ui/sonner/index.ts +1 -0
- package/src/components/ui/sonner/sonner.svelte +40 -0
- package/src/components/ui/switch/index.ts +7 -0
- package/src/components/ui/switch/switch.svelte +34 -0
- package/src/components/ui/textarea/index.ts +7 -0
- package/src/components/ui/textarea/textarea.svelte +22 -0
- package/src/context.ts +34 -0
- package/src/dev/Demo.svelte +45 -0
- package/src/dev/main.ts +7 -0
- package/src/i18n/en.ts +617 -0
- package/src/i18n/index.ts +23 -0
- package/src/i18n/zh-CN.ts +599 -0
- package/src/index.ts +10 -0
- package/src/logs/LogPanel.svelte +97 -0
- package/src/logs/LogSettings.svelte +56 -0
- package/src/logs/index.ts +5 -0
- package/src/logs/logger.ts +96 -0
- package/src/markdown.ts +8 -0
- package/src/mcp/McpClientSettings.svelte +491 -0
- package/src/mcp/McpServerSettings.svelte +327 -0
- package/src/mcp/config.ts +26 -0
- package/src/mcp/index.ts +3 -0
- package/src/mcp/input.ts +73 -0
- package/src/notify.svelte.ts +43 -0
- package/src/ports/contract.ts +165 -0
- package/src/ports/fake.ts +484 -0
- package/src/ports/index.ts +7 -0
- package/src/ports/search.ts +47 -0
- package/src/ports/skill-sources.ts +45 -0
- package/src/providers/EndpointKeysDialog.svelte +343 -0
- package/src/providers/EndpointPanel.svelte +491 -0
- package/src/providers/ModelPickerDialog.svelte +187 -0
- package/src/providers/ModelSelect.svelte +434 -0
- package/src/providers/ModelSettingsDialog.svelte +453 -0
- package/src/providers/ProvidersSettings.svelte +631 -0
- package/src/providers/RequestConfigDialog.svelte +250 -0
- package/src/providers/SecretInput.svelte +276 -0
- package/src/providers/draft.ts +329 -0
- package/src/providers/edit-session.ts +146 -0
- package/src/providers/index.ts +5 -0
- package/src/providers/reasoning.ts +41 -0
- package/src/providers/revision.svelte.ts +4 -0
- package/src/search/SearchSettings.svelte +703 -0
- package/src/search/index.ts +13 -0
- package/src/search/settings-flow.ts +62 -0
- package/src/session.ts +20 -0
- package/src/skills/SkillAdd.svelte +347 -0
- package/src/skills/SkillAuthoring.svelte +381 -0
- package/src/skills/SkillEditor.svelte +94 -0
- package/src/skills/SkillPreviewDialog.svelte +122 -0
- package/src/skills/SkillsSettings.svelte +140 -0
- package/src/skills/error.ts +32 -0
- package/src/skills/index.ts +4 -0
- package/src/styles/kit.css +137 -0
- package/src/styles/tokens.css +22 -0
- package/src/tauri/index.ts +282 -0
- package/src/utils.ts +22 -0
- package/src/web/index.ts +376 -0
- package/README.md +0 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
// One tool call collapsed to a line (docs/16 §4.2): calling, then its outcome and summary.
|
|
3
|
+
import { getKitContext } from '../context'
|
|
4
|
+
import type { ToolItem } from './run-session.svelte'
|
|
5
|
+
|
|
6
|
+
let { tool }: { tool: ToolItem } = $props()
|
|
7
|
+
const { t } = getKitContext().i18n
|
|
8
|
+
const name = $derived(tool.server ? `${tool.name} · ${tool.server}` : tool.name)
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<p class="text-muted-foreground truncate text-kit-sm">
|
|
12
|
+
{#if tool.outcome === null}
|
|
13
|
+
{t('chat.tool.calling', { name })}
|
|
14
|
+
{:else if tool.outcome === 'denied'}
|
|
15
|
+
{t('chat.tool.denied', { name })}
|
|
16
|
+
{:else if tool.outcome === 'unknown'}
|
|
17
|
+
{t('chat.tool.unknown', { name })}
|
|
18
|
+
{:else if tool.outcome === 'error'}
|
|
19
|
+
{t('chat.tool.error', { name, summary: tool.summary })}
|
|
20
|
+
{:else}
|
|
21
|
+
{t('chat.tool.ok', { name, summary: tool.summary })}
|
|
22
|
+
{/if}
|
|
23
|
+
</p>
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ContextUsage, Cost, TokenUsage } from '../ports'
|
|
3
|
+
import { getKitContext } from '../context'
|
|
4
|
+
import ChartNoAxesColumnIcon from '@lucide/svelte/icons/chart-no-axes-column'
|
|
5
|
+
let details = $state<HTMLDetailsElement | null>(null)
|
|
6
|
+
interface Props {
|
|
7
|
+
context: ContextUsage | null
|
|
8
|
+
usage: TokenUsage | null
|
|
9
|
+
total: TokenUsage
|
|
10
|
+
/** Last turn's cost; null when its model has no pricing or a round lacked token counts. */
|
|
11
|
+
cost: Cost | null
|
|
12
|
+
/** Session total per currency. */
|
|
13
|
+
totalCost: Cost[]
|
|
14
|
+
}
|
|
15
|
+
let { context, usage, total, cost, totalCost }: Props = $props()
|
|
16
|
+
const { t } = getKitContext().i18n
|
|
17
|
+
const percent = $derived(
|
|
18
|
+
context?.tokens != null && context.contextWindow != null && context.contextWindow > 0
|
|
19
|
+
? Math.min(100, Math.max(0, (context.tokens / context.contextWindow) * 100))
|
|
20
|
+
: null,
|
|
21
|
+
)
|
|
22
|
+
const fields = ['inputTokens', 'outputTokens', 'cacheReadTokens', 'cacheWriteTokens', 'reasoningTokens'] as const
|
|
23
|
+
const money = ({ amount, currency }: Cost) => `${currency === 'CNY' ? '¥' : '$'}${amount.toFixed(4)}`
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions (Esc closes this disclosure first) -->
|
|
27
|
+
<details
|
|
28
|
+
class="usage-details"
|
|
29
|
+
bind:this={details}
|
|
30
|
+
aria-label={t('chat.usage')}
|
|
31
|
+
onkeydown={(e) => {
|
|
32
|
+
if (e.key === 'Escape' && details?.open) {
|
|
33
|
+
details.open = false
|
|
34
|
+
e.preventDefault()
|
|
35
|
+
e.stopPropagation()
|
|
36
|
+
}
|
|
37
|
+
}}
|
|
38
|
+
>
|
|
39
|
+
<summary aria-label={t('chat.usage')} title={t('chat.contextUsage')}>
|
|
40
|
+
<ChartNoAxesColumnIcon aria-hidden="true" />
|
|
41
|
+
<span>{percent === null ? t('chat.unknown') : `${percent.toFixed(1)}%`}</span>
|
|
42
|
+
</summary>
|
|
43
|
+
<div class="usage-content">
|
|
44
|
+
<p>
|
|
45
|
+
{t('chat.contextUsage')}: {context?.tokens ?? t('chat.unknown')}{#if context?.contextWindow != null}
|
|
46
|
+
/ {context.contextWindow}{/if} · {t(
|
|
47
|
+
context?.source === 'reported'
|
|
48
|
+
? 'chat.reported'
|
|
49
|
+
: context?.source === 'estimated'
|
|
50
|
+
? 'chat.estimated'
|
|
51
|
+
: 'chat.unknown',
|
|
52
|
+
)}
|
|
53
|
+
</p>
|
|
54
|
+
{#if percent !== null}<meter min="0" max="100" value={percent} aria-label={t('chat.contextUsage')}></meter>{/if}
|
|
55
|
+
<table>
|
|
56
|
+
<thead
|
|
57
|
+
><tr
|
|
58
|
+
><th scope="col">{t('chat.usage')}</th><th scope="col">{t('chat.currentUsage')}</th><th scope="col"
|
|
59
|
+
>{t('chat.totalUsage')}</th
|
|
60
|
+
></tr
|
|
61
|
+
></thead
|
|
62
|
+
>
|
|
63
|
+
<tbody
|
|
64
|
+
>{#each fields as field (field)}<tr
|
|
65
|
+
><th scope="row">{t(`chat.usage.${field}`)}</th><td>{usage?.[field] ?? t('chat.unknown')}</td><td
|
|
66
|
+
>{total[field] ?? t('chat.unknown')}</td
|
|
67
|
+
></tr
|
|
68
|
+
>{/each}<tr
|
|
69
|
+
><th scope="row">{t('chat.cost')}</th><td>{cost ? money(cost) : t('chat.unknown')}</td><td
|
|
70
|
+
>{totalCost.length ? totalCost.map(money).join(' + ') : t('chat.unknown')}</td
|
|
71
|
+
></tr
|
|
72
|
+
></tbody
|
|
73
|
+
>
|
|
74
|
+
</table>
|
|
75
|
+
<p>{t('chat.usageHint')}</p>
|
|
76
|
+
</div>
|
|
77
|
+
</details>
|
|
78
|
+
|
|
79
|
+
<style>
|
|
80
|
+
.usage-details {
|
|
81
|
+
position: relative;
|
|
82
|
+
min-width: 0;
|
|
83
|
+
color: var(--color-muted-foreground);
|
|
84
|
+
font-size: var(--kit-font-size-sm, 0.8125rem);
|
|
85
|
+
}
|
|
86
|
+
summary {
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
gap: 0.25rem;
|
|
90
|
+
cursor: pointer;
|
|
91
|
+
padding: 0.25rem;
|
|
92
|
+
border-radius: var(--kit-radius, var(--radius));
|
|
93
|
+
}
|
|
94
|
+
summary::-webkit-details-marker {
|
|
95
|
+
display: none;
|
|
96
|
+
}
|
|
97
|
+
summary:focus-visible {
|
|
98
|
+
outline: 2px solid var(--color-ring);
|
|
99
|
+
}
|
|
100
|
+
summary :global(svg) {
|
|
101
|
+
width: 1rem;
|
|
102
|
+
height: 1rem;
|
|
103
|
+
flex-shrink: 0;
|
|
104
|
+
}
|
|
105
|
+
.usage-content {
|
|
106
|
+
position: absolute;
|
|
107
|
+
bottom: calc(100% + 0.5rem);
|
|
108
|
+
right: 0;
|
|
109
|
+
width: min(20rem, calc(100cqw - 5rem));
|
|
110
|
+
max-height: 45cqh;
|
|
111
|
+
overflow: auto;
|
|
112
|
+
display: flex;
|
|
113
|
+
flex-direction: column;
|
|
114
|
+
gap: 0.5rem;
|
|
115
|
+
padding: 0.75rem;
|
|
116
|
+
border: 1px solid var(--color-border);
|
|
117
|
+
border-radius: var(--kit-radius, var(--radius));
|
|
118
|
+
background: var(--color-popover);
|
|
119
|
+
color: var(--color-popover-foreground);
|
|
120
|
+
}
|
|
121
|
+
p {
|
|
122
|
+
margin: 0;
|
|
123
|
+
overflow-wrap: anywhere;
|
|
124
|
+
}
|
|
125
|
+
table {
|
|
126
|
+
width: 100%;
|
|
127
|
+
border-collapse: collapse;
|
|
128
|
+
}
|
|
129
|
+
th,
|
|
130
|
+
td {
|
|
131
|
+
padding: 0.25rem;
|
|
132
|
+
text-align: left;
|
|
133
|
+
overflow-wrap: anywhere;
|
|
134
|
+
}
|
|
135
|
+
meter {
|
|
136
|
+
width: 100%;
|
|
137
|
+
}
|
|
138
|
+
</style>
|