From b55af1fdcd8bc0f46478a0e5fe4143f6cdf1a8bf Mon Sep 17 00:00:00 2001 From: Gantavya Date: Wed, 6 Aug 2025 22:47:24 +0530 Subject: [PATCH 1/5] init --- devDocs.egg-info/PKG-INFO | 2 +- devDocs/cli.py | 181 +++++++++++++++------------- dist/devdocs-1.0.3-py3-none-any.whl | Bin 7618 -> 0 bytes dist/devdocs-1.0.3.tar.gz | Bin 7637 -> 0 bytes dist/devdocs-2.0.3-py3-none-any.whl | Bin 0 -> 7666 bytes dist/devdocs-2.0.3.tar.gz | Bin 0 -> 7681 bytes pyproject.toml | 2 +- secret | 2 +- setup.py | 2 +- 9 files changed, 98 insertions(+), 91 deletions(-) delete mode 100644 dist/devdocs-1.0.3-py3-none-any.whl delete mode 100644 dist/devdocs-1.0.3.tar.gz create mode 100644 dist/devdocs-2.0.3-py3-none-any.whl create mode 100644 dist/devdocs-2.0.3.tar.gz diff --git a/devDocs.egg-info/PKG-INFO b/devDocs.egg-info/PKG-INFO index f15f120..34b3ee3 100644 --- a/devDocs.egg-info/PKG-INFO +++ b/devDocs.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: devDocs -Version: 1.0.3 +Version: 2.0.3 Summary: AI-powered CLI tool that builds professional '*.md' documentation files of a project for internal teams using the Google Gemini API. Author: Gantavya Bansal Author-email: Gantavya Bansal diff --git a/devDocs/cli.py b/devDocs/cli.py index d66c622..89853fa 100644 --- a/devDocs/cli.py +++ b/devDocs/cli.py @@ -1,112 +1,119 @@ -i='docs' -V='utf-8' -U='README' -T=any -S=open -C='.md' -M='.' +k='docs' +Y='utf-8' +X='README' +W=any +V=open +Q='.md' +N='.' G=str F=print -E=Exception -A='' -from logging import basicConfig as j,info as H,WARNING as W,INFO,getLogger as X,exception as D -from os import listdir as k,getcwd as J,chdir as O,scandir as l,curdir as m,makedirs as P -from os.path import isdir as N,join as B,splitext as n,exists as Y,getsize as o,dirname as Z,abspath as a -from google.genai import Client as p -from google.genai.types import GenerateContentConfig as q -from argparse import ArgumentParser as r +B='' +A=Exception +from logging import basicConfig as l,info as H,WARNING as Z,INFO,getLogger as a,exception as E +from os import listdir as m,getcwd as J,chdir as R,scandir as n,curdir as o,makedirs as S +from os.path import isdir as O,join as C,splitext as p,exists as b,getsize as q,dirname as c,abspath as d +from google.genai import Client as r +from google.genai.types import GenerateContentConfig as D +from argparse import ArgumentParser as s from time import sleep -j(level=INFO) -X('google_genai').setLevel(W) -X('httpx').setLevel(W) -def s(file,code,readme): - A=file - try:sleep(1);B=f.models.generate_content(model='gemini-2.0-flash-lite',config=q(system_instruction='\nYou are Gantavya Bansal, a senior software engineer and expert technical writer. Your task is to generate clean, professional, and well-structured `README.md` documentation in Markdown format. Use the provided filename, source code, and any existing README or folder structure as context.\n\nYour output must be:\n\n- Concise and easy to follow\n- Focused on technical clarity and usability\n- Markdown-only (no extra commentary, no code fences)\n\nYour output must include:\n\n1. **Project Title** – Inferred from the filename or main script\n2. **Folder Structure** – Tree view if available, with clickable index links\n3. **Description** – What the project does and its purpose\n4. **How to Use** – Installation steps, CLI/API usage examples\n5. **Technologies Used** – Languages, tools, libraries\n6. **Architecture or Code Overview** – Key components, flow, functions, or classes\n7. **Known Issues / Improvements** – Current limitations, TODOs\n8. **Additional Notes or References** – Licensing, credits, related tools\n\nOnly return the final `README.md` content. Do not include any explanations, prefixes, or suffixes.\n\n '),contents=[f"Filename: {A}",f"Code:\n{code}",f"Existing README (if any):\n{readme}"]);return B.text.removeprefix('```markdown').removesuffix('```').strip() - except E as C:D(f"Error generating README for {A}: {C}");return f"# {A}\n\n⚠️ Failed to generate documentation GEMINI SERVER ERROR." -def b(start_path=M,prefix=A): - L=prefix;C=start_path +l(level=INFO) +a('google_genai').setLevel(Z) +a('httpx').setLevel(Z) +P='\nYou are Gantavya Bansal, a senior software engineer and expert technical writer. Your task is to generate clean, professional, and well-structured `README.md` documentation in Markdown format. Use the provided filename, source code, and any existing README or folder structure as context.\n\nYour output must be:\n\n- Concise and easy to follow\n- Focused on technical clarity and usability\n- Markdown-only (no extra commentary, no code fences)\n\nYour output must include:\n\n1. **Project Title** – Inferred from the filename or main script\n2. **Folder Structure** – Tree view if available, with clickable index links\n3. **Description** – What the project does and its purpose\n4. **How to Use** – Installation steps, CLI/API usage examples\n5. **Technologies Used** – Languages, tools, libraries\n6. **Architecture or Code Overview** – Key components, flow, functions, or classes\n7. **Known Issues / Improvements** – Current limitations, TODOs\n8. **Additional Notes or References** – Licensing, credits, related tools\n\nOnly return the final `README.md` content. Do not include any explanations, prefixes, or suffixes.\n\n ' +def t(file,code,readme): + J='```';I='```markdown';G=readme;F=code;C=file + try:B=M.models.generate_content(model='gemini-2.0-flash-lite',config=D(system_instruction=P),contents=[f"Filename: {C}",f"Code:\n{F}",f"Existing README (if any):\n{G}"]);return B.text.removeprefix(I).removesuffix(J).strip() + except A as H: + try:B=M.models.generate_content(model='gemini-2.0-flash',config=D(system_instruction=P),contents=[f"Filename: {C}",f"Code:\n{F}",f"Existing README (if any):\n{G}"]);return B.text.removeprefix(I).removesuffix(J).strip() + except A as H: + try:B=M.models.generate_content(model='gemini-2.5-flash-lite',config=D(system_instruction=P),contents=[f"Filename: {C}",f"Code:\n{F}",f"Existing README (if any):\n{G}"]);return B.text.removeprefix(I).removesuffix(J).strip() + except A as H: + try:B=M.models.generate_content(model='gemini-2.5-flash',config=D(system_instruction=P),contents=[f"Filename: {C}",f"Code:\n{F}",f"Existing README (if any):\n{G}"]);return B.text.removeprefix(I).removesuffix(J).strip() + except A as H:E(f"Error generating README for {C}: {H}");return f"# {C}\n\n⚠️ Failed to generate documentation GEMINI SERVER ERROR." +def e(start_path=N,prefix=B): + L=prefix;D=start_path try: - I=A;J=[];F=[] - if not N(C): - if N(Z(a(C))):C=Z(a(C)) - else:return A - with l(C)as G: + I=B;J=[];F=[] + if not O(D): + if O(c(d(D))):D=c(d(D)) + else:return B + with n(D)as G: for H in G: - if e(H.name): + if h(H.name): if H.is_dir():F.append(H.name) else:J.append(H.name) F.sort();J.sort();G=F+J - for(O,K)in enumerate(G): - P=B(C,K);M=O==len(G)-1;Q='└── 'if M else'├── ';I+=L+Q+K+'\n' - if K in F:R=' 'if M else'│ ';I+=b(P,L+R) + for(N,K)in enumerate(G): + P=C(D,K);M=N==len(G)-1;Q='└── 'if M else'├── ';I+=L+Q+K+'\n' + if K in F:R=' 'if M else'│ ';I+=e(P,L+R) return I - except E as S:D(f"Error generating Tree for {C} dir: {S}");return f"# {C}\n\n⚠️ Failed to generate documentation tree." -def t(base,folders,files): - I=files;G=folders;C=base + except A as S:E(f"Error generating Tree for {D} dir: {S}");return f"# {D}\n\n⚠️ Failed to generate documentation tree." +def u(base,folders,files): + I=files;G=folders;D=base try: - F=K(C);F+=f"\n {b(start_path=C)} \n" + F=K(D);F+=f"\n {e(start_path=D)} \n" if G: - for L in G:O=B(J(),L);F+=f"\n readme for folder:{L} \n content inside: \n {K(O)} \n" + for L in G:O=C(J(),L);F+=f"\n readme for folder:{L} \n content inside: \n {K(O)} \n" if I: - for N in I:F+=f"\n readme for file:{N} \n content inside: {K(N)} \n" - c(U if C==M else C,F,K(U if C==M else C));H(A) - except E as P:D(f"Error generating README for {C}: {P}") + for M in I:F+=f"\n readme for file:{M} \n content inside: {K(M)} \n" + f(X if D==N else D,F,K(X if D==N else D));H(B) + except A as P:E(f"Error generating README for {D}: {P}") def K(file): - B=file + C=file try: - if Y(B+C): - with S(B+C,'r',encoding=V)as F:return F.read() - else:return A - except E as G:D(f"Error reading README for {B}: {G}");return f"# {B}\n\n⚠️ Failed to read {B}.md" -def u(file): - A=file + if b(C+Q): + with V(C+Q,'r',encoding=Y)as D:return D.read() + else:return B + except A as F:E(f"Error reading README for {C}: {F}");return f"# {C}\n\n⚠️ Failed to read {C}.md" +def v(file): + B=file try: - with S(A,'r',encoding=V)as B:return B.read() - except E as C:D(f"Error reading code in {A}: {C}");return f"# {A}\n\n⚠️ Failed to read {A}" -def c(file,code,readme): - O='README.md';K=readme;G=file + with V(B,'r',encoding=Y)as C:return C.read() + except A as D:E(f"Error reading code in {B}: {D}");return f"# {B}\n\n⚠️ Failed to read {B}" +def f(file,code,readme): + N='README.md';G=readme;D=file try: - Q=J().replace(R,A).lstrip('\\/').replace('\\','/');L=B(R,I,Q);P(L,exist_ok=True);M=n(G)[0]+C - if U in M.upper(): - if not h:H('skipping overwriting README');N=B(L,O) - else:N=B(O) - else:N=B(L,M) - K=g+K - with S(N,'w',encoding=V)as T:T.write(s(G,code,K)) - F(f"Written to: {M}") - except E as W:D(f"Error writing README for {G}: {W}") -L=['cache','node','module','pkg','package','@','$','#','&','util','hook','component','python','compile','dist','build','env',i,'lib','bin','obj','out','__pycache__','.next','.turbo','.expo','.idea','.vscode','coverage','test','tests','fixtures','migrations','assets','static','logs','debug','config','style'] -v=[M,'-','_','~'] -Q=['.log','.png','.jpg','.jpeg','.svg','.ico','.gif','.webp','.pyc','.class','.zip','.min.js','.mp4','.mp3','.wav','.pdf','.docx','.xlsx','.db','.sqlite','.bak','.7z','.rar','.tar.gz','.exe','.dll','.so','.ttf','.woff','.eot','.swp','.map','.webm',C,'.css'] -def d(base): + O=J().replace(U,B).lstrip('\\/').replace('\\','/');K=C(U,I,O);S(K,exist_ok=True);L=p(D)[0]+Q + if X in L.upper(): + if not j:H('skipping overwriting README');M=C(K,N) + else:M=C(N) + else:M=C(K,L) + G=i+G + with V(M,'w',encoding=Y)as P:P.write(t(D,code,G)) + F(f"Written to: {L}") + except A as R:E(f"Error writing README for {D}: {R}") +L=['cache','node','module','pkg','package','@','$','#','&','util','hook','component','python','compile','dist','build','env',k,'lib','bin','obj','out','__pycache__','.next','.turbo','.expo','.idea','.vscode','coverage','test','tests','fixtures','migrations','assets','static','logs','debug','config','style'] +w=[N,'-','_','~'] +T=['.log','.png','.jpg','.jpeg','.svg','.ico','.gif','.webp','.pyc','.class','.zip','.min.js','.mp4','.mp3','.wav','.pdf','.docx','.xlsx','.db','.sqlite','.bak','.7z','.rar','.tar.gz','.exe','.dll','.so','.ttf','.woff','.eot','.swp','.map','.webm',Q,'.css'] +def g(base): I=base try: - O(I);F(f"Reading Folder: {I}");P=[A for A in k()if e(A)];L=[A for A in P if N(B(J(),A))] + R(I);F(f"Reading Folder: {I}");N=[A for A in m()if h(A)];L=[A for A in N if O(C(J(),A))] if L: F('Folders found:') - for C in L:H(C) - for C in L:H(A);F(f"Opening Folder: {C}");d(C);F(f"Closing Folder: {C}");H(A) - M=[A for A in P if not N(B(J(),A))and o(A)<1000000] + for D in L:H(D) + for D in L:H(B);F(f"Opening Folder: {D}");g(D);F(f"Closing Folder: {D}");H(B) + M=[A for A in N if not O(C(J(),A))and q(A)<1000000] if M: F('Files found:') for G in M:H(G) - for G in M:Q=u(G);R=K(G);c(G,Q,R) - t(I,L,M);O('..') - except E as S:D(f"Failed to read {I} folder.") -def w(include,exclude): - C=exclude;B=include + for G in M:P=v(G);Q=K(G);f(G,P,Q) + u(I,L,M);R('..') + except A as S:E(f"Failed to read {I} folder.") +def x(include,exclude): + D=exclude;C=include try: - B=[A.strip()for A in B.split(',')if A.strip()];C=[A.strip()for A in C.split(',')if A.strip()] - for F in B:L.append(F.strip()) - for A in C: - if A in L:L.remove(A.strip()) - if A in Q:Q.remove(A.strip()) - except E as G:D('Error in use with args --include || --exclude') -def e(entry):A=entry.lower();return not T(A.startswith(B)for B in v)and not T(A.endswith(B)for B in Q)and not T(B in A for B in L) -def x(): + C=[A.strip()for A in C.split(',')if A.strip()];D=[A.strip()for A in D.split(',')if A.strip()] + for F in C:L.append(F.strip()) + for B in D: + if B in L:L.remove(B.strip()) + if B in T:T.remove(B.strip()) + except A as G:E('Error in use with args --include || --exclude') +def h(entry):A=entry.lower();return not W(A.startswith(B)for B in w)and not W(A.endswith(B)for B in T)and not W(B in A for B in L) +def y(): try: - B=r(description='Auto-generate documentation from source code and folder structure.');B.add_argument('-p','--path',type=G,default=M,help='Root path to scan (default: current directory)');B.add_argument('--name',type=G,default='My Project',help='Project name to include in README');B.add_argument('--description',type=G,default='No description provided.',help='Short description of the project');B.add_argument('--authors',type=G,default='Anonymous',help='Comma-separated list of author names');B.add_argument('--keywords',type=G,default=A,help='Comma-separated keywords (e.g., cli, docs, auto)');B.add_argument('--overwrite',action='store_true',help='Overwrite existing README files (default: False)');B.add_argument('--output',type=G,default=i,help='Output dir where docs to be stored (default: docs)');B.add_argument('--exclude',type=G,default=A,help='Folders, files, extensionse to exclude ((e.g., docs, ext, setting, config)');B.add_argument('--include',type=G,default=A,help='Folders, files, extensionse to include ((e.g., docs, ext, setting, config)');global f;global R;global I;global g;global h;C=B.parse_args();R=J();h=C.overwrite;I=C.output;w(include=C.include,exclude=C.exclude) - if not Y(I):P(I) - L.append(I);g=f"name: {C.name}\ndescription: {C.description}\nauthors: {C.authors}\nkeywords: {C.keywords}";f=p(api_key=input('Paste your Google Gemini API Key here:').strip());F(f"📁 Starting in: {C.path}");P(I,exist_ok=True);O(C.path);d(m);F('✅ Documentation generated successfully.') - except E as H:D('Error during execution. Try using --help.') -if __name__=='__main__':x() \ No newline at end of file + C=s(description='Auto-generate documentation from source code and folder structure.');C.add_argument('-p','--path',type=G,default=N,help='Root path to scan (default: current directory)');C.add_argument('--name',type=G,default='My Project',help='Project name to include in README');C.add_argument('--description',type=G,default='No description provided.',help='Short description of the project');C.add_argument('--authors',type=G,default='Anonymous',help='Comma-separated list of author names');C.add_argument('--keywords',type=G,default=B,help='Comma-separated keywords (e.g., cli, docs, auto)');C.add_argument('--overwrite',action='store_true',help='Overwrite existing README files (default: False)');C.add_argument('--output',type=G,default=k,help='Output dir where docs to be stored (default: docs)');C.add_argument('--exclude',type=G,default=B,help='Folders, files, extensionse to exclude ((e.g., docs, ext, setting, config)');C.add_argument('--include',type=G,default=B,help='Folders, files, extensionse to include ((e.g., docs, ext, setting, config)');global M;global U;global I;global i;global j;D=C.parse_args();U=J();j=D.overwrite;I=D.output;x(include=D.include,exclude=D.exclude) + if not b(I):S(I) + L.append(I);i=f"name: {D.name}\ndescription: {D.description}\nauthors: {D.authors}\nkeywords: {D.keywords}";M=r(api_key=input('Paste your Google Gemini API Key here:').strip());F(f"📁 Starting in: {D.path}");S(I,exist_ok=True);R(D.path);g(o);F('✅ Documentation generated successfully.') + except A as H:E('Error during execution. Try using --help.') +if __name__=='__main__':y() \ No newline at end of file diff --git a/dist/devdocs-1.0.3-py3-none-any.whl b/dist/devdocs-1.0.3-py3-none-any.whl deleted file mode 100644 index 16f24bddc705f9d3fdf2a1dabc501747b04fcf65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7618 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 diff --git a/dist/devdocs-1.0.3.tar.gz b/dist/devdocs-1.0.3.tar.gz deleted file mode 100644 index d3c9f8593e9c19a1fbd45eed5a35f09aff01bb8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7637 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 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 2cd8e1d..564ad75 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "devDocs" -version = "1.0.3" +version = "2.0.3" description = "AI-powered CLI tool that builds professional '*.md' documentation files of a project for internal teams using the Google Gemini API." readme = "README.md" requires-python = ">=3.8" diff --git a/secret b/secret index aca2be0..3504d71 100644 --- a/secret +++ b/secret @@ -20,4 +20,4 @@ pkg/shared ├── README.md └── LICENSE -AIzaSyBSqYXDmaSVTTT6N9Qn_oBlbzFtyIGQ4vQ +freekey = 'AIzaSyBSqYXDmaSVTTT6N9Qn_oBlbzFtyIGQ4vQ' diff --git a/setup.py b/setup.py index c5c9d42..3facbfd 100644 --- a/setup.py +++ b/setup.py @@ -1,2 +1,2 @@ from setuptools import setup,find_packages as A -setup(name='devDocs',version='1.0.3',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:x']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file +setup(name='devDocs',version='2.0.3',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:x']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file From 30b19edbf7b63415073f31f66ad31fc9be0b31bd Mon Sep 17 00:00:00 2001 From: Gantavya Date: Wed, 6 Aug 2025 22:52:00 +0530 Subject: [PATCH 2/5] readme upd --- README.md | 174 ++++++++++++++++++++---------------------------------- 1 file changed, 64 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index 1c430b3..c952083 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,21 @@ --- -# PKG NAME📘: `devDocs` – AI-powered automated project documentation writer +# 📘 `devDocs` – AI-Powered README Generator -`devDocs` is a **command-line tool** that automatically creates high-quality `README.md` files by analyzing your project’s **folder structure**, **source code**, and any existing documentation. It uses the **Google Gemini API** to generate clear, structured, and professional Markdown documentation. +`devDocs` is a command-line tool that automatically generates clean, professional `README.md` files by analyzing your **project structure**, **source code**, and any **existing documentation**. -Perfect for: +Powered by the **Google Gemini API**, it's ideal for: -* Open-source contributors 💡 -* Developers maintaining internal tools 🛠️ -* Hackathon projects needing clean docs fast 🚀 +* 💡 Open-source contributors +* 🛠️ Internal dev tools +* 🚀 Hackathon projects needing docs fast --- -## 📂 Example Project Structure +## 📂 Example Project Layout -Here’s how your project might look before and after using `devDocs`: +Before and after running `devDocs`: ```bash your-project/ @@ -25,30 +25,29 @@ your-project/ ├── tests/ ├── requirements.txt ├── LICENSE -└── README.md <-- Generated/Overwritten by devDocs +├── docs/ # ← Generated by devDocs +└── README.md # ← Overwritten by devDocs (if chosen) ``` --- -## ⚙️ How It Works (Behind the Scenes) +## ⚙️ How It Works -Here's what happens when you run `devDocs`: +1. **Scans** project directory and source files +2. **Parses** content (code, comments, old README) +3. **Generates** documentation via Google Gemini +4. **Saves** output in Markdown format -1. **Scans your project** – Analyzes directory structure, code files, and existing README files. -2. **Parses content** – Gathers code and documentation from each relevant file/folder. -3. **Generates documentation** – Sends context to Google Gemini API to craft a structured `README.md`. -4. **Saves output** – Writes the generated Markdown into your project (or into a custom output folder). +### Optional Features -🔁 Optional features: - -* Preserves your original README unless you use `--overwrite`. -* Includes/excludes specific files or folders with filters. +* Preserve existing README (unless `--overwrite` is set) +* Include/exclude specific files or folders via filters --- ## 📦 Installation -Install from PyPI: +Install via pip: ```bash pip install devDocs @@ -58,128 +57,84 @@ pip install devDocs ## 🔑 Requirements -* **Python 3.8+** -* **Google Gemini API Key** - Get one from [Google AI Studio](https://aistudio.google.com/). +* Python 3.8+ +* Google Gemini API Key (get one at [Google AI Studio](https://aistudio.google.com/)) --- ## 🚀 Usage -Inside the root folder of your project, run: +Run inside your project’s root: ```bash devDocs [OPTIONS] ``` -The CLI will prompt for your **Google Gemini API key**. Paste it once when asked. +Paste your **Gemini API key** when prompted. ### CLI Options -| Option | Description | -| --------------- | ------------------------------------------------------------- | -| `--path` | Root path to scan (default: current directory) | -| `--name` | Project name to display in the README | -| `--description` | Short description for the project | -| `--authors` | Comma-separated list of authors | -| `--keywords` | Comma-separated list of keywords (e.g., cli, docs, auto) | -| `--overwrite` | Overwrite existing `README.md` files (default: False) | -| `--output` | Output folder to save generated docs (default: `docs/`) | -| `--exclude` | Comma-separated folders/files/extensions to **exclude** | -| `--include` | Comma-separated folders/files/extensions to **force include** | +| Option | Description | +| --------------- | ------------------------------------------------- | +| `--path` | Root folder to scan (default: `.`) | +| `--name` | Project name to display in the README | +| `--description` | Short project summary | +| `--authors` | Comma-separated list of authors | +| `--keywords` | Comma-separated keywords (e.g., cli, docs, ai) | +| `--overwrite` | Overwrite existing `README.md` (default: False) | +| `--output` | Output folder (default: `docs/`) | +| `--exclude` | Comma-separated paths/extensions to exclude | +| `--include` | Comma-separated paths/extensions to force include | --- -### ✅ Example Command +### ✅ Example ```bash devDocs --path . \ --name "Cool Dev Tool" \ --description "Generate AI-based READMEs effortlessly" \ --authors "Gantavya Bansal" \ - --keywords "cli, docs, automation, openai" \ + --keywords "cli, docs, automation" \ --output docs \ --overwrite ``` -This will: - -* Walk through all folders from current directory -* Create a `docs/README.md` and other structured markdowns -* Overwrite existing README if one exists - --- -## 🧠 Features +## 🧠 Key Features -* ✅ Generates structured, professional `README.md` files automatically -* ✅ Preserves original docs unless `--overwrite` is set -* ✅ Supports **include/exclude** filtering for granular control -* ✅ Smart project tree visualization included in docs -* ✅ Outputs all documentation to a single folder (`--output`) -* ✅ Powered by Google Gemini AI (clean & readable Markdown) +✅ Auto-generates structured `README.md` +✅ Respects original files unless `--overwrite` +✅ Fine-grained include/exclude control +✅ Generates a visual folder tree +✅ Clean output in a dedicated `--output` folder +✅ Backed by Google Gemini for high-quality results --- -## 🏗️ Example Output (Generated) - -Here’s a sample snippet of what the generated README might look like: - -``` -# Cool Dev Tool - -This is a CLI tool for generating clean README.md files using Google Gemini. - -## Folder Structure -your-project/ -├── src/ -│ ├── main.py -│ └── utils.py -├── README.md -... +## 🧱 Tech Stack -## Usage -... -``` - ---- - -## 🧱 Technologies Used - -* `Python 3.8+` +* Python 3.8+ * [`google-genai`](https://pypi.org/project/google-generativeai/) -* `argparse`, `os`, `logging`, `time` – for CLI and system interaction +* Built-in: `argparse`, `os`, `logging`, `time` --- -## 🧰 Developer Notes - -If you're contributing or extending this project: +## 🛠️ Dev Notes -### Core Files +### Workflow -| File | Purpose | -| ------------------ | ----------------------------------------------- | -| `cli.py` | CLI interface + core logic | -| `README.md` | The README template output (can be regenerated) | -| `LookFolder()` | Recursive folder/file scanner | -| `GenerateReadMe()` | Sends data to Gemini and processes results | -| `print_tree()` | Generates folder structure view in tree format | - -### Data Flow - -1. CLI parses args → -2. Filters folders/files → -3. Reads source + existing docs → -4. Calls `GenerateReadMe()` → -5. Writes Markdown to output +``` +CLI args → Filter files → Extract context → Call Gemini → Write docs +``` -### API Instruction Logic (Simplified) +### API Prompt Template ```python system_instruction = ''' -You are Gantavya Bansal, a senior engineer and tech writer. -Generate clean, professional Markdown documentation using code + structure context. +You are Gantavya Bansal, a senior engineer and technical writer. +Generate professional Markdown documentation using context from code and folder structure. Include: - Title - Folder Tree @@ -193,25 +148,24 @@ Include: --- -## ⚠️ Known Limitations +## ⚠️ Limitations -* 📡 Needs an internet connection for Gemini API -* 🔁 Limited retry logic for failed API calls -* ⚙️ Include/exclude filters don't yet support regex -* 📄 Only supports `.md` output format +* 📶 Requires internet (for Gemini API) +* 🔁 Retry logic for failed API calls is minimal +* ❌ Regex not yet supported in filters +* 📄 Only outputs `.md` format (Markdown) --- ## 📜 License -**MIT License** – You’re free to use, modify, and share. -Attribution is appreciated! +Released under the **MIT License**. Use, modify, and share freely — attribution appreciated. --- -## 💬 Contributing +## 🤝 Contribute -Feel free to open issues, suggest improvements, or contribute directly. -Pull requests are always welcome! +Found a bug or have an idea? +Open an issue or submit a PR — contributions are always welcome! ---- +--- \ No newline at end of file From 03d2b15879b092e0469b7f21abd9181d0c417d22 Mon Sep 17 00:00:00 2001 From: Gantavya Date: Wed, 6 Aug 2025 23:03:27 +0530 Subject: [PATCH 3/5] test done --- pyproject.toml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 564ad75..b39b1a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "devDocs" -version = "2.0.3" +version = "2.0.5" description = "AI-powered CLI tool that builds professional '*.md' documentation files of a project for internal teams using the Google Gemini API." readme = "README.md" requires-python = ">=3.8" diff --git a/setup.py b/setup.py index 3facbfd..aa820dd 100644 --- a/setup.py +++ b/setup.py @@ -1,2 +1,2 @@ from setuptools import setup,find_packages as A -setup(name='devDocs',version='2.0.3',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:x']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file +setup(name='devDocs',version='2.0.5',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:x']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file From 93aeaafe337e181a5cd7c19ff48472161687695a Mon Sep 17 00:00:00 2001 From: Gantavya Date: Wed, 6 Aug 2025 23:07:32 +0530 Subject: [PATCH 4/5] pkg v-2.0.6 --- devDocs.egg-info/PKG-INFO | 174 ++++++++++------------------ dist/devdocs-2.0.3-py3-none-any.whl | Bin 7666 -> 0 bytes dist/devdocs-2.0.3.tar.gz | Bin 7681 -> 0 bytes dist/devdocs-2.0.6-py3-none-any.whl | Bin 0 -> 7029 bytes dist/devdocs-2.0.6.tar.gz | Bin 0 -> 7032 bytes pyproject.toml | 2 +- setup.py | 2 +- 7 files changed, 66 insertions(+), 112 deletions(-) delete mode 100644 dist/devdocs-2.0.3-py3-none-any.whl delete mode 100644 dist/devdocs-2.0.3.tar.gz create mode 100644 dist/devdocs-2.0.6-py3-none-any.whl create mode 100644 dist/devdocs-2.0.6.tar.gz diff --git a/devDocs.egg-info/PKG-INFO b/devDocs.egg-info/PKG-INFO index 34b3ee3..9c82352 100644 --- a/devDocs.egg-info/PKG-INFO +++ b/devDocs.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: devDocs -Version: 2.0.3 +Version: 2.0.6 Summary: AI-powered CLI tool that builds professional '*.md' documentation files of a project for internal teams using the Google Gemini API. Author: Gantavya Bansal Author-email: Gantavya Bansal @@ -34,21 +34,21 @@ Dynamic: requires-python --- -# PKG NAME📘: `devDocs` – AI-powered automated project documentation writer +# 📘 `devDocs` – AI-Powered README Generator -`devDocs` is a **command-line tool** that automatically creates high-quality `README.md` files by analyzing your project’s **folder structure**, **source code**, and any existing documentation. It uses the **Google Gemini API** to generate clear, structured, and professional Markdown documentation. +`devDocs` is a command-line tool that automatically generates clean, professional `README.md` files by analyzing your **project structure**, **source code**, and any **existing documentation**. -Perfect for: +Powered by the **Google Gemini API**, it's ideal for: -* Open-source contributors 💡 -* Developers maintaining internal tools 🛠️ -* Hackathon projects needing clean docs fast 🚀 +* 💡 Open-source contributors +* 🛠️ Internal dev tools +* 🚀 Hackathon projects needing docs fast --- -## 📂 Example Project Structure +## 📂 Example Project Layout -Here’s how your project might look before and after using `devDocs`: +Before and after running `devDocs`: ```bash your-project/ @@ -58,30 +58,29 @@ your-project/ ├── tests/ ├── requirements.txt ├── LICENSE -└── README.md <-- Generated/Overwritten by devDocs +├── docs/ # ← Generated by devDocs +└── README.md # ← Overwritten by devDocs (if chosen) ``` --- -## ⚙️ How It Works (Behind the Scenes) +## ⚙️ How It Works -Here's what happens when you run `devDocs`: +1. **Scans** project directory and source files +2. **Parses** content (code, comments, old README) +3. **Generates** documentation via Google Gemini +4. **Saves** output in Markdown format -1. **Scans your project** – Analyzes directory structure, code files, and existing README files. -2. **Parses content** – Gathers code and documentation from each relevant file/folder. -3. **Generates documentation** – Sends context to Google Gemini API to craft a structured `README.md`. -4. **Saves output** – Writes the generated Markdown into your project (or into a custom output folder). +### Optional Features -🔁 Optional features: - -* Preserves your original README unless you use `--overwrite`. -* Includes/excludes specific files or folders with filters. +* Preserve existing README (unless `--overwrite` is set) +* Include/exclude specific files or folders via filters --- ## 📦 Installation -Install from PyPI: +Install via pip: ```bash pip install devDocs @@ -91,128 +90,84 @@ pip install devDocs ## 🔑 Requirements -* **Python 3.8+** -* **Google Gemini API Key** - Get one from [Google AI Studio](https://aistudio.google.com/). +* Python 3.8+ +* Google Gemini API Key (get one at [Google AI Studio](https://aistudio.google.com/)) --- ## 🚀 Usage -Inside the root folder of your project, run: +Run inside your project’s root: ```bash devDocs [OPTIONS] ``` -The CLI will prompt for your **Google Gemini API key**. Paste it once when asked. +Paste your **Gemini API key** when prompted. ### CLI Options -| Option | Description | -| --------------- | ------------------------------------------------------------- | -| `--path` | Root path to scan (default: current directory) | -| `--name` | Project name to display in the README | -| `--description` | Short description for the project | -| `--authors` | Comma-separated list of authors | -| `--keywords` | Comma-separated list of keywords (e.g., cli, docs, auto) | -| `--overwrite` | Overwrite existing `README.md` files (default: False) | -| `--output` | Output folder to save generated docs (default: `docs/`) | -| `--exclude` | Comma-separated folders/files/extensions to **exclude** | -| `--include` | Comma-separated folders/files/extensions to **force include** | +| Option | Description | +| --------------- | ------------------------------------------------- | +| `--path` | Root folder to scan (default: `.`) | +| `--name` | Project name to display in the README | +| `--description` | Short project summary | +| `--authors` | Comma-separated list of authors | +| `--keywords` | Comma-separated keywords (e.g., cli, docs, ai) | +| `--overwrite` | Overwrite existing `README.md` (default: False) | +| `--output` | Output folder (default: `docs/`) | +| `--exclude` | Comma-separated paths/extensions to exclude | +| `--include` | Comma-separated paths/extensions to force include | --- -### ✅ Example Command +### ✅ Example ```bash devDocs --path . \ --name "Cool Dev Tool" \ --description "Generate AI-based READMEs effortlessly" \ --authors "Gantavya Bansal" \ - --keywords "cli, docs, automation, openai" \ + --keywords "cli, docs, automation" \ --output docs \ --overwrite ``` -This will: - -* Walk through all folders from current directory -* Create a `docs/README.md` and other structured markdowns -* Overwrite existing README if one exists - --- -## 🧠 Features - -* ✅ Generates structured, professional `README.md` files automatically -* ✅ Preserves original docs unless `--overwrite` is set -* ✅ Supports **include/exclude** filtering for granular control -* ✅ Smart project tree visualization included in docs -* ✅ Outputs all documentation to a single folder (`--output`) -* ✅ Powered by Google Gemini AI (clean & readable Markdown) - ---- - -## 🏗️ Example Output (Generated) - -Here’s a sample snippet of what the generated README might look like: - -``` -# Cool Dev Tool - -This is a CLI tool for generating clean README.md files using Google Gemini. +## 🧠 Key Features -## Folder Structure -your-project/ -├── src/ -│ ├── main.py -│ └── utils.py -├── README.md -... - -## Usage -... -``` +✅ Auto-generates structured `README.md` +✅ Respects original files unless `--overwrite` +✅ Fine-grained include/exclude control +✅ Generates a visual folder tree +✅ Clean output in a dedicated `--output` folder +✅ Backed by Google Gemini for high-quality results --- -## 🧱 Technologies Used +## 🧱 Tech Stack -* `Python 3.8+` +* Python 3.8+ * [`google-genai`](https://pypi.org/project/google-generativeai/) -* `argparse`, `os`, `logging`, `time` – for CLI and system interaction +* Built-in: `argparse`, `os`, `logging`, `time` --- -## 🧰 Developer Notes +## 🛠️ Dev Notes -If you're contributing or extending this project: +### Workflow -### Core Files - -| File | Purpose | -| ------------------ | ----------------------------------------------- | -| `cli.py` | CLI interface + core logic | -| `README.md` | The README template output (can be regenerated) | -| `LookFolder()` | Recursive folder/file scanner | -| `GenerateReadMe()` | Sends data to Gemini and processes results | -| `print_tree()` | Generates folder structure view in tree format | - -### Data Flow - -1. CLI parses args → -2. Filters folders/files → -3. Reads source + existing docs → -4. Calls `GenerateReadMe()` → -5. Writes Markdown to output +``` +CLI args → Filter files → Extract context → Call Gemini → Write docs +``` -### API Instruction Logic (Simplified) +### API Prompt Template ```python system_instruction = ''' -You are Gantavya Bansal, a senior engineer and tech writer. -Generate clean, professional Markdown documentation using code + structure context. +You are Gantavya Bansal, a senior engineer and technical writer. +Generate professional Markdown documentation using context from code and folder structure. Include: - Title - Folder Tree @@ -226,25 +181,24 @@ Include: --- -## ⚠️ Known Limitations +## ⚠️ Limitations -* 📡 Needs an internet connection for Gemini API -* 🔁 Limited retry logic for failed API calls -* ⚙️ Include/exclude filters don't yet support regex -* 📄 Only supports `.md` output format +* 📶 Requires internet (for Gemini API) +* 🔁 Retry logic for failed API calls is minimal +* ❌ Regex not yet supported in filters +* 📄 Only outputs `.md` format (Markdown) --- ## 📜 License -**MIT License** – You’re free to use, modify, and share. -Attribution is appreciated! +Released under the **MIT License**. Use, modify, and share freely — attribution appreciated. --- -## 💬 Contributing +## 🤝 Contribute -Feel free to open issues, suggest improvements, or contribute directly. -Pull requests are always welcome! +Found a bug or have an idea? +Open an issue or submit a PR — contributions are always welcome! --- diff --git a/dist/devdocs-2.0.3-py3-none-any.whl b/dist/devdocs-2.0.3-py3-none-any.whl deleted file mode 100644 index bbb55f5684c98d22bc06b55d3ca18df4ea3718e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7666 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 diff --git a/dist/devdocs-2.0.6-py3-none-any.whl b/dist/devdocs-2.0.6-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..b78aab68189c25f9e10eab1de90e3cf584e280fc GIT binary patch literal 7029 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 W4InbgANx^%T^PT#sZILF+y4PQ@U}<* literal 0 HcmV?d00001 diff --git a/dist/devdocs-2.0.6.tar.gz b/dist/devdocs-2.0.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..2433e45f7730a52a78e76d8a70dd552ec7338bc1 GIT binary patch literal 7032 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

