dsh-gitnexus-plus 0.1.2 → 0.1.3
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-CN.md +174 -0
- package/README.md +186 -597
- package/lib/client.js +404 -37
- package/lib/gitnexus/analyze.d.ts.map +1 -1
- package/lib/gitnexus/analyze.js +40 -0
- package/lib/gitnexus/analyze.js.map +1 -1
- package/lib/gitnexus/coverage.d.ts +16 -0
- package/lib/gitnexus/coverage.d.ts.map +1 -1
- package/lib/gitnexus/coverage.js +58 -1
- package/lib/gitnexus/coverage.js.map +1 -1
- package/lib/gitnexus/git-activity.d.ts +85 -0
- package/lib/gitnexus/git-activity.d.ts.map +1 -1
- package/lib/gitnexus/git-activity.js +286 -1
- package/lib/gitnexus/git-activity.js.map +1 -1
- package/lib/gitnexus/scan.d.ts +2 -0
- package/lib/gitnexus/scan.d.ts.map +1 -1
- package/lib/gitnexus/scan.js +3 -2
- package/lib/gitnexus/scan.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -1
- package/lib/routes/coverage.d.ts +2 -1
- package/lib/routes/coverage.d.ts.map +1 -1
- package/lib/routes/coverage.js +53 -1
- package/lib/routes/coverage.js.map +1 -1
- package/lib/routes/file-history.d.ts +21 -0
- package/lib/routes/file-history.d.ts.map +1 -0
- package/lib/routes/file-history.js +69 -0
- package/lib/routes/file-history.js.map +1 -0
- package/package.json +2 -1
package/lib/routes/coverage.js
CHANGED
|
@@ -67,10 +67,62 @@ export function mountCoverageRoute(webServer, deps) {
|
|
|
67
67
|
// `refresh=1` comes from the panel's manual refresh control. A background poll
|
|
68
68
|
// omits it and gets the cached copy, which is what the TTL is for.
|
|
69
69
|
const fresh = url.searchParams.get('refresh') === '1';
|
|
70
|
-
const report = await deps.get(absRepo, { fresh });
|
|
71
70
|
// The maintenance commands ride along with the report because they are
|
|
72
71
|
// config-derived and only meaningful next to the index they would rebuild.
|
|
73
72
|
const maintenance = typeof deps.maintenance === 'function' ? deps.maintenance(absRepo) : null;
|
|
73
|
+
// `stream=1` is the panel's numeric-progress channel. NDJSON rather than SSE:
|
|
74
|
+
// one JSON object per line needs no event naming and falls back to plain JSON
|
|
75
|
+
// for any caller that does not ask for it.
|
|
76
|
+
if (url.searchParams.get('stream') === '1') {
|
|
77
|
+
const write = (payload) => {
|
|
78
|
+
if (res.writableEnded)
|
|
79
|
+
return;
|
|
80
|
+
try {
|
|
81
|
+
res.write(`${JSON.stringify(payload)}\n`);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// The reader disconnected; the rest of the work is already in flight.
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
res.statusCode = 200;
|
|
88
|
+
res.setHeader('content-type', 'application/x-ndjson; charset=utf-8');
|
|
89
|
+
res.setHeader('cache-control', 'no-store');
|
|
90
|
+
res.setHeader('x-content-type-options', 'nosniff');
|
|
91
|
+
res.setHeader('referrer-policy', 'no-referrer');
|
|
92
|
+
res.setHeader('x-accel-buffering', 'no');
|
|
93
|
+
res.flushHeaders();
|
|
94
|
+
try {
|
|
95
|
+
const report = await deps.get(absRepo, {
|
|
96
|
+
fresh,
|
|
97
|
+
onProgress: (progress) => write({ type: 'progress', ...progress }),
|
|
98
|
+
});
|
|
99
|
+
// The engine ends at 99%; the final boundary is the route having the whole
|
|
100
|
+
// report in hand, so 100 is emitted here rather than invented earlier.
|
|
101
|
+
write({
|
|
102
|
+
type: 'progress',
|
|
103
|
+
phase: 'assemble',
|
|
104
|
+
percent: 100,
|
|
105
|
+
label: '报告已读取',
|
|
106
|
+
});
|
|
107
|
+
write({
|
|
108
|
+
type: 'report',
|
|
109
|
+
report,
|
|
110
|
+
maintenance,
|
|
111
|
+
readAt: new Date().toISOString(),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
write({
|
|
116
|
+
type: 'error',
|
|
117
|
+
status: 500,
|
|
118
|
+
code: 'internal-error',
|
|
119
|
+
message: error instanceof Error ? error.message : String(error),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
res.end();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const report = await deps.get(absRepo, { fresh });
|
|
74
126
|
// `readAt` is what makes a refresh visible: without it two reads of an unchanged
|
|
75
127
|
// repository are byte-identical on screen, so the control looks inert even when
|
|
76
128
|
// it did exactly what it was asked.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/routes/coverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/routes/coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `GET /api/gitnexus/file-history?repo=<project>&path=<file>&days=7`
|
|
3
|
+
*
|
|
4
|
+
* The file timeline is read on demand. It is deliberately a separate route from
|
|
5
|
+
* coverage: a report already crosses every file in the activity window, while
|
|
6
|
+
* "show me this one file's commits" is a single bounded `git log --follow`.
|
|
7
|
+
*
|
|
8
|
+
* Read-only like coverage/search. The path is resolved inside the project root, and
|
|
9
|
+
* the engine clamps `days` to 1–30, so a hand-written URL cannot walk the filesystem
|
|
10
|
+
* or request an unbounded history.
|
|
11
|
+
*/
|
|
12
|
+
import type { WebServerService } from '@deepseek-ai/cordis';
|
|
13
|
+
import type { FileHistory } from '../gitnexus/git-activity.js';
|
|
14
|
+
export interface FileHistoryRouteDeps {
|
|
15
|
+
read: (repoPath: string, filePath: string, options?: {
|
|
16
|
+
days?: number;
|
|
17
|
+
}) => Promise<FileHistory>;
|
|
18
|
+
}
|
|
19
|
+
/** @returns disposer that unregisters the route */
|
|
20
|
+
export declare function mountFileHistoryRoute(webServer: WebServerService, deps: FileHistoryRouteDeps): () => void;
|
|
21
|
+
//# sourceMappingURL=file-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-history.d.ts","sourceRoot":"","sources":["../../src/routes/file-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,CACJ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KACxB,OAAO,CAAC,WAAW,CAAC,CAAC;CAC3B;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,oBAAoB,GACzB,MAAM,IAAI,CAyDZ"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `GET /api/gitnexus/file-history?repo=<project>&path=<file>&days=7`
|
|
3
|
+
*
|
|
4
|
+
* The file timeline is read on demand. It is deliberately a separate route from
|
|
5
|
+
* coverage: a report already crosses every file in the activity window, while
|
|
6
|
+
* "show me this one file's commits" is a single bounded `git log --follow`.
|
|
7
|
+
*
|
|
8
|
+
* Read-only like coverage/search. The path is resolved inside the project root, and
|
|
9
|
+
* the engine clamps `days` to 1–30, so a hand-written URL cannot walk the filesystem
|
|
10
|
+
* or request an unbounded history.
|
|
11
|
+
*/
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
import { isProjectRoot } from '../gitnexus/index-meta.js';
|
|
14
|
+
import { guardHandler, passGuard, answerHead, sendJson } from './guard.js';
|
|
15
|
+
/** @returns disposer that unregisters the route */
|
|
16
|
+
export function mountFileHistoryRoute(webServer, deps) {
|
|
17
|
+
const handler = guardHandler(async (req, res) => {
|
|
18
|
+
if (!passGuard(req, res))
|
|
19
|
+
return;
|
|
20
|
+
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
21
|
+
const repo = url.searchParams.get('repo');
|
|
22
|
+
const file = url.searchParams.get('path');
|
|
23
|
+
if (repo === null || repo.trim() === '' || file === null || file.trim() === '') {
|
|
24
|
+
sendJson(res, 400, {
|
|
25
|
+
ok: false,
|
|
26
|
+
code: 'missing-params',
|
|
27
|
+
message: 'repo and path query parameters are required',
|
|
28
|
+
});
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const absRepo = path.resolve(repo);
|
|
32
|
+
if (!(await isProjectRoot(absRepo))) {
|
|
33
|
+
sendJson(res, 404, {
|
|
34
|
+
ok: false,
|
|
35
|
+
code: 'not-a-project',
|
|
36
|
+
message: 'directory is neither a GitNexus index nor a git repository root',
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const relative = file.trim();
|
|
41
|
+
const prefix = absRepo.endsWith(path.sep) ? absRepo : `${absRepo}${path.sep}`;
|
|
42
|
+
const absolute = path.resolve(absRepo, relative);
|
|
43
|
+
// Windows paths compare case-insensitively; normalising both sides avoids a
|
|
44
|
+
// false "outside project" for a path the caller spelled with another drive case.
|
|
45
|
+
const inside = process.platform === 'win32'
|
|
46
|
+
? absolute.toLowerCase().startsWith(prefix.toLowerCase())
|
|
47
|
+
: absolute.startsWith(prefix);
|
|
48
|
+
if (!inside) {
|
|
49
|
+
sendJson(res, 400, {
|
|
50
|
+
ok: false,
|
|
51
|
+
code: 'invalid-path',
|
|
52
|
+
message: 'path must resolve inside the project root',
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (answerHead(req, res))
|
|
57
|
+
return;
|
|
58
|
+
const parsedDays = Number.parseInt(url.searchParams.get('days') ?? '7', 10);
|
|
59
|
+
const days = Number.isFinite(parsedDays) ? Math.max(1, Math.min(30, parsedDays)) : 7;
|
|
60
|
+
const history = await deps.read(absRepo, relative, { days });
|
|
61
|
+
sendJson(res, 200, {
|
|
62
|
+
ok: true,
|
|
63
|
+
...history,
|
|
64
|
+
readAt: new Date().toISOString(),
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
return webServer.register({ kind: 'prefix', path: '/api/gitnexus/file-history', handler });
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=file-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-history.js","sourceRoot":"","sources":["../../src/routes/file-history.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-gitnexus-plus",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "DSH plugin: visualize a GitNexus project index, search its symbols by keyword, report what it left out, and run its incremental refresh from a sidebar panel — including detecting a missing GitNexus and installing one on request.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"scripts/link-runtime.mjs",
|
|
39
39
|
"cordis.patch.yml",
|
|
40
40
|
"README.md",
|
|
41
|
+
"README-CN.md",
|
|
41
42
|
"LICENSE"
|
|
42
43
|
],
|
|
43
44
|
"engines": {
|