@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.
Files changed (135) hide show
  1. package/agent/client.ts +2 -0
  2. package/agent/guardian.ts +492 -0
  3. package/agent/seed.ts +74 -0
  4. package/agent/server.ts +4 -0
  5. package/agent/service.ts +644 -0
  6. package/agent/types.ts +184 -0
  7. package/agent/view.tsx +431 -0
  8. package/dist/agent/client.d.ts +3 -0
  9. package/dist/agent/client.d.ts.map +1 -0
  10. package/dist/agent/client.js +3 -0
  11. package/dist/agent/client.js.map +1 -0
  12. package/dist/agent/guardian.d.ts +47 -0
  13. package/dist/agent/guardian.d.ts.map +1 -0
  14. package/dist/agent/guardian.js +452 -0
  15. package/dist/agent/guardian.js.map +1 -0
  16. package/dist/agent/seed.d.ts +2 -0
  17. package/dist/agent/seed.d.ts.map +1 -0
  18. package/dist/agent/seed.js +68 -0
  19. package/dist/agent/seed.js.map +1 -0
  20. package/dist/agent/server.d.ts +5 -0
  21. package/dist/agent/server.d.ts.map +1 -0
  22. package/dist/agent/server.js +5 -0
  23. package/dist/agent/server.js.map +1 -0
  24. package/dist/agent/service.d.ts +2 -0
  25. package/dist/agent/service.d.ts.map +1 -0
  26. package/dist/agent/service.js +556 -0
  27. package/dist/agent/service.js.map +1 -0
  28. package/dist/agent/types.d.ts +115 -0
  29. package/dist/agent/types.d.ts.map +1 -0
  30. package/dist/agent/types.js +168 -0
  31. package/dist/agent/types.js.map +1 -0
  32. package/dist/agent/view.d.ts +2 -0
  33. package/dist/agent/view.d.ts.map +1 -0
  34. package/dist/agent/view.js +137 -0
  35. package/dist/agent/view.js.map +1 -0
  36. package/dist/mcp/mcp-server.d.ts +16 -0
  37. package/dist/mcp/mcp-server.d.ts.map +1 -0
  38. package/dist/mcp/mcp-server.js +344 -0
  39. package/dist/mcp/mcp-server.js.map +1 -0
  40. package/dist/mcp/server.d.ts +3 -0
  41. package/dist/mcp/server.d.ts.map +1 -0
  42. package/dist/mcp/server.js +3 -0
  43. package/dist/mcp/server.js.map +1 -0
  44. package/dist/mcp/service.d.ts +2 -0
  45. package/dist/mcp/service.d.ts.map +1 -0
  46. package/dist/mcp/service.js +16 -0
  47. package/dist/mcp/service.js.map +1 -0
  48. package/dist/mcp/types.d.ts +4 -0
  49. package/dist/mcp/types.d.ts.map +1 -0
  50. package/dist/mcp/types.js +6 -0
  51. package/dist/mcp/types.js.map +1 -0
  52. package/dist/metatron/claude.d.ts +30 -0
  53. package/dist/metatron/claude.d.ts.map +1 -0
  54. package/dist/metatron/claude.js +201 -0
  55. package/dist/metatron/claude.js.map +1 -0
  56. package/dist/metatron/client.d.ts +3 -0
  57. package/dist/metatron/client.d.ts.map +1 -0
  58. package/dist/metatron/client.js +3 -0
  59. package/dist/metatron/client.js.map +1 -0
  60. package/dist/metatron/mentions.d.ts +9 -0
  61. package/dist/metatron/mentions.d.ts.map +1 -0
  62. package/dist/metatron/mentions.js +21 -0
  63. package/dist/metatron/mentions.js.map +1 -0
  64. package/dist/metatron/permissions.d.ts +16 -0
  65. package/dist/metatron/permissions.d.ts.map +1 -0
  66. package/dist/metatron/permissions.js +52 -0
  67. package/dist/metatron/permissions.js.map +1 -0
  68. package/dist/metatron/seed.d.ts +2 -0
  69. package/dist/metatron/seed.d.ts.map +1 -0
  70. package/dist/metatron/seed.js +41 -0
  71. package/dist/metatron/seed.js.map +1 -0
  72. package/dist/metatron/server.d.ts +4 -0
  73. package/dist/metatron/server.d.ts.map +1 -0
  74. package/dist/metatron/server.js +4 -0
  75. package/dist/metatron/server.js.map +1 -0
  76. package/dist/metatron/service.d.ts +2 -0
  77. package/dist/metatron/service.d.ts.map +1 -0
  78. package/dist/metatron/service.js +361 -0
  79. package/dist/metatron/service.js.map +1 -0
  80. package/dist/metatron/types.d.ts +76 -0
  81. package/dist/metatron/types.d.ts.map +1 -0
  82. package/dist/metatron/types.js +112 -0
  83. package/dist/metatron/types.js.map +1 -0
  84. package/dist/metatron/view.d.ts +4 -0
  85. package/dist/metatron/view.d.ts.map +1 -0
  86. package/dist/metatron/view.js +5 -0
  87. package/dist/metatron/view.js.map +1 -0
  88. package/dist/metatron/views/config.d.ts +2 -0
  89. package/dist/metatron/views/config.d.ts.map +1 -0
  90. package/dist/metatron/views/config.js +116 -0
  91. package/dist/metatron/views/config.js.map +1 -0
  92. package/dist/metatron/views/log.d.ts +18 -0
  93. package/dist/metatron/views/log.d.ts.map +1 -0
  94. package/dist/metatron/views/log.js +224 -0
  95. package/dist/metatron/views/log.js.map +1 -0
  96. package/dist/metatron/views/shared.d.ts +13 -0
  97. package/dist/metatron/views/shared.d.ts.map +1 -0
  98. package/dist/metatron/views/shared.js +33 -0
  99. package/dist/metatron/views/shared.js.map +1 -0
  100. package/dist/metatron/views/task.d.ts +4 -0
  101. package/dist/metatron/views/task.d.ts.map +1 -0
  102. package/dist/metatron/views/task.js +106 -0
  103. package/dist/metatron/views/task.js.map +1 -0
  104. package/dist/metatron/views/workspace.d.ts +2 -0
  105. package/dist/metatron/views/workspace.d.ts.map +1 -0
  106. package/dist/metatron/views/workspace.js +138 -0
  107. package/dist/metatron/views/workspace.js.map +1 -0
  108. package/mcp/mcp-server.ts +393 -0
  109. package/mcp/server.ts +2 -0
  110. package/mcp/service.ts +18 -0
  111. package/mcp/types.ts +6 -0
  112. package/metatron/CLAUDE.md +22 -0
  113. package/metatron/claude.ts +258 -0
  114. package/metatron/client.ts +2 -0
  115. package/metatron/mentions.ts +31 -0
  116. package/metatron/permissions.ts +76 -0
  117. package/metatron/seed.ts +50 -0
  118. package/metatron/server.ts +3 -0
  119. package/metatron/service.ts +406 -0
  120. package/metatron/types.ts +120 -0
  121. package/metatron/view.tsx +4 -0
  122. package/metatron/views/config.tsx +408 -0
  123. package/metatron/views/log.tsx +412 -0
  124. package/metatron/views/shared.tsx +40 -0
  125. package/metatron/views/task.tsx +255 -0
  126. package/metatron/views/workspace.tsx +418 -0
  127. package/package.json +6 -2
  128. package/dist/mindmap/radial-tree.d.ts +0 -14
  129. package/dist/mindmap/radial-tree.d.ts.map +0 -1
  130. package/dist/mindmap/radial-tree.js +0 -184
  131. package/dist/mindmap/radial-tree.js.map +0 -1
  132. package/dist/mindmap/use-tree-data.d.ts +0 -14
  133. package/dist/mindmap/use-tree-data.d.ts.map +0 -1
  134. package/dist/mindmap/use-tree-data.js +0 -95
  135. package/dist/mindmap/use-tree-data.js.map +0 -1
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { register } from '@treenity/core';
3
+ import { execute, set, useChildren, useNavigate } from '@treenity/react/hooks';
4
+ import { cn } from '@treenity/react/lib/utils';
5
+ import { useCallback, useState } from 'react';
6
+ import { LogRenderer } from './log';
7
+ import { formatTime, StatusDot } from './shared';
8
+ // ── Permission Manager ──
9
+ function PermissionManager({ configPath }) {
10
+ const permissions = useChildren(`${configPath}/permissions`, { watch: true, watchNew: true });
11
+ const [adding, setAdding] = useState(false);
12
+ const [tool, setTool] = useState('');
13
+ const [policy, setPolicy] = useState('deny');
14
+ const rules = (permissions ?? []).filter(n => n.$type === 'metatron.permission');
15
+ const handleAdd = useCallback(async () => {
16
+ if (!tool.trim())
17
+ return;
18
+ const trpc = (await import('@treenity/react/trpc')).trpc;
19
+ const { createNode } = await import('@treenity/core');
20
+ const id = `rule-${Date.now()}`;
21
+ const path = `${configPath}/permissions/${id}`;
22
+ await trpc.set.mutate({ node: createNode(path, 'metatron.permission', {
23
+ tool: tool.trim(),
24
+ policy,
25
+ createdAt: Date.now(),
26
+ }) });
27
+ setTool('');
28
+ setAdding(false);
29
+ }, [tool, policy, configPath]);
30
+ const handleRemove = useCallback(async (path) => {
31
+ const trpc = (await import('@treenity/react/trpc')).trpc;
32
+ await trpc.remove.mutate({ path });
33
+ }, []);
34
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: "Permissions" }), _jsx("button", { onClick: () => setAdding(!adding), className: "ml-auto text-[11px] text-zinc-600 hover:text-violet-400 transition-colors duration-200", children: adding ? 'cancel' : '+ rule' })] }), adding && (_jsxs("div", { className: "flex gap-2 items-end", children: [_jsx("div", { className: "flex-1", children: _jsx("input", { value: tool, onChange: e => setTool(e.target.value), onKeyDown: e => { if (e.key === 'Enter')
35
+ handleAdd(); }, placeholder: "mcp__treenity__remove_node", className: "w-full bg-zinc-950 border border-zinc-800 rounded-lg px-3 py-1.5 text-xs text-zinc-200 focus:outline-none focus:border-violet-600/50 placeholder:text-zinc-700" }) }), _jsxs("select", { value: policy, onChange: e => setPolicy(e.target.value), className: "bg-zinc-950 border border-zinc-800 rounded-lg px-2 py-1.5 text-xs text-zinc-300", children: [_jsx("option", { value: "allow", children: "allow" }), _jsx("option", { value: "deny", children: "deny" })] }), _jsx("button", { onClick: handleAdd, disabled: !tool.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: "Add" })] })), rules.length > 0 ? (_jsx("div", { className: "flex flex-col gap-1", children: rules.map(r => (_jsxs("div", { className: "flex items-center gap-2 px-3 py-1.5 rounded-lg bg-zinc-950/60 border border-zinc-800/60", children: [_jsx("span", { className: cn('text-[10px] font-semibold uppercase px-1.5 py-0.5 rounded', r.policy === 'deny' ? 'bg-red-500/15 text-red-400' : 'bg-emerald-500/15 text-emerald-400'), children: String(r.policy) }), _jsx("span", { className: "text-xs text-zinc-300 font-mono truncate flex-1", children: String(r.tool) }), r.pathPattern ? (_jsx("span", { className: "text-[10px] text-zinc-600 font-mono truncate", children: String(r.pathPattern) })) : null, _jsx("button", { onClick: () => handleRemove(r.$path), className: "text-zinc-700 hover:text-red-400 transition-colors p-0.5 shrink-0", title: "Remove rule", children: _jsx("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M18 6L6 18M6 6l12 12" }) }) })] }, r.$path))) })) : (_jsx("p", { className: "text-[11px] text-zinc-700 italic", children: "No rules \u2014 all MCP tools allowed" }))] }));
36
+ }
37
+ // ── Done section ──
38
+ function DoneSection({ tasks }) {
39
+ const [open, setOpen] = useState(false);
40
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("button", { onClick: () => setOpen(!open), className: "flex items-center gap-1.5 text-[10px] text-zinc-600 uppercase tracking-wider font-medium hover:text-zinc-400 transition-colors text-left", children: [_jsx("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", className: cn('transition-transform duration-200', open && 'rotate-90'), children: _jsx("path", { d: "M9 18l6-6-6-6" }) }), "Completed (", tasks.length, ")"] }), open && (_jsx("div", { className: "flex flex-col gap-1.5", children: tasks.map(task => _jsx(TaskRowInline, { task: task }, String(task.$path))) }))] }));
41
+ }
42
+ // Inline simplified TaskRow for DoneSection (avoids circular import)
43
+ function TaskRowInline({ task }) {
44
+ const status = task.status || 'pending';
45
+ const prompt = task.prompt || '';
46
+ const result = task.result || '';
47
+ const taskLog = task.log || '';
48
+ const hasLog = !!taskLog;
49
+ const [expanded, setExpanded] = useState(false);
50
+ const [tab, setTab] = useState(hasLog ? 'log' : 'result');
51
+ const time = task.createdAt ? formatTime(task.createdAt) : '';
52
+ 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 }), _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 ? 'bg-zinc-800 text-zinc-200' : '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') }) })] }))] }));
53
+ }
54
+ // ── Config View ──
55
+ const ConfigView = ({ value, ctx }) => {
56
+ const navigate = useNavigate();
57
+ const path = ctx.path;
58
+ const children = useChildren(`${path}/tasks`, { watch: true, watchNew: true });
59
+ const wsChildren = useChildren(`${path}/workspaces`, { watch: true, watchNew: true });
60
+ const templateChildren = useChildren(`${path}/templates`, { watch: true });
61
+ const [prompt, setPrompt] = useState('');
62
+ const [sending, setSending] = useState(false);
63
+ const [showConfig, setShowConfig] = useState(false);
64
+ const allTasks = (children ?? [])
65
+ .filter(c => c.$type === 'metatron.task')
66
+ .sort((a, b) => (b.createdAt || 0) - (a.createdAt || 0));
67
+ const workspaces = (wsChildren ?? []).filter(c => c.$type === 'metatron.workspace');
68
+ const templates = (templateChildren ?? []).filter(c => c.$type === 'metatron.template' && c.prompt);
69
+ const active = allTasks.filter(t => t.status !== 'done');
70
+ const done = allTasks.filter(t => t.status === 'done');
71
+ const handleRun = useCallback(async () => {
72
+ const text = prompt.trim();
73
+ if (!text)
74
+ return;
75
+ setSending(true);
76
+ try {
77
+ await execute(path, 'task', { prompt: text });
78
+ setPrompt('');
79
+ }
80
+ finally {
81
+ setSending(false);
82
+ }
83
+ }, [prompt, path]);
84
+ const handleKeyDown = useCallback((e) => {
85
+ if (e.key === 'Enter' && (e.metaKey || e.ctrlKey))
86
+ handleRun();
87
+ }, [handleRun]);
88
+ const node = ctx.node;
89
+ const onSystemPromptChange = useCallback((val) => {
90
+ set({ ...node, systemPrompt: val });
91
+ }, [node]);
92
+ const clearSession = useCallback(() => {
93
+ set({ ...node, sessionId: '' });
94
+ }, [node]);
95
+ const handleNewWorkspace = useCallback(async () => {
96
+ const name = window.prompt('Workspace name:');
97
+ if (!name?.trim())
98
+ return;
99
+ const trpc = (await import('@treenity/react/trpc')).trpc;
100
+ const { createNode } = await import('@treenity/core');
101
+ const id = `ws-${Date.now()}`;
102
+ const wsPath = `${path}/workspaces/${id}`;
103
+ await trpc.set.mutate({ node: createNode(wsPath, 'metatron.workspace', {
104
+ name: name.trim(),
105
+ columns: [],
106
+ }) });
107
+ navigate(wsPath);
108
+ }, [path]);
109
+ const systemPrompt = String(value.systemPrompt ?? '');
110
+ const hasSession = !!value.sessionId;
111
+ return (_jsxs("div", { className: "flex flex-col gap-6 p-5 max-w-2xl mx-auto", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "w-8 h-8 rounded-lg bg-gradient-to-br from-violet-600 to-indigo-700 flex items-center justify-center text-white text-sm font-bold shadow-lg shadow-violet-600/20", children: "M" }), _jsxs("div", { className: "flex-1", children: [_jsx("h1", { className: "text-base font-semibold text-zinc-100 tracking-tight", children: "Metatron" }), _jsx("p", { className: "text-[11px] text-zinc-500", children: "AI task orchestrator" })] }), _jsx("button", { onClick: () => setShowConfig(!showConfig), className: cn('w-7 h-7 rounded-md flex items-center justify-center text-zinc-500 transition-all duration-200', showConfig ? 'bg-zinc-800 text-zinc-300' : 'hover:bg-zinc-800/60 hover:text-zinc-400'), title: "Settings", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "3" }), _jsx("path", { d: "M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42" })] }) })] }), showConfig && (_jsxs("div", { className: "flex flex-col gap-3 p-4 rounded-xl bg-zinc-900/80 border border-zinc-800", children: [_jsxs("div", { className: "flex items-center gap-2", children: [hasSession ? (_jsxs("span", { className: "flex items-center gap-1.5 text-[11px] text-zinc-500 font-mono", children: ["session ", value.sessionId.slice(0, 8), _jsx("button", { onClick: clearSession, className: "text-zinc-600 hover:text-red-400 transition-colors", title: "Clear session", 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("span", { className: "text-[11px] text-zinc-600", children: "no session" })), value.lastRun ? (_jsxs("span", { className: "text-[11px] text-zinc-600 ml-auto", children: ["last run ", formatTime(value.lastRun)] })) : null] }), _jsx("label", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: "System prompt" }), _jsx("textarea", { value: systemPrompt, onChange: e => onSystemPromptChange(e.target.value), rows: 10, placeholder: "Metatron operating instructions...", className: "bg-zinc-950 border border-zinc-800 rounded-lg px-3 py-2.5 text-xs font-mono text-zinc-300 resize-y focus:outline-none focus:border-violet-600/50 focus:ring-1 focus:ring-violet-600/20 transition-all duration-200 placeholder:text-zinc-700" }), _jsx(PermissionManager, { configPath: path })] })), (workspaces.length > 0 || true) && (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: "Workspaces" }), _jsx("button", { onClick: handleNewWorkspace, className: "ml-auto text-[11px] text-zinc-600 hover:text-violet-400 transition-colors duration-200", children: "+ new" })] }), workspaces.length > 0 ? (_jsx("div", { className: "flex gap-2 overflow-x-auto pb-1", children: workspaces.map(ws => (_jsxs("button", { onClick: () => navigate(ws.$path), className: "flex flex-col gap-1 px-4 py-3 rounded-xl bg-zinc-900/60 border border-zinc-800 hover:border-zinc-700 hover:bg-zinc-800/60 transition-all duration-200 min-w-[140px] group", children: [_jsx("span", { className: "text-sm text-zinc-300 font-medium truncate group-hover:text-zinc-100 transition-colors", children: String(ws.name) || ws.$path.split('/').at(-1) }), _jsxs("span", { className: "text-[10px] text-zinc-600 font-mono", children: [Array.isArray(ws.columns) ? ws.columns.length : 0, " columns"] })] }, ws.$path))) })) : (_jsx("p", { className: "text-[11px] text-zinc-700 italic", children: "No workspaces yet" }))] })), templates.length > 0 && (_jsx("div", { className: "flex gap-1.5 overflow-x-auto pb-0.5", children: templates.map(t => (_jsx("button", { onClick: () => setPrompt(String(t.prompt)), className: "px-3 py-1.5 rounded-lg text-[11px] font-medium bg-zinc-900/60 border border-zinc-800 text-zinc-400 hover:border-violet-600/40 hover:text-violet-300 transition-all duration-200 whitespace-nowrap shrink-0", children: String(t.name) || String(t.prompt).slice(0, 30) }, t.$path))) })), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "relative", children: [_jsx("textarea", { value: prompt, onChange: e => setPrompt(e.target.value), onKeyDown: handleKeyDown, rows: 2, placeholder: "What should Metatron do?", className: "w-full bg-zinc-900/60 border border-zinc-800 rounded-xl px-4 py-3 pr-20 text-sm text-zinc-200 resize-y focus:outline-none focus:border-violet-600/50 focus:ring-1 focus:ring-violet-600/20 transition-all duration-200 placeholder:text-zinc-600" }), _jsx("button", { onClick: handleRun, disabled: sending || !prompt.trim(), className: cn('absolute right-2 bottom-2 px-3.5 py-1.5 rounded-lg text-xs font-semibold transition-all duration-200', prompt.trim()
112
+ ? 'bg-violet-600 hover:bg-violet-500 text-white shadow-sm shadow-violet-600/20'
113
+ : 'bg-zinc-800 text-zinc-600 cursor-not-allowed'), children: sending ? '...' : 'Run' })] }), _jsx("span", { className: "text-[10px] text-zinc-700 pl-1", children: "Cmd+Enter to send" })] }), active.length > 0 && (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("span", { className: "text-[10px] text-zinc-600 uppercase tracking-wider font-medium", children: ["Active (", active.length, ")"] }), _jsx("div", { className: "flex flex-col gap-1.5", children: active.map(task => _jsx(TaskRowInline, { task: task }, String(task.$path))) })] })), done.length > 0 && _jsx(DoneSection, { tasks: done })] }));
114
+ };
115
+ register('metatron.config', 'react', ConfigView);
116
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../metatron/views/config.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare function Md({ text, className }: {
2
+ text: string;
3
+ className?: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ export declare function CollapsibleBlock({ label, labelClass, preview, children, wrap, forceOpen, defaultOpen }: {
6
+ label: React.ReactNode;
7
+ labelClass?: string;
8
+ preview?: string;
9
+ children: React.ReactNode;
10
+ wrap: boolean;
11
+ forceOpen?: boolean;
12
+ defaultOpen?: boolean;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ export declare function LogRenderer({ text, className }: {
15
+ text: string;
16
+ className?: string;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../metatron/views/log.tsx"],"names":[],"mappings":"AA0NA,wBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAM3E;AAaD,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;IACvG,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CAqDA;AAID,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CA6GpF"}
@@ -0,0 +1,224 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useNavigate } from '@treenity/react/hooks';
3
+ import { minimd } from '@treenity/react/lib/minimd';
4
+ import { cn } from '@treenity/react/lib/utils';
5
+ import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
6
+ const BLOCK_RE = /\n?\[(tool|thinking|result|interrupted)(?: (\d\d:\d\d:\d\d))?\](?: ([^\n]*))?\n?/;
7
+ function parseLog(raw) {
8
+ if (typeof raw !== 'string' || !raw)
9
+ return [];
10
+ const blocks = [];
11
+ let rest = raw;
12
+ while (rest) {
13
+ const m = BLOCK_RE.exec(rest);
14
+ if (!m) {
15
+ if (rest.trim())
16
+ blocks.push({ type: 'text', content: rest.trim() });
17
+ break;
18
+ }
19
+ const before = rest.slice(0, m.index).trim();
20
+ if (before)
21
+ blocks.push({ type: 'text', content: before });
22
+ const tag = m[1];
23
+ const time = m[2] || undefined; // HH:mm:ss or undefined
24
+ const inline = m[3] ?? '';
25
+ rest = rest.slice(m.index + m[0].length);
26
+ if (tag === 'tool') {
27
+ // Consume everything until next block marker (JSON input is multi-line)
28
+ const nextBlock = BLOCK_RE.exec(rest);
29
+ const input = nextBlock ? rest.slice(0, nextBlock.index) : rest;
30
+ rest = nextBlock ? rest.slice(nextBlock.index) : '';
31
+ blocks.push({ type: 'tool', name: inline, input: input.trim(), time });
32
+ }
33
+ else if (tag === 'thinking') {
34
+ const nextBlock = BLOCK_RE.exec(rest);
35
+ const content = nextBlock ? rest.slice(0, nextBlock.index) : rest;
36
+ rest = nextBlock ? rest.slice(nextBlock.index) : '';
37
+ blocks.push({ type: 'thinking', content: content.trim(), time });
38
+ }
39
+ else if (tag === 'result') {
40
+ const nextBlock = BLOCK_RE.exec(rest);
41
+ const content = inline
42
+ ? (nextBlock ? inline + '\n' + rest.slice(0, nextBlock.index) : inline + '\n' + rest)
43
+ : (nextBlock ? rest.slice(0, nextBlock.index) : rest);
44
+ rest = nextBlock ? rest.slice(nextBlock.index) : '';
45
+ blocks.push({ type: 'result', content: content.trim(), time });
46
+ }
47
+ else if (tag === 'interrupted') {
48
+ blocks.push({ type: 'interrupted', time });
49
+ }
50
+ }
51
+ return blocks;
52
+ }
53
+ // ── Linkified text (clickable /paths) ──
54
+ const PATH_RE = /(?:^|\s)(\/[\w./-]+)/g;
55
+ function Linkified({ text }) {
56
+ const navigate = useNavigate();
57
+ const parts = [];
58
+ let lastIndex = 0;
59
+ for (const match of text.matchAll(PATH_RE)) {
60
+ const path = match[1];
61
+ const start = match.index + match[0].indexOf(path);
62
+ if (start > lastIndex)
63
+ parts.push(text.slice(lastIndex, start));
64
+ parts.push(_jsx("button", { onClick: () => navigate(path), className: "text-violet-400 hover:text-violet-300 hover:underline transition-colors", children: path }, `${start}-${path}`));
65
+ lastIndex = match.index + match[0].length;
66
+ }
67
+ if (lastIndex < text.length)
68
+ parts.push(text.slice(lastIndex));
69
+ return _jsx(_Fragment, { children: parts.length ? parts : text });
70
+ }
71
+ // ── Code syntax highlighting ──
72
+ // XXX: BAD one, use general lib
73
+ const TOKEN = new RegExp([
74
+ '(\\/\\/[^\\n]*)', // 0: comments
75
+ '(\'(?:[^\'\\\\]|\\\\.)*\'|"(?:[^"\\\\]|\\\\.)*"|`(?:[^`\\\\]|\\\\.)*`)', // 1: strings
76
+ '\\b(import|export|from|const|let|var|type|interface|class|function|async|await|return|if|else|for|of|in|while|new|throw|try|catch|finally|default|extends|implements|as|typeof|instanceof)\\b', // 2: keywords
77
+ '\\b(string|number|boolean|void|null|undefined|true|false|any|unknown|never|Promise|Record|Map|Set|Array)\\b', // 3: types
78
+ '(\\b\\d+(?:\\.\\d+)?\\b)', // 4: numbers
79
+ ].join('|'), 'g');
80
+ const TOKEN_CLS = ['text-zinc-600', 'text-emerald-400', 'text-violet-400', 'text-sky-400', 'text-amber-400'];
81
+ function colorize(code) {
82
+ const nodes = [];
83
+ let last = 0;
84
+ let k = 0;
85
+ for (const m of code.matchAll(TOKEN)) {
86
+ if (m.index > last)
87
+ nodes.push(_jsx("span", { className: "text-zinc-300", children: code.slice(last, m.index) }, k++));
88
+ const gi = m.slice(1).findIndex(g => g !== undefined);
89
+ nodes.push(_jsx("span", { className: TOKEN_CLS[gi] || 'text-zinc-300', children: m[0] }, k++));
90
+ last = m.index + m[0].length;
91
+ }
92
+ if (last < code.length)
93
+ nodes.push(_jsx("span", { className: "text-zinc-300", children: code.slice(last) }, k++));
94
+ return nodes;
95
+ }
96
+ function CodeResult({ text }) {
97
+ const rendered = useMemo(() => {
98
+ return text.split('\n').map((line, i) => {
99
+ const ln = line.match(/^(\s*\d+→)(.*)/);
100
+ return (_jsx("div", { children: ln ? _jsxs(_Fragment, { children: [_jsx("span", { className: "text-zinc-700 select-none", children: ln[1] }), colorize(ln[2])] }) : colorize(line) }, i));
101
+ });
102
+ }, [text]);
103
+ return _jsx("pre", { className: "font-mono text-[11px] leading-snug", children: rendered });
104
+ }
105
+ // ── Markdown content ──
106
+ // XXX: rewrite
107
+ function isJson(s) {
108
+ const t = s.trim();
109
+ return (t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'));
110
+ }
111
+ // ── JSON tree viewer ──
112
+ function JsonValue({ value, depth = 0 }) {
113
+ if (value === null)
114
+ return _jsx("span", { className: "text-zinc-600", children: "null" });
115
+ if (value === undefined)
116
+ return _jsx("span", { className: "text-zinc-600", children: "undefined" });
117
+ if (typeof value === 'boolean')
118
+ return _jsx("span", { className: "text-amber-400", children: String(value) });
119
+ if (typeof value === 'number')
120
+ return _jsx("span", { className: "text-sky-400", children: value });
121
+ if (typeof value === 'string') {
122
+ if (value.length > 200) {
123
+ return _jsx(CollapsibleJson, { label: `"${value.slice(0, 60)}…" (${value.length})`, className: "text-emerald-400", children: value });
124
+ }
125
+ return _jsxs("span", { className: "text-emerald-400", children: ["\"", value, "\""] });
126
+ }
127
+ if (Array.isArray(value)) {
128
+ if (value.length === 0)
129
+ return _jsx("span", { className: "text-zinc-500", children: "[]" });
130
+ return (_jsx(CollapsibleJson, { label: `Array(${value.length})`, className: "text-zinc-400", defaultOpen: depth < 2, children: _jsx("div", { className: "pl-3 border-l border-zinc-800/60", children: value.map((item, i) => (_jsxs("div", { className: "flex gap-1", children: [_jsxs("span", { className: "text-zinc-600 shrink-0 select-none", children: [i, ":"] }), _jsx(JsonValue, { value: item, depth: depth + 1 })] }, i))) }) }));
131
+ }
132
+ if (typeof value === 'object') {
133
+ const entries = Object.entries(value);
134
+ if (entries.length === 0)
135
+ return _jsx("span", { className: "text-zinc-500", children: '{}' });
136
+ return (_jsx(CollapsibleJson, { label: `{${entries.length}}`, className: "text-zinc-400", defaultOpen: depth < 2, children: _jsx("div", { className: "pl-3 border-l border-zinc-800/60", children: entries.map(([k, v]) => (_jsxs("div", { className: "flex gap-1", children: [_jsxs("span", { className: "text-violet-400/80 shrink-0", children: [k, ":"] }), _jsx(JsonValue, { value: v, depth: depth + 1 })] }, k))) }) }));
137
+ }
138
+ return _jsx("span", { className: "text-zinc-400", children: String(value) });
139
+ }
140
+ function CollapsibleJson({ label, className, defaultOpen = false, children }) {
141
+ const [open, setOpen] = useState(defaultOpen);
142
+ return (_jsxs("span", { children: [_jsxs("button", { onClick: () => setOpen(!open), className: cn('hover:underline', className), children: [_jsx("svg", { width: "8", height: "8", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", className: cn('inline mr-0.5 transition-transform duration-100', open && 'rotate-90'), children: _jsx("path", { d: "M9 18l6-6-6-6" }) }), label] }), open && _jsx("div", { className: "mt-0.5", children: children })] }));
143
+ }
144
+ function JsonTree({ text, className }) {
145
+ const parsed = useMemo(() => {
146
+ try {
147
+ return JSON.parse(text);
148
+ }
149
+ catch {
150
+ return null;
151
+ }
152
+ }, [text]);
153
+ if (parsed === null)
154
+ return null;
155
+ return (_jsx("div", { className: cn('font-mono text-[11px] leading-relaxed', className), children: _jsx(JsonValue, { value: parsed }) }));
156
+ }
157
+ export function Md({ text, className }) {
158
+ const json = isJson(text);
159
+ const html = useMemo(() => json ? '' : minimd(text), [text, json]);
160
+ if (json)
161
+ return _jsx(JsonTree, { text: text, className: className });
162
+ return _jsx("div", { className: cn('minimd', className), dangerouslySetInnerHTML: { __html: html } });
163
+ }
164
+ // ── Collapsible block ──
165
+ // forceOpen syncs state on change but allows individual toggle after
166
+ function truncate(s, max = 80) {
167
+ const line = s.split('\n')[0];
168
+ return line.length > max ? line.slice(0, max) + '...' : line;
169
+ }
170
+ // Height threshold: below this the label stays inline (left), above it goes on top
171
+ const LABEL_TOP_THRESHOLD = 120;
172
+ export function CollapsibleBlock({ label, labelClass, preview, children, wrap, forceOpen, defaultOpen }) {
173
+ const [isOpen, setIsOpen] = useState(defaultOpen ?? false);
174
+ const [labelTop, setLabelTop] = useState(false);
175
+ const contentRef = useRef(null);
176
+ // Sync with parent fold/unfold — but user can override after
177
+ useEffect(() => {
178
+ if (forceOpen !== undefined)
179
+ setIsOpen(forceOpen);
180
+ }, [forceOpen]);
181
+ // One-time measurement after content renders — decide label position
182
+ useLayoutEffect(() => {
183
+ if (isOpen && contentRef.current) {
184
+ setLabelTop(contentRef.current.scrollHeight > LABEL_TOP_THRESHOLD);
185
+ }
186
+ }, [isOpen]);
187
+ return (_jsxs("div", { className: cn(isOpen && !labelTop && 'flex items-start'), children: [_jsxs("button", { onClick: () => setIsOpen(!isOpen), className: cn('flex items-center gap-1.5 px-2 py-1 text-left text-xs font-medium transition-colors rounded shrink-0', isOpen && !labelTop && 'w-auto', !isOpen && 'w-full', labelClass), children: [_jsx("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", className: cn('shrink-0 transition-transform duration-150', isOpen && 'rotate-90'), children: _jsx("path", { d: "M9 18l6-6-6-6" }) }), label, !isOpen && preview && (_jsx("span", { className: "text-zinc-600 font-mono text-[10px] truncate ml-1 flex-1", children: preview }))] }), isOpen && (_jsx("div", { ref: contentRef, className: cn('py-1 text-xs leading-relaxed max-h-[40vh] overflow-y-auto flex-1 min-w-0', labelTop ? 'pl-4 pr-1' : 'pl-2 pr-1', wrap ? 'whitespace-pre-wrap break-words' : 'whitespace-pre overflow-x-auto'), children: children }))] }));
188
+ }
189
+ // ── Log renderer ──
190
+ export function LogRenderer({ text, className }) {
191
+ const blocks = useMemo(() => parseLog(text), [text]);
192
+ const [wrap, setWrap] = useState(true);
193
+ const [expandAll, setExpandAll] = useState(undefined);
194
+ const bottomRef = useRef(null);
195
+ // Auto-scroll to bottom when new blocks arrive
196
+ useEffect(() => {
197
+ bottomRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
198
+ }, [blocks.length]);
199
+ if (!blocks.length)
200
+ return _jsx("pre", { className: className, children: "No output yet" });
201
+ const hasCollapsible = blocks.some(b => b.type === 'tool' || b.type === 'result' || b.type === 'thinking');
202
+ return (_jsxs("div", { className: cn('flex flex-col gap-1', className), children: [_jsxs("div", { className: "flex justify-end gap-1 px-1", children: [hasCollapsible && (_jsx("button", { onClick: () => setExpandAll(prev => !prev), className: "text-[11px] text-zinc-600 hover:text-zinc-400 transition-colors font-mono px-1.5 py-0.5 rounded border border-zinc-800/60 hover:border-zinc-700", children: expandAll ? 'fold' : 'unfold' })), _jsx("button", { onClick: () => setWrap(!wrap), className: "text-[11px] text-zinc-600 hover:text-zinc-400 transition-colors font-mono px-1.5 py-0.5 rounded border border-zinc-800/60 hover:border-zinc-700", title: wrap ? 'Unwrap lines' : 'Wrap lines', children: wrap ? 'unwrap' : 'wrap' })] }), blocks.map((block, i) => {
203
+ const isRecent = i >= blocks.length - 2;
204
+ switch (block.type) {
205
+ case 'text':
206
+ return (_jsx(Md, { text: block.content, className: "text-zinc-300 text-sm" }, i));
207
+ case 'tool':
208
+ return (_jsx(CollapsibleBlock, { wrap: wrap, forceOpen: expandAll, defaultOpen: isRecent, label: _jsxs("span", { className: "text-sky-400 font-mono truncate", children: [block.name, block.time && _jsx("span", { className: "text-sky-400/40 ml-2 text-[10px]", children: block.time })] }), labelClass: "bg-sky-500/8 hover:bg-sky-500/12 text-sky-400/80", preview: truncate(block.input), children: isJson(block.input)
209
+ ? _jsx(JsonTree, { text: block.input, className: "text-zinc-500" })
210
+ : _jsx("pre", { className: "text-zinc-500 font-mono text-[11px]", children: block.input }) }, i));
211
+ case 'result':
212
+ return (_jsx(CollapsibleBlock, { wrap: wrap, forceOpen: expandAll, defaultOpen: isRecent, label: _jsxs("span", { className: "text-emerald-400", children: ["result", block.time && _jsx("span", { className: "text-emerald-400/40 ml-2 text-[10px]", children: block.time })] }), labelClass: "bg-emerald-500/8 hover:bg-emerald-500/12 text-emerald-400/80", preview: truncate(block.content), children: isJson(block.content)
213
+ ? _jsx(JsonTree, { text: block.content, className: "text-zinc-500" })
214
+ : /^\s*\d+→/.test(block.content)
215
+ ? _jsx(CodeResult, { text: block.content })
216
+ : _jsx(Md, { text: block.content, className: "text-zinc-400 text-xs" }) }, i));
217
+ case 'thinking':
218
+ return (_jsx(CollapsibleBlock, { wrap: wrap, forceOpen: expandAll, defaultOpen: isRecent, label: _jsxs("span", { className: "text-amber-400/70 italic", children: ["thinking", block.time && _jsx("span", { className: "text-amber-400/40 ml-2 text-[10px] not-italic", children: block.time })] }), labelClass: "bg-amber-500/5 hover:bg-amber-500/10 text-amber-400/60", preview: truncate(block.content), children: _jsx(Md, { text: block.content, className: "text-zinc-500 italic text-xs" }) }, i));
219
+ case 'interrupted':
220
+ return (_jsxs("div", { className: "flex items-center gap-2 px-2.5 py-1.5 rounded-lg bg-red-500/10 border border-red-500/20", children: [_jsx("span", { className: "w-2 h-2 rounded-sm bg-red-400" }), _jsx("span", { className: "text-[11px] text-red-400 font-medium", children: "Interrupted" }), block.time && _jsx("span", { className: "text-[10px] text-red-400/40 ml-auto font-mono", children: block.time })] }, i));
221
+ }
222
+ }), _jsx("div", { ref: bottomRef })] }));
223
+ }
224
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../../metatron/views/log.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare const STATUS: Record<string, {
2
+ bg: string;
3
+ text: string;
4
+ dot: string;
5
+ }>;
6
+ export declare function formatTime(ts: number): string;
7
+ export declare function StatusDot({ status }: {
8
+ status: string;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export declare function StatusBadge({ status }: {
11
+ status: string;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../metatron/views/shared.tsx"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAK5E,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAa7C;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAGvD;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAOzD"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from '@treenity/react/lib/utils';
3
+ import dayjs from 'dayjs';
4
+ // ── Design tokens ──
5
+ export const STATUS = {
6
+ pending: { bg: 'bg-amber-500/15', text: 'text-amber-400', dot: 'bg-amber-400' },
7
+ running: { bg: 'bg-sky-500/15', text: 'text-sky-400', dot: 'bg-sky-400 animate-pulse' },
8
+ done: { bg: 'bg-emerald-500/15', text: 'text-emerald-400', dot: 'bg-emerald-400' },
9
+ error: { bg: 'bg-red-500/15', text: 'text-red-400', dot: 'bg-red-400' },
10
+ };
11
+ export function formatTime(ts) {
12
+ if (!ts)
13
+ return '';
14
+ const d = dayjs(ts);
15
+ const now = dayjs();
16
+ // Same day — just time
17
+ if (d.isSame(now, 'day'))
18
+ return d.format('HH:mm');
19
+ // This year — date + time
20
+ if (d.isSame(now, 'year'))
21
+ return d.format('MMM D HH:mm');
22
+ // Different year
23
+ return d.format('MMM D YYYY HH:mm');
24
+ }
25
+ export function StatusDot({ status }) {
26
+ const s = STATUS[status] || STATUS.pending;
27
+ return _jsx("span", { className: cn('inline-block w-1.5 h-1.5 rounded-full shrink-0', s.dot) });
28
+ }
29
+ export function StatusBadge({ status }) {
30
+ const s = STATUS[status] || STATUS.pending;
31
+ return (_jsx("span", { className: cn('px-2 py-0.5 rounded-full text-[10px] font-semibold tracking-wide uppercase', s.bg, s.text), children: status }));
32
+ }
33
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../metatron/views/shared.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,sBAAsB;AAEtB,MAAM,CAAC,MAAM,MAAM,GAA8D;IAC/E,OAAO,EAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,EAAE;IAChF,OAAO,EAAG,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,0BAA0B,EAAE;IACxF,IAAI,EAAM,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE;IACtF,KAAK,EAAK,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE;CAC3E,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;IAEpB,uBAAuB;IACvB,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnD,0BAA0B;IAC1B,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAE1D,iBAAiB;IACjB,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAsB;IACtD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;IAC3C,OAAO,eAAM,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,CAAC,CAAC,GAAG,CAAC,GAAI,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAsB;IACxD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC;IAC3C,OAAO,CACL,eAAM,SAAS,EAAE,EAAE,CAAC,4EAA4E,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAC5G,MAAM,GACF,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function TaskRow({ task }: {
2
+ task: Record<string, unknown>;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../metatron/views/task.tsx"],"names":[],"mappings":"AAqFA,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,2CA4DlE"}