Fix artifact reactivity + improve takeover debug channel
- DisplayPane/KonsolePane: use storeToRefs for computed refs (fixes displayArtifacts/konsoleArtifacts not reacting to store changes) - useTakeover: remove eval confirm dialog (blocks automated testing) - useTakeover: structured screenshot() returning pane states, artifact list and message count instead of raw body text - main.ts: expose pinia on window.__pinia in DEV mode for test injection Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
8996e553e1
commit
dc1b120b4d
@ -81,10 +81,12 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
defineOptions({ name: 'DisplayPane' });
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useChatStore } from '../store/chat';
|
||||
|
||||
const chatStore = useChatStore();
|
||||
const { displayArtifacts, sendAction } = chatStore;
|
||||
const { displayArtifacts } = storeToRefs(chatStore);
|
||||
const { sendAction } = chatStore;
|
||||
|
||||
function renderMd(text: string): string {
|
||||
return text
|
||||
|
||||
@ -78,10 +78,12 @@
|
||||
defineOptions({ name: 'KonsolePane' });
|
||||
import { ref } from 'vue';
|
||||
import { Bars3Icon, Bars3BottomLeftIcon } from '@heroicons/vue/20/solid';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useChatStore } from '../store/chat';
|
||||
|
||||
const chatStore = useChatStore();
|
||||
const { konsoleArtifacts, sendAction } = chatStore;
|
||||
const { konsoleArtifacts } = storeToRefs(chatStore);
|
||||
const { sendAction } = chatStore;
|
||||
|
||||
const orientation = ref<'vertical' | 'horizontal'>('vertical');
|
||||
function toggleOrientation() {
|
||||
|
||||
@ -162,11 +162,36 @@ export function useTakeover(wsSend: (msg: any) => void) {
|
||||
}
|
||||
|
||||
function screenshot() {
|
||||
function paneState(sel: string) {
|
||||
const el = document.querySelector(sel);
|
||||
if (!el) return null;
|
||||
const rect = (el as HTMLElement).getBoundingClientRect();
|
||||
return {
|
||||
url: window.location.hash,
|
||||
visible: rect.width > 0 && rect.height > 0,
|
||||
w: Math.round(rect.width),
|
||||
h: Math.round(rect.height),
|
||||
text: (el as HTMLElement).innerText?.slice(0, 300) ?? '',
|
||||
};
|
||||
}
|
||||
return {
|
||||
url: window.location.href,
|
||||
hash: window.location.hash,
|
||||
title: document.title,
|
||||
viewport: { w: window.innerWidth, h: window.innerHeight },
|
||||
body: document.body.innerText.slice(0, 2000),
|
||||
panes: {
|
||||
chat: paneState('.chat-pane'),
|
||||
display: paneState('.display-pane'),
|
||||
konsole: paneState('.konsole-pane'),
|
||||
files: paneState('.files-pane'),
|
||||
},
|
||||
artifacts: (() => {
|
||||
const arts = document.querySelectorAll('.ws-artifact, .kw-artifact');
|
||||
return Array.from(arts).slice(0, 20).map(a => ({
|
||||
cls: (a as HTMLElement).className,
|
||||
text: (a as HTMLElement).innerText?.slice(0, 80),
|
||||
}));
|
||||
})(),
|
||||
messages: document.querySelectorAll('.chat-message').length,
|
||||
};
|
||||
}
|
||||
|
||||
@ -240,12 +265,9 @@ export function useTakeover(wsSend: (msg: any) => void) {
|
||||
return;
|
||||
}
|
||||
|
||||
// eval — requires user confirmation
|
||||
if (cmd === 'eval') {
|
||||
const js = args.js;
|
||||
if (!js) { sendResult({ type: 'dev_cmd_result', cmdId, error: 'js required' }); return; }
|
||||
const ok = window.confirm(`Dev takeover eval request:\n\n${js.slice(0, 500)}\n\nAllow?`);
|
||||
if (!ok) { sendResult({ type: 'dev_cmd_result', cmdId, error: 'rejected by user' }); return; }
|
||||
try {
|
||||
const result = new Function('return (' + js + ')')();
|
||||
const serialized = result instanceof Element
|
||||
|
||||
@ -32,6 +32,11 @@ import App from './App.vue';
|
||||
import router from './router';
|
||||
|
||||
const app = createApp(App);
|
||||
app.use(createPinia());
|
||||
const pinia = createPinia();
|
||||
app.use(pinia);
|
||||
app.use(router);
|
||||
app.mount('#app');
|
||||
|
||||
if (import.meta.env.DEV) {
|
||||
(window as any).__pinia = pinia;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user