basic-open-agent-tools 1.3.0__tar.gz → 1.3.2__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.
Files changed (106) hide show
  1. basic_open_agent_tools-1.3.2/PKG-INFO +298 -0
  2. basic_open_agent_tools-1.3.2/README.md +188 -0
  3. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/pyproject.toml +11 -3
  4. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/__init__.py +1 -1
  5. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/helpers.py +10 -4
  6. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/todo/persistence.py +19 -10
  7. basic_open_agent_tools-1.3.2/src/basic_open_agent_tools.egg-info/PKG-INFO +298 -0
  8. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools.egg-info/requires.txt +2 -2
  9. basic_open_agent_tools-1.3.0/PKG-INFO +0 -435
  10. basic_open_agent_tools-1.3.0/README.md +0 -325
  11. basic_open_agent_tools-1.3.0/src/basic_open_agent_tools.egg-info/PKG-INFO +0 -435
  12. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/LICENSE +0 -0
  13. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/setup.cfg +0 -0
  14. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/_logging.py +0 -0
  15. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/archive/__init__.py +0 -0
  16. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/archive/compression.py +0 -0
  17. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/archive/formats.py +0 -0
  18. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/color/__init__.py +0 -0
  19. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/color/analysis.py +0 -0
  20. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/color/conversion.py +0 -0
  21. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/color/generation.py +0 -0
  22. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/confirmation.py +0 -0
  23. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/crypto/__init__.py +0 -0
  24. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/crypto/encoding.py +0 -0
  25. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/crypto/generation.py +0 -0
  26. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/crypto/hashing.py +0 -0
  27. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/data/__init__.py +0 -0
  28. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/data/config_processing.py +0 -0
  29. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/data/csv_tools.py +0 -0
  30. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/data/json_tools.py +0 -0
  31. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/data/validation.py +0 -0
  32. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/__init__.py +0 -0
  33. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/business.py +0 -0
  34. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/formatting.py +0 -0
  35. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/info.py +0 -0
  36. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/operations.py +0 -0
  37. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/ranges.py +0 -0
  38. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/timezone.py +0 -0
  39. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/datetime/validation.py +0 -0
  40. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/decorators.py +0 -0
  41. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/diagrams/__init__.py +0 -0
  42. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/diagrams/mermaid.py +0 -0
  43. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/diagrams/plantuml.py +0 -0
  44. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/excel/__init__.py +0 -0
  45. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/excel/formatting.py +0 -0
  46. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/excel/reading.py +0 -0
  47. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/excel/writing.py +0 -0
  48. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/exceptions.py +0 -0
  49. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/file_system/__init__.py +0 -0
  50. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/file_system/editor.py +0 -0
  51. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/file_system/info.py +0 -0
  52. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/file_system/operations.py +0 -0
  53. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/file_system/tree.py +0 -0
  54. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/file_system/validation.py +0 -0
  55. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/html/__init__.py +0 -0
  56. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/html/generation.py +0 -0
  57. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/html/parsing.py +0 -0
  58. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/image/__init__.py +0 -0
  59. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/image/manipulation.py +0 -0
  60. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/image/reading.py +0 -0
  61. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/logging/__init__.py +0 -0
  62. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/logging/parsing.py +0 -0
  63. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/logging/rotation.py +0 -0
  64. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/logging/structured.py +0 -0
  65. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/markdown/__init__.py +0 -0
  66. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/markdown/generation.py +0 -0
  67. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/markdown/parsing.py +0 -0
  68. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/network/__init__.py +0 -0
  69. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/network/dns.py +0 -0
  70. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/network/http_client.py +0 -0
  71. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/pdf/__init__.py +0 -0
  72. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/pdf/creation.py +0 -0
  73. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/pdf/manipulation.py +0 -0
  74. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/pdf/parsing.py +0 -0
  75. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/powerpoint/__init__.py +0 -0
  76. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/powerpoint/reading.py +0 -0
  77. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/powerpoint/writing.py +0 -0
  78. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/system/__init__.py +0 -0
  79. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/system/environment.py +0 -0
  80. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/system/info.py +0 -0
  81. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/system/processes.py +0 -0
  82. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/system/runtime.py +0 -0
  83. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/system/shell.py +0 -0
  84. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/text/__init__.py +0 -0
  85. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/text/processing.py +0 -0
  86. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/todo/__init__.py +0 -0
  87. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/todo/operations.py +0 -0
  88. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/todo/validation.py +0 -0
  89. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/types.py +0 -0
  90. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/utilities/__init__.py +0 -0
  91. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/utilities/debugging.py +0 -0
  92. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/utilities/timing.py +0 -0
  93. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/word/__init__.py +0 -0
  94. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/word/reading.py +0 -0
  95. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/word/styles.py +0 -0
  96. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/word/writing.py +0 -0
  97. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/xml/__init__.py +0 -0
  98. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/xml/authoring.py +0 -0
  99. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/xml/parsing.py +0 -0
  100. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/xml/transformation.py +0 -0
  101. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools/xml/validation.py +0 -0
  102. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools.egg-info/SOURCES.txt +0 -0
  103. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools.egg-info/dependency_links.txt +0 -0
  104. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/src/basic_open_agent_tools.egg-info/top_level.txt +0 -0
  105. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/tests/test_confirmation.py +0 -0
  106. {basic_open_agent_tools-1.3.0 → basic_open_agent_tools-1.3.2}/tests/test_helpers_new_modules.py +0 -0
