@treenity/mods 3.0.3 → 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/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/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 +2 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// Metatron — Claude Agent SDK wrapper
|
|
2
|
+
// Uses v1 query() API — simpler, more robust than unstable_v2 sessions
|
|
3
|
+
// Sessions persist via `resume` option. If resume fails, auto-retries fresh.
|
|
4
|
+
// Active query registry: keyed by configPath, enables abort from stop action.
|
|
5
|
+
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
6
|
+
import { evaluatePermission } from './permissions';
|
|
7
|
+
function ts() {
|
|
8
|
+
const d = new Date();
|
|
9
|
+
return `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}:${String(d.getSeconds()).padStart(2, '0')}`;
|
|
10
|
+
}
|
|
11
|
+
const log = (msg) => console.log(`[metatron:claude] ${msg}`);
|
|
12
|
+
const activeQueries = new Map();
|
|
13
|
+
/** Abort a running query by key (config path). Returns true if aborted. */
|
|
14
|
+
export function abortQuery(key) {
|
|
15
|
+
const entry = activeQueries.get(key);
|
|
16
|
+
if (!entry)
|
|
17
|
+
return false;
|
|
18
|
+
log(`aborting query: ${key}`);
|
|
19
|
+
entry.ac.abort();
|
|
20
|
+
entry.query.close();
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
/** Check if a query is currently running for the given key */
|
|
24
|
+
export function isQueryRunning(key) {
|
|
25
|
+
return activeQueries.has(key);
|
|
26
|
+
}
|
|
27
|
+
// Extract readable text from tool_result content.
|
|
28
|
+
// MCP tools return {content: [{type:"text", text:"already formatted string"}]}.
|
|
29
|
+
// We extract .text from each block instead of JSON.stringify'ing the whole array.
|
|
30
|
+
function extractToolResultText(content) {
|
|
31
|
+
if (typeof content === 'string')
|
|
32
|
+
return content;
|
|
33
|
+
if (Array.isArray(content)) {
|
|
34
|
+
return content.map((b) => {
|
|
35
|
+
if (b.type === 'text' && typeof b.text === 'string')
|
|
36
|
+
return b.text;
|
|
37
|
+
return JSON.stringify(b);
|
|
38
|
+
}).join('\n');
|
|
39
|
+
}
|
|
40
|
+
return String(content);
|
|
41
|
+
}
|
|
42
|
+
const DEFAULT_TOOLS = [
|
|
43
|
+
'mcp__treenity__get_node',
|
|
44
|
+
'mcp__treenity__list_children',
|
|
45
|
+
'mcp__treenity__set_node',
|
|
46
|
+
'mcp__treenity__remove_node',
|
|
47
|
+
'mcp__treenity__execute',
|
|
48
|
+
'mcp__treenity__deploy_prefab',
|
|
49
|
+
'mcp__treenity__compile_view',
|
|
50
|
+
'mcp__treenity__catalog',
|
|
51
|
+
'mcp__treenity__describe_type',
|
|
52
|
+
'mcp__treenity__search_types',
|
|
53
|
+
];
|
|
54
|
+
function applyPermissionRules(rules) {
|
|
55
|
+
if (!rules.length)
|
|
56
|
+
return { allowed: DEFAULT_TOOLS, denied: [] };
|
|
57
|
+
const allowed = [];
|
|
58
|
+
const denied = [];
|
|
59
|
+
for (const tool of DEFAULT_TOOLS) {
|
|
60
|
+
const policy = evaluatePermission(rules, tool, {});
|
|
61
|
+
if (policy === 'deny') {
|
|
62
|
+
denied.push(tool);
|
|
63
|
+
log(` permission: DENY ${tool}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
allowed.push(tool);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { allowed, denied };
|
|
70
|
+
}
|
|
71
|
+
async function runQuery(prompt, opts) {
|
|
72
|
+
const mcpUrl = opts.mcpUrl || process.env.TREENITY_MCP_URL || 'http://localhost:3212/mcp';
|
|
73
|
+
const startTime = Date.now();
|
|
74
|
+
let sessionId;
|
|
75
|
+
let costUsd;
|
|
76
|
+
let isError = false;
|
|
77
|
+
const ac = opts.abortController ?? new AbortController();
|
|
78
|
+
const { allowed, denied } = applyPermissionRules(opts.permissionRules ?? []);
|
|
79
|
+
// Array accumulation avoids O(n^2) string concatenation
|
|
80
|
+
const outputChunks = [];
|
|
81
|
+
const textChunks = [];
|
|
82
|
+
const stream = query({
|
|
83
|
+
prompt,
|
|
84
|
+
options: {
|
|
85
|
+
...(opts.sessionId ? { resume: opts.sessionId } : {}),
|
|
86
|
+
...(opts.forkSession ? { forkSession: true } : {}),
|
|
87
|
+
...(opts.model ? { model: opts.model } : {}),
|
|
88
|
+
abortController: ac,
|
|
89
|
+
permissionMode: opts.canUseTool ? 'bypassPermissions' : 'default',
|
|
90
|
+
...(opts.canUseTool ? { allowDangerouslySkipPermissions: true } : {}),
|
|
91
|
+
allowedTools: allowed,
|
|
92
|
+
...(denied.length ? { disallowedTools: denied } : {}),
|
|
93
|
+
...(opts.canUseTool ? { canUseTool: opts.canUseTool } : {}),
|
|
94
|
+
mcpServers: {
|
|
95
|
+
treenity: { type: 'http', url: mcpUrl },
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
// Register in active queries map
|
|
100
|
+
if (opts.key)
|
|
101
|
+
activeQueries.set(opts.key, { query: stream, ac });
|
|
102
|
+
const append = (text) => {
|
|
103
|
+
outputChunks.push(text);
|
|
104
|
+
opts.onOutput?.(text);
|
|
105
|
+
};
|
|
106
|
+
try {
|
|
107
|
+
for await (const message of stream) {
|
|
108
|
+
if (message.type === 'system' && message.subtype === 'init') {
|
|
109
|
+
sessionId = message.session_id;
|
|
110
|
+
log(` session: ${sessionId}`);
|
|
111
|
+
}
|
|
112
|
+
const msg = message;
|
|
113
|
+
if (message.type === 'assistant' && msg.message?.content) {
|
|
114
|
+
for (const block of msg.message.content) {
|
|
115
|
+
if (block.type === 'text' && block.text) {
|
|
116
|
+
textChunks.push(block.text);
|
|
117
|
+
append(block.text);
|
|
118
|
+
}
|
|
119
|
+
else if (block.type === 'tool_use') {
|
|
120
|
+
log(` tool: ${block.name} ${JSON.stringify(block.input)}`);
|
|
121
|
+
const input = JSON.stringify(block.input, null, 2);
|
|
122
|
+
append(`\n[tool ${ts()}] ${block.name}\n${input}\n`);
|
|
123
|
+
}
|
|
124
|
+
else if (block.type === 'thinking' && block.thinking) {
|
|
125
|
+
append(`\n[thinking ${ts()}]\n${block.thinking}\n`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// tool results come as user messages with tool_result blocks
|
|
130
|
+
if (message.type === 'user' && msg.message?.content) {
|
|
131
|
+
for (const block of msg.message.content) {
|
|
132
|
+
if (block.type === 'tool_result') {
|
|
133
|
+
const content = extractToolResultText(block.content);
|
|
134
|
+
append(`\n[result ${ts()}] ${content}\n`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (message.type === 'result') {
|
|
139
|
+
sessionId = msg.session_id ?? sessionId;
|
|
140
|
+
costUsd = msg.cost_usd;
|
|
141
|
+
isError = msg.is_error ?? false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
// AbortError = user-initiated stop, not a failure
|
|
147
|
+
if (ac.signal.aborted) {
|
|
148
|
+
append(`\n[interrupted ${ts()}]\n`);
|
|
149
|
+
return {
|
|
150
|
+
output: outputChunks.join(''),
|
|
151
|
+
text: textChunks.join(''),
|
|
152
|
+
sessionId,
|
|
153
|
+
durationMs: Date.now() - startTime,
|
|
154
|
+
costUsd,
|
|
155
|
+
aborted: true,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
if (opts.key)
|
|
162
|
+
activeQueries.delete(opts.key);
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
output: outputChunks.join(''),
|
|
166
|
+
text: textChunks.join(''),
|
|
167
|
+
sessionId,
|
|
168
|
+
durationMs: Date.now() - startTime,
|
|
169
|
+
costUsd,
|
|
170
|
+
error: isError,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export async function invokeClaude(prompt, opts = {}) {
|
|
174
|
+
const promptPreview = prompt.length > 120 ? prompt.slice(0, 120) + '...' : prompt;
|
|
175
|
+
log(`query: "${promptPreview}" session=${opts.sessionId?.slice(0, 8) ?? 'new'}`);
|
|
176
|
+
try {
|
|
177
|
+
return await runQuery(prompt, opts);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
181
|
+
log(` FAILED: ${msg}`);
|
|
182
|
+
// If resuming a session failed, retry without session (fresh start)
|
|
183
|
+
if (opts.sessionId) {
|
|
184
|
+
log(` retrying without session...`);
|
|
185
|
+
try {
|
|
186
|
+
return await runQuery(prompt, { ...opts, sessionId: undefined });
|
|
187
|
+
}
|
|
188
|
+
catch (retryErr) {
|
|
189
|
+
const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);
|
|
190
|
+
log(` retry also FAILED: ${retryMsg}`);
|
|
191
|
+
throw retryErr;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
throw err;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/** Close a running session — no-op since queries self-clean via AbortController */
|
|
198
|
+
export function closeSession(_key) {
|
|
199
|
+
abortQuery(_key);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../metatron/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../metatron/client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../metatron/client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type Mention = {
|
|
2
|
+
path: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function parseMentions(text: string): Mention[];
|
|
7
|
+
/** Extract unique paths from mentions */
|
|
8
|
+
export declare function uniqueMentionPaths(text: string): string[];
|
|
9
|
+
//# sourceMappingURL=mentions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../metatron/mentions.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAIF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAarD;AAED,yCAAyC;AACzC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGzD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// @/path mention parser for Metatron chat
|
|
2
|
+
// Detects @/path/to/node in text, returns positions for chip rendering and context resolution
|
|
3
|
+
const MENTION_RE = /@(\/[\w\-./]+)/g;
|
|
4
|
+
export function parseMentions(text) {
|
|
5
|
+
const mentions = [];
|
|
6
|
+
let m;
|
|
7
|
+
while ((m = MENTION_RE.exec(text)) !== null) {
|
|
8
|
+
mentions.push({
|
|
9
|
+
path: m[1],
|
|
10
|
+
start: m.index,
|
|
11
|
+
end: m.index + m[0].length,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return mentions;
|
|
15
|
+
}
|
|
16
|
+
/** Extract unique paths from mentions */
|
|
17
|
+
export function uniqueMentionPaths(text) {
|
|
18
|
+
const mentions = parseMentions(text);
|
|
19
|
+
return [...new Set(mentions.map(m => m.path))];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mentions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../metatron/mentions.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,8FAA8F;AAQ9F,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAErC,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,CAAyB,CAAC;IAE9B,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACV,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,GAAG,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type PermissionPolicy = 'allow' | 'ask-once' | 'ask-always' | 'deny';
|
|
2
|
+
export type PermissionRule = {
|
|
3
|
+
tool: string;
|
|
4
|
+
pathPattern: string;
|
|
5
|
+
policy: PermissionPolicy;
|
|
6
|
+
};
|
|
7
|
+
export type PermissionMeta = {
|
|
8
|
+
tool?: string;
|
|
9
|
+
input?: string;
|
|
10
|
+
agentPath?: string;
|
|
11
|
+
scope?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const pendingPermissions: Map<string, (allow: boolean, meta?: PermissionMeta) => void>;
|
|
14
|
+
export declare function resolvePermission(id: string, allow: boolean, meta?: PermissionMeta): void;
|
|
15
|
+
export declare function evaluatePermission(rules: PermissionRule[], toolName: string, input: unknown): PermissionPolicy | null;
|
|
16
|
+
//# sourceMappingURL=permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../metatron/permissions.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;AAE5E,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAIF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,kBAAkB,sBAA2B,OAAO,SAAS,cAAc,KAAK,IAAI,CAAG,CAAC;AAErG,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,cAAc,QAKlF;AAkBD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EAAE,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,GACb,gBAAgB,GAAG,IAAI,CAwBzB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Metatron permission system
|
|
2
|
+
// 1. Pending permission resolvers — shared between approve action (types.ts) and query runner (claude.ts)
|
|
3
|
+
// 2. Rule matching engine — evaluates tree-stored rules against tool calls
|
|
4
|
+
// Separate module to avoid pulling @anthropic-ai/claude-agent-sdk into browser bundle.
|
|
5
|
+
export const pendingPermissions = new Map();
|
|
6
|
+
export function resolvePermission(id, allow, meta) {
|
|
7
|
+
const resolve = pendingPermissions.get(id);
|
|
8
|
+
if (!resolve)
|
|
9
|
+
return;
|
|
10
|
+
pendingPermissions.delete(id);
|
|
11
|
+
resolve(allow, meta);
|
|
12
|
+
}
|
|
13
|
+
import { globMatch } from '@treenity/core/glob';
|
|
14
|
+
// ── Rule specificity (more specific = higher score) ──
|
|
15
|
+
function ruleSpecificity(rule) {
|
|
16
|
+
let score = 0;
|
|
17
|
+
// Exact tool name > glob pattern > wildcard
|
|
18
|
+
if (!rule.tool.includes('*'))
|
|
19
|
+
score += 100;
|
|
20
|
+
else if (rule.tool !== '*')
|
|
21
|
+
score += 50;
|
|
22
|
+
// Path pattern adds specificity
|
|
23
|
+
if (rule.pathPattern)
|
|
24
|
+
score += 10;
|
|
25
|
+
return score;
|
|
26
|
+
}
|
|
27
|
+
// ── Evaluate permission against rules ──
|
|
28
|
+
export function evaluatePermission(rules, toolName, input) {
|
|
29
|
+
const inputPath = (input && typeof input === 'object' && 'path' in input)
|
|
30
|
+
? String(input.path)
|
|
31
|
+
: '';
|
|
32
|
+
// Find all matching rules
|
|
33
|
+
const matches = rules.filter(r => {
|
|
34
|
+
if (!globMatch(r.tool, toolName))
|
|
35
|
+
return false;
|
|
36
|
+
if (r.pathPattern && inputPath && !globMatch(r.pathPattern, inputPath))
|
|
37
|
+
return false;
|
|
38
|
+
return true;
|
|
39
|
+
});
|
|
40
|
+
if (!matches.length)
|
|
41
|
+
return null; // no rule matched — caller decides default
|
|
42
|
+
// Sort by specificity (most specific first), then by deny > ask > allow priority
|
|
43
|
+
const policyPriority = { deny: 3, 'ask-always': 2, 'ask-once': 1, allow: 0 };
|
|
44
|
+
matches.sort((a, b) => {
|
|
45
|
+
const specDiff = ruleSpecificity(b) - ruleSpecificity(a);
|
|
46
|
+
if (specDiff !== 0)
|
|
47
|
+
return specDiff;
|
|
48
|
+
return (policyPriority[b.policy] ?? 0) - (policyPriority[a.policy] ?? 0);
|
|
49
|
+
});
|
|
50
|
+
return matches[0].policy;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../metatron/permissions.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAC7B,0GAA0G;AAC1G,2EAA2E;AAC3E,uFAAuF;AAmBvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA2D,CAAC;AAErG,MAAM,UAAU,iBAAiB,CAAC,EAAU,EAAE,KAAc,EAAE,IAAqB;IACjF,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,wDAAwD;AAExD,SAAS,eAAe,CAAC,IAAoB;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,4CAA4C;IAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,KAAK,IAAI,GAAG,CAAC;SACtC,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG;QAAE,KAAK,IAAI,EAAE,CAAC;IACxC,gCAAgC;IAChC,IAAI,IAAI,CAAC,WAAW;QAAE,KAAK,IAAI,EAAE,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0CAA0C;AAE1C,MAAM,UAAU,kBAAkB,CAChC,KAAuB,EACvB,QAAgB,EAChB,KAAc;IAEd,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC;QACvE,CAAC,CAAC,MAAM,CAAE,KAAa,CAAC,IAAI,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC;IAEP,0BAA0B;IAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,CAAC,CAAC,WAAW,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QACrF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAE7E,iFAAiF;IACjF,MAAM,cAAc,GAA2B,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAErG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAC;QACpC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../metatron/seed.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { registerPrefab } from '@treenity/core/mod';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
registerPrefab('metatron', 'seed', [
|
|
5
|
+
{ $path: 'metatron', $type: 'metatron.config',
|
|
6
|
+
model: 'claude-opus-4-6', systemPrompt: '', sessionId: '', lastRun: 0 },
|
|
7
|
+
{ $path: 'metatron/tasks', $type: 'dir' },
|
|
8
|
+
// Query mounts — virtual folders filtered by task status
|
|
9
|
+
{ $path: 'metatron/inbox', $type: 'mount-point',
|
|
10
|
+
mount: { $type: 't.mount.query' },
|
|
11
|
+
query: { $type: 'query', source: '/metatron/tasks', match: { $type: 'metatron.task', status: { $in: ['pending', 'running'] } } } },
|
|
12
|
+
{ $path: 'metatron/done', $type: 'mount-point',
|
|
13
|
+
mount: { $type: 't.mount.query' },
|
|
14
|
+
query: { $type: 'query', source: '/metatron/tasks', match: { $type: 'metatron.task', status: 'done' } } },
|
|
15
|
+
// Skills — modular prompt fragments
|
|
16
|
+
{ $path: 'metatron/skills', $type: 'dir' },
|
|
17
|
+
{ $path: 'metatron/skills/tree-admin', $type: 'metatron.skill',
|
|
18
|
+
name: 'Tree Admin',
|
|
19
|
+
prompt: 'You are a Treenity tree administrator. You can create, read, update, and delete nodes using MCP tools. Use catalog and describe_type to discover available types before creating nodes.',
|
|
20
|
+
enabled: true, category: 'core', updatedAt: 0 },
|
|
21
|
+
{ $path: 'metatron/skills/self-learning', $type: 'metatron.skill',
|
|
22
|
+
name: 'Self-Learning',
|
|
23
|
+
prompt: 'After completing a task successfully, reflect on what you learned. If you discovered a reusable principle, pattern, or gotcha — save it as a skill at /metatron/skills/. Check existing skills first (list_children), update rather than duplicate. Skills should be concise (1-3 sentences) and actionable.',
|
|
24
|
+
enabled: true, category: 'meta', updatedAt: 0 },
|
|
25
|
+
// Memory — persistent facts/preferences
|
|
26
|
+
{ $path: 'metatron/memory', $type: 'dir' },
|
|
27
|
+
// Workspaces — multi-task columns
|
|
28
|
+
{ $path: 'metatron/workspaces', $type: 'dir' },
|
|
29
|
+
{ $path: '/sys/autostart/metatron', $type: 'ref', $ref: '/metatron' },
|
|
30
|
+
], (nodes) => {
|
|
31
|
+
// Load metatron prompt from docs
|
|
32
|
+
let systemPrompt = '';
|
|
33
|
+
try {
|
|
34
|
+
systemPrompt = readFileSync(join(process.cwd(), 'docs/metatron-prompt.md'), 'utf8');
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
console.warn('[seed] docs/metatron-prompt.md not found, metatron systemPrompt will be empty');
|
|
38
|
+
}
|
|
39
|
+
return nodes.map(n => n.$path === 'metatron' ? { ...n, systemPrompt } : n);
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../metatron/seed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE;IACjC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB;QAC3C,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;IAEzE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE;IAEzC,yDAAyD;IACzD,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa;QAC7C,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;QACjC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE;IACpI,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa;QAC5C,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;QACjC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;IAE3G,oCAAoC;IACpC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE;IAC1C,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,gBAAgB;QAC5D,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,yLAAyL;QACjM,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE;IACjD,EAAE,KAAK,EAAE,+BAA+B,EAAE,KAAK,EAAE,gBAAgB;QAC/D,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,8SAA8S;QACtT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE;IAEjD,wCAAwC;IACxC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE;IAE1C,kCAAkC;IAClC,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE;IAE9C,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE;CACxD,EAAE,CAAC,KAAK,EAAE,EAAE;IACzB,iCAAiC;IACjC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,yBAAyB,CAAC,EAAE,MAAM,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACnB,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CACpD,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../metatron/server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,WAAW,CAAC;AACnB,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../metatron/server.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,WAAW,CAAC;AACnB,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../metatron/service.ts"],"names":[],"mappings":"AAyGA,wBAAsB,cAAc,CAClC,KAAK,EAAE,OAAO,qBAAqB,EAAE,IAAI,EACzC,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,CAoDjB"}
|