@treenity/mods 3.0.2 → 3.0.4
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/agent/client.ts +2 -0
- package/agent/guardian.ts +492 -0
- package/agent/seed.ts +74 -0
- package/agent/server.ts +4 -0
- package/agent/service.ts +644 -0
- package/agent/types.ts +184 -0
- package/agent/view.tsx +431 -0
- package/dist/agent/client.d.ts +3 -0
- package/dist/agent/client.d.ts.map +1 -0
- package/dist/agent/client.js +3 -0
- package/dist/agent/client.js.map +1 -0
- package/dist/agent/guardian.d.ts +47 -0
- package/dist/agent/guardian.d.ts.map +1 -0
- package/dist/agent/guardian.js +452 -0
- package/dist/agent/guardian.js.map +1 -0
- package/dist/agent/seed.d.ts +2 -0
- package/dist/agent/seed.d.ts.map +1 -0
- package/dist/agent/seed.js +68 -0
- package/dist/agent/seed.js.map +1 -0
- package/dist/agent/server.d.ts +5 -0
- package/dist/agent/server.d.ts.map +1 -0
- package/dist/agent/server.js +5 -0
- package/dist/agent/server.js.map +1 -0
- package/dist/agent/service.d.ts +2 -0
- package/dist/agent/service.d.ts.map +1 -0
- package/dist/agent/service.js +556 -0
- package/dist/agent/service.js.map +1 -0
- package/dist/agent/types.d.ts +115 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +168 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/view.d.ts +2 -0
- package/dist/agent/view.d.ts.map +1 -0
- package/dist/agent/view.js +137 -0
- package/dist/agent/view.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +16 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -0
- package/dist/mcp/mcp-server.js +344 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +3 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/service.d.ts +2 -0
- package/dist/mcp/service.d.ts.map +1 -0
- package/dist/mcp/service.js +16 -0
- package/dist/mcp/service.js.map +1 -0
- package/dist/mcp/types.d.ts +4 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +6 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/metatron/claude.d.ts +30 -0
- package/dist/metatron/claude.d.ts.map +1 -0
- package/dist/metatron/claude.js +201 -0
- package/dist/metatron/claude.js.map +1 -0
- package/dist/metatron/client.d.ts +3 -0
- package/dist/metatron/client.d.ts.map +1 -0
- package/dist/metatron/client.js +3 -0
- package/dist/metatron/client.js.map +1 -0
- package/dist/metatron/mentions.d.ts +9 -0
- package/dist/metatron/mentions.d.ts.map +1 -0
- package/dist/metatron/mentions.js +21 -0
- package/dist/metatron/mentions.js.map +1 -0
- package/dist/metatron/permissions.d.ts +16 -0
- package/dist/metatron/permissions.d.ts.map +1 -0
- package/dist/metatron/permissions.js +52 -0
- package/dist/metatron/permissions.js.map +1 -0
- package/dist/metatron/seed.d.ts +2 -0
- package/dist/metatron/seed.d.ts.map +1 -0
- package/dist/metatron/seed.js +41 -0
- package/dist/metatron/seed.js.map +1 -0
- package/dist/metatron/server.d.ts +4 -0
- package/dist/metatron/server.d.ts.map +1 -0
- package/dist/metatron/server.js +4 -0
- package/dist/metatron/server.js.map +1 -0
- package/dist/metatron/service.d.ts +2 -0
- package/dist/metatron/service.d.ts.map +1 -0
- package/dist/metatron/service.js +361 -0
- package/dist/metatron/service.js.map +1 -0
- package/dist/metatron/types.d.ts +76 -0
- package/dist/metatron/types.d.ts.map +1 -0
- package/dist/metatron/types.js +112 -0
- package/dist/metatron/types.js.map +1 -0
- package/dist/metatron/view.d.ts +4 -0
- package/dist/metatron/view.d.ts.map +1 -0
- package/dist/metatron/view.js +5 -0
- package/dist/metatron/view.js.map +1 -0
- package/dist/metatron/views/config.d.ts +2 -0
- package/dist/metatron/views/config.d.ts.map +1 -0
- package/dist/metatron/views/config.js +116 -0
- package/dist/metatron/views/config.js.map +1 -0
- package/dist/metatron/views/log.d.ts +18 -0
- package/dist/metatron/views/log.d.ts.map +1 -0
- package/dist/metatron/views/log.js +224 -0
- package/dist/metatron/views/log.js.map +1 -0
- package/dist/metatron/views/shared.d.ts +13 -0
- package/dist/metatron/views/shared.d.ts.map +1 -0
- package/dist/metatron/views/shared.js +33 -0
- package/dist/metatron/views/shared.js.map +1 -0
- package/dist/metatron/views/task.d.ts +4 -0
- package/dist/metatron/views/task.d.ts.map +1 -0
- package/dist/metatron/views/task.js +106 -0
- package/dist/metatron/views/task.js.map +1 -0
- package/dist/metatron/views/workspace.d.ts +2 -0
- package/dist/metatron/views/workspace.d.ts.map +1 -0
- package/dist/metatron/views/workspace.js +138 -0
- package/dist/metatron/views/workspace.js.map +1 -0
- package/mcp/mcp-server.ts +393 -0
- package/mcp/server.ts +2 -0
- package/mcp/service.ts +18 -0
- package/mcp/types.ts +6 -0
- package/metatron/CLAUDE.md +22 -0
- package/metatron/claude.ts +258 -0
- package/metatron/client.ts +2 -0
- package/metatron/mentions.ts +31 -0
- package/metatron/permissions.ts +76 -0
- package/metatron/seed.ts +50 -0
- package/metatron/server.ts +3 -0
- package/metatron/service.ts +406 -0
- package/metatron/types.ts +120 -0
- package/metatron/view.tsx +4 -0
- package/metatron/views/config.tsx +408 -0
- package/metatron/views/log.tsx +412 -0
- package/metatron/views/shared.tsx +40 -0
- package/metatron/views/task.tsx +255 -0
- package/metatron/views/workspace.tsx +418 -0
- package/package.json +6 -2
- package/dist/mindmap/radial-tree.d.ts +0 -14
- package/dist/mindmap/radial-tree.d.ts.map +0 -1
- package/dist/mindmap/radial-tree.js +0 -184
- package/dist/mindmap/radial-tree.js.map +0 -1
- package/dist/mindmap/use-tree-data.d.ts +0 -14
- package/dist/mindmap/use-tree-data.d.ts.map +0 -1
- package/dist/mindmap/use-tree-data.js +0 -95
- package/dist/mindmap/use-tree-data.js.map +0 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { register } from '@treenity/core';
|
|
3
|
+
import { execute } from '@treenity/react/hooks';
|
|
4
|
+
import { cn } from '@treenity/react/lib/utils';
|
|
5
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
6
|
+
import { LogRenderer, Md } from './log';
|
|
7
|
+
import { formatTime, StatusBadge, StatusDot } from './shared';
|
|
8
|
+
// ── Stop button ──
|
|
9
|
+
function StopButton({ taskPath }) {
|
|
10
|
+
const [stopping, setStopping] = useState(false);
|
|
11
|
+
const handleStop = useCallback(async (e) => {
|
|
12
|
+
e.stopPropagation();
|
|
13
|
+
setStopping(true);
|
|
14
|
+
try {
|
|
15
|
+
await execute(taskPath, 'stop', {});
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
setStopping(false);
|
|
19
|
+
}
|
|
20
|
+
}, [taskPath]);
|
|
21
|
+
return (_jsx("button", { onClick: handleStop, disabled: stopping, className: "w-5 h-5 rounded flex items-center justify-center bg-red-500/15 hover:bg-red-500/25 transition-all duration-150 shrink-0", title: "Stop task", children: _jsx("span", { className: cn('w-2 h-2 rounded-[1px] bg-red-400', stopping && 'opacity-50') }) }));
|
|
22
|
+
}
|
|
23
|
+
// ── Inject input ──
|
|
24
|
+
function InjectInput({ taskPath }) {
|
|
25
|
+
const [text, setText] = useState('');
|
|
26
|
+
const [sending, setSending] = useState(false);
|
|
27
|
+
const handleSend = useCallback(async () => {
|
|
28
|
+
const t = text.trim();
|
|
29
|
+
if (!t)
|
|
30
|
+
return;
|
|
31
|
+
setSending(true);
|
|
32
|
+
try {
|
|
33
|
+
await execute(taskPath, 'inject', { text: t });
|
|
34
|
+
setText('');
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
setSending(false);
|
|
38
|
+
}
|
|
39
|
+
}, [text, taskPath]);
|
|
40
|
+
return (_jsx("div", { className: "mt-2 pt-2 border-t border-zinc-800/40", children: _jsxs("div", { className: "relative", children: [_jsx("textarea", { value: text, onChange: e => setText(e.target.value), onKeyDown: e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey))
|
|
41
|
+
handleSend(); }, rows: 1, placeholder: "Queue a follow-up message...", className: "w-full bg-zinc-950 border border-zinc-800 rounded-lg px-3 py-2 pr-16 text-xs text-zinc-200 resize-none focus:outline-none focus:border-violet-600/50 placeholder:text-zinc-700" }), _jsx("button", { onClick: handleSend, disabled: sending || !text.trim(), className: cn('absolute right-1.5 bottom-1.5 px-2.5 py-1 rounded-md text-[10px] font-semibold transition-all duration-150', text.trim()
|
|
42
|
+
? 'bg-amber-600 hover:bg-amber-500 text-white'
|
|
43
|
+
: 'bg-zinc-800 text-zinc-600 cursor-not-allowed'), children: sending ? '...' : 'Queue' })] }) }));
|
|
44
|
+
}
|
|
45
|
+
// ── Task row (used in config lists) ──
|
|
46
|
+
export function TaskRow({ task }) {
|
|
47
|
+
const status = task.status || 'pending';
|
|
48
|
+
const isRunning = status === 'running';
|
|
49
|
+
const isActive = isRunning || status === 'done';
|
|
50
|
+
const [expanded, setExpanded] = useState(isActive);
|
|
51
|
+
const prompt = task.prompt || '';
|
|
52
|
+
const result = task.result || '';
|
|
53
|
+
const taskLog = task.log || '';
|
|
54
|
+
const hasLog = !!taskLog;
|
|
55
|
+
const [tab, setTab] = useState(hasLog ? 'log' : 'result');
|
|
56
|
+
const time = task.createdAt ? formatTime(task.createdAt) : '';
|
|
57
|
+
return (_jsxs("div", { className: cn('rounded-xl border transition-all duration-200', expanded ? 'bg-zinc-900/80 border-zinc-800' : 'bg-zinc-900/40 border-zinc-800/60 hover:border-zinc-700'), children: [_jsxs("div", { className: "flex items-center gap-2.5 px-3.5 py-2.5 cursor-pointer select-none", onClick: () => setExpanded(!expanded), children: [_jsx(StatusDot, { status: status }), _jsx("span", { className: "text-sm text-zinc-300 truncate flex-1", children: prompt }), isRunning && _jsx(StopButton, { taskPath: task.$path }), _jsx("span", { className: "text-[10px] text-zinc-600 shrink-0 font-mono", children: time }), _jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: cn('text-zinc-600 transition-transform duration-200 shrink-0', expanded && 'rotate-90'), children: _jsx("path", { d: "M9 18l6-6-6-6" }) })] }), expanded && (_jsxs("div", { className: "border-t border-zinc-800/60", children: [_jsx("div", { className: "flex gap-1 px-2 py-1", children: ['log', 'result'].map(t => (_jsx("button", { onClick: () => setTab(t), className: cn('px-2 py-0.5 rounded-md text-[11px] font-medium transition-all duration-150', tab === t
|
|
58
|
+
? 'bg-zinc-800 text-zinc-200'
|
|
59
|
+
: 'text-zinc-600 hover:text-zinc-400'), children: t }, t))) }), _jsx("div", { className: "max-h-[60vh] overflow-y-auto", children: _jsx(LogRenderer, { text: tab === 'result' ? (result || 'No result yet') : (taskLog || result || 'No log yet') }) }), isRunning && _jsx(InjectInput, { taskPath: task.$path })] }))] }));
|
|
60
|
+
}
|
|
61
|
+
// ── Running indicator — animated ping ──
|
|
62
|
+
function RunningPing({ color = 'sky' }) {
|
|
63
|
+
const colors = {
|
|
64
|
+
sky: { ping: 'bg-sky-400', dot: 'bg-sky-500 shadow-sky-500/50' },
|
|
65
|
+
emerald: { ping: 'bg-emerald-400', dot: 'bg-emerald-500 shadow-emerald-500/50' },
|
|
66
|
+
amber: { ping: 'bg-amber-400', dot: 'bg-amber-500 shadow-amber-500/50' },
|
|
67
|
+
};
|
|
68
|
+
const c = colors[color];
|
|
69
|
+
return (_jsxs("span", { className: "relative flex h-3 w-3 shrink-0", children: [_jsx("span", { className: cn('animate-ping absolute inline-flex h-full w-full rounded-full opacity-75', c.ping) }), _jsx("span", { className: cn('relative inline-flex h-3 w-3 rounded-full shadow-lg', c.dot) })] }));
|
|
70
|
+
}
|
|
71
|
+
// ── Elapsed time hook ──
|
|
72
|
+
// XXX: should be two different operations, n ot one. use elapset return just number, and then it formatted as wanted
|
|
73
|
+
function useElapsed(startTs, active) {
|
|
74
|
+
const [now, setNow] = useState(Date.now());
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
if (!active || !startTs)
|
|
77
|
+
return;
|
|
78
|
+
const id = setInterval(() => setNow(Date.now()), 1000);
|
|
79
|
+
return () => clearInterval(id);
|
|
80
|
+
}, [active, startTs]);
|
|
81
|
+
if (!startTs)
|
|
82
|
+
return '';
|
|
83
|
+
const s = Math.floor(((active ? now : Date.now()) - startTs) / 1000);
|
|
84
|
+
if (s < 60)
|
|
85
|
+
return `${s}s`;
|
|
86
|
+
if (s < 3600)
|
|
87
|
+
return `${Math.floor(s / 60)}m ${s % 60}s`;
|
|
88
|
+
return `${Math.floor(s / 3600)}h ${Math.floor((s % 3600) / 60)}m`;
|
|
89
|
+
}
|
|
90
|
+
// ── Task view (individual task page /t/.../tasks/xxx) ──
|
|
91
|
+
const TaskView = ({ value, ctx }) => {
|
|
92
|
+
const path = ctx.path;
|
|
93
|
+
const status = value.status || 'pending';
|
|
94
|
+
const isRunning = status === 'running';
|
|
95
|
+
const result = value.result || '';
|
|
96
|
+
const taskLog = value.log || '';
|
|
97
|
+
const [tab, setTab] = useState(taskLog ? 'log' : 'result');
|
|
98
|
+
const elapsed = useElapsed(value.createdAt, isRunning);
|
|
99
|
+
return (_jsxs("div", { className: "flex flex-col gap-5 p-5 max-w-4xl", children: [_jsxs("div", { className: "flex items-center gap-3", children: [isRunning ? _jsx(RunningPing, {}) : _jsx(StatusDot, { status: status }), _jsx(StatusBadge, { status: status }), _jsxs("div", { className: "flex items-center gap-2 ml-auto", children: [elapsed && (_jsx("span", { className: cn('text-[10px] font-mono tabular-nums', isRunning ? 'text-sky-400/70' : 'text-zinc-600'), children: elapsed })), _jsx("span", { className: "text-[10px] text-zinc-600 font-mono tabular-nums", children: value.createdAt ? formatTime(value.createdAt) : '' }), isRunning && _jsx(StopButton, { taskPath: path })] })] }), _jsx("div", { className: "bg-zinc-900/40 rounded-xl px-4 py-3 border border-zinc-800/40", children: _jsx(Md, { className: "text-sm text-zinc-300 leading-relaxed", text: value.prompt }) }), _jsx("div", { className: "flex gap-0.5 bg-zinc-900/40 rounded-lg p-0.5 w-fit", children: ['log', 'result'].map(t => (_jsx("button", { onClick: () => setTab(t), className: cn('px-3.5 py-1 rounded-md text-xs font-medium transition-all duration-150', tab === t
|
|
100
|
+
? 'bg-zinc-800 text-zinc-200 shadow-sm'
|
|
101
|
+
: 'text-zinc-500 hover:text-zinc-300'), children: t }, t))) }), _jsx("div", { className: cn('rounded-xl px-3 py-2.5 max-h-[75vh] overflow-y-auto border transition-all duration-300', isRunning
|
|
102
|
+
? 'bg-zinc-950 border-sky-500/15 shadow-lg shadow-sky-500/5'
|
|
103
|
+
: 'bg-zinc-950 border-zinc-800'), children: _jsx(LogRenderer, { text: tab === 'result' ? (result || 'No result yet') : (taskLog || result || 'No log yet') }) }), isRunning && _jsx(InjectInput, { taskPath: path })] }));
|
|
104
|
+
};
|
|
105
|
+
register('metatron.task', 'react', TaskView);
|
|
106
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../metatron/views/task.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../../metatron/views/workspace.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { register } from '@treenity/core';
|
|
3
|
+
import { Render } from '@treenity/react/context';
|
|
4
|
+
import { execute, useChildren, usePath } from '@treenity/react/hooks';
|
|
5
|
+
import { cn } from '@treenity/react/lib/utils';
|
|
6
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
7
|
+
import { MetatronWorkspace } from '../types';
|
|
8
|
+
import { LogRenderer } from './log';
|
|
9
|
+
import { formatTime, StatusDot } from './shared';
|
|
10
|
+
// ── Command Picker (modal overlay for adding columns) ──
|
|
11
|
+
function CommandPicker({ configPath, exclude, onSelect, onNewTask, onClose }) {
|
|
12
|
+
const [query, setQuery] = useState('');
|
|
13
|
+
const [sessions, setSessions] = useState([]);
|
|
14
|
+
const [searchResults, setSearchResults] = useState([]);
|
|
15
|
+
const [searching, setSearching] = useState(false);
|
|
16
|
+
const [newTaskPrompt, setNewTaskPrompt] = useState('');
|
|
17
|
+
const inputRef = useRef(null);
|
|
18
|
+
const backdropRef = useRef(null);
|
|
19
|
+
const allTasks = useChildren(`${configPath}/tasks`, { watch: true });
|
|
20
|
+
const tasks = (allTasks ?? [])
|
|
21
|
+
.filter(t => t.$type === 'metatron.task' && !exclude.includes(t.$path))
|
|
22
|
+
.sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));
|
|
23
|
+
// Load sessions on mount
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
execute(configPath, 'listSessions', { lastN: 50 }).then(r => {
|
|
26
|
+
if (Array.isArray(r))
|
|
27
|
+
setSessions(r);
|
|
28
|
+
});
|
|
29
|
+
}, [configPath]);
|
|
30
|
+
// Auto-focus
|
|
31
|
+
useEffect(() => { inputRef.current?.focus(); }, []);
|
|
32
|
+
// Close on Escape
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const handler = (e) => { if (e.key === 'Escape')
|
|
35
|
+
onClose(); };
|
|
36
|
+
window.addEventListener('keydown', handler);
|
|
37
|
+
return () => window.removeEventListener('keydown', handler);
|
|
38
|
+
}, [onClose]);
|
|
39
|
+
// Debounced search
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (!query.trim()) {
|
|
42
|
+
setSearchResults([]);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const timer = setTimeout(async () => {
|
|
46
|
+
setSearching(true);
|
|
47
|
+
try {
|
|
48
|
+
const r = await execute(configPath, 'searchSessions', { query: query.trim(), maxResults: 20 });
|
|
49
|
+
if (Array.isArray(r))
|
|
50
|
+
setSearchResults(r);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
setSearching(false);
|
|
54
|
+
}
|
|
55
|
+
}, 300);
|
|
56
|
+
return () => clearTimeout(timer);
|
|
57
|
+
}, [query, configPath]);
|
|
58
|
+
const isSearching = !!query.trim();
|
|
59
|
+
const filteredTasks = isSearching
|
|
60
|
+
? tasks.filter(t => String(t.prompt ?? '').toLowerCase().includes(query.toLowerCase()))
|
|
61
|
+
: tasks;
|
|
62
|
+
const filteredSessions = isSearching
|
|
63
|
+
? sessions.filter(s => s.firstMessage.toLowerCase().includes(query.toLowerCase()))
|
|
64
|
+
: sessions;
|
|
65
|
+
const handleNewTask = () => {
|
|
66
|
+
const text = newTaskPrompt.trim();
|
|
67
|
+
if (!text)
|
|
68
|
+
return;
|
|
69
|
+
onNewTask(text);
|
|
70
|
+
onClose();
|
|
71
|
+
};
|
|
72
|
+
return (_jsx("div", { ref: backdropRef, className: "fixed inset-0 z-50 flex items-start justify-center pt-[15vh] bg-black/60 backdrop-blur-sm", onClick: e => { if (e.target === backdropRef.current)
|
|
73
|
+
onClose(); }, children: _jsxs("div", { className: "w-full max-w-lg bg-zinc-900 border border-zinc-800 rounded-2xl shadow-2xl shadow-black/40 overflow-hidden flex flex-col max-h-[60vh]", children: [_jsxs("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-zinc-800", children: [_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "text-zinc-500 shrink-0", children: [_jsx("circle", { cx: "11", cy: "11", r: "8" }), _jsx("path", { d: "M21 21l-4.35-4.35" })] }), _jsx("input", { ref: inputRef, value: query, onChange: e => setQuery(e.target.value), placeholder: "Search tasks and sessions...", className: "flex-1 bg-transparent text-sm text-zinc-200 placeholder:text-zinc-600 focus:outline-none" }), searching && (_jsx("span", { className: "text-[10px] text-zinc-600 animate-pulse", children: "searching..." })), _jsx("button", { onClick: onClose, className: "text-zinc-600 hover:text-zinc-400 transition-colors", children: _jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M18 6L6 18M6 6l12 12" }) }) })] }), _jsxs("div", { className: "overflow-y-auto flex-1", children: [!isSearching && (_jsxs("div", { className: "flex flex-col gap-2 px-4 py-2.5 border-b border-zinc-800/60", children: [_jsx("textarea", { value: newTaskPrompt, onChange: e => setNewTaskPrompt(e.target.value), onKeyDown: e => { if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && newTaskPrompt.trim())
|
|
74
|
+
handleNewTask(); }, rows: 2, placeholder: "New task prompt...", className: "w-full bg-zinc-950 border border-zinc-800 rounded-lg px-3 py-2 text-xs text-zinc-200 resize-none focus:outline-none focus:border-violet-600/50 placeholder:text-zinc-700" }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { onClick: handleNewTask, disabled: !newTaskPrompt.trim(), className: "px-3 py-1.5 rounded-lg text-[11px] font-medium bg-violet-600 hover:bg-violet-500 text-white disabled:bg-zinc-800 disabled:text-zinc-600 transition-all shrink-0", children: "Create & add" }), _jsx("span", { className: "text-[10px] text-zinc-700", children: "Cmd+Enter" })] })] })), isSearching && searchResults.length > 0 && (_jsxs("div", { className: "py-1", children: [_jsx("div", { className: "px-4 py-1.5", children: _jsxs("span", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: ["Session matches (", searchResults.length, ")"] }) }), searchResults.map((r, i) => (_jsxs("button", { onClick: () => { onSelect(`session:${r.sessionId}`); onClose(); }, className: "flex flex-col gap-1 w-full px-4 py-2.5 text-left hover:bg-zinc-800/60 transition-colors", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-[10px] text-zinc-600 font-mono", children: r.date }), _jsx("span", { className: cn('text-[10px] font-medium', r.role === 'user' ? 'text-sky-500' : 'text-emerald-500'), children: r.role }), _jsx("span", { className: "text-[10px] text-zinc-700 ml-auto font-mono", children: r.score.toFixed(1) })] }), _jsx("span", { className: "text-xs text-zinc-400 line-clamp-2 leading-relaxed", children: r.snippet })] }, `sr-${i}`)))] })), filteredTasks.length > 0 && (_jsxs("div", { className: "py-1", children: [_jsx("div", { className: "px-4 py-1.5", children: _jsx("span", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: "Tasks" }) }), filteredTasks.map(t => (_jsxs("button", { onClick: () => { onSelect(t.$path); onClose(); }, className: "flex items-center gap-2.5 w-full px-4 py-2 text-left hover:bg-zinc-800/60 transition-colors", children: [_jsx(StatusDot, { status: t.status || 'pending' }), _jsx("span", { className: "text-xs text-zinc-300 truncate flex-1", children: String(t.prompt ?? '').slice(0, 80) }), _jsx("span", { className: "text-[10px] text-zinc-700 font-mono shrink-0", children: t.createdAt ? formatTime(t.createdAt) : '' })] }, t.$path)))] })), !isSearching && filteredSessions.length > 0 && (_jsxs("div", { className: "py-1 border-t border-zinc-800/60", children: [_jsx("div", { className: "px-4 py-1.5", children: _jsx("span", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: "Claude Code sessions" }) }), filteredSessions.slice(0, 20).map(s => (_jsxs("button", { onClick: () => { onSelect(`session:${s.id}`); onClose(); }, className: "flex items-center gap-2.5 w-full px-4 py-2 text-left hover:bg-zinc-800/60 transition-colors", children: [_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-zinc-600 shrink-0" }), _jsx("span", { className: "text-xs text-zinc-400 truncate flex-1", children: s.firstMessage }), _jsxs("span", { className: "text-[10px] text-zinc-700 font-mono shrink-0", children: [s.messageCount, "m"] }), _jsx("span", { className: "text-[10px] text-zinc-700 font-mono shrink-0", children: s.date.slice(5) })] }, s.id)))] })), filteredTasks.length === 0 && filteredSessions.length === 0 && searchResults.length === 0 && (_jsx("div", { className: "px-4 py-8 text-center text-xs text-zinc-600", children: isSearching ? 'No matches found' : 'No tasks or sessions available' }))] })] }) }));
|
|
75
|
+
}
|
|
76
|
+
// ── Session column viewer ──
|
|
77
|
+
function SessionColumn({ sessionId, configPath }) {
|
|
78
|
+
const [text, setText] = useState('');
|
|
79
|
+
const [loading, setLoading] = useState(true);
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
execute(configPath, 'readSession', { sessionId, maxLength: 50000 }).then(r => {
|
|
82
|
+
setText(typeof r === 'string' ? r : JSON.stringify(r));
|
|
83
|
+
setLoading(false);
|
|
84
|
+
});
|
|
85
|
+
}, [sessionId, configPath]);
|
|
86
|
+
if (loading) {
|
|
87
|
+
return _jsxs("div", { className: "p-4 text-zinc-600 text-xs animate-pulse", children: ["Loading session ", sessionId, "..."] });
|
|
88
|
+
}
|
|
89
|
+
const blocks = text.split(/\n\n(?=\[(?:user|assistant)\])/).filter(Boolean);
|
|
90
|
+
return (_jsx("div", { className: "flex flex-col gap-2 p-3 overflow-y-auto h-full", children: blocks.map((block, i) => {
|
|
91
|
+
const match = block.match(/^\[(user|assistant)\]\s*/);
|
|
92
|
+
if (!match)
|
|
93
|
+
return _jsx("pre", { className: "text-[11px] text-zinc-500 whitespace-pre-wrap", children: block }, i);
|
|
94
|
+
const role = match[1];
|
|
95
|
+
const content = block.slice(match[0].length);
|
|
96
|
+
return (_jsxs("div", { className: cn('rounded-lg px-3 py-2', role === 'user'
|
|
97
|
+
? 'bg-zinc-800/80 text-zinc-300 ml-6'
|
|
98
|
+
: 'bg-zinc-900/80 text-zinc-400 mr-4'), children: [_jsx("span", { className: cn('text-[9px] uppercase tracking-wider font-semibold mb-1 block', role === 'user' ? 'text-sky-500/70' : 'text-emerald-500/70'), children: role }), _jsx(LogRenderer, { text: content })] }, i));
|
|
99
|
+
}) }));
|
|
100
|
+
}
|
|
101
|
+
// ── Workspace Column ──
|
|
102
|
+
function WorkspaceColumn({ columnRef, configPath, onRemove }) {
|
|
103
|
+
const isSession = columnRef.startsWith('session:');
|
|
104
|
+
const sessionId = isSession ? columnRef.slice(8) : '';
|
|
105
|
+
const node = usePath(isSession ? '' : columnRef);
|
|
106
|
+
const label = isSession
|
|
107
|
+
? `session ${sessionId}`
|
|
108
|
+
: (node ? String(node.prompt ?? '').slice(0, 40) || columnRef.split('/').at(-1) : columnRef.split('/').at(-1));
|
|
109
|
+
const status = !isSession && node ? node.status || 'pending' : '';
|
|
110
|
+
return (_jsxs("div", { className: "flex-1 min-w-[340px] max-w-[50vw] flex flex-col border-r border-zinc-800 last:border-r-0", children: [_jsxs("div", { className: "flex items-center gap-2 px-3 py-2 bg-zinc-950 border-b border-zinc-800 shrink-0", children: [isSession ? (_jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-zinc-500 shrink-0" })) : (status && _jsx(StatusDot, { status: status })), _jsx("span", { className: "text-[11px] text-zinc-400 truncate flex-1 font-mono", children: label }), _jsx("button", { onClick: onRemove, className: "text-zinc-700 hover:text-red-400 transition-colors duration-200 p-0.5", title: "Remove column", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M18 6L6 18M6 6l12 12" }) }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto min-h-0", children: isSession ? (_jsx(SessionColumn, { sessionId: sessionId, configPath: configPath })) : node ? (_jsx(Render, { value: node })) : (_jsx("div", { className: "p-3 text-[11px] text-zinc-700 animate-pulse", children: "Loading..." })) })] }));
|
|
111
|
+
}
|
|
112
|
+
// ── Workspace View ──
|
|
113
|
+
const WorkspaceView = ({ value, ctx }) => {
|
|
114
|
+
const [showPicker, setShowPicker] = useState(false);
|
|
115
|
+
const path = ctx.path;
|
|
116
|
+
const ws = usePath(path, MetatronWorkspace);
|
|
117
|
+
const configPath = useMemo(() => path.replace(/\/workspaces\/[^/]+$/, ''), [path]);
|
|
118
|
+
const columns = value.columns;
|
|
119
|
+
const handleRemoveColumn = useCallback(async (taskPath) => {
|
|
120
|
+
await ws.removeColumn({ taskPath });
|
|
121
|
+
}, [ws]);
|
|
122
|
+
const handleAddColumn = useCallback(async (ref) => {
|
|
123
|
+
await ws.addColumn({ taskPath: ref });
|
|
124
|
+
}, [ws]);
|
|
125
|
+
const handleNewTask = useCallback(async (prompt) => {
|
|
126
|
+
// task action is on config service, not a typed class method
|
|
127
|
+
const result = await execute(configPath, 'task', { prompt });
|
|
128
|
+
if (result && typeof result === 'object' && 'taskPath' in result) {
|
|
129
|
+
await ws.addColumn({ taskPath: result.taskPath });
|
|
130
|
+
}
|
|
131
|
+
}, [configPath, ws]);
|
|
132
|
+
if (columns.length === 0) {
|
|
133
|
+
return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-4 h-64", children: [_jsx("div", { className: "w-10 h-10 rounded-xl bg-zinc-800 flex items-center justify-center", children: _jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", className: "text-zinc-600", children: [_jsx("rect", { x: "3", y: "3", width: "7", height: "18", rx: "1.5" }), _jsx("rect", { x: "14", y: "3", width: "7", height: "18", rx: "1.5" })] }) }), _jsxs("div", { className: "text-center", children: [_jsx("h2", { className: "text-sm font-medium text-zinc-300", children: String(value.name) || 'Workspace' }), _jsx("p", { className: "text-[11px] text-zinc-600 mt-0.5", children: "Add columns to compare tasks side by side" })] }), _jsx("button", { onClick: () => setShowPicker(true), className: "px-4 py-2 rounded-lg text-xs font-medium bg-violet-600 hover:bg-violet-500 text-white shadow-sm shadow-violet-600/20 transition-all duration-200", children: "Add column" }), showPicker && (_jsx(CommandPicker, { configPath: configPath, exclude: columns, onSelect: handleAddColumn, onNewTask: handleNewTask, onClose: () => setShowPicker(false) }))] }));
|
|
134
|
+
}
|
|
135
|
+
return (_jsxs("div", { className: "flex h-full w-full overflow-x-auto", children: [columns.map(ref => (_jsx(WorkspaceColumn, { columnRef: ref, configPath: configPath, onRemove: () => handleRemoveColumn(ref) }, ref))), _jsx("div", { className: "flex items-center justify-center w-12 shrink-0 border-l border-zinc-800/60", children: _jsx("button", { onClick: () => setShowPicker(true), className: "w-8 h-8 rounded-lg flex items-center justify-center text-zinc-700 hover:text-violet-400 hover:bg-violet-500/10 transition-all duration-200", title: "Add column", children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M12 5v14M5 12h14" }) }) }) }), showPicker && (_jsx(CommandPicker, { configPath: configPath, exclude: columns, onSelect: handleAddColumn, onNewTask: handleNewTask, onClose: () => setShowPicker(false) }))] }));
|
|
136
|
+
};
|
|
137
|
+
register('metatron.workspace', 'react', WorkspaceView);
|
|
138
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../../metatron/views/workspace.tsx"],"names":[],"mappings":"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"}
|