oasr 0.4.0__tar.gz → 0.4.1__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 (139) hide show
  1. {oasr-0.4.0 → oasr-0.4.1}/CHANGELOG.md +6 -2
  2. {oasr-0.4.0 → oasr-0.4.1}/PKG-INFO +1 -1
  3. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/CLONE.md +0 -1
  4. {oasr-0.4.0 → oasr-0.4.1}/pyproject.toml +1 -1
  5. {oasr-0.4.0 → oasr-0.4.1}/src/cli.py +1 -1
  6. {oasr-0.4.0 → oasr-0.4.1}/src/commands/exec.py +3 -8
  7. {oasr-0.4.0 → oasr-0.4.1}/tests/test_exec.py +3 -9
  8. {oasr-0.4.0 → oasr-0.4.1}/.gitignore +0 -0
  9. {oasr-0.4.0 → oasr-0.4.1}/CONTRIBUTING.md +0 -0
  10. {oasr-0.4.0 → oasr-0.4.1}/LICENSE +0 -0
  11. {oasr-0.4.0 → oasr-0.4.1}/NOTICE +0 -0
  12. {oasr-0.4.0 → oasr-0.4.1}/README.md +0 -0
  13. {oasr-0.4.0 → oasr-0.4.1}/docs/.INDEX.md +0 -0
  14. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/adapter.png +0 -0
  15. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/add-glob.png +0 -0
  16. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/add-remote.png +0 -0
  17. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/add.png +0 -0
  18. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/find-add.png +0 -0
  19. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/find.png +0 -0
  20. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/help.png +0 -0
  21. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/info.png +0 -0
  22. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/list.png +0 -0
  23. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/rm-glob.png +0 -0
  24. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/rm.png +0 -0
  25. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/status.png +0 -0
  26. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/sync-update.png +0 -0
  27. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/sync.png +0 -0
  28. {oasr-0.4.0 → oasr-0.4.1}/docs/.images/use.png +0 -0
  29. {oasr-0.4.0 → oasr-0.4.1}/docs/QUICKSTART.md +0 -0
  30. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/.INDEX.md +0 -0
  31. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/ADAPTER.md +0 -0
  32. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/ADD.md +0 -0
  33. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/CLEAN.md +0 -0
  34. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/CONFIG.md +0 -0
  35. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/DIFF.md +0 -0
  36. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/EXEC.md +0 -0
  37. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/FIND.md +0 -0
  38. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/HELP.md +0 -0
  39. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/INFO.md +0 -0
  40. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/LIST.md +0 -0
  41. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/REGISTRY.md +0 -0
  42. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/RM.md +0 -0
  43. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/ROOT.md +0 -0
  44. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/STATUS.md +0 -0
  45. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/SYNC.md +0 -0
  46. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/UPDATE.md +0 -0
  47. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/USE.md +0 -0
  48. {oasr-0.4.0 → oasr-0.4.1}/docs/commands/VALIDATE.md +0 -0
  49. {oasr-0.4.0 → oasr-0.4.1}/docs/validation/.INDEX.md +0 -0
  50. {oasr-0.4.0 → oasr-0.4.1}/docs/validation/ERRORS.md +0 -0
  51. {oasr-0.4.0 → oasr-0.4.1}/docs/validation/INFO.md +0 -0
  52. {oasr-0.4.0 → oasr-0.4.1}/docs/validation/RULES.md +0 -0
  53. {oasr-0.4.0 → oasr-0.4.1}/docs/validation/WARNINGS.md +0 -0
  54. {oasr-0.4.0 → oasr-0.4.1}/doctor/SKILL.md +0 -0
  55. {oasr-0.4.0 → oasr-0.4.1}/doctor/assets/schemas/session.schema.yaml +0 -0
  56. {oasr-0.4.0 → oasr-0.4.1}/doctor/assets/schemas/treatment.schema.yaml +0 -0
  57. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/00_ROUTER.md +0 -0
  58. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/01_SUMMARY.md +0 -0
  59. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/02_TRIGGERS.md +0 -0
  60. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/03_ALWAYS.md +0 -0
  61. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/04_NEVER.md +0 -0
  62. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/05_PROCEDURE.md +0 -0
  63. {oasr-0.4.0 → oasr-0.4.1}/doctor/references/06_FAILURES.md +0 -0
  64. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/include/.doctor/session.yaml +0 -0
  65. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/include/doctor_cli.py +0 -0
  66. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/include/doctor_parse.py +0 -0
  67. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/include/pyproject.toml +0 -0
  68. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/include/uv.lock +0 -0
  69. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/router_checks.sh +0 -0
  70. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/skill.ps1 +0 -0
  71. {oasr-0.4.0 → oasr-0.4.1}/doctor/scripts/skill.sh +0 -0
  72. {oasr-0.4.0 → oasr-0.4.1}/install.ps1 +0 -0
  73. {oasr-0.4.0 → oasr-0.4.1}/install.sh +0 -0
  74. {oasr-0.4.0 → oasr-0.4.1}/llms.txt +0 -0
  75. {oasr-0.4.0 → oasr-0.4.1}/scripts/README.md +0 -0
  76. {oasr-0.4.0 → oasr-0.4.1}/scripts/fix.sh +0 -0
  77. {oasr-0.4.0 → oasr-0.4.1}/scripts/lint.sh +0 -0
  78. {oasr-0.4.0 → oasr-0.4.1}/scripts/test.sh +0 -0
  79. {oasr-0.4.0 → oasr-0.4.1}/src/__init__.py +0 -0
  80. {oasr-0.4.0 → oasr-0.4.1}/src/__main__.py +0 -0
  81. {oasr-0.4.0 → oasr-0.4.1}/src/adapter.py +0 -0
  82. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/__init__.py +0 -0
  83. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/base.py +0 -0
  84. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/claude.py +0 -0
  85. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/codex.py +0 -0
  86. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/copilot.py +0 -0
  87. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/cursor.py +0 -0
  88. {oasr-0.4.0 → oasr-0.4.1}/src/adapters/windsurf.py +0 -0
  89. {oasr-0.4.0 → oasr-0.4.1}/src/agents/__init__.py +0 -0
  90. {oasr-0.4.0 → oasr-0.4.1}/src/agents/base.py +0 -0
  91. {oasr-0.4.0 → oasr-0.4.1}/src/agents/claude.py +0 -0
  92. {oasr-0.4.0 → oasr-0.4.1}/src/agents/codex.py +0 -0
  93. {oasr-0.4.0 → oasr-0.4.1}/src/agents/copilot.py +0 -0
  94. {oasr-0.4.0 → oasr-0.4.1}/src/agents/opencode.py +0 -0
  95. {oasr-0.4.0 → oasr-0.4.1}/src/agents/registry.py +0 -0
  96. {oasr-0.4.0 → oasr-0.4.1}/src/commands/__init__.py +0 -0
  97. {oasr-0.4.0 → oasr-0.4.1}/src/commands/adapter.py +0 -0
  98. {oasr-0.4.0 → oasr-0.4.1}/src/commands/add.py +0 -0
  99. {oasr-0.4.0 → oasr-0.4.1}/src/commands/clean.py +0 -0
  100. {oasr-0.4.0 → oasr-0.4.1}/src/commands/clone.py +0 -0
  101. {oasr-0.4.0 → oasr-0.4.1}/src/commands/config.py +0 -0
  102. {oasr-0.4.0 → oasr-0.4.1}/src/commands/diff.py +0 -0
  103. {oasr-0.4.0 → oasr-0.4.1}/src/commands/find.py +0 -0
  104. {oasr-0.4.0 → oasr-0.4.1}/src/commands/help.py +0 -0
  105. {oasr-0.4.0 → oasr-0.4.1}/src/commands/info.py +0 -0
  106. {oasr-0.4.0 → oasr-0.4.1}/src/commands/list.py +0 -0
  107. {oasr-0.4.0 → oasr-0.4.1}/src/commands/registry.py +0 -0
  108. {oasr-0.4.0 → oasr-0.4.1}/src/commands/rm.py +0 -0
  109. {oasr-0.4.0 → oasr-0.4.1}/src/commands/status.py +0 -0
  110. {oasr-0.4.0 → oasr-0.4.1}/src/commands/sync.py +0 -0
  111. {oasr-0.4.0 → oasr-0.4.1}/src/commands/update.py +0 -0
  112. {oasr-0.4.0 → oasr-0.4.1}/src/commands/use.py +0 -0
  113. {oasr-0.4.0 → oasr-0.4.1}/src/commands/validate.py +0 -0
  114. {oasr-0.4.0 → oasr-0.4.1}/src/config/__init__.py +0 -0
  115. {oasr-0.4.0 → oasr-0.4.1}/src/config/defaults.py +0 -0
  116. {oasr-0.4.0 → oasr-0.4.1}/src/config/schema.py +0 -0
  117. {oasr-0.4.0 → oasr-0.4.1}/src/discovery.py +0 -0
  118. {oasr-0.4.0 → oasr-0.4.1}/src/manifest.py +0 -0
  119. {oasr-0.4.0 → oasr-0.4.1}/src/registry.py +0 -0
  120. {oasr-0.4.0 → oasr-0.4.1}/src/remote.py +0 -0
  121. {oasr-0.4.0 → oasr-0.4.1}/src/skillcopy/__init__.py +0 -0
  122. {oasr-0.4.0 → oasr-0.4.1}/src/skillcopy/local.py +0 -0
  123. {oasr-0.4.0 → oasr-0.4.1}/src/skillcopy/remote.py +0 -0
  124. {oasr-0.4.0 → oasr-0.4.1}/src/tracking.py +0 -0
  125. {oasr-0.4.0 → oasr-0.4.1}/src/validate.py +0 -0
  126. {oasr-0.4.0 → oasr-0.4.1}/tests/conftest.py +0 -0
  127. {oasr-0.4.0 → oasr-0.4.1}/tests/test_adapters.py +0 -0
  128. {oasr-0.4.0 → oasr-0.4.1}/tests/test_agents.py +0 -0
  129. {oasr-0.4.0 → oasr-0.4.1}/tests/test_clone.py +0 -0
  130. {oasr-0.4.0 → oasr-0.4.1}/tests/test_config.py +0 -0
  131. {oasr-0.4.0 → oasr-0.4.1}/tests/test_config_command.py +0 -0
  132. {oasr-0.4.0 → oasr-0.4.1}/tests/test_copy.py +0 -0
  133. {oasr-0.4.0 → oasr-0.4.1}/tests/test_help.py +0 -0
  134. {oasr-0.4.0 → oasr-0.4.1}/tests/test_list.py +0 -0
  135. {oasr-0.4.0 → oasr-0.4.1}/tests/test_multi_skill.py +0 -0
  136. {oasr-0.4.0 → oasr-0.4.1}/tests/test_remote.py +0 -0
  137. {oasr-0.4.0 → oasr-0.4.1}/tests/test_tracking.py +0 -0
  138. {oasr-0.4.0 → oasr-0.4.1}/tests/test_use_glob.py +0 -0
  139. {oasr-0.4.0 → oasr-0.4.1}/uv.lock +0 -0
