dr-claw 1.1.3 → 1.1.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/assets/{_basePickBy-CTZ7OJiJ.js → _basePickBy-7CEpiVqc.js} +1 -1
- package/dist/assets/{_baseUniq-LYG5erFT.js → _baseUniq-yh8GoKah.js} +1 -1
- package/dist/assets/{arc-CYhqYtN8.js → arc-xxYot-So.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-B7xb9vYd.js → architectureDiagram-VXUJARFQ-Bb1NqOFB.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-Dz6eN3Yc.js → blockDiagram-VD42YOAC-D8xMHk8C.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-DIa9rHl5.js → c4Diagram-YG6GDRKO-69UiBMVa.js} +1 -1
- package/dist/assets/channel-BJdHHkhR.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-JZVAPeYL.js → chunk-4BX2VUAB-DXrPhE6K.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-BoNiAnP-.js → chunk-55IACEB6-B3sw4AGX.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-BURhBXxZ.js → chunk-B4BG7PRW-Dd4n17kR.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-Bxa-FsXa.js → chunk-DI55MBZ5-DuTb9gb8.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-Dn_6iLa4.js → chunk-FMBD7UC4-CGErQ-ud.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-B0N2-K2K.js → chunk-QN33PNHL-Bk5fuYbR.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-Bd7csSYW.js → chunk-QZHKN3VN-2UdZTbge.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-DV5aJTr6.js → chunk-TZMSLE5B-Bl-UYKEK.js} +1 -1
- package/dist/assets/{classDiagram-2ON5EDUG-iZL_J_xq.js → classDiagram-2ON5EDUG-EaoBDWqJ.js} +1 -1
- package/dist/assets/{classDiagram-v2-WZHVMYZB-iZL_J_xq.js → classDiagram-v2-WZHVMYZB-EaoBDWqJ.js} +1 -1
- package/dist/assets/clone-CwXTbwxl.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-C_Uhc5Rn.js → cose-bilkent-S5V4N54A-qXNKLX2R.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-BiW_P9KL.js → dagre-6UL2VRFP-DmHvDWep.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-uGQgzEbt.js → diagram-PSM6KHXK-C_Rj4DX3.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-qox_ZDR7.js → diagram-QEK2KX5R-BVr3mPXW.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-RKFFDPoU.js → diagram-S2PKOQOG-DVx6i0Qe.js} +1 -1
- package/dist/assets/{erDiagram-Q2GNP2WA-11Go9j0k.js → erDiagram-Q2GNP2WA-BJQyv9_t.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-DBAiHvAx.js → flowDiagram-NV44I4VS-DCR8sPAE.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-Dzc11a-7.js → ganttDiagram-JELNMOA3-BcXFAthK.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-DJVXfOqP.js → gitGraphDiagram-V2S2FVAM-CnS56w1x.js} +1 -1
- package/dist/assets/{graph-CJ95S3XQ.js → graph-DGtZXuDY.js} +1 -1
- package/dist/assets/index-C-sL-ag0.css +1 -0
- package/dist/assets/index-VdqxIFPL.js +670 -0
- package/dist/assets/{infoDiagram-HS3SLOUP-DpdkGgBK.js → infoDiagram-HS3SLOUP-DtI272ZD.js} +1 -1
- package/dist/assets/{journeyDiagram-XKPGCS4Q-CSGpNz7D.js → journeyDiagram-XKPGCS4Q-DHp_Kica.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-BvPB3vMM.js → kanban-definition-3W4ZIXB7-CjgHMNku.js} +1 -1
- package/dist/assets/{layout-C96BbhFQ.js → layout-Cnc-DCSb.js} +1 -1
- package/dist/assets/{linear-HjDfr5-H.js → linear-BtRgmV19.js} +1 -1
- package/dist/assets/{mermaid.core-J7RjAKTD.js → mermaid.core-B20uzv6N.js} +5 -5
- package/dist/assets/{mindmap-definition-VGOIOE7T-C6MlEWCC.js → mindmap-definition-VGOIOE7T-bbcLXkWp.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-Bi5BLoNG.js → pieDiagram-ADFJNKIX-B4fEzWKO.js} +1 -1
- package/dist/assets/{quadrantDiagram-AYHSOK5B-Bo14V3Q1.js → quadrantDiagram-AYHSOK5B-B5G0SMbK.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-CP3_EwJ4.js → requirementDiagram-UZGBJVZJ-DsqtOFgj.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-B3wFfI_W.js → sankeyDiagram-TZEHDZUN-CiGemFRE.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-fZVhVt_s.js → sequenceDiagram-WL72ISMW-hEMvYbe9.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-BooCitAX.js → stateDiagram-FKZM4ZOC-Cn8VB7b1.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-DaH0PZOq.js +1 -0
- package/dist/assets/{timeline-definition-IT6M3QCI-CM0zUx-Q.js → timeline-definition-IT6M3QCI-DChT1GUr.js} +1 -1
- package/dist/assets/{treemap-GDKQZRPO-B-8ph3e8.js → treemap-GDKQZRPO-Dflv6a8z.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-Q2k0EFpn.js → xychartDiagram-PRI3JC2R-Dr4urXR8.js} +1 -1
- package/dist/icons/nanoclaude.png +0 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/public/icons/nanoclaude.png +0 -0
- package/scripts/native-runtime.mjs +5 -3
- package/server/__tests__/gemini-api.test.mjs +699 -0
- package/server/__tests__/gemini-session-index.test.mjs +95 -0
- package/server/claude-sdk.js +82 -3
- package/server/cli-chat.js +28 -17
- package/server/cli.js +13 -1
- package/server/data/news-log-arxiv.json +1 -0
- package/server/data/news-log-huggingface.json +1 -0
- package/server/data/news-results-arxiv.json +460 -0
- package/server/data/news-results-huggingface.json +817 -0
- package/server/data/research_interests_arxiv.json +50 -0
- package/server/data/research_interests_huggingface.json +4 -0
- package/server/database/db.js +92 -0
- package/server/database/init.sql +17 -1
- package/server/gemini-api.js +1838 -0
- package/server/gemini-cli.js +13 -2
- package/server/index.js +94 -17
- package/server/load-env.js +13 -1
- package/server/local-gpu.js +3 -1
- package/server/nano-claude-code.js +340 -0
- package/server/nanoSessionPaths.js +41 -0
- package/server/openai-codex.js +6 -2
- package/server/openrouter.js +37 -22
- package/server/projects.js +207 -0
- package/server/routes/agent.js +32 -7
- package/server/routes/auto-research.js +1 -1
- package/server/routes/claude-btw.js +55 -0
- package/server/routes/cli-auth.js +103 -2
- package/server/routes/commands.js +25 -1
- package/server/routes/community-tools.js +26 -21
- package/server/routes/memory.js +143 -0
- package/server/routes/news.js +3 -0
- package/server/routes/skills.js +35 -0
- package/server/routes/user.js +3 -5
- package/server/utils/__tests__/safePath.test.js +93 -0
- package/server/utils/cliResolution.js +13 -1
- package/server/utils/geminiOAuth.js +333 -0
- package/server/utils/memoryPrompt.js +78 -0
- package/server/utils/safePath.js +51 -0
- package/server/utils/sessionIndex.js +2 -0
- package/server/utils/skillExpander.js +142 -0
- package/server/utils/spawnAsync.js +78 -0
- package/shared/modelConstants.js +19 -1
- package/dist/assets/channel-Dk-4X8XT.js +0 -1
- package/dist/assets/clone-DbPu_xVW.js +0 -1
- package/dist/assets/index-1MRmplD1.css +0 -1
- package/dist/assets/index-CFbkRzqw.js +0 -664
- package/dist/assets/stateDiagram-v2-4FDKWEC3-BzH7qQMD.js +0 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"research_domains": {
|
|
3
|
+
"Large Language Models": {
|
|
4
|
+
"keywords": [
|
|
5
|
+
"large language model",
|
|
6
|
+
"LLM",
|
|
7
|
+
"transformer",
|
|
8
|
+
"foundation model"
|
|
9
|
+
],
|
|
10
|
+
"arxiv_categories": [
|
|
11
|
+
"cs.AI",
|
|
12
|
+
"cs.LG",
|
|
13
|
+
"cs.CL"
|
|
14
|
+
],
|
|
15
|
+
"priority": 5
|
|
16
|
+
},
|
|
17
|
+
"Multimodal": {
|
|
18
|
+
"keywords": [
|
|
19
|
+
"vision-language",
|
|
20
|
+
"multimodal",
|
|
21
|
+
"image-text",
|
|
22
|
+
"visual"
|
|
23
|
+
],
|
|
24
|
+
"arxiv_categories": [
|
|
25
|
+
"cs.CV",
|
|
26
|
+
"cs.MM",
|
|
27
|
+
"cs.CL"
|
|
28
|
+
],
|
|
29
|
+
"priority": 4
|
|
30
|
+
},
|
|
31
|
+
"AI Agents": {
|
|
32
|
+
"keywords": [
|
|
33
|
+
"agent",
|
|
34
|
+
"multi-agent",
|
|
35
|
+
"orchestration",
|
|
36
|
+
"autonomous",
|
|
37
|
+
"planning"
|
|
38
|
+
],
|
|
39
|
+
"arxiv_categories": [
|
|
40
|
+
"cs.AI",
|
|
41
|
+
"cs.MA",
|
|
42
|
+
"cs.RO"
|
|
43
|
+
],
|
|
44
|
+
"priority": 4
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"top_n": 10,
|
|
48
|
+
"max_results": 200,
|
|
49
|
+
"categories": "cs.AI,cs.LG,cs.CL,cs.CV,cs.MM,cs.MA,cs.RO"
|
|
50
|
+
}
|
package/server/database/db.js
CHANGED
|
@@ -162,6 +162,36 @@ const runMigrations = () => {
|
|
|
162
162
|
CREATE INDEX IF NOT EXISTS idx_session_tag_links_tag ON session_tag_links(tag_id);
|
|
163
163
|
`);
|
|
164
164
|
|
|
165
|
+
// Migration: user_memories table
|
|
166
|
+
db.exec(`
|
|
167
|
+
CREATE TABLE IF NOT EXISTS user_memories (
|
|
168
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
169
|
+
user_id INTEGER NOT NULL,
|
|
170
|
+
content TEXT NOT NULL,
|
|
171
|
+
category TEXT DEFAULT 'general',
|
|
172
|
+
is_enabled BOOLEAN DEFAULT 1,
|
|
173
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
174
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
175
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
176
|
+
);
|
|
177
|
+
CREATE INDEX IF NOT EXISTS idx_user_memories_user ON user_memories(user_id);
|
|
178
|
+
CREATE INDEX IF NOT EXISTS idx_user_memories_user_enabled ON user_memories(user_id, is_enabled);
|
|
179
|
+
`);
|
|
180
|
+
|
|
181
|
+
// Migration: per-user memory_enabled column
|
|
182
|
+
if (!columnNames.includes('memory_enabled')) {
|
|
183
|
+
console.log('Running migration: Adding memory_enabled column');
|
|
184
|
+
db.exec('ALTER TABLE users ADD COLUMN memory_enabled BOOLEAN DEFAULT 1');
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Performance indexes for session_metadata last_activity sorting
|
|
188
|
+
db.exec(`
|
|
189
|
+
CREATE INDEX IF NOT EXISTS idx_session_metadata_last_activity
|
|
190
|
+
ON session_metadata(last_activity);
|
|
191
|
+
CREATE INDEX IF NOT EXISTS idx_session_metadata_project_activity
|
|
192
|
+
ON session_metadata(project_name, last_activity);
|
|
193
|
+
`);
|
|
194
|
+
|
|
165
195
|
console.log('Database migrations completed successfully');
|
|
166
196
|
} catch (error) {
|
|
167
197
|
console.error('Error running migrations:', error.message);
|
|
@@ -1839,6 +1869,67 @@ const referencesDb = {
|
|
|
1839
1869
|
},
|
|
1840
1870
|
};
|
|
1841
1871
|
|
|
1872
|
+
// User memories database operations
|
|
1873
|
+
// User memories database operations
|
|
1874
|
+
const MAX_MEMORIES_PER_USER = 50;
|
|
1875
|
+
const MAX_MEMORY_CONTENT_LENGTH = 500;
|
|
1876
|
+
|
|
1877
|
+
const memoryDb = {
|
|
1878
|
+
create: (userId, content, category = 'general') => {
|
|
1879
|
+
const count = db.prepare('SELECT COUNT(*) as count FROM user_memories WHERE user_id = ?').get(userId);
|
|
1880
|
+
if (count.count >= MAX_MEMORIES_PER_USER) {
|
|
1881
|
+
throw new Error(`Maximum of ${MAX_MEMORIES_PER_USER} memories per user reached`);
|
|
1882
|
+
}
|
|
1883
|
+
const stmt = db.prepare('INSERT INTO user_memories (user_id, content, category) VALUES (?, ?, ?)');
|
|
1884
|
+
const result = stmt.run(userId, content.slice(0, MAX_MEMORY_CONTENT_LENGTH), category);
|
|
1885
|
+
return db.prepare('SELECT * FROM user_memories WHERE id = ?').get(result.lastInsertRowid);
|
|
1886
|
+
},
|
|
1887
|
+
|
|
1888
|
+
getAll: (userId) => {
|
|
1889
|
+
return db.prepare('SELECT * FROM user_memories WHERE user_id = ? ORDER BY created_at DESC').all(userId);
|
|
1890
|
+
},
|
|
1891
|
+
|
|
1892
|
+
getEnabled: (userId) => {
|
|
1893
|
+
return db.prepare('SELECT * FROM user_memories WHERE user_id = ? AND is_enabled = 1 ORDER BY created_at DESC').all(userId);
|
|
1894
|
+
},
|
|
1895
|
+
|
|
1896
|
+
getById: (userId, memoryId) => {
|
|
1897
|
+
return db.prepare('SELECT * FROM user_memories WHERE id = ? AND user_id = ?').get(memoryId, userId);
|
|
1898
|
+
},
|
|
1899
|
+
|
|
1900
|
+
update: (userId, memoryId, { content, category }) => {
|
|
1901
|
+
const fields = [];
|
|
1902
|
+
const params = [];
|
|
1903
|
+
if (content !== undefined) { fields.push('content = ?'); params.push(content.slice(0, MAX_MEMORY_CONTENT_LENGTH)); }
|
|
1904
|
+
if (category !== undefined) { fields.push('category = ?'); params.push(category); }
|
|
1905
|
+
if (fields.length === 0) return null;
|
|
1906
|
+
fields.push('updated_at = CURRENT_TIMESTAMP');
|
|
1907
|
+
params.push(memoryId, userId);
|
|
1908
|
+
db.prepare(`UPDATE user_memories SET ${fields.join(', ')} WHERE id = ? AND user_id = ?`).run(...params);
|
|
1909
|
+
return db.prepare('SELECT * FROM user_memories WHERE id = ? AND user_id = ?').get(memoryId, userId);
|
|
1910
|
+
},
|
|
1911
|
+
|
|
1912
|
+
toggle: (userId, memoryId) => {
|
|
1913
|
+
db.prepare('UPDATE user_memories SET is_enabled = NOT is_enabled, updated_at = CURRENT_TIMESTAMP WHERE id = ? AND user_id = ?').run(memoryId, userId);
|
|
1914
|
+
return db.prepare('SELECT * FROM user_memories WHERE id = ? AND user_id = ?').get(memoryId, userId);
|
|
1915
|
+
},
|
|
1916
|
+
|
|
1917
|
+
delete: (userId, memoryId) => {
|
|
1918
|
+
const result = db.prepare('DELETE FROM user_memories WHERE id = ? AND user_id = ?').run(memoryId, userId);
|
|
1919
|
+
return result.changes > 0;
|
|
1920
|
+
},
|
|
1921
|
+
|
|
1922
|
+
getMemoryEnabled: (userId) => {
|
|
1923
|
+
const row = db.prepare('SELECT memory_enabled FROM users WHERE id = ?').get(userId);
|
|
1924
|
+
return row ? row.memory_enabled !== 0 : true; // default true
|
|
1925
|
+
},
|
|
1926
|
+
|
|
1927
|
+
setMemoryEnabled: (userId, enabled) => {
|
|
1928
|
+
db.prepare('UPDATE users SET memory_enabled = ? WHERE id = ?').run(enabled ? 1 : 0, userId);
|
|
1929
|
+
return enabled;
|
|
1930
|
+
},
|
|
1931
|
+
};
|
|
1932
|
+
|
|
1842
1933
|
export {
|
|
1843
1934
|
db,
|
|
1844
1935
|
initializeDatabase,
|
|
@@ -1852,5 +1943,6 @@ export {
|
|
|
1852
1943
|
tagDb,
|
|
1853
1944
|
projectDb,
|
|
1854
1945
|
referencesDb,
|
|
1946
|
+
memoryDb,
|
|
1855
1947
|
normalizeSessionTimestamp
|
|
1856
1948
|
};
|
package/server/database/init.sql
CHANGED
|
@@ -12,7 +12,8 @@ CREATE TABLE IF NOT EXISTS users (
|
|
|
12
12
|
is_active BOOLEAN DEFAULT 1,
|
|
13
13
|
git_name TEXT,
|
|
14
14
|
git_email TEXT,
|
|
15
|
-
has_completed_onboarding BOOLEAN DEFAULT 0
|
|
15
|
+
has_completed_onboarding BOOLEAN DEFAULT 0,
|
|
16
|
+
memory_enabled BOOLEAN DEFAULT 1
|
|
16
17
|
);
|
|
17
18
|
|
|
18
19
|
-- Indexes for performance
|
|
@@ -192,3 +193,18 @@ CREATE TABLE IF NOT EXISTS reference_tags (
|
|
|
192
193
|
);
|
|
193
194
|
|
|
194
195
|
CREATE INDEX IF NOT EXISTS idx_reference_tags_ref ON reference_tags(reference_id);
|
|
196
|
+
|
|
197
|
+
-- User memories table (for remembering user preferences, habits, context)
|
|
198
|
+
CREATE TABLE IF NOT EXISTS user_memories (
|
|
199
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
200
|
+
user_id INTEGER NOT NULL,
|
|
201
|
+
content TEXT NOT NULL,
|
|
202
|
+
category TEXT DEFAULT 'general', -- general | preference | context | workflow
|
|
203
|
+
is_enabled BOOLEAN DEFAULT 1,
|
|
204
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
205
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
206
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
CREATE INDEX IF NOT EXISTS idx_user_memories_user ON user_memories(user_id);
|
|
210
|
+
CREATE INDEX IF NOT EXISTS idx_user_memories_user_enabled ON user_memories(user_id, is_enabled);
|