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.
Files changed (54) hide show
  1. package/README.md +209 -0
  2. package/build/.env +6 -0
  3. package/build/ace.js +7 -0
  4. package/build/adonisrc.js +34 -0
  5. package/build/adonisrc.js.map +1 -0
  6. package/build/app/exceptions/handler.js +13 -0
  7. package/build/app/exceptions/handler.js.map +1 -0
  8. package/build/app/mcp/prompts/explain_feature_prompt.js +73 -0
  9. package/build/app/mcp/prompts/explain_feature_prompt.js.map +1 -0
  10. package/build/app/mcp/resources/markdown_resource.js +26 -0
  11. package/build/app/mcp/resources/markdown_resource.js.map +1 -0
  12. package/build/app/mcp/tools/extract_code_examples_tool.js +80 -0
  13. package/build/app/mcp/tools/extract_code_examples_tool.js.map +1 -0
  14. package/build/app/mcp/tools/list_documentation_tool.js +59 -0
  15. package/build/app/mcp/tools/list_documentation_tool.js.map +1 -0
  16. package/build/app/mcp/tools/search_in_docs_tool.js +96 -0
  17. package/build/app/mcp/tools/search_in_docs_tool.js.map +1 -0
  18. package/build/app/middleware/container_bindings_middleware.js +10 -0
  19. package/build/app/middleware/container_bindings_middleware.js.map +1 -0
  20. package/build/app/middleware/mcp_middleware.js +22 -0
  21. package/build/app/middleware/mcp_middleware.js.map +1 -0
  22. package/build/app/services/documentation_service.js +48 -0
  23. package/build/app/services/documentation_service.js.map +1 -0
  24. package/build/app/services/resource_completion_service.js +11 -0
  25. package/build/app/services/resource_completion_service.js.map +1 -0
  26. package/build/bin/console.js +24 -0
  27. package/build/bin/console.js.map +1 -0
  28. package/build/bin/mcp.js +25 -0
  29. package/build/bin/mcp.js.map +1 -0
  30. package/build/bin/server.js +24 -0
  31. package/build/bin/server.js.map +1 -0
  32. package/build/bin/test.js +38 -0
  33. package/build/bin/test.js.map +1 -0
  34. package/build/config/app.js +19 -0
  35. package/build/config/app.js.map +1 -0
  36. package/build/config/bodyparser.js +26 -0
  37. package/build/config/bodyparser.js.map +1 -0
  38. package/build/config/hash.js +14 -0
  39. package/build/config/hash.js.map +1 -0
  40. package/build/config/logger.js +21 -0
  41. package/build/config/logger.js.map +1 -0
  42. package/build/config/mcp.js +13 -0
  43. package/build/config/mcp.js.map +1 -0
  44. package/build/package-lock.json +6705 -0
  45. package/build/package.json +90 -0
  46. package/build/start/env.js +9 -0
  47. package/build/start/env.js.map +1 -0
  48. package/build/start/kernel.js +7 -0
  49. package/build/start/kernel.js.map +1 -0
  50. package/build/start/routes.js +3 -0
  51. package/build/start/routes.js.map +1 -0
  52. package/build/tests/bootstrap.js +15 -0
  53. package/build/tests/bootstrap.js.map +1 -0
  54. 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"}
@@ -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"}