1qOMQTbiAgo*@dc!( zeMztg7{v{l)6p|y2ieetw>A9VaAb{A9x|NpJ;i~f^2Oo64HUPC}w%-6lO z%PXNU->2?4iR9RQJ}Oz4VJttqg`Ks^6aY){P-uT5vd2J zBsG;+Pmir;=oPSAtfyY`SfG!zA@-jvf1k^67oeu5@}o+Tbp6?0yZ#=qduhDu$Av7w zA$c;vC-8nv@-5&SUqAE?=tY@1HUu31n_mSC0ks8S&!gUl4`}3^Nj?JhN6MM%feVJO z?SFA6DvYi0ZP)WE($5>4EV9hLukcBpKpK#2b8QOPk;al2$kE+)&F$>@v`>QIRWlQPBji-?4qE@v4o?LpHL`7dOJv24g+PQA0q zgb|znG)wokbd{XGp<`xYf>v|;?QHeyd$Gddl*?))I+AQ3iBNMhHxMV*u3ZQc7~hr| z!K24Y=-}VKOpIffMD_6^B3S1$+eTq%*`D&|&OS@0HJMt2u1NMoOH{|h2N4J?YIp8fFaJ2Se!=?{>S)t(vS?2{;Mk_r>O^KLhJHokW zYKCu5ghz=kd|k&(;#C|^T!g%;rhPiscF#YA##|KMmkNy=)%PeK)J#6l+`E=#WStq_ zJftjN7pm$oJPI#KRj0H(HFMK3_a37^o`Z$&s^6vQS&1O{ z?pbXMcq+&RRK5c~!CuwfO*Q0qz4^d|w0OPhefJGJ!81CH|J7wYiw@uo$- z*=~cDWv`%_Wv%0{6k1?*zS+8G3*^Ht-gf?ts)7ofj|{Vzd#9011=UHs2f_k%&w77t z| zOYGn{cg#T&Q)FG_t4$d~>%1@umJo~U6dX5)l%@41cU9ei8|r7rDC<8nLv~+}Tse-Q Y;kY0F{f`jnGXx;_k#-v*Tp}R+7n)iSxBvhE literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index b39b1a2..324278e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "devDocs" -version = "2.0.5" +version = "2.0.6" description = "AI-powered CLI tool that builds professional '*.md' documentation files of a project for internal teams using the Google Gemini API." readme = "README.md" requires-python = ">=3.8" diff --git a/setup.py b/setup.py index aa820dd..882119b 100644 --- a/setup.py +++ b/setup.py @@ -1,2 +1,2 @@ from setuptools import setup,find_packages as A -setup(name='devDocs',version='2.0.5',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:x']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file +setup(name='devDocs',version='2.0.6',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:x']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file From 0da365f98352c486c9e1971399926409ab8be3f1 Mon Sep 17 00:00:00 2001 From: Gantavya Date: Wed, 6 Aug 2025 23:23:45 +0530 Subject: [PATCH 5/5] fixed setup files --- devDocs.egg-info/PKG-INFO | 2 +- devDocs.egg-info/entry_points.txt | 2 +- dist/devdocs-2.0.6.tar.gz | Bin 7032 -> 0 bytes ...any.whl => devdocs-2.0.7-py3-none-any.whl} | Bin 7029 -> 7028 bytes dist/devdocs-2.0.7.tar.gz | Bin 0 -> 7055 bytes pyproject.toml | 4 ++-- setup.py | 2 +- 7 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 dist/devdocs-2.0.6.tar.gz rename dist/{devdocs-2.0.6-py3-none-any.whl => devdocs-2.0.7-py3-none-any.whl} (81%) create mode 100644 dist/devdocs-2.0.7.tar.gz diff --git a/devDocs.egg-info/PKG-INFO b/devDocs.egg-info/PKG-INFO index 9c82352..d30d931 100644 --- a/devDocs.egg-info/PKG-INFO +++ b/devDocs.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: devDocs -Version: 2.0.6 +Version: 2.0.7 Summary: AI-powered CLI tool that builds professional '*.md' documentation files of a project for internal teams using the Google Gemini API. Author: Gantavya Bansal Author-email: Gantavya Bansal diff --git a/devDocs.egg-info/entry_points.txt b/devDocs.egg-info/entry_points.txt index 8f786ac..fa5e6cd 100644 --- a/devDocs.egg-info/entry_points.txt +++ b/devDocs.egg-info/entry_points.txt @@ -1,2 +1,2 @@ [console_scripts] -devDocs = devDocs.cli:x +devDocs = devDocs.cli:y diff --git a/dist/devdocs-2.0.6.tar.gz b/dist/devdocs-2.0.6.tar.gz deleted file mode 100644 index 2433e45f7730a52a78e76d8a70dd552ec7338bc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7032 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

