docit-ai 1.0.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 (81) hide show
  1. package/.env.example +1 -0
  2. package/INSTRUCTIONS.MD +70 -0
  3. package/dist/ai/engine.d.ts +24 -0
  4. package/dist/ai/engine.d.ts.map +1 -0
  5. package/dist/ai/engine.js +69 -0
  6. package/dist/ai/engine.js.map +1 -0
  7. package/dist/ai/prompts.d.ts +11 -0
  8. package/dist/ai/prompts.d.ts.map +1 -0
  9. package/dist/ai/prompts.js +116 -0
  10. package/dist/ai/prompts.js.map +1 -0
  11. package/dist/cli/index.d.ts +3 -0
  12. package/dist/cli/index.d.ts.map +1 -0
  13. package/dist/cli/index.js +384 -0
  14. package/dist/cli/index.js.map +1 -0
  15. package/dist/formatter/index.d.ts +13 -0
  16. package/dist/formatter/index.d.ts.map +1 -0
  17. package/dist/formatter/index.js +76 -0
  18. package/dist/formatter/index.js.map +1 -0
  19. package/dist/index.d.ts +7 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/parser/extractor.d.ts +23 -0
  24. package/dist/parser/extractor.d.ts.map +1 -0
  25. package/dist/parser/extractor.js +148 -0
  26. package/dist/parser/extractor.js.map +1 -0
  27. package/dist/scanner/index.d.ts +11 -0
  28. package/dist/scanner/index.d.ts.map +1 -0
  29. package/dist/scanner/index.js +30 -0
  30. package/dist/scanner/index.js.map +1 -0
  31. package/package.json +31 -0
  32. package/server/.env.example +22 -0
  33. package/server/package-lock.json +4426 -0
  34. package/server/package.json +31 -0
  35. package/server/src/config/database.d.ts +18 -0
  36. package/server/src/config/database.d.ts.map +1 -0
  37. package/server/src/config/database.js +8 -0
  38. package/server/src/config/database.js.map +1 -0
  39. package/server/src/config/database.ts +31 -0
  40. package/server/src/index.d.ts +2 -0
  41. package/server/src/index.d.ts.map +1 -0
  42. package/server/src/index.js +33 -0
  43. package/server/src/index.js.map +1 -0
  44. package/server/src/index.ts +55 -0
  45. package/server/src/middleware/auth.d.ts +12 -0
  46. package/server/src/middleware/auth.d.ts.map +1 -0
  47. package/server/src/middleware/auth.js +35 -0
  48. package/server/src/middleware/auth.js.map +1 -0
  49. package/server/src/middleware/auth.ts +56 -0
  50. package/server/src/routes/auth.d.ts +3 -0
  51. package/server/src/routes/auth.d.ts.map +1 -0
  52. package/server/src/routes/auth.js +145 -0
  53. package/server/src/routes/auth.js.map +1 -0
  54. package/server/src/routes/auth.ts +185 -0
  55. package/server/src/routes/dashboard.ts +243 -0
  56. package/server/src/routes/generate.d.ts +3 -0
  57. package/server/src/routes/generate.d.ts.map +1 -0
  58. package/server/src/routes/generate.js +55 -0
  59. package/server/src/routes/generate.js.map +1 -0
  60. package/server/src/routes/generate.ts +75 -0
  61. package/server/src/routes/payment.ts +192 -0
  62. package/server/src/services/ai.d.ts +10 -0
  63. package/server/src/services/ai.d.ts.map +1 -0
  64. package/server/src/services/ai.js +75 -0
  65. package/server/src/services/ai.js.map +1 -0
  66. package/server/src/services/ai.ts +99 -0
  67. package/server/src/services/payment.ts +141 -0
  68. package/server/src/types/flutterwave.d.ts +60 -0
  69. package/server/supabase_payments.sql +35 -0
  70. package/server/supabase_schema.sql +90 -0
  71. package/server/tsconfig.json +17 -0
  72. package/server/vercel.json +15 -0
  73. package/server/verify_dashboard.ts +126 -0
  74. package/src/ai/engine.ts +103 -0
  75. package/src/ai/prompts.ts +123 -0
  76. package/src/cli/index.ts +552 -0
  77. package/src/formatter/index.ts +110 -0
  78. package/src/index.ts +11 -0
  79. package/src/parser/extractor.ts +211 -0
  80. package/src/scanner/index.ts +49 -0
  81. package/tsconfig.json +43 -0
