brains-mcp 1.66.24 → 1.66.25
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/tools/createPage.d.ts.map +1 -1
- package/dist/tools/createPage.js +28 -0
- package/dist/tools/createPage.js.map +1 -1
- package/dist/tools/initProject.d.ts +2 -2
- package/dist/tools/resolveProject.d.ts +26 -1
- package/dist/tools/resolveProject.d.ts.map +1 -1
- package/dist/tools/resolveProject.js +78 -24
- package/dist/tools/resolveProject.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPage.d.ts","sourceRoot":"","sources":["../../src/tools/createPage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,aAAa,EAA4B,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"createPage.d.ts","sourceRoot":"","sources":["../../src/tools/createPage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,aAAa,EAA4B,MAAM,sBAAsB,CAAC;AAgBpF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;EAchC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAsB,UAAU,CAC9B,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,eAAe,EACtB,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC,CAsLjB"}
|
package/dist/tools/createPage.js
CHANGED
|
@@ -4,6 +4,7 @@ import { resolveIndexOwnerSubject } from "../storage/client.js";
|
|
|
4
4
|
import { buildNewPage, parsePage } from "../wiki/frontmatter.js";
|
|
5
5
|
import { deriveSummary } from "../wiki/summary.js";
|
|
6
6
|
import { getIngestRoutingWarnings } from "../wiki/ingestPolicy.js";
|
|
7
|
+
import { findLikelyExistingProject } from "./resolveProject.js";
|
|
7
8
|
import { normalizeWikiPath } from "../wiki/path.js";
|
|
8
9
|
import { lintLayout } from "../wiki/layoutLint.js";
|
|
9
10
|
import { upsertIndexEntry } from "../wiki/index.js";
|
|
@@ -50,6 +51,32 @@ export async function createPage(drive, input, userId = "") {
|
|
|
50
51
|
// true storage owner, not the raw authenticated actor — otherwise a grant
|
|
51
52
|
// owner never sees a grantee's contributions via list_pages/search_pages.
|
|
52
53
|
const indexOwner = resolveIndexOwnerSubject(drive, normalizedName, userId);
|
|
54
|
+
// GH #597: before writing the first page of a brand-new top-level
|
|
55
|
+
// projects/<slug>/ folder, check whether an existing project already
|
|
56
|
+
// plausibly covers the topic. Advisory only — the write still proceeds
|
|
57
|
+
// either way, so a genuinely new project is never obstructed. Consults the
|
|
58
|
+
// index under indexOwner (BRA-381), not the raw actor, so a grantee's
|
|
59
|
+
// write into a shared account checks the owner's project inventory.
|
|
60
|
+
const newProjectSlugMatch = /^projects\/([^/]+)\//.exec(normalizedName);
|
|
61
|
+
const likelyExistingProject = newProjectSlugMatch
|
|
62
|
+
? await findLikelyExistingProject(newProjectSlugMatch[1], `${input.title} ${input.body}`.slice(0, 4000), indexOwner).catch(() => null)
|
|
63
|
+
: null;
|
|
64
|
+
const likelyExistingProjectPath = likelyExistingProject
|
|
65
|
+
? likelyExistingProject.parentSlug
|
|
66
|
+
? `projects/${likelyExistingProject.parentSlug}/projects/${likelyExistingProject.slug.split("/")[1]}`
|
|
67
|
+
: `projects/${likelyExistingProject.slug}`
|
|
68
|
+
: null;
|
|
69
|
+
const projectDedupeWarnings = likelyExistingProject
|
|
70
|
+
? [{
|
|
71
|
+
field: "routing",
|
|
72
|
+
message: `NEW_PROJECT_MAY_DUPLICATE_EXISTING: '${normalizedName}' creates a brand-new top-level ` +
|
|
73
|
+
`project folder 'projects/${newProjectSlugMatch[1]}/', but existing project ` +
|
|
74
|
+
`'${likelyExistingProjectPath}' (${likelyExistingProject.pageCount} pages) scores a ` +
|
|
75
|
+
`${likelyExistingProject.confidence}-confidence match for this content ` +
|
|
76
|
+
`(matched on ${likelyExistingProject.matchedOn.join(", ")}). If this belongs there, write to ` +
|
|
77
|
+
`that path instead. If this is genuinely a new project, this warning can be ignored.`,
|
|
78
|
+
}]
|
|
79
|
+
: [];
|
|
53
80
|
let writeResult;
|
|
54
81
|
if (pgIndex.isConfigured()) {
|
|
55
82
|
// DB-primary write (GH #548), matching patch_page/update_page's
|
|
@@ -147,6 +174,7 @@ export async function createPage(drive, input, userId = "") {
|
|
|
147
174
|
warnings: [
|
|
148
175
|
...warnings.map((w) => ({ field: w.field, message: w.message })),
|
|
149
176
|
...routingWarnings,
|
|
177
|
+
...projectDedupeWarnings,
|
|
150
178
|
],
|
|
151
179
|
// Kept separate from `warnings`, which is about a page's frontmatter. This
|
|
152
180
|
// is about where the page landed, and a caller may reasonably act on one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPage.js","sourceRoot":"","sources":["../../src/tools/createPage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"createPage.js","sourceRoot":"","sources":["../../src/tools/createPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,19 +11,19 @@ export declare const initProjectInputSchema: z.ZodObject<{
|
|
|
11
11
|
ensureActiveTrackingPages: z.ZodDefault<z.ZodBoolean>;
|
|
12
12
|
execute: z.ZodDefault<z.ZodBoolean>;
|
|
13
13
|
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
platform: "claude" | "gpt";
|
|
14
15
|
execute: boolean;
|
|
15
16
|
projectName: string;
|
|
16
17
|
variant: "minimal" | "extended";
|
|
17
|
-
platform: "claude" | "gpt";
|
|
18
18
|
writeInstructionFile: boolean;
|
|
19
19
|
seedFoundation: boolean;
|
|
20
20
|
ensureActiveTrackingPages: boolean;
|
|
21
21
|
projectSlug?: string | undefined;
|
|
22
22
|
}, {
|
|
23
23
|
projectName: string;
|
|
24
|
+
platform?: "claude" | "gpt" | undefined;
|
|
24
25
|
execute?: boolean | undefined;
|
|
25
26
|
variant?: "minimal" | "extended" | undefined;
|
|
26
|
-
platform?: "claude" | "gpt" | undefined;
|
|
27
27
|
projectSlug?: string | undefined;
|
|
28
28
|
writeInstructionFile?: boolean | undefined;
|
|
29
29
|
seedFoundation?: boolean | undefined;
|
|
@@ -6,8 +6,8 @@ export declare const resolveProjectInputSchema: z.ZodObject<{
|
|
|
6
6
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
7
7
|
}, "strip", z.ZodTypeAny, {
|
|
8
8
|
limit: number;
|
|
9
|
-
platform: "claude" | "gpt";
|
|
10
9
|
context: string;
|
|
10
|
+
platform: "claude" | "gpt";
|
|
11
11
|
}, {
|
|
12
12
|
context: string;
|
|
13
13
|
limit?: number | undefined;
|
|
@@ -55,4 +55,29 @@ export declare function scoreProject(ctxTokens: Set<string>, project: {
|
|
|
55
55
|
* result is ambiguous.
|
|
56
56
|
*/
|
|
57
57
|
export declare function resolveProject(_drive: StorageClient, input: ResolveProjectInput, userId?: string): Promise<object>;
|
|
58
|
+
export interface LikelyExistingProjectMatch {
|
|
59
|
+
slug: string;
|
|
60
|
+
parentSlug?: string;
|
|
61
|
+
pageCount: number;
|
|
62
|
+
title?: string;
|
|
63
|
+
score: number;
|
|
64
|
+
confidence: "high" | "medium" | "low";
|
|
65
|
+
matchedOn: string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Used by create_page (GH #597) to check, before writing the first page of a
|
|
69
|
+
* brand-new top-level `projects/<newSlug>/` folder, whether an existing
|
|
70
|
+
* project already plausibly covers the same topic. Read-only and advisory —
|
|
71
|
+
* it never blocks the write, it only lets the caller surface a warning
|
|
72
|
+
* instead of silently forking the topic across two project folders.
|
|
73
|
+
*
|
|
74
|
+
* Deliberately uses a lower bar than resolve_project's "medium"/"high"
|
|
75
|
+
* confidence tiers: a real duplicate caught only by shared vocabulary (no
|
|
76
|
+
* shared slug/alias/title word) tops out around content's score cap of 30
|
|
77
|
+
* (scoreProject caps content at Math.min(30, contentHits * 6)), which never
|
|
78
|
+
* reaches the 60-point medium threshold. Any positive score here already
|
|
79
|
+
* passed scoreProject's stopword-filtered token overlap, so it is real
|
|
80
|
+
* signal, not noise — it is surfaced as a warning, not used to block.
|
|
81
|
+
*/
|
|
82
|
+
export declare function findLikelyExistingProject(newSlug: string, context: string, userId: string): Promise<LikelyExistingProjectMatch | null>;
|
|
58
83
|
//# sourceMappingURL=resolveProject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveProject.d.ts","sourceRoot":"","sources":["../../src/tools/resolveProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAepC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAUD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAiDxC;
|
|
1
|
+
{"version":3,"file":"resolveProject.d.ts","sourceRoot":"","sources":["../../src/tools/resolveProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAepC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAUD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAKhD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAiDxC;AA8DD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,mBAAmB,EAC1B,MAAM,SAAK,GACV,OAAO,CAAC,MAAM,CAAC,CAwDjB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CA6B5C"}
|
|
@@ -90,29 +90,14 @@ function confidenceFor(score, runnerUp) {
|
|
|
90
90
|
return "low";
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* a wrong guess costs one call rather than a whole bundle of the wrong
|
|
97
|
-
* project's context, and so the caller can confirm with the user when the
|
|
98
|
-
* result is ambiguous.
|
|
93
|
+
* Shared ranking core behind `resolveProject` and `findLikelyExistingProject`.
|
|
94
|
+
* Assumes the caller already confirmed `ctxTokens` is non-empty. Returns
|
|
95
|
+
* `null` only when the inventory itself could not be read.
|
|
99
96
|
*/
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
if (!
|
|
103
|
-
return
|
|
104
|
-
ok: false,
|
|
105
|
-
error: "resolve_project requires the Postgres index. Use list_pages with folder='projects' to browse projects instead.",
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
const ctxTokens = new Set(tokenize(input.context));
|
|
109
|
-
if (ctxTokens.size === 0) {
|
|
110
|
-
return { ok: true, matches: [], ambiguous: false, note: "No usable terms in context." };
|
|
111
|
-
}
|
|
112
|
-
const inventory = await index.listProjectInventory(userId).catch(() => null);
|
|
113
|
-
if (!inventory) {
|
|
114
|
-
return { ok: false, error: "Could not read project inventory from the index." };
|
|
115
|
-
}
|
|
97
|
+
async function rankProjectsAgainstContext(ctxTokens, context, userId, index, prefetchedInventory) {
|
|
98
|
+
const inventory = prefetchedInventory ?? (await index.listProjectInventory(userId).catch(() => null));
|
|
99
|
+
if (!inventory)
|
|
100
|
+
return null;
|
|
116
101
|
// Content hits only matter when the slug does not already name the project —
|
|
117
102
|
// this is the "the wagon" -> cressida case. One extra query, and only when
|
|
118
103
|
// needed.
|
|
@@ -123,10 +108,10 @@ export async function resolveProject(_drive, input, userId = "") {
|
|
|
123
108
|
let contentHitsBySlug = new Map();
|
|
124
109
|
if (!strongSlugMatch) {
|
|
125
110
|
contentHitsBySlug = await index
|
|
126
|
-
.countProjectContentHits(
|
|
111
|
+
.countProjectContentHits(context, userId)
|
|
127
112
|
.catch(() => new Map());
|
|
128
113
|
}
|
|
129
|
-
|
|
114
|
+
return inventory
|
|
130
115
|
.map((p) => {
|
|
131
116
|
const { score, matchedOn } = scoreProject(ctxTokens, {
|
|
132
117
|
slug: p.slug,
|
|
@@ -138,6 +123,31 @@ export async function resolveProject(_drive, input, userId = "") {
|
|
|
138
123
|
})
|
|
139
124
|
.filter((p) => p.score > 0)
|
|
140
125
|
.sort((a, b) => b.score - a.score || b.pageCount - a.pageCount);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Resolve freeform context to a project slug and its instruction file.
|
|
129
|
+
*
|
|
130
|
+
* Deliberately does not load anything. Resolution and loading stay separate so
|
|
131
|
+
* a wrong guess costs one call rather than a whole bundle of the wrong
|
|
132
|
+
* project's context, and so the caller can confirm with the user when the
|
|
133
|
+
* result is ambiguous.
|
|
134
|
+
*/
|
|
135
|
+
export async function resolveProject(_drive, input, userId = "") {
|
|
136
|
+
const index = getPostgresSearchIndex();
|
|
137
|
+
if (!index.isConfigured()) {
|
|
138
|
+
return {
|
|
139
|
+
ok: false,
|
|
140
|
+
error: "resolve_project requires the Postgres index. Use list_pages with folder='projects' to browse projects instead.",
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const ctxTokens = new Set(tokenize(input.context));
|
|
144
|
+
if (ctxTokens.size === 0) {
|
|
145
|
+
return { ok: true, matches: [], ambiguous: false, note: "No usable terms in context." };
|
|
146
|
+
}
|
|
147
|
+
const scored = await rankProjectsAgainstContext(ctxTokens, input.context, userId, index);
|
|
148
|
+
if (scored === null) {
|
|
149
|
+
return { ok: false, error: "Could not read project inventory from the index." };
|
|
150
|
+
}
|
|
141
151
|
const top = scored.slice(0, input.limit);
|
|
142
152
|
const runnerUp = scored[1]?.score ?? 0;
|
|
143
153
|
const matches = top.map((p, i) => ({
|
|
@@ -172,4 +182,48 @@ export async function resolveProject(_drive, input, userId = "") {
|
|
|
172
182
|
: {}),
|
|
173
183
|
};
|
|
174
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Used by create_page (GH #597) to check, before writing the first page of a
|
|
187
|
+
* brand-new top-level `projects/<newSlug>/` folder, whether an existing
|
|
188
|
+
* project already plausibly covers the same topic. Read-only and advisory —
|
|
189
|
+
* it never blocks the write, it only lets the caller surface a warning
|
|
190
|
+
* instead of silently forking the topic across two project folders.
|
|
191
|
+
*
|
|
192
|
+
* Deliberately uses a lower bar than resolve_project's "medium"/"high"
|
|
193
|
+
* confidence tiers: a real duplicate caught only by shared vocabulary (no
|
|
194
|
+
* shared slug/alias/title word) tops out around content's score cap of 30
|
|
195
|
+
* (scoreProject caps content at Math.min(30, contentHits * 6)), which never
|
|
196
|
+
* reaches the 60-point medium threshold. Any positive score here already
|
|
197
|
+
* passed scoreProject's stopword-filtered token overlap, so it is real
|
|
198
|
+
* signal, not noise — it is surfaced as a warning, not used to block.
|
|
199
|
+
*/
|
|
200
|
+
export async function findLikelyExistingProject(newSlug, context, userId) {
|
|
201
|
+
const index = getPostgresSearchIndex();
|
|
202
|
+
if (!index.isConfigured())
|
|
203
|
+
return null;
|
|
204
|
+
const ctxTokens = new Set(tokenize(context));
|
|
205
|
+
if (ctxTokens.size === 0)
|
|
206
|
+
return null;
|
|
207
|
+
const inventory = await index.listProjectInventory(userId).catch(() => null);
|
|
208
|
+
if (!inventory)
|
|
209
|
+
return null;
|
|
210
|
+
// Not actually new — already-known top-level or sub-project slug.
|
|
211
|
+
if (inventory.some((p) => p.slug === newSlug || p.slug.split("/")[0] === newSlug)) {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
const scored = await rankProjectsAgainstContext(ctxTokens, context, userId, index, inventory);
|
|
215
|
+
if (!scored || scored.length === 0)
|
|
216
|
+
return null;
|
|
217
|
+
const top = scored[0];
|
|
218
|
+
const runnerUp = scored[1]?.score ?? 0;
|
|
219
|
+
return {
|
|
220
|
+
slug: top.slug,
|
|
221
|
+
...(top.parentSlug ? { parentSlug: top.parentSlug } : {}),
|
|
222
|
+
pageCount: top.pageCount,
|
|
223
|
+
...(top.title ? { title: top.title } : {}),
|
|
224
|
+
score: Math.round(top.score),
|
|
225
|
+
confidence: confidenceFor(top.score, runnerUp),
|
|
226
|
+
matchedOn: top.matchedOn,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
175
229
|
//# sourceMappingURL=resolveProject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveProject.js","sourceRoot":"","sources":["../../src/tools/resolveProject.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resolveProject.js","sourceRoot":"","sources":["../../src/tools/resolveProject.ts"],"names":[],"mappings":"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"}
|