@@ -4,9 +4,13 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [Unreleased]
7
+ ## [0.4.1] - 2026-02-01
8
8
 
9
- ## [0.4.0] - TBD
9
+ ### Fixed
10
+ - **exec command**: Fixed `CompletedProcess` attribute error where code incorrectly referenced `.success`, `.output`, and `.error` attributes that don't exist. Now correctly uses `.returncode`
11
+ - **clone documentation**: Removed non-existent `-r, --recursive` flag from CLONE.md documentation
12
+
13
+ ## [0.4.0] - 2026-01-31
10
14
 
11
15
  ### Added
12
16
  - **🚀 `oasr exec` command** — Execute skills as CLI tools from anywhere
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oasr
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: CLI for managing agent skills across IDE integrations
5
5
  Project-URL: Homepage, https://github.com/jgodau/asr
6
6
  Project-URL: Repository, https://github.com/jgodau/asr
@@ -17,7 +17,6 @@ oasr clone skill-one skill-two # Multiple skills
17
17
  ## Options
18
18
 
19
19
  - `-d, --dest DIR` — Destination directory (default: current directory)
20
- - `-r, --recursive` — Create destination directory if it doesn't exist
21
20
  - `--quiet` — Suppress informational output
22
21
  - `--json` — Output results in JSON format
