@develosaur/mcp 1.0.0
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/auth/ApiKeyAuth.d.ts +23 -0
- package/dist/auth/ApiKeyAuth.d.ts.map +1 -0
- package/dist/auth/ApiKeyAuth.js +119 -0
- package/dist/auth/ApiKeyAuth.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +252 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/edges.d.ts +10 -0
- package/dist/tools/edges.d.ts.map +1 -0
- package/dist/tools/edges.js +58 -0
- package/dist/tools/edges.js.map +1 -0
- package/dist/tools/nodes.d.ts +26 -0
- package/dist/tools/nodes.d.ts.map +1 -0
- package/dist/tools/nodes.js +188 -0
- package/dist/tools/nodes.js.map +1 -0
- package/dist/tools/query.d.ts +27 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +133 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/types.d.ts +97 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/nodeDefaults.d.ts +14 -0
- package/dist/utils/nodeDefaults.d.ts.map +1 -0
- package/dist/utils/nodeDefaults.js +49 -0
- package/dist/utils/nodeDefaults.js.map +1 -0
- package/dist/utils/rateLimiter.d.ts +11 -0
- package/dist/utils/rateLimiter.d.ts.map +1 -0
- package/dist/utils/rateLimiter.js +32 -0
- package/dist/utils/rateLimiter.js.map +1 -0
- package/dist/yjs/BinaryEncoding.d.ts +7 -0
- package/dist/yjs/BinaryEncoding.d.ts.map +1 -0
- package/dist/yjs/BinaryEncoding.js +11 -0
- package/dist/yjs/BinaryEncoding.js.map +1 -0
- package/dist/yjs/YjsProjectSession.d.ts +45 -0
- package/dist/yjs/YjsProjectSession.d.ts.map +1 -0
- package/dist/yjs/YjsProjectSession.js +129 -0
- package/dist/yjs/YjsProjectSession.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { buildNodeData, generateNodeId, buildEdgeId } from '../utils/nodeDefaults.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a single node in the Y.Doc
|
|
4
|
+
*/
|
|
5
|
+
export async function createNode(session, params) {
|
|
6
|
+
const nodeData = buildNodeData(params);
|
|
7
|
+
const nodeId = nodeData.id;
|
|
8
|
+
const seq = await session.applyChange((doc) => {
|
|
9
|
+
const nodesMap = doc.getMap('nodes');
|
|
10
|
+
const edgesMap = doc.getMap('edges');
|
|
11
|
+
nodesMap.set(nodeId, nodeData);
|
|
12
|
+
if (params.parentId) {
|
|
13
|
+
const edgeId = buildEdgeId(params.parentId, nodeId);
|
|
14
|
+
edgesMap.set(edgeId, { id: edgeId, source: params.parentId, target: nodeId });
|
|
15
|
+
// Update parent's childIds
|
|
16
|
+
const parentData = nodesMap.get(params.parentId);
|
|
17
|
+
if (parentData) {
|
|
18
|
+
nodesMap.set(params.parentId, {
|
|
19
|
+
...parentData,
|
|
20
|
+
relationships: {
|
|
21
|
+
...parentData.relationships,
|
|
22
|
+
childIds: [...(parentData.relationships.childIds || []), nodeId],
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return { nodeId, seq };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Update an existing node's properties (partial update)
|
|
32
|
+
*/
|
|
33
|
+
export async function updateNode(session, nodeId, updates) {
|
|
34
|
+
return session.applyChange((doc) => {
|
|
35
|
+
const nodesMap = doc.getMap('nodes');
|
|
36
|
+
const existing = nodesMap.get(nodeId);
|
|
37
|
+
if (!existing)
|
|
38
|
+
throw new Error(`Node ${nodeId} not found`);
|
|
39
|
+
const updated = { ...existing };
|
|
40
|
+
if (updates.title !== undefined)
|
|
41
|
+
updated.title = updates.title;
|
|
42
|
+
if (updates.contentMarkdown !== undefined)
|
|
43
|
+
updated.contentMarkdown = updates.contentMarkdown;
|
|
44
|
+
if (updates.color !== undefined) {
|
|
45
|
+
updated.color = updates.color;
|
|
46
|
+
updated.useCustomColor = true;
|
|
47
|
+
}
|
|
48
|
+
if (updates.tags !== undefined)
|
|
49
|
+
updated.tags = updates.tags;
|
|
50
|
+
if (updates.vScore !== undefined)
|
|
51
|
+
updated.vScore = updates.vScore;
|
|
52
|
+
if (updates.eScore !== undefined)
|
|
53
|
+
updated.eScore = updates.eScore;
|
|
54
|
+
nodesMap.set(nodeId, updated);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Mark a node as completed
|
|
59
|
+
*/
|
|
60
|
+
export async function completeNode(session, nodeId) {
|
|
61
|
+
return session.applyChange((doc) => {
|
|
62
|
+
const nodesMap = doc.getMap('nodes');
|
|
63
|
+
const existing = nodesMap.get(nodeId);
|
|
64
|
+
if (!existing)
|
|
65
|
+
throw new Error(`Node ${nodeId} not found`);
|
|
66
|
+
nodesMap.set(nodeId, {
|
|
67
|
+
...existing,
|
|
68
|
+
completed: true,
|
|
69
|
+
completedAt: new Date().toISOString(),
|
|
70
|
+
heatInitial: 0,
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Delete a node and all its descendants recursively
|
|
76
|
+
*/
|
|
77
|
+
export async function deleteNode(session, nodeId) {
|
|
78
|
+
return session.applyChange((doc) => {
|
|
79
|
+
const nodesMap = doc.getMap('nodes');
|
|
80
|
+
const edgesMap = doc.getMap('edges');
|
|
81
|
+
// Collect all descendants
|
|
82
|
+
const toDelete = new Set();
|
|
83
|
+
function collectDescendants(id) {
|
|
84
|
+
toDelete.add(id);
|
|
85
|
+
const node = nodesMap.get(id);
|
|
86
|
+
if (node?.relationships?.childIds) {
|
|
87
|
+
for (const childId of node.relationships.childIds) {
|
|
88
|
+
collectDescendants(childId);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
collectDescendants(nodeId);
|
|
93
|
+
// Remove edges that reference any deleted node
|
|
94
|
+
const allEdgeKeys = [];
|
|
95
|
+
edgesMap.forEach((_val, key) => allEdgeKeys.push(key));
|
|
96
|
+
for (const edgeKey of allEdgeKeys) {
|
|
97
|
+
const edge = edgesMap.get(edgeKey);
|
|
98
|
+
if (edge && (toDelete.has(edge.source) || toDelete.has(edge.target))) {
|
|
99
|
+
edgesMap.delete(edgeKey);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Remove the target node from its parent's childIds
|
|
103
|
+
const targetNode = nodesMap.get(nodeId);
|
|
104
|
+
if (targetNode?.relationships?.parentId) {
|
|
105
|
+
const parentData = nodesMap.get(targetNode.relationships.parentId);
|
|
106
|
+
if (parentData) {
|
|
107
|
+
nodesMap.set(targetNode.relationships.parentId, {
|
|
108
|
+
...parentData,
|
|
109
|
+
relationships: {
|
|
110
|
+
...parentData.relationships,
|
|
111
|
+
childIds: (parentData.relationships.childIds || []).filter((id) => id !== nodeId),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Delete all nodes
|
|
117
|
+
for (const id of toDelete) {
|
|
118
|
+
nodesMap.delete(id);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Batch create multiple nodes with temp_id references (atomic)
|
|
124
|
+
*/
|
|
125
|
+
export async function batchCreateNodes(session, inputs) {
|
|
126
|
+
const tempToReal = new Map();
|
|
127
|
+
await session.applyChange((doc) => {
|
|
128
|
+
const nodesMap = doc.getMap('nodes');
|
|
129
|
+
const edgesMap = doc.getMap('edges');
|
|
130
|
+
const now = new Date().toISOString();
|
|
131
|
+
// Pass 1: Create all nodes and assign UUIDs
|
|
132
|
+
for (const input of inputs) {
|
|
133
|
+
const nodeId = generateNodeId();
|
|
134
|
+
tempToReal.set(input.temp_id, nodeId);
|
|
135
|
+
const parentId = input.parent_temp_id
|
|
136
|
+
? tempToReal.get(input.parent_temp_id)
|
|
137
|
+
: input.parent_id;
|
|
138
|
+
const isTitle = input.type === 'title';
|
|
139
|
+
const nodeData = {
|
|
140
|
+
id: nodeId,
|
|
141
|
+
title: input.title,
|
|
142
|
+
contentMarkdown: input.content_markdown || '',
|
|
143
|
+
position: { x: 0, y: 0 },
|
|
144
|
+
dimensions: isTitle
|
|
145
|
+
? { width: 736, height: 140 }
|
|
146
|
+
: { width: 636, height: 636 },
|
|
147
|
+
color: input.color || '#4299e1',
|
|
148
|
+
useCustomColor: !!input.color,
|
|
149
|
+
type: input.type || 'richtext',
|
|
150
|
+
relationships: { parentId, childIds: [] },
|
|
151
|
+
tags: input.tags || [],
|
|
152
|
+
pinnedTags: [],
|
|
153
|
+
createdAt: now,
|
|
154
|
+
completed: false,
|
|
155
|
+
vScore: input.v_score,
|
|
156
|
+
eScore: input.e_score ?? 5,
|
|
157
|
+
heatInitial: 0,
|
|
158
|
+
heatLastUpdated: now,
|
|
159
|
+
promotionLevel: 0,
|
|
160
|
+
manuallyPositioned: false,
|
|
161
|
+
};
|
|
162
|
+
nodesMap.set(nodeId, nodeData);
|
|
163
|
+
}
|
|
164
|
+
// Pass 2: Create edges and update parent childIds
|
|
165
|
+
for (const input of inputs) {
|
|
166
|
+
const nodeId = tempToReal.get(input.temp_id);
|
|
167
|
+
const parentId = input.parent_temp_id
|
|
168
|
+
? tempToReal.get(input.parent_temp_id)
|
|
169
|
+
: input.parent_id;
|
|
170
|
+
if (parentId) {
|
|
171
|
+
const edgeId = buildEdgeId(parentId, nodeId);
|
|
172
|
+
edgesMap.set(edgeId, { id: edgeId, source: parentId, target: nodeId });
|
|
173
|
+
const parentData = nodesMap.get(parentId);
|
|
174
|
+
if (parentData) {
|
|
175
|
+
nodesMap.set(parentId, {
|
|
176
|
+
...parentData,
|
|
177
|
+
relationships: {
|
|
178
|
+
...parentData.relationships,
|
|
179
|
+
childIds: [...(parentData.relationships.childIds || []), nodeId],
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return tempToReal;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../src/tools/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { YjsProjectSession } from '../yjs/YjsProjectSession.js';
|
|
2
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
3
|
+
import type { Tag } from '../types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Get the project tree as an indented text outline
|
|
6
|
+
*/
|
|
7
|
+
export declare function getTree(session: YjsProjectSession, options?: {
|
|
8
|
+
maxDepth?: number;
|
|
9
|
+
includeCompleted?: boolean;
|
|
10
|
+
}): string;
|
|
11
|
+
/**
|
|
12
|
+
* Get full details of a specific node
|
|
13
|
+
*/
|
|
14
|
+
export declare function getNode(session: YjsProjectSession, nodeId: string): Record<string, any> | null;
|
|
15
|
+
/**
|
|
16
|
+
* Search nodes by title or content
|
|
17
|
+
*/
|
|
18
|
+
export declare function findNodes(session: YjsProjectSession, options: {
|
|
19
|
+
query: string;
|
|
20
|
+
tag?: string;
|
|
21
|
+
completed?: boolean;
|
|
22
|
+
}): Array<Record<string, any>>;
|
|
23
|
+
/**
|
|
24
|
+
* List all tags for the current project (from project_tags table)
|
|
25
|
+
*/
|
|
26
|
+
export declare function listTags(supabase: SupabaseClient, projectId: string): Promise<Tag[]>;
|
|
27
|
+
//# sourceMappingURL=query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAsB,GAAG,EAAE,MAAM,aAAa,CAAC;AAE3D;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9D,MAAM,CAiDR;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CA8B5B;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAqC5B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC,CAmBhB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the project tree as an indented text outline
|
|
3
|
+
*/
|
|
4
|
+
export function getTree(session, options = {}) {
|
|
5
|
+
const doc = session.getDoc();
|
|
6
|
+
const nodesMap = doc.getMap('nodes');
|
|
7
|
+
// Collect all nodes
|
|
8
|
+
const nodes = new Map();
|
|
9
|
+
nodesMap.forEach((val, key) => {
|
|
10
|
+
nodes.set(key, val);
|
|
11
|
+
});
|
|
12
|
+
if (nodes.size === 0)
|
|
13
|
+
return '(empty project)';
|
|
14
|
+
// Find root nodes (no parent)
|
|
15
|
+
const roots = [];
|
|
16
|
+
for (const [id, node] of nodes) {
|
|
17
|
+
if (!node.relationships?.parentId) {
|
|
18
|
+
roots.push(id);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const lines = [];
|
|
22
|
+
function walk(nodeId, depth) {
|
|
23
|
+
if (options.maxDepth !== undefined && depth > options.maxDepth)
|
|
24
|
+
return;
|
|
25
|
+
const node = nodes.get(nodeId);
|
|
26
|
+
if (!node)
|
|
27
|
+
return;
|
|
28
|
+
if (node.completed && !options.includeCompleted)
|
|
29
|
+
return;
|
|
30
|
+
const indent = ' '.repeat(depth);
|
|
31
|
+
const status = node.completed ? '[x]' : '[ ]';
|
|
32
|
+
const tags = node.tags?.length ? ` {${node.tags.join(', ')}}` : '';
|
|
33
|
+
const vScore = node.vScore !== undefined ? ` [v:${node.vScore}]` : '';
|
|
34
|
+
lines.push(`${indent}${status} ${node.title}${tags}${vScore} (${nodeId.slice(0, 8)})`);
|
|
35
|
+
// Walk children
|
|
36
|
+
const childIds = node.relationships?.childIds || [];
|
|
37
|
+
for (const childId of childIds) {
|
|
38
|
+
walk(childId, depth + 1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const rootId of roots) {
|
|
42
|
+
walk(rootId, 0);
|
|
43
|
+
}
|
|
44
|
+
return lines.join('\n') || '(no visible nodes)';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get full details of a specific node
|
|
48
|
+
*/
|
|
49
|
+
export function getNode(session, nodeId) {
|
|
50
|
+
const doc = session.getDoc();
|
|
51
|
+
const nodesMap = doc.getMap('nodes');
|
|
52
|
+
const node = nodesMap.get(nodeId);
|
|
53
|
+
if (!node)
|
|
54
|
+
return null;
|
|
55
|
+
// Get children details
|
|
56
|
+
const children = (node.relationships?.childIds || []).map((childId) => {
|
|
57
|
+
const child = nodesMap.get(childId);
|
|
58
|
+
return child
|
|
59
|
+
? { id: childId, title: child.title, completed: !!child.completed }
|
|
60
|
+
: { id: childId, title: '(unknown)', completed: false };
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
id: node.id,
|
|
64
|
+
title: node.title,
|
|
65
|
+
content_markdown: node.contentMarkdown || '',
|
|
66
|
+
type: node.type || 'richtext',
|
|
67
|
+
color: node.color,
|
|
68
|
+
completed: !!node.completed,
|
|
69
|
+
completed_at: node.completedAt || null,
|
|
70
|
+
created_at: node.createdAt || null,
|
|
71
|
+
tags: node.tags || [],
|
|
72
|
+
v_score: node.vScore ?? null,
|
|
73
|
+
e_score: node.eScore ?? 5,
|
|
74
|
+
parent_id: node.relationships?.parentId || null,
|
|
75
|
+
children,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Search nodes by title or content
|
|
80
|
+
*/
|
|
81
|
+
export function findNodes(session, options) {
|
|
82
|
+
const doc = session.getDoc();
|
|
83
|
+
const nodesMap = doc.getMap('nodes');
|
|
84
|
+
const queryLower = options.query.toLowerCase();
|
|
85
|
+
const results = [];
|
|
86
|
+
nodesMap.forEach((val, key) => {
|
|
87
|
+
const node = val;
|
|
88
|
+
// Filter by completion status
|
|
89
|
+
if (options.completed !== undefined && !!node.completed !== options.completed) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Filter by tag
|
|
93
|
+
if (options.tag && !(node.tags || []).includes(options.tag)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Search title and content
|
|
97
|
+
const titleMatch = node.title?.toLowerCase().includes(queryLower);
|
|
98
|
+
const contentMatch = node.contentMarkdown?.toLowerCase().includes(queryLower);
|
|
99
|
+
if (titleMatch || contentMatch) {
|
|
100
|
+
results.push({
|
|
101
|
+
id: node.id,
|
|
102
|
+
title: node.title,
|
|
103
|
+
completed: !!node.completed,
|
|
104
|
+
tags: node.tags || [],
|
|
105
|
+
parent_id: node.relationships?.parentId || null,
|
|
106
|
+
match_in: titleMatch ? 'title' : 'content',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
return results;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* List all tags for the current project (from project_tags table)
|
|
114
|
+
*/
|
|
115
|
+
export async function listTags(supabase, projectId) {
|
|
116
|
+
const { data, error } = await supabase
|
|
117
|
+
.from('project_tags')
|
|
118
|
+
.select('*')
|
|
119
|
+
.eq('project_id', projectId);
|
|
120
|
+
if (error) {
|
|
121
|
+
throw new Error(`Failed to load tags: ${error.message}`);
|
|
122
|
+
}
|
|
123
|
+
return (data || []).map((row) => ({
|
|
124
|
+
id: row.tag_id || row.id,
|
|
125
|
+
name: row.name,
|
|
126
|
+
color: row.color,
|
|
127
|
+
scope: 'project',
|
|
128
|
+
projectId: row.project_id,
|
|
129
|
+
heatIndex: row.heat_index,
|
|
130
|
+
clearHeat: row.clear_heat,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone type definitions for the MCP server.
|
|
3
|
+
* Duplicated from the web app to keep the package self-contained.
|
|
4
|
+
*/
|
|
5
|
+
export interface NodeRelationships {
|
|
6
|
+
parentId?: string;
|
|
7
|
+
childIds: string[];
|
|
8
|
+
siblingIndex?: number;
|
|
9
|
+
active?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface NodeData {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
contentMarkdown?: string;
|
|
15
|
+
position: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
};
|
|
19
|
+
dimensions: {
|
|
20
|
+
width: number;
|
|
21
|
+
height: number;
|
|
22
|
+
};
|
|
23
|
+
color: string;
|
|
24
|
+
useCustomColor?: boolean;
|
|
25
|
+
inheritedColor?: string;
|
|
26
|
+
type?: 'tasks' | 'richtext' | 'deadline' | 'image' | 'title';
|
|
27
|
+
relationships: NodeRelationships;
|
|
28
|
+
completed?: boolean;
|
|
29
|
+
completedAt?: string;
|
|
30
|
+
createdAt?: string;
|
|
31
|
+
tags?: string[];
|
|
32
|
+
pinnedTags?: string[];
|
|
33
|
+
collapsed?: boolean;
|
|
34
|
+
manuallyPositioned?: boolean;
|
|
35
|
+
label?: string;
|
|
36
|
+
hierarchicalId?: string;
|
|
37
|
+
isHidden?: boolean;
|
|
38
|
+
isDocumentable?: boolean;
|
|
39
|
+
heatInitial?: number;
|
|
40
|
+
heatLastUpdated?: string;
|
|
41
|
+
vScore?: number;
|
|
42
|
+
eScore?: number;
|
|
43
|
+
blockedBy?: string[];
|
|
44
|
+
promotionLevel?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface EdgeData {
|
|
47
|
+
id: string;
|
|
48
|
+
source: string;
|
|
49
|
+
target: string;
|
|
50
|
+
[key: string]: any;
|
|
51
|
+
}
|
|
52
|
+
export interface Tag {
|
|
53
|
+
id: string;
|
|
54
|
+
name: string;
|
|
55
|
+
color: string;
|
|
56
|
+
scope: 'global' | 'project';
|
|
57
|
+
isDefault?: boolean;
|
|
58
|
+
projectId?: string;
|
|
59
|
+
userId?: string;
|
|
60
|
+
heatIndex?: number;
|
|
61
|
+
clearHeat?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface DevelosaurConfig {
|
|
64
|
+
project_id: string;
|
|
65
|
+
project_name: string;
|
|
66
|
+
api_key: string;
|
|
67
|
+
}
|
|
68
|
+
export interface AuthResult {
|
|
69
|
+
accessToken: string;
|
|
70
|
+
expiresIn: number;
|
|
71
|
+
expiresAt: number;
|
|
72
|
+
projectId: string;
|
|
73
|
+
projectName: string;
|
|
74
|
+
}
|
|
75
|
+
export interface CreateNodeParams {
|
|
76
|
+
title: string;
|
|
77
|
+
contentMarkdown?: string;
|
|
78
|
+
parentId?: string;
|
|
79
|
+
type?: 'tasks' | 'richtext' | 'deadline' | 'title';
|
|
80
|
+
color?: string;
|
|
81
|
+
tags?: string[];
|
|
82
|
+
vScore?: number;
|
|
83
|
+
eScore?: number;
|
|
84
|
+
}
|
|
85
|
+
export interface BatchNodeInput {
|
|
86
|
+
temp_id: string;
|
|
87
|
+
title: string;
|
|
88
|
+
content_markdown?: string;
|
|
89
|
+
parent_temp_id?: string;
|
|
90
|
+
parent_id?: string;
|
|
91
|
+
type?: 'tasks' | 'richtext' | 'deadline' | 'title';
|
|
92
|
+
color?: string;
|
|
93
|
+
tags?: string[];
|
|
94
|
+
v_score?: number;
|
|
95
|
+
e_score?: number;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { NodeData, CreateNodeParams } from '../types.js';
|
|
2
|
+
export declare const DEFAULT_NODE_DIMENSIONS: {
|
|
3
|
+
readonly width: 636;
|
|
4
|
+
readonly height: 636;
|
|
5
|
+
};
|
|
6
|
+
export declare const TITLE_NODE_DIMENSIONS: {
|
|
7
|
+
readonly width: number;
|
|
8
|
+
readonly height: 140;
|
|
9
|
+
};
|
|
10
|
+
export declare const DEFAULT_NODE_COLOR = "#4299e1";
|
|
11
|
+
export declare function generateNodeId(): string;
|
|
12
|
+
export declare function buildEdgeId(sourceId: string, targetId: string): string;
|
|
13
|
+
export declare function buildNodeData(params: CreateNodeParams): NodeData;
|
|
14
|
+
//# sourceMappingURL=nodeDefaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeDefaults.d.ts","sourceRoot":"","sources":["../../src/utils/nodeDefaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAK9D,eAAO,MAAM,uBAAuB;;;CAG1B,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,CA8BhE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
// Match web app: A4_HEIGHT=900, A4_WIDTH = round(900 / 1.414) = 636
|
|
3
|
+
const A4_WIDTH = 636;
|
|
4
|
+
export const DEFAULT_NODE_DIMENSIONS = {
|
|
5
|
+
width: A4_WIDTH,
|
|
6
|
+
height: A4_WIDTH, // square by default
|
|
7
|
+
};
|
|
8
|
+
export const TITLE_NODE_DIMENSIONS = {
|
|
9
|
+
width: A4_WIDTH + 100,
|
|
10
|
+
height: 140,
|
|
11
|
+
};
|
|
12
|
+
export const DEFAULT_NODE_COLOR = '#4299e1';
|
|
13
|
+
export function generateNodeId() {
|
|
14
|
+
return randomUUID();
|
|
15
|
+
}
|
|
16
|
+
export function buildEdgeId(sourceId, targetId) {
|
|
17
|
+
return `${sourceId}|${targetId}`;
|
|
18
|
+
}
|
|
19
|
+
export function buildNodeData(params) {
|
|
20
|
+
const now = new Date().toISOString();
|
|
21
|
+
const isTitle = params.type === 'title';
|
|
22
|
+
return {
|
|
23
|
+
id: generateNodeId(),
|
|
24
|
+
title: params.title,
|
|
25
|
+
contentMarkdown: params.contentMarkdown || '',
|
|
26
|
+
position: { x: 0, y: 0 },
|
|
27
|
+
dimensions: isTitle
|
|
28
|
+
? { ...TITLE_NODE_DIMENSIONS }
|
|
29
|
+
: { ...DEFAULT_NODE_DIMENSIONS },
|
|
30
|
+
color: params.color || DEFAULT_NODE_COLOR,
|
|
31
|
+
useCustomColor: !!params.color,
|
|
32
|
+
type: params.type || 'richtext',
|
|
33
|
+
relationships: {
|
|
34
|
+
parentId: params.parentId || undefined,
|
|
35
|
+
childIds: [],
|
|
36
|
+
},
|
|
37
|
+
tags: params.tags || [],
|
|
38
|
+
pinnedTags: [],
|
|
39
|
+
createdAt: now,
|
|
40
|
+
completed: false,
|
|
41
|
+
vScore: params.vScore,
|
|
42
|
+
eScore: params.eScore ?? 5,
|
|
43
|
+
heatInitial: 0,
|
|
44
|
+
heatLastUpdated: now,
|
|
45
|
+
promotionLevel: 0,
|
|
46
|
+
manuallyPositioned: false,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=nodeDefaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeDefaults.js","sourceRoot":"","sources":["../../src/utils/nodeDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,oEAAoE;AACpE,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ,EAAE,oBAAoB;CAC9B,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,QAAQ,GAAG,GAAG;IACrB,MAAM,EAAE,GAAG;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,QAAgB;IAC5D,OAAO,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC;IAExC,OAAO;QACL,EAAE,EAAE,cAAc,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,EAAE;QAC7C,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACxB,UAAU,EAAE,OAAO;YACjB,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE;YAC9B,CAAC,CAAC,EAAE,GAAG,uBAAuB,EAAE;QAClC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,kBAAkB;QACzC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;QAC9B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,UAAU;QAC/B,aAAa,EAAE;YACb,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;YACtC,QAAQ,EAAE,EAAE;SACb;QACD,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;QACvB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;QAC1B,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,GAAG;QACpB,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,KAAK;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class RateLimiter {
|
|
2
|
+
private opsThisSecond;
|
|
3
|
+
private opsThisHour;
|
|
4
|
+
private lastSecondReset;
|
|
5
|
+
private lastHourReset;
|
|
6
|
+
private readonly maxPerSecond;
|
|
7
|
+
private readonly maxPerHour;
|
|
8
|
+
constructor(maxPerSecond?: number, maxPerHour?: number);
|
|
9
|
+
check(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=rateLimiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,YAAY,SAAK,EAAE,UAAU,SAAO;IAKhD,KAAK,IAAI,IAAI;CA4Bd"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class RateLimiter {
|
|
2
|
+
opsThisSecond = 0;
|
|
3
|
+
opsThisHour = 0;
|
|
4
|
+
lastSecondReset = Date.now();
|
|
5
|
+
lastHourReset = Date.now();
|
|
6
|
+
maxPerSecond;
|
|
7
|
+
maxPerHour;
|
|
8
|
+
constructor(maxPerSecond = 10, maxPerHour = 1000) {
|
|
9
|
+
this.maxPerSecond = maxPerSecond;
|
|
10
|
+
this.maxPerHour = maxPerHour;
|
|
11
|
+
}
|
|
12
|
+
check() {
|
|
13
|
+
const now = Date.now();
|
|
14
|
+
if (now - this.lastSecondReset > 1000) {
|
|
15
|
+
this.opsThisSecond = 0;
|
|
16
|
+
this.lastSecondReset = now;
|
|
17
|
+
}
|
|
18
|
+
if (now - this.lastHourReset > 3_600_000) {
|
|
19
|
+
this.opsThisHour = 0;
|
|
20
|
+
this.lastHourReset = now;
|
|
21
|
+
}
|
|
22
|
+
if (this.opsThisSecond >= this.maxPerSecond) {
|
|
23
|
+
throw new Error(`Rate limit exceeded: max ${this.maxPerSecond} operations/second. Wait a moment and retry.`);
|
|
24
|
+
}
|
|
25
|
+
if (this.opsThisHour >= this.maxPerHour) {
|
|
26
|
+
throw new Error(`Rate limit exceeded: max ${this.maxPerHour} operations/hour. Try again later.`);
|
|
27
|
+
}
|
|
28
|
+
this.opsThisSecond++;
|
|
29
|
+
this.opsThisHour++;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACd,aAAa,GAAG,CAAC,CAAC;IAClB,WAAW,GAAG,CAAC,CAAC;IAChB,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAElB,YAAY,CAAS;IACrB,UAAU,CAAS;IAEpC,YAAY,YAAY,GAAG,EAAE,EAAE,UAAU,GAAG,IAAI;QAC9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC7B,CAAC;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,GAAG,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,CAAC,YAAY,8CAA8C,CAC5F,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,CAAC,UAAU,oCAAoC,CAChF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary encoding for Node.js — uses Buffer for base64 conversion.
|
|
3
|
+
* Matches the web app's binaryEncoding.ts but simplified for server.
|
|
4
|
+
*/
|
|
5
|
+
export declare function uint8ArrayToBase64(data: Uint8Array): string;
|
|
6
|
+
export declare function base64ToUint8Array(base64: string): Uint8Array;
|
|
7
|
+
//# sourceMappingURL=BinaryEncoding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BinaryEncoding.d.ts","sourceRoot":"","sources":["../../src/yjs/BinaryEncoding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAE7D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary encoding for Node.js — uses Buffer for base64 conversion.
|
|
3
|
+
* Matches the web app's binaryEncoding.ts but simplified for server.
|
|
4
|
+
*/
|
|
5
|
+
export function uint8ArrayToBase64(data) {
|
|
6
|
+
return Buffer.from(data).toString('base64');
|
|
7
|
+
}
|
|
8
|
+
export function base64ToUint8Array(base64) {
|
|
9
|
+
return new Uint8Array(Buffer.from(base64, 'base64'));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=BinaryEncoding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BinaryEncoding.js","sourceRoot":"","sources":["../../src/yjs/BinaryEncoding.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AACvD,CAAC"}
|