@xcanwin/manyoyo 7.0.26 → 7.1.2
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/lib/web/AGENTS.md +6 -8
- package/lib/web/frontend/shadcn.html +91 -88
- package/lib/web/server.js +16 -171
- package/package.json +2 -21
- package/lib/web/frontend/app.css +0 -2269
- package/lib/web/frontend/app.html +0 -394
- package/lib/web/frontend/app.js +0 -5352
- package/lib/web/frontend/chat-behavior.js +0 -107
- package/lib/web/frontend/codemirror-entry.js +0 -111
- package/lib/web/frontend/codemirror.bundle.js +0 -31
- package/lib/web/frontend/file-browser.js +0 -800
- package/lib/web/frontend/login.css +0 -208
- package/lib/web/frontend/login.html +0 -25
- package/lib/web/frontend/login.js +0 -74
- package/lib/web/frontend/markdown-renderer.js +0 -316
- package/lib/web/frontend/markdown.css +0 -84
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
(function () {
|
|
2
|
-
function isNearBottom(scrollTop, scrollHeight, clientHeight, thresholdPx) {
|
|
3
|
-
const threshold = Number.isFinite(thresholdPx) ? thresholdPx : 40;
|
|
4
|
-
const distance = scrollHeight - (scrollTop + clientHeight);
|
|
5
|
-
return distance <= threshold;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function summarizeTraceFlow(traceEvents, options) {
|
|
9
|
-
const events = Array.isArray(traceEvents) ? traceEvents : [];
|
|
10
|
-
const count = events.length;
|
|
11
|
-
if (count === 0) {
|
|
12
|
-
return { count: 0, label: '暂无步骤' };
|
|
13
|
-
}
|
|
14
|
-
const opts = options && typeof options === 'object' ? options : {};
|
|
15
|
-
const hasError = events.some(event => event && event.kind === 'error');
|
|
16
|
-
const status = hasError ? '有错误' : (opts.pending === true ? '进行中' : '已完成');
|
|
17
|
-
return { count, label: `${count} 步 · ${status}` };
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function buildDocumentTitle(agentName) {
|
|
21
|
-
const trimmed = String(agentName || '').trim();
|
|
22
|
-
return trimmed ? `${trimmed} · MANYOYO Web` : 'MANYOYO Web';
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function buildStructuredTraceResidualLines(message) {
|
|
26
|
-
const lines = String(message && message.content ? message.content : '')
|
|
27
|
-
.split('\n')
|
|
28
|
-
.map(line => String(line || '').trim())
|
|
29
|
-
.filter(Boolean);
|
|
30
|
-
const traceEvents = Array.isArray(message && message.traceEvents) ? message.traceEvents : [];
|
|
31
|
-
const consumed = new Map();
|
|
32
|
-
traceEvents.forEach(traceEvent => {
|
|
33
|
-
const text = traceEvent && traceEvent.text ? String(traceEvent.text) : '';
|
|
34
|
-
if (!text) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
text.split('\n').forEach(subLine => {
|
|
38
|
-
const key = String(subLine || '').trim();
|
|
39
|
-
if (!key) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
consumed.set(key, (consumed.get(key) || 0) + 1);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
return lines.filter(line => {
|
|
46
|
-
if (!line || line === '[执行过程]') {
|
|
47
|
-
return false;
|
|
48
|
-
}
|
|
49
|
-
const remaining = consumed.get(line) || 0;
|
|
50
|
-
if (remaining > 0) {
|
|
51
|
-
consumed.set(line, remaining - 1);
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
return true;
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const MERGEABLE_TRACE_KINDS = new Set(['tool', 'command', 'mcp']);
|
|
59
|
-
|
|
60
|
-
function mergeToolTraceEvents(traceEvents) {
|
|
61
|
-
const events = Array.isArray(traceEvents) ? traceEvents : [];
|
|
62
|
-
const result = [];
|
|
63
|
-
const indexByKey = new Map();
|
|
64
|
-
events.forEach(event => {
|
|
65
|
-
const kind = event && event.kind ? String(event.kind) : '';
|
|
66
|
-
const toolId = event && event.toolId ? String(event.toolId) : '';
|
|
67
|
-
if (MERGEABLE_TRACE_KINDS.has(kind) && toolId) {
|
|
68
|
-
const key = `${kind}:${toolId}`;
|
|
69
|
-
if (indexByKey.has(key)) {
|
|
70
|
-
const index = indexByKey.get(key);
|
|
71
|
-
result[index] = Object.assign({}, result[index], event);
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
indexByKey.set(key, result.length);
|
|
75
|
-
}
|
|
76
|
-
result.push(event);
|
|
77
|
-
});
|
|
78
|
-
return result;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function mergeTraceIntoReply(messages) {
|
|
82
|
-
const list = Array.isArray(messages) ? messages : [];
|
|
83
|
-
const result = [];
|
|
84
|
-
for (let i = 0; i < list.length; i += 1) {
|
|
85
|
-
const msg = list[i];
|
|
86
|
-
if (msg && msg.streamTrace) {
|
|
87
|
-
const next = list[i + 1];
|
|
88
|
-
if (next && next.role === 'assistant' && !next.streamTrace) {
|
|
89
|
-
result.push(Object.assign({}, next, { timestamp: msg.timestamp, pairedTrace: msg }));
|
|
90
|
-
i += 1;
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
result.push(msg);
|
|
95
|
-
}
|
|
96
|
-
return result;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
window.ManyoyoChatBehavior = {
|
|
100
|
-
isNearBottom,
|
|
101
|
-
summarizeTraceFlow,
|
|
102
|
-
buildDocumentTitle,
|
|
103
|
-
mergeTraceIntoReply,
|
|
104
|
-
mergeToolTraceEvents,
|
|
105
|
-
buildStructuredTraceResidualLines
|
|
106
|
-
};
|
|
107
|
-
}());
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { basicSetup } from 'codemirror';
|
|
2
|
-
import { Compartment, EditorState } from '@codemirror/state';
|
|
3
|
-
import { EditorView } from '@codemirror/view';
|
|
4
|
-
import { css } from '@codemirror/lang-css';
|
|
5
|
-
import { html } from '@codemirror/lang-html';
|
|
6
|
-
import { javascript } from '@codemirror/lang-javascript';
|
|
7
|
-
import { json } from '@codemirror/lang-json';
|
|
8
|
-
import { markdown } from '@codemirror/lang-markdown';
|
|
9
|
-
import { python } from '@codemirror/lang-python';
|
|
10
|
-
import { yaml } from '@codemirror/lang-yaml';
|
|
11
|
-
|
|
12
|
-
function resolveLanguageExtension(language) {
|
|
13
|
-
switch (String(language || '').trim()) {
|
|
14
|
-
case 'css':
|
|
15
|
-
return css();
|
|
16
|
-
case 'html':
|
|
17
|
-
return html();
|
|
18
|
-
case 'javascript':
|
|
19
|
-
return javascript({ jsx: true, typescript: true });
|
|
20
|
-
case 'json':
|
|
21
|
-
return json();
|
|
22
|
-
case 'markdown':
|
|
23
|
-
return markdown();
|
|
24
|
-
case 'python':
|
|
25
|
-
return python();
|
|
26
|
-
case 'yaml':
|
|
27
|
-
return yaml();
|
|
28
|
-
default:
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function createEditor(parent, options = {}) {
|
|
34
|
-
const target = parent;
|
|
35
|
-
const initialDoc = String(options.doc || '');
|
|
36
|
-
const initialLanguage = String(options.language || 'text').trim();
|
|
37
|
-
const initialReadOnly = options.readOnly !== false;
|
|
38
|
-
const onChange = typeof options.onChange === 'function' ? options.onChange : null;
|
|
39
|
-
const languageCompartment = new Compartment();
|
|
40
|
-
const readOnlyCompartment = new Compartment();
|
|
41
|
-
let suppressChange = false;
|
|
42
|
-
const view = new EditorView({
|
|
43
|
-
parent: target,
|
|
44
|
-
state: EditorState.create({
|
|
45
|
-
doc: initialDoc,
|
|
46
|
-
extensions: [
|
|
47
|
-
basicSetup,
|
|
48
|
-
EditorView.lineWrapping,
|
|
49
|
-
EditorView.updateListener.of(function (update) {
|
|
50
|
-
if (!update.docChanged || suppressChange || !onChange) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
onChange(update.state.doc.toString());
|
|
54
|
-
}),
|
|
55
|
-
readOnlyCompartment.of([
|
|
56
|
-
EditorState.readOnly.of(initialReadOnly),
|
|
57
|
-
EditorView.editable.of(!initialReadOnly)
|
|
58
|
-
]),
|
|
59
|
-
languageCompartment.of(resolveLanguageExtension(initialLanguage)),
|
|
60
|
-
EditorView.theme({
|
|
61
|
-
'&': {
|
|
62
|
-
height: '100%',
|
|
63
|
-
fontSize: '12px'
|
|
64
|
-
},
|
|
65
|
-
'.cm-scroller': {
|
|
66
|
-
overflow: 'auto'
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
]
|
|
70
|
-
})
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
return {
|
|
74
|
-
setValue(nextValue) {
|
|
75
|
-
const text = String(nextValue == null ? '' : nextValue);
|
|
76
|
-
suppressChange = true;
|
|
77
|
-
view.dispatch({
|
|
78
|
-
changes: {
|
|
79
|
-
from: 0,
|
|
80
|
-
to: view.state.doc.length,
|
|
81
|
-
insert: text
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
suppressChange = false;
|
|
85
|
-
},
|
|
86
|
-
getValue() {
|
|
87
|
-
return view.state.doc.toString();
|
|
88
|
-
},
|
|
89
|
-
setLanguage(nextLanguage) {
|
|
90
|
-
view.dispatch({
|
|
91
|
-
effects: languageCompartment.reconfigure(resolveLanguageExtension(nextLanguage))
|
|
92
|
-
});
|
|
93
|
-
},
|
|
94
|
-
setReadOnly(readOnly) {
|
|
95
|
-
const value = readOnly !== false;
|
|
96
|
-
view.dispatch({
|
|
97
|
-
effects: readOnlyCompartment.reconfigure([
|
|
98
|
-
EditorState.readOnly.of(value),
|
|
99
|
-
EditorView.editable.of(!value)
|
|
100
|
-
])
|
|
101
|
-
});
|
|
102
|
-
},
|
|
103
|
-
destroy() {
|
|
104
|
-
view.destroy();
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
window.ManyoyoCodeEditor = {
|
|
110
|
-
create: createEditor
|
|
111
|
-
};
|