ziya 0.1.41__tar.gz → 0.1.42__tar.gz

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.

Potentially problematic release.


This version of ziya might be problematic. Click here for more details.

Files changed (38) hide show
  1. {ziya-0.1.41 → ziya-0.1.42}/PKG-INFO +4 -1
  2. {ziya-0.1.41 → ziya-0.1.42}/README.md +2 -0
  3. {ziya-0.1.41 → ziya-0.1.42}/app/agents/agent.py +8 -1
  4. {ziya-0.1.41 → ziya-0.1.42}/app/agents/prompts.py +19 -1
  5. {ziya-0.1.41 → ziya-0.1.42}/app/main.py +4 -0
  6. {ziya-0.1.41 → ziya-0.1.42}/app/server.py +33 -2
  7. ziya-0.1.42/app/utils/code_util.py +234 -0
  8. {ziya-0.1.41 → ziya-0.1.42}/pyproject.toml +2 -1
  9. {ziya-0.1.41 → ziya-0.1.42}/templates/asset-manifest.json +3 -3
  10. ziya-0.1.42/templates/index.html +1 -0
  11. ziya-0.1.42/templates/static/js/main.fee8aad7.js +3 -0
  12. ziya-0.1.41/templates/static/js/main.69f6f0d1.js.LICENSE.txt → ziya-0.1.42/templates/static/js/main.fee8aad7.js.LICENSE.txt +6 -0
  13. ziya-0.1.42/templates/static/js/main.fee8aad7.js.map +1 -0
  14. ziya-0.1.41/templates/index.html +0 -1
  15. ziya-0.1.41/templates/static/js/main.69f6f0d1.js +0 -3
  16. ziya-0.1.41/templates/static/js/main.69f6f0d1.js.map +0 -1
  17. {ziya-0.1.41 → ziya-0.1.42}/LICENSE +0 -0
  18. {ziya-0.1.41 → ziya-0.1.42}/app/__init__.py +0 -0
  19. {ziya-0.1.41 → ziya-0.1.42}/app/agents/__init__.py +0 -0
  20. {ziya-0.1.41 → ziya-0.1.42}/app/utils/__init__.py +0 -0
  21. {ziya-0.1.41 → ziya-0.1.42}/app/utils/directory_util.py +0 -0
  22. {ziya-0.1.41 → ziya-0.1.42}/app/utils/gitignore_parser.py +0 -0
  23. {ziya-0.1.41 → ziya-0.1.42}/app/utils/langchain_validation_util.py +0 -0
  24. {ziya-0.1.41 → ziya-0.1.42}/app/utils/logging_utils.py +0 -0
  25. {ziya-0.1.41 → ziya-0.1.42}/app/utils/print_tree_util.py +0 -0
  26. {ziya-0.1.41 → ziya-0.1.42}/app/utils/version_util.py +0 -0
  27. {ziya-0.1.41 → ziya-0.1.42}/scripts.py +0 -0
  28. {ziya-0.1.41 → ziya-0.1.42}/templates/favicon.ico +0 -0
  29. {ziya-0.1.41 → ziya-0.1.42}/templates/static/css/main.8af23da0.css +0 -0
  30. {ziya-0.1.41 → ziya-0.1.42}/templates/static/css/main.8af23da0.css.map +0 -0
  31. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-brands-400.455ea818179b4def0c43.woff2 +0 -0
  32. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-brands-400.60127e352b7a11f7f1bc.ttf +0 -0
  33. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-regular-400.21cb8f55d8e0c5b89751.woff2 +0 -0
  34. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-regular-400.eb91f7b948a42799f678.ttf +0 -0
  35. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-solid-900.4d986b00ff9ca3828fbd.woff2 +0 -0
  36. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-solid-900.bacd5de623fb563b961a.ttf +0 -0
  37. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-v4compatibility.c8e090db312b0bea2aa2.ttf +0 -0
  38. {ziya-0.1.41 → ziya-0.1.42}/templates/static/media/fa-v4compatibility.cf7f5903d06b79ad60f1.woff2 +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ziya
3
- Version: 0.1.41
3
+ Version: 0.1.42
4
4
  Summary:
5
5
  Author: Vishnu Krishnaprasad
6
6
  Author-email: vishnukool@gmail.com
@@ -18,6 +18,7 @@ Requires-Dist: langchain-aws (>=0.2,<0.3)
18
18
  Requires-Dist: langchain-cli (>=0.0.15)