1qOMQTbiAgo*@dc!( zeMztg7{v{l)6p|y2ieetw>A9VaAb{A9x|NpJ;i~f^2Oo64HUPC}w%-6lO z%PXNU->2?4iR9RQJ}Oz4VJttqg`Ks^6aY){P-uT5vd2J zBsG;+Pmir;=oPSAtfyY`SfG!zA@-jvf1k^67oeu5@}o+Tbp6?0yZ#=qduhDu$Av7w zA$c;vC-8nv@-5&SUqAE?=tY@1HUu31n_mSC0ks8S&!gUl4`}3^Nj?JhN6MM%feVJO z?SFA6DvYi0ZP)WE($5>4EV9hLukcBpKpK#2b8QOPk;al2$kE+)&F$>@v`>QIRWlQPBji-?4qE@v4o?LpHL`7dOJv24g+PQA0q zgb|znG)wokbd{XGp<`xYf>v|;?QHeyd$Gddl*?))I+AQ3iBNMhHxMV*u3ZQc7~hr| z!K24Y=-}VKOpIffMD_6^B3S1$+eTq%*`D&|&OS@0HJMt2u1NMoOH{|h2N4J?YIp8fFaJ2Se!=?{>S)t(vS?2{;Mk_r>O^KLhJHokW zYKCu5ghz=kd|k&(;#C|^T!g%;rhPiscF#YA##|KMmkNy=)%PeK)J#6l+`E=#WStq_ zJftjN7pm$oJPI#KRj0H(HFMK3_a37^o`Z$&s^6vQS&1O{ z?pbXMcq+&RRK5c~!CuwfO*Q0qz4^d|w0OPhefJGJ!81CH|J7wYiw@uo$- z*=~cDWv`%_Wv%0{6k1?*zS+8G3*^Ht-gf?ts)7ofj|{Vzd#9011=UHs2f_k%&w77t z| zOYGn{cg#T&Q)FG_t4$d~>%1@umJo~U6dX5)l%@41cU9ei8|r7rDC<8nLv~+}Tse-Q Y;kY0F{f`jnGXx;_k#-v*Tp}R+7n)iSxBvhE diff --git a/dist/devdocs-2.0.6-py3-none-any.whl b/dist/devdocs-2.0.7-py3-none-any.whl similarity index 81% rename from dist/devdocs-2.0.6-py3-none-any.whl rename to dist/devdocs-2.0.7-py3-none-any.whl index b78aab68189c25f9e10eab1de90e3cf584e280fc..e1f947c42264cd08e57059ff6a9c1d0c56c3daab 100644 GIT binary patch delta 636 zcmexr_Qh<21uw_CKDOvBLB6b$9e5=e%_m3lsxw~L+{pWhLlGoX^6b=`7zPH0Xdspa z;*`{~l>FpkT_ZgMJ@d&^#LB>`Y|mcapazuH0%8peRodeAd^;HeyqQ@-r{F zh|2-(nl7$W53+=%Bg;RIk%2*iiGe{5UAtaNW^svbW?ovpevqrPe~?S*8ShDp3>X+L z)XrDEu&CwyB5}c{1}5G|3-W@P90OD&9a#PBjYE?|^J~~EENf@zytd<9Ict@=%M;}n zr!LEA#c#@bG$G!kdZ#U?N?BfgCqr!WJ!h%d{0rZA%$5o7E~?&Mmhf%j|Nc$8eiat{ zUSrwK%~cta<1Z;!dVk|)$Fgg|RX5(UNBL~M`pWh835TmDf8!_r&u!UhAslMBeplRz zSxvQ77H(=?7qzdM|Jan?E_x^Cd5&w7qxS=^_)`HhZI|4c^XmEC?dm6O+Z7uELhJ7z z>+JpbZ0n?xC&c%KXj^5q8~SZ6JM<>Hzq0B^e7*a%Yy3VEciPq7HR$cN&Ahx_`Qe(Z zUw&`e|6QGJ9kQl>N1D6xCojFL9&tg+Jk%2*iiGe{5UAtaNW^svbW?ovpevqrPe~?S*nUj+i889$h zsIK>35F2qQkPyvE%8R`=*U?&+^`N`|ZsJ~><9qkAZr=W;e#*2z z#}((?zYrUDrnlqMj~S0Ha>S_1id>)Vce2cWLygwkV<%>NFCRihe{Qu(g4>?=eW_N`IQX%%F8 z@OE;LWEUb?JdsobMisY|JQFb9bfk1ZX+%l}EDwtI$+c1-d2Mm&$@`^vKx)o{)%=oD Y;e^NSWOZp(pdw#sMYa%0U<5M&0PSoN6951J diff --git a/dist/devdocs-2.0.7.tar.gz b/dist/devdocs-2.0.7.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..24929b332d9055f5f41ec10d7dcb682e763cc12e GIT binary patch literal 7055 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.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file +setup(name='devDocs',version='2.0.7',packages=A(),install_requires=['google-generativeai'],entry_points={'console_scripts':['devDocs=devDocs.cli:y']},author='Gantavya Bansal',description="Auto-generate Project's markdown documentation using Gemini AI for Internal teams.",long_description=open('README.md',encoding='utf-8').read(),long_description_content_type='text/markdown',license='MIT',python_requires='>=3.8',classifiers=['Programming Language :: Python :: 3','License :: OSI Approved :: MIT License']) \ No newline at end of file