adonis-mcp-docs 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/README.md +209 -0
- package/build/.env +6 -0
- package/build/ace.js +7 -0
- package/build/adonisrc.js +34 -0
- package/build/adonisrc.js.map +1 -0
- package/build/app/exceptions/handler.js +13 -0
- package/build/app/exceptions/handler.js.map +1 -0
- package/build/app/mcp/prompts/explain_feature_prompt.js +73 -0
- package/build/app/mcp/prompts/explain_feature_prompt.js.map +1 -0
- package/build/app/mcp/resources/markdown_resource.js +26 -0
- package/build/app/mcp/resources/markdown_resource.js.map +1 -0
- package/build/app/mcp/tools/extract_code_examples_tool.js +80 -0
- package/build/app/mcp/tools/extract_code_examples_tool.js.map +1 -0
- package/build/app/mcp/tools/list_documentation_tool.js +59 -0
- package/build/app/mcp/tools/list_documentation_tool.js.map +1 -0
- package/build/app/mcp/tools/search_in_docs_tool.js +96 -0
- package/build/app/mcp/tools/search_in_docs_tool.js.map +1 -0
- package/build/app/middleware/container_bindings_middleware.js +10 -0
- package/build/app/middleware/container_bindings_middleware.js.map +1 -0
- package/build/app/middleware/mcp_middleware.js +22 -0
- package/build/app/middleware/mcp_middleware.js.map +1 -0
- package/build/app/services/documentation_service.js +48 -0
- package/build/app/services/documentation_service.js.map +1 -0
- package/build/app/services/resource_completion_service.js +11 -0
- package/build/app/services/resource_completion_service.js.map +1 -0
- package/build/bin/console.js +24 -0
- package/build/bin/console.js.map +1 -0
- package/build/bin/mcp.js +25 -0
- package/build/bin/mcp.js.map +1 -0
- package/build/bin/server.js +24 -0
- package/build/bin/server.js.map +1 -0
- package/build/bin/test.js +38 -0
- package/build/bin/test.js.map +1 -0
- package/build/config/app.js +19 -0
- package/build/config/app.js.map +1 -0
- package/build/config/bodyparser.js +26 -0
- package/build/config/bodyparser.js.map +1 -0
- package/build/config/hash.js +14 -0
- package/build/config/hash.js.map +1 -0
- package/build/config/logger.js +21 -0
- package/build/config/logger.js.map +1 -0
- package/build/config/mcp.js +13 -0
- package/build/config/mcp.js.map +1 -0
- package/build/package-lock.json +6705 -0
- package/build/package.json +90 -0
- package/build/start/env.js +9 -0
- package/build/start/env.js.map +1 -0
- package/build/start/kernel.js +7 -0
- package/build/start/kernel.js.map +1 -0
- package/build/start/routes.js +3 -0
- package/build/start/routes.js.map +1 -0
- package/build/tests/bootstrap.js +15 -0
- package/build/tests/bootstrap.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export default class McpMiddleware {
|
|
2
|
+
async handle(ctx, next) {
|
|
3
|
+
const body = ctx.request.body();
|
|
4
|
+
const method = body.method;
|
|
5
|
+
const contentType = ctx.request.header('Content-Type');
|
|
6
|
+
if (!contentType || !['application/json', 'text/event-stream'].includes(contentType)) {
|
|
7
|
+
return ctx.response.badRequest('Content-Type header must be application/json');
|
|
8
|
+
}
|
|
9
|
+
if (method === 'initialize') {
|
|
10
|
+
ctx.response.safeHeader('MCP-Session-Id', crypto.randomUUID());
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
const sessionId = ctx.request.header('MCP-Session-Id');
|
|
14
|
+
if (!sessionId) {
|
|
15
|
+
return ctx.response.badRequest('MCP-Session-Id header is required');
|
|
16
|
+
}
|
|
17
|
+
ctx.response.safeHeader('MCP-Session-Id', sessionId);
|
|
18
|
+
}
|
|
19
|
+
return next();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mcp_middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp_middleware.js","sourceRoot":"","sources":["../../../app/middleware/mcp_middleware.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,KAAK,CAAC,MAAM,CAAC,GAAgB,EAAE,IAAY;QACzC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAE1B,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;QACtD,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrF,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,8CAA8C,CAAC,CAAA;QAChF,CAAC;QAED,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;QAChE,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YAEtD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAA;YACrE,CAAC;YAED,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAA;QACtD,CAAC;QAED,OAAO,IAAI,EAAE,CAAA;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export class DocumentationService {
|
|
2
|
+
baseUrl = 'https://raw.githubusercontent.com/batosai/adonis-mcp/main/docs';
|
|
3
|
+
async fetchMarkdownFile(name) {
|
|
4
|
+
const url = `${this.baseUrl}/${name}.md`;
|
|
5
|
+
try {
|
|
6
|
+
const response = await fetch(url);
|
|
7
|
+
if (!response.ok) {
|
|
8
|
+
if (response.status === 404) {
|
|
9
|
+
throw new Error(`Markdown file '${name}.md' not found`);
|
|
10
|
+
}
|
|
11
|
+
throw new Error(`Failed to fetch markdown file: ${response.statusText}`);
|
|
12
|
+
}
|
|
13
|
+
const content = await response.text();
|
|
14
|
+
return content;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
if (error instanceof Error) {
|
|
18
|
+
throw new Error(`Error fetching markdown file '${name}': ${error.message}`);
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`Unknown error fetching markdown file '${name}'`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async fileExists(name) {
|
|
24
|
+
const url = `${this.baseUrl}/${name}.md`;
|
|
25
|
+
try {
|
|
26
|
+
const response = await fetch(url, { method: 'HEAD' });
|
|
27
|
+
return response.ok;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async getFileSize(name) {
|
|
34
|
+
const url = `${this.baseUrl}/${name}.md`;
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(url, { method: 'HEAD' });
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const contentLength = response.headers.get('content-length');
|
|
41
|
+
return contentLength ? parseInt(contentLength, 10) : null;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=documentation_service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentation_service.js","sourceRoot":"","sources":["../../../app/services/documentation_service.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;IACd,OAAO,GAAG,gEAAgE,CAAA;IAE3F,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAClC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,CAAA;QAExC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;YAEjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,gBAAgB,CAAC,CAAA;gBACzD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;YAC1E,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACrC,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;YAC7E,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,GAAG,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,CAAA;QAExC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;YACrD,OAAO,QAAQ,CAAC,EAAE,CAAA;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,CAAA;QAExC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;YACrD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAA;YACb,CAAC;YAED,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAC5D,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class ResourceCompletionService {
|
|
2
|
+
names = ['inspector', 'installation', 'introduction', 'prompts', 'resources', 'sessions', 'tools', 'unit-tests'];
|
|
3
|
+
getCompletions(prefix) {
|
|
4
|
+
if (!prefix || prefix.trim() === '') {
|
|
5
|
+
return this.names;
|
|
6
|
+
}
|
|
7
|
+
const normalizedPrefix = prefix.toLowerCase().trim();
|
|
8
|
+
return this.names.filter(name => name.toLowerCase().startsWith(normalizedPrefix));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=resource_completion_service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource_completion_service.js","sourceRoot":"","sources":["../../../app/services/resource_completion_service.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,yBAAyB;IACnB,KAAK,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IAEjI,cAAc,CAAC,MAAe;QAC5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,KAAK,CAAA;QACnB,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAA;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAC9B,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAChD,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Ignitor, prettyPrintError } from '@adonisjs/core';
|
|
3
|
+
const APP_ROOT = new URL('../', import.meta.url);
|
|
4
|
+
const IMPORTER = (filePath) => {
|
|
5
|
+
if (filePath.startsWith('./') || filePath.startsWith('../')) {
|
|
6
|
+
return import(new URL(filePath, APP_ROOT).href);
|
|
7
|
+
}
|
|
8
|
+
return import(filePath);
|
|
9
|
+
};
|
|
10
|
+
new Ignitor(APP_ROOT, { importer: IMPORTER })
|
|
11
|
+
.tap((app) => {
|
|
12
|
+
app.booting(async () => {
|
|
13
|
+
await import('#start/env');
|
|
14
|
+
});
|
|
15
|
+
app.listen('SIGTERM', () => app.terminate());
|
|
16
|
+
app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate());
|
|
17
|
+
})
|
|
18
|
+
.ace()
|
|
19
|
+
.handle(process.argv.splice(2))
|
|
20
|
+
.catch((error) => {
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
prettyPrintError(error);
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../bin/console.ts"],"names":[],"mappings":"AAaA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAM1D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAMhD,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;IACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;KAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACX,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;AACjE,CAAC,CAAC;KACD,GAAG,EAAE;KACL,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC9B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACpB,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
package/build/bin/mcp.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import 'reflect-metadata';
|
|
3
|
+
import { Ignitor, prettyPrintError } from '@adonisjs/core';
|
|
4
|
+
const APP_ROOT = new URL('../', import.meta.url);
|
|
5
|
+
const IMPORTER = (filePath) => {
|
|
6
|
+
if (filePath.startsWith('./') || filePath.startsWith('../')) {
|
|
7
|
+
return import(new URL(filePath, APP_ROOT).href);
|
|
8
|
+
}
|
|
9
|
+
return import(filePath);
|
|
10
|
+
};
|
|
11
|
+
new Ignitor(APP_ROOT, { importer: IMPORTER })
|
|
12
|
+
.tap((app) => {
|
|
13
|
+
app.booting(async () => {
|
|
14
|
+
await import('#start/env');
|
|
15
|
+
});
|
|
16
|
+
app.listen('SIGTERM', () => app.terminate());
|
|
17
|
+
app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate());
|
|
18
|
+
})
|
|
19
|
+
.ace()
|
|
20
|
+
.handle(['mcp:start'])
|
|
21
|
+
.catch((error) => {
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
prettyPrintError(error);
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../bin/mcp.ts"],"names":[],"mappings":";AAEA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAM1D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAMhD,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;IACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;KAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACX,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;AACjE,CAAC,CAAC;KACD,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;KACrB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACpB,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Ignitor, prettyPrintError } from '@adonisjs/core';
|
|
3
|
+
const APP_ROOT = new URL('../', import.meta.url);
|
|
4
|
+
const IMPORTER = (filePath) => {
|
|
5
|
+
if (filePath.startsWith('./') || filePath.startsWith('../')) {
|
|
6
|
+
return import(new URL(filePath, APP_ROOT).href);
|
|
7
|
+
}
|
|
8
|
+
return import(filePath);
|
|
9
|
+
};
|
|
10
|
+
new Ignitor(APP_ROOT, { importer: IMPORTER })
|
|
11
|
+
.tap((app) => {
|
|
12
|
+
app.booting(async () => {
|
|
13
|
+
await import('#start/env');
|
|
14
|
+
});
|
|
15
|
+
app.listen('SIGTERM', () => app.terminate());
|
|
16
|
+
app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate());
|
|
17
|
+
})
|
|
18
|
+
.httpServer()
|
|
19
|
+
.start()
|
|
20
|
+
.catch((error) => {
|
|
21
|
+
process.exitCode = 1;
|
|
22
|
+
prettyPrintError(error);
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../bin/server.ts"],"names":[],"mappings":"AAWA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAM1D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAMhD,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;IACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;KAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACX,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;AACjE,CAAC,CAAC;KACD,UAAU,EAAE;KACZ,KAAK,EAAE;KACP,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACpB,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
process.env.NODE_ENV = 'test';
|
|
2
|
+
import 'reflect-metadata';
|
|
3
|
+
import { Ignitor, prettyPrintError } from '@adonisjs/core';
|
|
4
|
+
import { configure, processCLIArgs, run } from '@japa/runner';
|
|
5
|
+
const APP_ROOT = new URL('../', import.meta.url);
|
|
6
|
+
const IMPORTER = (filePath) => {
|
|
7
|
+
if (filePath.startsWith('./') || filePath.startsWith('../')) {
|
|
8
|
+
return import(new URL(filePath, APP_ROOT).href);
|
|
9
|
+
}
|
|
10
|
+
return import(filePath);
|
|
11
|
+
};
|
|
12
|
+
new Ignitor(APP_ROOT, { importer: IMPORTER })
|
|
13
|
+
.tap((app) => {
|
|
14
|
+
app.booting(async () => {
|
|
15
|
+
await import('#start/env');
|
|
16
|
+
});
|
|
17
|
+
app.listen('SIGTERM', () => app.terminate());
|
|
18
|
+
app.listenIf(app.managedByPm2, 'SIGINT', () => app.terminate());
|
|
19
|
+
})
|
|
20
|
+
.testRunner()
|
|
21
|
+
.configure(async (app) => {
|
|
22
|
+
const { runnerHooks, ...config } = await import('../tests/bootstrap.js');
|
|
23
|
+
processCLIArgs(process.argv.splice(2));
|
|
24
|
+
configure({
|
|
25
|
+
...app.rcFile.tests,
|
|
26
|
+
...config,
|
|
27
|
+
...{
|
|
28
|
+
setup: runnerHooks.setup,
|
|
29
|
+
teardown: runnerHooks.teardown.concat([() => app.terminate()]),
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
})
|
|
33
|
+
.run(() => run())
|
|
34
|
+
.catch((error) => {
|
|
35
|
+
process.exitCode = 1;
|
|
36
|
+
prettyPrintError(error);
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../bin/test.ts"],"names":[],"mappings":"AAYA,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAA;AAE7B,OAAO,kBAAkB,CAAA;AACzB,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAM7D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAMhD,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,EAAE;IACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC,CAAA;AAED,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;KAC1C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACX,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;IAC5C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAA;AACjE,CAAC,CAAC;KACD,UAAU,EAAE;KACZ,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACvB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;IAExE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,SAAS,CAAC;QACR,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK;QACnB,GAAG,MAAM;QACT,GAAG;YACD,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;SAC/D;KACF,CAAC,CAAA;AACJ,CAAC,CAAC;KACD,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;KAChB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACpB,gBAAgB,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import env from '#start/env';
|
|
2
|
+
import app from '@adonisjs/core/services/app';
|
|
3
|
+
import { Secret } from '@adonisjs/core/helpers';
|
|
4
|
+
import { defineConfig } from '@adonisjs/core/http';
|
|
5
|
+
export const appKey = new Secret(env.get('APP_KEY'));
|
|
6
|
+
export const http = defineConfig({
|
|
7
|
+
generateRequestId: true,
|
|
8
|
+
allowMethodSpoofing: false,
|
|
9
|
+
useAsyncLocalStorage: false,
|
|
10
|
+
cookie: {
|
|
11
|
+
domain: '',
|
|
12
|
+
path: '/',
|
|
13
|
+
maxAge: '2h',
|
|
14
|
+
httpOnly: true,
|
|
15
|
+
secure: app.inProduction,
|
|
16
|
+
sameSite: 'lax',
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../config/app.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAA;AAC5B,OAAO,GAAG,MAAM,6BAA6B,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AASlD,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AAKpD,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC;IAC/B,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,KAAK;IAM1B,oBAAoB,EAAE,KAAK;IAM3B,MAAM,EAAE;QACN,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,YAAY;QACxB,QAAQ,EAAE,KAAK;KAChB;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineConfig } from '@adonisjs/core/bodyparser';
|
|
2
|
+
const bodyParserConfig = defineConfig({
|
|
3
|
+
allowedMethods: ['POST', 'PUT', 'PATCH', 'DELETE'],
|
|
4
|
+
form: {
|
|
5
|
+
convertEmptyStringsToNull: true,
|
|
6
|
+
types: ['application/x-www-form-urlencoded'],
|
|
7
|
+
},
|
|
8
|
+
json: {
|
|
9
|
+
convertEmptyStringsToNull: true,
|
|
10
|
+
types: [
|
|
11
|
+
'application/json',
|
|
12
|
+
'application/json-patch+json',
|
|
13
|
+
'application/vnd.api+json',
|
|
14
|
+
'application/csp-report',
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
multipart: {
|
|
18
|
+
autoProcess: true,
|
|
19
|
+
convertEmptyStringsToNull: true,
|
|
20
|
+
processManually: [],
|
|
21
|
+
limit: '20mb',
|
|
22
|
+
types: ['multipart/form-data'],
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
export default bodyParserConfig;
|
|
26
|
+
//# sourceMappingURL=bodyparser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodyparser.js","sourceRoot":"","sources":["../../config/bodyparser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAExD,MAAM,gBAAgB,GAAG,YAAY,CAAC;IAKpC,cAAc,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;IAMlD,IAAI,EAAE;QACJ,yBAAyB,EAAE,IAAI;QAC/B,KAAK,EAAE,CAAC,mCAAmC,CAAC;KAC7C;IAKD,IAAI,EAAE;QACJ,yBAAyB,EAAE,IAAI;QAC/B,KAAK,EAAE;YACL,kBAAkB;YAClB,6BAA6B;YAC7B,0BAA0B;YAC1B,wBAAwB;SACzB;KACF;IAMD,SAAS,EAAE;QAMT,WAAW,EAAE,IAAI;QACjB,yBAAyB,EAAE,IAAI;QAC/B,eAAe,EAAE,EAAE;QAMnB,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,CAAC,qBAAqB,CAAC;KAC/B;CACF,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig, drivers } from '@adonisjs/core/hash';
|
|
2
|
+
const hashConfig = defineConfig({
|
|
3
|
+
default: 'scrypt',
|
|
4
|
+
list: {
|
|
5
|
+
scrypt: drivers.scrypt({
|
|
6
|
+
cost: 16384,
|
|
7
|
+
blockSize: 8,
|
|
8
|
+
parallelization: 1,
|
|
9
|
+
maxMemory: 33554432,
|
|
10
|
+
}),
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
export default hashConfig;
|
|
14
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../config/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,UAAU,GAAG,YAAY,CAAC;IAC9B,OAAO,EAAE,QAAQ;IAEjB,IAAI,EAAE;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,CAAC;YAClB,SAAS,EAAE,QAAQ;SACpB,CAAC;KACH;CACF,CAAC,CAAA;AAEF,eAAe,UAAU,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import env from '#start/env';
|
|
2
|
+
import app from '@adonisjs/core/services/app';
|
|
3
|
+
import { defineConfig, targets } from '@adonisjs/core/logger';
|
|
4
|
+
const loggerConfig = defineConfig({
|
|
5
|
+
default: 'app',
|
|
6
|
+
loggers: {
|
|
7
|
+
app: {
|
|
8
|
+
enabled: true,
|
|
9
|
+
name: env.get('APP_NAME'),
|
|
10
|
+
level: env.get('LOG_LEVEL'),
|
|
11
|
+
transport: {
|
|
12
|
+
targets: targets()
|
|
13
|
+
.pushIf(!app.inProduction, targets.pretty())
|
|
14
|
+
.pushIf(app.inProduction, targets.file({ destination: 1 }))
|
|
15
|
+
.toArray(),
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
export default loggerConfig;
|
|
21
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../config/logger.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAA;AAC5B,OAAO,GAAG,MAAM,6BAA6B,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE7D,MAAM,YAAY,GAAG,YAAY,CAAC;IAChC,OAAO,EAAE,KAAK;IAMd,OAAO,EAAE;QACP,GAAG,EAAE;YACH,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YACzB,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;YAC3B,SAAS,EAAE;gBACT,OAAO,EAAE,OAAO,EAAE;qBACf,MAAM,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;qBAC3C,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;qBAC1D,OAAO,EAAE;aACb;SACF;KACF;CACF,CAAC,CAAA;AAEF,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { defineConfig } from '@jrmc/adonis-mcp';
|
|
2
|
+
import app from '@adonisjs/core/services/app';
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
name: 'adonis-mcp',
|
|
5
|
+
version: '1.0.0',
|
|
6
|
+
completions: true,
|
|
7
|
+
directories: {
|
|
8
|
+
tools: app.makePath('app/mcp/tools'),
|
|
9
|
+
resources: app.makePath('app/mcp/resources'),
|
|
10
|
+
prompts: app.makePath('app/mcp/prompts'),
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../config/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,GAAG,MAAM,6BAA6B,CAAA;AAE7C,eAAe,YAAY,CAAC;IAC1B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE;QACX,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QACpC,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC5C,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACzC;CACF,CAAC,CAAA"}
|