23
22
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "oasr"
7
- version = "0.4.0"
7
+ version = "0.4.1"
8
8
  description = "CLI for managing agent skills across IDE integrations"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -13,7 +13,7 @@ from pathlib import Path
13
13
  from commands import adapter, clean, clone, config, diff, exec, find, registry, sync, update, use, validate
14
14
  from commands import help as help_cmd
15
15
 
16
- __version__ = "0.4.0"
16
+ __version__ = "0.4.1"
17
17
 
18
18
 
19
19
  def main(argv: list[str] | None = None) -> int:
@@ -104,14 +104,9 @@ def run(args: argparse.Namespace) -> int:
104
104
 
105
105
  try:
106
106
  result = driver.execute(skill_content, user_prompt)
107
- if result.success:
108
- # Print agent output to stdout (this is the actual result)
109
- print(result.output)
110
- return 0
111
- else:
112
- print("\nError executing skill:", file=sys.stderr)
113
- print(result.error, file=sys.stderr)
114
- return 1
107
+ # CompletedProcess has returncode attribute (0 = success)
108
+ # Output was already streamed to stdout since capture_output=False
109
+ return result.returncode
115
110
  except Exception as e:
116
111
  print(f"\nUnexpected error: {e}", file=sys.stderr)
117
112
  return 1
@@ -107,8 +107,7 @@ class TestExecCommand:
107
107
  )
108
108
 
109
109
  mock_result = mock.Mock()
110
- mock_result.success = True
111
- mock_result.output = "Agent output here"
110
+ mock_result.returncode = 0 # Success
112
111
 
113
112
  mock_driver = mock.Mock()
114
113
  mock_driver.execute.return_value = mock_result
@@ -122,7 +121,6 @@ class TestExecCommand:
122
121
 
123
122
  assert result == 0
124
123
  captured = capsys.readouterr()
125
- assert "Agent output here" in captured.out
126
124
  assert "Executing skill 'test-skill' with codex" in captured.err
127
125
 
128
126
  # Verify driver was called with skill content and prompt
@@ -143,8 +141,7 @@ class TestExecCommand:
143
141
  )
144
142
 
145
143
  mock_result = mock.Mock()
146
- mock_result.success = False
147
- mock_result.error = "Agent failed with error"
144
+ mock_result.returncode = 1 # Failure
148
145
 
149
146
  mock_driver = mock.Mock()
150
147
  mock_driver.execute.return_value = mock_result
@@ -157,8 +154,6 @@ class TestExecCommand:
157
154
  result = exec_cmd.run(args)
158
155
 
159
156
  assert result == 1
160
- captured = capsys.readouterr()
161
- assert "Agent failed with error" in captured.err
162
157
 
163
158
  def test_exec_with_explicit_agent(self, capsys, mock_registry):
164
159
  """Test exec with explicit agent flag."""
@@ -172,8 +167,7 @@ class TestExecCommand:
172
167
  )
173
168
 
174
169
  mock_result = mock.Mock()
175
- mock_result.success = True
176
- mock_result.output = "Success"
170
+ mock_result.returncode = 0 # Success
177
171
 
178
172
  mock_driver = mock.Mock()
179
173
  mock_driver.execute.return_value = mock_result
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
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
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
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
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
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
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
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
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
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes