jarvis-ai-assistant 0.1.104__py3-none-any.whl → 0.1.105__py3-none-any.whl

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 jarvis-ai-assistant might be problematic. Click here for more details.

Files changed (62) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/agent.py +124 -67
  3. jarvis/jarvis_code_agent/code_agent.py +133 -22
  4. jarvis/jarvis_code_agent/patch.py +4 -7
  5. jarvis/jarvis_code_agent/relevant_files.py +163 -72
  6. jarvis/jarvis_codebase/main.py +36 -15
  7. jarvis/jarvis_lsp/base.py +143 -0
  8. jarvis/jarvis_lsp/cpp.py +134 -0
  9. jarvis/jarvis_lsp/go.py +140 -0
  10. jarvis/jarvis_lsp/python.py +135 -0
  11. jarvis/jarvis_lsp/registry.py +234 -0
  12. jarvis/jarvis_lsp/rust.py +142 -0
  13. jarvis/jarvis_platform/__init__.py +3 -0
  14. jarvis/{models → jarvis_platform}/ai8.py +1 -1
  15. jarvis/{models → jarvis_platform}/kimi.py +1 -1
  16. jarvis/{models → jarvis_platform}/ollama.py +1 -1
  17. jarvis/{models → jarvis_platform}/openai.py +1 -1
  18. jarvis/{models → jarvis_platform}/oyi.py +1 -1
  19. jarvis/{models → jarvis_platform}/registry.py +11 -11
  20. jarvis/{jarvis_platform → jarvis_platform_manager}/main.py +1 -1
  21. jarvis/jarvis_rag/main.py +6 -6
  22. jarvis/jarvis_smart_shell/main.py +3 -3
  23. jarvis/jarvis_tools/__init__.py +0 -0
  24. jarvis/{tools → jarvis_tools}/ask_user.py +1 -1
  25. jarvis/{tools → jarvis_tools}/code_review.py +34 -8
  26. jarvis/jarvis_tools/create_code_agent.py +115 -0
  27. jarvis/{tools → jarvis_tools}/create_sub_agent.py +1 -1
  28. jarvis/jarvis_tools/deep_thinking.py +160 -0
  29. jarvis/jarvis_tools/deep_thinking_agent.py +146 -0
  30. jarvis/{tools → jarvis_tools}/git_commiter.py +2 -2
  31. jarvis/jarvis_tools/lsp_find_definition.py +134 -0
  32. jarvis/jarvis_tools/lsp_find_references.py +111 -0
  33. jarvis/jarvis_tools/lsp_get_diagnostics.py +121 -0
  34. jarvis/jarvis_tools/lsp_get_document_symbols.py +87 -0
  35. jarvis/jarvis_tools/lsp_prepare_rename.py +130 -0
  36. jarvis/jarvis_tools/lsp_validate_edit.py +141 -0
  37. jarvis/{tools → jarvis_tools}/methodology.py +6 -1
  38. jarvis/{tools → jarvis_tools}/registry.py +6 -5
  39. jarvis/{tools → jarvis_tools}/search.py +2 -2
  40. jarvis/utils.py +68 -25
  41. {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.105.dist-info}/METADATA +21 -10
  42. jarvis_ai_assistant-0.1.105.dist-info/RECORD +62 -0
  43. {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.105.dist-info}/entry_points.txt +4 -4
  44. jarvis/models/__init__.py +0 -3
  45. jarvis/tools/create_code_test_agent.py +0 -115
  46. jarvis/tools/create_ctags_agent.py +0 -164
  47. jarvis/tools/find_in_codebase.py +0 -78
  48. jarvis_ai_assistant-0.1.104.dist-info/RECORD +0 -50
  49. /jarvis/{models → jarvis_platform}/base.py +0 -0
  50. /jarvis/{tools → jarvis_platform_manager}/__init__.py +0 -0
  51. /jarvis/{tools → jarvis_tools}/ask_codebase.py +0 -0
  52. /jarvis/{tools → jarvis_tools}/base.py +0 -0
  53. /jarvis/{tools → jarvis_tools}/chdir.py +0 -0
  54. /jarvis/{tools → jarvis_tools}/execute_shell.py +0 -0
  55. /jarvis/{tools → jarvis_tools}/file_operation.py +0 -0
  56. /jarvis/{tools → jarvis_tools}/rag.py +0 -0
  57. /jarvis/{tools → jarvis_tools}/read_code.py +0 -0
  58. /jarvis/{tools → jarvis_tools}/read_webpage.py +0 -0
  59. /jarvis/{tools → jarvis_tools}/select_code_files.py +0 -0
  60. {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.105.dist-info}/LICENSE +0 -0
  61. {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.105.dist-info}/WHEEL +0 -0
  62. {jarvis_ai_assistant-0.1.104.dist-info → jarvis_ai_assistant-0.1.105.dist-info}/top_level.txt +0 -0
