Phase 005: vendor ArkScope, land the Arco style baseline, and fix bridge interpreter resolution

- Vendor ArkScope decorative layers (ScrambleTitle / IsometricWave) with provenance notes; decorative-only per AGENTS.md red lines
- Migrate theme tokens to Arco, register the Arco theme, and add hook adapter composables (useMessage / useDialog / useNotification) with matching signatures
- Sample pages: LoginView and AppSidebar on the new baseline; docs/arco-mapping.md and docs/ui-baseline.md land
- agent-bridge: prefer the PM-selected venv from facts.json over legacy in-tree venvs (legacy lacks the mcp extra, so every MCP server showed 0 tools / not connected)
- agent-bridge python (vendored, deliberate deviation): MCP discovery import fallback and pyyaml -> hermes_yaml so plugins and MCP work under the PM env; install the mcp extra via `hermes pm install --extra mcp`
- Chat-chain fragment: docs/chat-chain-changes/2026-10-17-phase005-arkscope-baseline.md

Verified: harness:check, test (2020 passed), test:e2e (30 passed), build all green; manual: plugins 100/0 warnings, MCP 6/6 servers connected with 104 tools.
This commit is contained in:
2026-10-17 09:45:30 +08:00
parent 4701bf0ad0
commit 4baccd5d88
106 changed files with 1493 additions and 221 deletions
@@ -2,7 +2,7 @@
import { computed, ref } from "vue";
import { useRoute, useRouter } from "vue-router";
import { useI18n } from "vue-i18n";
import { NButton, NModal, useMessage, NTag } from "naive-ui";
import { useMessage } from "@/composables/useMessage";
import { useAppStore } from "@/stores/hermes/app";
import { usePersistentRecord } from '@/composables/usePersistentRecord'
import RouteLinkItem from '@/components/common/RouteLinkItem.vue'
@@ -352,14 +352,14 @@ function handleUpdateClick() {
</span>
<ThemeSwitch />
</div>
<NButton v-if="appStore.clientOutdated" type="warning" size="tiny" block class="update-btn" @click="handleReloadClient">
<a-button v-if="appStore.clientOutdated" type="primary" status="warning" size="mini" long class="update-btn" @click="handleReloadClient">
{{ t('sidebar.reloadClientVersion', { version: appStore.serverVersion }) }}
</NButton>
<NButton
</a-button>
<a-button
v-else-if="appStore.updateAvailable"
type="primary"
size="tiny"
block
size="mini"
long
class="update-btn"
:loading="!isDockerRuntime && appStore.updating"
@click="handleUpdateClick"
@@ -367,7 +367,7 @@ function handleUpdateClick() {
{{ !isDockerRuntime && appStore.updating
? t('sidebar.updating')
: t('sidebar.updateVersion', { version: appStore.latestVersion }) }}
</NButton>
</a-button>
</div>
<div class="sidebar-top-actions">
@@ -386,7 +386,7 @@ function handleUpdateClick() {
</button>
</div>
<NModal v-model:show="showChangelog" preset="dialog" :title="t('sidebar.changelog')" style="width: 520px;">
<a-modal v-model:visible="showChangelog" :title="t('sidebar.changelog')" :width="520" :footer="false">
<div class="changelog-list">
<div v-for="entry in changelog" :key="entry.version" class="changelog-version-block">
<div class="changelog-version-header">
@@ -398,9 +398,9 @@ function handleUpdateClick() {
</ul>
</div>
</div>
</NModal>
</a-modal>
<NModal v-model:show="showDockerUpdateTip" preset="dialog" :title="t('sidebar.dockerUpdateTitle')" style="width: 480px;">
<a-modal v-model:visible="showDockerUpdateTip" :title="t('sidebar.dockerUpdateTitle')" :width="480" :footer="false">
<div class="docker-update-modal">
<p>{{ t('sidebar.dockerUpdateGuide') }}</p>
<div class="docker-update-commands">
@@ -408,10 +408,10 @@ function handleUpdateClick() {
<code class="docker-command">docker compose up -d --force-recreate</code>
</div>
<p class="docker-update-note">
<NTag size="small" type="info" :bordered="false">{{ t('sidebar.dockerUpdateNote') }}</NTag>
<a-tag size="small" color="arcoblue" :bordered="false">{{ t('sidebar.dockerUpdateNote') }}</a-tag>
</p>
</div>
</NModal>
</a-modal>
</aside>
</template>