@@ -0,0 +1,148 @@
1
+ import Parser from "tree-sitter";
2
+ import TypeScript from "tree-sitter-typescript";
3
+ import * as fs from "fs";
4
+ const parser = new Parser();
5
+ parser.setLanguage(TypeScript.typescript);
6
+ function extractComments(node, sourceCode) {
7
+ // Look for preceding comments
8
+ let sibling = node.previousNamedSibling;
9
+ while (sibling && sibling.type === "comment") {
10
+ const commentText = sourceCode.slice(sibling.startIndex, sibling.endIndex);
11
+ return commentText
12
+ .replace(/^\/\*\*?|\*\/$/g, "")
13
+ .replace(/^\s*\* ?/gm, "")
14
+ .trim();
15
+ }
16
+ return undefined;
17
+ }
18
+ function extractTodos(sourceCode) {
19
+ const todoPattern = /\/\/\s*TODO[:\s](.+)|\/\*\s*TODO[:\s](.+?)\*\//gi;
20
+ const todos = [];
21
+ let match;
22
+ while ((match = todoPattern.exec(sourceCode)) !== null) {
23
+ todos.push((match[1] ?? match[2] ?? "").trim());
24
+ }
25
+ return todos;
26
+ }
27
+ function getNodeText(node, sourceCode) {
28
+ if (!node)
29
+ return "";
30
+ return sourceCode.slice(node.startIndex, node.endIndex);
31
+ }
32
+ function extractFunctionSkeleton(node, sourceCode) {
33
+ const nameNode = node.childForFieldName("name");
34
+ const paramsNode = node.childForFieldName("parameters");
35
+ const returnTypeNode = node.childForFieldName("return_type");
36
+ const parameters = paramsNode
37
+ ? getNodeText(paramsNode, sourceCode)
38
+ .replace(/^\(|\)$/g, "")
39
+ .split(",")
40
+ .map((p) => p.trim())
41
+ .filter((p) => p.length > 0)
42
+ : [];
43
+ return {
44
+ name: nameNode ? getNodeText(nameNode, sourceCode) : "anonymous",
45
+ kind: "function",
46
+ signature: `function ${getNodeText(nameNode, sourceCode)}${getNodeText(paramsNode, sourceCode)}${returnTypeNode ? ": " + getNodeText(returnTypeNode, sourceCode).replace(/^:\s*/, "") : ""}`,
47
+ parameters,
48
+ returnType: returnTypeNode
49
+ ? getNodeText(returnTypeNode, sourceCode).replace(/^:\s*/, "")
50
+ : undefined,
51
+ comments: extractComments(node, sourceCode),
52
+ startLine: node.startPosition.row + 1,
53
+ endLine: node.endPosition.row + 1,
54
+ };
55
+ }
56
+ function extractClassSkeleton(node, sourceCode) {
57
+ const nameNode = node.childForFieldName("name");
58
+ return {
59
+ name: nameNode ? getNodeText(nameNode, sourceCode) : "AnonymousClass",
60
+ kind: "class",
61
+ signature: `class ${getNodeText(nameNode, sourceCode)}`,
62
+ comments: extractComments(node, sourceCode),
63
+ startLine: node.startPosition.row + 1,
64
+ endLine: node.endPosition.row + 1,
65
+ };
66
+ }
67
+ function extractInterfaceSkeleton(node, sourceCode) {
68
+ const nameNode = node.childForFieldName("name");
69
+ return {
70
+ name: nameNode ? getNodeText(nameNode, sourceCode) : "AnonymousInterface",
71
+ kind: "interface",
72
+ signature: `interface ${getNodeText(nameNode, sourceCode)}`,
73
+ comments: extractComments(node, sourceCode),
74
+ startLine: node.startPosition.row + 1,
75
+ endLine: node.endPosition.row + 1,
76
+ };
77
+ }
78
+ function extractTypeSkeleton(node, sourceCode) {
79
+ const nameNode = node.childForFieldName("name");
80
+ return {
81
+ name: nameNode ? getNodeText(nameNode, sourceCode) : "AnonymousType",
82
+ kind: "type",
83
+ signature: `type ${getNodeText(nameNode, sourceCode)}`,
84
+ comments: extractComments(node, sourceCode),
85
+ startLine: node.startPosition.row + 1,
86
+ endLine: node.endPosition.row + 1,
87
+ };
88
+ }
89
+ export function extractSkeletons(sourceCode) {
90
+ const tree = parser.parse(sourceCode);
91
+ const skeletons = [];
92
+ function traverse(node) {
93
+ switch (node.type) {
94
+ case "function_declaration":
95
+ case "arrow_function":
96
+ case "method_definition":
97
+ skeletons.push(extractFunctionSkeleton(node, sourceCode));
98
+ break;
99
+ case "class_declaration":
100
+ skeletons.push(extractClassSkeleton(node, sourceCode));
101
+ break;
102
+ case "interface_declaration":
103
+ skeletons.push(extractInterfaceSkeleton(node, sourceCode));
104
+ break;
105
+ case "type_alias_declaration":
106
+ skeletons.push(extractTypeSkeleton(node, sourceCode));
107
+ break;
108
+ case "export_statement":
109
+ // Handle exported declarations
110
+ for (const child of node.children) {
111
+ traverse(child);
112
+ }
113
+ return; // Don't traverse children again
114
+ }
115
+ for (const child of node.children) {
116
+ traverse(child);
117
+ }
118
+ }
119
+ traverse(tree.rootNode);
120
+ return skeletons;
121
+ }
122
+ export function analyzeFile(filePath) {
123
+ const sourceCode = fs.readFileSync(filePath, "utf-8");
124
+ return {
125
+ filePath,
126
+ skeletons: extractSkeletons(sourceCode),
127
+ todos: extractTodos(sourceCode),
128
+ };
129
+ }
130
+ export function formatSkeletonForLLM(analysis) {
131
+ const lines = [`File: ${analysis.filePath}`, "---"];
132
+ for (const skeleton of analysis.skeletons) {
133
+ lines.push(`[${skeleton.kind.toUpperCase()}] ${skeleton.signature}`);
134
+ if (skeleton.comments) {
135
+ lines.push(` Comment: ${skeleton.comments}`);
136
+ }
137
+ lines.push(` Lines: ${skeleton.startLine}-${skeleton.endLine}`);
138
+ lines.push("");
139
+ }
140
+ if (analysis.todos.length > 0) {
141
+ lines.push("TODOs:");
142
+ for (const todo of analysis.todos) {
143
+ lines.push(` - ${todo}`);
144
+ }
145
+ }
146
+ return lines.join("\n");
147
+ }
148
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/parser/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Scanner Module
3
+ * Uses simple-git to identify files modified in the last commit.
4
+ */
5
+ export interface ChangedFile {
6
+ path: string;
7
+ status: string;
8
+ }
9
+ export declare function getChangedFiles(repoPath?: string): Promise<ChangedFile[]>;
10
+ export declare function getModifiedTypeScriptFiles(repoPath?: string): Promise<string[]>;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,eAAe,CACnC,QAAQ,GAAE,MAAY,GACrB,OAAO,CAAC,WAAW,EAAE,CAAC,CAuBxB;AAED,wBAAsB,0BAA0B,CAC9C,QAAQ,GAAE,MAAY,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB"}
@@ -0,0 +1,30 @@
1
+ import { simpleGit } from "simple-git";
2
+ import * as path from "path";
3
+ export async function getChangedFiles(repoPath = ".") {
4
+ const git = simpleGit(repoPath);
5
+ try {
6
+ // Get the diff of the last commit
7
+ const diffSummary = await git.diffSummary(["HEAD~1", "HEAD"]);
8
+ const changedFiles = diffSummary.files.map((file) => ({
9
+ path: path.resolve(repoPath, file.file),
10
+ status: "binary" in file ? "binary" : "modified",
11
+ }));
12
+ return changedFiles;
13
+ }
14
+ catch {
15
+ // If there's no previous commit, get all tracked files
16
+ const status = await git.status();
17
+ const allFiles = [...status.modified, ...status.created, ...status.staged];
18
+ return [...new Set(allFiles)].map((filePath) => ({
19
+ path: path.resolve(repoPath, filePath),
20
+ status: "new",
21
+ }));
22
+ }
23
+ }
24
+ export async function getModifiedTypeScriptFiles(repoPath = ".") {
25
+ const changedFiles = await getChangedFiles(repoPath);
26
+ return changedFiles
27
+ .filter((file) => file.path.endsWith(".ts") || file.path.endsWith(".tsx"))
28
+ .map((file) => file.path);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAY7B,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,GAAG;IAEtB,MAAM,GAAG,GAAc,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAE9D,MAAM,YAAY,GAAkB,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC;YACvC,MAAM,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;SACjD,CAAC,CAAC,CAAC;QAEJ,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;QACvD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAE3E,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC/C,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACtC,MAAM,EAAE,KAAK;SACd,CAAC,CAAC,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAmB,GAAG;IAEtB,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAErD,OAAO,YAAY;SAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACzE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "docit-ai",
3
+ "version": "1.0.0",
4
+ "description": "AI-powered documentation generator",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "docit": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/index.js",
12
+ "test": "echo \"Error: no test specified\" && exit 1"
13
+ },
14
+ "keywords": [],
15
+ "author": "",
16
+ "license": "ISC",
17
+ "type": "module",
18
+ "devDependencies": {
19
+ "@types/node": "^25.1.0",
20
+ "ts-node": "^10.9.2",
21
+ "typescript": "^5.9.3"
22
+ },
23
+ "dependencies": {
24
+ "@google/genai": "^1.38.0",
25
+ "commander": "^14.0.2",
26
+ "dotenv": "^17.2.3",
27
+ "simple-git": "^3.30.0",
28
+ "tree-sitter": "^0.21.1",
29
+ "tree-sitter-typescript": "^0.23.2"
30
+ }
31
+ }
@@ -0,0 +1,22 @@
1
+ # Server Environment
2
+ PORT=3001
3
+ NODE_ENV=development
4
+
5
+ # Supabase
6
+ SUPABASE_URL=your_supabase_url
7
+ SUPABASE_ANON_KEY=your_supabase_anon_key
8
+ SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
9
+
10
+ # JWT
11
+ JWT_SECRET=your_jwt_secret_here
12
+
13
+ # Gemini
14
+ GEMINI_API_KEY=your_gemini_api_key
15
+
16
+ # Flutterwave (for future payment integration)
17
+ FLUTTERWAVE_PUBLIC_KEY=your_public_key
18
+ FLUTTERWAVE_SECRET_KEY=your_secret_key
19
+
20
+ # Credits
21
+ FREE_CREDITS_ON_SIGNUP=10
22
+ CREDITS_PER_FILE=1