mirror of
https://github.com/MoonshotAI/kimi-code.git
synced 2026-08-29 20:12:37 +00:00
refactor: P1 lib migration to app-core + rename shared packages web-* → app-* (#185)
* docs: add renderer architecture refactor plan
* docs: add renderer architecture spec and progress ledger
* refactor: move shared renderer lib modules and tests into web-core
* refactor: point apps/web and apps/desktop renderer at web-core/lib
* refactor: fix dangling lib imports folded in by the main merge
Main added relative lib imports (modelThinking / pathRelativeTo /
nativeWorkspaceDrop / rootKey) alongside P1's rewrites; point them at
@moonshot-ai/web-core/lib like the rest.
* refactor: rename shared packages @moonshot-ai/web-* to app-*
These packages are shared by the web and desktop apps, so the web-
prefix is a misnomer: app-core / app-ui / app-markdown / app-i18n,
with packages/web-* directories renamed to packages/app-* to match.
The planned web-client package will land as app-client. vite-preset
is untouched; the app package names (kimi-code-web / kimi-code-app)
stay per repo policy. Historical plan/spec docs keep the old names.
* chore: point gitignored font paths at packages/app-ui
* test: fix type import path in mergeWorkspaces.test (../src/api/types)
Type-only so vitest erased it and never resolved at runtime, but the
path was wrong since the move into packages/ — flagged in review.
* chore: regenerate lockfile after kimi-code submodule bump
agent-core-v2 at cfd14a1f dropped its react/xyflow deps; the lockfile
staged in the merge predated the submodule sync and failed
--frozen-lockfile in CI.
* test: fix taskMerge.test import paths for its packages/ home
Same staging trap as before: a non-matching pathspec in the git add
aborted it silently, so the merge commit carried the pre-sed content.
This commit is contained in:
parent
5a0c0ef746
commit
20964142d1
544 changed files with 869 additions and 4216 deletions
|
|
@ -79,7 +79,7 @@ description: 发布 desktop(kimi-code-app)新版本前,生成更新弹窗
|
|||
- 逐条对译,不增不删,不补充中文原文没有的信息(原文含糊就保持含糊,交给 review)。
|
||||
- 用户面向的短句,一条一句、每条 ≤ 15 词;同一小节内句式节奏保持一致(如同为 `Fixed ...` 起手)。中文已是压缩后的一句话,英文不得再拉长。
|
||||
- 修复类 `Fixed ...`;新功能类直接说用户得到什么(`Updates can now download in the background.`)。不出现文件名、内部包名、PR 号。
|
||||
- 产品术语对齐现有英译:翻译前先查 `packages/web-i18n/src/locales/en/` 里相应说法(如 会话→session、工作区→workspace、思考→thinking、设置→Settings),保持一致。
|
||||
- 产品术语对齐现有英译:翻译前先查 `packages/app-i18n/src/locales/en/` 里相应说法(如 会话→session、工作区→workspace、思考→thinking、设置→Settings),保持一致。
|
||||
- 拿不准如何翻译的产品名/功能名保留英文原词(如 Plan mode、Thinking)。
|
||||
|
||||
## 红旗
|
||||
|
|
|
|||
|
|
@ -12,10 +12,10 @@
|
|||
"ignore": [
|
||||
"kimi-code-web",
|
||||
"@moonshot-ai/vite-preset",
|
||||
"@moonshot-ai/web-core",
|
||||
"@moonshot-ai/web-i18n",
|
||||
"@moonshot-ai/web-markdown",
|
||||
"@moonshot-ai/web-ui"
|
||||
"@moonshot-ai/app-core",
|
||||
"@moonshot-ai/app-i18n",
|
||||
"@moonshot-ai/app-markdown",
|
||||
"@moonshot-ai/app-ui"
|
||||
],
|
||||
"snapshot": {
|
||||
"useCalculatedVersion": true,
|
||||
|
|
|
|||
12
.gitignore
vendored
12
.gitignore
vendored
|
|
@ -12,9 +12,9 @@ coverage
|
|||
.ci-signing/
|
||||
.env
|
||||
mac_keys
|
||||
packages/web-ui/src/assets/fonts/NotoSansSC\[wght\].woff2
|
||||
packages/web-ui/src/assets/fonts/SpecialGothic\[wdth,wght\].woff2
|
||||
packages/web-ui/src/assets/fonts/SchibstedGrotesk\[wght\].woff2
|
||||
packages/web-ui/src/assets/fonts/SchibstedGrotesk-Italic\[wght\].woff2
|
||||
packages/web-ui/src/assets/fonts/ZalandoSans\[wdth,wght\].woff2
|
||||
packages/web-ui/src/assets/fonts/ZalandoSans-Italic\[wdth,wght\].woff2
|
||||
packages/app-ui/src/assets/fonts/NotoSansSC\[wght\].woff2
|
||||
packages/app-ui/src/assets/fonts/SpecialGothic\[wdth,wght\].woff2
|
||||
packages/app-ui/src/assets/fonts/SchibstedGrotesk\[wght\].woff2
|
||||
packages/app-ui/src/assets/fonts/SchibstedGrotesk-Italic\[wght\].woff2
|
||||
packages/app-ui/src/assets/fonts/ZalandoSans\[wdth,wght\].woff2
|
||||
packages/app-ui/src/assets/fonts/ZalandoSans-Italic\[wdth,wght\].woff2
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
## 硬约束
|
||||
|
||||
- **依赖方向 `code-app → kimi-code` 单向**:desktop 只经 `@moonshot-ai/*` 包名 import kimi-code 的 packages 源码,禁止跨包相对路径 import;`kimi-code` 不得 import `code-app`。
|
||||
- `apps/web` 只依赖 `@moonshot-ai/{web-core,web-i18n,web-markdown,web-ui}` 共享包,不直接 import kimi-code 的包。
|
||||
- `apps/web` 只依赖 `@moonshot-ai/{app-core,app-i18n,app-markdown,app-ui}` 共享包,不直接 import kimi-code 的包。
|
||||
- **不改包名**:`kimi-code-web`、`kimi-code-app`。
|
||||
- **两端逐步分叉是既定方向**:desktop 的原生功能(`window.kimiDesktop` 桥接)只在 `apps/desktop` 实现,web 保留原 daemon 实现、不回填;原生路径必须带无桥降级(探测不到桥时回退旧实现)。分叉清单在 `apps/desktop/docs/native-todos.md`——改两端共有的文件前先查它,手动同步副本时保留 desktop 侧的分叉块。
|
||||
- **开发顺序**:两端共有的 UI 改动优先在 `apps/desktop` 开发,完成后再同步到 `apps/web`(desktop 专属原生功能除外,见上条)。
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
- `apps/desktop`:Electron 壳(`kimi-code-app`);简介见 `apps/desktop/README.md`,原生功能分叉清单见 `apps/desktop/docs/native-todos.md`。新测试:主进程进 `tests/main/`,renderer 进 `tests/renderer/`。
|
||||
- `apps/web`:浏览器 Web UI(`kimi-code-web`,Vue 3 + Vite + vue-i18n)。dev 时 Vite 把 `/api/v1`(REST + WS)代理到 `KIMI_SERVER_URL`(默认 `http://127.0.0.1:58627`)。
|
||||
- `packages/*`:`@moonshot-ai/{web-core,web-i18n,web-markdown,web-ui}` + `vite-preset`(exports→src,被 apps/web 与 desktop renderer 复用);共享字体产物在 `web-ui/src/assets/fonts`(gitignored),由 `scripts/prepare-fonts.mjs` 自动准备。
|
||||
- `packages/*`:`@moonshot-ai/{app-core,app-i18n,app-markdown,app-ui}` + `vite-preset`(exports→src,被 apps/web 与 desktop renderer 复用);共享字体产物在 `app-ui/src/assets/fonts`(gitignored),由 `scripts/prepare-fonts.mjs` 自动准备。
|
||||
- `kimi-code/`:git submodule(核心仓)。`kimi-code/packages/*` 提供 `kap-server`、`agent-core-v2`、`kimi-code-sdk` 等源码。
|
||||
- `scripts/sync-web-to-kimi-code.mjs`:`apps/web/dist` → `<kimi-code checkout>/apps/kimi-code/dist-web`(`KIMI_CODE_REPO` 必传,指定目标 checkout)。
|
||||
- `KIMI CODE LOGO/` + `scripts/build-brand-icons.mjs`:品牌源文件与 desktop 图标资源的生成脚本(`pnpm build:icons`);`apps/desktop/build/` 的图标与 desktop 组件内联品牌标是产物,勿手改。**web 品牌已分叉**:`apps/web` 的侧栏 / onboarding / favicon 用回旧版小蓝标,不由该脚本生成(脚本刻意不再写 apps/web),勿用机器人标冲掉。
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ OAuth 授权完成页唤起桌面端窗口(登录态由 daemon 轮询完成,
|
|||
|
||||
- `apps/desktop`:Electron 桌面端(`kimi-code-app`)
|
||||
- `apps/web`:浏览器 Web UI(`kimi-code-web`)
|
||||
- `packages/*`:web 共享包(web-core / web-i18n / web-markdown / web-ui / vite-preset)
|
||||
- `packages/*`:web 共享包(app-core / app-i18n / app-markdown / app-ui / vite-preset)
|
||||
- `kimi-code/`:核心仓 submodule(CLI / server / agent / packages)
|
||||
- `KIMI CODE LOGO/`:品牌设计源文件(SVG/PNG),下游图标资源由 `pnpm build:icons` 生成
|
||||
- `scripts/`:字体准备(`prepare-fonts.mjs`)、品牌图标生成(`build-brand-icons.mjs`)、web 产物同步(`sync-web-to-kimi-code.mjs`)等
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -37,10 +37,10 @@
|
|||
"@moonshot-ai/kimi-code-oauth": "workspace:^",
|
||||
"@moonshot-ai/kimi-code-sdk": "workspace:^",
|
||||
"@moonshot-ai/vite-preset": "workspace:*",
|
||||
"@moonshot-ai/web-core": "workspace:*",
|
||||
"@moonshot-ai/web-i18n": "workspace:*",
|
||||
"@moonshot-ai/web-markdown": "workspace:*",
|
||||
"@moonshot-ai/web-ui": "workspace:*",
|
||||
"@moonshot-ai/app-core": "workspace:*",
|
||||
"@moonshot-ai/app-i18n": "workspace:*",
|
||||
"@moonshot-ai/app-markdown": "workspace:*",
|
||||
"@moonshot-ai/app-ui": "workspace:*",
|
||||
"@rive-app/canvas": "2.38.5",
|
||||
"@vitejs/plugin-vue": "^5.2.4",
|
||||
"@xterm/addon-fit": "^0.11.0",
|
||||
|
|
|
|||
|
|
@ -35,25 +35,25 @@ import { useSidebarLayout } from './composables/useSidebarLayout';
|
|||
import { useFilePreview, type DetailTarget } from './composables/useFilePreview';
|
||||
import { useDetailPanel } from './composables/useDetailPanel';
|
||||
import { useIsMobile } from './composables/useIsMobile';
|
||||
import { openDialogCount } from '@moonshot-ai/web-ui';
|
||||
import { openDialogCount } from '@moonshot-ai/app-ui';
|
||||
import type { SwarmMember } from './composables/swarmGroups';
|
||||
import ServerAuthDialog from './components/ServerAuthDialog.vue';
|
||||
import { initServerAuth, onAuthRequired } from './lib/serverAuth';
|
||||
import { initServerAuth, onAuthRequired } from '@moonshot-ai/app-core/lib';
|
||||
import {
|
||||
canPickWorkspaceDirectory,
|
||||
createAddWorkspaceEntry,
|
||||
pickWorkspaceDirectory,
|
||||
} from './lib/nativeWorkspacePicker';
|
||||
import type { AppConfig, ThinkingLevel } from './api/types';
|
||||
import { commitLevel, effectiveThinkingLevel, segmentsFor } from './lib/modelThinking';
|
||||
import { commitLevel, effectiveThinkingLevel, segmentsFor } from '@moonshot-ai/app-core/lib';
|
||||
import { modelDisplayName, subagentEffortSuffix } from './lib/modelDisplay';
|
||||
import { stripSkillPrefix } from './lib/slashCommands';
|
||||
import { ActionToast, Icon, IconButton } from '@moonshot-ai/web-ui';
|
||||
import { isMacosDesktop, isWindowsDesktop } from './lib/desktopFlag';
|
||||
import { stripSkillPrefix } from '@moonshot-ai/app-core/lib';
|
||||
import { ActionToast, Icon, IconButton } from '@moonshot-ai/app-ui';
|
||||
import { isMacosDesktop, isWindowsDesktop } from '@moonshot-ai/app-core/lib';
|
||||
import WindowsTitleBar from './components/window/WindowsTitleBar.vue';
|
||||
import TerminalPanel from './components/terminal/TerminalPanel.vue';
|
||||
import TerminalResizeHandle from './components/terminal/TerminalResizeHandle.vue';
|
||||
import { selectContentsOf } from './lib/transcriptSelectAll';
|
||||
import { selectContentsOf } from '@moonshot-ai/app-core/lib';
|
||||
import { useFullscreen } from './composables/useFullscreen';
|
||||
import { useNativeTerminal, nativeTerminalDraftKey } from './composables/useNativeTerminal';
|
||||
import { runWhenInitialized, useTrayAttention } from './composables/useTrayAttention';
|
||||
|
|
@ -69,7 +69,7 @@ import {
|
|||
useDefaultOpenInTarget,
|
||||
} from './lib/nativeOpenIn';
|
||||
import { track } from './lib/track';
|
||||
import { openUpgrade } from './lib/upgrade';
|
||||
import { openUpgrade } from '@moonshot-ai/app-core/lib';
|
||||
import { setSessionIntent } from './lib/session-intent';
|
||||
import type { SessionCreatedSource } from '../shared/track-events';
|
||||
import { isAppActionId, type AppActionId } from '../shared/action-ids';
|
||||
|
|
@ -2121,7 +2121,7 @@ function openPr(url: string): void {
|
|||
/* macOS desktop (hidden title bar): the right panel's header row continues the
|
||||
conversation header's 48px top strip, so it joins the window-drag region.
|
||||
Interactive controls inside opt out (same pattern as ChatHeader). Cross-
|
||||
component rule (the header is web-ui's PanelHeader), so it lives here. */
|
||||
component rule (the header is app-ui's PanelHeader), so it lives here. */
|
||||
.app.macos-desktop .global-preview .ui-panel-header {
|
||||
-webkit-app-region: drag;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
// apps/web src/api/bootstrap.ts — composes the DaemonKimiWebApi (web-core) with
|
||||
// apps/web src/api/bootstrap.ts — composes the DaemonKimiWebApi (app-core) with
|
||||
// the apps/web tracer, credential store, and agent projector, and exposes the
|
||||
// shared singleton.
|
||||
//
|
||||
// This is the only module that knows both sides: web-core's api client and
|
||||
// This is the only module that knows both sides: app-core's api client and
|
||||
// apps/web's debug/trace + serverAuth + projector. Everything else consumes the
|
||||
// composed `api` (or the back-compat `getKimiWebApi()` accessor).
|
||||
|
||||
import { DaemonKimiWebApi } from '@moonshot-ai/web-core/api';
|
||||
import type { CredentialStore, Tracer } from '@moonshot-ai/web-core/contracts';
|
||||
import { DaemonKimiWebApi } from '@moonshot-ai/app-core/api';
|
||||
import type { CredentialStore, Tracer } from '@moonshot-ai/app-core/contracts';
|
||||
import {
|
||||
traceRestFailure,
|
||||
traceRestRequest,
|
||||
|
|
@ -17,7 +17,7 @@ import {
|
|||
traceWsOut,
|
||||
traceKeyEvent as recordKeyEvent,
|
||||
} from '../debug/trace';
|
||||
import { getCredential, markAuthRequired } from '../lib/serverAuth';
|
||||
import { getCredential, markAuthRequired } from '@moonshot-ai/app-core/lib';
|
||||
import { readKimiApiConfig } from './config';
|
||||
import { createAgentProjector } from './daemon/agentEventProjector';
|
||||
import type { KimiWebApi } from './types';
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
// apps/web src/api/config.ts — reads Vite env + window, resolves the server
|
||||
// origin, and derives the stable client identity for the DaemonKimiWebApi.
|
||||
//
|
||||
// Pure URL builders (buildRestUrl / buildWsUrl) live in @moonshot-ai/web-core;
|
||||
// Pure URL builders (buildRestUrl / buildWsUrl) live in @moonshot-ai/app-core;
|
||||
// this module keeps only the consumer-runtime concerns (window / import.meta.env
|
||||
// / storage) that the package deliberately does not own.
|
||||
|
||||
import { safeGetString, safeSetString, STORAGE_KEYS } from '../lib/storage';
|
||||
import { safeGetString, safeSetString, STORAGE_KEYS } from '@moonshot-ai/app-core/lib';
|
||||
import { DESKTOP_PRODUCT_NAME, DESKTOP_UI_MODE } from '../../shared/identity';
|
||||
|
||||
const CLIENT_ID_KEY = STORAGE_KEYS.clientId;
|
||||
|
|
|
|||
|
|
@ -26,10 +26,10 @@ import type {
|
|||
AppTask,
|
||||
} from '../types';
|
||||
import { i18n } from '../../i18n';
|
||||
import { logError } from '../../lib/log';
|
||||
import { logError } from '@moonshot-ai/app-core/lib';
|
||||
import { toolLabel, toolSummary } from '../../lib/toolMeta';
|
||||
import { toAppMessageContent } from '@moonshot-ai/web-core/api';
|
||||
import type { AgentProjector, ProjectMeta, WireMessageContent } from '@moonshot-ai/web-core/api';
|
||||
import { toAppMessageContent } from '@moonshot-ai/app-core/api';
|
||||
import type { AgentProjector, ProjectMeta, WireMessageContent } from '@moonshot-ai/app-core/api';
|
||||
|
||||
// Subagent turns share the parent session id: their turn / step / delta / tool
|
||||
// frames stream over the SAME session channel, each tagged with the subagent's
|
||||
|
|
@ -494,7 +494,7 @@ function buildUsageSnapshot(state: SessionState): AppSessionUsage {
|
|||
// AgentProjector
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// ProjectMeta + AgentProjector contracts live in @moonshot-ai/web-core/api
|
||||
// ProjectMeta + AgentProjector contracts live in @moonshot-ai/app-core/api
|
||||
// (imported above); this is the apps/web implementation (i18n + toolMeta).
|
||||
|
||||
export function createAgentProjector(): AgentProjector {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// apps/web src/api/errors.ts — re-export daemon error types + guards from
|
||||
// web-core so existing `import … from '../api/errors'` sites keep working.
|
||||
// app-core so existing `import … from '../api/errors'` sites keep working.
|
||||
export {
|
||||
DaemonApiError,
|
||||
DaemonNetworkError,
|
||||
|
|
@ -7,4 +7,4 @@ export {
|
|||
isDaemonApiError,
|
||||
isDaemonNetworkError,
|
||||
isFileTooLargeError,
|
||||
} from '@moonshot-ai/web-core/api';
|
||||
} from '@moonshot-ai/app-core/api';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// apps/web src/api — thin barrel. The api client + transport now live in
|
||||
// @moonshot-ai/web-core; this module exposes the apps/web-composed singleton
|
||||
// @moonshot-ai/app-core; this module exposes the apps/web-composed singleton
|
||||
// (see ./bootstrap) so existing `import { getKimiWebApi } from '../api'` sites
|
||||
// keep working unchanged.
|
||||
export { api, getKimiWebApi } from './bootstrap';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// apps/web src/api/types.ts — re-export the api types from web-core so the many
|
||||
// apps/web src/api/types.ts — re-export the api types from app-core so the many
|
||||
// existing `import … from '../api/types'` (and '../../api/types') sites keep
|
||||
// working without per-file rewrites. The single source of truth now lives in
|
||||
// @moonshot-ai/web-core/api.
|
||||
export * from '@moonshot-ai/web-core/api';
|
||||
// @moonshot-ai/app-core/api.
|
||||
export * from '@moonshot-ai/app-core/api';
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, inject, nextTick, provide, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import type { FileData, FilePreviewRequest } from '../types';
|
||||
import { copyTextToClipboard } from '../lib/clipboard';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { MAX_HIGHLIGHT_CHARS } from '../lib/diffFullTexts';
|
||||
import { Button, Icon, IconButton, PanelHeader, SegmentedControl, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Button, Icon, IconButton, PanelHeader, SegmentedControl, Tooltip } from '@moonshot-ai/app-ui';
|
||||
import HighlightedCode from './HighlightedCode.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
scales; paths use currentColor so we can ink it). -->
|
||||
<script setup lang="ts">
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Spinner } from '@moonshot-ai/web-ui';
|
||||
import { Spinner } from '@moonshot-ai/app-ui';
|
||||
const { t } = useI18n();
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, onMounted, onUnmounted, ref, watch } from 'vue';
|
||||
import type { ThemedToken } from 'shiki';
|
||||
import { useIsDark } from '@moonshot-ai/web-core';
|
||||
import { codeLanguageFromPath } from '../lib/codeLanguage';
|
||||
import { useIsDark } from '@moonshot-ai/app-core';
|
||||
import { codeLanguageFromPath } from '@moonshot-ai/app-core/lib';
|
||||
import { splitLines } from '../lib/diffLines';
|
||||
import type { DiffFullTexts } from '../lib/diffFullTexts';
|
||||
import type { DiffViewLine } from '../types';
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
in their place. -->
|
||||
<script setup lang="ts">
|
||||
import { onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||
import { useIsDark } from '@moonshot-ai/web-core';
|
||||
import { useIsDark } from '@moonshot-ai/app-core';
|
||||
import rivUrl from '../assets/doodle/k3_doodle1.riv?url';
|
||||
|
||||
const ready = ref(false);
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@
|
|||
theme, 'hoverspace' boolean on hover, 'click_avator' trigger on click. -->
|
||||
<script setup lang="ts">
|
||||
import { onBeforeUnmount, onMounted, ref, watch } from 'vue';
|
||||
import { useIsDark } from '@moonshot-ai/web-core';
|
||||
import { useIsDark } from '@moonshot-ai/app-core';
|
||||
import rivUrl from '../assets/mascot/kimi_avatar_default.riv?url';
|
||||
import { fireTrigger, setInputValue, type RiveLike } from '../lib/riveInputs';
|
||||
import { fireTrigger, setInputValue, type RiveLike } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
// Input names inside the asset (from its published strings).
|
||||
const THEME_INPUT = 'light/dark';
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@
|
|||
import { ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { Session } from '../types';
|
||||
import { moveInOrder, type DropPosition } from '../lib/workspaceOrder';
|
||||
import { SESSION_ROW_DRAG_MIME } from '../lib/pinnedSessions';
|
||||
import { loadPinnedCollapsed, savePinnedCollapsed } from '../lib/storage';
|
||||
import { moveInOrder, type DropPosition } from '@moonshot-ai/app-core/lib';
|
||||
import { SESSION_ROW_DRAG_MIME } from '@moonshot-ai/app-core/lib';
|
||||
import { loadPinnedCollapsed, savePinnedCollapsed } from '@moonshot-ai/app-core/lib';
|
||||
import SessionRow from './SessionRow.vue';
|
||||
import { Icon, IconButton } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@
|
|||
the only way out is a valid token. -->
|
||||
<script setup lang="ts">
|
||||
import { nextTick, onMounted, ref } from 'vue';
|
||||
import { setCredential } from '../lib/serverAuth';
|
||||
import { Button, Dialog, Input } from '@moonshot-ai/web-ui';
|
||||
import { setCredential } from '@moonshot-ai/app-core/lib';
|
||||
import { Button, Dialog, Input } from '@moonshot-ai/app-ui';
|
||||
|
||||
const credential = ref('');
|
||||
const inputRef = ref<InstanceType<typeof Input> | null>(null);
|
||||
|
|
|
|||
|
|
@ -5,14 +5,14 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon, Menu, MenuItem, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Icon, Menu, MenuItem, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
import {
|
||||
EMOJI_ENTRIES,
|
||||
EMOJI_GROUPS,
|
||||
pushRecentEmoji,
|
||||
searchEmojis,
|
||||
type EmojiGroup,
|
||||
} from '@moonshot-ai/web-core/lib';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@
|
|||
import { computed, nextTick, onUnmounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { Session } from '../types';
|
||||
import { copyTextToClipboard } from '../lib/clipboard';
|
||||
import { Badge, Icon, IconButton, Menu, MenuItem, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { applySessionEmoji, splitSessionEmoji } from '@moonshot-ai/web-core/lib';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { Badge, Icon, IconButton, Menu, MenuItem, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
import { applySessionEmoji, splitSessionEmoji } from '@moonshot-ai/app-core/lib';
|
||||
import SessionEmojiPicker from './SessionEmojiPicker.vue';
|
||||
import { sessionRowStatus } from './sessionRowStatus';
|
||||
|
||||
|
|
@ -120,7 +120,7 @@ onUnmounted(() => {
|
|||
window.removeEventListener('resize', closePicker);
|
||||
});
|
||||
|
||||
// Emoji picker — picking rewrites the title's leading emoji cluster (web-core
|
||||
// Emoji picker — picking rewrites the title's leading emoji cluster (app-core
|
||||
// splitSessionEmoji) through the ordinary rename path.
|
||||
const emojiSplit = computed(() => splitSessionEmoji(props.session.title));
|
||||
/** Title text after the emoji button — the stored separator + text, byte-for-byte. */
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ import {
|
|||
type BackendName,
|
||||
type DevBackendState,
|
||||
} from '../api/devBackend';
|
||||
import { copyTextToClipboard } from '../lib/clipboard';
|
||||
import { logWarn } from '../lib/log';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { logWarn } from '@moonshot-ai/app-core/lib';
|
||||
import {
|
||||
loadCollapsedWorkspaces,
|
||||
loadSidebarViewMode,
|
||||
|
|
@ -23,14 +23,14 @@ import {
|
|||
savePinnedCollapsed,
|
||||
saveSidebarViewMode,
|
||||
type SidebarViewMode,
|
||||
} from '../lib/storage';
|
||||
import { SESSION_ROW_DRAG_MIME } from '../lib/pinnedSessions';
|
||||
import { moveInOrder, type DropPosition } from '../lib/workspaceOrder';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import { SESSION_ROW_DRAG_MIME } from '@moonshot-ai/app-core/lib';
|
||||
import { moveInOrder, type DropPosition } from '@moonshot-ai/app-core/lib';
|
||||
import {
|
||||
canDropWorkspaceFolders,
|
||||
extractDroppedFolderPaths,
|
||||
looksLikeFolderDrag,
|
||||
} from '../lib/nativeWorkspaceDrop';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import type { Session, WorkspaceGroup as WorkspaceGroupType, WorkspaceView } from '../types';
|
||||
import SearchSessionsDialog from './dialogs/SearchSessionsDialog.vue';
|
||||
import UpdateIndicator from './UpdateIndicator.vue';
|
||||
|
|
@ -38,13 +38,13 @@ import UserMenu from './UserMenu.vue';
|
|||
import WorkspaceGroup from './WorkspaceGroup.vue';
|
||||
import PinnedSessionList from './PinnedSessionList.vue';
|
||||
import SessionRow from './SessionRow.vue';
|
||||
import { isMacosDesktop, isWindowsDesktop } from '../lib/desktopFlag';
|
||||
import { isMacosDesktop, isWindowsDesktop } from '@moonshot-ai/app-core/lib';
|
||||
import { useVibrancy } from '../composables/useVibrancy';
|
||||
import { resolvedBindingKeys } from '../composables/useShortcuts';
|
||||
import { SESSIONS_EXPAND_BATCH } from '../composables/client/useWorkspaceState';
|
||||
import { track } from '../lib/track';
|
||||
import type { SessionCreatedSource } from '../../shared/track-events';
|
||||
import { Icon, IconButton, Kbd, Menu, MenuItem, Pill, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton, Kbd, Menu, MenuItem, Pill, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ import '@xterm/xterm/css/xterm.css';
|
|||
import type { FitAddon as FitAddonType } from '@xterm/addon-fit';
|
||||
import type { Terminal as XTerm, ITheme } from '@xterm/xterm';
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref, toRef, watch } from 'vue';
|
||||
import { useIsDark } from '@moonshot-ai/web-core';
|
||||
import { useIsDark } from '@moonshot-ai/app-core';
|
||||
import { useTerminal } from '../composables/useTerminal';
|
||||
import { Button } from '@moonshot-ai/web-ui';
|
||||
import { Button } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = defineProps<{ sessionId: string }>();
|
||||
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Button, Checkbox, Dialog, Icon } from '@moonshot-ai/web-ui';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Button, Checkbox, Dialog, Icon } from '@moonshot-ai/app-ui';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import type { IconName } from '../lib/icons';
|
||||
import { useUpdateStatus } from '../composables/useUpdateStatus';
|
||||
import { track } from '../lib/track';
|
||||
|
|
|
|||
|
|
@ -19,11 +19,11 @@ import {
|
|||
shouldShowUpgrade,
|
||||
usagePercent,
|
||||
usageSeverity,
|
||||
} from '../lib/planUsage';
|
||||
import { isDesktop } from '../lib/desktopFlag';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import { isDesktop } from '@moonshot-ai/app-core/lib';
|
||||
import { track } from '../lib/track';
|
||||
import { openUpgrade } from '../lib/upgrade';
|
||||
import { Badge, Button, Icon, Kbd, Menu, MenuItem, Spinner } from '@moonshot-ai/web-ui';
|
||||
import { openUpgrade } from '@moonshot-ai/app-core/lib';
|
||||
import { Badge, Button, Icon, Kbd, Menu, MenuItem, Spinner } from '@moonshot-ai/app-ui';
|
||||
|
||||
const emit = defineEmits<{
|
||||
login: [];
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
import { onUnmounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { AppNotice, AppWarning } from '../api/types';
|
||||
import { copyTextToClipboard } from '../lib/clipboard';
|
||||
import { Toast } from '@moonshot-ai/web-ui';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { Toast } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = defineProps<{ warnings: AppWarning[] }>();
|
||||
const emit = defineEmits<{ dismiss: [index: number] }>();
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ import { computed, ref, type ComponentPublicInstance, type Ref } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import type { WorkspaceGroup, WorkspaceView } from '../types';
|
||||
import SessionRow from './SessionRow.vue';
|
||||
import { SESSION_ROW_DRAG_MIME } from '../lib/pinnedSessions';
|
||||
import { Icon, IconButton, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { SESSION_ROW_DRAG_MIME } from '@moonshot-ai/app-core/lib';
|
||||
import { Icon, IconButton, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
(design-system §03/§06) — WorkingIndicator is reserved for the chat
|
||||
working state after a prompt is sent. -->
|
||||
<script setup lang="ts">
|
||||
import { Spinner } from '@moonshot-ai/web-ui';
|
||||
import { Spinner } from '@moonshot-ai/app-ui';
|
||||
|
||||
defineProps<{
|
||||
label: string;
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
mini list of the latest 4 items (prototype v1-log-card.html ?peek). -->
|
||||
<script setup lang="ts">
|
||||
import { computed, inject, nextTick, ref, watch } from 'vue';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import ThinkingBlock from './ThinkingBlock.vue';
|
||||
import ToolCall from './ToolCall.vue';
|
||||
import { formatDuration, toolStackKey } from '../chatTurnRendering';
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, inject, onBeforeUnmount, provide, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Badge, PanelHeader } from '@moonshot-ai/web-ui';
|
||||
import { Badge, PanelHeader } from '@moonshot-ai/app-ui';
|
||||
|
||||
import { useFollowScroll } from '../../composables/useFollowScroll';
|
||||
import type { AgentMember, ChatTurn, FilePreviewRequest, ToolMedia } from '../../types';
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ import { computed, onMounted, onUnmounted, onUpdated, ref, watch } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import type { ApprovalBlock, FilePreviewRequest } from '../../types';
|
||||
import type { ApprovalDecision } from '../../api/types';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Badge, Button, Icon, IconButton, Spinner, openDialogCount, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import { Badge, Button, Icon, IconButton, Spinner, openDialogCount, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
import HighlightedCode from '../HighlightedCode.vue';
|
||||
import {
|
||||
approvalDecisionName,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import AuthMedia from './AuthMedia.vue';
|
||||
import { Icon, Spinner, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, Spinner, Tooltip } from '@moonshot-ai/app-ui';
|
||||
import type { IconName } from '../../lib/icons';
|
||||
|
||||
const props = withDefaults(
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ import QuestionCard from './QuestionCard.vue';
|
|||
import ApprovalCard from './ApprovalCard.vue';
|
||||
import TasksPane from './TasksPane.vue';
|
||||
import TodoCard from './TodoCard.vue';
|
||||
import { Button, Icon, Pill } from '@moonshot-ai/web-ui';
|
||||
import { Button, Icon, Pill } from '@moonshot-ai/app-ui';
|
||||
import { useConfirmDialog } from '../../composables/useConfirmDialog';
|
||||
import { formatTokens } from '../../lib/formatTokens';
|
||||
import { formatTokens } from '@moonshot-ai/app-core/lib';
|
||||
import { formatDuration } from '../chatTurnRendering';
|
||||
|
||||
const props = defineProps<{
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { isMacosDesktop } from '../../lib/desktopFlag';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { isMacosDesktop } from '@moonshot-ai/app-core/lib';
|
||||
import { canOpenInNative, listNativeOpenInApps, openInNativeApp } from '../../lib/nativeOpenIn';
|
||||
import { track } from '../../lib/track';
|
||||
import OpenInMenu from './OpenInMenu.vue';
|
||||
import { useNativeTerminal } from '../../composables/useNativeTerminal';
|
||||
import { Icon, IconButton, Menu, MenuItem, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton, Menu, MenuItem, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import ActivityRun from './ActivityRun.vue';
|
|||
import TurnFold from './TurnFold.vue';
|
||||
import TurnFilesSummary from './TurnFilesSummary.vue';
|
||||
import NotificationCard from './NotificationCard.vue';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import ThinkingBlock from './ThinkingBlock.vue';
|
||||
import ActivityNotice from './ActivityNotice.vue';
|
||||
import CronNotice from './CronNotice.vue';
|
||||
|
|
@ -18,9 +18,9 @@ import MediaLightbox from './MediaLightbox.vue';
|
|||
import MediaThumb from './MediaThumb.vue';
|
||||
import AttachmentChip from './AttachmentChip.vue';
|
||||
import WorkingIndicator from './WorkingIndicator.vue';
|
||||
import { Icon, Kbd, Spinner, Button, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, Kbd, Spinner, Button, Tooltip } from '@moonshot-ai/app-ui';
|
||||
import { useConfirmDialog } from '../../composables/useConfirmDialog';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { openFileAttachment } from '../../lib/openFileAttachment';
|
||||
import {
|
||||
formatDuration,
|
||||
|
|
@ -1699,7 +1699,7 @@ function streamingTailIndex(turn: ChatTurn): number | null {
|
|||
/* ===================== Wide tables (desktop) ===================== */
|
||||
/* Tables stay inside the reading column by default (overflowing content
|
||||
scrolls inside the table's own wrapper); the user widens an individual
|
||||
table via the toggle injected by web-markdown's tableWide.ts, which adds
|
||||
table via the toggle injected by app-markdown's tableWide.ts, which adds
|
||||
the `md-table-wide` class. 760px corresponds to --p-content-max.
|
||||
Container-query conditions cannot reference CSS custom properties
|
||||
directly. */
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import SlashMenu from './SlashMenu.vue';
|
||||
import MentionMenu from './MentionMenu.vue';
|
||||
import { buildSlashItems, parseSlash, SKILL_COMMAND_PREFIX } from '../../lib/slashCommands';
|
||||
import { formatTokens } from '../../lib/formatTokens';
|
||||
import { buildSlashItems, parseSlash, SKILL_COMMAND_PREFIX } from '@moonshot-ai/app-core/lib';
|
||||
import { formatTokens } from '@moonshot-ai/app-core/lib';
|
||||
import type { IconName } from '../../lib/icons';
|
||||
import type { FileItem } from './MentionMenu.vue';
|
||||
import type { ActivationBadges, ConversationStatus, PermissionMode, QueuedPromptView, ToolMedia } from '../../types';
|
||||
|
|
@ -18,7 +18,7 @@ import {
|
|||
isThinkingOn,
|
||||
modelThinkingAvailability,
|
||||
segmentsFor,
|
||||
} from '../../lib/modelThinking';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import { useInputHistory } from '../../composables/useInputHistory';
|
||||
import { useSlashMenu } from '../../composables/useSlashMenu';
|
||||
import { useMentionMenu } from '../../composables/useMentionMenu';
|
||||
|
|
@ -27,12 +27,12 @@ import { useAttachmentUpload, type Attachment } from '../../composables/useAttac
|
|||
import { matchBinding } from '../../lib/keymap';
|
||||
import { resolvedBinding } from '../../composables/useShortcuts';
|
||||
import { openFileAttachment } from '../../lib/openFileAttachment';
|
||||
import { openUpgrade } from '../../lib/upgrade';
|
||||
import { openUpgrade } from '@moonshot-ai/app-core/lib';
|
||||
import type { ManagedMembership, PromptAttachment } from '../../composables/useKimiWebClient';
|
||||
import AttachmentChip from './AttachmentChip.vue';
|
||||
import MediaLightbox from './MediaLightbox.vue';
|
||||
import MediaThumb from './MediaThumb.vue';
|
||||
import { Button, ContextRing, Icon, IconButton, SegmentedControl, Spinner, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Button, ContextRing, Icon, IconButton, SegmentedControl, Spinner, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Props & emits
|
||||
|
|
@ -1861,7 +1861,7 @@ function selectModel(modelId: string): void {
|
|||
/* Send button — circular icon. Always "send"; while running it enqueues
|
||||
(handled upstream). Interrupt is a separate Stop button so the two are never
|
||||
confused. Fill/icon/shadow run on the dedicated --color-send-* tokens (the
|
||||
production kimiwork neutral recipe, see web-ui style.css). */
|
||||
production kimiwork neutral recipe, see app-ui style.css). */
|
||||
.send {
|
||||
width: var(--composer-send-size);
|
||||
height: var(--composer-send-size);
|
||||
|
|
@ -2508,7 +2508,7 @@ function selectModel(modelId: string): void {
|
|||
width: 34px;
|
||||
height: 19px;
|
||||
border-radius: 999px;
|
||||
/* Colors mirror the design-system Switch (web-ui Switch.vue): a track that
|
||||
/* Colors mirror the design-system Switch (app-ui Switch.vue): a track that
|
||||
stays visible on the menu surface in dark mode, and an always-white knob. */
|
||||
background: var(--color-line-strong);
|
||||
position: relative;
|
||||
|
|
|
|||
|
|
@ -13,14 +13,14 @@ import ChatDock from './ChatDock.vue';
|
|||
import ConversationToc, { type ConversationTocItem } from './ConversationToc.vue';
|
||||
import TranscriptSearch from './TranscriptSearch.vue';
|
||||
import KimiDoodle from '../KimiDoodle.vue';
|
||||
import { Icon, IconButton, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { openUpgrade } from '../../lib/upgrade';
|
||||
import { getVisibleWorkspaces } from '../../lib/workspacePicker';
|
||||
import { safeRemove, STORAGE_KEYS } from '../../lib/storage';
|
||||
import { isMacosDesktop } from '../../lib/desktopFlag';
|
||||
import { Icon, IconButton, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
import { openUpgrade } from '@moonshot-ai/app-core/lib';
|
||||
import { getVisibleWorkspaces } from '@moonshot-ai/app-core/lib';
|
||||
import { safeRemove, STORAGE_KEYS } from '@moonshot-ai/app-core/lib';
|
||||
import { isMacosDesktop } from '@moonshot-ai/app-core/lib';
|
||||
import { useNativeTerminal } from '../../composables/useNativeTerminal';
|
||||
import { closestRegion, isEditableTarget, isSelectAllKeyEvent, selectContentsOf } from '../../lib/transcriptSelectAll';
|
||||
import { isFindKeyEvent } from '../../lib/transcriptSearch';
|
||||
import { closestRegion, isEditableTarget, isSelectAllKeyEvent, selectContentsOf } from '@moonshot-ai/app-core/lib';
|
||||
import { isFindKeyEvent } from '@moonshot-ai/app-core/lib';
|
||||
import { track } from '../../lib/track';
|
||||
import { useComposerAutoFocus } from '../../composables/useComposerAutoFocus';
|
||||
import { turnBlocks } from '../chatTurnRendering';
|
||||
|
|
@ -472,7 +472,7 @@ function scheduleActiveTocUpdate(): void {
|
|||
}
|
||||
|
||||
// --- TOC occlusion by wide tables -------------------------------------------
|
||||
// Manually widened markdown tables (via the toggle injected by web-markdown's
|
||||
// Manually widened markdown tables (via the toggle injected by app-markdown's
|
||||
// tableWide.ts, up to --p-table-max) can extend past the TOC rail,
|
||||
// which stays anchored to the reading-column edge. While a table actually
|
||||
// covers the rail we hide the TOC temporarily so the table stays fully
|
||||
|
|
@ -2040,7 +2040,7 @@ onMounted(() => {
|
|||
updateActiveTocQuery();
|
||||
// Table widen/restore toggles change table geometry without a scroll —
|
||||
// re-run the TOC occlusion hit test when they fire (event bubbles up from
|
||||
// the table wrapper; see web-markdown's tableWide.ts). Anchor geometry
|
||||
// the table wrapper; see app-markdown's tableWide.ts). Anchor geometry
|
||||
// shifts the same way, so the TOC cache goes dirty too.
|
||||
panesRef.value?.addEventListener('kimi-table-layout', onTableLayout);
|
||||
if (typeof document !== 'undefined') {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import MessageTime from './MessageTime.vue';
|
||||
import type { CronTurnData } from '../../types';
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import { useI18n } from 'vue-i18n';
|
|||
import type { DiffViewLine } from '../../types';
|
||||
import type { DiffFullTexts } from '../../lib/diffFullTexts';
|
||||
import HighlightedCode from '../HighlightedCode.vue';
|
||||
import { Button, Icon, PanelHeader, ScrollArea, SegmentedControl, Spinner, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Button, Icon, PanelHeader, ScrollArea, SegmentedControl, Spinner, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
footer (both in ChatDock.vue). -->
|
||||
<script setup lang="ts">
|
||||
import type { AppGoal } from '../../api/types';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
defineProps<{ goal: AppGoal }>();
|
||||
|
|
|
|||
|
|
@ -11,14 +11,14 @@
|
|||
and registers with the shared dialog stack (openDialogCount) — App's
|
||||
side-panel Esc handler and the conversation's Esc-interrupt both defer
|
||||
to open overlays, so a plain window-level Esc handler owns the key
|
||||
while the preview is up (same pattern as the web-ui Dialog primitive).
|
||||
while the preview is up (same pattern as the app-ui Dialog primitive).
|
||||
Bytes come through AuthMedia so file-store media loads with auth; local
|
||||
object URLs (composer drafts) pass through. -->
|
||||
<script setup lang="ts">
|
||||
import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import AuthMedia from './AuthMedia.vue';
|
||||
import { Icon, Tooltip, openDialogCount } from '@moonshot-ai/web-ui';
|
||||
import { Icon, Tooltip, openDialogCount } from '@moonshot-ai/app-ui';
|
||||
import { openImagePreview } from '../../lib/mediaPreview';
|
||||
import type { ToolMedia } from '../../types';
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import AuthMedia from './AuthMedia.vue';
|
||||
import { Icon, Spinner, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, Spinner, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { formatMessageTime } from '../../lib/formatMessageTime';
|
||||
import { formatMessageTime } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
const props = defineProps<{ time: string }>();
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { TaskNotification } from '../../types';
|
||||
import {
|
||||
notificationStatus,
|
||||
|
|
@ -15,7 +15,7 @@ import {
|
|||
type NotificationStatus,
|
||||
type NotificationVariant,
|
||||
} from '../../lib/notificationXml';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import MessageTime from './MessageTime.vue';
|
||||
|
||||
const props = defineProps<{ items: TaskNotification[] }>();
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
import { computed, nextTick, onUnmounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { openInAppIcon, resolveOpenInTarget, saveDefaultOpenInTarget, useDefaultOpenInTarget } from '../../lib/nativeOpenIn';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { Icon, Menu, MenuItem, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { Icon, Menu, MenuItem, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@ import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import type { UIQuestion } from '../../types';
|
||||
import type { QuestionAnswer, QuestionResponse } from '../../api/types';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Button, Icon, IconButton, openDialogCount, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import { Button, Icon, IconButton, openDialogCount, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = defineProps<{
|
||||
question: UIQuestion;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import { computed, nextTick, provide, ref, watch } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import ChatPane from './ChatPane.vue';
|
||||
import WorkingIndicator from './WorkingIndicator.vue';
|
||||
import { Icon, PanelHeader, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Icon, PanelHeader, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
import type { ChatTurn } from '../../types';
|
||||
|
||||
const props = defineProps<{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<script setup lang="ts">
|
||||
import { ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { SlashCommand } from '../../lib/slashCommands';
|
||||
import type { SlashCommand } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
vocabulary (never hardcoded characters), colored by state — keeps the
|
||||
two lists visually identical. -->
|
||||
<script setup lang="ts">
|
||||
import { Icon, StatusDot } from '@moonshot-ai/web-ui';
|
||||
import { Icon, StatusDot } from '@moonshot-ai/app-ui';
|
||||
|
||||
export type StatusGlyphStatus = 'pending' | 'run' | 'done' | 'fail';
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ import { computed, ref } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import type { ConversationStatus, PermissionMode } from '../../types';
|
||||
import type { ThinkingLevel } from '../../api/types';
|
||||
import { formatTokens } from '../../lib/formatTokens';
|
||||
import { Dialog } from '@moonshot-ai/web-ui';
|
||||
import { formatTokens } from '@moonshot-ai/app-core/lib';
|
||||
import { Dialog } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@
|
|||
import { inject, reactive } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { TaskItem } from '../../types';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { Badge, Icon } from '@moonshot-ai/web-ui';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { Badge, Icon } from '@moonshot-ai/app-ui';
|
||||
import StatusGlyph, { type StatusGlyphStatus } from './StatusGlyph.vue';
|
||||
|
||||
defineProps<{ tasks: TaskItem[] }>();
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, inject, nextTick, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import { formatDuration } from '../chatTurnRendering';
|
||||
import { track } from '../../lib/track';
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<script setup lang="ts">
|
||||
import { nextTick, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { PanelHeader } from '@moonshot-ai/web-ui';
|
||||
import { PanelHeader } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = defineProps<{
|
||||
text: string;
|
||||
|
|
|
|||
|
|
@ -6,12 +6,12 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon, IconButton, Spinner, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton, Spinner, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
import {
|
||||
clearSearchHighlights,
|
||||
collectMatchRanges,
|
||||
setSearchHighlights,
|
||||
} from '../../lib/transcriptSearch';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import { track } from '../../lib/track';
|
||||
|
||||
const props = withDefaults(
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Button, Icon, IconButton, PanelHeader, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Button, Icon, IconButton, PanelHeader, Tooltip } from '@moonshot-ai/app-ui';
|
||||
import type { TurnFileChange } from '../chatTurnRendering';
|
||||
import HighlightedCode from '../HighlightedCode.vue';
|
||||
import { pathRelativeTo } from '../../lib/pathRelativeTo';
|
||||
import { pathRelativeTo } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
const props = defineProps<{
|
||||
change: TurnFileChange;
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Button, Card, Icon } from '@moonshot-ai/web-ui';
|
||||
import { Button, Card, Icon } from '@moonshot-ai/app-ui';
|
||||
import type { TurnFileChange } from '../chatTurnRendering';
|
||||
import type { FilePreviewRequest } from '../../types';
|
||||
import { basename } from '../../lib/pathBasename';
|
||||
import { pathRelativeTo } from '../../lib/pathRelativeTo';
|
||||
import { basename } from '@moonshot-ai/app-core/lib';
|
||||
import { pathRelativeTo } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, inject, nextTick, onUnmounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import ThinkingBlock from './ThinkingBlock.vue';
|
||||
import ActivityRun from './ActivityRun.vue';
|
||||
import ToolCall from './ToolCall.vue';
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, inject, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon, StatusDot } from '@moonshot-ai/web-ui';
|
||||
import { Icon, StatusDot } from '@moonshot-ai/app-ui';
|
||||
import type { ToolCall } from '../../../types';
|
||||
import { toolLabel } from '../../../lib/toolMeta';
|
||||
import OutputPanel from './OutputPanel.vue';
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { FilePreviewRequest, ToolCall, ToolMedia } from '../../../types';
|
||||
import { toolLabel } from '../../../lib/toolMeta';
|
||||
import {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { ToolCall } from '../../../types';
|
||||
import { parseArgRecord, str } from './toolArgs';
|
||||
import ToolDisclosure from './ToolDisclosure.vue';
|
||||
|
|
|
|||
|
|
@ -11,12 +11,12 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { DiffViewLine, FilePreviewRequest, ToolCall } from '../../../types';
|
||||
import { diffStats } from '../../../lib/diffLines';
|
||||
import { buildEditDiffLines, buildWriteContent } from '../../../lib/toolDiff';
|
||||
import { normalizeToolName } from '../../../lib/toolMeta';
|
||||
import { basename } from '../../../lib/pathBasename';
|
||||
import { basename } from '@moonshot-ai/app-core/lib';
|
||||
import { argFilePath, parseArgRecord, pathDirname } from './toolArgs';
|
||||
import ToolDisclosure from './ToolDisclosure.vue';
|
||||
import HighlightedCode from '../../HighlightedCode.vue';
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { FilePreviewRequest, ToolCall } from '../../../types';
|
||||
import { normalizeToolName } from '../../../lib/toolMeta';
|
||||
import { parseArgRecord, str } from './toolArgs';
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { ToolCall } from '../../../types';
|
||||
import { normalizeToolName, toolLabel } from '../../../lib/toolMeta';
|
||||
import { num, parseArgRecord, str } from './toolArgs';
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { FilePreviewRequest, ToolCall } from '../../../types';
|
||||
import { normalizeToolName } from '../../../lib/toolMeta';
|
||||
import { parseArgRecord, str } from './toolArgs';
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
import type { ToolCall, ToolMedia } from '../../../types';
|
||||
import { Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Tooltip } from '@moonshot-ai/app-ui';
|
||||
import AuthMedia from '../AuthMedia.vue';
|
||||
|
||||
const props = withDefaults(defineProps<{ tool: ToolCall; mobile?: boolean }>(), { mobile: false });
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Markdown } from '@moonshot-ai/web-markdown';
|
||||
import { Markdown } from '@moonshot-ai/app-markdown';
|
||||
import type { FilePreviewRequest, ToolCall } from '../../../types';
|
||||
import { toolGlyph, toolLabel } from '../../../lib/toolMeta';
|
||||
import OutputPanel from './OutputPanel.vue';
|
||||
|
|
|
|||
|
|
@ -10,10 +10,10 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { FilePreviewRequest, ToolCall } from '../../../types';
|
||||
import { basename } from '../../../lib/pathBasename';
|
||||
import { parseReadOutput } from '../../../lib/readOutput';
|
||||
import { basename } from '@moonshot-ai/app-core/lib';
|
||||
import { parseReadOutput } from '@moonshot-ai/app-core/lib';
|
||||
import { argFilePath, num, parseArgRecord, pathDirname } from './toolArgs';
|
||||
import ToolDisclosure from './ToolDisclosure.vue';
|
||||
import HighlightedCode from '../../HighlightedCode.vue';
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ import type { FilePreviewRequest, ToolCall, ToolMedia } from '../../../types';
|
|||
import type { AppSubagentPhase } from '../../../api/types';
|
||||
import type { SwarmMember } from '../../../composables/swarmGroups';
|
||||
import { toolLabel } from '../../../lib/toolMeta';
|
||||
import { parseSwarmResult } from '../../../lib/parseSwarmResult';
|
||||
import { parseSwarmResult } from '@moonshot-ai/app-core/lib';
|
||||
import { buildSwarmCardRows, type SwarmCardRow } from '../../../lib/swarmCardRows';
|
||||
import { Icon, StatusDot, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, StatusDot, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { ToolCall } from '../../../types';
|
||||
import { parseArgRecord, str } from './toolArgs';
|
||||
import ToolDisclosure from './ToolDisclosure.vue';
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, inject, nextTick, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon, StatusDot, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, StatusDot, Tooltip } from '@moonshot-ai/app-ui';
|
||||
import { track } from '../../../lib/track';
|
||||
|
||||
const props = withDefaults(
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import type { ToolCall } from '../../../types';
|
||||
import { parseArgRecord, str, urlHost } from './toolArgs';
|
||||
import ToolDisclosure from './ToolDisclosure.vue';
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import { normalizeToolName } from '../lib/toolMeta';
|
|||
|
||||
// Shared 1024-based token formatter (lib/formatTokens); re-exported so the
|
||||
// existing ChatPane import keeps working.
|
||||
export { formatTokens } from '../lib/formatTokens';
|
||||
export { formatTokens } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
/** Whole-second duration, `37s` / `1m37s` / `6m` / `1h4m` — the only
|
||||
user-visible duration vocabulary: floored to whole seconds (never a
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
import { computed, onMounted, onUnmounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { FsBrowseEntry, FsBrowseResult } from '../../api/types';
|
||||
import { Button, Dialog, Field, Icon, IconButton, Input, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { Button, Dialog, Field, Icon, IconButton, Input, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<script setup lang="ts">
|
||||
import { onBeforeUnmount } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Button, Dialog } from '@moonshot-ai/web-ui';
|
||||
import { Button, Dialog } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = withDefaults(defineProps<{
|
||||
open: boolean;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import {
|
||||
useOAuthLoginFlow,
|
||||
type OAuthLoginStartResult,
|
||||
|
|
@ -12,7 +12,7 @@ import {
|
|||
// Desktop divergence (not synced to apps/web): marks the verification URL as
|
||||
// desktop-originated so the auth page can offer "open the desktop app".
|
||||
import { withDesktopLoginSource } from '../../lib/loginSource';
|
||||
import { AuthStateIcon, Button, Dialog, Icon, Spinner } from '@moonshot-ai/web-ui';
|
||||
import { AuthStateIcon, Button, Dialog, Icon, Spinner } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@
|
|||
import { computed, nextTick, onMounted, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { Session } from '../../types';
|
||||
import { highlightHtml, snippet } from '../../lib/searchHighlight';
|
||||
import { Dialog, EmptyState, Icon, Input, Kbd, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { highlightHtml, snippet } from '@moonshot-ai/app-core/lib';
|
||||
import { Dialog, EmptyState, Icon, Input, Kbd, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -19,12 +19,12 @@ import {
|
|||
effortLabel,
|
||||
modelThinkingAvailability,
|
||||
segmentsFor,
|
||||
} from '../../lib/modelThinking';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import BottomSheet from '../dialogs/BottomSheet.vue';
|
||||
import LanguageSwitcher from '../settings/LanguageSwitcher.vue';
|
||||
import { logWarn } from '../../lib/log';
|
||||
import { formatTokens } from '../../lib/formatTokens';
|
||||
import { Badge, Button, Icon, Input, SegmentedControl } from '@moonshot-ai/web-ui';
|
||||
import { logWarn } from '@moonshot-ai/app-core/lib';
|
||||
import { formatTokens } from '@moonshot-ai/app-core/lib';
|
||||
import { Badge, Button, Icon, Input, SegmentedControl } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
import { ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { Session, WorkspaceGroup, WorkspaceView } from '../../types';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import { SESSIONS_EXPAND_BATCH } from '../../composables/client/useWorkspaceState';
|
||||
import type { SessionCreatedSource } from '../../../shared/track-events';
|
||||
import BottomSheet from '../dialogs/BottomSheet.vue';
|
||||
import { Icon, IconButton, Menu, MenuItem, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton, Menu, MenuItem, Tooltip } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import type { WorkspaceView } from '../../types';
|
||||
import { Icon, IconButton } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { copyTextToClipboard } from '../../lib/clipboard';
|
||||
import { copyTextToClipboard } from '@moonshot-ai/app-core/lib';
|
||||
import {
|
||||
useOAuthLoginFlow,
|
||||
type OAuthLoginStartResult,
|
||||
|
|
@ -14,7 +14,7 @@ import {
|
|||
// Desktop divergence (not synced to apps/web): marks the verification URL as
|
||||
// desktop-originated so the auth page can offer "open the desktop app".
|
||||
import { withDesktopLoginSource } from '../../lib/loginSource';
|
||||
import { AuthStateIcon, Button, Icon, Spinner } from '@moonshot-ai/web-ui';
|
||||
import { AuthStateIcon, Button, Icon, Spinner } from '@moonshot-ai/app-ui';
|
||||
import BrandLogo from './BrandLogo.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useAppearance, type ColorScheme } from '@moonshot-ai/web-core';
|
||||
import { Button } from '@moonshot-ai/web-ui';
|
||||
import { useAppearance, type ColorScheme } from '@moonshot-ai/app-core';
|
||||
import { Button } from '@moonshot-ai/app-ui';
|
||||
import { availableLocales, setLocale, type LocaleCode } from '../../i18n';
|
||||
import { type OAuthLoginStartResult } from '../../composables/useOAuthLoginFlow';
|
||||
import { track } from '../../lib/track';
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import {
|
|||
Input,
|
||||
SegmentedControl,
|
||||
Spinner,
|
||||
} from '@moonshot-ai/web-ui';
|
||||
} from '@moonshot-ai/app-ui';
|
||||
|
||||
defineProps<{
|
||||
/** Show the unsaved-changes guard bar at the top (shared by both sources). */
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import { availableLocales, setLocale, type LocaleCode } from '../../i18n';
|
||||
import { track } from '../../lib/track';
|
||||
import { SegmentedControl } from '@moonshot-ai/web-ui';
|
||||
import { SegmentedControl } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { locale } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -5,8 +5,8 @@ import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import type { AppModel } from '../../api/types';
|
||||
import { useDialogFocus } from '../../composables/useDialogFocus';
|
||||
import { formatTokens } from '../../lib/formatTokens';
|
||||
import { Dialog, Icon, IconButton, Input, Kbd, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/web-ui';
|
||||
import { formatTokens } from '@moonshot-ai/app-core/lib';
|
||||
import { Dialog, Icon, IconButton, Input, Kbd, Spinner, Tooltip, useImeComposition } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@
|
|||
flight. -->
|
||||
<script setup lang="ts">
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { openUpgrade } from '../../lib/upgrade';
|
||||
import { Button } from '@moonshot-ai/web-ui';
|
||||
import { openUpgrade } from '@moonshot-ai/app-core/lib';
|
||||
import { Button } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@ import {
|
|||
moneyParts,
|
||||
usagePercent,
|
||||
usageSeverity,
|
||||
} from '../../lib/planUsage';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import { track } from '../../lib/track';
|
||||
import PlanUpgradeCard from './PlanUpgradeCard.vue';
|
||||
import { Button, Spinner } from '@moonshot-ai/web-ui';
|
||||
import { Button, Spinner } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = defineProps<{
|
||||
onFetchUsage: () => Promise<ManagedUsageResult>;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ import {
|
|||
validateProviderForm,
|
||||
type ProviderFormState,
|
||||
} from '../../lib/providerForm';
|
||||
import { Banner, Button, Icon, IconButton, Input, Select } from '@moonshot-ai/web-ui';
|
||||
import { Banner, Button, Icon, IconButton, Input, Select } from '@moonshot-ai/app-ui';
|
||||
|
||||
const props = defineProps<{
|
||||
mode: 'add' | 'edit';
|
||||
|
|
@ -445,7 +445,7 @@ function removeModelRow(index: number): void {
|
|||
.pf-key-wrap { position: relative; }
|
||||
.pf-key-wrap :deep(.ui-input) { padding-right: calc(var(--icon-button-sm) + var(--space-2)); }
|
||||
.pf-key-eye { position: absolute; right: var(--space-1); top: 50%; transform: translateY(-50%); }
|
||||
/* Same label styling as web-ui's Field, plus a required marker. */
|
||||
/* Same label styling as app-ui's Field, plus a required marker. */
|
||||
.pf-field-label {
|
||||
font-family: var(--font-ui);
|
||||
font-size: var(--text-sm);
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import { useKimiWebClient } from '../../composables/useKimiWebClient';
|
|||
import { isManagedOAuthProvider, providerModelRows } from '../../lib/providerForm';
|
||||
import AddProviderFlow from './AddProviderFlow.vue';
|
||||
import ProviderForm from './ProviderForm.vue';
|
||||
import { Badge, Button, Icon, Spinner } from '@moonshot-ai/web-ui';
|
||||
import { Badge, Button, Icon, Spinner } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
const client = useKimiWebClient();
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon } from '@moonshot-ai/web-ui';
|
||||
import { segmentsFor, type ModelThinkingInfo } from '../../lib/modelThinking';
|
||||
import { Icon } from '@moonshot-ai/app-ui';
|
||||
import { segmentsFor, type ModelThinkingInfo } from '@moonshot-ai/app-core/lib';
|
||||
|
||||
export type SecondaryModelGroup = { provider: string; options: Array<{ id: string; label: string }> };
|
||||
|
||||
|
|
|
|||
|
|
@ -14,10 +14,10 @@ import ShortcutsPanel from './ShortcutsPanel.vue';
|
|||
import ProvidersPanel from './ProvidersPanel.vue';
|
||||
import { canOpenInNative, listNativeOpenInApps, openInAppIcon, saveDefaultOpenInTarget, useDefaultOpenInTarget } from '../../lib/nativeOpenIn';
|
||||
import { canSetDockIconChoice, useDockIconChoice, type DockIconChoice } from '../../lib/dockIconChoice';
|
||||
import { logWarn } from '../../lib/log';
|
||||
import { logWarn } from '@moonshot-ai/app-core/lib';
|
||||
import { track } from '../../lib/track';
|
||||
import DockIconPicker from './DockIconPicker.vue';
|
||||
import { isMacosDesktop } from '../../lib/desktopFlag';
|
||||
import { isMacosDesktop } from '@moonshot-ai/app-core/lib';
|
||||
import { useVibrancy } from '../../composables/useVibrancy';
|
||||
import { serverEndpointLabel } from '../../api/config';
|
||||
import { downloadTraceLog, isTraceEnabled } from '../../debug/trace';
|
||||
|
|
@ -28,7 +28,7 @@ import PlanUsageCard from './PlanUsageCard.vue';
|
|||
import SecondaryModelPicker from './SecondaryModelPicker.vue';
|
||||
import PlanUpgradeCard from './PlanUpgradeCard.vue';
|
||||
import type { IconName } from '../../lib/icons';
|
||||
import { Badge, Button, Dialog, Icon, IconButton, SegmentedControl, Select, Switch } from '@moonshot-ai/web-ui';
|
||||
import { Badge, Button, Dialog, Icon, IconButton, SegmentedControl, Select, Switch } from '@moonshot-ai/app-ui';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Button, Icon, IconButton, Kbd } from '@moonshot-ai/web-ui';
|
||||
import { Button, Icon, IconButton, Kbd } from '@moonshot-ai/app-ui';
|
||||
import {
|
||||
bindingFromEvent,
|
||||
findConflict,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, nextTick, onUnmounted, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon, Tooltip } from '@moonshot-ai/web-ui';
|
||||
import { Icon, Tooltip } from '@moonshot-ai/app-ui';
|
||||
import { useNativeTerminal, type NativeTerminalTab } from '../../composables/useNativeTerminal';
|
||||
import TerminalView from './TerminalView.vue';
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import type { FitAddon as FitAddonType } from '@xterm/addon-fit';
|
|||
import type { Terminal as XTerm, ITheme } from '@xterm/xterm';
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref, toRef, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useIsDark } from '@moonshot-ai/web-core';
|
||||
import { useIsDark } from '@moonshot-ai/app-core';
|
||||
import { useNativeTerminal } from '../../composables/useNativeTerminal';
|
||||
import { matchShortcutAction, terminalPassesChordToPty } from '../../composables/useShortcuts';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { Icon, IconButton } from '@moonshot-ai/web-ui';
|
||||
import { Icon, IconButton } from '@moonshot-ai/app-ui';
|
||||
import { focusLeavesWindowsMenu, StandaloneAltTracker } from '../../lib/windowsMenuAccess';
|
||||
import BrandLogo from '../onboarding/BrandLogo.vue';
|
||||
import UpdateIndicator from '../UpdateIndicator.vue';
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ import {
|
|||
TranscriptChannel,
|
||||
type AgentTranscriptSnapshot,
|
||||
type TranscriptOperation,
|
||||
} from '@moonshot-ai/web-core/transcript';
|
||||
import type { KimiEventConnection, KimiWebApi } from '@moonshot-ai/web-core/api';
|
||||
} from '@moonshot-ai/app-core/transcript';
|
||||
import type { KimiEventConnection, KimiWebApi } from '@moonshot-ai/app-core/api';
|
||||
|
||||
export interface AuxiliaryTranscriptEntry {
|
||||
readonly channel: TranscriptChannel;
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ import { ref, watch, type ComputedRef } from 'vue';
|
|||
import { getKimiWebApi } from '../../api';
|
||||
import { DaemonApiError } from '../../api/errors';
|
||||
import type { AddProviderInput, AppCatalogProvider, AppMessage, AppModel, AppProvider, AppProviderDetail, AppSession, AppSkill, DeleteProviderResult, ImportCatalogProviderInput, ImportCustomRegistryInput, ManagedUsageResult, OAuthLoginStartResult, ThinkingLevel, UpdateProviderInput } from '../../api/types';
|
||||
import { logError, logWarn } from '../../lib/log';
|
||||
import { logError, logWarn } from '@moonshot-ai/app-core/lib';
|
||||
import { attachmentsToContent } from '../../lib/attachmentsToContent';
|
||||
import { safeGetString, safeSetString, STORAGE_KEYS } from '../../lib/storage';
|
||||
import { safeGetString, safeSetString, STORAGE_KEYS } from '@moonshot-ai/app-core/lib';
|
||||
import {
|
||||
ackThinkingPending,
|
||||
defaultThinkingLevelFor,
|
||||
|
|
@ -19,7 +19,7 @@ import {
|
|||
markThinkingPending,
|
||||
thinkingLevelForModelSwitch,
|
||||
thinkingLevelToConfig,
|
||||
} from '../../lib/modelThinking';
|
||||
} from '@moonshot-ai/app-core/lib';
|
||||
import { beginLocalTurn, settleLocalTurn } from './useWorkspaceState';
|
||||
import type { ActivityState } from '../../types';
|
||||
import type { ExtendedState, PromptAttachment } from '../useKimiWebClient';
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
import { ref } from 'vue';
|
||||
import { i18n } from '../../i18n';
|
||||
import { safeGetString, safeSetString, STORAGE_KEYS } from '../../lib/storage';
|
||||
import { safeGetString, safeSetString, STORAGE_KEYS } from '@moonshot-ai/app-core/lib';
|
||||
import { track } from '../../lib/track';
|
||||
import type { NotificationKindEvent } from '../../../shared/track-events';
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import { computed, ref } from 'vue';
|
|||
import { getKimiWebApi } from '../../api';
|
||||
import type { AppApprovalRequest, AppMessage, KimiEventConnection, ThinkingLevel } from '../../api/types';
|
||||
import { createTurnsProjector } from './turnsProjector';
|
||||
import { ackThinkingPending } from '../../lib/modelThinking';
|
||||
import { ackThinkingPending } from '@moonshot-ai/app-core/lib';
|
||||
import type { ChatTurn } from '../../types';
|
||||
import type { ExtendedState } from '../useKimiWebClient';
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue