@ai-support-agent/cli 0.0.4-beta.2 → 0.0.4-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-runner.d.ts +1 -0
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +5 -5
- package/dist/agent-runner.js.map +1 -1
- package/dist/api-client.d.ts +8 -2
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +56 -53
- package/dist/api-client.js.map +1 -1
- package/dist/appsync-subscriber.d.ts.map +1 -1
- package/dist/appsync-subscriber.js +8 -2
- package/dist/appsync-subscriber.js.map +1 -1
- package/dist/auth-server.js +1 -1
- package/dist/auth-server.js.map +1 -1
- package/dist/aws-credential-builder.d.ts +24 -0
- package/dist/aws-credential-builder.d.ts.map +1 -0
- package/dist/aws-credential-builder.js +134 -0
- package/dist/aws-credential-builder.js.map +1 -0
- package/dist/aws-profile.d.ts +38 -0
- package/dist/aws-profile.d.ts.map +1 -0
- package/dist/aws-profile.js +162 -0
- package/dist/aws-profile.js.map +1 -0
- package/dist/chat-mode-detector.d.ts.map +1 -1
- package/dist/chat-mode-detector.js +2 -2
- package/dist/chat-mode-detector.js.map +1 -1
- package/dist/commands/api-chat-executor.d.ts.map +1 -1
- package/dist/commands/api-chat-executor.js +51 -18
- package/dist/commands/api-chat-executor.js.map +1 -1
- package/dist/commands/chat-executor.d.ts +3 -2
- package/dist/commands/chat-executor.d.ts.map +1 -1
- package/dist/commands/chat-executor.js +77 -107
- package/dist/commands/chat-executor.js.map +1 -1
- package/dist/commands/claude-code-runner.d.ts +25 -0
- package/dist/commands/claude-code-runner.d.ts.map +1 -0
- package/dist/commands/claude-code-runner.js +129 -0
- package/dist/commands/claude-code-runner.js.map +1 -0
- package/dist/commands/file-executor.js +1 -1
- package/dist/commands/file-executor.js.map +1 -1
- package/dist/commands/index.d.ts +6 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +16 -3
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/process-executor.js +1 -1
- package/dist/commands/process-executor.js.map +1 -1
- package/dist/commands/set-project-dir.d.ts +3 -0
- package/dist/commands/set-project-dir.d.ts.map +1 -0
- package/dist/commands/set-project-dir.js +42 -0
- package/dist/commands/set-project-dir.js.map +1 -0
- package/dist/commands/shared-chat-utils.d.ts +9 -1
- package/dist/commands/shared-chat-utils.d.ts.map +1 -1
- package/dist/commands/shared-chat-utils.js +26 -1
- package/dist/commands/shared-chat-utils.js.map +1 -1
- package/dist/commands/shell-executor.js +1 -1
- package/dist/commands/shell-executor.js.map +1 -1
- package/dist/config-manager.d.ts +9 -0
- package/dist/config-manager.d.ts.map +1 -1
- package/dist/config-manager.js +24 -0
- package/dist/config-manager.js.map +1 -1
- package/dist/constants.d.ts +31 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +39 -2
- package/dist/constants.js.map +1 -1
- package/dist/docker/docker-runner.d.ts +19 -0
- package/dist/docker/docker-runner.d.ts.map +1 -0
- package/dist/docker/docker-runner.js +221 -0
- package/dist/docker/docker-runner.js.map +1 -0
- package/dist/docker/dockerfile-path.d.ts +10 -0
- package/dist/docker/dockerfile-path.d.ts.map +1 -0
- package/dist/docker/dockerfile-path.js +25 -0
- package/dist/docker/dockerfile-path.js.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -1
- package/dist/locales/en.json +25 -1
- package/dist/locales/ja.json +25 -1
- package/dist/locales/locales/en.json +25 -1
- package/dist/locales/locales/ja.json +25 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +8 -1
- package/dist/logger.js.map +1 -1
- package/dist/mcp/config-writer.d.ts +17 -0
- package/dist/mcp/config-writer.d.ts.map +1 -0
- package/dist/mcp/config-writer.js +63 -0
- package/dist/mcp/config-writer.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +55 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/credentials.d.ts +5 -0
- package/dist/mcp/tools/credentials.d.ts.map +1 -0
- package/dist/mcp/tools/credentials.js +33 -0
- package/dist/mcp/tools/credentials.js.map +1 -0
- package/dist/mcp/tools/db-query.d.ts +13 -0
- package/dist/mcp/tools/db-query.d.ts.map +1 -0
- package/dist/mcp/tools/db-query.js +129 -0
- package/dist/mcp/tools/db-query.js.map +1 -0
- package/dist/mcp/tools/db-schemas.d.ts +5 -0
- package/dist/mcp/tools/db-schemas.d.ts.map +1 -0
- package/dist/mcp/tools/db-schemas.js +61 -0
- package/dist/mcp/tools/db-schemas.js.map +1 -0
- package/dist/mcp/tools/mcp-response.d.ts +15 -0
- package/dist/mcp/tools/mcp-response.d.ts.map +1 -0
- package/dist/mcp/tools/mcp-response.js +15 -0
- package/dist/mcp/tools/mcp-response.js.map +1 -0
- package/dist/mcp/tools/project-info.d.ts +5 -0
- package/dist/mcp/tools/project-info.d.ts.map +1 -0
- package/dist/mcp/tools/project-info.js +43 -0
- package/dist/mcp/tools/project-info.js.map +1 -0
- package/dist/project-agent.d.ts +16 -1
- package/dist/project-agent.d.ts.map +1 -1
- package/dist/project-agent.js +174 -72
- package/dist/project-agent.js.map +1 -1
- package/dist/project-config-sync.d.ts +18 -0
- package/dist/project-config-sync.d.ts.map +1 -0
- package/dist/project-config-sync.js +126 -0
- package/dist/project-config-sync.js.map +1 -0
- package/dist/project-dir.d.ts +38 -0
- package/dist/project-dir.d.ts.map +1 -0
- package/dist/project-dir.js +150 -0
- package/dist/project-dir.js.map +1 -0
- package/dist/retry-strategy.d.ts +6 -0
- package/dist/retry-strategy.d.ts.map +1 -1
- package/dist/retry-strategy.js +10 -2
- package/dist/retry-strategy.js.map +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/security.js +2 -1
- package/dist/security.js.map +1 -1
- package/dist/types.d.ts +105 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +6 -0
- package/dist/utils.js.map +1 -1
- package/docker/Dockerfile +39 -0
- package/package.json +6 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.validateSelectOnly = validateSelectOnly;
|
|
37
|
+
exports.executeQuery = executeQuery;
|
|
38
|
+
exports.registerDbQueryTool = registerDbQueryTool;
|
|
39
|
+
const zod_1 = require("zod");
|
|
40
|
+
const mcp_response_1 = require("./mcp-response");
|
|
41
|
+
/** SQL文が SELECT のみかどうか検証する */
|
|
42
|
+
function validateSelectOnly(sql) {
|
|
43
|
+
const trimmed = sql.trim();
|
|
44
|
+
if (!trimmed) {
|
|
45
|
+
return { valid: false, error: 'SQL query is empty' };
|
|
46
|
+
}
|
|
47
|
+
// 禁止キーワードをチェック(大文字小文字無視)
|
|
48
|
+
const forbidden = ['DROP', 'DELETE', 'UPDATE', 'INSERT', 'TRUNCATE', 'ALTER', 'CREATE', 'GRANT', 'REVOKE'];
|
|
49
|
+
const upper = trimmed.toUpperCase();
|
|
50
|
+
for (const keyword of forbidden) {
|
|
51
|
+
// 単語境界でマッチ(前後が非単語文字 or 文字列の先頭/末尾)
|
|
52
|
+
const regex = new RegExp(`(?<![A-Z_])${keyword}(?![A-Z_])`);
|
|
53
|
+
if (regex.test(upper)) {
|
|
54
|
+
return { valid: false, error: `Forbidden SQL operation: ${keyword}` };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// SELECT で始まることを確認(WITH ... SELECT も許可)
|
|
58
|
+
if (!upper.startsWith('SELECT') && !upper.startsWith('WITH') && !upper.startsWith('EXPLAIN')) {
|
|
59
|
+
return { valid: false, error: 'Only SELECT, WITH, and EXPLAIN statements are allowed' };
|
|
60
|
+
}
|
|
61
|
+
return { valid: true };
|
|
62
|
+
}
|
|
63
|
+
/** DB接続を作成してクエリを実行する */
|
|
64
|
+
async function executeQuery(credentials, sql) {
|
|
65
|
+
if (credentials.engine === 'mysql') {
|
|
66
|
+
const mysql2 = await Promise.resolve().then(() => __importStar(require('mysql2/promise')));
|
|
67
|
+
const connection = await mysql2.createConnection({
|
|
68
|
+
host: credentials.host,
|
|
69
|
+
port: credentials.port,
|
|
70
|
+
user: credentials.user,
|
|
71
|
+
password: credentials.password,
|
|
72
|
+
database: credentials.database,
|
|
73
|
+
connectTimeout: 10000,
|
|
74
|
+
});
|
|
75
|
+
try {
|
|
76
|
+
const [rows] = await connection.query(sql);
|
|
77
|
+
return rows;
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
await connection.end();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (credentials.engine === 'postgresql') {
|
|
84
|
+
const { Client } = await Promise.resolve().then(() => __importStar(require('pg')));
|
|
85
|
+
const client = new Client({
|
|
86
|
+
host: credentials.host,
|
|
87
|
+
port: credentials.port,
|
|
88
|
+
user: credentials.user,
|
|
89
|
+
password: credentials.password,
|
|
90
|
+
database: credentials.database,
|
|
91
|
+
connectionTimeoutMillis: 10000,
|
|
92
|
+
ssl: false,
|
|
93
|
+
});
|
|
94
|
+
try {
|
|
95
|
+
await client.connect();
|
|
96
|
+
const result = await client.query(sql);
|
|
97
|
+
return result.rows;
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
await client.end();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
throw new Error(`Unsupported database engine: ${credentials.engine}`);
|
|
104
|
+
}
|
|
105
|
+
/** db_query ツールを MCP サーバーに登録する */
|
|
106
|
+
function registerDbQueryTool(server, apiClient) {
|
|
107
|
+
server.tool('db_query', 'Execute a SELECT query on a project database. Only SELECT/WITH/EXPLAIN statements are allowed.', {
|
|
108
|
+
name: zod_1.z.string().describe('Database connection name (e.g. "MAIN", "READONLY")'),
|
|
109
|
+
sql: zod_1.z.string().describe('SQL query to execute (SELECT only)'),
|
|
110
|
+
}, async ({ name, sql }) => {
|
|
111
|
+
// Validate SQL
|
|
112
|
+
const validation = validateSelectOnly(sql);
|
|
113
|
+
if (!validation.valid) {
|
|
114
|
+
return (0, mcp_response_1.mcpErrorResponse)(validation.error);
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
// Get credentials from API
|
|
118
|
+
const credentials = await apiClient.getDbCredentials(name);
|
|
119
|
+
// Execute query
|
|
120
|
+
const rows = await executeQuery(credentials, sql);
|
|
121
|
+
// Format result
|
|
122
|
+
return (0, mcp_response_1.mcpTextResponse)(JSON.stringify(rows, null, 2));
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
return (0, mcp_response_1.mcpErrorResponse)((0, mcp_response_1.extractErrorMessage)(error));
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=db-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-query.js","sourceRoot":"","sources":["../../../src/mcp/tools/db-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { ApiClient } from '../../api-client';
|
|
3
|
+
/** get_db_schemas ツールを MCP サーバーに登録する */
|
|
4
|
+
export declare function registerDbSchemasTool(server: McpServer, apiClient: ApiClient): void;
|
|
5
|
+
//# sourceMappingURL=db-schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-schemas.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/db-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AA0C5C,wCAAwC;AACxC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAuBnF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerDbSchemasTool = registerDbSchemasTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const db_query_1 = require("./db-query");
|
|
6
|
+
const mcp_response_1 = require("./mcp-response");
|
|
7
|
+
const MYSQL_SCHEMA_QUERY = `
|
|
8
|
+
SELECT
|
|
9
|
+
TABLE_NAME,
|
|
10
|
+
COLUMN_NAME,
|
|
11
|
+
DATA_TYPE,
|
|
12
|
+
IS_NULLABLE,
|
|
13
|
+
COLUMN_KEY,
|
|
14
|
+
COLUMN_DEFAULT,
|
|
15
|
+
EXTRA
|
|
16
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
17
|
+
WHERE TABLE_SCHEMA = DATABASE()
|
|
18
|
+
ORDER BY TABLE_NAME, ORDINAL_POSITION
|
|
19
|
+
`;
|
|
20
|
+
const PG_SCHEMA_QUERY = `
|
|
21
|
+
SELECT
|
|
22
|
+
c.table_name,
|
|
23
|
+
c.column_name,
|
|
24
|
+
c.data_type,
|
|
25
|
+
c.is_nullable,
|
|
26
|
+
CASE
|
|
27
|
+
WHEN tc.constraint_type = 'PRIMARY KEY' THEN 'PRI'
|
|
28
|
+
WHEN tc.constraint_type = 'UNIQUE' THEN 'UNI'
|
|
29
|
+
ELSE ''
|
|
30
|
+
END AS column_key,
|
|
31
|
+
c.column_default
|
|
32
|
+
FROM information_schema.columns c
|
|
33
|
+
LEFT JOIN information_schema.key_column_usage kcu
|
|
34
|
+
ON c.table_name = kcu.table_name
|
|
35
|
+
AND c.column_name = kcu.column_name
|
|
36
|
+
AND c.table_schema = kcu.table_schema
|
|
37
|
+
LEFT JOIN information_schema.table_constraints tc
|
|
38
|
+
ON kcu.constraint_name = tc.constraint_name
|
|
39
|
+
AND kcu.table_schema = tc.table_schema
|
|
40
|
+
WHERE c.table_schema = 'public'
|
|
41
|
+
ORDER BY c.table_name, c.ordinal_position
|
|
42
|
+
`;
|
|
43
|
+
/** get_db_schemas ツールを MCP サーバーに登録する */
|
|
44
|
+
function registerDbSchemasTool(server, apiClient) {
|
|
45
|
+
server.tool('get_db_schemas', 'Get the schema (tables and columns) of a project database.', {
|
|
46
|
+
name: zod_1.z.string().describe('Database connection name (e.g. "MAIN", "READONLY")'),
|
|
47
|
+
}, async ({ name }) => {
|
|
48
|
+
try {
|
|
49
|
+
const credentials = await apiClient.getDbCredentials(name);
|
|
50
|
+
const query = credentials.engine === 'mysql'
|
|
51
|
+
? MYSQL_SCHEMA_QUERY
|
|
52
|
+
: PG_SCHEMA_QUERY;
|
|
53
|
+
const rows = await (0, db_query_1.executeQuery)(credentials, query);
|
|
54
|
+
return (0, mcp_response_1.mcpTextResponse)(JSON.stringify(rows, null, 2));
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return (0, mcp_response_1.mcpErrorResponse)((0, mcp_response_1.extractErrorMessage)(error));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=db-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-schemas.js","sourceRoot":"","sources":["../../../src/mcp/tools/db-schemas.ts"],"names":[],"mappings":";;AA8CA,sDAuBC;AApED,6BAAuB;AAGvB,yCAAyC;AACzC,iDAAuF;AAEvF,MAAM,kBAAkB,GAAG;;;;;;;;;;;;CAY1B,CAAA;AAED,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBvB,CAAA;AAED,wCAAwC;AACxC,SAAgB,qBAAqB,CAAC,MAAiB,EAAE,SAAoB;IAC3E,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,4DAA4D,EAC5D;QACE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;KAChF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAE1D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,KAAK,OAAO;gBAC1C,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,eAAe,CAAA;YAEnB,MAAM,IAAI,GAAG,MAAM,IAAA,uBAAY,EAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAEnD,OAAO,IAAA,8BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,+BAAgB,EAAC,IAAA,kCAAmB,EAAC,KAAK,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function mcpTextResponse(text: string): {
|
|
2
|
+
content: {
|
|
3
|
+
type: "text";
|
|
4
|
+
text: string;
|
|
5
|
+
}[];
|
|
6
|
+
};
|
|
7
|
+
export declare function mcpErrorResponse(message: string): {
|
|
8
|
+
content: {
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError: true;
|
|
13
|
+
};
|
|
14
|
+
export declare function extractErrorMessage(error: unknown): string;
|
|
15
|
+
//# sourceMappingURL=mcp-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-response.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/mcp-response.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM;;;;;EAE3C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;;;EAE/C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mcpTextResponse = mcpTextResponse;
|
|
4
|
+
exports.mcpErrorResponse = mcpErrorResponse;
|
|
5
|
+
exports.extractErrorMessage = extractErrorMessage;
|
|
6
|
+
function mcpTextResponse(text) {
|
|
7
|
+
return { content: [{ type: 'text', text }] };
|
|
8
|
+
}
|
|
9
|
+
function mcpErrorResponse(message) {
|
|
10
|
+
return { content: [{ type: 'text', text: `Error: ${message}` }], isError: true };
|
|
11
|
+
}
|
|
12
|
+
function extractErrorMessage(error) {
|
|
13
|
+
return error instanceof Error ? error.message : String(error);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=mcp-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-response.js","sourceRoot":"","sources":["../../../src/mcp/tools/mcp-response.ts"],"names":[],"mappings":";;AAAA,0CAEC;AAED,4CAEC;AAED,kDAEC;AAVD,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAA;AACvD,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAA;AACpG,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAc;IAChD,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { ApiClient } from '../../api-client';
|
|
3
|
+
/** get_project_info ツールを MCP サーバーに登録する */
|
|
4
|
+
export declare function registerProjectInfoTool(server: McpServer, apiClient: ApiClient, projectCode: string): void;
|
|
5
|
+
//# sourceMappingURL=project-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-info.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/project-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAG5C,0CAA0C;AAC1C,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,GAClB,IAAI,CA8CN"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerProjectInfoTool = registerProjectInfoTool;
|
|
4
|
+
const mcp_response_1 = require("./mcp-response");
|
|
5
|
+
/** get_project_info ツールを MCP サーバーに登録する */
|
|
6
|
+
function registerProjectInfoTool(server, apiClient, projectCode) {
|
|
7
|
+
server.tool('get_project_info', 'Get project configuration information including databases, AWS accounts, and documentation sources.', {}, async () => {
|
|
8
|
+
try {
|
|
9
|
+
const config = await apiClient.getProjectConfig();
|
|
10
|
+
const info = {
|
|
11
|
+
project: config.project,
|
|
12
|
+
};
|
|
13
|
+
if (config.databases?.length) {
|
|
14
|
+
info.databases = config.databases.map((db) => ({
|
|
15
|
+
name: db.name,
|
|
16
|
+
engine: db.engine,
|
|
17
|
+
host: db.host,
|
|
18
|
+
port: db.port,
|
|
19
|
+
database: db.database,
|
|
20
|
+
writePermissions: db.writePermissions,
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
if (config.aws?.accounts?.length) {
|
|
24
|
+
info.awsAccounts = config.aws.accounts.map((acc) => ({
|
|
25
|
+
id: acc.id,
|
|
26
|
+
name: acc.name,
|
|
27
|
+
region: acc.region,
|
|
28
|
+
accountId: acc.accountId,
|
|
29
|
+
isDefault: acc.isDefault,
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
if (config.documentation?.sources?.length) {
|
|
33
|
+
info.documentation = config.documentation;
|
|
34
|
+
}
|
|
35
|
+
info.projectCode = projectCode;
|
|
36
|
+
return (0, mcp_response_1.mcpTextResponse)(JSON.stringify(info, null, 2));
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return (0, mcp_response_1.mcpErrorResponse)((0, mcp_response_1.extractErrorMessage)(error));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=project-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-info.js","sourceRoot":"","sources":["../../../src/mcp/tools/project-info.ts"],"names":[],"mappings":";;AAMA,0DAkDC;AArDD,iDAAuF;AAEvF,0CAA0C;AAC1C,SAAgB,uBAAuB,CACrC,MAAiB,EACjB,SAAoB,EACpB,WAAmB;IAEnB,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,qGAAqG,EACrG,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,gBAAgB,EAAE,CAAA;YAEjD,MAAM,IAAI,GAA4B;gBACpC,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAA;YAED,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;gBAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC7C,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,QAAQ,EAAE,EAAE,CAAC,QAAQ;oBACrB,gBAAgB,EAAE,EAAE,CAAC,gBAAgB;iBACtC,CAAC,CAAC,CAAA;YACL,CAAC;YAED,IAAI,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACnD,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,SAAS,EAAE,GAAG,CAAC,SAAS;iBACzB,CAAC,CAAC,CAAA;YACL,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;YAC3C,CAAC;YAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;YAE9B,OAAO,IAAA,8BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAA,+BAAgB,EAAC,IAAA,kCAAmB,EAAC,KAAK,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
|
package/dist/project-agent.d.ts
CHANGED
|
@@ -18,7 +18,15 @@ export declare class ProjectAgent {
|
|
|
18
18
|
private availableChatModes;
|
|
19
19
|
private activeChatMode;
|
|
20
20
|
private readonly localAgentChatMode;
|
|
21
|
-
|
|
21
|
+
private readonly projectDir;
|
|
22
|
+
private currentConfigHash;
|
|
23
|
+
private configSyncDebounceTimer;
|
|
24
|
+
private projectConfig;
|
|
25
|
+
private mcpConfigPath;
|
|
26
|
+
private readonly apiUrl;
|
|
27
|
+
private readonly token;
|
|
28
|
+
private readonly projectCode;
|
|
29
|
+
constructor(project: ProjectRegistration, agentId: string, options: ProjectAgentOptions, tenantCode?: string, localAgentChatMode?: AgentChatMode, defaultProjectDir?: string);
|
|
22
30
|
start(): void;
|
|
23
31
|
stop(): void;
|
|
24
32
|
getClient(): ApiClient;
|
|
@@ -27,6 +35,13 @@ export declare class ProjectAgent {
|
|
|
27
35
|
private startPollingMode;
|
|
28
36
|
private startHeartbeat;
|
|
29
37
|
private handleNotification;
|
|
38
|
+
private handleConfigUpdate;
|
|
39
|
+
private scheduleConfigSync;
|
|
40
|
+
performConfigSync(): Promise<void>;
|
|
41
|
+
performSetup(): Promise<void>;
|
|
42
|
+
private applyProjectConfig;
|
|
43
|
+
private processCommand;
|
|
44
|
+
private refreshChatMode;
|
|
30
45
|
private checkPendingCommands;
|
|
31
46
|
}
|
|
32
47
|
//# sourceMappingURL=project-agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-agent.d.ts","sourceRoot":"","sources":["../src/project-agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"project-agent.d.ts","sourceRoot":"","sources":["../src/project-agent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAYxC,OAAO,KAAK,EAAE,aAAa,EAA4C,mBAAmB,EAAoB,MAAM,SAAS,CAAA;AAG7H,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,qBAAa,YAAY;IAuBrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAvB1B,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,uBAAuB,CAA6C;IAC5E,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAGlC,OAAO,EAAE,mBAAmB,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,EAC7C,UAAU,CAAC,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,aAAa,EAClC,iBAAiB,CAAC,EAAE,MAAM;IAa5B,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI;IAOZ,SAAS,IAAI,SAAS;YAIR,gBAAgB;YA8ChB,qBAAqB;IAuBnC,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,cAAc;YAoCR,kBAAkB;YA2BlB,kBAAkB;IAQhC,OAAO,CAAC,kBAAkB;IASpB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAenC,OAAO,CAAC,kBAAkB;YAoDZ,cAAc;YAwCd,eAAe;YA8Bf,oBAAoB;CAkBnC"}
|