dr-claw 1.1.2 → 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/README.md +286 -177
- package/README.zh-CN.md +286 -174
- package/dist/assets/{_basePickBy-C0n1uo4u.js → _basePickBy-7CEpiVqc.js} +1 -1
- package/dist/assets/{_baseUniq-BRNmhFkc.js → _baseUniq-yh8GoKah.js} +1 -1
- package/dist/assets/{arc-DOMBmC_A.js → arc-xxYot-So.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-CtMWglbD.js → architectureDiagram-VXUJARFQ-Bb1NqOFB.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-DK_gTkJy.js → blockDiagram-VD42YOAC-D8xMHk8C.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-DrDAvsn7.js → c4Diagram-YG6GDRKO-69UiBMVa.js} +1 -1
- package/dist/assets/channel-BJdHHkhR.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-CGbhdZcN.js → chunk-4BX2VUAB-DXrPhE6K.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-sGeFSxen.js → chunk-55IACEB6-B3sw4AGX.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-RxgHAU_P.js → chunk-B4BG7PRW-Dd4n17kR.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-CvHUXZrx.js → chunk-DI55MBZ5-DuTb9gb8.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-Sn7cXVNU.js → chunk-FMBD7UC4-CGErQ-ud.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-bDKOHppN.js → chunk-QN33PNHL-Bk5fuYbR.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-B9kN5LGm.js → chunk-QZHKN3VN-2UdZTbge.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-CCBe6len.js → chunk-TZMSLE5B-Bl-UYKEK.js} +1 -1
- package/dist/assets/{classDiagram-2ON5EDUG-DQoMNYlY.js → classDiagram-2ON5EDUG-EaoBDWqJ.js} +1 -1
- package/dist/assets/{classDiagram-v2-WZHVMYZB-DQoMNYlY.js → classDiagram-v2-WZHVMYZB-EaoBDWqJ.js} +1 -1
- package/dist/assets/clone-CwXTbwxl.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-r6sLiHBW.js → cose-bilkent-S5V4N54A-qXNKLX2R.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-AbsaR1Oa.js → dagre-6UL2VRFP-DmHvDWep.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-DjCvdUyy.js → diagram-PSM6KHXK-C_Rj4DX3.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-CqiocXkH.js → diagram-QEK2KX5R-BVr3mPXW.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-D5ALeoII.js → diagram-S2PKOQOG-DVx6i0Qe.js} +1 -1
- package/dist/assets/{erDiagram-Q2GNP2WA-C1AeOsiz.js → erDiagram-Q2GNP2WA-BJQyv9_t.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-C98ve_DO.js → flowDiagram-NV44I4VS-DCR8sPAE.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-3zdLvcxD.js → ganttDiagram-JELNMOA3-BcXFAthK.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-nDuDMsHh.js → gitGraphDiagram-V2S2FVAM-CnS56w1x.js} +1 -1
- package/dist/assets/{graph-Blm-emkR.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-CmzE3q0R.js → infoDiagram-HS3SLOUP-DtI272ZD.js} +1 -1
- package/dist/assets/{journeyDiagram-XKPGCS4Q-CYaW7LrP.js → journeyDiagram-XKPGCS4Q-DHp_Kica.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-mkmW7p0j.js → kanban-definition-3W4ZIXB7-CjgHMNku.js} +1 -1
- package/dist/assets/{layout-Ct2kFIId.js → layout-Cnc-DCSb.js} +1 -1
- package/dist/assets/{linear-CKG9EwIJ.js → linear-BtRgmV19.js} +1 -1
- package/dist/assets/{mermaid.core-CaKcUnnd.js → mermaid.core-B20uzv6N.js} +5 -5
- package/dist/assets/{mindmap-definition-VGOIOE7T-Bct-pYin.js → mindmap-definition-VGOIOE7T-bbcLXkWp.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-C8wFD4Jr.js → pieDiagram-ADFJNKIX-B4fEzWKO.js} +1 -1
- package/dist/assets/{quadrantDiagram-AYHSOK5B-CuiE_f46.js → quadrantDiagram-AYHSOK5B-B5G0SMbK.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-C4v1CqU8.js → requirementDiagram-UZGBJVZJ-DsqtOFgj.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-keAqqs-Y.js → sankeyDiagram-TZEHDZUN-CiGemFRE.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-ClNbvKTB.js → sequenceDiagram-WL72ISMW-hEMvYbe9.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-D8We-2vq.js → stateDiagram-FKZM4ZOC-Cn8VB7b1.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-DaH0PZOq.js +1 -0
- package/dist/assets/{timeline-definition-IT6M3QCI-DsvEMT5T.js → timeline-definition-IT6M3QCI-DChT1GUr.js} +1 -1
- package/dist/assets/{treemap-GDKQZRPO-TJrzN7Bj.js → treemap-GDKQZRPO-Dflv6a8z.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-BdATmY5F.js → xychartDiagram-PRI3JC2R-Dr4urXR8.js} +1 -1
- package/dist/icons/nanoclaude.png +0 -0
- package/dist/index.html +2 -2
- package/dist/screenshots/screenshot_v1_2.png +0 -0
- package/package.json +61 -4
- package/public/icons/nanoclaude.png +0 -0
- package/public/screenshots/screenshot_v1_2.png +0 -0
- package/scripts/build-electron-icons.mjs +40 -0
- package/scripts/check-deps.js +28 -0
- package/scripts/native-runtime.mjs +128 -0
- package/server/__tests__/gemini-api.test.mjs +699 -0
- package/server/__tests__/gemini-session-index.test.mjs +95 -0
- package/server/__tests__/project-sync-dedup.test.mjs +173 -0
- package/server/__tests__/session-delete.test.mjs +152 -0
- package/server/claude-sdk.js +175 -14
- package/server/cli-chat.js +28 -17
- package/server/cli.js +48 -11
- 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 +101 -5
- 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 -16
- package/server/load-env.js +13 -1
- package/server/local-gpu.js +166 -24
- package/server/mcp-compute.js +223 -0
- package/server/middleware/auth.js +25 -6
- 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 +516 -110
- 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 +422 -58
- package/server/routes/commands.js +25 -1
- package/server/routes/community-tools.js +398 -0
- package/server/routes/compute.js +155 -0
- package/server/routes/git.js +9 -11
- 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/codexSessionMessages.js +285 -0
- 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-BFOE7OyC.js +0 -1
- package/dist/assets/clone-BulQSblH.js +0 -1
- package/dist/assets/index-B8Yutsnm.css +0 -1
- package/dist/assets/index-Cf6gyhc3.js +0 -654
- package/dist/assets/stateDiagram-v2-4FDKWEC3-BUURfjrE.js +0 -1
- package/scripts/install-python-tools.js +0 -64
package/server/openrouter.js
CHANGED
|
@@ -15,11 +15,15 @@ import path from 'path';
|
|
|
15
15
|
import os from 'os';
|
|
16
16
|
import { exec } from 'child_process';
|
|
17
17
|
import { promisify } from 'util';
|
|
18
|
+
import spawnAsync from './utils/spawnAsync.js';
|
|
18
19
|
import { encodeProjectPath, ensureProjectSkillLinks, reconcileOpenRouterSessionIndex } from './projects.js';
|
|
19
20
|
import { writeProjectTemplates } from './templates/index.js';
|
|
20
21
|
import { classifyError } from '../shared/errorClassifier.js';
|
|
21
22
|
import { applyStageTagsToSession, recordIndexedSession } from './utils/sessionIndex.js';
|
|
22
23
|
import { createRequestId, waitForToolApproval, matchesToolPermission } from './utils/permissions.js';
|
|
24
|
+
import { buildMemoryBlock } from './utils/memoryPrompt.js';
|
|
25
|
+
import { expandSkillCommand } from './utils/skillExpander.js';
|
|
26
|
+
import { safePath } from './utils/safePath.js';
|
|
23
27
|
|
|
24
28
|
const execAsync = promisify(exec);
|
|
25
29
|
|
|
@@ -220,10 +224,9 @@ function sendMessage(ws, data) {
|
|
|
220
224
|
// ---------------------------------------------------------------------------
|
|
221
225
|
|
|
222
226
|
async function executeTool(name, args, workingDir) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
};
|
|
227
|
+
// Constrain all paths to the project root to prevent LLM-driven
|
|
228
|
+
// prompt-injection attacks from reading/writing outside the workspace.
|
|
229
|
+
const resolve = (p) => safePath(p, workingDir);
|
|
227
230
|
const trunc = (s) =>
|
|
228
231
|
s.length <= MAX_OUTPUT_CHARS ? s : s.slice(0, MAX_OUTPUT_CHARS) + `\n…(truncated, ${s.length} total chars)`;
|
|
229
232
|
|
|
@@ -276,25 +279,33 @@ async function executeTool(name, args, workingDir) {
|
|
|
276
279
|
|
|
277
280
|
case 'Glob': {
|
|
278
281
|
const dir = resolve(args.path);
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
282
|
+
try {
|
|
283
|
+
const { stdout } = await spawnAsync('rg', ['--files', '--glob', args.pattern], {
|
|
284
|
+
cwd: dir, timeout: 30_000,
|
|
285
|
+
});
|
|
286
|
+
const lines = stdout.split('\n').filter(Boolean).slice(0, 300);
|
|
287
|
+
return trunc(lines.join('\n') || '(no matches)');
|
|
288
|
+
} catch {
|
|
289
|
+
try {
|
|
290
|
+
const { stdout } = await spawnAsync('find', ['.', '-name', args.pattern, '-type', 'f'], {
|
|
291
|
+
cwd: dir, timeout: 30_000,
|
|
292
|
+
});
|
|
293
|
+
const lines = stdout.split('\n').filter(Boolean).slice(0, 300);
|
|
294
|
+
return trunc(lines.join('\n') || '(no matches)');
|
|
295
|
+
} catch {
|
|
296
|
+
return '(no matches)';
|
|
297
|
+
}
|
|
298
|
+
}
|
|
288
299
|
}
|
|
289
300
|
|
|
290
301
|
case 'Grep': {
|
|
291
302
|
const target = resolve(args.path);
|
|
292
|
-
|
|
293
|
-
if (args.include)
|
|
294
|
-
|
|
303
|
+
const rgArgs = ['--line-number', '--max-count', '100', '--max-columns', '200'];
|
|
304
|
+
if (args.include) rgArgs.push('--glob', args.include);
|
|
305
|
+
rgArgs.push('-e', args.pattern, '--', target);
|
|
295
306
|
try {
|
|
296
|
-
const { stdout } = await
|
|
297
|
-
cwd: workingDir, timeout: 30_000,
|
|
307
|
+
const { stdout } = await spawnAsync('rg', rgArgs, {
|
|
308
|
+
cwd: workingDir, timeout: 30_000,
|
|
298
309
|
});
|
|
299
310
|
return trunc(stdout || '(no matches)');
|
|
300
311
|
} catch (err) {
|
|
@@ -645,8 +656,9 @@ export async function queryOpenRouter(command, options = {}, ws) {
|
|
|
645
656
|
projectName: workingDirectory ? encodeProjectPath(workingDirectory) : undefined,
|
|
646
657
|
});
|
|
647
658
|
|
|
648
|
-
// ── Build conversation
|
|
649
|
-
const
|
|
659
|
+
// ── Build conversation ───────────────────���─────────────────────────
|
|
660
|
+
const memoryBlock = options.userId ? buildMemoryBlock(options.userId) : '';
|
|
661
|
+
const systemContent = (customSystemPrompt || await buildSystemPrompt(workingDirectory)) + memoryBlock;
|
|
650
662
|
const messages = [{ role: 'system', content: systemContent }];
|
|
651
663
|
|
|
652
664
|
if (sessionId) {
|
|
@@ -657,8 +669,11 @@ export async function queryOpenRouter(command, options = {}, ws) {
|
|
|
657
669
|
}
|
|
658
670
|
}
|
|
659
671
|
|
|
660
|
-
|
|
661
|
-
|
|
672
|
+
// Expand /skill-name slash commands into full SKILL.md instructions
|
|
673
|
+
const expandedCommand = await expandSkillCommand(command?.trim() || command, workingDirectory);
|
|
674
|
+
|
|
675
|
+
messages.push({ role: 'user', content: expandedCommand });
|
|
676
|
+
await appendSession(currentSessionId, { role: 'user', content: expandedCommand }).catch(() => {});
|
|
662
677
|
|
|
663
678
|
const tools = permissionMode === 'plan'
|
|
664
679
|
? TOOL_SCHEMAS.filter((t) => READ_ONLY_TOOLS.has(t.function.name))
|