@@ -0,0 +1,298 @@
1
+ Metadata-Version: 2.4
2
+ Name: basic-open-agent-tools
3
+ Version: 1.3.2
4
+ Summary: An open foundational toolkit providing essential components for building AI agents with minimal dependencies for local (non-HTTP/API) actions.
5
+ Author-email: Open Agent Tools <unseriousai@gmail.com>
6
+ Project-URL: Homepage, https://github.com/open-agent-tools/basic-open-agent-tools
7
+ Project-URL: Documentation, https://github.com/open-agent-tools/basic-open-agent-tools#readme
8
+ Project-URL: Repository, https://github.com/open-agent-tools/basic-open-agent-tools
9
+ Project-URL: Issues, https://github.com/open-agent-tools/basic-open-agent-tools/issues
10
+ Keywords: ai,agents,toolkit,automation,local-tools
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Natural Language :: English
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Communications :: Chat
23
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
24
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
25
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
26
+ Classifier: Typing :: Typed
27
+ Requires-Python: >=3.9
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Provides-Extra: system
31
+ Requires-Dist: psutil>=5.9.0; extra == "system"
32
+ Provides-Extra: pdf
33
+ Requires-Dist: PyPDF2>=3.0.0; extra == "pdf"
34
+ Requires-Dist: reportlab>=4.0.0; extra == "pdf"
35
+ Provides-Extra: xml
36
+ Requires-Dist: lxml>=4.9.0; extra == "xml"
37
+ Requires-Dist: defusedxml>=0.7.1; extra == "xml"
38
+ Provides-Extra: word
39
+ Requires-Dist: python-docx>=0.8.11; extra == "word"
40
+ Provides-Extra: excel
41
+ Requires-Dist: openpyxl>=3.1.0; extra == "excel"
42
+ Provides-Extra: powerpoint
43
+ Requires-Dist: python-pptx>=0.6.21; extra == "powerpoint"
44
+ Provides-Extra: image
45
+ Requires-Dist: Pillow>=10.0.0; extra == "image"
46
+ Provides-Extra: data
47
+ Requires-Dist: pyyaml>=6.0.0; extra == "data"
48
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "data"
49
+ Requires-Dist: tomli-w>=1.0.0; extra == "data"
50
+ Provides-Extra: all
51
+ Requires-Dist: psutil>=5.9.0; extra == "all"
52
+ Requires-Dist: PyPDF2>=3.0.0; extra == "all"
53
+ Requires-Dist: reportlab>=4.0.0; extra == "all"
54
+ Requires-Dist: lxml>=4.9.0; extra == "all"
55
+ Requires-Dist: defusedxml>=0.7.1; extra == "all"
56
+ Requires-Dist: python-docx>=0.8.11; extra == "all"
57
+ Requires-Dist: openpyxl>=3.1.0; extra == "all"
58
+ Requires-Dist: python-pptx>=0.6.21; extra == "all"
59
+ Requires-Dist: Pillow>=10.0.0; extra == "all"
60
+ Requires-Dist: pyyaml>=6.0.0; extra == "all"
61
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "all"
62
+ Requires-Dist: tomli-w>=1.0.0; extra == "all"
63
+ Provides-Extra: strands
64
+ Requires-Dist: strands>=0.1.0; extra == "strands"
65
+ Requires-Dist: anthropic>=0.25.0; extra == "strands"
66
+ Requires-Dist: python-dotenv>=1.0.0; extra == "strands"
67
+ Provides-Extra: dev
68
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
69
+ Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
70
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
71
+ Requires-Dist: ruff>=0.1.0; extra == "dev"
72
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
73
+ Requires-Dist: pre-commit>=3.0.0; extra == "dev"
74
+ Requires-Dist: freezegun>=1.2.0; extra == "dev"
75
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "dev"
76
+ Requires-Dist: tomli-w>=1.0.0; extra == "dev"
77
+ Requires-Dist: pyyaml>=6.0.0; extra == "dev"
78
+ Requires-Dist: google-adk[eval]>=0.1.0; extra == "dev"
79
+ Requires-Dist: psutil>=5.9.0; extra == "dev"
80
+ Requires-Dist: PyPDF2>=3.0.0; extra == "dev"
81
+ Requires-Dist: reportlab>=4.0.0; extra == "dev"
82
+ Requires-Dist: lxml>=4.9.0; extra == "dev"
83
+ Requires-Dist: defusedxml>=0.7.1; extra == "dev"
84
+ Requires-Dist: python-docx>=0.8.11; extra == "dev"
85
+ Requires-Dist: openpyxl>=3.1.0; extra == "dev"
86
+ Requires-Dist: python-pptx>=0.6.21; extra == "dev"
87
+ Requires-Dist: Pillow>=10.0.0; extra == "dev"
88
+ Requires-Dist: strands>=0.1.0; extra == "dev"
89
+ Requires-Dist: anthropic>=0.25.0; extra == "dev"
90
+ Requires-Dist: python-dotenv>=1.0.0; extra == "dev"
91
+ Provides-Extra: test
92
+ Requires-Dist: pytest>=7.0.0; extra == "test"
93
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
94
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
95
+ Requires-Dist: freezegun>=1.2.0; extra == "test"
96
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11" and extra == "test"
97
+ Requires-Dist: tomli-w>=1.0.0; extra == "test"
98
+ Requires-Dist: pyyaml>=6.0.0; extra == "test"
99
+ Requires-Dist: google-adk[eval]>=0.1.0; extra == "test"
100
+ Requires-Dist: psutil>=5.9.0; extra == "test"
101
+ Requires-Dist: PyPDF2>=3.0.0; extra == "test"
102
+ Requires-Dist: reportlab>=4.0.0; extra == "test"
103
+ Requires-Dist: lxml>=4.9.0; extra == "test"
104
+ Requires-Dist: defusedxml>=0.7.1; extra == "test"
105
+ Requires-Dist: python-docx>=0.8.11; extra == "test"
106
+ Requires-Dist: openpyxl>=3.1.0; extra == "test"
107
+ Requires-Dist: python-pptx>=0.6.21; extra == "test"
108
+ Requires-Dist: Pillow>=10.0.0; extra == "test"
109
+ Dynamic: license-file
110
+
111
+ # basic-open-agent-tools
112
+
113
+ An open foundational toolkit providing essential components for building AI agents with minimal dependencies for local (non-HTTP/API) actions.
114
+
115
+ ## Installation
116
+
117
+ ```bash
118
+ pip install basic-open-agent-tools
119
+ ```
120
+
121
+ Or with UV:
122
+ ```bash
123
+ uv add basic-open-agent-tools
124
+ ```
125
+
126
+ ### Optional Dependencies
127
+
128
+ ```bash
129
+ pip install basic-open-agent-tools[all] # Everything
130
+ pip install basic-open-agent-tools[system] # Process management, system info
131
+ pip install basic-open-agent-tools[pdf] # PDF reading and creation
132
+ pip install basic-open-agent-tools[xml] # XML parsing and validation
133
+ pip install basic-open-agent-tools[word] # Word document operations
134
+ pip install basic-open-agent-tools[excel] # Excel spreadsheet operations
135
+ pip install basic-open-agent-tools[powerpoint] # PowerPoint presentations
136
+ pip install basic-open-agent-tools[image] # Image processing
137
+ pip install basic-open-agent-tools[data] # YAML and TOML support
138
+ ```
139
+
140
+ ## Quick Start
141
+
142
+ ```python
143
+ import basic_open_agent_tools as boat
144
+
145
+ # Essential tools for general-purpose agents (~23 tools)
146
+ tools = boat.load_essential()
147
+
148
+ # Pre-configured loadouts for specific roles
149
+ tools = boat.load_coder_loadout() # ~105 tools for development
150
+ tools = boat.load_docs_loadout() # ~130 tools for documentation
151
+ tools = boat.load_data_analyst_loadout() # ~115 tools for data analysis
152
+ tools = boat.load_web_publisher_loadout() # ~90 tools for web content
153
+ tools = boat.load_visual_designer_loadout() # ~60 tools for graphics
154
+ tools = boat.load_office_suite_loadout() # ~80 tools for Office work
155
+
156
+ # Or load everything
157
+ tools = boat.load_all_tools() # All 337 functions
158
+
159
+ # Use with any agent framework
160
+ from google.adk.agents import Agent
161
+ agent = Agent(tools=boat.load_coder_loadout())
162
+ ```
163
+
164
+ ## Available Modules
165
+
166
+ **21 modules** with **337 total functions** — all with `@strands_tool` decorator and Google ADK compatible signatures.
167
+
168
+ | Module | Count | Description |
169
+ |--------|------:|-------------|
170
+ | **Core Operations** | | |
171
+ | `file_system` | 19 | File/directory operations, tree generation |
172
+ | `text` | 10 | Text processing, case conversion, formatting |
173
+ | `data` | 23 | JSON, CSV, YAML, TOML processing and validation |
174
+ | `datetime` | 46 | Date/time operations, timezones, formatting, parsing |
175
+ | **Document Processing** | | |
176
+ | `excel` | 24 | Spreadsheet reading, writing, formatting, charts |
177
+ | `xml` | 24 | XML parsing, authoring, validation, transformation |
178
+ | `pdf` | 20 | PDF creation, reading, manipulation |
179
+ | `word` | 18 | Word document operations and formatting |
180
+ | `html` | 17 | HTML generation and parsing |
181
+ | `diagrams` | 16 | Mermaid and PlantUML diagram generation |
182
+ | `markdown` | 17 | Markdown generation, parsing, HTML conversion |
183
+ | `powerpoint` | 10 | PowerPoint presentation operations |
184
+ | **System & Network** | | |
185
+ | `system` | 19 | Shell commands, process management, environment |
186
+ | `network` | 4 | HTTP client, DNS lookup, port checking |
187
+ | `utilities` | 8 | Debugging, timing, performance tools |
188
+ | **Security & Data** | | |
189
+ | `crypto` | 14 | Hashing, encoding, UUID/token generation |
190
+ | `color` | 14 | Color conversion, palette generation, analysis |
191
+ | `image` | 12 | Image manipulation and metadata reading |
192
+ | `archive` | 9 | ZIP, TAR, GZIP, BZIP2, XZ compression |
193
+ | **Task Management** | | |
194
+ | `todo` | 8 | Task creation, validation, management |
195
+ | `logging` | 5 | Structured logging and log rotation |
196
+
197
+ ## Key Features
198
+
199
+ - **Agent-Friendly** — Simplified type signatures prevent "signature too complex" errors
200
+ - **Minimal Dependencies** — Pure Python core; optional deps only when needed
201
+ - **Modular** — Load only what you need
202
+ - **Multi-Framework** — Works with Google ADK, LangChain, Strands Agents, custom frameworks
203
+ - **Smart Confirmations** — Write/delete operations adapt to interactive, agent, or automation contexts
204
+ - **Pre-configured Loadouts** — 6 curated tool bundles optimized for specific use cases
205
+
206
+ ## Loadouts
207
+
208
+ Choose the right loadout for your agent's role to minimize token usage and maximize relevance:
209
+
210
+ | Loadout | Tools | Best For | Includes |
211
+ |---------|------:|----------|----------|
212
+ | `load_coder_loadout()` | ~105 | Dev, DevOps, automation | File system, system ops, network, logging, crypto, archive, configs |
213
+ | `load_docs_loadout()` | ~130 | Technical writing, reports | Word, PDF, Markdown, HTML, diagrams, images, text |
214
+ | `load_data_analyst_loadout()` | ~115 | Data/financial analysis, BI | Excel, CSV, validation, diagrams, JSON, YAML, XML |
215
+ | `load_web_publisher_loadout()` | ~90 | Web dev, content management | HTML, XML, Markdown, network, text processing |
216
+ | `load_visual_designer_loadout()` | ~60 | Graphics, infographics | Image processing, diagrams, color tools |
217
+ | `load_office_suite_loadout()` | ~80 | Office productivity | Excel, Word, PowerPoint, file operations |
218
+
219
+ ## Tool Loaders
220
+
221
+ Beyond loadouts, build custom tool sets by combining loaders:
222
+
223
+ ```python
224
+ import basic_open_agent_tools as boat
225
+
226
+ # Use-case focused loaders
227
+ boat.load_essential() # ~23 most commonly needed tools
228
+ boat.load_core_readonly() # 28 read-only tools (filesystem, text, data parsing)
229
+ boat.load_converters() # 78 pure transformation tools (text, datetime, crypto, color)
230
+ boat.load_document_readers() # Extract content from PDF, Word, Excel, PowerPoint, images
231
+ boat.load_writers() # All file creation/modification tools
232
+ boat.load_analyst_tools() # Data analysis and validation tools
233
+ boat.load_web_tools() # HTML, Markdown, network operations
234
+ boat.load_devtools() # Debugging, logging, performance measurement
235
+ boat.load_structured_data_tools() # CSV, JSON, XML, YAML, TOML, INI
236
+ boat.load_office_suite() # Excel, Word, PowerPoint tools
237
+ boat.load_markup_tools() # HTML, Markdown, XML processing
238
+
239
+ # Per-module loaders (21 total — one for each module)
240
+ boat.load_all_filesystem_tools()
241
+ boat.load_all_text_tools()
242
+ boat.load_all_data_tools()
243
+ # ... etc.
244
+
245
+ # Combine and deduplicate
246
+ custom = boat.merge_tool_lists(
247
+ boat.load_all_filesystem_tools(),
248
+ boat.load_all_text_tools(),
249
+ boat.load_all_data_tools(),
250
+ )
251
+
252
+ # Inspect available tools
253
+ boat.list_all_available_tools() # List all tool names
254
+ boat.get_tool_info(some_tool) # Get tool metadata
255
+ ```
256
+
257
+ ## Safety Features
258
+
259
+ All write/delete operations include a `skip_confirm` parameter with three modes:
260
+
261
+ | Mode | When | Behavior |
262
+ |------|------|----------|
263
+ | **Bypass** | `skip_confirm=True` or `BYPASS_TOOL_CONSENT=true` env var | Proceeds immediately — for CI/CD and automation |
264
+ | **Interactive** | Terminal with `skip_confirm=False` | Prompts user with `y/n` and preview info |
265
+ | **Agent** | Non-TTY with `skip_confirm=False` | Raises `CONFIRMATION_REQUIRED` error; LLM can ask user and retry |
266
+
267
+ ```python
268
+ # Safe by default — adapts to context
269
+ boat.file_system.write_file_from_string(
270
+ file_path="/tmp/example.txt",
271
+ content="Hello, World!",
272
+ skip_confirm=False # Interactive prompt OR agent error
273
+ )
274
+
275
+ # Explicit bypass
276
+ boat.file_system.write_file_from_string(
277
+ file_path="/tmp/example.txt",
278
+ content="Updated content",
279
+ skip_confirm=True
280
+ )
281
+ ```
282
+
283
+ ## Documentation
284
+
285
+ - **[Getting Started](docs/getting-started.md)** — Installation and setup
286
+ - **[API Reference](docs/api-reference.md)** — Complete function reference
287
+ - **[Examples](docs/examples.md)** — Usage examples and patterns
288
+ - **[FAQ](docs/faq.md)** — Troubleshooting and common questions
289
+ - **[Contributing](docs/contributing.md)** — Development guidelines
290
+ - **[Changelog](CHANGELOG.md)** — Version history
291
+
292
+ ## Contributing
293
+
294
+ We welcome contributions! See our [Contributing Guide](docs/contributing.md) for development setup, coding standards, and pull request process.
295
+
296
+ ## License
297
+
298
+ MIT License — see [LICENSE](LICENSE) for details.
@@ -0,0 +1,188 @@
1
+ # basic-open-agent-tools
2
+
3
+ An open foundational toolkit providing essential components for building AI agents with minimal dependencies for local (non-HTTP/API) actions.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install basic-open-agent-tools
9
+ ```
10
+
11
+ Or with UV:
12
+ ```bash
13
+ uv add basic-open-agent-tools
14
+ ```
15
+
16
+ ### Optional Dependencies
17
+
18
+ ```bash
19
+ pip install basic-open-agent-tools[all] # Everything
20
+ pip install basic-open-agent-tools[system] # Process management, system info
21
+ pip install basic-open-agent-tools[pdf] # PDF reading and creation
22
+ pip install basic-open-agent-tools[xml] # XML parsing and validation
23
+ pip install basic-open-agent-tools[word] # Word document operations
24
+ pip install basic-open-agent-tools[excel] # Excel spreadsheet operations
25
+ pip install basic-open-agent-tools[powerpoint] # PowerPoint presentations
26
+ pip install basic-open-agent-tools[image] # Image processing
27
+ pip install basic-open-agent-tools[data] # YAML and TOML support
28
+ ```
29
+
30
+ ## Quick Start
31
+
32
+ ```python
33
+ import basic_open_agent_tools as boat
34
+
35
+ # Essential tools for general-purpose agents (~23 tools)
36
+ tools = boat.load_essential()
37
+
38
+ # Pre-configured loadouts for specific roles
39
+ tools = boat.load_coder_loadout() # ~105 tools for development
40
+ tools = boat.load_docs_loadout() # ~130 tools for documentation
41
+ tools = boat.load_data_analyst_loadout() # ~115 tools for data analysis
42
+ tools = boat.load_web_publisher_loadout() # ~90 tools for web content
43
+ tools = boat.load_visual_designer_loadout() # ~60 tools for graphics
44
+ tools = boat.load_office_suite_loadout() # ~80 tools for Office work
45
+
46
+ # Or load everything
47
+ tools = boat.load_all_tools() # All 337 functions
48
+
49
+ # Use with any agent framework
50
+ from google.adk.agents import Agent
51
+ agent = Agent(tools=boat.load_coder_loadout())
52
+ ```
53
+
54
+ ## Available Modules
55
+
56
+ **21 modules** with **337 total functions** — all with `@strands_tool` decorator and Google ADK compatible signatures.
57
+
58
+ | Module | Count | Description |
59
+ |--------|------:|-------------|
60
+ | **Core Operations** | | |
61
+ | `file_system` | 19 | File/directory operations, tree generation |
62
+ | `text` | 10 | Text processing, case conversion, formatting |
63
+ | `data` | 23 | JSON, CSV, YAML, TOML processing and validation |
64
+ | `datetime` | 46 | Date/time operations, timezones, formatting, parsing |
65
+ | **Document Processing** | | |
66
+ | `excel` | 24 | Spreadsheet reading, writing, formatting, charts |
67
+ | `xml` | 24 | XML parsing, authoring, validation, transformation |
68
+ | `pdf` | 20 | PDF creation, reading, manipulation |
69
+ | `word` | 18 | Word document operations and formatting |
70
+ | `html` | 17 | HTML generation and parsing |
71
+ | `diagrams` | 16 | Mermaid and PlantUML diagram generation |
72
+ | `markdown` | 17 | Markdown generation, parsing, HTML conversion |
73
+ | `powerpoint` | 10 | PowerPoint presentation operations |
74
+ | **System & Network** | | |
75
+ | `system` | 19 | Shell commands, process management, environment |
76
+ | `network` | 4 | HTTP client, DNS lookup, port checking |
77
+ | `utilities` | 8 | Debugging, timing, performance tools |
78
+ | **Security & Data** | | |
79
+ | `crypto` | 14 | Hashing, encoding, UUID/token generation |
80
+ | `color` | 14 | Color conversion, palette generation, analysis |
81
+ | `image` | 12 | Image manipulation and metadata reading |
82
+ | `archive` | 9 | ZIP, TAR, GZIP, BZIP2, XZ compression |
83
+ | **Task Management** | | |
84
+ | `todo` | 8 | Task creation, validation, management |
85
+ | `logging` | 5 | Structured logging and log rotation |
86
+
87
+ ## Key Features
88
+
89
+ - **Agent-Friendly** — Simplified type signatures prevent "signature too complex" errors
90
+ - **Minimal Dependencies** — Pure Python core; optional deps only when needed
91
+ - **Modular** — Load only what you need
92
+ - **Multi-Framework** — Works with Google ADK, LangChain, Strands Agents, custom frameworks
93
+ - **Smart Confirmations** — Write/delete operations adapt to interactive, agent, or automation contexts
94
+ - **Pre-configured Loadouts** — 6 curated tool bundles optimized for specific use cases
95
+
96
+ ## Loadouts
97
+
98
+ Choose the right loadout for your agent's role to minimize token usage and maximize relevance:
99
+
100
+ | Loadout | Tools | Best For | Includes |
101
+ |---------|------:|----------|----------|
102
+ | `load_coder_loadout()` | ~105 | Dev, DevOps, automation | File system, system ops, network, logging, crypto, archive, configs |
103
+ | `load_docs_loadout()` | ~130 | Technical writing, reports | Word, PDF, Markdown, HTML, diagrams, images, text |
104
+ | `load_data_analyst_loadout()` | ~115 | Data/financial analysis, BI | Excel, CSV, validation, diagrams, JSON, YAML, XML |
105
+ | `load_web_publisher_loadout()` | ~90 | Web dev, content management | HTML, XML, Markdown, network, text processing |
106
+ | `load_visual_designer_loadout()` | ~60 | Graphics, infographics | Image processing, diagrams, color tools |
107
+ | `load_office_suite_loadout()` | ~80 | Office productivity | Excel, Word, PowerPoint, file operations |
108
+
109
+ ## Tool Loaders
110
+
111
+ Beyond loadouts, build custom tool sets by combining loaders:
112
+
113
+ ```python
114
+ import basic_open_agent_tools as boat
115
+
116
+ # Use-case focused loaders
117
+ boat.load_essential() # ~23 most commonly needed tools
118
+ boat.load_core_readonly() # 28 read-only tools (filesystem, text, data parsing)
119
+ boat.load_converters() # 78 pure transformation tools (text, datetime, crypto, color)
120
+ boat.load_document_readers() # Extract content from PDF, Word, Excel, PowerPoint, images
121
+ boat.load_writers() # All file creation/modification tools
122
+ boat.load_analyst_tools() # Data analysis and validation tools
123
+ boat.load_web_tools() # HTML, Markdown, network operations
124
+ boat.load_devtools() # Debugging, logging, performance measurement
125
+ boat.load_structured_data_tools() # CSV, JSON, XML, YAML, TOML, INI
126
+ boat.load_office_suite() # Excel, Word, PowerPoint tools
127
+ boat.load_markup_tools() # HTML, Markdown, XML processing
128
+
129
+ # Per-module loaders (21 total — one for each module)
130
+ boat.load_all_filesystem_tools()
131
+ boat.load_all_text_tools()
132
+ boat.load_all_data_tools()
133
+ # ... etc.
134
+
135
+ # Combine and deduplicate
136
+ custom = boat.merge_tool_lists(
137
+ boat.load_all_filesystem_tools(),
138
+ boat.load_all_text_tools(),
139
+ boat.load_all_data_tools(),
140
+ )
141
+
142
+ # Inspect available tools
143
+ boat.list_all_available_tools() # List all tool names
144
+ boat.get_tool_info(some_tool) # Get tool metadata
145
+ ```
146
+
147
+ ## Safety Features
148
+
149
+ All write/delete operations include a `skip_confirm` parameter with three modes:
150
+
151
+ | Mode | When | Behavior |
152
+ |------|------|----------|
153
+ | **Bypass** | `skip_confirm=True` or `BYPASS_TOOL_CONSENT=true` env var | Proceeds immediately — for CI/CD and automation |
154
+ | **Interactive** | Terminal with `skip_confirm=False` | Prompts user with `y/n` and preview info |
155
+ | **Agent** | Non-TTY with `skip_confirm=False` | Raises `CONFIRMATION_REQUIRED` error; LLM can ask user and retry |
156
+
157
+ ```python
158
+ # Safe by default — adapts to context
159
+ boat.file_system.write_file_from_string(
160
+ file_path="/tmp/example.txt",
161
+ content="Hello, World!",
162
+ skip_confirm=False # Interactive prompt OR agent error
163
+ )
164
+
165
+ # Explicit bypass
166
+ boat.file_system.write_file_from_string(
167
+ file_path="/tmp/example.txt",
168
+ content="Updated content",
169
+ skip_confirm=True
170
+ )
171
+ ```
172
+
173
+ ## Documentation
174
+
175
+ - **[Getting Started](docs/getting-started.md)** — Installation and setup
176
+ - **[API Reference](docs/api-reference.md)** — Complete function reference
177
+ - **[Examples](docs/examples.md)** — Usage examples and patterns
178
+ - **[FAQ](docs/faq.md)** — Troubleshooting and common questions
179
+ - **[Contributing](docs/contributing.md)** — Development guidelines
180
+ - **[Changelog](CHANGELOG.md)** — Version history
181
+
182
+ ## Contributing
183
+
184
+ We welcome contributions! See our [Contributing Guide](docs/contributing.md) for development setup, coding standards, and pull request process.
185
+
186
+ ## License
187
+
188
+ MIT License — see [LICENSE](LICENSE) for details.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta:__legacy__"
4
4
 
5
5
  [project]
6
6
  name = "basic-open-agent-tools"
7
- version = "1.3.0"
7
+ version = "1.3.2"
8
8
  description = "An open foundational toolkit providing essential components for building AI agents with minimal dependencies for local (non-HTTP/API) actions."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -108,7 +108,7 @@ dev = [
108
108
  "tomli>=2.0.0; python_version < '3.11'",
109
109
  "tomli-w>=1.0.0",
110
110
  "pyyaml>=6.0.0",
111
- "google-adk>=0.1.0",
111
+ "google-adk[eval]>=0.1.0",
112
112
  "psutil>=5.9.0",
113
113
  "PyPDF2>=3.0.0",
114
114
  "reportlab>=4.0.0",
@@ -131,7 +131,7 @@ test = [
131
131
  "tomli>=2.0.0; python_version < '3.11'",
132
132
  "tomli-w>=1.0.0",
133
133
  "pyyaml>=6.0.0",
134
- "google-adk>=0.1.0",
134
+ "google-adk[eval]>=0.1.0",
135
135
  "psutil>=5.9.0",
136
136
  "PyPDF2>=3.0.0",
137
137
  "reportlab>=4.0.0",
@@ -191,10 +191,18 @@ warn_unused_ignores = false # Changed: optional strands import creates unused i
191
191
  warn_no_return = true
192
192
  warn_unreachable = true
193
193
  strict_equality = true
194
+ exclude = [
195
+ 'venv',
196
+ '.venv',
197
+ 'env',
198
+ '.env',
199
+ ]
194
200
 
195
201
  [[tool.mypy.overrides]]
196
202
  module = ["strands", "strands.*", "pkg_resources", "PyPDF2", "reportlab", "reportlab.*", "docx", "docx.*", "openpyxl", "openpyxl.*", "pptx", "pptx.*", "PIL", "PIL.*", "defusedxml", "defusedxml.*"]
197
203
  ignore_missing_imports = true
204
+ follow_imports = "skip"
205
+ ignore_errors = true
198
206
 
199
207
  [tool.pytest.ini_options]
200
208
  testpaths = ["tests"]
@@ -4,7 +4,7 @@ An open foundational toolkit providing essential components for building AI agen
4
4
  with minimal dependencies for local (non-HTTP/API) actions.
5
5
  """
6
6
 
7
- __version__ = "1.3.0"
7
+ __version__ = "1.3.2"
8
8
 
9
9
  # Modular structure
10
10
  from . import (
@@ -1163,8 +1163,9 @@ def load_essential() -> list[Callable[..., Any]]:
1163
1163
  Perfect for agents that need basic file operations, data processing,
1164
1164
  and common utilities without overwhelming them with specialized tools.
1165
1165
 
1166
- Includes (~22 essential tools):
1167
- - File I/O: read, write, list, check existence (7 tools)
1166
+ Includes (~24 essential tools):
1167
+ - File I/O: read, write, list, check existence, cwd (8 tools)
1168
+ - Shell: execute shell commands (1 tool)
1168
1169
  - Data: JSON/CSV/YAML read/write (6 tools)
1169
1170
  - Text: whitespace cleaning (1 tool)
1170
1171
  - Time: current date and datetime (2 tools)
@@ -1178,7 +1179,7 @@ def load_essential() -> list[Callable[..., Any]]:
1178
1179
 
1179
1180
  Example:
1180
1181
  >>> essential_tools = load_essential()
1181
- >>> len(essential_tools) >= 20
1182
+ >>> len(essential_tools) >= 22
1182
1183
  True
1183
1184
  >>> # Use for a general-purpose agent
1184
1185
  >>> agent = Agent(
@@ -1199,11 +1200,12 @@ def load_essential() -> list[Callable[..., Any]]:
1199
1200
  write_file_from_string,
1200
1201
  )
1201
1202
  from .network import http_request
1203
+ from .system import execute_shell_command, get_current_directory
1202
1204
  from .text import clean_whitespace
1203
1205
 
1204
1206
  tools: list[Callable[..., Any]] = []
1205
1207
 
1206
- # Core file operations (7 tools)
1208
+ # Core file operations (8 tools)
1207
1209
  tools.extend(
1208
1210
  [
1209
1211
  read_file_to_string,
@@ -1213,6 +1215,7 @@ def load_essential() -> list[Callable[..., Any]]:
1213
1215
  file_exists,
1214
1216
  directory_exists,
1215
1217
  delete_file,
1218
+ get_current_directory,
1216
1219
  ]
1217
1220
  )
1218
1221
 
@@ -1237,6 +1240,9 @@ def load_essential() -> list[Callable[..., Any]]:
1237
1240
  # Crypto utilities (2 tools)
1238
1241
  tools.extend([hash_sha256, generate_uuid])
1239
1242
 
1243
+ # Shell (1 tool)
1244
+ tools.append(execute_shell_command)
1245
+
1240
1246
  # Network (1 tool)
1241
1247
  tools.append(http_request)
1242
1248
 
@@ -242,6 +242,9 @@ def _build_id_mapping(
242
242
  ) -> dict[int, int]:
243
243
  """Build mapping of old IDs to new IDs for renumbering.
244
244
 
245
+ Only renumber tasks that have ID conflicts with current tasks.
246
+ Non-conflicting tasks keep their original IDs.
247
+
245
248
  Args:
246
249
  file_tasks: Tasks from file (keyed by task ID)
247
250
  current_tasks: Current tasks in memory (keyed by task ID)
@@ -251,20 +254,26 @@ def _build_id_mapping(
251
254
  Dictionary mapping old_id -> new_id
252
255
  """
253
256
  id_mapping = {}
254
- current_next_id = next_id
255
257
 
256
- # Sort file tasks by ID for consistent numbering
258
+ # Assign IDs: conflicts get new IDs, non-conflicts keep original
257
259
  for old_id in sorted(file_tasks.keys()):
258
- if old_id in current_tasks:
259
- # Conflict - assign new ID
260
- id_mapping[old_id] = current_next_id
261
- current_next_id += 1
262
- else:
260
+ if old_id not in current_tasks:
263
261
  # No conflict - keep original ID
264
262
  id_mapping[old_id] = old_id
265
- # Update next_id if we're using a higher ID
266
- if old_id >= current_next_id:
267
- current_next_id = old_id + 1
263
+ # Conflicts will be handled in the next loop
264
+
265
+ # Now handle conflicts by assigning sequential IDs
266
+ used_ids = set(current_tasks.keys()) | set(id_mapping.values())
267
+ new_id = next_id
268
+
269
+ for old_id in sorted(file_tasks.keys()):
270
+ if old_id in current_tasks:
271
+ # Conflict - find next available ID
272
+ while new_id in used_ids:
273
+ new_id += 1
274
+ id_mapping[old_id] = new_id
275
+ used_ids.add(new_id)
276
+ new_id += 1
268
277
 
269
278
  return id_mapping
270
279