tsugite-cli 0.25.3__tar.gz → 0.25.4__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 (183) hide show
  1. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/PKG-INFO +1 -1
  2. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/pyproject.toml +1 -1
  3. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/sqlite.py +8 -0
  4. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/.gitignore +0 -0
  5. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/AGENTS.md +0 -0
  6. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/CONTRIBUTING.md +0 -0
  7. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/LICENSE +0 -0
  8. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/README.md +0 -0
  9. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/__init__.py +0 -0
  10. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_inheritance.py +0 -0
  11. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_preparation.py +0 -0
  12. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/__init__.py +0 -0
  13. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/exec_directives.py +0 -0
  14. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/exec_runner.py +0 -0
  15. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/helpers.py +0 -0
  16. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/history_integration.py +0 -0
  17. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/metrics.py +0 -0
  18. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/models.py +0 -0
  19. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/runner.py +0 -0
  20. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/steps.py +0 -0
  21. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_runner/validation.py +0 -0
  22. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/agent_utils.py +0 -0
  23. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/approval.py +0 -0
  24. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/__init__.py +0 -0
  25. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/agent_config.py +0 -0
  26. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/auto_context.py +0 -0
  27. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/base.py +0 -0
  28. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/delegation.py +0 -0
  29. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/file.py +0 -0
  30. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/inline.py +0 -0
  31. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/storage.py +0 -0
  32. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/attachments/url.py +0 -0
  33. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/.gitkeep +0 -0
  34. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/code_searcher.md +0 -0
  35. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/default.md +0 -0
  36. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/file_searcher.md +0 -0
  37. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/job_verifier.md +0 -0
  38. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/job_worker.md +0 -0
  39. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_agents/onboard.md +0 -0
  40. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_context.py +0 -0
  41. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/.gitkeep +0 -0
  42. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/codebase-exploration/SKILL.md +0 -0
  43. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/external-agent-bridge/SKILL.md +0 -0
  44. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/python-math/SKILL.md +0 -0
  45. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/response-patterns/SKILL.md +0 -0
  46. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/scheduling/SKILL.md +0 -0
  47. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/skill-authoring/SKILL.md +0 -0
  48. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/tsugite-agent-basics/SKILL.md +0 -0
  49. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/tsugite-jinja-reference/SKILL.md +0 -0
  50. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/builtin_skills/tsugite-skill-basics/SKILL.md +0 -0
  51. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cache.py +0 -0
  52. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cancellation.py +0 -0
  53. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/__init__.py +0 -0
  54. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/agents.py +0 -0
  55. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/attachments.py +0 -0
  56. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/cache.py +0 -0
  57. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/chat.py +0 -0
  58. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/config.py +0 -0
  59. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/daemon.py +0 -0
  60. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/exec.py +0 -0
  61. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/helpers.py +0 -0
  62. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/history.py +0 -0
  63. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/init.py +0 -0
  64. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/models.py +0 -0
  65. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/plugins.py +0 -0
  66. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/render.py +0 -0
  67. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/run.py +0 -0
  68. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/secrets.py +0 -0
  69. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/skills.py +0 -0
  70. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/tools.py +0 -0
  71. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/usage.py +0 -0
  72. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/validate.py +0 -0
  73. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/cli/workspace.py +0 -0
  74. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/config.py +0 -0
  75. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/console.py +0 -0
  76. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/constants.py +0 -0
  77. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/context.py +0 -0
  78. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/context_block.py +0 -0
  79. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/__init__.py +0 -0
  80. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/agent.py +0 -0
  81. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/content_blocks.py +0 -0
  82. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/executor.py +0 -0
  83. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/executor_registry.py +0 -0
  84. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/memory.py +0 -0
  85. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/proxy.py +0 -0
  86. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/record_store.py +0 -0
  87. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/sandbox.py +0 -0
  88. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/state.py +0 -0
  89. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/subprocess_executor.py +0 -0
  90. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/core/tools.py +0 -0
  91. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/daemon_client.py +0 -0
  92. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/events/__init__.py +0 -0
  93. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/events/base.py +0 -0
  94. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/events/bus.py +0 -0
  95. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/events/events.py +0 -0
  96. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/events/helpers.py +0 -0
  97. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/exceptions.py +0 -0
  98. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/__init__.py +0 -0
  99. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/base.py +0 -0
  100. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/models.py +0 -0
  101. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/reconstruction.py +0 -0
  102. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/registry.py +0 -0
  103. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/sqlite_backend.py +0 -0
  104. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/sqlite_conn.py +0 -0
  105. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/sqlite_schema.py +0 -0
  106. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/history/ui_events.py +0 -0
  107. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/hooks.py +0 -0
  108. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/interaction.py +0 -0
  109. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/md_agents.py +0 -0
  110. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/models.py +0 -0
  111. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/options.py +0 -0
  112. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/permissions.py +0 -0
  113. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/plugins.py +0 -0
  114. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/prompt_xml.py +0 -0
  115. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/__init__.py +0 -0
  116. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/anthropic.py +0 -0
  117. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/base.py +0 -0
  118. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/model_cache.py +0 -0
  119. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/model_registry.py +0 -0
  120. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/ollama.py +0 -0
  121. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/openai_compat.py +0 -0
  122. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/providers/openrouter.py +0 -0
  123. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/py.typed +0 -0
  124. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/renderer.py +0 -0
  125. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/schemas/__init__.py +0 -0
  126. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/schemas/agent.schema.json +0 -0
  127. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/__init__.py +0 -0
  128. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/backend.py +0 -0
  129. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/env.py +0 -0
  130. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/exec.py +0 -0
  131. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/file.py +0 -0
  132. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/masking.py +0 -0
  133. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/redaction.py +0 -0
  134. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/secrets/registry.py +0 -0
  135. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/shell_tool_config.py +0 -0
  136. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/skill_discovery.py +0 -0
  137. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/AGENTS.md +0 -0
  138. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/IDENTITY.md +0 -0
  139. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/MEMORY.md +0 -0
  140. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/USER.md +0 -0
  141. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/personas/casual-technical.md +0 -0
  142. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/personas/marvin.md +0 -0
  143. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/templates/personas/minimal.md +0 -0
  144. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/__init__.py +0 -0
  145. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/agents.py +0 -0
  146. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/artifacts.py +0 -0
  147. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/daemon_control.py +0 -0
  148. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/fs.py +0 -0
  149. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/history.py +0 -0
  150. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/http.py +0 -0
  151. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/interactive.py +0 -0
  152. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/jobs.py +0 -0
  153. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/notify.py +0 -0
  154. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/schedule.py +0 -0
  155. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/secrets.py +0 -0
  156. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/sessions.py +0 -0
  157. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/shell.py +0 -0
  158. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/shell_tools.py +0 -0
  159. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/skills.py +0 -0
  160. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tools/time.py +0 -0
  161. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/tsugite.py +0 -0
  162. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/__init__.py +0 -0
  163. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/base.py +0 -0
  164. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/chat.py +0 -0
  165. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/dispatch.py +0 -0
  166. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/helpers.py +0 -0
  167. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/jsonl.py +0 -0
  168. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/plain.py +0 -0
  169. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/repl_chat.py +0 -0
  170. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/repl_commands.py +0 -0
  171. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/repl_completer.py +0 -0
  172. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui/repl_handler.py +0 -0
  173. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui_context.py +0 -0
  174. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/ui_surfaces.py +0 -0
  175. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/usage/__init__.py +0 -0
  176. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/usage/quota.py +0 -0
  177. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/usage/store.py +0 -0
  178. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/user_agent.py +0 -0
  179. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/utils.py +0 -0
  180. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/workspace/__init__.py +0 -0
  181. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/workspace/models.py +0 -0
  182. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/workspace/session.py +0 -0
  183. {tsugite_cli-0.25.3 → tsugite_cli-0.25.4}/tsugite/workspace/templates.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tsugite-cli
3
- Version: 0.25.3
3
+ Version: 0.25.4
4
4
  Summary: Micro-agent runner for task automation using markdown definitions
5
5
  Author: Justyn Shull
6
6
  License: GNU AFFERO GENERAL PUBLIC LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tsugite-cli"
3
- version = "0.25.3"
3
+ version = "0.25.4"
4
4
  description = "Micro-agent runner for task automation using markdown definitions"
5
5
  authors = [{ name = "Justyn Shull" }]
6
6
  requires-python = ">=3.11"
@@ -75,6 +75,14 @@ class SqliteSecretBackend:
75
75
  return self._passphrase_value
76
76
 
77
77
  def _keychain_passphrase(self) -> str:
78
+ import fcntl
79
+
80
+ self._db_path.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
81
+ with open(self._db_path.with_name(self._db_path.name + ".lock"), "a") as lock:
82
+ fcntl.flock(lock, fcntl.LOCK_EX)
83
+ return self._lookup_or_create_key()
84
+
85
+ def _lookup_or_create_key(self) -> str:
78
86
  account = self._keychain_account
79
87
  key = _keychain_lookup(account)
80
88
  if key:
File without changes
File without changes
File without changes
File without changes