golutra-mcp 0.1.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/.env.example +14 -0
- package/CHANGELOG.md +32 -0
- package/LICENSE +184 -0
- package/README.md +158 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cli-runner.d.ts +7 -0
- package/dist/lib/cli-runner.js +107 -0
- package/dist/lib/cli-runner.js.map +1 -0
- package/dist/lib/context.d.ts +17 -0
- package/dist/lib/context.js +109 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/lib/errors.d.ts +15 -0
- package/dist/lib/errors.js +17 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/golutra-client.d.ts +54 -0
- package/dist/lib/golutra-client.js +131 -0
- package/dist/lib/golutra-client.js.map +1 -0
- package/dist/lib/project-skills.d.ts +6 -0
- package/dist/lib/project-skills.js +22 -0
- package/dist/lib/project-skills.js.map +1 -0
- package/dist/lib/tool-results.d.ts +15 -0
- package/dist/lib/tool-results.js +58 -0
- package/dist/lib/tool-results.js.map +1 -0
- package/dist/lib/toolkit.d.ts +4 -0
- package/dist/lib/toolkit.js +354 -0
- package/dist/lib/toolkit.js.map +1 -0
- package/dist/lib/types.d.ts +116 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +71 -0
- package/startup_processmd.md +216 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { GOLUTRA_PROFILES } from "./types.js";
|
|
5
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
6
|
+
const MAX_TIMEOUT_MS = 300_000;
|
|
7
|
+
const DEFAULT_CLI_COMMAND = "golutra-cli";
|
|
8
|
+
function normalizeNonEmptyString(value) {
|
|
9
|
+
const trimmed = value?.trim();
|
|
10
|
+
return trimmed ? trimmed : undefined;
|
|
11
|
+
}
|
|
12
|
+
function normalizeTimeout(value) {
|
|
13
|
+
if (typeof value === "number" && Number.isInteger(value) && value > 0) {
|
|
14
|
+
return Math.min(value, MAX_TIMEOUT_MS);
|
|
15
|
+
}
|
|
16
|
+
if (typeof value === "string") {
|
|
17
|
+
const parsed = Number.parseInt(value, 10);
|
|
18
|
+
if (Number.isInteger(parsed) && parsed > 0) {
|
|
19
|
+
return Math.min(parsed, MAX_TIMEOUT_MS);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return DEFAULT_TIMEOUT_MS;
|
|
23
|
+
}
|
|
24
|
+
function normalizeProfile(value) {
|
|
25
|
+
const trimmed = normalizeNonEmptyString(value);
|
|
26
|
+
if (!trimmed) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (GOLUTRA_PROFILES.includes(trimmed)) {
|
|
30
|
+
return trimmed;
|
|
31
|
+
}
|
|
32
|
+
throw new Error(`Unsupported Golutra profile: ${trimmed}`);
|
|
33
|
+
}
|
|
34
|
+
function getDefaultCliCandidates(platform, homeDirectory) {
|
|
35
|
+
if (platform === "darwin") {
|
|
36
|
+
return [
|
|
37
|
+
"/Applications/Golutra.app/Contents/MacOS/golutra-cli",
|
|
38
|
+
path.join(homeDirectory, "Applications", "Golutra.app", "Contents", "MacOS", "golutra-cli"),
|
|
39
|
+
DEFAULT_CLI_COMMAND
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
return [DEFAULT_CLI_COMMAND];
|
|
43
|
+
}
|
|
44
|
+
export function resolveDefaultCliPath(env, options = {}) {
|
|
45
|
+
const explicitCliPath = normalizeNonEmptyString(env.GOLUTRA_CLI_PATH);
|
|
46
|
+
if (explicitCliPath) {
|
|
47
|
+
return explicitCliPath;
|
|
48
|
+
}
|
|
49
|
+
const platform = options.platform ?? process.platform;
|
|
50
|
+
const homeDirectory = options.homeDirectory ?? homedir();
|
|
51
|
+
const pathExists = options.pathExists ?? existsSync;
|
|
52
|
+
const candidates = getDefaultCliCandidates(platform, homeDirectory);
|
|
53
|
+
return (candidates.find((candidatePath) => path.isAbsolute(candidatePath) && pathExists(candidatePath)) ?? DEFAULT_CLI_COMMAND);
|
|
54
|
+
}
|
|
55
|
+
export function createInitialContext(env) {
|
|
56
|
+
return {
|
|
57
|
+
cliPath: resolveDefaultCliPath(env),
|
|
58
|
+
profile: normalizeProfile(env.GOLUTRA_PROFILE),
|
|
59
|
+
workspacePath: normalizeNonEmptyString(env.GOLUTRA_WORKSPACE_PATH),
|
|
60
|
+
timeoutMs: normalizeTimeout(env.GOLUTRA_COMMAND_TIMEOUT_MS)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export class ContextStore {
|
|
64
|
+
initialContext;
|
|
65
|
+
context;
|
|
66
|
+
constructor(initialContext) {
|
|
67
|
+
this.initialContext = { ...initialContext };
|
|
68
|
+
this.context = { ...initialContext };
|
|
69
|
+
}
|
|
70
|
+
getSnapshot() {
|
|
71
|
+
return { ...this.context };
|
|
72
|
+
}
|
|
73
|
+
reset() {
|
|
74
|
+
this.context = { ...this.initialContext };
|
|
75
|
+
return this.getSnapshot();
|
|
76
|
+
}
|
|
77
|
+
update(nextValues) {
|
|
78
|
+
const nextContext = {
|
|
79
|
+
cliPath: normalizeNonEmptyString(nextValues.cliPath) ?? this.context.cliPath,
|
|
80
|
+
profile: nextValues.profile ?? this.context.profile,
|
|
81
|
+
workspacePath: normalizeNonEmptyString(nextValues.workspacePath) ??
|
|
82
|
+
this.context.workspacePath,
|
|
83
|
+
timeoutMs: typeof nextValues.timeoutMs === "number"
|
|
84
|
+
? normalizeTimeout(nextValues.timeoutMs)
|
|
85
|
+
: this.context.timeoutMs
|
|
86
|
+
};
|
|
87
|
+
this.context = nextContext;
|
|
88
|
+
return this.getSnapshot();
|
|
89
|
+
}
|
|
90
|
+
resolveCommandContext(nextValues = {}) {
|
|
91
|
+
return {
|
|
92
|
+
cliPath: normalizeNonEmptyString(nextValues.cliPath) ?? this.context.cliPath,
|
|
93
|
+
profile: nextValues.profile ?? this.context.profile,
|
|
94
|
+
workspacePath: normalizeNonEmptyString(nextValues.workspacePath) ??
|
|
95
|
+
this.context.workspacePath,
|
|
96
|
+
timeoutMs: typeof nextValues.timeoutMs === "number"
|
|
97
|
+
? normalizeTimeout(nextValues.timeoutMs)
|
|
98
|
+
: this.context.timeoutMs
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
requireWorkspacePath(nextValues = {}) {
|
|
102
|
+
const workspacePath = this.resolveCommandContext(nextValues).workspacePath;
|
|
103
|
+
if (!workspacePath) {
|
|
104
|
+
throw new Error("workspacePath is required. Pass it to the tool call or set a default with golutra-set-context.");
|
|
105
|
+
}
|
|
106
|
+
return workspacePath;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/lib/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class CliExecutionError extends Error {
|
|
2
|
+
readonly cliPath: string;
|
|
3
|
+
readonly args: string[];
|
|
4
|
+
readonly exitCode: number | null;
|
|
5
|
+
readonly stdout: string;
|
|
6
|
+
readonly stderr: string;
|
|
7
|
+
constructor(options: {
|
|
8
|
+
message: string;
|
|
9
|
+
cliPath: string;
|
|
10
|
+
args: string[];
|
|
11
|
+
exitCode: number | null;
|
|
12
|
+
stdout?: string;
|
|
13
|
+
stderr?: string;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class CliExecutionError extends Error {
|
|
2
|
+
cliPath;
|
|
3
|
+
args;
|
|
4
|
+
exitCode;
|
|
5
|
+
stdout;
|
|
6
|
+
stderr;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
super(options.message);
|
|
9
|
+
this.name = "CliExecutionError";
|
|
10
|
+
this.cliPath = options.cliPath;
|
|
11
|
+
this.args = options.args;
|
|
12
|
+
this.exitCode = options.exitCode;
|
|
13
|
+
this.stdout = options.stdout ?? "";
|
|
14
|
+
this.stderr = options.stderr ?? "";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,OAAO,CAAS;IAChB,IAAI,CAAW;IACf,QAAQ,CAAgB;IACxB,MAAM,CAAS;IACf,MAAM,CAAS;IAExB,YAAY,OAOX;QACC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { CliJsonRunner } from "./cli-runner.js";
|
|
2
|
+
import type { ChatConversationsListData, ChatMessagesListData, ChatSendData, CommandContextInput, ListSkillsResponse, RoadmapResultData, RuntimeContextSnapshot, SkillValidationResult, StructuredCommand } from "./types.js";
|
|
3
|
+
declare function buildProfileArgs(profile: RuntimeContextSnapshot["profile"]): string[];
|
|
4
|
+
declare function buildStructuredRunArgs(profile: RuntimeContextSnapshot["profile"], command: StructuredCommand): string[];
|
|
5
|
+
declare function buildSkillsArgs(profile: RuntimeContextSnapshot["profile"], options: {
|
|
6
|
+
skillName?: string | undefined;
|
|
7
|
+
workspacePath?: string | undefined;
|
|
8
|
+
}): string[];
|
|
9
|
+
declare function buildSkillValidateArgs(profile: RuntimeContextSnapshot["profile"], skillPath: string): string[];
|
|
10
|
+
export declare class GolutraCliGateway {
|
|
11
|
+
private readonly runner;
|
|
12
|
+
constructor(runner: CliJsonRunner);
|
|
13
|
+
private executeStructured;
|
|
14
|
+
listConversations(runtimeContext: RuntimeContextSnapshot, input: {
|
|
15
|
+
workspacePath: string;
|
|
16
|
+
userId: string;
|
|
17
|
+
}): Promise<ChatConversationsListData>;
|
|
18
|
+
listMessages(runtimeContext: RuntimeContextSnapshot, input: {
|
|
19
|
+
workspacePath: string;
|
|
20
|
+
conversationId: string;
|
|
21
|
+
limit?: number | undefined;
|
|
22
|
+
beforeId?: string | undefined;
|
|
23
|
+
}): Promise<ChatMessagesListData>;
|
|
24
|
+
sendMessage(runtimeContext: RuntimeContextSnapshot, input: {
|
|
25
|
+
workspacePath: string;
|
|
26
|
+
conversationId: string;
|
|
27
|
+
senderId: string;
|
|
28
|
+
text: string;
|
|
29
|
+
mentionIds: string[];
|
|
30
|
+
}): Promise<ChatSendData>;
|
|
31
|
+
readRoadmap(runtimeContext: RuntimeContextSnapshot, input: {
|
|
32
|
+
workspacePath: string;
|
|
33
|
+
conversationId?: string | undefined;
|
|
34
|
+
}): Promise<RoadmapResultData>;
|
|
35
|
+
updateRoadmap(runtimeContext: RuntimeContextSnapshot, input: {
|
|
36
|
+
workspacePath: string;
|
|
37
|
+
conversationId?: string | undefined;
|
|
38
|
+
readOnly?: boolean | undefined;
|
|
39
|
+
roadmap: {
|
|
40
|
+
objective: string;
|
|
41
|
+
tasks: Array<{
|
|
42
|
+
id: number;
|
|
43
|
+
number?: string | undefined;
|
|
44
|
+
title: string;
|
|
45
|
+
status: "pending" | "in-progress" | "done";
|
|
46
|
+
pinned?: boolean | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
};
|
|
49
|
+
}): Promise<RoadmapResultData>;
|
|
50
|
+
listSkills(runtimeContext: RuntimeContextSnapshot, input: Pick<CommandContextInput, "workspacePath">): Promise<ListSkillsResponse>;
|
|
51
|
+
getSkill(runtimeContext: RuntimeContextSnapshot, skillName: string): Promise<Record<string, unknown>>;
|
|
52
|
+
validateSkill(runtimeContext: RuntimeContextSnapshot, skillPath: string): Promise<SkillValidationResult>;
|
|
53
|
+
}
|
|
54
|
+
export { buildProfileArgs, buildSkillValidateArgs, buildSkillsArgs, buildStructuredRunArgs };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { CliExecutionError } from "./errors.js";
|
|
2
|
+
function buildProfileArgs(profile) {
|
|
3
|
+
return profile ? ["--profile", profile] : [];
|
|
4
|
+
}
|
|
5
|
+
function buildStructuredRunArgs(profile, command) {
|
|
6
|
+
return [
|
|
7
|
+
...buildProfileArgs(profile),
|
|
8
|
+
"run",
|
|
9
|
+
"--command",
|
|
10
|
+
JSON.stringify(command)
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
function buildSkillsArgs(profile, options) {
|
|
14
|
+
const args = [...buildProfileArgs(profile), "skills"];
|
|
15
|
+
if (options.workspacePath) {
|
|
16
|
+
args.push("--workspace", options.workspacePath);
|
|
17
|
+
}
|
|
18
|
+
if (options.skillName) {
|
|
19
|
+
args.push(options.skillName);
|
|
20
|
+
}
|
|
21
|
+
return args;
|
|
22
|
+
}
|
|
23
|
+
function buildSkillValidateArgs(profile, skillPath) {
|
|
24
|
+
return [...buildProfileArgs(profile), "skill-validate", skillPath];
|
|
25
|
+
}
|
|
26
|
+
export class GolutraCliGateway {
|
|
27
|
+
runner;
|
|
28
|
+
constructor(runner) {
|
|
29
|
+
this.runner = runner;
|
|
30
|
+
}
|
|
31
|
+
async executeStructured(command, runtimeContext) {
|
|
32
|
+
const response = await this.runner.executeJson({
|
|
33
|
+
cliPath: runtimeContext.cliPath,
|
|
34
|
+
args: buildStructuredRunArgs(runtimeContext.profile, command),
|
|
35
|
+
timeoutMs: runtimeContext.timeoutMs
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok || response.result?.status !== "ok") {
|
|
38
|
+
throw new CliExecutionError({
|
|
39
|
+
message: response.error ??
|
|
40
|
+
response.result?.message ??
|
|
41
|
+
"golutra-cli returned an unsuccessful command result",
|
|
42
|
+
cliPath: runtimeContext.cliPath,
|
|
43
|
+
args: buildStructuredRunArgs(runtimeContext.profile, command),
|
|
44
|
+
exitCode: 1
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return (response.result?.data ?? {});
|
|
48
|
+
}
|
|
49
|
+
async listConversations(runtimeContext, input) {
|
|
50
|
+
return this.executeStructured({
|
|
51
|
+
type: "chat.conversations.list",
|
|
52
|
+
payload: {
|
|
53
|
+
workspacePath: input.workspacePath,
|
|
54
|
+
userId: input.userId
|
|
55
|
+
}
|
|
56
|
+
}, runtimeContext);
|
|
57
|
+
}
|
|
58
|
+
async listMessages(runtimeContext, input) {
|
|
59
|
+
const payload = {
|
|
60
|
+
type: "chat.messages.list",
|
|
61
|
+
payload: {
|
|
62
|
+
workspacePath: input.workspacePath,
|
|
63
|
+
conversationId: input.conversationId,
|
|
64
|
+
...(typeof input.limit === "number" ? { limit: input.limit } : {}),
|
|
65
|
+
...(input.beforeId ? { beforeId: input.beforeId } : {})
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return this.executeStructured(payload, runtimeContext);
|
|
69
|
+
}
|
|
70
|
+
async sendMessage(runtimeContext, input) {
|
|
71
|
+
return this.executeStructured({
|
|
72
|
+
type: "chat.send",
|
|
73
|
+
payload: {
|
|
74
|
+
workspacePath: input.workspacePath,
|
|
75
|
+
conversationId: input.conversationId,
|
|
76
|
+
senderId: input.senderId,
|
|
77
|
+
text: input.text,
|
|
78
|
+
mentionIds: input.mentionIds
|
|
79
|
+
}
|
|
80
|
+
}, runtimeContext);
|
|
81
|
+
}
|
|
82
|
+
async readRoadmap(runtimeContext, input) {
|
|
83
|
+
const payload = {
|
|
84
|
+
type: "roadmap.read",
|
|
85
|
+
payload: {
|
|
86
|
+
workspacePath: input.workspacePath,
|
|
87
|
+
...(input.conversationId ? { conversationId: input.conversationId } : {})
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return this.executeStructured(payload, runtimeContext);
|
|
91
|
+
}
|
|
92
|
+
async updateRoadmap(runtimeContext, input) {
|
|
93
|
+
const payload = {
|
|
94
|
+
type: "roadmap.update",
|
|
95
|
+
payload: {
|
|
96
|
+
workspacePath: input.workspacePath,
|
|
97
|
+
...(input.conversationId ? { conversationId: input.conversationId } : {}),
|
|
98
|
+
...(typeof input.readOnly === "boolean" ? { readOnly: input.readOnly } : {}),
|
|
99
|
+
roadmap: input.roadmap
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return this.executeStructured(payload, runtimeContext);
|
|
103
|
+
}
|
|
104
|
+
async listSkills(runtimeContext, input) {
|
|
105
|
+
return this.runner.executeJson({
|
|
106
|
+
cliPath: runtimeContext.cliPath,
|
|
107
|
+
args: buildSkillsArgs(runtimeContext.profile, {
|
|
108
|
+
...(input.workspacePath ? { workspacePath: input.workspacePath } : {})
|
|
109
|
+
}),
|
|
110
|
+
timeoutMs: runtimeContext.timeoutMs
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async getSkill(runtimeContext, skillName) {
|
|
114
|
+
return this.runner.executeJson({
|
|
115
|
+
cliPath: runtimeContext.cliPath,
|
|
116
|
+
args: buildSkillsArgs(runtimeContext.profile, {
|
|
117
|
+
skillName
|
|
118
|
+
}),
|
|
119
|
+
timeoutMs: runtimeContext.timeoutMs
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async validateSkill(runtimeContext, skillPath) {
|
|
123
|
+
return this.runner.executeJson({
|
|
124
|
+
cliPath: runtimeContext.cliPath,
|
|
125
|
+
args: buildSkillValidateArgs(runtimeContext.profile, skillPath),
|
|
126
|
+
timeoutMs: runtimeContext.timeoutMs
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export { buildProfileArgs, buildSkillValidateArgs, buildSkillsArgs, buildStructuredRunArgs };
|
|
131
|
+
//# sourceMappingURL=golutra-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"golutra-client.js","sourceRoot":"","sources":["../../src/lib/golutra-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ListSkillsResponse, ProjectSkillDescriptor } from "./types.js";
|
|
2
|
+
export interface ProjectSkillDocument extends ProjectSkillDescriptor {
|
|
3
|
+
content: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function findProjectSkillByName(skillsResponse: ListSkillsResponse, skillName: string): ProjectSkillDescriptor;
|
|
6
|
+
export declare function readProjectSkillDocument(projectSkill: ProjectSkillDescriptor): Promise<ProjectSkillDocument>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
export function findProjectSkillByName(skillsResponse, skillName) {
|
|
3
|
+
const projectSkills = skillsResponse.projectSkills ?? [];
|
|
4
|
+
if (projectSkills.length === 0) {
|
|
5
|
+
throw new Error("No project skills were found for this workspace. Run golutra-list-project-skills first to verify discovery.");
|
|
6
|
+
}
|
|
7
|
+
const matchedSkill = projectSkills.find((projectSkill) => projectSkill.name === skillName);
|
|
8
|
+
if (!matchedSkill) {
|
|
9
|
+
throw new Error(`Project skill "${skillName}" was not found. Available project skills: ${projectSkills
|
|
10
|
+
.map((projectSkill) => projectSkill.name)
|
|
11
|
+
.join(", ")}`);
|
|
12
|
+
}
|
|
13
|
+
return matchedSkill;
|
|
14
|
+
}
|
|
15
|
+
export async function readProjectSkillDocument(projectSkill) {
|
|
16
|
+
const content = await readFile(projectSkill.skillMdPath, "utf8");
|
|
17
|
+
return {
|
|
18
|
+
...projectSkill,
|
|
19
|
+
content
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=project-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../../src/lib/project-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAW5C,MAAM,UAAU,sBAAsB,CACpC,cAAkC,EAClC,SAAiB;IAEjB,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,IAAI,EAAE,CAAC;IACzD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC3F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,kBAAkB,SAAS,8CAA8C,aAAa;aACnF,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,YAAoC;IAEpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjE,OAAO;QACL,GAAG,YAAY;QACf,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function buildToolSuccess<T extends object>(summary: string, structuredContent: T): {
|
|
2
|
+
content: Array<{
|
|
3
|
+
type: "text";
|
|
4
|
+
text: string;
|
|
5
|
+
}>;
|
|
6
|
+
structuredContent: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
export declare function buildToolError(error: unknown): {
|
|
9
|
+
content: Array<{
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
structuredContent: Record<string, unknown>;
|
|
14
|
+
isError: true;
|
|
15
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CliExecutionError } from "./errors.js";
|
|
2
|
+
function toPrettyJson(value) {
|
|
3
|
+
return JSON.stringify(value, null, 2);
|
|
4
|
+
}
|
|
5
|
+
export function buildToolSuccess(summary, structuredContent) {
|
|
6
|
+
const normalizedStructuredContent = {
|
|
7
|
+
...structuredContent
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
content: [
|
|
11
|
+
{
|
|
12
|
+
type: "text",
|
|
13
|
+
text: `${summary}\n\n${toPrettyJson(normalizedStructuredContent)}`
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
structuredContent: normalizedStructuredContent
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function buildToolError(error) {
|
|
20
|
+
const structuredContent = buildErrorContent(error);
|
|
21
|
+
const message = typeof structuredContent.message === "string"
|
|
22
|
+
? structuredContent.message
|
|
23
|
+
: String(error);
|
|
24
|
+
return {
|
|
25
|
+
content: [
|
|
26
|
+
{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: `Error: ${message}\n\n${toPrettyJson(structuredContent)}`
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
structuredContent,
|
|
32
|
+
isError: true
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function buildErrorContent(error) {
|
|
36
|
+
if (error instanceof CliExecutionError) {
|
|
37
|
+
return {
|
|
38
|
+
type: error.name,
|
|
39
|
+
message: error.message,
|
|
40
|
+
cliPath: error.cliPath,
|
|
41
|
+
args: error.args,
|
|
42
|
+
exitCode: error.exitCode,
|
|
43
|
+
stdout: error.stdout,
|
|
44
|
+
stderr: error.stderr
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (error instanceof Error) {
|
|
48
|
+
return {
|
|
49
|
+
type: error.name,
|
|
50
|
+
message: error.message
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
type: "UnknownError",
|
|
55
|
+
message: String(error)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=tool-results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-results.js","sourceRoot":"","sources":["../../src/lib/tool-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,iBAAoB;IAKpB,MAAM,2BAA2B,GAAG;QAClC,GAAG,iBAAiB;KACM,CAAC;IAE7B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,GAAG,OAAO,OAAO,YAAY,CAAC,2BAA2B,CAAC,EAAE;aACnE;SACF;QACD,iBAAiB,EAAE,2BAA2B;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAK3C,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,OAAO,GACX,OAAO,iBAAiB,CAAC,OAAO,KAAK,QAAQ;QAC3C,CAAC,CAAC,iBAAiB,CAAC,OAAO;QAC3B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU,OAAO,OAAO,YAAY,CAAC,iBAAiB,CAAC,EAAE;aAChE;SACF;QACD,iBAAiB;QACjB,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { ContextStore } from "./context.js";
|
|
3
|
+
import type { GolutraCliGateway } from "./golutra-client.js";
|
|
4
|
+
export declare function registerTools(server: McpServer, contextStore: ContextStore, gateway: GolutraCliGateway): void;
|