@@ -1,115 +0,0 @@
1
- from typing import Dict, Any
2
- from jarvis.agent import Agent
3
- from jarvis.tools.registry import ToolRegistry
4
- import subprocess
5
-
6
- class TestAgentTool:
7
- name = "create_code_test_agent"
8
- description = "Create testing agent for specific commit analysis"
9
- parameters = {
10
- "type": "object",
11
- "properties": {
12
- "name": {
13
- "type": "string",
14
- "description": "Identifier for the test agent"
15
- },
16
- "test_scope": {
17
- "type": "string",
18
- "enum": ["unit", "integration", "e2e"],
19
- "description": "Testing focus area"
20
- },
21
- "commit_sha": {
22
- "type": "string",
23
- "description": "Commit SHA to analyze"
24
- }
25
- },
26
- "required": ["name", "test_scope", "commit_sha"]
27
- }
28
-
29
- def execute(self, args: Dict) -> Dict[str, Any]:
30
- """Execute commit-focused testing"""
31
- try:
32
- if not self._is_valid_commit(args["commit_sha"]):
33
- return {
34
- "success": False,
35
- "stdout": "",
36
- "stderr": f"Invalid commit SHA: {args['commit_sha']}"
37
- }
38
-
39
- tool_registry = ToolRegistry()
40
- tool_registry.dont_use_tools(["create_code_test_agent"])
41
-
42
- test_agent = Agent(
43
- system_prompt=self._build_system_prompt(args),
44
- name=f"TestAgent({args['name']})",
45
- is_sub_agent=True,
46
- tool_registry=tool_registry
47
- )
48
-
49
- result = test_agent.run(
50
- f"Analyze and test changes in commit {args['commit_sha'].strip()}"
51
- )
52
-
53
- return {
54
- "success": True,
55
- "stdout": result,
56
- "stderr": ""
57
- }
58
- except Exception as e:
59
- return {
60
- "success": False,
61
- "stdout": "",
62
- "stderr": f"Commit testing failed: {str(e)}"
63
- }
64
-
65
- def _is_valid_commit(self, commit_sha: str) -> bool:
66
- """Validate commit exists in repository"""
67
- try:
68
- cmd = f"git cat-file -t {commit_sha}"
69
- result = subprocess.run(
70
- cmd.split(),
71
- capture_output=True,
72
- text=True,
73
- check=True
74
- )
75
- return "commit" in result.stdout
76
- except subprocess.CalledProcessError:
77
- return False
78
-
79
- def _build_system_prompt(self, args: Dict) -> str:
80
- return """You are a Commit Testing Specialist. Follow this protocol:
81
-
82
- 【Testing Protocol】
83
- 1. Commit Analysis:
84
- - Analyze code changes in target commit
85
- - Identify modified components
86
- - Assess change impact scope
87
-
88
- 2. Test Strategy:
89
- - Determine required test types
90
- - Verify backward compatibility
91
- - Check interface contracts
92
-
93
- 3. Test Execution:
94
- - Execute relevant test suites
95
- - Compare pre/post-commit behavior
96
- - Validate cross-component interactions
97
-
98
- 4. Reporting:
99
- - List affected modules
100
- - Risk assessment matrix
101
- - Performance impact analysis
102
- - Security implications
103
-
104
- 【Output Requirements】
105
- - Test coverage analysis
106
- - Behavioral change summary
107
- - Critical issues prioritized
108
- - Actionable recommendations
109
-
110
- 【Key Principles】
111
- 1. Focus on delta changes
112
- 2. Maintain test isolation
113
- 3. Preserve historical baselines
114
- 4. Automate verification steps
115
- 5. Document test evidence"""
@@ -1,164 +0,0 @@
1
- from typing import Dict, Any
2
- import subprocess
3
- import os
4
- from pathlib import Path
5
-
6
- import yaml
7
- from jarvis.agent import Agent
8
- from jarvis.tools.registry import ToolRegistry
9
- from jarvis.utils import OutputType, PrettyOutput, get_multiline_input, init_env
10
-
11
- ctags_system_prompt = """You are a Ctags Expert Agent specializing in code analysis using Exuberant Ctags. Follow this protocol:
12
-
13
- 【OUTPUT OPTIMIZATION】
14
- 1. Filter with grep:
15
- ctags -x <symbol> | grep -E 'pattern'
16
- 2. Limit output lines:
17
- head -n 20
18
- 3. Context preview:
19
- grep -A 3 -B 3 <line> <file>
20
- 4. Column selection:
21
- cut -f 1,3
22
- 5. Sort and deduplicate:
23
- sort | uniq
24
-
25
- 【WORKFLOW】
26
- 1. REQUIREMENT ANALYSIS
27
- - Analyze query for symbols/patterns
28
- - Determine search scope
29
- - Select ctags options
30
- - Plan output filtering
31
-
32
- 2. TAGS MANAGEMENT
33
- - Generate/update tags file:
34
- ctags -R --languages=<lang> --exclude=<pattern>
35
- - Verify tags file integrity
36
- - Maintain tags file versioning
37
-
38
- 3. SYMBOL PROCESSING
39
- - Search symbols using:
40
- grep -n <symbol> tags
41
- ctags -x --<filter>
42
- - Analyze symbol relationships
43
- - Map symbol dependencies
44
- - Apply output filters:
45
- * Remove noise with grep -v
46
- * Highlight key fields with awk
47
- * Truncate long lines with cut
48
-
49
- 4. OUTPUT GENERATION
50
- - Format results as YAML
51
- - Include file paths and line numbers
52
- - Add symbol metadata
53
- - Limit to 20 key results
54
- - Exclude temporary files
55
- - Compress repetitive info
56
-
57
- 【COMMAND REFERENCE】
58
- 1. Generate Tags:
59
- ctags -R --fields=+nKSt --extras=+fq -V *
60
-
61
- 2. Search Patterns:
62
- ctags -x --c-types=f
63
- ctags -x --sort=no <symbol>
64
- ctags -x | grep '^main' | head -n 5
65
-
66
- 3. Language Specific:
67
- --languages=Python,Java,C++
68
- --python-kinds=-iv
69
-
70
- 4. Filtering:
71
- --exclude=.git
72
- --exclude=*.min.js
73
- ctags -x | grep -v '_test' # Exclude tests
74
-
75
- 【ERROR HANDLING】
76
- - Missing tags: Regenerate tags
77
- - Invalid symbols: Use fuzzy search
78
- - Encoding issues: Use --input-encoding
79
- - Large codebase: Limit scope
80
- - Output too long: Add head/grep filters
81
-
82
- 【NATURAL LANGUAGE PROCESSING】
83
- 1. Query Interpretation:
84
- - Identify key terms: "find", "locate", "list", "show"
85
- - Detect symbol types: class, function, variable
86
- - Recognize relationships: "calls", "inherits", "uses"
87
-
88
- 2. Query Types:
89
- - Location: "Where is X defined?"
90
- - References: "Who calls Y?"
91
- - Hierarchy: "Show subclasses of Z"
92
- - Impact: "What uses this module?"
93
-
94
- 3. Auto Command Mapping:
95
- | Query Pattern | Ctags Command |
96
- |------------------------------|------------------------------------|
97
- | Find definitions of X | ctags -x --<lang>-kinds=f | less |
98
- | List all functions in Y | ctags -x --filter='function' |
99
- | Show callers of Z | ctags --extra=+q -x | grep Z |
100
- | Find interface implementations| ctags -x --_traits=yes |
101
-
102
- 4. Context Handling:
103
- - Detect language from file extensions
104
- - Auto-detect project root
105
- - Apply language-specific filters
106
- - Choose appropriate output format:
107
- * Simple list for single results
108
- * Table for multiple entries
109
- * Tree view for hierarchies
110
- * JSON when programmatic access needed
111
-
112
- 【EXAMPLE QUERIES】
113
- 1. "Find all Python functions in src/ that use Redis"
114
- 2. "Show Java classes implementing PaymentService"
115
- 3. "List called methods in auth module"
116
- 4. "Where is User model defined?"
117
- 5. "What config files reference database settings?"
118
- """
119
-
120
- class CtagsTool:
121
- name = "create_ctags_agent"
122
- description = "Analyze code structure and symbols using natural language queries"
123
- parameters = {
124
- "type": "object",
125
- "properties": {
126
- "query": {
127
- "type": "string",
128
- "description": "Natural language description of code analysis needs"
129
- }
130
- },
131
- "required": ["query"]
132
- }
133
-
134
- def execute(self, args: Dict) -> Dict[str, Any]:
135
- """Execute code analysis based on natural language query"""
136
- try:
137
- tool_registry = ToolRegistry()
138
- tool_registry.use_tools(["execute_shell"])
139
-
140
- ctags_agent = Agent(
141
- system_prompt=ctags_system_prompt,
142
- name="Ctags Analysis Agent",
143
- is_sub_agent=True,
144
- tool_registry=tool_registry
145
- )
146
-
147
- analysis_request = f"""
148
- Analysis Request: {args['query']}
149
- Context: {args.get('context', {})}
150
- """
151
-
152
- result = ctags_agent.run(analysis_request)
153
-
154
- return {
155
- "success": True,
156
- "stdout": result,
157
- "stderr": ""
158
- }
159
- except Exception as e:
160
- return {
161
- "success": False,
162
- "stdout": "",
163
- "stderr": f"Analysis failed: {str(e)}"
164
- }
@@ -1,78 +0,0 @@
1
- from typing import Dict, Any
2
- from jarvis.jarvis_code_agent.file_select import select_files
3
- from jarvis.utils import OutputType, PrettyOutput, dont_use_local_model, find_git_root
4
- from jarvis.jarvis_codebase.main import CodeBase
5
-
6
- class FindInCodebaseTool:
7
- """Tool for searching files in codebase based on requirements"""
8
-
9
- name = "find_in_codebase"
10
- description = "Search and identify relevant code files in the codebase based on requirements description, using semantic search"
11
- parameters = {
12
- "type": "object",
13
- "properties": {
14
- "query": {
15
- "type": "string",
16
- "description": "The search query or requirement description"
17
- },
18
- "top_k": {
19
- "type": "integer",
20
- "description": "Maximum number of results to return",
21
- "default": 20
22
- }
23
- },
24
- "required": ["query"]
25
- }
26
-
27
- @staticmethod
28
- def check() -> bool:
29
- return not dont_use_local_model()
30
-
31
- def execute(self, args: Dict) -> Dict[str, Any]:
32
- """Execute the search
33
-
34
- Args:
35
- args: Dictionary containing:
36
- - query: Search query string
37
- - top_k: Maximum number of results (optional)
38
-
39
- Returns:
40
- Dict containing:
41
- - success: Boolean indicating success
42
- - stdout: Search results in YAML format
43
- - stderr: Error message if any
44
- """
45
- try:
46
- query = args["query"]
47
- top_k = args.get("top_k", 20)
48
-
49
- root_dir = find_git_root()
50
-
51
- codebase = CodeBase(root_dir)
52
-
53
- # Search for relevant files
54
- results = codebase.search_similar(query, top_k)
55
-
56
- results = select_files(results, root_dir)
57
-
58
- if not results:
59
- return {
60
- "success": True,
61
- "stdout": "files: []\n",
62
- "stderr": "No relevant files found"
63
- }
64
-
65
-
66
- return {
67
- "success": True,
68
- "stdout": "\n".join(results),
69
- "stderr": ""
70
- }
71
-
72
- except Exception as e:
73
- PrettyOutput.print(f"Search error: {str(e)}", OutputType.ERROR)
74
- return {
75
- "success": False,
76
- "stdout": "",
77
- "stderr": f"Failed to execute search: {str(e)}"
78
- }
@@ -1,50 +0,0 @@
1
- jarvis/__init__.py,sha256=16lJ0KXB1-quQt7lnzbfKIeCnmBrimAGb3_CCqEl5Co,51
2
- jarvis/agent.py,sha256=6r5_pv3sumUrUCd2ntWVGg7yp1KTA3JCzz2IKH582k0,20010
3
- jarvis/utils.py,sha256=x4wHSwoZ8pz32RJkxpZ0XdwEjikX5idXnCXUdtO8PtE,20783
4
- jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- jarvis/jarvis_code_agent/code_agent.py,sha256=8dIiFPZiWOEyIBDWUrqAdtn9g7eFrvvcCGPx5S56Ngc,6757
6
- jarvis/jarvis_code_agent/file_select.py,sha256=KNxalhepCM2e-V__ca8ErmbXSXHP_1xmd0UEVWUXic8,8083
7
- jarvis/jarvis_code_agent/patch.py,sha256=7nv-5-cPgSXZ6xfb_tmuITbCWEMRF8rLIMlQkDd7odw,4147
8
- jarvis/jarvis_code_agent/relevant_files.py,sha256=mlJuj65TZ9atgTi85W3BW_0GcFNDNyf6JHe9yugHIr4,3965
9
- jarvis/jarvis_codebase/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- jarvis/jarvis_codebase/main.py,sha256=XjqIdo_vVuVoPT8HcyuuymXk4lX5mzxOk0teRZ7Mhic,36403
11
- jarvis/jarvis_platform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- jarvis/jarvis_platform/main.py,sha256=LxpOKy7wGaBxgeR5bCG5m_CoYTHVQ9Vd23J-6SE2oUU,4976
13
- jarvis/jarvis_rag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- jarvis/jarvis_rag/main.py,sha256=00XeKbI6Qkd4NKRvtRLxClbCDrTJYot1bwIxWcui58k,33201
15
- jarvis/jarvis_smart_shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- jarvis/jarvis_smart_shell/main.py,sha256=yWsD9Td81sr8I1pkimlDxucDPaLWb95NuCo4LCGnT7M,3947
17
- jarvis/models/__init__.py,sha256=mrOt67nselz_H1gX9wdAO4y2DY5WPXzABqJbr5Des8k,63
18
- jarvis/models/ai8.py,sha256=QwpcdvOAixFC4BOI2AsWC9290WqcrLj6lQOiT0A3Id4,11994
19
- jarvis/models/base.py,sha256=nQ-rsJL1Z-gMev3TPoY7tYdwxhCJY8LG6_gtJ-maiW0,2181
20
- jarvis/models/kimi.py,sha256=2x60DVjX0ph2fJjKj_NICeb0q4qVBihuc_laCpH94eo,15759
21
- jarvis/models/ollama.py,sha256=WiUYkstaqFjiawXfuJs2GQUa3l3Y2ZWqhnKDBcF7rUQ,5672
22
- jarvis/models/openai.py,sha256=SAbVIvFO4q6bRl8zlDaH5bKbrP0T_zd1WzlbkPCvkwg,4121
23
- jarvis/models/oyi.py,sha256=nNBe-A0cOZ6vuGrnrUjeuC3N3oYRQeFazTUpFrAmx2w,15080
24
- jarvis/models/registry.py,sha256=nDYyGzT2uGSxbEbqp1JhuXa7bXeiMaX4hPAFAg74eyA,8683
25
- jarvis/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- jarvis/tools/ask_codebase.py,sha256=1mLe9CHDU-NFJHmu3mxrWuA4IiHqQyum2ga31P3hLzU,2991
27
- jarvis/tools/ask_user.py,sha256=k0PcMqvCkf_W9kMWnFsgcFefVf1A5DhpM6WVXFMdhdQ,1823
28
- jarvis/tools/base.py,sha256=c0DMoDDPxmsqUYJR989zgUs7nIYRY6GWBrAdusIZKjc,656
29
- jarvis/tools/chdir.py,sha256=A53BNXFB9tvwoV_cxW_LpF_DfxANgAEJ8rjikTaTa-I,1813
30
- jarvis/tools/code_review.py,sha256=IN9eM_Zh-k7dprvnScrUz4jTqcdkkszMeXa6qIItE3w,7140
31
- jarvis/tools/create_code_test_agent.py,sha256=SqdIpymoDUX7L6hh5vqnZLyeVwW-QmLfytU-xkG7Gag,3462
32
- jarvis/tools/create_ctags_agent.py,sha256=VAZUcst9DPCO6b_VP72geBZljWjfied09EPgSokYA0E,4878
33
- jarvis/tools/create_sub_agent.py,sha256=0lZDtYRFjr9C9xtBKV-sxWfhK0TX-cxAHj3Zez76A4s,2853
34
- jarvis/tools/execute_shell.py,sha256=bawfof8bUg3f9bjyCSifLa9bU-hkNoNOuos22uZffdg,2564
35
- jarvis/tools/file_operation.py,sha256=-1U_J5SEuBjRylzEl7wvCfjspNv6aA49UvFHLNQ3bJU,4098
36
- jarvis/tools/find_in_codebase.py,sha256=bxILvDox2oGd0XZ-gvfWjH7Yj4ciyMYC3VJI3aWiMw8,2455
37
- jarvis/tools/git_commiter.py,sha256=7kJhtTyu09Cp4VP_IDKRrKXIKxQXkBF1drCgPkYzk6M,2549
38
- jarvis/tools/methodology.py,sha256=yZldtjPZpNq8eGJ6IbhwHB0v3cFUtfPd14r7LDCo5IU,5622
39
- jarvis/tools/rag.py,sha256=2fQHqc4bw8JM-OxGTsHobLIOTo8Mip3rdtJCmAoY8XU,4952
40
- jarvis/tools/read_code.py,sha256=5DGmeXTgumAiG0RP1xB4sF4NdmBm5BEGjRRlIBzjGnQ,4002
41
- jarvis/tools/read_webpage.py,sha256=JCReSXhkDHDkQ606sZYIKG1Itlprjpmu1sSbF-Ed-jI,2478
42
- jarvis/tools/registry.py,sha256=81Q_x9BJV6SIfPWURq4uzXxP2JCiFeaGbGM1IO5FSy4,11658
43
- jarvis/tools/search.py,sha256=IciWpdKoa03Kl5J1SdblI2VhkUBoIRuLHHM2X4KlMWE,9209
44
- jarvis/tools/select_code_files.py,sha256=bjJGwCNw0Ue_8jW60K1gcy1rUgKqoHihicu5SS58WNk,1890
45
- jarvis_ai_assistant-0.1.104.dist-info/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
46
- jarvis_ai_assistant-0.1.104.dist-info/METADATA,sha256=_AFsS0M4n0yuT_7xZfUpB8UtgS0gYm-wfcGLxgnTRDY,13594
47
- jarvis_ai_assistant-0.1.104.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
48
- jarvis_ai_assistant-0.1.104.dist-info/entry_points.txt,sha256=9wmOanjcRugTjJWeDg4lKiUtePaymFUOIi-8Gm2azCU,502
49
- jarvis_ai_assistant-0.1.104.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
50
- jarvis_ai_assistant-0.1.104.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes