@lawrencehui/citio 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/.dockerignore +8 -0
- package/Dockerfile +47 -0
- package/LICENSE +21 -0
- package/README.md +305 -0
- package/citio.example.yaml +43 -0
- package/dist/adapters/slack.d.ts +22 -0
- package/dist/adapters/slack.d.ts.map +1 -0
- package/dist/adapters/slack.js +624 -0
- package/dist/adapters/slack.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +1464 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/ops.d.ts +13 -0
- package/dist/cli/ops.d.ts.map +1 -0
- package/dist/cli/ops.js +167 -0
- package/dist/cli/ops.js.map +1 -0
- package/dist/config/schema.d.ts +81 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +65 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/agent-runner.d.ts +38 -0
- package/dist/core/agent-runner.d.ts.map +1 -0
- package/dist/core/agent-runner.js +531 -0
- package/dist/core/agent-runner.js.map +1 -0
- package/dist/core/mcp-entry.d.ts +7 -0
- package/dist/core/mcp-entry.d.ts.map +1 -0
- package/dist/core/mcp-entry.js +390 -0
- package/dist/core/mcp-entry.js.map +1 -0
- package/dist/core/provider-config.d.ts +2 -0
- package/dist/core/provider-config.d.ts.map +1 -0
- package/dist/core/provider-config.js +53 -0
- package/dist/core/provider-config.js.map +1 -0
- package/dist/core/session-manager.d.ts +15 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +78 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/skills.d.ts +24 -0
- package/dist/core/skills.d.ts.map +1 -0
- package/dist/core/skills.js +111 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/workspace.d.ts +13 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +238 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +152 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/app-state.d.ts +5 -0
- package/dist/utils/app-state.d.ts.map +1 -0
- package/dist/utils/app-state.js +35 -0
- package/dist/utils/app-state.js.map +1 -0
- package/dist/utils/claude.d.ts +4 -0
- package/dist/utils/claude.d.ts.map +1 -0
- package/dist/utils/claude.js +65 -0
- package/dist/utils/claude.js.map +1 -0
- package/dist/utils/codex.d.ts +5 -0
- package/dist/utils/codex.d.ts.map +1 -0
- package/dist/utils/codex.js +17 -0
- package/dist/utils/codex.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +16 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/installer-state.d.ts +33 -0
- package/dist/utils/installer-state.d.ts.map +1 -0
- package/dist/utils/installer-state.js +152 -0
- package/dist/utils/installer-state.js.map +1 -0
- package/dist/utils/runtime-env.d.ts +3 -0
- package/dist/utils/runtime-env.d.ts.map +1 -0
- package/dist/utils/runtime-env.js +24 -0
- package/dist/utils/runtime-env.js.map +1 -0
- package/dist/utils/secret-store.d.ts +18 -0
- package/dist/utils/secret-store.d.ts.map +1 -0
- package/dist/utils/secret-store.js +78 -0
- package/dist/utils/secret-store.js.map +1 -0
- package/dist/utils/slack-onboarding.d.ts +22 -0
- package/dist/utils/slack-onboarding.d.ts.map +1 -0
- package/dist/utils/slack-onboarding.js +205 -0
- package/dist/utils/slack-onboarding.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Standalone MCP server entry point.
|
|
4
|
+
* Claude Code and Codex connect to this via MCP.
|
|
5
|
+
*/
|
|
6
|
+
import "dotenv/config";
|
|
7
|
+
import { execFileSync } from "child_process";
|
|
8
|
+
import { existsSync, readFileSync, readdirSync } from "fs";
|
|
9
|
+
import { promises as fs } from "fs";
|
|
10
|
+
import path from "path";
|
|
11
|
+
import { parse } from "yaml";
|
|
12
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
import { CitioConfigSchema } from "../config/schema.js";
|
|
16
|
+
import { resolveEnvVars } from "../utils/env.js";
|
|
17
|
+
const COMMAND_ALLOWLIST = new Set([
|
|
18
|
+
"git", "npm", "npx", "tsc", "bun", "python", "python3", "node", "make",
|
|
19
|
+
"ls", "cat", "head", "tail", "grep", "find", "wc", "sort", "uniq",
|
|
20
|
+
"diff", "echo", "test", "gh", "aws", "supabase",
|
|
21
|
+
]);
|
|
22
|
+
const COMMAND_BLOCKLIST = new Set([
|
|
23
|
+
"curl", "wget", "nc", "ssh", "scp", "rsync", "env", "printenv", "export",
|
|
24
|
+
]);
|
|
25
|
+
const SEARCH_INCLUDES = [
|
|
26
|
+
"--include=*.ts",
|
|
27
|
+
"--include=*.tsx",
|
|
28
|
+
"--include=*.js",
|
|
29
|
+
"--include=*.jsx",
|
|
30
|
+
"--include=*.py",
|
|
31
|
+
"--include=*.go",
|
|
32
|
+
"--include=*.rs",
|
|
33
|
+
"--include=*.java",
|
|
34
|
+
"--include=*.rb",
|
|
35
|
+
"--include=*.md",
|
|
36
|
+
];
|
|
37
|
+
function createTextResult(text, isError = false) {
|
|
38
|
+
return {
|
|
39
|
+
content: [{ type: "text", text }],
|
|
40
|
+
...(isError ? { isError: true } : {}),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function resolveUnderRoot(root, target = ".") {
|
|
44
|
+
const resolvedRoot = path.resolve(root);
|
|
45
|
+
const resolved = path.resolve(resolvedRoot, target);
|
|
46
|
+
if (resolved !== resolvedRoot && !resolved.startsWith(`${resolvedRoot}${path.sep}`)) {
|
|
47
|
+
throw new Error("path traversal not allowed");
|
|
48
|
+
}
|
|
49
|
+
return resolved;
|
|
50
|
+
}
|
|
51
|
+
function runFile(cmd, args, options) {
|
|
52
|
+
return execFileSync(cmd, args, {
|
|
53
|
+
cwd: options.cwd,
|
|
54
|
+
encoding: "utf-8",
|
|
55
|
+
timeout: options.timeout ?? 30000,
|
|
56
|
+
maxBuffer: options.maxBuffer ?? 10 * 1024 * 1024,
|
|
57
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: "0" },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function extractExecError(err) {
|
|
61
|
+
const candidate = err;
|
|
62
|
+
const stderr = typeof candidate.stderr === "string" ? candidate.stderr : candidate.stderr?.toString();
|
|
63
|
+
const stdout = typeof candidate.stdout === "string" ? candidate.stdout : candidate.stdout?.toString();
|
|
64
|
+
return stderr || stdout || candidate.message || String(err);
|
|
65
|
+
}
|
|
66
|
+
function validateBranchName(branchName) {
|
|
67
|
+
if (!/^[A-Za-z0-9._/-]+$/.test(branchName) || branchName.startsWith("-") || branchName.includes("..")) {
|
|
68
|
+
throw new Error(`Invalid branch name "${branchName}"`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function findMemoryMatches(memoryDir, query) {
|
|
72
|
+
if (!existsSync(memoryDir)) {
|
|
73
|
+
return "No memory files found.";
|
|
74
|
+
}
|
|
75
|
+
const normalizedQuery = query.toLowerCase();
|
|
76
|
+
const matches = [];
|
|
77
|
+
for (const entry of readdirSync(memoryDir, { withFileTypes: true })) {
|
|
78
|
+
if (!entry.isFile() || !entry.name.endsWith(".md")) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const filePath = path.join(memoryDir, entry.name);
|
|
82
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
83
|
+
const lowerContent = content.toLowerCase();
|
|
84
|
+
const nameScore = entry.name.toLowerCase().includes(normalizedQuery) ? 2 : 0;
|
|
85
|
+
const contentIndex = lowerContent.indexOf(normalizedQuery);
|
|
86
|
+
const contentScore = contentIndex >= 0 ? 1 : 0;
|
|
87
|
+
if (nameScore === 0 && contentScore === 0) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const excerptStart = contentIndex >= 0 ? Math.max(0, contentIndex - 120) : 0;
|
|
91
|
+
const excerpt = content.slice(excerptStart, excerptStart + 400).trim();
|
|
92
|
+
matches.push({
|
|
93
|
+
file: filePath,
|
|
94
|
+
score: nameScore + contentScore,
|
|
95
|
+
excerpt: excerpt || content.slice(0, 400).trim(),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
if (matches.length === 0) {
|
|
99
|
+
return `No memory matches found for "${query}".`;
|
|
100
|
+
}
|
|
101
|
+
matches.sort((a, b) => b.score - a.score || a.file.localeCompare(b.file));
|
|
102
|
+
return matches.slice(0, 5).map((match) => {
|
|
103
|
+
return `${match.file}\n${match.excerpt}`;
|
|
104
|
+
}).join("\n\n---\n\n");
|
|
105
|
+
}
|
|
106
|
+
async function appendAuditEvent(memoryDir, event) {
|
|
107
|
+
const auditDir = path.join(memoryDir, "audit");
|
|
108
|
+
const auditFile = path.join(auditDir, "tool-events.jsonl");
|
|
109
|
+
await fs.mkdir(auditDir, { recursive: true });
|
|
110
|
+
await fs.appendFile(auditFile, `${JSON.stringify(event)}\n`, "utf-8");
|
|
111
|
+
}
|
|
112
|
+
function summarizeToolResponse(response) {
|
|
113
|
+
const text = response.content
|
|
114
|
+
?.filter((entry) => entry.type === "text" && entry.text)
|
|
115
|
+
.map((entry) => entry.text || "")
|
|
116
|
+
.join("\n")
|
|
117
|
+
.trim();
|
|
118
|
+
if (!text) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
return text.length > 500 ? `${text.slice(0, 500)}...` : text;
|
|
122
|
+
}
|
|
123
|
+
async function queryAuditLog(memoryDir, query, limit) {
|
|
124
|
+
const auditFile = path.join(memoryDir, "audit", "tool-events.jsonl");
|
|
125
|
+
if (!existsSync(auditFile)) {
|
|
126
|
+
return "No audit events recorded yet.";
|
|
127
|
+
}
|
|
128
|
+
const normalizedQuery = query.toLowerCase();
|
|
129
|
+
const lines = readFileSync(auditFile, "utf-8")
|
|
130
|
+
.split("\n")
|
|
131
|
+
.filter(Boolean);
|
|
132
|
+
const matches = lines
|
|
133
|
+
.map((line) => {
|
|
134
|
+
try {
|
|
135
|
+
return JSON.parse(line);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
})
|
|
141
|
+
.filter((entry) => entry !== null)
|
|
142
|
+
.filter((entry) => JSON.stringify(entry).toLowerCase().includes(normalizedQuery))
|
|
143
|
+
.slice(-limit);
|
|
144
|
+
if (matches.length === 0) {
|
|
145
|
+
return `No audit events found for "${query}".`;
|
|
146
|
+
}
|
|
147
|
+
return matches
|
|
148
|
+
.map((entry) => JSON.stringify(entry, null, 2))
|
|
149
|
+
.join("\n\n---\n\n");
|
|
150
|
+
}
|
|
151
|
+
function withAudit(memoryDir, toolName, handler) {
|
|
152
|
+
return async (args) => {
|
|
153
|
+
const startedAt = new Date().toISOString();
|
|
154
|
+
try {
|
|
155
|
+
const response = await handler(args);
|
|
156
|
+
await appendAuditEvent(memoryDir, {
|
|
157
|
+
timestamp: startedAt,
|
|
158
|
+
tool: toolName,
|
|
159
|
+
args,
|
|
160
|
+
status: response.isError ? "error" : "success",
|
|
161
|
+
summary: summarizeToolResponse(response),
|
|
162
|
+
});
|
|
163
|
+
return response;
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
167
|
+
await appendAuditEvent(memoryDir, {
|
|
168
|
+
timestamp: startedAt,
|
|
169
|
+
tool: toolName,
|
|
170
|
+
args,
|
|
171
|
+
status: "threw",
|
|
172
|
+
error,
|
|
173
|
+
});
|
|
174
|
+
return createTextResult(`Error: ${error}`, true);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
async function main() {
|
|
179
|
+
const configPath = process.env.CITIO_CONFIG || "citio.yaml";
|
|
180
|
+
const workspacePath = process.env.CITIO_WORKSPACE || "/workspace";
|
|
181
|
+
const memoryDir = process.env.CITIO_MEMORY || "/memory";
|
|
182
|
+
let config;
|
|
183
|
+
try {
|
|
184
|
+
let raw;
|
|
185
|
+
if (process.env.CITIO_CONFIG_B64) {
|
|
186
|
+
raw = Buffer.from(process.env.CITIO_CONFIG_B64, "base64").toString("utf-8");
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
raw = readFileSync(configPath, "utf-8");
|
|
190
|
+
}
|
|
191
|
+
config = CitioConfigSchema.parse(resolveEnvVars(parse(raw)));
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
config = null;
|
|
195
|
+
}
|
|
196
|
+
const server = new McpServer({
|
|
197
|
+
name: "citio",
|
|
198
|
+
version: "0.1.0",
|
|
199
|
+
});
|
|
200
|
+
server.tool("investigate_codebase", "Search the codebase for files, functions, or patterns related to a query", { query: z.string().describe("What to search for") }, withAudit(memoryDir, "investigate_codebase", async ({ query }) => {
|
|
201
|
+
try {
|
|
202
|
+
const result = runFile("grep", ["-rn", "-l", ...SEARCH_INCLUDES, query, "."], { cwd: workspacePath, timeout: 30000 });
|
|
203
|
+
const files = result.split("\n").map((line) => line.trim()).filter(Boolean).slice(0, 20);
|
|
204
|
+
return createTextResult(files.length > 0
|
|
205
|
+
? `Files matching "${query}":\n${files.join("\n")}`
|
|
206
|
+
: `No matches found for "${query}".`);
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
const message = extractExecError(err);
|
|
210
|
+
if (message.includes("No such file or directory") || message.includes("status 1")) {
|
|
211
|
+
return createTextResult(`No matches found for "${query}".`);
|
|
212
|
+
}
|
|
213
|
+
return createTextResult(`Error searching codebase: ${message}`, true);
|
|
214
|
+
}
|
|
215
|
+
}));
|
|
216
|
+
server.tool("read_file", "Read file contents from the workspace", { path: z.string().describe("Relative path from workspace root") }, withAudit(memoryDir, "read_file", async ({ path: filePath }) => {
|
|
217
|
+
try {
|
|
218
|
+
const fullPath = resolveUnderRoot(workspacePath, filePath);
|
|
219
|
+
const content = await fs.readFile(fullPath, "utf-8");
|
|
220
|
+
return createTextResult(content);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
return createTextResult(`Error: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
224
|
+
}
|
|
225
|
+
}));
|
|
226
|
+
server.tool("write_file", "Write content to a file (creates or overwrites)", { path: z.string(), content: z.string() }, withAudit(memoryDir, "write_file", async ({ path: filePath, content: fileContent }) => {
|
|
227
|
+
try {
|
|
228
|
+
const fullPath = resolveUnderRoot(workspacePath, filePath);
|
|
229
|
+
await fs.mkdir(path.dirname(fullPath), { recursive: true });
|
|
230
|
+
await fs.writeFile(fullPath, fileContent, "utf-8");
|
|
231
|
+
return createTextResult(`Written ${filePath}`);
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
return createTextResult(`Error: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
235
|
+
}
|
|
236
|
+
}));
|
|
237
|
+
server.tool("create_branch", "Create a git branch with an isolated worktree", { repo: z.string(), branch_name: z.string() }, withAudit(memoryDir, "create_branch", async ({ repo, branch_name }) => {
|
|
238
|
+
try {
|
|
239
|
+
validateBranchName(branch_name);
|
|
240
|
+
const repoPath = resolveUnderRoot(workspacePath, repo);
|
|
241
|
+
const worktreePath = resolveUnderRoot(workspacePath, `${repo}-wt-${branch_name}`);
|
|
242
|
+
runFile("git", ["worktree", "add", worktreePath, "-b", branch_name], {
|
|
243
|
+
cwd: repoPath,
|
|
244
|
+
timeout: 30000,
|
|
245
|
+
});
|
|
246
|
+
return createTextResult(`Branch "${branch_name}" created at ${worktreePath}`);
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
return createTextResult(`Error: ${extractExecError(err)}`, true);
|
|
250
|
+
}
|
|
251
|
+
}));
|
|
252
|
+
server.tool("create_pr", "Push branch and create a GitHub pull request", { repo: z.string(), title: z.string(), body: z.string(), branch: z.string(), base: z.string().default("main") }, withAudit(memoryDir, "create_pr", async ({ repo, title, body, branch, base }) => {
|
|
253
|
+
try {
|
|
254
|
+
validateBranchName(branch);
|
|
255
|
+
const repoPath = resolveUnderRoot(workspacePath, repo);
|
|
256
|
+
runFile("git", ["push", "origin", branch], { cwd: repoPath, timeout: 60000 });
|
|
257
|
+
const result = runFile("gh", ["pr", "create", "--title", title, "--body", body, "--head", branch, "--base", base], { cwd: repoPath, timeout: 30000 });
|
|
258
|
+
return createTextResult(`PR created: ${result.trim()}`);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
return createTextResult(`Error: ${extractExecError(err)}`, true);
|
|
262
|
+
}
|
|
263
|
+
}));
|
|
264
|
+
server.tool("run_command", "Run an allowlisted command in the workspace", { command: z.string(), cwd: z.string().optional() }, withAudit(memoryDir, "run_command", async ({ command, cwd }) => {
|
|
265
|
+
const parts = command.trim().split(/\s+/);
|
|
266
|
+
const cmd = parts[0];
|
|
267
|
+
const args = parts.slice(1);
|
|
268
|
+
if (!cmd || COMMAND_BLOCKLIST.has(cmd)) {
|
|
269
|
+
return createTextResult(`Command "${cmd}" is blocked.`, true);
|
|
270
|
+
}
|
|
271
|
+
if (!COMMAND_ALLOWLIST.has(cmd)) {
|
|
272
|
+
return createTextResult(`Command "${cmd}" not in allowlist. Allowed: ${[...COMMAND_ALLOWLIST].join(", ")}`, true);
|
|
273
|
+
}
|
|
274
|
+
if (/[;|&`$(){}]/.test(command)) {
|
|
275
|
+
return createTextResult("Error: shell metacharacters not allowed. Run one command at a time.", true);
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
const workDir = resolveUnderRoot(workspacePath, cwd);
|
|
279
|
+
const result = runFile(cmd, args, {
|
|
280
|
+
cwd: workDir,
|
|
281
|
+
timeout: 120000,
|
|
282
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
283
|
+
});
|
|
284
|
+
return createTextResult(result || "(no output)");
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
return createTextResult(`Failed:\n${extractExecError(err)}`, true);
|
|
288
|
+
}
|
|
289
|
+
}));
|
|
290
|
+
server.tool("check_ci_status", "Check CI/CD status of a pull request", { repo: z.string(), pr_number: z.number() }, withAudit(memoryDir, "check_ci_status", async ({ repo, pr_number }) => {
|
|
291
|
+
try {
|
|
292
|
+
const repoPath = resolveUnderRoot(workspacePath, repo);
|
|
293
|
+
// gh pr checks JSON fields are name/state/bucket/... — "status"/"conclusion"
|
|
294
|
+
// belong to `gh run` and made every call fail with "Unknown JSON field".
|
|
295
|
+
const result = runFile("gh", ["pr", "checks", String(pr_number), "--json", "name,state,bucket,link"], { cwd: repoPath, timeout: 30000 });
|
|
296
|
+
return createTextResult(`CI for PR #${pr_number}:\n${result}`);
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
const detail = extractExecError(err);
|
|
300
|
+
// gh exits non-zero when a PR simply has no checks — that's an answer, not an error.
|
|
301
|
+
if (/no checks reported/i.test(detail)) {
|
|
302
|
+
return createTextResult(`PR #${pr_number} has no CI checks reported (repo may have no CI configured).`);
|
|
303
|
+
}
|
|
304
|
+
return createTextResult(`Error: ${detail}`, true);
|
|
305
|
+
}
|
|
306
|
+
}));
|
|
307
|
+
server.tool("save_finding", "Save a finding to organizational memory for future reference", { topic: z.string(), content: z.string() }, withAudit(memoryDir, "save_finding", async ({ topic, content: findingContent }) => {
|
|
308
|
+
const slug = topic.toLowerCase().replace(/[^a-z0-9-]/g, "-");
|
|
309
|
+
const filePath = path.join(memoryDir, `${slug}.md`);
|
|
310
|
+
try {
|
|
311
|
+
await fs.mkdir(memoryDir, { recursive: true });
|
|
312
|
+
const timestamp = new Date().toISOString();
|
|
313
|
+
const entry = `\n\n## ${timestamp}\n\n${findingContent}\n`;
|
|
314
|
+
if (existsSync(filePath)) {
|
|
315
|
+
await fs.appendFile(filePath, entry, "utf-8");
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
await fs.writeFile(filePath, `# ${topic}\n${entry}`, "utf-8");
|
|
319
|
+
}
|
|
320
|
+
return createTextResult(`Saved to ${filePath}`);
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
return createTextResult(`Error: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
324
|
+
}
|
|
325
|
+
}));
|
|
326
|
+
server.tool("recall_context", "Recall prior findings from organizational memory", { query: z.string().describe("What to search for in memory") }, withAudit(memoryDir, "recall_context", async ({ query }) => {
|
|
327
|
+
try {
|
|
328
|
+
return createTextResult(await findMemoryMatches(memoryDir, query));
|
|
329
|
+
}
|
|
330
|
+
catch (err) {
|
|
331
|
+
return createTextResult(`Error: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
332
|
+
}
|
|
333
|
+
}));
|
|
334
|
+
server.tool("query_logs", "Query CloudWatch logs for recent events", {
|
|
335
|
+
log_group_name: z.string().describe("CloudWatch log group name"),
|
|
336
|
+
filter_pattern: z.string().optional().describe("Optional CloudWatch filter pattern"),
|
|
337
|
+
limit: z.number().int().positive().max(100).default(20),
|
|
338
|
+
region: z.string().optional().describe("AWS region; defaults to AWS_DEFAULT_REGION"),
|
|
339
|
+
}, withAudit(memoryDir, "query_logs", async ({ log_group_name, filter_pattern, limit, region }) => {
|
|
340
|
+
try {
|
|
341
|
+
const args = [
|
|
342
|
+
"logs",
|
|
343
|
+
"filter-log-events",
|
|
344
|
+
"--log-group-name", log_group_name,
|
|
345
|
+
"--limit", String(limit),
|
|
346
|
+
"--output", "json",
|
|
347
|
+
];
|
|
348
|
+
if (filter_pattern) {
|
|
349
|
+
args.push("--filter-pattern", filter_pattern);
|
|
350
|
+
}
|
|
351
|
+
if (region || process.env.AWS_DEFAULT_REGION) {
|
|
352
|
+
args.push("--region", region || process.env.AWS_DEFAULT_REGION || "");
|
|
353
|
+
}
|
|
354
|
+
const result = runFile("aws", args, { cwd: workspacePath, timeout: 30000 });
|
|
355
|
+
return createTextResult(result);
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
return createTextResult(`Error: ${extractExecError(err)}`, true);
|
|
359
|
+
}
|
|
360
|
+
}));
|
|
361
|
+
server.tool("post_update", "Record a short progress update for the current task", {
|
|
362
|
+
thread_key: z.string().describe("Slack thread key or other stable conversation id"),
|
|
363
|
+
text: z.string().describe("Progress update text"),
|
|
364
|
+
}, withAudit(memoryDir, "post_update", async ({ thread_key, text }) => {
|
|
365
|
+
const progressDir = path.join(memoryDir, "progress");
|
|
366
|
+
const safeName = thread_key.replace(/[^a-zA-Z0-9._-]/g, "_");
|
|
367
|
+
const progressFile = path.join(progressDir, `${safeName}.jsonl`);
|
|
368
|
+
try {
|
|
369
|
+
await fs.mkdir(progressDir, { recursive: true });
|
|
370
|
+
await fs.appendFile(progressFile, `${JSON.stringify({ timestamp: new Date().toISOString(), text })}\n`, "utf-8");
|
|
371
|
+
return createTextResult(`Progress update recorded for ${thread_key}: ${text}`);
|
|
372
|
+
}
|
|
373
|
+
catch (err) {
|
|
374
|
+
return createTextResult(`Error: ${err instanceof Error ? err.message : String(err)}`, true);
|
|
375
|
+
}
|
|
376
|
+
}));
|
|
377
|
+
server.tool("query_audit_log", "Query the recorded MCP tool audit trail", {
|
|
378
|
+
query: z.string().describe("Free-text query over audit events"),
|
|
379
|
+
limit: z.number().int().positive().max(100).default(20),
|
|
380
|
+
}, withAudit(memoryDir, "query_audit_log", async ({ query, limit }) => {
|
|
381
|
+
return createTextResult(await queryAuditLog(memoryDir, query, limit));
|
|
382
|
+
}));
|
|
383
|
+
const transport = new StdioServerTransport();
|
|
384
|
+
await server.connect(transport);
|
|
385
|
+
}
|
|
386
|
+
main().catch((err) => {
|
|
387
|
+
console.error("MCP server error:", err);
|
|
388
|
+
process.exit(1);
|
|
389
|
+
});
|
|
390
|
+
//# sourceMappingURL=mcp-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-entry.js","sourceRoot":"","sources":["../../src/core/mcp-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.d.ts","sourceRoot":"","sources":["../../src/core/provider-config.ts"],"names":[],"mappings":"AAsBA,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAsCpE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { execFileSync } from "child_process";
|
|
2
|
+
import { existsSync } from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { getTaskRoleEnv, pickDefinedEnv } from "../utils/runtime-env.js";
|
|
5
|
+
function getMcpCommand() {
|
|
6
|
+
const distEntry = path.resolve(process.cwd(), "dist/core/mcp-entry.js");
|
|
7
|
+
const srcEntry = path.resolve(process.cwd(), "src/core/mcp-entry.ts");
|
|
8
|
+
if (existsSync(distEntry)) {
|
|
9
|
+
return {
|
|
10
|
+
command: "node",
|
|
11
|
+
args: [distEntry],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return {
|
|
15
|
+
command: "npx",
|
|
16
|
+
args: ["tsx", srcEntry],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function ensureCodexMcpConfigured(workspacePath) {
|
|
20
|
+
const { command, args } = getMcpCommand();
|
|
21
|
+
const envVars = {
|
|
22
|
+
CITIO_CONFIG: process.env.CITIO_CONFIG || "citio.yaml",
|
|
23
|
+
CITIO_CONFIG_B64: process.env.CITIO_CONFIG_B64 || "",
|
|
24
|
+
CITIO_WORKSPACE: workspacePath,
|
|
25
|
+
CITIO_MEMORY: process.env.CITIO_MEMORY || "/memory",
|
|
26
|
+
...pickDefinedEnv(["GH_TOKEN"]),
|
|
27
|
+
...getTaskRoleEnv(),
|
|
28
|
+
};
|
|
29
|
+
try {
|
|
30
|
+
execFileSync("codex", ["mcp", "remove", "citio"], {
|
|
31
|
+
cwd: workspacePath,
|
|
32
|
+
encoding: "utf-8",
|
|
33
|
+
stdio: "pipe",
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Fine if it wasn't configured yet.
|
|
38
|
+
}
|
|
39
|
+
execFileSync("codex", [
|
|
40
|
+
"mcp",
|
|
41
|
+
"add",
|
|
42
|
+
"citio",
|
|
43
|
+
...Object.entries(envVars).flatMap(([key, value]) => ["--env", `${key}=${value}`]),
|
|
44
|
+
"--",
|
|
45
|
+
command,
|
|
46
|
+
...args,
|
|
47
|
+
], {
|
|
48
|
+
cwd: workspacePath,
|
|
49
|
+
encoding: "utf-8",
|
|
50
|
+
stdio: "pipe",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=provider-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../src/core/provider-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzE,SAAS,aAAa;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;IAEtE,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC,SAAS,CAAC;SAClB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,aAAqB;IAC5D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG;QACd,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,YAAY;QACtD,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE;QACpD,eAAe,EAAE,aAAa;QAC9B,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS;QACnD,GAAG,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC;QAC/B,GAAG,cAAc,EAAE;KACpB,CAAC;IAEF,IAAI,CAAC;QACH,YAAY,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;YAChD,GAAG,EAAE,aAAa;YAClB,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IAED,YAAY,CACV,OAAO,EACP;QACE,KAAK;QACL,KAAK;QACL,OAAO;QACP,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QAClF,IAAI;QACJ,OAAO;QACP,GAAG,IAAI;KACR,EACD;QACE,GAAG,EAAE,aAAa;QAClB,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,MAAM;KACd,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type ProviderName = "claude" | "codex";
|
|
2
|
+
export declare class SessionManager {
|
|
3
|
+
private readonly provider;
|
|
4
|
+
private readonly runtimeId;
|
|
5
|
+
private readonly storagePath;
|
|
6
|
+
private readonly sessions;
|
|
7
|
+
constructor(provider: ProviderName, memoryPath: string, runtimeId: string);
|
|
8
|
+
get(threadKey: string): string | null;
|
|
9
|
+
remember(threadKey: string, sessionId: string): void;
|
|
10
|
+
private load;
|
|
11
|
+
private persist;
|
|
12
|
+
private isUsableRecord;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=session-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAGA,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAUvC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;gBAEjD,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAOzE,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAyBrC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAapD,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
const GLOBAL_SESSION_KEY = "__provider_session__";
|
|
4
|
+
export class SessionManager {
|
|
5
|
+
provider;
|
|
6
|
+
runtimeId;
|
|
7
|
+
storagePath;
|
|
8
|
+
sessions = new Map();
|
|
9
|
+
constructor(provider, memoryPath, runtimeId) {
|
|
10
|
+
this.provider = provider;
|
|
11
|
+
this.runtimeId = runtimeId;
|
|
12
|
+
this.storagePath = path.join(memoryPath, "sessions.json");
|
|
13
|
+
this.load();
|
|
14
|
+
}
|
|
15
|
+
get(threadKey) {
|
|
16
|
+
const exactRecord = this.sessions.get(threadKey);
|
|
17
|
+
if (this.isUsableRecord(exactRecord)) {
|
|
18
|
+
return exactRecord.sessionId;
|
|
19
|
+
}
|
|
20
|
+
const globalRecord = this.sessions.get(GLOBAL_SESSION_KEY);
|
|
21
|
+
if (this.isUsableRecord(globalRecord)) {
|
|
22
|
+
return globalRecord.sessionId;
|
|
23
|
+
}
|
|
24
|
+
let latestRecord = null;
|
|
25
|
+
for (const [key, record] of this.sessions.entries()) {
|
|
26
|
+
if (key === GLOBAL_SESSION_KEY || !this.isUsableRecord(record)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (!latestRecord || record.updatedAt > latestRecord.updatedAt) {
|
|
30
|
+
latestRecord = record;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return latestRecord?.sessionId || null;
|
|
34
|
+
}
|
|
35
|
+
remember(threadKey, sessionId) {
|
|
36
|
+
const record = {
|
|
37
|
+
provider: this.provider,
|
|
38
|
+
sessionId,
|
|
39
|
+
runtimeId: this.runtimeId,
|
|
40
|
+
updatedAt: new Date().toISOString(),
|
|
41
|
+
};
|
|
42
|
+
this.sessions.set(GLOBAL_SESSION_KEY, record);
|
|
43
|
+
this.sessions.set(threadKey, record);
|
|
44
|
+
this.persist();
|
|
45
|
+
}
|
|
46
|
+
load() {
|
|
47
|
+
if (!existsSync(this.storagePath)) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const raw = JSON.parse(readFileSync(this.storagePath, "utf-8"));
|
|
52
|
+
for (const [threadKey, record] of Object.entries(raw)) {
|
|
53
|
+
if (record?.provider && record.sessionId) {
|
|
54
|
+
this.sessions.set(threadKey, record);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.log(JSON.stringify({
|
|
60
|
+
type: "session_store_load_failed",
|
|
61
|
+
path: this.storagePath,
|
|
62
|
+
error: err instanceof Error ? err.message : String(err),
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
persist() {
|
|
67
|
+
mkdirSync(path.dirname(this.storagePath), { recursive: true });
|
|
68
|
+
const raw = Object.fromEntries(this.sessions.entries());
|
|
69
|
+
writeFileSync(this.storagePath, JSON.stringify(raw, null, 2), "utf-8");
|
|
70
|
+
}
|
|
71
|
+
isUsableRecord(record) {
|
|
72
|
+
return Boolean(record &&
|
|
73
|
+
record.provider === this.provider &&
|
|
74
|
+
record.sessionId &&
|
|
75
|
+
record.runtimeId === this.runtimeId);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface SkillInfo {
|
|
2
|
+
url: string;
|
|
3
|
+
description: string;
|
|
4
|
+
installMethod: "git" | "npx-skills" | "npx";
|
|
5
|
+
}
|
|
6
|
+
export declare const SKILL_REGISTRY: Record<string, SkillInfo>;
|
|
7
|
+
export interface InstallResult {
|
|
8
|
+
skill: string;
|
|
9
|
+
status: "installed" | "already-present" | "failed" | "unknown-skill";
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Install skills into `skillsDir` so the runtime's loadSkills() (which reads
|
|
14
|
+
* `<skillsDir>/<name>/SKILL.md`) actually finds them. Idempotent: skills whose
|
|
15
|
+
* SKILL.md already exists are skipped — safe to run on every container boot.
|
|
16
|
+
*
|
|
17
|
+
* npx-skills entries are installed via `npx skills add` into a temp directory
|
|
18
|
+
* (the skills CLI writes to `./.agents/skills/`) and then copied into place,
|
|
19
|
+
* because the skills CLI's layout is not the layout Citio reads.
|
|
20
|
+
*/
|
|
21
|
+
export declare function installSkillsTo(skillNames: string[], skillsDir: string, options?: {
|
|
22
|
+
ghToken?: string;
|
|
23
|
+
}): InstallResult[];
|
|
24
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/core/skills.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,KAAK,GAAG,YAAY,GAAG,KAAK,CAAC;CAC7C;AAID,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA+BpD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,QAAQ,GAAG,eAAe,CAAC;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,aAAa,EAAE,CA+DjB"}
|