@codemap-ai/core 0.2.0
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/LICENSE +21 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +229 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-pack-doctor.d.ts +36 -0
- package/dist/lib/agent-pack-doctor.d.ts.map +1 -0
- package/dist/lib/agent-pack-doctor.js +325 -0
- package/dist/lib/agent-pack-doctor.js.map +1 -0
- package/dist/lib/agent-pack-installer.d.ts +35 -0
- package/dist/lib/agent-pack-installer.d.ts.map +1 -0
- package/dist/lib/agent-pack-installer.js +371 -0
- package/dist/lib/agent-pack-installer.js.map +1 -0
- package/dist/lib/agent-pack.d.ts +36 -0
- package/dist/lib/agent-pack.d.ts.map +1 -0
- package/dist/lib/agent-pack.js +119 -0
- package/dist/lib/agent-pack.js.map +1 -0
- package/dist/lib/agent-workflow.d.ts +37 -0
- package/dist/lib/agent-workflow.d.ts.map +1 -0
- package/dist/lib/agent-workflow.js +329 -0
- package/dist/lib/agent-workflow.js.map +1 -0
- package/dist/lib/api-types.d.ts +32 -0
- package/dist/lib/api-types.d.ts.map +1 -0
- package/dist/lib/api-types.js +3 -0
- package/dist/lib/api-types.js.map +1 -0
- package/dist/lib/auto-inject.d.ts +16 -0
- package/dist/lib/auto-inject.d.ts.map +1 -0
- package/dist/lib/auto-inject.js +80 -0
- package/dist/lib/auto-inject.js.map +1 -0
- package/dist/lib/bundled-runtime.d.ts +9 -0
- package/dist/lib/bundled-runtime.d.ts.map +1 -0
- package/dist/lib/bundled-runtime.js +20 -0
- package/dist/lib/bundled-runtime.js.map +1 -0
- package/dist/lib/codemap-api.d.ts +22 -0
- package/dist/lib/codemap-api.d.ts.map +1 -0
- package/dist/lib/codemap-api.js +74 -0
- package/dist/lib/codemap-api.js.map +1 -0
- package/dist/lib/import-health.d.ts +38 -0
- package/dist/lib/import-health.d.ts.map +1 -0
- package/dist/lib/import-health.js +186 -0
- package/dist/lib/import-health.js.map +1 -0
- package/dist/lib/local-index.d.ts +52 -0
- package/dist/lib/local-index.d.ts.map +1 -0
- package/dist/lib/local-index.js +262 -0
- package/dist/lib/local-index.js.map +1 -0
- package/dist/lib/markdown-fence.d.ts +8 -0
- package/dist/lib/markdown-fence.d.ts.map +1 -0
- package/dist/lib/markdown-fence.js +98 -0
- package/dist/lib/markdown-fence.js.map +1 -0
- package/dist/lib/mcp-auth.d.ts +39 -0
- package/dist/lib/mcp-auth.d.ts.map +1 -0
- package/dist/lib/mcp-auth.js +184 -0
- package/dist/lib/mcp-auth.js.map +1 -0
- package/dist/lib/monorepo-root.d.ts +7 -0
- package/dist/lib/monorepo-root.d.ts.map +1 -0
- package/dist/lib/monorepo-root.js +23 -0
- package/dist/lib/monorepo-root.js.map +1 -0
- package/dist/lib/onboarding.d.ts +5 -0
- package/dist/lib/onboarding.d.ts.map +1 -0
- package/dist/lib/onboarding.js +96 -0
- package/dist/lib/onboarding.js.map +1 -0
- package/dist/lib/open-url.d.ts +7 -0
- package/dist/lib/open-url.d.ts.map +1 -0
- package/dist/lib/open-url.js +38 -0
- package/dist/lib/open-url.js.map +1 -0
- package/dist/lib/regex-utils.d.ts +2 -0
- package/dist/lib/regex-utils.d.ts.map +1 -0
- package/dist/lib/regex-utils.js +4 -0
- package/dist/lib/regex-utils.js.map +1 -0
- package/dist/lib/server-instructions.d.ts +2 -0
- package/dist/lib/server-instructions.d.ts.map +1 -0
- package/dist/lib/server-instructions.js +34 -0
- package/dist/lib/server-instructions.js.map +1 -0
- package/dist/lib/session-context.d.ts +2 -0
- package/dist/lib/session-context.d.ts.map +1 -0
- package/dist/lib/session-context.js +40 -0
- package/dist/lib/session-context.js.map +1 -0
- package/dist/lib/session-tracker.d.ts +16 -0
- package/dist/lib/session-tracker.d.ts.map +1 -0
- package/dist/lib/session-tracker.js +32 -0
- package/dist/lib/session-tracker.js.map +1 -0
- package/dist/lib/sqlite-index-store.d.ts +165 -0
- package/dist/lib/sqlite-index-store.d.ts.map +1 -0
- package/dist/lib/sqlite-index-store.js +609 -0
- package/dist/lib/sqlite-index-store.js.map +1 -0
- package/dist/lib/tool-response.d.ts +97 -0
- package/dist/lib/tool-response.d.ts.map +1 -0
- package/dist/lib/tool-response.js +127 -0
- package/dist/lib/tool-response.js.map +1 -0
- package/dist/lib/uuid-schema.d.ts +8 -0
- package/dist/lib/uuid-schema.d.ts.map +1 -0
- package/dist/lib/uuid-schema.js +10 -0
- package/dist/lib/uuid-schema.js.map +1 -0
- package/dist/lib/workspace-git.d.ts +16 -0
- package/dist/lib/workspace-git.d.ts.map +1 -0
- package/dist/lib/workspace-git.js +53 -0
- package/dist/lib/workspace-git.js.map +1 -0
- package/dist/lib/workspace-project.d.ts +61 -0
- package/dist/lib/workspace-project.d.ts.map +1 -0
- package/dist/lib/workspace-project.js +231 -0
- package/dist/lib/workspace-project.js.map +1 -0
- package/dist/lib/workspace-resolver.d.ts +16 -0
- package/dist/lib/workspace-resolver.d.ts.map +1 -0
- package/dist/lib/workspace-resolver.js +59 -0
- package/dist/lib/workspace-resolver.js.map +1 -0
- package/dist/lib/workspace-zip.d.ts +12 -0
- package/dist/lib/workspace-zip.d.ts.map +1 -0
- package/dist/lib/workspace-zip.js +126 -0
- package/dist/lib/workspace-zip.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
type TextContent = {
|
|
2
|
+
type: "text";
|
|
3
|
+
text: string;
|
|
4
|
+
};
|
|
5
|
+
export type ToolData = Record<string, unknown> | unknown[];
|
|
6
|
+
export type Verbosity = "compact" | "normal" | "verbose" | "debug";
|
|
7
|
+
export declare const verbositySchemaValues: readonly ["compact", "normal", "verbose", "debug"];
|
|
8
|
+
export type ToolOutputOptions = {
|
|
9
|
+
verbosity?: Verbosity;
|
|
10
|
+
limit?: number;
|
|
11
|
+
max_chars?: number;
|
|
12
|
+
include_raw?: boolean;
|
|
13
|
+
};
|
|
14
|
+
export type ToolEnvelopeMeta = Record<string, unknown> & {
|
|
15
|
+
verbosity?: Verbosity;
|
|
16
|
+
total?: number;
|
|
17
|
+
returned?: number;
|
|
18
|
+
};
|
|
19
|
+
export type AgentHints = Record<string, unknown> & {
|
|
20
|
+
recommendedNextTool?: string;
|
|
21
|
+
recommendedPaths?: string[];
|
|
22
|
+
avoidReadingFullFiles?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type ToolEnvelope<TItems = unknown> = Record<string, unknown> & {
|
|
25
|
+
summary: string;
|
|
26
|
+
items?: TItems[];
|
|
27
|
+
nextActions?: string[];
|
|
28
|
+
truncated?: boolean;
|
|
29
|
+
truncationReason?: string;
|
|
30
|
+
meta?: ToolEnvelopeMeta;
|
|
31
|
+
agentHints?: AgentHints;
|
|
32
|
+
display?: string;
|
|
33
|
+
raw?: unknown;
|
|
34
|
+
};
|
|
35
|
+
export type ToolErrorShape = Record<string, unknown> & {
|
|
36
|
+
code: string;
|
|
37
|
+
message: string;
|
|
38
|
+
details?: unknown;
|
|
39
|
+
};
|
|
40
|
+
export type ToolSuccessPayload<TData extends ToolData = ToolData> = Record<string, unknown> & {
|
|
41
|
+
summary: string;
|
|
42
|
+
data: TData;
|
|
43
|
+
isError?: false;
|
|
44
|
+
};
|
|
45
|
+
export type ToolErrorPayload = Record<string, unknown> & {
|
|
46
|
+
summary: string;
|
|
47
|
+
error: ToolErrorShape;
|
|
48
|
+
isError: true;
|
|
49
|
+
};
|
|
50
|
+
export type ToolSuccessResult<TData extends ToolData = ToolData> = Record<string, unknown> & {
|
|
51
|
+
content: TextContent[];
|
|
52
|
+
structuredContent: ToolSuccessPayload<TData>;
|
|
53
|
+
isError?: false;
|
|
54
|
+
};
|
|
55
|
+
export type ToolErrorResult = Record<string, unknown> & {
|
|
56
|
+
content: TextContent[];
|
|
57
|
+
structuredContent: ToolErrorPayload;
|
|
58
|
+
isError: true;
|
|
59
|
+
};
|
|
60
|
+
export type ToolResult<TData extends ToolData = ToolData> = ToolSuccessResult<TData> | ToolErrorResult;
|
|
61
|
+
export declare function normalizeVerbosity(value?: string): Verbosity;
|
|
62
|
+
export declare function normalizeLimit(value: number | undefined, fallback?: number): number;
|
|
63
|
+
export declare function normalizeMaxChars(value: number | undefined, fallback?: number): number;
|
|
64
|
+
export declare function truncateText(text: string, maxChars: number): {
|
|
65
|
+
text: string;
|
|
66
|
+
truncated: boolean;
|
|
67
|
+
truncationReason?: string;
|
|
68
|
+
};
|
|
69
|
+
export declare function buildToolEnvelope<TItems = unknown>(args: {
|
|
70
|
+
summary: string;
|
|
71
|
+
items?: TItems[];
|
|
72
|
+
nextActions?: string[];
|
|
73
|
+
truncated?: boolean;
|
|
74
|
+
truncationReason?: string;
|
|
75
|
+
meta?: ToolEnvelopeMeta;
|
|
76
|
+
agentHints?: AgentHints;
|
|
77
|
+
display?: string;
|
|
78
|
+
raw?: unknown;
|
|
79
|
+
}): ToolEnvelope<TItems>;
|
|
80
|
+
/** Wraps a string into the MCP text content response shape. */
|
|
81
|
+
export declare function text(content: string): ToolSuccessResult;
|
|
82
|
+
/** Wraps a summary + machine-readable data into the MCP response shape. */
|
|
83
|
+
export declare function success<TData extends ToolData>(summary: string, data: TData): ToolSuccessResult<TData>;
|
|
84
|
+
/** Wraps an error into the MCP error response shape. */
|
|
85
|
+
export declare function errorContent(error: unknown): ToolResult;
|
|
86
|
+
/**
|
|
87
|
+
* Prepends context score warnings to a summary when the agent has skipped
|
|
88
|
+
* mandatory orientation steps. Non-blocking — data is still returned.
|
|
89
|
+
*/
|
|
90
|
+
export declare function prependContextWarnings(summary: string, warnings: string[]): string;
|
|
91
|
+
/**
|
|
92
|
+
* Wraps a tool handler so any thrown error is caught and returned as
|
|
93
|
+
* an MCP error response instead of crashing the server.
|
|
94
|
+
*/
|
|
95
|
+
export declare function withToolError<TArgs extends unknown[]>(fn: (...args: TArgs) => Promise<ToolResult>): (...args: TArgs) => Promise<ToolResult>;
|
|
96
|
+
export {};
|
|
97
|
+
//# sourceMappingURL=tool-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-response.d.ts","sourceRoot":"","sources":["../../src/lib/tool-response.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;AAE3D,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,eAAO,MAAM,qBAAqB,oDAKxB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACvD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,MAAM,GAAG,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ,IAAI,MAAM,CACxE,MAAM,EACN,OAAO,CACR,GAAG;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ,IAAI,MAAM,CACvE,MAAM,EACN,OAAO,CACR,GAAG;IACF,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iBAAiB,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACtD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ,IACpD,iBAAiB,CAAC,KAAK,CAAC,GACxB,eAAe,CAAC;AA2BpB,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAU5D;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,SAAK,GACZ,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,SAAQ,GACf,MAAM,CAGR;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAOjE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,GAAG,YAAY,CAAC,MAAM,CAAC,CAevB;AAED,+DAA+D;AAC/D,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAEvD;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,KAAK,SAAS,QAAQ,EAC5C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,KAAK,GACV,iBAAiB,CAAC,KAAK,CAAC,CAQ1B;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAYvD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,SAAS,OAAO,EAAE,EACnD,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,GAC1C,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,UAAU,CAAC,CAQzC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
export const verbositySchemaValues = [
|
|
2
|
+
"compact",
|
|
3
|
+
"normal",
|
|
4
|
+
"verbose",
|
|
5
|
+
"debug",
|
|
6
|
+
];
|
|
7
|
+
function toTextContent(content) {
|
|
8
|
+
return [{ type: "text", text: content }];
|
|
9
|
+
}
|
|
10
|
+
function toErrorShape(error) {
|
|
11
|
+
if (error instanceof Error) {
|
|
12
|
+
const maybeDetails = "details" in error ? error.details : undefined;
|
|
13
|
+
return {
|
|
14
|
+
code: "code" in error && typeof error.code === "string"
|
|
15
|
+
? error.code
|
|
16
|
+
: error.name || "TOOL_ERROR",
|
|
17
|
+
message: error.message,
|
|
18
|
+
details: maybeDetails,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
code: "TOOL_ERROR",
|
|
23
|
+
message: String(error),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function normalizeVerbosity(value) {
|
|
27
|
+
if (value === "compact" ||
|
|
28
|
+
value === "normal" ||
|
|
29
|
+
value === "verbose" ||
|
|
30
|
+
value === "debug") {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
return "compact";
|
|
34
|
+
}
|
|
35
|
+
export function normalizeLimit(value, fallback = 10) {
|
|
36
|
+
if (!Number.isFinite(value))
|
|
37
|
+
return fallback;
|
|
38
|
+
return Math.max(1, Math.floor(value));
|
|
39
|
+
}
|
|
40
|
+
export function normalizeMaxChars(value, fallback = 12000) {
|
|
41
|
+
if (!Number.isFinite(value))
|
|
42
|
+
return fallback;
|
|
43
|
+
return Math.max(500, Math.floor(value));
|
|
44
|
+
}
|
|
45
|
+
export function truncateText(text, maxChars) {
|
|
46
|
+
if (text.length <= maxChars)
|
|
47
|
+
return { text, truncated: false };
|
|
48
|
+
return {
|
|
49
|
+
text: `${text.slice(0, Math.max(0, maxChars - 80))}\n... [truncated: max_chars exceeded]`,
|
|
50
|
+
truncated: true,
|
|
51
|
+
truncationReason: "max_chars exceeded",
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function buildToolEnvelope(args) {
|
|
55
|
+
const envelope = {
|
|
56
|
+
summary: args.summary,
|
|
57
|
+
};
|
|
58
|
+
if (args.items !== undefined)
|
|
59
|
+
envelope.items = args.items;
|
|
60
|
+
if (args.nextActions?.length)
|
|
61
|
+
envelope.nextActions = args.nextActions;
|
|
62
|
+
if (args.truncated !== undefined)
|
|
63
|
+
envelope.truncated = args.truncated;
|
|
64
|
+
if (args.truncationReason)
|
|
65
|
+
envelope.truncationReason = args.truncationReason;
|
|
66
|
+
if (args.meta)
|
|
67
|
+
envelope.meta = args.meta;
|
|
68
|
+
if (args.agentHints)
|
|
69
|
+
envelope.agentHints = args.agentHints;
|
|
70
|
+
if (args.display)
|
|
71
|
+
envelope.display = args.display;
|
|
72
|
+
if (args.raw !== undefined)
|
|
73
|
+
envelope.raw = args.raw;
|
|
74
|
+
return envelope;
|
|
75
|
+
}
|
|
76
|
+
/** Wraps a string into the MCP text content response shape. */
|
|
77
|
+
export function text(content) {
|
|
78
|
+
return success(content, {});
|
|
79
|
+
}
|
|
80
|
+
/** Wraps a summary + machine-readable data into the MCP response shape. */
|
|
81
|
+
export function success(summary, data) {
|
|
82
|
+
return {
|
|
83
|
+
content: toTextContent(summary),
|
|
84
|
+
structuredContent: {
|
|
85
|
+
summary,
|
|
86
|
+
data,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Wraps an error into the MCP error response shape. */
|
|
91
|
+
export function errorContent(error) {
|
|
92
|
+
const errorShape = toErrorShape(error);
|
|
93
|
+
return {
|
|
94
|
+
content: toTextContent(errorShape.message),
|
|
95
|
+
structuredContent: {
|
|
96
|
+
summary: errorShape.message,
|
|
97
|
+
error: errorShape,
|
|
98
|
+
isError: true,
|
|
99
|
+
},
|
|
100
|
+
isError: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Prepends context score warnings to a summary when the agent has skipped
|
|
105
|
+
* mandatory orientation steps. Non-blocking — data is still returned.
|
|
106
|
+
*/
|
|
107
|
+
export function prependContextWarnings(summary, warnings) {
|
|
108
|
+
if (warnings.length === 0)
|
|
109
|
+
return summary;
|
|
110
|
+
const block = warnings.map((w) => `⚠ ${w}`).join("\n");
|
|
111
|
+
return `${block}\n\n${summary}`;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Wraps a tool handler so any thrown error is caught and returned as
|
|
115
|
+
* an MCP error response instead of crashing the server.
|
|
116
|
+
*/
|
|
117
|
+
export function withToolError(fn) {
|
|
118
|
+
return async (...args) => {
|
|
119
|
+
try {
|
|
120
|
+
return await fn(...args);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return errorContent(error);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=tool-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-response.js","sourceRoot":"","sources":["../../src/lib/tool-response.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,SAAS;IACT,QAAQ;IACR,SAAS;IACT,OAAO;CACC,CAAC;AAyEX,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,YAAY,GAChB,SAAS,IAAI,KAAK,CAAC,CAAC,CAAE,KAA+B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,OAAO;YACL,IAAI,EACF,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC/C,CAAC,CAAC,KAAK,CAAC,IAAI;gBACZ,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,YAAY;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IACE,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,OAAO,EACjB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAyB,EACzB,QAAQ,GAAG,EAAE;IAEb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAyB,EACzB,QAAQ,GAAG,KAAK;IAEhB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,QAAgB;IAEhB,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC/D,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC,uCAAuC;QACzF,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,oBAAoB;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAmB,IAUnD;IACC,MAAM,QAAQ,GAAyB;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1D,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM;QAAE,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACtE,IAAI,IAAI,CAAC,gBAAgB;QAAE,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACzC,IAAI,IAAI,CAAC,UAAU;QAAE,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3D,IAAI,IAAI,CAAC,OAAO;QAAE,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAClD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;QAAE,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAEpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CACrB,OAAe,EACf,IAAW;IAEX,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;QAC/B,iBAAiB,EAAE;YACjB,OAAO;YACP,IAAI;SACL;KACF,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEvC,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;QAC1C,iBAAiB,EAAE;YACjB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE,IAAI;SACd;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,QAAkB;IAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,GAAG,KAAK,OAAO,OAAO,EAAE,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,EAA2C;IAE3C,OAAO,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* UUID string schema that validates format via regex pattern only.
|
|
4
|
+
* Avoids `"format": "uuid"` in JSON Schema output, which triggers
|
|
5
|
+
* "unknown format" warnings from Ajv (not a standard draft-07 format).
|
|
6
|
+
*/
|
|
7
|
+
export declare const uuidSchema: z.ZodString;
|
|
8
|
+
//# sourceMappingURL=uuid-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-schema.d.ts","sourceRoot":"","sources":["../../src/lib/uuid-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,UAAU,aAKpB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* UUID string schema that validates format via regex pattern only.
|
|
4
|
+
* Avoids `"format": "uuid"` in JSON Schema output, which triggers
|
|
5
|
+
* "unknown format" warnings from Ajv (not a standard draft-07 format).
|
|
6
|
+
*/
|
|
7
|
+
export const uuidSchema = z
|
|
8
|
+
.string()
|
|
9
|
+
.regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, "Must be a valid UUID");
|
|
10
|
+
//# sourceMappingURL=uuid-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-schema.js","sourceRoot":"","sources":["../../src/lib/uuid-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,KAAK,CACJ,iEAAiE,EACjE,sBAAsB,CACvB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CurrentWorkspaceInfo {
|
|
2
|
+
workspacePath: string;
|
|
3
|
+
repoRootPath: string;
|
|
4
|
+
repoName: string;
|
|
5
|
+
branch: string;
|
|
6
|
+
commitSha: string;
|
|
7
|
+
remoteUrl: string | null;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Like getCurrentWorkspaceInfo but returns null instead of throwing when the
|
|
11
|
+
* current directory is not inside a Git repository or has a detached HEAD.
|
|
12
|
+
* Use this when the caller wants to gracefully handle the no-git case.
|
|
13
|
+
*/
|
|
14
|
+
export declare function tryGetCurrentWorkspaceInfo(cwd?: string): Promise<CurrentWorkspaceInfo | null>;
|
|
15
|
+
export declare function getCurrentWorkspaceInfo(cwd?: string): Promise<CurrentWorkspaceInfo>;
|
|
16
|
+
//# sourceMappingURL=workspace-git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-git.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-git.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAcD;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,SAAgB,GAClB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAMtC;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,SAAgB,GAClB,OAAO,CAAC,oBAAoB,CAAC,CAmC/B"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
async function runGitCommand(cwd, args) {
|
|
6
|
+
const { stdout } = await execFileAsync("git", args, {
|
|
7
|
+
cwd,
|
|
8
|
+
env: {
|
|
9
|
+
...process.env,
|
|
10
|
+
GIT_TERMINAL_PROMPT: "0",
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
return stdout.trim();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Like getCurrentWorkspaceInfo but returns null instead of throwing when the
|
|
17
|
+
* current directory is not inside a Git repository or has a detached HEAD.
|
|
18
|
+
* Use this when the caller wants to gracefully handle the no-git case.
|
|
19
|
+
*/
|
|
20
|
+
export async function tryGetCurrentWorkspaceInfo(cwd = process.cwd()) {
|
|
21
|
+
try {
|
|
22
|
+
return await getCurrentWorkspaceInfo(cwd);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export async function getCurrentWorkspaceInfo(cwd = process.cwd()) {
|
|
29
|
+
let repoRootPath;
|
|
30
|
+
try {
|
|
31
|
+
repoRootPath = await runGitCommand(cwd, ["rev-parse", "--show-toplevel"]);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
throw new Error(`Current workspace is not inside a Git repository. ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
+
}
|
|
36
|
+
const [branch, commitSha, remoteUrl] = await Promise.all([
|
|
37
|
+
runGitCommand(repoRootPath, ["rev-parse", "--abbrev-ref", "HEAD"]),
|
|
38
|
+
runGitCommand(repoRootPath, ["rev-parse", "HEAD"]),
|
|
39
|
+
runGitCommand(repoRootPath, ["config", "--get", "remote.origin.url"]).catch(() => ""),
|
|
40
|
+
]);
|
|
41
|
+
if (!branch || branch === "HEAD") {
|
|
42
|
+
throw new Error("Current workspace repository is in a detached HEAD state and cannot be imported as a workspace source.");
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
workspacePath: cwd,
|
|
46
|
+
repoRootPath,
|
|
47
|
+
repoName: path.basename(repoRootPath),
|
|
48
|
+
branch,
|
|
49
|
+
commitSha,
|
|
50
|
+
remoteUrl: remoteUrl || null,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=workspace-git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-git.js","sourceRoot":"","sources":["../../src/lib/workspace-git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAW1C,KAAK,UAAU,aAAa,CAAC,GAAW,EAAE,IAAc;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;QAClD,GAAG;QACH,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,mBAAmB,EAAE,GAAG;SACzB;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,CAAC;QACH,OAAO,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IAEnB,IAAI,YAAoB,CAAC;IAEzB,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvD,aAAa,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAClE,aAAa,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAClD,aAAa,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,CACzE,GAAG,EAAE,CAAC,EAAE,CACT;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,GAAG;QAClB,YAAY;QACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QACrC,MAAM;QACN,SAAS;QACT,SAAS,EAAE,SAAS,IAAI,IAAI;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface McpServerConfig {
|
|
2
|
+
type?: string;
|
|
3
|
+
command?: string;
|
|
4
|
+
args?: string[];
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
priorityResources?: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface WorkspaceProjectConfig {
|
|
9
|
+
projectId: string | null;
|
|
10
|
+
workspaceRootPath: string | null;
|
|
11
|
+
mcpServers?: Record<string, McpServerConfig>;
|
|
12
|
+
}
|
|
13
|
+
export declare function readWorkspaceProjectConfig(cwd?: string): Promise<WorkspaceProjectConfig>;
|
|
14
|
+
/**
|
|
15
|
+
* Reads priority resource URIs for a given MCP server name from `.codemap/settings.json`.
|
|
16
|
+
* Returns empty array if no config or no priorityResources found.
|
|
17
|
+
*/
|
|
18
|
+
export declare function readPriorityResources(serverName?: string, cwd?: string): Promise<string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Reads external MCP server configs from both global (`~/.codemap/settings.json`) and
|
|
21
|
+
* project-level (`.codemap/settings.json`) configs, merging them with project taking precedence.
|
|
22
|
+
* Only returns entries that have a `command` field (valid stdio servers).
|
|
23
|
+
* Returns a Map of server name → entry config.
|
|
24
|
+
*/
|
|
25
|
+
export declare function readMcpServerConfigs(cwd?: string, globalMcpServers?: Record<string, {
|
|
26
|
+
command?: string;
|
|
27
|
+
args?: string[];
|
|
28
|
+
env?: Record<string, string>;
|
|
29
|
+
}>): Promise<Map<string, {
|
|
30
|
+
command: string;
|
|
31
|
+
args?: string[];
|
|
32
|
+
env?: Record<string, string>;
|
|
33
|
+
}>>;
|
|
34
|
+
/**
|
|
35
|
+
* Reads the CodeMap project ID linked to a workspace directory.
|
|
36
|
+
* Looks for a `projectId` field inside `.codemap/settings.json` at the repo root.
|
|
37
|
+
* Returns null if the file doesn't exist or contains no projectId.
|
|
38
|
+
*/
|
|
39
|
+
export declare function readWorkspaceProjectId(cwd?: string): Promise<string | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the resolved workspace root path (git repo root, or cwd as fallback).
|
|
42
|
+
*/
|
|
43
|
+
export declare function readWorkspacePath(cwd?: string): Promise<string>;
|
|
44
|
+
/**
|
|
45
|
+
* Saves a CodeMap project ID into `.codemap/settings.json` at the given workspace root.
|
|
46
|
+
* Merges with any existing fields in the file so other config is preserved.
|
|
47
|
+
*/
|
|
48
|
+
export declare function saveWorkspaceProjectId(workspaceRoot: string, projectId: string): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Adds or updates an MCP server entry in `.codemap/settings.json`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function saveMcpServerEntry(workspaceRoot: string, name: string, entry: {
|
|
53
|
+
command: string;
|
|
54
|
+
args?: string[];
|
|
55
|
+
env?: Record<string, string>;
|
|
56
|
+
}): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Removes an MCP server entry from `.codemap/settings.json`.
|
|
59
|
+
*/
|
|
60
|
+
export declare function removeMcpServerEntry(workspaceRoot: string, name: string): Promise<boolean>;
|
|
61
|
+
//# sourceMappingURL=workspace-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-project.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-project.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AA6ED,wBAAsB,0BAA0B,CAC9C,GAAG,SAAgB,GAClB,OAAO,CAAC,sBAAsB,CAAC,CAiDjC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,SAAY,EACtB,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,SAAgB,EACnB,gBAAgB,CAAC,EAAE,MAAM,CACvB,MAAM,EACN;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CACpE,GACA,OAAO,CACR,GAAG,CACD,MAAM,EACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CACnE,CACF,CAkCA;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,SAAgB,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAK5E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxE,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAmBlB"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tryGetCurrentWorkspaceInfo } from "./workspace-git.js";
|
|
4
|
+
import { findMonorepoRoot } from "./monorepo-root.js";
|
|
5
|
+
const WORKSPACE_CONFIG_FILE = ".codemap/settings.json";
|
|
6
|
+
async function readWorkspaceProjectConfigAt(configPath) {
|
|
7
|
+
const raw = await readFile(configPath, "utf8");
|
|
8
|
+
const parsed = JSON.parse(raw);
|
|
9
|
+
// settings.json nests projectId/workspaceRootPath under "codemap"
|
|
10
|
+
const codemap = parsed.codemap &&
|
|
11
|
+
typeof parsed.codemap === "object" &&
|
|
12
|
+
!Array.isArray(parsed.codemap)
|
|
13
|
+
? parsed.codemap
|
|
14
|
+
: null;
|
|
15
|
+
let mcpServers;
|
|
16
|
+
if (parsed.mcpServers &&
|
|
17
|
+
typeof parsed.mcpServers === "object" &&
|
|
18
|
+
!Array.isArray(parsed.mcpServers)) {
|
|
19
|
+
mcpServers = {};
|
|
20
|
+
for (const [name, config] of Object.entries(parsed.mcpServers)) {
|
|
21
|
+
if (config && typeof config === "object" && !Array.isArray(config)) {
|
|
22
|
+
const sc = config;
|
|
23
|
+
const entry = {};
|
|
24
|
+
if (typeof sc.type === "string")
|
|
25
|
+
entry.type = sc.type;
|
|
26
|
+
if (typeof sc.command === "string")
|
|
27
|
+
entry.command = sc.command;
|
|
28
|
+
if (Array.isArray(sc.args))
|
|
29
|
+
entry.args = sc.args.filter((a) => typeof a === "string");
|
|
30
|
+
if (sc.env && typeof sc.env === "object" && !Array.isArray(sc.env)) {
|
|
31
|
+
entry.env = {};
|
|
32
|
+
for (const [k, v] of Object.entries(sc.env)) {
|
|
33
|
+
if (typeof v === "string")
|
|
34
|
+
entry.env[k] = v;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(sc.priorityResources)) {
|
|
38
|
+
entry.priorityResources = sc.priorityResources.filter((r) => typeof r === "string");
|
|
39
|
+
}
|
|
40
|
+
mcpServers[name] = entry;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const src = codemap ?? parsed;
|
|
45
|
+
return {
|
|
46
|
+
projectId: typeof src.projectId === "string" && src.projectId.trim()
|
|
47
|
+
? src.projectId.trim()
|
|
48
|
+
: null,
|
|
49
|
+
workspaceRootPath: typeof src.workspaceRootPath === "string" &&
|
|
50
|
+
src.workspaceRootPath.trim()
|
|
51
|
+
? src.workspaceRootPath.trim()
|
|
52
|
+
: null,
|
|
53
|
+
mcpServers,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function pathExists(filePath) {
|
|
57
|
+
if (!filePath)
|
|
58
|
+
return false;
|
|
59
|
+
try {
|
|
60
|
+
await access(filePath);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function readWorkspaceProjectConfig(cwd = process.cwd()) {
|
|
68
|
+
const candidateRoots = new Set();
|
|
69
|
+
const workspaceRoot = process.env.WORKSPACE_ROOT?.trim();
|
|
70
|
+
if (workspaceRoot) {
|
|
71
|
+
candidateRoots.add(workspaceRoot);
|
|
72
|
+
}
|
|
73
|
+
candidateRoots.add(cwd);
|
|
74
|
+
let resolvedRepoRoot = null;
|
|
75
|
+
for (const root of Array.from(candidateRoots)) {
|
|
76
|
+
const workspace = await tryGetCurrentWorkspaceInfo(root);
|
|
77
|
+
if (workspace?.repoRootPath) {
|
|
78
|
+
candidateRoots.add(workspace.repoRootPath);
|
|
79
|
+
resolvedRepoRoot ??= workspace.repoRootPath;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Add monorepo root as candidate (pnpm/yarn/npm/bun workspaces)
|
|
83
|
+
try {
|
|
84
|
+
candidateRoots.add(await findMonorepoRoot(cwd));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// findMonorepoRoot already has git fallback; ignore errors
|
|
88
|
+
}
|
|
89
|
+
for (const root of candidateRoots) {
|
|
90
|
+
try {
|
|
91
|
+
const config = await readWorkspaceProjectConfigAt(path.join(root, WORKSPACE_CONFIG_FILE));
|
|
92
|
+
const savedWorkspaceRoot = config.workspaceRootPath && (await pathExists(config.workspaceRootPath))
|
|
93
|
+
? config.workspaceRootPath
|
|
94
|
+
: null;
|
|
95
|
+
return {
|
|
96
|
+
...config,
|
|
97
|
+
workspaceRootPath: savedWorkspaceRoot ?? root,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Try the next candidate root.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
projectId: null,
|
|
106
|
+
workspaceRootPath: workspaceRoot ?? resolvedRepoRoot,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Reads priority resource URIs for a given MCP server name from `.codemap/settings.json`.
|
|
111
|
+
* Returns empty array if no config or no priorityResources found.
|
|
112
|
+
*/
|
|
113
|
+
export async function readPriorityResources(serverName = "codemap", cwd = process.cwd()) {
|
|
114
|
+
const config = await readWorkspaceProjectConfig(cwd);
|
|
115
|
+
return config.mcpServers?.[serverName]?.priorityResources ?? [];
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Reads external MCP server configs from both global (`~/.codemap/settings.json`) and
|
|
119
|
+
* project-level (`.codemap/settings.json`) configs, merging them with project taking precedence.
|
|
120
|
+
* Only returns entries that have a `command` field (valid stdio servers).
|
|
121
|
+
* Returns a Map of server name → entry config.
|
|
122
|
+
*/
|
|
123
|
+
export async function readMcpServerConfigs(cwd = process.cwd(), globalMcpServers) {
|
|
124
|
+
const config = await readWorkspaceProjectConfig(cwd);
|
|
125
|
+
const result = new Map();
|
|
126
|
+
// Apply global servers first (lower priority)
|
|
127
|
+
if (globalMcpServers) {
|
|
128
|
+
for (const [name, entry] of Object.entries(globalMcpServers)) {
|
|
129
|
+
if (entry.command) {
|
|
130
|
+
result.set(name, {
|
|
131
|
+
command: entry.command,
|
|
132
|
+
args: entry.args,
|
|
133
|
+
env: entry.env,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Apply project-level servers (higher priority — overrides global)
|
|
139
|
+
if (config.mcpServers) {
|
|
140
|
+
for (const [name, entry] of Object.entries(config.mcpServers)) {
|
|
141
|
+
if (entry.command) {
|
|
142
|
+
result.set(name, {
|
|
143
|
+
command: entry.command,
|
|
144
|
+
args: entry.args,
|
|
145
|
+
env: entry.env,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Reads the CodeMap project ID linked to a workspace directory.
|
|
154
|
+
* Looks for a `projectId` field inside `.codemap/settings.json` at the repo root.
|
|
155
|
+
* Returns null if the file doesn't exist or contains no projectId.
|
|
156
|
+
*/
|
|
157
|
+
export async function readWorkspaceProjectId(cwd = process.cwd()) {
|
|
158
|
+
return (await readWorkspaceProjectConfig(cwd)).projectId;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Returns the resolved workspace root path (git repo root, or cwd as fallback).
|
|
162
|
+
*/
|
|
163
|
+
export async function readWorkspacePath(cwd = process.cwd()) {
|
|
164
|
+
const config = await readWorkspaceProjectConfig(cwd);
|
|
165
|
+
if (config.workspaceRootPath)
|
|
166
|
+
return config.workspaceRootPath;
|
|
167
|
+
const workspace = await tryGetCurrentWorkspaceInfo(cwd);
|
|
168
|
+
return workspace?.repoRootPath ?? cwd;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Saves a CodeMap project ID into `.codemap/settings.json` at the given workspace root.
|
|
172
|
+
* Merges with any existing fields in the file so other config is preserved.
|
|
173
|
+
*/
|
|
174
|
+
export async function saveWorkspaceProjectId(workspaceRoot, projectId) {
|
|
175
|
+
const configPath = path.join(workspaceRoot, WORKSPACE_CONFIG_FILE);
|
|
176
|
+
let existing = {};
|
|
177
|
+
try {
|
|
178
|
+
const raw = await readFile(configPath, "utf8");
|
|
179
|
+
existing = JSON.parse(raw);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// File doesn't exist yet — start fresh
|
|
183
|
+
}
|
|
184
|
+
const existingCodemap = existing.codemap &&
|
|
185
|
+
typeof existing.codemap === "object" &&
|
|
186
|
+
!Array.isArray(existing.codemap)
|
|
187
|
+
? existing.codemap
|
|
188
|
+
: {};
|
|
189
|
+
await mkdir(path.dirname(configPath), { recursive: true });
|
|
190
|
+
await writeFile(configPath, `${JSON.stringify({ ...existing, codemap: { ...existingCodemap, projectId, workspaceRootPath: workspaceRoot } }, null, 2)}\n`, "utf8");
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Adds or updates an MCP server entry in `.codemap/settings.json`.
|
|
194
|
+
*/
|
|
195
|
+
export async function saveMcpServerEntry(workspaceRoot, name, entry) {
|
|
196
|
+
const configPath = path.join(workspaceRoot, WORKSPACE_CONFIG_FILE);
|
|
197
|
+
let existing = {};
|
|
198
|
+
try {
|
|
199
|
+
const raw = await readFile(configPath, "utf8");
|
|
200
|
+
existing = JSON.parse(raw);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// File doesn't exist yet
|
|
204
|
+
}
|
|
205
|
+
const mcpServers = (existing.mcpServers ?? {});
|
|
206
|
+
mcpServers[name] = entry;
|
|
207
|
+
await mkdir(path.dirname(configPath), { recursive: true });
|
|
208
|
+
await writeFile(configPath, `${JSON.stringify({ ...existing, mcpServers }, null, 2)}\n`, "utf8");
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Removes an MCP server entry from `.codemap/settings.json`.
|
|
212
|
+
*/
|
|
213
|
+
export async function removeMcpServerEntry(workspaceRoot, name) {
|
|
214
|
+
const configPath = path.join(workspaceRoot, WORKSPACE_CONFIG_FILE);
|
|
215
|
+
let existing = {};
|
|
216
|
+
try {
|
|
217
|
+
const raw = await readFile(configPath, "utf8");
|
|
218
|
+
existing = JSON.parse(raw);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
const mcpServers = (existing.mcpServers ?? {});
|
|
224
|
+
if (!(name in mcpServers))
|
|
225
|
+
return false;
|
|
226
|
+
delete mcpServers[name];
|
|
227
|
+
existing.mcpServers = mcpServers;
|
|
228
|
+
await writeFile(configPath, `${JSON.stringify(existing, null, 2)}\n`, "utf8");
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=workspace-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-project.js","sourceRoot":"","sources":["../../src/lib/workspace-project.ts"],"names":[],"mappings":"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"}
|