19
19
  Requires-Dist: langchain-community (>=0.3.1,<0.4.0)
20
20
  Requires-Dist: langchainhub (>=0.1.15)
21
+ Requires-Dist: langgraph (>=0.2,<0.3)
21
22
  Requires-Dist: pydantic (>=2.9.2,<3.0.0)
22
23
  Requires-Dist: pydevd-pycharm (>=243.18137.19,<244.0.0)
23
24
  Requires-Dist: tiktoken (>=0.8.0,<0.9.0)
@@ -87,6 +88,8 @@ ziya
87
88
 
88
89
  `--port`: The port number for frontend app. Default is `6969`.
89
90
 
91
+ `--enable-code-apply`: Enable the beta feature to show the `Apply Changes` button to apply code diffs directly to your codebase.
92
+
90
93
  `--max-depth`: Maximum depth for folder structure traversal. Default is `15`.
91
94
 
92
95
  ```bash
@@ -61,6 +61,8 @@ ziya
61
61
 
62
62
  `--port`: The port number for frontend app. Default is `6969`.
63
63
 
64
+ `--enable-code-apply`: Enable the beta feature to show the `Apply Changes` button to apply code diffs directly to your codebase.
65
+
64
66
  `--max-depth`: Maximum depth for folder structure traversal. Default is `15`.
65
67
 
66
68
  ```bash
@@ -55,7 +55,14 @@ def get_combined_docs_from_files(files) -> str:
55
55
  try:
56
56
  full_file_path = os.path.join(user_codebase_dir, file_path)
57
57
  docs = TextLoader(full_file_path).load()
58
- for doc in docs:
58
+ for doc_index, doc in enumerate(docs):
59
+ # Add line numbers to the content
60
+ lines = doc.page_content.split('\n')
61
+ numbered_lines = [f"{i + 1:4d} | {line}" for i, line in enumerate(lines)]
62
+ numbered_content = '\n'.join(numbered_lines)
63
+
64
+ # Use the numbered content instead of the original
65
+ doc.page_content = numbered_content
59
66
  combined_contents += f"File: {file_path}\n{doc.page_content}\n\n"
60
67
 
61
68
  except Exception as e:
@@ -6,6 +6,10 @@ template = """
6
6
 
7
7
  You are an excellent coder. Help the user with their coding tasks. You are given the codebase of the user in your context.
8
8
 
9
+ IMPORTANT: The file contents provided to you have line numbers added at the beginning of each line in the format "
10
+ 1 | <line content>". These line numbers start at 1, matching Git's conventions. Use these line numbers when generating
11
+ diff hunks to ensure accurate line numbering.
12
+
9
13
  IMPORTANT: When recommending code changes, format your response as a standard Git diff format unless the user specifies otherwise.
10
14
  Follow these strict guidelines for diff formatting:
11
15
 
@@ -31,11 +35,26 @@ Follow these strict guidelines for diff formatting:
31
35
 
32
36
  5. End each diff block with ``` on a new line
33
37
 
38
+ CRITICAL: After generating each hunk diff, carefully review and verify the following:
39
+ 1. Ensure all Hunk Headers (e.g., @@ -4,7 +4,2 @@) are accurate. The numbers should correctly reflect the lines being changed, added, or removed.
40
+ 2. Verify that the line numbers in the Hunk Headers match the actual content changes in the diff.
41
+ 3. Check that the diff can be applied cleanly using `git apply`. This means:
42
+ - The context lines (unchanged lines) in the diff should match the original file content.
43
+ - The line numbers and content should be consistent throughout the diff.
44
+ - There should be no conflicts or inconsistencies in the changes.
45
+ 4. If you find any errors or inconsistencies, correct them before finalizing the diff.
46
+ 5. For each hunk in the diff, please make sure it starts or ends with a line containing content instead of empty line, if possible.
47
+ 6. When creating a new file, ensure the line `new file mode 100644` is included to specify file permissions.
48
+ 5. When deleting a file, include `deleted file mode` to indicate that the file has been removed. Each line in the
49
+ deleted file should be prefixed with `-` to indicate the content removal.
50
+
34
51
  Do not include any explanatory text within the diff blocks. If you need to provide explanations or comments, do so outside the diff blocks.
35
52
 
36
53
  The codebase is provided at the end of this prompt in a specific format.
37
54
  The code that the user has given to you for context is in the format like below where first line has the File path and then the content follows.
38
55
  Each file starts with "File: <filepath>" followed by its content on subsequent lines.
56
+ Remember, each line of the file content now starts with a line number, beginning from 1. Use these numbers to generate
57
+ accurate hunk diffs, but do not include the line numbers in the actual diff content.
39
58
 
40
59
  File: <filepath>
41
60
  <Content of the file>.
@@ -63,7 +82,6 @@ conversational_prompt = ChatPromptTemplate.from_messages(
63
82
  ]
64
83
  )
65
84
 
66
-
67
85
  def parse_output(message):
68
86
  text = message.content
69
87
  return AgentFinish(return_values={"output": text}, log=text)
@@ -23,6 +23,8 @@ def parse_arguments():
23
23
  help="Port number to run Ziya frontend on (e.g., --port 8080)")
24
24
  parser.add_argument("--version", action="store_true",
25
25
  help="Prints the version of Ziya")
26
+ parser.add_argument("--enable-code-apply", action="store_true",
27
+ help="Enable the feature to show the button to apply code diffs (unstable)")
26
28
  parser.add_argument("--max-depth", type=int, default=15,
27
29
  help="Maximum depth for folder structure traversal (e.g., --max-depth 20)")
28
30
  return parser.parse_args()
@@ -38,6 +40,8 @@ def setup_environment(args):
38
40
  os.environ["ZIYA_AWS_PROFILE"] = args.profile
39
41
  if args.model:
40
42
  os.environ["ZIYA_AWS_MODEL"] = args.model
43
+ if args.enable_code_apply:
44
+ os.environ["ZIYA_ENABLE_CODE_APPLY"] = "true"
41
45
 
42
46
  os.environ["ZIYA_MAX_DEPTH"] = str(args.max_depth)
43
47
 
@@ -2,18 +2,21 @@ import os
2
2
  from typing import Dict, Any, List, Tuple
3
3
 
4
4
  import tiktoken
5
- from fastapi import FastAPI, Request
5
+ from fastapi import FastAPI, Request, HTTPException
6
6
  from fastapi.middleware.cors import CORSMiddleware
7
7
  from fastapi.staticfiles import StaticFiles
8
8
  from fastapi.templating import Jinja2Templates
9
9
  from langserve import add_routes
10
10
  from app.agents.agent import agent_executor
11
11
  from fastapi.responses import FileResponse
12
+ from pydantic import BaseModel
12
13
 
13
14
  # import pydevd_pycharm
14
15
  import uvicorn
15
16
 
17
+ from app.utils.code_util import us_git_to_apply_code_diff, correct_git_diff
16
18
  from app.utils.directory_util import get_ignored_patterns
19
+ from app.utils.logging_utils import logger
17
20
  from app.utils.gitignore_parser import parse_gitignore_patterns
18
21
 
19
22
  app = FastAPI()
@@ -35,7 +38,13 @@ add_routes(app, agent_executor, disabled_endpoints=["playground"], path="/ziya")
35
38
 
36
39
  @app.get("/")
37
40
  async def root(request: Request):
38
- return templates.TemplateResponse("index.html", {"request": request})
41
+ enable_code_apply = os.environ.get("ZIYA_ENABLE_CODE_APPLY", "false")
42
+ enable_code_apply_bool = enable_code_apply.lower() == "true"
43
+ logger.info(f"enable_code_apply_bool: {enable_code_apply_bool}")
44
+ return templates.TemplateResponse("index.html", {
45
+ "request": request,
46
+ "enable_code_apply": str(enable_code_apply_bool).lower()
47
+ })
39
48
 
40
49
 
41
50
  @app.get("/favicon.ico", include_in_schema=False)
@@ -97,5 +106,27 @@ def get_default_included_folders():
97
106
  return {'defaultIncludedFolders': []}
98
107
 
99
108
 
109
+ class ApplyChangesRequest(BaseModel):
110
+ diff: str
111
+ filePath: str
112
+
113
+ @app.post('/api/apply-changes')
114
+ async def apply_changes(request: ApplyChangesRequest):
115
+ try:
116
+ logger.info(f"Received request to apply changes to file: {request.filePath}")
117
+ logger.info(f"Diff content: \n{request.diff}")
118
+
119
+ user_codebase_dir = os.environ.get("ZIYA_USER_CODEBASE_DIR")
120
+ if not user_codebase_dir:
121
+ raise ValueError("ZIYA_USER_CODEBASE_DIR environment variable is not set")
122
+
123
+ corrected_diff = correct_git_diff(request.diff)
124
+ us_git_to_apply_code_diff(corrected_diff)
125
+ return {'message': 'Changes applied successfully'}
126
+ except Exception as e:
127
+ logger.error(f"Error applying changes: {str(e)}", exc_info=True)
128
+ raise HTTPException(status_code=500, detail=str(e))
129
+
130
+
100
131
  if __name__ == "__main__":
101
132
  uvicorn.run(app, host="0.0.0.0", port=8000)
@@ -0,0 +1,234 @@
1
+ import os
2
+ import subprocess
3
+ from app.utils.logging_utils import logger
4
+ import time
5
+ import re
6
+
7
+ HUNK_HEADER_REGEX = re.compile(r'^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@')
8
+
9
+ def us_git_to_apply_code_diff(git_diff: str):
10
+ """
11
+ Apply a git diff to the user's codebase.
12
+
13
+ This function takes a git diff as a string and applies it to the user's codebase
14
+ specified by the ZIYA_USER_CODEBASE_DIR environment variable. It creates a temporary
15
+ file with the diff content and uses the 'git apply' command to apply the changes.
16
+
17
+ Args:
18
+ git_diff (str): A string containing the git diff to be applied.
19
+
20
+ Note:
21
+ This function assumes that the git command-line tool is available in the system path.
22
+ It uses the --ignore-whitespace and --ignore-space-change options with 'git apply'
23
+ to handle potential whitespace issues.
24
+ """
25
+
26
+ user_codebase_dir = os.environ.get("ZIYA_USER_CODEBASE_DIR")
27
+ if not user_codebase_dir:
28
+ raise ValueError("ZIYA_USER_CODEBASE_DIR environment variable is not set")
29
+
30
+ # Create a temporary file with the diff content and a timestamp
31
+ timestamp = int(time.time() * 1000) # Get current timestamp in milliseconds
32
+ temp_file = os.path.join(user_codebase_dir, f'temp_{timestamp}.diff')
33
+
34
+ with open(temp_file, 'w', newline='\n') as f:
35
+ f.write(git_diff)
36
+ # need to add a newline at the end of the file of git apply will fail
37
+ f.write("\n")
38
+ logger.info(f"Created temporary diff file: {temp_file}")
39
+
40
+ try:
41
+ # Apply the changes using git apply
42
+ cmd = ['git', 'apply', '--verbose', '--ignore-whitespace', '--ignore-space-change', temp_file]
43
+ logger.info(f"Executing command: {' '.join(cmd)}")
44
+ result = subprocess.run(cmd, capture_output=True, text=True, cwd=user_codebase_dir, check=True)
45
+
46
+ logger.info(f"Git apply stdout: {result.stdout}")
47
+ logger.error(f"Git apply stderr: {result.stderr}")
48
+ logger.info(f"Git apply return code: {result.returncode}")
49
+
50
+ except Exception as e:
51
+ logger.error(f"Error applying changes: {str(e)}", exc_info=True)
52
+ raise
53
+ finally:
54
+ os.remove(temp_file)
55
+
56
+ def correct_git_diff(git_diff: str) -> str:
57
+ """
58
+ Corrects the hunk headers in a git diff string by recalculating the line counts and
59
+ adjusting the starting line numbers in the new file, considering the cumulative effect of
60
+ previous hunks.
61
+
62
+ The function assumes that the `start_line_old` values in the hunk headers are correct,
63
+ but the line counts and `start_line_new` may be incorrect due to manual edits or errors.
64
+
65
+ Parameters:
66
+ git_diff (str): The git diff string to be corrected. It may contain multiple hunks
67
+ and incorrect hunk headers.
68
+
69
+ Returns:
70
+ str: The git diff string with corrected hunk headers.
71
+
72
+ The function works by parsing the diff, recalculating the line counts for each hunk,
73
+ adjusting the `start_line_new` values based on the cumulative changes from previous hunks,
74
+ and reconstructing the diff with corrected hunk headers.
75
+
76
+ Notes:
77
+ - The diff is expected to be in unified diff format.
78
+ - Lines starting with '+++', '---', or other file headers are not treated as additions or deletions.
79
+ - Context lines are lines that do not start with '+', '-', or '@@'.
80
+ - All lines in the hunk (including empty lines) are considered in the counts.
81
+
82
+ """
83
+ # Split the diff into lines
84
+ lines = git_diff.split('\n')
85
+
86
+ corrected_lines = []
87
+ line_index = 0
88
+
89
+ # Keep track of the cumulative line number adjustments
90
+ cumulative_line_offset = 0
91
+
92
+
93
+ while line_index < len(lines):
94
+ line = lines[line_index]
95
+ hunk_match = HUNK_HEADER_REGEX.match(line)
96
+
97
+ if hunk_match:
98
+ # Process the hunk
99
+ corrected_hunk_header, hunk_lines, line_index, line_offset = _process_hunk(
100
+ lines, line_index, cumulative_line_offset
101
+ )
102
+
103
+ # Update cumulative_line_offset
104
+ cumulative_line_offset += line_offset
105
+
106
+ # Append corrected hunk header and hunk lines
107
+ corrected_lines.append(corrected_hunk_header)
108
+ corrected_lines.extend(hunk_lines)
109
+ else:
110
+ # For non-hunk header lines, just append them
111
+ corrected_lines.append(line)
112
+ line_index += 1
113
+
114
+ # Join the corrected lines back into a string
115
+ corrected_diff = '\n'.join(corrected_lines)
116
+ return corrected_diff
117
+
118
+ def _process_hunk(lines: list, start_index: int, cumulative_line_offset: int):
119
+ """
120
+ Processes a single hunk starting at start_index in lines, recalculates the line counts,
121
+ and returns the corrected hunk header, hunk lines, and the updated index after the hunk.
122
+
123
+ Parameters:
124
+ lines (list): The list of lines from the diff.
125
+ start_index (int): The index in lines where the hunk header is located.
126
+ cumulative_line_offset (int): The cumulative line offset from previous hunks.
127
+
128
+ Returns:
129
+ tuple:
130
+ - corrected_hunk_header (str): The corrected hunk header.
131
+ - hunk_lines (list): The list of lines in the hunk (excluding the hunk header).
132
+ - end_index (int): The index in lines after the hunk.
133
+ - line_offset (int): The line offset caused by this hunk (to adjust future hunks).
134
+
135
+ The function reads the hunk lines, counts the number of lines in the original and new files,
136
+ and adjusts the starting line number in the new file based on cumulative changes.
137
+ """
138
+
139
+ line_index = start_index
140
+ hunk_header_line = lines[line_index]
141
+ hunk_match = HUNK_HEADER_REGEX.match(hunk_header_line)
142
+
143
+ # Extract the starting line numbers from the hunk header
144
+ start_line_old = int(hunk_match.group(1))
145
+
146
+ # Initialize counts for recalculation
147
+ actual_count_old = 0
148
+ actual_count_new = 0
149
+
150
+ # Move to the next line after the hunk header
151
+ line_index += 1
152
+
153
+ hunk_lines = []
154
+
155
+ # Collect hunk lines until the next hunk header or end of diff
156
+ while line_index < len(lines):
157
+ hunk_line = lines[line_index]
158
+ if HUNK_HEADER_REGEX.match(hunk_line):
159
+ break
160
+ else:
161
+ hunk_lines.append(hunk_line)
162
+ line_index += 1
163
+
164
+ # Now process hunk_lines to calculate counts
165
+ for hunk_line in hunk_lines:
166
+ if hunk_line.startswith('+') and not hunk_line.startswith('+++'):
167
+ actual_count_new += 1
168
+ elif hunk_line.startswith('-') and not hunk_line.startswith('---'):
169
+ actual_count_old += 1
170
+ else:
171
+ # Context line (unchanged line)
172
+ actual_count_old += 1
173
+ actual_count_new += 1
174
+
175
+ # Adjust start_line_new considering previous line offsets
176
+ corrected_start_line_new = start_line_old + cumulative_line_offset
177
+
178
+ # Calculate line offset for subsequent hunks
179
+ line_offset = actual_count_new - actual_count_old
180
+
181
+ # Reconstruct the corrected hunk header
182
+ corrected_hunk_header = _format_hunk_header(
183
+ start_line_old, actual_count_old, corrected_start_line_new, actual_count_new
184
+ )
185
+
186
+ return corrected_hunk_header, hunk_lines, line_index, line_offset
187
+
188
+ def _format_hunk_header(start_old: int, count_old: int, start_new: int, count_new: int) -> str:
189
+ """
190
+ Formats the hunk header according to git diff syntax, omitting counts when they are 1.
191
+
192
+ Parameters:
193
+ start_old (int): Starting line number in the original file.
194
+ count_old (int): Number of lines in the hunk in the original file.
195
+ start_new (int): Starting line number in the new file.
196
+ count_new (int): Number of lines in the hunk in the new file.
197
+
198
+ Returns:
199
+ str: The formatted hunk header.
200
+
201
+ The hunk header format is:
202
+ @@ -start_old[,count_old] +start_new[,count_new] @@
203
+
204
+ If count_old or count_new is 1, the count is omitted.
205
+ """
206
+ # Omit counts when they are equal to 1
207
+ old_part = f'-{start_old}'
208
+ if count_old != 1:
209
+ old_part += f',{count_old}'
210
+ new_part = f'+{start_new}'
211
+ if count_new != 1:
212
+ new_part += f',{count_new}'
213
+ return f'@@ {old_part} {new_part} @@'
214
+
215
+
216
+
217
+ if __name__ == '__main__':
218
+ # TODO: Create unit test and move these code to unit test
219
+ diff = """\
220
+ diff --git a/file.txt b/file.txt
221
+ index e69de29..4b825dc 100644
222
+ --- a/file.txt
223
+ +++ b/file.txt
224
+ @@ -1,5 +1,5 @@
225
+ Line one
226
+ +Line two
227
+ Line three
228
+ Line four
229
+ Line five
230
+ @@ -10,2 +10,2 @@
231
+ Line ten
232
+ -Line eleven
233
+ +Line eleven modified"""
234
+ print(correct_git_diff(diff))
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "ziya"
3
- version = "0.1.41"
3
+ version = "0.1.42"
4
4
  description = ""
5
5
  authors = ["Vishnu Krishnaprasad <vishnukool@gmail.com>"]
6
6
  readme = "README.md"
@@ -18,6 +18,7 @@ tiktoken = "^0.8.0"
18
18
  boto3 = "^1.34.88"
19
19
  langchain-aws = ">=0.2,<0.3"
20
20
  langchain = ">=0.3,<0.4"
21
+ langgraph = ">=0.2,<0.3"
21
22
  langchainhub = ">=0.1.15"
22
23
  langchain-anthropic = ">=0.2,<0.3"
23
24
  langchain-cli = ">=0.0.15"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/static/css/main.8af23da0.css",
4
- "main.js": "/static/js/main.69f6f0d1.js",
4
+ "main.js": "/static/js/main.fee8aad7.js",
5
5
  "static/media/fa-solid-900.ttf": "/static/media/fa-solid-900.bacd5de623fb563b961a.ttf",
6
6
  "static/media/fa-brands-400.ttf": "/static/media/fa-brands-400.60127e352b7a11f7f1bc.ttf",
7
7
  "static/media/fa-solid-900.woff2": "/static/media/fa-solid-900.4d986b00ff9ca3828fbd.woff2",
@@ -12,10 +12,10 @@
12
12
  "static/media/fa-v4compatibility.woff2": "/static/media/fa-v4compatibility.cf7f5903d06b79ad60f1.woff2",
13
13
  "index.html": "/index.html",
14
14
  "main.8af23da0.css.map": "/static/css/main.8af23da0.css.map",
15
- "main.69f6f0d1.js.map": "/static/js/main.69f6f0d1.js.map"
15
+ "main.fee8aad7.js.map": "/static/js/main.fee8aad7.js.map"
16
16
  },
17
17
  "entrypoints": [
18
18
  "static/css/main.8af23da0.css",
19
- "static/js/main.69f6f0d1.js"
19
+ "static/js/main.fee8aad7.js"
20
20
  ]
21
21
  }
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Ziya - Code Assistant</title><link rel="icon" href="/favicon.ico" type="image/x-icon"><script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script><script>window.enableCodeApply="{{ enable_code_apply | lower }}"</script><script defer="defer" src="/static/js/main.fee8aad7.js"></script><link href="/static/css/main.8af23da0.css" rel="stylesheet"></head><body><div id="root"></div></body></html>