projscan 3.3.0 → 3.4.1
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 +46 -26
- package/dist/cli/commands/plugin.js +10 -2
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/understand.d.ts +1 -0
- package/dist/cli/commands/understand.js +112 -0
- package/dist/cli/commands/understand.js.map +1 -0
- package/dist/cli/commands/workplan.js +1 -1
- package/dist/cli/commands/workplan.js.map +1 -1
- package/dist/cli/commands/workspace.js +3 -2
- package/dist/cli/commands/workspace.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/pluginDx.d.ts +1 -0
- package/dist/core/pluginDx.js +77 -18
- package/dist/core/pluginDx.js.map +1 -1
- package/dist/core/plugins.d.ts +1 -1
- package/dist/core/plugins.js.map +1 -1
- package/dist/core/preflight.js +4 -16
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/privacy.js +6 -0
- package/dist/core/privacy.js.map +1 -1
- package/dist/core/roadmapCatalog.d.ts +1 -0
- package/dist/core/roadmapCatalog.js +14 -11
- package/dist/core/roadmapCatalog.js.map +1 -1
- package/dist/core/understand.d.ts +8 -0
- package/dist/core/understand.js +567 -0
- package/dist/core/understand.js.map +1 -0
- package/dist/core/workspace.d.ts +4 -2
- package/dist/core/workspace.js +63 -4
- package/dist/core/workspace.js.map +1 -1
- package/dist/mcp/tools/plugin.js +48 -4
- package/dist/mcp/tools/plugin.js.map +1 -1
- package/dist/mcp/tools/understand.d.ts +2 -0
- package/dist/mcp/tools/understand.js +43 -0
- package/dist/mcp/tools/understand.js.map +1 -0
- package/dist/mcp/tools/workplan.js +3 -2
- package/dist/mcp/tools/workplan.js.map +1 -1
- package/dist/mcp/tools/workspaceGraph.js +31 -0
- package/dist/mcp/tools/workspaceGraph.js.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/projscan-sbom.cdx.json +87 -185
- package/dist/tool-manifest.json +37 -5
- package/dist/types.d.ts +159 -0
- package/dist/utils/formatSupport.d.ts +1 -0
- package/dist/utils/formatSupport.js +1 -0
- package/dist/utils/formatSupport.js.map +1 -1
- package/docs/PLUGIN-AUTHORING.md +6 -7
- package/docs/PLUGIN-GALLERY.md +2 -1
- package/package.json +3 -3
package/dist/core/workspace.d.ts
CHANGED
|
@@ -9,13 +9,14 @@
|
|
|
9
9
|
* Disambiguation: this is DIFFERENT from `src/core/monorepo.ts`'s
|
|
10
10
|
* `WorkspaceInfo`, which detects intra-repo packages (npm/yarn/pnpm/
|
|
11
11
|
* Lerna/Nx) within a single repo. The cross-repo workspace lives at
|
|
12
|
-
* `<cwd>/.projscan-workspace.json`; the monorepo workspace is
|
|
12
|
+
* `<cwd>/.projscan-cache/workspace.json`; the monorepo workspace is
|
|
13
13
|
* detected from package.json/pnpm-workspace.yaml/etc.
|
|
14
14
|
*
|
|
15
15
|
* Local-only state. No network. Schema-versioned. Best-effort writes
|
|
16
16
|
* (mirrors the session and memory modules' posture).
|
|
17
17
|
*/
|
|
18
18
|
export declare const WORKSPACE_SCHEMA_VERSION = 1;
|
|
19
|
+
export declare const WORKSPACE_MAX_REPOS = 20;
|
|
19
20
|
export interface WorkspaceRepo {
|
|
20
21
|
/** Absolute path to the registered repo's root. */
|
|
21
22
|
path: string;
|
|
@@ -34,7 +35,7 @@ export interface Workspace {
|
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
36
37
|
* Load the workspace at `rootPath` (the directory whose
|
|
37
|
-
* `.projscan-workspace.json` we read). Returns null if the file is
|
|
38
|
+
* `.projscan-cache/workspace.json` we read). Returns null if the file is
|
|
38
39
|
* missing, corrupt, or schema-mismatched. Never throws.
|
|
39
40
|
*/
|
|
40
41
|
export declare function loadWorkspace(rootPath: string): Promise<Workspace | null>;
|
|
@@ -43,6 +44,7 @@ export declare function loadWorkspace(rootPath: string): Promise<Workspace | nul
|
|
|
43
44
|
* `add` flow where the file may not yet exist.
|
|
44
45
|
*/
|
|
45
46
|
export declare function loadOrCreateWorkspace(rootPath: string): Promise<Workspace>;
|
|
47
|
+
export declare function resolveTrustedWorkspaceRepoPath(rootPath: string, repoPath: string): Promise<string>;
|
|
46
48
|
/**
|
|
47
49
|
* Add a sibling repo to the workspace. `repoPath` is resolved to an
|
|
48
50
|
* absolute path. Duplicate detection is by absolute path. Returns
|
package/dist/core/workspace.js
CHANGED
|
@@ -11,17 +11,18 @@ import path from 'node:path';
|
|
|
11
11
|
* Disambiguation: this is DIFFERENT from `src/core/monorepo.ts`'s
|
|
12
12
|
* `WorkspaceInfo`, which detects intra-repo packages (npm/yarn/pnpm/
|
|
13
13
|
* Lerna/Nx) within a single repo. The cross-repo workspace lives at
|
|
14
|
-
* `<cwd>/.projscan-workspace.json`; the monorepo workspace is
|
|
14
|
+
* `<cwd>/.projscan-cache/workspace.json`; the monorepo workspace is
|
|
15
15
|
* detected from package.json/pnpm-workspace.yaml/etc.
|
|
16
16
|
*
|
|
17
17
|
* Local-only state. No network. Schema-versioned. Best-effort writes
|
|
18
18
|
* (mirrors the session and memory modules' posture).
|
|
19
19
|
*/
|
|
20
20
|
export const WORKSPACE_SCHEMA_VERSION = 1;
|
|
21
|
-
const
|
|
21
|
+
export const WORKSPACE_MAX_REPOS = 20;
|
|
22
|
+
const WORKSPACE_FILENAME = path.join('.projscan-cache', 'workspace.json');
|
|
22
23
|
/**
|
|
23
24
|
* Load the workspace at `rootPath` (the directory whose
|
|
24
|
-
* `.projscan-workspace.json` we read). Returns null if the file is
|
|
25
|
+
* `.projscan-cache/workspace.json` we read). Returns null if the file is
|
|
25
26
|
* missing, corrupt, or schema-mismatched. Never throws.
|
|
26
27
|
*/
|
|
27
28
|
export async function loadWorkspace(rootPath) {
|
|
@@ -43,7 +44,7 @@ export async function loadWorkspace(rootPath) {
|
|
|
43
44
|
if (!isWorkspaceShape(parsed) || parsed.schemaVersion !== WORKSPACE_SCHEMA_VERSION) {
|
|
44
45
|
return null;
|
|
45
46
|
}
|
|
46
|
-
return parsed;
|
|
47
|
+
return trustWorkspace(rootPath, parsed);
|
|
47
48
|
}
|
|
48
49
|
/**
|
|
49
50
|
* Load the workspace, or create a fresh empty one. Useful for the
|
|
@@ -59,6 +60,24 @@ export async function loadOrCreateWorkspace(rootPath) {
|
|
|
59
60
|
repos: [],
|
|
60
61
|
};
|
|
61
62
|
}
|
|
63
|
+
export async function resolveTrustedWorkspaceRepoPath(rootPath, repoPath) {
|
|
64
|
+
if (typeof repoPath !== 'string' || repoPath.length === 0) {
|
|
65
|
+
throw new Error('Repo path is required.');
|
|
66
|
+
}
|
|
67
|
+
const rootReal = await realpathOrResolve(rootPath);
|
|
68
|
+
const resolved = path.resolve(repoPath);
|
|
69
|
+
let repoReal;
|
|
70
|
+
try {
|
|
71
|
+
repoReal = await fs.realpath(resolved);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
throw new Error(`Repo "${resolved}" must exist before registration: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
75
|
+
}
|
|
76
|
+
if (!isTrustedSiblingRepo(rootReal, repoReal)) {
|
|
77
|
+
throw new Error(`Repo "${repoReal}" is outside the trusted sibling workspace boundary for "${rootReal}". Register repos that live beside the current project under the same parent directory.`);
|
|
78
|
+
}
|
|
79
|
+
return repoReal;
|
|
80
|
+
}
|
|
62
81
|
/**
|
|
63
82
|
* Add a sibling repo to the workspace. `repoPath` is resolved to an
|
|
64
83
|
* absolute path. Duplicate detection is by absolute path. Returns
|
|
@@ -103,12 +122,52 @@ export function removeRepo(workspace, pathOrName) {
|
|
|
103
122
|
export async function saveWorkspace(rootPath, workspace) {
|
|
104
123
|
try {
|
|
105
124
|
const filePath = workspaceFilePath(rootPath);
|
|
125
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
106
126
|
await fs.writeFile(filePath, JSON.stringify(workspace, null, 2), 'utf-8');
|
|
107
127
|
}
|
|
108
128
|
catch {
|
|
109
129
|
// best-effort
|
|
110
130
|
}
|
|
111
131
|
}
|
|
132
|
+
async function trustWorkspace(rootPath, workspace) {
|
|
133
|
+
const rootReal = await realpathOrResolve(rootPath);
|
|
134
|
+
const repos = [];
|
|
135
|
+
const seenPaths = new Set();
|
|
136
|
+
const seenNames = new Set();
|
|
137
|
+
for (const repo of workspace.repos) {
|
|
138
|
+
let repoReal;
|
|
139
|
+
try {
|
|
140
|
+
repoReal = await fs.realpath(repo.path);
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (!isTrustedSiblingRepo(rootReal, repoReal))
|
|
146
|
+
continue;
|
|
147
|
+
if (seenPaths.has(repoReal) || seenNames.has(repo.name))
|
|
148
|
+
continue;
|
|
149
|
+
seenPaths.add(repoReal);
|
|
150
|
+
seenNames.add(repo.name);
|
|
151
|
+
repos.push({ path: repoReal, name: repo.name });
|
|
152
|
+
if (repos.length >= WORKSPACE_MAX_REPOS)
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
if (repos.length === 0)
|
|
156
|
+
return null;
|
|
157
|
+
return { ...workspace, repos };
|
|
158
|
+
}
|
|
159
|
+
async function realpathOrResolve(inputPath) {
|
|
160
|
+
return fs.realpath(inputPath).catch(() => path.resolve(inputPath));
|
|
161
|
+
}
|
|
162
|
+
function isTrustedSiblingRepo(rootReal, repoReal) {
|
|
163
|
+
if (repoReal === rootReal)
|
|
164
|
+
return false;
|
|
165
|
+
const base = path.dirname(rootReal);
|
|
166
|
+
const relative = path.relative(base, repoReal);
|
|
167
|
+
if (!relative || relative.startsWith('..') || path.isAbsolute(relative))
|
|
168
|
+
return false;
|
|
169
|
+
return relative.split(path.sep).length === 1;
|
|
170
|
+
}
|
|
112
171
|
function workspaceFilePath(rootPath) {
|
|
113
172
|
return path.join(rootPath, WORKSPACE_FILENAME);
|
|
114
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;AAoB1E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,wBAAwB,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAgB;IAC1D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO;QACL,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK,EAAE,EAAE;KACV,CAAC;AACJ,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,QAAgB,EAAE,QAAgB;IACtF,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACxG,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,4DAA4D,QAAQ,yFAAyF,CAC/K,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,SAAoB,EAAE,QAAgB,EAAE,IAAa;IAC3E,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAClE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,gCAAgC,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,iBAAiB,QAAQ,kEAAkE,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAoB,EAAE,UAAkB;IACjE,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3E,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9F,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAC7D,CAAC;IACF,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,SAAoB;IACxE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAGD,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,SAAoB;IAClE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAAE,SAAS;QACxD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAClE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,IAAI,mBAAmB;YAAE,MAAM;IACjD,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IAChD,OAAO,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,QAAgB;IAC9D,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,OAAO,CACL,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ;QACnC,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,KAAK,CACX,CAAC,CAAU,EAAE,EAAE,CACb,CAAC,KAAK,IAAI;YACV,OAAO,CAAC,KAAK,QAAQ;YACrB,OAAQ,CAA6B,CAAC,IAAI,KAAK,QAAQ;YACvD,OAAQ,CAA6B,CAAC,IAAI,KAAK,QAAQ,CAC1D,CACF,CAAC;AACJ,CAAC"}
|
package/dist/mcp/tools/plugin.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
1
2
|
import path from 'node:path';
|
|
2
|
-
import { PLUGIN_PREVIEW_FLAG, discoverPluginManifests, pluginsEnabled, readPluginManifestFile, } from '../../core/plugins.js';
|
|
3
|
+
import { PLUGIN_DIR, PLUGIN_MANIFEST_EXT, PLUGIN_PREVIEW_FLAG, discoverPluginManifests, pluginsEnabled, readPluginManifestFile, } from '../../core/plugins.js';
|
|
3
4
|
/**
|
|
4
5
|
* `projscan_plugin` — discover and validate stable local analyzer/reporter
|
|
5
6
|
* plugins under `<root>/.projscan-plugins/*.projscan-plugin.json`.
|
|
@@ -21,7 +22,7 @@ export const pluginTool = {
|
|
|
21
22
|
},
|
|
22
23
|
manifest_path: {
|
|
23
24
|
type: 'string',
|
|
24
|
-
description: '"validate" only — repo-relative
|
|
25
|
+
description: '"validate" only — repo-relative path under .projscan-plugins/ to a *.projscan-plugin.json file.',
|
|
25
26
|
},
|
|
26
27
|
},
|
|
27
28
|
},
|
|
@@ -55,8 +56,10 @@ export const pluginTool = {
|
|
|
55
56
|
const p = typeof args.manifest_path === 'string' ? args.manifest_path : '';
|
|
56
57
|
if (!p)
|
|
57
58
|
throw new Error('validate action requires a "manifest_path" argument');
|
|
58
|
-
const
|
|
59
|
-
|
|
59
|
+
const resolved = await resolveMcpManifestPath(rootPath, p);
|
|
60
|
+
if (!resolved.ok)
|
|
61
|
+
return resolved.failure;
|
|
62
|
+
const result = await readPluginManifestFile(resolved.manifestPath);
|
|
60
63
|
return result.ok
|
|
61
64
|
? { ok: true, manifest: result.manifest }
|
|
62
65
|
: { ok: false, error: result.reason, diagnostic: result.diagnostic };
|
|
@@ -66,4 +69,45 @@ export const pluginTool = {
|
|
|
66
69
|
}
|
|
67
70
|
},
|
|
68
71
|
};
|
|
72
|
+
async function resolveMcpManifestPath(rootPath, inputPath) {
|
|
73
|
+
if (path.isAbsolute(inputPath)) {
|
|
74
|
+
return invalidManifestPath('manifest_path must be relative to the project root');
|
|
75
|
+
}
|
|
76
|
+
if (inputPath.split(/[/\\]/).some((segment) => segment === '..')) {
|
|
77
|
+
return invalidManifestPath('manifest_path must not contain ".." path segments');
|
|
78
|
+
}
|
|
79
|
+
if (!inputPath.endsWith(PLUGIN_MANIFEST_EXT)) {
|
|
80
|
+
return invalidManifestPath(`manifest_path must end with ${PLUGIN_MANIFEST_EXT}`);
|
|
81
|
+
}
|
|
82
|
+
const rootReal = await fs.realpath(rootPath).catch(() => path.resolve(rootPath));
|
|
83
|
+
const pluginDir = path.join(rootReal, PLUGIN_DIR);
|
|
84
|
+
const pluginDirReal = await fs.realpath(pluginDir).catch(() => pluginDir);
|
|
85
|
+
const candidate = path.resolve(rootReal, inputPath);
|
|
86
|
+
if (!isInsideDirectory(candidate, pluginDirReal)) {
|
|
87
|
+
return invalidManifestPath(`manifest_path must live under ${PLUGIN_DIR}/`);
|
|
88
|
+
}
|
|
89
|
+
const candidateReal = await fs.realpath(candidate).catch(() => candidate);
|
|
90
|
+
if (!isInsideDirectory(candidateReal, pluginDirReal)) {
|
|
91
|
+
return invalidManifestPath(`manifest_path must resolve under ${PLUGIN_DIR}/`);
|
|
92
|
+
}
|
|
93
|
+
return { ok: true, manifestPath: candidateReal };
|
|
94
|
+
}
|
|
95
|
+
function isInsideDirectory(candidate, directory) {
|
|
96
|
+
const relative = path.relative(directory, candidate);
|
|
97
|
+
return relative.length > 0 && !relative.startsWith('..') && !path.isAbsolute(relative);
|
|
98
|
+
}
|
|
99
|
+
function invalidManifestPath(message) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
failure: {
|
|
103
|
+
ok: false,
|
|
104
|
+
error: message,
|
|
105
|
+
diagnostic: {
|
|
106
|
+
code: 'invalid-manifest-path',
|
|
107
|
+
message,
|
|
108
|
+
hint: `Use a path like ${PLUGIN_DIR}/policy${PLUGIN_MANIFEST_EXT}.`,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
69
113
|
//# sourceMappingURL=plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/mcp/tools/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAY;IACjC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,6SAA6S;IAC/S,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;gBAC1B,WAAW,EACT,qJAAqJ;aACxJ;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/mcp/tools/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { computeUnderstandReport } from '../../core/understand.js';
|
|
2
|
+
const VIEWS = ['map', 'flow', 'contracts', 'change', 'verify'];
|
|
3
|
+
export const understandTool = {
|
|
4
|
+
name: 'projscan_understand',
|
|
5
|
+
description: 'Explain repo map, runtime flows, public contracts, change readiness, and verification proof with cited file/symbol evidence.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
view: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
enum: VIEWS,
|
|
12
|
+
description: 'Understand view. Default: map.',
|
|
13
|
+
},
|
|
14
|
+
intent: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'Planned change or question for change-readiness output.',
|
|
17
|
+
},
|
|
18
|
+
max_items: {
|
|
19
|
+
type: 'number',
|
|
20
|
+
description: 'Maximum items per section. Default: 8, max: 30.',
|
|
21
|
+
},
|
|
22
|
+
max_tokens: {
|
|
23
|
+
type: 'number',
|
|
24
|
+
description: 'Cap the response to roughly this many tokens.',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
handler: async (args, rootPath) => ({
|
|
29
|
+
understand: await computeUnderstandReport(rootPath, {
|
|
30
|
+
view: readView(args.view),
|
|
31
|
+
intent: typeof args.intent === 'string' ? args.intent : undefined,
|
|
32
|
+
maxItems: typeof args.max_items === 'number' && Number.isFinite(args.max_items)
|
|
33
|
+
? args.max_items
|
|
34
|
+
: undefined,
|
|
35
|
+
}),
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
function readView(value) {
|
|
39
|
+
if (typeof value === 'string' && VIEWS.includes(value))
|
|
40
|
+
return value;
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=understand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"understand.js","sourceRoot":"","sources":["../../../src/mcp/tools/understand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAInE,MAAM,KAAK,GAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,8HAA8H;IAChI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,KAAK;gBACX,WAAW,EAAE,gCAAgC;aAC9C;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iDAAiD;aAC/D;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClC,UAAU,EAAE,MAAM,uBAAuB,CAAC,QAAQ,EAAE;YAClD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;YACjE,QAAQ,EACN,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,SAAS;gBAChB,CAAC,CAAC,SAAS;SAChB,CAAC;KACH,CAAC;CACH,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAuB,CAAC;IAC9G,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pluginsEnabled } from '../../core/plugins.js';
|
|
1
2
|
import { computeWorkplan, isWorkplanMode } from '../../core/workplan.js';
|
|
2
3
|
const WORKPLAN_MODES = [
|
|
3
4
|
'before_edit',
|
|
@@ -37,7 +38,7 @@ export const workplanTool = {
|
|
|
37
38
|
},
|
|
38
39
|
enable_plugins: {
|
|
39
40
|
type: 'boolean',
|
|
40
|
-
description: '
|
|
41
|
+
description: 'Request local analyzer plugin evidence only when this MCP server process already has PROJSCAN_PLUGINS_PREVIEW=1. This argument never enables plugin execution by itself.',
|
|
41
42
|
},
|
|
42
43
|
max_tokens: {
|
|
43
44
|
type: 'number',
|
|
@@ -57,7 +58,7 @@ export const workplanTool = {
|
|
|
57
58
|
maxTasks: typeof args.max_tasks === 'number' && Number.isFinite(args.max_tasks)
|
|
58
59
|
? args.max_tasks
|
|
59
60
|
: undefined,
|
|
60
|
-
enablePlugins: args.enable_plugins === true,
|
|
61
|
+
enablePlugins: args.enable_plugins === true && pluginsEnabled(),
|
|
61
62
|
}),
|
|
62
63
|
};
|
|
63
64
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workplan.js","sourceRoot":"","sources":["../../../src/mcp/tools/workplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIzE,MAAM,cAAc,GAA4B;IAC9C,aAAa;IACb,eAAe;IACf,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;IACV,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,6LAA6L;IAC/L,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,gLAAgL;aACnL;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iDAAiD;aAC/D;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kEAAkE;aAChF;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,SAAS;gBACf,WAAW,
|
|
1
|
+
{"version":3,"file":"workplan.js","sourceRoot":"","sources":["../../../src/mcp/tools/workplan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAIzE,MAAM,cAAc,GAA4B;IAC9C,aAAa;IACb,eAAe;IACf,cAAc;IACd,UAAU;IACV,SAAS;IACT,UAAU;IACV,WAAW;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAY;IACnC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,6LAA6L;IAC/L,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,cAAc;gBACpB,WAAW,EACT,gLAAgL;aACnL;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iDAAiD;aAC/D;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kEAAkE;aAChF;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,SAAS;gBACf,WAAW,EACT,0KAA0K;aAC7K;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+CAA+C;aAC7D;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,OAAO;YACL,QAAQ,EAAE,MAAM,eAAe,CAAC,QAAQ,EAAE;gBACxC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,OAAO,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACtE,OAAO,EAAE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACtE,eAAe,EACb,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC;oBACnF,CAAC,CAAC,IAAI,CAAC,iBAAiB;oBACxB,CAAC,CAAC,SAAS;gBACf,QAAQ,EACN,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;oBACnE,CAAC,CAAC,IAAI,CAAC,SAAS;oBAChB,CAAC,CAAC,SAAS;gBACf,aAAa,EAAE,IAAI,CAAC,cAAc,KAAK,IAAI,IAAI,cAAc,EAAE;aAChE,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
1
2
|
import path from 'node:path';
|
|
2
3
|
import { loadWorkspace } from '../../core/workspace.js';
|
|
3
4
|
import { scanRepository } from '../../core/repositoryScanner.js';
|
|
@@ -68,15 +69,45 @@ export const workspaceGraphTool = {
|
|
|
68
69
|
}
|
|
69
70
|
},
|
|
70
71
|
};
|
|
72
|
+
const MAX_WORKSPACE_GRAPH_FILES = 5000;
|
|
73
|
+
const SKIPPED_WORKSPACE_DIRS = new Set(['.git', '.projscan-cache', 'node_modules', 'dist', 'build', 'coverage', '.next', '.nuxt']);
|
|
71
74
|
async function buildPerRepoGraph(repoPath) {
|
|
72
75
|
try {
|
|
76
|
+
const withinCap = await isWithinWorkspaceGraphFileCap(repoPath);
|
|
77
|
+
if (!withinCap)
|
|
78
|
+
return null;
|
|
73
79
|
const scan = await scanRepository(repoPath);
|
|
80
|
+
if (scan.files.length > MAX_WORKSPACE_GRAPH_FILES)
|
|
81
|
+
return null;
|
|
74
82
|
return await buildCodeGraph(repoPath, scan.files);
|
|
75
83
|
}
|
|
76
84
|
catch {
|
|
77
85
|
return null;
|
|
78
86
|
}
|
|
79
87
|
}
|
|
88
|
+
async function isWithinWorkspaceGraphFileCap(rootPath) {
|
|
89
|
+
let count = 0;
|
|
90
|
+
const stack = [rootPath];
|
|
91
|
+
while (stack.length > 0) {
|
|
92
|
+
const dir = stack.pop();
|
|
93
|
+
if (!dir)
|
|
94
|
+
continue;
|
|
95
|
+
const entries = await fs.readdir(dir, { withFileTypes: true }).catch(() => []);
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
if (entry.isDirectory()) {
|
|
98
|
+
if (!SKIPPED_WORKSPACE_DIRS.has(entry.name))
|
|
99
|
+
stack.push(path.join(dir, entry.name));
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
if (!entry.isFile())
|
|
103
|
+
continue;
|
|
104
|
+
count += 1;
|
|
105
|
+
if (count > MAX_WORKSPACE_GRAPH_FILES)
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
80
111
|
async function listView(workspace, rootPath) {
|
|
81
112
|
if (!workspace)
|
|
82
113
|
return { repos: [] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceGraph.js","sourceRoot":"","sources":["../../../src/mcp/tools/workspaceGraph.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAEzE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAY;IACzC,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,6MAA6M;IAC/M,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,gBAAgB,CAAC;gBACzC,WAAW,EACT,4NAA4N;aAC/N;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,yFAAyF;aAC5F;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,mFAAmF;aACtF;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACtE,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO;gBACL,MAAM;gBACN,SAAS,EAAE,KAAK;gBAChB,MAAM,EACJ,oGAAoG;gBACtG,KAAK,EAAE,EAAE;aACV,CAAC;QACJ,CAAC;QAED,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,OAAO,MAAM,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7C,KAAK,OAAO;gBACV,OAAO,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;YACpC,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACnE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;gBACJ,CAAC;gBACD,OAAO,MAAM,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAClE,CAAC;YACD;gBACE,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,wCAAwC,CAClE,CAAC;QACN,CAAC;IACH,CAAC;CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"workspaceGraph.js","sourceRoot":"","sources":["../../../src/mcp/tools/workspaceGraph.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -48,6 +48,7 @@ import { agentBriefTool } from './tools/agentBrief.js';
|
|
|
48
48
|
import { qualityScorecardTool } from './tools/qualityScorecard.js';
|
|
49
49
|
import { adoptionTool } from './tools/adoption.js';
|
|
50
50
|
import { startTool } from './tools/start.js';
|
|
51
|
+
import { understandTool } from './tools/understand.js';
|
|
51
52
|
const tools = [
|
|
52
53
|
analyzeTool,
|
|
53
54
|
doctorTool,
|
|
@@ -89,6 +90,7 @@ const tools = [
|
|
|
89
90
|
qualityScorecardTool,
|
|
90
91
|
adoptionTool,
|
|
91
92
|
startTool,
|
|
93
|
+
understandTool,
|
|
92
94
|
];
|
|
93
95
|
export function getToolDefinitions() {
|
|
94
96
|
return tools.map(({ name, description, inputSchema }) => ({ name, description, inputSchema }));
|
package/dist/mcp/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|